Compare commits
	
		
			63 Commits
		
	
	
		
			bb6bfc5ab6
			...
			projects/l
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| ab486dd71b | |||
| 0b689b5452 | |||
| bbd9972761 | |||
| 8e9b2f6444 | |||
| c83a7afadb | |||
| b43876fe67 | |||
| f143c5e2d9 | |||
| 0b03e6d44b | |||
| 19dbe38458 | |||
| 43ba33062b | |||
| ca390fd764 | |||
| 8ad8e3a5b4 | |||
| 6ca512392c | |||
| a73502cda7 | |||
| e32530e459 | |||
| 64e1c1869d | |||
| 93ac1c4742 | |||
| a650f0ad9d | |||
| e237737830 | |||
| 09cce6c613 | |||
| 07dd135daa | |||
| 0757d2d47c | |||
| 4fbe72d314 | |||
| 10219fd841 | |||
| 74a2a3b8e5 | |||
| c3b4223e5b | |||
| 070e01c2c4 | |||
| 2665b6a0b0 | |||
| a71fb90e6a | |||
| ac85c83cf9 | |||
| c2e987aee4 | |||
| 0e4ed597cd | |||
| 3e7914ac91 | |||
| 9c19a6197a | |||
| 074b35b6a6 | |||
| 9be57ad750 | |||
| f7313c5911 | |||
| a7e81ad8fb | |||
| 32cbf9076f | |||
| 9a411cc663 | |||
|  | 445a88e540 | ||
|  | 2b355aaf8f | ||
| f60a46ed1d | |||
| 2688896660 | |||
|  | 4a67e226e1 | ||
|  | 11ee0d6541 | ||
| 98b3237c9a | |||
|  | 46aaa47e07 | ||
| ca0f62b2eb | |||
| 5534104e87 | |||
| b72fe1bfed | |||
| f4493bde1c | |||
|  | d682ecc91c | ||
|  | 2b76ef7d23 | ||
| 9ec13b35b8 | |||
| 7acccd3de0 | |||
| e40f45a79a | |||
| 77083a84a1 | |||
| 9f53ea6981 | |||
| 8f634d012c | |||
| 03c573d5b2 | |||
| 348714edaf | |||
| 814fe4605a | 
							
								
								
									
										12
									
								
								.env.dev
									
									
									
									
									
								
							
							
						
						| @@ -1,21 +1,19 @@ | |||||||
| ### | ### | ||||||
|  # @Author: Do not edit |  # @Author: Do not edit | ||||||
|  # @Date: 2023-08-29 09:40:39 |  # @Date: 2023-08-29 09:40:39 | ||||||
|  # @LastEditTime: 2023-09-18 10:44:07 |  # @LastEditTime: 2024-11-25 14:31:39 | ||||||
|  # @LastEditors: DY |  # @LastEditors: zwq | ||||||
|  # @Description: |  # @Description: | ||||||
| ### | ### | ||||||
| # 开发环境配置 | # 开发环境配置 | ||||||
| ENV = 'development' | ENV = 'development' | ||||||
|  |  | ||||||
| # 页面标题 | # 页面标题 | ||||||
| VUE_APP_TITLE = 产线监控系统 | VUE_APP_TITLE = 智能监控分析系统 | ||||||
|  |  | ||||||
| # 芋道管理系统/开发环境 | # 芋道管理系统/开发环境 | ||||||
| # VUE_APP_BASE_API = 'http://192.168.1.49:48080' | # VUE_APP_BASE_API = 'http://192.168.8.22:48080' | ||||||
| # VUE_APP_BASE_API = 'http://192.168.1.8:48080' | VUE_APP_BASE_API = 'http://172.16.32.79:48082' | ||||||
| VUE_APP_BASE_API = 'http://192.168.0.33:48080' |  | ||||||
| # VUE_APP_BASE_API = 'http://192.168.1.188:48080' |  | ||||||
|  |  | ||||||
| # 路由懒加载 | # 路由懒加载 | ||||||
| VUE_CLI_BABEL_TRANSPILE_MODULES = true | VUE_CLI_BABEL_TRANSPILE_MODULES = true | ||||||
|   | |||||||
							
								
								
									
										15
									
								
								.env.prod
									
									
									
									
									
								
							
							
						
						| @@ -1,15 +1,24 @@ | |||||||
|  | ### | ||||||
|  |  # @Author: zwq | ||||||
|  |  # @Date: 2024-03-27 15:49:55 | ||||||
|  |  # @LastEditors: zwq | ||||||
|  |  # @LastEditTime: 2024-10-30 11:08:47 | ||||||
|  |  # @Description: | ||||||
|  | ### | ||||||
| # 生产环境配置 | # 生产环境配置 | ||||||
| ENV = 'production' | ENV = 'production' | ||||||
|  |  | ||||||
| # 页面标题 | # 页面标题 | ||||||
| VUE_APP_TITLE = 产线监控系统 | VUE_APP_TITLE = 智能监控分析系统 | ||||||
|  |  | ||||||
| # 芋道管理系统/生产环境 | # 芋道管理系统/生产环境 | ||||||
| VUE_APP_BASE_API = '/prod-api' | # VUE_APP_BASE_API = '/prod-api' | ||||||
|  | VUE_APP_BASE_API = '' | ||||||
|  |  | ||||||
| # 根据服务器或域名修改 | # 根据服务器或域名修改 | ||||||
| # PUBLIC_PATH = 'http://my-pi.com:8888/yudao-admin/' | # PUBLIC_PATH = 'http://my-pi.com:8888/yudao-admin/' | ||||||
| PUBLIC_PATH = 'http://192.168.0.33:8888/' | # PUBLIC_PATH = 'http://192.168.0.33:8888/' | ||||||
|  | PUBLIC_PATH = '' | ||||||
|  |  | ||||||
| # 二级部署路径 | # 二级部署路径 | ||||||
| VUE_APP_APP_NAME ='yudao-admin' | VUE_APP_APP_NAME ='yudao-admin' | ||||||
|   | |||||||
| @@ -6,9 +6,9 @@ | |||||||
|   "license": "MIT", |   "license": "MIT", | ||||||
|   "scripts": { |   "scripts": { | ||||||
|     "local": "vue-cli-service serve --mode local", |     "local": "vue-cli-service serve --mode local", | ||||||
|     "dev": "vue-cli-service serve --mode dev", |     "dev": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve --mode dev", | ||||||
|     "front": "vue-cli-service serve --mode front", |     "front": "vue-cli-service serve --mode front", | ||||||
|     "build:prod": "vue-cli-service build --mode prod", |     "build:prod": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service build --mode prod", | ||||||
|     "build:stage": "vue-cli-service build --mode stage", |     "build:stage": "vue-cli-service build --mode stage", | ||||||
|     "build:dev": "vue-cli-service build --mode dev", |     "build:dev": "vue-cli-service build --mode dev", | ||||||
|     "build:static": "vue-cli-service build --mode static", |     "build:static": "vue-cli-service build --mode static", | ||||||
| @@ -42,6 +42,7 @@ | |||||||
|   }, |   }, | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "@babel/parser": "7.18.4", |     "@babel/parser": "7.18.4", | ||||||
|  |     "@jiaminghi/data-view": "^2.10.0", | ||||||
|     "@riophae/vue-treeselect": "0.4.0", |     "@riophae/vue-treeselect": "0.4.0", | ||||||
|     "axios": "0.27.2", |     "axios": "0.27.2", | ||||||
|     "benz-amr-recorder": "^1.1.5", |     "benz-amr-recorder": "^1.1.5", | ||||||
| @@ -52,6 +53,7 @@ | |||||||
|     "crypto-js": "^4.0.0", |     "crypto-js": "^4.0.0", | ||||||
|     "diagram-js": "^12.3.0", |     "diagram-js": "^12.3.0", | ||||||
|     "echarts": "5.4.0", |     "echarts": "5.4.0", | ||||||
|  |     "el-tree-transfer": "^2.4.7", | ||||||
|     "element-ui": "2.15.12", |     "element-ui": "2.15.12", | ||||||
|     "file-saver": "^2.0.5", |     "file-saver": "^2.0.5", | ||||||
|     "fuse.js": "6.6.2", |     "fuse.js": "6.6.2", | ||||||
| @@ -75,7 +77,7 @@ | |||||||
|     "vue-count-to": "1.0.13", |     "vue-count-to": "1.0.13", | ||||||
|     "vue-cropper": "0.5.8", |     "vue-cropper": "0.5.8", | ||||||
|     "vue-meta": "^2.4.0", |     "vue-meta": "^2.4.0", | ||||||
|     "vue-plugin-hiprint": "^0.0.54-fix", |     "vue-plugin-hiprint": "0.0.54-fix", | ||||||
|     "vue-quill-editor": "^3.0.6", |     "vue-quill-editor": "^3.0.6", | ||||||
|     "vue-router": "3.4.9", |     "vue-router": "3.4.9", | ||||||
|     "vue-video-player": "^5.0.2", |     "vue-video-player": "^5.0.2", | ||||||
|   | |||||||
							
								
								
									
										
											BIN
										
									
								
								public/static/videos/login.webm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										86
									
								
								src/api/base/energyQuantityManual.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,86 @@ | |||||||
|  | /* | ||||||
|  |  * @Author: zwq | ||||||
|  |  * @Date: 2024-04-11 15:00:03 | ||||||
|  |  * @LastEditors: zwq | ||||||
|  |  * @LastEditTime: 2024-04-12 10:25:30 | ||||||
|  |  * @Description: | ||||||
|  |  */ | ||||||
|  | import request from '@/utils/request' | ||||||
|  |  | ||||||
|  | // 获得分页数据 | ||||||
|  | export function energyQuantityManualPage(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/energy-quantity-manual/page', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 创建 | ||||||
|  | export function energyQuantityManualCreate(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/energy-quantity-manual/create', | ||||||
|  |     method: 'post', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 更新 | ||||||
|  | export function energyQuantityManualUpdate(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/energy-quantity-manual/update', | ||||||
|  |     method: 'put', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | //获得能源抄表(手动) | ||||||
|  | export function energyQuantityManualGet(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/energy-quantity-manual/get', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | //删除 | ||||||
|  | export function energyQuantityManualDelete(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/energy-quantity-manual/delete', | ||||||
|  |     method: 'delete', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | //导出 | ||||||
|  | export function energyQuantityManualExport(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/energy-quantity-manual/export-excel', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query, | ||||||
|  |     responseType: 'blob' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | // 获得能源表名配置分页 | ||||||
|  | export function energyTablePage() { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/energy-type-meter-bind/list', | ||||||
|  |     method: 'get', | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | // 获得能源表名配置 | ||||||
|  | export function energyTableGet(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/energy-type-meter-bind/list', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | // 更新能源表名配置 | ||||||
|  | export function energyTableUpdate(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/energy-type-meter-bind/update', | ||||||
|  |     method: 'put', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
							
								
								
									
										53
									
								
								src/api/base/equipmentConfig.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,53 @@ | |||||||
|  | /* | ||||||
|  |  * @Author: Do not edit | ||||||
|  |  * @Date: 2024-02-21 13:43:02 | ||||||
|  |  * @LastEditTime: 2024-04-30 10:07:59 | ||||||
|  |  * @LastEditors: zwq | ||||||
|  |  * @Description: | ||||||
|  |  */ | ||||||
|  | import request from '@/utils/request' | ||||||
|  |  | ||||||
|  | // 获得关联表名 | ||||||
|  | export function getplcAllList(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/equipment-plc/listAll', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 获得设备 | ||||||
|  | export function getEquipmentList(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/core-equipment/page', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 根据产线获得工段 | ||||||
|  | export function listByParentId(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/core-workshop-section/listByParentId', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 获得产线工段设备树形结构 | ||||||
|  | export function getTree(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/factory/getTree', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 获得设备分组列表 | ||||||
|  | export function getgroupAllList(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/equipment-group/listAll', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
| @@ -1,3 +1,10 @@ | |||||||
|  | /* | ||||||
|  |  * @Author: zwq | ||||||
|  |  * @Date: 2024-10-29 09:47:40 | ||||||
|  |  * @LastEditors: zwq | ||||||
|  |  * @LastEditTime: 2025-02-26 16:27:48 | ||||||
|  |  * @Description: | ||||||
|  |  */ | ||||||
| import request from '@/utils/request' | import request from '@/utils/request' | ||||||
|  |  | ||||||
| // 创建实时数据采集配置 | // 创建实时数据采集配置 | ||||||
| @@ -52,3 +59,11 @@ export function exportEquipmentPlcExcel(query) { | |||||||
|     responseType: 'blob' |     responseType: 'blob' | ||||||
|   }) |   }) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // 获得code | ||||||
|  | export function getCode() { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/equipment-group/getCode', | ||||||
|  |     method: 'get' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|   | |||||||
| @@ -1,3 +1,10 @@ | |||||||
|  | /* | ||||||
|  |  * @Author: zwq | ||||||
|  |  * @Date: 2024-10-29 09:47:40 | ||||||
|  |  * @LastEditors: zwq | ||||||
|  |  * @LastEditTime: 2025-02-12 09:25:11 | ||||||
|  |  * @Description: | ||||||
|  |  */ | ||||||
| import request from '@/utils/request' | import request from '@/utils/request' | ||||||
| // 获得工厂产线工段设备树形结构 | // 获得工厂产线工段设备树形结构 | ||||||
| export function getTree() { | export function getTree() { | ||||||
|   | |||||||
| @@ -51,6 +51,13 @@ export function getCode() { | |||||||
|   }) |   }) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // 获得可用的班次列表 | ||||||
|  | export function listClassesEnabled() { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/group-classes/listEnable', | ||||||
|  |     method: 'get' | ||||||
|  |   }) | ||||||
|  | } | ||||||
| // 导出班次基础信息 Excel | // 导出班次基础信息 Excel | ||||||
| export function exportGroupClassesExcel(query) { | export function exportGroupClassesExcel(query) { | ||||||
|   return request({ |   return request({ | ||||||
|   | |||||||
							
								
								
									
										125
									
								
								src/api/base/groupSchedulingPlan.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,125 @@ | |||||||
|  | import request from '@/utils/request' | ||||||
|  |  | ||||||
|  | // 创建排班计划配置基础信息 | ||||||
|  | export function createGroupPlan(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/group-scheduling-plan/create', | ||||||
|  |     method: 'post', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 更新排班计划配置基础信息 | ||||||
|  | export function updateGroupPlan(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/group-scheduling-plan/update', | ||||||
|  |     method: 'put', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 删除排班计划配置基础信息 | ||||||
|  | export function deleteGroupPlan(id) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/group-scheduling-plan/delete?id=' + id, | ||||||
|  |     method: 'delete' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 获得排班计划配置基础信息 | ||||||
|  | export function getGroupPlan(id) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/group-scheduling-plan/get?id=' + id, | ||||||
|  |     method: 'get' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 获得排班计划配置基础信息分页 | ||||||
|  | export function getGroupPlanPage(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/group-scheduling-plan/page', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 获得所有排班计划列表 | ||||||
|  | export function groupPlanList() { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/group-scheduling-plan/listAll', | ||||||
|  |     method: 'get' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | // 获得排班计划相关班组列表 | ||||||
|  | export function groupPlanTeamList(id) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/group-scheduling-plan-team/teamListByPlanId?planId=' + id, | ||||||
|  |     method: 'get' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | // 获得排班计划相关班次列表 | ||||||
|  | export function groupPlanClassesList(id) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/group-scheduling-plan-classes/classesListByPlanId?planId=' + id, | ||||||
|  |     method: 'get' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | // 获取code | ||||||
|  | export function getCode() { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/group-scheduling-plan/getCode', | ||||||
|  |     method: 'get' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 导出排班计划配置基础信息 Excel | ||||||
|  | export function exportGroupPlanExcel(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/group-scheduling-plan/export-excel', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query, | ||||||
|  |     responseType: 'blob' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 获得产线工段树形结构 | ||||||
|  | export function getGroupPlanTree() { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/group-scheduling-plan/getLineSectionTree', | ||||||
|  |     method: 'get' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 创建排班计划产线工段 | ||||||
|  | export function createGroupPlanLine(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/group-scheduling-plan-line-section/createPlanLineSection', | ||||||
|  |     method: 'post', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 更新排班计划产线工段 | ||||||
|  | export function updateGroupPlanLine(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/group-scheduling-plan-line-section/updatePlanLineSection', | ||||||
|  |     method: 'put', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 获得排班计划配置基础信息 | ||||||
|  | export function getGroupPlanLine(id) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/group-scheduling-plan-line-section/getLineSectionByPlanId?planId=' + id, | ||||||
|  |     method: 'get' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 获得当前登录用户所在部门id | ||||||
|  | export function getLoginUserDeptId() { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/group-scheduling-plan-line-section/getLoginUserDeptId', | ||||||
|  |     method: 'get' | ||||||
|  |   }) | ||||||
|  | } | ||||||
							
								
								
									
										60
									
								
								src/api/base/groupSchedulingRule.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,60 @@ | |||||||
|  | import request from '@/utils/request' | ||||||
|  |  | ||||||
|  | // 创建排班规则基础信息 | ||||||
|  | export function createGroupRule(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/group-scheduling-rule/create', | ||||||
|  |     method: 'post', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | // 作废排班规则 | ||||||
|  | export function disableGroupRule(id) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/group-scheduling-rule/disable?id=' + id, | ||||||
|  |     method: 'post', | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | // 更新排班规则基础信息 | ||||||
|  | export function updateGroupRule(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/group-scheduling-rule/update', | ||||||
|  |     method: 'put', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 删除排班规则基础信息 | ||||||
|  | export function deleteGroupRule(id) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/group-scheduling-rule/delete?id=' + id, | ||||||
|  |     method: 'delete' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 获得排班规则基础信息 | ||||||
|  | export function getGroupRule(id) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/group-scheduling-rule/get?id=' + id, | ||||||
|  |     method: 'get' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 获得排班规则基础信息分页 | ||||||
|  | export function getGroupRulePage(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/group-scheduling-rule/page', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 导出排班规则基础信息 Excel | ||||||
|  | export function exportGroupRuleExcel(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/group-scheduling-rule/export-excel', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query, | ||||||
|  |     responseType: 'blob' | ||||||
|  |   }) | ||||||
|  | } | ||||||
| @@ -58,3 +58,49 @@ export function listEnabled() { | |||||||
|     method: 'get' |     method: 'get' | ||||||
|   }) |   }) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // 获得班组组员信息分页 | ||||||
|  | export function groupTeamPage(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/group-team-det/page', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 获得班组组员信息 | ||||||
|  | export function groupTeamDet(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/group-team-det/get', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | // 创建班组组员信息 | ||||||
|  | export function teamDetCreate(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/group-team-det/create', | ||||||
|  |     method: 'post', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 更新班组组员信息 | ||||||
|  | export function teamDetUpdate(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/group-team-det/update', | ||||||
|  |     method: 'put', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 删除班组组员信息 | ||||||
|  | export function teamDetDelete(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/group-team-det/delete', | ||||||
|  |     method: 'delete', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|   | |||||||
| @@ -8,7 +8,14 @@ export function getPreset(query) { | |||||||
|     params: query |     params: query | ||||||
|   }) |   }) | ||||||
| } | } | ||||||
|  | // 获取某月预排班 | ||||||
|  | export function getScheduling(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/group-team-scheduling/getScheduling', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
| // 批量创建-更新排班信息 | // 批量创建-更新排班信息 | ||||||
| export function createOrUpdateList(data) { | export function createOrUpdateList(data) { | ||||||
|   return request({ |   return request({ | ||||||
| @@ -26,3 +33,22 @@ export function autoSet(query) { | |||||||
|     params: query |     params: query | ||||||
|   }) |   }) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // 获得排班信息分页 | ||||||
|  | export function schedulingPage(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/group-team-scheduling/page', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 导出Excel | ||||||
|  | export function exportSchedulingExcel(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/group-team-scheduling/export-excel', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query, | ||||||
|  |     responseType: 'blob' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|   | |||||||
							
								
								
									
										75
									
								
								src/api/base/material.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,75 @@ | |||||||
|  | /* | ||||||
|  |  * @Author: zwq | ||||||
|  |  * @Date: 2024-04-09 16:42:19 | ||||||
|  |  * @LastEditors: zwq | ||||||
|  |  * @LastEditTime: 2024-04-10 14:33:52 | ||||||
|  |  * @Description: | ||||||
|  |  */ | ||||||
|  | import request from '@/utils/request' | ||||||
|  |  | ||||||
|  | // 创建原料 | ||||||
|  | export function createMaterial(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/material/create', | ||||||
|  |     method: 'post', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 更新原料 | ||||||
|  | export function updateMaterial(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/material/update', | ||||||
|  |     method: 'put', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 获取code | ||||||
|  | export function getCode() { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/material/autoCode', | ||||||
|  |     method: 'POST' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | // 删除原料 | ||||||
|  | export function deleteMaterial(id) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/material/delete?id=' + id, | ||||||
|  |     method: 'delete' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 获得原料 | ||||||
|  | export function getMaterial(id) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/material/get?id=' + id, | ||||||
|  |     method: 'get' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 获得原料分页 | ||||||
|  | export function getMaterialPage(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/material/page', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | // 获得原料列表 | ||||||
|  | export function getMaterialList() { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/material/list', | ||||||
|  |     method: 'get', | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 导出原料 Excel | ||||||
|  | export function exportMaterialExcel(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/material/export-excel', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query, | ||||||
|  |     responseType: 'blob' | ||||||
|  |   }) | ||||||
|  | } | ||||||
							
								
								
									
										68
									
								
								src/api/base/materialPricing.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,68 @@ | |||||||
|  | /* | ||||||
|  |  * @Author: zwq | ||||||
|  |  * @Date: 2024-04-09 16:42:19 | ||||||
|  |  * @LastEditors: zwq | ||||||
|  |  * @LastEditTime: 2024-04-10 14:31:46 | ||||||
|  |  * @Description: | ||||||
|  |  */ | ||||||
|  | import request from '@/utils/request' | ||||||
|  |  | ||||||
|  | // 创建原料 | ||||||
|  | export function createMaterialPricing(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/material-pricing/create', | ||||||
|  |     method: 'post', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 更新原料 | ||||||
|  | export function updateMaterialPricing(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/material-pricing/update', | ||||||
|  |     method: 'put', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 获取code | ||||||
|  | export function getCode() { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/material-pricing/autoCode', | ||||||
|  |     method: 'POST' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | // 删除原料 | ||||||
|  | export function deleteMaterialPricing(id) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/material-pricing/delete?id=' + id, | ||||||
|  |     method: 'delete' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 获得原料 | ||||||
|  | export function getMaterialPricing(id) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/material-pricing/get?id=' + id, | ||||||
|  |     method: 'get' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 获得原料分页 | ||||||
|  | export function getMaterialPricingPage(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/material-pricing/page', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 导出原料 Excel | ||||||
|  | export function exportMaterialPricingExcel(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/material-pricing/export-excel', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query, | ||||||
|  |     responseType: 'blob' | ||||||
|  |   }) | ||||||
|  | } | ||||||
| @@ -1,3 +1,10 @@ | |||||||
|  | /* | ||||||
|  |  * @Author: zwq | ||||||
|  |  * @Date: 2024-03-27 15:49:55 | ||||||
|  |  * @LastEditors: zwq | ||||||
|  |  * @LastEditTime: 2024-09-10 14:36:19 | ||||||
|  |  * @Description: | ||||||
|  |  */ | ||||||
| import request from '@/utils/request' | import request from '@/utils/request' | ||||||
| // 获得所有工厂产线列表 | // 获得所有工厂产线列表 | ||||||
| export function getLineAll() { | export function getLineAll() { | ||||||
| @@ -6,3 +13,11 @@ export function getLineAll() { | |||||||
|     method: 'get' |     method: 'get' | ||||||
|   }) |   }) | ||||||
| } | } | ||||||
|  | // 获得产线分页 | ||||||
|  | export function getLinePage(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/production-line/page', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|   | |||||||
							
								
								
									
										26
									
								
								src/api/base/worker.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,26 @@ | |||||||
|  | import request from '@/utils/request' | ||||||
|  | // 获得所有员工列表 | ||||||
|  | export function getWorkerList() { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/core-worker/listAll', | ||||||
|  |     method: 'get' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 获得员工 | ||||||
|  | export function getWorker(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/core-worker/get', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 获得该班组其他可选组员列表(除去现有组员) | ||||||
|  | export function otherWorkerList(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/group-team-det/otherWorkerList', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
| @@ -1,8 +1,8 @@ | |||||||
| /* | /* | ||||||
|  * @Author: zhp |  * @Author: zhp | ||||||
|  * @Date: 2023-09-12 14:07:04 |  * @Date: 2023-09-12 14:07:04 | ||||||
|  * @LastEditTime: 2023-09-13 09:53:45 |  * @LastEditTime: 2025-01-08 15:47:17 | ||||||
|  * @LastEditors: zhp |  * @LastEditors: zwq | ||||||
|  * @Description: |  * @Description: | ||||||
|  */ |  */ | ||||||
| import request from '@/utils/request' | import request from '@/utils/request' | ||||||
| @@ -22,3 +22,26 @@ export function getCT(data) { | |||||||
|     data: data |     data: data | ||||||
|   }) |   }) | ||||||
| } | } | ||||||
|  | // 获取产线平衡分析数据(new) | ||||||
|  | export function getNewCTNow(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/analysis/production-analysis/getNewCTNow', | ||||||
|  |     method: 'post', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | // 获取产线平衡分析数据趋势图(new) | ||||||
|  | export function getNewCTCharts(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/analysis/production-analysis/getNewCTCharts', | ||||||
|  |     method: 'post', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | // 获取产线平衡分析数据设备list(new) | ||||||
|  | export function getNewCTDet(id) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/analysis/production-analysis/getNewCTDet?lineId='+id, | ||||||
|  |     method: 'get', | ||||||
|  |   }) | ||||||
|  | } | ||||||
|   | |||||||
| @@ -58,3 +58,12 @@ export function exportFactoryExcel(query) { | |||||||
|     responseType: 'blob' |     responseType: 'blob' | ||||||
|   }) |   }) | ||||||
| } | } | ||||||
|  | // 获取产线设备状态 | ||||||
|  | export function getLineEqStatus(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/production-line/getLineEqStatus', | ||||||
|  |     method: 'post', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										28
									
								
								src/api/core/base/lineBindProcess.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,28 @@ | |||||||
|  | import request from '@/utils/request' | ||||||
|  |  | ||||||
|  |  | ||||||
|  | // 切换工艺 | ||||||
|  | export function switchLineBindProcess(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/line-bind-process/switch', | ||||||
|  |     method: 'put', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | // 获得产线工艺目前生产工艺 | ||||||
|  | export function getLineBindProcessPage(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/line-bind-process/nowList', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 获得产线工艺log分页 | ||||||
|  | export function getLineBindProcessLogPage(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/line-bind-process/logPage', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
| @@ -16,6 +16,14 @@ export function switchLineBindProduct(data) { | |||||||
|     data: data |     data: data | ||||||
|   }) |   }) | ||||||
| } | } | ||||||
|  | // 切换产线是否可以自动 | ||||||
|  | export function switchAutoProduct(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/base/line-bind-product/switchAuto', | ||||||
|  |     method: 'put', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
| // 更新产线目前生产产品表 主要为更新 | // 更新产线目前生产产品表 主要为更新 | ||||||
| export function updateLineBindProduct(data) { | export function updateLineBindProduct(data) { | ||||||
|   return request({ |   return request({ | ||||||
|   | |||||||
| @@ -1,3 +1,10 @@ | |||||||
|  | /* | ||||||
|  |  * @Author: Do not edit | ||||||
|  |  * @Date: 2023-08-28 15:30:53 | ||||||
|  |  * @LastEditTime: 2023-10-13 17:08:33 | ||||||
|  |  * @LastEditors: DY | ||||||
|  |  * @Description:  | ||||||
|  |  */ | ||||||
| import request from '@/utils/request' | import request from '@/utils/request' | ||||||
|  |  | ||||||
| // 创建产线目前生产产品表 主要为更新 | // 创建产线目前生产产品表 主要为更新 | ||||||
| @@ -35,11 +42,11 @@ export function getLineBindProductLog(id) { | |||||||
| } | } | ||||||
|  |  | ||||||
| // 获得产线目前生产产品表 主要为更新分页 | // 获得产线目前生产产品表 主要为更新分页 | ||||||
| export function getLineBindProductLogPage(query) { | export function getLineBindProductLogPage(data) { | ||||||
|   return request({ |   return request({ | ||||||
|     url: '/base/line-bind-product-log/page', |     url: '/base/line-bind-product-log/page', | ||||||
|     method: 'get', |     method: 'post', | ||||||
|     params: query |     data: data | ||||||
|   }) |   }) | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| /* | /* | ||||||
|  * @Author: Do not edit |  * @Author: Do not edit | ||||||
|  * @Date: 2023-09-12 09:44:53 |  * @Date: 2023-09-12 09:44:53 | ||||||
|  * @LastEditTime: 2023-09-13 16:11:41 |  * @LastEditTime: 2025-01-07 09:57:36 | ||||||
|  * @LastEditors: DY |  * @LastEditors: zwq | ||||||
|  * @Description: |  * @Description: | ||||||
|  */ |  */ | ||||||
| import request from '@/utils/request' | import request from '@/utils/request' | ||||||
| @@ -17,9 +17,43 @@ export function getPdlAutoReport(data) { | |||||||
| } | } | ||||||
|  |  | ||||||
| // 获得所有工厂产线列表 | // 获得所有工厂产线列表 | ||||||
| export function getPdList() { | export function getPdList(id) { | ||||||
|   return request({ |   return request({ | ||||||
|     url: '/base/production-line/listAll', |     url: '/base/production-line/listAll' + (id ? '?id=' + id : ''), | ||||||
|     method: 'get' |     method: 'get' | ||||||
|   }) |   }) | ||||||
| } | } | ||||||
|  | // 获得产线自动报表 | ||||||
|  | export function getLineAuto(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/production-monitor/getPdlAutoReportNew', | ||||||
|  |     method: 'post', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 获得产品自动报表 | ||||||
|  | export function getProductAuto(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/production-monitor/getProcessAutoReportNew', | ||||||
|  |     method: 'post', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 班组自动报表分页 | ||||||
|  | export function getTeamReportPage(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/team-auto-report/page', | ||||||
|  |     method: 'post', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 班组自动报表分页详细 | ||||||
|  | export function getTeamReportPageDet(id) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/team-auto-report/pageDet?id=' + id, | ||||||
|  |     method: 'get', | ||||||
|  |   }) | ||||||
|  | } | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| /* | /* | ||||||
|  * @Author: Do not edit |  * @Author: Do not edit | ||||||
|  * @Date: 2023-09-12 09:44:53 |  * @Date: 2023-09-12 09:44:53 | ||||||
|  * @LastEditTime: 2023-09-14 10:25:46 |  * @LastEditTime: 2025-03-03 10:43:34 | ||||||
|  * @LastEditors: DY |  * @LastEditors: zwq | ||||||
|  * @Description: |  * @Description: | ||||||
|  */ |  */ | ||||||
| import request from '@/utils/request' | import request from '@/utils/request' | ||||||
| @@ -23,3 +23,21 @@ export function getPdList() { | |||||||
|     method: 'get' |     method: 'get' | ||||||
|   }) |   }) | ||||||
| } | } | ||||||
|  | // 产线统计数据查询-历史 | ||||||
|  | export function getPdlAutoReportNewSearch(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/production-monitor/getPdlAutoReportNewSearch', | ||||||
|  |     method: 'post', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 产线统计数据查询-当前 | ||||||
|  | export function getPdlAutoReportNewSearchNow(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/production-monitor/getPdlAutoReportNewSearchNow', | ||||||
|  |     method: 'post', | ||||||
|  |     data: data, | ||||||
|  |     timeout: 60000, | ||||||
|  |   }) | ||||||
|  | } | ||||||
|   | |||||||
							
								
								
									
										54
									
								
								src/api/cost/allCost.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,54 @@ | |||||||
|  | /* | ||||||
|  |  * @Author: zwq | ||||||
|  |  * @Date: 2024-04-18 16:53:17 | ||||||
|  |  * @LastEditors: zwq | ||||||
|  |  * @LastEditTime: 2024-09-06 14:35:13 | ||||||
|  |  * @Description: | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | import request from '@/utils/request' | ||||||
|  |  | ||||||
|  | // 获得总成本统计-按日期分页 | ||||||
|  | export function getCostSumPage(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-sum/page', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | // 更新总成本统计-按日期 | ||||||
|  | export function updateCostSum(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-sum/update', | ||||||
|  |     method: 'put', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | // 获得原片成本统计成本查询分页 | ||||||
|  | export function getRawCostStatisticsRealtimePage(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-sum/page', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 导出总成本统计-按日期 Excel | ||||||
|  | export function exportCostSumExcel(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-sum/export-excel', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query, | ||||||
|  |     responseType: 'blob' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 导出原片成本统计-历史成本 Excel | ||||||
|  | export function exportRawCostStatisticsHisExcel(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-sum/export-excel', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query, | ||||||
|  |     responseType: 'blob' | ||||||
|  |   }) | ||||||
|  | } | ||||||
							
								
								
									
										55
									
								
								src/api/cost/costDeepRatioHis.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,55 @@ | |||||||
|  | /* | ||||||
|  |  * @Author: zwq | ||||||
|  |  * @Date: 2024-04-18 16:53:17 | ||||||
|  |  * @LastEditors: zwq | ||||||
|  |  * @LastEditTime: 2024-09-06 15:00:09 | ||||||
|  |  * @Description: | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | import request from '@/utils/request' | ||||||
|  | // 更新深加工良品率 | ||||||
|  | export function updateDeepRatioHis(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-deep-ratio-his/update', | ||||||
|  |     method: 'put', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | // 获得深加工产线良品率 | ||||||
|  | export function getDeepPDRatioHisPage(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-deep-ratio-his/page-pd', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | // 获得深加工工段良品率 | ||||||
|  | export function getDeepWSRatioHisPage(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-deep-ratio-his/page-ws', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 导出深加工工段良品率 Excel | ||||||
|  | export function exportDeepWSRatioHisExcel(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-deep-ratio-his/export-excel-ws', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query, | ||||||
|  |     responseType: 'blob' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | // 导出深加工产线良品率 Excel | ||||||
|  | export function exportDeepPDRatioHisExcel(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-deep-ratio-his/export-excel-pd', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query, | ||||||
|  |     responseType: 'blob' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										53
									
								
								src/api/cost/costEnergy.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,53 @@ | |||||||
|  | /* | ||||||
|  |  * @Author: zwq | ||||||
|  |  * @Date: 2024-04-18 16:53:17 | ||||||
|  |  * @LastEditors: zwq | ||||||
|  |  * @LastEditTime: 2024-04-19 16:11:19 | ||||||
|  |  * @Description: | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | import request from '@/utils/request' | ||||||
|  | // 更新原片能源历史 | ||||||
|  | export function updateEnergyHis(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-energy-his/update', | ||||||
|  |     method: 'put', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | // 获得原片能源历史分页 | ||||||
|  | export function getEnergyHisPage(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-energy-his/page', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 获得原片能源-成本查询分页 | ||||||
|  | export function getEnergyRealtimePage(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-energy-realtime/page', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | // 导出能源成本成本查询 Excel | ||||||
|  | export function exportEnergyRealtimeExcel(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-energy-realtime/export-excel', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query, | ||||||
|  |     responseType: 'blob' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 导出能源成本历史 Excel | ||||||
|  | export function exportEnergyHisExcel(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-energy-his/export-excel', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query, | ||||||
|  |     responseType: 'blob' | ||||||
|  |   }) | ||||||
|  | } | ||||||
							
								
								
									
										54
									
								
								src/api/cost/costEnergyDeep.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,54 @@ | |||||||
|  | /* | ||||||
|  |  * @Author: zwq | ||||||
|  |  * @Date: 2024-04-18 16:53:17 | ||||||
|  |  * @LastEditors: zwq | ||||||
|  |  * @LastEditTime: 2024-09-06 15:19:24 | ||||||
|  |  * @Description: | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | import request from '@/utils/request' | ||||||
|  | // 更新深加工能源历史 | ||||||
|  | export function updateEnergyHis(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-deep-energy-his/update', | ||||||
|  |     method: 'put', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | // 获得深加工能源历史分页 | ||||||
|  | export function getEnergyHisPage(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-deep-energy-his/page', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 获得深加工能源-成本查询分页 | ||||||
|  | export function getEnergyRealtimePage(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-deep-energy-realtime/page', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 导出深加工能源成本成本查询 Excel | ||||||
|  | export function exportEnergyRealtimeExcel(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-deep-energy-realtime/export-excel', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query, | ||||||
|  |     responseType: 'blob' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 导出深加工能源成本历史 Excel | ||||||
|  | export function exportEnergyHisExcel(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-deep-energy-his/export-excel', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query, | ||||||
|  |     responseType: 'blob' | ||||||
|  |   }) | ||||||
|  | } | ||||||
							
								
								
									
										54
									
								
								src/api/cost/costMaterial.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,54 @@ | |||||||
|  | /* | ||||||
|  |  * @Author: zwq | ||||||
|  |  * @Date: 2024-04-18 16:53:17 | ||||||
|  |  * @LastEditors: zwq | ||||||
|  |  * @LastEditTime: 2024-09-05 13:55:30 | ||||||
|  |  * @Description: | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | import request from '@/utils/request' | ||||||
|  | // 更新原料成本-历史 | ||||||
|  | export function updateMaterialHis(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-material-his/update', | ||||||
|  |     method: 'put', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | // 获得原料成本-历史分页 | ||||||
|  | export function getMaterialHisPage(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-material-his/page', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 获得原料成本-成本查询分页 | ||||||
|  | export function getMaterialRealtimePage(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-material-realtime/page', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 导出原料成本成本查询 Excel | ||||||
|  | export function exportMaterialRealtimeExcel(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-material-realtime/export-excel', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query, | ||||||
|  |     responseType: 'blob' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 导出原料成本历史 Excel | ||||||
|  | export function exportMaterialHisExcel(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-material-his/export-excel', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query, | ||||||
|  |     responseType: 'blob' | ||||||
|  |   }) | ||||||
|  | } | ||||||
							
								
								
									
										36
									
								
								src/api/cost/costOriginRatioHis.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,36 @@ | |||||||
|  | /* | ||||||
|  |  * @Author: zwq | ||||||
|  |  * @Date: 2024-04-18 16:53:17 | ||||||
|  |  * @LastEditors: zwq | ||||||
|  |  * @LastEditTime: 2024-04-22 10:53:55 | ||||||
|  |  * @Description: | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | import request from '@/utils/request' | ||||||
|  | // 更新原片良品率 | ||||||
|  | export function updatecostOriginRatioHis(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-origin-ratio-his/update', | ||||||
|  |     method: 'put', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | // 获得原片良品率 | ||||||
|  | export function getcostOriginRatioHisPage(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-origin-ratio-his/page', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 导出原片良品率 Excel | ||||||
|  | export function exportcostOriginRatioHisExcel(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-origin-ratio-his/export-excel', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query, | ||||||
|  |     responseType: 'blob' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										53
									
								
								src/api/cost/costOthercostHis.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,53 @@ | |||||||
|  | /* | ||||||
|  |  * @Author: zwq | ||||||
|  |  * @Date: 2024-04-18 16:53:17 | ||||||
|  |  * @LastEditors: zwq | ||||||
|  |  * @LastEditTime: 2024-04-19 14:24:17 | ||||||
|  |  * @Description: | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | import request from '@/utils/request' | ||||||
|  | // 更新原片其他成本-历史 | ||||||
|  | export function updateRawOthercostHis(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-othercost-his/update', | ||||||
|  |     method: 'put', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | // 获得原片其他成本-历史分页 | ||||||
|  | export function getRawOthercostHisPage(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-othercost-his/page', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 获得原片其他成本-成本查询分页 | ||||||
|  | export function getRawOthercostSunPage(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-othercost-log/page-sum', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | // 导出原片其他成本-成本查询 Excel | ||||||
|  | export function exportRawOthercostSunExcel(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-othercost-log/export-excel', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query, | ||||||
|  |     responseType: 'blob' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 导出原片其他成本-历史 Excel | ||||||
|  | export function exportRawOthercostHisExcel(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-othercost-his/export-excel', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query, | ||||||
|  |     responseType: 'blob' | ||||||
|  |   }) | ||||||
|  | } | ||||||
							
								
								
									
										53
									
								
								src/api/cost/costOthercostHisDeep.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,53 @@ | |||||||
|  | /* | ||||||
|  |  * @Author: zwq | ||||||
|  |  * @Date: 2024-04-18 16:53:17 | ||||||
|  |  * @LastEditors: zwq | ||||||
|  |  * @LastEditTime: 2024-09-06 15:13:20 | ||||||
|  |  * @Description: | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | import request from '@/utils/request' | ||||||
|  | // 更新深加工其他成本-历史 | ||||||
|  | export function updateRawOthercostHis(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-deep-othercost-his/update', | ||||||
|  |     method: 'put', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | // 获得深加工其他成本-历史分页 | ||||||
|  | export function getRawOthercostHisPage(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-deep-othercost-his/page', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 获得深加工其他成本-成本查询分页 | ||||||
|  | export function getRawOthercostSunPage(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-deep-othercost-log/page-sum', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | // 导出深加工其他成本-成本查询 Excel | ||||||
|  | export function exportRawOthercostSunExcel(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-deep-othercost-log/export-excel', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query, | ||||||
|  |     responseType: 'blob' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 导出深加工其他成本-历史 Excel | ||||||
|  | export function exportRawOthercostHisExcel(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-deep-othercost-his/export-excel', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query, | ||||||
|  |     responseType: 'blob' | ||||||
|  |   }) | ||||||
|  | } | ||||||
							
								
								
									
										68
									
								
								src/api/cost/costOthercostLog.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,68 @@ | |||||||
|  | /* | ||||||
|  |  * @Author: zwq | ||||||
|  |  * @Date: 2024-04-15 17:01:20 | ||||||
|  |  * @LastEditors: zwq | ||||||
|  |  * @LastEditTime: 2024-09-06 14:12:09 | ||||||
|  |  * @Description: | ||||||
|  |  */ | ||||||
|  | import request from '@/utils/request' | ||||||
|  |  | ||||||
|  | // 创建原片其他成本-记录 | ||||||
|  | export function createRawOthercostLog(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-othercost-log/create', | ||||||
|  |     method: 'post', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 更新原片其他成本-记录 | ||||||
|  | export function updateRawOthercostLog(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-othercost-log/update', | ||||||
|  |     method: 'put', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 删除原片其他成本-记录 | ||||||
|  | export function deleteRawOthercostLog(id) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-othercost-log/delete?id=' + id, | ||||||
|  |     method: 'delete' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 获得原片其他成本-记录 | ||||||
|  | export function getRawOthercostLog(id) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-othercost-log/get?id=' + id, | ||||||
|  |     method: 'get' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 获得原片其他成本-记录分页 | ||||||
|  | export function getRawOthercostLogPage(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-othercost-log/page', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 导出原片其他成本-记录 Excel | ||||||
|  | export function exportRawOthercostLogExcel(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-othercost-log/export-log-excel', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query, | ||||||
|  |     responseType: 'blob' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | // 获得所有原片其他成本-记录列表 | ||||||
|  | export function getRawOthercostLogAll() { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-othercost-log/listAll', | ||||||
|  |     method: 'get' | ||||||
|  |   }) | ||||||
|  | } | ||||||
							
								
								
									
										68
									
								
								src/api/cost/costOthercostLogDeep.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,68 @@ | |||||||
|  | /* | ||||||
|  |  * @Author: zwq | ||||||
|  |  * @Date: 2024-04-15 17:01:20 | ||||||
|  |  * @LastEditors: zwq | ||||||
|  |  * @LastEditTime: 2024-04-22 14:59:35 | ||||||
|  |  * @Description: | ||||||
|  |  */ | ||||||
|  | import request from '@/utils/request' | ||||||
|  |  | ||||||
|  | // 创建深加工其他成本-记录 | ||||||
|  | export function createRawOthercostLog(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-deep-othercost-log/create', | ||||||
|  |     method: 'post', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 更新深加工其他成本-记录 | ||||||
|  | export function updateRawOthercostLog(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-deep-othercost-log/update', | ||||||
|  |     method: 'put', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 删除深加工其他成本-记录 | ||||||
|  | export function deleteRawOthercostLog(id) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-deep-othercost-log/delete?id=' + id, | ||||||
|  |     method: 'delete' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 获得深加工其他成本-记录 | ||||||
|  | export function getRawOthercostLog(id) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-deep-othercost-log/get?id=' + id, | ||||||
|  |     method: 'get' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 获得深加工其他成本-记录分页 | ||||||
|  | export function getRawOthercostLogPage(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-deep-othercost-log/page', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 导出深加工其他成本-记录 Excel | ||||||
|  | export function exportRawOthercostLogExcel(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-deep-othercost-log/export-log-excel', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query, | ||||||
|  |     responseType: 'blob' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | // 获得所有深加工其他成本-记录列表 | ||||||
|  | export function getRawOthercostLogAll() { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-deep-othercost-log/listAll', | ||||||
|  |     method: 'get' | ||||||
|  |   }) | ||||||
|  | } | ||||||
							
								
								
									
										53
									
								
								src/api/cost/deepCostStatistics.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,53 @@ | |||||||
|  | /* | ||||||
|  |  * @Author: zwq | ||||||
|  |  * @Date: 2024-04-18 16:53:17 | ||||||
|  |  * @LastEditors: zwq | ||||||
|  |  * @LastEditTime: 2024-09-02 14:43:30 | ||||||
|  |  * @Description: | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | import request from '@/utils/request' | ||||||
|  |  | ||||||
|  | // 获得深加工成本分页 | ||||||
|  | export function getDeepCostStatisticsPage(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-deep-cost-his/page', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | // 更新深加工成本-历史 | ||||||
|  | export function updateDeepCostStatistics(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-deep-cost-his/update', | ||||||
|  |     method: 'put', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | // 获得深加工成本统计成本查询分页 | ||||||
|  | export function getDeepCostStatisticsRealtimePage(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-deep-cost-realtime/page', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 导出深加工成本统计成本查询 Excel | ||||||
|  | export function exportDeepStatisticsRealtimeExcel(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-deep-cost-realtime/export-excel', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query, | ||||||
|  |     responseType: 'blob' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | // 导出深加工成本统计-历史成本 Excel | ||||||
|  | export function exportDeepCostStatisticsHisExcel(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-deep-cost-his/export-excel', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query, | ||||||
|  |     responseType: 'blob' | ||||||
|  |   }) | ||||||
|  | } | ||||||
							
								
								
									
										68
									
								
								src/api/cost/deepOthercostRule.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,68 @@ | |||||||
|  | /* | ||||||
|  |  * @Author: zwq | ||||||
|  |  * @Date: 2024-04-15 17:01:20 | ||||||
|  |  * @LastEditors: zwq | ||||||
|  |  * @LastEditTime: 2024-04-22 14:55:00 | ||||||
|  |  * @Description: | ||||||
|  |  */ | ||||||
|  | import request from '@/utils/request' | ||||||
|  |  | ||||||
|  | // 创建深加工其他成本-配置 | ||||||
|  | export function createRawOthercostRule(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-deep-othercost-rule/create', | ||||||
|  |     method: 'post', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 更新深加工其他成本-配置 | ||||||
|  | export function updateRawOthercostRule(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-deep-othercost-rule/update', | ||||||
|  |     method: 'put', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 删除深加工其他成本-配置 | ||||||
|  | export function deleteRawOthercostRule(id) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-deep-othercost-rule/delete?id=' + id, | ||||||
|  |     method: 'delete' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 获得深加工其他成本-配置 | ||||||
|  | export function getRawOthercostRule(id) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-deep-othercost-rule/get?id=' + id, | ||||||
|  |     method: 'get' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 获得深加工其他成本-配置分页 | ||||||
|  | export function getRawOthercostRulePage(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-deep-othercost-rule/page', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 导出深加工其他成本-配置 Excel | ||||||
|  | export function exportRawOthercostRuleExcel(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-deep-othercost-rule/export-excel', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query, | ||||||
|  |     responseType: 'blob' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | // 获得所有深加工其他成本-配置列表 | ||||||
|  | export function getRawOthercostRuleAll() { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-deep-othercost-rule/listAll', | ||||||
|  |     method: 'get' | ||||||
|  |   }) | ||||||
|  | } | ||||||
							
								
								
									
										54
									
								
								src/api/cost/rawCostStatistics.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,54 @@ | |||||||
|  | /* | ||||||
|  |  * @Author: zwq | ||||||
|  |  * @Date: 2024-04-18 16:53:17 | ||||||
|  |  * @LastEditors: zwq | ||||||
|  |  * @LastEditTime: 2024-09-06 14:35:13 | ||||||
|  |  * @Description: | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | import request from '@/utils/request' | ||||||
|  |  | ||||||
|  | // 获得原片成本分页 | ||||||
|  | export function getRawCostStatisticsPage(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-origincost-his/page', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | // 更新原片成本-历史 | ||||||
|  | export function updateRawCostStatistics(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-origincost-his/update', | ||||||
|  |     method: 'put', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | // 获得原片成本统计成本查询分页 | ||||||
|  | export function getRawCostStatisticsRealtimePage(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-origin-cost-realtime/page', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 导出原片成本统计成本查询 Excel | ||||||
|  | export function exportRawStatisticsRealtimeExcel(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-origin-cost-realtime/export-excel', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query, | ||||||
|  |     responseType: 'blob' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 导出原片成本统计-历史成本 Excel | ||||||
|  | export function exportRawCostStatisticsHisExcel(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-origincost-his/export-excel', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query, | ||||||
|  |     responseType: 'blob' | ||||||
|  |   }) | ||||||
|  | } | ||||||
							
								
								
									
										68
									
								
								src/api/cost/rawOthercostRule.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,68 @@ | |||||||
|  | /* | ||||||
|  |  * @Author: zwq | ||||||
|  |  * @Date: 2024-04-15 17:01:20 | ||||||
|  |  * @LastEditors: zwq | ||||||
|  |  * @LastEditTime: 2024-04-18 15:39:12 | ||||||
|  |  * @Description: | ||||||
|  |  */ | ||||||
|  | import request from '@/utils/request' | ||||||
|  |  | ||||||
|  | // 创建原片其他成本-配置 | ||||||
|  | export function createRawOthercostRule(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-othercost-rule/create', | ||||||
|  |     method: 'post', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 更新原片其他成本-配置 | ||||||
|  | export function updateRawOthercostRule(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-othercost-rule/update', | ||||||
|  |     method: 'put', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 删除原片其他成本-配置 | ||||||
|  | export function deleteRawOthercostRule(id) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-othercost-rule/delete?id=' + id, | ||||||
|  |     method: 'delete' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 获得原片其他成本-配置 | ||||||
|  | export function getRawOthercostRule(id) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-othercost-rule/get?id=' + id, | ||||||
|  |     method: 'get' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 获得原片其他成本-配置分页 | ||||||
|  | export function getRawOthercostRulePage(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-othercost-rule/page', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 导出原片其他成本-配置 Excel | ||||||
|  | export function exportRawOthercostRuleExcel(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-othercost-rule/export-excel', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query, | ||||||
|  |     responseType: 'blob' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | // 获得所有原片其他成本-配置列表 | ||||||
|  | export function getRawOthercostRuleAll() { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/cost-othercost-rule/listAll', | ||||||
|  |     method: 'get' | ||||||
|  |   }) | ||||||
|  | } | ||||||
| @@ -43,6 +43,14 @@ export function getEnergyOverlimitLogPage(data) { | |||||||
|   }) |   }) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // 获得手动抄表记录分页 | ||||||
|  | export function getEnergyManualLogPage(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/monitoring/energy-overlimit-log/pageManual', | ||||||
|  |     method: 'post', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
| // 导出能源超限记录 Excel | // 导出能源超限记录 Excel | ||||||
| export function exportEnergyOverlimitLogExcel(query) { | export function exportEnergyOverlimitLogExcel(query) { | ||||||
|   return request({ |   return request({ | ||||||
|   | |||||||
							
								
								
									
										15
									
								
								src/assets/icons/svg/changelogo.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,15 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> | ||||||
|  |     <title>状态切换备份 3</title> | ||||||
|  |     <g id="页面" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> | ||||||
|  |         <g id="icon和插图" transform="translate(-877.000000, -246.000000)"> | ||||||
|  |             <g id="状态切换备份-3" transform="translate(885.000000, 254.000000) rotate(-270.000000) translate(-885.000000, -254.000000) translate(877.000000, 246.000000)"> | ||||||
|  |                 <rect id="矩形" stroke="#979797" fill="#D8D8D8" opacity="0" x="0.5" y="0.5" width="15" height="15"></rect> | ||||||
|  |                 <g id="错误" transform="translate(0.000000, 0.000000)" fill-rule="nonzero"> | ||||||
|  |                     <rect id="矩形" fill="#000000" opacity="0" x="0" y="6.4293957e-15" width="16" height="16"></rect> | ||||||
|  |                     <path d="M8,1 C11.85,1 15,4.15 15,8 C15,11.85 11.85,15 8,15 C4.15,15 1,11.85 1,8 C1,4.15 4.15,1 8,1 Z M8,2.19926499 C4.80249503,2.19926499 2.18635461,4.80959575 2.18635461,8 C2.18635461,11.1904043 4.80249503,13.800735 8,13.800735 C11.197505,13.800735 13.8136454,11.1904043 13.8136454,8 C13.8136454,4.80959575 11.197505,2.19926499 8,2.19926499 Z M9.18342887,4.39602962 C9.42080763,4.39602962 9.61773566,4.56921978 9.65474747,4.7961346 L9.66099805,4.87359881 L9.66052938,9.97276858 L10.1621026,9.47231604 C10.3071657,9.32725295 10.5223305,9.29501672 10.6985498,9.37560733 L10.7713701,9.41705393 L10.837514,9.47231606 C11.0033004,9.63810246 11.0217211,9.89545015 10.8927761,10.0815835 L10.837514,10.1477274 L9.52115984,11.4640816 C9.38457467,11.600698 9.17913638,11.6415719 9.00066062,11.5676398 C8.84450229,11.5029526 8.73591407,11.3615296 8.71120699,11.1977853 L8.70585968,11.1264012 L8.70585968,4.87359881 C8.70585968,4.60984463 8.91967469,4.39602962 9.18342887,4.39602962 Z M6.99933939,4.43236016 C7.15549771,4.49704738 7.26408594,4.63847045 7.28879302,4.80221473 L7.29414032,4.87359881 L7.29414032,11.1264012 C7.29414032,11.2530604 7.24382515,11.374532 7.15426356,11.4640936 C7.06470196,11.5536552 6.94323037,11.6039704 6.81657114,11.6039704 C6.68991191,11.6039704 6.56844032,11.5536552 6.47887872,11.4640936 C6.40722945,11.3924443 6.36069788,11.3003726 6.34495123,11.2015604 L6.33900196,11.1264012 L6.33858601,6.02634681 L5.83789738,6.52768395 C5.69283427,6.67274705 5.47766955,6.70498329 5.30145018,6.62439268 L5.22862992,6.58294608 L5.162486,6.52768394 C4.9966996,6.36189754 4.97827889,6.10454984 5.10722387,5.91841648 L5.162486,5.85227257 L6.47884017,4.53591839 C6.61542534,4.39930202 6.82086362,4.35842813 6.99933939,4.43236016 Z" id="形状结合" fill="#0B58FF"></path> | ||||||
|  |                 </g> | ||||||
|  |             </g> | ||||||
|  |         </g> | ||||||
|  |     </g> | ||||||
|  | </svg> | ||||||
| After Width: | Height: | Size: 2.7 KiB | 
| @@ -1 +1,18 @@ | |||||||
| <svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M38.47 52L52 38.462l-23.648-23.67L43.209 0H.035L0 43.137l14.757-14.865L38.47 52zm74.773 47.726L89.526 76 76 89.536l23.648 23.672L84.795 128h43.174L128 84.863l-14.757 14.863zM89.538 52l23.668-23.648L128 43.207V.038L84.866 0 99.73 14.76 76 38.472 89.538 52zM38.46 76L14.792 99.651 0 84.794v43.173l43.137.033-14.865-14.757L52 89.53 38.46 76z"/></svg> | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> | ||||||
|  |     <title>全屏</title> | ||||||
|  |     <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> | ||||||
|  |         <g id="首页" transform="translate(-1865.000000, -106.000000)" fill="#0B58FF"> | ||||||
|  |             <g id="全屏" transform="translate(1865.000000, 106.000000)"> | ||||||
|  |                 <g> | ||||||
|  |                     <rect id="矩形" stroke="#0B58FF" opacity="0" x="0.5" y="0.5" width="31" height="31"></rect> | ||||||
|  |                     <path d="M27.3264942,0.842105263 L27.583814,0.850525866 C28.0103146,0.878577843 28.4244403,0.976634518 28.8180051,1.14344343 C29.2746777,1.33424853 29.6828981,1.60928508 30.0368065,1.96319349 C30.3881547,2.31454163 30.6645305,2.72554187 30.8562967,3.18137947 C31.0567273,3.65427262 31.1578947,4.15615812 31.1578947,4.6735058 L31.1578947,26.4843889 L31.1494741,26.7417088 C31.1214222,27.1682093 31.0233655,27.5823351 30.8565566,27.9758999 C30.6657515,28.4325724 30.3907149,28.8407928 30.0368065,29.1947013 C29.6854584,29.5460494 29.2744581,29.8224253 28.8186205,30.0141914 C28.3457274,30.214622 27.8438419,30.3157895 27.3264942,30.3157895 L5.51561106,30.3157895 L5.25829123,30.3073689 C4.83179065,30.2793169 4.41766492,30.1812602 4.02410014,30.0144513 C3.5674276,29.8236462 3.15920715,29.5486097 2.80529875,29.1947013 C2.45395061,28.8433531 2.17757472,28.4323529 1.98580856,27.9765153 C1.785378,27.5036221 1.68421053,27.0017366 1.68421053,26.4843889 L1.68421053,4.6735058 L1.69263113,4.41618596 C1.72068311,3.98968539 1.81873978,3.57555966 1.98554869,3.18199488 C2.17635379,2.72532234 2.45139035,2.31710189 2.80529875,1.96319349 C3.15664689,1.61184534 3.56764713,1.33546946 4.02348473,1.1437033 C4.49637788,0.943272735 4.99826338,0.842105263 5.51561106,0.842105263 L27.3264942,0.842105263 Z M27.3264942,2.75111508 L5.51561106,2.75111508 L5.36543907,2.75690192 C4.37431777,2.83358398 3.59322034,3.6628098 3.59322034,4.6735058 L3.59322034,26.4843889 L3.59900719,26.6345609 C3.67568924,27.6256822 4.50491506,28.4067797 5.51561106,28.4067797 L27.3264942,28.4067797 L27.4766662,28.4009928 C28.4677875,28.3243108 29.2488849,27.4950849 29.2488849,26.4843889 L29.2488849,4.6735058 L29.2430981,4.52333381 C29.166416,3.53221251 28.3371902,2.75111508 27.3264942,2.75111508 Z M6.93907808,16.8656959 L7.04823476,16.8742044 C7.51440654,16.9376019 7.87511151,17.3390325 7.87511151,17.8202498 L7.87511151,22.7419534 L12.5867439,18.0303211 L12.6763037,17.9513367 C13.0496528,17.6617272 13.593961,17.6880553 13.9362267,18.0303211 C14.3070145,18.4011089 14.3070145,19.009016 13.9362267,19.3798038 L9.18746648,24.1248885 L14.0860839,24.1248885 L14.2012238,24.1314959 C14.6923507,24.1882147 15.0747102,24.6029657 15.0673779,25.0991191 C15.056792,25.6176308 14.6323624,26.0338983 14.1128457,26.0338983 L6.94402319,26.0338983 L6.82978436,26.0273339 C6.34272021,25.9709676 5.96610169,25.5584576 5.96610169,25.0559768 L5.96610169,17.8436664 L5.97273726,17.7287345 C6.02968832,17.2384284 6.44595722,16.8559311 6.93907808,16.8656959 Z M25.9047725,5.12399643 L26.0180629,5.13054044 C26.501183,5.1867256 26.8760036,5.59778744 26.8760036,6.09522748 L26.8760036,13.3108831 L26.869368,13.425815 C26.8124169,13.9161211 26.396148,14.2986184 25.9030272,14.2888536 C25.3853261,14.278234 24.9669938,13.8525337 24.9669938,13.3342997 L24.9669938,8.4159413 L20.2553614,13.1275737 L20.1658016,13.2065581 C19.7924524,13.4961675 19.2481443,13.4698394 18.9058786,13.1275737 C18.5350907,12.7567858 18.5350907,12.1488788 18.9058786,11.7780909 L23.6509632,7.03300624 L18.7526762,7.03300624 L18.6375099,7.02640054 C18.1463449,6.96969821 17.7649507,6.5551 17.7747062,6.0600055 C17.7853132,5.54026395 18.2097429,5.12399643 18.7292596,5.12399643 L25.9047725,5.12399643 Z" id="形状结合" fill-rule="nonzero" opacity="0.79078311"></path> | ||||||
|  |                 </g> | ||||||
|  |                 <g> | ||||||
|  |                     <rect id="矩形" stroke="#0B58FF" opacity="0" x="0.5" y="0.5" width="31" height="31"></rect> | ||||||
|  |                     <path d="M27.3264942,0.842105263 L27.583814,0.850525866 C28.0103146,0.878577843 28.4244403,0.976634518 28.8180051,1.14344343 C29.2746777,1.33424853 29.6828981,1.60928508 30.0368065,1.96319349 C30.3881547,2.31454163 30.6645305,2.72554187 30.8562967,3.18137947 C31.0567273,3.65427262 31.1578947,4.15615812 31.1578947,4.6735058 L31.1578947,26.4843889 L31.1494741,26.7417088 C31.1214222,27.1682093 31.0233655,27.5823351 30.8565566,27.9758999 C30.6657515,28.4325724 30.3907149,28.8407928 30.0368065,29.1947013 C29.6854584,29.5460494 29.2744581,29.8224253 28.8186205,30.0141914 C28.3457274,30.214622 27.8438419,30.3157895 27.3264942,30.3157895 L5.51561106,30.3157895 L5.25829123,30.3073689 C4.83179065,30.2793169 4.41766492,30.1812602 4.02410014,30.0144513 C3.5674276,29.8236462 3.15920715,29.5486097 2.80529875,29.1947013 C2.45395061,28.8433531 2.17757472,28.4323529 1.98580856,27.9765153 C1.785378,27.5036221 1.68421053,27.0017366 1.68421053,26.4843889 L1.68421053,4.6735058 L1.69263113,4.41618596 C1.72068311,3.98968539 1.81873978,3.57555966 1.98554869,3.18199488 C2.17635379,2.72532234 2.45139035,2.31710189 2.80529875,1.96319349 C3.15664689,1.61184534 3.56764713,1.33546946 4.02348473,1.1437033 C4.49637788,0.943272735 4.99826338,0.842105263 5.51561106,0.842105263 L27.3264942,0.842105263 Z M27.3264942,2.75111508 L5.51561106,2.75111508 L5.36543907,2.75690192 C4.37431777,2.83358398 3.59322034,3.6628098 3.59322034,4.6735058 L3.59322034,26.4843889 L3.59900719,26.6345609 C3.67568924,27.6256822 4.50491506,28.4067797 5.51561106,28.4067797 L27.3264942,28.4067797 L27.4766662,28.4009928 C28.4677875,28.3243108 29.2488849,27.4950849 29.2488849,26.4843889 L29.2488849,4.6735058 L29.2430981,4.52333381 C29.166416,3.53221251 28.3371902,2.75111508 27.3264942,2.75111508 Z M6.93907808,16.8656959 L7.04823476,16.8742044 C7.51440654,16.9376019 7.87511151,17.3390325 7.87511151,17.8202498 L7.87511151,22.7419534 L12.5867439,18.0303211 L12.6763037,17.9513367 C13.0496528,17.6617272 13.593961,17.6880553 13.9362267,18.0303211 C14.3070145,18.4011089 14.3070145,19.009016 13.9362267,19.3798038 L9.18746648,24.1248885 L14.0860839,24.1248885 L14.2012238,24.1314959 C14.6923507,24.1882147 15.0747102,24.6029657 15.0673779,25.0991191 C15.056792,25.6176308 14.6323624,26.0338983 14.1128457,26.0338983 L6.94402319,26.0338983 L6.82978436,26.0273339 C6.34272021,25.9709676 5.96610169,25.5584576 5.96610169,25.0559768 L5.96610169,17.8436664 L5.97273726,17.7287345 C6.02968832,17.2384284 6.44595722,16.8559311 6.93907808,16.8656959 Z M25.9047725,5.12399643 L26.0180629,5.13054044 C26.501183,5.1867256 26.8760036,5.59778744 26.8760036,6.09522748 L26.8760036,13.3108831 L26.869368,13.425815 C26.8124169,13.9161211 26.396148,14.2986184 25.9030272,14.2888536 C25.3853261,14.278234 24.9669938,13.8525337 24.9669938,13.3342997 L24.9669938,8.4159413 L20.2553614,13.1275737 L20.1658016,13.2065581 C19.7924524,13.4961675 19.2481443,13.4698394 18.9058786,13.1275737 C18.5350907,12.7567858 18.5350907,12.1488788 18.9058786,11.7780909 L23.6509632,7.03300624 L18.7526762,7.03300624 L18.6375099,7.02640054 C18.1463449,6.96969821 17.7649507,6.5551 17.7747062,6.0600055 C17.7853132,5.54026395 18.2097429,5.12399643 18.7292596,5.12399643 L25.9047725,5.12399643 Z" id="形状结合" fill-rule="nonzero" opacity="0.79078311"></path> | ||||||
|  |                 </g> | ||||||
|  |             </g> | ||||||
|  |         </g> | ||||||
|  |     </g> | ||||||
|  | </svg> | ||||||
| Before Width: | Height: | Size: 421 B After Width: | Height: | Size: 7.3 KiB | 
							
								
								
									
										14
									
								
								src/assets/icons/svg/icon-upload.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,14 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <svg width="14px" height="14px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> | ||||||
|  |     <title>上传</title> | ||||||
|  |     <g id="组件" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.65"> | ||||||
|  |         <g id="上传_Resources/Button" transform="translate(-12.000000, -9.000000)"> | ||||||
|  |             <g id="上传" transform="translate(12.000000, 9.000000)"> | ||||||
|  |                 <g id="upload" transform="translate(0.875000, 0.875000)" fill="currentColor" fill-rule="nonzero"> | ||||||
|  |                     <path d="M5.80371094,0.138085937 C5.8953125,0.046484375 6.01699219,0 6.13867188,0 C6.26035156,0 6.38066406,0.046484375 6.47363281,0.138085937 L8.60371094,2.26953125 C8.78828125,2.45410156 8.78828125,2.75351562 8.60371094,2.93808594 C8.51484375,3.02695312 8.39589844,3.07617188 8.27011719,3.07617188 C8.14433594,3.07617188 8.02539062,3.02695312 7.93652344,2.93808594 L6.61171875,1.61328125 L6.61171875,9.51289062 C6.61171875,9.77402344 6.39980469,9.9859375 6.13867188,9.9859375 C5.87753906,9.9859375 5.665625,9.77402344 5.665625,9.51289062 L5.665625,1.61328125 L4.34082031,2.93808594 C4.15625,3.12265625 3.85683594,3.12265625 3.67363281,2.93808594 C3.4890625,2.75351562 3.4890625,2.45410156 3.67226563,2.26953125 L5.80371094,0.138085937 Z M11.7769531,7.88046875 C11.5158203,7.88046875 11.3039063,8.09238281 11.3039063,8.35351563 L11.3039063,11.025 C11.3039063,11.1794922 11.178125,11.3066406 11.0222656,11.3066406 L1.22636719,11.3066406 C1.071875,11.3066406 0.944726562,11.1808594 0.944726562,11.025 L0.944726562,8.35214844 C0.944726562,8.09101563 0.7328125,7.87910156 0.471679688,7.87910156 C0.210546875,7.87910156 0,8.09238281 0,8.35214844 L0,11.3996094 C0,11.8685547 0.381445313,12.2486328 0.849023437,12.2486328 L11.4009766,12.2486328 C11.8699219,12.2486328 12.25,11.8671875 12.25,11.3996094 L12.25,8.35214844 C12.25,8.09238281 12.0380859,7.88046875 11.7769531,7.88046875 Z" id="Shape"></path> | ||||||
|  |                 </g> | ||||||
|  |                 <rect id="Rectangle-49" x="0" y="0" width="14" height="14"></rect> | ||||||
|  |             </g> | ||||||
|  |         </g> | ||||||
|  |     </g> | ||||||
|  | </svg> | ||||||
| After Width: | Height: | Size: 2.1 KiB | 
							
								
								
									
										12
									
								
								src/assets/icons/svg/refresh.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,12 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> | ||||||
|  |     <title>更新</title> | ||||||
|  |     <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> | ||||||
|  |         <g id="首页" transform="translate(-474.000000, -116.000000)" fill="#0B58FF" fill-rule="nonzero"> | ||||||
|  |             <g id="更新" transform="translate(474.000000, 116.000000)"> | ||||||
|  |                 <rect id="矩形" opacity="0" x="0" y="0" width="16" height="16"></rect> | ||||||
|  |                 <path d="M14.9793977,2.67910156 L13.9879914,3.45429687 C12.6362336,1.72636719 10.5338899,0.6171875 8.17314768,0.6171875 C4.09678049,0.6171875 0.797366431,3.91308594 0.792086694,7.99121094 C0.786819556,12.0728516 4.09326487,15.3828125 8.17314768,15.3828125 C11.3600617,15.3828125 14.0758821,13.3613281 15.1094758,10.5294922 C15.135843,10.4556641 15.0971711,10.3730469 15.023343,10.3484375 L14.0266633,10.0056641 C13.954593,9.98105469 13.8754914,10.0179688 13.8491242,10.0900391 C13.8174836,10.1779297 13.7823274,10.2658203 13.7454133,10.3519531 C13.4413117,11.0726562 13.0053742,11.7195312 12.4499055,12.275 C11.8944367,12.8304687 11.2475617,13.2664062 10.5286164,13.5722656 C9.78506174,13.8869141 8.99228831,14.046875 8.17666331,14.046875 C7.35928049,14.046875 6.56826487,13.8869141 5.82471018,13.5722656 C5.10576487,13.2681641 4.45888987,12.8322266 3.90342112,12.275 C3.34795237,11.7195312 2.91201487,11.0726562 2.60791331,10.3519531 C2.29326487,9.60664063 2.13330393,8.815625 2.13330393,7.99824219 C2.13330393,7.18085937 2.29326487,6.38984375 2.60791331,5.64453125 C2.91201487,4.92382812 3.34795237,4.27695312 3.90342112,3.72148438 C4.45888987,3.16601563 5.10576487,2.73007813 5.82471018,2.42421875 C6.56826487,2.10957031 7.36103831,1.94960938 8.17666331,1.94960938 C8.99404612,1.94960938 9.78506174,2.10957031 10.5286164,2.42421875 C11.2475617,2.72832031 11.8944367,3.16425781 12.4499055,3.72148438 C12.6239289,3.89550781 12.7874055,4.08007812 12.9385774,4.2734375 L11.8803742,5.09960938 C11.7872102,5.17167969 11.8188508,5.31933594 11.9331086,5.34746094 L15.0198274,6.10332031 C15.107718,6.12441406 15.1938508,6.05761719 15.1938508,5.96796875 L15.2079133,2.78808594 C15.2061555,2.67207031 15.0708039,2.60703125 14.9793977,2.67910156 L14.9793977,2.67910156 Z" id="路径" stroke="#0B58FF" stroke-width="0.5"></path> | ||||||
|  |             </g> | ||||||
|  |         </g> | ||||||
|  |     </g> | ||||||
|  | </svg> | ||||||
| After Width: | Height: | Size: 2.4 KiB | 
							
								
								
									
										18
									
								
								src/assets/icons/svg/unFullscreen.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,18 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> | ||||||
|  |     <title>推出全屏</title> | ||||||
|  |     <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> | ||||||
|  |         <g id="首页" transform="translate(-1815.000000, -103.000000)" fill="#0B58FF"> | ||||||
|  |             <g id="推出全屏" transform="translate(1815.000000, 103.000000)"> | ||||||
|  |                 <g id="全屏"> | ||||||
|  |                     <rect id="矩形" stroke="#0B58FF" opacity="0" x="0.5" y="0.5" width="31" height="31"></rect> | ||||||
|  |                     <path d="M26.7638125,1.45454545 L27.0177905,1.4628567 C27.4387521,1.49054436 27.8474996,1.58732758 28.2359531,1.75197014 C28.6866948,1.94029725 29.0896137,2.2117619 29.4389259,2.56107409 C29.7857111,2.90785927 30.0584977,3.31352185 30.2477734,3.76343947 C30.4456009,4.23019115 30.5454545,4.72555866 30.5454545,5.23618754 L30.5454545,26.7638125 L30.5371433,27.0177905 C30.5094556,27.4387521 30.4126724,27.8474996 30.2480299,28.2359531 C30.0597028,28.6866948 29.7882381,29.0896137 29.4389259,29.4389259 C29.0921407,29.7857111 28.6864782,30.0584977 28.2365605,30.2477734 C27.7698088,30.4456009 27.2744413,30.5454545 26.7638125,30.5454545 L5.23618754,30.5454545 L4.98220952,30.5371433 C4.56124792,30.5094556 4.15250044,30.4126724 3.7640469,30.2480299 C3.31330516,30.0597028 2.91038628,29.7882381 2.56107409,29.4389259 C2.21428891,29.0921407 1.94150232,28.6864782 1.75222663,28.2365605 C1.55439906,27.7698088 1.45454545,27.2744413 1.45454545,26.7638125 L1.45454545,5.23618754 L1.4628567,4.98220952 C1.49054436,4.56124792 1.58732758,4.15250044 1.75197014,3.7640469 C1.94029725,3.31330516 2.2117619,2.91038628 2.56107409,2.56107409 C2.90785927,2.21428891 3.31352185,1.94150232 3.76343947,1.75222663 C4.23019115,1.55439906 4.72555866,1.45454545 5.23618754,1.45454545 L26.7638125,1.45454545 Z M26.7638125,3.33876293 L5.23618754,3.33876293 L5.08796584,3.34447462 C4.10971624,3.42016081 3.33876293,4.23861746 3.33876293,5.23618754 L3.33876293,26.7638125 L3.34447462,26.9120342 C3.42016081,27.8902838 4.23861746,28.6612371 5.23618754,28.6612371 L26.7638125,28.6612371 L26.9120342,28.6555254 C27.8902838,28.5798392 28.6612371,27.7613825 28.6612371,26.7638125 L28.6612371,5.23618754 L28.6555254,5.08796584 C28.5798392,4.10971624 27.7613825,3.33876293 26.7638125,3.33876293 Z M13.6987866,17.269857 L13.8115418,17.2763362 C14.2922804,17.3319705 14.6640078,17.7391232 14.6640078,18.2350783 L14.6640078,25.3537223 L14.6574584,25.4671616 C14.6012469,25.9511001 14.1903841,26.3286298 13.7036674,26.3189919 L13.5959284,26.3105939 C13.1358108,26.2480197 12.7797903,25.8518025 12.7797903,25.3768348 L12.7797903,20.5190494 L8.12934794,25.1694917 L8.04095127,25.2474504 C7.67245079,25.5332987 7.13521162,25.5073124 6.79739091,25.1694917 C6.43141847,24.8035193 6.43141847,24.2035071 6.79739091,23.8375347 L11.4844789,19.1540745 L6.64947993,19.1540745 L6.53583534,19.1475529 C6.05108664,19.0915708 5.67369292,18.6822061 5.68093001,18.1924962 C5.69137836,17.6807185 6.11029591,17.269857 6.62306566,17.269857 L13.6987866,17.269857 Z M18.2962333,5.68100813 C18.807211,5.69148979 19.2201105,6.11166149 19.2201105,6.62316519 L19.2201105,11.4776488 L23.8705528,6.82720649 L23.9589495,6.74924786 C24.32745,6.46339956 24.8646892,6.48938577 25.2025099,6.82720649 C25.5684823,7.19317893 25.5684823,7.79319108 25.2025099,8.15916352 L20.5190497,12.8426237 L25.3537226,12.8426237 L25.4673933,12.8491436 C25.9521795,12.9051095 26.3286206,13.3143234 26.3189917,13.8029881 C26.3085224,14.3159797 25.8896049,14.7268412 25.3768351,14.7268412 L18.2945107,14.7268412 L18.1826915,14.7203822 C17.7058457,14.6649267 17.335893,14.2592033 17.335893,13.7682235 L17.335893,6.64627767 L17.3424424,6.53283844 C17.3986538,6.04889994 17.8095166,5.67137018 18.2962333,5.68100813 Z" id="形状结合" fill-rule="nonzero" opacity="0.79078311"></path> | ||||||
|  |                 </g> | ||||||
|  |                 <g id="全屏"> | ||||||
|  |                     <rect id="矩形" stroke="#0B58FF" opacity="0" x="0.5" y="0.5" width="31" height="31"></rect> | ||||||
|  |                     <path d="M26.7638125,1.45454545 L27.0177905,1.4628567 C27.4387521,1.49054436 27.8474996,1.58732758 28.2359531,1.75197014 C28.6866948,1.94029725 29.0896137,2.2117619 29.4389259,2.56107409 C29.7857111,2.90785927 30.0584977,3.31352185 30.2477734,3.76343947 C30.4456009,4.23019115 30.5454545,4.72555866 30.5454545,5.23618754 L30.5454545,26.7638125 L30.5371433,27.0177905 C30.5094556,27.4387521 30.4126724,27.8474996 30.2480299,28.2359531 C30.0597028,28.6866948 29.7882381,29.0896137 29.4389259,29.4389259 C29.0921407,29.7857111 28.6864782,30.0584977 28.2365605,30.2477734 C27.7698088,30.4456009 27.2744413,30.5454545 26.7638125,30.5454545 L5.23618754,30.5454545 L4.98220952,30.5371433 C4.56124792,30.5094556 4.15250044,30.4126724 3.7640469,30.2480299 C3.31330516,30.0597028 2.91038628,29.7882381 2.56107409,29.4389259 C2.21428891,29.0921407 1.94150232,28.6864782 1.75222663,28.2365605 C1.55439906,27.7698088 1.45454545,27.2744413 1.45454545,26.7638125 L1.45454545,5.23618754 L1.4628567,4.98220952 C1.49054436,4.56124792 1.58732758,4.15250044 1.75197014,3.7640469 C1.94029725,3.31330516 2.2117619,2.91038628 2.56107409,2.56107409 C2.90785927,2.21428891 3.31352185,1.94150232 3.76343947,1.75222663 C4.23019115,1.55439906 4.72555866,1.45454545 5.23618754,1.45454545 L26.7638125,1.45454545 Z M26.7638125,3.33876293 L5.23618754,3.33876293 L5.08796584,3.34447462 C4.10971624,3.42016081 3.33876293,4.23861746 3.33876293,5.23618754 L3.33876293,26.7638125 L3.34447462,26.9120342 C3.42016081,27.8902838 4.23861746,28.6612371 5.23618754,28.6612371 L26.7638125,28.6612371 L26.9120342,28.6555254 C27.8902838,28.5798392 28.6612371,27.7613825 28.6612371,26.7638125 L28.6612371,5.23618754 L28.6555254,5.08796584 C28.5798392,4.10971624 27.7613825,3.33876293 26.7638125,3.33876293 Z M13.6987866,17.269857 L13.8115418,17.2763362 C14.2922804,17.3319705 14.6640078,17.7391232 14.6640078,18.2350783 L14.6640078,25.3537223 L14.6574584,25.4671616 C14.6012469,25.9511001 14.1903841,26.3286298 13.7036674,26.3189919 L13.5959284,26.3105939 C13.1358108,26.2480197 12.7797903,25.8518025 12.7797903,25.3768348 L12.7797903,20.5190494 L8.12934794,25.1694917 L8.04095127,25.2474504 C7.67245079,25.5332987 7.13521162,25.5073124 6.79739091,25.1694917 C6.43141847,24.8035193 6.43141847,24.2035071 6.79739091,23.8375347 L11.4844789,19.1540745 L6.64947993,19.1540745 L6.53583534,19.1475529 C6.05108664,19.0915708 5.67369292,18.6822061 5.68093001,18.1924962 C5.69137836,17.6807185 6.11029591,17.269857 6.62306566,17.269857 L13.6987866,17.269857 Z M18.2962333,5.68100813 C18.807211,5.69148979 19.2201105,6.11166149 19.2201105,6.62316519 L19.2201105,11.4776488 L23.8705528,6.82720649 L23.9589495,6.74924786 C24.32745,6.46339956 24.8646892,6.48938577 25.2025099,6.82720649 C25.5684823,7.19317893 25.5684823,7.79319108 25.2025099,8.15916352 L20.5190497,12.8426237 L25.3537226,12.8426237 L25.4673933,12.8491436 C25.9521795,12.9051095 26.3286206,13.3143234 26.3189917,13.8029881 C26.3085224,14.3159797 25.8896049,14.7268412 25.3768351,14.7268412 L18.2945107,14.7268412 L18.1826915,14.7203822 C17.7058457,14.6649267 17.335893,14.2592033 17.335893,13.7682235 L17.335893,6.64627767 L17.3424424,6.53283844 C17.3986538,6.04889994 17.8095166,5.67137018 18.2962333,5.68100813 Z" id="形状结合" fill-rule="nonzero" opacity="0.79078311"></path> | ||||||
|  |                 </g> | ||||||
|  |             </g> | ||||||
|  |         </g> | ||||||
|  |     </g> | ||||||
|  | </svg> | ||||||
| After Width: | Height: | Size: 7.3 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/images/default-file-icon.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 1.6 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/images/login-bg.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 137 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/images/tuple.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 944 B | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/logo/cnbm.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 1.9 KiB | 
| @@ -1,10 +1,13 @@ | |||||||
| /* ===== PC DESIGN ===== */ | /* ===== PC DESIGN ===== */ | ||||||
| $W: 1000; | $W: 1080; | ||||||
| $H: 1920; | $H: 1920; | ||||||
| $picW: 438; | // $picW: 438; | ||||||
| $picH: 560; | // $picH: 560; | ||||||
| $formW: 320; | $picW: 1080; | ||||||
|  | $picH: 1118; | ||||||
|  | $formW: 420; | ||||||
| $tabW: $formW / 2; | $tabW: $formW / 2; | ||||||
|  | // $rowH: 56; | ||||||
| $rowH: 56; | $rowH: 56; | ||||||
| $buttonH: 50; | $buttonH: 50; | ||||||
|  |  | ||||||
| @@ -15,6 +18,7 @@ $containerBgImage: '../assets/images/bg.png'; | |||||||
| $logoWidth: 417px; | $logoWidth: 417px; | ||||||
| $logoHeight: 64px; | $logoHeight: 64px; | ||||||
| $logoImage: '../assets/logo/login-logo.png'; | $logoImage: '../assets/logo/login-logo.png'; | ||||||
|  | $cnbmLogo: '../assets/logo/cnbm.png'; | ||||||
| // container-content | // container-content | ||||||
| $contentWidth: round($W / $H * 100) * 1vw; | $contentWidth: round($W / $H * 100) * 1vw; | ||||||
| $contentHeight: round($picH / $W * 100) / 100 * $contentWidth; | $contentHeight: round($picH / $W * 100) / 100 * $contentWidth; | ||||||
| @@ -22,7 +26,8 @@ $contentBgColor: #ffffff; | |||||||
| // container-content-pic | // container-content-pic | ||||||
| $picWidth: round($picW / $H * 100) * 1vw; | $picWidth: round($picW / $H * 100) * 1vw; | ||||||
| $picHeight: inherit; | $picHeight: inherit; | ||||||
| $picImage: '../assets/images/pic.png'; | // $picImage: '../assets/images/pic.png'; | ||||||
|  | $picImage: '../assets/images/login-bg.png'; | ||||||
| // container-content-field | // container-content-field | ||||||
| $fieldWidth: $contentWidth - $picWidth; | $fieldWidth: $contentWidth - $picWidth; | ||||||
| $fieldHeight: inherit; | $fieldHeight: inherit; | ||||||
| @@ -40,7 +45,9 @@ $buttonHeight: $buttonH * 1px; | |||||||
| 		float: right; | 		float: right; | ||||||
| 		img { | 		img { | ||||||
| 			cursor: pointer; | 			cursor: pointer; | ||||||
|       width:100%;max-width:100px; height:auto; | 			width: 100%; | ||||||
|  | 			max-width: 100px; | ||||||
|  | 			height: auto; | ||||||
| 			vertical-align: middle; | 			vertical-align: middle; | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| @@ -50,7 +57,7 @@ $buttonHeight: $buttonH * 1px; | |||||||
| 	min-width: 1080px; | 	min-width: 1080px; | ||||||
| 	min-height: 620px; | 	min-height: 620px; | ||||||
| 	background-color: $containerBgColor; | 	background-color: $containerBgColor; | ||||||
|   background-image: url($containerBgImage); | 	// background-image: url($containerBgImage); | ||||||
| 	background-size: cover; | 	background-size: cover; | ||||||
| 	// 定位 | 	// 定位 | ||||||
| 	position: relative; | 	position: relative; | ||||||
| @@ -75,49 +82,87 @@ $buttonHeight: $buttonH * 1px; | |||||||
| 	} | 	} | ||||||
| 	.content { | 	.content { | ||||||
| 		// 元素 | 		// 元素 | ||||||
|     width: $contentWidth; | 		// width: $contentWidth; | ||||||
|     height: $contentHeight; | 		// height: $contentHeight; | ||||||
|  | 		width: 100%; | ||||||
|  | 		height: 100%; | ||||||
| 		background-color: #ffffff; | 		background-color: #ffffff; | ||||||
|     box-shadow: 0px 16px 40px rgba(0, 0, 0, 0.07); | 		// box-shadow: 0px 16px 40px rgba(0, 0, 0, 0.07); | ||||||
|     border-radius: 20px; | 		// border-radius: 20px; | ||||||
| 		// 定位 | 		// 定位 | ||||||
| 		position: relative; | 		position: relative; | ||||||
|  | 		display: flex; | ||||||
|  |  | ||||||
| 		.pic { | 		.pic { | ||||||
| 			// 元素 | 			// 元素 | ||||||
| 			width: $picWidth; | 			width: $picWidth; | ||||||
| 			height: $picHeight; | 			height: $picHeight; | ||||||
| 			background-image: url($picImage); | 			background-image: url($picImage); | ||||||
| 			background-repeat: no-repeat; | 			background-repeat: no-repeat; | ||||||
|       background-size: cover; | 			background-size: 100% 100%; | ||||||
|       border-radius: 20px 0 0 20px; | 			background-position: 0 0; | ||||||
|       // 定位 | 			position: relative; | ||||||
|  |  | ||||||
|  | 			&::after { | ||||||
|  |         content: ''; | ||||||
| 				position: absolute; | 				position: absolute; | ||||||
| 				top: 0; | 				top: 0; | ||||||
| 				left: 0; | 				left: 0; | ||||||
|  | 				width: 100%; | ||||||
|  | 				height: 100%; | ||||||
|  |         // background: #f003; | ||||||
|  |         display: inline-block; | ||||||
|  | 			} | ||||||
| 		} | 		} | ||||||
| 		.field { | 		.field { | ||||||
|       width: $fieldWidth; | 			// background: #ccc3; | ||||||
|       height: $fieldHeight; | 			position: relative; | ||||||
|       // 定位 | 			padding-top: 196px; | ||||||
|       position: absolute; | 			flex: 1; | ||||||
|       top: 0; | 			display: flex; | ||||||
|       left: $picWidth; | 			flex-direction: column; | ||||||
|       display:flex; | 			// justify-content: center; | ||||||
|       justify-content: center; |  | ||||||
| 			align-items: center; | 			align-items: center; | ||||||
|       .pc-title{ width: 100%; clear: both;} | 			.pc-title { | ||||||
|  | 				width: 100%; | ||||||
|  | 				text-align: center; | ||||||
|  | 				clear: both; | ||||||
|  | 				position: relative; | ||||||
|  | 				top: -36px; | ||||||
|  |  | ||||||
|  | 				// h3.title { | ||||||
|  | 				// 	position: relative; | ||||||
|  |  | ||||||
|  | 				// 	&::before { | ||||||
|  | 				// 		content: ''; | ||||||
|  | 				// 		background: url($cnbmLogo) 100% / 100% no-repeat; | ||||||
|  | 				// 		height: 48px; | ||||||
|  | 				// 		width: 48px; | ||||||
|  | 				// 		position: absolute; | ||||||
|  | 				// 		left: 0px; | ||||||
|  | 				// 		top: 4px; | ||||||
|  | 				// 		display: inline-block; | ||||||
|  | 				// 	} | ||||||
|  | 				// } | ||||||
|  | 			} | ||||||
| 			.mobile-title, | 			.mobile-title, | ||||||
| 			.mobile-switch { | 			.mobile-switch { | ||||||
| 				display: none; | 				display: none; | ||||||
| 			} | 			} | ||||||
| 			.form { | 			.form { | ||||||
|  | 				margin-top: 32px; | ||||||
| 				box-sizing: border-box; | 				box-sizing: border-box; | ||||||
|         width: $formWidth; | 				// width: $formWidth; | ||||||
|  | 				width: 100%; | ||||||
| 				// - - - tab | 				// - - - tab | ||||||
|  | 				:deep(.el-tabs__nav) { | ||||||
|  | 					// background: #f0f3; | ||||||
|  | 				} | ||||||
| 				:deep(.el-tabs__content) { | 				:deep(.el-tabs__content) { | ||||||
| 					padding: 20px 0 0; | 					padding: 20px 0 0; | ||||||
| 				} | 				} | ||||||
| 				:deep(.el-tabs__item) { | 				:deep(.el-tabs__item) { | ||||||
|  | 					user-select: none; | ||||||
| 					// 元素 | 					// 元素 | ||||||
| 					width: $tabWidth; | 					width: $tabWidth; | ||||||
| 					height: $rowHeight; | 					height: $rowHeight; | ||||||
| @@ -125,10 +170,13 @@ $buttonHeight: $buttonH * 1px; | |||||||
| 					// 文字 | 					// 文字 | ||||||
| 					line-height: $rowHeight; | 					line-height: $rowHeight; | ||||||
| 					color: #666666; | 					color: #666666; | ||||||
|  | 					font-size: 18px; | ||||||
|  | 					font-weight: 400; | ||||||
|  | 					text-align: center; | ||||||
| 				} | 				} | ||||||
| 				:deep(.el-tabs__item.is-active) { | 				:deep(.el-tabs__item.is-active) { | ||||||
|           font-weight: bold; | 					font-weight: 500; | ||||||
|           color: #2F53EB; | 					color: #2f53eb; | ||||||
| 				} | 				} | ||||||
| 				:deep(.el-tabs__active-bar) { | 				:deep(.el-tabs__active-bar) { | ||||||
| 					height: 3px; | 					height: 3px; | ||||||
| @@ -152,22 +200,26 @@ $buttonHeight: $buttonH * 1px; | |||||||
| 					// 文字 | 					// 文字 | ||||||
| 					text-align: left; | 					text-align: left; | ||||||
| 				} | 				} | ||||||
|         :deep(.el-input__inner::-webkit-input-placeholder) { /* WebKit browsers */ | 				:deep(.el-input__inner::-webkit-input-placeholder) { | ||||||
|  | 					/* WebKit browsers */ | ||||||
| 					font-weight: 400; | 					font-weight: 400; | ||||||
|           color: #8C8C8C; | 					color: #8c8c8c; | ||||||
| 				} | 				} | ||||||
|         :deep(.el-input__inner:-moz-placeholder) { /* Mozilla Firefox 4 to 18 */ | 				:deep(.el-input__inner:-moz-placeholder) { | ||||||
|  | 					/* Mozilla Firefox 4 to 18 */ | ||||||
| 					font-weight: 400; | 					font-weight: 400; | ||||||
|           color: #8C8C8C; | 					color: #8c8c8c; | ||||||
| 				} | 				} | ||||||
|         :deep(.el-input__inner::-moz-placeholder) { /* Mozilla Firefox 19+ */ | 				:deep(.el-input__inner::-moz-placeholder) { | ||||||
|  | 					/* Mozilla Firefox 19+ */ | ||||||
| 					font-weight: 400; | 					font-weight: 400; | ||||||
|           color: #8C8C8C; | 					color: #8c8c8c; | ||||||
|           opacity:1; | 					opacity: 1; | ||||||
| 				} | 				} | ||||||
|         :deep(.el-input__inner:-ms-input-placeholder) { /* Internet Explorer 10+ */ | 				:deep(.el-input__inner:-ms-input-placeholder) { | ||||||
|  | 					/* Internet Explorer 10+ */ | ||||||
| 					font-weight: 400; | 					font-weight: 400; | ||||||
|           color: #8C8C8C !important; | 					color: #8c8c8c !important; | ||||||
| 				} | 				} | ||||||
| 				:deep(.el-form-item) { | 				:deep(.el-form-item) { | ||||||
| 					position: relative; | 					position: relative; | ||||||
| @@ -185,10 +237,10 @@ $buttonHeight: $buttonH * 1px; | |||||||
| 						font-size: 14px; | 						font-size: 14px; | ||||||
| 						font-family: PingFang SC; | 						font-family: PingFang SC; | ||||||
| 						font-weight: 400; | 						font-weight: 400; | ||||||
|             color: #2F53EB; | 						color: #2f53eb; | ||||||
| 						span { | 						span { | ||||||
| 							padding-left: 15px; | 							padding-left: 15px; | ||||||
|               border-left: 2px solid #D9D9D9; | 							border-left: 2px solid #d9d9d9; | ||||||
| 						} | 						} | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
| @@ -205,16 +257,36 @@ $buttonHeight: $buttonH * 1px; | |||||||
| 					// 文字 | 					// 文字 | ||||||
| 					line-height: 26px; | 					line-height: 26px; | ||||||
| 					font-size: 20px; | 					font-size: 20px; | ||||||
|           color: #FFFFFF; | 					color: #ffffff; | ||||||
| 				} | 				} | ||||||
| 				.button-active { | 				.button-active { | ||||||
|           background: #2F53EB; | 					background: #2f53eb; | ||||||
| 					box-shadow: 0px 2px 8px rgba(0, 80, 184, 0.2); | 					box-shadow: 0px 2px 8px rgba(0, 80, 184, 0.2); | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	.login-form { | ||||||
|  | 		* { | ||||||
|  | 			user-select: none; | ||||||
|  | 		} | ||||||
|  | 		// - - - input | ||||||
|  | 		:deep(.el-input__inner) { | ||||||
|  | 			// 元素 | ||||||
|  | 			width: 420px; | ||||||
|  | 			height: 66px; | ||||||
|  | 			color: #262626; | ||||||
|  | 			font-size: 18px; | ||||||
|  | 		} | ||||||
|  | 		:deep(.el-checkbox__label) { | ||||||
|  | 			font-size: 18px; | ||||||
|  | 			line-height: 14px; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	.footer { | 	.footer { | ||||||
|  | 		user-select: none; | ||||||
| 		// 元素 | 		// 元素 | ||||||
| 		height: 16px; | 		height: 16px; | ||||||
| 		line-height: 16px; | 		line-height: 16px; | ||||||
| @@ -235,17 +307,30 @@ $buttonHeight: $buttonH * 1px; | |||||||
| // - - - - - PC 最小尺寸设置 | // - - - - - PC 最小尺寸设置 | ||||||
| @media screen and (min-width: 599px) and (max-width: 1366px) { | @media screen and (min-width: 599px) and (max-width: 1366px) { | ||||||
| 	.container { | 	.container { | ||||||
|  | 		min-width: 599px; | ||||||
| 		.content { | 		.content { | ||||||
|       width: 710px; | 			// width: 710px; | ||||||
|       height: 397px; | 			// height: 397px; | ||||||
|  | 			width: 100%; | ||||||
|  | 			height: 100%; | ||||||
| 			.pic { | 			.pic { | ||||||
|         width: 314px; | 				// width: 314px; | ||||||
|  | 				display: none; | ||||||
| 			} | 			} | ||||||
| 			.field { | 			.field { | ||||||
|         width: calc(710px - 314px); | 				// width: calc(710px - 314px); | ||||||
|         left: 314px; | 				// left: 314px; | ||||||
|  | 				// justify-content: center; | ||||||
|  | 				width: 100%; | ||||||
|  |  | ||||||
|  | 				.pc-title { | ||||||
|  | 					h3 { | ||||||
|  | 						font-size: 2.4rem !important; | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  |  | ||||||
| 				.form { | 				.form { | ||||||
|           width: 320px; | 					// width: 320px; | ||||||
| 					:deep(.el-input__inner) { | 					:deep(.el-input__inner) { | ||||||
| 						width: 320px; | 						width: 320px; | ||||||
| 						height: 56px; | 						height: 56px; | ||||||
| @@ -259,7 +344,6 @@ $buttonHeight: $buttonH * 1px; | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| /* ===== MOBILE DESIGN ===== */ | /* ===== MOBILE DESIGN ===== */ | ||||||
| $mobileW: 375; | $mobileW: 375; | ||||||
| $mobileH: 812; | $mobileH: 812; | ||||||
| @@ -273,9 +357,10 @@ $mobileButtonH: 48; | |||||||
| $mobileContainerBgImage: '../assets/images/bg-mobile.png'; | $mobileContainerBgImage: '../assets/images/bg-mobile.png'; | ||||||
| // container-content | // container-content | ||||||
| $mobileContentWidth: round($mobileContentW / $mobileW * 100) * 1vw; | $mobileContentWidth: round($mobileContentW / $mobileW * 100) * 1vw; | ||||||
| $mobileContentHeight: round($mobileContentH / $mobileW * 100) / 100 * $mobileContentWidth; | $mobileContentHeight: round($mobileContentH / $mobileW * 100) / 100 * | ||||||
|  | 	$mobileContentWidth; | ||||||
| // container-content-field-form | // container-content-field-form | ||||||
| $mobileFormWidth: round($mobileFormW / $mobileW *100) * 1vw; | $mobileFormWidth: round($mobileFormW / $mobileW * 100) * 1vw; | ||||||
| $mobileRowHeight: $mobileRowH * 1px; | $mobileRowHeight: $mobileRowH * 1px; | ||||||
| $mobileButtonHeight: $mobileButtonH * 1px; | $mobileButtonHeight: $mobileButtonH * 1px; | ||||||
| $iconBgImage: '../assets/images/icon.png'; | $iconBgImage: '../assets/images/icon.png'; | ||||||
| @@ -288,13 +373,17 @@ $iconBgImage: '../assets/images/icon.png'; | |||||||
| 		min-width: 280px; | 		min-width: 280px; | ||||||
| 		min-height: 568px; | 		min-height: 568px; | ||||||
| 		// 文字 | 		// 文字 | ||||||
|     font-size: 17px; | 		font-size: 14px; | ||||||
| 		font-family: PingFang SC; | 		font-family: PingFang SC; | ||||||
| 		font-weight: bold; | 		font-weight: bold; | ||||||
| 		.logo { | 		.logo { | ||||||
| 			display: none; | 			display: none; | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | 		.pc-title { | ||||||
|  | 			display: none; | ||||||
|  | 		} | ||||||
|  |  | ||||||
| 		.content { | 		.content { | ||||||
| 			// 元素 | 			// 元素 | ||||||
| 			width: $mobileContentWidth; | 			width: $mobileContentWidth; | ||||||
| @@ -309,6 +398,7 @@ $iconBgImage: '../assets/images/icon.png'; | |||||||
| 				display: none; | 				display: none; | ||||||
| 			} | 			} | ||||||
| 			.field { | 			.field { | ||||||
|  |         padding: 0; | ||||||
| 				// 元素 | 				// 元素 | ||||||
| 				width: inherit; | 				width: inherit; | ||||||
| 				min-height: inherit; | 				min-height: inherit; | ||||||
| @@ -316,12 +406,15 @@ $iconBgImage: '../assets/images/icon.png'; | |||||||
| 				left: 0; | 				left: 0; | ||||||
| 				display: flex; | 				display: flex; | ||||||
| 				flex-direction: column; | 				flex-direction: column; | ||||||
|  |  | ||||||
| 				.mobile-title { | 				.mobile-title { | ||||||
| 					// 元素 | 					// 元素 | ||||||
|           margin: 0 0 20px; | 					margin: 0; | ||||||
| 					display: block; | 					display: block; | ||||||
| 				} | 				} | ||||||
|  |  | ||||||
| 				.form { | 				.form { | ||||||
|  |           margin: 0; | ||||||
| 					width: $mobileFormWidth; | 					width: $mobileFormWidth; | ||||||
| 					// - - - tab | 					// - - - tab | ||||||
| 					:deep(.el-tabs__header) { | 					:deep(.el-tabs__header) { | ||||||
| @@ -347,7 +440,25 @@ $iconBgImage: '../assets/images/icon.png'; | |||||||
| 					.button { | 					.button { | ||||||
| 						height: $mobileButtonHeight; | 						height: $mobileButtonHeight; | ||||||
| 						line-height: 24px; | 						line-height: 24px; | ||||||
|             color: #FFFFFF; | 						color: #ffffff; | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				.login-form { | ||||||
|  | 					:deep(.el-input__inner) { | ||||||
|  | 						height: $mobileRowHeight; | ||||||
|  | 						line-height: 24px; | ||||||
|  | 						// 文字 | ||||||
|  | 						text-align: center; | ||||||
|  | 						color: #262626; | ||||||
|  | 					} | ||||||
|  |  | ||||||
|  |           :deep(#button-form-item) { | ||||||
|  |             margin: 0 !important; | ||||||
|  | 						button { | ||||||
|  | 							// 元素 | ||||||
|  | 							height: $mobileRowHeight; | ||||||
|  | 						} | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
| 				.mobile-switch { | 				.mobile-switch { | ||||||
| @@ -370,6 +481,7 @@ $iconBgImage: '../assets/images/icon.png'; | |||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		.footer { | 		.footer { | ||||||
| 			// 元素 | 			// 元素 | ||||||
| 			font-size: 12px; | 			font-size: 12px; | ||||||
| @@ -379,9 +491,8 @@ $iconBgImage: '../assets/images/icon.png'; | |||||||
| 			color: #333333; | 			color: #333333; | ||||||
| 			opacity: 0.6; | 			opacity: 0.6; | ||||||
| 			// 定位 | 			// 定位 | ||||||
|       position: absolute; | 			// position: absolute; | ||||||
|       bottom: 20px; | 			bottom: -32px; | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										132
									
								
								src/components/ButtonNav/index.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,132 @@ | |||||||
|  | <!-- | ||||||
|  |     filename: index.vue | ||||||
|  |     author: liubin | ||||||
|  |     date: 2024-04-02 09:49:36 | ||||||
|  |     description: | ||||||
|  | --> | ||||||
|  |  | ||||||
|  | <template> | ||||||
|  |   <!-- 按钮切换 --> | ||||||
|  |   <div v-if="buttonMode" class="button-nav"> | ||||||
|  |     <button | ||||||
|  |       v-for="m in menus" | ||||||
|  |       :key="m" | ||||||
|  |       @click="currentMenu = m" | ||||||
|  |       :data-text="m" | ||||||
|  |       :class="[m === currentMenu ? 'active' : '']" | ||||||
|  |     ></button> | ||||||
|  |   </div> | ||||||
|  |   <!-- 标签切换 --> | ||||||
|  |   <div v-else class="custom-tabs" style="height: 100%; width: 100%"> | ||||||
|  |     <el-tabs class="tag-nav" v-model="currentMenu" style="height: 100%"> | ||||||
|  |       <el-tab-pane | ||||||
|  |         v-for="(m, idx) in menus" | ||||||
|  |         :key="m" | ||||||
|  |         :label="idx == 0 ? `\u2002${m}\u2002` : `\u3000${m}\u3000`" | ||||||
|  |         :name="m" | ||||||
|  |       > | ||||||
|  |         <slot :name="`tab${idx + 1}`"></slot> | ||||||
|  |       </el-tab-pane> | ||||||
|  |     </el-tabs> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | export default { | ||||||
|  |   name: "ButtonNav", | ||||||
|  |   props: { | ||||||
|  |     menus: { | ||||||
|  |       type: Array, | ||||||
|  |       required: true, | ||||||
|  |       default: () => [], | ||||||
|  |       validator: (val) => { | ||||||
|  |         return val.length > 0; | ||||||
|  |       }, | ||||||
|  |     }, | ||||||
|  |     buttonMode: { | ||||||
|  |       type: Boolean, | ||||||
|  |       default: true, | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  |   data() { | ||||||
|  |     return { | ||||||
|  |       currentMenu: "", | ||||||
|  |     }; | ||||||
|  |   }, | ||||||
|  |   created() { | ||||||
|  |     this.currentMenu = this.menus[0]; | ||||||
|  |   }, | ||||||
|  |   watch: { | ||||||
|  |     currentMenu(val) { | ||||||
|  |       this.$emit("change", val); | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  | }; | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style scoped lang="scss"> | ||||||
|  | .button-nav { | ||||||
|  |   width: 100%; | ||||||
|  |   display: flex; | ||||||
|  |   gap: 12px; | ||||||
|  |  | ||||||
|  |   * { | ||||||
|  |     user-select: none; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   button { | ||||||
|  |     cursor: pointer; | ||||||
|  |     appearance: none; | ||||||
|  |     outline: none; | ||||||
|  |     border: none; | ||||||
|  |     background: #fff; | ||||||
|  |     border-radius: 8px; | ||||||
|  |     padding: 15px; | ||||||
|  |     color: #888; | ||||||
|  |     letter-spacing: 2px; | ||||||
|  |     flex: 1; | ||||||
|  |     box-sizing: padding-box; | ||||||
|  |     position: relative; | ||||||
|  |  | ||||||
|  |     &::after { | ||||||
|  |       content: attr(data-text); | ||||||
|  |       position: absolute; | ||||||
|  |       top: 5px; | ||||||
|  |       left: 50%; | ||||||
|  |       font-size: 16px; | ||||||
|  |       font-weight: 500; | ||||||
|  |       transform: translate(-50%); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     &.active { | ||||||
|  |       color: #111; | ||||||
|  |       //border-bottom: 2px solid #0b58ff; | ||||||
|  |       box-shadow: 0px 2px 1px 1px #0b58ff; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </style> | ||||||
|  |  | ||||||
|  | <style scoped> | ||||||
|  | .custom-tabs >>> .el-tabs__header { | ||||||
|  |   margin-bottom: 8px; | ||||||
|  |   display: inline-block; | ||||||
|  |   /* transform: translateY(-12px); */ | ||||||
|  | } | ||||||
|  | .custom-tabs >>> .el-tabs__item { | ||||||
|  |   padding-left: 0px !important; | ||||||
|  |   padding-right: 0px !important; | ||||||
|  |   line-height: 36px !important; | ||||||
|  |   height: 36px; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .custom-tabs >>> .el-tabs__content { | ||||||
|  |   height: calc(100% - 42px); | ||||||
|  | } | ||||||
|  | .custom-tabs >>> .el-tab-pane { | ||||||
|  |   box-sizing: border-box; | ||||||
|  |   height: 100%; | ||||||
|  |   padding: 20px; | ||||||
|  |   border: 10px solid #f002; | ||||||
|  | } | ||||||
|  | </style> | ||||||
| @@ -10,6 +10,8 @@ | |||||||
| 		ref="form" | 		ref="form" | ||||||
| 		:model="form" | 		:model="form" | ||||||
| 		:label-width="`${labelWidth}px`" | 		:label-width="`${labelWidth}px`" | ||||||
|  | 		:size="size" | ||||||
|  | 		:label-position="labelPosition" | ||||||
| 		v-loading="formLoading"> | 		v-loading="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"> | ||||||
| @@ -46,23 +48,6 @@ | |||||||
| 						:placeholder="`请选择${col.label}`" | 						:placeholder="`请选择${col.label}`" | ||||||
| 						value-format="timestamp" | 						value-format="timestamp" | ||||||
| 						v-bind="col.bind"></el-date-picker> | 						v-bind="col.bind"></el-date-picker> | ||||||
| 					<el-upload |  | ||||||
| 						class="upload-in-dialog" |  | ||||||
| 						v-if="col.upload" |  | ||||||
| 						:file-list="uploadedFileList" |  | ||||||
| 						:action="col.url" |  | ||||||
| 						:on-success="handleUploadSuccess" |  | ||||||
| 						v-bind="col.bind"> |  | ||||||
| 						<el-button |  | ||||||
| 							size="small" |  | ||||||
| 							type="primary" |  | ||||||
| 							:disabled="col.bind?.disabled || false"> |  | ||||||
| 							点击上传 |  | ||||||
| 						</el-button> |  | ||||||
| 						<div class="el-upload__tip" slot="tip" v-if="col.uploadTips"> |  | ||||||
| 							{{ col.uploadTips || '只能上传jpg/png文件,大小不超过2MB' }} |  | ||||||
| 						</div> |  | ||||||
| 					</el-upload> |  | ||||||
| 					<el-switch | 					<el-switch | ||||||
| 						v-if="col.switch" | 						v-if="col.switch" | ||||||
| 						v-model="form[col.prop]" | 						v-model="form[col.prop]" | ||||||
| @@ -74,6 +59,47 @@ | |||||||
| 						:key="col.key" | 						:key="col.key" | ||||||
| 						:is="col.subcomponent" | 						:is="col.subcomponent" | ||||||
| 						:inlineStyle="col.style"></component> | 						:inlineStyle="col.style"></component> | ||||||
|  |  | ||||||
|  | 					<div | ||||||
|  | 						class="upload-area" | ||||||
|  | 						:class="uploadOpen ? '' : 'height-48'" | ||||||
|  | 						ref="uploadArea" | ||||||
|  | 						v-if="col.upload"> | ||||||
|  | 						<span class="close-icon" :class="uploadOpen ? 'open' : ''"> | ||||||
|  | 							<el-button | ||||||
|  | 								type="text" | ||||||
|  | 								icon="el-icon-arrow-right" | ||||||
|  | 								@click="handleFilesOpen" /> | ||||||
|  | 						</span> | ||||||
|  | 						<!-- :file-list="uploadedFileList" --> | ||||||
|  | 						<el-upload | ||||||
|  | 							class="upload-in-dialog" | ||||||
|  | 							v-if="col.upload" | ||||||
|  | 							:action="uploadUrl" | ||||||
|  | 							:headers="uploadHeaders" | ||||||
|  | 							:show-file-list="false" | ||||||
|  | 							icon="el-icon-upload2" | ||||||
|  | 							:before-upload="beforeUpload" | ||||||
|  | 							:on-success="handleUploadSuccess" | ||||||
|  | 							v-bind="col.bind"> | ||||||
|  | 							<el-button size="mini" :disabled="col.bind?.disabled || false"> | ||||||
|  | 								<svg-icon | ||||||
|  | 									icon-class="icon-upload" | ||||||
|  | 									style="color: inherit"></svg-icon> | ||||||
|  | 								上传文件 | ||||||
|  | 							</el-button> | ||||||
|  | 							<div class="el-upload__tip" slot="tip" v-if="col.uploadTips"> | ||||||
|  | 								{{ col.uploadTips || '只能上传jpg/png文件, 大小不超过2MB' }} | ||||||
|  | 							</div> | ||||||
|  | 						</el-upload> | ||||||
|  | 						<uploadedFile | ||||||
|  | 							class="file" | ||||||
|  | 							v-for="file in form[col.prop] || []" | ||||||
|  | 							:file="file" | ||||||
|  | 							:key="file.fileUrl" | ||||||
|  | 							@delete="handleDeleteFile(file)" | ||||||
|  | 							@Preview="handlePreview(file)" /> | ||||||
|  | 					</div> | ||||||
| 				</el-form-item> | 				</el-form-item> | ||||||
| 			</el-col> | 			</el-col> | ||||||
| 		</el-row> | 		</el-row> | ||||||
| @@ -81,6 +107,9 @@ | |||||||
| </template> | </template> | ||||||
|  |  | ||||||
| <script> | <script> | ||||||
|  | import { getAccessToken } from '@/utils/auth'; | ||||||
|  | import tupleImg from '@/assets/images/tuple.png'; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * 找到最长的label |  * 找到最长的label | ||||||
|  * @param {*} options |  * @param {*} options | ||||||
| @@ -99,6 +128,50 @@ function findMaxLabelWidth(rows) { | |||||||
| 	return max; | 	return max; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | const uploadedFile = { | ||||||
|  | 	name: 'UploadedFile', | ||||||
|  | 	props: ['file'], | ||||||
|  | 	data() { | ||||||
|  | 		return {}; | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		handleDelete() { | ||||||
|  | 			this.$emit('delete', this.file); | ||||||
|  | 		}, | ||||||
|  | 		handlePreview() { | ||||||
|  | 			this.$emit('Preview', this.file); | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | 	mounted() {}, | ||||||
|  | 	render: function (h) { | ||||||
|  | 		return ( | ||||||
|  | 			<div | ||||||
|  | 				title={this.file.fileName} | ||||||
|  | 				style={{ | ||||||
|  | 					background: `url(${tupleImg}) no-repeat`, | ||||||
|  | 					backgroundSize: '14px', | ||||||
|  | 					backgroundPosition: '0 55%', | ||||||
|  | 					paddingLeft: '20px', | ||||||
|  | 					paddingRight: '24px', | ||||||
|  | 					textOverflow: 'ellipsis', | ||||||
|  | 					whiteSpace: 'nowrap', | ||||||
|  | 					overflow: 'hidden', | ||||||
|  | 					cursor: 'pointer', | ||||||
|  | 					display: 'inline-block', | ||||||
|  | 				}}> | ||||||
|  | 				<el-button onClick={this.handlePreview}>{this.file.fileName}</el-button> | ||||||
|  | 				<el-button | ||||||
|  | 					type="text" | ||||||
|  | 					icon="el-icon-close" | ||||||
|  | 					style="float: right; position: relative; top: 2px; left: 8px; z-index: 100" | ||||||
|  | 					class="dialog__upload_component__close" | ||||||
|  | 					onClick={this.handleDelete} | ||||||
|  | 				/> | ||||||
|  | 			</div> | ||||||
|  | 		); | ||||||
|  | 	}, | ||||||
|  | }; | ||||||
|  |  | ||||||
| export default { | export default { | ||||||
| 	name: 'DialogForm', | 	name: 'DialogForm', | ||||||
| 	model: { | 	model: { | ||||||
| @@ -106,7 +179,7 @@ export default { | |||||||
| 		event: 'update', | 		event: 'update', | ||||||
| 	}, | 	}, | ||||||
| 	emits: ['update'], | 	emits: ['update'], | ||||||
| 	components: {}, | 	components: { uploadedFile }, | ||||||
| 	props: { | 	props: { | ||||||
| 		rows: { | 		rows: { | ||||||
| 			type: Array, | 			type: Array, | ||||||
| @@ -119,14 +192,30 @@ export default { | |||||||
| 		disabled: { | 		disabled: { | ||||||
| 			type: Boolean, | 			type: Boolean, | ||||||
| 			default: false, | 			default: false, | ||||||
| 		} | 		}, | ||||||
|  | 		hasFile: { | ||||||
|  | 			type: Boolean, | ||||||
|  | 			default: false, | ||||||
|  | 		}, | ||||||
|  | 		labelPosition: { | ||||||
|  | 			type: String, | ||||||
|  | 			default: 'right', | ||||||
|  | 		}, | ||||||
|  | 		size: { | ||||||
|  | 			type: String, | ||||||
|  | 			default: '', | ||||||
|  | 		}, | ||||||
| 	}, | 	}, | ||||||
| 	data() { | 	data() { | ||||||
| 		return { | 		return { | ||||||
|  | 			uploadOpen: false, | ||||||
|  | 			form: {}, | ||||||
| 			formLoading: true, | 			formLoading: true, | ||||||
| 			optionListOf: {}, | 			optionListOf: {}, | ||||||
| 			uploadedFileList: [], | 			uploadedFileList: [], | ||||||
| 			dataLoaded: false, | 			dataLoaded: false, | ||||||
|  | 			uploadHeaders: { Authorization: 'Bearer ' + getAccessToken() }, | ||||||
|  | 			uploadUrl: process.env.VUE_APP_BASE_API + '/admin-api/infra/file/upload', // 上传有关的headers,url都是固定的 | ||||||
| 		}; | 		}; | ||||||
| 	}, | 	}, | ||||||
| 	computed: { | 	computed: { | ||||||
| @@ -136,21 +225,10 @@ export default { | |||||||
| 			return max * 20; | 			return max * 20; | ||||||
| 			// return max * 20 + 'px'; | 			// return max * 20 + 'px'; | ||||||
| 		}, | 		}, | ||||||
| 		form: { |  | ||||||
| 			get() { |  | ||||||
| 				// if (this.dataLoaded) return this.dataForm; |  | ||||||
| 				// else return {} |  | ||||||
| 				return this.dataForm; |  | ||||||
| 			}, |  | ||||||
| 			set(val) { |  | ||||||
| 				console.log('set form', val); |  | ||||||
| 			}, |  | ||||||
| 		}, |  | ||||||
| 	}, | 	}, | ||||||
| 	watch: { | 	watch: { | ||||||
| 		rows: { | 		rows: { | ||||||
| 			handler() { | 			handler() { | ||||||
| 				console.log('watch triggered!'); |  | ||||||
| 				this.$nextTick(() => { | 				this.$nextTick(() => { | ||||||
| 					this.handleOptions('watch'); | 					this.handleOptions('watch'); | ||||||
| 				}); | 				}); | ||||||
| @@ -158,6 +236,16 @@ export default { | |||||||
| 			deep: true, | 			deep: true, | ||||||
| 			immediate: false, | 			immediate: false, | ||||||
| 		}, | 		}, | ||||||
|  | 		dataForm: { | ||||||
|  | 			handler(val) { | ||||||
|  | 				this.form = JSON.parse(JSON.stringify(val)); | ||||||
|  | 				if (this.hasFile) { | ||||||
|  | 					this.form.files = this.form.files ?? []; | ||||||
|  | 				} | ||||||
|  | 			}, | ||||||
|  | 			deep: true, | ||||||
|  | 			immediate: true, | ||||||
|  | 		}, | ||||||
| 	}, | 	}, | ||||||
| 	mounted() { | 	mounted() { | ||||||
| 		// 处理 options | 		// 处理 options | ||||||
| @@ -171,6 +259,20 @@ export default { | |||||||
| 		resetFields(args) { | 		resetFields(args) { | ||||||
| 			return this.$refs.form.resetFields(args); | 			return this.$refs.form.resetFields(args); | ||||||
| 		}, | 		}, | ||||||
|  | 		async handlePreview(file) { | ||||||
|  | 			const data = await this.$axios({ | ||||||
|  | 				url: file.fileUrl, | ||||||
|  | 				method: 'get', | ||||||
|  | 				responseType: 'blob', | ||||||
|  | 			}); | ||||||
|  | 			const link = document.createElement('a'); | ||||||
|  | 			link.href = window.URL.createObjectURL(new Blob([data])); | ||||||
|  | 			link.download = file.fileName; | ||||||
|  | 			document.body.appendChild(link); | ||||||
|  | 			link.click(); | ||||||
|  | 			document.body.removeChild(link); | ||||||
|  | 			window.URL.revokeObjectURL(link.href); | ||||||
|  | 		}, | ||||||
| 		// getCode | 		// getCode | ||||||
| 		async getCode(url) { | 		async getCode(url) { | ||||||
| 			const response = await this.$axios(url); | 			const response = await this.$axios(url); | ||||||
| @@ -270,26 +372,34 @@ export default { | |||||||
| 			if (!promiseList.length) this.formLoading = false; | 			if (!promiseList.length) this.formLoading = false; | ||||||
| 		}, | 		}, | ||||||
| 		// 上传成功的特殊处理 | 		// 上传成功的特殊处理 | ||||||
| 		beforeUpload() {}, | 		beforeUpload(file) { | ||||||
|  |       console.log(file) | ||||||
|  |     }, | ||||||
| 		// 上传前的验证规则可通过 bind 属性传入 | 		// 上传前的验证规则可通过 bind 属性传入 | ||||||
| 		handleUploadSuccess(response, file, fileList) { | 		handleUploadSuccess(response, file, fileList) { | ||||||
| 			console.log( | 			this.form.files.push({ | ||||||
| 				'[dialogForm:handleUploadSuccess]', | 				fileName: file.name, | ||||||
| 				response, | 				fileUrl: response.data, | ||||||
| 				file, | 				fileType: 2, | ||||||
| 				fileList, | 			}); | ||||||
| 				this.form |  | ||||||
| 			); |  | ||||||
| 			// 保存原始文件名 |  | ||||||
| 			if ('fileNames' in this.form) this.form.fileNames.push(file.name); |  | ||||||
| 			// 保存完整地址 |  | ||||||
| 			if ('fileUrls' in this.form) this.form.fileUrls.push(response.data); |  | ||||||
| 			this.$modal.msgSuccess('上传成功'); | 			this.$modal.msgSuccess('上传成功'); | ||||||
|  | 			this.$emit('update', this.form); | ||||||
| 		}, | 		}, | ||||||
|  |  | ||||||
| 		getFileName(fileUrl) { | 		getFileName(fileUrl) { | ||||||
| 			return fileUrl.split('/').pop(); | 			return fileUrl.split('/').pop(); | ||||||
| 		}, | 		}, | ||||||
|  |  | ||||||
|  | 		handleFilesOpen() { | ||||||
|  | 			this.uploadOpen = !this.uploadOpen; | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		handleDeleteFile(file) { | ||||||
|  | 			this.form.files = this.form.files.filter( | ||||||
|  | 				(item) => item.fileUrl != file.fileUrl | ||||||
|  | 			); | ||||||
|  | 			this.$emit('update', this.form); | ||||||
|  | 		}, | ||||||
| 	}, | 	}, | ||||||
| }; | }; | ||||||
| </script> | </script> | ||||||
| @@ -299,4 +409,52 @@ export default { | |||||||
| .el-select { | .el-select { | ||||||
| 	width: 100%; | 	width: 100%; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | .upload-area { | ||||||
|  | 	// background: #ccc; | ||||||
|  | 	// display: grid; | ||||||
|  | 	// grid-auto-rows: 34px; | ||||||
|  | 	// grid-template-columns: repeat(6, minmax(32px, max-content)); | ||||||
|  | 	// gap: 8px; | ||||||
|  | 	// align-items: center; | ||||||
|  | 	position: relative; | ||||||
|  | 	overflow: hidden; | ||||||
|  | 	transition: height 0.3s ease-out; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .upload-in-dialog { | ||||||
|  | 	// display: inline-block; | ||||||
|  | 	margin-right: 24px; | ||||||
|  | 	// background: #ccc; | ||||||
|  | 	position: relative; | ||||||
|  | 	// top: -13px; | ||||||
|  | 	float: left; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .close-icon { | ||||||
|  | 	// background: #ccc; | ||||||
|  | 	position: absolute; | ||||||
|  | 	top: 0; | ||||||
|  | 	right: 12px; | ||||||
|  | 	z-index: 100; | ||||||
|  | 	transition: transform 0.3s ease-out; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .close-icon.open { | ||||||
|  | 	transform: rotateZ(90deg); | ||||||
|  | } | ||||||
|  | </style> | ||||||
|  |  | ||||||
|  | <style> | ||||||
|  | .dialog__upload_component__close { | ||||||
|  | 	color: #ccc; | ||||||
|  | } | ||||||
|  | .dialog__upload_component__close:hover { | ||||||
|  | 	/* color: #777; */ | ||||||
|  | 	color: red; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .height-48 { | ||||||
|  | 	height: 35px !important; | ||||||
|  | } | ||||||
| </style> | </style> | ||||||
|   | |||||||
							
								
								
									
										94
									
								
								src/filter/code-filter.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,94 @@ | |||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * @Date: 2020-12-29 16:49:28 | ||||||
|  |  * @LastEditors: zwq | ||||||
|  |  * @LastEditTime: 2024-09-11 13:40:48 | ||||||
|  |  * @FilePath: \basic-admin\src\filters\basicData\index.js | ||||||
|  |  * @Description: | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | const table = { | ||||||
|  |   lineStatus: { | ||||||
|  |     1: '生产中', | ||||||
|  |     2: '停止', | ||||||
|  |     3: '未知', | ||||||
|  |   }, | ||||||
|  |   deactivate: { | ||||||
|  |     1: '启用', | ||||||
|  |     0: '停用', | ||||||
|  |   }, | ||||||
|  |   wareType: { | ||||||
|  |     1: '缓存', | ||||||
|  |     2: '活动', | ||||||
|  |     3: '其它', | ||||||
|  |   }, | ||||||
|  |   reportType: { | ||||||
|  |     2: '日', | ||||||
|  |     3: '周', | ||||||
|  |     4: '月', | ||||||
|  |     5: '年', | ||||||
|  |   }, | ||||||
|  |   manual: { | ||||||
|  |     1: '手动', | ||||||
|  |     0: '自动', | ||||||
|  |   }, | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 日期格式化 | ||||||
|  | export function parseTime(time, pattern) { | ||||||
|  |   if (arguments.length === 0 || !time) { | ||||||
|  |     return null | ||||||
|  |   } | ||||||
|  |   const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}' | ||||||
|  |   let date | ||||||
|  |   if (typeof time === 'object') { | ||||||
|  |     date = time | ||||||
|  |   } else { | ||||||
|  |     if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) { | ||||||
|  |       time = parseInt(time) | ||||||
|  |     } else if (typeof time === 'string') { | ||||||
|  |       time = time.replace(new RegExp(/-/gm), '/').replace('T', ' ').replace(new RegExp(/\.\d{3}/gm), ''); | ||||||
|  |     } | ||||||
|  |     if ((typeof time === 'number') && (time.toString().length === 10)) { | ||||||
|  |       time = time * 1000 | ||||||
|  |     } | ||||||
|  |     date = new Date(time) | ||||||
|  |   } | ||||||
|  |   const formatObj = { | ||||||
|  |     y: date.getFullYear(), | ||||||
|  |     m: date.getMonth() + 1, | ||||||
|  |     d: date.getDate(), | ||||||
|  |     h: date.getHours(), | ||||||
|  |     i: date.getMinutes(), | ||||||
|  |     s: date.getSeconds(), | ||||||
|  |     a: date.getDay(), | ||||||
|  |     w: '', | ||||||
|  |   } | ||||||
|  |   const time_str = format.replace(/{([ymdhisaw])+}/g, (result, key) => { | ||||||
|  |     let value = formatObj[key] | ||||||
|  |     // Note: getDay() returns 0 on Sunday | ||||||
|  |     if (key === 'a') { | ||||||
|  |       return ['日', '一', '二', '三', '四', '五', '六'][value] | ||||||
|  |     } | ||||||
|  |     if (key === 'w') { | ||||||
|  |       const current = new Date(time); | ||||||
|  |       current.setHours(0, 0, 0); | ||||||
|  |       current.setDate(current.getDate() + 4 - (current.getDay() || 7)); | ||||||
|  |       const firstThursday = new Date(current.getFullYear(), 0, 4); | ||||||
|  |       firstThursday.setDate(firstThursday.getDate() + 4 - (firstThursday.getDay() || 7)); | ||||||
|  |       const time1 = current.getTime() - firstThursday.getTime(); | ||||||
|  |       const weeks = Math.ceil(time1 / (7 * 24 * 3600 * 1000)); | ||||||
|  |       return (weeks + 1) | ||||||
|  |     } | ||||||
|  |     if (result.length > 0 && value < 10) { | ||||||
|  |       value = '0' + value | ||||||
|  |     } | ||||||
|  |     return value || 0 | ||||||
|  |   }) | ||||||
|  |   return time_str | ||||||
|  | } | ||||||
|  | export default function (dictTable) { | ||||||
|  |   return function (val) { | ||||||
|  |     return table?.[dictTable]?.[val] | ||||||
|  |   } | ||||||
|  | } | ||||||
| @@ -9,6 +9,7 @@ import store from './store'; | |||||||
| import router from './router'; | import router from './router'; | ||||||
| import directive from './directive'; // directive | import directive from './directive'; // directive | ||||||
| import plugins from './plugins'; // plugins | import plugins from './plugins'; // plugins | ||||||
|  | import dataV from '@jiaminghi/data-view' | ||||||
|  |  | ||||||
| import './assets/icons'; // icon | import './assets/icons'; // icon | ||||||
| import './permission'; // permission control | import './permission'; // permission control | ||||||
| @@ -77,6 +78,7 @@ Vue.use(directive); | |||||||
| Vue.use(plugins); | Vue.use(plugins); | ||||||
| Vue.use(VueMeta); | Vue.use(VueMeta); | ||||||
| // Vue.use(hljs.vuePlugin); | // Vue.use(hljs.vuePlugin); | ||||||
|  | Vue.use(dataV); | ||||||
|  |  | ||||||
| // bpmnProcessDesigner 需要引入 | // bpmnProcessDesigner 需要引入 | ||||||
| import MyPD from '@/components/bpmnProcessDesigner/package/index.js'; | import MyPD from '@/components/bpmnProcessDesigner/package/index.js'; | ||||||
|   | |||||||
							
								
								
									
										122
									
								
								src/mixins/basic-add.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,122 @@ | |||||||
|  | /* | ||||||
|  |  * @Author: zwq | ||||||
|  |  * @Date: 2022-08-24 11:19:43 | ||||||
|  |  * @LastEditors: zwq | ||||||
|  |  * @LastEditTime: 2024-04-10 15:46:19 | ||||||
|  |  * @Description: | ||||||
|  |  */ | ||||||
|  | import { listData } from "@/api/system/dict/data"; //数据字典接口 | ||||||
|  | export default { | ||||||
|  |   data() { | ||||||
|  |     /* eslint-disable */ | ||||||
|  |     return { | ||||||
|  |       urlOptions: { | ||||||
|  |         createURL: '', //新增接口 | ||||||
|  |         updateURL: '', //编辑提交接口 | ||||||
|  |         infoURL: '', //编辑时获取单条数据接口 | ||||||
|  |         codeURL: '', //获取code接口(返回结果为dataForm.code字段) | ||||||
|  |         optionArrUrl: [], //需要获取下拉框的方法数组 | ||||||
|  |         optionArr: {}, //需要获取下拉框的方法数组的返回结果 | ||||||
|  |         dictNameList: [], //数据字典name数组 | ||||||
|  |         dictArr: {}, //需要获取数据字典的方法数组的返回结果 | ||||||
|  |       }, | ||||||
|  |       visible: false, | ||||||
|  |       setData: false, // 是否需要【编辑时获取单条数据接口】返回的数据操作 | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   created() { | ||||||
|  |   }, | ||||||
|  |   activated() { | ||||||
|  |   }, | ||||||
|  |   methods: { | ||||||
|  |     init(id) { | ||||||
|  |       this.dataForm.id = id || null; | ||||||
|  |       this.visible = true; | ||||||
|  |       if (this.urlOptions.optionArrUrl.length > 0) { | ||||||
|  |         this.getArr() | ||||||
|  |       } | ||||||
|  |       if (this.urlOptions.dictNameList.length > 0) { | ||||||
|  |         this.getDict() | ||||||
|  |       } | ||||||
|  |       this.$nextTick(() => { | ||||||
|  |         this.$refs["dataForm"].resetFields(); | ||||||
|  |         if (this.dataForm.id) { | ||||||
|  |           this.urlOptions.infoURL(id).then(response => { | ||||||
|  |             this.dataForm = response.data; | ||||||
|  |             if (this.setData) { | ||||||
|  |               this.setDataForm() | ||||||
|  |             } | ||||||
|  |           }); | ||||||
|  |         } else { | ||||||
|  |           if (this.urlOptions.codeURL) { | ||||||
|  |             this.getCode() | ||||||
|  |           } | ||||||
|  | 				} | ||||||
|  |       }); | ||||||
|  |     }, | ||||||
|  |     /** 获取code */ | ||||||
|  | 		getCode() { | ||||||
|  | 			this.urlOptions.codeURL() | ||||||
|  | 				.then(({ data: res }) => { | ||||||
|  | 					this.dataForm.code = res; | ||||||
|  | 				}) | ||||||
|  | 				.catch(() => {}); | ||||||
|  | 		}, | ||||||
|  |     /** 获取下拉框数组 */ | ||||||
|  |     getArr() { | ||||||
|  |       const params = { | ||||||
|  |         pageSize: 100, | ||||||
|  |         pageNo: 1, | ||||||
|  |       } | ||||||
|  |       this.urlOptions.optionArrUrl.forEach((item, index) => { | ||||||
|  |         item(params).then(({ data: res }) => { | ||||||
|  |           this.$set(this.urlOptions.optionArr, `arr${index}`, res.list) | ||||||
|  |         }) | ||||||
|  |           .catch(() => { | ||||||
|  |           }); | ||||||
|  |       }); | ||||||
|  |     }, | ||||||
|  |     /** 查询字典数据列表 */ | ||||||
|  |     getDict() { | ||||||
|  |       this.urlOptions.dictNameList.forEach((item,index)=>{ | ||||||
|  |         const queryParams = { | ||||||
|  |           pageNo: 1, | ||||||
|  |           pageSize: 99, | ||||||
|  |           dictType: item, | ||||||
|  |         } | ||||||
|  |         listData(queryParams).then(response => { | ||||||
|  |           this.$set(this.urlOptions.dictArr, `dict${index}`, response.data.list) | ||||||
|  |         }); | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     // 表单提交 | ||||||
|  |     dataFormSubmit() { | ||||||
|  |       this.$refs["dataForm"].validate((valid) => { | ||||||
|  |         if (!valid) { | ||||||
|  |           return false; | ||||||
|  |         } | ||||||
|  |         // 修改的提交 | ||||||
|  |         if (this.dataForm.id) { | ||||||
|  |           this.urlOptions.updateURL(this.dataForm).then(response => { | ||||||
|  |             this.$modal.msgSuccess("修改成功"); | ||||||
|  |             this.visible = false; | ||||||
|  |             this.$emit("refreshDataList"); | ||||||
|  |           }); | ||||||
|  |           return; | ||||||
|  |         } | ||||||
|  |         // 添加的提交 | ||||||
|  |         this.urlOptions.createURL(this.dataForm).then(response => { | ||||||
|  |           this.$modal.msgSuccess("新增成功"); | ||||||
|  |           this.visible = false; | ||||||
|  |           this.$emit("refreshDataList"); | ||||||
|  |         }); | ||||||
|  |       }); | ||||||
|  |     }, | ||||||
|  |     /** 清空form */ | ||||||
|  |     formClear() { | ||||||
|  |       if (this.$refs.dataForm!==undefined) { | ||||||
|  |           this.$refs.dataForm.resetFields(); | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										128
									
								
								src/mixins/basic-page.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,128 @@ | |||||||
|  | /* | ||||||
|  |  * @Author: zwq | ||||||
|  |  * @Date: 2022-08-24 11:19:43 | ||||||
|  |  * @LastEditors: zwq | ||||||
|  |  * @LastEditTime: 2024-04-02 09:33:29 | ||||||
|  |  * @Description: | ||||||
|  |  */ | ||||||
|  | export default { | ||||||
|  |   data() { | ||||||
|  |     /* eslint-disable */ | ||||||
|  |     return { | ||||||
|  |       urlOptions: { | ||||||
|  |         getDataListURL: '', //获取table接口 | ||||||
|  |         deleteURL: '', //删除接口 | ||||||
|  |         exportURL: '' //导出接口 | ||||||
|  |       }, | ||||||
|  |       tableData: [], //table数据 | ||||||
|  |       listQuery: { //分页 | ||||||
|  |         pageSize: 10, | ||||||
|  |         pageNo: 1, | ||||||
|  |         total: 1, | ||||||
|  |       }, | ||||||
|  |       exportLoading: false, //导出完成的加载状态是否开启 | ||||||
|  |       dataListLoading: false, //获取table的加载状态是否开启 | ||||||
|  |       addOrEditTitle: '', //dialog的title | ||||||
|  |       addOrUpdateVisible: false, //dialog状态 | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   created() { | ||||||
|  |   }, | ||||||
|  |   mounted() { | ||||||
|  |     this.getDataList() | ||||||
|  |   }, | ||||||
|  |   methods: { | ||||||
|  |     // 获取数据列表 | ||||||
|  |     getDataList() { | ||||||
|  |       this.dataListLoading = true; | ||||||
|  |       this.urlOptions.getDataListURL(this.listQuery).then(response => { | ||||||
|  |         this.tableData = response.data.list; | ||||||
|  |         this.listQuery.total = response.data.total; | ||||||
|  |         this.dataListLoading = false; | ||||||
|  |       }); | ||||||
|  |     }, | ||||||
|  |     // 每页数 | ||||||
|  |     sizeChangeHandle(val) { | ||||||
|  |       this.listQuery.pageSize = val; | ||||||
|  |       this.listQuery.pageNo = 1; | ||||||
|  |       this.getDataList(); | ||||||
|  |     }, | ||||||
|  |     // 当前页 | ||||||
|  |     currentChangeHandle(val) { | ||||||
|  |       this.listQuery.pageNo = val; | ||||||
|  |       this.getDataList(); | ||||||
|  |     }, | ||||||
|  |     // 新增 | ||||||
|  |     addOrUpdateHandle(id) { | ||||||
|  |       this.addOrEditTitle = "新增"; | ||||||
|  |       this.addOrUpdateVisible = true; | ||||||
|  |       this.$nextTick(() => { | ||||||
|  |         this.$refs.addOrUpdate.init(id); | ||||||
|  |       }); | ||||||
|  |     }, | ||||||
|  |     //tableBtn点击 | ||||||
|  |     handleClick(val) { | ||||||
|  |       if (val.type === "edit") { | ||||||
|  |         this.addOrUpdateVisible = true; | ||||||
|  |         this.addOrEditTitle = "编辑"; | ||||||
|  |         this.$nextTick(() => { | ||||||
|  |           this.$refs.addOrUpdate.init(val.data.id); | ||||||
|  |         }); | ||||||
|  |       } else if (val.type === "delete") { | ||||||
|  |         this.deleteHandle(val.data.id, val.data.name, val.data._pageIndex) | ||||||
|  |       } else { | ||||||
|  |         this.otherMethods(val) | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     // 删除 | ||||||
|  |     deleteHandle(id, name, index) { | ||||||
|  |       this.$confirm(`是否确认删除${name ? '名称为"' + name + '"' : '序号为"' + index + '"'}的数据项?`, "系统提示", { | ||||||
|  |         confirmButtonText: "确定", | ||||||
|  |         cancelButtonText: "取消", | ||||||
|  |         type: "warning", | ||||||
|  |       }) | ||||||
|  |         .then(() => { | ||||||
|  |           this.urlOptions.deleteURL(id).then(({ data }) => { | ||||||
|  |             this.$message({ | ||||||
|  |               message: "操作成功", | ||||||
|  |               type: "success", | ||||||
|  |               duration: 1500, | ||||||
|  |               onClose: () => { | ||||||
|  |                 this.getDataList(); | ||||||
|  |               }, | ||||||
|  |             }); | ||||||
|  |           }); | ||||||
|  |         }) | ||||||
|  |         .catch(() => { }); | ||||||
|  |     }, | ||||||
|  |     // dialog取消 | ||||||
|  |     handleCancel() { | ||||||
|  |       this.$refs.addOrUpdate.formClear() | ||||||
|  |       this.addOrUpdateVisible = false | ||||||
|  |       this.addOrEditTitle = '' | ||||||
|  |     }, | ||||||
|  |     // dialog确定 | ||||||
|  |     handleConfirm() { | ||||||
|  |       this.$refs.addOrUpdate.dataFormSubmit() | ||||||
|  |     }, | ||||||
|  |     // dialog的父组件方法this.$emit("refreshDataList"); | ||||||
|  |     successSubmit() { | ||||||
|  |       this.handleCancel() | ||||||
|  |       this.getDataList() | ||||||
|  |     }, | ||||||
|  |     /** 导出按钮操作 */ | ||||||
|  |     handleExport() { | ||||||
|  |       // 处理查询参数 | ||||||
|  |       let params = { ...this.queryParams }; | ||||||
|  |       params.pageNo = undefined; | ||||||
|  |       params.pageSize = undefined; | ||||||
|  |       this.$modal.confirm('是否确认导出所有数据项?').then(() => { | ||||||
|  |         this.exportLoading = true; | ||||||
|  |         return this.urlOptions.exportURL(params); | ||||||
|  |       }).then(response => { | ||||||
|  |         this.$download.excel(response, '报表.xls'); | ||||||
|  |         this.exportLoading = false; | ||||||
|  |       }).catch(() => { }); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										20
									
								
								src/mixins/lb/tableHeightMixin.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,20 @@ | |||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			tableH: this.tableHeight(260), | ||||||
|  | 		}; | ||||||
|  | 	}, | ||||||
|  | 	created() { | ||||||
|  | 		this.tableH = this?.heightNum ? this.tableHeight(this.heightNum) : this.tableHeight(260); | ||||||
|  | 		window.addEventListener('resize', this._setTableHeight); | ||||||
|  | 	}, | ||||||
|  | 	destroyed() { | ||||||
|  | 		window.removeEventListener('resize', this._setTableHeight); | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		_setTableHeight() { | ||||||
|  | 			this.tableH = this?.heightNum ? this.tableHeight(this.heightNum) : this.tableHeight(260); | ||||||
|  | 			// this.tableH = this.tableHeight(260); | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | }; | ||||||
							
								
								
									
										20
									
								
								src/mixins/tableHeightMixin.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,20 @@ | |||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			tableH: this.tableHeight(260), | ||||||
|  | 		}; | ||||||
|  | 	}, | ||||||
|  | 	created() { | ||||||
|  | 		this.tableH = this?.heightNum ? this.tableHeight(this.heightNum) : this.tableHeight(260); | ||||||
|  | 		window.addEventListener('resize', this._setTableHeight); | ||||||
|  | 	}, | ||||||
|  | 	destroyed() { | ||||||
|  | 		window.removeEventListener('resize', this._setTableHeight); | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		_setTableHeight() { | ||||||
|  | 			this.tableH = this?.heightNum ? this.tableHeight(this.heightNum) : this.tableHeight(260); | ||||||
|  | 			// this.tableH = this.tableHeight(260); | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | }; | ||||||
| @@ -70,17 +70,18 @@ export const constantRoutes = [ | |||||||
|     hidden: true |     hidden: true | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     path: '/', |     path: "", | ||||||
|     component: Layout, |     component: Layout, | ||||||
|     redirect: 'core/base/factory', |     redirect: "index", | ||||||
|     // children: [{ |     children: [ | ||||||
|     //   path: 'index', |       { | ||||||
|     //   redirect: 'core/base/factory', |         path: "index", | ||||||
|     //   component: (resolve) => require(['@/views/index'], resolve), |         component: (resolve) => require(["@/views/home/index"], resolve), | ||||||
|     //   name: '首页', |         name: "首页", | ||||||
|     //   meta: { title: '首页', icon: 'dashboard', affix: true } |         meta: { title: "首页", icon: "dashboard", affix: true }, | ||||||
|     // } |         hidden: true | ||||||
|     // ] |       }, | ||||||
|  |     ], | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     path: '/user', |     path: '/user', | ||||||
|   | |||||||
| @@ -86,6 +86,7 @@ export const DICT_TYPE = { | |||||||
|   // ============== PRODUCT - 产品模块 ============= |   // ============== PRODUCT - 产品模块 ============= | ||||||
|   UNIT_DICT: 'unit_dict', |   UNIT_DICT: 'unit_dict', | ||||||
|   PRODUCT_TYPE: 'product_type', |   PRODUCT_TYPE: 'product_type', | ||||||
|  |   PROCESS_TYPE: 'process_type', | ||||||
|  |  | ||||||
|   // ============== ENERGY - 能源模块 ============= |   // ============== ENERGY - 能源模块 ============= | ||||||
|   ENERGY_UNIT: 'energy_unit', |   ENERGY_UNIT: 'energy_unit', | ||||||
|   | |||||||
| @@ -48,6 +48,50 @@ export function parseTime(time, pattern) { | |||||||
|   return time_str |   return time_str | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // 日期格式化(仅适用表格) | ||||||
|  | export function parseTimeTable(pattern) { | ||||||
|  |   return function(time){ | ||||||
|  |     if (arguments.length === 0 || !time) { | ||||||
|  |       return null | ||||||
|  |     } | ||||||
|  |     const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}' | ||||||
|  |     let date | ||||||
|  |     if (typeof time === 'object') { | ||||||
|  |       date = time | ||||||
|  |     } else { | ||||||
|  |       if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) { | ||||||
|  |         time = parseInt(time) | ||||||
|  |       } else if (typeof time === 'string') { | ||||||
|  |         time = time.replace(new RegExp(/-/gm), '/').replace('T', ' ').replace(new RegExp(/\.\d{3}/gm),''); | ||||||
|  |       } | ||||||
|  |       if ((typeof time === 'number') && (time.toString().length === 10)) { | ||||||
|  |         time = time * 1000 | ||||||
|  |       } | ||||||
|  |       date = new Date(time) | ||||||
|  |     } | ||||||
|  |     const formatObj = { | ||||||
|  |       y: date.getFullYear(), | ||||||
|  |       m: date.getMonth() + 1, | ||||||
|  |       d: date.getDate(), | ||||||
|  |       h: date.getHours(), | ||||||
|  |       i: date.getMinutes(), | ||||||
|  |       s: date.getSeconds(), | ||||||
|  |       a: date.getDay() | ||||||
|  |     } | ||||||
|  |     const time_str = format.replace(/{([ymdhisa])+}/g, (result, key) => { | ||||||
|  |       let value = formatObj[key] | ||||||
|  |       // Note: getDay() returns 0 on Sunday | ||||||
|  |       if (key === 'a') { | ||||||
|  |         return ['日', '一', '二', '三', '四', '五', '六'][value] | ||||||
|  |       } | ||||||
|  |       if (result.length > 0 && value < 10) { | ||||||
|  |         value = '0' + value | ||||||
|  |       } | ||||||
|  |       return value || 0 | ||||||
|  |     }) | ||||||
|  |     return time_str | ||||||
|  |   } | ||||||
|  | } | ||||||
| // 表单重置 | // 表单重置 | ||||||
| export function resetForm(refName) { | export function resetForm(refName) { | ||||||
|   if (this.$refs[refName]) { |   if (this.$refs[refName]) { | ||||||
|   | |||||||
| @@ -6,7 +6,9 @@ | |||||||
| --> | --> | ||||||
|  |  | ||||||
| <template> | <template> | ||||||
| 	<div ref="dataBoard" class=""></div> | 	<div ref="dataBoard" class="data-board"> | ||||||
|  | 		<el-button type="text" @click="goback" class="go-back--btn">返回</el-button> | ||||||
|  | 	</div> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
| <script> | <script> | ||||||
| @@ -24,39 +26,42 @@ export default { | |||||||
| 			mainFooter: null, // dom | 			mainFooter: null, // dom | ||||||
| 		}; | 		}; | ||||||
| 	}, | 	}, | ||||||
| 	mounted() { | 	// mounted() { | ||||||
| 		this.$nextTick(() => { | 	// 	this.$nextTick(() => { | ||||||
| 			this.modify(); | 	// 		this.modify(); | ||||||
| 		}); | 	// 	}); | ||||||
| 	}, | 	// }, | ||||||
| 	activated() { | 	// activated() { | ||||||
| 		this.modify(); | 	// 	this.modify(); | ||||||
| 	}, | 	// }, | ||||||
| 	deactivated() { | 	// deactivated() { | ||||||
| 		this.recover(); | 	// 	this.recover(); | ||||||
| 	}, | 	// }, | ||||||
| 	beforeDestroy() { | 	// beforeDestroy() { | ||||||
| 		this.recover(); | 	// 	this.recover(); | ||||||
| 	}, | 	// }, | ||||||
| 	methods: { | 	methods: { | ||||||
| 		modify() { | 		// modify() { | ||||||
| 			// 在这个页面临时修改下父类的margin,结束时需还原 | 		// 	// 在这个页面临时修改下父类的margin,结束时需还原 | ||||||
| 			this.appMain = document.querySelector('.app-main'); | 		// 	this.appMain = document.querySelector('.app-main'); | ||||||
| 			// this.appMain.style.minHeight = 'calc(100vh - 90px)'; | 		// 	// this.appMain.style.minHeight = 'calc(100vh - 90px)'; | ||||||
| 			this.appMain.style.margin = 0; | 		// 	this.appMain.style.margin = 0; | ||||||
| 			// 在这个页面临时删除 main-footer 元素,结束时需还原 | 		// 	// 在这个页面临时删除 main-footer 元素,结束时需还原 | ||||||
| 			// this.mainFooter = document.querySelector('.main-footer').cloneNode(true); | 		// 	// this.mainFooter = document.querySelector('.main-footer').cloneNode(true); | ||||||
| 			// document.querySelector('.main-footer').remove(); | 		// 	// document.querySelector('.main-footer').remove(); | ||||||
|             this.$refs.dataBoard.classList.add('data-board'); |         //     this.$refs.dataBoard.classList.add('data-board'); | ||||||
| 		}, | 		// }, | ||||||
| 		recover() { | 		// recover() { | ||||||
|             this.$refs.dataBoard.classList.remove('data-board'); |         //     this.$refs.dataBoard.classList.remove('data-board'); | ||||||
| 			this.$nextTick(() => { | 		// 	this.$nextTick(() => { | ||||||
| 				this.appMain.style.margin = this.parentStyle.margin; | 		// 		this.appMain.style.margin = this.parentStyle.margin; | ||||||
| 				// this.appMain.style.minHeight = this.parentStyle.minHeight; | 		// 		// this.appMain.style.minHeight = this.parentStyle.minHeight; | ||||||
| 				// this.appMain.insertAdjacentElement('afterend', this.mainFooter); | 		// 		// this.appMain.insertAdjacentElement('afterend', this.mainFooter); | ||||||
| 			}); | 		// 	}); | ||||||
| 		}, | 		// }, | ||||||
|  | 		goback() { | ||||||
|  | 			this.$router.go(-1); | ||||||
|  | 		} | ||||||
| 	}, | 	}, | ||||||
| }; | }; | ||||||
| </script> | </script> | ||||||
| @@ -71,4 +76,25 @@ export default { | |||||||
| 	background: url('../../../assets/images/DataBoard.png') 100% 100% / contain | 	background: url('../../../assets/images/DataBoard.png') 100% 100% / contain | ||||||
| 		no-repeat; | 		no-repeat; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | .go-back--btn { | ||||||
|  | 	position: fixed; | ||||||
|  | 	top: 28px; | ||||||
|  | 	left: 24px; | ||||||
|  | 	color: #fff; | ||||||
|  | 	font-size: 18px; | ||||||
|  | 	letter-spacing: 6px; | ||||||
|  |  | ||||||
|  | 	&:hover { | ||||||
|  | 		text-decoration: underline; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	&::after { | ||||||
|  | 		content: "\2BAA"; | ||||||
|  | 		position: absolute; | ||||||
|  | 		top: 6px; | ||||||
|  | 		right: -26px; | ||||||
|  | 		font-size: 24px; | ||||||
|  | 	} | ||||||
|  | } | ||||||
| </style> | </style> | ||||||
|   | |||||||
| @@ -320,7 +320,7 @@ export default { | |||||||
|  |  | ||||||
| 		// 新增属性 | 		// 新增属性 | ||||||
| 		handleAddAttr() { | 		handleAddAttr() { | ||||||
| 			if (!this.dataId) return this.$message.error('请先创建设备分组信息'); | 			if (!this.dataId) return this.$message.warning('请先创建设备分组信息'); | ||||||
| 			this.attrForm = { | 			this.attrForm = { | ||||||
| 				id: null, | 				id: null, | ||||||
| 				equipmentGroupId: this.dataId, | 				equipmentGroupId: this.dataId, | ||||||
|   | |||||||
| @@ -38,7 +38,7 @@ | |||||||
| 			@close="cancel" | 			@close="cancel" | ||||||
| 			@cancel="cancel" | 			@cancel="cancel" | ||||||
| 			@confirm="submitForm"> | 			@confirm="submitForm"> | ||||||
| 			<DialogForm v-if="open" ref="form" :dataForm="form" :rows="rows" /> | 			<DialogForm v-if="open" ref="form" v-model="form" :rows="rows" /> | ||||||
| 		</base-dialog> | 		</base-dialog> | ||||||
|  |  | ||||||
| 		<!-- 抽屉 详情 --> | 		<!-- 抽屉 详情 --> | ||||||
|   | |||||||
| @@ -71,14 +71,14 @@ | |||||||
| 			</el-col> | 			</el-col> | ||||||
|  |  | ||||||
| 			<el-col :span="12"> | 			<el-col :span="12"> | ||||||
| 				<el-form-item label="工段排序" prop="sort"> | 				<el-form-item label="工段设备排序" prop="sort"> | ||||||
| 					<el-input-number | 					<el-input-number | ||||||
| 						v-model="dataForm.sort" | 						v-model="dataForm.sort" | ||||||
| 						filterable | 						filterable | ||||||
| 						min="0" | 						min="0" | ||||||
| 						max="100" | 						max="100" | ||||||
| 						@change="$emit('update', dataForm)" | 						@change="$emit('update', dataForm)" | ||||||
| 						placeholder="请输入工段排序" /> | 						placeholder="请输入工段设备排序" /> | ||||||
| 				</el-form-item> | 				</el-form-item> | ||||||
| 			</el-col> | 			</el-col> | ||||||
| 		</el-row> | 		</el-row> | ||||||
| @@ -112,6 +112,7 @@ | |||||||
| 								{ label: '无类型', value: 0 }, | 								{ label: '无类型', value: 0 }, | ||||||
| 								{ label: '进口统计', value: 1 }, | 								{ label: '进口统计', value: 1 }, | ||||||
| 								{ label: '出口统计', value: 2 }, | 								{ label: '出口统计', value: 2 }, | ||||||
|  |                 { label: '进出口计数', value: 3 }, | ||||||
| 							]" | 							]" | ||||||
| 							:key="opt.value" | 							:key="opt.value" | ||||||
| 							:label="opt.label" | 							:label="opt.label" | ||||||
|   | |||||||
| @@ -4,7 +4,8 @@ | |||||||
| 		<SearchBar | 		<SearchBar | ||||||
| 			:formConfigs="searchBarFormConfig" | 			:formConfigs="searchBarFormConfig" | ||||||
| 			ref="search-bar" | 			ref="search-bar" | ||||||
| 			@headBtnClick="handleSearchBarBtnClick" /> | 			@select-changed="handleSearchBarChanged" | ||||||
|  | 			@headBtnClick="buttonClick" /> | ||||||
|  |  | ||||||
| 		<!-- 列表 --> | 		<!-- 列表 --> | ||||||
| 		<base-table | 		<base-table | ||||||
| @@ -52,6 +53,8 @@ import { | |||||||
| 	getEquipmentBindSectionPage, | 	getEquipmentBindSectionPage, | ||||||
| 	exportEquipmentBindSectionExcel, | 	exportEquipmentBindSectionExcel, | ||||||
| } from '@/api/base/equipmentBindSection'; | } from '@/api/base/equipmentBindSection'; | ||||||
|  | import { getPdList } from '@/api/core/monitoring/auto'; | ||||||
|  | import { getFactoryPage } from '@/api/core/base/factory'; | ||||||
| import moment from 'moment'; | import moment from 'moment'; | ||||||
| import basicPageMixin from '@/mixins/lb/basicPageMixin'; | import basicPageMixin from '@/mixins/lb/basicPageMixin'; | ||||||
| import DialogForm from './dialogForm.vue'; | import DialogForm from './dialogForm.vue'; | ||||||
| @@ -61,7 +64,7 @@ export default { | |||||||
| 	mixins: [basicPageMixin], | 	mixins: [basicPageMixin], | ||||||
| 	data() { | 	data() { | ||||||
| 		return { | 		return { | ||||||
| 			searchBarKeys: ['workshopSectionId', 'equipmentName'], | 			searchBarKeys: ['factoryId','productionLineId','workshopSectionId', 'equipmentName'], | ||||||
| 			tableBtn: [ | 			tableBtn: [ | ||||||
| 				this.$auth.hasPermi('base:equipment-bind-section:update') | 				this.$auth.hasPermi('base:equipment-bind-section:update') | ||||||
| 					? { | 					? { | ||||||
| @@ -84,8 +87,9 @@ 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: 'productionLine', label: '产线名称' }, | 				{ prop: 'factoryName', label: '工厂' }, | ||||||
| 				{ prop: 'workshopSection', label: '工段名称' }, | 				{ prop: 'productionLine', label: '产线' }, | ||||||
|  | 				{ prop: 'workshopSection', label: '工段' }, | ||||||
| 				{ prop: 'equipment', label: '设备名称' }, | 				{ prop: 'equipment', label: '设备名称' }, | ||||||
| 				{ prop: 'sort', label: '工段中排序' }, | 				{ prop: 'sort', label: '工段中排序' }, | ||||||
| 				{ | 				{ | ||||||
| @@ -98,7 +102,7 @@ export default { | |||||||
| 					prop: 'sectionDataType', | 					prop: 'sectionDataType', | ||||||
| 					label: '工段数据类型', | 					label: '工段数据类型', | ||||||
| 					filter: (val) => | 					filter: (val) => | ||||||
| 						val != null ? ['无类型', '进口计数', '出口计数'][val] : '-', | 						val != null ? ['无类型', '进口计数', '出口计数', '进出口计数'][val] : '-', | ||||||
| 				}, | 				}, | ||||||
| 				// { | 				// { | ||||||
| 				// 	action: 'show-alert', | 				// 	action: 'show-alert', | ||||||
| @@ -129,6 +133,20 @@ export default { | |||||||
| 				// }, | 				// }, | ||||||
| 			], | 			], | ||||||
| 			searchBarFormConfig: [ | 			searchBarFormConfig: [ | ||||||
|  | 				{ | ||||||
|  | 					type: 'select', | ||||||
|  | 					label: '工厂', | ||||||
|  | 					selectOptions: [], | ||||||
|  | 					param: 'factoryId', | ||||||
|  | 					onchange: true, | ||||||
|  | 				}, | ||||||
|  | 				{ | ||||||
|  | 					type: 'select', | ||||||
|  | 					label: '产线', | ||||||
|  | 					selectOptions: [], | ||||||
|  | 					param: 'productionLineId', | ||||||
|  | 					multiple: true, | ||||||
|  | 				}, | ||||||
| 				{ | 				{ | ||||||
| 					type: 'select', | 					type: 'select', | ||||||
| 					label: '工段', | 					label: '工段', | ||||||
| @@ -209,8 +227,8 @@ export default { | |||||||
| 						label: '产线数据类型', | 						label: '产线数据类型', | ||||||
| 						options: [ | 						options: [ | ||||||
| 							{ label: '无类型', value: 0 }, | 							{ label: '无类型', value: 0 }, | ||||||
| 							{ label: '进口统计', value: 1 }, | 							{ label: '进口计数', value: 1 }, | ||||||
| 							{ label: '出口统计', value: 2 }, | 							{ label: '出口计数', value: 2 }, | ||||||
| 						], | 						], | ||||||
| 						prop: 'lineDataType', | 						prop: 'lineDataType', | ||||||
| 					}, | 					}, | ||||||
| @@ -219,8 +237,9 @@ export default { | |||||||
| 						label: '工段数据类型', | 						label: '工段数据类型', | ||||||
| 						options: [ | 						options: [ | ||||||
| 							{ label: '无类型', value: 0 }, | 							{ label: '无类型', value: 0 }, | ||||||
| 							{ label: '进口统计', value: 1 }, | 							{ label: '进口计数', value: 1 }, | ||||||
| 							{ label: '出口统计', value: 2 }, | 							{ label: '出口计数', value: 2 }, | ||||||
|  | 							{ label: '进出口计数', value: 3 }, | ||||||
| 						], | 						], | ||||||
| 						prop: 'sectionDataType', | 						prop: 'sectionDataType', | ||||||
| 					}, | 					}, | ||||||
| @@ -234,6 +253,9 @@ export default { | |||||||
| 				pageSize: 10, | 				pageSize: 10, | ||||||
| 				workshopSectionId: null, | 				workshopSectionId: null, | ||||||
| 				equipmentId: null, | 				equipmentId: null, | ||||||
|  |         equipmentName: null, | ||||||
|  |         factoryId: null, | ||||||
|  | 				productionLineId: [], | ||||||
| 			}, | 			}, | ||||||
| 			// 表单参数 | 			// 表单参数 | ||||||
| 			form: {}, | 			form: {}, | ||||||
| @@ -242,6 +264,7 @@ export default { | |||||||
| 	created() { | 	created() { | ||||||
| 		this.getList(); | 		this.getList(); | ||||||
| 		this.initWorksection(); | 		this.initWorksection(); | ||||||
|  | 		this.getPdLineList(); | ||||||
| 	}, | 	}, | ||||||
| 	methods: { | 	methods: { | ||||||
| 		/** 准备工段数据 */ | 		/** 准备工段数据 */ | ||||||
| @@ -251,7 +274,7 @@ export default { | |||||||
| 				method: 'get', | 				method: 'get', | ||||||
| 			}); | 			}); | ||||||
| 			if (code == 0) { | 			if (code == 0) { | ||||||
| 				this.searchBarFormConfig[0].selectOptions = data.map((item) => { | 				this.searchBarFormConfig[2].selectOptions = data.map((item) => { | ||||||
| 					return { | 					return { | ||||||
| 						name: item.name, | 						name: item.name, | ||||||
| 						id: item.id, | 						id: item.id, | ||||||
| @@ -259,6 +282,51 @@ export default { | |||||||
| 				}); | 				}); | ||||||
| 			} | 			} | ||||||
| 		}, | 		}, | ||||||
|  | 		getPdLineList() { | ||||||
|  | 			getPdList().then((res) => { | ||||||
|  | 				this.searchBarFormConfig[1].selectOptions = res.data || []; | ||||||
|  | 			}); | ||||||
|  | 			const params = { | ||||||
|  | 				pageSize: 100, | ||||||
|  | 				pageNo: 1, | ||||||
|  | 			}; | ||||||
|  | 			getFactoryPage(params).then((res) => { | ||||||
|  | 				this.searchBarFormConfig[0].selectOptions = res.data.list || []; | ||||||
|  | 			}); | ||||||
|  | 		}, | ||||||
|  | 		handleSearchBarChanged({ param, value }) { | ||||||
|  | 			this.queryParams.productionLineId = []; | ||||||
|  | 			this.$refs['search-bar'].formInline.productionLineId = undefined; | ||||||
|  | 			getPdList(value).then((res) => { | ||||||
|  | 				this.searchBarFormConfig[1].selectOptions = res.data || []; | ||||||
|  | 			}); | ||||||
|  | 		}, | ||||||
|  | 		buttonClick(val) { | ||||||
|  | 			switch (val.btnName) { | ||||||
|  | 				case 'search': | ||||||
|  | 					this.queryParams.pageNo = 1; | ||||||
|  | 					this.queryParams.pageSize = 10; | ||||||
|  | 					this.queryParams.name = val.name; | ||||||
|  | 					this.queryParams.workshopSectionId = val.workshopSectionId || undefined; | ||||||
|  | 					this.queryParams.equipmentName = val.equipmentName || undefined; | ||||||
|  | 					this.queryParams.factoryId = val.factoryId || undefined; | ||||||
|  | 					this.queryParams.productionLineId = val.productionLineId || []; | ||||||
|  | 					this.handleQuery(); | ||||||
|  | 					break; | ||||||
|  | 				case 'add': | ||||||
|  | 					this.handleAdd(); | ||||||
|  | 					break; | ||||||
|  | 				case 'export': | ||||||
|  | 					this.handleExport(); | ||||||
|  | 					break; | ||||||
|  | 				case 'reset': | ||||||
|  | 					this.$refs['search-bar'].resetForm(); | ||||||
|  | 					this.resetQuery(); | ||||||
|  | 					break; | ||||||
|  | 				default: | ||||||
|  | 					console.log(val); | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
| 		/** 查询列表 */ | 		/** 查询列表 */ | ||||||
| 		getList() { | 		getList() { | ||||||
| 			this.loading = true; | 			this.loading = true; | ||||||
|   | |||||||
| @@ -36,7 +36,7 @@ | |||||||
| 							v-if="showForm" | 							v-if="showForm" | ||||||
| 							ref="form" | 							ref="form" | ||||||
| 							:disabled="mode.includes('detail')" | 							:disabled="mode.includes('detail')" | ||||||
| 							:dataForm="form" | 							v-model="form" | ||||||
| 							:rows="formRows" /> | 							:rows="formRows" /> | ||||||
| 					</div> | 					</div> | ||||||
|  |  | ||||||
| @@ -320,7 +320,7 @@ export default { | |||||||
|  |  | ||||||
| 		// 新增属性 | 		// 新增属性 | ||||||
| 		handleAddAttr() { | 		handleAddAttr() { | ||||||
| 			if (!this.dataId) return this.$message.error('请先创建设备分组信息'); | 			if (!this.dataId) return this.$message.warning('请先创建设备分组信息'); | ||||||
| 			this.attrForm = { | 			this.attrForm = { | ||||||
| 				id: null, | 				id: null, | ||||||
| 				equipmentGroupId: this.dataId, | 				equipmentGroupId: this.dataId, | ||||||
|   | |||||||
| @@ -38,7 +38,7 @@ | |||||||
| 			@close="cancel" | 			@close="cancel" | ||||||
| 			@cancel="cancel" | 			@cancel="cancel" | ||||||
| 			@confirm="submitForm"> | 			@confirm="submitForm"> | ||||||
| 			<DialogForm v-if="open" ref="form" :dataForm="form" :rows="rows" /> | 			<DialogForm v-if="open" ref="form" v-model="form" :rows="rows"/> | ||||||
| 		</base-dialog> | 		</base-dialog> | ||||||
|  |  | ||||||
| 		<!-- 抽屉 详情 --> | 		<!-- 抽屉 详情 --> | ||||||
|   | |||||||
| @@ -280,7 +280,7 @@ export default { | |||||||
| 		/** 新增按钮操作 */ | 		/** 新增按钮操作 */ | ||||||
| 		handleAdd() { | 		handleAdd() { | ||||||
| 			if (this.queryParams.equipmentGroupId == null) | 			if (this.queryParams.equipmentGroupId == null) | ||||||
| 				return this.$message.error('没有检测到设备分组信息'); | 				return this.$message.warning('没有检测到设备分组信息'); | ||||||
| 			this.reset(); | 			this.reset(); | ||||||
| 			this.open = true; | 			this.open = true; | ||||||
| 			this.title = '添加设备分组报警明细'; | 			this.title = '添加设备分组报警明细'; | ||||||
|   | |||||||
							
								
								
									
										109
									
								
								src/views/base/equipmentPlc/add-or-updata.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,109 @@ | |||||||
|  | <!-- | ||||||
|  |  * @Author: zwq | ||||||
|  |  * @Date: 2021-11-18 14:16:25 | ||||||
|  |  * @LastEditors: zwq | ||||||
|  |  * @LastEditTime: 2025-02-26 16:37:29 | ||||||
|  |  * @Description: | ||||||
|  | --> | ||||||
|  | <template> | ||||||
|  | 	<el-row :gutter="20"> | ||||||
|  | 		<el-form | ||||||
|  | 			:model="dataForm" | ||||||
|  | 			:rules="dataRule" | ||||||
|  | 			ref="dataForm" | ||||||
|  | 			@keyup.enter.native="dataFormSubmit()" | ||||||
|  | 			label-width="80px"> | ||||||
|  | 			<el-col :span="12"> | ||||||
|  | 				<el-form-item label="关联表名" prop="plcTableName"> | ||||||
|  | 					<el-input | ||||||
|  | 						v-model="dataForm.plcTableName" | ||||||
|  | 						clearable | ||||||
|  | 						placeholder="请输入关联表名" /> | ||||||
|  | 				</el-form-item> | ||||||
|  | 			</el-col> | ||||||
|  | 			<el-col :span="12"> | ||||||
|  | 				<el-form-item label="编码" prop="code"> | ||||||
|  | 					<el-input | ||||||
|  | 						v-model="dataForm.code" | ||||||
|  | 						clearable | ||||||
|  | 						placeholder="请输入编码" /> | ||||||
|  | 				</el-form-item> | ||||||
|  | 			</el-col> | ||||||
|  | 			<el-col :span="12"> | ||||||
|  | 				<el-form-item label="标识" prop="name"> | ||||||
|  | 					<el-input | ||||||
|  | 						v-model="dataForm.name" | ||||||
|  | 						clearable | ||||||
|  | 						placeholder="请输入标识" /> | ||||||
|  | 				</el-form-item> | ||||||
|  | 			</el-col> | ||||||
|  | 			<el-col :span="12"> | ||||||
|  | 				<el-form-item label="英文名" prop="enName"> | ||||||
|  | 					<el-input | ||||||
|  | 						v-model="dataForm.enName" | ||||||
|  | 						clearable | ||||||
|  | 						placeholder="请输入英文名" /> | ||||||
|  | 				</el-form-item> | ||||||
|  | 			</el-col> | ||||||
|  | 			<el-col :span="12"> | ||||||
|  | 				<el-form-item label="是否采集" prop="collection"> | ||||||
|  | 					<el-switch | ||||||
|  | 						v-model="dataForm.collection" | ||||||
|  | 						:active-value="1" | ||||||
|  | 						:inactive-value="0"></el-switch> | ||||||
|  | 				</el-form-item> | ||||||
|  | 			</el-col> | ||||||
|  | 			<el-col :span="12"> | ||||||
|  | 				<el-form-item label="描述" prop="description"> | ||||||
|  | 					<el-input | ||||||
|  | 						v-model="dataForm.description" | ||||||
|  | 						clearable | ||||||
|  | 						placeholder="请输入描述" /> | ||||||
|  | 				</el-form-item> | ||||||
|  | 			</el-col> | ||||||
|  | 		</el-form> | ||||||
|  | 	</el-row> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import basicAdd from '@/mixins/basic-add'; | ||||||
|  |  | ||||||
|  | import { | ||||||
|  | 	createEquipmentPlc, | ||||||
|  | 	updateEquipmentPlc, | ||||||
|  | 	getEquipmentPlc, | ||||||
|  | 	getCode, | ||||||
|  | } from '@/api/base/equipmentPlc'; | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	mixins: [basicAdd], | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			urlOptions: { | ||||||
|  | 				isGetCode: true, | ||||||
|  | 				codeURL: getCode, | ||||||
|  | 				createURL: createEquipmentPlc, | ||||||
|  | 				updateURL: updateEquipmentPlc, | ||||||
|  | 				infoURL: getEquipmentPlc, | ||||||
|  | 			}, | ||||||
|  | 			dataForm: { | ||||||
|  | 				id: undefined, | ||||||
|  | 				plcTableName: undefined, | ||||||
|  | 				code: undefined, | ||||||
|  | 				name: undefined, | ||||||
|  | 				enName: undefined, | ||||||
|  | 				collection: 1, | ||||||
|  | 				description: undefined, | ||||||
|  | 			}, | ||||||
|  | 			dataRule: { | ||||||
|  | 				plcTableName: [ | ||||||
|  | 					{ required: true, message: '关联表名不能为空', trigger: 'blur' }, | ||||||
|  | 				], | ||||||
|  | 				code: [{ required: true, message: '编码不能为空', trigger: 'blur' }], | ||||||
|  | 				name: [{ required: true, message: '标识不能为空', trigger: 'blur' }], | ||||||
|  | 			}, | ||||||
|  | 		}; | ||||||
|  | 	}, | ||||||
|  | 	methods: {}, | ||||||
|  | }; | ||||||
|  | </script> | ||||||
| @@ -1,59 +1,53 @@ | |||||||
| <template> | <template> | ||||||
| 	<div class="app-container"> | 	<div class="app-container"> | ||||||
| 		<!-- 搜索工作栏 --> | 		<search-bar | ||||||
| 		<SearchBar | 			:formConfigs="formConfig" | ||||||
| 			:formConfigs="searchBarFormConfig" | 			ref="searchBarForm" | ||||||
| 			ref="search-bar" | 			@headBtnClick="buttonClick" /> | ||||||
| 			@headBtnClick="handleSearchBarBtnClick" /> |  | ||||||
|  |  | ||||||
| 		<!-- 列表 --> |  | ||||||
| 		<base-table | 		<base-table | ||||||
|  | 			v-loading="dataListLoading" | ||||||
| 			:table-props="tableProps" | 			:table-props="tableProps" | ||||||
| 			:page="queryParams.pageNo" | 			:page="listQuery.pageNo" | ||||||
| 			:limit="queryParams.pageSize" | 			:limit="listQuery.pageSize" | ||||||
| 			:table-data="list" | 			:table-data="tableData" | ||||||
| 			ref="pageTable" |  | ||||||
| 			@emitFun="handleEmitFun"> | 			@emitFun="handleEmitFun"> | ||||||
| 			<method-btn | 			<method-btn | ||||||
| 				v-if="tableBtn.length" | 				v-if="tableBtn.length" | ||||||
| 				slot="handleBtn" | 				slot="handleBtn" | ||||||
|  | 				:width="120" | ||||||
| 				label="操作" | 				label="操作" | ||||||
| 				:method-list="tableBtn" | 				:method-list="tableBtn" | ||||||
| 				@clickBtn="handleTableBtnClick" /> | 				@clickBtn="handleClick" /> | ||||||
| 		</base-table> | 		</base-table> | ||||||
|  |  | ||||||
| 		<!-- 分页组件 --> |  | ||||||
| 		<pagination | 		<pagination | ||||||
| 			v-show="total > 0" | 			:limit.sync="listQuery.pageSize" | ||||||
| 			:total="total" | 			:page.sync="listQuery.pageNo" | ||||||
| 			:page.sync="queryParams.pageNo" | 			:total="listQuery.total" | ||||||
| 			:limit.sync="queryParams.pageSize" | 			@pagination="getDataList" /> | ||||||
| 			@pagination="getList" /> |  | ||||||
|  |  | ||||||
| 		<!-- 对话框(添加 / 修改) --> |  | ||||||
| 		<base-dialog | 		<base-dialog | ||||||
| 			:dialogTitle="title" | 			:dialogTitle="addOrEditTitle" | ||||||
| 			:dialogVisible="open" | 			:dialogVisible="addOrUpdateVisible" | ||||||
| 			width="700px" | 			@cancel="handleCancel" | ||||||
| 			@close="cancel" | 			@confirm="handleConfirm" | ||||||
| 			@cancel="cancel" | 			:before-close="handleCancel" | ||||||
| 			@confirm="submitForm"> | 			width="50%"> | ||||||
| 			<DialogForm v-if="open" ref="form" :dataForm="form" :rows="rows" /> | 			<add-or-update | ||||||
|  | 				ref="addOrUpdate" | ||||||
|  | 				@refreshDataList="successSubmit"></add-or-update> | ||||||
| 		</base-dialog> | 		</base-dialog> | ||||||
| 	</div> | 	</div> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
| <script> | <script> | ||||||
|  | import AddOrUpdate from './add-or-updata'; | ||||||
|  | import basicPage from '@/mixins/basic-page'; | ||||||
|  | import { parseTime } from '@/filter/code-filter'; | ||||||
| import { | import { | ||||||
| 	createEquipmentPlc, |  | ||||||
| 	updateEquipmentPlc, |  | ||||||
| 	deleteEquipmentPlc, | 	deleteEquipmentPlc, | ||||||
| 	getEquipmentPlc, |  | ||||||
| 	getEquipmentPlcPage, | 	getEquipmentPlcPage, | ||||||
| 	exportEquipmentPlcExcel, | 	exportEquipmentPlcExcel, | ||||||
|  | 	updateEquipmentPlc, | ||||||
| } from '@/api/base/equipmentPlc'; | } from '@/api/base/equipmentPlc'; | ||||||
| import moment from 'moment'; |  | ||||||
| import basicPageMixin from '@/mixins/lb/basicPageMixin'; |  | ||||||
|  |  | ||||||
| const switchBtn = { | const switchBtn = { | ||||||
| 	name: 'SwitchBtn', | 	name: 'SwitchBtn', | ||||||
| @@ -90,38 +84,8 @@ const switchBtn = { | |||||||
| 		); | 		); | ||||||
| 	}, | 	}, | ||||||
| }; | }; | ||||||
|  | const tableProps = [ | ||||||
| export default { | 	{ prop: 'code', label: '编码', width: 220 }, | ||||||
| 	name: 'EquipmentPlc', |  | ||||||
| 	mixins: [basicPageMixin], |  | ||||||
| 	components: {}, |  | ||||||
| 	data() { |  | ||||||
| 		return { |  | ||||||
| 			tableKey: Math.random(), |  | ||||||
| 			searchBarKeys: ['name', 'plcTableName'], |  | ||||||
| 			tableBtn: [ |  | ||||||
| 				this.$auth.hasPermi('base:equipment-plc:update') |  | ||||||
| 					? { |  | ||||||
| 							type: 'edit', |  | ||||||
| 							btnName: '修改', |  | ||||||
| 					  } |  | ||||||
| 					: undefined, |  | ||||||
| 				this.$auth.hasPermi('base:equipment-plc:delete') |  | ||||||
| 					? { |  | ||||||
| 							type: 'delete', |  | ||||||
| 							btnName: '删除', |  | ||||||
| 					  } |  | ||||||
| 					: undefined, |  | ||||||
| 			].filter((v) => v), |  | ||||||
| 			tableProps: [ |  | ||||||
| 				// { |  | ||||||
| 				// 	prop: 'createTime', |  | ||||||
| 				// 	label: '添加时间', |  | ||||||
| 				// 	fixed: true, |  | ||||||
| 				// 	width: 180, |  | ||||||
| 				// 	filter: (val) => moment(val).format('yyyy-MM-DD HH:mm:ss'), |  | ||||||
| 				// }, |  | ||||||
| 				{ prop: 'code', label: '编码' }, |  | ||||||
| 	{ prop: 'plcTableName', label: '关联表名' }, | 	{ prop: 'plcTableName', label: '关联表名' }, | ||||||
| 	{ prop: 'name', label: '标识名称' }, | 	{ prop: 'name', label: '标识名称' }, | ||||||
| 	{ prop: 'enName', label: '英文名称' }, | 	{ prop: 'enName', label: '英文名称' }, | ||||||
| @@ -131,8 +95,34 @@ export default { | |||||||
| 		subcomponent: switchBtn, | 		subcomponent: switchBtn, | ||||||
| 	}, | 	}, | ||||||
| 	{ prop: 'description', label: '描述' }, | 	{ prop: 'description', label: '描述' }, | ||||||
| 			], | ]; | ||||||
| 			searchBarFormConfig: [ |  | ||||||
|  | export default { | ||||||
|  | 	mixins: [basicPage], | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			urlOptions: { | ||||||
|  | 				getDataListURL: getEquipmentPlcPage, | ||||||
|  | 				deleteURL: deleteEquipmentPlc, | ||||||
|  | 				exportURL: exportEquipmentPlcExcel, | ||||||
|  | 			}, | ||||||
|  | 			tableProps, | ||||||
|  | 			tableBtn: [ | ||||||
|  | 				this.$auth.hasPermi(`base:equipment-plc:update`) | ||||||
|  | 					? { | ||||||
|  | 							type: 'edit', | ||||||
|  | 							btnName: '编辑', | ||||||
|  | 					  } | ||||||
|  | 					: undefined, | ||||||
|  | 				this.$auth.hasPermi(`base:equipment-plc:delete`) | ||||||
|  | 					? { | ||||||
|  | 							type: 'delete', | ||||||
|  | 							btnName: '删除', | ||||||
|  | 					  } | ||||||
|  | 					: undefined, | ||||||
|  | 			].filter((v) => v), | ||||||
|  | 			tableData: [], | ||||||
|  | 			formConfig: [ | ||||||
| 				{ | 				{ | ||||||
| 					type: 'input', | 					type: 'input', | ||||||
| 					label: '表名', | 					label: '表名', | ||||||
| @@ -147,231 +137,86 @@ export default { | |||||||
| 				}, | 				}, | ||||||
| 				{ | 				{ | ||||||
| 					type: 'button', | 					type: 'button', | ||||||
| 					btnName: '查询', | 					btnName: '搜索', | ||||||
| 					name: 'search', | 					name: 'search', | ||||||
| 					color: 'primary', | 					color: 'primary', | ||||||
| 				}, | 				}, | ||||||
|  | 				// { | ||||||
|  | 				// 	type: 'separate', | ||||||
|  | 				// }, | ||||||
|  | 				// { | ||||||
|  | 				// 	type: 'button', | ||||||
|  | 				// 	btnName: '重置', | ||||||
|  | 				// 	name: 'reset', | ||||||
|  | 				// }, | ||||||
| 				{ | 				{ | ||||||
| 					type: 'separate', | 					type: 'separate', | ||||||
| 				}, | 				}, | ||||||
| 				{ | 				{ | ||||||
| 					// type: this.$auth.hasPermi('base:equipment-plc:create') | 					type: this.$auth.hasPermi('base:factory:create') ? 'button' : '', | ||||||
| 					// 	? 'button' |  | ||||||
| 					// 	: '', |  | ||||||
| 					type: 'button', |  | ||||||
| 					btnName: '新增', | 					btnName: '新增', | ||||||
| 					name: 'add', | 					name: 'add', | ||||||
| 					plain: true, |  | ||||||
| 					color: 'success', | 					color: 'success', | ||||||
|  | 					plain: true, | ||||||
| 				}, | 				}, | ||||||
| 				// { | 				// { | ||||||
| 				// 	type: this.$auth.hasPermi('base:equipment-plc:export') ? 'button' : '', | 				// 	type: this.$auth.hasPermi('base:factory:create') ? 'separate' : '', | ||||||
|  | 				// }, | ||||||
|  | 				// { | ||||||
|  | 				// 	type: this.$auth.hasPermi('base:factory:export') ? 'button' : '', | ||||||
| 				// 	btnName: '导出', | 				// 	btnName: '导出', | ||||||
| 				// 	name: 'export', | 				// 	name: 'export', | ||||||
| 				// 	color: 'warning', | 				// 	color: 'warning', | ||||||
| 				// }, | 				// }, | ||||||
| 			], | 			], | ||||||
| 			rows: [ |  | ||||||
| 				[ |  | ||||||
| 					{ |  | ||||||
| 						input: true, |  | ||||||
| 						label: '关联表名', |  | ||||||
| 						prop: 'plcTableName', |  | ||||||
| 						rules: [{ required: true, message: '不能为空', trigger: 'blur' }], |  | ||||||
| 						// bind: { |  | ||||||
| 						// 	disabled: true, // some condition, like detail mode... |  | ||||||
| 						// } |  | ||||||
| 					}, |  | ||||||
| 					{ |  | ||||||
| 						input: true, |  | ||||||
| 						label: '编码', |  | ||||||
| 						prop: 'code', |  | ||||||
| 						url: '/base/equipment-group/getCode', |  | ||||||
| 						rules: [{ required: true, message: '不能为空', trigger: 'blur' }], |  | ||||||
| 					}, |  | ||||||
| 				], |  | ||||||
| 				[ |  | ||||||
| 					{ |  | ||||||
| 						input: true, |  | ||||||
| 						label: '标识', |  | ||||||
| 						prop: 'name', |  | ||||||
| 						rules: [{ required: true, message: '不能为空', trigger: 'blur' }], |  | ||||||
| 						// bind: { |  | ||||||
| 						// 	disabled: true, // some condition, like detail mode... |  | ||||||
| 						// } |  | ||||||
| 					}, |  | ||||||
| 					{ |  | ||||||
| 						input: true, |  | ||||||
| 						label: '英文名', |  | ||||||
| 						prop: 'enName', |  | ||||||
| 					}, |  | ||||||
| 				], |  | ||||||
| 				[ |  | ||||||
| 					{ |  | ||||||
| 						switch: true, |  | ||||||
| 						label: '是否采集', // 是否采集 0 代表不采集, 1 代表采集 |  | ||||||
| 						prop: 'collection', |  | ||||||
| 						value: 1, |  | ||||||
| 						bind: { |  | ||||||
| 							'active-value': 1, |  | ||||||
| 							'inactive-value': 0, |  | ||||||
| 						}, |  | ||||||
| 					}, |  | ||||||
| 				], |  | ||||||
| 				[ |  | ||||||
| 					{ |  | ||||||
| 						textarea: true, |  | ||||||
| 						label: '描述', |  | ||||||
| 						prop: 'description', |  | ||||||
| 						bind: { |  | ||||||
| 							placeholder: '请输入备注', |  | ||||||
| 						}, |  | ||||||
| 					}, |  | ||||||
| 				], |  | ||||||
| 			], |  | ||||||
| 			// 是否显示弹出 |  | ||||||
| 			open: false, |  | ||||||
| 			// 查询参数 |  | ||||||
| 			queryParams: { |  | ||||||
| 				pageNo: 1, |  | ||||||
| 				pageSize: 10, |  | ||||||
| 				plcTableName: null, |  | ||||||
| 				name: null, |  | ||||||
| 			}, |  | ||||||
| 			// 表单参数 |  | ||||||
| 			form: {}, |  | ||||||
| 		}; | 		}; | ||||||
| 	}, | 	}, | ||||||
| 	created() { | 	components: { | ||||||
| 		this.getList(); | 		AddOrUpdate, | ||||||
| 	}, | 	}, | ||||||
|  | 	created() {}, | ||||||
| 	methods: { | 	methods: { | ||||||
| 		/** 覆盖 handleEmitFun 的默认实现 */ | 		/** 覆盖 handleEmitFun 的默认实现 */ | ||||||
| 		handleEmitFun({ action, payload }) { | 		handleEmitFun({ action, payload }) { | ||||||
|  |       console.log(payload) | ||||||
| 			switch (action) { | 			switch (action) { | ||||||
| 				case 'update-collect': | 				case 'update-collect': | ||||||
| 					this.reset(); | 					updateEquipmentPlc(payload).then((response) => { | ||||||
| 					const tempForm = {}; |  | ||||||
| 					Object.keys(this.form).forEach((key) => { |  | ||||||
| 						tempForm[key] = payload[key]; |  | ||||||
| 					}); |  | ||||||
| 					updateEquipmentPlc(tempForm).then((response) => { |  | ||||||
| 						this.$modal.msgSuccess('修改成功'); | 						this.$modal.msgSuccess('修改成功'); | ||||||
| 						this.open = false; | 						this.getDataList(); | ||||||
| 						this.getList(); |  | ||||||
| 					}); | 					}); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
| 		}, | 		}, | ||||||
| 		/** 查询列表 */ | 		buttonClick(val) { | ||||||
| 		getList() { | 			switch (val.btnName) { | ||||||
| 			this.loading = true; | 				case 'search': | ||||||
| 			// 执行查询 | 					this.listQuery.pageNo = 1; | ||||||
| 			getEquipmentPlcPage(this.queryParams).then((response) => { | 					this.listQuery.pageSize = 10; | ||||||
| 				this.list = response.data.list; | 					this.listQuery.name = val.name; | ||||||
| 				this.total = response.data.total; | 					this.listQuery.plcTableName = val.plcTableName; | ||||||
| 				this.loading = false; | 					this.getDataList(); | ||||||
| 				// this.tableKey = Math.random(); // method 1 | 					break; | ||||||
| 			}); | 				case 'reset': | ||||||
| 		}, | 					this.$refs.searchBarForm.resetForm(); | ||||||
| 		/** 取消按钮 */ | 					this.listQuery = { | ||||||
| 		cancel() { | 						pageSize: 10, | ||||||
| 			this.open = false; | 						pageNo: 1, | ||||||
| 			this.reset(); | 						total: 1, | ||||||
| 		}, |  | ||||||
| 		/** 表单重置 */ |  | ||||||
| 		reset() { |  | ||||||
| 			this.form = { |  | ||||||
| 				id: undefined, |  | ||||||
| 				plcTableName: undefined, |  | ||||||
| 				code: undefined, |  | ||||||
| 				name: undefined, |  | ||||||
| 				enName: undefined, |  | ||||||
| 				description: undefined, |  | ||||||
| 				collection: undefined, |  | ||||||
| 					}; | 					}; | ||||||
| 			this.resetForm('form'); | 					this.getDataList(); | ||||||
| 		}, | 					break; | ||||||
| 		/** 搜索按钮操作 */ | 				case 'add': | ||||||
| 		handleQuery() { | 					this.addOrEditTitle = '新增'; | ||||||
| 			this.queryParams.pageNo = 1; | 					this.addOrUpdateVisible = true; | ||||||
| 			this.getList(); | 					this.addOrUpdateHandle(); | ||||||
| 		}, | 					break; | ||||||
| 		/** 重置按钮操作 */ | 				case 'export': | ||||||
| 		resetQuery() { | 					this.handleExport(); | ||||||
| 			this.resetForm('queryForm'); | 					break; | ||||||
| 			this.handleQuery(); | 				default: | ||||||
| 		}, | 					console.log(val); | ||||||
| 		/** 新增按钮操作 */ |  | ||||||
| 		handleAdd() { |  | ||||||
| 			this.reset(); |  | ||||||
| 			this.open = true; |  | ||||||
| 			this.title = '添加实时数据采集配置'; |  | ||||||
| 		}, |  | ||||||
| 		/** 修改按钮操作 */ |  | ||||||
| 		handleUpdate(row) { |  | ||||||
| 			this.reset(); |  | ||||||
| 			const id = row.id; |  | ||||||
| 			getEquipmentPlc(id).then((response) => { |  | ||||||
| 				this.form = response.data; |  | ||||||
| 				this.open = true; |  | ||||||
| 				this.title = '修改实时数据采集配置'; |  | ||||||
| 			}); |  | ||||||
| 		}, |  | ||||||
| 		/** 提交按钮 */ |  | ||||||
| 		submitForm() { |  | ||||||
| 			this.$refs['form'].validate((valid) => { |  | ||||||
| 				if (!valid) { |  | ||||||
| 					return; |  | ||||||
| 			} | 			} | ||||||
| 				// 修改的提交 |  | ||||||
| 				if (this.form.id != null) { |  | ||||||
| 					updateEquipmentPlc(this.form).then((response) => { |  | ||||||
| 						this.$modal.msgSuccess('修改成功'); |  | ||||||
| 						this.open = false; |  | ||||||
| 						this.getList(); |  | ||||||
| 					}); |  | ||||||
| 					return; |  | ||||||
| 				} |  | ||||||
| 				// 添加的提交 |  | ||||||
| 				createEquipmentPlc(this.form).then((response) => { |  | ||||||
| 					this.$modal.msgSuccess('新增成功'); |  | ||||||
| 					this.open = false; |  | ||||||
| 					this.getList(); |  | ||||||
| 				}); |  | ||||||
| 			}); |  | ||||||
| 		}, |  | ||||||
| 		/** 删除按钮操作 */ |  | ||||||
| 		handleDelete(row) { |  | ||||||
| 			const id = row.id; |  | ||||||
| 			this.$modal |  | ||||||
| 				.confirm('是否确认删除实时数据采集配置编号为"' + id + '"的数据项?') |  | ||||||
| 				.then(function () { |  | ||||||
| 					return deleteEquipmentPlc(id); |  | ||||||
| 				}) |  | ||||||
| 				.then(() => { |  | ||||||
| 					this.getList(); |  | ||||||
| 					this.$modal.msgSuccess('删除成功'); |  | ||||||
| 				}) |  | ||||||
| 				.catch(() => {}); |  | ||||||
| 		}, |  | ||||||
| 		/** 导出按钮操作 */ |  | ||||||
| 		handleExport() { |  | ||||||
| 			// 处理查询参数 |  | ||||||
| 			let params = { ...this.queryParams }; |  | ||||||
| 			params.pageNo = undefined; |  | ||||||
| 			params.pageSize = undefined; |  | ||||||
| 			this.$modal |  | ||||||
| 				.confirm('是否确认导出所有实时数据采集配置数据项?') |  | ||||||
| 				.then(() => { |  | ||||||
| 					this.exportLoading = true; |  | ||||||
| 					return exportEquipmentPlcExcel(params); |  | ||||||
| 				}) |  | ||||||
| 				.then((response) => { |  | ||||||
| 					this.$download.excel(response, '实时数据采集配置.xls'); |  | ||||||
| 					this.exportLoading = false; |  | ||||||
| 				}) |  | ||||||
| 				.catch(() => {}); |  | ||||||
| 		}, | 		}, | ||||||
| 	}, | 	}, | ||||||
| }; | }; | ||||||
|   | |||||||
							
								
								
									
										388
									
								
								src/views/base/equipmentPlcConnect/TableConfig.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,388 @@ | |||||||
|  | <!--  | ||||||
|  |     filename: TableConfig.vue | ||||||
|  |     author: liubin | ||||||
|  |     date: 2023-10-30 10:09:03 | ||||||
|  |     description:  | ||||||
|  | --> | ||||||
|  |  | ||||||
|  | <template> | ||||||
|  | 	<div class="app-container"> | ||||||
|  | 		<!-- 搜索工作栏 --> | ||||||
|  | 		<SearchBar | ||||||
|  | 			:formConfigs="searchBarFormConfig" | ||||||
|  | 			ref="search-bar" | ||||||
|  | 			@headBtnClick="handleSearchBarBtnClick" /> | ||||||
|  |  | ||||||
|  | 		<!-- 列表 --> | ||||||
|  | 		<base-table | ||||||
|  | 			:table-props="tableProps" | ||||||
|  | 			:page="queryParams.pageNo" | ||||||
|  | 			:limit="queryParams.pageSize" | ||||||
|  | 			:table-data="list" | ||||||
|  | 			ref="pageTable" | ||||||
|  | 			@emitFun="handleEmitFun" | ||||||
|  | 			:max-height="tableH"> | ||||||
|  | 			<method-btn | ||||||
|  | 				v-if="tableBtn.length" | ||||||
|  | 				slot="handleBtn" | ||||||
|  | 				label="操作" | ||||||
|  | 				:method-list="tableBtn" | ||||||
|  | 				@clickBtn="handleTableBtnClick" /> | ||||||
|  | 		</base-table> | ||||||
|  |  | ||||||
|  | 		<!-- 分页组件 --> | ||||||
|  | 		<pagination | ||||||
|  | 			v-show="total > 0" | ||||||
|  | 			:total="total" | ||||||
|  | 			:page.sync="queryParams.pageNo" | ||||||
|  | 			:limit.sync="queryParams.pageSize" | ||||||
|  | 			@pagination="getList" /> | ||||||
|  |  | ||||||
|  | 		<!-- 对话框(添加 / 修改) --> | ||||||
|  | 		<base-dialog | ||||||
|  | 			:dialogTitle="title" | ||||||
|  | 			:dialogVisible="open" | ||||||
|  | 			width="700px" | ||||||
|  | 			@close="cancel" | ||||||
|  | 			@cancel="cancel" | ||||||
|  | 			@confirm="submitForm"> | ||||||
|  | 			<DialogForm v-if="open" ref="form" v-model="form" :rows="rows" /> | ||||||
|  | 		</base-dialog> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { | ||||||
|  | 	createEquipmentPlc, | ||||||
|  | 	updateEquipmentPlc, | ||||||
|  | 	deleteEquipmentPlc, | ||||||
|  | 	getEquipmentPlc, | ||||||
|  | 	getEquipmentPlcPage, | ||||||
|  | 	exportEquipmentPlcExcel, | ||||||
|  | } from '@/api/base/equipmentPlc'; | ||||||
|  | import basicPageMixin from '@/mixins/lb/basicPageMixin'; | ||||||
|  | import tableHeightMixin from '@/mixins/lb/tableHeightMixin'; | ||||||
|  |  | ||||||
|  | const switchBtn = { | ||||||
|  | 	name: 'SwitchBtn', | ||||||
|  | 	props: ['injectData'], | ||||||
|  | 	data() { | ||||||
|  | 		return {}; | ||||||
|  | 	}, | ||||||
|  | 	computed: { | ||||||
|  | 		active() { | ||||||
|  | 			return +this.injectData[this.injectData.prop] == 1 ? true : false; | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | 	methods: {}, | ||||||
|  | 	render: function (h) { | ||||||
|  | 		return h( | ||||||
|  | 			'el-switch', | ||||||
|  | 			{ | ||||||
|  | 				props: { | ||||||
|  | 					value: this.active, | ||||||
|  | 				}, | ||||||
|  | 				on: { | ||||||
|  | 					change: (newVal) => { | ||||||
|  | 						this.$emit('emitData', { | ||||||
|  | 							action: 'update-collect', | ||||||
|  | 							payload: { | ||||||
|  | 								...this.injectData, | ||||||
|  | 								collection: newVal ? 1 : 0, | ||||||
|  | 							}, | ||||||
|  | 						}); | ||||||
|  | 					}, | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 			null | ||||||
|  | 		); | ||||||
|  | 	}, | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	name: 'EquipmentPlc', | ||||||
|  | 	mixins: [basicPageMixin, tableHeightMixin], | ||||||
|  | 	components: {}, | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			tableKey: Math.random(), | ||||||
|  | 			searchBarKeys: ['name', 'plcTableName'], | ||||||
|  | 			tableBtn: [ | ||||||
|  | 				this.$auth.hasPermiAnd([ | ||||||
|  | 					'base:equipment-plc:update', | ||||||
|  | 					'base:equipment-plc:query' | ||||||
|  | 					]) | ||||||
|  | 					? { | ||||||
|  | 							type: 'edit', | ||||||
|  | 							btnName: '修改', | ||||||
|  | 					  } | ||||||
|  | 					: undefined, | ||||||
|  | 				this.$auth.hasPermi('base:equipment-plc:delete') | ||||||
|  | 					? { | ||||||
|  | 							type: 'delete', | ||||||
|  | 							btnName: '删除', | ||||||
|  | 					  } | ||||||
|  | 					: undefined, | ||||||
|  | 			].filter((v) => v), | ||||||
|  | 			tableProps: [ | ||||||
|  | 				// { | ||||||
|  | 				// 	prop: 'createTime', | ||||||
|  | 				// 	label: '添加时间', | ||||||
|  | 				// 	fixed: true, | ||||||
|  | 				// 	width: 180, | ||||||
|  | 				// 	filter: (val) => moment(val).format('yyyy-MM-DD HH:mm:ss'), | ||||||
|  | 				// }, | ||||||
|  | 				{ prop: 'code', label: '编码', width: 180, showOverflowtooltip: true }, | ||||||
|  | 				{ prop: 'plcTableName', label: '关联表名', width: 150, showOverflowtooltip: true }, | ||||||
|  | 				{ prop: 'name', label: '标识名称', width: 150, showOverflowtooltip: true }, | ||||||
|  | 				{ prop: 'enName', label: '英文名称', width: 150, showOverflowtooltip: true }, | ||||||
|  | 				{ | ||||||
|  | 					prop: 'collection', | ||||||
|  | 					label: '是否采集', | ||||||
|  | 					subcomponent: switchBtn, | ||||||
|  | 				}, | ||||||
|  | 				{ prop: 'description', label: '描述', minWidth: 150, showOverflowtooltip: true }, | ||||||
|  | 			], | ||||||
|  | 			searchBarFormConfig: [ | ||||||
|  | 				{ | ||||||
|  | 					type: 'input', | ||||||
|  | 					label: '表名', | ||||||
|  | 					placeholder: '请输入表名', | ||||||
|  | 					param: 'plcTableName', | ||||||
|  | 				}, | ||||||
|  | 				{ | ||||||
|  | 					type: 'input', | ||||||
|  | 					label: '标识', | ||||||
|  | 					placeholder: '请输入标识', | ||||||
|  | 					param: 'name', | ||||||
|  | 				}, | ||||||
|  | 				{ | ||||||
|  | 					type: 'button', | ||||||
|  | 					btnName: '查询', | ||||||
|  | 					name: 'search', | ||||||
|  | 					color: 'primary', | ||||||
|  | 				}, | ||||||
|  | 				{ | ||||||
|  | 					type: this.$auth.hasPermi('base:equipment-plc:create') | ||||||
|  | 						?  'separate' : '', | ||||||
|  | 				}, | ||||||
|  | 				{ | ||||||
|  | 					type: this.$auth.hasPermi('base:equipment-plc:create') | ||||||
|  | 						? 'button' : '', | ||||||
|  | 					btnName: '新增', | ||||||
|  | 					name: 'add', | ||||||
|  | 					plain: true, | ||||||
|  | 					color: 'success', | ||||||
|  | 				}, | ||||||
|  | 				// { | ||||||
|  | 				// 	type: this.$auth.hasPermi('equipment:realtime-table-config:export') ? 'button' : '', | ||||||
|  | 				// 	btnName: '导出', | ||||||
|  | 				// 	name: 'export', | ||||||
|  | 				// 	color: 'warning', | ||||||
|  | 				// }, | ||||||
|  | 			], | ||||||
|  | 			rows: [ | ||||||
|  | 				[ | ||||||
|  | 					{ | ||||||
|  | 						input: true, | ||||||
|  | 						label: '关联表名', | ||||||
|  | 						prop: 'plcTableName', | ||||||
|  | 						rules: [{ required: true, message: '关联表名不能为空', trigger: 'blur' }], | ||||||
|  | 						// bind: { | ||||||
|  | 						// 	disabled: true, // some condition, like detail mode... | ||||||
|  | 						// } | ||||||
|  | 					}, | ||||||
|  | 					{ | ||||||
|  | 						input: true, | ||||||
|  | 						label: '编码', | ||||||
|  | 						prop: 'code', | ||||||
|  | 						url: '/base/energy-plc/getCode', | ||||||
|  | 						rules: [{ required: true, message: '编码不能为空', trigger: 'blur' }], | ||||||
|  | 					}, | ||||||
|  | 				], | ||||||
|  | 				[ | ||||||
|  | 					{ | ||||||
|  | 						input: true, | ||||||
|  | 						label: '标识', | ||||||
|  | 						prop: 'name', | ||||||
|  | 						rules: [{ required: true, message: '标识不能为空', trigger: 'blur' }], | ||||||
|  | 						// bind: { | ||||||
|  | 						// 	disabled: true, // some condition, like detail mode... | ||||||
|  | 						// } | ||||||
|  | 					}, | ||||||
|  | 					{ | ||||||
|  | 						input: true, | ||||||
|  | 						label: '英文名', | ||||||
|  | 						prop: 'enName', | ||||||
|  | 					}, | ||||||
|  | 				], | ||||||
|  | 				[ | ||||||
|  | 					{ | ||||||
|  | 						switch: true, | ||||||
|  | 						label: '是否采集', // 是否采集 0 代表不采集, 1 代表采集 | ||||||
|  | 						prop: 'collection', | ||||||
|  | 						bind: { | ||||||
|  |               'active-value': 1, | ||||||
|  | 							'inactive-value': 0, | ||||||
|  |               value: 1, | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 				], | ||||||
|  | 				[ | ||||||
|  | 					{ | ||||||
|  | 						textarea: true, | ||||||
|  | 						label: '描述', | ||||||
|  | 						prop: 'description', | ||||||
|  | 						bind: { | ||||||
|  | 							placeholder: '请输入备注', | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 				], | ||||||
|  | 			], | ||||||
|  | 			// 是否显示弹出 | ||||||
|  | 			open: false, | ||||||
|  | 			// 查询参数 | ||||||
|  | 			queryParams: { | ||||||
|  | 				pageNo: 1, | ||||||
|  | 				pageSize: 20, | ||||||
|  | 				plcTableName: null, | ||||||
|  | 				name: null, | ||||||
|  | 			}, | ||||||
|  | 			// 表单参数 | ||||||
|  | 			form: {}, | ||||||
|  | 		}; | ||||||
|  | 	}, | ||||||
|  | 	created() { | ||||||
|  | 		this.getList(); | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		/** 覆盖 handleEmitFun 的默认实现 */ | ||||||
|  | 		handleEmitFun({ action, payload }) { | ||||||
|  | 			switch (action) { | ||||||
|  | 				case 'update-collect': | ||||||
|  | 					this.reset(); | ||||||
|  | 					const tempForm = {}; | ||||||
|  | 					Object.keys(this.form).forEach((key) => { | ||||||
|  | 						tempForm[key] = payload[key]; | ||||||
|  | 					}); | ||||||
|  | 					updateEquipmentPlc(tempForm).then((response) => { | ||||||
|  | 						this.$modal.msgSuccess('修改成功'); | ||||||
|  | 						this.open = false; | ||||||
|  | 						this.getList(); | ||||||
|  | 					}); | ||||||
|  | 					break; | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		/** 查询列表 */ | ||||||
|  | 		getList() { | ||||||
|  | 			this.loading = true; | ||||||
|  | 			// 执行查询 | ||||||
|  | 			getEquipmentPlcPage(this.queryParams).then((response) => { | ||||||
|  | 				this.list = response.data.list; | ||||||
|  | 				this.total = response.data.total; | ||||||
|  | 				this.loading = false; | ||||||
|  | 				// this.tableKey = Math.random(); // method 1 | ||||||
|  | 			}); | ||||||
|  | 		}, | ||||||
|  | 		/** 取消按钮 */ | ||||||
|  | 		cancel() { | ||||||
|  | 			this.open = false; | ||||||
|  | 			this.reset(); | ||||||
|  | 		}, | ||||||
|  | 		/** 表单重置 */ | ||||||
|  | 		reset() { | ||||||
|  | 			this.form = { | ||||||
|  | 				id: undefined, | ||||||
|  | 				plcTableName: undefined, | ||||||
|  | 				code: undefined, | ||||||
|  | 				name: undefined, | ||||||
|  | 				enName: undefined, | ||||||
|  | 				description: undefined, | ||||||
|  | 				collection: 1, | ||||||
|  | 			}; | ||||||
|  | 			this.resetForm('form'); | ||||||
|  | 		}, | ||||||
|  | 		/** 搜索按钮操作 */ | ||||||
|  | 		handleQuery() { | ||||||
|  | 			this.queryParams.pageNo = 1; | ||||||
|  | 			this.getList(); | ||||||
|  | 		}, | ||||||
|  | 		/** 重置按钮操作 */ | ||||||
|  | 		resetQuery() { | ||||||
|  | 			this.resetForm('queryForm'); | ||||||
|  | 			this.handleQuery(); | ||||||
|  | 		}, | ||||||
|  | 		/** 新增按钮操作 */ | ||||||
|  | 		handleAdd() { | ||||||
|  | 			this.reset(); | ||||||
|  | 			this.open = true; | ||||||
|  | 			this.title = '添加实时数据采集配置'; | ||||||
|  | 		}, | ||||||
|  | 		/** 修改按钮操作 */ | ||||||
|  | 		handleUpdate(row) { | ||||||
|  | 			this.reset(); | ||||||
|  | 			const id = row.id; | ||||||
|  | 			getEquipmentPlc(id).then((response) => { | ||||||
|  | 				this.form = response.data; | ||||||
|  | 				this.open = true; | ||||||
|  | 				this.title = '修改实时数据采集配置'; | ||||||
|  | 			}); | ||||||
|  | 		}, | ||||||
|  | 		/** 提交按钮 */ | ||||||
|  | 		submitForm() { | ||||||
|  | 			this.$refs['form'].validate((valid) => { | ||||||
|  | 				if (!valid) { | ||||||
|  | 					return; | ||||||
|  | 				} | ||||||
|  | 				// 修改的提交 | ||||||
|  | 				if (this.form.id != null) { | ||||||
|  | 					updateEquipmentPlc(this.form).then((response) => { | ||||||
|  | 						this.$modal.msgSuccess('修改成功'); | ||||||
|  | 						this.open = false; | ||||||
|  | 						this.getList(); | ||||||
|  | 					}); | ||||||
|  | 					return; | ||||||
|  | 				} | ||||||
|  | 				// 添加的提交 | ||||||
|  | 				createEquipmentPlc(this.form).then((response) => { | ||||||
|  | 					this.$modal.msgSuccess('新增成功'); | ||||||
|  | 					this.open = false; | ||||||
|  | 					this.getList(); | ||||||
|  | 				}); | ||||||
|  | 			}); | ||||||
|  | 		}, | ||||||
|  | 		/** 删除按钮操作 */ | ||||||
|  | 		handleDelete(row) { | ||||||
|  | 			const id = row.id; | ||||||
|  | 			this.$modal | ||||||
|  | 				.confirm('是否确认删除该配置?') | ||||||
|  | 				.then(function () { | ||||||
|  | 					return deleteEquipmentPlc(id); | ||||||
|  | 				}) | ||||||
|  | 				.then(() => { | ||||||
|  | 					this.getList(); | ||||||
|  | 					this.$modal.msgSuccess('删除成功'); | ||||||
|  | 				}) | ||||||
|  | 				.catch(() => {}); | ||||||
|  | 		}, | ||||||
|  | 		/** 导出按钮操作 */ | ||||||
|  | 		handleExport() { | ||||||
|  | 			// 处理查询参数 | ||||||
|  | 			let params = { ...this.queryParams }; | ||||||
|  | 			params.pageNo = undefined; | ||||||
|  | 			params.pageSize = undefined; | ||||||
|  | 			this.$modal | ||||||
|  | 				.confirm('是否确认导出所有实时数据采集配置数据项?') | ||||||
|  | 				.then(() => { | ||||||
|  | 					this.exportLoading = true; | ||||||
|  | 					return exportEquipmentPlcExcel(params); | ||||||
|  | 				}) | ||||||
|  | 				.then((response) => { | ||||||
|  | 					this.$download.excel(response, '实时数据采集配置.xls'); | ||||||
|  | 					this.exportLoading = false; | ||||||
|  | 				}) | ||||||
|  | 				.catch(() => {}); | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | }; | ||||||
|  | </script> | ||||||
							
								
								
									
										151
									
								
								src/views/base/equipmentPlcConnect/add-or-updata.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,151 @@ | |||||||
|  | <!-- | ||||||
|  |  * @Author: zwq | ||||||
|  |  * @Date: 2021-11-18 14:16:25 | ||||||
|  |  * @LastEditors: zwq | ||||||
|  |  * @LastEditTime: 2025-02-25 16:11:14 | ||||||
|  |  * @Description: | ||||||
|  | --> | ||||||
|  | <template> | ||||||
|  | 	<el-form | ||||||
|  | 		:model="dataForm" | ||||||
|  | 		:rules="dataRule" | ||||||
|  | 		ref="dataForm" | ||||||
|  | 		@keyup.enter.native="dataFormSubmit()" | ||||||
|  | 		label-width="100px"> | ||||||
|  | 		<el-form-item label="设备" prop="equipmentId"> | ||||||
|  | 			<el-cascader | ||||||
|  | 				placeholder="请选择设备" | ||||||
|  | 				v-model="dataForm.equipmentId" | ||||||
|  | 				:options="plLineList" | ||||||
|  | 				:props="{value: 'id', label: 'name', children: 'children'}" | ||||||
|  | 				style="width: 100%" | ||||||
|  | 				filterable /> | ||||||
|  | 		</el-form-item> | ||||||
|  | 		<el-form-item label="关联表名" prop="plcId"> | ||||||
|  | 			<el-select | ||||||
|  | 				v-model="dataForm.plcId" | ||||||
|  | 				filterable | ||||||
|  | 				placeholder="请选择关联表" | ||||||
|  | 				style="width: 100%"> | ||||||
|  | 				<el-option | ||||||
|  | 					v-for="dict in plcList" | ||||||
|  | 					:key="dict.id" | ||||||
|  | 					:label="dict.plcTableName" | ||||||
|  | 					:value="dict.id" /> | ||||||
|  | 			</el-select> | ||||||
|  | 		</el-form-item> | ||||||
|  | 	</el-form> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import basicAdd from './components/basic-add'; | ||||||
|  | import { createEquipmentPlcConnect, updateEquipmentPlcConnect } from '@/api/base/equipmentPlcConnect'; | ||||||
|  | import { getplcAllList, getTree } from "@/api/base/equipmentConfig"; | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	mixins: [basicAdd], | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			urlOptions: { | ||||||
|  | 				createURL: createEquipmentPlcConnect, | ||||||
|  | 				updateURL: updateEquipmentPlcConnect, | ||||||
|  | 			}, | ||||||
|  | 			dataForm: { | ||||||
|  |         id: undefined, | ||||||
|  |         equipmentId: undefined, | ||||||
|  |         plcId: undefined | ||||||
|  | 			}, | ||||||
|  | 			plcList: [], | ||||||
|  | 			plLineList: [], | ||||||
|  | 			dataRule: { | ||||||
|  |         equipmentId: [{ required: true, message: "设备不能为空", trigger: "blur" }], | ||||||
|  | 				plcId: [{ required: true, message: "关联表名不能为空", trigger: "blur" }] | ||||||
|  |       }, | ||||||
|  | 			options: [{ | ||||||
|  |           value: 'zhinan', | ||||||
|  |           label: '指南', | ||||||
|  |           children: [{ | ||||||
|  |             value: 'shejiyuanze', | ||||||
|  |             label: '设计原则', | ||||||
|  |             children: [{ | ||||||
|  |               value: 'yizhi', | ||||||
|  |               label: '一致' | ||||||
|  |             }, { | ||||||
|  |               value: 'fankui', | ||||||
|  |               label: '反馈' | ||||||
|  |             }, { | ||||||
|  |               value: 'xiaolv', | ||||||
|  |               label: '效率' | ||||||
|  |             }, { | ||||||
|  |               value: 'kekong', | ||||||
|  |               label: '可控' | ||||||
|  |             }] | ||||||
|  |           }, { | ||||||
|  |             value: 'daohang', | ||||||
|  |             label: '导航' | ||||||
|  |           }] | ||||||
|  |         }] | ||||||
|  | 		}; | ||||||
|  | 	}, | ||||||
|  | 	created() { | ||||||
|  | 		this.getDict() | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		init() { | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs['dataForm'].resetFields() | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		async getDict() { | ||||||
|  | 			// 关联表名列表 | ||||||
|  | 			const res = await getplcAllList(); | ||||||
|  | 			this.plcList = res.data; | ||||||
|  | 			// 树形结构 | ||||||
|  | 			const res1 = await getTree(); | ||||||
|  | 			this.plLineList = res1.data; | ||||||
|  | 			// const res1 = await getCorePLList(); | ||||||
|  | 			// this.plLineList = res1.data; | ||||||
|  | 			// this.plLineList.forEach(item => { | ||||||
|  | 			// 	listByParentId({ id: item.id }).then(resp => { | ||||||
|  | 			// 		if (resp.data.length > 0) { | ||||||
|  | 			// 			// item.children = resp.data | ||||||
|  | 			// 			this.$set(item, 'children', resp.data) | ||||||
|  | 			// 			// this.$forceUpdate() | ||||||
|  | 			// 		} | ||||||
|  | 			// 	}) | ||||||
|  | 			// }) | ||||||
|  | 		}, | ||||||
|  | 		// 表单提交 | ||||||
|  |     dataFormSubmit() { | ||||||
|  |       this.$refs["dataForm"].validate((valid) => { | ||||||
|  |         if (!valid) { | ||||||
|  |           return false; | ||||||
|  |         } | ||||||
|  |         // 修改的提交 | ||||||
|  |         if (this.dataForm.id) { | ||||||
|  |           updateEquipmentPlcConnect({ | ||||||
|  | 						id: this.dataForm.id, | ||||||
|  | 						equipmentId: this.dataForm.equipmentId[this.dataForm.equipmentId.length], | ||||||
|  | 						plcId: this.dataForm.plcId | ||||||
|  | 					}).then(response => { | ||||||
|  |             this.$modal.msgSuccess("修改成功"); | ||||||
|  |             this.visible = false; | ||||||
|  |             this.$emit("refreshDataList"); | ||||||
|  |           }); | ||||||
|  |           return; | ||||||
|  |         } | ||||||
|  |         // 添加的提交 | ||||||
|  |         createEquipmentPlcConnect({ | ||||||
|  | 						id: this.dataForm.id, | ||||||
|  | 						equipmentId: this.dataForm.equipmentId[this.dataForm.equipmentId.length - 1], | ||||||
|  | 						plcId: this.dataForm.plcId | ||||||
|  | 					}).then(response => { | ||||||
|  |           this.$modal.msgSuccess("新增成功"); | ||||||
|  |           this.visible = false; | ||||||
|  |           this.$emit("refreshDataList"); | ||||||
|  |         }); | ||||||
|  |       }); | ||||||
|  |     } | ||||||
|  | 	} | ||||||
|  | }; | ||||||
|  | </script> | ||||||
| @@ -0,0 +1,574 @@ | |||||||
|  | <!-- | ||||||
|  |     filename: EquipmentDrawer.vue | ||||||
|  |     author: liubin | ||||||
|  |     date: 2023-08-22 14:38:56 | ||||||
|  |     description: | ||||||
|  | --> | ||||||
|  |  | ||||||
|  | <template> | ||||||
|  | 	<el-drawer | ||||||
|  | 		:visible="visible" | ||||||
|  | 		:show-close="false" | ||||||
|  | 		:wrapper-closable="false" | ||||||
|  | 		class="drawer" | ||||||
|  | 		custom-class="mes-drawer" | ||||||
|  | 		size="60%" | ||||||
|  | 		@closed="$emit('destroy')"> | ||||||
|  | 		<SmallTitle slot="title"> | ||||||
|  | 			{{ | ||||||
|  | 				mode.includes('detail') | ||||||
|  | 					? '详情' | ||||||
|  | 					: mode.includes('edit') | ||||||
|  | 					? '编辑' | ||||||
|  | 					: '新增' | ||||||
|  | 			}} | ||||||
|  | 		</SmallTitle> | ||||||
|  |  | ||||||
|  | 		<div class="drawer-body flex"> | ||||||
|  | 			<div class="drawer-body__content"> | ||||||
|  | 				<section v-for="(section, index) in sections" :key="section.key"> | ||||||
|  | 					<SmallTitle v-if="index != 0">{{ section.name }}</SmallTitle> | ||||||
|  |  | ||||||
|  | 					<div class="form-part" v-if="section.key == 'base'"> | ||||||
|  | 						<el-skeleton v-if="!showForm" animated /> | ||||||
|  | 						<BaseInfoForm | ||||||
|  | 							key="drawer-dialog-form" | ||||||
|  | 							v-if="showForm" | ||||||
|  | 							ref="form" | ||||||
|  | 							:disabled="mode.includes('detail')" | ||||||
|  | 							v-model="form" | ||||||
|  | 							:rows="formRows" /> | ||||||
|  | 					</div> | ||||||
|  |  | ||||||
|  | 					<div v-if="section.key == 'attrs'" style="margin-top: 12px"> | ||||||
|  | 						<base-table | ||||||
|  | 							v-loading="attrListLoading" | ||||||
|  | 							:table-props="section.props" | ||||||
|  | 							:page="attrQuery?.params.pageNo || 1" | ||||||
|  | 							:limit="attrQuery?.params.pageSize || 10" | ||||||
|  | 							:table-data="list" | ||||||
|  | 							:add-button-show="mode.includes('detail') ? null : '添加属性'" | ||||||
|  | 							@emitButtonClick="handleAddAttr" | ||||||
|  | 							@emitFun="handleEmitFun"> | ||||||
|  | 							<method-btn | ||||||
|  | 								v-if="section.tableBtn" | ||||||
|  | 								slot="handleBtn" | ||||||
|  | 								label="操作" | ||||||
|  | 								:method-list="tableBtn" | ||||||
|  | 								@clickBtn="handleTableBtnClick" /> | ||||||
|  | 						</base-table> | ||||||
|  |  | ||||||
|  | 						<!-- 分页组件 --> | ||||||
|  | 						<pagination | ||||||
|  | 							v-show="total > 0" | ||||||
|  | 							:total="total" | ||||||
|  | 							:page.sync="attrQuery.params.pageNo" | ||||||
|  | 							:limit.sync="attrQuery.params.pageSize" | ||||||
|  | 							@pagination="getAttrList" /> | ||||||
|  | 					</div> | ||||||
|  | 				</section> | ||||||
|  | 			</div> | ||||||
|  |  | ||||||
|  | 			<div class="drawer-body__footer"> | ||||||
|  | 				<el-button style="" @click="handleCancel">取消</el-button> | ||||||
|  | 				<el-button v-if="mode == 'detail'" type="primary" @click="toggleEdit"> | ||||||
|  | 					编辑 | ||||||
|  | 				</el-button> | ||||||
|  | 				<el-button v-else type="primary" @click="handleCancel">确定</el-button> | ||||||
|  | 				<!-- sections的第二项必须是 属性列表  --> | ||||||
|  | 				<!-- <el-button | ||||||
|  | 						v-if="sections[1].allowAdd" | ||||||
|  | 						type="primary" | ||||||
|  | 						@click="handleAddAttr"> | ||||||
|  | 						添加属性 | ||||||
|  | 					</el-button> --> | ||||||
|  | 			</div> | ||||||
|  | 		</div> | ||||||
|  |  | ||||||
|  | 		<!-- 属性对话框 --> | ||||||
|  | 		<base-dialog | ||||||
|  | 			v-if="sections[1].allowAdd" | ||||||
|  | 			:dialogTitle="attrTitle" | ||||||
|  | 			:dialogVisible="attrFormVisible" | ||||||
|  | 			width="45%" | ||||||
|  | 			:append-to-body="true" | ||||||
|  | 			custom-class="baseDialog" | ||||||
|  | 			@close="closeAttrForm" | ||||||
|  | 			@cancel="closeAttrForm" | ||||||
|  | 			@confirm="submitAttrForm"> | ||||||
|  | 			<DialogForm | ||||||
|  | 				v-if="attrFormVisible" | ||||||
|  | 				ref="attrForm" | ||||||
|  | 				:disabled="mode.includes('detail')" | ||||||
|  | 				v-model="attrForm" | ||||||
|  | 				:rows="attrRows" /> | ||||||
|  | 		</base-dialog> | ||||||
|  | 	</el-drawer> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import BaseInfoForm from '@/components/DialogForm'; | ||||||
|  |  | ||||||
|  | const SmallTitle = { | ||||||
|  | 	name: 'SmallTitle', | ||||||
|  | 	props: ['size'], | ||||||
|  | 	data() { | ||||||
|  | 		return {}; | ||||||
|  | 	}, | ||||||
|  | 	methods: {}, | ||||||
|  | 	render: function (h) { | ||||||
|  | 		return h( | ||||||
|  | 			'span', | ||||||
|  | 			{ | ||||||
|  | 				class: 'small-title', | ||||||
|  | 				style: { | ||||||
|  | 					fontSize: '18px', | ||||||
|  | 					lineHeight: | ||||||
|  | 						this.size == 'lg' ? '24px' : this.size == 'sm' ? '18px' : '20px', | ||||||
|  | 					fontWeight: 500, | ||||||
|  | 					fontFamily: '微软雅黑, Microsoft YaHei, Arial, Helvetica, sans-serif', | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 			this.$slots.default | ||||||
|  | 		); | ||||||
|  | 	}, | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	components: { SmallTitle, DialogForm: BaseInfoForm, BaseInfoForm }, | ||||||
|  | 	props: ['sections', 'defaultMode', 'infoData'], | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			mode: '', | ||||||
|  | 			visible: false, | ||||||
|  | 			showForm: false, | ||||||
|  | 			total: 0, | ||||||
|  | 			form: {}, | ||||||
|  | 			list: [], | ||||||
|  | 			attrTitle: '', | ||||||
|  | 			attrForm: { | ||||||
|  | 				id: null, | ||||||
|  | 				name: '', | ||||||
|  | 				plcParamName: '', | ||||||
|  | 				unit: '', | ||||||
|  | 				collection: 1, | ||||||
|  | 				minValue: '', | ||||||
|  | 				maxValue: '', | ||||||
|  | 				defaultValue: '', | ||||||
|  | 				description: '', | ||||||
|  | 				remark: '', | ||||||
|  | 				alarmContent: '', | ||||||
|  | 				equipmentParamType: '', | ||||||
|  | 				productionParamType: '', | ||||||
|  | 			}, | ||||||
|  | 			attrFormVisible: false, | ||||||
|  | 			attrRows: [ | ||||||
|  | 				[ | ||||||
|  | 					{ | ||||||
|  | 						input: true, | ||||||
|  | 						label: '参数列名', | ||||||
|  | 						prop: 'plcParamName', | ||||||
|  | 						rules: [{ required: true, message: '不能为空', trigger: 'blur' }], | ||||||
|  | 					}, | ||||||
|  | 					{ | ||||||
|  | 						input: true, | ||||||
|  | 						label: '参数名称', | ||||||
|  | 						prop: 'name', | ||||||
|  | 						rules: [{ required: true, message: '不能为空', trigger: 'blur' }], | ||||||
|  | 					}, | ||||||
|  | 				], | ||||||
|  | 				[ | ||||||
|  | 					{ | ||||||
|  | 						select: true, | ||||||
|  | 						label: '单位', | ||||||
|  | 						prop: 'unit', | ||||||
|  | 						options: this.getDictDatas(this.DICT_TYPE.UNIT_DICT), | ||||||
|  | 						// rules: [{ required: true, message: '不能为空', trigger: 'blur' }], | ||||||
|  | 					}, | ||||||
|  | 					{ | ||||||
|  | 						switch: true, | ||||||
|  | 						label: '是否采集', | ||||||
|  | 						prop: 'collection', | ||||||
|  | 						bind: { | ||||||
|  | 							'active-value': 1, | ||||||
|  | 							'inactive-value': 0, | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 				], | ||||||
|  | 				[ | ||||||
|  | 					{ | ||||||
|  | 						select: true, | ||||||
|  | 						label: '设备参数类型', | ||||||
|  | 						prop: 'equipmentParamType', | ||||||
|  | 						options: [ | ||||||
|  | 							{ label: '一般参数', value: 1 }, | ||||||
|  | 							{ label: '工艺参数', value: 2 }, | ||||||
|  | 							{ label: '报警参数', value: 3 }, | ||||||
|  | 						], | ||||||
|  | 						rules: [ | ||||||
|  | 							{ | ||||||
|  | 								required: true, | ||||||
|  | 								message: '设备参数类型不能为空', | ||||||
|  | 								trigger: 'blur', | ||||||
|  | 							}, | ||||||
|  | 						], | ||||||
|  | 					}, | ||||||
|  | 					{ | ||||||
|  | 						select: true, | ||||||
|  | 						label: '生产参数类型', | ||||||
|  | 						prop: 'productionParamType', | ||||||
|  | 						options: [ | ||||||
|  | 							// { label: '进片数量', value: 1 }, | ||||||
|  | 							// { label: '出片数量', value: 2 }, | ||||||
|  | 							// { label: '破损数量', value: 3 }, | ||||||
|  | 							// { label: '无类型', value: 4 }, | ||||||
|  | 							{ label: '进口计数', value: 1 }, | ||||||
|  | 							{ label: '出口计数', value: 2 }, | ||||||
|  | 							{ label: '损耗计数', value: 3 }, | ||||||
|  | 							{ label: '无类型', value: 4 }, | ||||||
|  | 						], | ||||||
|  | 						rules: [ | ||||||
|  | 							{ | ||||||
|  | 								required: true, | ||||||
|  | 								message: '生产参数类型不能为空', | ||||||
|  | 								trigger: 'blur', | ||||||
|  | 							}, | ||||||
|  | 						], | ||||||
|  | 					}, | ||||||
|  | 				], | ||||||
|  | 				[ | ||||||
|  | 					{ | ||||||
|  | 						input: true, | ||||||
|  | 						label: '最小值', | ||||||
|  | 						prop: 'minValue', | ||||||
|  | 						rules: [ | ||||||
|  | 							{ | ||||||
|  | 								type: 'number', | ||||||
|  | 								message: '请输入正确的数字', | ||||||
|  | 								trigger: 'change', | ||||||
|  | 								transform: (val) => Number(val), | ||||||
|  | 							}, | ||||||
|  | 						], | ||||||
|  | 					}, | ||||||
|  | 					{ | ||||||
|  | 						input: true, | ||||||
|  | 						label: '最大值', | ||||||
|  | 						prop: 'maxValue', | ||||||
|  | 						rules: [ | ||||||
|  | 							{ | ||||||
|  | 								required: false, | ||||||
|  | 							}, | ||||||
|  | 							{ | ||||||
|  | 								type: 'number', | ||||||
|  | 								message: '请输入正确的数字', | ||||||
|  | 								trigger: 'change', | ||||||
|  | 								transform: (val) => Number(val), | ||||||
|  | 							}, | ||||||
|  | 						], | ||||||
|  | 						// rules: [{ required: true, message: '不能为空', trigger: 'blur' }], | ||||||
|  | 					}, | ||||||
|  | 				], | ||||||
|  | 				[ | ||||||
|  | 					{ | ||||||
|  | 						input: true, | ||||||
|  | 						label: '标准值', | ||||||
|  | 						prop: 'defaultValue', | ||||||
|  | 						// rules: [{ required: true, message: '不能为空', trigger: 'blur' }], | ||||||
|  | 					}, | ||||||
|  | 					{ | ||||||
|  | 						input: true, | ||||||
|  | 						label: '描述', | ||||||
|  | 						prop: 'description', | ||||||
|  | 						// rules: [{ required: true, message: '不能为空', trigger: 'blur' }], | ||||||
|  | 					}, | ||||||
|  | 				], | ||||||
|  | 				[ | ||||||
|  | 					{ | ||||||
|  | 						input: true, | ||||||
|  | 						label: '备注', | ||||||
|  | 						prop: 'remark', | ||||||
|  | 						// rules: [{ required: true, message: '不能为空', trigger: 'blur' }], | ||||||
|  | 					}, | ||||||
|  | 				], | ||||||
|  | 			], | ||||||
|  | 			attrQuery: { | ||||||
|  | 				params: { | ||||||
|  | 					pageNo: 1, | ||||||
|  | 					pageSize: 10, | ||||||
|  | 				}, | ||||||
|  | 			}, // 属性列表的请求 | ||||||
|  | 			infoQuery: null, // 基本信息的请求 | ||||||
|  | 			attrFormSubmitting: false, | ||||||
|  | 			attrListLoading: false, | ||||||
|  | 		}; | ||||||
|  | 	}, | ||||||
|  | 	computed: { | ||||||
|  | 		formRows() { | ||||||
|  | 			return this.sections[0].rows.map((row) => { | ||||||
|  | 				return row.map((col) => { | ||||||
|  | 					return { | ||||||
|  | 						...col, | ||||||
|  | 						bind: { | ||||||
|  | 							// 详情 模式下,禁用各种输入 | ||||||
|  | 							// disabled: this.mode == 'detail', | ||||||
|  | 							disabled: true, | ||||||
|  | 						}, | ||||||
|  | 					}; | ||||||
|  | 				}); | ||||||
|  | 			}); | ||||||
|  | 		}, | ||||||
|  | 		tableBtn() { | ||||||
|  | 			return this.mode == 'detail' ? [] : this.sections[1].tableBtn; | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | 	mounted() { | ||||||
|  | 		this.mode = this.defaultMode || 'detail'; | ||||||
|  | 		for (const section of this.sections) { | ||||||
|  | 			// 请求具体信息 | ||||||
|  | 			if ('url' in section) { | ||||||
|  | 				const query = { | ||||||
|  | 					url: section.url, | ||||||
|  | 					method: section.method || 'get', | ||||||
|  | 					params: section.queryParams || null, | ||||||
|  | 					data: section.data || null, | ||||||
|  | 				}; | ||||||
|  | 				// debugger; | ||||||
|  | 				this.$axios(query).then(({ data }) => { | ||||||
|  | 					if (section.key == 'base') { | ||||||
|  | 						this.form = data; | ||||||
|  | 						this.showForm = true; | ||||||
|  | 						this.infoQuery = query; | ||||||
|  | 					} else if (section.key == 'attrs') { | ||||||
|  | 						this.attrQuery = query; | ||||||
|  | 						this.list = data.list; | ||||||
|  | 						this.total = data.total; | ||||||
|  | 					} | ||||||
|  | 				}); | ||||||
|  | 			} else if (section.key == 'base') { | ||||||
|  | 				this.form = this.infoData; | ||||||
|  | 				this.showForm = true; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		handleTableBtnClick({ type, data }) { | ||||||
|  | 			switch (type) { | ||||||
|  | 				case 'edit': | ||||||
|  | 					this.handleEditAttr(data.id); | ||||||
|  | 					break; | ||||||
|  | 				case 'delete': | ||||||
|  | 					this.handleDeleteAttr(data.id); | ||||||
|  | 					break; | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		handleEmitFun(val) { | ||||||
|  | 			console.log('handleEmitFun', val); | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		init() { | ||||||
|  | 			this.visible = true; | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		async getAttrList() { | ||||||
|  | 			this.attrListLoading = true; | ||||||
|  | 			const res = await this.$axios(this.attrQuery); | ||||||
|  | 			if (res.code == 0) { | ||||||
|  | 				this.list = res.data.list; | ||||||
|  | 				this.total = res.data.total; | ||||||
|  | 			} | ||||||
|  | 			this.attrListLoading = false; | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		// 保存表单 | ||||||
|  | 		handleSave() { | ||||||
|  | 			this.$refs['form'][0].validate(async (valid) => { | ||||||
|  | 				if (valid) { | ||||||
|  | 					const isEdit = this.mode == 'edit'; | ||||||
|  | 					await this.$axios({ | ||||||
|  | 						url: this.sections[0][isEdit ? 'urlUpdate' : 'urlCreate'], | ||||||
|  | 						method: isEdit ? 'put' : 'post', | ||||||
|  | 						data: this.form, | ||||||
|  | 					}); | ||||||
|  | 					this.$modal.msgSuccess(`${isEdit ? '更新' : '创建'}成功`); | ||||||
|  | 					this.visible = false; | ||||||
|  | 					this.$emit('refreshDataList'); | ||||||
|  | 				} | ||||||
|  | 			}); | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		handleCancel() { | ||||||
|  | 			this.visible = false; | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		// 开启编辑 | ||||||
|  | 		toggleEdit() { | ||||||
|  | 			this.mode = 'edit'; | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		// 新增属性 | ||||||
|  | 		handleAddAttr() { | ||||||
|  | 			this.attrForm = { | ||||||
|  | 				id: null, | ||||||
|  | 				name: '', | ||||||
|  | 				plcParamName: '', | ||||||
|  | 				unit: '', | ||||||
|  | 				collection: 1, | ||||||
|  | 				minValue: '', | ||||||
|  | 				maxValue: '', | ||||||
|  | 				defaultValue: '', | ||||||
|  | 				description: '', | ||||||
|  | 				remark: '', | ||||||
|  | 				alarmContent: '', | ||||||
|  | 			}; | ||||||
|  | 			this.attrTitle = '添加设备绑定信息'; | ||||||
|  | 			this.attrFormVisible = true; | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		// 编辑属性 | ||||||
|  | 		async handleEditAttr(attrId) { | ||||||
|  | 			const res = await this.$axios({ | ||||||
|  | 				url: this.sections[1].urlDetail, | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: { id: attrId }, | ||||||
|  | 			}); | ||||||
|  | 			if (res.code == 0) { | ||||||
|  | 				this.attrForm = res.data; | ||||||
|  | 				this.attrTitle = '编辑设备绑定信息'; | ||||||
|  | 				this.attrFormVisible = true; | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		// 删除属性 | ||||||
|  | 		handleDeleteAttr(attrId) { | ||||||
|  | 			this.$confirm('确定删除该分组报警?', '提示', { | ||||||
|  | 				confirmButtonText: '确定', | ||||||
|  | 				cancelButtonText: '取消', | ||||||
|  | 				type: 'warning', | ||||||
|  | 			}) | ||||||
|  | 				.then(async () => { | ||||||
|  | 					const res = await this.$axios({ | ||||||
|  | 						url: this.sections[1].urlDelete, | ||||||
|  | 						method: 'delete', | ||||||
|  | 						params: { id: attrId }, | ||||||
|  | 					}); | ||||||
|  | 					if (res.code == 0) { | ||||||
|  | 						this.$message({ | ||||||
|  | 							message: '删除成功', | ||||||
|  | 							type: 'success', | ||||||
|  | 							duration: 1500, | ||||||
|  | 							onClose: () => { | ||||||
|  | 								this.getAttrList(); | ||||||
|  | 							}, | ||||||
|  | 						}); | ||||||
|  | 					} | ||||||
|  | 				}) | ||||||
|  | 				.catch(() => {}); | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		// 提交属性表 | ||||||
|  | 		async submitAttrForm() { | ||||||
|  | 			this.$refs['attrForm'].validate((valid) => { | ||||||
|  | 				if (!valid) { | ||||||
|  |           return false; | ||||||
|  | 				} | ||||||
|  | 			}); | ||||||
|  | 			const isEdit = this.attrForm.id != null; | ||||||
|  | 			this.attrFormSubmitting = true; | ||||||
|  | 			const res = await this.$axios({ | ||||||
|  | 				url: isEdit ? this.sections[1].urlUpdate : this.sections[1].urlCreate, | ||||||
|  | 				method: isEdit ? 'put' : 'post', | ||||||
|  | 				data: { | ||||||
|  | 					...this.attrForm, | ||||||
|  | 					connectId: this.infoData.id | ||||||
|  | 				}, | ||||||
|  | 			}); | ||||||
|  |  | ||||||
|  | 			if (res.code == 0) { | ||||||
|  | 				this.closeAttrForm(); | ||||||
|  | 				this.$message({ | ||||||
|  | 					message: `${isEdit ? '更新' : '创建'}成功`, | ||||||
|  | 					type: 'success', | ||||||
|  | 					duration: 1500, | ||||||
|  | 					onClose: () => { | ||||||
|  | 						this.getAttrList(); | ||||||
|  | 					}, | ||||||
|  | 				}); | ||||||
|  | 			} | ||||||
|  | 			this.attrFormSubmitting = false; | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		closeAttrForm() { | ||||||
|  | 			this.attrFormVisible = false; | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		handleClick(raw) { | ||||||
|  | 			if (raw.type === 'delete') { | ||||||
|  | 				this.$confirm(`确定删除该报警?`, '提示', { | ||||||
|  | 					confirmButtonText: '确定', | ||||||
|  | 					cancelButtonText: '取消', | ||||||
|  | 					type: 'warning', | ||||||
|  | 				}) | ||||||
|  | 					.then(() => { | ||||||
|  | 						deleteProductAttr(raw.data.id).then(({ data }) => { | ||||||
|  | 							this.$message({ | ||||||
|  | 								message: '操作成功', | ||||||
|  | 								type: 'success', | ||||||
|  | 								duration: 1500, | ||||||
|  | 								onClose: () => { | ||||||
|  | 									this.getList(); | ||||||
|  | 								}, | ||||||
|  | 							}); | ||||||
|  | 						}); | ||||||
|  | 					}) | ||||||
|  | 					.catch(() => {}); | ||||||
|  | 			} else { | ||||||
|  | 				this.addNew(raw.data.id); | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | }; | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style scoped> | ||||||
|  | .drawer >>> .el-drawer { | ||||||
|  | 	border-radius: 8px 0 0 8px; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .drawer >>> .el-drawer__header { | ||||||
|  | 	margin: 0; | ||||||
|  | 	padding: 32px 32px 24px; | ||||||
|  | 	border-bottom: 1px solid #dcdfe6; | ||||||
|  | 	margin-bottom: 0px; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .small-title::before { | ||||||
|  | 	content: ''; | ||||||
|  | 	display: inline-block; | ||||||
|  | 	vertical-align: top; | ||||||
|  | 	width: 4px; | ||||||
|  | 	height: 22px; | ||||||
|  | 	border-radius: 1px; | ||||||
|  | 	margin-right: 8px; | ||||||
|  | 	background-color: #0b58ff; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .drawer-body { | ||||||
|  | 	display: flex; | ||||||
|  | 	flex-direction: column; | ||||||
|  | 	height: 100%; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .drawer-body__content { | ||||||
|  | 	flex: 1; | ||||||
|  | 	/* background: #eee; */ | ||||||
|  | 	padding: 20px 30px; | ||||||
|  | 	overflow-y: auto; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .drawer-body__footer { | ||||||
|  | 	display: flex; | ||||||
|  | 	justify-content: flex-end; | ||||||
|  | 	padding: 18px; | ||||||
|  | } | ||||||
|  | </style> | ||||||
| @@ -12,7 +12,7 @@ | |||||||
| 		:wrapper-closable="false" | 		:wrapper-closable="false" | ||||||
| 		class="drawer" | 		class="drawer" | ||||||
| 		custom-class="mes-drawer" | 		custom-class="mes-drawer" | ||||||
| 		size="60%" | 		:size="size || '50%'" | ||||||
| 		@closed="$emit('destroy')"> | 		@closed="$emit('destroy')"> | ||||||
| 		<SmallTitle slot="title"> | 		<SmallTitle slot="title"> | ||||||
| 			{{ | 			{{ | ||||||
| @@ -29,29 +29,107 @@ | |||||||
| 				<section v-for="(section, index) in sections" :key="section.key"> | 				<section v-for="(section, index) in sections" :key="section.key"> | ||||||
| 					<SmallTitle v-if="index != 0">{{ section.name }}</SmallTitle> | 					<SmallTitle v-if="index != 0">{{ section.name }}</SmallTitle> | ||||||
|  |  | ||||||
| 					<div class="form-part" v-if="section.key == 'base'"> | 					<div | ||||||
|  | 						class="form-part" | ||||||
|  | 						v-if="section.key == 'base'" | ||||||
|  | 						style="border-bottom: 1px solid #dfdfdf; margin-bottom: 24px"> | ||||||
| 						<el-skeleton v-if="!showForm" animated /> | 						<el-skeleton v-if="!showForm" animated /> | ||||||
| 						<BaseInfoForm | 						<!-- <BaseInfoForm | ||||||
| 							key="drawer-dialog-form" | 							key="drawer-dialog-form" | ||||||
| 							v-if="showForm" | 							v-if="showForm" | ||||||
| 							ref="form" | 							ref="form" | ||||||
| 							:disabled="mode.includes('detail')" | 							:disabled="mode.includes('detail')" | ||||||
| 							:dataForm="form" | 							v-model="form" | ||||||
| 							:rows="formRows" /> | 							:rows="formRows" /> --> | ||||||
|  |  | ||||||
|  | 						<!-- if  --> | ||||||
|  | 						<el-row v-if="mode.includes('detail')" style="margin-bottom: 24px"> | ||||||
|  | 							<el-col :span="8"> | ||||||
|  | 								<div | ||||||
|  | 									class="title" | ||||||
|  | 									style="font-weight: 700; font-size: 16px; margin: 8px 0"> | ||||||
|  | 									设备名 | ||||||
|  | 								</div> | ||||||
|  | 								<div class="value" style="font-size: 14px"> | ||||||
|  | 									{{ form.equipmentName }} | ||||||
|  | 								</div> | ||||||
|  | 							</el-col> | ||||||
|  | 							<el-col :span="8"> | ||||||
|  | 								<div | ||||||
|  | 									class="title" | ||||||
|  | 									style="font-weight: 700; font-size: 16px; margin: 8px 0"> | ||||||
|  | 									关联表名 | ||||||
|  | 								</div> | ||||||
|  | 								<div class="value" style="font-size: 14px"> | ||||||
|  | 									{{ form.plcName }} | ||||||
|  | 								</div> | ||||||
|  | 							</el-col> | ||||||
|  | 						</el-row> | ||||||
|  | 						<!-- else  --> | ||||||
|  | 						<el-row v-else style="margin-bottom: 24px" :gutter="20"> | ||||||
|  | 							<el-form ref="form" :model="form"> | ||||||
|  | 								<el-col :span="8"> | ||||||
|  | 									<el-form-item | ||||||
|  | 										class="title" | ||||||
|  | 										label="设备名" | ||||||
|  | 										style="font-size: 16px; margin: 8px 0"> | ||||||
|  | 										<el-select | ||||||
|  | 											v-model="form.equipmentId" | ||||||
|  | 											filterable | ||||||
|  | 											clearable | ||||||
|  | 											placeholder="请选择设备"> | ||||||
|  | 											<el-option | ||||||
|  | 												v-for="eq in eqList" | ||||||
|  | 												:key="eq.id" | ||||||
|  | 												:label="eq.name" | ||||||
|  | 												:value="eq.id"></el-option> | ||||||
|  | 										</el-select> | ||||||
|  | 									</el-form-item> | ||||||
|  | 								</el-col> | ||||||
|  | 								<el-col :span="8"> | ||||||
|  | 									<el-form-item | ||||||
|  | 										class="title" | ||||||
|  | 										label="设备关联表名" | ||||||
|  | 										style="font-size: 16px; margin: 8px 0"> | ||||||
|  | 										<el-select | ||||||
|  | 											v-model="form.plcId" | ||||||
|  | 											filterable | ||||||
|  | 											clearable | ||||||
|  | 											placeholder="请选择关联表"> | ||||||
|  | 											<el-option | ||||||
|  | 												v-for="plc in plcList" | ||||||
|  | 												:key="plc.id" | ||||||
|  | 												:label="plc.plcTableName" | ||||||
|  | 												:value="plc.id"></el-option> | ||||||
|  | 										</el-select> | ||||||
|  | 									</el-form-item> | ||||||
|  | 								</el-col> | ||||||
|  | 							</el-form> | ||||||
|  | 						</el-row> | ||||||
| 					</div> | 					</div> | ||||||
|  |  | ||||||
| 					<div v-if="section.key == 'attrs'" style="margin-top: 12px"> | 					<div | ||||||
|  | 						v-if="section.key == 'attrs'" | ||||||
|  | 						style="position: relative; margin-top: 12px"> | ||||||
|  | 						<div | ||||||
|  | 							v-if="!mode.includes('detail')" | ||||||
|  | 							style="position: absolute; top: -40px; right: 0"> | ||||||
|  | 							<el-button @click="handleAddAttr" type="text"> | ||||||
|  | 								<i class="el-icon-plus"></i> | ||||||
|  | 								添加参数 | ||||||
|  | 							</el-button> | ||||||
|  | 						</div> | ||||||
| 						<base-table | 						<base-table | ||||||
| 							v-loading="attrListLoading" | 							v-loading="attrListLoading" | ||||||
| 							:table-props="section.props" | 							:table-props="section.props" | ||||||
| 							:page="attrQuery?.params.pageNo || 1" | 							:page="attrQuery?.params.pageNo || 1" | ||||||
| 							:limit="attrQuery?.params.pageSize || 10" | 							:limit="attrQuery?.params.pageSize || 10" | ||||||
| 							:table-data="list" | 							:table-data="list" | ||||||
| 							:add-button-show="mode.includes('detail') ? null : '添加属性'" |  | ||||||
| 							@emitButtonClick="handleAddAttr" |  | ||||||
| 							@emitFun="handleEmitFun"> | 							@emitFun="handleEmitFun"> | ||||||
|  | 							<!-- :add-button-show="mode.includes('detail') ? null : '添加属性'" | ||||||
|  | 							@emitButtonClick="handleAddAttr" --> | ||||||
| 							<method-btn | 							<method-btn | ||||||
| 								v-if="section.tableBtn" | 								v-if="section.tableBtn && !mode.includes('detail')" | ||||||
| 								slot="handleBtn" | 								slot="handleBtn" | ||||||
| 								label="操作" | 								label="操作" | ||||||
| 								:method-list="tableBtn" | 								:method-list="tableBtn" | ||||||
| @@ -71,17 +149,12 @@ | |||||||
|  |  | ||||||
| 			<div class="drawer-body__footer"> | 			<div class="drawer-body__footer"> | ||||||
| 				<el-button style="" @click="handleCancel">取消</el-button> | 				<el-button style="" @click="handleCancel">取消</el-button> | ||||||
| 				<el-button v-if="mode == 'detail'" type="primary" @click="toggleEdit"> | 				<el-button | ||||||
| 					编辑 |  | ||||||
| 				</el-button> |  | ||||||
| 				<el-button v-else type="primary" @click="handleCancel">确定</el-button> |  | ||||||
| 				<!-- sections的第二项必须是 属性列表  --> |  | ||||||
| 				<!-- <el-button |  | ||||||
| 						v-if="sections[1].allowAdd" |  | ||||||
| 					type="primary" | 					type="primary" | ||||||
| 						@click="handleAddAttr"> | 					v-if="!mode.includes('detail')" | ||||||
| 						添加属性 | 					@click="handleSave"> | ||||||
| 					</el-button> --> | 					保存 | ||||||
|  | 				</el-button> | ||||||
| 			</div> | 			</div> | ||||||
| 		</div> | 		</div> | ||||||
|  |  | ||||||
| @@ -96,10 +169,10 @@ | |||||||
| 			@close="closeAttrForm" | 			@close="closeAttrForm" | ||||||
| 			@cancel="closeAttrForm" | 			@cancel="closeAttrForm" | ||||||
| 			@confirm="submitAttrForm"> | 			@confirm="submitAttrForm"> | ||||||
|  | 			<!-- :disabled="mode.includes('detail')" --> | ||||||
| 			<DialogForm | 			<DialogForm | ||||||
| 				v-if="attrFormVisible" | 				v-if="attrFormVisible" | ||||||
| 				ref="attrForm" | 				ref="attrForm" | ||||||
| 				:disabled="mode.includes('detail')" |  | ||||||
| 				v-model="attrForm" | 				v-model="attrForm" | ||||||
| 				:rows="attrRows" /> | 				:rows="attrRows" /> | ||||||
| 		</base-dialog> | 		</base-dialog> | ||||||
| @@ -136,7 +209,7 @@ const SmallTitle = { | |||||||
|  |  | ||||||
| export default { | export default { | ||||||
| 	components: { SmallTitle, DialogForm: BaseInfoForm, BaseInfoForm }, | 	components: { SmallTitle, DialogForm: BaseInfoForm, BaseInfoForm }, | ||||||
| 	props: ['sections', 'defaultMode', 'infoData'], | 	props: ['sections', 'defaultMode', 'infoData', 'size'], | ||||||
| 	data() { | 	data() { | ||||||
| 		return { | 		return { | ||||||
| 			mode: '', | 			mode: '', | ||||||
| @@ -145,13 +218,15 @@ export default { | |||||||
| 			total: 0, | 			total: 0, | ||||||
| 			form: {}, | 			form: {}, | ||||||
| 			list: [], | 			list: [], | ||||||
|  | 			eqList: [], | ||||||
|  | 			plcList: [], | ||||||
| 			attrTitle: '', | 			attrTitle: '', | ||||||
| 			attrForm: { | 			attrForm: { | ||||||
| 				id: null, | 				id: null, | ||||||
| 				name: '', | 				name: '', | ||||||
| 				plcParamName: '', | 				plcParamName: '', | ||||||
| 				unit: '', | 				unit: '', | ||||||
| 				collection: '', | 				collection: 1, | ||||||
| 				minValue: '', | 				minValue: '', | ||||||
| 				maxValue: '', | 				maxValue: '', | ||||||
| 				defaultValue: '', | 				defaultValue: '', | ||||||
| @@ -166,13 +241,17 @@ export default { | |||||||
| 						input: true, | 						input: true, | ||||||
| 						label: '参数列名', | 						label: '参数列名', | ||||||
| 						prop: 'plcParamName', | 						prop: 'plcParamName', | ||||||
| 						rules: [{ required: true, message: '不能为空', trigger: 'blur' }], | 						rules: [ | ||||||
|  | 							{ required: true, message: '参数列名不能为空', trigger: 'blur' }, | ||||||
|  | 						], | ||||||
| 					}, | 					}, | ||||||
| 					{ | 					{ | ||||||
| 						input: true, | 						input: true, | ||||||
| 						label: '参数名称', | 						label: '参数名称', | ||||||
| 						prop: 'name', | 						prop: 'name', | ||||||
| 						rules: [{ required: true, message: '不能为空', trigger: 'blur' }], | 						rules: [ | ||||||
|  | 							{ required: true, message: '参数名称不能为空', trigger: 'blur' }, | ||||||
|  | 						], | ||||||
| 					}, | 					}, | ||||||
| 				], | 				], | ||||||
| 				[ | 				[ | ||||||
| @@ -181,7 +260,6 @@ export default { | |||||||
| 						label: '单位', | 						label: '单位', | ||||||
| 						prop: 'unit', | 						prop: 'unit', | ||||||
| 						options: this.getDictDatas(this.DICT_TYPE.UNIT_DICT), | 						options: this.getDictDatas(this.DICT_TYPE.UNIT_DICT), | ||||||
| 						// rules: [{ required: true, message: '不能为空', trigger: 'blur' }], |  | ||||||
| 					}, | 					}, | ||||||
| 					{ | 					{ | ||||||
| 						switch: true, | 						switch: true, | ||||||
| @@ -193,6 +271,47 @@ export default { | |||||||
| 						}, | 						}, | ||||||
| 					}, | 					}, | ||||||
| 				], | 				], | ||||||
|  | 				[ | ||||||
|  | 					{ | ||||||
|  | 						select: true, | ||||||
|  | 						label: '设备参数类型', | ||||||
|  | 						prop: 'equipmentParamType', | ||||||
|  | 						options: [ | ||||||
|  | 							{ label: '一般参数', value: 1 }, | ||||||
|  | 							{ label: '工艺参数', value: 2 }, | ||||||
|  | 							{ label: '报警参数', value: 3 }, | ||||||
|  | 						], | ||||||
|  | 						rules: [ | ||||||
|  | 							{ | ||||||
|  | 								required: true, | ||||||
|  | 								message: '设备参数类型不能为空', | ||||||
|  | 								trigger: 'blur', | ||||||
|  | 							}, | ||||||
|  | 						], | ||||||
|  | 					}, | ||||||
|  | 					{ | ||||||
|  | 						select: true, | ||||||
|  | 						label: '生产参数类型', | ||||||
|  | 						prop: 'productionParamType', | ||||||
|  | 						options: [ | ||||||
|  | 							// { label: '进片数量', value: 1 }, | ||||||
|  | 							// { label: '出片数量', value: 2 }, | ||||||
|  | 							// { label: '破损数量', value: 3 }, | ||||||
|  | 							// { label: '无类型', value: 4 }, | ||||||
|  | 							{ label: '进口计数', value: 1 }, | ||||||
|  | 							{ label: '出口计数', value: 2 }, | ||||||
|  | 							{ label: '损耗计数', value: 3 }, | ||||||
|  | 							{ label: '无类型', value: 4 }, | ||||||
|  | 						], | ||||||
|  | 						rules: [ | ||||||
|  | 							{ | ||||||
|  | 								required: true, | ||||||
|  | 								message: '生产参数类型不能为空', | ||||||
|  | 								trigger: 'blur', | ||||||
|  | 							}, | ||||||
|  | 						], | ||||||
|  | 					}, | ||||||
|  | 				], | ||||||
| 				[ | 				[ | ||||||
| 					{ | 					{ | ||||||
| 						input: true, | 						input: true, | ||||||
| @@ -222,7 +341,6 @@ export default { | |||||||
| 								transform: (val) => Number(val), | 								transform: (val) => Number(val), | ||||||
| 							}, | 							}, | ||||||
| 						], | 						], | ||||||
| 						// rules: [{ required: true, message: '不能为空', trigger: 'blur' }], |  | ||||||
| 					}, | 					}, | ||||||
| 				], | 				], | ||||||
| 				[ | 				[ | ||||||
| @@ -230,13 +348,11 @@ export default { | |||||||
| 						input: true, | 						input: true, | ||||||
| 						label: '标准值', | 						label: '标准值', | ||||||
| 						prop: 'defaultValue', | 						prop: 'defaultValue', | ||||||
| 						// rules: [{ required: true, message: '不能为空', trigger: 'blur' }], |  | ||||||
| 					}, | 					}, | ||||||
| 					{ | 					{ | ||||||
| 						input: true, | 						input: true, | ||||||
| 						label: '描述', | 						label: '描述', | ||||||
| 						prop: 'description', | 						prop: 'description', | ||||||
| 						// rules: [{ required: true, message: '不能为空', trigger: 'blur' }], |  | ||||||
| 					}, | 					}, | ||||||
| 				], | 				], | ||||||
| 				[ | 				[ | ||||||
| @@ -244,7 +360,6 @@ export default { | |||||||
| 						input: true, | 						input: true, | ||||||
| 						label: '备注', | 						label: '备注', | ||||||
| 						prop: 'remark', | 						prop: 'remark', | ||||||
| 						// rules: [{ required: true, message: '不能为空', trigger: 'blur' }], |  | ||||||
| 					}, | 					}, | ||||||
| 				], | 				], | ||||||
| 			], | 			], | ||||||
| @@ -257,6 +372,7 @@ export default { | |||||||
| 			infoQuery: null, // 基本信息的请求 | 			infoQuery: null, // 基本信息的请求 | ||||||
| 			attrFormSubmitting: false, | 			attrFormSubmitting: false, | ||||||
| 			attrListLoading: false, | 			attrListLoading: false, | ||||||
|  | 			shouldRefreshPageView: false, | ||||||
| 		}; | 		}; | ||||||
| 	}, | 	}, | ||||||
| 	computed: { | 	computed: { | ||||||
| @@ -275,11 +391,24 @@ export default { | |||||||
| 			}); | 			}); | ||||||
| 		}, | 		}, | ||||||
| 		tableBtn() { | 		tableBtn() { | ||||||
| 			return this.mode == 'detail' ? [] : this.sections[1].tableBtn; | 			return this.sections[1].tableBtn; | ||||||
|  | 			// return this.mode == 'detail' ? [] : this.sections[1].tableBtn; | ||||||
| 		}, | 		}, | ||||||
| 	}, | 	}, | ||||||
| 	mounted() { | 	mounted() { | ||||||
|  | 		this.shouldRefreshPageView = false; | ||||||
| 		this.mode = this.defaultMode || 'detail'; | 		this.mode = this.defaultMode || 'detail'; | ||||||
|  |  | ||||||
|  | 		if (this.mode != 'detail') { | ||||||
|  | 			this.$axios('/base/equipment/listAll').then(({ code, data }) => { | ||||||
|  | 				this.eqList = data; | ||||||
|  | 			}); | ||||||
|  | 			this.$axios({ | ||||||
|  | 				url: '/base/equipment-plc/listAll', | ||||||
|  | 			}).then(({ code, data }) => { | ||||||
|  | 				this.plcList = data; | ||||||
|  | 			}); | ||||||
|  | 		} | ||||||
| 		for (const section of this.sections) { | 		for (const section of this.sections) { | ||||||
| 			// 请求具体信息 | 			// 请求具体信息 | ||||||
| 			if ('url' in section) { | 			if ('url' in section) { | ||||||
| @@ -341,7 +470,7 @@ export default { | |||||||
| 		handleSave() { | 		handleSave() { | ||||||
| 			this.$refs['form'][0].validate(async (valid) => { | 			this.$refs['form'][0].validate(async (valid) => { | ||||||
| 				if (valid) { | 				if (valid) { | ||||||
| 					const isEdit = this.mode == 'edit'; | 					const isEdit = !this.mode.includes('detail'); | ||||||
| 					await this.$axios({ | 					await this.$axios({ | ||||||
| 						url: this.sections[0][isEdit ? 'urlUpdate' : 'urlCreate'], | 						url: this.sections[0][isEdit ? 'urlUpdate' : 'urlCreate'], | ||||||
| 						method: isEdit ? 'put' : 'post', | 						method: isEdit ? 'put' : 'post', | ||||||
| @@ -355,6 +484,9 @@ export default { | |||||||
| 		}, | 		}, | ||||||
|  |  | ||||||
| 		handleCancel() { | 		handleCancel() { | ||||||
|  | 			if (this.shouldRefreshPageView) { | ||||||
|  | 				this.$emit('refreshDataList'); | ||||||
|  | 			} | ||||||
| 			this.visible = false; | 			this.visible = false; | ||||||
| 		}, | 		}, | ||||||
|  |  | ||||||
| @@ -370,15 +502,17 @@ export default { | |||||||
| 				name: '', | 				name: '', | ||||||
| 				plcParamName: '', | 				plcParamName: '', | ||||||
| 				unit: '', | 				unit: '', | ||||||
| 				collection: '', | 				collection: 1, | ||||||
| 				minValue: '', | 				minValue: '', | ||||||
| 				maxValue: '', | 				maxValue: '', | ||||||
| 				defaultValue: '', | 				defaultValue: '', | ||||||
| 				description: '', | 				description: '', | ||||||
| 				remark: '', | 				remark: '', | ||||||
|  | 				equipmentParamType: '', | ||||||
|  | 				productionParamType: '', | ||||||
| 				alarmContent: '', | 				alarmContent: '', | ||||||
| 			}; | 			}; | ||||||
| 			this.attrTitle = '添加设备绑定信息'; | 			this.attrTitle = '添加参数绑定信息'; | ||||||
| 			this.attrFormVisible = true; | 			this.attrFormVisible = true; | ||||||
| 		}, | 		}, | ||||||
|  |  | ||||||
| @@ -391,14 +525,14 @@ export default { | |||||||
| 			}); | 			}); | ||||||
| 			if (res.code == 0) { | 			if (res.code == 0) { | ||||||
| 				this.attrForm = res.data; | 				this.attrForm = res.data; | ||||||
| 				this.attrTitle = '编辑设备绑定信息'; | 				this.attrTitle = '编辑参数绑定信息'; | ||||||
| 				this.attrFormVisible = true; | 				this.attrFormVisible = true; | ||||||
| 			} | 			} | ||||||
| 		}, | 		}, | ||||||
|  |  | ||||||
| 		// 删除属性 | 		// 删除属性 | ||||||
| 		handleDeleteAttr(attrId) { | 		handleDeleteAttr(attrId) { | ||||||
| 			this.$confirm('确定删除该分组报警?', '提示', { | 			this.$confirm('确定删除该参数?', '提示', { | ||||||
| 				confirmButtonText: '确定', | 				confirmButtonText: '确定', | ||||||
| 				cancelButtonText: '取消', | 				cancelButtonText: '取消', | ||||||
| 				type: 'warning', | 				type: 'warning', | ||||||
| @@ -410,6 +544,7 @@ export default { | |||||||
| 						params: { id: attrId }, | 						params: { id: attrId }, | ||||||
| 					}); | 					}); | ||||||
| 					if (res.code == 0) { | 					if (res.code == 0) { | ||||||
|  | 						this.shouldRefreshPageView = true; | ||||||
| 						this.$message({ | 						this.$message({ | ||||||
| 							message: '删除成功', | 							message: '删除成功', | ||||||
| 							type: 'success', | 							type: 'success', | ||||||
| @@ -424,12 +559,12 @@ export default { | |||||||
| 		}, | 		}, | ||||||
|  |  | ||||||
| 		// 提交属性表 | 		// 提交属性表 | ||||||
| 		async submitAttrForm() { | 		submitAttrForm() { | ||||||
| 			this.$refs['attrForm'].validate((valid) => { | 			this.$refs['attrForm'].validate(async (valid) => { | ||||||
| 				if (!valid) { | 				if (!valid) { | ||||||
| 					return; | 					return; | ||||||
| 				} | 				} | ||||||
| 			}); |  | ||||||
| 				const isEdit = this.attrForm.id != null; | 				const isEdit = this.attrForm.id != null; | ||||||
| 				this.attrFormSubmitting = true; | 				this.attrFormSubmitting = true; | ||||||
| 				const res = await this.$axios({ | 				const res = await this.$axios({ | ||||||
| @@ -437,7 +572,7 @@ export default { | |||||||
| 					method: isEdit ? 'put' : 'post', | 					method: isEdit ? 'put' : 'post', | ||||||
| 					data: { | 					data: { | ||||||
| 						...this.attrForm, | 						...this.attrForm, | ||||||
| 					connectId: this.infoData.id | 						connectId: this.infoData.id, | ||||||
| 					}, | 					}, | ||||||
| 				}); | 				}); | ||||||
|  |  | ||||||
| @@ -449,10 +584,12 @@ export default { | |||||||
| 						duration: 1500, | 						duration: 1500, | ||||||
| 						onClose: () => { | 						onClose: () => { | ||||||
| 							this.getAttrList(); | 							this.getAttrList(); | ||||||
|  | 							this.shouldRefreshPageView = true; | ||||||
| 						}, | 						}, | ||||||
| 					}); | 					}); | ||||||
| 				} | 				} | ||||||
| 				this.attrFormSubmitting = false; | 				this.attrFormSubmitting = false; | ||||||
|  | 			}); | ||||||
| 		}, | 		}, | ||||||
|  |  | ||||||
| 		closeAttrForm() { | 		closeAttrForm() { | ||||||
| @@ -461,7 +598,7 @@ export default { | |||||||
|  |  | ||||||
| 		handleClick(raw) { | 		handleClick(raw) { | ||||||
| 			if (raw.type === 'delete') { | 			if (raw.type === 'delete') { | ||||||
| 				this.$confirm(`确定删除该报警?`, '提示', { | 				this.$confirm(`确定删除该参数?`, '提示', { | ||||||
| 					confirmButtonText: '确定', | 					confirmButtonText: '确定', | ||||||
| 					cancelButtonText: '取消', | 					cancelButtonText: '取消', | ||||||
| 					type: 'warning', | 					type: 'warning', | ||||||
|   | |||||||
							
								
								
									
										100
									
								
								src/views/base/equipmentPlcConnect/components/basic-add.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,100 @@ | |||||||
|  | /* | ||||||
|  |  * @Author: zwq | ||||||
|  |  * @Date: 2022-08-24 11:19:43 | ||||||
|  |  * @LastEditors: zhp | ||||||
|  |  * @LastEditTime: 2023-12-13 15:52:53 | ||||||
|  |  * @Description: | ||||||
|  |  */ | ||||||
|  | export default { | ||||||
|  |   data() { | ||||||
|  |     /* eslint-disable */ | ||||||
|  |     return { | ||||||
|  |       urlOptions: { | ||||||
|  |         createURL: '', | ||||||
|  |         updateURL: '', | ||||||
|  |         infoURL: '', | ||||||
|  |         codeURL: '', | ||||||
|  |         getOption: false, | ||||||
|  |         isGetCode: false, | ||||||
|  |         optionArrUrl: [], | ||||||
|  |         optionArr: {} | ||||||
|  |       }, | ||||||
|  |       visible: false, | ||||||
|  |       setData: false | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   created() { | ||||||
|  |   }, | ||||||
|  |   activated() { | ||||||
|  |   }, | ||||||
|  |   methods: { | ||||||
|  |     init(id) { | ||||||
|  |       this.dataForm.id = id || ""; | ||||||
|  |       this.visible = true; | ||||||
|  |       if (this.urlOptions.getOption) { | ||||||
|  |         this.getArr() | ||||||
|  |       } | ||||||
|  |       this.$nextTick(() => { | ||||||
|  |         this.$refs["dataForm"].resetFields(); | ||||||
|  |         if (this.dataForm.id) { | ||||||
|  |           this.urlOptions.infoURL(id).then(response => { | ||||||
|  |             this.dataForm = response.data | ||||||
|  |             if (this.setData) { | ||||||
|  |               this.setDataForm() | ||||||
|  |             } | ||||||
|  |           }); | ||||||
|  |         } else { | ||||||
|  |           if (this.urlOptions.isGetCode) { | ||||||
|  |             this.getCode() | ||||||
|  |           } | ||||||
|  | 				} | ||||||
|  |       }); | ||||||
|  |     }, | ||||||
|  | 		getCode() { | ||||||
|  | 			this.urlOptions.codeURL() | ||||||
|  | 				.then(({ data: res }) => { | ||||||
|  | 					this.dataForm.code = res; | ||||||
|  | 				}) | ||||||
|  | 				.catch(() => {}); | ||||||
|  | 		}, | ||||||
|  |     getArr() { | ||||||
|  |       const params = { | ||||||
|  |         pageSize: 100, | ||||||
|  |         pageNo: 1, | ||||||
|  |       } | ||||||
|  |       this.urlOptions.optionArrUrl.forEach((item, index) => { | ||||||
|  |         item(params).then(({ data: res }) => { | ||||||
|  |           this.$set(this.urlOptions.optionArr, `arr${index}`, res.list) | ||||||
|  |         }) | ||||||
|  |           .catch(() => { | ||||||
|  |           }); | ||||||
|  |       }); | ||||||
|  |     }, | ||||||
|  |     // 表单提交 | ||||||
|  |     dataFormSubmit() { | ||||||
|  |       this.$refs["dataForm"].validate((valid) => { | ||||||
|  |         if (!valid) { | ||||||
|  |           return false; | ||||||
|  |         } | ||||||
|  |         // 修改的提交 | ||||||
|  |         if (this.dataForm.id) { | ||||||
|  |           this.urlOptions.updateURL(this.dataForm).then(response => { | ||||||
|  |             this.$modal.msgSuccess("修改成功"); | ||||||
|  |             this.visible = false; | ||||||
|  |             this.$emit("refreshDataList"); | ||||||
|  |           }); | ||||||
|  |           return; | ||||||
|  |         } | ||||||
|  |         // 添加的提交 | ||||||
|  |         this.urlOptions.createURL(this.dataForm).then(response => { | ||||||
|  |           this.$modal.msgSuccess("新增成功"); | ||||||
|  |           this.visible = false; | ||||||
|  |           this.$emit("refreshDataList"); | ||||||
|  |         }); | ||||||
|  |       }); | ||||||
|  |     }, | ||||||
|  |     formClear() { | ||||||
|  |       this.$refs.dataForm.resetFields() | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										535
									
								
								src/views/base/equipmentPlcConnect/index-old.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,535 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="app-container"> | ||||||
|  | 		<!-- 搜索工作栏 --> | ||||||
|  | 		<SearchBar | ||||||
|  | 			:formConfigs="searchBarFormConfig" | ||||||
|  | 			ref="search-bar" | ||||||
|  | 			@headBtnClick="handleSearchBarBtnClick" /> | ||||||
|  |  | ||||||
|  | 		<!-- 列表 --> | ||||||
|  | 		<base-table | ||||||
|  | 			:table-props="tableProps" | ||||||
|  | 			:page="queryParams.pageNo" | ||||||
|  | 			:limit="queryParams.pageSize" | ||||||
|  | 			:table-data="list" | ||||||
|  | 			@emitFun="handleEmitFun"> | ||||||
|  | 			<method-btn | ||||||
|  | 				v-if="tableBtn.length" | ||||||
|  | 				slot="handleBtn" | ||||||
|  | 				label="操作" | ||||||
|  | 				:width="120" | ||||||
|  | 				:method-list="tableBtn" | ||||||
|  | 				@clickBtn="handleTableBtnClick" /> | ||||||
|  | 		</base-table> | ||||||
|  |  | ||||||
|  | 		<!-- 分页组件 --> | ||||||
|  | 		<pagination | ||||||
|  | 			v-show="total > 0" | ||||||
|  | 			:total="total" | ||||||
|  | 			:page.sync="queryParams.pageNo" | ||||||
|  | 			:limit.sync="queryParams.pageSize" | ||||||
|  | 			@pagination="getList" /> | ||||||
|  |  | ||||||
|  | 		<!-- 对话框(添加 / 修改) --> | ||||||
|  | 		<base-dialog | ||||||
|  | 			:dialogTitle="title" | ||||||
|  | 			:dialogVisible="open" | ||||||
|  | 			width="700px" | ||||||
|  | 			@close="cancel" | ||||||
|  | 			@cancel="cancel" | ||||||
|  | 			@confirm="submitForm"> | ||||||
|  | 			<DialogForm v-if="open" ref="form" v-model="form" :rows="rows" /> | ||||||
|  | 		</base-dialog> | ||||||
|  |  | ||||||
|  | 		<!-- 抽屉 详情 --> | ||||||
|  | 		<BasicDrawer | ||||||
|  | 			v-if="editVisible" | ||||||
|  | 			ref="drawer" | ||||||
|  | 			:default-mode="editMode" | ||||||
|  | 			:info-data="alarmForm" | ||||||
|  | 			:sections="[ | ||||||
|  | 				{ | ||||||
|  | 					name: '基本信息', | ||||||
|  | 					key: 'base', | ||||||
|  | 					rows: drawerBaseInfoRows, | ||||||
|  | 				}, | ||||||
|  | 				{ | ||||||
|  | 					name: '属性列表', | ||||||
|  | 					key: 'attrs', | ||||||
|  | 					props: drawerListProps, | ||||||
|  | 					url: '/base/equipment-plc-param/page', | ||||||
|  | 					urlCreate: '/base/equipment-plc-param/create', | ||||||
|  | 					urlUpdate: '/base/equipment-plc-param/update', | ||||||
|  | 					urlDelete: '/base/equipment-plc-param/delete', | ||||||
|  | 					urlDetail: '/base/equipment-plc-param/get', | ||||||
|  | 					queryParams: { | ||||||
|  | 						connectId: alarmForm.id, | ||||||
|  | 						pageNo: 1, | ||||||
|  | 						pageSize: 10, | ||||||
|  | 					}, | ||||||
|  | 					tableBtn: [ | ||||||
|  | 						this.$auth.hasPermi('base:equipment-plc-param:update') | ||||||
|  | 							? { | ||||||
|  | 									type: 'edit', | ||||||
|  | 									btnName: '修改', | ||||||
|  | 							  } | ||||||
|  | 							: undefined, | ||||||
|  | 						this.$auth.hasPermi('base:equipment-plc-param:delete') | ||||||
|  | 							? { | ||||||
|  | 									type: 'delete', | ||||||
|  | 									btnName: '删除', | ||||||
|  | 							  } | ||||||
|  | 							: undefined, | ||||||
|  | 					].filter((v) => v), | ||||||
|  | 					allowAdd: true, | ||||||
|  | 				}, | ||||||
|  | 			]" | ||||||
|  | 			@refreshDataList="getList" | ||||||
|  | 			@cancel="editVisible = false" | ||||||
|  | 			@destroy="editVisible = false" /> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { | ||||||
|  | 	createEquipmentPlcConnect, | ||||||
|  | 	updateEquipmentPlcConnect, | ||||||
|  | 	deleteEquipmentPlcConnect, | ||||||
|  | 	getEquipmentPlcConnect, | ||||||
|  | 	getEquipmentPlcConnectPage, | ||||||
|  | 	exportEquipmentPlcConnectExcel, | ||||||
|  | } from '@/api/base/equipmentPlcConnect'; | ||||||
|  | import moment from 'moment'; | ||||||
|  | import basicPageMixin from '@/mixins/lb/basicPageMixin'; | ||||||
|  | // import './http'; | ||||||
|  | import BasicDrawer from './components/BasicDrawer.vue'; | ||||||
|  | import { publicFormatter } from '@/utils/dict'; | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	name: 'EquipmentPlcConnect', | ||||||
|  | 	mixins: [basicPageMixin], | ||||||
|  | 	components: { BasicDrawer }, | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			searchBarKeys: ['equipmentId', 'plcId'], | ||||||
|  | 			// tableBtn: [ | ||||||
|  | 			// 	this.$auth.hasPermi('base:equipment-plc:update') | ||||||
|  | 			// 		? { | ||||||
|  | 			// 				type: 'edit', | ||||||
|  | 			// 				btnName: '修改', | ||||||
|  | 			// 		  } | ||||||
|  | 			// 		: undefined, | ||||||
|  | 			// 	this.$auth.hasPermi('base:equipment-plc:delete') | ||||||
|  | 			// 		? { | ||||||
|  | 			// 				type: 'delete', | ||||||
|  | 			// 				btnName: '删除', | ||||||
|  | 			// 		  } | ||||||
|  | 			// 		: undefined, | ||||||
|  | 			// ].filter((v) => v), | ||||||
|  | 			tableBtn: [ | ||||||
|  | 				{ | ||||||
|  | 					type: 'detail', | ||||||
|  | 					btnName: '参数绑定', | ||||||
|  | 				}, | ||||||
|  | 				{ | ||||||
|  | 					type: 'edit', | ||||||
|  | 					btnName: '修改', | ||||||
|  | 				}, | ||||||
|  | 				// { | ||||||
|  | 				// 	type: 'params-bind', | ||||||
|  | 				// 	btnName: '参数绑定', | ||||||
|  | 				// }, | ||||||
|  | 				{ | ||||||
|  | 					type: 'delete', | ||||||
|  | 					btnName: '删除', | ||||||
|  | 				}, | ||||||
|  | 			], | ||||||
|  | 			tableProps: [ | ||||||
|  | 				// { | ||||||
|  | 				// 	prop: 'createTime', | ||||||
|  | 				// 	label: '添加时间', | ||||||
|  | 				// 	fixed: true, | ||||||
|  | 				// 	width: 180, | ||||||
|  | 				// 	filter: (val) => moment(val).format('yyyy-MM-DD HH:mm:ss'), | ||||||
|  | 				// }, | ||||||
|  | 				{ prop: 'productionLine', label: '产线' }, | ||||||
|  | 				{ prop: 'workshopSection', label: '工段' }, | ||||||
|  | 				{ prop: 'equipmentName', label: '设备名' }, | ||||||
|  | 				{ prop: 'equipmentCode', label: '设备编码' }, | ||||||
|  | 				{ prop: 'plcCode', label: '关联表编码' }, | ||||||
|  | 				{ prop: 'plcTableName', label: '关联表名' }, | ||||||
|  | 				{ prop: 'plcName', label: '标识名称' }, | ||||||
|  | 				{ prop: 'bindingParameters', label: '绑定参数数量' }, | ||||||
|  | 				// { | ||||||
|  | 				// 	_action: 'params-bind', | ||||||
|  | 				// 	label: '查看绑定', | ||||||
|  | 				// 	subcomponent: { | ||||||
|  | 				// 		props: ['injectData'], | ||||||
|  | 				// 		render: function (h) { | ||||||
|  | 				// 			const _this = this; | ||||||
|  | 				// 			return h( | ||||||
|  | 				// 				'el-button', | ||||||
|  | 				// 				{ | ||||||
|  | 				// 					props: { type: 'text' }, | ||||||
|  | 				// 					on: { | ||||||
|  | 				// 						click: function () { | ||||||
|  | 				// 							console.log('inejctdata', _this.injectData); | ||||||
|  | 				// 							_this.$emit('emitData', { | ||||||
|  | 				// 								action: _this.injectData._action, | ||||||
|  | 				// 								payload: _this.injectData, | ||||||
|  | 				// 							}); | ||||||
|  | 				// 						}, | ||||||
|  | 				// 					}, | ||||||
|  | 				// 				}, | ||||||
|  | 				// 				'查看绑定' | ||||||
|  | 				// 			); | ||||||
|  | 				// 		}, | ||||||
|  | 				// 	}, | ||||||
|  | 				// }, | ||||||
|  | 			], | ||||||
|  | 			searchBarFormConfig: [ | ||||||
|  | 				{ | ||||||
|  | 					type: 'select', | ||||||
|  | 					label: '设备名', | ||||||
|  | 					placeholder: '请选择设备', | ||||||
|  | 					param: 'equipmentId', | ||||||
|  | 					selectOptions: [], | ||||||
|  | 				}, | ||||||
|  | 				{ | ||||||
|  | 					type: 'select', | ||||||
|  | 					label: '编码', | ||||||
|  | 					placeholder: '请选择编码', | ||||||
|  | 					param: 'plcId', | ||||||
|  | 					selectOptions: [], | ||||||
|  | 				}, | ||||||
|  | 				{ | ||||||
|  | 					type: 'button', | ||||||
|  | 					btnName: '查询', | ||||||
|  | 					name: 'search', | ||||||
|  | 					color: 'primary', | ||||||
|  | 				}, | ||||||
|  | 				{ | ||||||
|  | 					type: 'separate', | ||||||
|  | 				}, | ||||||
|  | 				{ | ||||||
|  | 					// type: this.$auth.hasPermi('base:equipment-plc:create') | ||||||
|  | 					// 	? 'button' | ||||||
|  | 					// 	: '', | ||||||
|  | 					type: 'button', | ||||||
|  | 					btnName: '新增', | ||||||
|  | 					name: 'add', | ||||||
|  | 					plain: true, | ||||||
|  | 					color: 'success', | ||||||
|  | 				}, | ||||||
|  | 				// { | ||||||
|  | 				// 	type: this.$auth.hasPermi('base:equipment-plc:export') ? 'button' : '', | ||||||
|  | 				// 	btnName: '导出', | ||||||
|  | 				// 	name: 'export', | ||||||
|  | 				// 	color: 'warning', | ||||||
|  | 				// }, | ||||||
|  | 			], | ||||||
|  | 			rows: [ | ||||||
|  | 				[ | ||||||
|  | 					{ | ||||||
|  | 						select: true, | ||||||
|  | 						label: '关联表名', | ||||||
|  | 						prop: 'plcId', | ||||||
|  | 						labelKey: `plcTableName`, | ||||||
|  | 						url: '/base/equipment-plc/listAll', | ||||||
|  | 						rules: [{ required: true, message: '不能为空', trigger: 'blur' }], | ||||||
|  | 						bind: { | ||||||
|  | 							filterable: true, | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 				], | ||||||
|  | 				[ | ||||||
|  | 					{ | ||||||
|  | 						select: true, | ||||||
|  | 						label: '设备', | ||||||
|  | 						prop: 'equipmentId', | ||||||
|  | 						url: '/base/equipment/page?pageNo=1&pageSize=99', | ||||||
|  | 						rules: [{ required: true, message: '不能为空', trigger: 'blur' }], | ||||||
|  | 						bind: { | ||||||
|  | 							filterable: true, | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 				], | ||||||
|  | 			], | ||||||
|  | 			open: false, | ||||||
|  | 			// 查询参数 | ||||||
|  | 			queryParams: { | ||||||
|  | 				pageNo: 1, | ||||||
|  | 				pageSize: 10, | ||||||
|  | 				plcId: null, | ||||||
|  | 				equipmentId: null, | ||||||
|  | 			}, | ||||||
|  | 			// 表单参数 | ||||||
|  | 			form: {}, | ||||||
|  | 			// 查看绑定配置 | ||||||
|  | 			editVisible: false, | ||||||
|  | 			editMode: '', | ||||||
|  | 			drawerBaseInfoRows: [ | ||||||
|  | 				[ | ||||||
|  | 					{ | ||||||
|  | 						input: true, | ||||||
|  | 						label: '设备名', | ||||||
|  | 						prop: 'equipmentName', | ||||||
|  | 						rules: [{ required: true, message: '不能为空', trigger: 'blur' }], | ||||||
|  | 						// bind: { | ||||||
|  | 						// 	disabled: this.editMode == 'detail', // some condition, like detail mode... | ||||||
|  | 						// } | ||||||
|  | 					}, | ||||||
|  | 					{ | ||||||
|  | 						input: true, | ||||||
|  | 						label: '关联表名', | ||||||
|  | 						prop: 'plcTableName', | ||||||
|  | 						// url: '/base/equipment/getCode', | ||||||
|  | 					}, | ||||||
|  | 				], | ||||||
|  | 			], | ||||||
|  | 			drawerListProps: [ | ||||||
|  | 				{ prop: 'plcParamName', label: '参数列名' }, | ||||||
|  | 				{ prop: 'name', label: '参数名称' }, | ||||||
|  | 				{ | ||||||
|  | 					prop: 'unit', | ||||||
|  | 					label: '单位', | ||||||
|  | 					filter: publicFormatter('unit_dict'), | ||||||
|  | 				}, | ||||||
|  | 				{ | ||||||
|  | 					prop: 'equipmentParamType', | ||||||
|  | 					label: '设备参数类型', | ||||||
|  | 					filter: (val) => | ||||||
|  | 						val != null | ||||||
|  | 							? ['', '一般参数', '工艺参数', '报警参数', ''][val] | ||||||
|  | 							: '-', | ||||||
|  | 				}, | ||||||
|  | 				{ | ||||||
|  | 					prop: 'productionParamType', | ||||||
|  | 					label: '生产参数类型', | ||||||
|  | 					filter: (val) => | ||||||
|  | 						val != null | ||||||
|  | 							? // ? ['', '进片数量', '出片数量', '破损数量', '无类型', ''][val] | ||||||
|  | 							  ['', '进口计数', '出口计数', '损耗计数', '无类型', ''][val] | ||||||
|  | 							: '-', | ||||||
|  | 				}, | ||||||
|  | 				{ | ||||||
|  | 					prop: 'collection', | ||||||
|  | 					label: '是否采集', | ||||||
|  | 					filter: (val) => (val != null ? ['否', '是'][val] : '-'), | ||||||
|  | 				}, | ||||||
|  | 				{ prop: 'minValue', label: '最小值' }, | ||||||
|  | 				{ prop: 'maxValue', label: '最大值' }, | ||||||
|  | 				{ prop: 'defaultValue', label: '标准值' }, | ||||||
|  | 				{ prop: 'description', label: '描述' }, | ||||||
|  | 				{ prop: 'remark', label: '备注' }, | ||||||
|  | 			], | ||||||
|  | 			alarmForm: { | ||||||
|  | 				id: undefined, | ||||||
|  | 				equipmentName: undefined, | ||||||
|  | 				plcTableName: undefined, | ||||||
|  | 			}, | ||||||
|  | 		}; | ||||||
|  | 	}, | ||||||
|  | 	created() { | ||||||
|  | 		this.getList(); | ||||||
|  | 		this.initSearchOptions(); | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		async getEquipmentOptions() { | ||||||
|  | 			const res = await this.$axios({ | ||||||
|  | 				url: '/base/equipment/listAll', | ||||||
|  | 				method: 'get', | ||||||
|  | 			}); | ||||||
|  | 			return res.data; | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		async getPlcOptions() { | ||||||
|  | 			const res = await this.$axios({ | ||||||
|  | 				url: '/base/equipment-plc/listAll', | ||||||
|  | 				method: 'get', | ||||||
|  | 			}); | ||||||
|  | 			return res.data; | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		/** 初始化查询条件 */ | ||||||
|  | 		async initSearchOptions() { | ||||||
|  | 			Promise.all([this.getEquipmentOptions(), this.getPlcOptions()]).then( | ||||||
|  | 				([eqList, plcList]) => { | ||||||
|  | 					this.searchBarFormConfig[0].selectOptions = eqList.map((item) => { | ||||||
|  | 						return { | ||||||
|  | 							name: item.name, | ||||||
|  | 							id: item.id, | ||||||
|  | 						}; | ||||||
|  | 					}); | ||||||
|  | 					this.searchBarFormConfig[1].selectOptions = plcList.map((item) => { | ||||||
|  | 						return { | ||||||
|  | 							name: item.name, | ||||||
|  | 							id: item.id, | ||||||
|  | 						}; | ||||||
|  | 					}); | ||||||
|  | 				} | ||||||
|  | 			); | ||||||
|  | 		}, | ||||||
|  | 		/** 覆盖 handleEmitFun 的默认实现 */ | ||||||
|  | 		handleEmitFun({ action, payload }) { | ||||||
|  | 			switch (action) { | ||||||
|  | 				case 'params-bind': | ||||||
|  | 					this.reset(); | ||||||
|  | 					const { | ||||||
|  | 						id, | ||||||
|  | 						equipmentName, | ||||||
|  | 						equipmentId, | ||||||
|  | 						plcId, | ||||||
|  | 						plcName, | ||||||
|  | 						plcTableName, | ||||||
|  | 					} = payload; | ||||||
|  | 					// console.log('Cha看绑定参数弹窗', id, equipmentName, plcTableName); | ||||||
|  | 					this.$router.push({ | ||||||
|  | 						name: 'EquipmentPlcParam', | ||||||
|  | 						params: { | ||||||
|  | 							id, | ||||||
|  | 							equipmentName, | ||||||
|  | 							plcTableName, | ||||||
|  | 						}, | ||||||
|  | 					}); | ||||||
|  | 					break; | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		/** 查询列表 */ | ||||||
|  | 		getList() { | ||||||
|  | 			this.loading = true; | ||||||
|  | 			// 执行查询 | ||||||
|  | 			getEquipmentPlcConnectPage(this.queryParams).then((response) => { | ||||||
|  | 				this.list = response.data.list; | ||||||
|  | 				this.total = response.data.total; | ||||||
|  | 				this.loading = false; | ||||||
|  | 			}); | ||||||
|  | 		}, | ||||||
|  | 		/** 取消按钮 */ | ||||||
|  | 		cancel() { | ||||||
|  | 			this.open = false; | ||||||
|  | 			this.reset(); | ||||||
|  | 		}, | ||||||
|  | 		/** 表单重置 */ | ||||||
|  | 		reset() { | ||||||
|  | 			this.form = { | ||||||
|  | 				id: undefined, | ||||||
|  | 				plcId: undefined, | ||||||
|  | 				equipmentId: undefined, | ||||||
|  | 			}; | ||||||
|  | 			this.resetForm('form'); | ||||||
|  | 		}, | ||||||
|  | 		/** 搜索按钮操作 */ | ||||||
|  | 		handleQuery() { | ||||||
|  | 			this.queryParams.pageNo = 1; | ||||||
|  | 			this.getList(); | ||||||
|  | 		}, | ||||||
|  | 		/** 重置按钮操作 */ | ||||||
|  | 		resetQuery() { | ||||||
|  | 			this.resetForm('queryForm'); | ||||||
|  | 			this.handleQuery(); | ||||||
|  | 		}, | ||||||
|  | 		/** 新增按钮操作 */ | ||||||
|  | 		handleAdd() { | ||||||
|  | 			this.reset(); | ||||||
|  | 			this.open = true; | ||||||
|  | 			this.title = '添加设备与实时采集关系表(一对多)'; | ||||||
|  | 		}, | ||||||
|  | 		/** 修改按钮操作 */ | ||||||
|  | 		handleUpdate(row) { | ||||||
|  | 			this.reset(); | ||||||
|  | 			const id = row.id; | ||||||
|  | 			getEquipmentPlcConnect(id).then((response) => { | ||||||
|  | 				this.form = response.data; | ||||||
|  | 				this.open = true; | ||||||
|  | 				this.title = '修改设备与实时采集关系表(一对多)'; | ||||||
|  | 			}); | ||||||
|  | 		}, | ||||||
|  | 		/** 提交按钮 */ | ||||||
|  | 		submitForm() { | ||||||
|  | 			this.$refs['form'].validate((valid) => { | ||||||
|  | 				if (!valid) { | ||||||
|  | 					return; | ||||||
|  | 				} | ||||||
|  | 				// 修改的提交 | ||||||
|  | 				if (this.form.id != null) { | ||||||
|  | 					updateEquipmentPlcConnect(this.form).then((response) => { | ||||||
|  | 						this.$modal.msgSuccess('修改成功'); | ||||||
|  | 						this.open = false; | ||||||
|  | 						this.getList(); | ||||||
|  | 					}); | ||||||
|  | 					return; | ||||||
|  | 				} | ||||||
|  | 				// 添加的提交 | ||||||
|  | 				createEquipmentPlcConnect(this.form).then((response) => { | ||||||
|  | 					this.$modal.msgSuccess('新增成功'); | ||||||
|  | 					this.open = false; | ||||||
|  | 					this.getList(); | ||||||
|  | 				}); | ||||||
|  | 			}); | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		// 查看报警 | ||||||
|  | 		handleDetail(row) { | ||||||
|  | 			// debugger; | ||||||
|  | 			const { | ||||||
|  | 				id, | ||||||
|  | 				bindingParameters, | ||||||
|  | 				equipmentCode, | ||||||
|  | 				equipmentId, | ||||||
|  | 				equipmentName, | ||||||
|  | 				plcCode, | ||||||
|  | 				plcId, | ||||||
|  | 				plcName, | ||||||
|  | 				plcTableName, | ||||||
|  | 				productionLine, | ||||||
|  | 				workshopSection, | ||||||
|  | 			} = row; | ||||||
|  | 			// 打开抽屉 | ||||||
|  | 			this.editMode = 'detail'; | ||||||
|  | 			this.alarmForm.id = id; | ||||||
|  | 			this.alarmForm.plcTableName = plcTableName; // 关联表名 | ||||||
|  | 			this.alarmForm.equipmentName = equipmentName; | ||||||
|  | 			this.editVisible = true; | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs['drawer'].init(); | ||||||
|  | 			}); | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		/** 删除按钮操作 */ | ||||||
|  | 		handleDelete(row) { | ||||||
|  | 			const id = row.id; | ||||||
|  | 			this.$modal | ||||||
|  | 				.confirm('是否删除该配置?') | ||||||
|  | 				.then(function () { | ||||||
|  | 					return deleteEquipmentPlcConnect(id); | ||||||
|  | 				}) | ||||||
|  | 				.then(() => { | ||||||
|  | 					this.getList(); | ||||||
|  | 					this.$modal.msgSuccess('删除成功'); | ||||||
|  | 				}) | ||||||
|  | 				.catch(() => {}); | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		/** 导出按钮操作 */ | ||||||
|  | 		handleExport() { | ||||||
|  | 			// 处理查询参数 | ||||||
|  | 			let params = { ...this.queryParams }; | ||||||
|  | 			params.pageNo = undefined; | ||||||
|  | 			params.pageSize = undefined; | ||||||
|  | 			this.$modal | ||||||
|  | 				.confirm('是否确认导出所有设备与实时采集关系表(一对多)数据项?') | ||||||
|  | 				.then(() => { | ||||||
|  | 					this.exportLoading = true; | ||||||
|  | 					return exportEquipmentPlcConnectExcel(params); | ||||||
|  | 				}) | ||||||
|  | 				.then((response) => { | ||||||
|  | 					this.$download.excel(response, '设备与实时采集关系表(一对多).xls'); | ||||||
|  | 					this.exportLoading = false; | ||||||
|  | 				}) | ||||||
|  | 				.catch(() => {}); | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | }; | ||||||
|  | </script> | ||||||
| @@ -1,3 +1,10 @@ | |||||||
|  | <!-- | ||||||
|  |     filename: CollectionConfig.vue | ||||||
|  |     author: liubin | ||||||
|  |     date: 2023-10-30 10:09:03 | ||||||
|  |     description: | ||||||
|  | --> | ||||||
|  |  | ||||||
| <template> | <template> | ||||||
| 	<div class="app-container"> | 	<div class="app-container"> | ||||||
| 		<!-- 搜索工作栏 --> | 		<!-- 搜索工作栏 --> | ||||||
| @@ -12,7 +19,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" | ||||||
| @@ -34,17 +42,21 @@ | |||||||
| 		<base-dialog | 		<base-dialog | ||||||
| 			:dialogTitle="title" | 			:dialogTitle="title" | ||||||
| 			:dialogVisible="open" | 			:dialogVisible="open" | ||||||
| 			width="700px" | 			width="30%" | ||||||
| 			@close="cancel" | 			@close="cancel" | ||||||
| 			@cancel="cancel" | 			@cancel="cancel" | ||||||
| 			@confirm="submitForm"> | 			@confirm="submitForm"> | ||||||
| 			<DialogForm v-if="open" ref="form" :dataForm="form" :rows="rows" /> | 			<!-- <DialogForm v-if="open" ref="form" v-model="form" :rows="rows" /> --> | ||||||
|  | 			<add-or-update | ||||||
|  | 				ref="addOrUpdate" | ||||||
|  | 				@refreshDataList="successSubmit" /> | ||||||
| 		</base-dialog> | 		</base-dialog> | ||||||
|  |  | ||||||
| 		<!-- 抽屉 详情 --> | 		<!-- 抽屉 详情 --> | ||||||
| 		<BasicDrawer | 		<BasicDrawer | ||||||
| 			v-if="editVisible" | 			v-if="editVisible" | ||||||
| 			ref="drawer" | 			ref="drawer" | ||||||
|  | 			size="45%" | ||||||
| 			:default-mode="editMode" | 			:default-mode="editMode" | ||||||
| 			:info-data="alarmForm" | 			:info-data="alarmForm" | ||||||
| 			:sections="[ | 			:sections="[ | ||||||
| @@ -52,9 +64,13 @@ | |||||||
| 					name: '基本信息', | 					name: '基本信息', | ||||||
| 					key: 'base', | 					key: 'base', | ||||||
| 					rows: drawerBaseInfoRows, | 					rows: drawerBaseInfoRows, | ||||||
|  | 					url: '/base/equipment-plc-connect/get', | ||||||
|  | 					urlUpdate: '/base/equipment-plc-connect/update', | ||||||
|  | 					urlCreate: '/base/equipment-plc-connect/create', | ||||||
|  | 					queryParams: { id: alarmForm.id }, | ||||||
| 				}, | 				}, | ||||||
| 				{ | 				{ | ||||||
| 					name: '属性列表', | 					name: '采集参数', | ||||||
| 					key: 'attrs', | 					key: 'attrs', | ||||||
| 					props: drawerListProps, | 					props: drawerListProps, | ||||||
| 					url: '/base/equipment-plc-param/page', | 					url: '/base/equipment-plc-param/page', | ||||||
| @@ -68,18 +84,26 @@ | |||||||
| 						pageSize: 10, | 						pageSize: 10, | ||||||
| 					}, | 					}, | ||||||
| 					tableBtn: [ | 					tableBtn: [ | ||||||
| 						this.$auth.hasPermi('base:equipment-plc-param:update') | 						{ | ||||||
| 							? { |  | ||||||
| 							type: 'edit', | 							type: 'edit', | ||||||
| 							btnName: '修改', | 							btnName: '修改', | ||||||
| 							  } | 						}, | ||||||
| 							: undefined, | 						{ | ||||||
| 						this.$auth.hasPermi('base:equipment-plc-param:delete') |  | ||||||
| 							? { |  | ||||||
| 							type: 'delete', | 							type: 'delete', | ||||||
| 							btnName: '删除', | 							btnName: '删除', | ||||||
| 							  } | 						}, | ||||||
| 							: undefined, | 						// this.$auth.hasPermi('equipment:collection-config-param:update') | ||||||
|  | 						// 	? { | ||||||
|  | 						// 			type: 'edit', | ||||||
|  | 						// 			btnName: '修改', | ||||||
|  | 						// 	  } | ||||||
|  | 						// 	: undefined, | ||||||
|  | 						// this.$auth.hasPermi('equipment:collection-config-param:delete') | ||||||
|  | 						// 	? { | ||||||
|  | 						// 			type: 'delete', | ||||||
|  | 						// 			btnName: '删除', | ||||||
|  | 						// 	  } | ||||||
|  | 						// 	: undefined, | ||||||
| 					].filter((v) => v), | 					].filter((v) => v), | ||||||
| 					allowAdd: true, | 					allowAdd: true, | ||||||
| 				}, | 				}, | ||||||
| @@ -99,67 +123,60 @@ import { | |||||||
| 	getEquipmentPlcConnectPage, | 	getEquipmentPlcConnectPage, | ||||||
| 	exportEquipmentPlcConnectExcel, | 	exportEquipmentPlcConnectExcel, | ||||||
| } from '@/api/base/equipmentPlcConnect'; | } from '@/api/base/equipmentPlcConnect'; | ||||||
| import moment from 'moment'; |  | ||||||
| import basicPageMixin from '@/mixins/lb/basicPageMixin'; | import basicPageMixin from '@/mixins/lb/basicPageMixin'; | ||||||
| // import './http'; | // import './http'; | ||||||
| import BasicDrawer from './components/BasicDrawer.vue'; | import BasicDrawer from './components/BasicDrawer.vue'; | ||||||
| import { publicFormatter } from '@/utils/dict'; | import { publicFormatter } from '@/utils/dict'; | ||||||
|  | import AddOrUpdate from './add-or-updata'; | ||||||
|  | import tableHeightMixin from '@/mixins/lb/tableHeightMixin'; | ||||||
|  |  | ||||||
| export default { | export default { | ||||||
| 	name: 'EquipmentPlcConnect', | 	name: 'EquipmentPlcConnect', | ||||||
| 	mixins: [basicPageMixin], | 	mixins: [basicPageMixin, tableHeightMixin], | ||||||
| 	components: { BasicDrawer }, | 	components: { BasicDrawer, AddOrUpdate }, | ||||||
| 	data() { | 	data() { | ||||||
| 		return { | 		return { | ||||||
| 			searchBarKeys: ['equipmentId', 'plcId'], | 			searchBarKeys: ['equipmentId', 'plcId'], | ||||||
| 			// tableBtn: [ | 			// tableBtn: [ | ||||||
| 			// 	this.$auth.hasPermi('base:equipment-plc:update') |  | ||||||
| 			// 		? { |  | ||||||
| 			// 				type: 'edit', |  | ||||||
| 			// 				btnName: '修改', |  | ||||||
| 			// 		  } |  | ||||||
| 			// 		: undefined, |  | ||||||
| 			// 	this.$auth.hasPermi('base:equipment-plc:delete') |  | ||||||
| 			// 		? { |  | ||||||
| 			// 				type: 'delete', |  | ||||||
| 			// 				btnName: '删除', |  | ||||||
| 			// 		  } |  | ||||||
| 			// 		: undefined, |  | ||||||
| 			// ].filter((v) => v), | 			// ].filter((v) => v), | ||||||
| 			tableBtn: [ | 			tableBtn: [ | ||||||
| 				{ | 				this.$auth.hasPermiAnd([ | ||||||
|  | 					'base:equipment-plc-connect:query', | ||||||
|  | 					'base:equipment-plc-param:query' | ||||||
|  | 				]) | ||||||
|  | 				? { | ||||||
| 						type: 'detail', | 						type: 'detail', | ||||||
| 						btnName: '参数绑定', | 						btnName: '参数绑定', | ||||||
| 				}, | 					} : undefined, | ||||||
| 				{ | 				this.$auth.hasPermiAnd([ | ||||||
|  | 						'base:equipment-plc-connect:update', | ||||||
|  | 						'base:equipment-plc-connect:query', | ||||||
|  | 						'base:equipment-plc-param:create', | ||||||
|  | 						'base:equipment-plc-param:update', | ||||||
|  | 						'base:equipment-plc-param:delete', | ||||||
|  | 						'base:equipment-plc-param:query' | ||||||
|  | 					]) | ||||||
|  | 					? { | ||||||
| 							type: 'edit', | 							type: 'edit', | ||||||
| 							btnName: '修改', | 							btnName: '修改', | ||||||
| 				}, | 					  } | ||||||
| 				// { | 					: undefined, | ||||||
| 				// 	type: 'params-bind', | 				this.$auth.hasPermi('base:equipment-plc-connect:delete') | ||||||
| 				// 	btnName: '参数绑定', | 					? { | ||||||
| 				// }, |  | ||||||
| 				{ |  | ||||||
| 							type: 'delete', | 							type: 'delete', | ||||||
| 							btnName: '删除', | 							btnName: '删除', | ||||||
| 				}, | 					  } | ||||||
| 			], | 					: undefined, | ||||||
|  | 			].filter((v) => v), | ||||||
| 			tableProps: [ | 			tableProps: [ | ||||||
| 				// { | 				{ prop: 'productionLine', label: '产线', minWidth: 120, showOverflowtooltip: true }, | ||||||
| 				// 	prop: 'createTime', | 				{ prop: 'workshopSection', label: '工段', minWidth: 120, showOverflowtooltip: true }, | ||||||
| 				// 	label: '添加时间', | 				{ prop: 'equipmentName', label: '设备名', minWidth: 120, showOverflowtooltip: true }, | ||||||
| 				// 	fixed: true, | 				{ prop: 'equipmentCode', label: '设备编码', minWidth: 200, showOverflowtooltip: true }, | ||||||
| 				// 	width: 180, | 				{ prop: 'plcCode', label: '关联表编码', minWidth: 220, showOverflowtooltip: true }, | ||||||
| 				// 	filter: (val) => moment(val).format('yyyy-MM-DD HH:mm:ss'), | 				{ prop: 'plcTableName', label: '关联表名', minWidth: 150, showOverflowtooltip: true }, | ||||||
| 				// }, | 				{ prop: 'plcName', label: '标识名称', minWidth: 150, showOverflowtooltip: true }, | ||||||
| 				{ prop: 'productionLine', label: '产线' }, | 				{ prop: 'bindingParameters', label: '绑定参数数量', minWidth: 120, showOverflowtooltip: true }, | ||||||
| 				{ prop: 'workshopSection', label: '工段' }, |  | ||||||
| 				{ prop: 'equipmentName', label: '设备名' }, |  | ||||||
| 				{ prop: 'equipmentCode', label: '设备编码' }, |  | ||||||
| 				{ prop: 'plcCode', label: '关联表编码' }, |  | ||||||
| 				{ prop: 'plcTableName', label: '关联表名' }, |  | ||||||
| 				{ prop: 'plcName', label: '标识名称' }, |  | ||||||
| 				{ prop: 'bindingParameters', label: '绑定参数数量' }, |  | ||||||
| 				// { | 				// { | ||||||
| 				// 	_action: 'params-bind', | 				// 	_action: 'params-bind', | ||||||
| 				// 	label: '查看绑定', | 				// 	label: '查看绑定', | ||||||
| @@ -194,13 +211,15 @@ export default { | |||||||
| 					placeholder: '请选择设备', | 					placeholder: '请选择设备', | ||||||
| 					param: 'equipmentId', | 					param: 'equipmentId', | ||||||
| 					selectOptions: [], | 					selectOptions: [], | ||||||
|  | 					filterable: true, | ||||||
| 				}, | 				}, | ||||||
| 				{ | 				{ | ||||||
| 					type: 'select', | 					type: 'select', | ||||||
| 					label: '编码', | 					label: '关联表编码', | ||||||
| 					placeholder: '请选择编码', | 					placeholder: '请选择关联表编码', | ||||||
| 					param: 'plcId', | 					param: 'plcId', | ||||||
| 					selectOptions: [], | 					selectOptions: [], | ||||||
|  | 					filterable: true, | ||||||
| 				}, | 				}, | ||||||
| 				{ | 				{ | ||||||
| 					type: 'button', | 					type: 'button', | ||||||
| @@ -209,20 +228,21 @@ export default { | |||||||
| 					color: 'primary', | 					color: 'primary', | ||||||
| 				}, | 				}, | ||||||
| 				{ | 				{ | ||||||
| 					type: 'separate', | 					type: this.$auth.hasPermi('base:equipment-plc-connect:create') | ||||||
|  | 						? 'separate' : '', | ||||||
| 				}, | 				}, | ||||||
| 				{ | 				{ | ||||||
| 					// type: this.$auth.hasPermi('base:equipment-plc:create') | 					type: this.$auth.hasPermi('base:equipment-plc-connect:create') | ||||||
| 					// 	? 'button' | 						? 'button' | ||||||
| 					// 	: '', | 						: '', | ||||||
| 					type: 'button', | 					// type: 'button', | ||||||
| 					btnName: '新增', | 					btnName: '新增', | ||||||
| 					name: 'add', | 					name: 'add', | ||||||
| 					plain: true, | 					plain: true, | ||||||
| 					color: 'success', | 					color: 'success', | ||||||
| 				}, | 				}, | ||||||
| 				// { | 				// { | ||||||
| 				// 	type: this.$auth.hasPermi('base:equipment-plc:export') ? 'button' : '', | 				// 	type: this.$auth.hasPermi('equipment:collection-config:export') ? 'button' : '', | ||||||
| 				// 	btnName: '导出', | 				// 	btnName: '导出', | ||||||
| 				// 	name: 'export', | 				// 	name: 'export', | ||||||
| 				// 	color: 'warning', | 				// 	color: 'warning', | ||||||
| @@ -236,7 +256,9 @@ export default { | |||||||
| 						prop: 'plcId', | 						prop: 'plcId', | ||||||
| 						labelKey: `plcTableName`, | 						labelKey: `plcTableName`, | ||||||
| 						url: '/base/equipment-plc/listAll', | 						url: '/base/equipment-plc/listAll', | ||||||
| 						rules: [{ required: true, message: '不能为空', trigger: 'blur' }], | 						rules: [ | ||||||
|  | 							{ required: true, message: '关联表名不能为空', trigger: 'blur' }, | ||||||
|  | 						], | ||||||
| 						bind: { | 						bind: { | ||||||
| 							filterable: true, | 							filterable: true, | ||||||
| 						}, | 						}, | ||||||
| @@ -247,8 +269,10 @@ export default { | |||||||
| 						select: true, | 						select: true, | ||||||
| 						label: '设备', | 						label: '设备', | ||||||
| 						prop: 'equipmentId', | 						prop: 'equipmentId', | ||||||
| 						url: '/base/equipment/page?pageNo=1&pageSize=99', | 						url: '/base/core-equipment/page?pageNo=1&pageSize=99', | ||||||
| 						rules: [{ required: true, message: '不能为空', trigger: 'blur' }], | 						rules: [ | ||||||
|  | 							{ required: true, message: '设备不能为空', trigger: 'blur' }, | ||||||
|  | 						], | ||||||
| 						bind: { | 						bind: { | ||||||
| 							filterable: true, | 							filterable: true, | ||||||
| 						}, | 						}, | ||||||
| @@ -259,7 +283,7 @@ export default { | |||||||
| 			// 查询参数 | 			// 查询参数 | ||||||
| 			queryParams: { | 			queryParams: { | ||||||
| 				pageNo: 1, | 				pageNo: 1, | ||||||
| 				pageSize: 10, | 				pageSize: 20, | ||||||
| 				plcId: null, | 				plcId: null, | ||||||
| 				equipmentId: null, | 				equipmentId: null, | ||||||
| 			}, | 			}, | ||||||
| @@ -274,7 +298,9 @@ export default { | |||||||
| 						input: true, | 						input: true, | ||||||
| 						label: '设备名', | 						label: '设备名', | ||||||
| 						prop: 'equipmentName', | 						prop: 'equipmentName', | ||||||
| 						rules: [{ required: true, message: '不能为空', trigger: 'blur' }], | 						rules: [ | ||||||
|  | 							{ required: true, message: '设备名不能为空', trigger: 'blur' }, | ||||||
|  | 						], | ||||||
| 						// bind: { | 						// bind: { | ||||||
| 						// 	disabled: this.editMode == 'detail', // some condition, like detail mode... | 						// 	disabled: this.editMode == 'detail', // some condition, like detail mode... | ||||||
| 						// } | 						// } | ||||||
| @@ -283,7 +309,7 @@ export default { | |||||||
| 						input: true, | 						input: true, | ||||||
| 						label: '关联表名', | 						label: '关联表名', | ||||||
| 						prop: 'plcTableName', | 						prop: 'plcTableName', | ||||||
| 						// url: '/base/equipment/getCode', | 						// url: '/base/core-equipment/getCode', | ||||||
| 					}, | 					}, | ||||||
| 				], | 				], | ||||||
| 			], | 			], | ||||||
| @@ -295,6 +321,23 @@ export default { | |||||||
| 					label: '单位', | 					label: '单位', | ||||||
| 					filter: publicFormatter('unit_dict'), | 					filter: publicFormatter('unit_dict'), | ||||||
| 				}, | 				}, | ||||||
|  | 				{ | ||||||
|  | 					prop: 'equipmentParamType', | ||||||
|  | 					label: '设备参数类型', | ||||||
|  | 					filter: (val) => | ||||||
|  | 						val != null | ||||||
|  | 							? ['', '一般参数', '工艺参数', '报警参数', ''][val] | ||||||
|  | 							: '-', | ||||||
|  | 				}, | ||||||
|  | 				{ | ||||||
|  | 					prop: 'productionParamType', | ||||||
|  | 					label: '生产参数类型', | ||||||
|  | 					filter: (val) => | ||||||
|  | 						val != null | ||||||
|  | 							? // ? ['', '进片数量', '出片数量', '破损数量', '无类型', ''][val] | ||||||
|  | 							  ['', '进口计数', '出口计数', '损耗计数', '无类型', ''][val] | ||||||
|  | 							: '-', | ||||||
|  | 				}, | ||||||
| 				{ | 				{ | ||||||
| 					prop: 'collection', | 					prop: 'collection', | ||||||
| 					label: '是否采集', | 					label: '是否采集', | ||||||
| @@ -318,6 +361,10 @@ export default { | |||||||
| 		this.initSearchOptions(); | 		this.initSearchOptions(); | ||||||
| 	}, | 	}, | ||||||
| 	methods: { | 	methods: { | ||||||
|  | 		successSubmit() { | ||||||
|  |       this.cancel() | ||||||
|  |       this.getList() | ||||||
|  |     }, | ||||||
| 		async getEquipmentOptions() { | 		async getEquipmentOptions() { | ||||||
| 			const res = await this.$axios({ | 			const res = await this.$axios({ | ||||||
| 				url: '/base/equipment/listAll', | 				url: '/base/equipment/listAll', | ||||||
| @@ -325,7 +372,6 @@ export default { | |||||||
| 			}); | 			}); | ||||||
| 			return res.data; | 			return res.data; | ||||||
| 		}, | 		}, | ||||||
|  |  | ||||||
| 		async getPlcOptions() { | 		async getPlcOptions() { | ||||||
| 			const res = await this.$axios({ | 			const res = await this.$axios({ | ||||||
| 				url: '/base/equipment-plc/listAll', | 				url: '/base/equipment-plc/listAll', | ||||||
| @@ -346,7 +392,7 @@ export default { | |||||||
| 					}); | 					}); | ||||||
| 					this.searchBarFormConfig[1].selectOptions = plcList.map((item) => { | 					this.searchBarFormConfig[1].selectOptions = plcList.map((item) => { | ||||||
| 						return { | 						return { | ||||||
| 							name: item.name, | 							name: item.code, | ||||||
| 							id: item.id, | 							id: item.id, | ||||||
| 						}; | 						}; | ||||||
| 					}); | 					}); | ||||||
| @@ -403,6 +449,19 @@ export default { | |||||||
| 			}; | 			}; | ||||||
| 			this.resetForm('form'); | 			this.resetForm('form'); | ||||||
| 		}, | 		}, | ||||||
|  | 		handleTableBtnClick({ data, type }) { | ||||||
|  | 			switch (type) { | ||||||
|  | 				case 'edit': | ||||||
|  | 					this.handleDetail(data, 'edit'); | ||||||
|  | 					break; | ||||||
|  | 				case 'delete': | ||||||
|  | 					this.handleDelete(data); | ||||||
|  | 					break; | ||||||
|  | 				case 'detail': | ||||||
|  | 					this.handleDetail(data); | ||||||
|  | 					break; | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
| 		/** 搜索按钮操作 */ | 		/** 搜索按钮操作 */ | ||||||
| 		handleQuery() { | 		handleQuery() { | ||||||
| 			this.queryParams.pageNo = 1; | 			this.queryParams.pageNo = 1; | ||||||
| @@ -417,7 +476,10 @@ export default { | |||||||
| 		handleAdd() { | 		handleAdd() { | ||||||
| 			this.reset(); | 			this.reset(); | ||||||
| 			this.open = true; | 			this.open = true; | ||||||
| 			this.title = '添加设备与实时采集关系表(一对多)'; | 			this.title = '添加设备采集配置'; | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs.addOrUpdate.init() | ||||||
|  | 			}) | ||||||
| 		}, | 		}, | ||||||
| 		/** 修改按钮操作 */ | 		/** 修改按钮操作 */ | ||||||
| 		handleUpdate(row) { | 		handleUpdate(row) { | ||||||
| @@ -426,35 +488,16 @@ export default { | |||||||
| 			getEquipmentPlcConnect(id).then((response) => { | 			getEquipmentPlcConnect(id).then((response) => { | ||||||
| 				this.form = response.data; | 				this.form = response.data; | ||||||
| 				this.open = true; | 				this.open = true; | ||||||
| 				this.title = '修改设备与实时采集关系表(一对多)'; | 				this.title = '修改设备采集配置'; | ||||||
| 			}); | 			}); | ||||||
| 		}, | 		}, | ||||||
| 		/** 提交按钮 */ | 		/** 提交按钮 */ | ||||||
| 		submitForm() { | 		submitForm() { | ||||||
| 			this.$refs['form'].validate((valid) => { | 			this.$refs.addOrUpdate.dataFormSubmit() | ||||||
| 				if (!valid) { |  | ||||||
| 					return; |  | ||||||
| 				} |  | ||||||
| 				// 修改的提交 |  | ||||||
| 				if (this.form.id != null) { |  | ||||||
| 					updateEquipmentPlcConnect(this.form).then((response) => { |  | ||||||
| 						this.$modal.msgSuccess('修改成功'); |  | ||||||
| 						this.open = false; |  | ||||||
| 						this.getList(); |  | ||||||
| 					}); |  | ||||||
| 					return; |  | ||||||
| 				} |  | ||||||
| 				// 添加的提交 |  | ||||||
| 				createEquipmentPlcConnect(this.form).then((response) => { |  | ||||||
| 					this.$modal.msgSuccess('新增成功'); |  | ||||||
| 					this.open = false; |  | ||||||
| 					this.getList(); |  | ||||||
| 				}); |  | ||||||
| 			}); |  | ||||||
| 		}, | 		}, | ||||||
|  |  | ||||||
| 		// 查看报警 | 		// 查看报警 | ||||||
| 		handleDetail(row) { | 		handleDetail(row, mode = 'detail') { | ||||||
| 			// debugger; | 			// debugger; | ||||||
| 			const { | 			const { | ||||||
| 				id, | 				id, | ||||||
| @@ -470,7 +513,7 @@ export default { | |||||||
| 				workshopSection, | 				workshopSection, | ||||||
| 			} = row; | 			} = row; | ||||||
| 			// 打开抽屉 | 			// 打开抽屉 | ||||||
| 			this.editMode = 'detail'; | 			this.editMode = mode; | ||||||
| 			this.alarmForm.id = id; | 			this.alarmForm.id = id; | ||||||
| 			this.alarmForm.plcTableName = plcTableName; // 关联表名 | 			this.alarmForm.plcTableName = plcTableName; // 关联表名 | ||||||
| 			this.alarmForm.equipmentName = equipmentName; | 			this.alarmForm.equipmentName = equipmentName; | ||||||
|   | |||||||
| @@ -38,7 +38,7 @@ | |||||||
| 			@close="cancel" | 			@close="cancel" | ||||||
| 			@cancel="cancel" | 			@cancel="cancel" | ||||||
| 			@confirm="submitForm"> | 			@confirm="submitForm"> | ||||||
| 			<DialogForm v-if="open" ref="form" :dataForm="form" :rows="rows" /> | 			<DialogForm v-if="open" ref="form" v-model="form" :rows="rows" /> | ||||||
| 		</base-dialog> | 		</base-dialog> | ||||||
| 	</div> | 	</div> | ||||||
| </template> | </template> | ||||||
|   | |||||||
							
								
								
									
										94
									
								
								src/views/base/material/add-or-updata.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,94 @@ | |||||||
|  | <!-- | ||||||
|  |  * @Author: zwq | ||||||
|  |  * @Date: 2023-08-01 13:52:10 | ||||||
|  |  * @LastEditors: zwq | ||||||
|  |  * @LastEditTime: 2024-04-10 09:30:06 | ||||||
|  |  * @Description: | ||||||
|  | --> | ||||||
|  | <template> | ||||||
|  | 	<el-form | ||||||
|  | 		:model="dataForm" | ||||||
|  | 		:rules="dataRule" | ||||||
|  | 		ref="dataForm" | ||||||
|  | 		v-if="visible" | ||||||
|  | 		@keyup.enter.native="dataFormSubmit()" | ||||||
|  | 		label-width="100px" | ||||||
|  | 		label-position="top"> | ||||||
|  | 		<el-row :gutter="20"> | ||||||
|  | 			<el-col :span="12"> | ||||||
|  | 				<el-form-item label="原料名称" prop="name"> | ||||||
|  | 					<el-input v-model="dataForm.name" clearable | ||||||
|  | 						placeholder="请输入原料名称" /> | ||||||
|  | 				</el-form-item> | ||||||
|  | 			</el-col> | ||||||
|  | 			<el-col :span="12"> | ||||||
|  | 				<el-form-item label="原料等级" prop="level"> | ||||||
|  | 					<el-input v-model="dataForm.level" clearable | ||||||
|  | 						placeholder="请输入原料等级" /> | ||||||
|  | 				</el-form-item> | ||||||
|  | 			</el-col> | ||||||
|  | 			<el-col :span="12"> | ||||||
|  | 				<el-form-item label="原料编码" prop="code"> | ||||||
|  | 					<el-input v-model="dataForm.code" readonly /> | ||||||
|  | 				</el-form-item> | ||||||
|  | 			</el-col> | ||||||
|  | 			<el-col :span="12"> | ||||||
|  | 				<el-form-item label="单位" prop="unit"> | ||||||
|  | 					<el-select | ||||||
|  | 						v-model="dataForm.unit" | ||||||
|  | 						filterable | ||||||
|  | 						clearable | ||||||
|  | 						:style="{ width: '100%' }" | ||||||
|  | 						placeholder="请选择单位"> | ||||||
|  | 						<el-option | ||||||
|  | 							v-for="item in urlOptions.dictArr.dict0" | ||||||
|  | 							:key="item.id" | ||||||
|  | 							:label="item.label" | ||||||
|  | 							:value="item.value"></el-option> | ||||||
|  | 					</el-select> | ||||||
|  | 				</el-form-item> | ||||||
|  | 			</el-col> | ||||||
|  | 		</el-row> | ||||||
|  | 	</el-form> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import basicAdd from '@/mixins/basic-add'; | ||||||
|  | import { | ||||||
|  | 	createMaterial, | ||||||
|  | 	updateMaterial, | ||||||
|  | 	getMaterial, | ||||||
|  |   getCode | ||||||
|  | } from '@/api/base/material'; | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	mixins: [basicAdd], | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			urlOptions: { | ||||||
|  | 				createURL: createMaterial, | ||||||
|  | 				updateURL: updateMaterial, | ||||||
|  | 				infoURL: getMaterial, | ||||||
|  |         codeURL: getCode, //获取code接口(返回结果为dataForm.code字段) | ||||||
|  |         dictNameList: ['unit_dict'], //数据字典name数组 | ||||||
|  | 			}, | ||||||
|  | 			dataForm: { | ||||||
|  | 				id: undefined, | ||||||
|  | 				code: '', | ||||||
|  | 				name: '', | ||||||
|  | 				unit: '', | ||||||
|  | 				level: '', | ||||||
|  | 			}, | ||||||
|  | 			dataRule: { | ||||||
|  | 				name: [ | ||||||
|  | 					{ required: true, message: '原料不能为空', trigger: 'blur' }, | ||||||
|  | 				], | ||||||
|  | 				code: [{ required: true, message: '编码不能为空', trigger: 'blur' }], | ||||||
|  | 			}, | ||||||
|  | 		}; | ||||||
|  | 	}, | ||||||
|  | 	created() {}, | ||||||
|  | 	methods: { | ||||||
|  | 	}, | ||||||
|  | }; | ||||||
|  | </script> | ||||||
							
								
								
									
										180
									
								
								src/views/base/material/index.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,180 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="app-container"> | ||||||
|  | 		<!-- 搜索工作栏 --> | ||||||
|  | 		<search-bar | ||||||
|  | 			:formConfigs="formConfig" | ||||||
|  | 			ref="searchBarForm" | ||||||
|  | 			@headBtnClick="buttonClick" /> | ||||||
|  |  | ||||||
|  | 		<!-- 列表 --> | ||||||
|  | 		<base-table | ||||||
|  | 			v-loading="dataListLoading" | ||||||
|  | 			:table-props="tableProps" | ||||||
|  | 			:page="listQuery.pageNo" | ||||||
|  | 			:limit="listQuery.pageSize" | ||||||
|  | 			:table-data="tableData"> | ||||||
|  | 			<method-btn | ||||||
|  | 				v-if="tableBtn.length" | ||||||
|  | 				slot="handleBtn" | ||||||
|  | 				:width="90" | ||||||
|  | 				label="操作" | ||||||
|  | 				:method-list="tableBtn" | ||||||
|  | 				@clickBtn="handleClick" /> | ||||||
|  | 		</base-table> | ||||||
|  | 		<pagination | ||||||
|  | 			:limit.sync="listQuery.pageSize" | ||||||
|  | 			:page.sync="listQuery.pageNo" | ||||||
|  | 			:total="listQuery.total" | ||||||
|  | 			@pagination="getDataList" /> | ||||||
|  |  | ||||||
|  | 		<!-- 对话框(添加 / 修改) --> | ||||||
|  | 		<base-dialog | ||||||
|  | 			:dialogTitle="addOrEditTitle" | ||||||
|  | 			:dialogVisible="addOrUpdateVisible" | ||||||
|  | 			@cancel="handleCancel" | ||||||
|  | 			@confirm="handleConfirm" | ||||||
|  | 			:before-close="handleCancel" | ||||||
|  | 			width="40%"> | ||||||
|  | 			<add-or-update | ||||||
|  | 				ref="addOrUpdate" | ||||||
|  | 				@refreshDataList="successSubmit"></add-or-update> | ||||||
|  | 		</base-dialog> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import AddOrUpdate from './add-or-updata'; | ||||||
|  | import basicPage from '@/mixins/basic-page'; | ||||||
|  | import { parseTime } from '@/filter/code-filter'; | ||||||
|  | import { publicFormatter } from "@/utils/dict"; | ||||||
|  | import { | ||||||
|  | 	deleteMaterial, | ||||||
|  | 	getMaterialPage, | ||||||
|  | } from '@/api/base/material'; | ||||||
|  |  | ||||||
|  | const tableProps = [ | ||||||
|  |   { | ||||||
|  |     prop: 'createTime', | ||||||
|  |     label: '添加时间', | ||||||
|  |     filter: parseTime, | ||||||
|  |     minWidth: 150 | ||||||
|  |   }, | ||||||
|  | 	{ | ||||||
|  | 		prop: 'name', | ||||||
|  | 		label: '原料名称', | ||||||
|  | 	}, | ||||||
|  | 	{ | ||||||
|  | 		prop: 'code', | ||||||
|  | 		label: '原料编码', | ||||||
|  | 		width: 180, | ||||||
|  | 	}, | ||||||
|  | 	{ | ||||||
|  | 		prop: 'unit', | ||||||
|  | 		label: '单位', | ||||||
|  | 		filter: publicFormatter('unit_dict'), | ||||||
|  | 	}, | ||||||
|  | ]; | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	mixins: [basicPage], | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			urlOptions: { | ||||||
|  | 				getDataListURL: getMaterialPage, | ||||||
|  | 				deleteURL: deleteMaterial, | ||||||
|  | 			}, | ||||||
|  | 			tableProps, | ||||||
|  | 			tableBtn: [ | ||||||
|  | 				this.$auth.hasPermi(`base:material:update`) | ||||||
|  | 					? { | ||||||
|  | 							type: 'edit', | ||||||
|  | 							btnName: '编辑', | ||||||
|  | 					  } | ||||||
|  | 					: undefined, | ||||||
|  | 				this.$auth.hasPermi(`base:material:delete`) | ||||||
|  | 					? { | ||||||
|  | 							type: 'delete', | ||||||
|  | 							btnName: '删除', | ||||||
|  | 					  } | ||||||
|  | 					: undefined, | ||||||
|  | 			].filter((v) => v), | ||||||
|  | 			tableData: [], | ||||||
|  | 			formConfig: [ | ||||||
|  | 				{ | ||||||
|  |           type: 'input', | ||||||
|  |           label: '原料名称', | ||||||
|  |           placeholder: '原料名称', | ||||||
|  |           param: 'name' | ||||||
|  | 				}, | ||||||
|  | 				{ | ||||||
|  |           type: 'input', | ||||||
|  |           label: '原料编码', | ||||||
|  |           placeholder: '原料编码', | ||||||
|  |           param: 'code' | ||||||
|  | 				}, | ||||||
|  | 				{ | ||||||
|  | 					type: this.$auth.hasPermi('base:material:query') | ||||||
|  | 						? 'button' | ||||||
|  | 						: '', | ||||||
|  | 					btnName: '查询', | ||||||
|  | 					name: 'search', | ||||||
|  | 					color: 'primary', | ||||||
|  | 				}, | ||||||
|  | 				{ | ||||||
|  | 					type: | ||||||
|  | 						this.$auth.hasPermi('base:material:create') && | ||||||
|  | 						this.$auth.hasPermi('base:material:query') | ||||||
|  | 							? 'separate' | ||||||
|  | 							: '', | ||||||
|  | 				}, | ||||||
|  | 				{ | ||||||
|  | 					type: this.$auth.hasPermi('base:material:create') | ||||||
|  | 						? 'button' | ||||||
|  | 						: '', | ||||||
|  | 					btnName: '新增', | ||||||
|  | 					name: 'add', | ||||||
|  | 					color: 'success', | ||||||
|  | 					plain: true, | ||||||
|  | 				}, | ||||||
|  | 			], | ||||||
|  | 		}; | ||||||
|  | 	}, | ||||||
|  | 	components: { | ||||||
|  | 		AddOrUpdate, | ||||||
|  | 	}, | ||||||
|  | 	created() { | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		buttonClick(val) { | ||||||
|  | 			switch (val.btnName) { | ||||||
|  | 				case 'search': | ||||||
|  | 					this.listQuery.pageNo = 1; | ||||||
|  | 					this.listQuery.pageSize = 10; | ||||||
|  | 					this.listQuery.name = val.name; | ||||||
|  | 					this.listQuery.code = val.code; | ||||||
|  | 					this.getDataList(); | ||||||
|  | 					break; | ||||||
|  | 				case 'reset': | ||||||
|  | 					this.$refs.searchBarForm.resetForm(); | ||||||
|  | 					this.listQuery = { | ||||||
|  | 						pageSize: 20, | ||||||
|  | 						pageNo: 1, | ||||||
|  | 						total: 1, | ||||||
|  | 					}; | ||||||
|  | 					this.getDataList(); | ||||||
|  | 					break; | ||||||
|  | 				case 'add': | ||||||
|  | 					this.addOrEditTitle = '新增'; | ||||||
|  | 					this.addOrUpdateVisible = true; | ||||||
|  | 					this.addOrUpdateHandle(); | ||||||
|  | 					break; | ||||||
|  | 				case 'export': | ||||||
|  | 					this.handleExport(); | ||||||
|  | 					break; | ||||||
|  | 				default: | ||||||
|  | 					console.log(val); | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | }; | ||||||
|  | </script> | ||||||
							
								
								
									
										156
									
								
								src/views/base/materialPricing/add-or-updata.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,156 @@ | |||||||
|  | <!-- | ||||||
|  |  * @Author: zwq | ||||||
|  |  * @Date: 2023-08-01 13:52:10 | ||||||
|  |  * @LastEditors: zwq | ||||||
|  |  * @LastEditTime: 2024-04-11 09:05:16 | ||||||
|  |  * @Description: | ||||||
|  | --> | ||||||
|  | <template> | ||||||
|  | 	<el-form | ||||||
|  | 		:model="dataForm" | ||||||
|  | 		:rules="dataRule" | ||||||
|  | 		ref="dataForm" | ||||||
|  | 		v-if="visible" | ||||||
|  | 		@keyup.enter.native="dataFormSubmit()" | ||||||
|  | 		label-width="100px" | ||||||
|  | 		label-position="top"> | ||||||
|  | 		<el-row :gutter="20"> | ||||||
|  | 			<el-col :span="12"> | ||||||
|  | 				<el-form-item label="原料名称" prop="materialId"> | ||||||
|  | 					<el-select | ||||||
|  | 						v-model="dataForm.materialId" | ||||||
|  | 						filterable | ||||||
|  | 						@change="setCode" | ||||||
|  | 						:style="{ width: '100%' }" | ||||||
|  | 						placeholder="请选择原料名称"> | ||||||
|  | 						<el-option | ||||||
|  | 							v-for="item in MaterialList" | ||||||
|  | 							:key="item.id" | ||||||
|  | 							:label="item.name" | ||||||
|  | 							:value="item.id"></el-option> | ||||||
|  | 					</el-select> | ||||||
|  | 				</el-form-item> | ||||||
|  | 			</el-col> | ||||||
|  | 			<el-col :span="12"> | ||||||
|  | 				<el-form-item label="原料编码" prop="code"> | ||||||
|  | 					<el-input v-model="dataForm.code" clearable readonly /> | ||||||
|  | 				</el-form-item> | ||||||
|  | 			</el-col> | ||||||
|  | 			<el-col :span="12"> | ||||||
|  | 				<el-form-item label="生效开始时间" prop="startTime"> | ||||||
|  | 					<el-date-picker | ||||||
|  | 						v-model="dataForm.startTime" | ||||||
|  | 						type="date" | ||||||
|  | 						value-format="timestamp" | ||||||
|  | 						:style="{ width: '100%' }" | ||||||
|  | 						placeholder="选择开始时间"></el-date-picker> | ||||||
|  | 				</el-form-item> | ||||||
|  | 			</el-col> | ||||||
|  | 			<el-col :span="12"> | ||||||
|  | 				<el-form-item label="生效结束时间" prop="endTime"> | ||||||
|  | 					<el-date-picker | ||||||
|  | 						v-model="dataForm.endTime" | ||||||
|  | 						type="date" | ||||||
|  | 						value-format="timestamp" | ||||||
|  | 						:style="{ width: '100%' }" | ||||||
|  | 						placeholder="选择结束时间"></el-date-picker> | ||||||
|  | 				</el-form-item> | ||||||
|  | 			</el-col> | ||||||
|  | 			<el-col :span="12"> | ||||||
|  | 				<el-form-item label="单价" prop="price"> | ||||||
|  | 					<el-input-number | ||||||
|  | 						:min="0" | ||||||
|  | 						style="width: 75%" | ||||||
|  | 						v-model="dataForm.price" | ||||||
|  | 						clearable | ||||||
|  | 						placeholder="请输入允许留存时间" /> | ||||||
|  | 					{{ unit }} | ||||||
|  | 				</el-form-item> | ||||||
|  | 			</el-col> | ||||||
|  | 			<el-col :span="12"> | ||||||
|  | 				<el-form-item label="备注" prop="remark"> | ||||||
|  | 					<el-input | ||||||
|  | 						v-model="dataForm.remark" | ||||||
|  | 						clearable | ||||||
|  | 						placeholder="请输入备注" /> | ||||||
|  | 				</el-form-item> | ||||||
|  | 			</el-col> | ||||||
|  | 		</el-row> | ||||||
|  | 	</el-form> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import basicAdd from '@/mixins/basic-add'; | ||||||
|  | import { | ||||||
|  | 	createMaterialPricing, | ||||||
|  | 	updateMaterialPricing, | ||||||
|  | 	getMaterialPricing, | ||||||
|  | } from '@/api/base/materialPricing'; | ||||||
|  | import { getMaterialPage } from '@/api/base/material'; | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	mixins: [basicAdd], | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			urlOptions: { | ||||||
|  | 				createURL: createMaterialPricing, | ||||||
|  | 				updateURL: updateMaterialPricing, | ||||||
|  | 				infoURL: getMaterialPricing, | ||||||
|  | 				optionArrUrl: [getMaterialPage], //需要获取下拉框的方法数组 | ||||||
|  | 				dictNameList: ['unit_dict'], //数据字典name数组 | ||||||
|  | 			}, | ||||||
|  | 			dataForm: { | ||||||
|  | 				id: null, | ||||||
|  | 				code: '', | ||||||
|  | 				materialId: '', | ||||||
|  | 				price: '', | ||||||
|  | 				startTime: new Date().getTime(), | ||||||
|  | 				endTime: null, | ||||||
|  | 				remark: '', | ||||||
|  | 			}, | ||||||
|  | 			setData: true, | ||||||
|  | 			MaterialList: [], | ||||||
|  | 			unit: '元/吨', | ||||||
|  | 			dataRule: { | ||||||
|  | 				materialId: [ | ||||||
|  | 					{ required: true, message: '原料不能为空', trigger: 'blur' }, | ||||||
|  | 				], | ||||||
|  | 				price: [{ required: true, message: '单价不能为空', trigger: 'blur' }], | ||||||
|  | 				startTime: [ | ||||||
|  | 					{ | ||||||
|  | 						required: true, | ||||||
|  | 						message: '生效开始时间不能为空', | ||||||
|  | 						trigger: 'change', | ||||||
|  | 					}, | ||||||
|  | 				], | ||||||
|  | 			}, | ||||||
|  | 		}; | ||||||
|  | 	}, | ||||||
|  | 	created() {}, | ||||||
|  | 	methods: { | ||||||
|  | 		getArr() { | ||||||
|  | 			getMaterialPage({ pageSize: 100, pageNo: 1 }).then((response) => { | ||||||
|  | 				this.MaterialList = response.data.list; | ||||||
|  | 			}); | ||||||
|  | 		}, | ||||||
|  | 		setDataForm() { | ||||||
|  | 			if (this.MaterialList.length > 0) { | ||||||
|  | 				this.setCode(); | ||||||
|  | 			} else { | ||||||
|  | 				setTimeout(this.setCode(), 1000); | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		setCode() { | ||||||
|  | 			this.MaterialList.forEach((item) => { | ||||||
|  | 				if (item.id === this.dataForm.materialId) { | ||||||
|  | 					this.dataForm.code = item.code; | ||||||
|  | 					this.unit = | ||||||
|  | 						'元/' + | ||||||
|  | 						this.urlOptions.dictArr.dict0.find((d) => d.value === item.unit) | ||||||
|  | 							.label; | ||||||
|  | 				} | ||||||
|  | 			}); | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | }; | ||||||
|  | </script> | ||||||
							
								
								
									
										23
									
								
								src/views/base/materialPricing/connectTime.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,23 @@ | |||||||
|  | <!-- | ||||||
|  |  * @Author: zwq | ||||||
|  |  * @Date: 2023-12-05 13:45:59 | ||||||
|  |  * @LastEditors: zwq | ||||||
|  |  * @LastEditTime: 2024-04-10 15:20:11 | ||||||
|  |  * @Description | ||||||
|  | --> | ||||||
|  | <template> | ||||||
|  | 	<div> | ||||||
|  | 		<span>{{ parseTime(injectData.startTime,'{y}年{m}月{d}日') + '-' + (parseTime(injectData.endTime)?parseTime(injectData.endTime,'{y}年{m}月{d}日'):'永久') }}</span> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  | <script> | ||||||
|  | export default { | ||||||
|  | 	name: '', | ||||||
|  | 	props: { | ||||||
|  | 		injectData: { | ||||||
|  | 			type: Object, | ||||||
|  | 			default: () => ({}), | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | }; | ||||||
|  | </script> | ||||||
							
								
								
									
										182
									
								
								src/views/base/materialPricing/index.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,182 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="app-container"> | ||||||
|  | 		<!-- 搜索工作栏 --> | ||||||
|  | 		<search-bar | ||||||
|  | 			:formConfigs="formConfig" | ||||||
|  | 			ref="searchBarForm" | ||||||
|  | 			@headBtnClick="buttonClick" /> | ||||||
|  |  | ||||||
|  | 		<!-- 列表 --> | ||||||
|  | 		<base-table | ||||||
|  | 			v-loading="dataListLoading" | ||||||
|  | 			:table-props="tableProps" | ||||||
|  | 			:page="listQuery.pageNo" | ||||||
|  | 			:limit="listQuery.pageSize" | ||||||
|  | 			:table-data="tableData"> | ||||||
|  | 			<method-btn | ||||||
|  | 				v-if="tableBtn.length" | ||||||
|  | 				slot="handleBtn" | ||||||
|  | 				:width="90" | ||||||
|  | 				label="操作" | ||||||
|  | 				:method-list="tableBtn" | ||||||
|  | 				@clickBtn="handleClick" /> | ||||||
|  | 		</base-table> | ||||||
|  | 		<pagination | ||||||
|  | 			:limit.sync="listQuery.pageSize" | ||||||
|  | 			:page.sync="listQuery.pageNo" | ||||||
|  | 			:total="listQuery.total" | ||||||
|  | 			@pagination="getDataList" /> | ||||||
|  |  | ||||||
|  | 		<!-- 对话框(添加 / 修改) --> | ||||||
|  | 		<base-dialog | ||||||
|  | 			:dialogTitle="addOrEditTitle" | ||||||
|  | 			:dialogVisible="addOrUpdateVisible" | ||||||
|  | 			@cancel="handleCancel" | ||||||
|  | 			@confirm="handleConfirm" | ||||||
|  | 			:before-close="handleCancel" | ||||||
|  | 			width="40%"> | ||||||
|  | 			<add-or-update | ||||||
|  | 				ref="addOrUpdate" | ||||||
|  | 				@refreshDataList="successSubmit"></add-or-update> | ||||||
|  | 		</base-dialog> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import AddOrUpdate from './add-or-updata'; | ||||||
|  | import connectTime from './connectTime'; | ||||||
|  | import basicPage from '@/mixins/basic-page'; | ||||||
|  | import { parseTime } from '@/filter/code-filter'; | ||||||
|  | import { | ||||||
|  | 	deleteMaterialPricing, | ||||||
|  | 	getMaterialPricingPage, | ||||||
|  | } from '@/api/base/materialPricing'; | ||||||
|  | import { getMaterialPage } from '@/api/base/material'; | ||||||
|  |  | ||||||
|  | const tableProps = [ | ||||||
|  | 	{ | ||||||
|  | 		prop: 'name', | ||||||
|  | 		label: '原料名称', | ||||||
|  | 	}, | ||||||
|  | 	{ | ||||||
|  | 		prop: 'code', | ||||||
|  | 		label: '原料编码', | ||||||
|  | 		width: 180, | ||||||
|  | 	}, | ||||||
|  | 	{ | ||||||
|  | 		prop: 'price', | ||||||
|  | 		label: '单价(元/吨)', | ||||||
|  | 		align: 'right', | ||||||
|  | 	}, | ||||||
|  | 	{ | ||||||
|  | 		prop: 'createTime', | ||||||
|  | 		label: '生效时间', | ||||||
|  | 		width: 235, | ||||||
|  | 		subcomponent: connectTime, | ||||||
|  | 	}, | ||||||
|  | 	{ | ||||||
|  | 		prop: 'remark', | ||||||
|  | 		label: '备注', | ||||||
|  | 	}, | ||||||
|  | ]; | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	mixins: [basicPage], | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			urlOptions: { | ||||||
|  | 				getDataListURL: getMaterialPricingPage, | ||||||
|  | 				deleteURL: deleteMaterialPricing, | ||||||
|  | 			}, | ||||||
|  | 			tableProps, | ||||||
|  | 			tableBtn: [ | ||||||
|  | 				this.$auth.hasPermi(`base:material-pricing:update`) | ||||||
|  | 					? { | ||||||
|  | 							type: 'edit', | ||||||
|  | 							btnName: '编辑', | ||||||
|  | 					  } | ||||||
|  | 					: undefined, | ||||||
|  | 				this.$auth.hasPermi(`base:material-pricing:delete`) | ||||||
|  | 					? { | ||||||
|  | 							type: 'delete', | ||||||
|  | 							btnName: '删除', | ||||||
|  | 					  } | ||||||
|  | 					: undefined, | ||||||
|  | 			].filter((v) => v), | ||||||
|  | 			tableData: [], | ||||||
|  | 			formConfig: [ | ||||||
|  | 				{ | ||||||
|  | 					type: 'select', | ||||||
|  | 					label: '原料名称', | ||||||
|  | 					selectOptions: [], | ||||||
|  | 					param: 'name', | ||||||
|  | 					filterable: true, | ||||||
|  | 				}, | ||||||
|  | 				{ | ||||||
|  | 					type: this.$auth.hasPermi('base:material-pricing:query') | ||||||
|  | 						? 'button' | ||||||
|  | 						: '', | ||||||
|  | 					btnName: '查询', | ||||||
|  | 					name: 'search', | ||||||
|  | 					color: 'primary', | ||||||
|  | 				}, | ||||||
|  | 				{ | ||||||
|  | 					type: | ||||||
|  | 						this.$auth.hasPermi('base:material-pricing:create') && | ||||||
|  | 						this.$auth.hasPermi('base:material-pricing:query') | ||||||
|  | 							? 'separate' | ||||||
|  | 							: '', | ||||||
|  | 				}, | ||||||
|  | 				{ | ||||||
|  | 					type: this.$auth.hasPermi('base:material-pricing:create') | ||||||
|  | 						? 'button' | ||||||
|  | 						: '', | ||||||
|  | 					btnName: '新增', | ||||||
|  | 					name: 'add', | ||||||
|  | 					color: 'success', | ||||||
|  | 					plain: true, | ||||||
|  | 				}, | ||||||
|  | 			], | ||||||
|  | 		}; | ||||||
|  | 	}, | ||||||
|  | 	components: { | ||||||
|  | 		AddOrUpdate, | ||||||
|  | 	}, | ||||||
|  | 	created() { | ||||||
|  | 		getMaterialPage({ pageSize: 100, pageNo: 1 }).then((response) => { | ||||||
|  | 			this.formConfig[0].selectOptions = response.data.list; | ||||||
|  | 		}); | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		buttonClick(val) { | ||||||
|  | 			switch (val.btnName) { | ||||||
|  | 				case 'search': | ||||||
|  | 					this.listQuery.pageNo = 1; | ||||||
|  | 					this.listQuery.pageSize = 10; | ||||||
|  | 					this.listQuery.materialId = val.name; | ||||||
|  | 					this.getDataList(); | ||||||
|  | 					break; | ||||||
|  | 				case 'reset': | ||||||
|  | 					this.$refs.searchBarForm.resetForm(); | ||||||
|  | 					this.listQuery = { | ||||||
|  | 						pageSize: 20, | ||||||
|  | 						pageNo: 1, | ||||||
|  | 						total: 1, | ||||||
|  | 					}; | ||||||
|  | 					this.getDataList(); | ||||||
|  | 					break; | ||||||
|  | 				case 'add': | ||||||
|  | 					this.addOrEditTitle = '新增'; | ||||||
|  | 					this.addOrUpdateVisible = true; | ||||||
|  | 					this.addOrUpdateHandle(); | ||||||
|  | 					break; | ||||||
|  | 				case 'export': | ||||||
|  | 					this.handleExport(); | ||||||
|  | 					break; | ||||||
|  | 				default: | ||||||
|  | 					console.log(val); | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | }; | ||||||
|  | </script> | ||||||
| @@ -299,7 +299,7 @@ export default { | |||||||
|       } |       } | ||||||
|     }) |     }) | ||||||
|     clipboard.on('error', e => { |     clipboard.on('error', e => { | ||||||
|       this.$message.error('代码复制失败') |       this.$message.warning('代码复制失败') | ||||||
|     }) |     }) | ||||||
|   }, |   }, | ||||||
|   created() { |   created() { | ||||||
|   | |||||||
| @@ -42,7 +42,7 @@ export default { | |||||||
|   created() { |   created() { | ||||||
|     this.leaveId = this.id || this.$route.query.id; |     this.leaveId = this.id || this.$route.query.id; | ||||||
|     if (!this.leaveId) { |     if (!this.leaveId) { | ||||||
|       this.$message.error('未传递 id 参数,无法查看 OA 请假信息'); |       this.$message.warning('未传递 id 参数,无法查看 OA 请假信息'); | ||||||
|       return; |       return; | ||||||
|     } |     } | ||||||
|     this.getDetail(); |     this.getDetail(); | ||||||
|   | |||||||
| @@ -167,7 +167,7 @@ export default { | |||||||
|   created() { |   created() { | ||||||
|     this.id = this.$route.query.id; |     this.id = this.$route.query.id; | ||||||
|     if (!this.id) { |     if (!this.id) { | ||||||
|       this.$message.error('未传递 id 参数,无法查看流程信息'); |       this.$message.warning('未传递 id 参数,无法查看流程信息'); | ||||||
|       return; |       return; | ||||||
|     } |     } | ||||||
|     this.getDetail(); |     this.getDetail(); | ||||||
| @@ -185,7 +185,7 @@ export default { | |||||||
|       this.processInstanceLoading = true; |       this.processInstanceLoading = true; | ||||||
|       getProcessInstance(this.id).then(response => { |       getProcessInstance(this.id).then(response => { | ||||||
|         if (!response.data) { |         if (!response.data) { | ||||||
|           this.$message.error('查询不到流程信息!'); |           this.$message.warning('查询不到流程信息!'); | ||||||
|           return; |           return; | ||||||
|         } |         } | ||||||
|         // 设置流程信息 |         // 设置流程信息 | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| <!-- | <!-- | ||||||
|  * @Author: zhp |  * @Author: zhp | ||||||
|  * @Date: 2023-09-13 09:02:25 |  * @Date: 2023-09-13 09:02:25 | ||||||
|  * @LastEditTime: 2023-10-08 15:39:38 |  * @LastEditTime: 2023-10-16 14:56:58 | ||||||
|  * @LastEditors: DY |  * @LastEditors: DY | ||||||
|  * @Description: |  * @Description: | ||||||
| --> | --> | ||||||
|   | |||||||
							
								
								
									
										197
									
								
								src/views/core/analysis/balanceAnalysis/BarChart.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,197 @@ | |||||||
|  | <template> | ||||||
|  | 	<div | ||||||
|  | 		ref="lineChart" | ||||||
|  | 		:id="id" | ||||||
|  | 		:class="className" | ||||||
|  | 		:style="{ height: height, width: width, marginLeft: '10px' }" /> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import * as echarts from 'echarts'; | ||||||
|  | require('echarts/theme/macarons'); // echarts theme | ||||||
|  | import resize from '@/utils/chartMixins/resize'; | ||||||
|  | import { parseTime } from '../../mixins/code-filter'; | ||||||
|  |  | ||||||
|  | const animationDuration = 1000; | ||||||
|  | export default { | ||||||
|  | 	name: 'lineChart', | ||||||
|  | 	mixins: [resize], | ||||||
|  | 	props: { | ||||||
|  | 		id: { | ||||||
|  | 			type: String, | ||||||
|  | 			default: 'chart', | ||||||
|  | 		}, | ||||||
|  | 		className: { | ||||||
|  | 			type: String, | ||||||
|  | 			default: 'chart', | ||||||
|  | 		}, | ||||||
|  | 		title: { | ||||||
|  | 			type: String, | ||||||
|  | 			default: '', | ||||||
|  | 		}, | ||||||
|  | 		width: { | ||||||
|  | 			type: String, | ||||||
|  | 			default: '100%', | ||||||
|  | 		}, | ||||||
|  | 		height: { | ||||||
|  | 			type: String, | ||||||
|  | 			default: '300px', | ||||||
|  | 		}, | ||||||
|  | 		barData: { | ||||||
|  | 			type: Object, | ||||||
|  | 			default: () => {}, | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			chart: null, | ||||||
|  | 		}; | ||||||
|  | 	}, | ||||||
|  | 	mounted() { | ||||||
|  | 		if (!this.chart) { | ||||||
|  | 			this.chart = echarts.init(this.$refs.lineChart); | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.initChart(); | ||||||
|  | 			}); | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	beforeDestroy() { | ||||||
|  | 		if (!this.chart) { | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 		this.chart.dispose(); | ||||||
|  | 		this.chart = null; | ||||||
|  | 	}, | ||||||
|  | 	watch: { | ||||||
|  | 		barData: { | ||||||
|  | 			handler() { | ||||||
|  | 				if (this.chart) { | ||||||
|  | 					this.$nextTick(() => { | ||||||
|  | 						this.initChart(); | ||||||
|  | 					}); | ||||||
|  | 				} else { | ||||||
|  | 					this.$nextTick(() => { | ||||||
|  | 						this.chart = echarts.init(this.$refs.lineChart); | ||||||
|  | 						this.initChart(); | ||||||
|  | 					}); | ||||||
|  | 				} | ||||||
|  | 			}, | ||||||
|  | 			deep: true, | ||||||
|  | 			immediate: true, | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		initChart() { | ||||||
|  | 			const _this = this; | ||||||
|  | 			this.chart.setOption({ | ||||||
|  | 				title: { | ||||||
|  | 					text: this.title | ||||||
|  | 						? '{space|}{tip|}{space|}{value|' + this.title + '}' | ||||||
|  | 						: '', | ||||||
|  | 					textStyle: { | ||||||
|  | 						rich: { | ||||||
|  | 							tip: { | ||||||
|  | 								width: 6, | ||||||
|  | 								height: 6, | ||||||
|  | 								borderRadius: 50, | ||||||
|  | 								backgroundColor: '#288AFF', | ||||||
|  | 							}, | ||||||
|  | 							space: { | ||||||
|  | 								width: 8, | ||||||
|  | 							}, | ||||||
|  | 							value: { | ||||||
|  | 								fontSize: 14, | ||||||
|  | 								color: 'black', | ||||||
|  | 							}, | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 				}, | ||||||
|  | 				color: ['#288AFF', '#8EF0AB', '#FFDC94'], | ||||||
|  | 				tooltip: { | ||||||
|  | 					trigger: 'axis', | ||||||
|  | 					axisPointer: { | ||||||
|  | 						type: 'cross', | ||||||
|  | 						crossStyle: { | ||||||
|  | 							color: '#999', | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 				}, | ||||||
|  | 				legend: { | ||||||
|  | 					data: ['磨边节拍', '钢化节拍', '下片节拍'], | ||||||
|  | 				}, | ||||||
|  | 				grid: { | ||||||
|  | 					containLabel: true, | ||||||
|  | 				}, | ||||||
|  | 				xAxis: { | ||||||
|  | 					type: 'category', | ||||||
|  | 					data: this.barData.edgeCt.map((item) => { | ||||||
|  | 						return parseTime(item.recordTime, '{m}-{d} {h}:{i}'); | ||||||
|  | 					}), | ||||||
|  | 					axisPointer: { | ||||||
|  | 						type: 'shadow', | ||||||
|  | 					}, | ||||||
|  | 				}, | ||||||
|  | 				yAxis: [ | ||||||
|  | 					{ | ||||||
|  | 						type: 'value', | ||||||
|  | 						name: '节拍 pcs/min', | ||||||
|  | 						min: 0, | ||||||
|  | 						axisLabel: { | ||||||
|  | 							formatter: '{value}', | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 				], | ||||||
|  | 				dataZoom: [ | ||||||
|  | 					{ | ||||||
|  | 						type: 'inside', | ||||||
|  | 						start: 0, | ||||||
|  | 						end: 100, | ||||||
|  | 					}, | ||||||
|  | 					{ | ||||||
|  | 						start: 0, | ||||||
|  | 						end: 100, | ||||||
|  | 					}, | ||||||
|  | 				], | ||||||
|  | 				series: [ | ||||||
|  | 					{ | ||||||
|  | 						name: '磨边节拍', | ||||||
|  | 						type: 'line', | ||||||
|  | 						tooltip: { | ||||||
|  | 							valueFormatter: function (value) { | ||||||
|  | 								return value + 'pcs/min'; | ||||||
|  | 							}, | ||||||
|  | 						}, | ||||||
|  | 						data: this.barData.edgeCt.map((item) => { | ||||||
|  | 							return item.ct; | ||||||
|  | 						}), | ||||||
|  | 					}, | ||||||
|  | 					{ | ||||||
|  | 						name: '钢化节拍', | ||||||
|  | 						type: 'line', | ||||||
|  | 						tooltip: { | ||||||
|  | 							valueFormatter: function (value) { | ||||||
|  | 								return value + 'pcs/min'; | ||||||
|  | 							}, | ||||||
|  | 						}, | ||||||
|  | 						data: this.barData.temperCt.map((item) => { | ||||||
|  | 							return item.ct; | ||||||
|  | 						}), | ||||||
|  | 					}, | ||||||
|  | 					{ | ||||||
|  | 						name: '下片节拍', | ||||||
|  | 						type: 'line', | ||||||
|  | 						tooltip: { | ||||||
|  | 							valueFormatter: function (value) { | ||||||
|  | 								return value + 'pcs/min'; | ||||||
|  | 							}, | ||||||
|  | 						}, | ||||||
|  | 						data: this.barData.downCt.map((item) => { | ||||||
|  | 							return item.ct; | ||||||
|  | 						}), | ||||||
|  | 					}, | ||||||
|  | 				], | ||||||
|  | 			}); | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | }; | ||||||
|  | </script> | ||||||
							
								
								
									
										273
									
								
								src/views/core/analysis/balanceAnalysis/eq-detail.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,273 @@ | |||||||
|  | <!-- | ||||||
|  |  * @Author: zwq | ||||||
|  |  * @Date: 2023-08-24 14:47:58 | ||||||
|  |  * @LastEditors: zwq | ||||||
|  |  * @LastEditTime: 2025-01-09 10:04:17 | ||||||
|  |  * @Description: | ||||||
|  | --> | ||||||
|  | <template> | ||||||
|  | 	<div> | ||||||
|  | 		<base-table | ||||||
|  | 			:page="1" | ||||||
|  | 			:limit="999" | ||||||
|  | 			v-loading="dataListLoading" | ||||||
|  | 			:table-props="tableProps" | ||||||
|  | 			max-height="400" | ||||||
|  | 			:table-data="tableData"> | ||||||
|  | 			<method-btn | ||||||
|  | 				v-if="tableData.length" | ||||||
|  | 				slot="handleBtn" | ||||||
|  | 				:width="80" | ||||||
|  | 				label="操作" | ||||||
|  | 				:method-list="tableBtn" | ||||||
|  | 				@clickBtn="handleClick" /> | ||||||
|  | 		</base-table> | ||||||
|  | 		<div v-if="eqChartData.length > 0" style="margin-top: 10px"> | ||||||
|  | 			<search-bar | ||||||
|  | 				:formConfigs="formConfig" | ||||||
|  | 				ref="searchBarForm1" | ||||||
|  | 				@headBtnClick="buttonClick" /> | ||||||
|  | 			<div | ||||||
|  | 				ref="lineChart" | ||||||
|  | 				id="chart" | ||||||
|  | 				:style="{ height: '400px', width: '100%', marginLeft: '10px' }" /> | ||||||
|  | 		</div> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { getNewCTDet, getNewCTCharts } from '@/api/core/analysis/index'; | ||||||
|  | import * as echarts from 'echarts'; | ||||||
|  | require('echarts/theme/macarons'); // echarts theme | ||||||
|  | import resize from '@/utils/chartMixins/resize'; | ||||||
|  | import { parseTime } from '../../mixins/code-filter'; | ||||||
|  |  | ||||||
|  | const tableProps = [ | ||||||
|  | 	{ | ||||||
|  | 		prop: 'equipmentName', | ||||||
|  | 		label: '设备', | ||||||
|  | 	}, | ||||||
|  | 	{ | ||||||
|  | 		prop: 'size', | ||||||
|  | 		label: '规格', | ||||||
|  | 		showOverflowtooltip: true, | ||||||
|  | 	}, | ||||||
|  | 	{ | ||||||
|  | 		prop: 'process', | ||||||
|  | 		label: '产品工艺', | ||||||
|  | 	}, | ||||||
|  | 	{ | ||||||
|  | 		prop: 'standardCt', | ||||||
|  | 		label: '标准节拍pcs/min', | ||||||
|  | 	}, | ||||||
|  | 	{ | ||||||
|  | 		prop: 'ct', | ||||||
|  | 		label: '当前节拍pcs/min', | ||||||
|  | 	}, | ||||||
|  | ]; | ||||||
|  | export default { | ||||||
|  | 	mixins: [resize], | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			tableProps, | ||||||
|  | 			tableData: [], | ||||||
|  | 			tableBtn: [ | ||||||
|  | 				{ | ||||||
|  | 					type: 'eqChart', | ||||||
|  | 					btnName: '趋势图', | ||||||
|  | 				}, | ||||||
|  | 			].filter((v) => v), | ||||||
|  | 			dataListLoading: false, | ||||||
|  | 			time: {}, | ||||||
|  | 			eqChartData: [], | ||||||
|  | 			eqName: null, | ||||||
|  | 			equipmentId: null, | ||||||
|  | 			chart: null, | ||||||
|  | 			formConfig: [ | ||||||
|  | 				{ | ||||||
|  | 					type: 'datePicker', | ||||||
|  | 					label: '时间范围', | ||||||
|  | 					dateType: 'datetimerange', | ||||||
|  | 					format: 'yyyy-MM-dd HH:mm:ss', | ||||||
|  | 					valueFormat: 'timestamp', | ||||||
|  | 					rangeSeparator: '-', | ||||||
|  | 					startPlaceholder: '开始时间', | ||||||
|  | 					endPlaceholder: '结束时间', | ||||||
|  | 					defaultTime: ['00:00:00', '23:59:59'], | ||||||
|  | 					param: 'timeVal', | ||||||
|  | 					width: 350, | ||||||
|  | 					clearable: false, | ||||||
|  | 				}, | ||||||
|  | 				{ | ||||||
|  | 					type: 'button', | ||||||
|  | 					btnName: '查询', | ||||||
|  | 					name: 'search', | ||||||
|  | 					color: 'primary', | ||||||
|  | 				}, | ||||||
|  | 			], | ||||||
|  | 		}; | ||||||
|  | 	}, | ||||||
|  | 	components: {}, | ||||||
|  | 	created() {}, | ||||||
|  | 	mounted() {}, | ||||||
|  | 	beforeDestroy() { | ||||||
|  | 		if (!this.chart) { | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 		this.chart.dispose(); | ||||||
|  | 		this.chart = null; | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		// 获取数据列表 | ||||||
|  | 		init(lineId, startTime, endTime) { | ||||||
|  | 			this.eqChartData = []; | ||||||
|  | 			this.time.startTime = startTime; | ||||||
|  | 			this.time.endTime = endTime; | ||||||
|  | 			this.dataListLoading = true; | ||||||
|  | 			getNewCTDet(lineId).then((response) => { | ||||||
|  | 				this.tableData = response.data; | ||||||
|  | 				this.dataListLoading = false; | ||||||
|  | 			}); | ||||||
|  | 		}, | ||||||
|  | 		handleClick(val) { | ||||||
|  | 			const data = { | ||||||
|  | 				...this.time, | ||||||
|  | 				equipmentId: val.data.equipmentId, | ||||||
|  | 			}; | ||||||
|  | 			this.eqName = val.data.equipmentName; | ||||||
|  | 			this.equipmentId = val.data.equipmentId; | ||||||
|  | 			getNewCTCharts(data).then((response) => { | ||||||
|  | 				this.eqChartData = response.data; | ||||||
|  | 				this.$nextTick(() => { | ||||||
|  | 					this.$refs.searchBarForm1.formInline.timeVal = [ | ||||||
|  | 						this.time.startTime, | ||||||
|  | 						this.time.endTime, | ||||||
|  | 					]; | ||||||
|  | 					this.initChart(); | ||||||
|  | 				}); | ||||||
|  | 			}); | ||||||
|  | 		}, | ||||||
|  | 		buttonClick(val) { | ||||||
|  | 			switch (val.btnName) { | ||||||
|  | 				case 'search': | ||||||
|  | 					this.time.startTime = val.timeVal ? val.timeVal[0] : undefined; | ||||||
|  | 					this.time.endTime = val.timeVal ? val.timeVal[1] : undefined; | ||||||
|  | 					const data = { | ||||||
|  | 						...this.time, | ||||||
|  | 						equipmentId: this.equipmentId, | ||||||
|  | 					}; | ||||||
|  | 					getNewCTCharts(data).then((response) => { | ||||||
|  | 						this.eqChartData = response.data; | ||||||
|  | 						this.$nextTick(() => { | ||||||
|  | 							this.initChart(); | ||||||
|  | 						}); | ||||||
|  | 					}); | ||||||
|  | 					break; | ||||||
|  | 				default: | ||||||
|  | 					console.log(val); | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		initChart() { | ||||||
|  | 			this.chart = echarts.init(this.$refs.lineChart); | ||||||
|  | 			const _this = this; | ||||||
|  | 			this.chart.setOption({ | ||||||
|  | 				title: { | ||||||
|  | 					text: this.eqName | ||||||
|  | 						? '{space|}{tip|}{space|}{value|' + this.eqName + ' 节拍趋势图' + '}' | ||||||
|  | 						: '', | ||||||
|  | 					textStyle: { | ||||||
|  | 						rich: { | ||||||
|  | 							tip: { | ||||||
|  | 								width: 6, | ||||||
|  | 								height: 6, | ||||||
|  | 								borderRadius: 50, | ||||||
|  | 								backgroundColor: '#288AFF', | ||||||
|  | 							}, | ||||||
|  | 							space: { | ||||||
|  | 								width: 8, | ||||||
|  | 							}, | ||||||
|  | 							value: { | ||||||
|  | 								fontSize: 14, | ||||||
|  | 								color: 'black', | ||||||
|  | 							}, | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 				}, | ||||||
|  | 				color: ['#288AFF', '#8EF0AB', '#FFDC94'], | ||||||
|  | 				tooltip: { | ||||||
|  | 					trigger: 'axis', | ||||||
|  | 					axisPointer: { | ||||||
|  | 						type: 'cross', | ||||||
|  | 						crossStyle: { | ||||||
|  | 							color: '#999', | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 				}, | ||||||
|  | 				legend: { | ||||||
|  | 					data: ['当前节拍', '标准节拍'], | ||||||
|  | 				}, | ||||||
|  | 				grid: { | ||||||
|  | 					containLabel: true, | ||||||
|  | 				}, | ||||||
|  | 				xAxis: { | ||||||
|  | 					type: 'category', | ||||||
|  | 					data: this.eqChartData[0].ct.map((item) => { | ||||||
|  | 						return parseTime(item.recordTime, '{m}-{d} {h}:{i}'); | ||||||
|  | 					}), | ||||||
|  | 					axisPointer: { | ||||||
|  | 						type: 'shadow', | ||||||
|  | 					}, | ||||||
|  | 				}, | ||||||
|  | 				yAxis: [ | ||||||
|  | 					{ | ||||||
|  | 						type: 'value', | ||||||
|  | 						name: '节拍', | ||||||
|  | 						min: 0, | ||||||
|  | 						interval: 20, | ||||||
|  | 						axisLabel: { | ||||||
|  | 							formatter: '{value} pcs/min', | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 				], | ||||||
|  | 				dataZoom: [ | ||||||
|  | 					{ | ||||||
|  | 						type: 'inside', | ||||||
|  | 						start: 0, | ||||||
|  | 						end: 100, | ||||||
|  | 					}, | ||||||
|  | 					{ | ||||||
|  | 						start: 0, | ||||||
|  | 						end: 100, | ||||||
|  | 					}, | ||||||
|  | 				], | ||||||
|  | 				series: [ | ||||||
|  | 					{ | ||||||
|  | 						name: '标准节拍', | ||||||
|  | 						type: 'line', | ||||||
|  | 						tooltip: { | ||||||
|  | 							valueFormatter: function (value) { | ||||||
|  | 								return value + 'pcs/min'; | ||||||
|  | 							}, | ||||||
|  | 						}, | ||||||
|  | 						data: this.eqChartData[0].ct.map((item) => { | ||||||
|  | 							return item.standardCt; | ||||||
|  | 						}), | ||||||
|  | 					}, | ||||||
|  | 					{ | ||||||
|  | 						name: '当前节拍', | ||||||
|  | 						type: 'line', | ||||||
|  | 						tooltip: { | ||||||
|  | 							valueFormatter: function (value) { | ||||||
|  | 								return value + 'pcs/min'; | ||||||
|  | 							}, | ||||||
|  | 						}, | ||||||
|  | 						data: this.eqChartData[0].ct.map((item) => { | ||||||
|  | 							return item.ct; | ||||||
|  | 						}), | ||||||
|  | 					}, | ||||||
|  | 				], | ||||||
|  | 			}); | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | }; | ||||||
|  | </script> | ||||||
							
								
								
									
										296
									
								
								src/views/core/analysis/balanceAnalysis/index-old.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,296 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="app-container"> | ||||||
|  | 		<search-bar | ||||||
|  | 			:formConfigs="formConfig" | ||||||
|  | 			ref="searchBarForm" | ||||||
|  | 			@headBtnClick="buttonClick" /> | ||||||
|  | 		<div v-if="tableData.length"> | ||||||
|  | 			<base-table | ||||||
|  | 				v-loading="dataListLoading" | ||||||
|  | 				:span-method="mergeColumnHandler" | ||||||
|  | 				:max-height="tableH" | ||||||
|  | 				:table-props="tableProps" | ||||||
|  | 				:table-data="tableData" /> | ||||||
|  | 			<SearchBar :formConfigs="[{ label: '产线平衡分析图', type: 'title' }]" /> | ||||||
|  | 			<balance-chart ref="lineChart" /> | ||||||
|  | 		</div> | ||||||
|  | 		<div v-else class="no-data-bg"></div> | ||||||
|  | 		<!-- <pagination | ||||||
|  | 			:limit.sync="listQuery.pageSize" | ||||||
|  | 			:page.sync="listQuery.pageNo" | ||||||
|  | 			:total="listQuery.total" | ||||||
|  | 			@pagination="getDataList" /> --> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | // import basicPage from '../../mixins/basic-page'; | ||||||
|  | import { parseTime } from '../../mixins/code-filter'; | ||||||
|  | import { getCT } from '@/api/core/analysis/index'; | ||||||
|  | import { getProductionLinePage } from '@/api/core/base/productionLine'; | ||||||
|  | import BalanceChart from '../balanceChart'; | ||||||
|  | import { time } from 'echarts'; | ||||||
|  | import tableHeightMixin from '@/mixins/lb/tableHeightMixin'; | ||||||
|  | // import { getWorkshopSectionPage } from '@/api/core/base/workshopSection'; | ||||||
|  |  | ||||||
|  | // const tableProps = [ | ||||||
|  | // 	// { | ||||||
|  | //   //   prop: 'lineName', | ||||||
|  | // 	// 	label: '产线', | ||||||
|  | // 	// 	align: 'center', | ||||||
|  | // 	// }, | ||||||
|  | //   // { | ||||||
|  | //   //   prop: 'sum', | ||||||
|  | //   //   label: '合计', | ||||||
|  | //   //   align: 'center', | ||||||
|  | //   // }, | ||||||
|  | //   // { | ||||||
|  | //   //   prop: 'dynamicValue', | ||||||
|  | //   //   label: 'dynamicName', | ||||||
|  | //   //   align: 'center', | ||||||
|  | //   //   children:[ | ||||||
|  |  | ||||||
|  | //   //   ] | ||||||
|  | //   // } | ||||||
|  | // ]; | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	components: { | ||||||
|  | 		BalanceChart, | ||||||
|  | 	}, | ||||||
|  | 	mixins: [tableHeightMixin], | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			urlOptions: { | ||||||
|  | 				getDataListURL: getCT, | ||||||
|  | 			}, | ||||||
|  | 			tableProps: [], | ||||||
|  | 			dataListLoading: false, | ||||||
|  | 			tableData: [], | ||||||
|  | 			listQuery: { | ||||||
|  | 				// time: '' | ||||||
|  | 				endTime: undefined, | ||||||
|  | 				lineId: undefined, | ||||||
|  | 				startTime: undefined, | ||||||
|  | 			}, | ||||||
|  | 			timeList: [], | ||||||
|  | 			spanArr: [], | ||||||
|  | 			xData: [], | ||||||
|  | 			yData: [], | ||||||
|  | 			optionArrUrl: [getProductionLinePage], | ||||||
|  | 			formConfig: [ | ||||||
|  | 				{ | ||||||
|  | 					type: 'select', | ||||||
|  | 					label: '产线', | ||||||
|  | 					selectOptions: [], | ||||||
|  | 					param: 'lineIds', | ||||||
|  | 					defaultSelect: '', | ||||||
|  | 					multiple: false, | ||||||
|  | 					filterable: true, | ||||||
|  | 				}, | ||||||
|  | 				{ | ||||||
|  | 					type: 'datePicker', | ||||||
|  | 					label: '时间', | ||||||
|  | 					dateType: 'datetimerange', | ||||||
|  | 					format: 'yyyy-MM-dd', | ||||||
|  | 					valueFormat: 'yyyy-MM-dd HH:mm:ss', | ||||||
|  | 					rangeSeparator: '-', | ||||||
|  | 					startPlaceholder: '开始时间', | ||||||
|  | 					endPlaceholder: '结束时间', | ||||||
|  | 					width: 350, | ||||||
|  | 					param: 'time', | ||||||
|  | 				}, | ||||||
|  | 				{ | ||||||
|  | 					type: 'button', | ||||||
|  | 					btnName: '查询', | ||||||
|  | 					name: 'search', | ||||||
|  | 					color: 'primary', | ||||||
|  | 				}, | ||||||
|  | 			], | ||||||
|  | 		}; | ||||||
|  | 	}, | ||||||
|  | 	created() { | ||||||
|  | 		this.getArr(); | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		getArr() { | ||||||
|  | 			const params = { | ||||||
|  | 				page: 1, | ||||||
|  | 				limit: 500, | ||||||
|  | 			}; | ||||||
|  | 			this.optionArrUrl.forEach((item, index) => { | ||||||
|  | 				item(params).then((response) => { | ||||||
|  | 					this.formConfig[index].selectOptions = response.data.list; | ||||||
|  | 				}); | ||||||
|  | 			}); | ||||||
|  | 		}, | ||||||
|  | 		setRowSpan(arr) { | ||||||
|  | 			let count = 0; | ||||||
|  | 			arr.forEach((item, index) => { | ||||||
|  | 				if (index === 0) { | ||||||
|  | 					this.spanArr.push(1); | ||||||
|  | 				} else { | ||||||
|  | 					if (item === arr[index - 1]) { | ||||||
|  | 						this.spanArr[count] += 1; | ||||||
|  | 						this.spanArr.push(0); | ||||||
|  | 					} else { | ||||||
|  | 						count = index; | ||||||
|  | 						this.spanArr.push(1); | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 			}); | ||||||
|  | 		}, | ||||||
|  | 		/** 合并table列的规则 */ | ||||||
|  | 		mergeColumnHandler({ row, column, rowIndex, columnIndex }) { | ||||||
|  | 			if (columnIndex == 0) { | ||||||
|  | 				if (this.spanArr[rowIndex]) { | ||||||
|  | 					return [ | ||||||
|  | 						this.spanArr[rowIndex], // row span | ||||||
|  | 						1, // col span | ||||||
|  | 					]; | ||||||
|  | 				} else { | ||||||
|  | 					return [0, 0]; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		getData() { | ||||||
|  | 			// this.listQuery.lineId = '1672847052717821953' | ||||||
|  | 			// this.listQuery.startTime = '1693497600000'; | ||||||
|  | 			// this.listQuery.endTime = '1693843200000'; | ||||||
|  | 			this.urlOptions.getDataListURL(this.listQuery).then((res) => { | ||||||
|  | 				console.log(res); | ||||||
|  | 				let arr = [ | ||||||
|  | 					{ | ||||||
|  | 						prop: 'sectionName', | ||||||
|  | 						label: '工段', | ||||||
|  | 						align: 'center', | ||||||
|  | 					}, | ||||||
|  | 					{ | ||||||
|  | 						prop: 'equName', | ||||||
|  | 						label: '设备', | ||||||
|  | 						align: 'center', | ||||||
|  |             width: 150 | ||||||
|  | 					}, | ||||||
|  | 				]; | ||||||
|  | 				let sectionArr = []; | ||||||
|  | 				res.data.data.forEach((ele, index) => { | ||||||
|  | 					let tempData = []; | ||||||
|  | 					let ggData = []; | ||||||
|  | 					let sbluData = []; | ||||||
|  | 					let sbsjData = []; | ||||||
|  | 					let cxluData = []; | ||||||
|  | 					let cxsjData = []; | ||||||
|  | 					ele.data.forEach((item, index) => { | ||||||
|  | 						item.children.forEach((params) => { | ||||||
|  | 							if (params.dynamicName === '生产规格') { | ||||||
|  | 								tempData[item.dynamicName + '_gg'] = params.dynamicValue; | ||||||
|  | 								ggData[index] = params.dynamicValue; | ||||||
|  | 							} else if (params.dynamicName === '设备理论速度') { | ||||||
|  | 								tempData[item.dynamicName + '_sblu'] = params.dynamicValue; | ||||||
|  | 								sbluData[index] = params.dynamicValue; | ||||||
|  | 							} else if (params.dynamicName === '设备实际速度') { | ||||||
|  | 								tempData[item.dynamicName + '_sbsj'] = params.dynamicValue; | ||||||
|  | 								sbsjData[index] = params.dynamicValue; | ||||||
|  | 							} else if (params.dynamicName === '产线理论速度') { | ||||||
|  | 								tempData[item.dynamicName + '_cxlu'] = params.dynamicValue; | ||||||
|  | 								cxluData[index] = params.dynamicValue; | ||||||
|  | 							} else if(params.dynamicName === '产线实际速度') { | ||||||
|  | 								tempData[item.dynamicName + '_cxsj'] = params.dynamicValue; | ||||||
|  | 								cxsjData[index] = params.dynamicValue; | ||||||
|  | 							} | ||||||
|  | 						}); | ||||||
|  | 					}); | ||||||
|  | 					const equipment = { | ||||||
|  | 						name: ele.equName, | ||||||
|  | 						ggData: ggData, | ||||||
|  | 						sbluData: sbluData, | ||||||
|  | 						sbsjData: sbsjData, | ||||||
|  | 						cxluData: cxluData, | ||||||
|  | 						cxsjData: cxsjData, | ||||||
|  | 					}; | ||||||
|  | 					tempData['equName'] = ele.equName; | ||||||
|  | 					tempData['sectionName'] = ele.sectionName; | ||||||
|  | 					this.tableData.push(tempData); | ||||||
|  | 					const { sectionName } = tempData; | ||||||
|  | 					sectionArr.push(sectionName); | ||||||
|  | 					this.yData.push(equipment); | ||||||
|  | 				}); | ||||||
|  | 				this.setRowSpan(sectionArr); | ||||||
|  | 				res.data.nameData.forEach((item) => { | ||||||
|  | 					this.timeList.push(item.name); | ||||||
|  | 				}); | ||||||
|  | 				const timeArray = Array.from(new Set(this.timeList)); | ||||||
|  |         console.log(timeArray) | ||||||
|  | 				for (const times of timeArray) { | ||||||
|  | 					if (times !== '生产规格' && times !== '设备理论速度' && times !== '设备实际速度' | ||||||
|  |              && times !== '产线理论速度' && times !== '产线实际速度' | ||||||
|  |           ) { | ||||||
|  | 						const subprop = { | ||||||
|  | 							label: times, | ||||||
|  | 							align: 'center', | ||||||
|  | 							children: [ | ||||||
|  | 								{ prop: times + '_gg', label: '生产规格', align: 'center' }, | ||||||
|  | 								{ prop: times + '_sblu', label: '设备理论速度[片/min]', align: 'center' }, | ||||||
|  | 								{ prop: times + '_sbsj', label: '设备实际速度[片/min]', align: 'center' }, | ||||||
|  | 								{ prop: times + '_cxlu', label: '产线理论速度[片/min]', align: 'center' }, | ||||||
|  | 								{ prop: times + '_cxsj', label: '产线实际速度[片/min]', align: 'center' }, | ||||||
|  | 							], | ||||||
|  | 						}; | ||||||
|  | 						arr.push(subprop); | ||||||
|  | 						this.xData.push(times); | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 				this.tableProps = arr; | ||||||
|  |  | ||||||
|  |         console.log(this.$refs) | ||||||
|  |         this.$nextTick(()=>{ | ||||||
|  |           this.$refs.lineChart.initChart(this.xData, this.yData); | ||||||
|  |         }) | ||||||
|  | 				// this.total = response.data.total; | ||||||
|  | 				// this.dataListLoading = false; | ||||||
|  | 			}); | ||||||
|  | 		}, | ||||||
|  | 		buttonClick(val) { | ||||||
|  | 			// console.log(val) | ||||||
|  | 			switch (val.btnName) { | ||||||
|  | 				case 'search': | ||||||
|  | 					// this.listQuery.pageNo = 1; | ||||||
|  | 					// this.listQuery.pageSize = 10; | ||||||
|  | 					this.listQuery.lineId = val.lineIds; | ||||||
|  | 					this.listQuery.startTime = val.time | ||||||
|  | 						? String(new Date(val.time[0]).getTime()) | ||||||
|  | 						: undefined; | ||||||
|  | 					this.listQuery.endTime = val.time | ||||||
|  | 						? String(new Date(val.time[1]).getTime()) | ||||||
|  | 						: undefined; | ||||||
|  | 					if (val.time && val.lineIds) { | ||||||
|  | 						this.tableData = []; | ||||||
|  | 						this.xData = []; | ||||||
|  | 						this.yData = []; | ||||||
|  | 						this.tableProps = []; | ||||||
|  | 						this.spanArr = []; | ||||||
|  | 						this.timeList = []; | ||||||
|  | 						this.getData(); | ||||||
|  | 					} else { | ||||||
|  | 						this.$message({ | ||||||
|  | 							message: '请选择产线和时间', | ||||||
|  | 							type: 'warning', | ||||||
|  | 						}); | ||||||
|  | 					} | ||||||
|  | 					break; | ||||||
|  | 				case 'reset': | ||||||
|  | 					this.$refs.searchBarForm.resetForm(); | ||||||
|  | 					this.listQuery = { | ||||||
|  | 						pageSize: 10, | ||||||
|  | 						pageNo: 1, | ||||||
|  | 						total: 1, | ||||||
|  | 					}; | ||||||
|  | 					this.getDataList(); | ||||||
|  | 					break; | ||||||
|  | 				default: | ||||||
|  | 					console.log(val); | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | }; | ||||||
|  | </script> | ||||||
| @@ -1,255 +1,302 @@ | |||||||
|  | <!-- | ||||||
|  |  * @Author: Do not edit | ||||||
|  |  * @Date: 2023-08-29 14:59:29 | ||||||
|  |  * @LastEditTime: 2025-01-09 10:27:53 | ||||||
|  |  * @LastEditors: zwq | ||||||
|  |  * @Description: | ||||||
|  | --> | ||||||
| <template> | <template> | ||||||
| 	<div class="app-container"> | 	<div class="app-container"> | ||||||
|     <search-bar :formConfigs="formConfig" ref="searchBarForm" @headBtnClick="buttonClick" /> | 		<search-bar | ||||||
|     <base-table v-loading="dataListLoading" :span-method="mergeColumnHandler" :table-props="tableProps" :table-data="tableData" /> | 			:formConfigs="formConfig" | ||||||
|     <balance-chart ref="lineChart" /> | 			ref="searchBarForm" | ||||||
|     <!-- <pagination | 			@select-changed="handleSearchBarChanged" | ||||||
| 			:limit.sync="listQuery.pageSize" | 			@headBtnClick="buttonClick" /> | ||||||
| 			:page.sync="listQuery.pageNo" | 		<div v-if="showData.length"> | ||||||
| 			:total="listQuery.total" | 			<base-table | ||||||
| 			@pagination="getDataList" /> --> | 				class="right-aside" | ||||||
|  | 				v-loading="dataListLoading" | ||||||
|  | 				:table-props="tableProps" | ||||||
|  | 				:page="1" | ||||||
|  | 				:limit="999" | ||||||
|  | 				:table-data="showData"> | ||||||
|  | 				<method-btn | ||||||
|  | 					v-if="showData.length" | ||||||
|  | 					slot="handleBtn" | ||||||
|  | 					:width="80" | ||||||
|  | 					label="操作" | ||||||
|  | 					:method-list="tableBtn" | ||||||
|  | 					@clickBtn="handleClick" /> | ||||||
|  | 			</base-table> | ||||||
|  | 			<barChart | ||||||
|  | 				v-for="item in chartData" | ||||||
|  | 				:key="item.name + 'echart'" | ||||||
|  | 				style="margin-top: 50px" | ||||||
|  | 				height="600px" | ||||||
|  | 				:id="item.name + 'echart'" | ||||||
|  | 				:title="item.name + ' 节拍趋势图'" | ||||||
|  | 				:bar-data="item" /> | ||||||
|  | 		</div> | ||||||
|  | 		<div v-else class="no-data-bg"></div> | ||||||
|  | 		<base-dialog | ||||||
|  | 			:dialogTitle="addOrEditTitle" | ||||||
|  | 			:dialogVisible="addOrUpdateVisible" | ||||||
|  | 			@cancel="handleCancel" | ||||||
|  | 			@confirm="handleConfirm" | ||||||
|  | 			:before-close="handleCancel" | ||||||
|  | 			close-on-click-modal | ||||||
|  |       top="0" | ||||||
|  | 			width="50%"> | ||||||
|  | 			<eq-detail ref="eqDetail" /> | ||||||
|  | 			<slot name="footer"> | ||||||
|  | 				<el-row slot="footer" type="flex" justify="end"> | ||||||
|  | 					<el-col :span="24"> | ||||||
|  | 						<el-button size="small" class="btnTextStyle" @click="handleCancel"> | ||||||
|  | 							取消 | ||||||
|  | 						</el-button> | ||||||
|  | 					</el-col> | ||||||
|  | 				</el-row> | ||||||
|  | 			</slot> | ||||||
|  | 		</base-dialog> | ||||||
| 	</div> | 	</div> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
| <script> | <script> | ||||||
| // import basicPage from '../../mixins/basic-page'; | import eqDetail from './eq-detail'; | ||||||
| import { parseTime } from '../../mixins/code-filter'; | import { parseTime } from '../../mixins/code-filter'; | ||||||
| import { getCT } from '@/api/core/analysis/index'; | import { getPdList } from '@/api/core/monitoring/auto'; | ||||||
| import { getProductionLinePage } from '@/api/core/base/productionLine'; | import { getNewCTNow, getNewCTCharts } from '@/api/core/analysis/index'; | ||||||
| import BalanceChart from '../balanceChart' | import { getFactoryPage } from '@/api/core/base/factory'; | ||||||
| import { time } from 'echarts'; | // import codeFilter from '../../mixins/code-filter' | ||||||
| // import { getWorkshopSectionPage } from '@/api/core/base/workshopSection'; | import * as XLSX from 'xlsx'; | ||||||
|  | import FileSaver from 'file-saver'; | ||||||
|  | import barChart from './BarChart.vue'; | ||||||
|  |  | ||||||
| // const tableProps = [ | const tableProps = [ | ||||||
| // 	// { | 	{ | ||||||
| //   //   prop: 'lineName', | 		prop: 'factoryName', | ||||||
| // 	// 	label: '产线', | 		label: '工厂', | ||||||
| // 	// 	align: 'center', | 	}, | ||||||
| // 	// }, | 	{ | ||||||
| //   // { | 		prop: 'lineName', | ||||||
| //   //   prop: 'sum', | 		label: '产线', | ||||||
| //   //   label: '合计', | 	}, | ||||||
| //   //   align: 'center', | 	{ | ||||||
| //   // }, | 		prop: 'size', | ||||||
| //   // { | 		label: '规格', | ||||||
| //   //   prop: 'dynamicValue', | 		showOverflowtooltip: true, | ||||||
| //   //   label: 'dynamicName', | 	}, | ||||||
| //   //   align: 'center', | 	{ | ||||||
| //   //   children:[ | 		prop: 'process', | ||||||
|  | 		label: '产品工艺', | ||||||
| //   //   ] | 	}, | ||||||
| //   // } | 	{ | ||||||
| // ]; | 		prop: 'edgeCt', | ||||||
|  | 		label: '磨边当前节拍pcs/min', | ||||||
|  | 	}, | ||||||
|  | 	{ | ||||||
|  | 		prop: 'temperCt', | ||||||
|  | 		label: '钢化当前节拍pcs/min', | ||||||
|  | 	}, | ||||||
|  | 	{ | ||||||
|  | 		prop: 'downCt', | ||||||
|  | 		label: '下片当前节拍pcs/min', | ||||||
|  | 	}, | ||||||
|  | ]; | ||||||
|  |  | ||||||
| export default { | export default { | ||||||
| 	components: { | 	components: { | ||||||
|     BalanceChart | 		barChart, | ||||||
|  | 		eqDetail, | ||||||
| 	}, | 	}, | ||||||
|   // mixins: [basicPage], |  | ||||||
| 	data() { | 	data() { | ||||||
| 		return { | 		return { | ||||||
| 			urlOptions: { | 			urlOptions: { | ||||||
|         getDataListURL: getCT, | 				getDataListURL: getNewCTNow, | ||||||
| 			}, | 			}, | ||||||
|       tableProps: [], |  | ||||||
|       dataListLoading: false, |  | ||||||
|       tableData: [], |  | ||||||
| 			listQuery: { | 			listQuery: { | ||||||
|         // time: '' | 				lineId: [], | ||||||
|         endTime: undefined, |  | ||||||
|         lineId:undefined, |  | ||||||
|         startTime:undefined |  | ||||||
| 			}, | 			}, | ||||||
|       timeList: [], | 			fileName: '', | ||||||
|       spanArr: [],  | 			dataListLoading: false, | ||||||
|       xData: [], | 			tableProps, | ||||||
|       yData: [], | 			tableBtn: [ | ||||||
|       optionArrUrl: [getProductionLinePage], | 				{ | ||||||
|  | 					type: 'eq', | ||||||
|  | 					btnName: '详情', | ||||||
|  | 				}, | ||||||
|  | 			].filter((v) => v), | ||||||
|  | 			showData: [], | ||||||
|  | 			tableData: [], | ||||||
|  | 			chartData: [], | ||||||
| 			formConfig: [ | 			formConfig: [ | ||||||
|  | 				{ | ||||||
|  | 					type: 'select', | ||||||
|  | 					label: '工厂', | ||||||
|  | 					selectOptions: [], | ||||||
|  | 					param: 'factoryId', | ||||||
|  | 					onchange: true, | ||||||
|  | 				}, | ||||||
| 				{ | 				{ | ||||||
| 					type: 'select', | 					type: 'select', | ||||||
| 					label: '产线', | 					label: '产线', | ||||||
| 					selectOptions: [], | 					selectOptions: [], | ||||||
|           param: 'lineIds', | 					param: 'lineId', | ||||||
|           defaultSelect: '', | 					multiple: true, | ||||||
|           multiple: false, |  | ||||||
|           filterable: true, |  | ||||||
| 				}, | 				}, | ||||||
| 				{ | 				{ | ||||||
| 					type: 'datePicker', | 					type: 'datePicker', | ||||||
|           label: '时间', | 					label: '时间范围', | ||||||
| 					dateType: 'datetimerange', | 					dateType: 'datetimerange', | ||||||
|           format: 'yyyy-MM-dd', | 					format: 'yyyy-MM-dd HH:mm:ss', | ||||||
|           valueFormat: 'yyyy-MM-dd HH:mm:ss', | 					valueFormat: 'timestamp', | ||||||
| 					rangeSeparator: '-', | 					rangeSeparator: '-', | ||||||
| 					startPlaceholder: '开始时间', | 					startPlaceholder: '开始时间', | ||||||
| 					endPlaceholder: '结束时间', | 					endPlaceholder: '结束时间', | ||||||
|  | 					defaultTime: ['00:00:00', '23:59:59'], | ||||||
|  | 					param: 'timeVal', | ||||||
| 					width: 350, | 					width: 350, | ||||||
|           param: 'time', | 					clearable: false, | ||||||
| 				}, | 				}, | ||||||
| 				{ | 				{ | ||||||
| 					type: 'button', | 					type: 'button', | ||||||
|           btnName: '搜索', | 					btnName: '查询', | ||||||
| 					name: 'search', | 					name: 'search', | ||||||
| 					color: 'primary', | 					color: 'primary', | ||||||
|         } | 				}, | ||||||
|  | 				// { | ||||||
|  | 				// 	type: 'separate', | ||||||
|  | 				// }, | ||||||
|  | 				// { | ||||||
|  | 				// 	// type: this.$auth.hasPermi('base:factory:export') ? 'button' : '', | ||||||
|  | 				// 	type: 'button', | ||||||
|  | 				// 	btnName: '导出', | ||||||
|  | 				// 	name: 'export', | ||||||
|  | 				// 	color: 'warning', | ||||||
|  | 				// }, | ||||||
| 			], | 			], | ||||||
|  | 			addOrEditTitle: '', | ||||||
|  | 			addOrUpdateVisible: false, | ||||||
| 		}; | 		}; | ||||||
| 	}, | 	}, | ||||||
| 	created() { | 	created() { | ||||||
|     this.getArr(); | 		// 获取当前时间 | ||||||
|  | 		const now = new Date(); | ||||||
|  | 		// 获取前一天的同一时间 | ||||||
|  | 		const yesterday = new Date(now.getTime() - 24 * 60 * 60 * 1000); | ||||||
|  | 		// 设置为00:00:00 | ||||||
|  | 		yesterday.setHours(0, 0, 0, 0); | ||||||
|  | 		// 设置为23:59:59 | ||||||
|  | 		const end = new Date(yesterday.getTime()); | ||||||
|  | 		end.setHours(23, 59, 59, 59); | ||||||
|  | 		this.listQuery.startTime = yesterday.getTime(); | ||||||
|  | 		this.listQuery.endTime = end.getTime(); | ||||||
|  | 		this.$nextTick(() => { | ||||||
|  | 			this.$refs.searchBarForm.formInline.timeVal = [ | ||||||
|  | 				yesterday.getTime(), | ||||||
|  | 				end.getTime(), | ||||||
|  | 			]; | ||||||
|  | 		}); | ||||||
|  | 		this.getDataList(); | ||||||
|  | 		this.getPdLineList(); | ||||||
| 	}, | 	}, | ||||||
| 	methods: { | 	methods: { | ||||||
|     getArr() { | 		handleExport() { | ||||||
|       const params = { | 			let tables = document.querySelector('.el-table').cloneNode(true); | ||||||
|         page: 1, | 			const fix = tables.querySelector('.el-table__fixed'); | ||||||
|         limit: 500 | 			const fixRight = tables.querySelector('.el-table__fixed-right'); | ||||||
|  | 			if (fix) { | ||||||
|  | 				tables.removeChild(tables.querySelector('.el-table__fixed')); | ||||||
| 			} | 			} | ||||||
|       this.optionArrUrl.forEach((item, index) => { | 			if (fixRight) { | ||||||
|         item(params).then((response) => { | 				tables.removeChild(tables.querySelector('.el-table__fixed-right')); | ||||||
|           this.formConfig[index].selectOptions = response.data.list |  | ||||||
|         }); |  | ||||||
|       }); |  | ||||||
|     }, |  | ||||||
|     setRowSpan(arr) { |  | ||||||
|       let count = 0 |  | ||||||
|       arr.forEach((item, index) => { |  | ||||||
|         if(index === 0) { |  | ||||||
|           this.spanArr.push(1) |  | ||||||
|         } else { |  | ||||||
|           if (item === arr[index - 1]) { |  | ||||||
|             this.spanArr[count] += 1 |  | ||||||
|             this.spanArr.push(0) |  | ||||||
|           } else { |  | ||||||
|             count = index |  | ||||||
|             this.spanArr.push(1) |  | ||||||
| 			} | 			} | ||||||
|         } | 			let exportTable = XLSX.utils.table_to_book(tables); | ||||||
|       }) |  | ||||||
|     }, |  | ||||||
|     /** 合并table列的规则 */ |  | ||||||
| 		mergeColumnHandler({ row, column, rowIndex, columnIndex }) { |  | ||||||
| 			if (columnIndex == 0) { |  | ||||||
| 				if (this.spanArr[rowIndex]) { |  | ||||||
| 					return [ |  | ||||||
| 						this.spanArr[rowIndex], // row span |  | ||||||
| 						1, // col span |  | ||||||
| 					]; |  | ||||||
| 				} else { |  | ||||||
| 					return [0, 0]; |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 		}, |  | ||||||
|     getData() { |  | ||||||
|       // this.listQuery.lineId = '1672847052717821953' |  | ||||||
|       // this.listQuery.startTime = '1693497600000'; |  | ||||||
|       // this.listQuery.endTime = '1693843200000'; |  | ||||||
|       this.tableData.splice(0) |  | ||||||
|       this.xData.splice(0) |  | ||||||
|       this.yData.splice(0) |  | ||||||
|       this.tableProps.splice(0) |  | ||||||
|       this.spanArr.splice(0) |  | ||||||
|       this.urlOptions.getDataListURL(this.listQuery).then(res => { |  | ||||||
|         console.log(res) |  | ||||||
|         let arr = [ |  | ||||||
|           { |  | ||||||
|             prop: 'sectionName', |  | ||||||
|             label: '工段', |  | ||||||
|             align: 'center', |  | ||||||
|           }, |  | ||||||
|           { |  | ||||||
|             prop: 'equName', |  | ||||||
|             label: '设备', |  | ||||||
|             align: 'center', |  | ||||||
|           } |  | ||||||
|         ] |  | ||||||
|         let sectionArr= [] |  | ||||||
|         res.data.data.forEach((ele, index) => { |  | ||||||
|           let tempData = [] |  | ||||||
|           let eqData = [] |  | ||||||
|             let plData = [] |  | ||||||
|           ele.data.forEach((item, index) => { |  | ||||||
|             item.children.forEach(params => { |  | ||||||
|               if (params.dynamicName === '设备CT') { |  | ||||||
|                 tempData[item.dynamicName + '_eq'] = params.dynamicValue |  | ||||||
|                 eqData[index] = params.dynamicValue |  | ||||||
|               } else { |  | ||||||
|                 tempData[item.dynamicName + '_pl'] = params.dynamicValue |  | ||||||
|                 plData[index] = params.dynamicValue |  | ||||||
|               } |  | ||||||
|             }) |  | ||||||
|           }) |  | ||||||
|           const equipment = { |  | ||||||
|             name: ele.equName, |  | ||||||
|             eqData: eqData, |  | ||||||
|             plData: plData |  | ||||||
|           } |  | ||||||
|           tempData['equName'] = ele.equName |  | ||||||
|           tempData['sectionName'] = ele.sectionName |  | ||||||
|           this.tableData.push(tempData) |  | ||||||
|           const { sectionName } = tempData |  | ||||||
|           sectionArr.push(sectionName) |  | ||||||
|           this.yData.push(equipment) |  | ||||||
|           console.log('看看equ', this.yData) |  | ||||||
|         }) |  | ||||||
|         this.setRowSpan(sectionArr) |  | ||||||
|         res.data.nameData.forEach(item => { |  | ||||||
|           this.timeList.push(item.name) |  | ||||||
|         }) |  | ||||||
|         const timeArray = Array.from(new Set(this.timeList)) |  | ||||||
|         for (const times of timeArray) { |  | ||||||
|           if (times !== '设备CT' && times !== '产线CT') { |  | ||||||
|             const subprop = { |  | ||||||
|               label: times, |  | ||||||
|               align: 'center', |  | ||||||
|               children: [ |  | ||||||
|                 { prop: times + '_eq', label: '设备CT', align: 'center' }, |  | ||||||
|                 { prop: times + '_pl', label: '产线CT', align: 'center' } |  | ||||||
|               ] |  | ||||||
|             } |  | ||||||
|             arr.push(subprop) |  | ||||||
|             this.xData.push(times) |  | ||||||
|           } |  | ||||||
|         } |  | ||||||
|         this.tableProps = arr |  | ||||||
|  |  | ||||||
|         console.log('表格横坐标', this.xData) | 			var exportTableOut = XLSX.write(exportTable, { | ||||||
|         this.$refs.lineChart.initChart(this.xData, this.yData) | 				bookType: 'xlsx', | ||||||
|         // this.total = response.data.total; | 				bookSST: true, | ||||||
|         // this.dataListLoading = false; | 				type: 'array', | ||||||
|  | 			}); | ||||||
|  | 			// sheetjs.xlsx为导出表格的标题名称 | ||||||
|  | 			try { | ||||||
|  | 				FileSaver.saveAs( | ||||||
|  | 					new Blob([exportTableOut], { | ||||||
|  | 						type: 'application/octet-stream', | ||||||
|  | 					}), | ||||||
|  | 					this.fileName + '产线自动报表.xlsx' | ||||||
|  | 				); | ||||||
|  | 			} catch (e) { | ||||||
|  | 				if (typeof console !== 'undefined') console.log(e, exportTableOut); | ||||||
|  | 			} | ||||||
|  | 			return exportTableOut; | ||||||
|  | 		}, | ||||||
|  | 		getPdLineList() { | ||||||
|  | 			getPdList().then((res) => { | ||||||
|  | 				this.formConfig[1].selectOptions = res.data || []; | ||||||
|  | 			}); | ||||||
|  | 			const params = { | ||||||
|  | 				pageSize: 100, | ||||||
|  | 				pageNo: 1, | ||||||
|  | 			}; | ||||||
|  | 			getFactoryPage(params).then((res) => { | ||||||
|  | 				this.formConfig[0].selectOptions = res.data.list || []; | ||||||
| 			}); | 			}); | ||||||
| 		}, | 		}, | ||||||
| 		buttonClick(val) { | 		buttonClick(val) { | ||||||
|       // console.log(val) |  | ||||||
| 			switch (val.btnName) { | 			switch (val.btnName) { | ||||||
| 				case 'search': | 				case 'search': | ||||||
|           // this.listQuery.pageNo = 1; | 					this.listQuery.factoryId = val.factoryId || undefined; | ||||||
|           // this.listQuery.pageSize = 10; | 					this.listQuery.lineId = val.lineId ? val.lineId : []; | ||||||
|           this.listQuery.lineId = val.lineIds | 					this.listQuery.startTime = val.timeVal ? val.timeVal[0] : undefined; | ||||||
|           this.listQuery.startTime = val.time ? String(new Date(val.time[0]).getTime()) : undefined; | 					this.listQuery.endTime = val.timeVal ? val.timeVal[1] : undefined; | ||||||
|           this.listQuery.endTime = val.time ? String(new Date(val.time[1]).getTime()) : undefined; |  | ||||||
|           if (val.time) { |  | ||||||
|             this.getData() |  | ||||||
|           } else { |  | ||||||
|             this.$message({ |  | ||||||
|               message: '请选择时间', |  | ||||||
|               type: 'warning' |  | ||||||
|             }); |  | ||||||
|           } |  | ||||||
|           break; |  | ||||||
|         case 'reset': |  | ||||||
|           this.$refs.searchBarForm.resetForm(); |  | ||||||
|           this.listQuery = { |  | ||||||
|             pageSize: 10, |  | ||||||
|             pageNo: 1, |  | ||||||
|             total: 1, |  | ||||||
|           }; |  | ||||||
| 					this.getDataList(); | 					this.getDataList(); | ||||||
| 					break; | 					break; | ||||||
|  | 				case 'export': | ||||||
|  | 					this.handleExport(); | ||||||
|  | 					break; | ||||||
| 				default: | 				default: | ||||||
| 					console.log(val); | 					console.log(val); | ||||||
| 			} | 			} | ||||||
| 		}, | 		}, | ||||||
|  | 		// 获取数据列表 | ||||||
|  | 		getDataList() { | ||||||
|  | 			this.dataListLoading = true; | ||||||
|  | 			this.urlOptions.getDataListURL(this.listQuery).then((response) => { | ||||||
|  | 				this.tableData = response.data; | ||||||
|  | 				this.dataListLoading = false; | ||||||
|  | 				this.showData = this.tableData; | ||||||
|  | 			}); | ||||||
|  | 			getNewCTCharts(this.listQuery).then((response) => { | ||||||
|  | 				this.chartData = response.data; | ||||||
|  | 			}); | ||||||
|  | 		}, | ||||||
|  | 		handleSearchBarChanged({ param, value }) { | ||||||
|  | 			this.listQuery.lineId = []; | ||||||
|  | 			this.$refs.searchBarForm.formInline.lineId = undefined; | ||||||
|  | 			getPdList(value).then((res) => { | ||||||
|  | 				this.formConfig[1].selectOptions = res.data || []; | ||||||
|  | 			}); | ||||||
|  | 		}, | ||||||
|  | 		handleClick(val) { | ||||||
|  | 			this.addOrUpdateVisible = true; | ||||||
|  | 			this.addOrEditTitle = | ||||||
|  | 				val.data?.factoryName + '-' + val.data?.lineName + ' 详情'; | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs.eqDetail.init( | ||||||
|  | 					val.data.lineId, | ||||||
|  | 					this.listQuery.startTime, | ||||||
|  | 					this.listQuery.endTime | ||||||
|  | 				); | ||||||
|  | 			}); | ||||||
|  | 		}, | ||||||
|  | 		handleCancel() { | ||||||
|  | 			this.addOrUpdateVisible = false; | ||||||
|  | 			this.addOrEditTitle = ''; | ||||||
|  | 		}, | ||||||
|  | 		handleConfirm() { | ||||||
|  | 			this.handleCancel(); | ||||||
|  | 		}, | ||||||
| 	}, | 	}, | ||||||
| }; | }; | ||||||
| </script> | </script> | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| <!-- | <!-- | ||||||
|  * @Author: zhp |  * @Author: zhp | ||||||
|  * @Date: 2023-09-13 09:02:25 |  * @Date: 2023-09-13 09:02:25 | ||||||
|  * @LastEditTime: 2023-10-08 16:36:37 |  * @LastEditTime: 2024-11-26 15:52:29 | ||||||
|  * @LastEditors: DY |  * @LastEditors: zwq | ||||||
|  * @Description: |  * @Description: | ||||||
| --> | --> | ||||||
| <template> | <template> | ||||||
| @@ -108,13 +108,28 @@ export default { | |||||||
|         }, |         }, | ||||||
|         series: [ |         series: [ | ||||||
|           { |           { | ||||||
|             name: '设备CT', |             name: '生产规格', | ||||||
|             data: dataList.eqData, |             data: dataList.ggData, | ||||||
|             type: 'line', |             type: 'line', | ||||||
|           }, |           }, | ||||||
|           { |           { | ||||||
|             name: '产线CT', |             name: '设备理论速度', | ||||||
|             data: dataList.plData, |             data: dataList.sbluData, | ||||||
|  |             type: 'line', | ||||||
|  |           }, | ||||||
|  |           { | ||||||
|  |             name: '设备实际速度', | ||||||
|  |             data: dataList.sbsjData, | ||||||
|  |             type: 'line', | ||||||
|  |           }, | ||||||
|  |           { | ||||||
|  |             name: '产线理论速度', | ||||||
|  |             data: dataList.cxluData, | ||||||
|  |             type: 'line', | ||||||
|  |           }, | ||||||
|  |           { | ||||||
|  |             name: '产线实际速度', | ||||||
|  |             data: dataList.cxsjData, | ||||||
|             type: 'line', |             type: 'line', | ||||||
|           } |           } | ||||||
|         ] |         ] | ||||||
|   | |||||||
| @@ -1,8 +1,19 @@ | |||||||
| <template> | <template> | ||||||
| 	<div class="app-container"> | 	<div class="app-container"> | ||||||
|     <search-bar :formConfigs="formConfig" ref="searchBarForm" @headBtnClick="buttonClick" /> | 		<search-bar | ||||||
|     <base-table v-loading="dataListLoading" :table-props="tableProps" :table-data="tableData" /> | 			:formConfigs="formConfig" | ||||||
|  | 			ref="searchBarForm" | ||||||
|  | 			@headBtnClick="buttonClick" /> | ||||||
|  | 		<div v-if="tableData.length"> | ||||||
|  | 			<base-table | ||||||
|  | 				v-loading="dataListLoading" | ||||||
|  | 				:table-props="tableProps" | ||||||
|  | 				:max-height="tableH" | ||||||
|  | 				:table-data="tableData" /> | ||||||
|  | 			<SearchBar :formConfigs="[{ label: '产品产量对比图', type: 'title' }]" /> | ||||||
| 			<line-chart ref="lineChart" /> | 			<line-chart ref="lineChart" /> | ||||||
|  | 		</div> | ||||||
|  | 		<div v-else class="no-data-bg"></div> | ||||||
| 		<!-- <pagination | 		<!-- <pagination | ||||||
| 			:limit.sync="listQuery.pageSize" | 			:limit.sync="listQuery.pageSize" | ||||||
| 			:page.sync="listQuery.pageNo" | 			:page.sync="listQuery.pageNo" | ||||||
| @@ -16,7 +27,8 @@ | |||||||
| import { parseTime } from '../../mixins/code-filter'; | import { parseTime } from '../../mixins/code-filter'; | ||||||
| import { getYieldAnalysisPageData } from '@/api/core/analysis/index'; | import { getYieldAnalysisPageData } from '@/api/core/analysis/index'; | ||||||
| import { getProductionLinePage } from '@/api/core/base/productionLine'; | import { getProductionLinePage } from '@/api/core/base/productionLine'; | ||||||
| import lineChart from '../LineChart' | import lineChart from '../LineChart'; | ||||||
|  | import tableHeightMixin from '@/mixins/lb/tableHeightMixin'; | ||||||
| // import { getWorkshopSectionPage } from '@/api/core/base/workshopSection'; | // import { getWorkshopSectionPage } from '@/api/core/base/workshopSection'; | ||||||
|  |  | ||||||
| // const tableProps = [ | // const tableProps = [ | ||||||
| @@ -44,36 +56,37 @@ export default { | |||||||
| 	components: { | 	components: { | ||||||
| 		lineChart, | 		lineChart, | ||||||
| 	}, | 	}, | ||||||
| 	// mixins: [basicPage], | 	mixins: [tableHeightMixin], | ||||||
| 	data() { | 	data() { | ||||||
| 		return { | 		return { | ||||||
| 			urlOptions: { | 			urlOptions: { | ||||||
| 				getDataListURL: getYieldAnalysisPageData, | 				getDataListURL: getYieldAnalysisPageData, | ||||||
| 			}, | 			}, | ||||||
|       tableProps:[], | 			tableProps: [], | ||||||
|       dataListLoading:false, | 			dataListLoading: false, | ||||||
| 			tableData: [], | 			tableData: [], | ||||||
| 			listQuery: { | 			listQuery: { | ||||||
| 				lineIds: [], | 				lineIds: [], | ||||||
|         time: '' | 				time: '', | ||||||
| 			}, | 			}, | ||||||
| 			dateLabelList: [], | 			dateLabelList: [], | ||||||
|       optionArrUrl: [getProductionLinePage ], | 			optionArrUrl: [getProductionLinePage], | ||||||
| 			formConfig: [ | 			formConfig: [ | ||||||
| 				{ | 				{ | ||||||
| 					type: 'select', | 					type: 'select', | ||||||
| 					label: '产线', | 					label: '产线', | ||||||
| 					selectOptions: [], | 					selectOptions: [], | ||||||
| 					param: 'lineIds', | 					param: 'lineIds', | ||||||
|           defaultSelect: '', | 					defaultSelect: [], | ||||||
|           multiple:true, | 					multiple: true, | ||||||
| 					filterable: true, | 					filterable: true, | ||||||
|  | 					width: 400, | ||||||
| 				}, | 				}, | ||||||
| 				{ | 				{ | ||||||
| 					type: 'datePicker', | 					type: 'datePicker', | ||||||
| 					label: '时间', | 					label: '时间', | ||||||
| 					dateType: 'datetime', | 					dateType: 'month', | ||||||
| 					format: 'yyyy-MM-dd', | 					format: 'yyyy-MM', | ||||||
| 					valueFormat: 'yyyy-MM-dd HH:mm:ss', | 					valueFormat: 'yyyy-MM-dd HH:mm:ss', | ||||||
| 					rangeSeparator: '-', | 					rangeSeparator: '-', | ||||||
| 					startPlaceholder: '开始时间', | 					startPlaceholder: '开始时间', | ||||||
| @@ -82,10 +95,10 @@ export default { | |||||||
| 				}, | 				}, | ||||||
| 				{ | 				{ | ||||||
| 					type: 'button', | 					type: 'button', | ||||||
| 					btnName: '搜索', | 					btnName: '查询', | ||||||
| 					name: 'search', | 					name: 'search', | ||||||
| 					color: 'primary', | 					color: 'primary', | ||||||
| 				} | 				}, | ||||||
| 			], | 			], | ||||||
| 		}; | 		}; | ||||||
| 	}, | 	}, | ||||||
| @@ -100,7 +113,9 @@ export default { | |||||||
| 			}; | 			}; | ||||||
| 			this.optionArrUrl.forEach((item, index) => { | 			this.optionArrUrl.forEach((item, index) => { | ||||||
| 				item(params).then((response) => { | 				item(params).then((response) => { | ||||||
| 					this.formConfig[index].selectOptions = response.data.list | 					this.formConfig[index].selectOptions = response.data.list; | ||||||
|  | 					// this.formConfig[0].defaultSelect = response.data.list[0].id | ||||||
|  | 					// this.$set(this.formConfig[0], 'defaultSelect', response.data.list[0].id) | ||||||
| 				}); | 				}); | ||||||
| 			}); | 			}); | ||||||
| 		}, | 		}, | ||||||
| @@ -108,49 +123,49 @@ export default { | |||||||
| 			// this.listQuery.lineIds = ['1672847052717821953'] | 			// this.listQuery.lineIds = ['1672847052717821953'] | ||||||
| 			// this.listQuery.productId = val.productId; | 			// this.listQuery.productId = val.productId; | ||||||
| 			// this.listQuery.time = '1694486098000'; | 			// this.listQuery.time = '1694486098000'; | ||||||
|       this.urlOptions.getDataListURL(this.listQuery).then(res => { | 			this.urlOptions.getDataListURL(this.listQuery).then((res) => { | ||||||
| 				let arr = [ | 				let arr = [ | ||||||
| 					{ | 					{ | ||||||
| 						prop: 'lineName', | 						prop: 'lineName', | ||||||
|           		label: '产线' | 						label: '产线', | ||||||
|  | 						fixed: 'left', | ||||||
| 					}, | 					}, | ||||||
| 					{ | 					{ | ||||||
| 						prop: 'sum', | 						prop: 'sum', | ||||||
|               label: '合计' | 						label: '合计[片]', | ||||||
|  | 						fixed: 'left', | ||||||
| 					}, | 					}, | ||||||
| 					{ | 					{ | ||||||
| 						prop: res.data ? res.data.nameData[0].name : undefined, | 						prop: res.data ? res.data.nameData[0].name : undefined, | ||||||
| 						label: res.data ? res.data.nameData[0].name : undefined, | 						label: res.data ? res.data.nameData[0].name : undefined, | ||||||
| 						align: 'center', | 						align: 'center', | ||||||
|               children:[ | 						children: [], | ||||||
|  | 					}, | ||||||
|               ] | 				]; | ||||||
|             } |  | ||||||
|         ] |  | ||||||
| 				// console.log(res.data.nameData.slice(1)) | 				// console.log(res.data.nameData.slice(1)) | ||||||
|         let xData = [] | 				let xData = []; | ||||||
|         let yAllData = [] | 				let yAllData = []; | ||||||
|         let lineName = [] | 				let lineName = []; | ||||||
| 				if (res.data) { | 				if (res.data) { | ||||||
|           let tempDateList = [] | 					let tempDateList = []; | ||||||
|           res.data.nameData.forEach(date => { | 					res.data.nameData.forEach((date) => { | ||||||
|             tempDateList.push(date.name) | 						tempDateList.push(date.name); | ||||||
|           }) | 					}); | ||||||
|           this.dateLabelList = Array.from(new Set(tempDateList)) | 					this.dateLabelList = Array.from(new Set(tempDateList)); | ||||||
|  |  | ||||||
|           this.dateLabelList.forEach(item => { | 					this.dateLabelList.forEach((item) => { | ||||||
| 						if (item.indexOf('年') === -1) { | 						if (item.indexOf('年') === -1) { | ||||||
| 							// 构造表头 | 							// 构造表头 | ||||||
| 							const props = { | 							const props = { | ||||||
|                 'prop': item, | 								prop: item, | ||||||
|                 'label': item | 								label: item, | ||||||
|               } | 							}; | ||||||
|               arr[2].children.push(props) | 							arr[2].children.push(props); | ||||||
|  |  | ||||||
| 							// 构造echarts横坐标 | 							// 构造echarts横坐标 | ||||||
|               xData.push(item) | 							xData.push(item); | ||||||
| 						} | 						} | ||||||
|           }) | 					}); | ||||||
| 					// res.data.nameData.slice(1).forEach(item => { | 					// res.data.nameData.slice(1).forEach(item => { | ||||||
| 					//   const props = { | 					//   const props = { | ||||||
| 					//     'prop': item.name, | 					//     'prop': item.name, | ||||||
| @@ -159,23 +174,23 @@ export default { | |||||||
| 					//   } | 					//   } | ||||||
| 					//   arr[2].children.push(props) | 					//   arr[2].children.push(props) | ||||||
| 					// }) | 					// }) | ||||||
|           let tableDataArr =[] | 					let tableDataArr = []; | ||||||
|           res.data.data.forEach(item => { | 					res.data.data.forEach((item) => { | ||||||
|             let obj = {} | 						let obj = {}; | ||||||
|             obj.lineName= item.lineName, | 						(obj.lineName = item.lineName), | ||||||
|             obj.sum= item.sum, | 							(obj.sum = item.sum), | ||||||
| 							item.data.forEach((ele, index) => { | 							item.data.forEach((ele, index) => { | ||||||
| 								// console.log(ele) | 								// console.log(ele) | ||||||
| 								ele.children.forEach((e) => { | 								ele.children.forEach((e) => { | ||||||
|                 console.log(e.dynamicName) | 									console.log(e.dynamicName); | ||||||
|                 obj['' + e.dynamicName + ''] = e.dynamicValue | 									obj['' + e.dynamicName + ''] = e.dynamicValue; | ||||||
| 									console.log(obj['' + e.dynamicName + '']); | 									console.log(obj['' + e.dynamicName + '']); | ||||||
|               }) |  | ||||||
|             }) |  | ||||||
|             tableDataArr.push(obj) |  | ||||||
| 								}); | 								}); | ||||||
|           this.tableData = tableDataArr | 							}); | ||||||
|           this.tableProps = arr | 						tableDataArr.push(obj); | ||||||
|  | 					}); | ||||||
|  | 					this.tableData = tableDataArr; | ||||||
|  | 					this.tableProps = arr; | ||||||
|  |  | ||||||
| 					// let tempList = [] | 					// let tempList = [] | ||||||
| 					// res.data.nameData.slice(1).forEach(item => { | 					// res.data.nameData.slice(1).forEach(item => { | ||||||
| @@ -184,9 +199,9 @@ export default { | |||||||
| 					// }) | 					// }) | ||||||
| 					// xData = Array.from(new Set(tempList)) | 					// xData = Array.from(new Set(tempList)) | ||||||
|  |  | ||||||
|           res.data.data.forEach(item => { | 					res.data.data.forEach((item) => { | ||||||
|             let yData = [] | 						let yData = []; | ||||||
|             lineName.push(item.lineName) | 						lineName.push(item.lineName); | ||||||
| 						// let obj = {} | 						// let obj = {} | ||||||
| 						// obj.lineName = item.lineName, | 						// obj.lineName = item.lineName, | ||||||
| 						//   obj.sum = item.sum, | 						//   obj.sum = item.sum, | ||||||
| @@ -194,18 +209,18 @@ export default { | |||||||
| 							// console.log(ele) | 							// console.log(ele) | ||||||
| 							ele.children.forEach((e) => { | 							ele.children.forEach((e) => { | ||||||
| 								// let yData = [] | 								// let yData = [] | ||||||
|                 yData.push(e.dynamicValue) | 								yData.push(e.dynamicValue); | ||||||
|                 }) |  | ||||||
|               }) |  | ||||||
|             yAllData.push(yData) |  | ||||||
| 							}); | 							}); | ||||||
|           console.log(lineName) | 						}); | ||||||
|  | 						yAllData.push(yData); | ||||||
|  | 					}); | ||||||
|  | 					console.log(lineName); | ||||||
| 				} else { | 				} else { | ||||||
|           this.tableProps = arr | 					this.tableProps = arr; | ||||||
|           this.tableData = [] | 					this.tableData = []; | ||||||
|           xData = [] | 					xData = []; | ||||||
|           yAllData = [] | 					yAllData = []; | ||||||
|           lineName = [] | 					lineName = []; | ||||||
| 				} | 				} | ||||||
| 				// res.data.data[0].data[0].children.forEach((item, index) => { | 				// res.data.data[0].data[0].children.forEach((item, index) => { | ||||||
| 				//   // console.log(item) | 				//   // console.log(item) | ||||||
| @@ -214,26 +229,29 @@ export default { | |||||||
| 				//   // obj['' + item.dynamicName + ''] = item.dynamicValue | 				//   // obj['' + item.dynamicName + ''] = item.dynamicValue | ||||||
| 				// }) | 				// }) | ||||||
| 				// console.log(this.yData) | 				// console.log(this.yData) | ||||||
|         this.$refs.lineChart.initChart(xData, yAllData, lineName) | 				this.$nextTick(() => { | ||||||
|  | 					this.$refs.lineChart.initChart(xData, yAllData, lineName); | ||||||
|  | 				}); | ||||||
| 				// this.total = response.data.total; | 				// this.total = response.data.total; | ||||||
| 				// this.dataListLoading = false; | 				// this.dataListLoading = false; | ||||||
| 			}); | 			}); | ||||||
| 		}, | 		}, | ||||||
| 		buttonClick(val) { | 		buttonClick(val) { | ||||||
|       // console.log(val) |  | ||||||
| 			switch (val.btnName) { | 			switch (val.btnName) { | ||||||
| 				case 'search': | 				case 'search': | ||||||
|           this.listQuery.lineIds = val.lineIds ? val.lineIds :undefined | 					this.listQuery.lineIds = val.lineIds ? val.lineIds : undefined; | ||||||
| 					// this.listQuery.productId = val.productId; | 					// this.listQuery.productId = val.productId; | ||||||
|           this.listQuery.time = val.time ? new Date(val.time).getTime() : undefined | 					this.listQuery.time = val.time | ||||||
|  | 						? new Date(val.time).getTime() | ||||||
|  | 						: undefined; | ||||||
| 					// this.listQuery.pageNo = 1; | 					// this.listQuery.pageNo = 1; | ||||||
| 					// this.listQuery.pageSize = 10; | 					// this.listQuery.pageSize = 10; | ||||||
| 					if (val.time) { | 					if (val.time) { | ||||||
|             this.getData() | 						this.getData(); | ||||||
| 					} else { | 					} else { | ||||||
| 						this.$message({ | 						this.$message({ | ||||||
| 							message: '请选择时间', | 							message: '请选择时间', | ||||||
|               type: 'warning' | 							type: 'warning', | ||||||
| 						}); | 						}); | ||||||
| 					} | 					} | ||||||
| 					break; | 					break; | ||||||
|   | |||||||
							
								
								
									
										460
									
								
								src/views/core/base/equipment/components/AssetsUpload.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,460 @@ | |||||||
|  | <!-- | ||||||
|  |     filename: AssetsUpload.vue | ||||||
|  |     author: liubin | ||||||
|  |     date: 2023-10-12 16:40:14 | ||||||
|  |     description: 上传资料/图片 组件 | ||||||
|  | --> | ||||||
|  |  | ||||||
|  | <template> | ||||||
|  | 	<div class="assets-upload"> | ||||||
|  | 		<section class="operations"> | ||||||
|  | 			<el-button type="text" class="expand-btn" @click="expand = !expand"> | ||||||
|  | 				<i class="el-icon-folder-opened" v-if="expand"></i> | ||||||
|  | 				<i class="el-icon-folder" v-else></i> | ||||||
|  | 				展开 | ||||||
|  | 			</el-button> | ||||||
|  | 			<!-- <div class="preview-btn"> | ||||||
|  | 				<i class="el-icon-view"></i> | ||||||
|  | 				预览 | ||||||
|  | 			</div> --> | ||||||
|  | 		</section> | ||||||
|  | 		<section | ||||||
|  | 			class="file-area" | ||||||
|  | 			:style="{ | ||||||
|  | 				height: expand ? 'auto' : isPicMode ? '180px' : '152px', | ||||||
|  | 				gap: isPicMode ? '0 24px' : '24px', | ||||||
|  | 				gridAutoRows: isPicMode ? '180px' : '152px', | ||||||
|  | 			}"> | ||||||
|  | 			<el-upload | ||||||
|  | 				class="equipment-upload" | ||||||
|  | 				:style="{ marginBottom: isPicMode ? '48px' : '24px' }" | ||||||
|  | 				:disabled="disabled" | ||||||
|  | 				drag | ||||||
|  | 				:action="uploadUrl" | ||||||
|  | 				:headers="headers" | ||||||
|  | 				multiple | ||||||
|  | 				:show-file-list="false" | ||||||
|  | 				:before-upload="beforeUpload" | ||||||
|  | 				:on-success="handleSuccess"> | ||||||
|  | 				<i class="el-icon-upload"></i> | ||||||
|  | 				<div class="el-upload__text"> | ||||||
|  | 					<span>将文件拖到此处或</span> | ||||||
|  | 					<em>点击上传</em> | ||||||
|  | 				</div> | ||||||
|  | 				<div class="el-upload__tip" slot="tip"> | ||||||
|  | 					{{ | ||||||
|  | 						isPicMode ? '仅支持上传 .jpg .png 格式文件, 且' : '' | ||||||
|  | 					}}文件大小不超过2MB | ||||||
|  | 				</div> | ||||||
|  | 			</el-upload> | ||||||
|  | 			<!-- <div | ||||||
|  | 				class="file-list__item" | ||||||
|  | 				v-for="n in 9" | ||||||
|  | 				:key="n" | ||||||
|  | 				:style="{ | ||||||
|  | 					display: n > 4 && !expand ? 'none' : 'block', | ||||||
|  | 				}" | ||||||
|  | 				:data-name="n" | ||||||
|  | 				:class="{ 'default-icon': !isPicMode }"> | ||||||
|  | 				<i class="el-icon-delete"></i> | ||||||
|  | 			</div> --> | ||||||
|  | 			<div | ||||||
|  | 				v-for="(file, index) in files" | ||||||
|  | 				:key="file.fileName" | ||||||
|  | 				style="width: 100%"> | ||||||
|  | 				<div | ||||||
|  | 					class="file-list__item" | ||||||
|  | 					v-if="!isPicMode" | ||||||
|  | 					:style="{ | ||||||
|  | 						background: isPicMode | ||||||
|  | 							? `url(${file.fileUrl}) no-repeat` | ||||||
|  | 							: `url(${defaultBg}) no-repeat`, | ||||||
|  | 						backgroundSize: isPicMode ? '100% 100%' : '64px', | ||||||
|  | 						backgroundPosition: isPicMode ? '0% 0%' : 'center', | ||||||
|  | 					}" | ||||||
|  | 					@click="handleDownload(file)" | ||||||
|  | 					:data-name="file.fileName"> | ||||||
|  | 					<el-button | ||||||
|  | 						v-if="!disabled" | ||||||
|  | 						type="text" | ||||||
|  | 						class="el-icon-delete" | ||||||
|  | 						style="padding: 0" | ||||||
|  | 						@click="(e) => handleDelete(file)" /> | ||||||
|  | 				</div> | ||||||
|  |  | ||||||
|  | 				<el-image | ||||||
|  | 					v-else | ||||||
|  | 					class="file-list__item" | ||||||
|  | 					style="width: 100%" | ||||||
|  | 					:src="file.fileUrl" | ||||||
|  | 					:preview-src-list="files.map((item) => item.fileUrl)"></el-image> | ||||||
|  |         </div> | ||||||
|  | 		</section> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { getAccessToken } from '@/utils/auth'; | ||||||
|  | import defaultBg from '../../../../../assets/images/default-file-icon.png'; | ||||||
|  |  | ||||||
|  | function checkSize(file, message) { | ||||||
|  | 	const isLt2M = file.size / 1024 / 1024 < 2; | ||||||
|  | 	if (!isLt2M) { | ||||||
|  | 		message.error('上传文件大小不能超过 2MB!'); | ||||||
|  | 	} | ||||||
|  | 	return isLt2M; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function checkPic(file, message) { | ||||||
|  | 	const isJPG = file.type === 'image/jpeg'; | ||||||
|  | 	const isPNG = file.type === 'image/png'; | ||||||
|  | 	const isPic = isJPG || isPNG; | ||||||
|  | 	if (!isPic) { | ||||||
|  | 		message.error('上传图片只能是 JPG/PNG 格式!'); | ||||||
|  | 	} | ||||||
|  | 	return isPic; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	name: 'AssetsUpload', | ||||||
|  | 	components: {}, | ||||||
|  | 	model: { | ||||||
|  | 		prop: 'dataSource', | ||||||
|  | 		event: 'update', | ||||||
|  | 	}, | ||||||
|  | 	props: { | ||||||
|  | 		type: { | ||||||
|  | 			type: String, | ||||||
|  | 			default: 'image', | ||||||
|  | 		}, | ||||||
|  | 		dataSource: { | ||||||
|  | 			type: Array, | ||||||
|  | 			default: () => [], | ||||||
|  | 		}, | ||||||
|  | 		equipmentId: { | ||||||
|  | 			type: String, | ||||||
|  | 			default: '', | ||||||
|  | 		}, | ||||||
|  | 		isPicMode: { | ||||||
|  | 			type: Boolean, | ||||||
|  | 			default: false, | ||||||
|  | 		}, | ||||||
|  | 		disabled: { | ||||||
|  | 			type: Boolean, | ||||||
|  | 			default: false, | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | 	emits: ['update-filelist'], | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			defaultBg, | ||||||
|  | 			expand: false, | ||||||
|  | 			headers: { Authorization: 'Bearer ' + getAccessToken() }, // 设置上传的请求头部 | ||||||
|  | 			fileList: [], | ||||||
|  | 			uploadUrl: process.env.VUE_APP_BASE_API + '/admin-api/infra/file/upload', | ||||||
|  | 			files: [ | ||||||
|  | 				// 服务器返回的结构 | ||||||
|  | 				// { | ||||||
|  | 				// 	fileName: 'sf.docs', | ||||||
|  | 				// 	fileType: 'asset', | ||||||
|  | 				// 	fileUrl: | ||||||
|  | 				// 		'https://hbimg.b0.upaiyun.com/cc7475787bd08ed926b68eaf53fa1f2c5473259115e3c-gJdObd_fw658', | ||||||
|  | 				// }, | ||||||
|  | 				// { | ||||||
|  | 				// 	fileName: 'sddf.docs', | ||||||
|  | 				// 	fileType: 'asset', | ||||||
|  | 				// 	fileUrl: 'https://img0.sc115.com/wm/xqx/pic1/1501xofo4ssolji.jpg', | ||||||
|  | 				// }, | ||||||
|  | 				// { | ||||||
|  | 				// 	fileName: 'jjj.docs', | ||||||
|  | 				// 	fileType: 'asset', | ||||||
|  | 				// 	fileUrl: | ||||||
|  | 				// 		'https://www.mms591.com/www.mms591.com-photo/2013081823/1-130QR34544.jpg', | ||||||
|  | 				// }, | ||||||
|  | 				// { | ||||||
|  | 				// 	fileName: 'asdfasdf.docs', | ||||||
|  | 				// 	fileType: 'asset', | ||||||
|  | 				// 	fileUrl: | ||||||
|  | 				// 		'https://hbimg.b0.upaiyun.com/8f6bced5f2e38d3a021b2c48d5a98dfb6317e3e12c6a0-QmhJ5v_fw658', | ||||||
|  | 				// }, | ||||||
|  | 				// { | ||||||
|  | 				// 	fileName: 'asdkj.docs', | ||||||
|  | 				// 	fileType: 'asset', | ||||||
|  | 				// 	fileUrl: | ||||||
|  | 				// 		'https://www.mms591.com/www.mms591.com-photo/2013013021/1-130130212034.jpg', | ||||||
|  | 				// }, | ||||||
|  | 				// { | ||||||
|  | 				// 	fileName: 'lkasjdf.docs', | ||||||
|  | 				// 	fileType: 'asset', | ||||||
|  | 				// 	fileUrl: | ||||||
|  | 				// 		'https://www.mms591.com/www.mms591.com-photo/2013072122/1-130H1223057.jpg', | ||||||
|  | 				// }, | ||||||
|  | 				// { | ||||||
|  | 				// 	fileName: 'asdf.docs', | ||||||
|  | 				// 	fileType: 'asset', | ||||||
|  | 				// 	fileUrl: | ||||||
|  | 				// 		'https://img.1ppt.com/uploads/allimg/1212/1-1212101ZH5A2.jpg', | ||||||
|  | 				// }, | ||||||
|  | 				// { | ||||||
|  | 				// 	fileName: 'afdffff.docs', | ||||||
|  | 				// 	fileType: 'asset', | ||||||
|  | 				// 	fileUrl: | ||||||
|  | 				// 		'https://www.mms591.com/www.mms591.com-photo/2013051721/1-13051H11945.jpg', | ||||||
|  | 				// }, | ||||||
|  | 			], | ||||||
|  | 			updateTimer: null, | ||||||
|  | 		}; | ||||||
|  | 	}, | ||||||
|  | 	watch: { | ||||||
|  | 		dataSource: { | ||||||
|  | 			handler(val) { | ||||||
|  | 				this.files = JSON.parse(JSON.stringify(val)); | ||||||
|  | 			}, | ||||||
|  | 			immediate: true, | ||||||
|  | 			deep: true, | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | 	mounted() {}, | ||||||
|  | 	methods: { | ||||||
|  | 		// handle success, per file! | ||||||
|  | 		handleSuccess(response, file, fileList) { | ||||||
|  | 			this.$notify({ | ||||||
|  | 				title: '成功', | ||||||
|  | 				message: '上传成功! 点击确认保存上传结果', | ||||||
|  | 				type: 'success', | ||||||
|  | 			}); | ||||||
|  | 			if ( | ||||||
|  | 				response == null || | ||||||
|  | 				!('data' in response) || | ||||||
|  | 				response.data == null || | ||||||
|  | 				response.data.trim() == '' | ||||||
|  | 			) { | ||||||
|  | 				this.$message.warning('上传出错了!'); | ||||||
|  | 				return; | ||||||
|  | 			} | ||||||
|  | 			this.files.push({ | ||||||
|  | 				fileName: file.name, | ||||||
|  | 				fileUrl: response.data, | ||||||
|  | 				fileType: this.isPicMode ? 1 : 2, | ||||||
|  | 			}); | ||||||
|  | 			// debugger; | ||||||
|  |  | ||||||
|  | 			// 延时更新 | ||||||
|  | 			if (this.updateTimer) { | ||||||
|  | 				clearTimeout(this.updateTimer); | ||||||
|  | 			} | ||||||
|  | 			this.updateTimer = setTimeout(() => { | ||||||
|  | 				// console.log('[AssetsUpload] 更新上传列表'); | ||||||
|  | 				this.emitFilelist(); | ||||||
|  | 				clearTimeout(this.updateTimer); | ||||||
|  | 				this.updateTimer = null; | ||||||
|  | 			}, 500); | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		emitFilelist() { | ||||||
|  | 			this.$emit('update', this.files); | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		handleRemove(file, fileList) { | ||||||
|  | 			debugger; | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		handleDelete(file) { | ||||||
|  | 			// fileName fileType 都可能一样,但 fileUrl 一定不一样 | ||||||
|  | 			this.files = this.files.filter((item) => item.fileUrl != file.fileUrl); | ||||||
|  | 			this.$notify({ | ||||||
|  | 				title: '成功', | ||||||
|  | 				message: '删除成功! 需点击确认保存删除结果', | ||||||
|  | 				type: 'success', | ||||||
|  | 			}); | ||||||
|  | 			this.emitFilelist(); | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		beforeUpload(file) { | ||||||
|  | 			if (this.isPicMode) { | ||||||
|  | 				return checkPic(file, this.$message) && checkSize(file, this.$message); | ||||||
|  | 			} | ||||||
|  | 			return checkSize(file, this.$message); | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		handleUpload() { | ||||||
|  | 			switch (this.type) { | ||||||
|  | 				case 'image': | ||||||
|  | 					break; | ||||||
|  | 				case 'asset': | ||||||
|  | 					break; | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		updateFileList(appendFilelist) { | ||||||
|  | 			// Array | ||||||
|  | 			this.$emit('update-filelist', this.appendFilelist); | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		async handleDownload(file) { | ||||||
|  | 			if (this.isPicMode) { | ||||||
|  | 				// this.$emit('preview', file); | ||||||
|  | 				const link = document.createElement('a'); | ||||||
|  | 				link.href = file.fileUrl; | ||||||
|  | 				link.target = '_blank'; | ||||||
|  | 				document.body.appendChild(link); | ||||||
|  | 				link.click(); | ||||||
|  | 				document.body.removeChild(link); | ||||||
|  | 			} else { | ||||||
|  | 				// this.$emit('download', file); | ||||||
|  | 				const data = await this.$axios({ | ||||||
|  | 					url: file.fileUrl, | ||||||
|  | 					method: 'get', | ||||||
|  | 					responseType: 'blob', | ||||||
|  | 				}); | ||||||
|  | 				const link = document.createElement('a'); | ||||||
|  | 				link.href = window.URL.createObjectURL(new Blob([data])); | ||||||
|  | 				link.download = file.fileName; | ||||||
|  | 				document.body.appendChild(link); | ||||||
|  | 				link.click(); | ||||||
|  | 				document.body.removeChild(link); | ||||||
|  | 				window.URL.revokeObjectURL(link.href); | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | }; | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style scoped lang="scss"> | ||||||
|  | .assets-upload { | ||||||
|  | 	position: relative; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .operations { | ||||||
|  | 	position: absolute; | ||||||
|  | 	top: -36px; | ||||||
|  | 	right: 0; | ||||||
|  | 	display: flex; | ||||||
|  | 	align-items: center; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .expand-btn, | ||||||
|  | .preview-btn { | ||||||
|  | 	font-size: 14px; | ||||||
|  | 	line-height: 1.2; | ||||||
|  | 	display: inline-block; | ||||||
|  | 	padding-left: 20px; | ||||||
|  | 	cursor: pointer; | ||||||
|  | 	z-index: 1000; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .expand-btn { | ||||||
|  | 	margin-right: 12px; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .preview-btn { | ||||||
|  | 	color: #ccc; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .expand-btn, | ||||||
|  | .preview-btn:hover, | ||||||
|  | .preview-btn.active { | ||||||
|  | 	// color: #0042d0; | ||||||
|  | 	color: #0b58ff; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | :deep(.equipment-upload) { | ||||||
|  | 	.el-upload-dragger { | ||||||
|  | 		width: 188px; | ||||||
|  | 		height: 128px; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	.el-icon-upload { | ||||||
|  | 		margin: 12px 0; | ||||||
|  | 		font-size: 48px; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	.el-upload__text { | ||||||
|  | 		font-size: 12px; | ||||||
|  | 		line-height: 2px; | ||||||
|  | 		display: flex; | ||||||
|  | 		flex-direction: column; | ||||||
|  |  | ||||||
|  | 		em { | ||||||
|  | 			margin-top: 12px; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	.el-upload__tip { | ||||||
|  | 		font-size: 12px; | ||||||
|  | 		line-height: 1.5; | ||||||
|  | 		color: #d1d1d1; | ||||||
|  | 		margin: 0 0 12px; | ||||||
|  | 		transform: translateY(-12px); | ||||||
|  | 		user-select: none; | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .equipment-upload { | ||||||
|  | 	margin-bottom: 24px; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .file-list { | ||||||
|  | 	padding: 12px; | ||||||
|  | 	border: 1px solid #ccc; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // custom | ||||||
|  | .file-area { | ||||||
|  | 	display: grid; | ||||||
|  | 	grid-template-columns: repeat(auto-fill, 188px); | ||||||
|  | 	grid-auto-rows: 152px; | ||||||
|  | 	gap: 48px 24px; | ||||||
|  | 	overflow: hidden; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .file-list__item { | ||||||
|  | 	height: 128px; | ||||||
|  | 	background-color: #fff; | ||||||
|  | 	border: 1px dashed #d9d9d9; | ||||||
|  | 	border-radius: 6px; | ||||||
|  | 	-webkit-box-sizing: border-box; | ||||||
|  | 	box-sizing: border-box; | ||||||
|  | 	text-align: center; | ||||||
|  | 	cursor: pointer; | ||||||
|  | 	position: relative; | ||||||
|  | 	// overflow: hidden; | ||||||
|  |  | ||||||
|  | 	&:hover { | ||||||
|  | 		.el-icon-delete { | ||||||
|  | 			display: block; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	.el-icon-delete { | ||||||
|  | 		color: #ccc; | ||||||
|  | 		position: absolute; | ||||||
|  | 		top: 8px; | ||||||
|  | 		right: 8px; | ||||||
|  | 		display: none; | ||||||
|  |  | ||||||
|  | 		&:hover { | ||||||
|  | 			color: rgb(210, 41, 41); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .file-list__item:hover { | ||||||
|  | 	border-color: #0b58ff; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .file-list__item::after { | ||||||
|  | 	content: attr(data-name); | ||||||
|  | 	position: absolute; | ||||||
|  | 	left: 0; | ||||||
|  | 	bottom: -26px; | ||||||
|  | 	font-size: 14px; | ||||||
|  | 	line-height: 2; | ||||||
|  | 	color: #616161; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .default-icon { | ||||||
|  | 	background: url(../../../../../assets/images/default-file-icon.png) no-repeat; | ||||||
|  | 	background-position: center; | ||||||
|  | 	background-size: 64px; | ||||||
|  | } | ||||||
|  | </style> | ||||||
							
								
								
									
										313
									
								
								src/views/core/base/equipment/components/DialogForm.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,313 @@ | |||||||
|  | <!-- | ||||||
|  |     filename: dialogForm.vue | ||||||
|  |     author: liubin | ||||||
|  |     date: 2023-08-15 10:32:36 | ||||||
|  |     description: 弹窗的表单组件 | ||||||
|  | --> | ||||||
|  |  | ||||||
|  | <template> | ||||||
|  | 	<el-form | ||||||
|  | 		ref="form" | ||||||
|  | 		:model="form" | ||||||
|  | 		:label-width="`${labelWidth}px`" | ||||||
|  | 		:size="size" | ||||||
|  | 		:label-position="labelPosition" | ||||||
|  | 		v-loading="formLoading"> | ||||||
|  | 		<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-form-item :label="col.label" :prop="col.prop" :rules="col.rules"> | ||||||
|  | 					<el-input | ||||||
|  | 						v-if="col.input" | ||||||
|  | 						v-model="form[col.prop]" | ||||||
|  | 						@change="$emit('update', form)" | ||||||
|  | 						:placeholder="`请输入${col.label}`" | ||||||
|  | 						v-bind="col.bind" /> | ||||||
|  | 					<el-input | ||||||
|  | 						v-if="col.textarea" | ||||||
|  | 						type="textarea" | ||||||
|  | 						v-model="form[col.prop]" | ||||||
|  | 						@change="$emit('update', form)" | ||||||
|  | 						:placeholder="`请输入${col.label}`" | ||||||
|  | 						v-bind="col.bind" /> | ||||||
|  | 					<el-select | ||||||
|  | 						v-if="col.select" | ||||||
|  | 						v-model="form[col.prop]" | ||||||
|  | 						:placeholder="`请选择${col.label}`" | ||||||
|  | 						@change="$emit('update', form)" | ||||||
|  | 						v-bind="col.bind"> | ||||||
|  | 						<el-option | ||||||
|  | 							v-for="opt in optionListOf[col.prop]" | ||||||
|  | 							:key="opt.value" | ||||||
|  | 							:label="opt.label" | ||||||
|  | 							:value="opt.value" /> | ||||||
|  | 					</el-select> | ||||||
|  | 					<el-date-picker | ||||||
|  | 						v-if="col.datetime" | ||||||
|  | 						v-model="form[col.prop]" | ||||||
|  | 						type="date" | ||||||
|  | 						:placeholder="`请选择${col.label}`" | ||||||
|  | 						value-format="timestamp" | ||||||
|  | 						v-bind="col.bind"></el-date-picker> | ||||||
|  | 					<el-upload | ||||||
|  | 						class="upload-in-dialog" | ||||||
|  | 						v-if="col.upload" | ||||||
|  | 						:file-list="uploadedFileList" | ||||||
|  | 						:action="col.url" | ||||||
|  | 						:on-success="handleUploadSuccess" | ||||||
|  | 						v-bind="col.bind"> | ||||||
|  | 						<el-button | ||||||
|  | 							size="small" | ||||||
|  | 							type="primary" | ||||||
|  | 							:disabled="col.bind?.disabled || false"> | ||||||
|  | 							点击上传 | ||||||
|  | 						</el-button> | ||||||
|  | 						<div class="el-upload__tip" slot="tip" v-if="col.uploadTips"> | ||||||
|  | 							{{ col.uploadTips || '只能上传jpg/png文件,大小不超过2MB' }} | ||||||
|  | 						</div> | ||||||
|  | 					</el-upload> | ||||||
|  | 					<el-switch | ||||||
|  | 						v-if="col.switch" | ||||||
|  | 						v-model="form[col.prop]" | ||||||
|  | 						active-color="#0b58ff" | ||||||
|  | 						inactive-color="#e1e1e1" | ||||||
|  | 						v-bind="col.bind"></el-switch> | ||||||
|  | 					<component | ||||||
|  | 						v-if="col.subcomponent" | ||||||
|  | 						:key="col.key" | ||||||
|  | 						:is="col.subcomponent" | ||||||
|  | 						v-bind="col.bind" | ||||||
|  | 						:inlineStyle="col.style"></component> | ||||||
|  | 				</el-form-item> | ||||||
|  | 			</el-col> | ||||||
|  | 		</el-row> | ||||||
|  | 	</el-form> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | /** | ||||||
|  |  * 找到最长的label | ||||||
|  |  * @param {*} options | ||||||
|  |  */ | ||||||
|  | function findMaxLabelWidth(rows) { | ||||||
|  | 	let max = 0; | ||||||
|  | 	rows.forEach((row) => { | ||||||
|  | 		row.forEach((opt) => { | ||||||
|  | 			// debugger; | ||||||
|  | 			if (!opt.label) return 0; | ||||||
|  | 			if (opt.label.length > max) { | ||||||
|  | 				max = opt.label.length; | ||||||
|  | 			} | ||||||
|  | 		}); | ||||||
|  | 	}); | ||||||
|  | 	return max; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	name: 'DialogForm', | ||||||
|  | 	model: { | ||||||
|  | 		prop: 'dataForm', | ||||||
|  | 		event: 'update', | ||||||
|  | 	}, | ||||||
|  | 	emits: ['update'], | ||||||
|  | 	components: {}, | ||||||
|  | 	props: { | ||||||
|  | 		rows: { | ||||||
|  | 			type: Array, | ||||||
|  | 			default: () => [], | ||||||
|  | 		}, | ||||||
|  | 		dataForm: { | ||||||
|  | 			type: Object, | ||||||
|  | 			default: () => ({}), | ||||||
|  | 		}, | ||||||
|  | 		disabled: { | ||||||
|  | 			type: Boolean, | ||||||
|  | 			default: false, | ||||||
|  | 		}, | ||||||
|  | 		labelPosition: { | ||||||
|  | 			type: String, | ||||||
|  | 			default: 'right', | ||||||
|  | 		}, | ||||||
|  | 		size: { | ||||||
|  | 			type: String, | ||||||
|  | 			default: '', | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			formLoading: true, | ||||||
|  | 			optionListOf: {}, | ||||||
|  | 			uploadedFileList: [], | ||||||
|  | 			dataLoaded: false, | ||||||
|  | 		}; | ||||||
|  | 	}, | ||||||
|  | 	computed: { | ||||||
|  | 		labelWidth() { | ||||||
|  | 			let max = findMaxLabelWidth(this.rows); | ||||||
|  | 			// 每个汉字占20px | ||||||
|  | 			return max * 20; | ||||||
|  | 			// return max * 20 + 'px'; | ||||||
|  | 		}, | ||||||
|  | 		form: { | ||||||
|  | 			get() { | ||||||
|  | 				// if (this.dataLoaded) return this.dataForm; | ||||||
|  | 				// else return {} | ||||||
|  | 				return this.dataForm; | ||||||
|  | 			}, | ||||||
|  | 			set(val) { | ||||||
|  | 				console.log('set form', val); | ||||||
|  | 			}, | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | 	watch: { | ||||||
|  | 		rows: { | ||||||
|  | 			handler() { | ||||||
|  | 				console.log('watch triggered!'); | ||||||
|  | 				this.$nextTick(() => { | ||||||
|  | 					this.handleOptions('watch'); | ||||||
|  | 				}); | ||||||
|  | 			}, | ||||||
|  | 			deep: true, | ||||||
|  | 			immediate: false, | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | 	mounted() { | ||||||
|  | 		// 处理 options | ||||||
|  | 		this.handleOptions(); | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		/** 模拟透传 ref  */ | ||||||
|  | 		validate(cb) { | ||||||
|  | 			return this.$refs.form.validate(cb); | ||||||
|  | 		}, | ||||||
|  | 		resetFields(args) { | ||||||
|  | 			return this.$refs.form.resetFields(args); | ||||||
|  | 		}, | ||||||
|  | 		// getCode | ||||||
|  | 		async getCode(url) { | ||||||
|  | 			const response = await this.$axios(url); | ||||||
|  | 			return response.data; | ||||||
|  | 		}, | ||||||
|  | 		async handleOptions(trigger = 'monuted') { | ||||||
|  | 			console.log('[dialogForm:handleOptions]'); | ||||||
|  | 			const promiseList = []; | ||||||
|  | 			this.rows.forEach((cols) => { | ||||||
|  | 				cols.forEach((opt) => { | ||||||
|  | 					if (opt.value && !this.form[opt.prop]) { | ||||||
|  | 						// 默认值 | ||||||
|  | 						this.form[opt.prop] = opt.value; | ||||||
|  | 					} | ||||||
|  |  | ||||||
|  | 					if (opt.options) { | ||||||
|  | 						this.$set(this.optionListOf, opt.prop, opt.options); | ||||||
|  | 					} else if (opt.url) { | ||||||
|  | 						// 如果有 depends,则暂时先不获取,注册一个watcher | ||||||
|  | 						if (opt.depends) { | ||||||
|  | 							console.log('[handleOptions] setting watch'); | ||||||
|  | 							this.$watch( | ||||||
|  | 								() => this.form[opt.depends], | ||||||
|  | 								(id) => { | ||||||
|  | 									console.log('<', opt.depends, '>', 'changed', id); | ||||||
|  | 									if (id == null) return; | ||||||
|  | 									// 清空原有选项 | ||||||
|  | 									this.form[opt.prop] = null; | ||||||
|  | 									// 获取新的选项 | ||||||
|  | 									this.$axios({ | ||||||
|  | 										url: `${opt.url}?id=${id}`, | ||||||
|  | 									}).then((res) => { | ||||||
|  | 										this.$set( | ||||||
|  | 											this.optionListOf, | ||||||
|  | 											opt.prop, | ||||||
|  | 											res.data.map((item) => ({ | ||||||
|  | 												label: item[opt.labelKey ?? 'name'], | ||||||
|  | 												value: item[opt.valueKey ?? 'id'], | ||||||
|  | 											})) | ||||||
|  | 										); | ||||||
|  | 									}); | ||||||
|  | 								}, | ||||||
|  | 								{ | ||||||
|  | 									immediate: true, | ||||||
|  | 								} | ||||||
|  | 							); | ||||||
|  | 							return; | ||||||
|  | 						} | ||||||
|  | 						// 如果是下拉框,或者新增模式下的输入框,才去请求 | ||||||
|  | 						if (opt.select || (opt.input && !this.form?.id)) { | ||||||
|  | 							promiseList.push(async () => { | ||||||
|  | 								const response = await this.$axios(opt.url, { | ||||||
|  | 									method: opt.method ?? 'get', | ||||||
|  | 								}); | ||||||
|  | 								console.log('[dialogForm:handleOptions:response]', response); | ||||||
|  | 								if (opt.select) { | ||||||
|  | 									// 处理下拉框选项 | ||||||
|  | 									const list = | ||||||
|  | 										'list' in response.data | ||||||
|  | 											? response.data.list | ||||||
|  | 											: response.data; | ||||||
|  | 									this.$set( | ||||||
|  | 										this.optionListOf, | ||||||
|  | 										opt.prop, | ||||||
|  | 										list.map((item) => ({ | ||||||
|  | 											label: item[opt.labelKey ?? 'name'], | ||||||
|  | 											value: item[opt.valueKey ?? 'id'], | ||||||
|  | 										})) | ||||||
|  | 									); | ||||||
|  | 								} else if (opt.input) { | ||||||
|  | 									console.log('setting code: ', response.data); | ||||||
|  | 									// 处理输入框数据 | ||||||
|  | 									this.form[opt.prop] = response.data; | ||||||
|  | 								} | ||||||
|  | 							}); | ||||||
|  | 						} | ||||||
|  | 					} | ||||||
|  | 				}); | ||||||
|  | 			}); | ||||||
|  |  | ||||||
|  | 			console.log('[dialogForm:handleOptions] done!'); | ||||||
|  |  | ||||||
|  | 			// 如果是 watch 触发的,不需要执行进一步的请求 | ||||||
|  | 			if (trigger == 'watch') { | ||||||
|  | 				this.formLoading = false; | ||||||
|  | 				return; | ||||||
|  | 			} | ||||||
|  | 			try { | ||||||
|  | 				await Promise.all(promiseList.map((fn) => fn())); | ||||||
|  | 				this.formLoading = false; | ||||||
|  | 				this.dataLoaded = true; | ||||||
|  | 				// console.log("[dialogForm:handleOptions:optionListOf]", this.optionListOf) | ||||||
|  | 			} catch (error) { | ||||||
|  | 				console.log('[dialogForm:handleOptions:error]', error); | ||||||
|  | 				this.formLoading = false; | ||||||
|  | 			} | ||||||
|  | 			if (!promiseList.length) this.formLoading = false; | ||||||
|  | 		}, | ||||||
|  | 		// 上传成功的特殊处理 | ||||||
|  | 		beforeUpload() {}, | ||||||
|  | 		// 上传前的验证规则可通过 bind 属性传入 | ||||||
|  | 		handleUploadSuccess(response, file, fileList) { | ||||||
|  | 			console.log( | ||||||
|  | 				'[dialogForm:handleUploadSuccess]', | ||||||
|  | 				response, | ||||||
|  | 				file, | ||||||
|  | 				fileList, | ||||||
|  | 				this.form | ||||||
|  | 			); | ||||||
|  | 			// 保存原始文件名 | ||||||
|  | 			if ('fileNames' in this.form) this.form.fileNames.push(file.name); | ||||||
|  | 			// 保存完整地址 | ||||||
|  | 			if ('fileUrls' in this.form) this.form.fileUrls.push(response.data); | ||||||
|  | 			this.$modal.msgSuccess('上传成功'); | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		getFileName(fileUrl) { | ||||||
|  | 			return fileUrl.split('/').pop(); | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | }; | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style scoped lang="scss"> | ||||||
|  | .el-date-editor, | ||||||
|  | .el-select { | ||||||
|  | 	width: 100%; | ||||||
|  | } | ||||||
|  | </style> | ||||||
| @@ -1,32 +0,0 @@ | |||||||
| <!--  |  | ||||||
|     filename: EquipmentAssets.vue |  | ||||||
|     author: liubin |  | ||||||
|     date: 2023-08-22 11:11:18 |  | ||||||
|     description: 设备资产 |  | ||||||
| --> |  | ||||||
|  |  | ||||||
| <template> |  | ||||||
|     <div class="equipment-assets"></div> |  | ||||||
| </template> |  | ||||||
|  |  | ||||||
| <script> |  | ||||||
| export default { |  | ||||||
|     name: "EquipmentAssets", |  | ||||||
|     components: {}, |  | ||||||
|     props: {}, |  | ||||||
|     data() { |  | ||||||
|         return {} |  | ||||||
|     }, |  | ||||||
|     computed: {}, |  | ||||||
|     methods: {}, |  | ||||||
| } |  | ||||||
| </script> |  | ||||||
|  |  | ||||||
| <style scoped lang="scss"> |  | ||||||
| .equipment-assets { |  | ||||||
|     background: #f1f1f1; |  | ||||||
|     padding: 12px; |  | ||||||
|     min-height: 128px; |  | ||||||
|     margin-top: 8px; |  | ||||||
| } |  | ||||||
| </style> |  | ||||||
| @@ -29,23 +29,28 @@ | |||||||
| 				<section v-for="(section, index) in sections" :key="section.key"> | 				<section v-for="(section, index) in sections" :key="section.key"> | ||||||
| 					<SmallTitle v-if="index != 0">{{ section.name }}</SmallTitle> | 					<SmallTitle v-if="index != 0">{{ section.name }}</SmallTitle> | ||||||
|  |  | ||||||
| 					<div class="form-part" v-if="section.key == 'base'"> | 					<div | ||||||
|  | 						class="form-part" | ||||||
|  | 						v-if="section.key == 'base'" | ||||||
|  | 						style="margin-bottom: 32px"> | ||||||
| 						<el-skeleton v-if="!showForm" animated /> | 						<el-skeleton v-if="!showForm" animated /> | ||||||
| 						<DialogForm | 						<EquipmentInfoForm | ||||||
| 							key="drawer-dialog-form" | 							key="drawer-dialog-form" | ||||||
| 							v-if="showForm" | 							v-if="showForm" | ||||||
| 							ref="form" | 							:disabled="mode.includes('detail')" | ||||||
| 							:dataForm="form" | 							:sync-filelist="syncFileListFlag" | ||||||
| 							:rows="formRows" /> | 							v-model="form" /> | ||||||
| 					</div> | 					</div> | ||||||
|  |  | ||||||
| 					<div v-if="section.key == 'attrs'" style="margin-top: 12px"> | 					<div v-if="section.key == 'attrs'" style="margin-top: 12px"> | ||||||
| 						<base-table | 						<base-table | ||||||
| 							v-loading="attrListLoading" | 							v-loading="attrListLoading" | ||||||
| 							:table-props="section.props" | 							:table-props="section.props" | ||||||
| 							:page="section.pageNo || 1" | 							:page="attrQuery?.params.pageNo || 1" | ||||||
| 							:limit="section.pageSize || 10" | 							:limit="attrQuery?.params.pageSize || 10" | ||||||
| 							:table-data="list" | 							:table-data="list" | ||||||
|  | 							:add-button-show="mode.includes('detail') ? null : '添加属性'" | ||||||
|  | 							@emitButtonClick="handleAddAttr" | ||||||
| 							@emitFun="handleEmitFun"> | 							@emitFun="handleEmitFun"> | ||||||
| 							<method-btn | 							<method-btn | ||||||
| 								v-if="section.tableBtn" | 								v-if="section.tableBtn" | ||||||
| @@ -54,27 +59,31 @@ | |||||||
| 								:method-list="tableBtn" | 								:method-list="tableBtn" | ||||||
| 								@clickBtn="handleTableBtnClick" /> | 								@clickBtn="handleTableBtnClick" /> | ||||||
| 						</base-table> | 						</base-table> | ||||||
|  |  | ||||||
|  | 						<!-- 分页组件 --> | ||||||
|  | 						<pagination | ||||||
|  | 							v-show="total > 0" | ||||||
|  | 							:total="total" | ||||||
|  | 							:page.sync="attrQuery.params.pageNo" | ||||||
|  | 							:limit.sync="attrQuery.params.pageSize" | ||||||
|  | 							@pagination="getAttrList" /> | ||||||
| 					</div> | 					</div> | ||||||
| 				</section> | 				</section> | ||||||
| 			</div> | 			</div> | ||||||
|  |  | ||||||
| 			<div class="drawer-body__footer"> | 			<div class="drawer-body__footer"> | ||||||
| 				<el-button style="margin-right: 10px" @click="handleCancel"> | 				<el-button style="" @click="handleCancel">取消</el-button> | ||||||
| 					返回 |  | ||||||
| 				</el-button> |  | ||||||
| 				<el-button v-if="mode == 'detail'" type="primary" @click="toggleEdit"> | 				<el-button v-if="mode == 'detail'" type="primary" @click="toggleEdit"> | ||||||
| 					编辑 | 					编辑 | ||||||
| 				</el-button> | 				</el-button> | ||||||
| 				<span v-else> | 				<el-button v-else type="primary" @click="handleConfirm">确定</el-button> | ||||||
| 					<el-button type="primary" @click="handleSave">保存</el-button> |  | ||||||
| 				<!-- sections的第二项必须是 属性列表  --> | 				<!-- sections的第二项必须是 属性列表  --> | ||||||
| 					<el-button | 				<!-- <el-button | ||||||
| 						v-if="sections[1].allowAdd" | 						v-if="sections[1].allowAdd" | ||||||
| 						type="primary" | 						type="primary" | ||||||
| 						@click="handleAddAttr"> | 						@click="handleAddAttr"> | ||||||
| 						添加属性 | 						添加属性 | ||||||
| 					</el-button> | 					</el-button> --> | ||||||
| 				</span> |  | ||||||
| 			</div> | 			</div> | ||||||
| 		</div> | 		</div> | ||||||
|  |  | ||||||
| @@ -99,11 +108,13 @@ | |||||||
| </template> | </template> | ||||||
|  |  | ||||||
| <script> | <script> | ||||||
| import DialogForm from '@/components/DialogForm'; | import DialogForm from './DialogForm'; | ||||||
|  | import EquipmentInfoForm from './EquipmentInfoForm.vue'; | ||||||
|  |  | ||||||
| const SmallTitle = { | const SmallTitle = { | ||||||
| 	name: 'SmallTitle', | 	name: 'SmallTitle', | ||||||
| 	props: ['size'], | 	props: ['size'], | ||||||
|  | 	components: {}, | ||||||
| 	data() { | 	data() { | ||||||
| 		return {}; | 		return {}; | ||||||
| 	}, | 	}, | ||||||
| @@ -127,12 +138,13 @@ const SmallTitle = { | |||||||
| }; | }; | ||||||
|  |  | ||||||
| export default { | export default { | ||||||
| 	components: { SmallTitle, DialogForm }, | 	components: { SmallTitle, DialogForm, EquipmentInfoForm }, | ||||||
| 	props: ['sections', 'mode', 'dataId'], // dataId 作为一个通用的存放id的字段 | 	props: ['sections', 'mode', 'dataId'], // dataId 作为一个通用的存放id的字段 | ||||||
| 	data() { | 	data() { | ||||||
| 		return { | 		return { | ||||||
| 			visible: false, | 			visible: false, | ||||||
| 			showForm: false, | 			showForm: false, | ||||||
|  | 			btnLoading: false, | ||||||
| 			total: 0, | 			total: 0, | ||||||
| 			form: {}, | 			form: {}, | ||||||
| 			list: [], | 			list: [], | ||||||
| @@ -161,10 +173,16 @@ export default { | |||||||
| 					}, | 					}, | ||||||
| 				], | 				], | ||||||
| 			], | 			], | ||||||
| 			attrQuery: null, // 属性列表的请求 | 			attrQuery: { | ||||||
|  | 				params: { | ||||||
|  | 					pageNo: 1, | ||||||
|  | 					pageSize: 10, | ||||||
|  | 				}, | ||||||
|  | 			}, // 属性列表的请求 | ||||||
| 			infoQuery: null, // 基本信息的请求 | 			infoQuery: null, // 基本信息的请求 | ||||||
| 			attrFormSubmitting: false, | 			attrFormSubmitting: false, | ||||||
| 			attrListLoading: false, | 			attrListLoading: false, | ||||||
|  | 			syncFileListFlag: null, | ||||||
| 		}; | 		}; | ||||||
| 	}, | 	}, | ||||||
| 	computed: { | 	computed: { | ||||||
| @@ -175,15 +193,19 @@ export default { | |||||||
| 						// 重置图片的位置 | 						// 重置图片的位置 | ||||||
| 						return { | 						return { | ||||||
| 							...col, | 							...col, | ||||||
|  | 							bind: { | ||||||
|  | 								...col.bind, | ||||||
|  | 							}, | ||||||
| 							style: { | 							style: { | ||||||
| 								left: 0, | 								left: 0, | ||||||
| 								right: 'unset' | 								right: 'unset', | ||||||
| 							} | 							}, | ||||||
| 						} | 						}; | ||||||
| 					} | 					} | ||||||
| 					return { | 					return { | ||||||
| 						...col, | 						...col, | ||||||
| 						bind: { | 						bind: { | ||||||
|  | 							...col.bind, | ||||||
| 							// 详情 模式下,禁用各种输入 | 							// 详情 模式下,禁用各种输入 | ||||||
| 							disabled: this.mode == 'detail', | 							disabled: this.mode == 'detail', | ||||||
| 						}, | 						}, | ||||||
| @@ -208,9 +230,52 @@ export default { | |||||||
| 				this.$axios(query).then(({ data }) => { | 				this.$axios(query).then(({ data }) => { | ||||||
| 					if (section.key == 'base') { | 					if (section.key == 'base') { | ||||||
| 						this.form = data; | 						this.form = data; | ||||||
|  | 						// this.form = { | ||||||
|  | 						// 	code: 'gj', | ||||||
|  | 						// 	name: '下片机', | ||||||
|  | 						// 	enName: 'unload', | ||||||
|  | 						// 	abbr: '', | ||||||
|  | 						// 	equipmentTypeId: 21084, | ||||||
|  | 						// 	remark: '备注', | ||||||
|  | 						// 	id: '1712367395052384257', | ||||||
|  | 						// 	createTime: 1697095176000, | ||||||
|  | 						// 	enterTime: 0, | ||||||
|  | 						// 	productionTime: 0, | ||||||
|  | 						// 	files: [ | ||||||
|  | 						// 		{ | ||||||
|  | 						// 			fileName: '测试.xlsx', | ||||||
|  | 						// 			fileUrl: 'https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0108%2F0f0c6f30j00r5cle9000sc000hs00gtc.jpg&thumbnail=660x2147483647&quality=80&type=jpg', | ||||||
|  | 						// 			fileType: 1 | ||||||
|  | 						// 		}, | ||||||
|  | 						// 		{ | ||||||
|  | 						// 			fileName: '测试2.xlsx', | ||||||
|  | 						// 			fileUrl: 'https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0415%2F2cd23619j00racb96000kc000hs00hsc.jpg&thumbnail=660x2147483647&quality=80&type=jpg', | ||||||
|  | 						// 			fileType: 1 | ||||||
|  | 						// 		}, | ||||||
|  | 						// 		{ | ||||||
|  | 						// 			fileName: '测试3.xlsx', | ||||||
|  | 						// 			fileUrl: 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fsafe-img.xhscdn.com%2Fbw1%2F1fea91a0-d088-409e-b145-e0e61254b28b%3FimageView2%2F2%2Fw%2F1080%2Fformat%2Fjpg&refer=http%3A%2F%2Fsafe-img.xhscdn.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1700031689&t=2e0fe7d1de7f54adff3007efe133d67c', | ||||||
|  | 						// 			fileType: 1 | ||||||
|  | 						// 		}, | ||||||
|  | 						// 		{ | ||||||
|  | 						// 			fileName: '测试4.xlsx', | ||||||
|  | 						// 			fileUrl: 'https://pics5.baidu.com/feed/b7003af33a87e950cdfb4b4546eed044faf2b40d.jpeg?token=1d7484cfe4b014dd201f8c8725cab945', | ||||||
|  | 						// 			fileType: 2 | ||||||
|  | 						// 		}, | ||||||
|  | 						// 		{ | ||||||
|  | 						// 			fileName: '测试5.xlsx', | ||||||
|  | 						// 			fileUrl: 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fsafe-img.xhscdn.com%2Fbw1%2Fe3500876-9c46-4b70-8d37-4799520cdd13%3FimageView2%2F2%2Fw%2F1080%2Fformat%2Fjpg&refer=http%3A%2F%2Fsafe-img.xhscdn.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1700031689&t=4abc1df930e62730e5361a7d3765e0f2', | ||||||
|  | 						// 			fileType: 2 | ||||||
|  | 						// 		}, | ||||||
|  | 						// 	], | ||||||
|  | 						// 	tvalue: 0, | ||||||
|  | 						// 	processingTime: 0, | ||||||
|  | 						// 	manufacturer: '', | ||||||
|  | 						// 	spec: '', | ||||||
|  | 						// 	description: '描述', | ||||||
|  | 						// }; | ||||||
| 						this.showForm = true; | 						this.showForm = true; | ||||||
| 						this.infoQuery = query; | 						this.infoQuery = query; | ||||||
| 						console.log('setting form: ', this.form, data); |  | ||||||
| 					} else if (section.key == 'attrs') { | 					} else if (section.key == 'attrs') { | ||||||
| 						this.attrQuery = query; | 						this.attrQuery = query; | ||||||
| 						this.list = data.list; | 						this.list = data.list; | ||||||
| @@ -231,6 +296,25 @@ export default { | |||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
| 		}, | 		}, | ||||||
|  | 		async handleConfirm() { | ||||||
|  | 			this.btnLoading = true; | ||||||
|  | 			this.syncFileListFlag = Math.random(); | ||||||
|  |  | ||||||
|  | 			this.$nextTick(async () => { | ||||||
|  | 				const { code, data } = await this.$axios({ | ||||||
|  | 					url: this.sections[0].urlUpdate, | ||||||
|  | 					method: 'put', | ||||||
|  | 					data: this.form, | ||||||
|  | 				}); | ||||||
|  | 				if (code == 0) { | ||||||
|  | 					this.$modal.msgSuccess('更新成功'); | ||||||
|  |           this.$emit('refreshDataList'); | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				this.btnLoading = false; | ||||||
|  | 				this.handleCancel(); | ||||||
|  | 			}); | ||||||
|  | 		}, | ||||||
|  |  | ||||||
| 		handleEmitFun(val) { | 		handleEmitFun(val) { | ||||||
| 			console.log('handleEmitFun', val); | 			console.log('handleEmitFun', val); | ||||||
| @@ -273,12 +357,12 @@ export default { | |||||||
|  |  | ||||||
| 		// 开启编辑 | 		// 开启编辑 | ||||||
| 		toggleEdit() { | 		toggleEdit() { | ||||||
| 			this.mode = 'edit'; | 			this.$emit('update-mode', 'edit'); | ||||||
| 		}, | 		}, | ||||||
|  |  | ||||||
| 		// 新增属性 | 		// 新增属性 | ||||||
| 		handleAddAttr() { | 		handleAddAttr() { | ||||||
| 			if (!this.dataId) return this.$message.error('请先创建设备信息'); | 			if (!this.dataId) return this.$message.warning('请先创建设备信息'); | ||||||
| 			this.attrForm = { | 			this.attrForm = { | ||||||
| 				id: null, | 				id: null, | ||||||
| 				equipmentId: this.dataId, | 				equipmentId: this.dataId, | ||||||
| @@ -331,17 +415,19 @@ export default { | |||||||
| 		}, | 		}, | ||||||
|  |  | ||||||
| 		// 提交属性表 | 		// 提交属性表 | ||||||
| 		async submitAttrForm() { | 		submitAttrForm() { | ||||||
| 			this.$refs['attrForm'].validate((valid) => { | 			this.$refs['attrForm'].validate(async (valid) => { | ||||||
| 				if (!valid) { | 				if (!valid) { | ||||||
| 					return; | 					return; | ||||||
| 				} | 				} | ||||||
| 			}); |  | ||||||
| 			console.log('this.attrform', this.attrForm); | 				try { | ||||||
| 					const isEdit = this.attrForm.id != null; | 					const isEdit = this.attrForm.id != null; | ||||||
| 					this.attrFormSubmitting = true; | 					this.attrFormSubmitting = true; | ||||||
| 					const res = await this.$axios({ | 					const res = await this.$axios({ | ||||||
| 				url: isEdit ? this.sections[1].urlUpdate : this.sections[1].urlCreate, | 						url: isEdit | ||||||
|  | 							? this.sections[1].urlUpdate | ||||||
|  | 							: this.sections[1].urlCreate, | ||||||
| 						method: isEdit ? 'put' : 'post', | 						method: isEdit ? 'put' : 'post', | ||||||
| 						data: this.attrForm, | 						data: this.attrForm, | ||||||
| 					}); | 					}); | ||||||
| @@ -358,6 +444,15 @@ export default { | |||||||
| 						}); | 						}); | ||||||
| 					} | 					} | ||||||
| 					this.attrFormSubmitting = false; | 					this.attrFormSubmitting = false; | ||||||
|  | 				} catch (err) { | ||||||
|  | 					this.$message({ | ||||||
|  | 						message: err, | ||||||
|  | 						type: 'error', | ||||||
|  | 						duration: 1500, | ||||||
|  | 					}); | ||||||
|  | 					this.attrFormSubmitting = false; | ||||||
|  | 				} | ||||||
|  | 			}); | ||||||
| 		}, | 		}, | ||||||
|  |  | ||||||
| 		closeAttrForm() { | 		closeAttrForm() { | ||||||
|   | |||||||
							
								
								
									
										338
									
								
								src/views/core/base/equipment/components/EquipmentInfoForm.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,338 @@ | |||||||
|  | <!-- | ||||||
|  |     filename: dialogForm.vue | ||||||
|  |     author: liubin | ||||||
|  |     date: 2023-08-15 10:32:36 | ||||||
|  |     description: 弹窗的表单组件 | ||||||
|  | --> | ||||||
|  |  | ||||||
|  | <template> | ||||||
|  | 	<el-form | ||||||
|  | 		class="equipment-info-form" | ||||||
|  | 		ref="form" | ||||||
|  | 		:model="form" | ||||||
|  | 		label-width="200px" | ||||||
|  | 		label-position="top" | ||||||
|  | 		v-loading="formLoading"> | ||||||
|  | 		<el-row :gutter="20"> | ||||||
|  | 			<el-col :span="8"> | ||||||
|  | 				<el-form-item | ||||||
|  | 					label="设备名称" | ||||||
|  | 					prop="name" | ||||||
|  | 					:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]"> | ||||||
|  | 					<el-input | ||||||
|  | 						v-model="form.name" | ||||||
|  | 						:disabled="disabled" | ||||||
|  | 						placeholder="请输入设备名称"></el-input> | ||||||
|  | 				</el-form-item> | ||||||
|  | 			</el-col> | ||||||
|  | 			<el-col :span="8"> | ||||||
|  | 				<el-form-item label="设备编码" prop="code" :rules="[]"> | ||||||
|  | 					<el-input | ||||||
|  | 						v-model="form.code" | ||||||
|  | 						:disabled="disabled" | ||||||
|  | 						placeholder="请输入设备编码"></el-input> | ||||||
|  | 				</el-form-item> | ||||||
|  | 			</el-col> | ||||||
|  | 			<el-col :span="8"> | ||||||
|  | 				<el-form-item label="英文名称" prop="enName" :rules="[]"> | ||||||
|  | 					<el-input | ||||||
|  | 						v-model="form.enName" | ||||||
|  | 						:disabled="disabled" | ||||||
|  | 						placeholder="请输入英文名称"></el-input> | ||||||
|  | 				</el-form-item> | ||||||
|  | 			</el-col> | ||||||
|  | 		</el-row> | ||||||
|  | 		<el-row :gutter="20"> | ||||||
|  | 			<el-col :span="8"> | ||||||
|  | 				<el-form-item label="缩写" prop="abbr" :rules="[]"> | ||||||
|  | 					<el-input | ||||||
|  | 						v-model="form.abbr" | ||||||
|  | 						:disabled="disabled" | ||||||
|  | 						placeholder="请输入名称缩写"></el-input> | ||||||
|  | 				</el-form-item> | ||||||
|  | 			</el-col> | ||||||
|  | 			<el-col :span="8"> | ||||||
|  | 				<el-form-item label="设备类型" prop="equipmentTypeId" :rules="[]"> | ||||||
|  | 					<el-select | ||||||
|  | 						v-model="form.equipmentTypeId" | ||||||
|  | 						:disabled="disabled" | ||||||
|  | 						filterable | ||||||
|  |             clearable | ||||||
|  | 						placeholder="请选择设备类型"> | ||||||
|  | 						<el-option | ||||||
|  | 							v-for="eqType in eqTypeList" | ||||||
|  | 							:key="eqType.id" | ||||||
|  | 							:label="eqType.name" | ||||||
|  | 							:value="eqType.id"></el-option> | ||||||
|  | 					</el-select> | ||||||
|  | 				</el-form-item> | ||||||
|  | 			</el-col> | ||||||
|  | 			<el-col :span="8"> | ||||||
|  | 				<el-form-item label="备注" prop="remark" :rules="[]"> | ||||||
|  | 					<el-input | ||||||
|  | 						v-model="form.remark" | ||||||
|  | 						:disabled="disabled" | ||||||
|  | 						placeholder="请输入备注"></el-input> | ||||||
|  | 				</el-form-item> | ||||||
|  | 			</el-col> | ||||||
|  | 		</el-row> | ||||||
|  | 		<el-row :gutter="20"> | ||||||
|  | 			<el-col :span="8"> | ||||||
|  | 				<el-form-item label="生产日期" prop="productionTime" :rules="[]"> | ||||||
|  | 					<el-date-picker | ||||||
|  | 						v-model="form.productionTime" | ||||||
|  | 						:disabled="disabled" | ||||||
|  | 						type="date" | ||||||
|  | 						placeholder="请选择生产日期" | ||||||
|  | 						value-format="timestamp"></el-date-picker> | ||||||
|  | 				</el-form-item> | ||||||
|  | 			</el-col> | ||||||
|  | 			<el-col :span="8"> | ||||||
|  | 				<el-form-item label="进场日期" prop="enterTime" :rules="[]"> | ||||||
|  | 					<el-date-picker | ||||||
|  | 						v-model="form.enterTime" | ||||||
|  | 						:disabled="disabled" | ||||||
|  | 						type="date" | ||||||
|  | 						placeholder="请选择进场日期" | ||||||
|  | 						value-format="timestamp"></el-date-picker> | ||||||
|  | 				</el-form-item> | ||||||
|  | 			</el-col> | ||||||
|  | 			<el-col :span="8"> | ||||||
|  | 				<el-form-item | ||||||
|  | 					label="设备理论生产能效(片/min)" | ||||||
|  | 					prop="tvalue" | ||||||
|  | 					:rules="[ | ||||||
|  | 						{ required: true, message: '不能为空', trigger: 'blur' }, | ||||||
|  | 						{ | ||||||
|  | 							type: 'number', | ||||||
|  | 							message: '请输入正确的数字值', | ||||||
|  | 							trigger: 'blur', | ||||||
|  | 							transform: (val) => Number(val), | ||||||
|  | 						}, | ||||||
|  | 					]"> | ||||||
|  | 					<el-input | ||||||
|  | 						v-model="form.tvalue" | ||||||
|  | 						:disabled="disabled" | ||||||
|  | 						placeholder="请输入"></el-input> | ||||||
|  | 				</el-form-item> | ||||||
|  | 			</el-col> | ||||||
|  | 		</el-row> | ||||||
|  | 		<el-row :gutter="20"> | ||||||
|  | 			<el-col :span="8"> | ||||||
|  | 				<el-form-item | ||||||
|  | 					label="产品加工时间(s)" | ||||||
|  | 					prop="processingTime" | ||||||
|  | 					:rules="[ | ||||||
|  | 						{ required: true, message: '不能为空', trigger: 'blur' }, | ||||||
|  | 						{ | ||||||
|  | 							type: 'number', | ||||||
|  | 							message: '请输入正确的数字值', | ||||||
|  | 							trigger: 'blur', | ||||||
|  | 							transform: (val) => Number(val), | ||||||
|  | 						}, | ||||||
|  | 					]"> | ||||||
|  | 					<el-input | ||||||
|  | 						v-model="form.processingTime" | ||||||
|  | 						:disabled="disabled" | ||||||
|  | 						placeholder="请输入产品加工时间"></el-input> | ||||||
|  | 				</el-form-item> | ||||||
|  | 			</el-col> | ||||||
|  | 			<el-col :span="8"> | ||||||
|  | 				<el-form-item label="制造商" prop="manufacturer" :rules="[]"> | ||||||
|  | 					<el-input | ||||||
|  | 						v-model="form.manufacturer" | ||||||
|  | 						:disabled="disabled" | ||||||
|  | 						placeholder="请输入制造商"></el-input> | ||||||
|  | 				</el-form-item> | ||||||
|  | 			</el-col> | ||||||
|  | 			<el-col :span="8"> | ||||||
|  | 				<el-form-item label="设备规格" prop="spec" :rules="[]"> | ||||||
|  | 					<el-input | ||||||
|  | 						v-model="form.spec" | ||||||
|  | 						:disabled="disabled" | ||||||
|  | 						placeholder="请输入设备规格"></el-input> | ||||||
|  | 				</el-form-item> | ||||||
|  | 			</el-col> | ||||||
|  | 		</el-row> | ||||||
|  | 		<el-row :gutter="20"> | ||||||
|  | 			<!-- 功能描述  --> | ||||||
|  | 			<el-col> | ||||||
|  | 				<el-form-item label="功能描述" prop="description" :rules="[]"> | ||||||
|  | 					<el-input | ||||||
|  | 						type="textarea" | ||||||
|  | 						:disabled="disabled" | ||||||
|  | 						v-model="form.description" | ||||||
|  | 						placeholder="请填写功能描述"></el-input> | ||||||
|  | 				</el-form-item> | ||||||
|  | 			</el-col> | ||||||
|  | 		</el-row> | ||||||
|  | 		<el-row :gutter="20"> | ||||||
|  | 			<!-- 上传资料  --> | ||||||
|  | 			<el-col> | ||||||
|  | 				<el-form-item label="上传资料" prop="assets" :rules="[]"> | ||||||
|  | 					<AssetsUpload v-model="form.assets" :disabled="disabled" /> | ||||||
|  | 				</el-form-item> | ||||||
|  | 			</el-col> | ||||||
|  | 		</el-row> | ||||||
|  | 		<el-row :gutter="20"> | ||||||
|  | 			<!-- 上传图片  --> | ||||||
|  | 			<el-col> | ||||||
|  | 				<el-form-item label="上传图片" prop="pics" :rules="[]"> | ||||||
|  | 					<AssetsUpload | ||||||
|  | 						:is-pic-mode="true" | ||||||
|  | 						v-model="form.pics" | ||||||
|  | 						:disabled="disabled" /> | ||||||
|  | 				</el-form-item> | ||||||
|  | 			</el-col> | ||||||
|  | 		</el-row> | ||||||
|  | 	</el-form> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import AssetsUpload from './AssetsUpload.vue'; | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	name: 'EquipmentInfoForm', | ||||||
|  |  | ||||||
|  | 	model: { | ||||||
|  | 		prop: 'dataForm', | ||||||
|  | 		event: 'update', | ||||||
|  | 	}, | ||||||
|  |  | ||||||
|  | 	emits: ['update'], | ||||||
|  |  | ||||||
|  | 	components: { AssetsUpload }, | ||||||
|  |  | ||||||
|  | 	props: { | ||||||
|  | 		dataForm: { | ||||||
|  | 			type: Object, | ||||||
|  | 			default: () => ({}), | ||||||
|  | 		}, | ||||||
|  | 		disabled: { | ||||||
|  | 			type: Boolean, | ||||||
|  | 			default: false, | ||||||
|  | 		}, | ||||||
|  | 		syncFilelist: { | ||||||
|  | 			type: Number, | ||||||
|  | 			default: null, | ||||||
|  | 			required: false, | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  |  | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			formLoading: false, | ||||||
|  | 			form: { | ||||||
|  | 				name: '', | ||||||
|  | 				code: '', | ||||||
|  | 				enName: '', | ||||||
|  | 				abbr: '', | ||||||
|  | 				equipmentTypeId: '', | ||||||
|  | 				remark: '', | ||||||
|  | 				productionTime: '', | ||||||
|  | 				enterTime: '', | ||||||
|  | 				tvalue: '', | ||||||
|  | 				processingTime: '', | ||||||
|  | 				manufacturer: '', | ||||||
|  | 				spec: '', | ||||||
|  | 				description: '', | ||||||
|  | 				assets: [], | ||||||
|  | 				pics: [], | ||||||
|  | 			}, | ||||||
|  | 			eqTypeList: [], | ||||||
|  | 			dataLoaded: false, | ||||||
|  | 		}; | ||||||
|  | 	}, | ||||||
|  |  | ||||||
|  | 	watch: { | ||||||
|  | 		dataForm: { | ||||||
|  | 			handler(val) { | ||||||
|  | 				// debugger; | ||||||
|  | 				this.form = JSON.parse(JSON.stringify(val)); | ||||||
|  | 				this.form.assets = | ||||||
|  | 					this.form.files?.filter((item) => item.fileType == '2') || []; | ||||||
|  | 				this.form.pics = | ||||||
|  | 					this.form.files?.filter((item) => item.fileType == '1') || []; | ||||||
|  | 				delete this.form.files; | ||||||
|  | 			}, | ||||||
|  | 			immediate: true, | ||||||
|  | 			deep: true, | ||||||
|  | 		}, | ||||||
|  | 		syncFilelist: { | ||||||
|  | 			handler(val) { | ||||||
|  | 				if (val != null) { | ||||||
|  | 					this.updateForm(); | ||||||
|  | 				} | ||||||
|  | 			}, | ||||||
|  | 			immediate: true, | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  |  | ||||||
|  | 	mounted() { | ||||||
|  | 		this.getEqTypeList(); | ||||||
|  | 	}, | ||||||
|  |  | ||||||
|  | 	methods: { | ||||||
|  | 		updateForm() { | ||||||
|  | 			console.log('update form ==> '); | ||||||
|  | 			this.form.files = [...this.form.assets, ...this.form.pics]; | ||||||
|  | 			delete this.form.assets; | ||||||
|  | 			delete this.form.pics; | ||||||
|  | 			this.$emit('update', this.form); | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		async getEqTypeList() { | ||||||
|  | 			this.formLoading = true; | ||||||
|  | 			const { code, data } = await this.$axios( | ||||||
|  | 				'/base/equipment-type/page?pageNo=1&pageSize=100' | ||||||
|  | 			); | ||||||
|  | 			// debugger; | ||||||
|  | 			if (code == 0) { | ||||||
|  | 				this.eqTypeList = data.list; | ||||||
|  | 			} | ||||||
|  | 			this.formLoading = false; | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		/** 模拟透传 ref  */ | ||||||
|  | 		validate(cb) { | ||||||
|  | 			return this.$refs.form.validate(cb); | ||||||
|  | 		}, | ||||||
|  | 		resetFields(args) { | ||||||
|  | 			return this.$refs.form.resetFields(args); | ||||||
|  | 		}, | ||||||
|  | 		// getCode | ||||||
|  | 		async getCode(url) { | ||||||
|  | 			const response = await this.$axios(url); | ||||||
|  | 			return response.data; | ||||||
|  | 		}, | ||||||
|  | 		// 上传成功的特殊处理 | ||||||
|  | 		beforeUpload() {}, | ||||||
|  | 		// 上传前的验证规则可通过 bind 属性传入 | ||||||
|  | 		handleUploadSuccess(response, file, fileList) { | ||||||
|  | 			console.log( | ||||||
|  | 				'[dialogForm:handleUploadSuccess]', | ||||||
|  | 				response, | ||||||
|  | 				file, | ||||||
|  | 				fileList, | ||||||
|  | 				this.form | ||||||
|  | 			); | ||||||
|  | 			// 保存原始文件名 | ||||||
|  | 			if ('fileNames' in this.form) this.form.fileNames.push(file.name+Date.now()); | ||||||
|  | 			// 保存完整地址 | ||||||
|  | 			if ('fileUrls' in this.form) this.form.fileUrls.push(response.data); | ||||||
|  | 			this.$modal.msgSuccess('上传成功'); | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		getFileName(fileUrl) { | ||||||
|  | 			return fileUrl.split('/').pop(); | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | }; | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style scoped lang="scss"> | ||||||
|  | .el-date-editor, | ||||||
|  | .el-select { | ||||||
|  | 	width: 100%; | ||||||
|  | } | ||||||
|  | </style> | ||||||
| @@ -1,111 +0,0 @@ | |||||||
| <!--  |  | ||||||
|     filename: EquipmentPics.vue |  | ||||||
|     author: liubin |  | ||||||
|     date: 2023-08-18 16:29:39 |  | ||||||
|     description:  |  | ||||||
| --> |  | ||||||
|  |  | ||||||
| <template> |  | ||||||
| 	<div class="equipment-pics"> |  | ||||||
| 		<div v-for="(url, idx) in images" :key="url"> |  | ||||||
| 			<img :src="url" :alt="url" /> |  | ||||||
| 			<figure class="big-img" :style="inlineStyle"> |  | ||||||
| 				<img :src="url" :alt="url" /> |  | ||||||
| 				<figcaption>{{ desc[idx] }}</figcaption> |  | ||||||
| 			</figure> |  | ||||||
| 		</div> |  | ||||||
| 	</div> |  | ||||||
| </template> |  | ||||||
|  |  | ||||||
| <script> |  | ||||||
| export default { |  | ||||||
| 	name: 'EquipmentPics', |  | ||||||
| 	components: {}, |  | ||||||
| 	props: { |  | ||||||
| 		inlineStyle: { |  | ||||||
| 			type: Object, |  | ||||||
| 			default: () => ({}), |  | ||||||
| 		}, |  | ||||||
| 	}, |  | ||||||
| 	data() { |  | ||||||
| 		return { |  | ||||||
| 			desc: [ |  | ||||||
| 				'车间设备 - 1', |  | ||||||
| 				'车间设备 - 2', |  | ||||||
| 				'车间设备 - 3', |  | ||||||
| 				'车间设备 - 4', |  | ||||||
| 				'车间设备 - 5', |  | ||||||
| 				'车间设备 - 6', |  | ||||||
| 				'车间设备 - 7', |  | ||||||
| 				'车间设备 - 8', |  | ||||||
| 				'车间设备 - 9', |  | ||||||
| 				'车间设备 - 10', |  | ||||||
| 				'车间设备 - 11', |  | ||||||
| 				'车间设备 - 12', |  | ||||||
| 			], |  | ||||||
| 			images: Array(10) |  | ||||||
| 				.fill(1) |  | ||||||
| 				.map((_, index) => require(`../assets/eq${index + 1}.jpg`)), |  | ||||||
| 		}; |  | ||||||
| 	}, |  | ||||||
| 	methods: {}, |  | ||||||
| }; |  | ||||||
| </script> |  | ||||||
|  |  | ||||||
| <style scoped lang="scss"> |  | ||||||
| .equipment-pics { |  | ||||||
| 	// background: #cfcfcf; |  | ||||||
| 	padding: 12px; |  | ||||||
| 	// margin: 8px; |  | ||||||
| 	display: flex; |  | ||||||
| 	overflow-x: auto; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .equipment-pics > div { |  | ||||||
| 	height: 100px; |  | ||||||
| 	position: relative; |  | ||||||
| 	cursor: pointer; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .equipment-pics > div:not(:last-child) { |  | ||||||
| 	margin-right: 12px; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .equipment-pics > div > img { |  | ||||||
| 	height: 95%; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .equipment-pics > div > figure { |  | ||||||
| 	display: none; |  | ||||||
| 	position: fixed; |  | ||||||
| 	// inset: 0; |  | ||||||
| 	// margin: auto; |  | ||||||
| 	top: 0; |  | ||||||
| 	right: 0; |  | ||||||
| 	// width: 640px; |  | ||||||
| 	// height: 480px; |  | ||||||
| 	background: #000; |  | ||||||
| 	overflow: hidden; |  | ||||||
| 	padding: 8px 8px 0; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .equipment-pics > div:hover > figure { |  | ||||||
| 	margin: 0; |  | ||||||
| 	display: flex; |  | ||||||
| 	flex-direction: column; |  | ||||||
| 	align-items: center; |  | ||||||
| 	justify-content: center; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .equipment-pics > div > figure > img { |  | ||||||
| 	flex: 1; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .equipment-pics > div > figure > figcaption { |  | ||||||
| 	height: 24px; |  | ||||||
| 	margin-top: 8px; |  | ||||||
| 	font-size: 18px; |  | ||||||
| 	line-height: 1; |  | ||||||
| 	color: #fff; |  | ||||||
| } |  | ||||||
| </style> |  | ||||||
| @@ -36,13 +36,17 @@ | |||||||
| 			:dialogVisible="open" | 			:dialogVisible="open" | ||||||
| 			@close="cancel" | 			@close="cancel" | ||||||
| 			@cancel="cancel" | 			@cancel="cancel" | ||||||
|  | 			width="60%" | ||||||
| 			@confirm="submitForm"> | 			@confirm="submitForm"> | ||||||
| 			<DialogForm | 			<DialogForm1 | ||||||
| 				v-if="open" | 				v-if="open" | ||||||
| 				key="index-dialog-form" | 				key="index-dialog-form" | ||||||
| 				ref="form" | 				ref="form" | ||||||
| 				:dataForm="form" | 				label-position="top" | ||||||
| 				:rows="rows" /> | 				size="small" | ||||||
|  | 				v-model="form" | ||||||
|  | 				:rows="computedRows" | ||||||
|  | 				:has-file="true" /> | ||||||
| 		</base-dialog> | 		</base-dialog> | ||||||
|  |  | ||||||
| 		<!-- 设备 详情 - 编辑 --> | 		<!-- 设备 详情 - 编辑 --> | ||||||
| @@ -50,12 +54,13 @@ | |||||||
| 			v-if="editVisible" | 			v-if="editVisible" | ||||||
| 			ref="drawer" | 			ref="drawer" | ||||||
| 			:mode="editMode" | 			:mode="editMode" | ||||||
|  | 			@update-mode="editMode = $event" | ||||||
| 			:data-id="form.id" | 			:data-id="form.id" | ||||||
| 			:sections="[ | 			:sections="[ | ||||||
| 				{ | 				{ | ||||||
| 					name: '基本信息', | 					name: '基本信息', | ||||||
| 					key: 'base', | 					key: 'base', | ||||||
| 					rows: rows, | 					rows: computedRows, | ||||||
| 					url: '/base/equipment/get', | 					url: '/base/equipment/get', | ||||||
| 					urlUpdate: '/base/equipment/update', | 					urlUpdate: '/base/equipment/update', | ||||||
| 					urlCreate: '/base/equipment/create', | 					urlCreate: '/base/equipment/create', | ||||||
| @@ -73,7 +78,7 @@ | |||||||
| 					queryParams: { | 					queryParams: { | ||||||
| 						equipmentId: form.id, | 						equipmentId: form.id, | ||||||
| 						pageNo: 1, | 						pageNo: 1, | ||||||
| 						pageSize: 10, | 						pageSize: 20, | ||||||
| 					}, | 					}, | ||||||
| 					tableBtn: [ | 					tableBtn: [ | ||||||
| 						this.$auth.hasPermi('base:equipment-attr:update') | 						this.$auth.hasPermi('base:equipment-attr:update') | ||||||
| @@ -93,18 +98,16 @@ | |||||||
| 				}, | 				}, | ||||||
| 			]" | 			]" | ||||||
| 			@refreshDataList="getList" | 			@refreshDataList="getList" | ||||||
| 			@cancel="editVisible = false" | 			@cancel="cancelEdit" | ||||||
| 			@destroy="editVisible = false" /> | 			@destroy="cancelEdit" /> | ||||||
| 	</div> | 	</div> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
| <script> | <script> | ||||||
| import moment from 'moment'; | import moment from 'moment'; | ||||||
| import basicPageMixin from '@/mixins/lb/basicPageMixin'; | import basicPageMixin from '@/mixins/lb/basicPageMixin'; | ||||||
| import { getAccessToken } from '@/utils/auth'; |  | ||||||
| import EquipmentPics from './components/EquipmentPics'; |  | ||||||
| import EquipmentAssets from './components/EquipmentAssets'; |  | ||||||
| import EquipmentDrawer from './components/EquipmentDrawer'; | import EquipmentDrawer from './components/EquipmentDrawer'; | ||||||
|  | import DialogForm1 from './components/DialogForm'; | ||||||
|  |  | ||||||
| import { | import { | ||||||
| 	createEquipment, | 	createEquipment, | ||||||
| @@ -115,18 +118,26 @@ import { | |||||||
| 	exportEquipmentExcel, | 	exportEquipmentExcel, | ||||||
| } from '@/api/base/equipment'; | } from '@/api/base/equipment'; | ||||||
| import Editor from '@/components/Editor'; | import Editor from '@/components/Editor'; | ||||||
|  | import AssetsUpload from './components/AssetsUpload.vue'; | ||||||
|  |  | ||||||
| export default { | export default { | ||||||
| 	name: 'Equipment', | 	name: 'Equipment', | ||||||
| 	components: { | 	components: { | ||||||
| 		Editor, | 		Editor, | ||||||
| 		EquipmentDrawer, | 		EquipmentDrawer, | ||||||
|  | 		DialogForm1, | ||||||
| 	}, | 	}, | ||||||
| 	mixins: [basicPageMixin], | 	mixins: [basicPageMixin], | ||||||
| 	data() { | 	data() { | ||||||
| 		return { | 		return { | ||||||
| 			searchBarKeys: ['name', 'code'], | 			searchBarKeys: ['name', 'code'], | ||||||
| 			tableBtn: [ | 			tableBtn: [ | ||||||
|  | 				this.$auth.hasPermi(`base:equipment:update`) | ||||||
|  | 					? { | ||||||
|  | 							type: 'detail', | ||||||
|  | 							btnName: '详情', | ||||||
|  | 					  } | ||||||
|  | 					: undefined, | ||||||
| 				this.$auth.hasPermi('base:equipment:update') | 				this.$auth.hasPermi('base:equipment:update') | ||||||
| 					? { | 					? { | ||||||
| 							type: 'edit', | 							type: 'edit', | ||||||
| @@ -139,12 +150,6 @@ export default { | |||||||
| 							btnName: '删除', | 							btnName: '删除', | ||||||
| 					  } | 					  } | ||||||
| 					: undefined, | 					: undefined, | ||||||
| 				this.$auth.hasPermi(`base:equipment:update`) |  | ||||||
| 					? { |  | ||||||
| 							type: 'detail', |  | ||||||
| 							btnName: '详情', |  | ||||||
| 					  } |  | ||||||
| 					: undefined, |  | ||||||
| 			].filter((v) => v), | 			].filter((v) => v), | ||||||
| 			tableProps: [ | 			tableProps: [ | ||||||
| 				{ | 				{ | ||||||
| @@ -154,8 +159,13 @@ 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: '设备名称' }, | 				{ | ||||||
| 				{ width: 256, prop: 'code', label: '检测编码' }, | 					width: 200, | ||||||
|  | 					showOverflowtooltip: true, | ||||||
|  | 					prop: 'name', | ||||||
|  | 					label: '设备名称', | ||||||
|  | 				}, | ||||||
|  | 				{ width: 256, prop: 'code', label: '设备编码' }, | ||||||
| 				{ prop: 'equipmentType', label: '设备类型' }, | 				{ prop: 'equipmentType', label: '设备类型' }, | ||||||
| 				{ prop: 'enName', label: '英文名称' }, | 				{ prop: 'enName', label: '英文名称' }, | ||||||
| 				{ prop: 'abbr', label: '缩写' }, | 				{ prop: 'abbr', label: '缩写' }, | ||||||
| @@ -208,6 +218,12 @@ export default { | |||||||
| 				{ | 				{ | ||||||
| 					type: 'separate', | 					type: 'separate', | ||||||
| 				}, | 				}, | ||||||
|  | 				{ | ||||||
|  | 					type: this.$auth.hasPermi('base:equipment:export') ? 'button' : '', | ||||||
|  | 					btnName: '导出', | ||||||
|  | 					name: 'export', | ||||||
|  | 					color: 'warning', | ||||||
|  | 				}, | ||||||
| 				{ | 				{ | ||||||
| 					type: this.$auth.hasPermi('base:equipment:create') ? 'button' : '', | 					type: this.$auth.hasPermi('base:equipment:create') ? 'button' : '', | ||||||
| 					btnName: '新增', | 					btnName: '新增', | ||||||
| @@ -215,12 +231,6 @@ export default { | |||||||
| 					plain: true, | 					plain: true, | ||||||
| 					color: 'success', | 					color: 'success', | ||||||
| 				}, | 				}, | ||||||
| 				{ |  | ||||||
| 					type: this.$auth.hasPermi('base:equipment:export') ? 'button' : '', |  | ||||||
| 					btnName: '导出', |  | ||||||
| 					name: 'export', |  | ||||||
| 					color: 'warning', |  | ||||||
| 				}, |  | ||||||
| 			], | 			], | ||||||
| 			rows: [ | 			rows: [ | ||||||
| 				[ | 				[ | ||||||
| @@ -239,8 +249,6 @@ export default { | |||||||
| 						prop: 'code', | 						prop: 'code', | ||||||
| 						url: '/base/equipment/getCode', | 						url: '/base/equipment/getCode', | ||||||
| 					}, | 					}, | ||||||
| 				], |  | ||||||
| 				[ |  | ||||||
| 					{ | 					{ | ||||||
| 						input: true, | 						input: true, | ||||||
| 						label: '英文名称', | 						label: '英文名称', | ||||||
| @@ -250,6 +258,8 @@ export default { | |||||||
| 						// 	disabled: true, // some condition, like detail mode... | 						// 	disabled: true, // some condition, like detail mode... | ||||||
| 						// } | 						// } | ||||||
| 					}, | 					}, | ||||||
|  | 				], | ||||||
|  | 				[ | ||||||
| 					{ | 					{ | ||||||
| 						input: true, | 						input: true, | ||||||
| 						label: '缩写', | 						label: '缩写', | ||||||
| @@ -259,13 +269,16 @@ export default { | |||||||
| 						// 	disabled: true, // some condition, like detail mode... | 						// 	disabled: true, // some condition, like detail mode... | ||||||
| 						// } | 						// } | ||||||
| 					}, | 					}, | ||||||
| 				], |  | ||||||
| 				[ |  | ||||||
| 					{ | 					{ | ||||||
| 						select: true, | 						select: true, | ||||||
| 						label: '设备类型', | 						label: '设备类型', | ||||||
| 						prop: 'equipmentTypeId', | 						prop: 'equipmentTypeId', | ||||||
| 						url: '/base/equipment-type/page?pageNo=1&pageSize=100', | 						url: '/base/equipment-type/page?pageNo=1&pageSize=100', | ||||||
|  | 						bind: { | ||||||
|  | 							filterable: true, | ||||||
|  | 							clearable: true, | ||||||
|  | 						}, | ||||||
| 					}, | 					}, | ||||||
| 					// { | 					// { | ||||||
| 					// 	select: true, | 					// 	select: true, | ||||||
| @@ -286,12 +299,10 @@ export default { | |||||||
| 						label: '进厂日期', | 						label: '进厂日期', | ||||||
| 						prop: 'enterTime', | 						prop: 'enterTime', | ||||||
| 					}, | 					}, | ||||||
| 				], |  | ||||||
| 				[ |  | ||||||
| 					{ | 					{ | ||||||
| 						input: true, | 						input: true, | ||||||
| 						prop: 'tvalue', | 						prop: 'tvalue', | ||||||
| 						label: '设备TT值', | 						label: '设备理论生产能效(片/min)', | ||||||
| 						rules: [ | 						rules: [ | ||||||
| 							{ required: true, message: '不能为空', trigger: 'blur' }, | 							{ required: true, message: '不能为空', trigger: 'blur' }, | ||||||
| 							{ | 							{ | ||||||
| @@ -302,11 +313,14 @@ export default { | |||||||
| 							}, | 							}, | ||||||
| 						], | 						], | ||||||
| 					}, | 					}, | ||||||
|  | 				], | ||||||
|  | 				[ | ||||||
| 					{ | 					{ | ||||||
| 						input: true, | 						input: true, | ||||||
| 						label: '产品加工时间', | 						label: '产品加工时间(s)', | ||||||
| 						prop: 'processingTime', | 						prop: 'processingTime', | ||||||
| 						rules: [ | 						rules: [ | ||||||
|  | 							{ required: true, message: '不能为空', trigger: 'blur' }, | ||||||
| 							{ | 							{ | ||||||
| 								type: 'number', | 								type: 'number', | ||||||
| 								message: '请输入正确的数字值', | 								message: '请输入正确的数字值', | ||||||
| @@ -315,8 +329,7 @@ export default { | |||||||
| 							}, | 							}, | ||||||
| 						], | 						], | ||||||
| 					}, | 					}, | ||||||
| 				], |  | ||||||
| 				[ |  | ||||||
| 					{ | 					{ | ||||||
| 						input: true, | 						input: true, | ||||||
| 						label: '制造商', | 						label: '制造商', | ||||||
| @@ -337,40 +350,79 @@ export default { | |||||||
| 						prop: 'description', | 						prop: 'description', | ||||||
| 					}, | 					}, | ||||||
| 				], | 				], | ||||||
| 				[ | 				// [ | ||||||
| 					{ | 				// 	{ | ||||||
| 						upload: true, | 				// 		assetUpload: true, | ||||||
| 						label: '上传资料', | 				// 		label: '上传资料', | ||||||
| 						prop: 'uploadFiles', | 				// 		fieldName: 'assets', | ||||||
| 						url: process.env.VUE_APP_BASE_API + '/admin-api/infra/file/upload', // 请求地址 | 				// 		subcomponent: AssetsUpload | ||||||
| 						bind: { | 				// 	}, | ||||||
| 							headers: { Authorization: 'Bearer ' + getAccessToken() }, | 				// ], | ||||||
| 							'show-file-list': false, | 				// [ | ||||||
| 						}, | 				// 	{ | ||||||
| 					}, | 				// 		assetUpload: true, | ||||||
| 				], | 				// 		label: '上传图片', | ||||||
| 				[ | 				// 		fieldName: 'images', | ||||||
| 					{ | 				// 		subcomponent: AssetsUpload | ||||||
| 						diy: true, | 				// 	}, | ||||||
| 						key: 'eq-assets', | 				// ], | ||||||
| 						label: '设备资料', | 				// [ | ||||||
| 						prop: 'fileNames', | 				// 	{ | ||||||
| 						subcomponent: EquipmentAssets, | 				// 		upload: true, | ||||||
| 					}, | 				// 		label: '上传资料', | ||||||
| 				], | 				// 		prop: 'uploadFiles', | ||||||
| 				[ | 				// 		url: process.env.VUE_APP_BASE_API + '/admin-api/infra/file/upload', // 请求地址 | ||||||
| 					{ | 				// 		uploadFnName: 'assetsUpload', // 上传方法名 | ||||||
| 						diy: true, | 				// 		bind: { | ||||||
| 						key: 'eq-pics', | 				// 			headers: { Authorization: 'Bearer ' + getAccessToken() }, | ||||||
| 						label: '设备图片', | 				// 			'show-file-list': false, | ||||||
| 						prop: 'fileUrls', | 				// 		}, | ||||||
| 						subcomponent: EquipmentPics, | 				// 	}, | ||||||
| 						pictures: async () => { | 				// 	{ | ||||||
| 							// some async request | 				// 		diy: true, | ||||||
| 							return []; | 				// 		key: 'eq-assets', | ||||||
| 						}, | 				// 		label: '设备资料', | ||||||
| 					}, | 				// 		prop: 'fileNames', | ||||||
| 				], | 				// 		subcomponent: EquipmentAssets, | ||||||
|  | 				// 	}, | ||||||
|  | 				// ], | ||||||
|  | 				// [ | ||||||
|  | 				// { | ||||||
|  | 				// 		upload: true, | ||||||
|  | 				// 		label: '上传图片', | ||||||
|  | 				// 		prop: 'uploadImages', | ||||||
|  | 				// 		url: process.env.VUE_APP_BASE_API + '/admin-api/infra/file/upload', // 请求地址 | ||||||
|  | 				// 		uploadFnName: 'imagesUpload', // 上传方法名 | ||||||
|  | 				// 		bind: { | ||||||
|  | 				// 			headers: { Authorization: 'Bearer ' + getAccessToken() }, | ||||||
|  | 				// 			'show-file-list': false, | ||||||
|  | 				// 		}, | ||||||
|  | 				// 	}, | ||||||
|  | 				// 	{ | ||||||
|  | 				// 		diy: true, | ||||||
|  | 				// 		key: 'eq-pics', | ||||||
|  | 				// 		label: '设备图片', | ||||||
|  | 				// 		prop: 'fileUrls', | ||||||
|  | 				// 		subcomponent: EquipmentPics, | ||||||
|  | 				// 		pictures: async () => { | ||||||
|  | 				// 			// some async request | ||||||
|  | 				// 			return []; | ||||||
|  | 				// 		}, | ||||||
|  | 				// 	}, | ||||||
|  | 				// ], | ||||||
|  | 				// [ | ||||||
|  | 				// 	{ | ||||||
|  | 				// 		diy: true, | ||||||
|  | 				// 		key: 'eq-pics', | ||||||
|  | 				// 		label: '设备图片', | ||||||
|  | 				// 		prop: 'fileUrls', | ||||||
|  | 				// 		subcomponent: EquipmentPics, | ||||||
|  | 				// 		pictures: async () => { | ||||||
|  | 				// 			// some async request | ||||||
|  | 				// 			return []; | ||||||
|  | 				// 		}, | ||||||
|  | 				// 	}, | ||||||
|  | 				// ], | ||||||
| 			], | 			], | ||||||
| 			editVisible: false, | 			editVisible: false, | ||||||
| 			editMode: 'edit', // 'edit', 'detail' | 			editMode: 'edit', // 'edit', 'detail' | ||||||
| @@ -391,7 +443,7 @@ export default { | |||||||
| 			// 查询参数 | 			// 查询参数 | ||||||
| 			queryParams: { | 			queryParams: { | ||||||
| 				pageNo: 1, | 				pageNo: 1, | ||||||
| 				pageSize: 10, | 				pageSize: 20, | ||||||
| 				code: '', | 				code: '', | ||||||
| 				name: '', | 				name: '', | ||||||
| 			}, | 			}, | ||||||
| @@ -399,11 +451,49 @@ export default { | |||||||
| 			form: { | 			form: { | ||||||
| 				id: null, | 				id: null, | ||||||
| 			}, | 			}, | ||||||
|  | 			showUploadComponents: false, // 是否显示上传组件 | ||||||
| 		}; | 		}; | ||||||
| 	}, | 	}, | ||||||
| 	created() { | 	created() { | ||||||
| 		this.getList(); | 		this.getList(); | ||||||
| 	}, | 	}, | ||||||
|  | 	computed: { | ||||||
|  | 		computedRows() { | ||||||
|  | 			return this.showUploadComponents | ||||||
|  | 				? [ | ||||||
|  | 						...this.rows, | ||||||
|  | 						[ | ||||||
|  | 							{ | ||||||
|  | 								assetUpload: true, | ||||||
|  | 								key: 'eq-assets', // 用于区分不同的上传组件 | ||||||
|  | 								label: '上传资料', | ||||||
|  | 								fieldName: 'assets', | ||||||
|  | 								subcomponent: AssetsUpload, | ||||||
|  | 								prop: 'uploadedAssets', | ||||||
|  | 								default: [], | ||||||
|  | 								bind: { | ||||||
|  | 									'is-pic-mode': false, | ||||||
|  | 								}, | ||||||
|  | 							}, | ||||||
|  | 						], | ||||||
|  | 						[ | ||||||
|  | 							{ | ||||||
|  | 								assetUpload: true, | ||||||
|  | 								key: 'eq-pics', // 用于区分不同的上传组件 | ||||||
|  | 								label: '上传图片', | ||||||
|  | 								fieldName: 'images', | ||||||
|  | 								subcomponent: AssetsUpload, | ||||||
|  | 								// prop: '', | ||||||
|  | 								// default: [], | ||||||
|  | 								bind: { | ||||||
|  | 									'is-pic-mode': true, | ||||||
|  | 								}, | ||||||
|  | 							}, | ||||||
|  | 						], | ||||||
|  | 				  ] | ||||||
|  | 				: this.rows; | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
| 	methods: { | 	methods: { | ||||||
| 		/** 查询列表 */ | 		/** 查询列表 */ | ||||||
| 		getList() { | 		getList() { | ||||||
| @@ -420,6 +510,10 @@ export default { | |||||||
| 			this.open = false; | 			this.open = false; | ||||||
| 			this.reset(); | 			this.reset(); | ||||||
| 		}, | 		}, | ||||||
|  | 		cancelEdit() { | ||||||
|  | 			this.showUploadComponents = false; | ||||||
|  | 			this.editVisible = false; | ||||||
|  | 		}, | ||||||
| 		/** 表单重置 */ | 		/** 表单重置 */ | ||||||
| 		reset() { | 		reset() { | ||||||
| 			this.form = { | 			this.form = { | ||||||
| @@ -445,11 +539,13 @@ export default { | |||||||
| 		handleAdd() { | 		handleAdd() { | ||||||
| 			this.reset(); | 			this.reset(); | ||||||
| 			this.open = true; | 			this.open = true; | ||||||
|  | 			this.showUploadComponents = false; | ||||||
| 			this.title = '添加设备'; | 			this.title = '添加设备'; | ||||||
| 		}, | 		}, | ||||||
| 		/** 修改按钮操作 */ | 		/** 修改按钮操作 */ | ||||||
| 		handleUpdate(row) { | 		handleUpdate(row) { | ||||||
| 			this.reset(); | 			this.reset(); | ||||||
|  | 			this.showUploadComponents = true; | ||||||
| 			const id = row.id; | 			const id = row.id; | ||||||
| 			getEquipment(id).then((response) => { | 			getEquipment(id).then((response) => { | ||||||
| 				this.form = response.data; | 				this.form = response.data; | ||||||
| @@ -473,6 +569,7 @@ export default { | |||||||
| 					return; | 					return; | ||||||
| 				} | 				} | ||||||
| 				// 添加的提交 | 				// 添加的提交 | ||||||
|  | 				this.form.files = []; | ||||||
| 				createEquipment(this.form).then((response) => { | 				createEquipment(this.form).then((response) => { | ||||||
| 					this.$modal.msgSuccess('新增成功'); | 					this.$modal.msgSuccess('新增成功'); | ||||||
| 					this.open = false; | 					this.open = false; | ||||||
| @@ -516,6 +613,7 @@ export default { | |||||||
| 		viewDetail(id) { | 		viewDetail(id) { | ||||||
| 			this.reset(); | 			this.reset(); | ||||||
| 			this.editMode = 'detail'; | 			this.editMode = 'detail'; | ||||||
|  | 			this.showUploadComponents = true; | ||||||
| 			this.form.id = id; | 			this.form.id = id; | ||||||
| 			this.editVisible = true; | 			this.editVisible = true; | ||||||
| 			this.$nextTick(() => { | 			this.$nextTick(() => { | ||||||
| @@ -524,11 +622,11 @@ export default { | |||||||
| 		}, | 		}, | ||||||
| 		// overwrite basicPageMixin 里的 处理表格按钮 方法 | 		// overwrite basicPageMixin 里的 处理表格按钮 方法 | ||||||
| 		handleTableBtnClick({ data, type }) { | 		handleTableBtnClick({ data, type }) { | ||||||
| 			console.log('[handleTableBtnClick]', data, type); |  | ||||||
| 			switch (type) { | 			switch (type) { | ||||||
| 				case 'edit': | 				case 'edit': | ||||||
| 					this.reset(); | 					this.reset(); | ||||||
| 					this.editMode = 'edit'; | 					this.editMode = 'edit'; | ||||||
|  | 					this.showUploadComponents = true; | ||||||
| 					this.form.id = data.id; | 					this.form.id = data.id; | ||||||
| 					this.editVisible = true; | 					this.editVisible = true; | ||||||
| 					this.$nextTick(() => { | 					this.$nextTick(() => { | ||||||
|   | |||||||