forked from mt-fe-group/mt-yd-ui
		
	Compare commits
	
		
			183 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 5d36eb676c | |||
| 14b933fb0c | |||
| 92f52ab553 | |||
| 15210c2f12 | |||
| 8447b8f7ab | |||
| ca7fda73e3 | |||
| 762861a922 | |||
| 127347fab0 | |||
| b9ac64ab13 | |||
| 089a6517d3 | |||
| 1047dd78ec | |||
| 5a08d8c1dd | |||
| d0f113513c | |||
| b54298fe09 | |||
| 5b2de3fb27 | |||
| 9c13434c48 | |||
| 86d3f63178 | |||
| 3f43f0c979 | |||
| ae8a3668c8 | |||
| d5af6a01f5 | |||
| 0b54133132 | |||
| 246baa1768 | |||
| 72f9793edf | |||
| b7002fe17a | |||
| 1b670dc0ac | |||
| 3907f5161e | |||
| d493b34a5f | |||
| 747247aed6 | |||
| 1caf68592a | |||
| 5d32750d87 | |||
| a0253cc235 | |||
| 13df2016b9 | |||
| 749e503f75 | |||
| 1554562933 | |||
| ea1c7de4ca | |||
| 9b0f724da2 | |||
| f33d0c9048 | |||
| 4c9ce641fa | |||
| 31834662c9 | |||
| 4f39481693 | |||
| 5a45aead7c | |||
| 31f496cc13 | |||
| 399589bb3b | |||
| 1ad64efe59 | |||
| b21d91c8da | |||
| a95a7a20d3 | |||
| 7ed4a512bc | |||
| 9187d56f6c | |||
| 41cd01ecb0 | |||
| f590d09671 | |||
| 5158d9a315 | |||
| cc5aa4d72f | |||
| a03d1db029 | |||
| 3999e4e589 | |||
| a0fef0454d | |||
| e532989ddf | |||
| 10e454eb2a | |||
| ce9c0f9d76 | |||
| a2423905fd | |||
| 04dc0bcc49 | |||
| 1006ef0d6a | |||
| d9ff6226b3 | |||
| 08aa78fdb1 | |||
| 2d557c8196 | |||
| e020c1e174 | |||
| e46c392e0f | |||
| 076eaa5f2a | |||
| 12556886b9 | |||
| 744f288b70 | |||
| 64ee3cb64e | |||
| 268207b383 | |||
| b71a61191b | |||
| a438bcad2f | |||
| 5b37798a20 | |||
| 70303f3f06 | |||
| 666059af6e | |||
| 90a93e4f8b | |||
| 803248ca22 | |||
| cfa1cca44a | |||
| 2df5897f3d | |||
| 3668f92731 | |||
| 1b17b760ae | |||
| 6e06159250 | |||
| 3fe0d26d8f | |||
| c0900dba9c | |||
| 974079296b | |||
| 1e78bbf6ee | |||
| e690c90d74 | |||
| 349870ce5d | |||
| 96cea7cc0d | |||
| 38afe6cbb9 | |||
| 9df5f3b336 | |||
| 626e543fa5 | |||
| 2e40570969 | |||
| 70485d293c | |||
| 6bbc0d3d08 | |||
| 8f124e06b1 | |||
| 4297798d44 | |||
| 9a22601f5b | |||
| 69dda72fab | |||
| 0b4433dd80 | |||
| a30e2e1ae2 | |||
| 37df2abcc5 | |||
| fef9bca0ae | |||
| 197b4734d5 | |||
| dedcedec06 | |||
| 93b401071a | |||
| a15e78dcaf | |||
| 3c4af47e2d | |||
| 686002a48e | |||
| 4cae583333 | |||
| 8aaaf2c7ad | |||
| 56ab0220e2 | |||
| 8943eb56b3 | |||
| 6063b664a6 | |||
| 3e42b99996 | |||
| f17fab4749 | |||
| 566c900a24 | |||
| 8ad162aab6 | |||
| 3d851e4362 | |||
| 23e508916e | |||
| 535004719c | |||
| 51022a6e6d | |||
| b4e00bbca0 | |||
| a9265d6708 | |||
| 302d1832df | |||
| 00343fa5b9 | |||
| d1dd52fe90 | |||
| 04f19e82e3 | |||
| 19730bb635 | |||
| ba44951b71 | |||
| b3aba50b09 | |||
| 3f2e8e8b9e | |||
| db5b5091e1 | |||
| 0ef30e1985 | |||
| cd9beb120a | |||
| a1056abe80 | |||
| 0ddba21e1c | |||
| 535cb490b1 | |||
| c1e152405d | |||
| c435901f3b | |||
| 174e5efae5 | |||
| bc08dffda2 | |||
| e91520e99d | |||
| 83fb096f6d | |||
| 90e34584ec | |||
| 9653474e2f | |||
| df3b11b6dd | |||
| ffd095b6b8 | |||
| 559cffc5f0 | |||
| cfec6ff3f5 | |||
| 5d8f537d05 | |||
| 669c8f90c6 | |||
| 2557026002 | |||
| 0733660c2f | |||
| 32dd90969a | |||
| a150905840 | |||
| 2911cf2a90 | |||
| e3849933d9 | |||
| c15671c496 | |||
| 1e118a6d5d | |||
| f415f30f9e | |||
| 56bbc2497a | |||
| 06193447c8 | |||
| 1b760cb844 | |||
| afc4577335 | |||
| 333da8433e | |||
| 65c4ce9d45 | |||
| 93912aa193 | |||
| 374da7b1e9 | |||
| 43f33be189 | |||
| ee27a93181 | |||
| 8f802c5580 | |||
| cf28335d9e | |||
| 4bd6ad1f47 | |||
| b79efe0a19 | |||
| ffad1a2643 | |||
| affea8af59 | |||
| 8b060b8bf1 | |||
| d4e7bda03b | |||
| 3df2939fb4 | |||
| d3752c4f40 | |||
| 0566808861 | 
							
								
								
									
										7
									
								
								.dockerignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								.dockerignore
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | |||||||
|  | .vscode/ | ||||||
|  | .idea/ | ||||||
|  | node_modules/ | ||||||
|  | dist/ | ||||||
|  | **/*.log | ||||||
|  | LICENSE | ||||||
|  | README.md | ||||||
							
								
								
									
										52
									
								
								.drone.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								.drone.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | |||||||
|  | --- | ||||||
|  | kind: pipeline | ||||||
|  | type: docker | ||||||
|  | name: default | ||||||
|  |  | ||||||
|  | steps: | ||||||
|  | - name: build | ||||||
|  |   image: docker:dind | ||||||
|  |   volumes: | ||||||
|  |   - name: dockersock | ||||||
|  |     path: /var/run/docker.sock | ||||||
|  |   - name: dockerconfig | ||||||
|  |     path: /root/.docker | ||||||
|  |   commands: | ||||||
|  |   - docker build -t harbor.picaiba.com/kszny/mes-ui:1.0.0-india ./ && docker push harbor.picaiba.com/kszny/mes-ui:1.0.0-india | ||||||
|  |  | ||||||
|  | - name: deploy | ||||||
|  |   image: harbor.picaiba.com/tools/kubectl:1.19.8 | ||||||
|  |   commands: | ||||||
|  |   - echo "172.27.0.20 lb.kubesphere.local" >> /etc/hosts | ||||||
|  |   #- echo "52.74.223.119 github.com" >> /etc/hosts | ||||||
|  |   - sleep 1 | ||||||
|  |   - kubectl scale --replicas=0 deployment/mes-ui -n mes-india | ||||||
|  |   - sleep 3 | ||||||
|  |   - kubectl scale --replicas=1 deployment/mes-ui -n mes-india | ||||||
|  |   depends_on: | ||||||
|  |   - build | ||||||
|  |  | ||||||
|  | - name: notification | ||||||
|  |   image: lddsb/drone-dingtalk-message | ||||||
|  |   settings: | ||||||
|  |     token: 37a6483274f6de648a26d6710e4d8160eb7d471752abb2d70f8b7958af58fe11 | ||||||
|  |     type: markdown | ||||||
|  |     secret: SEC83b10f5fefd6127e4073360d4447bb7276a90386aeee1275b2797dd377a903e7 | ||||||
|  |     tpl: http://res.picaiba.com/msg/msg.md | ||||||
|  |     tips_title: 你有新消息 | ||||||
|  |     success_color: 008800 | ||||||
|  |     failure_color: FF0000 | ||||||
|  |  | ||||||
|  | volumes: | ||||||
|  | - name: dockersock | ||||||
|  |   host: | ||||||
|  |     path: /var/run/docker.sock | ||||||
|  | - name: dockerconfig | ||||||
|  |   host: | ||||||
|  |     path: /root/.docker | ||||||
|  |  | ||||||
|  | trigger: | ||||||
|  |   branch: | ||||||
|  |   - develop | ||||||
|  |   event: | ||||||
|  |   - push | ||||||
							
								
								
									
										12
									
								
								.prettierrc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								.prettierrc
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | |||||||
|  | { | ||||||
|  | 	"singleQuote": true, | ||||||
|  | 	"tabWidth": 2, | ||||||
|  | 	"bracketSameLine": true, | ||||||
|  | 	"jsxBracketSameLine": true, | ||||||
|  | 	"embeddedLanguageFormatting": "auto", | ||||||
|  | 	"printWidth": 180, | ||||||
|  | 	"quoteProps": "consistent", | ||||||
|  | 	"trailingComma": "none", | ||||||
|  | 	"semi": false, | ||||||
|  | 	"useTabs": true | ||||||
|  | } | ||||||
							
								
								
									
										244
									
								
								AddOrUpdateConfig.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										244
									
								
								AddOrUpdateConfig.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,244 @@ | |||||||
|  | # Add Or Update Dialog Configs | ||||||
|  |  | ||||||
|  | > 通过传入合理的配置项来使用 addOrUpdate Dialog | ||||||
|  |  | ||||||
|  | ## 用途 | ||||||
|  |  | ||||||
|  | 通过给对话框传递配置项,并自动根据这些配置项来初始化对话框的功能 | ||||||
|  |  | ||||||
|  | ## props | ||||||
|  |  | ||||||
|  | - configs 对象 | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | <my-dialog :configs="SomeConfigs" ... /> | ||||||
|  |  | ||||||
|  |  | ||||||
|  | type Operation = { | ||||||
|  | 		name: 'add' | 'edit' | 'detail' | 'delete' | ..., | ||||||
|  | 		url: string, /** 该操作需要的接口地址,如删除接口 */ | ||||||
|  | 		showAlways: boolean, | ||||||
|  | 		showOnEdit: boolean, | ||||||
|  | 		permission: string, | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | type SubTableConfig = { | ||||||
|  | 		[_:string]: any, | ||||||
|  | 		title: string, /** 表格的名称 */ | ||||||
|  | 		url: string, /** 涉及的接口 */ | ||||||
|  | 		tableConfigs: { | ||||||
|  | 			[_:string]: any, | ||||||
|  | 			type?: 'index' | ..., | ||||||
|  | 			prop: string, | ||||||
|  | 			name: string, | ||||||
|  | 			rules?: any[], | ||||||
|  | 			fixed?: string, | ||||||
|  | 			width?: string, | ||||||
|  | 			subcomponent: VueComponent, | ||||||
|  | 			options: any[], | ||||||
|  | 			formField: boolean, /** 是否在新增编辑子表单里出现该字段 */ | ||||||
|  | 		}[], /** 表格prop配置数组,参考 components/base-table 组件和 element-ui 文档 */ | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | type ExtraComponent = { | ||||||
|  | 		name: string, | ||||||
|  | 		label: string, | ||||||
|  | 		hasModel: boolean, /** 是否需要为该组件设置 v-model */ | ||||||
|  | 		component: VueComponent, /** 动态加载的 vue 组件 */ | ||||||
|  | 		props: { | ||||||
|  | 			[_:string]: string | object | ||||||
|  | 			extraParams?: { /** 上传组件使用 */ | ||||||
|  | 				typeCode: string | ||||||
|  | 			} | ||||||
|  | 		}[] | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | type Field = { | ||||||
|  | 	[_:string]: string | boolean | object | object[], | ||||||
|  | 	name: string, | ||||||
|  | 	type?: 'input' | 'select' | ..., | ||||||
|  | 	options?: any[], /** 设置 type 为 select 时的选项数据 */ | ||||||
|  | 	label?: string, /** 没有时会用 name 替代 */ | ||||||
|  | 	placeholder?: string, /** 没有时会生成默认占位符 */ | ||||||
|  | 	api?: string, /** 如果有该字段,就自动从api地址获取数据并填充到对应的输入框里,一般为 getCode 的接口 */ | ||||||
|  | 	relatedField?: string, /** 关联字段,当设置此字段时,意味着需要在对话框组件上监听 select-change 事件,并当该字段数据被改变时刷新 relatedField 的列表,一般是像选择产线时更新工段列表这样的场景使用 */, | ||||||
|  | 	required?: boolean, /** 验证规则的简写,只需要限制必填项时,不需要其他验证规则时使用 */ | ||||||
|  | 	rules?: object[], /** 规则设置参考 element-ui 的表单验证配置 */ | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type Configs = { | ||||||
|  | 	type: 'dialog', | ||||||
|  | 	infoUrl: string, /** 编辑时获取信息的接口地址 */ | ||||||
|  | 	fields: Field[], | ||||||
|  | 	extraComponents?: ExtraComponent[], | ||||||
|  | 	subtable?: SubTableConfig[], | ||||||
|  | 	operations?: Operation[] | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ## 示例 | ||||||
|  |  | ||||||
|  | ```js | ||||||
|  | const addOrUpdateConfigs = { | ||||||
|  | 	type: 'dialog', // dialog | drawer | page | ||||||
|  | 	infoUrl: '/monitoring/product', | ||||||
|  | 	fields: [ | ||||||
|  | 		'name', | ||||||
|  | 		{ | ||||||
|  | 			name: 'code', | ||||||
|  | 			api: '/monitoring/product/getCode' | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name: 'processTime', | ||||||
|  | 			label: '加工时间', | ||||||
|  | 			placeholder: '请输入加工时间', | ||||||
|  | 			type: 'number', // type: number(input+number) | default(input) | textarea | select(options在父组件里获取) | datetime | ||||||
|  | 			required: true, | ||||||
|  | 			rules: [ | ||||||
|  | 				// 除了required之外的验证规则 | ||||||
|  | 				{ | ||||||
|  | 					type: 'number', | ||||||
|  | 					trigger: 'blur', | ||||||
|  | 					transform: val => Number(val), | ||||||
|  | 					message: '必须输入数字' | ||||||
|  | 				} | ||||||
|  | 			] | ||||||
|  | 		}, | ||||||
|  | 		'remark', | ||||||
|  | 		'specifications', | ||||||
|  | 		{ | ||||||
|  | 			name: 'typeDictValue', | ||||||
|  | 			rules: [{ required: true, trigger: 'blur' }], | ||||||
|  | 			label: '产品类型', // 对于非常见属性,最好自己指定label | ||||||
|  | 			type: 'select', | ||||||
|  | 			options: [ | ||||||
|  | 				// 动态获取 | ||||||
|  | 			] | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name: 'unitDictValue', | ||||||
|  | 			label: '单位', | ||||||
|  | 			type: 'select', | ||||||
|  | 			placeholder: '请选择单位', | ||||||
|  | 			options: [ | ||||||
|  | 				// 动态获取 | ||||||
|  | 			] | ||||||
|  | 		} | ||||||
|  | 	], | ||||||
|  | 	operations: [ | ||||||
|  | 		// { name: 'reset', url: true }, | ||||||
|  | 		{ name: 'cancel', url: true, showAlways: true }, | ||||||
|  | 		{ name: 'save', url: '/monitoring/product', permission: '', showOnEdit: false }, | ||||||
|  | 		{ name: 'update', url: '/monitoring/product', permission: '', showOnEdit: true } | ||||||
|  | 	], | ||||||
|  | 	subtable: { | ||||||
|  | 		// for i18n | ||||||
|  | 		title: '动态属性', | ||||||
|  | 		url: '/monitoring/productArrt', | ||||||
|  | 		tableConfigs: [ | ||||||
|  | 			{ type: 'index', name: '序号' }, | ||||||
|  | 			{ prop: 'createTime', name: '添加时间', filter: val => (val ? moment(val).format('YYYY-MM-DD hh:mm:ss') : '-') }, | ||||||
|  | 			{ prop: 'name', name: '属性名', formField: true, rules: [{ required: true, message: '必填', trigger: 'blur' }] }, | ||||||
|  | 			{ prop: 'code', name: '属性值', formField: true }, | ||||||
|  | 			{ prop: 'operations', name: '操作', fixed: 'right', width: 180, subcomponent: TableOperateComponent, options: ['edit', 'delete'] } | ||||||
|  | 		] | ||||||
|  | 	}, | ||||||
|  | 	extraComponents: [ | ||||||
|  | 		{ | ||||||
|  | 			name: 'CompName', | ||||||
|  | 			label: 'markdown编辑器', | ||||||
|  | 			component: () => import('xx.vue') | ||||||
|  | 		} | ||||||
|  | 	] | ||||||
|  | } | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ## 配置项解释 | ||||||
|  |  | ||||||
|  | <br> | ||||||
|  |  | ||||||
|  | ### type | ||||||
|  |  | ||||||
|  | 类型: string | ||||||
|  | 值:dialog | drawer | page | ||||||
|  | 含义:对话框、抽屉、新页面 | ||||||
|  |  | ||||||
|  | ### infoUrl | ||||||
|  |  | ||||||
|  | 类型:string | ||||||
|  | 含义:详情的接口,如 `/monitoring/product` | ||||||
|  |  | ||||||
|  | ### fields | ||||||
|  |  | ||||||
|  | 含义:设置新增、编辑时的字段 | ||||||
|  | 类型:`Array<string | object>` | ||||||
|  |  | ||||||
|  | - 当类型为 string 时,默认渲染 `<input>` | ||||||
|  | - 当类型为 object 时,有如下选项: | ||||||
|  |   - name: 字段名 | ||||||
|  |   - label: 字段的 label | ||||||
|  |   - api: 如果设置了该属性,则该字段会自动从服务器获取值,一般为 code 字段需要 | ||||||
|  |   - placeholder | ||||||
|  |   - type: 渲染何种类型的组件,默认值: 'input' | ||||||
|  |   - options: 当上一条 type 值为 'select' 时,需要自行动态获取并加载 options 列表 | ||||||
|  |   - required: 是否是必须填写的字段(或可用过 rules 做更加具体的设定,设定方式参考 async-validator ) | ||||||
|  |   - rules: 验证规则数组,如果只有"必填"的需求,可直接用上一条 | ||||||
|  |  | ||||||
|  | ### operations | ||||||
|  |  | ||||||
|  | 含义:设置对话框等组件里,需要哪些按钮 | ||||||
|  | 类型:`Array<object>` | ||||||
|  | 属性: | ||||||
|  |  | ||||||
|  | - name,按钮的类型,决定按钮的文字和颜色 | ||||||
|  | - url,按钮操作的接口地址,不需要的可以给 null 或 true | ||||||
|  | - permission,该操作需要的权限,如 "sys:xxx:add" 形式 | ||||||
|  | - showOnEdit: boolean,是否编辑页面展示,不设置则始终展示 | ||||||
|  |   示例: | ||||||
|  |  | ||||||
|  | ```js | ||||||
|  | 	operations: [ | ||||||
|  | 		{ name: 'reset', url: true }, | ||||||
|  | 		{ name: 'cancel', url: true, showAlways: true }, | ||||||
|  | 		{ name: 'save', url: '/monitoring/product', permission: '', showOnEdit: false }, | ||||||
|  | 		{ name: 'update', url: '/monitoring/product', permission: '', showOnEdit: true } | ||||||
|  | 	], | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ### subtable | ||||||
|  |  | ||||||
|  | 含义:有些对话框里需要额外的表格来展示更深层次的数据,如“产品属性” | ||||||
|  | 类型:object | ||||||
|  | 选项: | ||||||
|  |  | ||||||
|  | - title, 内嵌表格的标题 | ||||||
|  | - url, 内嵌表格的数据地址 | ||||||
|  | - tableConfigs,内嵌表格的配置选项 | ||||||
|  |   - 类型:`Array<object>` | ||||||
|  |   - 配置: | ||||||
|  |     - type: 同 element-ui 的 table 属性的 type | ||||||
|  |     - fixed: 同 element-ui 的 table 属性的 fixed | ||||||
|  |     - width: 同 element-ui 的 table 属性的 width | ||||||
|  |     - name: 表头显示的内容 | ||||||
|  |     - filter: 一般用于转换时间 | ||||||
|  |     - prop: 字段 | ||||||
|  |     - formField: boolean, 是否用于表单的填写 | ||||||
|  |     - rules: 表单验证规则,详见:async-validator | ||||||
|  |     - subcomponent: 同 base-table 的 subcomponent | ||||||
|  |     - options: 表格操作列需要哪些操作 | ||||||
|  |       - 值:`edit` | `delete` | `detail`,需要其他可自行添加(修改 base-table 组件) | ||||||
|  |  | ||||||
|  | ### extraComponents | ||||||
|  |  | ||||||
|  | 含义: 需要在对话框里使用的自定义组件列表 | ||||||
|  | 类型: Array<object> | ||||||
|  | 对象选项: | ||||||
|  |  | ||||||
|  | - name: 该组件对应的 dataForm 字段(需要参照后端文档来指定) | ||||||
|  | - hasModel: boolean, 上传组件一般设置为 false,设置是否和 dataForm 关联 | ||||||
|  | - label | ||||||
|  | - fieldType: 设置该组件的数据将以什么数据类型形式来保存 | ||||||
|  | - component: 组件 | ||||||
|  | - props 传给组件的配置 | ||||||
							
								
								
									
										10
									
								
								Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								Dockerfile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | |||||||
|  | FROM node:12 AS builder | ||||||
|  | WORKDIR /app | ||||||
|  | ADD package.json /app/ | ||||||
|  | RUN npm config set registry https://registry.npmmirror.com && npm install  | ||||||
|  | ADD . /app | ||||||
|  | RUN npm run build:prod | ||||||
|  |  | ||||||
|  | FROM busybox | ||||||
|  | LABEL maintainer thomas.hairong@gmail.com | ||||||
|  | COPY --from=builder /app/dist /html | ||||||
							
								
								
									
										7
									
								
								TODO.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								TODO.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | |||||||
|  | # TODO List  | ||||||
|  |  | ||||||
|  | 1. 按钮加权限 | ||||||
|  | 2. 国际化 | ||||||
|  | 3. 表格高度 √ | ||||||
|  | 4. 表格时间格式修改 √ | ||||||
|  | 5. icon列表 √ | ||||||
							
								
								
									
										55
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										55
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @@ -2603,6 +2603,12 @@ | |||||||
|       "resolved": "https://registry.npm.taobao.org/@types/json-schema/download/@types/json-schema-7.0.5.tgz", |       "resolved": "https://registry.npm.taobao.org/@types/json-schema/download/@types/json-schema-7.0.5.tgz", | ||||||
|       "integrity": "sha1-3M5EMOZLRDuolF8CkPtWStW6xt0=" |       "integrity": "sha1-3M5EMOZLRDuolF8CkPtWStW6xt0=" | ||||||
|     }, |     }, | ||||||
|  |     "@types/lodash": { | ||||||
|  |       "version": "4.14.182", | ||||||
|  |       "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.182.tgz", | ||||||
|  |       "integrity": "sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q==", | ||||||
|  |       "dev": true | ||||||
|  |     }, | ||||||
|     "@types/minimatch": { |     "@types/minimatch": { | ||||||
|       "version": "3.0.3", |       "version": "3.0.3", | ||||||
|       "resolved": "https://registry.npm.taobao.org/@types/minimatch/download/@types/minimatch-3.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fminimatch%2Fdownload%2F%40types%2Fminimatch-3.0.3.tgz", |       "resolved": "https://registry.npm.taobao.org/@types/minimatch/download/@types/minimatch-3.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fminimatch%2Fdownload%2F%40types%2Fminimatch-3.0.3.tgz", | ||||||
| @@ -5277,6 +5283,19 @@ | |||||||
|         "safe-buffer": "^5.0.1" |         "safe-buffer": "^5.0.1" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "ckeditor4-integrations-common": { | ||||||
|  |       "version": "1.0.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/ckeditor4-integrations-common/-/ckeditor4-integrations-common-1.0.0.tgz", | ||||||
|  |       "integrity": "sha512-OAoQT/gYrHkg0qgzf6MS/rndYhq3SScLVQ3rtXQeuCE8ju7nFHg3qZ7WGA2XpFxcZzsMP6hhugXqdel5vbcC3g==" | ||||||
|  |     }, | ||||||
|  |     "ckeditor4-vue": { | ||||||
|  |       "version": "2.1.1", | ||||||
|  |       "resolved": "https://registry.npmjs.org/ckeditor4-vue/-/ckeditor4-vue-2.1.1.tgz", | ||||||
|  |       "integrity": "sha512-BBmpT1BYxOmaA+qy9+hvhG0tDYCGqFve1eDSol0ZNwWCm1hZvmPAke809AhkHFUjb834dbNRlTwH3c2qedjtkQ==", | ||||||
|  |       "requires": { | ||||||
|  |         "ckeditor4-integrations-common": "^1.0.0" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "class-utils": { |     "class-utils": { | ||||||
|       "version": "0.3.6", |       "version": "0.3.6", | ||||||
|       "resolved": "https://registry.npm.taobao.org/class-utils/download/class-utils-0.3.6.tgz", |       "resolved": "https://registry.npm.taobao.org/class-utils/download/class-utils-0.3.6.tgz", | ||||||
| @@ -7101,6 +7120,22 @@ | |||||||
|         "safer-buffer": "^2.1.0" |         "safer-buffer": "^2.1.0" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "echarts": { | ||||||
|  |       "version": "5.3.3", | ||||||
|  |       "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.3.3.tgz", | ||||||
|  |       "integrity": "sha512-BRw2serInRwO5SIwRviZ6Xgm5Lb7irgz+sLiFMmy/HOaf4SQ+7oYqxKzRHAKp4xHQ05AuHw1xvoQWJjDQq/FGw==", | ||||||
|  |       "requires": { | ||||||
|  |         "tslib": "2.3.0", | ||||||
|  |         "zrender": "5.3.2" | ||||||
|  |       }, | ||||||
|  |       "dependencies": { | ||||||
|  |         "tslib": { | ||||||
|  |           "version": "2.3.0", | ||||||
|  |           "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", | ||||||
|  |           "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "ee-first": { |     "ee-first": { | ||||||
|       "version": "1.1.1", |       "version": "1.1.1", | ||||||
|       "resolved": "https://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz", |       "resolved": "https://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz", | ||||||
| @@ -10942,6 +10977,11 @@ | |||||||
|         "minimist": "^1.2.5" |         "minimist": "^1.2.5" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "moment": { | ||||||
|  |       "version": "2.29.4", | ||||||
|  |       "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", | ||||||
|  |       "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" | ||||||
|  |     }, | ||||||
|     "move-concurrently": { |     "move-concurrently": { | ||||||
|       "version": "1.0.1", |       "version": "1.0.1", | ||||||
|       "resolved": "https://registry.npm.taobao.org/move-concurrently/download/move-concurrently-1.0.1.tgz", |       "resolved": "https://registry.npm.taobao.org/move-concurrently/download/move-concurrently-1.0.1.tgz", | ||||||
| @@ -17245,6 +17285,21 @@ | |||||||
|           "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=" |           "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=" | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|  |     }, | ||||||
|  |     "zrender": { | ||||||
|  |       "version": "5.3.2", | ||||||
|  |       "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.3.2.tgz", | ||||||
|  |       "integrity": "sha512-8IiYdfwHj2rx0UeIGZGGU4WEVSDEdeVCaIg/fomejg1Xu6OifAL1GVzIPHg2D+MyUkbNgPWji90t0a8IDk+39w==", | ||||||
|  |       "requires": { | ||||||
|  |         "tslib": "2.3.0" | ||||||
|  |       }, | ||||||
|  |       "dependencies": { | ||||||
|  |         "tslib": { | ||||||
|  |           "version": "2.3.0", | ||||||
|  |           "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", | ||||||
|  |           "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" | ||||||
|  |         } | ||||||
|  |       } | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -3,7 +3,8 @@ | |||||||
|   "version": "5.0.0", |   "version": "5.0.0", | ||||||
|   "private": true, |   "private": true, | ||||||
|   "scripts": { |   "scripts": { | ||||||
|     "serve": "vue-cli-service serve", |     "serve": "vue-cli-service serve --mode production", | ||||||
|  |     "serve:dev": "vue-cli-service serve --mode development", | ||||||
|     "build": "vue-cli-service build", |     "build": "vue-cli-service build", | ||||||
|     "build:prod": "vue-cli-service build --mode production", |     "build:prod": "vue-cli-service build --mode production", | ||||||
|     "build:sit": "vue-cli-service build --mode production.sit", |     "build:sit": "vue-cli-service build --mode production.sit", | ||||||
| @@ -13,14 +14,17 @@ | |||||||
|     "axios": "^0.19.2", |     "axios": "^0.19.2", | ||||||
|     "babel-eslint": "^8.0.1", |     "babel-eslint": "^8.0.1", | ||||||
|     "babel-plugin-component": "^1.1.1", |     "babel-plugin-component": "^1.1.1", | ||||||
|  |     "ckeditor4-vue": "^2.1.1", | ||||||
|     "core-js": "^3.6.5", |     "core-js": "^3.6.5", | ||||||
|  |     "echarts": "^5.3.3", | ||||||
|     "element-theme": "^2.0.1", |     "element-theme": "^2.0.1", | ||||||
|     "element-ui": "^2.15.7", |     "element-ui": "^2.15.7", | ||||||
|     "js-cookie": "^2.2.1", |     "js-cookie": "^2.2.1", | ||||||
|     "lodash": "^4.17.19", |     "lodash": "^4.17.19", | ||||||
|     "sass": "^1.26.5", |     "moment": "^2.29.4", | ||||||
|     "qs": "^6.9.4", |     "qs": "^6.9.4", | ||||||
|     "quill": "^1.3.7", |     "quill": "^1.3.7", | ||||||
|  |     "sass": "^1.26.5", | ||||||
|     "sass-loader": "^9.0.2", |     "sass-loader": "^9.0.2", | ||||||
|     "screenfull": "^4.2.1", |     "screenfull": "^4.2.1", | ||||||
|     "svg-sprite-loader": "^5.0.0", |     "svg-sprite-loader": "^5.0.0", | ||||||
| @@ -31,6 +35,7 @@ | |||||||
|     "vuex": "^3.5.1" |     "vuex": "^3.5.1" | ||||||
|   }, |   }, | ||||||
|   "devDependencies": { |   "devDependencies": { | ||||||
|  |     "@types/lodash": "^4.14.182", | ||||||
|     "@vue/cli-plugin-babel": "^4.4.6", |     "@vue/cli-plugin-babel": "^4.4.6", | ||||||
|     "@vue/cli-service": "^4.4.6", |     "@vue/cli-service": "^4.4.6", | ||||||
|     "element-theme-chalk": "^2.15.7", |     "element-theme-chalk": "^2.15.7", | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 1.6 KiB | 
							
								
								
									
										25
									
								
								public/i18n.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								public/i18n.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | |||||||
|  | /** | ||||||
|  |  * Created by Jacky.Gao on 2017-10-01. | ||||||
|  |  */ | ||||||
|  |  import defaultI18nJsonData from './designer.json'; | ||||||
|  |  import en18nJsonData from './designer_en.json'; | ||||||
|  |  export default function buildLocal () { | ||||||
|  |     let language = getCookie('language') || 'zh-CN'; | ||||||
|  |     window.i18n = defaultI18nJsonData; | ||||||
|  |     if (language !== 'zh-CN') { | ||||||
|  |         window.i18n = en18nJsonData; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function getCookie (name) { | ||||||
|  |     var strcookie = document.cookie;//获取cookie字符串 | ||||||
|  |     var arrcookie = strcookie.split("; ");//分割 | ||||||
|  |     //遍历匹配 | ||||||
|  |     for (var i = 0; i < arrcookie.length; i++) { | ||||||
|  |         var arr = arrcookie[i].split("="); | ||||||
|  |         if (arr[0] == name){ | ||||||
|  |             return arr[1]; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     return ""; | ||||||
|  | } | ||||||
| @@ -10,6 +10,7 @@ | |||||||
|     window.SITE_CONFIG['version'] = 'v5.0.0'; |     window.SITE_CONFIG['version'] = 'v5.0.0'; | ||||||
|     window.SITE_CONFIG['nodeEnv'] = '<%= process.env.VUE_APP_NODE_ENV %>'; |     window.SITE_CONFIG['nodeEnv'] = '<%= process.env.VUE_APP_NODE_ENV %>'; | ||||||
|     window.SITE_CONFIG['apiURL'] = '';                      // api请求地址 |     window.SITE_CONFIG['apiURL'] = '';                      // api请求地址 | ||||||
|  |     window.SITE_CONFIG['projURL'] = '';                     // api请求地址 | ||||||
|     window.SITE_CONFIG['storeState'] = {};                  // vuex本地储存初始化状态(用于不刷新页面的情况下,也能重置初始化项目中所有状态) |     window.SITE_CONFIG['storeState'] = {};                  // vuex本地储存初始化状态(用于不刷新页面的情况下,也能重置初始化项目中所有状态) | ||||||
|     window.SITE_CONFIG['contentTabDefault'] = {             // 内容标签页默认属性对象 |     window.SITE_CONFIG['contentTabDefault'] = {             // 内容标签页默认属性对象 | ||||||
|       'name': '',        // 名称, 由 this.$route.name 自动赋值(默认,名称 === 路由名称 === 路由路径) |       'name': '',        // 名称, 由 this.$route.name 自动赋值(默认,名称 === 路由名称 === 路由路径) | ||||||
| @@ -30,25 +31,25 @@ | |||||||
|   <!-- 开发环境 --> |   <!-- 开发环境 --> | ||||||
|   <% if (process.env.VUE_APP_NODE_ENV === 'dev') { %> |   <% if (process.env.VUE_APP_NODE_ENV === 'dev') { %> | ||||||
|     <script> |     <script> | ||||||
|     window.SITE_CONFIG['apiURL'] = 'http://localhost:8080/renren-admin'; |     window.SITE_CONFIG['apiURL'] = 'http://india.mes.picaiba.com/'; | ||||||
|     </script> |     </script> | ||||||
|   <% } %> |   <% } %> | ||||||
|   <!-- 集成测试环境 --> |   <!-- 集成测试环境 --> | ||||||
|   <% if (process.env.VUE_APP_NODE_ENV === 'prod:sit') { %> |   <% if (process.env.VUE_APP_NODE_ENV === 'prod:sit') { %> | ||||||
|     <script> |     <script> | ||||||
|       window.SITE_CONFIG['apiURL'] = 'http://localhost:8080/renren-admin'; |       window.SITE_CONFIG['apiURL'] = 'http://india.mes.picaiba.com/'; | ||||||
|     </script> |     </script> | ||||||
|   <% } %> |   <% } %> | ||||||
|   <!-- 验收测试环境 --> |   <!-- 验收测试环境 --> | ||||||
|   <% if (process.env.VUE_APP_NODE_ENV === 'prod:uat') { %> |   <% if (process.env.VUE_APP_NODE_ENV === 'prod:uat') { %> | ||||||
|     <script> |     <script> | ||||||
|       window.SITE_CONFIG['apiURL'] = 'http://localhost:8080/renren-admin'; |       window.SITE_CONFIG['apiURL'] = 'http://india.mes.picaiba.com/'; | ||||||
|     </script> |     </script> | ||||||
|   <% } %> |   <% } %> | ||||||
|   <!-- 生产环境 --> |   <!-- 生产环境 --> | ||||||
|   <% if (process.env.VUE_APP_NODE_ENV === 'prod') { %> |   <% if (process.env.VUE_APP_NODE_ENV === 'prod') { %> | ||||||
|     <script> |     <script> | ||||||
|       window.SITE_CONFIG['apiURL'] = 'http://localhost:8080/renren-admin'; |       window.SITE_CONFIG['apiURL'] = 'http://india.mes.picaiba.com/'; | ||||||
|     </script> |     </script> | ||||||
|   <% } %> |   <% } %> | ||||||
| </head> | </head> | ||||||
|   | |||||||
							
								
								
									
										10
									
								
								src/App.vue
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								src/App.vue
									
									
									
									
									
								
							| @@ -5,9 +5,9 @@ | |||||||
| </template> | </template> | ||||||
|  |  | ||||||
| <style> | <style> | ||||||
|   .el-table th.gutter{ | .el-table th.gutter { | ||||||
|     display: table-cell!important; | 	display: table-cell !important; | ||||||
|   } | } | ||||||
| </style> | </style> | ||||||
| <script> | <script> | ||||||
| import Cookies from 'js-cookie' | import Cookies from 'js-cookie' | ||||||
| @@ -16,11 +16,11 @@ export default { | |||||||
| 	watch: { | 	watch: { | ||||||
| 		'$i18n.locale': 'i18nHandle' | 		'$i18n.locale': 'i18nHandle' | ||||||
| 	}, | 	}, | ||||||
|   created () { | 	created() { | ||||||
| 		this.i18nHandle(this.$i18n.locale) | 		this.i18nHandle(this.$i18n.locale) | ||||||
| 	}, | 	}, | ||||||
| 	methods: { | 	methods: { | ||||||
|     i18nHandle (val, oldVal) { | 		i18nHandle(val, oldVal) { | ||||||
| 			Cookies.set('language', val) | 			Cookies.set('language', val) | ||||||
| 			document.querySelector('html').setAttribute('lang', val) | 			document.querySelector('html').setAttribute('lang', val) | ||||||
| 			document.title = messages[val].brand.lg | 			document.title = messages[val].brand.lg | ||||||
|   | |||||||
							
								
								
									
										
											BIN
										
									
								
								src/assets/img/logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/assets/img/logo.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 1.6 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/img/logo@2x.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/assets/img/logo@2x.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 3.0 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/img/logo@4x.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/assets/img/logo@4x.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 6.9 KiB | 
| @@ -5,7 +5,7 @@ $base--line-height: 1.15; | |||||||
| $navbar--height: 50px; | $navbar--height: 50px; | ||||||
|  |  | ||||||
| // Sidebar | // Sidebar | ||||||
| $sidebar--width: 230px; | $sidebar--width: 300px; | ||||||
| $sidebar--width-fold: 64px; | $sidebar--width-fold: 64px; | ||||||
| $sidebar--background-color-dark: #263238; | $sidebar--background-color-dark: #263238; | ||||||
| $sidebar--text-color-dark: #8a979e; | $sidebar--text-color-dark: #8a979e; | ||||||
|   | |||||||
							
								
								
									
										548
									
								
								src/components/base-detail-page/index.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										548
									
								
								src/components/base-detail-page/index.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,548 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="super-flexible-dialog" :title="isDetail ? title.detail : !dataForm.id ? title.add : title.edit" @close="handleClose"> | ||||||
|  | 		<div style="max-height: 60vh; overflow-y: scroll; overflow-x: hidden;"> | ||||||
|  | 			<el-form ref="dataForm" :model="dataForm" :rules="dataFormRules"> | ||||||
|  | 				<!-- 如果需要更精细一点的布局,可以根据配置项实现地再复杂一点,但此处暂时全部采用一行两列布局  --> | ||||||
|  | 				<el-row v-for="n in rows" :key="n" :gutter="20"> | ||||||
|  | 					<el-col v-for="c in COLUMN_PER_ROW" :key="`${n}+'col'+${c}`" :span="getSpan(n, c)"> | ||||||
|  | 						<!-- <el-col v-for="c in COLUMN_PER_ROW" :key="`${n}+'col'+${c}`" :span="24 / COLUMN_PER_ROW"> --> | ||||||
|  | 						<!-- :class="{ 'hidden-input': configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].hidden }" --> | ||||||
|  | 						<el-form-item | ||||||
|  | 							v-if="configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)]" | ||||||
|  | 							:prop="configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name" | ||||||
|  | 							:key="`${n}-col-${c}-item`" | ||||||
|  | 							:label="getLabel(n, c)" | ||||||
|  | 						> | ||||||
|  | 							<!-- 暂时先不实现部分输入方式 --> | ||||||
|  | 							<el-input | ||||||
|  | 								v-if="getType(n, c) === 'input'" | ||||||
|  | 								:placeholder="getPlaceholder(n, c)" | ||||||
|  | 								v-model="dataForm[configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name]" | ||||||
|  | 								clearable | ||||||
|  | 							/> | ||||||
|  | 							<el-radio v-if="getType(n, c) === 'radio'" v-model="dataForm[configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name]"></el-radio> | ||||||
|  | 							<el-checkbox v-if="getType(n, c) === 'check'" v-model="dataForm[configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name]"></el-checkbox> | ||||||
|  | 							<el-select | ||||||
|  | 								v-if="getType(n, c) === 'select'" | ||||||
|  | 								:placeholder="getPlaceholder(n, c)" | ||||||
|  | 								v-model="dataForm[configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name]" | ||||||
|  | 								clearable | ||||||
|  | 								@change="emitSelectChange(configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name, $event)" | ||||||
|  | 							> | ||||||
|  | 								<el-option v-for="opt in configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].options" :key="opt.label" :label="opt.label" :value="opt.value" /> | ||||||
|  | 							</el-select> | ||||||
|  | 							<el-switch v-if="getType(n, c) === 'switch'" v-model="dataForm[configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name]"></el-switch> | ||||||
|  | 							<el-cascader | ||||||
|  | 								v-if="getType(n, c) === 'cascader'" | ||||||
|  | 								v-model="dataForm[configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name]" | ||||||
|  | 								:options="configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].options" | ||||||
|  | 								:props="configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].props" | ||||||
|  | 							></el-cascader> | ||||||
|  | 							<el-time-select v-if="getType(n, c) === 'time'" v-model="dataForm[configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name]"></el-time-select> | ||||||
|  | 							<el-date-picker | ||||||
|  | 								v-if="getType(n, c) === 'date'" | ||||||
|  | 								v-bind="configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].props" | ||||||
|  | 								:placeholder="getPlaceholder(n, c)" | ||||||
|  | 								v-model="dataForm[configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name]" | ||||||
|  | 							></el-date-picker> | ||||||
|  | 						</el-form-item> | ||||||
|  | 					</el-col> | ||||||
|  | 				</el-row> | ||||||
|  |  | ||||||
|  | 				<!-- extra components , like Markdown or RichEdit --> | ||||||
|  | 				<template v-if="configs.extraComponents && configs.extraComponents.length > 0"> | ||||||
|  | 					<el-form-item v-for="(ec, index) in configs.extraComponents" :key="ec.name + index" :label="ec.label" class="extra-components"> | ||||||
|  | 						<component style="margin-top: 40px;" v-if="ec.hasModel" :is="ec.component" v-bind="ec.props" v-model="dataForm[ec.name]" @ready="handleEditorReady" /> | ||||||
|  | 						<!-- <component v-if="ec.hasModel" :is="ec.component" v-bind="ec.props" v-model="dataForm[ec.name]" /> --> | ||||||
|  | 						<component | ||||||
|  | 							v-else | ||||||
|  | 							:is="ec.component" | ||||||
|  | 							v-bind="ec.props" | ||||||
|  | 							@uploader-update-filelist="handleUploadListUpdate($event, ec.props.extraParams.typeCode)" | ||||||
|  | 							:uploader-inject-file-list="/*用于设备分流的*/ fileList[ec.props.extraParams.typeCode]" | ||||||
|  | 						/> | ||||||
|  | 					</el-form-item> | ||||||
|  | 				</template> | ||||||
|  | 			</el-form> | ||||||
|  |  | ||||||
|  | 			<template v-if="dataForm.id && configs.subtable"> | ||||||
|  | 				<attr-form :pId="dataForm.id" v-bind="configs.subtable" /> | ||||||
|  | 			</template> | ||||||
|  | 		</div> | ||||||
|  | 		<span slot="footer" class="dialog-footer"> | ||||||
|  | 			<template v-for="(operate, index) in configs.operations"> | ||||||
|  | 				<!-- {{ operate.name | btnNameFilter }} --> | ||||||
|  | 				<el-button | ||||||
|  | 					v-if=" | ||||||
|  | 						operate.showAlways || | ||||||
|  | 							(((dataForm.id && operate.showOnEdit) || (!dataForm.id && !operate.showOnEdit)) && (operate.permission ? $hasPermission(operate.permission) : true)) | ||||||
|  | 					" | ||||||
|  | 					:key="`operate-${index}`" | ||||||
|  | 					:type="btnType[operate.name]" | ||||||
|  | 					@click="handleClick(operate)" | ||||||
|  | 					>{{ btnName[operate.name] }}</el-button | ||||||
|  | 				> | ||||||
|  | 			</template> | ||||||
|  | 		</span> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import AttrForm from '../AttrForm' | ||||||
|  | import { pick } from 'lodash/object' | ||||||
|  |  | ||||||
|  | // 标题 for i18n | ||||||
|  | const title = { | ||||||
|  | 	detail: i18n.t('detail'), | ||||||
|  | 	add: i18n.t('add'), | ||||||
|  | 	edit: '编辑' | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 或者也可以改造成自定义颜色: | ||||||
|  | const btnType = { | ||||||
|  | 	save: 'success', | ||||||
|  | 	update: 'primary', | ||||||
|  | 	reset: 'text' | ||||||
|  | 	// cancel: 'text' | ||||||
|  | 	// add more... | ||||||
|  | } | ||||||
|  |  | ||||||
|  | const btnName = { | ||||||
|  | 	// for i18n | ||||||
|  | 	save: '保存', | ||||||
|  | 	update: '更新', | ||||||
|  | 	reset: '重置', | ||||||
|  | 	cancel: i18n.t('cancel') | ||||||
|  | 	// add more... | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 每行的列数 | ||||||
|  | const COLUMN_PER_ROW = 2 | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	name: 'AddOrUpdateDialog', | ||||||
|  | 	components: { AttrForm }, | ||||||
|  | 	props: { | ||||||
|  | 		configs: { | ||||||
|  | 			/** | ||||||
|  | 			 * TODO: 定义及使用方式,应改用README.md文件记录 | ||||||
|  | 			 * type: 'dialog' | 'drawer' | 'page' | ||||||
|  | 			 * fields: Array<string|object> | ||||||
|  | 			 * - fields.object: { name, type: 'number'|'textarea'|'select'|'date'|.., required: boolean,  validator: boolean(是否需要验证), [options]: any[], api: string(自动获取数据的接口,一般为getcode接口)} | ||||||
|  | 			 * operations: Array[object], 操作名和对应的接口地址,还有permission(如,sys:dict:update) | ||||||
|  | 			 */ | ||||||
|  | 			type: Object, | ||||||
|  | 			default: () => ({}) // 此处省去类型检查,使用者自行注意就好 | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	filters: { | ||||||
|  | 		nameFilter: function(name) { | ||||||
|  | 			if (!name) return null | ||||||
|  | 			// for i18n | ||||||
|  | 			const defaultNames = { | ||||||
|  | 				name: i18n.t('name'), | ||||||
|  | 				code: i18n.t('code'), | ||||||
|  | 				remark: i18n.t('remark'), | ||||||
|  | 				description: i18n.t('desc'), | ||||||
|  | 				specifications: i18n.t('prod.spec') | ||||||
|  | 				// add more... | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			return defaultNames[name] | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	// provide() { | ||||||
|  | 	// 	return { | ||||||
|  | 	// 		_df: this.dataForm | ||||||
|  | 	// 	} | ||||||
|  | 	// }, | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			COLUMN_PER_ROW, | ||||||
|  | 			title, | ||||||
|  | 			/** 按钮相关属性 */ | ||||||
|  | 			btnName, | ||||||
|  | 			btnType, | ||||||
|  | 			defaultNames: { | ||||||
|  | 				name: i18n.t('name'), | ||||||
|  | 				code: i18n.t('code'), | ||||||
|  | 				remark: i18n.t('remark'), | ||||||
|  | 				description: i18n.t('desc'), | ||||||
|  | 				specifications: i18n.t('prod.spec') | ||||||
|  | 				// add more... | ||||||
|  | 			}, | ||||||
|  | 			defaultPlaceholders: {}, // 自动根据 defaultNames 计算得来 | ||||||
|  | 			/** 表单相关属性 */ | ||||||
|  | 			visible: false, | ||||||
|  | 			isEdit: false, | ||||||
|  | 			isDetail: false, | ||||||
|  | 			dataForm: {}, | ||||||
|  | 			dataFormRules: {}, | ||||||
|  | 			tempForm: [], // 临时保存自动生成的code,或其他数据 | ||||||
|  | 			shouldWait: null, | ||||||
|  | 			fileForm: {}, // 文件上传分流用、合并用的表单,根据 typeCode 进行分流,在请求时合并 | ||||||
|  | 			fileList: {} // 文件加载时分流,依据 typeCode | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	computed: { | ||||||
|  | 		rows() { | ||||||
|  | 			// 本组件只实现了'一行两列'的表单布局 | ||||||
|  | 			return Math.ceil(this.configs.fields.length / COLUMN_PER_ROW) | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	mounted() { | ||||||
|  | 		/** 计算 defaultPlaceholders */ | ||||||
|  | 		const prefix = '请输入' | ||||||
|  | 		Object.entries(this.defaultNames).map(([key, value]) => { | ||||||
|  | 			this.defaultPlaceholders[key] = prefix + value | ||||||
|  | 		}) | ||||||
|  |  | ||||||
|  | 		/** 转换 configs.fields 的结构,把纯字符串转为对象 */ | ||||||
|  | 		this.$nextTick(() => { | ||||||
|  | 			this.configs.fields = this.configs.fields.map(item => { | ||||||
|  | 				if (typeof item === 'string') { | ||||||
|  | 					return { name: item } | ||||||
|  | 				} | ||||||
|  | 				return item | ||||||
|  | 			}) | ||||||
|  |  | ||||||
|  | 			/** 动态设置dataForm字段 */ | ||||||
|  | 			this.configs.fields.forEach(item => { | ||||||
|  | 				this.$set(this.dataForm, [item.name], '') | ||||||
|  |  | ||||||
|  | 				/** select 的默认值设置 */ | ||||||
|  | 				if (item.type === 'select') { | ||||||
|  | 					const opts = item.options || [] | ||||||
|  | 					const dft = opts.find(item => item.default || false) | ||||||
|  | 					if (dft) { | ||||||
|  | 						this.$set(this.dataForm, [item.name], dft.value) | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				if (item.api) { | ||||||
|  | 					/** 自动请求并填充 */ | ||||||
|  | 					// or this.shouldWaitPool = [] | ||||||
|  | 					this.shouldWait = this.$http({ | ||||||
|  | 						url: this.$http.adornUrl(item.api), | ||||||
|  | 						method: 'POST' // 也可以改成动态决定 | ||||||
|  | 					}).then(({ data: res }) => { | ||||||
|  | 						if (res && res.code === 0) { | ||||||
|  | 							// this.dataForm[item.name] = res.data // <=== 此处需要对接口 | ||||||
|  | 							this.tempForm.push({ name: item.name, data: res.data }) | ||||||
|  | 						} | ||||||
|  | 					}) | ||||||
|  | 				} // end if (item.api) | ||||||
|  |  | ||||||
|  | 				if (item.required) { | ||||||
|  | 					const requiredRule = { | ||||||
|  | 						required: true, | ||||||
|  | 						message: '请输入必填项', | ||||||
|  | 						trigger: 'change' | ||||||
|  | 					} | ||||||
|  | 					/** 检查是否已经存在该字段的规则 */ | ||||||
|  | 					const exists = this.dataFormRules[item.name] || null | ||||||
|  | 					/** 设置验证规则  */ | ||||||
|  | 					if (exists) { | ||||||
|  | 						const unset = true | ||||||
|  | 						for (const rule of exists) { | ||||||
|  | 							if (rule.required) unset = false | ||||||
|  | 						} | ||||||
|  | 						if (unset) { | ||||||
|  | 							exists.push(requiredRule) | ||||||
|  | 						} | ||||||
|  | 					} else { | ||||||
|  | 						/** 不存在已有规则 */ | ||||||
|  | 						this.$set(this.dataFormRules, [item.name], [requiredRule]) | ||||||
|  | 					} | ||||||
|  | 				} // end if (item.required) | ||||||
|  |  | ||||||
|  | 				if (item.rules) { | ||||||
|  | 					const exists = this.dataFormRules[item.name] || null | ||||||
|  | 					if (exists) { | ||||||
|  | 						// 浅拷贝过去 | ||||||
|  | 						exists.push(...item.rules) | ||||||
|  | 					} else { | ||||||
|  | 						this.$set(this.dataFormRules, [item.name], [...item.rules]) | ||||||
|  | 					} | ||||||
|  | 				} // end if (item.rules) | ||||||
|  | 			}) | ||||||
|  |  | ||||||
|  | 			/** 计算默认值 */ | ||||||
|  | 			function calDefault(type) { | ||||||
|  | 				switch (type) { | ||||||
|  | 					case 'array': | ||||||
|  | 						return [] | ||||||
|  | 					// more case... | ||||||
|  | 					default: | ||||||
|  | 						return '' | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			/** 检查是否需要额外的组件 */ | ||||||
|  | 			this.configs.extraComponents && | ||||||
|  | 				this.configs.extraComponents.forEach(item => { | ||||||
|  | 					if (Object.hasOwn(this.dataForm, [item.name])) { | ||||||
|  | 						console.log('有了!') | ||||||
|  | 						return | ||||||
|  | 					} else { | ||||||
|  | 						console.log('新建!') | ||||||
|  | 						this.$set(this.dataForm, [item.name], calDefault(item.fieldType)) | ||||||
|  | 					} | ||||||
|  |  | ||||||
|  | 					console.log('component: ', item.component) | ||||||
|  | 				}) | ||||||
|  |  | ||||||
|  | 			/** 单独设置 id */ | ||||||
|  | 			this.$set(this.dataForm, 'id', null) | ||||||
|  | 			console.log('mounted: this.dataForm', JSON.stringify(this.dataForm)) | ||||||
|  | 		}) | ||||||
|  | 	}, | ||||||
|  |  | ||||||
|  | 	methods: { | ||||||
|  | 		getSpan(n, c) { | ||||||
|  | 			const opt = this.configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)] | ||||||
|  | 			return opt && opt.span ? opt.span : 24 / COLUMN_PER_ROW | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		getLabel(n, c) { | ||||||
|  | 			const opt = this.configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)] | ||||||
|  | 			if (opt) { | ||||||
|  | 				// if opt is valid | ||||||
|  | 				return opt.label ? opt.label : this.defaultNames[opt.name] | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		getPlaceholder(n, c) { | ||||||
|  | 			const opt = this.configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)] | ||||||
|  | 			if (opt) { | ||||||
|  | 				// if opt is valid | ||||||
|  | 				return opt.placeholder | ||||||
|  | 					? opt.placeholder | ||||||
|  | 					: this.defaultPlaceholders[opt.name] | ||||||
|  | 					? this.defaultPlaceholders[opt.name] | ||||||
|  | 					: opt.label | ||||||
|  | 					? (opt.type === 'select' ? i18n.t('choose') : '请输入') + opt.label | ||||||
|  | 					: null | ||||||
|  |  | ||||||
|  | 				// : opt.type === 'select' | ||||||
|  | 				// ? i18n.t('choose') | ||||||
|  | 				// : '请输入' | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		getType(n, c) { | ||||||
|  | 			const opt = this.configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)] | ||||||
|  | 			if (opt) { | ||||||
|  | 				if (!opt.type || ['input', 'number' /** add more.. */].includes(opt.type)) { | ||||||
|  | 					return 'input' | ||||||
|  | 				} else if (['select' /** add more.. */].includes(opt.type)) { | ||||||
|  | 					return 'select' | ||||||
|  | 				} else if (['cascader'].includes(opt.type)) { | ||||||
|  | 					return 'cascader' | ||||||
|  | 				} else if (['date'].includes(opt.type)) { | ||||||
|  | 					return 'date' | ||||||
|  | 				} | ||||||
|  | 				// add more... | ||||||
|  | 			} else { | ||||||
|  | 				return 'input' | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		init(id) { | ||||||
|  | 			this.visible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs['dataForm'].resetFields() | ||||||
|  | 				this.dataForm.id = id || null | ||||||
|  | 				if (this.dataForm.id) { | ||||||
|  | 					this.$http({ | ||||||
|  | 						url: this.$http.adornUrl(`${this.configs.infoUrl}/${this.dataForm.id}`), | ||||||
|  | 						method: 'get' | ||||||
|  | 					}).then(({ data: res }) => { | ||||||
|  | 						if (res && res.code === 0) { | ||||||
|  | 							const dataFormKeys = Object.keys(this.dataForm) | ||||||
|  | 							console.log('data form keys: ', dataFormKeys, pick(res.data, dataFormKeys)) | ||||||
|  | 							this.dataForm = pick(res.data, dataFormKeys) | ||||||
|  |  | ||||||
|  | 							// LABEL: FILE_RELATED | ||||||
|  | 							/** 对文件下载进行分流 */ | ||||||
|  | 							this.fileList = {} | ||||||
|  | 							if (this.dataForm.files) { | ||||||
|  | 								console.log('files: ', this.dataForm.files) | ||||||
|  | 								this.dataForm.files.forEach(file => { | ||||||
|  | 									// const fileName = file.fileUrl.split('/').pop() | ||||||
|  | 									/** [1] 处理 fileList */ | ||||||
|  | 									if (Object.hasOwn(this.fileList, file.typeCode)) { | ||||||
|  | 										/** 已存在 */ | ||||||
|  | 										// this.fileList[file.typeCode].push({ id: file.id, name: fileName, typeCode: file.typeCode }) | ||||||
|  | 										this.fileList[file.typeCode].push(file) | ||||||
|  | 									} else { | ||||||
|  | 										// this.fileList[file.typeCode] = [{ id: file.id, name: fileName, typeCode: file.typeCode }] | ||||||
|  | 										this.fileList[file.typeCode] = [file] | ||||||
|  | 									} | ||||||
|  |  | ||||||
|  | 									/** [2] 处理 fileForm */ | ||||||
|  | 									if (Object.hasOwn(this.fileForm, file.typeCode)) { | ||||||
|  | 										this.fileForm[file.typeCode].push(file.id) | ||||||
|  | 									} else { | ||||||
|  | 										this.fileForm[file.typeCode] = [file.id] | ||||||
|  | 									} | ||||||
|  | 								}) | ||||||
|  | 								console.log('after分流:', this.fileList) | ||||||
|  | 							} | ||||||
|  | 						} | ||||||
|  | 					}) | ||||||
|  | 				} else { | ||||||
|  | 					/** 如果不是编辑,就填充自动生成的数据 */ | ||||||
|  | 					if (this.shouldWait) | ||||||
|  | 						this.shouldWait.then(() => { | ||||||
|  | 							if (this.tempForm.length) { | ||||||
|  | 								console.log('create new, tempform', JSON.stringify(this.tempForm.length)) | ||||||
|  | 								this.tempForm.forEach(item => { | ||||||
|  | 									console.log('item data', item.data) | ||||||
|  | 									this.dataForm[item.name] = item.data | ||||||
|  | 								}) | ||||||
|  | 								console.log('create new, dataform', JSON.stringify(this.dataForm)) | ||||||
|  | 							} | ||||||
|  | 						}) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		emitSelectChange(name, id) { | ||||||
|  | 			this.$emit('select-change', { name, id }) | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		handleEditorReady(val) { | ||||||
|  | 			console.log('editor  rready..', val) | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		handleClick(btn) { | ||||||
|  | 			/** 提取url */ | ||||||
|  | 			const urls = {} | ||||||
|  | 			this.configs.operations.map(item => { | ||||||
|  | 				urls[item.name] = {} | ||||||
|  | 				urls[item.name].url = item.url | ||||||
|  | 				urls[item.name].extraFields = item.extraFields || {} | ||||||
|  | 			}) | ||||||
|  | 			/** 操作 */ | ||||||
|  | 			switch (btn.name) { | ||||||
|  | 				case 'save': | ||||||
|  | 				case 'update': | ||||||
|  | 					/** 需要验证表单的操作 */ | ||||||
|  | 					this.$refs['dataForm'].validate(valid => { | ||||||
|  | 						if (valid) { | ||||||
|  | 							/** 对于文件上传的单独处理(合并处理) */ | ||||||
|  | 							if (Object.keys(this.fileForm).length) { | ||||||
|  | 								console.log('fileform 有值') | ||||||
|  | 								// LABEL: FILE_RELATED | ||||||
|  | 								let fileIds = [] | ||||||
|  | 								for (const [key, item] of Object.entries(this.fileForm)) { | ||||||
|  | 									if (Array.isArray(item)) { | ||||||
|  | 										fileIds = fileIds.concat(item) | ||||||
|  | 									} else { | ||||||
|  | 										console.error('handleClick(): 上传文件数组类型不正确') | ||||||
|  | 									} | ||||||
|  | 								} | ||||||
|  | 								this.$set(this.dataForm, 'fileIds', fileIds) | ||||||
|  | 							} | ||||||
|  |  | ||||||
|  | 							console.log('before send: ', this.dataForm) | ||||||
|  |  | ||||||
|  | 							this.$http({ | ||||||
|  | 								url: this.$http.adornUrl(urls[btn.name].url), | ||||||
|  | 								method: btn.name === 'save' ? 'POST' : 'PUT', | ||||||
|  | 								data: { ...this.dataForm, ...urls[btn.name].extraFields } | ||||||
|  | 							}) | ||||||
|  | 								.then(({ data: res }) => { | ||||||
|  | 									if (res && res.code === 0) { | ||||||
|  | 										this.$message({ | ||||||
|  | 											message: btn.name === 'save' ? i18n.t('prompt.success') : '更新成功!', | ||||||
|  | 											type: 'success', | ||||||
|  | 											duration: 1500, | ||||||
|  | 											onClose: () => { | ||||||
|  | 												this.$emit('refreshDataList') | ||||||
|  | 												this.visible = false | ||||||
|  | 											} | ||||||
|  | 										}) | ||||||
|  | 									} else { | ||||||
|  | 										this.$message.error(res.msg) | ||||||
|  | 									} | ||||||
|  | 								}) | ||||||
|  | 								.catch(err => { | ||||||
|  | 									this.$message({ | ||||||
|  | 										message: err, | ||||||
|  | 										type: 'error', | ||||||
|  | 										duration: 2000 | ||||||
|  | 									}) | ||||||
|  | 								}) | ||||||
|  | 						} | ||||||
|  | 					}) | ||||||
|  | 					return | ||||||
|  | 				case 'reset': | ||||||
|  | 					for (const key of Object.keys(this.dataForm)) { | ||||||
|  | 						if (typeof this.dataForm[key] === 'string') { | ||||||
|  | 							this.dataForm[key] = '' | ||||||
|  | 						} else if (this.dataForm[key] instanceof Array) { | ||||||
|  | 							this.dataForm[key].splice(0) | ||||||
|  | 						} else { | ||||||
|  | 							this.dataForm[key] = null | ||||||
|  | 						} | ||||||
|  | 					} | ||||||
|  | 					break | ||||||
|  | 				case 'cancel': | ||||||
|  | 					this.visible = false | ||||||
|  | 				// add more.. | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		// LABEL: FILE_RELATED | ||||||
|  | 		handleUploadListUpdate(filelist, typeCode = 'DefaultTypeCode') { | ||||||
|  | 			console.log('before handleUploadListUpdate(): ', JSON.parse(JSON.stringify(this.fileForm))) | ||||||
|  | 			// 设备类型 typeCode: EquipmentTypeFile | ||||||
|  | 			// 设备信息 typeCode: EquipmentInfoFile | EquipmentInfoImage | ||||||
|  |  | ||||||
|  | 			// 原先写法:直接更新 dataForm 对象,不适用于有多个上传组件的需求 | ||||||
|  | 			// this.$set( | ||||||
|  | 			// 	this.dataForm, | ||||||
|  | 			// 	'fileIds', | ||||||
|  | 			// 	filelist.map(item => item.id) | ||||||
|  | 			// ) | ||||||
|  | 			// console.log('handleUploadListUpdate(): ', this.dataForm) | ||||||
|  | 			// 现更改为分流写法 | ||||||
|  | 			this.$set( | ||||||
|  | 				this.fileForm, | ||||||
|  | 				typeCode, | ||||||
|  | 				filelist.map(item => item.id) | ||||||
|  | 			) | ||||||
|  | 			console.log('after handleUploadListUpdate(): ', this.fileForm) | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		handleClose() { | ||||||
|  | 			this.$emit('destory-dialog') | ||||||
|  | 			this.visible = false | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style scoped> | ||||||
|  | .super-flexible-dialog >>> .el-select, | ||||||
|  | .super-flexible-dialog >>> .el-cascader { | ||||||
|  | 	width: 100%; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .super-flexible-dialog >>> ::-webkit-scrollbar { | ||||||
|  | 	width: 4px; | ||||||
|  | 	border-radius: 4px; | ||||||
|  | 	background: #fff; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .super-flexible-dialog >>> ::-webkit-scrollbar-thumb { | ||||||
|  | 	width: 4px; | ||||||
|  | 	border-radius: 4px; | ||||||
|  | 	background: #ccc; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .super-flexible-dialog >>> .hidden-input { | ||||||
|  | 	display: none; | ||||||
|  | } | ||||||
|  | </style> | ||||||
							
								
								
									
										283
									
								
								src/components/base-dialog/AttrForm/index.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										283
									
								
								src/components/base-dialog/AttrForm/index.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,283 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="attr-form"> | ||||||
|  | 		<h3> | ||||||
|  | 			{{ title }} <el-button style="margin-left: 8px;" type="text" v-if="!isDetail && !showAddAttr" @click="showAddAttr = true">{{ $t('add') }}</el-button> | ||||||
|  | 		</h3> | ||||||
|  | 		<div v-if="!showAddAttr"> | ||||||
|  | 			<component | ||||||
|  | 				key="sub-table" | ||||||
|  | 				:is="require('../../base-table/index.vue').default" | ||||||
|  | 				:table-head-configs="filterTableConfigs()" | ||||||
|  | 				:data="dataList" | ||||||
|  | 				:page="pageIndex" | ||||||
|  | 				:size="pageSize" | ||||||
|  | 				:max-height="calcMaxHeight(8)" | ||||||
|  | 				@operate-event="handleOperations" | ||||||
|  | 			/> | ||||||
|  | 			<el-pagination | ||||||
|  | 				@size-change="sizeChangeHandle" | ||||||
|  | 				@current-change="currentChangeHandle" | ||||||
|  | 				:current-page="pageIndex" | ||||||
|  | 				:page-sizes="[5, 10, 20, 50]" | ||||||
|  | 				:page-size="pageSize" | ||||||
|  | 				:total="totalPage" | ||||||
|  | 				layout="total, sizes, prev, pager, next, jumper" | ||||||
|  | 			> | ||||||
|  | 			</el-pagination> | ||||||
|  | 		</div> | ||||||
|  | 		<div v-else style="background: #eee; border-radius: 8px; padding: 12px;"> | ||||||
|  | 			<el-row> | ||||||
|  | 				<el-col> | ||||||
|  | 					<el-form ref="AttrForm" :model="AttrForm" :rules="AttrFormRules" :inline="true" label-position="top"> | ||||||
|  | 						<el-row :gutter="20" style="padding: 0 24px;"> | ||||||
|  | 							<el-col :span="attrFormFields.length > 6 ? 6 : 12" v-for="field in attrFormFields" :key="field.prop + 'col'"> | ||||||
|  | 								<el-form-item :key="field.prop" :prop="field.prop" :label="field.name" style="width: 100%"> | ||||||
|  | 									<el-input v-if="field.formType === 'input' || !field.formType" v-model="AttrForm[field.prop]" :placeholder="$t('hints.input')" clearable /> | ||||||
|  | 									<el-select v-if="field.formType === 'select'" v-model="AttrForm[field.prop]" clearable> | ||||||
|  | 										<el-option v-for="opt in field.formOptions" :key="opt.value" :label="opt.label" :value="opt.value" /> | ||||||
|  | 									</el-select> | ||||||
|  | 									<!-- add more...  --> | ||||||
|  | 								</el-form-item> | ||||||
|  | 							</el-col> | ||||||
|  | 						</el-row> | ||||||
|  | 					</el-form> | ||||||
|  | 				</el-col> | ||||||
|  | 			</el-row> | ||||||
|  | 			<el-row style="text-align: right;"> | ||||||
|  | 				<el-button size="small" @click="handleCloseAttrForm">{{ $t('cancel') }}</el-button> | ||||||
|  | 				<el-button type="success" size="small" @click="handleSaveAttrForm">{{ $t('save') }}</el-button> | ||||||
|  | 			</el-row> | ||||||
|  | 		</div> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import i18n from '@/i18n' | ||||||
|  | import BaseTable from '@/components/base-table' | ||||||
|  | import { pick } from 'lodash/object' | ||||||
|  | import { calcMaxHeight } from '@/utils' | ||||||
|  | export default { | ||||||
|  | 	name: 'AttrForm', | ||||||
|  | 	components: { BaseTable }, | ||||||
|  | 	props: { | ||||||
|  | 		isDetail: { | ||||||
|  | 			type: Boolean, | ||||||
|  | 			default: false | ||||||
|  | 		}, | ||||||
|  | 		visible: { | ||||||
|  | 			type: Boolean, | ||||||
|  | 			default: false | ||||||
|  | 		}, | ||||||
|  | 		/** subtable 需要设置的属性 */ | ||||||
|  | 		title: { | ||||||
|  | 			type: String, | ||||||
|  | 			default: '' | ||||||
|  | 		}, | ||||||
|  | 		url: { | ||||||
|  | 			type: String, | ||||||
|  | 			default: '' | ||||||
|  | 		}, | ||||||
|  | 		tableConfigs: { | ||||||
|  | 			type: Array, | ||||||
|  | 			default: () => [] | ||||||
|  | 		}, | ||||||
|  | 		/** 表单提交需要的属性 */ | ||||||
|  | 		relatedId: { | ||||||
|  | 			type: String, | ||||||
|  | 			required: true, | ||||||
|  | 			default: null | ||||||
|  | 		}, | ||||||
|  | 		relatedField: { | ||||||
|  | 			type: String, | ||||||
|  | 			required: true, | ||||||
|  | 			default: null | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			calcMaxHeight, | ||||||
|  | 			showAddAttr: false, | ||||||
|  | 			dataList: [], | ||||||
|  | 			pageIndex: 1, | ||||||
|  | 			pageSize: 10, | ||||||
|  | 			totalPage: 0, | ||||||
|  | 			AttrForm: {}, // 需动态设置 | ||||||
|  | 			AttrFormRules: {} // 需动态设置 | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	computed: { | ||||||
|  | 		attrFormFields() { | ||||||
|  | 			const _ = this.tableConfigs.filter(item => item.formField) | ||||||
|  | 			/** 顺带配置 AttrForm */ | ||||||
|  | 			_.forEach(item => { | ||||||
|  | 				this.$set(this.AttrForm, [item.prop], '') | ||||||
|  | 			}) | ||||||
|  |  | ||||||
|  | 			this.$set(this.AttrForm, 'id', null) | ||||||
|  | 			return _ | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	mounted() { | ||||||
|  | 		this.getDataList() | ||||||
|  | 		/** 设置 AttrForm 的 rules */ | ||||||
|  | 		for (const config of this.tableConfigs) { | ||||||
|  | 			if (config.rules) { | ||||||
|  | 				this.$set(this.AttrFormRules, [config.prop], config.rules) | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		filterTableConfigs() { | ||||||
|  | 			if (this.isDetail) { | ||||||
|  | 				/** 如果是查看详情,就屏蔽操作列 */ | ||||||
|  | 				return this.tableConfigs.filter(opt => opt.prop !== 'operations') | ||||||
|  | 			} | ||||||
|  | 			return this.tableConfigs | ||||||
|  | 		}, | ||||||
|  | 		/** init dataform */ | ||||||
|  | 		initAttrForm() { | ||||||
|  | 			Object.entries(this.AttrForm).forEach(([key, value]) => { | ||||||
|  | 				if (typeof value === 'object' || typeof value === 'number') { | ||||||
|  | 					this.AttrForm[key] = null | ||||||
|  | 				} else if (Array.isArray(value)) { | ||||||
|  | 					this.AttrForm[key] = [] | ||||||
|  | 				} else { | ||||||
|  | 					this.AttrForm[key] = '' | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		/** requests */ | ||||||
|  | 		getDataList() { | ||||||
|  | 			this.dataListLoading = true | ||||||
|  | 			// 获取动态属性列表 | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl(`${this.url}/page`), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams({ | ||||||
|  | 					page: this.pageIndex, | ||||||
|  | 					limit: this.pageSize, | ||||||
|  | 					[this.relatedField]: this.relatedId | ||||||
|  | 					// order: 'asc/desc', | ||||||
|  | 					// orderField: 'name' | ||||||
|  | 				}) | ||||||
|  | 			}).then(({ data: res }) => { | ||||||
|  | 				if (res && res.code === 0) { | ||||||
|  | 					this.dataList = res.data.list | ||||||
|  | 					this.totalPage = res.data.total | ||||||
|  | 				} else { | ||||||
|  | 					this.dataList = [] | ||||||
|  | 					this.totalPage = 0 | ||||||
|  | 				} | ||||||
|  | 				this.dataListLoading = false | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		/** handlers */ | ||||||
|  | 		handleOperations({ type, data: id }) { | ||||||
|  | 			switch (type) { | ||||||
|  | 				case 'edit': | ||||||
|  | 					{ | ||||||
|  | 						this.showAddAttr = true | ||||||
|  | 						this.$nextTick(() => { | ||||||
|  | 							this.$http.get(this.$http.adornUrl(`${this.url}/${id}`)).then(({ data: res }) => { | ||||||
|  | 								if (res && res.code === 0 && res.data) { | ||||||
|  | 									const neededFields = [...this.attrFormFields.map(item => item.prop), 'id'] | ||||||
|  | 									const filtered = pick(res.data, neededFields) | ||||||
|  | 									for (let field of neededFields) { | ||||||
|  | 										this.AttrForm[field] = filtered[field] | ||||||
|  | 									} | ||||||
|  | 								} | ||||||
|  | 							}) | ||||||
|  | 						}) | ||||||
|  | 					} | ||||||
|  | 					break | ||||||
|  | 				case 'delete': | ||||||
|  | 					return this.deleteHandle(id) | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		deleteHandle(id) { | ||||||
|  | 			var ids = id ? [id] : [] | ||||||
|  |  | ||||||
|  | 			this.$confirm(`${i18n.t('prompt.info', { handle: id ? i18n.t('delete').toLowerCase() : i18n.t('deleteBatch').toLowerCase() })}`, i18n.t('prompt.title'), { | ||||||
|  | 				confirmButtonText: i18n.t('confirm'), | ||||||
|  | 				cancelButtonText: i18n.t('cancel'), | ||||||
|  | 				type: 'warning' | ||||||
|  | 			}).then(() => { | ||||||
|  | 				this.$http({ | ||||||
|  | 					url: this.$http.adornUrl(this.url), | ||||||
|  | 					method: 'delete', | ||||||
|  | 					data: this.$http.adornData(ids, false, 'raw') | ||||||
|  | 				}).then(({ data }) => { | ||||||
|  | 					if (data && data.code === 0) { | ||||||
|  | 						this.$message({ | ||||||
|  | 							message: i18n.t('prompt.success'), | ||||||
|  | 							type: 'success', | ||||||
|  | 							duration: 1500, | ||||||
|  | 							onClose: () => { | ||||||
|  | 								this.getDataList() | ||||||
|  | 							} | ||||||
|  | 						}) | ||||||
|  | 					} else { | ||||||
|  | 						this.$message.error(data.msg) | ||||||
|  | 					} | ||||||
|  | 				}) | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		handleCloseAttrForm() { | ||||||
|  | 			this.showAddAttr = false | ||||||
|  | 			this.initAttrForm() | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		handleSaveAttrForm() { | ||||||
|  | 			this.$refs['AttrForm'].validate(valid => { | ||||||
|  | 				if (valid) { | ||||||
|  | 					this.$http({ | ||||||
|  | 						// url: this.$http.adornUrl(`${this.url}/${!this.AttrForm.id ? '' : this.AttrForm.id}`), | ||||||
|  | 						url: this.$http.adornUrl(this.url), | ||||||
|  | 						method: this.AttrForm.id ? 'put' : 'post', | ||||||
|  | 						headers: { | ||||||
|  | 							'Content-Type': 'application/json' | ||||||
|  | 						}, | ||||||
|  | 						data: JSON.stringify({ ...this.AttrForm, [this.relatedField]: this.relatedId }) | ||||||
|  | 					}).then(({ data }) => { | ||||||
|  | 						if (data && data.code === 0) { | ||||||
|  | 							this.$message({ | ||||||
|  | 								message: i18n.t('prompt.success'), | ||||||
|  | 								type: 'success', | ||||||
|  | 								duration: 1500, | ||||||
|  | 								onClose: () => { | ||||||
|  | 									this.showAddAttr = false | ||||||
|  | 									this.getDataList() | ||||||
|  | 									this.initAttrForm() | ||||||
|  | 								} | ||||||
|  | 							}) | ||||||
|  | 						} else { | ||||||
|  | 							this.$message.error(data.msg) | ||||||
|  | 						} | ||||||
|  | 					}) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		// 每页数 | ||||||
|  | 		sizeChangeHandle(val) { | ||||||
|  | 			this.pageSize = val | ||||||
|  | 			this.pageIndex = 1 | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 当前页 | ||||||
|  | 		currentChangeHandle(val) { | ||||||
|  | 			this.pageIndex = val | ||||||
|  | 			this.getDataList() | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style scoped> | ||||||
|  | .attr-form >>> .el-form .el-form-item__label { | ||||||
|  | 	padding: 0; | ||||||
|  | } | ||||||
|  | </style> | ||||||
							
								
								
									
										594
									
								
								src/components/base-dialog/addOrUpdate/index.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										594
									
								
								src/components/base-dialog/addOrUpdate/index.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,594 @@ | |||||||
|  | <template> | ||||||
|  | 	<el-dialog | ||||||
|  | 		class="super-flexible-dialog" | ||||||
|  | 		:title="isDetail ? title.detail : !dataForm.id ? title.add : title.edit" | ||||||
|  | 		:visible.sync="visible" | ||||||
|  | 		@close="handleClose" | ||||||
|  | 		:distory-on-close="true" | ||||||
|  | 		:close-on-click-modal="false" | ||||||
|  | 	> | ||||||
|  | 		<div style="max-height: 60vh; overflow-y: scroll; overflow-x: hidden;"> | ||||||
|  | 			<el-form ref="dataForm" :model="dataForm" :rules="dataFormRules"> | ||||||
|  | 				<!-- 如果需要更精细一点的布局,可以根据配置项实现地再复杂一点,但此处暂时全部采用一行两列布局  --> | ||||||
|  | 				<el-row v-for="n in rows" :key="n" :gutter="20"> | ||||||
|  | 					<el-col v-for="c in COLUMN_PER_ROW" :key="`${n}+'col'+${c}`" :span="getSpan(n, c)"> | ||||||
|  | 						<!-- <el-col v-for="c in COLUMN_PER_ROW" :key="`${n}+'col'+${c}`" :span="24 / COLUMN_PER_ROW"> --> | ||||||
|  | 						<!-- :class="{ 'hidden-input': configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].hidden }" --> | ||||||
|  | 						<el-form-item | ||||||
|  | 							v-if="configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)]" | ||||||
|  | 							:prop="configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name" | ||||||
|  | 							:key="`${n}-col-${c}-item`" | ||||||
|  | 							:label="getLabel(n, c)" | ||||||
|  | 						> | ||||||
|  | 							<!-- 暂时先不实现部分输入方式 --> | ||||||
|  | 							<el-input | ||||||
|  | 								v-if="getType(n, c) === 'input'" | ||||||
|  | 								:placeholder="getPlaceholder(n, c)" | ||||||
|  | 								v-model="dataForm[configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name]" | ||||||
|  | 								clearable | ||||||
|  | 								:disabled="isDetail" | ||||||
|  | 							/> | ||||||
|  | 							<el-radio v-if="getType(n, c) === 'radio'" v-model="dataForm[configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name]" :disabled="isDetail" /> | ||||||
|  | 							<el-checkbox v-if="getType(n, c) === 'check'" v-model="dataForm[configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name]" :disabled="isDetail" /> | ||||||
|  | 							<el-select | ||||||
|  | 								v-if="getType(n, c) === 'select'" | ||||||
|  | 								:placeholder="getPlaceholder(n, c)" | ||||||
|  | 								v-model="dataForm[configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name]" | ||||||
|  | 								clearable | ||||||
|  | 								:disabled="isDetail" | ||||||
|  | 								@change="emitSelectChange(configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name, $event)" | ||||||
|  | 							> | ||||||
|  | 								<el-option v-for="opt in configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].options" :key="opt.label + Math.random()" :label="opt.label" :value="opt.value" /> | ||||||
|  | 							</el-select> | ||||||
|  | 							<el-switch v-if="getType(n, c) === 'switch'" v-model="dataForm[configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name]" :disabled="isDetail" /> | ||||||
|  | 							<el-cascader | ||||||
|  | 								v-if="getType(n, c) === 'cascader'" | ||||||
|  | 								v-model="dataForm[configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name]" | ||||||
|  | 								:options="configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].options" | ||||||
|  | 								:props="configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].props" | ||||||
|  | 								:disabled="isDetail" | ||||||
|  | 								clearable | ||||||
|  | 							/> | ||||||
|  | 							<el-time-select v-if="getType(n, c) === 'time'" v-model="dataForm[configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name]" :disabled="isDetail" /> | ||||||
|  | 							<el-date-picker | ||||||
|  | 								v-if="getType(n, c) === 'date'" | ||||||
|  | 								v-bind="configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].props" | ||||||
|  | 								:placeholder="getPlaceholder(n, c)" | ||||||
|  | 								v-model="dataForm[configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name]" | ||||||
|  | 								:disabled="isDetail" | ||||||
|  | 							/> | ||||||
|  | 						</el-form-item> | ||||||
|  | 					</el-col> | ||||||
|  | 				</el-row> | ||||||
|  |  | ||||||
|  | 				<!-- extra components , like Markdown or RichEdit --> | ||||||
|  | 				<template v-if="configs.extraComponents && configs.extraComponents.length > 0"> | ||||||
|  | 					<el-form-item v-for="(ec, index) in configs.extraComponents" :key="ec.name + index" :label="ec.label" class="extra-components"> | ||||||
|  | 						<component | ||||||
|  | 							style="margin-top: 40px;" | ||||||
|  | 							v-if="ec.hasModel" | ||||||
|  | 							:is="ec.component" | ||||||
|  | 							v-bind="ec.props" | ||||||
|  | 							v-model="dataForm[ec.name]" | ||||||
|  | 							@ready="handleEditorReady" | ||||||
|  | 							:read-only="isDetail" | ||||||
|  | 						/> | ||||||
|  | 						<!-- <component v-if="ec.hasModel" :is="ec.component" v-bind="ec.props" v-model="dataForm[ec.name]" /> --> | ||||||
|  | 						<component | ||||||
|  | 							v-else | ||||||
|  | 							:is="ec.component" | ||||||
|  | 							v-bind="ec.props" | ||||||
|  | 							@uploader-update-filelist="handleUploadListUpdate($event, ec.props.extraParams.typeCode)" | ||||||
|  | 							:uploader-inject-file-list="/*用于设备分流的*/ fileList[ec.props.extraParams.typeCode]" | ||||||
|  | 							:read-only="isDetail" | ||||||
|  | 						/> | ||||||
|  | 					</el-form-item> | ||||||
|  | 				</template> | ||||||
|  | 			</el-form> | ||||||
|  |  | ||||||
|  | 			<template v-if="dataForm.id && configs.subtable"> | ||||||
|  | 				<attr-form :related-id="dataForm.id" v-bind="configs.subtable" :is-detail="isDetail" /> | ||||||
|  | 			</template> | ||||||
|  | 		</div> | ||||||
|  | 		<span slot="footer" class="dialog-footer"> | ||||||
|  | 			<template v-for="(operate, index) in configs.operations"> | ||||||
|  | 				<!-- {{ operate.name | btnNameFilter }} --> | ||||||
|  | 				<el-button | ||||||
|  | 					v-if=" | ||||||
|  | 						!isDetail && | ||||||
|  | 							(operate.showAlways || | ||||||
|  | 								(((dataForm.id && operate.showOnEdit) || (!dataForm.id && !operate.showOnEdit)) && (operate.permission ? $hasPermission(operate.permission) : true))) | ||||||
|  | 					" | ||||||
|  | 					:key="`operate-${index}`" | ||||||
|  | 					:type="btnType[operate.name]" | ||||||
|  | 					@click="handleClick(operate)" | ||||||
|  | 					>{{ btnName[operate.name] }}</el-button | ||||||
|  | 				> | ||||||
|  | 			</template> | ||||||
|  | 			<el-button v-if="isDetail" @click="handleClick({ name: 'cancel' })">{{ $t('cancel') }}</el-button> | ||||||
|  | 		</span> | ||||||
|  | 	</el-dialog> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import CKEditor from 'ckeditor4-vue' | ||||||
|  | import AttrForm from '../AttrForm' | ||||||
|  | import { pick } from 'lodash/object' | ||||||
|  | import { pick as __pick } from '@/utils/filters' | ||||||
|  | import i18n from '@/i18n' | ||||||
|  | // 标题 for i18n | ||||||
|  | const title = { | ||||||
|  | 	detail: i18n.t('detail'), | ||||||
|  | 	add: i18n.t('add'), | ||||||
|  | 	edit: i18n.t('edit') | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 或者也可以改造成自定义颜色: | ||||||
|  | const btnType = { | ||||||
|  | 	save: 'success', | ||||||
|  | 	update: 'primary', | ||||||
|  | 	reset: 'text' | ||||||
|  | 	// cancel: 'text' | ||||||
|  | 	// add more... | ||||||
|  | } | ||||||
|  |  | ||||||
|  | const btnName = { | ||||||
|  | 	// for i18n | ||||||
|  | 	save: i18n.t('save'), | ||||||
|  | 	update: i18n.t('update'), | ||||||
|  | 	reset: i18n.t('reset'), | ||||||
|  | 	cancel: i18n.t('cancel') | ||||||
|  | 	// add more... | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 每行的列数 | ||||||
|  | const COLUMN_PER_ROW = 2 | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	name: 'AddOrUpdateDialog', | ||||||
|  | 	components: { AttrForm }, | ||||||
|  | 	props: { | ||||||
|  | 		configs: { | ||||||
|  | 			type: Object, | ||||||
|  | 			default: () => ({}) // 此处省去类型检查,使用者自行注意就好 | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	filters: { | ||||||
|  | 		nameFilter: function(name) { | ||||||
|  | 			if (!name) return null | ||||||
|  | 			// for i18n | ||||||
|  | 			const defaultNames = { | ||||||
|  | 				name: i18n.t('name'), | ||||||
|  | 				code: i18n.t('code'), | ||||||
|  | 				remark: i18n.t('remark'), | ||||||
|  | 				description: i18n.t('desc'), | ||||||
|  | 				specifications: i18n.t('prod.spec') | ||||||
|  | 				// add more... | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			return defaultNames[name] | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	// provide() { | ||||||
|  | 	// 	return { | ||||||
|  | 	// 		_df: this.dataForm | ||||||
|  | 	// 	} | ||||||
|  | 	// }, | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			COLUMN_PER_ROW, | ||||||
|  | 			title, | ||||||
|  | 			/** 按钮相关属性 */ | ||||||
|  | 			btnName, | ||||||
|  | 			btnType, | ||||||
|  | 			defaultNames: { | ||||||
|  | 				name: i18n.t('name'), | ||||||
|  | 				code: i18n.t('code'), | ||||||
|  | 				remark: i18n.t('remark'), | ||||||
|  | 				description: i18n.t('desc'), | ||||||
|  | 				specifications: i18n.t('prod.spec') | ||||||
|  | 				// add more... | ||||||
|  | 			}, | ||||||
|  | 			defaultPlaceholders: {}, // 自动根据 defaultNames 计算得来 | ||||||
|  | 			/** 表单相关属性 */ | ||||||
|  | 			visible: false, | ||||||
|  | 			isEdit: false, | ||||||
|  | 			isDetail: false, | ||||||
|  | 			dataForm: {}, | ||||||
|  | 			dataFormRules: {}, | ||||||
|  | 			tempForm: [], // 临时保存自动生成的code,或其他数据 | ||||||
|  | 			shouldWait: null, | ||||||
|  | 			fileForm: {}, // 文件上传分流用、合并用的表单,根据 typeCode 进行分流,在请求时合并 | ||||||
|  | 			fileList: {} // 文件加载时分流,依据 typeCode | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	computed: { | ||||||
|  | 		rows() { | ||||||
|  | 			// 本组件只实现了'一行两列'的表单布局 | ||||||
|  | 			return Math.ceil(this.configs.fields.length / COLUMN_PER_ROW) | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	created() { | ||||||
|  | 		/** load lang */ | ||||||
|  | 		// CKEditor.load() | ||||||
|  | 		// console.log('lang', CKEditor.component.props.config.defaultLanguage = 'en' ) | ||||||
|  | 	}, | ||||||
|  | 	mounted() { | ||||||
|  | 		/** 计算 defaultPlaceholders */ | ||||||
|  | 		const prefix = i18n.t('hints.input') | ||||||
|  | 		Object.entries(this.defaultNames).map(([key, value]) => { | ||||||
|  | 			this.defaultPlaceholders[key] = prefix + value | ||||||
|  | 		}) | ||||||
|  |  | ||||||
|  | 		/** 转换 configs.fields 的结构,把纯字符串转为对象 */ | ||||||
|  | 		this.$nextTick(() => { | ||||||
|  | 			this.configs.fields = this.configs.fields.map(item => { | ||||||
|  | 				if (typeof item === 'string') { | ||||||
|  | 					return { name: item } | ||||||
|  | 				} | ||||||
|  | 				return item | ||||||
|  | 			}) | ||||||
|  |  | ||||||
|  | 			/** 动态设置dataForm字段 */ | ||||||
|  | 			this.configs.fields.forEach(item => { | ||||||
|  | 				this.$set(this.dataForm, [item.name], '') | ||||||
|  |  | ||||||
|  | 				/** select 的默认值设置 */ | ||||||
|  | 				if (item.type === 'select') { | ||||||
|  | 					const opts = item.options || [] | ||||||
|  | 					const dft = opts.find(item => item.default || false) | ||||||
|  | 					if (dft) { | ||||||
|  | 						this.$set(this.dataForm, [item.name], dft.value) | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				if (item.api) { | ||||||
|  | 					/** 自动请求并填充 */ | ||||||
|  | 					// or this.shouldWaitPool = [] | ||||||
|  | 					this.shouldWait = this.$http({ | ||||||
|  | 						url: this.$http.adornUrl(item.api), | ||||||
|  | 						method: 'POST' // 也可以改成动态决定 | ||||||
|  | 					}).then(({ data: res }) => { | ||||||
|  | 						if (res && res.code === 0) { | ||||||
|  | 							// this.dataForm[item.name] = res.data // <=== 此处需要对接口 | ||||||
|  | 							this.tempForm.push({ name: item.name, data: res.data }) | ||||||
|  | 						} | ||||||
|  | 					}) | ||||||
|  | 				} // end if (item.api) | ||||||
|  |  | ||||||
|  | 				// 如果有 relatedField,就需要在当前item的数据加载后,刷新 relatedField 的列表 | ||||||
|  | 				if (item.relatedField) { | ||||||
|  | 					this.$watch( | ||||||
|  | 						function() { | ||||||
|  | 							return this.dataForm[item.name] | ||||||
|  | 						}, | ||||||
|  | 						function(val, old) { | ||||||
|  | 							if (val && val !== old) { | ||||||
|  | 								this.$emit('select-change', { name: item.name, id: val }) | ||||||
|  | 							} | ||||||
|  | 						}, | ||||||
|  | 						{ deep: true, immediate: true } | ||||||
|  | 					) | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				if (item.required) { | ||||||
|  | 					const requiredRule = { | ||||||
|  | 						required: true, | ||||||
|  | 						message: i18n.t('validate.required'), | ||||||
|  | 						// trigger: 'change' | ||||||
|  | 						trigger: 'blur' | ||||||
|  | 					} | ||||||
|  | 					/** 检查是否已经存在该字段的规则 */ | ||||||
|  | 					const exists = this.dataFormRules[item.name] || null | ||||||
|  | 					/** 设置验证规则  */ | ||||||
|  | 					if (exists) { | ||||||
|  | 						const unset = true | ||||||
|  | 						for (const rule of exists) { | ||||||
|  | 							if (rule.required) unset = false | ||||||
|  | 						} | ||||||
|  | 						if (unset) { | ||||||
|  | 							exists.push(requiredRule) | ||||||
|  | 						} | ||||||
|  | 					} else { | ||||||
|  | 						/** 不存在已有规则 */ | ||||||
|  | 						this.$set(this.dataFormRules, [item.name], [requiredRule]) | ||||||
|  | 					} | ||||||
|  | 				} // end if (item.required) | ||||||
|  |  | ||||||
|  | 				if (item.rules) { | ||||||
|  | 					const exists = this.dataFormRules[item.name] || null | ||||||
|  | 					if (exists) { | ||||||
|  | 						// 浅拷贝过去 | ||||||
|  | 						exists.push(...item.rules) | ||||||
|  | 					} else { | ||||||
|  | 						this.$set(this.dataFormRules, [item.name], [...item.rules]) | ||||||
|  | 					} | ||||||
|  | 				} // end if (item.rules) | ||||||
|  | 			}) | ||||||
|  |  | ||||||
|  | 			/** 计算默认值 */ | ||||||
|  | 			function calDefault(type) { | ||||||
|  | 				switch (type) { | ||||||
|  | 					case 'array': | ||||||
|  | 						return [] | ||||||
|  | 					// more case... | ||||||
|  | 					default: | ||||||
|  | 						return '' | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			/** 检查是否需要额外的组件 */ | ||||||
|  | 			this.configs.extraComponents && | ||||||
|  | 				this.configs.extraComponents.forEach(item => { | ||||||
|  | 					// if (Object.hasOwn(this.dataForm, [item.name])) { | ||||||
|  | 					if (this.dataForm.hasOwnProperty(item.name)) { | ||||||
|  | 						return | ||||||
|  | 					} else { | ||||||
|  | 						this.$set(this.dataForm, [item.name], calDefault(item.fieldType)) | ||||||
|  | 					} | ||||||
|  | 				}) | ||||||
|  |  | ||||||
|  | 			/** 单独设置 id */ | ||||||
|  | 			this.$set(this.dataForm, 'id', null) | ||||||
|  | 		}) | ||||||
|  | 	}, | ||||||
|  |  | ||||||
|  | 	methods: { | ||||||
|  | 		getSpan(n, c) { | ||||||
|  | 			const opt = this.configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)] | ||||||
|  | 			return opt && opt.span ? opt.span : 24 / COLUMN_PER_ROW | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		getLabel(n, c) { | ||||||
|  | 			const opt = this.configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)] | ||||||
|  | 			if (opt) { | ||||||
|  | 				// if opt is valid | ||||||
|  | 				return opt.label ? opt.label : this.defaultNames[opt.name] | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		getPlaceholder(n, c) { | ||||||
|  | 			if (this.isDetail) { | ||||||
|  | 				/** 如果是详情,就不展示 提示文本 */ | ||||||
|  | 				return '' | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			const opt = this.configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)] | ||||||
|  | 			if (opt) { | ||||||
|  | 				// if opt is valid | ||||||
|  | 				return opt.placeholder | ||||||
|  | 					? opt.placeholder | ||||||
|  | 					: this.defaultPlaceholders[opt.name] | ||||||
|  | 					? this.defaultPlaceholders[opt.name] | ||||||
|  | 					: opt.label | ||||||
|  | 					? (opt.type === 'select' ? i18n.t('choose') : i18n.t('hints.input')) + opt.label | ||||||
|  | 					: null | ||||||
|  |  | ||||||
|  | 				// : opt.type === 'select' | ||||||
|  | 				// ? i18n.t('choose') | ||||||
|  | 				// : '请输入' | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		getType(n, c) { | ||||||
|  | 			const opt = this.configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)] | ||||||
|  | 			if (opt) { | ||||||
|  | 				if (!opt.type || ['input', 'number' /** add more.. */].includes(opt.type)) { | ||||||
|  | 					return 'input' | ||||||
|  | 				} else if (['select' /** add more.. */].includes(opt.type)) { | ||||||
|  | 					return 'select' | ||||||
|  | 				} else if (['cascader'].includes(opt.type)) { | ||||||
|  | 					return 'cascader' | ||||||
|  | 				} else if (['date'].includes(opt.type)) { | ||||||
|  | 					return 'date' | ||||||
|  | 				} | ||||||
|  | 				// add more... | ||||||
|  | 			} else { | ||||||
|  | 				return 'input' | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		init(id, isdetail = false) { | ||||||
|  | 			this.isDetail = isdetail | ||||||
|  | 			this.visible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs['dataForm'].resetFields() | ||||||
|  | 				this.dataForm.id = id || null | ||||||
|  | 				if (this.dataForm.id) { | ||||||
|  | 					this.$http({ | ||||||
|  | 						url: this.$http.adornUrl(`${this.configs.infoUrl}/${this.dataForm.id}`), | ||||||
|  | 						method: 'get' | ||||||
|  | 					}).then(({ data: res }) => { | ||||||
|  | 						if (res && res.code === 0) { | ||||||
|  | 							const dataFormKeys = Object.keys(this.dataForm) | ||||||
|  | 							console.log('keys ===> ', dataFormKeys) | ||||||
|  | 							// console.log('data form keys: ', dataFormKeys, pick(res.data, dataFormKeys)) | ||||||
|  | 							this.dataForm = __pick(res.data, dataFormKeys) | ||||||
|  | 							console.log('pick(res.data, dataFormKeys) ===> ', __pick(res.data, dataFormKeys)) | ||||||
|  | 							// LABEL: FILE_RELATED | ||||||
|  | 							/** 对文件下载进行分流 */ | ||||||
|  | 							this.fileList = {} | ||||||
|  | 							if (this.dataForm.files) { | ||||||
|  | 								// console.log('files: ', this.dataForm.files) | ||||||
|  | 								this.dataForm.files.forEach(file => { | ||||||
|  | 									// const fileName = file.fileUrl.split('/').pop() | ||||||
|  | 									/** [1] 处理 fileList */ | ||||||
|  | 									// if (Object.hasOwn(this.fileList, file.typeCode)) { | ||||||
|  | 									if (this.fileList.hasOwnProperty(file.typeCode)) { | ||||||
|  | 										/** 已存在 */ | ||||||
|  | 										// this.fileList[file.typeCode].push({ id: file.id, name: fileName, typeCode: file.typeCode }) | ||||||
|  | 										this.fileList[file.typeCode].push(file) | ||||||
|  | 									} else { | ||||||
|  | 										// this.fileList[file.typeCode] = [{ id: file.id, name: fileName, typeCode: file.typeCode }] | ||||||
|  | 										this.fileList[file.typeCode] = [file] | ||||||
|  | 									} | ||||||
|  |  | ||||||
|  | 									/** [2] 处理 fileForm */ | ||||||
|  | 									// if (Object.hasOwn(this.fileForm, file.typeCode)) { | ||||||
|  | 									if (this.fileForm.hasOwnProperty(file.typeCode)) { | ||||||
|  | 										this.fileForm[file.typeCode].push(file.id) | ||||||
|  | 									} else { | ||||||
|  | 										this.fileForm[file.typeCode] = [file.id] | ||||||
|  | 									} | ||||||
|  | 								}) | ||||||
|  | 							} | ||||||
|  | 						} | ||||||
|  | 					}) | ||||||
|  | 				} else { | ||||||
|  | 					/** 如果不是编辑,就填充自动生成的数据 */ | ||||||
|  | 					if (this.shouldWait) | ||||||
|  | 						this.shouldWait.then(() => { | ||||||
|  | 							if (this.tempForm.length) { | ||||||
|  | 								// console.log('create new, tempform', JSON.stringify(this.tempForm.length)) | ||||||
|  | 								this.tempForm.forEach(item => { | ||||||
|  | 									// console.log('item data', item.data) | ||||||
|  | 									this.dataForm[item.name] = item.data | ||||||
|  | 								}) | ||||||
|  | 								// console.log('create new, dataform', JSON.stringify(this.dataForm)) | ||||||
|  | 							} | ||||||
|  | 							this.shouldWait = null | ||||||
|  | 						}) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		emitSelectChange(name, id) { | ||||||
|  | 			const currentField = this.configs.fields.find(item => item.name === name) | ||||||
|  | 			if (currentField.relatedField) { | ||||||
|  | 				this.dataForm[currentField.relatedField] = null | ||||||
|  | 			} | ||||||
|  | 			this.$emit('select-change', { name, id }) | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		handleEditorReady(val) {}, | ||||||
|  |  | ||||||
|  | 		handleClick(btn) { | ||||||
|  | 			/** 提取url */ | ||||||
|  | 			const urls = {} | ||||||
|  | 			this.configs.operations.map(item => { | ||||||
|  | 				urls[item.name] = {} | ||||||
|  | 				urls[item.name].url = item.url | ||||||
|  | 				urls[item.name].extraFields = item.extraFields || {} | ||||||
|  | 			}) | ||||||
|  | 			/** 操作 */ | ||||||
|  | 			switch (btn.name) { | ||||||
|  | 				case 'save': | ||||||
|  | 				case 'update': | ||||||
|  | 					/** 需要验证表单的操作 */ | ||||||
|  | 					this.$refs['dataForm'].validate(valid => { | ||||||
|  | 						if (valid) { | ||||||
|  | 							/** 对于文件上传的单独处理(合并处理) */ | ||||||
|  | 							if (Object.keys(this.fileForm).length) { | ||||||
|  | 								// LABEL: FILE_RELATED | ||||||
|  | 								let fileIds = [] | ||||||
|  | 								for (const [key, item] of Object.entries(this.fileForm)) { | ||||||
|  | 									if (Array.isArray(item)) { | ||||||
|  | 										fileIds = fileIds.concat(item) | ||||||
|  | 									} else { | ||||||
|  | 										console.error('handleClick(): 上传文件数组类型不正确') | ||||||
|  | 									} | ||||||
|  | 								} | ||||||
|  | 								this.$set(this.dataForm, 'fileIds', fileIds) | ||||||
|  | 							} | ||||||
|  |  | ||||||
|  | 							// console.log('before send: ', this.dataForm) | ||||||
|  |  | ||||||
|  | 							this.$http({ | ||||||
|  | 								url: this.$http.adornUrl(urls[btn.name].url), | ||||||
|  | 								method: btn.name === 'save' ? 'POST' : 'PUT', | ||||||
|  | 								data: { ...this.dataForm, ...urls[btn.name].extraFields } | ||||||
|  | 							}) | ||||||
|  | 								.then(({ data: res }) => { | ||||||
|  | 									if (res && res.code === 0) { | ||||||
|  | 										this.$message({ | ||||||
|  | 											message: i18n.t('prompt.success'), | ||||||
|  | 											// message: btn.name === 'save' ? i18n.t('prompt.success') : '更新成功!', | ||||||
|  | 											type: 'success', | ||||||
|  | 											duration: 1500, | ||||||
|  | 											onClose: () => { | ||||||
|  | 												this.$emit('refreshDataList') | ||||||
|  | 												this.visible = false | ||||||
|  | 											} | ||||||
|  | 										}) | ||||||
|  | 									} else { | ||||||
|  | 										this.$message.error(res.msg) | ||||||
|  | 									} | ||||||
|  | 								}) | ||||||
|  | 								.catch(err => { | ||||||
|  | 									this.$message({ | ||||||
|  | 										message: err, | ||||||
|  | 										type: 'error', | ||||||
|  | 										duration: 2000 | ||||||
|  | 									}) | ||||||
|  | 								}) | ||||||
|  | 						} | ||||||
|  | 					}) | ||||||
|  | 					return | ||||||
|  | 				case 'reset': | ||||||
|  | 					for (const key of Object.keys(this.dataForm)) { | ||||||
|  | 						if (typeof this.dataForm[key] === 'string') { | ||||||
|  | 							this.dataForm[key] = '' | ||||||
|  | 						} else if (this.dataForm[key] instanceof Array) { | ||||||
|  | 							this.dataForm[key].splice(0) | ||||||
|  | 						} else { | ||||||
|  | 							this.dataForm[key] = null | ||||||
|  | 						} | ||||||
|  | 					} | ||||||
|  | 					break | ||||||
|  | 				case 'cancel': | ||||||
|  | 					this.handleClose() | ||||||
|  | 				// add more.. | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		// LABEL: FILE_RELATED | ||||||
|  | 		handleUploadListUpdate(filelist, typeCode = 'DefaultTypeCode') { | ||||||
|  | 			// console.log('before handleUploadListUpdate(): ', JSON.parse(JSON.stringify(this.fileForm))) | ||||||
|  | 			// 设备类型 typeCode: EquipmentTypeFile | ||||||
|  | 			// 设备信息 typeCode: EquipmentInfoFile | EquipmentInfoImage | ||||||
|  |  | ||||||
|  | 			// 原先写法:直接更新 dataForm 对象,不适用于有多个上传组件的需求 | ||||||
|  | 			// this.$set( | ||||||
|  | 			// 	this.dataForm, | ||||||
|  | 			// 	'fileIds', | ||||||
|  | 			// 	filelist.map(item => item.id) | ||||||
|  | 			// ) | ||||||
|  | 			// console.log('handleUploadListUpdate(): ', this.dataForm) | ||||||
|  | 			// 现更改为分流写法 | ||||||
|  | 			this.$set( | ||||||
|  | 				this.fileForm, | ||||||
|  | 				typeCode, | ||||||
|  | 				filelist.map(item => item.id) | ||||||
|  | 			) | ||||||
|  | 			// console.log('after handleUploadListUpdate(): ', this.fileForm) | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		handleClose() { | ||||||
|  | 			this.$emit('destory-dialog') | ||||||
|  | 			this.visible = false | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style scoped> | ||||||
|  | .super-flexible-dialog >>> .el-select, | ||||||
|  | .super-flexible-dialog >>> .el-cascader { | ||||||
|  | 	width: 100%; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .super-flexible-dialog >>> ::-webkit-scrollbar { | ||||||
|  | 	width: 4px; | ||||||
|  | 	border-radius: 4px; | ||||||
|  | 	background: #fff; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .super-flexible-dialog >>> ::-webkit-scrollbar-thumb { | ||||||
|  | 	width: 4px; | ||||||
|  | 	border-radius: 4px; | ||||||
|  | 	background: #ccc; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .super-flexible-dialog >>> .hidden-input { | ||||||
|  | 	display: none; | ||||||
|  | } | ||||||
|  | </style> | ||||||
							
								
								
									
										11
									
								
								src/components/base-table/components/cell-container.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								src/components/base-table/components/cell-container.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="cell-container"> | ||||||
|  | 		 | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | export default {} | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style></style> | ||||||
							
								
								
									
										30
									
								
								src/components/base-table/components/detailComponent.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								src/components/base-table/components/detailComponent.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | |||||||
|  | import i18n from '@/i18n' | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  |   name: 'TableTextComponent', | ||||||
|  |   props: { | ||||||
|  |     injectData: { | ||||||
|  |       type: Object, | ||||||
|  |       default: () => ({}) | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   data() { | ||||||
|  |     return { | ||||||
|  |       // for i18n inject: | ||||||
|  |       defaultText: i18n.t('viewdetail') | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   methods: { | ||||||
|  |     emitClick() { | ||||||
|  |       // console.log('inject data:' ,this.injectData) | ||||||
|  |       this.$emit('emit-data', { | ||||||
|  |         type: this.injectData.head?.actionName || 'view-detail-action', | ||||||
|  |         data: this.injectData.head?.emitFullData ? this.injectData : this.injectData.id | ||||||
|  |       }) | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   render: function (h) { | ||||||
|  |     // console.log('button content:', this.injectData) | ||||||
|  |     return h('span', null, [h('el-button', { props: { type: 'text' }, style: { paddingLeft: 0 }, on: { click: this.emitClick } }, this.injectData.head?.buttonContent || this.defaultText)]) | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										64
									
								
								src/components/base-table/components/operationComponent.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								src/components/base-table/components/operationComponent.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,64 @@ | |||||||
|  | import i18n from '@/i18n' | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  |   name: 'TableOperations', | ||||||
|  |   props: { | ||||||
|  |     injectData: { | ||||||
|  |       type: Object, | ||||||
|  |       default: () => ({}) | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   data() { | ||||||
|  |     return { | ||||||
|  |       btnTypes: { | ||||||
|  |         add: 'primary', | ||||||
|  |         delete: 'danger', | ||||||
|  |         detail: 'info' | ||||||
|  |         // add more... | ||||||
|  |       }, | ||||||
|  |       colors: { | ||||||
|  |         delete: '#FF5454', | ||||||
|  |         preview: '#f09843', | ||||||
|  |         design: '#99089f', | ||||||
|  |         // 'view-trend': 'red' | ||||||
|  |         // add more... | ||||||
|  |       }, | ||||||
|  |       text: { | ||||||
|  |         // TODO: i18n | ||||||
|  |         edit: i18n.t('edit'), | ||||||
|  |         detail: i18n.t('detail'), | ||||||
|  |         delete: i18n.t('delete'), | ||||||
|  |         viewAttr: i18n.t('viewattr'), | ||||||
|  |         preview: i18n.t('preview'), | ||||||
|  |         design: i18n.t('design'), | ||||||
|  |         'view-trend': '查看趋势' | ||||||
|  |         // add more... | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   methods: { | ||||||
|  |     // 发射事件 | ||||||
|  |     emit(opt) { | ||||||
|  |       let emitFull = false | ||||||
|  |       let eventType = 'default' | ||||||
|  |       let customField | ||||||
|  |       if (typeof opt === 'object') { | ||||||
|  |         eventType = opt.name | ||||||
|  |         customField = opt.emitField || 'id' | ||||||
|  |         emitFull = opt.emitFull || false | ||||||
|  |       } else { | ||||||
|  |         eventType = opt | ||||||
|  |       } | ||||||
|  |       this.$emit('emit-data', { type: eventType, data: emitFull ? this.injectData : customField ? this.injectData[customField] : this.injectData.id }) | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   render: function (h) { | ||||||
|  |     let btns = [] | ||||||
|  |     for (const optionStr of this.injectData.head?.options) { | ||||||
|  |       const optObj = typeof optionStr === 'object' | ||||||
|  |       // btns.push(h('el-button', { props: { type: this.btnTypes[optionStr] } }, optionStr)) | ||||||
|  |       btns.push(h('el-button', { props: { type: 'text' }, style: { color: optObj ? this.colors[optionStr.name] : this.colors[optionStr] || '#409EFF' }, on: { click: this.emit.bind(null, optionStr) } }, typeof optionStr === 'object' ? this.text[optionStr.name] : this.text[optionStr])) | ||||||
|  |     } | ||||||
|  |     return h('span', null, btns) | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										40
									
								
								src/components/base-table/components/table-head.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								src/components/base-table/components/table-head.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,40 @@ | |||||||
|  | <template> | ||||||
|  | 	<el-table-column | ||||||
|  | 		:label="opt.label ? opt.label : opt.name" | ||||||
|  | 		:prop="opt.prop || null" | ||||||
|  | 		:width="opt.width || null" | ||||||
|  | 		:min-width="opt.minWidth || null" | ||||||
|  | 		:fixed="opt.fixed || null" | ||||||
|  | 		:show-overflow-tooltip="opt.showOverflowTooltip || false" | ||||||
|  | 		filter-placement="top" | ||||||
|  | 		:align="opt.align || null" | ||||||
|  | 		v-bind="opt.more" | ||||||
|  | 	> | ||||||
|  | 		<template v-if="opt.prop" slot-scope="scope"> | ||||||
|  | 			<component v-if="opt.subcomponent" :is="opt.subcomponent" :key="idx + 'sub'" :inject-data="{ ...scope.row, head: opt }" @emit-data="handleSubEmitData" /> | ||||||
|  | 			<!-- 直接展示数据或应用过滤器 --> | ||||||
|  | 			<span v-else>{{ scope.row[opt.prop] | commonFilter(opt.filter) }}</span> | ||||||
|  | 		</template> | ||||||
|  | 		<!-- 递归 --> | ||||||
|  | 		<template v-if="!opt.prop && opt.children"> | ||||||
|  | 			<TableHead v-for="(subhead, index) in opt.children" :key="'subhead' + index" :opt="subhead" /> | ||||||
|  | 		</template> | ||||||
|  | 	</el-table-column> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | export default { | ||||||
|  | 	name: 'TableHead', | ||||||
|  | 	filters: { | ||||||
|  | 		commonFilter: (source, filterType = a => a) => { | ||||||
|  | 			return filterType(source) | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	props: { | ||||||
|  | 		opt: { | ||||||
|  | 			type: Object, | ||||||
|  | 			default: () => ({}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										108
									
								
								src/components/base-table/index.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										108
									
								
								src/components/base-table/index.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,108 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="base-table"> | ||||||
|  | 		<el-table | ||||||
|  | 			:data="data" | ||||||
|  | 			style="width: 100%" | ||||||
|  | 			fit | ||||||
|  | 			border | ||||||
|  | 			:header-cell-style="{ background: '#FAFAFA', color: '#606266', height: '40px' }" | ||||||
|  | 			:max-height="maxHeight" | ||||||
|  | 			:span-method="spanMethod || null" | ||||||
|  | 		> | ||||||
|  | 			<!-- 表格头定义 --> | ||||||
|  | 			<template v-for="(head, idx) in tableHeadConfigs"> | ||||||
|  | 				<!-- 带type的表头 --> | ||||||
|  | 				<el-table-column | ||||||
|  | 					:key="idx" | ||||||
|  | 					v-if="head.type" | ||||||
|  | 					:type="head.type" | ||||||
|  | 					:label="head.label || head.name || ''" | ||||||
|  | 					:header-align="head.align || 'center'" | ||||||
|  | 					:align="head.align || 'center'" | ||||||
|  | 					:width="head.width || 50" | ||||||
|  | 					:index="head.type === 'index' ? val => { | ||||||
|  | 						return val + 1 + (page - 1) * size | ||||||
|  | 					} : null" | ||||||
|  | 					v-bind="head.more" | ||||||
|  | 				></el-table-column> | ||||||
|  | 				<!-- 普通的表头 --> | ||||||
|  | 				<el-table-column | ||||||
|  | 					v-else | ||||||
|  | 					:key="idx + 'else'" | ||||||
|  | 					:label="head.label ? head.label : head.name" | ||||||
|  | 					:prop="head.prop || null" | ||||||
|  | 					:width="head.width || null" | ||||||
|  | 					:min-width="head.minWidth || null" | ||||||
|  | 					:fixed="head.fixed || null" | ||||||
|  | 					:show-overflow-tooltip="head.showOverflowTooltip || true" | ||||||
|  | 					:tooltip-effect="head.tooltipEffect || 'light'" | ||||||
|  | 					filter-placement="top" | ||||||
|  | 					:align="head.align || null" | ||||||
|  | 					v-bind="head.more" | ||||||
|  | 				> | ||||||
|  | 					<!-- 子组件 --> | ||||||
|  | 					<template v-if="head.prop" slot-scope="scope"> | ||||||
|  | 						<component v-if="head.subcomponent" :is="head.subcomponent" :key="idx + 'sub'" :inject-data="{ ...scope.row, head }" @emit-data="handleSubEmitData" /> | ||||||
|  | 						<!-- 直接展示数据或应用过滤器 --> | ||||||
|  | 						<span v-else>{{ scope.row[head.prop] | commonFilter(head.filter) }}</span> | ||||||
|  | 					</template> | ||||||
|  |  | ||||||
|  | 					<!-- 多级表头 --> | ||||||
|  | 					<template v-if="!head.prop && head.children"> | ||||||
|  | 						<TableHead v-for="(subhead, subindex) in head.children" :key="'subhead-' + idx + '-subindex-' + subindex" :opt="subhead" /> | ||||||
|  | 					</template> | ||||||
|  | 				</el-table-column> | ||||||
|  | 			</template> | ||||||
|  | 		</el-table> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import TableHead from './components/table-head.vue' | ||||||
|  | export default { | ||||||
|  | 	name: 'BaseTable', | ||||||
|  | 	props: { | ||||||
|  | 		tableHeadConfigs: { | ||||||
|  | 			type: Array, | ||||||
|  | 			default: () => [] | ||||||
|  | 		}, | ||||||
|  | 		data: { | ||||||
|  | 			type: Array, | ||||||
|  | 			default: () => [] | ||||||
|  | 		}, | ||||||
|  | 		maxHeight: { | ||||||
|  | 			type: Number, | ||||||
|  | 			default: 500 | ||||||
|  | 		}, | ||||||
|  | 		spanMethod: { | ||||||
|  | 			type: Function, | ||||||
|  | 			default: () => { | ||||||
|  | 				;() => [0, 0] | ||||||
|  | 			}, | ||||||
|  | 			required: false | ||||||
|  | 		}, | ||||||
|  | 		page: { | ||||||
|  | 			type: Number, | ||||||
|  | 			default: 1 | ||||||
|  | 		}, | ||||||
|  | 		size: { | ||||||
|  | 			type: Number, | ||||||
|  | 			default: 10 | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	filters: { | ||||||
|  | 		commonFilter: (source, filterType = a => a) => { | ||||||
|  | 			return filterType(source) | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	data() { | ||||||
|  | 		return {} | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		handleSubEmitData(payload) { | ||||||
|  | 			this.$emit('operate-event', payload) | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	components: { TableHead } | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										213
									
								
								src/components/base-upload/index.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										213
									
								
								src/components/base-upload/index.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,213 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="base-upload" style="border-radius: 8px; margin-top: 48px; padding: 0; max-height: 500px;"> | ||||||
|  | 		<el-upload | ||||||
|  | 			class="yd-upload" | ||||||
|  | 			action="#" | ||||||
|  | 			:http-request="handleUpload" | ||||||
|  | 			multiple | ||||||
|  | 			:file-list="fileList" | ||||||
|  | 			:on-preview="handleDownload" | ||||||
|  | 			:on-remove="handleRemove" | ||||||
|  | 			:before-upload="/.*?image.*?/i.test(extraParams.typeCode) ? validateImage : validateFile" | ||||||
|  | 		> | ||||||
|  | 			<!-- :before-remove="beforeRemove" --> | ||||||
|  | 			<!-- accept="image/*" --> | ||||||
|  | 			<!-- <el-upload class="yd-upload" :action="$http.adornUrl(url)" multiple name="files" :data="extraParams" :file-list="fileList" :on-remove="handleRemove" :before-remove="beforeRemove"> --> | ||||||
|  | 			<el-button :disabled="readOnly" type="primary">{{ buttonContent }}</el-button> | ||||||
|  | 			<div v-if="tip" slot="tip" class="el-upload__tip">{{ tip }}</div> | ||||||
|  | 		</el-upload> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { pick } from 'lodash/object' | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	name: 'BaseUpload', | ||||||
|  | 	props: { | ||||||
|  | 		url: String, | ||||||
|  | 		buttonContent: String, | ||||||
|  | 		tip: { | ||||||
|  | 			type: String, | ||||||
|  | 			default: null | ||||||
|  | 		}, | ||||||
|  | 		extraParams: { | ||||||
|  | 			type: Object, | ||||||
|  | 			default: () => ({}) | ||||||
|  | 		}, | ||||||
|  | 		uploaderInjectFileList: { | ||||||
|  | 			// 从外部传进来 fileList,用于展示文件列表用 | ||||||
|  | 			type: Array, | ||||||
|  | 			default: () => [] | ||||||
|  | 		}, | ||||||
|  | 		readOnly: { | ||||||
|  | 			type: Boolean, | ||||||
|  | 			default: false | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	// inject: { | ||||||
|  | 	// 	parentDataForm: "_df" | ||||||
|  | 	// }, | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			fileList: [] | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	mounted() { | ||||||
|  | 		this.fileList.splice(0) | ||||||
|  |  | ||||||
|  | 		this.$watch('uploaderInjectFileList', function(val) { | ||||||
|  | 			if (val && val.length) { | ||||||
|  | 				// console.log('this.uploaderInjectFileList', this.uploaderInjectFileList) | ||||||
|  | 				/** uploaderInjectFileList 里关于文件的信息比较全,需要手动过滤一下 */ | ||||||
|  | 				this.fileList = val.map(item => { | ||||||
|  | 					const name = item.fileUrl.split('/').pop() | ||||||
|  | 					return { ...pick(item, ['id', 'fileName', 'typeCode']), name } | ||||||
|  | 				}) | ||||||
|  | 			} | ||||||
|  | 			// console.log('fillist: ', this.fileList) | ||||||
|  | 		}) | ||||||
|  |  | ||||||
|  | 		// if (this.parentDataForm) { | ||||||
|  | 		// 	console.log('parent dataform: ', this.parentDataForm) | ||||||
|  | 		// } | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		/** 自定义上传行为 */ | ||||||
|  | 		handleUpload(file) { | ||||||
|  | 			const formData = new FormData() | ||||||
|  | 			let files = file.file | ||||||
|  | 			formData.append('files', files) | ||||||
|  |  | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl(this.url), | ||||||
|  | 				method: 'POST', | ||||||
|  | 				data: formData, | ||||||
|  | 				params: { | ||||||
|  | 					typeCode: this.extraParams.typeCode | ||||||
|  | 				} | ||||||
|  | 			}).then(({ data: res }) => { | ||||||
|  | 				if (res && res.code === 0) { | ||||||
|  | 					res.data.forEach(item => { | ||||||
|  | 						const ext = item.fileUrl.split('.').reverse()[0] | ||||||
|  | 						const name = `${item.fileName}.${ext}` | ||||||
|  | 						this.fileList.push({ ...pick(item, ['id', 'fileName', 'typeCode']), name }) | ||||||
|  | 					}) | ||||||
|  | 					// TODO: 在新增和更新阶段,带入 fileIds[] 数组给后端,就可完成文件和设备类型的绑定、删除操作 | ||||||
|  | 					this.$emit('uploader-update-filelist', this.fileList) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		/** 大小验证,由配置文件开启 */ | ||||||
|  | 		validateFile(file) { | ||||||
|  | 			const isRightSize = file.size / 1024 / 1024 < 2 | ||||||
|  | 			if (!isRightSize) { | ||||||
|  | 				// this.$message.error(this.$t('upload.picSizeAlarm')) | ||||||
|  | 				this.$message.error('文件不应超过 2MB') | ||||||
|  | 			} | ||||||
|  | 			return isRightSize | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		/** 图片验证,由配置文件开启 */ | ||||||
|  | 		validateImage(file) { | ||||||
|  | 			// console.log('[*] 验证图片') | ||||||
|  |  | ||||||
|  | 			const isRightSize = file.size / 1024 / 1024 < 2 | ||||||
|  | 			if (!isRightSize) { | ||||||
|  | 				this.$message.error('文件不应超过 2MB') | ||||||
|  | 				// this.$message.error(this.$t('upload.picSizeAlarm')) | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			const isAccept = new RegExp('image/*').test(file.type) | ||||||
|  | 			if (!isAccept) { | ||||||
|  | 				// this.$message.error(this.$t('upload.picAlarm')) | ||||||
|  | 				this.$message.error('只允许上传图片') | ||||||
|  | 			} | ||||||
|  | 			return isRightSize && isAccept | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		/** 点击下载 */ | ||||||
|  | 		handleDownload({ id: fileId, name: fileName }) { | ||||||
|  | 			const type = { | ||||||
|  | 				download: 1, | ||||||
|  | 				preview: 0 | ||||||
|  | 			} | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/attachment/downloadFile'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams({ | ||||||
|  | 					attachmentId: fileId, | ||||||
|  | 					type: type.download | ||||||
|  | 					// fileName, | ||||||
|  | 					// outputQuality, | ||||||
|  | 					// scale | ||||||
|  | 				}), | ||||||
|  | 				responseType: 'blob' | ||||||
|  | 			}).then(({ data: res }) => { | ||||||
|  | 				const blob = new Blob([res]) | ||||||
|  | 				// console.log('blob', blob) | ||||||
|  | 				if ('download' in document.createElement('a')) { | ||||||
|  | 					const alink = document.createElement('a') | ||||||
|  | 					// console.log('filename: ', fileName) | ||||||
|  | 					alink.download = fileName | ||||||
|  | 					alink.style.display = 'none' | ||||||
|  | 					alink.target = '_blank' | ||||||
|  | 					alink.href = URL.createObjectURL(blob) | ||||||
|  | 					document.body.appendChild(alink) | ||||||
|  | 					alink.click() | ||||||
|  | 					URL.revokeObjectURL(alink.href) | ||||||
|  | 					document.body.removeChild(alink) | ||||||
|  | 				} else { | ||||||
|  | 					navigator.msSaveBlob(blob, fileName) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		// beforeRemove(file, filelist) { | ||||||
|  | 		// 	return this.$confirm(`确定移除 ${file.name}?`) | ||||||
|  | 		// }, | ||||||
|  |  | ||||||
|  | 		handleRemove(file, filelist) { | ||||||
|  | 			// 把更新后的 fileList 传递出去 | ||||||
|  | 			this.$emit('uploader-update-filelist', filelist) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style scoped> | ||||||
|  | .base-upload >>> .yd-upload { | ||||||
|  | 	margin-bottom: 20px; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* .base-upload >>> .el-button { | ||||||
|  | 	display: block; | ||||||
|  | 	width: 200px; | ||||||
|  | 	position: relative; | ||||||
|  | 	left: -50px; | ||||||
|  | } */ | ||||||
|  |  | ||||||
|  | /* .base-upload >>> .el-upload--text { | ||||||
|  | 	width: 100px; | ||||||
|  | 	position: relative; | ||||||
|  | 	left: -100px; | ||||||
|  | } */ | ||||||
|  |  | ||||||
|  | .base-upload >>> .el-upload__tip { | ||||||
|  | 	margin-top: 0; | ||||||
|  | 	margin-left: 5px; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .base-upload { | ||||||
|  | 	display: flex; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .yd-upload { | ||||||
|  | 	/* background-color: #efefef; */ | ||||||
|  | 	flex-grow: 1; | ||||||
|  | 	display: flex; | ||||||
|  | 	flex-direction: column; | ||||||
|  | 	align-items: flex-start; | ||||||
|  | } | ||||||
|  | </style> | ||||||
| @@ -76,7 +76,7 @@ export default { | |||||||
|       return data.name.indexOf(value) !== -1 |       return data.name.indexOf(value) !== -1 | ||||||
|     }, |     }, | ||||||
|     getDeptList (id) { |     getDeptList (id) { | ||||||
|       return this.$http.get('/sys/dept/list').then(({ data: res }) => { |       return this.$http.get(this.$http.adornUrl('/sys/dept/list')).then(({ data: res }) => { | ||||||
|         if (res.code !== 0) { |         if (res.code !== 0) { | ||||||
|           return this.$message.error(res.msg) |           return this.$message.error(res.msg) | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -90,7 +90,7 @@ export default { | |||||||
|       return data.name.indexOf(value) !== -1 |       return data.name.indexOf(value) !== -1 | ||||||
|     }, |     }, | ||||||
|     getDataList (id) { |     getDataList (id) { | ||||||
|       return this.$http.get('/sys/region/tree').then(({ data: res }) => { |       return this.$http.get(this.$http.adornUrl('/sys/region/tree')).then(({ data: res }) => { | ||||||
|         if (res.code !== 0) { |         if (res.code !== 0) { | ||||||
|           return this.$message.error(res.msg) |           return this.$message.error(res.msg) | ||||||
|         } |         } | ||||||
|   | |||||||
							
								
								
									
										67
									
								
								src/components/small-title/index.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								src/components/small-title/index.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,67 @@ | |||||||
|  | <!-- | ||||||
|  |  * @Author: lb | ||||||
|  |  * @Date: 2022-05-18 16:00:00 | ||||||
|  |  * @LastEditors: lb | ||||||
|  |  * @LastEditTime: 2022-05-18 16:00:00 | ||||||
|  |  * @Description: | ||||||
|  | --> | ||||||
|  | <template> | ||||||
|  | 	<div :class="[className, { 'p-0': noPadding }]"> | ||||||
|  | 		<slot /> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | export default { | ||||||
|  | 	props: { | ||||||
|  | 		size: { | ||||||
|  | 			// 取值范围:  xl lg md sm | ||||||
|  | 			type: String, | ||||||
|  | 			default: 'de', | ||||||
|  | 			validator: function(val) { | ||||||
|  | 				return ['xl', 'lg', 'de', 'md', 'sm'].indexOf(val) !== -1 | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		noPadding: { | ||||||
|  | 			type: Boolean, | ||||||
|  | 			default: false | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	computed: { | ||||||
|  | 		className: function() { | ||||||
|  | 			return `${this.size}-title` | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style lang="scss" scoped> | ||||||
|  | $pxls: (xl, 28px) (lg, 24px) (de, 22px) (md, 18px) (sm, 16px); | ||||||
|  | $mgr: 6px; | ||||||
|  | @each $size, $height in $pxls { | ||||||
|  | 	.#{$size}-title { | ||||||
|  | 		padding: 8px 0; | ||||||
|  | 		font-size: $height; | ||||||
|  | 		line-height: $height; | ||||||
|  | 		color: #000; | ||||||
|  | 		font-weight: 500; | ||||||
|  | 		font-family: '微软雅黑', 'Microsoft YaHei', Arial, Helvetica, sans-serif; | ||||||
|  |  | ||||||
|  | 		&::before { | ||||||
|  | 			content: ''; | ||||||
|  | 			display: inline-block; | ||||||
|  | 			vertical-align: top; | ||||||
|  | 			width: 4px; | ||||||
|  | 			height: $height + 2px; | ||||||
|  | 			border-radius: 1px; | ||||||
|  | 			margin-right: $mgr; | ||||||
|  | 			// background-color: #0b58ff; | ||||||
|  | 			background-color: #409EFF; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .p-0 { | ||||||
|  | 	padding: 0; | ||||||
|  | } | ||||||
|  | </style> | ||||||
							
								
								
									
										623
									
								
								src/i18n/en.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										623
									
								
								src/i18n/en.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,623 @@ | |||||||
|  | const t = {} | ||||||
|  |  | ||||||
|  | t.loading = 'Loading...' | ||||||
|  | t.createTime = 'Create Time' | ||||||
|  |  | ||||||
|  | t.brand = {} | ||||||
|  | t.brand.lg = 'Monitoring System' | ||||||
|  | t.brand.mini = 'PMS' | ||||||
|  |  | ||||||
|  | t.routes = {} | ||||||
|  | t.routes['产品池'] = 'Products Pool' | ||||||
|  | t.routes['基本资料'] = 'Basic Data' | ||||||
|  | t.routes['设备数采'] = 'Equipment PLC' | ||||||
|  | t.routes['厂务管理'] = 'Factory Management' | ||||||
|  | t.routes['报表管理'] = 'Report Management' | ||||||
|  | t.routes['质量管理'] = 'Quality Management' | ||||||
|  | t.routes['权限管理'] = 'Permission Management' | ||||||
|  | t.routes['系统设置'] = 'System Settings' | ||||||
|  | t.routes['日志管理'] = 'Log Management' | ||||||
|  | t.routes['数据分析'] = 'Data Analysis' | ||||||
|  |  | ||||||
|  | // 二级 | ||||||
|  | t.routes['厂务'] = 'Factory Affair' | ||||||
|  | t.routes['设备'] = 'Equipment' | ||||||
|  | t.routes['字典管理'] = 'Dict Management' | ||||||
|  | t.routes['PLC信息'] = 'PLC' | ||||||
|  | t.routes['设备与PLC关联配置'] = 'Relations between plc & equipments' | ||||||
|  | t.routes['设备生产实时数据'] = 'Realtime Equipment Data' | ||||||
|  | t.routes['产线生产实时数据'] = 'Realtime Productline Data' | ||||||
|  | t.routes['质量检查实时数据'] = 'Realtime Quality Inspection Data' | ||||||
|  | t.routes['报表总览'] = 'Report Overview' | ||||||
|  | t.routes['报表分类'] = 'Report Types' | ||||||
|  | t.routes['报表详情'] = 'Report Detail' | ||||||
|  | t.routes['报表设计'] = 'Report Design' | ||||||
|  | t.routes['报表预览'] = 'Report Preview' | ||||||
|  | t.routes['质量检测基础数据'] = 'Quality Inspection Basic Data' | ||||||
|  | t.routes['当前检测数据'] = 'Current Inspection Data' | ||||||
|  | t.routes['检测统计数据'] = 'Statistics Data' | ||||||
|  | t.routes['质量检查信息记录'] = 'Quality Inspection Records' | ||||||
|  | t.routes['用户管理'] = 'User Management' | ||||||
|  | t.routes['部门管理'] = 'Department Management' | ||||||
|  | t.routes['角色管理'] = 'Role Management' | ||||||
|  | t.routes['菜单管理'] = 'Menu Management' | ||||||
|  | t.routes['参数管理'] = 'Params Management' | ||||||
|  | t.routes['定时任务'] = 'Timed Tasks' | ||||||
|  | t.routes['文件上传'] = 'File Upload' | ||||||
|  | t.routes['登录日志'] = 'Login Records' | ||||||
|  | t.routes['操作日志'] = 'Oprations Records' | ||||||
|  | t.routes['设备效率分析'] = 'Equipment Efficiency Analysis' | ||||||
|  | t.routes['设备异常分析'] = 'Equipment Exceptions Analysis' | ||||||
|  | t.routes['设备状态时序图'] = 'Equipment Status Timesequence' | ||||||
|  |  | ||||||
|  | // 三级 | ||||||
|  | t.routes['工厂'] = 'Factory' | ||||||
|  | t.routes['产线'] = 'Product Lines' | ||||||
|  | t.routes['工段'] = 'Work Sections' | ||||||
|  | t.routes['设备类型'] = 'Equipment Types' | ||||||
|  | t.routes['设备分组'] = 'Equipment Groups' | ||||||
|  | t.routes['设备信息'] = 'Equipment Details' | ||||||
|  | t.routes['设备参数状态监控'] = 'Current Equipment State' | ||||||
|  | t.routes['设备分组报警信息'] = 'Equipment Group Alarm' | ||||||
|  | t.routes['设备历史参数'] = 'Equipment Historical Parameters' | ||||||
|  | t.routes['质量检测类型'] = 'Quality Inpection Types' | ||||||
|  | t.routes['质量检测信息'] = 'Quality Inpection Details' | ||||||
|  | t.routes['安灯检测盒'] = 'Andeng inspection box' | ||||||
|  |  | ||||||
|  |  | ||||||
|  | t.andeng = {} | ||||||
|  | t.andeng.inspectContent = 'Inspection Content' | ||||||
|  | t.andeng.btnVal = 'Button Value' | ||||||
|  | t.andeng.btnBoxModel = 'Button Box Model' | ||||||
|  |  | ||||||
|  |  | ||||||
|  | t.dictValueList = 'View Details' | ||||||
|  | t.save = 'Save' | ||||||
|  | t.add = 'Add' | ||||||
|  | t.delete = 'Delete' | ||||||
|  | t.deleteBatch = 'Delete Batch' | ||||||
|  | t.update = 'Update' | ||||||
|  | t.query = 'Search' | ||||||
|  | t.export = 'Export' | ||||||
|  | t.handle = 'Operations' | ||||||
|  | t.confirm = 'Confirm' | ||||||
|  | t.cancel = 'Cancel' | ||||||
|  | t.clear = 'Clear' | ||||||
|  | t.logout = 'Logout' | ||||||
|  | t.manage = 'Handle' | ||||||
|  | t.createDate = 'Create Date' | ||||||
|  | t.keyword = 'Keyword(s): ' | ||||||
|  | t.choose = 'Please Choose ' | ||||||
|  | t.remark = 'Remark' | ||||||
|  | t.delMark = 'Delete Mark ' | ||||||
|  | t.isvalid = 'is valid' | ||||||
|  | t.available = 'available' | ||||||
|  | t.unavailable = 'unavailable' | ||||||
|  | t.alert = 'alert' | ||||||
|  | t.creator = 'Creator' | ||||||
|  | t.creatorName = 'Creator\'s name' | ||||||
|  | t.updator = 'Updator' | ||||||
|  | t.updatorName = 'Updator\'s name' | ||||||
|  | t.updateTime = 'Update Time' | ||||||
|  | t.version = 'Version' | ||||||
|  | t.search = 'Search' | ||||||
|  | t.countPerPage = '每页数' // ? | ||||||
|  | t.currentPage = '当前页' // ? | ||||||
|  | t.fetchList = '获取数据列表' // ? | ||||||
|  | t.multi = '多选' // ? | ||||||
|  | t.do = '进行' // ? | ||||||
|  | t.submit = '表单提交' // ? | ||||||
|  | t.desc = 'Description' | ||||||
|  | t.disable = 'Disable' | ||||||
|  | t.equipment = 'Equipment' | ||||||
|  | t.enabled = 'Enabled' | ||||||
|  | t.cannotempty = 'can\'t be empty' | ||||||
|  | t.parameter = 'Parameters' | ||||||
|  | t.enable = 'Enable' | ||||||
|  | t.index = 'Index' | ||||||
|  | t.relation = '关联' | ||||||
|  | t.fetchInfo = 'Fetch Info' | ||||||
|  | t.name = 'Name' | ||||||
|  | t.code = 'Code' | ||||||
|  | t.attrName = 'Attribute name' | ||||||
|  | t.attrValue = 'Attribute value' | ||||||
|  | t.unit = 'Unit' | ||||||
|  | t.table = 'Table' | ||||||
|  | t.table2 = 'Table' | ||||||
|  | t.downloadurl = 'Download Url' | ||||||
|  | t.recordTime = 'Record Time' | ||||||
|  | t.notCollect = 'No' | ||||||
|  | t.collect = 'Yes' | ||||||
|  | t.required = 'Required' | ||||||
|  | t.paramUrl = 'Parameter url' | ||||||
|  | t.enname = 'English Name' | ||||||
|  | t.collectOrNot = 'Collect or not' | ||||||
|  | t.min = 'Min Value' | ||||||
|  | t.max = 'Max Value' | ||||||
|  | t.status = 'Status' | ||||||
|  | t.normal = 'Normal' | ||||||
|  | t.addr = 'Address' | ||||||
|  | t.planStop = 'Plan to stop' | ||||||
|  | t.startTime = 'Start Time' | ||||||
|  | t.endTime = 'End Time' | ||||||
|  | t.today = 'Today' | ||||||
|  |  | ||||||
|  | t.graph = 'Graph' | ||||||
|  | t.category = 'Category' | ||||||
|  | t.categoryName = 'Category Name' | ||||||
|  | t.categoryCode = 'Category Code' | ||||||
|  | t.rate = 'Rate' | ||||||
|  | t.link = 'Link Url' | ||||||
|  | t.refresh = 'Refresh' | ||||||
|  | t.abbr = 'Abbreviation' | ||||||
|  | t.detail = 'Details' | ||||||
|  | t.viewdetail = 'Details' | ||||||
|  | t.viewattr = 'View Attributions' | ||||||
|  | t.edit = 'Edit' | ||||||
|  | t.source = 'Source' | ||||||
|  | t.auto = 'Auto' | ||||||
|  | t.manual = 'Manually' | ||||||
|  | t.loaddone = 'Loaded' | ||||||
|  | t.produceTime = 'Date of manufacture' | ||||||
|  | t.enterTime = 'Enter Time' | ||||||
|  | t.manufacturer = 'Manufacturer' | ||||||
|  | t.success = 'success!' | ||||||
|  | t.all = 'All' | ||||||
|  | t.reset = 'Reset' | ||||||
|  | t.preview = 'Preview' | ||||||
|  | t.design = 'Design' | ||||||
|  | t.timetype = 'Time Type' | ||||||
|  | t.reftimerange = 'By time range' | ||||||
|  | t.refdate = 'By date' | ||||||
|  | t.hour = 'Hour(s)' | ||||||
|  |  | ||||||
|  | t.errors = {} | ||||||
|  | t.errors.nosection = 'There is no sections on this product line.' | ||||||
|  | t.errors.numsection = 'There are {num} sections on this product line.' | ||||||
|  | t.errors.nodata = 'Error, no data available!' | ||||||
|  |  | ||||||
|  | t.hints = {} | ||||||
|  | t.hints.input = 'Please input ' | ||||||
|  | t.hints.select = 'Please select ' | ||||||
|  | t.hints.date = 'Please select date' | ||||||
|  | t.hints.checktime = 'Please select inspection time' | ||||||
|  | t.hints.number = 'Please input correct number' | ||||||
|  | t.hints.integer = 'Please input correct integer' | ||||||
|  | t.hints.addr = 'Please input address' | ||||||
|  | t.hints.upload2m = 'File size cannot be larger than 2MB (2048KB)' | ||||||
|  | t.hints.upload2mPic = 'Image files only. File size cannot be larger than 2MB (2048KB)' | ||||||
|  |  | ||||||
|  | t.factory = {} | ||||||
|  | t.factory.title = 'Factory' | ||||||
|  | t.factory.name = 'Factory Name' | ||||||
|  | t.factory.code = 'Factory Code' | ||||||
|  |  | ||||||
|  | t.prod = {} | ||||||
|  | t.prod.id = 'Product ID' | ||||||
|  | t.prod.name = 'Product Name' | ||||||
|  | t.prod.code = 'Product Code' | ||||||
|  | t.prod.type = 'Product Type' | ||||||
|  | t.prod.area = 'Area' | ||||||
|  | t.prod.spec = 'Product Specification' | ||||||
|  | t.prod.attr = 'Attributes' | ||||||
|  | t.prod.attrcode = 'Attribute Code' | ||||||
|  | t.prod.attrcodeHints = 'Please input attribute code' | ||||||
|  | t.prod.attrname = 'Attribute Node' | ||||||
|  | t.prod.attrnameHints = 'Please input attribute name' | ||||||
|  | t.prod.attrvalueHints = 'Please input attribute value' | ||||||
|  | t.prod.descHints = 'Please input description' | ||||||
|  | // t.prod.processTime = 'Processing Time (Hours)' | ||||||
|  | t.prod.processTime = 'Processing Time (s)' | ||||||
|  | t.prod.processTimeHints = 'Please input processing time' | ||||||
|  | t.prod.relatedPid = 'Related Product' | ||||||
|  |  | ||||||
|  | t.alarm = {} | ||||||
|  | t.alarm.name = 'Alarm' | ||||||
|  | t.alarm.info = 'Alarm Informations' | ||||||
|  | t.alarm.view = 'View Alarm' | ||||||
|  | t.alarm.eq = 'Alarm Equipment' | ||||||
|  | t.alarm.type = 'Alarm Type' | ||||||
|  | t.alarm.code = 'Alarm Code' | ||||||
|  | t.alarm.level = 'Alarm Level' | ||||||
|  | t.alarm.content = 'Alarm Content' | ||||||
|  | t.alarm.source = 'Alarm Source' | ||||||
|  | t.alarm.det = 'Alarm Details' | ||||||
|  | t.alarm.externalCode = 'External Code' | ||||||
|  | t.alarm.description = 'Description' | ||||||
|  | t.alarm.remark = 'Remark' | ||||||
|  |  | ||||||
|  |  | ||||||
|  | t.report = {} | ||||||
|  | t.report.name = 'Report Name' | ||||||
|  | t.report.det = 'Report Content' | ||||||
|  | t.report.type = 'Report Type' | ||||||
|  | t.report.code = 'Report Code' | ||||||
|  | t.report.lnk = 'Report Url' | ||||||
|  |  | ||||||
|  | t.inspect = {} | ||||||
|  | t.inspect.type = 'Inspection Type' | ||||||
|  | t.inspect.code = 'Inspection Code' | ||||||
|  | t.inspect.det = 'Inspection Details' | ||||||
|  | t.inspect.detcode = 'Inspection Content Code' | ||||||
|  | t.inspect.people = 'Inspector' | ||||||
|  | t.inspect.time = 'Inspection Time' | ||||||
|  | t.inspect.typetotal = 'Total Inspection Types' | ||||||
|  | t.inspect.typename = 'Inspection Type' | ||||||
|  | t.inspect.typecode = 'Inspection Code' | ||||||
|  | t.inspect.ioTotal = 'Data of input/output and total inspections' | ||||||
|  | t.inspect.plTotal = 'Inspection contents in each line' | ||||||
|  | t.inspect.inTotal = 'Up Sum' | ||||||
|  | t.inspect.outTotal = 'Down Sum' | ||||||
|  | t.inspect.checkTotal = 'Total Inspections' | ||||||
|  | t.inspect.rate = 'Rate' | ||||||
|  | t.inspect.typeCount = 'Data of inspection types' | ||||||
|  |  | ||||||
|  |  | ||||||
|  | t.realtime = {} | ||||||
|  | t.realtime.eq = 'Realtime data of equipments' | ||||||
|  | t.realtime.pl = 'Realtime data of product lines' | ||||||
|  | t.realtime.inspect = 'Realtime data of quality inspections' | ||||||
|  | t.realtime.in = 'in' | ||||||
|  | t.realtime.out = 'out' | ||||||
|  | t.realtime.data = 'scrap' | ||||||
|  | t.realtime.num = 'scrap quantity' | ||||||
|  | t.realtime.rate = 'scrap rate' | ||||||
|  | t.realtime.total = 'total production' | ||||||
|  | t.realtime.goodrate = 'Passed Rate' | ||||||
|  | t.realtime.runState = 'running state' | ||||||
|  | t.realtime.state = 'status' | ||||||
|  | t.realtime.hasFault = 'malfunction' | ||||||
|  | t.realtime.recentParamValue = 'recent parameters' | ||||||
|  | t.realtime.view = 'view' | ||||||
|  | t.realtime.input = 'input' //'投入数' | ||||||
|  | t.realtime.output = 'output' //'产出数' | ||||||
|  | t.realtime.eqName = 'Equipment name' | ||||||
|  | t.realtime.eqCode = 'Equipment cdoe' | ||||||
|  | t.realtime.productionSnapshotTime = 'production recording time' // '生产量记录时间' | ||||||
|  | t.realtime.statusSnapshotTime = 'status recording time' // '状态记录时间' | ||||||
|  | t.realtime.refresh = 'Refresh data...' | ||||||
|  |  | ||||||
|  |  | ||||||
|  | t.ws = {} | ||||||
|  | t.ws.title = 'Work Section' | ||||||
|  | t.ws.id = 'Work Section ID' | ||||||
|  | t.ws.name = 'Work Section Name' | ||||||
|  | t.ws.code = 'Work Section Code' | ||||||
|  | t.ws.binded = 'Binded Equipments' | ||||||
|  | t.ws.unbind = 'Equipment Name' | ||||||
|  | t.ws.eqbindplaceholder = 'Select an equipment' | ||||||
|  | t.ws.sort = 'sort' | ||||||
|  | t.ws.setorder = 'Please input order of equipments in the work section.' | ||||||
|  | t.ws.bind = 'bind' | ||||||
|  | t.ws.eqbind = 'Binded Equipment(s)' | ||||||
|  | t.ws.belong = 'Product Line' | ||||||
|  |  | ||||||
|  | t.file = {} | ||||||
|  | t.file.title = 'File' | ||||||
|  | t.file.name = 'File Name' | ||||||
|  | t.file.code = 'File Code' | ||||||
|  | t.file.typeName = 'File Type' | ||||||
|  | t.file.typeCode = 'File Type Code' | ||||||
|  |  | ||||||
|  | t.eq = {} | ||||||
|  | t.eq.title = 'Equipment' | ||||||
|  | t.eq.id = 'Equipment ID' | ||||||
|  | t.eq.name = 'Equipment Name' | ||||||
|  | t.eq.code = 'Equipment Code' | ||||||
|  | t.eq.type = 'Equipment Type' | ||||||
|  | t.eq.grade = 'Specification of equipment' | ||||||
|  | t.eq.group = 'Equipment Group' | ||||||
|  | t.eq.groupname = 'Group Name' | ||||||
|  | t.eq.groupcode = 'Group Code' | ||||||
|  | t.eq.excode = 'External Code' | ||||||
|  | t.eq.input = 'Input Device' | ||||||
|  | t.eq.output = 'Output Device' | ||||||
|  | t.eq.tvalue = 'Device\'s TT Value' | ||||||
|  | t.eq.processingTime = 'Processing Time (s)' | ||||||
|  | t.eq.dtype = 'Data source' | ||||||
|  | t.eq.dtypenone = 'none' | ||||||
|  | t.eq.dtypeinput = 'Input Data Device' | ||||||
|  | t.eq.dtypeoutput = 'Output Data Device' | ||||||
|  | t.eq.upload = 'Upload' | ||||||
|  | t.eq.image = 'Equipment Pictures' | ||||||
|  | t.eq.viewattr = 'Equipment Attributions' | ||||||
|  | t.eq.plcbarcode = 'PLC Bar Code' | ||||||
|  | t.eq.plccode = 'PLC Code' | ||||||
|  | t.eq.plcname = 'PLC Name' | ||||||
|  | t.eq.port = 'Port' | ||||||
|  | t.eq.type = 'Type' | ||||||
|  | t.eq.typecode = 'Type Code' | ||||||
|  | t.eq.parent = 'Parent' | ||||||
|  | t.eq.mtbf = 'Mean time between failures[MTBF] (h)' | ||||||
|  | t.eq.mttr = 'Mean time to repair[MTTR] (h)' | ||||||
|  | t.eq.efficienttimeh = 'Working time(h)' | ||||||
|  | t.eq.shutdowntimeh = 'Off time(h)' | ||||||
|  | t.eq.worktimeh = 'Working time(h)' | ||||||
|  | t.eq.downtimeh = 'Malfunction duration(h)' | ||||||
|  | t.eq.stoptimeh = 'Halt duration(h)' | ||||||
|  | t.eq.worktime = 'Functioning duration' | ||||||
|  | t.eq.stoptime = 'Halt duration' | ||||||
|  | t.eq.downtime = 'Malfunction duration' | ||||||
|  | t.eq.downcount = 'Malfunction counts' | ||||||
|  | t.eq.downrate = 'Malfunction rates' | ||||||
|  | t.eq.stoplost = 'Lost' | ||||||
|  | t.eq.ratio = 'percentage' | ||||||
|  | t.eq.time = 'time' | ||||||
|  | t.eq.timetrend = 'trend' | ||||||
|  | t.eq.nogap = 'no interval' | ||||||
|  | t.eq.monthgap = 'by month' | ||||||
|  | t.eq.daygap = 'by day' | ||||||
|  | t.eq.weekgap = 'by week' | ||||||
|  | t.eq.hourgap = 'by hour' | ||||||
|  | t.eq.workdurationratio = 'Functioning duration ratio' // '工作时长比率' | ||||||
|  | t.eq.stopdurationratio = 'Halt duration ratio' // '停机时长比率' | ||||||
|  | t.eq.stopratio = 'Halt ratio' // '停机比率' | ||||||
|  | t.eq.downdurationratio = 'Malfunction duration ratio' // '故障时长比率' | ||||||
|  | t.eq.speedefficiency = 'Speed launch rate' //'速度开动率' | ||||||
|  | t.eq.speedlost = 'Speed lost' | ||||||
|  | t.eq.timeefficiency = 'Time launch rate' //'时间开动率' | ||||||
|  | t.eq.year = 'year' | ||||||
|  | t.eq.month = 'month' | ||||||
|  | t.eq.realyield = 'Actual processing speed' | ||||||
|  | t.eq.designyield = 'Theoretical processing speed' | ||||||
|  | t.eq.viewtrend = 'View Trends' | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | t.pl = {} | ||||||
|  | t.pl.title = 'Product Line' | ||||||
|  | t.pl.id = 'Product Line ID' | ||||||
|  | t.pl.name = 'Product Line Name' | ||||||
|  | t.pl.code = 'Product Line Code' | ||||||
|  | t.pl.status = 'Product Line Status' | ||||||
|  | t.pl.belong = 'Product Line' | ||||||
|  | t.pl.tvalue = 'TT Value' | ||||||
|  | t.pl.factoryHints = 'Please select a factory' | ||||||
|  |  | ||||||
|  |  | ||||||
|  | t.prompt = {} | ||||||
|  | t.prompt.title = 'Prompt' | ||||||
|  | t.prompt.info = 'Are you sure to {handle}?' | ||||||
|  | t.prompt.sure = 'Are you sure to delete this record?' | ||||||
|  | t.prompt.success = 'success' | ||||||
|  | t.prompt.failed = 'failed' | ||||||
|  | t.prompt.deleteBatch = 'Please choose items to delete.' | ||||||
|  | t.prompt.month = 'Please choose month' | ||||||
|  |  | ||||||
|  | t.validate = {} | ||||||
|  | t.validate.required = 'This is required.' | ||||||
|  | t.validate.format = '{attr} has a wrong format.' | ||||||
|  |  | ||||||
|  | t.upload = {} | ||||||
|  | t.upload.title = 'Upload Assets' | ||||||
|  | t.upload.text = '将文件拖到此处,或<em>点击上传</em>' | ||||||
|  | t.upload.tip = 'Only support files with format: {format}' | ||||||
|  | t.upload.button = 'upload' | ||||||
|  |  | ||||||
|  | t.datePicker = {} | ||||||
|  | t.datePicker.range = 'to' | ||||||
|  | t.datePicker.start = 'Start Time' | ||||||
|  | t.datePicker.end = 'End Time' | ||||||
|  | t.datePicker.starttime = 'Start Time' | ||||||
|  | t.datePicker.endtime = 'End Time' | ||||||
|  |  | ||||||
|  | t.fullscreen = {} | ||||||
|  | t.fullscreen.prompt = 'This operation is not supported by your browser.' | ||||||
|  |  | ||||||
|  | t.updatePassword = {} | ||||||
|  | t.updatePassword.title = 'Update Password' | ||||||
|  | t.updatePassword.username = 'Username' | ||||||
|  | t.updatePassword.password = 'Current Password' | ||||||
|  | t.updatePassword.newPassword = 'New Password' | ||||||
|  | t.updatePassword.confirmPassword = 'Confirm Password' | ||||||
|  | t.updatePassword.validate = {} | ||||||
|  | t.updatePassword.validate.confirmPassword = 'The two passwords are different. Please check again.' | ||||||
|  |  | ||||||
|  | t.contentTabs = {} | ||||||
|  | t.contentTabs.closeCurrent = 'Close current tab' | ||||||
|  | t.contentTabs.closeOther = 'Close other tabs' | ||||||
|  | t.contentTabs.closeAll = 'Close all tabs' | ||||||
|  |  | ||||||
|  | /* 页面 */ | ||||||
|  | t.notFound = {} | ||||||
|  | t.notFound.desc = 'Sorry! The page you\'re looking is missing.' | ||||||
|  | t.notFound.back = 'Back' | ||||||
|  | t.notFound.home = 'Home Page' | ||||||
|  |  | ||||||
|  | t.login = {} | ||||||
|  | t.login.title = 'Login' | ||||||
|  | t.login.username = 'Username' | ||||||
|  | t.login.password = 'Password' | ||||||
|  | t.login.captcha = 'Captcha' | ||||||
|  | t.login.demo = 'Demo' | ||||||
|  | t.login.copyright = 'Copyright @Intelligent Automation Research Institute Co., Ltd  Version: 1.0' | ||||||
|  |  | ||||||
|  | t.schedule = {} | ||||||
|  | t.schedule.beanName = 'Bean Name' | ||||||
|  | t.schedule.beanNameTips = 'spring bean name, eg: testTask' | ||||||
|  | t.schedule.pauseBatch = 'Pause' | ||||||
|  | t.schedule.resumeBatch = 'Resume' | ||||||
|  | t.schedule.runBatch = 'Run' | ||||||
|  | t.schedule.log = 'Log List' | ||||||
|  | t.schedule.params = 'Parameters' | ||||||
|  | t.schedule.cronExpression = 'cron expression' | ||||||
|  | t.schedule.cronExpressionTips = 'ex: 0 0 12 * * ?' | ||||||
|  | t.schedule.remark = 'Remark' | ||||||
|  | t.schedule.status = 'Status' | ||||||
|  | t.schedule.status0 = 'Pause' | ||||||
|  | t.schedule.status1 = 'Normal' | ||||||
|  | t.schedule.statusLog0 = 'Failed' | ||||||
|  | t.schedule.statusLog1 = 'Success' | ||||||
|  | t.schedule.pause = 'Pause' | ||||||
|  | t.schedule.resume = 'Resume' | ||||||
|  | t.schedule.run = 'Excute' | ||||||
|  | t.schedule.jobId = 'Job ID' | ||||||
|  | t.schedule.times = 'Time Cost (ms)' | ||||||
|  | t.schedule.createDate = 'Executed Tune' // ? | ||||||
|  |  | ||||||
|  | t.oss = {} | ||||||
|  | t.oss.config = '云存储配置' | ||||||
|  | t.oss.upload = '上传文件' | ||||||
|  | t.oss.url = 'URL地址' | ||||||
|  | t.oss.createDate = 'Create Time' | ||||||
|  | t.oss.type = '类型' | ||||||
|  | t.oss.type1 = '七牛' | ||||||
|  | t.oss.type2 = '阿里云' | ||||||
|  | t.oss.type3 = '腾讯云' | ||||||
|  | t.oss.qiniuDomain = '域名' | ||||||
|  | t.oss.qiniuDomainTips = '七牛绑定的域名' | ||||||
|  | t.oss.qiniuPrefix = '路径前缀' | ||||||
|  | t.oss.qiniuPrefixTips = '不设置默认为空' | ||||||
|  | t.oss.qiniuAccessKey = 'AccessKey' | ||||||
|  | t.oss.qiniuAccessKeyTips = '七牛AccessKey' | ||||||
|  | t.oss.qiniuSecretKey = 'SecretKey' | ||||||
|  | t.oss.qiniuSecretKeyTips = '七牛SecretKey' | ||||||
|  | t.oss.qiniuBucketName = '空间名' | ||||||
|  | t.oss.qiniuBucketNameTips = '七牛存储空间名' | ||||||
|  | t.oss.aliyunDomain = '域名' | ||||||
|  | t.oss.aliyunDomainTips = '阿里云绑定的域名,如:http://cdn.renren.io' | ||||||
|  | t.oss.aliyunPrefix = '路径前缀' | ||||||
|  | t.oss.aliyunPrefixTips = '不设置默认为空' | ||||||
|  | t.oss.aliyunEndPoint = 'EndPoint' | ||||||
|  | t.oss.aliyunEndPointTips = '阿里云EndPoint' | ||||||
|  | t.oss.aliyunAccessKeyId = 'AccessKeyId' | ||||||
|  | t.oss.aliyunAccessKeyIdTips = '阿里云AccessKeyId' | ||||||
|  | t.oss.aliyunAccessKeySecret = 'AccessKeySecret' | ||||||
|  | t.oss.aliyunAccessKeySecretTips = '阿里云AccessKeySecret' | ||||||
|  | t.oss.aliyunBucketName = 'BucketName' | ||||||
|  | t.oss.aliyunBucketNameTips = '阿里云BucketName' | ||||||
|  | t.oss.qcloudDomain = '域名' | ||||||
|  | t.oss.qcloudDomainTips = '腾讯云绑定的域名' | ||||||
|  | t.oss.qcloudPrefix = '路径前缀' | ||||||
|  | t.oss.qcloudPrefixTips = '不设置默认为空' | ||||||
|  | t.oss.qcloudAppId = 'AppId' | ||||||
|  | t.oss.qcloudAppIdTips = '腾讯云AppId' | ||||||
|  | t.oss.qcloudSecretId = 'SecretId' | ||||||
|  | t.oss.qcloudSecretIdTips = '腾讯云SecretId' | ||||||
|  | t.oss.qcloudSecretKey = 'SecretKey' | ||||||
|  | t.oss.qcloudSecretKeyTips = '腾讯云SecretKey' | ||||||
|  | t.oss.qcloudBucketName = 'BucketName' | ||||||
|  | t.oss.qcloudBucketNameTips = '腾讯云BucketName' | ||||||
|  | t.oss.qcloudRegion = '所属地区' | ||||||
|  | t.oss.qcloudRegionTips = '请选择' | ||||||
|  | t.oss.qcloudRegionBeijing1 = '北京一区(华北)' | ||||||
|  | t.oss.qcloudRegionBeijing = '北京' | ||||||
|  | t.oss.qcloudRegionShanghai = '上海(华东)' | ||||||
|  | t.oss.qcloudRegionGuangzhou = '广州(华南)' | ||||||
|  | t.oss.qcloudRegionChengdu = '成都(西南)' | ||||||
|  | t.oss.qcloudRegionChongqing = '重庆' | ||||||
|  | t.oss.qcloudRegionSingapore = '新加坡' | ||||||
|  | t.oss.qcloudRegionHongkong = '香港' | ||||||
|  | t.oss.qcloudRegionToronto = '多伦多' | ||||||
|  | t.oss.qcloudRegionFrankfurt = '法兰克福' | ||||||
|  |  | ||||||
|  | t.dept = {} | ||||||
|  | t.dept.name = 'Department Name' | ||||||
|  | t.dept.parentName = 'Superior Department' | ||||||
|  | t.dept.sort = 'Sort' | ||||||
|  | t.dept.parentNameDefault = 'First tier department' | ||||||
|  | t.dept.chooseerror = 'Please select a department' | ||||||
|  | t.dept.title = 'Department Selection' | ||||||
|  |  | ||||||
|  | t.dict = {} | ||||||
|  | t.dict.dictName = 'Dictionary Name' | ||||||
|  | t.dict.dictType = 'Dictionary Type' | ||||||
|  | t.dict.dictLabel = 'Dictionary Label' | ||||||
|  | t.dict.dictValue = 'Dictionary Value' | ||||||
|  | t.dict.sort = 'Sort' | ||||||
|  | t.dict.remark = 'Remark' | ||||||
|  | t.dict.createDate = 'Create Time' | ||||||
|  |  | ||||||
|  | t.logError = {} | ||||||
|  | t.logError.requestUri = 'Request URI' | ||||||
|  | t.logError.requestMethod = 'Request Method' | ||||||
|  | t.logError.requestParams = 'Request Parameters' | ||||||
|  | t.logError.ip = 'IP' | ||||||
|  | t.logError.userAgent = 'User Agent' | ||||||
|  | t.logError.createDate = 'Create Time' | ||||||
|  | t.logError.errorInfo = 'Exceptions' | ||||||
|  |  | ||||||
|  | t.logLogin = {} | ||||||
|  | t.logLogin.creatorName = 'User Name' | ||||||
|  | t.logLogin.status = 'Status' | ||||||
|  | t.logLogin.status0 = 'Failed' | ||||||
|  | t.logLogin.status1 = 'Success' | ||||||
|  | t.logLogin.status2 = 'Account has been locked' | ||||||
|  | t.logLogin.operation = 'Operation Type' | ||||||
|  | t.logLogin.operation0 = 'Login' | ||||||
|  | t.logLogin.operation1 = 'Logout' | ||||||
|  | t.logLogin.ip = 'IP' | ||||||
|  | t.logLogin.userAgent = 'User-Agent' | ||||||
|  | t.logLogin.createDate = 'Create Time' | ||||||
|  |  | ||||||
|  | t.logOperation = {} | ||||||
|  | t.logOperation.status = 'Status' | ||||||
|  | t.logOperation.status0 = 'Failed' | ||||||
|  | t.logOperation.status1 = 'Success' | ||||||
|  | t.logOperation.creatorName = 'User Name' | ||||||
|  | t.logOperation.operation = 'User Operations' | ||||||
|  | t.logOperation.requestUri = 'Request URI' | ||||||
|  | t.logOperation.requestMethod = 'Request Method' | ||||||
|  | t.logOperation.requestParams = 'Request Parameters' | ||||||
|  | t.logOperation.requestTime = 'Request Duration' | ||||||
|  | t.logOperation.ip = 'IP' | ||||||
|  | t.logOperation.userAgent = 'User-Agent' | ||||||
|  | t.logOperation.createDate = 'Create Time' | ||||||
|  |  | ||||||
|  | t.menu = {} | ||||||
|  | t.menu.name = 'Name' | ||||||
|  | t.menu.icon = 'Icons' | ||||||
|  | t.menu.type = 'Type' | ||||||
|  | t.menu.type0 = 'Menu' | ||||||
|  | t.menu.type1 = 'Button' | ||||||
|  | t.menu.sort = 'Sort' | ||||||
|  | t.menu.url = 'Route' | ||||||
|  | t.menu.permissions = '授权标识' | ||||||
|  | t.menu.permissionsTips = '多个用逗号分隔,如:sys:menu:save,sys:menu:update' | ||||||
|  | t.menu.parentName = '上级菜单' | ||||||
|  | t.menu.parentNameDefault = 'First tier menu' | ||||||
|  | t.menu.resource = '授权资源' | ||||||
|  | t.menu.resourceUrl = '资源URL' | ||||||
|  | t.menu.resourceMethod = 'Request methods' | ||||||
|  | t.menu.resourceAddItem = '添加一项' | ||||||
|  |  | ||||||
|  | t.params = {} | ||||||
|  | t.params.name = 'Parameter Name' | ||||||
|  | t.params.code = 'Parameter Code' | ||||||
|  | t.params.paramCode = 'Parameter Code' | ||||||
|  | t.params.paramValue = 'Parameter Value' | ||||||
|  | t.params.paramStdValue = 'Standard Parameter Code' | ||||||
|  | t.params.plctitle = 'PLC Collection Parameters' | ||||||
|  | t.params.plcid = 'PLC连接表ID' | ||||||
|  | t.params.remark = 'Remark' | ||||||
|  |  | ||||||
|  | t.role = {} | ||||||
|  | t.role.name = 'Role Name' | ||||||
|  | t.role.remark = 'Remark' | ||||||
|  | t.role.createDate = 'Create Time' | ||||||
|  | t.role.menuList = 'Menu authorization' // ? | ||||||
|  | t.role.deptList = 'Data authorization' // ? | ||||||
|  |  | ||||||
|  | t.user = {} | ||||||
|  | t.user.username = 'User Name' | ||||||
|  | t.user.deptName = 'Department' | ||||||
|  | t.user.email = 'Email' | ||||||
|  | t.user.mobile = 'Phone' | ||||||
|  | t.user.status = 'Status' | ||||||
|  | t.user.status0 = 'Pause' // ? | ||||||
|  | t.user.status1 = 'Normal' | ||||||
|  | t.user.createDate = 'Create Time' | ||||||
|  | t.user.password = 'Password' | ||||||
|  | t.user.confirmPassword = 'Confirm Password' | ||||||
|  | t.user.realName = 'Actual Name' | ||||||
|  | t.user.gender = 'Gender' | ||||||
|  | t.user.gender0 = 'male' | ||||||
|  | t.user.gender1 = 'female' | ||||||
|  | t.user.gender2 = 'secret' | ||||||
|  | t.user.roleIdList = 'Role Configurations' | ||||||
|  | t.user.validate = {} | ||||||
|  | t.user.validate.confirmPassword = 'The two passwords are different. Please check again.' | ||||||
|  | t.user.select = 'Select an user' | ||||||
|  | t.user.selecterror = 'Pick up a record' | ||||||
|  |  | ||||||
|  | export default t | ||||||
| @@ -2,8 +2,9 @@ import Vue from 'vue' | |||||||
| import VueI18n from 'vue-i18n' | import VueI18n from 'vue-i18n' | ||||||
| import Cookies from 'js-cookie' | import Cookies from 'js-cookie' | ||||||
| import zhCNLocale from 'element-ui/lib/locale/lang/zh-CN' | import zhCNLocale from 'element-ui/lib/locale/lang/zh-CN' | ||||||
|  | import enLocale from 'element-ui/lib/locale/lang/en' | ||||||
| import zhCN from './zh-CN' | import zhCN from './zh-CN' | ||||||
|  | import en from './en' | ||||||
| Vue.use(VueI18n) | Vue.use(VueI18n) | ||||||
|  |  | ||||||
| export const messages = { | export const messages = { | ||||||
| @@ -11,10 +12,36 @@ export const messages = { | |||||||
|     '_lang': '简体中文', |     '_lang': '简体中文', | ||||||
|     ...zhCN, |     ...zhCN, | ||||||
|     ...zhCNLocale |     ...zhCNLocale | ||||||
|  |   }, | ||||||
|  |   'en': { | ||||||
|  |     '_lang': 'English', | ||||||
|  |     ...en, | ||||||
|  |     ...enLocale | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | export function getLanguage() { | ||||||
|  |   if (Cookies.get('language')) { | ||||||
|  |     return Cookies.get('language') | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   // if has not choose language | ||||||
|  |   const language = (navigator.language || navigator.browserLanguage) | ||||||
|  |  | ||||||
|  |   const locales = Object.keys(messages) | ||||||
|  |   for (const locale of locales) { | ||||||
|  |     if (language.indexOf(locale) > -1) { | ||||||
|  |       Cookies.set('language', locale) | ||||||
|  |       return locale | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   Cookies.set('language', 'en') | ||||||
|  |   return 'en' | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
| export default new VueI18n({ | export default new VueI18n({ | ||||||
|   locale: Cookies.get('language') || 'zh-CN', |   // locale: Cookies.get('language') || 'zh-CN', | ||||||
|  |   locale: getLanguage(), // 先默认中文 | ||||||
|   messages |   messages | ||||||
| }) | }) | ||||||
|   | |||||||
| @@ -1,39 +1,394 @@ | |||||||
| const t = {} | const t = {} | ||||||
|  |  | ||||||
| t.loading = '加载中...' | t.loading = '加载中...' | ||||||
|  | t.createTime = '添加时间' | ||||||
|  |  | ||||||
| t.brand = {} | t.brand = {} | ||||||
| t.brand.lg = '人人权限系统' | t.brand.lg = '生产监控系统' | ||||||
| t.brand.mini = '人人' | t.brand.mini = '监控' | ||||||
|  |  | ||||||
| t.add = '新增' | t.routes = {} | ||||||
| t.delete = '删除' | // 一级 | ||||||
| t.deleteBatch = '删除' | t.routes['产品池'] = '产品池' | ||||||
| t.update = '修改' | t.routes['基本资料'] = '基本资料' | ||||||
| t.query = '查询' | t.routes['设备数采'] = '设备数采' | ||||||
| t.export = '导出' | t.routes['厂务管理'] = '厂务管理' | ||||||
| t.handle = '操作' | t.routes['报表管理'] = '报表管理' | ||||||
| t.confirm = '确定' | t.routes['质量管理'] = '质量管理' | ||||||
| t.cancel = '取消' | t.routes['权限管理'] = '权限管理' | ||||||
| t.clear = '清除' | t.routes['系统设置'] = '系统设置' | ||||||
| t.logout = '退出' | t.routes['日志管理'] = '日志管理' | ||||||
| t.manage = '处理' | t.routes['数据分析'] = '数据分析' | ||||||
| t.createDate = '创建时间' |  | ||||||
| t.keyword = '关键字:' | // 二级 | ||||||
| t.choose = '请选择' | t.routes['厂务'] = '厂务' | ||||||
|  | t.routes['设备'] = '设备' | ||||||
|  | t.routes['字典管理'] = '字典管理' | ||||||
|  | t.routes['PLC信息'] = 'PLC信息' | ||||||
|  | t.routes['设备与PLC关联配置'] = '设备与PLC关联配置'  // ? | ||||||
|  | t.routes['设备生产实时数据'] = '设备生产实时数据' | ||||||
|  | t.routes['产线生产实时数据'] = '产线生产实时数据' | ||||||
|  | t.routes['质量检查实时数据'] = '质量检查实时数据' | ||||||
|  | t.routes['报表总览'] = '报表总览' | ||||||
|  | t.routes['报表分类'] = '报表分类' | ||||||
|  | t.routes['报表详情'] = '报表详情' | ||||||
|  | t.routes['报表设计'] = '报表设计' | ||||||
|  | t.routes['报表预览'] = '报表预览' | ||||||
|  | t.routes['质量检测基础数据'] = '质量检测基础数据' | ||||||
|  | t.routes['当前检测数据'] = '当前检测数据' | ||||||
|  | t.routes['检测统计数据'] = '检测统计数据' | ||||||
|  | t.routes['质量检查信息记录'] = '质量检查信息记录' | ||||||
|  | t.routes['用户管理'] = '用户管理' | ||||||
|  | t.routes['部门管理'] = '部门管理' | ||||||
|  | t.routes['角色管理'] = '角色管理' | ||||||
|  | t.routes['菜单管理'] = '菜单管理' | ||||||
|  | t.routes['参数管理'] = '参数管理' | ||||||
|  | t.routes['定时任务'] = '定时任务' | ||||||
|  | t.routes['文件上传'] = '文件上传' | ||||||
|  | t.routes['登录日志'] = '登录日志' | ||||||
|  | t.routes['操作日志'] = '操作日志' | ||||||
|  | t.routes['设备效率分析'] = '设备效率分析' | ||||||
|  | t.routes['设备异常分析'] = '设备异常分析' | ||||||
|  | t.routes['设备状态时序图'] = '设备状态时序图' | ||||||
|  |  | ||||||
|  | // 三级 | ||||||
|  | t.routes['工厂'] = '工厂' | ||||||
|  | t.routes['产线'] = '产线' | ||||||
|  | t.routes['工段'] = '工段' | ||||||
|  | t.routes['设备类型'] = '设备类型' | ||||||
|  | t.routes['设备分组'] = '设备分组' | ||||||
|  | t.routes['设备信息'] = '设备信息' | ||||||
|  | t.routes['设备参数状态监控'] = '设备参数状态监控' | ||||||
|  | t.routes['设备分组报警信息'] = '设备分组报警信息' | ||||||
|  | t.routes['设备历史参数'] = '设备历史参数' | ||||||
|  | t.routes['质量检测类型'] = '质量检测类型' | ||||||
|  | t.routes['质量检测信息'] = '质量检测信息' | ||||||
|  | t.routes['安灯检测盒'] = '安灯检测盒' | ||||||
|  |  | ||||||
|  | t.andeng = {} | ||||||
|  | t.andeng.inspectContent = '检测内容' | ||||||
|  | t.andeng.btnVal = '按钮值' | ||||||
|  | t.andeng.btnBoxModel = '按钮盒模式' | ||||||
|  |  | ||||||
|  |  | ||||||
|  | t.dictValueList = '查看值列表' | ||||||
|  | t.save = '保存' | ||||||
|  | t.add = '新增' // 1 | ||||||
|  | t.delete = '删除' // 1 | ||||||
|  | t.deleteBatch = '批量删除' // 1 | ||||||
|  | t.update = '修改' // 1 | ||||||
|  | t.query = '查询' // 1 | ||||||
|  | t.export = '导出' // 1 | ||||||
|  | t.handle = '操作' // 1 | ||||||
|  | t.confirm = '确定' // 1 | ||||||
|  | t.cancel = '取消' // 1 | ||||||
|  | t.clear = '清除' // 1 | ||||||
|  | t.logout = '退出' // 1 | ||||||
|  | t.manage = '处理' // 1 | ||||||
|  | t.createDate = '创建时间' // 1 | ||||||
|  | t.keyword = '关键字:' // 1 | ||||||
|  | t.choose = '请选择' // 1 | ||||||
|  | t.remark = '备注' // 1 | ||||||
|  | t.delMark = '删除标志' // 0 | ||||||
|  | t.isvalid = '是否有效' // 0 | ||||||
|  | t.available = '可用' // 0 | ||||||
|  | t.unavailable = '不可用' // 0 | ||||||
|  | t.alert = '弹窗' // 0 | ||||||
|  | t.creator = '创建人' // 1 | ||||||
|  | t.creatorName = '创建人姓名' // 1 | ||||||
|  | t.updator = '更新人' // 1 | ||||||
|  | t.updatorName = '更新人姓名' // 1 | ||||||
|  | t.updateTime = '更新时间' | ||||||
|  | t.version = '版本号' // 1 | ||||||
|  | t.search = '查询' // 1 | ||||||
|  | t.countPerPage = '每页数' // ? | ||||||
|  | t.currentPage = '当前页' // ? | ||||||
|  | t.fetchList = '获取数据列表' // ? | ||||||
|  | t.multi = '多选' // ? | ||||||
|  | t.do = '进行' // ? | ||||||
|  | t.submit = '表单提交' // ? | ||||||
|  | t.desc = '描述' // 1 | ||||||
|  | t.disable = '停用' // 1 | ||||||
|  | t.equipment = '设备' // 1 | ||||||
|  | t.enabled = '启用状态' // ? | ||||||
|  | t.cannotempty = '不能为空' // ? | ||||||
|  | t.parameter = '参数名' // 1 | ||||||
|  | t.enable = '启用' // 1 | ||||||
|  | t.index = '序号' // 1 | ||||||
|  | t.relation = '关联' // ? | ||||||
|  | t.fetchInfo = '获取信息' // ? | ||||||
|  | t.name = '名称' // 1 | ||||||
|  | t.code = '编码' // 1 | ||||||
|  | t.attrName = '属性名称' // 1 | ||||||
|  | t.attrValue = '属性值' // 1 | ||||||
|  | t.unit = '单位' // 1 | ||||||
|  | t.table = '表' // 1 | ||||||
|  | t.table2 = '表格' // 1 | ||||||
|  | t.downloadurl = '下载地址' // 1 | ||||||
|  | t.recordTime = '记录时间' // 1 | ||||||
|  | t.notCollect = '不采集' // 1 | ||||||
|  | t.collect = '采集' // 1 | ||||||
|  | t.required = '必填' // 1 | ||||||
|  | t.paramUrl = '参数地址' // 1 | ||||||
|  | t.enname = '英文名称' // 1 | ||||||
|  | t.collectOrNot = '是否采集' // 1 | ||||||
|  | t.min = '最小值' // 1 | ||||||
|  | t.max = '最大值' // 1 | ||||||
|  | t.status = '状态' // 1 | ||||||
|  | t.normal = '正常' // ? | ||||||
|  | t.addr = '地址' // 1 | ||||||
|  | t.planStop = '计划停机' // ? | ||||||
|  | t.startTime = '开始时间' // 1 | ||||||
|  | t.endTime = '结束时间' // 1 | ||||||
|  | t.to = '至' // 1 | ||||||
|  | t.today = '今天' // 1 | ||||||
|  |  | ||||||
|  | t.graph = '图形' | ||||||
|  | t.category = '分类' | ||||||
|  | t.categoryName = '分类名称' | ||||||
|  | t.categoryCode = '分类编码' | ||||||
|  | t.rate = '比例' | ||||||
|  | t.link = '链接地址' | ||||||
|  | t.refresh = '刷新' | ||||||
|  | t.abbr = '缩写' | ||||||
|  | t.detail = '详情' | ||||||
|  | t.viewdetail = '查看详情' | ||||||
|  | t.viewattr = '查看属性' | ||||||
|  | t.edit = '编辑' | ||||||
|  | t.source = '来源' | ||||||
|  | t.auto = '自动' | ||||||
|  | t.manual = '手动' | ||||||
|  | t.loaddone = '加载完成' | ||||||
|  | t.produceTime = '生产日期' | ||||||
|  | t.enterTime = '进厂日期' | ||||||
|  | t.manufacturer = '制造商' | ||||||
|  | t.success = '修改成功!' | ||||||
|  | t.all = '全部' | ||||||
|  | t.reset = '重置' | ||||||
|  | t.preview = '预览' | ||||||
|  | t.design = '设计' | ||||||
|  | t.timetype = '时间类型' | ||||||
|  | t.reftimerange = '按时间段' | ||||||
|  | t.refdate = '按日期' | ||||||
|  | t.hour = '小时' | ||||||
|  |  | ||||||
|  | t.errors = {} | ||||||
|  | t.errors.nosection = '该产线没有工段' | ||||||
|  | t.errors.numsection = '该产线有{num}条工段' | ||||||
|  | t.errors.nodata = '没有查询到相关数据!' | ||||||
|  |  | ||||||
|  | t.hints = {} | ||||||
|  | t.hints.input = '请输入' | ||||||
|  | t.hints.select = '请选择' | ||||||
|  | t.hints.date = '请选择日期' | ||||||
|  | t.hints.checktime = '请选择检测时间' | ||||||
|  | t.hints.number = '请输入正确的数值' | ||||||
|  | t.hints.integer = '请输入正确的整数' | ||||||
|  | t.hints.addr = '请输入地址' | ||||||
|  | t.hints.upload2m = '上传文件大小不要超过 2MB (2048KB)' | ||||||
|  | t.hints.upload2mPic = '上传图片文件,且大小不要超过 2MB (2048KB)' | ||||||
|  |  | ||||||
|  | t.factory = {} | ||||||
|  | t.factory.title = '工厂' | ||||||
|  | t.factory.name = '工厂名称' | ||||||
|  | t.factory.code = '工厂编码' | ||||||
|  |  | ||||||
|  | t.prod = {} | ||||||
|  | t.prod.id = '产品ID' | ||||||
|  | t.prod.name = '产品名称' | ||||||
|  | t.prod.code = '产品编码' | ||||||
|  | t.prod.type = '产品类型' | ||||||
|  | t.prod.area = '单位平方数' | ||||||
|  | t.prod.spec = '规格' | ||||||
|  | t.prod.attr = '属性' | ||||||
|  | t.prod.attrcode = '属性编码' | ||||||
|  | t.prod.attrcodeHints = '请输入属性编码' | ||||||
|  | t.prod.attrname = '属性名称' | ||||||
|  | t.prod.attrnameHints = '请输入属性名称' | ||||||
|  | t.prod.attrvalueHints = '请输入属性值' | ||||||
|  | t.prod.descHints = '请输入描述' | ||||||
|  | // t.prod.processTime = '加工时间 (h)' | ||||||
|  | t.prod.processTime = '产线完成单位产品用时 (s)' | ||||||
|  | t.prod.processTimeHints = '请输入完成单位产品用时' | ||||||
|  | // t.prod.processTimeHints = '请输入加工时间' | ||||||
|  | t.prod.relatedPid = '关联产品' | ||||||
|  |  | ||||||
|  | t.alarm = {} | ||||||
|  | t.alarm.name = '报警' | ||||||
|  | t.alarm.info = '报警信息' | ||||||
|  | t.alarm.view = '查看报警' | ||||||
|  | t.alarm.eq = '报警设备' | ||||||
|  | t.alarm.type = '报警类型' | ||||||
|  | t.alarm.code = '报警编码' | ||||||
|  | t.alarm.level = '报警级别' | ||||||
|  | t.alarm.content = '报警内容' | ||||||
|  | t.alarm.source = '报警来源' | ||||||
|  | t.alarm.det = '报警详细内容' | ||||||
|  | t.alarm.externalCode = '外部编码' | ||||||
|  | t.alarm.description = '描述' | ||||||
|  | t.alarm.remark = '备注' | ||||||
|  |  | ||||||
|  | t.report = {} | ||||||
|  | t.report.name = '报表名称' | ||||||
|  | t.report.det = '报表内容' | ||||||
|  | t.report.type = '报表分类' | ||||||
|  | t.report.code = '报表编码' | ||||||
|  | t.report.lnk = '链接地址' | ||||||
|  |  | ||||||
|  | t.inspect = {} | ||||||
|  | t.inspect.type = '检测类型' | ||||||
|  | t.inspect.code = '检测编码' | ||||||
|  | t.inspect.det = '检测内容' | ||||||
|  | t.inspect.detcode = '内容编码' | ||||||
|  | t.inspect.people = '检测人员' | ||||||
|  | t.inspect.time = '检测时间' | ||||||
|  | t.inspect.typetotal = '检测类型总数' | ||||||
|  | t.inspect.typename = '检测类型名称' | ||||||
|  | t.inspect.typecode = '检测类型编码' | ||||||
|  | t.inspect.ioTotal = '上下片及检测总数统计' | ||||||
|  | t.inspect.plTotal = '各产线检测内容统计' | ||||||
|  | t.inspect.inTotal = '上片总数' | ||||||
|  | t.inspect.outTotal = '下片总数' | ||||||
|  | t.inspect.checkTotal = '检测总数' | ||||||
|  | t.inspect.rate = '比例' | ||||||
|  | t.inspect.typeCount = '检测类型统计数据' | ||||||
|  |  | ||||||
|  |  | ||||||
|  | t.realtime = {} | ||||||
|  | t.realtime.eq = '设备生产实时数据' | ||||||
|  | t.realtime.pl = '产线生产实时数据' | ||||||
|  | t.realtime.inspect = '质量检查实时数据' | ||||||
|  | t.realtime.in = '进数据' | ||||||
|  | t.realtime.out = '出数据' | ||||||
|  | t.realtime.data = '报废数据' | ||||||
|  | t.realtime.num = '报废数量' | ||||||
|  | t.realtime.rate = '报废比例' | ||||||
|  | t.realtime.total = '总产量' | ||||||
|  | t.realtime.goodrate = '良品率' | ||||||
|  | t.realtime.runState = '是否运行' | ||||||
|  | t.realtime.state = '状态' | ||||||
|  | t.realtime.hasFault = '是否故障' | ||||||
|  | t.realtime.recentParamValue = '参数近期值' | ||||||
|  | t.realtime.view = '查看' | ||||||
|  | t.realtime.input = '投入数' | ||||||
|  | t.realtime.output = '产出数' | ||||||
|  | t.realtime.eqName = '设备名称' | ||||||
|  | t.realtime.eqCode = '设备编码' | ||||||
|  | t.realtime.productionSnapshotTime = '生产量记录时间' | ||||||
|  | t.realtime.statusSnapshotTime = '状态记录时间' | ||||||
|  | t.realtime.refresh = '刷新数据' | ||||||
|  |  | ||||||
|  |  | ||||||
|  | t.ws = {} | ||||||
|  | t.ws.title = '工段' | ||||||
|  | t.ws.id = '工段ID' | ||||||
|  | t.ws.name = '工段名称' | ||||||
|  | t.ws.code = '工段编码' | ||||||
|  | t.ws.binded = '已绑定的设备' | ||||||
|  | t.ws.unbind = '设备名称' | ||||||
|  | t.ws.eqbindplaceholder = '选择一个设备进行绑定' | ||||||
|  | t.ws.sort = '工段排序' | ||||||
|  | t.ws.setorder = '请输入工段中设备的顺序' | ||||||
|  | t.ws.bind = '绑定' | ||||||
|  | t.ws.eqbind = '设备绑定' | ||||||
|  | t.ws.belong = '所属产线' | ||||||
|  |  | ||||||
|  | t.file = {} | ||||||
|  | t.file.title = '文件' | ||||||
|  | t.file.name = '文件名称' | ||||||
|  | t.file.code = '文件编号' | ||||||
|  | t.file.typeName = '文件类型名称' | ||||||
|  | t.file.typeCode = '文件类型编号' | ||||||
|  |  | ||||||
|  | t.eq = {} | ||||||
|  | t.eq.title = '设备' | ||||||
|  | t.eq.id = '设备ID' | ||||||
|  | t.eq.name = '设备名称' | ||||||
|  | t.eq.code = '设备编码' | ||||||
|  | t.eq.type = '设备类型' | ||||||
|  | t.eq.grade = '设备规格' | ||||||
|  | t.eq.group = '设备分组' | ||||||
|  | t.eq.groupname = '分组名称' | ||||||
|  | t.eq.groupcode = '分组编码' | ||||||
|  | t.eq.excode = '设备外部代码' | ||||||
|  | t.eq.input = '上片数据设备' | ||||||
|  | t.eq.output = '下片数据设备' | ||||||
|  | t.eq.tvalue = '设备TT值' | ||||||
|  | t.eq.processingTime = '单件产品加工时间(秒)' | ||||||
|  | t.eq.dtype = '数据类别' | ||||||
|  | t.eq.dtypenone = '无类别' | ||||||
|  | t.eq.dtypeinput = '上片数据设备' | ||||||
|  | t.eq.dtypeoutput = '下片数据设备' | ||||||
|  | t.eq.upload = '上传资料' | ||||||
|  | t.eq.image = '设备图片' | ||||||
|  | t.eq.viewattr = '查看设备属性' | ||||||
|  | t.eq.plcbarcode = 'plc条码' | ||||||
|  | t.eq.plccode = 'PLC编码' | ||||||
|  | t.eq.plcname = 'PLC名称' | ||||||
|  | t.eq.port = '端口' | ||||||
|  | t.eq.type = '类型名称' | ||||||
|  | t.eq.typecode = '类型编码' | ||||||
|  | t.eq.parent = '父类' | ||||||
|  | t.eq.mtbf = '平均故障间隔时间[MTBF] (h)' | ||||||
|  | t.eq.mttr = '平均维修时间[MTTR] (h)' | ||||||
|  | t.eq.efficienttimeh = '有效时间(h)' | ||||||
|  | t.eq.shutdowntimeh = '关机时间(h)' | ||||||
|  | t.eq.worktimeh = '工作时长(h)' | ||||||
|  | t.eq.downtimeh = '故障时长(h)' | ||||||
|  | t.eq.stoptimeh = '停机时长(h)' | ||||||
|  | t.eq.worktime = '工作时长' | ||||||
|  | t.eq.stoptime = '停机时长' | ||||||
|  | t.eq.downtime = '故障时长' | ||||||
|  | t.eq.downcount = '故障次数' | ||||||
|  | t.eq.downrate = '故障比率' | ||||||
|  | t.eq.stoplost = '中断损失' | ||||||
|  | t.eq.ratio = '百分比' | ||||||
|  | t.eq.time = '时间' | ||||||
|  | t.eq.timetrend = '时间区间走势' | ||||||
|  | t.eq.nogap = '无间隔' | ||||||
|  | t.eq.monthgap = '按月' | ||||||
|  | t.eq.daygap = '按天' | ||||||
|  | t.eq.weekgap = '按周' | ||||||
|  | t.eq.hourgap = '按小时' | ||||||
|  | t.eq.workdurationratio = '工作时长比率' | ||||||
|  | t.eq.stopdurationratio = '停机时长比率' | ||||||
|  | t.eq.stopratio = '停机比率' | ||||||
|  | t.eq.downdurationratio = '故障时长比率' | ||||||
|  | t.eq.speedefficiency = '速度开动率' | ||||||
|  | t.eq.speedlost = '速度损失' | ||||||
|  | t.eq.timeefficiency = '时间开动率' | ||||||
|  | t.eq.year='年' | ||||||
|  | t.eq.month='月' | ||||||
|  | t.eq.realyield = '实际加工速度' | ||||||
|  | t.eq.designyield = '理论加工速度'  | ||||||
|  | t.eq.viewtrend = '查看趋势'  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | t.pl = {} | ||||||
|  | t.pl.title = '产线' | ||||||
|  | t.pl.id = '产线ID' | ||||||
|  | t.pl.name = '产线名称' | ||||||
|  | t.pl.code = '产线编码' | ||||||
|  | t.pl.status = '产线状态' | ||||||
|  | t.pl.belong = '所属产线' | ||||||
|  | t.pl.tvalue = '产线TT值(每小时下片数量)' | ||||||
|  | t.pl.factoryHints = '请选择所属工厂' | ||||||
|  |  | ||||||
| t.prompt = {} | t.prompt = {} | ||||||
| t.prompt.title = '提示' | t.prompt.title = '提示' | ||||||
| t.prompt.info = '确定进行[{handle}]操作?' | t.prompt.info = '确定进行[{handle}]操作?' | ||||||
|  | t.prompt.sure = '确定删除这条记录吗?' | ||||||
| t.prompt.success = '操作成功' | t.prompt.success = '操作成功' | ||||||
| t.prompt.failed = '操作失败' | t.prompt.failed = '操作失败' | ||||||
| t.prompt.deleteBatch = '请选择删除项' | t.prompt.deleteBatch = '请选择删除项' | ||||||
|  | t.prompt.month = '请选择月份' | ||||||
|  |  | ||||||
| t.validate = {} | t.validate = {} | ||||||
| t.validate.required = '必填项不能为空' | t.validate.required = '必填项不能为空' | ||||||
| t.validate.format = '{attr}格式错误' | t.validate.format = '{attr}格式错误' | ||||||
|  |  | ||||||
| t.upload = {} | t.upload = {} | ||||||
|  | t.upload.title = '上传资料' | ||||||
| t.upload.text = '将文件拖到此处,或<em>点击上传</em>' | t.upload.text = '将文件拖到此处,或<em>点击上传</em>' | ||||||
| t.upload.tip = '只支持{format}格式文件!' | t.upload.tip = '只支持{format}格式文件!' | ||||||
| t.upload.button = '点击上传' | t.upload.button = '点击上传' | ||||||
| @@ -42,6 +397,8 @@ t.datePicker = {} | |||||||
| t.datePicker.range = '至' | t.datePicker.range = '至' | ||||||
| t.datePicker.start = '开始日期' | t.datePicker.start = '开始日期' | ||||||
| t.datePicker.end = '结束日期' | t.datePicker.end = '结束日期' | ||||||
|  | t.datePicker.starttime = '开始时间' | ||||||
|  | t.datePicker.endtime = '结束时间' | ||||||
|  |  | ||||||
| t.fullscreen = {} | t.fullscreen = {} | ||||||
| t.fullscreen.prompt = '您的浏览器不支持此操作' | t.fullscreen.prompt = '您的浏览器不支持此操作' | ||||||
| @@ -72,7 +429,7 @@ t.login.username = '用户名' | |||||||
| t.login.password = '密码' | t.login.password = '密码' | ||||||
| t.login.captcha = '验证码' | t.login.captcha = '验证码' | ||||||
| t.login.demo = '在线演示' | t.login.demo = '在线演示' | ||||||
| t.login.copyright = '人人开源' | t.login.copyright = '版权所有:中建材智能自动化研究院有限公司    版本: 1.0' | ||||||
|  |  | ||||||
| t.schedule = {} | t.schedule = {} | ||||||
| t.schedule.beanName = 'bean名称' | t.schedule.beanName = 'bean名称' | ||||||
| @@ -224,8 +581,13 @@ t.menu.resourceMethod = '请求方式' | |||||||
| t.menu.resourceAddItem = '添加一项' | t.menu.resourceAddItem = '添加一项' | ||||||
|  |  | ||||||
| t.params = {} | t.params = {} | ||||||
|  | t.params.name = '参数名称' | ||||||
|  | t.params.code = '参数编码' | ||||||
| t.params.paramCode = '编码' | t.params.paramCode = '编码' | ||||||
| t.params.paramValue = '值' | t.params.paramValue = '值' | ||||||
|  | t.params.paramStdValue = '参数设定标准值' | ||||||
|  | t.params.plctitle = 'PLC采集参数' | ||||||
|  | t.params.plcid = 'PLC连接表ID' | ||||||
| t.params.remark = '备注' | t.params.remark = '备注' | ||||||
|  |  | ||||||
| t.role = {} | t.role = {} | ||||||
|   | |||||||
| @@ -31,6 +31,10 @@ Vue.use(renRegionTree) | |||||||
| Vue.prototype.$http = http | Vue.prototype.$http = http | ||||||
| Vue.prototype.$hasPermission = hasPermission | Vue.prototype.$hasPermission = hasPermission | ||||||
| Vue.prototype.$getDictLabel = getDictLabel | Vue.prototype.$getDictLabel = getDictLabel | ||||||
|  | // is auth | ||||||
|  | Vue.prototype.isAuth = permission => { | ||||||
|  |   return "正在检查的权限是:" + permission | ||||||
|  | } | ||||||
|  |  | ||||||
| // 保存整站vuex本地储存初始状态 | // 保存整站vuex本地储存初始状态 | ||||||
| window.SITE_CONFIG['storeState'] = cloneDeep(store.state) | window.SITE_CONFIG['storeState'] = cloneDeep(store.state) | ||||||
|   | |||||||
							
								
								
									
										24
									
								
								src/mixins/dictlist-module.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								src/mixins/dictlist-module.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | |||||||
|  |  | ||||||
|  | export default { | ||||||
|  |   data() { | ||||||
|  |     return { | ||||||
|  |       dictList: {} | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   methods: { | ||||||
|  |     initDictList(dictTypeIdList) { | ||||||
|  |       const allDictList = JSON.parse(localStorage.getItem('dictList')) | ||||||
|  |       if (!Object.keys(allDictList).length) { | ||||||
|  |         return this.$message({ | ||||||
|  |           // TODO: i18n | ||||||
|  |           message: '未能获取数据字典', | ||||||
|  |           type: 'error', | ||||||
|  |           duration: 2000 | ||||||
|  |         }) | ||||||
|  |       } | ||||||
|  |       dictTypeIdList.forEach(id => { | ||||||
|  |         this.dictList[id] = allDictList[id].map(item => ({ label: item.dictLabel, value: item.dictValue })) | ||||||
|  |       }) | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| import Cookies from 'js-cookie' | import Cookies from 'js-cookie' | ||||||
| import qs from 'qs' | import qs from 'qs' | ||||||
| export default { | export default { | ||||||
|   data () { |   data() { | ||||||
|     /* eslint-disable */ |     /* eslint-disable */ | ||||||
|     return { |     return { | ||||||
|       // 设置属性 |       // 设置属性 | ||||||
| @@ -29,22 +29,24 @@ export default { | |||||||
|     } |     } | ||||||
|     /* eslint-enable */ |     /* eslint-enable */ | ||||||
|   }, |   }, | ||||||
|   created () { |   created() { | ||||||
|     if (this.mixinViewModuleOptions.createdIsNeed) { |     if (this.mixinViewModuleOptions.createdIsNeed) { | ||||||
|       this.query() |       this.query() | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|   activated () { |   activated() { | ||||||
|     if (this.mixinViewModuleOptions.activatedIsNeed) { |     if (this.mixinViewModuleOptions.activatedIsNeed) { | ||||||
|       this.query() |       this.query() | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|   methods: { |   methods: { | ||||||
|     // 获取数据列表 |     // 获取数据列表 | ||||||
|     query () { |     query() { | ||||||
|       this.dataListLoading = true |       this.dataListLoading = true | ||||||
|       this.$http.get( |       this.$http.get( | ||||||
|         this.mixinViewModuleOptions.getDataListURL, |         this.$http.adornUrl( | ||||||
|  |           this.mixinViewModuleOptions.getDataListURL | ||||||
|  |         ), | ||||||
|         { |         { | ||||||
|           params: { |           params: { | ||||||
|             order: this.order, |             order: this.order, | ||||||
| @@ -68,11 +70,11 @@ export default { | |||||||
|       }) |       }) | ||||||
|     }, |     }, | ||||||
|     // 多选 |     // 多选 | ||||||
|     dataListSelectionChangeHandle (val) { |     dataListSelectionChangeHandle(val) { | ||||||
|       this.dataListSelections = val |       this.dataListSelections = val | ||||||
|     }, |     }, | ||||||
|     // 排序 |     // 排序 | ||||||
|     dataListSortChangeHandle (data) { |     dataListSortChangeHandle(data) { | ||||||
|       if (!data.order || !data.prop) { |       if (!data.order || !data.prop) { | ||||||
|         this.order = '' |         this.order = '' | ||||||
|         this.orderField = '' |         this.orderField = '' | ||||||
| @@ -83,13 +85,13 @@ export default { | |||||||
|       this.query() |       this.query() | ||||||
|     }, |     }, | ||||||
|     // 分页, 每页条数 |     // 分页, 每页条数 | ||||||
|     pageSizeChangeHandle (val) { |     pageSizeChangeHandle(val) { | ||||||
|       this.page = 1 |       this.page = 1 | ||||||
|       this.limit = val |       this.limit = val | ||||||
|       this.query() |       this.query() | ||||||
|     }, |     }, | ||||||
|     // 分页, 当前页 |     // 分页, 当前页 | ||||||
|     pageCurrentChangeHandle (val) { |     pageCurrentChangeHandle(val) { | ||||||
|       this.page = val |       this.page = val | ||||||
|       this.query() |       this.query() | ||||||
|     }, |     }, | ||||||
| @@ -98,7 +100,7 @@ export default { | |||||||
|       this.query() |       this.query() | ||||||
|     }, |     }, | ||||||
|     // 新增 / 修改 |     // 新增 / 修改 | ||||||
|     addOrUpdateHandle (id) { |     addOrUpdateHandle(id) { | ||||||
|       this.addOrUpdateVisible = true |       this.addOrUpdateVisible = true | ||||||
|       this.$nextTick(() => { |       this.$nextTick(() => { | ||||||
|         this.$refs.addOrUpdate.dataForm.id = id |         this.$refs.addOrUpdate.dataForm.id = id | ||||||
| @@ -106,7 +108,7 @@ export default { | |||||||
|       }) |       }) | ||||||
|     }, |     }, | ||||||
|     // 关闭当前窗口 |     // 关闭当前窗口 | ||||||
|     closeCurrentTab (data) { |     closeCurrentTab(data) { | ||||||
|       var tabName = this.$store.state.contentTabsActiveName |       var tabName = this.$store.state.contentTabsActiveName | ||||||
|       this.$store.state.contentTabs = this.$store.state.contentTabs.filter(item => item.name !== tabName) |       this.$store.state.contentTabs = this.$store.state.contentTabs.filter(item => item.name !== tabName) | ||||||
|       if (this.$store.state.contentTabs.length <= 0) { |       if (this.$store.state.contentTabs.length <= 0) { | ||||||
| @@ -118,7 +120,7 @@ export default { | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     // 删除 |     // 删除 | ||||||
|     deleteHandle (id) { |     deleteHandle(id) { | ||||||
|       if (this.mixinViewModuleOptions.deleteIsBatch && !id && this.dataListSelections.length <= 0) { |       if (this.mixinViewModuleOptions.deleteIsBatch && !id && this.dataListSelections.length <= 0) { | ||||||
|         return this.$message({ |         return this.$message({ | ||||||
|           message: this.$t('prompt.deleteBatch'), |           message: this.$t('prompt.deleteBatch'), | ||||||
| @@ -132,7 +134,7 @@ export default { | |||||||
|         type: 'warning' |         type: 'warning' | ||||||
|       }).then(() => { |       }).then(() => { | ||||||
|         this.$http.delete( |         this.$http.delete( | ||||||
|           `${this.mixinViewModuleOptions.deleteURL}${this.mixinViewModuleOptions.deleteIsBatch ? '' : '/' + id}`, |           this.$http.adornUrl(`${this.mixinViewModuleOptions.deleteURL}${this.mixinViewModuleOptions.deleteIsBatch ? '' : '/' + id}`), | ||||||
|           this.mixinViewModuleOptions.deleteIsBatch ? { |           this.mixinViewModuleOptions.deleteIsBatch ? { | ||||||
|             'data': id ? [id] : this.dataListSelections.map(item => item[this.mixinViewModuleOptions.deleteIsBatchKey]) |             'data': id ? [id] : this.dataListSelections.map(item => item[this.mixinViewModuleOptions.deleteIsBatchKey]) | ||||||
|           } : {} |           } : {} | ||||||
| @@ -148,11 +150,11 @@ export default { | |||||||
|               this.query() |               this.query() | ||||||
|             } |             } | ||||||
|           }) |           }) | ||||||
|         }).catch(() => {}) |         }).catch(() => { }) | ||||||
|       }).catch(() => {}) |       }).catch(() => { }) | ||||||
|     }, |     }, | ||||||
|     // 导出 |     // 导出 | ||||||
|     exportHandle () { |     exportHandle() { | ||||||
|       var params = qs.stringify({ |       var params = qs.stringify({ | ||||||
|         'token': Cookies.get('token'), |         'token': Cookies.get('token'), | ||||||
|         ...this.dataForm |         ...this.dataForm | ||||||
|   | |||||||
| @@ -2,6 +2,8 @@ import Vue from 'vue' | |||||||
| import Router from 'vue-router' | import Router from 'vue-router' | ||||||
| import http from '@/utils/request' | import http from '@/utils/request' | ||||||
| import { isURL } from '@/utils/validate' | import { isURL } from '@/utils/validate' | ||||||
|  | import Cookies from 'js-cookie' | ||||||
|  | import i18n from '@/i18n' | ||||||
|  |  | ||||||
| Vue.use(Router) | Vue.use(Router) | ||||||
|  |  | ||||||
| @@ -12,7 +14,7 @@ export const pageRoutes = [ | |||||||
|     component: () => import('@/views/pages/404'), |     component: () => import('@/views/pages/404'), | ||||||
|     name: '404', |     name: '404', | ||||||
|     meta: { title: '404未找到' }, |     meta: { title: '404未找到' }, | ||||||
|     beforeEnter (to, from, next) { |     beforeEnter(to, from, next) { | ||||||
|       // 拦截处理特殊业务场景 |       // 拦截处理特殊业务场景 | ||||||
|       // 如果, 重定向路由包含__双下划线, 为临时添加路由 |       // 如果, 重定向路由包含__双下划线, 为临时添加路由 | ||||||
|       if (/__.*/.test(to.redirectedFrom)) { |       if (/__.*/.test(to.redirectedFrom)) { | ||||||
| @@ -21,7 +23,20 @@ export const pageRoutes = [ | |||||||
|       next() |       next() | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|   { path: '/login', component: () => import('@/views/pages/login'), name: 'login', meta: { title: '登录' } } |   { | ||||||
|  |     path: '/login', | ||||||
|  |     component: () => import('@/views/pages/login'), | ||||||
|  |     name: 'login', | ||||||
|  |     meta: { title: '登录' }, | ||||||
|  |     beforeEnter(to, from, next) { | ||||||
|  |       if (Cookies.get('token')) { | ||||||
|  |         Vue.prototype.$message({ message: '已经登录过了', type: 'error' }) | ||||||
|  |         next(false) | ||||||
|  |       } else { | ||||||
|  |         next() | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
| ] | ] | ||||||
|  |  | ||||||
| // 模块路由(基于主入口布局页面) | // 模块路由(基于主入口布局页面) | ||||||
| @@ -36,7 +51,7 @@ export const moduleRoutes = { | |||||||
|   ] |   ] | ||||||
| } | } | ||||||
|  |  | ||||||
| export function addDynamicRoute (routeParams, router) { | export function addDynamicRoute(routeParams, router) { | ||||||
|   // 组装路由名称, 并判断是否已添加, 如是: 则直接跳转 |   // 组装路由名称, 并判断是否已添加, 如是: 则直接跳转 | ||||||
|   var routeName = routeParams.routeName |   var routeName = routeParams.routeName | ||||||
|   var dynamicRoute = window.SITE_CONFIG['dynamicRoutes'].filter(item => item.name === routeName)[0] |   var dynamicRoute = window.SITE_CONFIG['dynamicRoutes'].filter(item => item.name === routeName)[0] | ||||||
| @@ -77,24 +92,30 @@ router.beforeEach((to, from, next) => { | |||||||
|   if (window.SITE_CONFIG['dynamicMenuRoutesHasAdded'] || fnCurrentRouteIsPageRoute(to, pageRoutes)) { |   if (window.SITE_CONFIG['dynamicMenuRoutesHasAdded'] || fnCurrentRouteIsPageRoute(to, pageRoutes)) { | ||||||
|     return next() |     return next() | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   // 获取字典列表, 添加并全局变量保存 |   // 获取字典列表, 添加并全局变量保存 | ||||||
|   http.get('/sys/dict/type/all').then(({ data: res }) => { |   http.get(http.adornUrl('/sys/dict/type/all')).then(({ data: res }) => { | ||||||
|     if (res.code !== 0) { |     if (res.code !== 0) { | ||||||
|       return |       return | ||||||
|     } |     } | ||||||
|     window.SITE_CONFIG['dictList'] = res.data |     window.SITE_CONFIG['dictList'] = res.data | ||||||
|   }).catch(() => {}) |   }).catch((err) => { | ||||||
|  |   }) | ||||||
|   // 获取菜单列表, 添加并全局变量保存 |   // 获取菜单列表, 添加并全局变量保存 | ||||||
|   http.get('/sys/menu/nav').then(({ data: res }) => { |   http.get(http.adornUrl('/sys/menu/nav')).then(({ data: res }) => { | ||||||
|     if (res.code !== 0) { |     /** axios 的拦截器已经拦截出错情况,此处只考虑正确情况即可 */ | ||||||
|       Vue.prototype.$message.error(res.msg) |  | ||||||
|       return next({ name: 'login' }) |  | ||||||
|     } |  | ||||||
|     window.SITE_CONFIG['menuList'] = res.data |     window.SITE_CONFIG['menuList'] = res.data | ||||||
|  |     // .map(item => { | ||||||
|  |     //   if (item.name === '产品池') { | ||||||
|  |     //     console.log('Got you') | ||||||
|  |     //     item.name =  | ||||||
|  |     //   } | ||||||
|  |     //   return item | ||||||
|  |     // }) | ||||||
|     fnAddDynamicMenuRoutes(window.SITE_CONFIG['menuList']) |     fnAddDynamicMenuRoutes(window.SITE_CONFIG['menuList']) | ||||||
|     next({ ...to, replace: true }) |     next({ ...to, replace: true }) | ||||||
|   }).catch(() => { |   }).catch((err) => { | ||||||
|     next({ name: 'login' }) |     // Vue.prototype.$message.error(err) | ||||||
|   }) |   }) | ||||||
| }) | }) | ||||||
|  |  | ||||||
| @@ -103,7 +124,7 @@ router.beforeEach((to, from, next) => { | |||||||
|  * @param {*} route 当前路由 |  * @param {*} route 当前路由 | ||||||
|  * @param {*} pageRoutes 页面路由 |  * @param {*} pageRoutes 页面路由 | ||||||
|  */ |  */ | ||||||
| function fnCurrentRouteIsPageRoute (route, pageRoutes = []) { | function fnCurrentRouteIsPageRoute(route, pageRoutes = []) { | ||||||
|   var temp = [] |   var temp = [] | ||||||
|   for (var i = 0; i < pageRoutes.length; i++) { |   for (var i = 0; i < pageRoutes.length; i++) { | ||||||
|     if (route.path === pageRoutes[i].path) { |     if (route.path === pageRoutes[i].path) { | ||||||
| @@ -121,10 +142,13 @@ function fnCurrentRouteIsPageRoute (route, pageRoutes = []) { | |||||||
|  * @param {*} menuList 菜单列表 |  * @param {*} menuList 菜单列表 | ||||||
|  * @param {*} routes 递归创建的动态(菜单)路由 |  * @param {*} routes 递归创建的动态(菜单)路由 | ||||||
|  */ |  */ | ||||||
| function fnAddDynamicMenuRoutes (menuList = [], routes = []) { | function fnAddDynamicMenuRoutes(menuList = [], routes = []) { | ||||||
|   var temp = [] |   var temp = [] | ||||||
|  |  | ||||||
|   for (var i = 0; i < menuList.length; i++) { |   for (var i = 0; i < menuList.length; i++) { | ||||||
|     if (menuList[i].children && menuList[i].children.length >= 1) { |     if (menuList[i].children && menuList[i].children.length >= 1) { | ||||||
|  |       // 菜单的国际化 | ||||||
|  |       menuList[i].name = i18n.t(`routes["${menuList[i].name}"]`) | ||||||
|       temp = temp.concat(menuList[i].children) |       temp = temp.concat(menuList[i].children) | ||||||
|       continue |       continue | ||||||
|     } |     } | ||||||
| @@ -136,9 +160,15 @@ function fnAddDynamicMenuRoutes (menuList = [], routes = []) { | |||||||
|       meta: { |       meta: { | ||||||
|         ...window.SITE_CONFIG['contentTabDefault'], |         ...window.SITE_CONFIG['contentTabDefault'], | ||||||
|         menuId: menuList[i].id, |         menuId: menuList[i].id, | ||||||
|         title: menuList[i].name |         // 菜单的国际化 | ||||||
|  |         title: i18n.t(`routes["${menuList[i].name}"]`) | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     // 菜单的国际化 | ||||||
|  |     menuList[i].name = i18n.t(`routes["${menuList[i].name}"]`) | ||||||
|  |  | ||||||
|  |     // console.log('route ===', route.meta.title) | ||||||
|     // eslint-disable-next-line |     // eslint-disable-next-line | ||||||
|     let URL = (menuList[i].url || '').replace(/{{([^}}]+)?}}/g, (s1, s2) => eval(s2)) // URL支持{{ window.xxx }}占位符变量 |     let URL = (menuList[i].url || '').replace(/{{([^}}]+)?}}/g, (s1, s2) => eval(s2)) // URL支持{{ window.xxx }}占位符变量 | ||||||
|     if (isURL(URL)) { |     if (isURL(URL)) { | ||||||
| @@ -151,9 +181,11 @@ function fnAddDynamicMenuRoutes (menuList = [], routes = []) { | |||||||
|     } |     } | ||||||
|     routes.push(route) |     routes.push(route) | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   if (temp.length >= 1) { |   if (temp.length >= 1) { | ||||||
|     return fnAddDynamicMenuRoutes(temp, routes) |     return fnAddDynamicMenuRoutes(temp, routes) | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   // 添加路由 |   // 添加路由 | ||||||
|   router.addRoutes([ |   router.addRoutes([ | ||||||
|     { |     { | ||||||
|   | |||||||
							
								
								
									
										24
									
								
								src/utils/filters.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								src/utils/filters.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | |||||||
|  | /** filters */ | ||||||
|  | import moment from 'moment' | ||||||
|  |  | ||||||
|  | export const dictFilter = dictTypeId => { | ||||||
|  | 	return val => { | ||||||
|  | 		return JSON.parse(localStorage.getItem('dictList'))[dictTypeId].find(item => item.dictValue === val)?.dictLabel || '-' | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export const timeFilter = (val) => { | ||||||
|  | 	return moment(val).format('YYYY-MM-DD HH:mm:ss') | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export const pick = (obj, paths) => { | ||||||
|  | 	let result = {} | ||||||
|  | 	paths.forEach(key => { | ||||||
|  | 		if (obj.hasOwnProperty(key)) { | ||||||
|  | 			result[key] = obj[key]; | ||||||
|  | 		} else { | ||||||
|  | 			result[key] = null | ||||||
|  | 		} | ||||||
|  | 	}) | ||||||
|  | 	return result | ||||||
|  | } | ||||||
| @@ -5,7 +5,7 @@ import store from '@/store' | |||||||
|  * 权限 |  * 权限 | ||||||
|  * @param {*} key |  * @param {*} key | ||||||
|  */ |  */ | ||||||
| export function hasPermission (key) { | export function hasPermission(key) { | ||||||
|   return window.SITE_CONFIG['permissions'].indexOf(key) !== -1 || false |   return window.SITE_CONFIG['permissions'].indexOf(key) !== -1 || false | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -13,7 +13,7 @@ export function hasPermission (key) { | |||||||
|  * 获取字典数据列表 |  * 获取字典数据列表 | ||||||
|  * @param dictType  字典类型 |  * @param dictType  字典类型 | ||||||
|  */ |  */ | ||||||
| export function getDictDataList (dictType) { | export function getDictDataList(dictType) { | ||||||
|   const type = window.SITE_CONFIG['dictList'].find((element) => (element.dictType === dictType)) |   const type = window.SITE_CONFIG['dictList'].find((element) => (element.dictType === dictType)) | ||||||
|   if (type) { |   if (type) { | ||||||
|     return type.dataList |     return type.dataList | ||||||
| @@ -27,7 +27,7 @@ export function getDictDataList (dictType) { | |||||||
|  * @param dictType  字典类型 |  * @param dictType  字典类型 | ||||||
|  * @param dictValue  字典值 |  * @param dictValue  字典值 | ||||||
|  */ |  */ | ||||||
| export function getDictLabel (dictType, dictValue) { | export function getDictLabel(dictType, dictValue) { | ||||||
|   const type = window.SITE_CONFIG['dictList'].find((element) => (element.dictType === dictType)) |   const type = window.SITE_CONFIG['dictList'].find((element) => (element.dictType === dictType)) | ||||||
|   if (type) { |   if (type) { | ||||||
|     const val = type.dataList.find((element) => (element.dictValue === dictValue + '')) |     const val = type.dataList.find((element) => (element.dictValue === dictValue + '')) | ||||||
| @@ -44,16 +44,17 @@ export function getDictLabel (dictType, dictValue) { | |||||||
| /** | /** | ||||||
|  * 清除登录信息 |  * 清除登录信息 | ||||||
|  */ |  */ | ||||||
| export function clearLoginInfo () { | export function clearLoginInfo() { | ||||||
|   store.commit('resetStore') |   store.commit('resetStore') | ||||||
|   Cookies.remove('token') |   Cookies.remove('token') | ||||||
|   window.SITE_CONFIG['dynamicMenuRoutesHasAdded'] = false |   window.SITE_CONFIG['dynamicMenuRoutesHasAdded'] = false | ||||||
|  |   window.SITE_CONFIG['dynamicMenuRoutes'] = [] | ||||||
| } | } | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * 获取uuid |  * 获取uuid | ||||||
|  */ |  */ | ||||||
| export function getUUID () { | export function getUUID() { | ||||||
|   return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => { |   return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => { | ||||||
|     return (c === 'x' ? (Math.random() * 16 | 0) : ('r&0x3' | '0x8')).toString(16) |     return (c === 'x' ? (Math.random() * 16 | 0) : ('r&0x3' | '0x8')).toString(16) | ||||||
|   }) |   }) | ||||||
| @@ -62,7 +63,7 @@ export function getUUID () { | |||||||
| /** | /** | ||||||
|  * 获取svg图标(id)列表 |  * 获取svg图标(id)列表 | ||||||
|  */ |  */ | ||||||
| export function getIconList () { | export function getIconList() { | ||||||
|   var res = [] |   var res = [] | ||||||
|   var list = document.querySelectorAll('svg symbol') |   var list = document.querySelectorAll('svg symbol') | ||||||
|   for (var i = 0; i < list.length; i++) { |   for (var i = 0; i < list.length; i++) { | ||||||
| @@ -73,12 +74,12 @@ export function getIconList () { | |||||||
| } | } | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * 树形数据转换 |  * 树形数据转换,把扁平的数据,转换为树形结构的数据 | ||||||
|  * @param {*} data |  * @param {*} data | ||||||
|  * @param {*} id |  * @param {*} id | ||||||
|  * @param {*} pid |  * @param {*} pid | ||||||
|  */ |  */ | ||||||
| export function treeDataTranslate (data, id = 'id', pid = 'pid') { | export function treeDataTranslate(data, id = 'id', pid = 'pid') { | ||||||
|   var res = [] |   var res = [] | ||||||
|   var temp = {} |   var temp = {} | ||||||
|   for (var i = 0; i < data.length; i++) { |   for (var i = 0; i < data.length; i++) { | ||||||
| @@ -97,3 +98,19 @@ export function treeDataTranslate (data, id = 'id', pid = 'pid') { | |||||||
|   } |   } | ||||||
|   return res |   return res | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /** 计算表格的最大高 */ | ||||||
|  | export function calcMaxHeight(num) { | ||||||
|  |   const FIXED_HEIGHT = 220 | ||||||
|  |   let clientHeight = 0 | ||||||
|  |   const bodyHeight = document.body.clientHeight || null | ||||||
|  |   const documentHeight = document.documentElement.clientHeight || null | ||||||
|  |   if (bodyHeight && documentHeight) { | ||||||
|  |     clientHeight = Math.max(bodyHeight, documentHeight) | ||||||
|  |   } else { | ||||||
|  |     clientHeight = documentHeight ? documentHeight : bodyHeight | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   const finalHeight = clientHeight - num - FIXED_HEIGHT | ||||||
|  |   return finalHeight > 0 ? finalHeight : -finalHeight | ||||||
|  | } | ||||||
| @@ -4,9 +4,13 @@ import router from '@/router' | |||||||
| import qs from 'qs' | import qs from 'qs' | ||||||
| import { clearLoginInfo } from '@/utils' | import { clearLoginInfo } from '@/utils' | ||||||
| import isPlainObject from 'lodash/isPlainObject' | import isPlainObject from 'lodash/isPlainObject' | ||||||
|  | import merge from 'lodash/merge' | ||||||
|  |  | ||||||
| const http = axios.create({ | const http = axios.create({ | ||||||
|   baseURL: window.SITE_CONFIG['apiURL'], |   // baseURL: window.SITE_CONFIG['apiURL'], | ||||||
|  |   baseURL: '/api', | ||||||
|  |   // baseURL: '/yd-monitor', | ||||||
|  |   // baseURL: process.env.NODE_ENV === 'production' ? '/api' : '/yd-monitor', | ||||||
|   timeout: 1000 * 180, |   timeout: 1000 * 180, | ||||||
|   withCredentials: true |   withCredentials: true | ||||||
| }) | }) | ||||||
| @@ -55,10 +59,54 @@ http.interceptors.response.use(response => { | |||||||
|     router.replace({ name: 'login' }) |     router.replace({ name: 'login' }) | ||||||
|     return Promise.reject(response.data.msg) |     return Promise.reject(response.data.msg) | ||||||
|   } |   } | ||||||
|  |   //  else if (response.data.code === 500) { | ||||||
|  |   //   return Promise.reject(response.data.msg) | ||||||
|  |   // } | ||||||
|   return response |   return response | ||||||
| }, error => { | }, error => { | ||||||
|   console.error(error) |   console.error(error) | ||||||
|   return Promise.reject(error) |   return Promise.reject(error) | ||||||
| }) | }) | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 请求地址处理 | ||||||
|  |  * @param {*} actionName action方法名称 | ||||||
|  |  */ | ||||||
|  | http.adornUrl = (actionName) => { | ||||||
|  |   // 非生产环境 && 开启代理, 接口前缀统一使用[/proxyApi/]前缀做代理拦截! | ||||||
|  |   // return (process.env.NODE_ENV !== 'production' && process.env.OPEN_PROXY ? window.SITE_CONFIG.projURL : '') + actionName | ||||||
|  |   // return (process.env.NODE_ENV !== 'production' ? '/yd-monitor' : '/api') + actionName | ||||||
|  |   return actionName | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * get请求参数处理 | ||||||
|  |  * @param {*} params 参数对象 | ||||||
|  |  * @param {*} openDefultParams 是否开启默认参数? | ||||||
|  |  */ | ||||||
|  | http.adornParams = (params = {}, openDefaultParams = true) => { | ||||||
|  |   var defaults = { | ||||||
|  |     't': new Date().getTime() | ||||||
|  |   } | ||||||
|  |   return openDefaultParams ? merge(defaults, params) : params | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * post请求数据处理 | ||||||
|  |  * @param {*} data 数据对象 | ||||||
|  |  * @param {*} openDefultdata 是否开启默认数据? | ||||||
|  |  * @param {*} contentType 数据格式 | ||||||
|  |  *  json: 'application/json; charset=utf-8' | ||||||
|  |  *  form: 'application/x-www-form-urlencoded; charset=utf-8' | ||||||
|  |  */ | ||||||
|  | http.adornData = (data = {}, openDefaultdata = true, contentType = 'json') => { | ||||||
|  |   var defaults = { | ||||||
|  |     't': new Date().getTime() | ||||||
|  |   } | ||||||
|  |   data = openDefaultdata ? merge(defaults, data) : data | ||||||
|  |   return contentType === 'raw' ? data : contentType === 'json' ? JSON.stringify(data) : qs.stringify(data) | ||||||
|  |   // return contentType === 'json' ? JSON.stringify(data, (_, v) => typeof v === 'bigint' ? v.toString() : v) : qs.stringify(data) | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
| export default http | export default http | ||||||
|   | |||||||
| @@ -17,7 +17,8 @@ | |||||||
| 					:name="item.name" | 					:name="item.name" | ||||||
| 					:label="item.title" | 					:label="item.title" | ||||||
| 					:closable="item.name !== 'home'" | 					:closable="item.name !== 'home'" | ||||||
|           :class="{ 'is-iframe': tabIsIframe(item.iframeURL) }"> | 					:class="{ 'is-iframe': tabIsIframe(item.iframeURL) }" | ||||||
|  | 				> | ||||||
| 					<template v-if="item.name === 'home'"> | 					<template v-if="item.name === 'home'"> | ||||||
| 						<svg slot="label" class="icon-svg aui-content--tabs-icon-nav" aria-hidden="true"><use xlink:href="#icon-home"></use></svg> | 						<svg slot="label" class="icon-svg aui-content--tabs-icon-nav" aria-hidden="true"><use xlink:href="#icon-home"></use></svg> | ||||||
| 					</template> | 					</template> | ||||||
| @@ -40,28 +41,27 @@ | |||||||
| <script> | <script> | ||||||
| import { isURL } from '@/utils/validate' | import { isURL } from '@/utils/validate' | ||||||
| export default { | export default { | ||||||
|   data () { | 	data() { | ||||||
|     return { | 		return {} | ||||||
|     } |  | ||||||
| 	}, | 	}, | ||||||
| 	methods: { | 	methods: { | ||||||
| 		// tabs, 是否通过iframe展示 | 		// tabs, 是否通过iframe展示 | ||||||
|     tabIsIframe (url) { | 		tabIsIframe(url) { | ||||||
| 			return isURL(url) | 			return isURL(url) | ||||||
| 		}, | 		}, | ||||||
| 		// tabs, 选中tab | 		// tabs, 选中tab | ||||||
|     tabSelectedHandle (tab) { | 		tabSelectedHandle(tab) { | ||||||
| 			tab = this.$store.state.contentTabs.filter(item => item.name === tab.name)[0] | 			tab = this.$store.state.contentTabs.filter(item => item.name === tab.name)[0] | ||||||
| 			if (tab) { | 			if (tab) { | ||||||
| 				this.$router.push({ | 				this.$router.push({ | ||||||
|           'name': tab.name, | 					name: tab.name, | ||||||
|           'params': { ...tab.params }, | 					params: { ...tab.params }, | ||||||
|           'query': { ...tab.query } | 					query: { ...tab.query } | ||||||
| 				}) | 				}) | ||||||
| 			} | 			} | ||||||
| 		}, | 		}, | ||||||
| 		// tabs, 删除tab | 		// tabs, 删除tab | ||||||
|     tabRemoveHandle (tabName) { | 		tabRemoveHandle(tabName) { | ||||||
| 			if (tabName === 'home') { | 			if (tabName === 'home') { | ||||||
| 				return false | 				return false | ||||||
| 			} | 			} | ||||||
| @@ -81,13 +81,13 @@ export default { | |||||||
| 			} | 			} | ||||||
| 		}, | 		}, | ||||||
| 		// tabs, 关闭其它 | 		// tabs, 关闭其它 | ||||||
|     tabsCloseOtherHandle () { | 		tabsCloseOtherHandle() { | ||||||
| 			this.$store.state.contentTabs = this.$store.state.contentTabs.filter(item => { | 			this.$store.state.contentTabs = this.$store.state.contentTabs.filter(item => { | ||||||
| 				return item.name === 'home' || item.name === this.$store.state.contentTabsActiveName | 				return item.name === 'home' || item.name === this.$store.state.contentTabsActiveName | ||||||
| 			}) | 			}) | ||||||
| 		}, | 		}, | ||||||
| 		// tabs, 关闭全部 | 		// tabs, 关闭全部 | ||||||
|     tabsCloseAllHandle () { | 		tabsCloseAllHandle() { | ||||||
| 			this.$store.state.contentTabs = this.$store.state.contentTabs.filter(item => item.name === 'home') | 			this.$store.state.contentTabs = this.$store.state.contentTabs.filter(item => item.name === 'home') | ||||||
| 			this.$router.push({ name: 'home' }) | 			this.$router.push({ name: 'home' }) | ||||||
| 		} | 		} | ||||||
|   | |||||||
| @@ -1,10 +1,5 @@ | |||||||
| <template> | <template> | ||||||
|   <el-dialog | 	<el-dialog :visible.sync="visible" :title="$t('updatePassword.title')" :close-on-click-modal="false" :close-on-press-escape="false" :append-to-body="true"> | ||||||
|     :visible.sync="visible" |  | ||||||
|     :title="$t('updatePassword.title')" |  | ||||||
|     :close-on-click-modal="false" |  | ||||||
|     :close-on-press-escape="false" |  | ||||||
|     :append-to-body="true"> |  | ||||||
| 		<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmitHandle()" label-width="120px"> | 		<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmitHandle()" label-width="120px"> | ||||||
| 			<el-form-item :label="$t('updatePassword.username')"> | 			<el-form-item :label="$t('updatePassword.username')"> | ||||||
| 				<span>{{ $store.state.user.name }}</span> | 				<span>{{ $store.state.user.name }}</span> | ||||||
| @@ -30,7 +25,7 @@ | |||||||
| import debounce from 'lodash/debounce' | import debounce from 'lodash/debounce' | ||||||
| import { clearLoginInfo } from '@/utils' | import { clearLoginInfo } from '@/utils' | ||||||
| export default { | export default { | ||||||
|   data () { | 	data() { | ||||||
| 		return { | 		return { | ||||||
| 			visible: false, | 			visible: false, | ||||||
| 			dataForm: { | 			dataForm: { | ||||||
| @@ -41,7 +36,7 @@ export default { | |||||||
| 		} | 		} | ||||||
| 	}, | 	}, | ||||||
| 	computed: { | 	computed: { | ||||||
|     dataRule () { | 		dataRule() { | ||||||
| 			var validateConfirmPassword = (rule, value, callback) => { | 			var validateConfirmPassword = (rule, value, callback) => { | ||||||
| 				if (this.dataForm.newPassword !== value) { | 				if (this.dataForm.newPassword !== value) { | ||||||
| 					return callback(new Error(this.$t('updatePassword.validate.confirmPassword'))) | 					return callback(new Error(this.$t('updatePassword.validate.confirmPassword'))) | ||||||
| @@ -49,12 +44,8 @@ export default { | |||||||
| 				callback() | 				callback() | ||||||
| 			} | 			} | ||||||
| 			return { | 			return { | ||||||
|         password: [ | 				password: [{ required: true, message: this.$t('validate.required'), trigger: 'blur' }], | ||||||
|           { required: true, message: this.$t('validate.required'), trigger: 'blur' } | 				newPassword: [{ required: true, message: this.$t('validate.required'), trigger: 'blur' }], | ||||||
|         ], |  | ||||||
|         newPassword: [ |  | ||||||
|           { required: true, message: this.$t('validate.required'), trigger: 'blur' } |  | ||||||
|         ], |  | ||||||
| 				confirmPassword: [ | 				confirmPassword: [ | ||||||
| 					{ required: true, message: this.$t('validate.required'), trigger: 'blur' }, | 					{ required: true, message: this.$t('validate.required'), trigger: 'blur' }, | ||||||
| 					{ validator: validateConfirmPassword, trigger: 'blur' } | 					{ validator: validateConfirmPassword, trigger: 'blur' } | ||||||
| @@ -63,19 +54,22 @@ export default { | |||||||
| 		} | 		} | ||||||
| 	}, | 	}, | ||||||
| 	methods: { | 	methods: { | ||||||
|     init () { | 		init() { | ||||||
| 			this.visible = true | 			this.visible = true | ||||||
| 			this.$nextTick(() => { | 			this.$nextTick(() => { | ||||||
| 				this.$refs['dataForm'].resetFields() | 				this.$refs['dataForm'].resetFields() | ||||||
| 			}) | 			}) | ||||||
| 		}, | 		}, | ||||||
| 		// 表单提交 | 		// 表单提交 | ||||||
|     dataFormSubmitHandle: debounce(function () { | 		dataFormSubmitHandle: debounce( | ||||||
|       this.$refs['dataForm'].validate((valid) => { | 			function() { | ||||||
|  | 				this.$refs['dataForm'].validate(valid => { | ||||||
| 					if (!valid) { | 					if (!valid) { | ||||||
| 						return false | 						return false | ||||||
| 					} | 					} | ||||||
|         this.$http.put('/sys/user/password', this.dataForm).then(({ data: res }) => { | 					this.$http | ||||||
|  | 						.put('/sys/user/password', this.dataForm) | ||||||
|  | 						.then(({ data: res }) => { | ||||||
| 							if (res.code !== 0) { | 							if (res.code !== 0) { | ||||||
| 								return this.$message.error(res.msg) | 								return this.$message.error(res.msg) | ||||||
| 							} | 							} | ||||||
| @@ -89,9 +83,13 @@ export default { | |||||||
| 									this.$router.replace({ name: 'login' }) | 									this.$router.replace({ name: 'login' }) | ||||||
| 								} | 								} | ||||||
| 							}) | 							}) | ||||||
|         }).catch(() => {}) |  | ||||||
| 						}) | 						}) | ||||||
|     }, 1000, { 'leading': true, 'trailing': false }) | 						.catch(() => {}) | ||||||
|  | 				}) | ||||||
|  | 			}, | ||||||
|  | 			1000, | ||||||
|  | 			{ leading: true, trailing: false } | ||||||
|  | 		) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| </script> | </script> | ||||||
|   | |||||||
| @@ -9,14 +9,18 @@ | |||||||
| 		<div class="aui-navbar__body"> | 		<div class="aui-navbar__body"> | ||||||
| 			<el-menu class="aui-navbar__menu mr-auto" mode="horizontal"> | 			<el-menu class="aui-navbar__menu mr-auto" mode="horizontal"> | ||||||
| 				<el-menu-item index="1" @click="$store.state.sidebarFold = !$store.state.sidebarFold"> | 				<el-menu-item index="1" @click="$store.state.sidebarFold = !$store.state.sidebarFold"> | ||||||
|           <svg class="icon-svg aui-navbar__icon-menu aui-navbar__icon-menu--switch" aria-hidden="true"><use xlink:href="#icon-outdent"></use></svg> | 					<svg class="icon-svg aui-navbar__icon-menu aui-navbar__icon-menu--switch" aria-hidden="true"> | ||||||
|  | 						<use xlink:href="#icon-outdent"></use> | ||||||
|  | 					</svg> | ||||||
| 				</el-menu-item> | 				</el-menu-item> | ||||||
| 				<el-menu-item index="2" @click="refresh()"> | 				<el-menu-item index="2" @click="refresh()"> | ||||||
|           <svg class="icon-svg aui-navbar__icon-menu aui-navbar__icon-menu--refresh" aria-hidden="true"><use xlink:href="#icon-sync"></use></svg> | 					<svg class="icon-svg aui-navbar__icon-menu aui-navbar__icon-menu--refresh" aria-hidden="true"> | ||||||
|  | 						<use xlink:href="#icon-sync"></use> | ||||||
|  | 					</svg> | ||||||
| 				</el-menu-item> | 				</el-menu-item> | ||||||
| 			</el-menu> | 			</el-menu> | ||||||
| 			<el-menu class="aui-navbar__menu" mode="horizontal"> | 			<el-menu class="aui-navbar__menu" mode="horizontal"> | ||||||
|         <el-menu-item index="2"> | 				<!-- <el-menu-item index="2"> | ||||||
| 					<a href="https://www.renren.io/" target="_blank"> | 					<a href="https://www.renren.io/" target="_blank"> | ||||||
| 						<svg class="icon-svg aui-navbar__icon-menu" aria-hidden="true"><use xlink:href="#icon-earth"></use></svg> | 						<svg class="icon-svg aui-navbar__icon-menu" aria-hidden="true"><use xlink:href="#icon-earth"></use></svg> | ||||||
| 					</a> | 					</a> | ||||||
| @@ -25,14 +29,30 @@ | |||||||
| 					<a href="https://gitee.com/renrenio/renren-security" target="_blank"> | 					<a href="https://gitee.com/renrenio/renren-security" target="_blank"> | ||||||
| 						<svg class="icon-svg aui-navbar__icon-menu" aria-hidden="true"><use xlink:href="#gitee"></use></svg> | 						<svg class="icon-svg aui-navbar__icon-menu" aria-hidden="true"><use xlink:href="#gitee"></use></svg> | ||||||
| 					</a> | 					</a> | ||||||
|  | 				</el-menu-item> --> | ||||||
|  | 				<el-menu-item index="3"> | ||||||
|  | 					<el-dropdown placement="bottom" :show-timeout="0" @command="handleCommand"> | ||||||
|  | 						<span class="el-dropdown-link"> | ||||||
|  | 							<svg class="icon-svg aui-navbar__icon-menu" aria-hidden="true"> | ||||||
|  | 								<use xlink:href="#icon-earth"></use> | ||||||
|  | 							</svg> | ||||||
|  | 							<!-- <i class="el-icon-arrow-down el-icon--right"></i> --> | ||||||
|  | 						</span> | ||||||
|  | 						<el-dropdown-menu slot="dropdown"> | ||||||
|  | 							<el-dropdown-item :disabled="getLang() === 'zh-CN'" command="toCN">中文</el-dropdown-item> | ||||||
|  | 							<el-dropdown-item :disabled="getLang() === 'en'" command="toEN">En</el-dropdown-item> | ||||||
|  | 						</el-dropdown-menu> | ||||||
|  | 					</el-dropdown> | ||||||
| 				</el-menu-item> | 				</el-menu-item> | ||||||
| 				<el-menu-item index="4" @click="fullscreenHandle()"> | 				<el-menu-item index="4" @click="fullscreenHandle()"> | ||||||
|           <svg class="icon-svg aui-navbar__icon-menu" aria-hidden="true"><use xlink:href="#icon-fullscreen"></use></svg> | 					<svg class="icon-svg aui-navbar__icon-menu" aria-hidden="true"> | ||||||
|  | 						<use xlink:href="#icon-fullscreen"></use> | ||||||
|  | 					</svg> | ||||||
| 				</el-menu-item> | 				</el-menu-item> | ||||||
| 				<el-menu-item index="5" class="aui-navbar__avatar"> | 				<el-menu-item index="5" class="aui-navbar__avatar"> | ||||||
| 					<el-dropdown placement="bottom" :show-timeout="0"> | 					<el-dropdown placement="bottom" :show-timeout="0"> | ||||||
| 						<span class="el-dropdown-link"> | 						<span class="el-dropdown-link"> | ||||||
|               <img src="~@/assets/img/avatar.png"> | 							<img src="~@/assets/img/avatar.png" /> | ||||||
| 							<span>{{ $store.state.user.name }}</span> | 							<span>{{ $store.state.user.name }}</span> | ||||||
| 							<i class="el-icon-arrow-down"></i> | 							<i class="el-icon-arrow-down"></i> | ||||||
| 						</span> | 						</span> | ||||||
| @@ -49,12 +69,13 @@ | |||||||
| 	</nav> | 	</nav> | ||||||
| </template> | </template> | ||||||
| <script> | <script> | ||||||
|  | import Cookies from 'js-cookie' | ||||||
| import screenfull from 'screenfull' | import screenfull from 'screenfull' | ||||||
| import UpdatePassword from './main-navbar-update-password' | import UpdatePassword from './main-navbar-update-password' | ||||||
| import { clearLoginInfo } from '@/utils' | import { clearLoginInfo } from '@/utils' | ||||||
| export default { | export default { | ||||||
| 	inject: ['refresh'], | 	inject: ['refresh'], | ||||||
|   data () { | 	data() { | ||||||
| 		return { | 		return { | ||||||
| 			updatePasswordVisible: false, | 			updatePasswordVisible: false, | ||||||
| 			messageTip: false | 			messageTip: false | ||||||
| @@ -64,8 +85,28 @@ export default { | |||||||
| 		UpdatePassword | 		UpdatePassword | ||||||
| 	}, | 	}, | ||||||
| 	methods: { | 	methods: { | ||||||
|  | 		// 获取当前语言环境 | ||||||
|  | 		getLang() { | ||||||
|  | 			return Cookies.get('language') | ||||||
|  | 		}, | ||||||
|  | 		// 切换语言环境 | ||||||
|  | 		handleCommand(command) { | ||||||
|  | 			// 切换语言选项时,可能需要手动刷新页面 | ||||||
|  | 			switch (command) { | ||||||
|  | 				case 'toCN': | ||||||
|  | 					this.$root.$i18n.locale = 'zh-CN' | ||||||
|  | 					window.navigator.language = 'zh-cn' | ||||||
|  | 					break | ||||||
|  | 				case 'toEN': | ||||||
|  | 					console.log('root', this.$root.$i18n.locale) | ||||||
|  | 					this.$root.$i18n.locale = 'en' | ||||||
|  | 					location.reload() | ||||||
|  | 					window.navigator.language = 'en-US' | ||||||
|  | 					break | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
| 		// 全屏 | 		// 全屏 | ||||||
|     fullscreenHandle () { | 		fullscreenHandle() { | ||||||
| 			if (!screenfull.enabled) { | 			if (!screenfull.enabled) { | ||||||
| 				return this.$message({ | 				return this.$message({ | ||||||
| 					message: this.$t('fullscreen.prompt'), | 					message: this.$t('fullscreen.prompt'), | ||||||
| @@ -76,27 +117,32 @@ export default { | |||||||
| 			screenfull.toggle() | 			screenfull.toggle() | ||||||
| 		}, | 		}, | ||||||
| 		// 修改密码 | 		// 修改密码 | ||||||
|     updatePasswordHandle () { | 		updatePasswordHandle() { | ||||||
| 			this.updatePasswordVisible = true | 			this.updatePasswordVisible = true | ||||||
| 			this.$nextTick(() => { | 			this.$nextTick(() => { | ||||||
| 				this.$refs.updatePassword.init() | 				this.$refs.updatePassword.init() | ||||||
| 			}) | 			}) | ||||||
| 		}, | 		}, | ||||||
| 		// 退出 | 		// 退出 | ||||||
|     logoutHandle () { | 		logoutHandle() { | ||||||
|       this.$confirm(this.$t('prompt.info', { 'handle': this.$t('logout') }), this.$t('prompt.title'), { | 			this.$confirm(this.$t('prompt.info', { handle: this.$t('logout') }), this.$t('prompt.title'), { | ||||||
| 				confirmButtonText: this.$t('confirm'), | 				confirmButtonText: this.$t('confirm'), | ||||||
| 				cancelButtonText: this.$t('cancel'), | 				cancelButtonText: this.$t('cancel'), | ||||||
| 				type: 'warning' | 				type: 'warning' | ||||||
|       }).then(() => { | 			}) | ||||||
|         this.$http.post('/logout').then(({ data: res }) => { | 				.then(() => { | ||||||
|  | 					this.$http | ||||||
|  | 						.post(this.$http.adornUrl('/logout')) | ||||||
|  | 						.then(({ data: res }) => { | ||||||
| 							if (res.code !== 0) { | 							if (res.code !== 0) { | ||||||
| 								return this.$message.error(res.msg) | 								return this.$message.error(res.msg) | ||||||
| 							} | 							} | ||||||
| 							clearLoginInfo() | 							clearLoginInfo() | ||||||
|           this.$router.push({ name: 'login' }) | 							this.$router.push({ name: 'Login' }) | ||||||
|         }).catch(() => {}) | 						}) | ||||||
|       }).catch(() => {}) | 						.catch(() => {}) | ||||||
|  | 				}) | ||||||
|  | 				.catch(() => {}) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|   | |||||||
| @@ -27,7 +27,7 @@ export default { | |||||||
| 	}, | 	}, | ||||||
| 	methods: { | 	methods: { | ||||||
| 		// 通过menuId与动态(菜单)路由进行匹配跳转至指定路由 | 		// 通过menuId与动态(菜单)路由进行匹配跳转至指定路由 | ||||||
|     gotoRouteHandle (menuId) { | 		gotoRouteHandle(menuId) { | ||||||
| 			var route = window.SITE_CONFIG['dynamicMenuRoutes'].filter(item => item.meta.menuId === menuId)[0] | 			var route = window.SITE_CONFIG['dynamicMenuRoutes'].filter(item => item.meta.menuId === menuId)[0] | ||||||
| 			if (route) { | 			if (route) { | ||||||
| 				this.$router.push({ name: route.name }) | 				this.$router.push({ name: route.name }) | ||||||
|   | |||||||
| @@ -6,8 +6,9 @@ | |||||||
| 				:collapse="$store.state.sidebarFold" | 				:collapse="$store.state.sidebarFold" | ||||||
| 				:unique-opened="true" | 				:unique-opened="true" | ||||||
| 				:collapseTransition="false" | 				:collapseTransition="false" | ||||||
|         class="aui-sidebar__menu"> | 				class="aui-sidebar__menu" | ||||||
|         <sub-menu v-for="menu in $store.state.sidebarMenuList" :key="menu.id" :menu="menu" /> | 			> | ||||||
|  | 				<sub-menu v-for="menu in unhiddenMenuList" :key="menu.id" :menu="menu" /> | ||||||
| 			</el-menu> | 			</el-menu> | ||||||
| 		</div> | 		</div> | ||||||
| 	</aside> | 	</aside> | ||||||
| @@ -16,15 +17,42 @@ | |||||||
| <script> | <script> | ||||||
| import SubMenu from './main-sidebar-sub-menu' | import SubMenu from './main-sidebar-sub-menu' | ||||||
| export default { | export default { | ||||||
|   data () { | 	data() { | ||||||
| 		return { | 		return { | ||||||
|  | 			unhiddenMenuList: [] | ||||||
| 		} | 		} | ||||||
| 	}, | 	}, | ||||||
| 	components: { | 	components: { | ||||||
| 		SubMenu | 		SubMenu | ||||||
| 	}, | 	}, | ||||||
|   created () { | 	mounted() { | ||||||
|     this.$store.state.sidebarMenuList = window.SITE_CONFIG['menuList'] | 		// this.$store.state.sidebarMenuList = window.SITE_CONFIG['menuList'] | ||||||
|  | 		this.$nextTick(() => { | ||||||
|  | 			console.log(`window.SITE_CONFIG['menuList']`, window.SITE_CONFIG['menuList']) | ||||||
|  | 			this.unhiddenMenuList = this.getUnhiddenRoutesListFrom(window.SITE_CONFIG['menuList']) | ||||||
|  | 			/** 本地保存一份,store保存一份,感觉 store 都不需要保存... */ | ||||||
|  | 			this.$store.state.sidebarMenuList = this.unhiddenMenuList | ||||||
|  | 		}) | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		getUnhiddenRoutesListFrom(fullList) { | ||||||
|  | 			const list = [] | ||||||
|  | 			if (fullList.length) { | ||||||
|  | 				fullList.forEach(menu => { | ||||||
|  | 					if (menu.sort !== 99) { | ||||||
|  | 						/** 前后端约定,路由排序值为 99 时不在前端的侧边栏展示该路由 */ | ||||||
|  | 						const newRouteItem = JSON.parse(JSON.stringify(menu)) | ||||||
|  | 						if (menu.children) { | ||||||
|  | 							newRouteItem.children = this.getUnhiddenRoutesListFrom(menu.children) | ||||||
|  | 						} | ||||||
|  | 						list.push(newRouteItem) | ||||||
|  | 					} else { | ||||||
|  | 						// console.log(menu.name, '是应该被隐藏的路由') | ||||||
|  | 					} | ||||||
|  | 				}) | ||||||
|  | 			} | ||||||
|  | 			return list | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| </script> | </script> | ||||||
|   | |||||||
| @@ -16,10 +16,10 @@ import MainSidebar from './main-sidebar' | |||||||
| import MainContent from './main-content' | import MainContent from './main-content' | ||||||
| import debounce from 'lodash/debounce' | import debounce from 'lodash/debounce' | ||||||
| export default { | export default { | ||||||
|   provide () { | 	provide() { | ||||||
| 		return { | 		return { | ||||||
| 			// 刷新 | 			// 刷新 | ||||||
|       refresh () { | 			refresh() { | ||||||
| 				this.$store.state.contentIsNeedRefresh = true | 				this.$store.state.contentIsNeedRefresh = true | ||||||
| 				this.$nextTick(() => { | 				this.$nextTick(() => { | ||||||
| 					this.$store.state.contentIsNeedRefresh = false | 					this.$store.state.contentIsNeedRefresh = false | ||||||
| @@ -27,7 +27,7 @@ export default { | |||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	}, | 	}, | ||||||
|   data () { | 	data() { | ||||||
| 		return { | 		return { | ||||||
| 			loading: true | 			loading: true | ||||||
| 		} | 		} | ||||||
| @@ -40,26 +40,26 @@ export default { | |||||||
| 	watch: { | 	watch: { | ||||||
| 		$route: 'routeHandle' | 		$route: 'routeHandle' | ||||||
| 	}, | 	}, | ||||||
|   created () { | 	created() { | ||||||
| 		this.windowResizeHandle() | 		this.windowResizeHandle() | ||||||
| 		this.routeHandle(this.$route) | 		this.routeHandle(this.$route) | ||||||
|     Promise.all([ | 		Promise.all([this.getUserInfo(), this.getPermissions()]).then(() => { | ||||||
|       this.getUserInfo(), |  | ||||||
|       this.getPermissions() |  | ||||||
|     ]).then(() => { |  | ||||||
| 			this.loading = false | 			this.loading = false | ||||||
| 		}) | 		}) | ||||||
| 	}, | 	}, | ||||||
| 	methods: { | 	methods: { | ||||||
| 		// 窗口改变大小 | 		// 窗口改变大小 | ||||||
|     windowResizeHandle () { | 		windowResizeHandle() { | ||||||
| 			this.$store.state.sidebarFold = document.documentElement['clientWidth'] <= 992 || false | 			this.$store.state.sidebarFold = document.documentElement['clientWidth'] <= 992 || false | ||||||
|       window.addEventListener('resize', debounce(() => { | 			window.addEventListener( | ||||||
|  | 				'resize', | ||||||
|  | 				debounce(() => { | ||||||
| 					this.$store.state.sidebarFold = document.documentElement['clientWidth'] <= 992 || false | 					this.$store.state.sidebarFold = document.documentElement['clientWidth'] <= 992 || false | ||||||
|       }, 150)) | 				}, 150) | ||||||
|  | 			) | ||||||
| 		}, | 		}, | ||||||
| 		// 路由, 监听 | 		// 路由, 监听 | ||||||
|     routeHandle (route) { | 		routeHandle(route) { | ||||||
| 			if (!route.meta.isTab) { | 			if (!route.meta.isTab) { | ||||||
| 				return false | 				return false | ||||||
| 			} | 			} | ||||||
| @@ -68,9 +68,9 @@ export default { | |||||||
| 				tab = { | 				tab = { | ||||||
| 					...window.SITE_CONFIG['contentTabDefault'], | 					...window.SITE_CONFIG['contentTabDefault'], | ||||||
| 					...route.meta, | 					...route.meta, | ||||||
|           'name': route.name, | 					name: route.name, | ||||||
|           'params': { ...route.params }, | 					params: { ...route.params }, | ||||||
|           'query': { ...route.query } | 					query: { ...route.query } | ||||||
| 				} | 				} | ||||||
| 				this.$store.state.contentTabs = this.$store.state.contentTabs.concat(tab) | 				this.$store.state.contentTabs = this.$store.state.contentTabs.concat(tab) | ||||||
| 			} | 			} | ||||||
| @@ -78,24 +78,30 @@ export default { | |||||||
| 			this.$store.state.contentTabsActiveName = tab.name | 			this.$store.state.contentTabsActiveName = tab.name | ||||||
| 		}, | 		}, | ||||||
| 		// 获取当前管理员信息 | 		// 获取当前管理员信息 | ||||||
|     getUserInfo () { | 		getUserInfo() { | ||||||
|       return this.$http.get('/sys/user/info').then(({ data: res }) => { | 			return this.$http | ||||||
|  | 				.get(this.$http.adornUrl('/sys/user/info')) | ||||||
|  | 				.then(({ data: res }) => { | ||||||
| 					if (res.code !== 0) { | 					if (res.code !== 0) { | ||||||
| 						return this.$message.error(res.msg) | 						return this.$message.error(res.msg) | ||||||
| 					} | 					} | ||||||
| 					this.$store.state.user.id = res.data.id | 					this.$store.state.user.id = res.data.id | ||||||
| 					this.$store.state.user.name = res.data.username | 					this.$store.state.user.name = res.data.username | ||||||
| 					this.$store.state.user.superAdmin = res.data.superAdmin | 					this.$store.state.user.superAdmin = res.data.superAdmin | ||||||
|       }).catch(() => {}) | 				}) | ||||||
|  | 				.catch(() => {}) | ||||||
| 		}, | 		}, | ||||||
| 		// 获取权限 | 		// 获取权限 | ||||||
|     getPermissions () { | 		getPermissions() { | ||||||
|       return this.$http.get('/sys/menu/permissions').then(({ data: res }) => { | 			return this.$http | ||||||
|  | 				.get(this.$http.adornUrl('/sys/menu/permissions')) | ||||||
|  | 				.then(({ data: res }) => { | ||||||
| 					if (res.code !== 0) { | 					if (res.code !== 0) { | ||||||
| 						return this.$message.error(res.msg) | 						return this.$message.error(res.msg) | ||||||
| 					} | 					} | ||||||
| 					window.SITE_CONFIG['permissions'] = res.data | 					window.SITE_CONFIG['permissions'] = res.data | ||||||
|       }).catch(() => {}) | 				}) | ||||||
|  | 				.catch(() => {}) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|   | |||||||
| @@ -3,7 +3,9 @@ | |||||||
| 		<div class="mod-home"> | 		<div class="mod-home"> | ||||||
| 			<h3>项目介绍</h3> | 			<h3>项目介绍</h3> | ||||||
| 			<ul> | 			<ul> | ||||||
|         <li>renren-ui基于vue、element-ui构建开发,实现<a href="https://gitee.com/renrenio/renren-ui" target="_blank">renren-security</a>后台管理前端功能,提供一套更优的前端解决方案</li> | 				<li> | ||||||
|  | 					renren-ui基于vue、element-ui构建开发,实现<a href="https://gitee.com/renrenio/renren-ui" target="_blank">renren-security</a>后台管理前端功能,提供一套更优的前端解决方案 | ||||||
|  | 				</li> | ||||||
| 				<li>前后端分离,通过token进行数据交互,可独立部署</li> | 				<li>前后端分离,通过token进行数据交互,可独立部署</li> | ||||||
| 				<li>动态菜单,通过菜单管理统一管理访问路由</li> | 				<li>动态菜单,通过菜单管理统一管理访问路由</li> | ||||||
| 				<li>演示地址:<a href="http://demo.open.renren.io/renren-security" target="_blank">http://demo.open.renren.io/renren-security</a> (账号密码:admin/admin)</li> | 				<li>演示地址:<a href="http://demo.open.renren.io/renren-security" target="_blank">http://demo.open.renren.io/renren-security</a> (账号密码:admin/admin)</li> | ||||||
| @@ -18,7 +20,6 @@ | |||||||
| 			<h3>官方微信群</h3> | 			<h3>官方微信群</h3> | ||||||
| 			<ul> | 			<ul> | ||||||
| 				<li>扫码下面的二维码,关注【人人开源】公众号,回复【加群】,即可根据提示加入微信群!</li> | 				<li>扫码下面的二维码,关注【人人开源】公众号,回复【加群】,即可根据提示加入微信群!</li> | ||||||
|         <li><img src="https://cdn.renren.io/f5cef202207132229319338.jpg" alt="微信群" /></li> |  | ||||||
| 			</ul> | 			</ul> | ||||||
| 		</div> | 		</div> | ||||||
| 	</el-card> | 	</el-card> | ||||||
|   | |||||||
| @@ -58,6 +58,12 @@ export default { | |||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|   methods: { |   methods: { | ||||||
|  | 		// destroy dialog | ||||||
|  | 		handleDestroyDialog() { | ||||||
|  | 			setTimeout(() => { | ||||||
|  | 				this.addOrUpdateVisible= false | ||||||
|  | 			}, /** after dialog animated */ 200); | ||||||
|  | 		}, | ||||||
|     init () { |     init () { | ||||||
|       this.visible = true |       this.visible = true | ||||||
|       this.$nextTick(() => { |       this.$nextTick(() => { | ||||||
| @@ -72,7 +78,7 @@ export default { | |||||||
|     }, |     }, | ||||||
|     // 获取信息 |     // 获取信息 | ||||||
|     getInfo () { |     getInfo () { | ||||||
|       this.$http.get(`/sys/schedule/${this.dataForm.id}`).then(({ data: res }) => { |       this.$http.get(this.$http.adornUrl(`/sys/schedule/${this.dataForm.id}`)).then(({ data: res }) => { | ||||||
|         if (res.code !== 0) { |         if (res.code !== 0) { | ||||||
|           return this.$message.error(res.msg) |           return this.$message.error(res.msg) | ||||||
|         } |         } | ||||||
| @@ -85,7 +91,7 @@ export default { | |||||||
|         if (!valid) { |         if (!valid) { | ||||||
|           return false |           return false | ||||||
|         } |         } | ||||||
|         this.$http[!this.dataForm.id ? 'post' : 'put']('/sys/schedule', this.dataForm).then(({ data: res }) => { |         this.$http[!this.dataForm.id ? 'post' : 'put'](this.$http.adornUrl('/sys/schedule'), this.dataForm).then(({ data: res }) => { | ||||||
|           if (res.code !== 0) { |           if (res.code !== 0) { | ||||||
|             return this.$message.error(res.msg) |             return this.$message.error(res.msg) | ||||||
|           } |           } | ||||||
|   | |||||||
| @@ -1,11 +1,11 @@ | |||||||
| <template> | <template> | ||||||
|   <el-dialog :visible.sync="visible" :title="$t('schedule.log')" :close-on-click-modal="false" :close-on-press-escape="false" width="75%"> |   <el-dialog :visible.sync="visible" :title="$t('schedule.log')" :close-on-click-modal="false" :close-on-press-escape="false" width="75%"> | ||||||
|     <el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()"> |     <el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)"> | ||||||
|       <el-form-item> |       <el-form-item> | ||||||
|         <el-input v-model="dataForm.jobId" :placeholder="$t('schedule.jobId')" clearable></el-input> |         <el-input v-model="dataForm.jobId" :placeholder="$t('schedule.jobId')" clearable></el-input> | ||||||
|       </el-form-item> |       </el-form-item> | ||||||
|       <el-form-item> |       <el-form-item> | ||||||
|         <el-button @click="getDataList()">{{ $t('query') }}</el-button> |         <el-button @click="currentChangeHandle(1)">{{ $t('query') }}</el-button> | ||||||
|       </el-form-item> |       </el-form-item> | ||||||
|     </el-form> |     </el-form> | ||||||
|     <el-table |     <el-table | ||||||
| @@ -56,13 +56,19 @@ export default { | |||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|   methods: { |   methods: { | ||||||
|  | 		// destroy dialog | ||||||
|  | 		handleDestroyDialog() { | ||||||
|  | 			setTimeout(() => { | ||||||
|  | 				this.addOrUpdateVisible= false | ||||||
|  | 			}, /** after dialog animated */ 200); | ||||||
|  | 		}, | ||||||
|     init () { |     init () { | ||||||
|       this.visible = true |       this.visible = true | ||||||
|       this.getDataList() |       this.getDataList() | ||||||
|     }, |     }, | ||||||
|     // 失败信息 |     // 失败信息 | ||||||
|     showErrorInfo (id) { |     showErrorInfo (id) { | ||||||
|       this.$http.get(`/sys/scheduleLog/${id}`).then(({ data: res }) => { |       this.$http.get(this.$http.adornUrl(`/sys/scheduleLog/${id}`)).then(({ data: res }) => { | ||||||
|         if (res.code !== 0) { |         if (res.code !== 0) { | ||||||
|           return this.$message.error(res.msg) |           return this.$message.error(res.msg) | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -1,12 +1,12 @@ | |||||||
| <template> | <template> | ||||||
|   <el-card shadow="never" class="aui-card--fill"> |   <el-card shadow="never" class="aui-card--fill"> | ||||||
|     <div class="mod-job__schedule"> |     <div class="mod-job__schedule"> | ||||||
|       <el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()"> |       <el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)"> | ||||||
|         <el-form-item> |         <el-form-item> | ||||||
|           <el-input v-model="dataForm.beanName" :placeholder="$t('schedule.beanName')" clearable></el-input> |           <el-input v-model="dataForm.beanName" :placeholder="$t('schedule.beanName')" clearable></el-input> | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|         <el-form-item> |         <el-form-item> | ||||||
|           <el-button @click="getDataList()">{{ $t('query') }}</el-button> |           <el-button @click="currentChangeHandle(1)">{{ $t('query') }}</el-button> | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|         <el-form-item> |         <el-form-item> | ||||||
|           <el-button v-if="$hasPermission('sys:schedule:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> |           <el-button v-if="$hasPermission('sys:schedule:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> | ||||||
| @@ -97,6 +97,12 @@ export default { | |||||||
|     Log |     Log | ||||||
|   }, |   }, | ||||||
|   methods: { |   methods: { | ||||||
|  | 		// destroy dialog | ||||||
|  | 		handleDestroyDialog() { | ||||||
|  | 			setTimeout(() => { | ||||||
|  | 				this.addOrUpdateVisible= false | ||||||
|  | 			}, /** after dialog animated */ 200); | ||||||
|  | 		}, | ||||||
|     // 暂停 |     // 暂停 | ||||||
|     pauseHandle (id) { |     pauseHandle (id) { | ||||||
|       if (!id && this.dataListSelections.length <= 0) { |       if (!id && this.dataListSelections.length <= 0) { | ||||||
| @@ -111,7 +117,7 @@ export default { | |||||||
|         cancelButtonText: this.$t('cancel'), |         cancelButtonText: this.$t('cancel'), | ||||||
|         type: 'warning' |         type: 'warning' | ||||||
|       }).then(() => { |       }).then(() => { | ||||||
|         this.$http.put('/sys/schedule/pause', id ? [id] : this.dataListSelections.map(item => item.id)).then(({ data: res }) => { |         this.$http.put(this.$http.adornUrl('/sys/schedule/pause'), id ? [id] : this.dataListSelections.map(item => item.id)).then(({ data: res }) => { | ||||||
|           if (res.code !== 0) { |           if (res.code !== 0) { | ||||||
|             return this.$message.error(res.msg) |             return this.$message.error(res.msg) | ||||||
|           } |           } | ||||||
| @@ -140,7 +146,7 @@ export default { | |||||||
|         cancelButtonText: this.$t('cancel'), |         cancelButtonText: this.$t('cancel'), | ||||||
|         type: 'warning' |         type: 'warning' | ||||||
|       }).then(() => { |       }).then(() => { | ||||||
|         this.$http.put('/sys/schedule/resume', id ? [id] : this.dataListSelections.map(item => item.id)).then(({ data: res }) => { |         this.$http.put(this.$http.adornUrl('/sys/schedule/resume'), id ? [id] : this.dataListSelections.map(item => item.id)).then(({ data: res }) => { | ||||||
|           if (res.code !== 0) { |           if (res.code !== 0) { | ||||||
|             return this.$message.error(res.msg) |             return this.$message.error(res.msg) | ||||||
|           } |           } | ||||||
| @@ -169,7 +175,7 @@ export default { | |||||||
|         cancelButtonText: this.$t('cancel'), |         cancelButtonText: this.$t('cancel'), | ||||||
|         type: 'warning' |         type: 'warning' | ||||||
|       }).then(() => { |       }).then(() => { | ||||||
|         this.$http.put('/sys/schedule/run', id ? [id] : this.dataListSelections.map(item => item.id)).then(({ data: res }) => { |         this.$http.put(this.$http.adornUrl('/sys/schedule/run'), id ? [id] : this.dataListSelections.map(item => item.id)).then(({ data: res }) => { | ||||||
|           if (res.code !== 0) { |           if (res.code !== 0) { | ||||||
|             return this.$message.error(res.msg) |             return this.$message.error(res.msg) | ||||||
|           } |           } | ||||||
|   | |||||||
							
								
								
									
										532
									
								
								src/views/modules/monitoring/equipment.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										532
									
								
								src/views/modules/monitoring/equipment.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,532 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="mod-config"> | ||||||
|  | 		<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)"> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-input v-model="dataForm.key" :placeholder="$t('eq.name') + ' / ' + $t('eq.code')" clearable></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-button @click="currentChangeHandle(1)">{{ $t('search') }}</el-button> | ||||||
|  | 				<el-button v-if="$hasPermission('monitoring:equipment:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> | ||||||
|  | 				<el-button v-if="$hasPermission('monitoring:equipment:export')" @click="exportHandle()">{{ $t('export') }}</el-button> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  |  | ||||||
|  | 		<base-table | ||||||
|  | 			:page="pageIndex" | ||||||
|  | 			:size="pageSize" | ||||||
|  | 			:data="dataList" | ||||||
|  | 			:table-head-configs="tableConfigs" | ||||||
|  | 			:max-height="calcMaxHeight(8)" | ||||||
|  | 			@operate-event="handleOperations" | ||||||
|  | 			@refreshDataList="getDataList" | ||||||
|  | 		/> | ||||||
|  | 		<el-pagination | ||||||
|  | 			@size-change="sizeChangeHandle" | ||||||
|  | 			@current-change="currentChangeHandle" | ||||||
|  | 			:current-page="pageIndex" | ||||||
|  | 			:page-sizes="[10, 20, 50, 100]" | ||||||
|  | 			:page-size="pageSize" | ||||||
|  | 			:total="totalPage" | ||||||
|  | 			layout="total, sizes, prev, pager, next, jumper" | ||||||
|  | 		></el-pagination> | ||||||
|  | 		<!-- 弹窗, 新增 / 修改 --> | ||||||
|  | 		<add-or-update | ||||||
|  | 			v-if="addOrUpdateVisible" | ||||||
|  | 			ref="addOrUpdate" | ||||||
|  | 			:configs="addOrUpdateConfigs" | ||||||
|  | 			@refreshDataList="getDataList" | ||||||
|  | 			@select-change="handleDialogSelectChange" | ||||||
|  | 			@destory-dialog="handleDestroyDialog" | ||||||
|  | 		/> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import i18n from '@/i18n' | ||||||
|  | import AddOrUpdate from '@/components/base-dialog/addOrUpdate' | ||||||
|  | // import AddOrUpdate from './equipment-add-or-update' | ||||||
|  | import BaseTable from '@/components/base-table' | ||||||
|  | import TableOperateComponent from '@/components/base-table/components/operationComponent' | ||||||
|  | import TableTextComponent from '@/components/base-table/components/detailComponent' | ||||||
|  | import CKEditor from 'ckeditor4-vue' | ||||||
|  | import { calcMaxHeight } from '@/utils' | ||||||
|  | import { timeFilter } from '@/utils/filters' | ||||||
|  | import Cookies from 'js-cookie' | ||||||
|  |  | ||||||
|  | const tableConfigs = [ | ||||||
|  | 	{ | ||||||
|  | 		type: 'index', | ||||||
|  | 		name: i18n.t('index') | ||||||
|  | 	}, | ||||||
|  | 	{ | ||||||
|  | 		prop: 'createTime', | ||||||
|  | 		name: i18n.t('createTime'), | ||||||
|  | 		filter: timeFilter | ||||||
|  | 	}, | ||||||
|  | 	{ prop: 'name', name: i18n.t('eq.name') }, | ||||||
|  | 	{ prop: 'code', name: i18n.t('eq.code') }, | ||||||
|  | 	{ prop: 'equipmentTypeName', name: i18n.t('eq.type') }, | ||||||
|  | 	{ prop: 'groupName', name: i18n.t('eq.group') }, | ||||||
|  | 	{ prop: 'enName', name: i18n.t('enname') }, | ||||||
|  | 	{ prop: 'abbr', name: i18n.t('abbr') }, | ||||||
|  | 	{ prop: 'lineName', name: i18n.t('pl.title') }, | ||||||
|  | 	{ prop: 'sectionName', name: i18n.t('ws.title') }, | ||||||
|  | 	{ | ||||||
|  | 		prop: 'details', | ||||||
|  | 		name: i18n.t('detail'), | ||||||
|  | 		subcomponent: TableTextComponent, | ||||||
|  | 		actionName: 'view-detail' | ||||||
|  | 	}, | ||||||
|  | 	{ | ||||||
|  | 		prop: 'operations', | ||||||
|  | 		name: i18n.t('handle'), | ||||||
|  | 		fixed: 'right', | ||||||
|  | 		width: 180, | ||||||
|  | 		subcomponent: TableOperateComponent, | ||||||
|  | 		options: ['edit', 'delete'] | ||||||
|  | 	} | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | const addOrUpdateConfigs = { | ||||||
|  | 	type: 'dialog', | ||||||
|  | 	infoUrl: '/monitoring/equipment', | ||||||
|  | 	fields: [ | ||||||
|  | 		{ name: 'name', label: i18n.t('eq.name'), required: true }, | ||||||
|  | 		{ name: 'code', label: i18n.t('eq.code'), required: true, api: '/monitoring/equipment/getCode' }, | ||||||
|  | 		{ name: 'enName', label: i18n.t('enname') }, | ||||||
|  | 		{ name: 'abbr', label: i18n.t('abbr') }, | ||||||
|  | 		{ | ||||||
|  | 			name: 'equipmentTypeId', | ||||||
|  | 			label: i18n.t('eq.type'), | ||||||
|  | 			required: true, | ||||||
|  | 			type: 'select', | ||||||
|  | 			options: [] | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name: 'lineId', | ||||||
|  | 			label: i18n.t('pl.title'), | ||||||
|  | 			required: true, | ||||||
|  | 			type: 'select', | ||||||
|  | 			options: [], | ||||||
|  | 			relatedField: 'sectionId' // 关联下面的id,在更换lineId时,会清空相应的sectionId选择结果 | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name: 'sectionId', | ||||||
|  | 			label: i18n.t('ws.title'), | ||||||
|  | 			required: true, | ||||||
|  | 			type: 'select', | ||||||
|  | 			options: [] | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name: 'sort', | ||||||
|  | 			label: i18n.t('ws.sort'), | ||||||
|  | 			type: 'number', | ||||||
|  | 			rules: [{ type: 'number', message: i18n.t('hints.number'), trigger: 'blur', transform: val => Number(val) }] | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name: 'groupId', | ||||||
|  | 			label: i18n.t('eq.group'), | ||||||
|  | 			required: true, | ||||||
|  | 			type: 'select', | ||||||
|  | 			options: [] | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name: 'productionTime', | ||||||
|  | 			label: i18n.t('produceTime'), | ||||||
|  | 			type: 'date', | ||||||
|  | 			props: { | ||||||
|  | 				'type': 'date', // element-ui 的配置 | ||||||
|  | 				'placeholder': i18n.t('hints.date'), | ||||||
|  | 				'value-format': 'yyyy-MM-ddTHH:mm:ss', | ||||||
|  | 				'style': { | ||||||
|  | 					width: '100%' | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name: 'enterTime', | ||||||
|  | 			label: i18n.t('enterTime'), | ||||||
|  | 			type: 'date', | ||||||
|  | 			props: { | ||||||
|  | 				'type': 'date', // element-ui 的配置 | ||||||
|  | 				'placeholder': i18n.t('hints.date'), | ||||||
|  | 				'value-format': 'yyyy-MM-ddTHH:mm:ss', | ||||||
|  | 				'style': { | ||||||
|  | 					width: '100%' | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name: 'tvalue', | ||||||
|  | 			label: i18n.t('eq.tvalue'), | ||||||
|  | 			required: true, | ||||||
|  | 			rules: [ | ||||||
|  | 				{ | ||||||
|  | 					type: 'number', | ||||||
|  | 					message: i18n.t('hints.number'), | ||||||
|  | 					trigger: 'blur', | ||||||
|  | 					transform: val => Number(val) | ||||||
|  | 				} | ||||||
|  | 			] | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name: 'processingTime', | ||||||
|  | 			label: i18n.t('eq.processingTime'), | ||||||
|  | 			rules: [ | ||||||
|  | 				{ | ||||||
|  | 					type: 'number', | ||||||
|  | 					message: i18n.t('hints.number'), | ||||||
|  | 					trigger: 'blur', | ||||||
|  | 					transform: val => Number(val) | ||||||
|  | 				} | ||||||
|  | 			] | ||||||
|  | 		}, | ||||||
|  | 		{ name: 'manufacturer', label: i18n.t('manufacturer') }, | ||||||
|  | 		{ name: 'spec', label: i18n.t('eq.grade') }, | ||||||
|  | 		{ | ||||||
|  | 			name: 'dataType', | ||||||
|  | 			label: i18n.t('eq.dtype'), | ||||||
|  | 			required: true, | ||||||
|  | 			type: 'select', | ||||||
|  | 			options: [ | ||||||
|  | 				{ value: 0, label: i18n.t('eq.dtypenone') }, | ||||||
|  | 				{ value: 1, label: i18n.t('eq.dtypeinput') }, | ||||||
|  | 				{ value: 2, label: i18n.t('eq.dtypeoutput') } | ||||||
|  | 			] | ||||||
|  | 		}, | ||||||
|  | 		{ name: 'remark', label: i18n.t('remark') } | ||||||
|  | 	], | ||||||
|  | 	extraComponents: [ | ||||||
|  | 		{ | ||||||
|  | 			name: 'description', | ||||||
|  | 			hasModel: true, | ||||||
|  | 			label: i18n.t('desc'), | ||||||
|  | 			fieldType: 'string', | ||||||
|  | 			component: CKEditor.component, | ||||||
|  | 			props: { | ||||||
|  | 				// value: 'tests', | ||||||
|  | 				config: { | ||||||
|  | 					// ckeditor 的配置: https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html | ||||||
|  | 					// toolbar: [['Bold']] | ||||||
|  | 					language: Cookies.get('language') || 'en' | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name: 'files', | ||||||
|  | 			label: i18n.t('upload.title'), | ||||||
|  | 			fieldType: 'array', | ||||||
|  | 			component: () => import('@/components/base-upload'), | ||||||
|  | 			props: { | ||||||
|  | 				// 上传组件需要的 props | ||||||
|  | 				url: '/monitoring/attachment/uploadFileFormData', | ||||||
|  | 				extraParams: { typeCode: 'EquipmentInfoFile' }, | ||||||
|  | 				buttonContent: i18n.t('upload.button'), | ||||||
|  | 				tip: i18n.t('hints.upload2m') | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name: 'files', | ||||||
|  | 			label: i18n.t('eq.image'), | ||||||
|  | 			fieldType: 'array', | ||||||
|  | 			component: () => import('@/components/base-upload'), | ||||||
|  | 			props: { | ||||||
|  | 				// 上传组件需要的 props | ||||||
|  | 				url: '/monitoring/attachment/uploadFileFormData', | ||||||
|  | 				extraParams: { typeCode: 'EquipmentInfoImage' }, | ||||||
|  | 				buttonContent: i18n.t('upload.button'), | ||||||
|  | 				tip: i18n.t('hints.upload2mPic') | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	], | ||||||
|  | 	subtable: { | ||||||
|  | 		title: i18n.t('eq.viewattr'), | ||||||
|  | 		url: '/monitoring/equipmentAttr', | ||||||
|  | 		relatedField: 'equipmentId', | ||||||
|  | 		tableConfigs: [ | ||||||
|  | 			{ type: 'index', width: 100, name: i18n.t('index') }, | ||||||
|  | 			{ prop: 'createTime', name: i18n.t('createTime'), filter: timeFilter }, | ||||||
|  | 			{ prop: 'attrName', name: i18n.t('attrName'), formField: true }, | ||||||
|  | 			{ prop: 'attrValue', name: i18n.t('attrValue'), formField: true }, | ||||||
|  | 			{ | ||||||
|  | 				prop: 'operations', | ||||||
|  | 				name: i18n.t('handle'), | ||||||
|  | 				fixed: 'right', | ||||||
|  | 				width: 180, | ||||||
|  | 				subcomponent: TableOperateComponent, | ||||||
|  | 				options: ['edit', 'delete'] | ||||||
|  | 			} | ||||||
|  | 		] | ||||||
|  | 	}, | ||||||
|  | 	operations: [ | ||||||
|  | 		{ name: 'cancel', showAlways: true }, | ||||||
|  | 		{ | ||||||
|  | 			name: 'save', | ||||||
|  | 			url: '/monitoring/equipment', | ||||||
|  | 			permission: 'monitoring:equipment:save', | ||||||
|  | 			showOnEdit: false | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name: 'update', | ||||||
|  | 			url: '/monitoring/equipment', | ||||||
|  | 			permission: 'monitoring:equipment:update', | ||||||
|  | 			showOnEdit: true | ||||||
|  | 		} | ||||||
|  | 	] | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			calcMaxHeight, | ||||||
|  | 			tableConfigs, | ||||||
|  | 			addOrUpdateConfigs, | ||||||
|  | 			dataForm: { | ||||||
|  | 				key: '' | ||||||
|  | 			}, | ||||||
|  | 			dataList: [], | ||||||
|  | 			pageIndex: 1, | ||||||
|  | 			pageSize: 10, | ||||||
|  | 			totalPage: 0, | ||||||
|  | 			dataListLoading: false, | ||||||
|  | 			dataListSelections: [], | ||||||
|  | 			addOrUpdateVisible: false | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	components: { | ||||||
|  | 		AddOrUpdate, | ||||||
|  | 		BaseTable | ||||||
|  | 	}, | ||||||
|  | 	activated() { | ||||||
|  | 		console.log('activated') | ||||||
|  | 		this.getDataList() | ||||||
|  | 		this.getGroupList() | ||||||
|  | 		this.getPlList() | ||||||
|  | 		this.getTypeList() | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		// destroy dialog | ||||||
|  | 		handleDestroyDialog() { | ||||||
|  | 			setTimeout(() => { | ||||||
|  | 				this.addOrUpdateVisible = false | ||||||
|  | 			}, /** after dialog animated */ 200) | ||||||
|  | 		}, | ||||||
|  | 		// 获取产线列表,用于刷新工段列表 | ||||||
|  | 		getPlList() { | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/productionLine/list'), | ||||||
|  | 				method: 'get' | ||||||
|  | 			}).then(({ data: res }) => { | ||||||
|  | 				const plConfig = this.addOrUpdateConfigs.fields.find(item => item.name === 'lineId') | ||||||
|  | 				plConfig.options = | ||||||
|  | 					res.data?.map(item => ({ | ||||||
|  | 						value: item.id, | ||||||
|  | 						label: item.name | ||||||
|  | 					})) || [] | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 获取工段列表 | ||||||
|  | 		getWsList(id) { | ||||||
|  | 			let params = { | ||||||
|  | 				page: 1, | ||||||
|  | 				limit: 999 | ||||||
|  | 			} | ||||||
|  | 			if (id) { | ||||||
|  | 				params.lineId = id | ||||||
|  | 			} | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/workshopSection/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams(params) | ||||||
|  | 			}).then(({ data: res }) => { | ||||||
|  | 				const wsConfig = this.addOrUpdateConfigs.fields.find(item => item.name === 'sectionId') | ||||||
|  | 				wsConfig.options = | ||||||
|  | 					res.data?.list?.map(item => ({ | ||||||
|  | 						value: item.id, | ||||||
|  | 						label: item.name | ||||||
|  | 					})) || [] | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 获取设备类型列表 | ||||||
|  | 		getTypeList() { | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/equipmentType/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams({ | ||||||
|  | 					// page: this.pageIndex, | ||||||
|  | 					// limit: this.pageSize, | ||||||
|  | 					// key: this.dataForm.key | ||||||
|  | 				}) | ||||||
|  | 			}).then(({ data }) => { | ||||||
|  | 				const eqTypeConfig = this.addOrUpdateConfigs.fields.find(item => item.name === 'equipmentTypeId') | ||||||
|  | 				eqTypeConfig.options = | ||||||
|  | 					data.data?.list?.map(item => ({ | ||||||
|  | 						value: item.id, | ||||||
|  | 						label: item.name | ||||||
|  | 					})) || [] | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 获取设备分组列表 | ||||||
|  | 		getGroupList() { | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/equipmentGroup/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams({ | ||||||
|  | 					// page: this.pageIndex, | ||||||
|  | 					// limit: this.pageSize, | ||||||
|  | 					// key: this.dataForm.key | ||||||
|  | 				}) | ||||||
|  | 			}).then(({ data }) => { | ||||||
|  | 				const groupConfig = this.addOrUpdateConfigs.fields.find(item => item.name === 'groupId') | ||||||
|  | 				groupConfig.options = | ||||||
|  | 					data.data?.list?.map(item => ({ | ||||||
|  | 						value: item.id, | ||||||
|  | 						label: item.name | ||||||
|  | 					})) || [] | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 获取数据列表 | ||||||
|  | 		getDataList() { | ||||||
|  | 			this.dataListLoading = true | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/equipment/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams({ | ||||||
|  | 					page: this.pageIndex, | ||||||
|  | 					limit: this.pageSize, | ||||||
|  | 					key: this.dataForm.key | ||||||
|  | 				}) | ||||||
|  | 			}).then(({ data }) => { | ||||||
|  | 				if (data && data.code === 0) { | ||||||
|  | 					this.dataList = data.data.list | ||||||
|  | 					// this.dataList = new Array(20).fill('1') | ||||||
|  | 					// console.log('data list', this.dataList) | ||||||
|  | 					this.totalPage = data.data.total | ||||||
|  | 				} else { | ||||||
|  | 					this.dataList = [] | ||||||
|  | 					this.totalPage = 0 | ||||||
|  | 				} | ||||||
|  | 				this.dataListLoading = false | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 每页数 | ||||||
|  | 		sizeChangeHandle(val) { | ||||||
|  | 			this.pageSize = val | ||||||
|  | 			this.pageIndex = 1 | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 当前页 | ||||||
|  | 		currentChangeHandle(val) { | ||||||
|  | 			this.pageIndex = val | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 多选 | ||||||
|  | 		selectionChangeHandle(val) { | ||||||
|  | 			this.dataListSelections = val | ||||||
|  | 		}, | ||||||
|  | 		// 对话框里的某个选择改变了 | ||||||
|  | 		handleDialogSelectChange({ name, id }) { | ||||||
|  | 			switch (name) { | ||||||
|  | 				case 'lineId': | ||||||
|  | 					this.getWsList(id) | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		handleOperations({ type, data: id }) { | ||||||
|  | 			switch (type) { | ||||||
|  | 				case 'view-detail': | ||||||
|  | 					// const { name, code } = this.dataList.find(item => item.id === id) | ||||||
|  | 					// this.$router.push({ | ||||||
|  | 					// 	name: 'monitoring-equipmentAdd', | ||||||
|  | 					// 	params: { | ||||||
|  | 					// 		isdetail: true, | ||||||
|  | 					// 		equipmentId: id | ||||||
|  | 					// 	} | ||||||
|  | 					// }) | ||||||
|  | 					// break | ||||||
|  | 					return this.addOrUpdateHandle(id, true) | ||||||
|  | 				case 'edit': | ||||||
|  | 					return this.addOrUpdateHandle(id) | ||||||
|  | 				case 'delete': | ||||||
|  | 					return this.deleteHandle(id) | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		exportHandle() { | ||||||
|  | 			// this.$http.get(this.$http.adornUrl('/monitoring/equipment/export')).then(({ data: res }) => { | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/equipment/export'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				responseType: 'blob' | ||||||
|  | 			}).then(res => { | ||||||
|  | 				let fileName = 'equipment-list.xls' | ||||||
|  | 				if (res.headers['content-disposition']) { | ||||||
|  | 					const contentDisposition = res.headers['content-disposition'] | ||||||
|  | 					fileName = contentDisposition.slice(contentDisposition.indexOf('filename=') + 9) | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				fileName = decodeURIComponent(fileName) | ||||||
|  |  | ||||||
|  | 				const blob = new Blob([res.data]) | ||||||
|  |  | ||||||
|  | 				if ('download' in document.createElement('a')) { | ||||||
|  | 					const alink = document.createElement('a') | ||||||
|  | 					alink.download = fileName | ||||||
|  | 					alink.style.display = 'none' | ||||||
|  | 					alink.target = '_blank' | ||||||
|  | 					alink.href = URL.createObjectURL(blob) | ||||||
|  | 					document.body.appendChild(alink) | ||||||
|  | 					alink.click() | ||||||
|  | 					URL.revokeObjectURL(alink.href) | ||||||
|  | 					document.body.removeChild(alink) | ||||||
|  | 				} else { | ||||||
|  | 					navigator.msSaveBlob(blob, fileName) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 新增 / 修改 | ||||||
|  | 		addOrUpdateHandle(id, isdetail = false) { | ||||||
|  | 			this.addOrUpdateVisible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs.addOrUpdate.init(id, isdetail) | ||||||
|  | 			}) | ||||||
|  | 			// this.$router.push({ | ||||||
|  | 			// 	name: 'monitoring-equipmentAdd', | ||||||
|  | 			// 	params: { | ||||||
|  | 			// 		equipmentId: id | ||||||
|  | 			// 	} | ||||||
|  | 			// }) | ||||||
|  | 		}, | ||||||
|  | 		// 删除 | ||||||
|  | 		deleteHandle(id) { | ||||||
|  | 			var ids = id | ||||||
|  | 				? [id] | ||||||
|  | 				: this.dataListSelections.map(item => { | ||||||
|  | 						return item.id | ||||||
|  | 				  }) | ||||||
|  | 			this.$confirm(`${i18n.t('prompt.info', { handle: id ? i18n.t('delete').toLowerCase() : i18n.t('deleteBatch').toLowerCase() })}`, i18n.t('prompt.title'), { | ||||||
|  | 				confirmButtonText: i18n.t('confirm'), | ||||||
|  | 				cancelButtonText: i18n.t('cancel'), | ||||||
|  | 				type: 'warning' | ||||||
|  | 			}).then(() => { | ||||||
|  | 				this.$http({ | ||||||
|  | 					url: this.$http.adornUrl('/monitoring/equipment'), | ||||||
|  | 					method: 'delete', | ||||||
|  | 					data: this.$http.adornData(ids, false, 'raw') | ||||||
|  | 				}).then(({ data }) => { | ||||||
|  | 					if (data && data.code === 0) { | ||||||
|  | 						this.$message({ | ||||||
|  | 							message: i18n.t('prompt.success'), | ||||||
|  | 							type: 'success', | ||||||
|  | 							duration: 1500, | ||||||
|  | 							onClose: () => { | ||||||
|  | 								this.getDataList() | ||||||
|  | 							} | ||||||
|  | 						}) | ||||||
|  | 					} else { | ||||||
|  | 						this.$message.error(data.msg) | ||||||
|  | 					} | ||||||
|  | 				}) | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										163
									
								
								src/views/modules/monitoring/equipmentAlarmLog-add-or-update.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										163
									
								
								src/views/modules/monitoring/equipmentAlarmLog-add-or-update.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,163 @@ | |||||||
|  | <template> | ||||||
|  | 	<el-dialog :title="!dataForm.id ? i18n.t('add') : i18n.t('update')" :close-on-click-modal="false" :visible.sync="visible"> | ||||||
|  | 		<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" label-width="80px"> | ||||||
|  | 			<el-form-item label="报警信息ID,关联T_equipment_group_alarm表" prop="alarmId"> | ||||||
|  | 				<el-input v-model="dataForm.alarmId" placeholder="报警信息ID,关联T_equipment_group_alarm表"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="报警来源" prop="alarmSource"> | ||||||
|  | 				<el-input v-model="dataForm.alarmSource" placeholder="报警来源"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="报警详细内容" prop="alarmContent"> | ||||||
|  | 				<el-input v-model="dataForm.alarmContent" placeholder="报警详细内容"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="报警设备id 关联equipment表" prop="alarmEquipmentId"> | ||||||
|  | 				<el-input v-model="dataForm.alarmEquipmentId" placeholder="报警设备id 关联equipment表"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="备注" prop="remark"> | ||||||
|  | 				<el-input v-model="dataForm.remark" placeholder="备注"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="删除标志,是否有效:1 可用 0不可用" prop="valid"> | ||||||
|  | 				<el-input v-model="dataForm.valid" placeholder="删除标志,是否有效:1 可用 0不可用"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('creator')" prop="creatorId"> | ||||||
|  | 				<el-input v-model="dataForm.creatorId" :placeholder="$t('creator')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('creatorName')" prop="creatorName"> | ||||||
|  | 				<el-input v-model="dataForm.creatorName" :placeholder="$t('creatorName')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="创建时间" prop="createTime"> | ||||||
|  | 				<el-input v-model="dataForm.createTime" placeholder="创建时间"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('updator')" prop="updaterId"> | ||||||
|  | 				<el-input v-model="dataForm.updaterId" :placeholder="$t('updator')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('updatorName')" prop="updaterName"> | ||||||
|  | 				<el-input v-model="dataForm.updaterName" :placeholder="$t('updatorName')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('updateTime')" prop="updateTime"> | ||||||
|  | 				<el-input v-model="dataForm.updateTime" :placeholder="$t('updateTime')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('version')" prop="version"> | ||||||
|  | 				<el-input v-model="dataForm.version" :placeholder="$t('version')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  | 		<span slot="footer" class="dialog-footer"> | ||||||
|  | 			<el-button @click="visible = false">{{ $t('cancel') }}</el-button> | ||||||
|  | 			<el-button type="primary" @click="dataFormSubmit()">{{ $t('confirm') }}</el-button> | ||||||
|  | 		</span> | ||||||
|  | 	</el-dialog> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			visible: false, | ||||||
|  | 			dataForm: { | ||||||
|  | 				id: 0, | ||||||
|  | 				alarmId: '', | ||||||
|  | 				alarmSource: '', | ||||||
|  | 				alarmContent: '', | ||||||
|  | 				alarmEquipmentId: '', | ||||||
|  | 				remark: '', | ||||||
|  | 				valid: '', | ||||||
|  | 				creatorId: '', | ||||||
|  | 				creatorName: '', | ||||||
|  | 				createTime: '', | ||||||
|  | 				updaterId: '', | ||||||
|  | 				updaterName: '', | ||||||
|  | 				updateTime: '', | ||||||
|  | 				version: '' | ||||||
|  | 			}, | ||||||
|  | 			dataRule: { | ||||||
|  | 				alarmId: [{ required: true, message: '报警信息ID,关联T_equipment_group_alarm表不能为空', trigger: 'blur' }], | ||||||
|  | 				alarmSource: [{ required: true, message: '报警来源不能为空', trigger: 'blur' }], | ||||||
|  | 				alarmContent: [{ required: true, message: '报警详细内容不能为空', trigger: 'blur' }], | ||||||
|  | 				alarmEquipmentId: [{ required: true, message: '报警设备id 关联equipment表不能为空', trigger: 'blur' }], | ||||||
|  | 				remark: [{ required: true, message: '备注不能为空', trigger: 'blur' }], | ||||||
|  | 				valid: [{ required: true, message: '删除标志,是否有效:1 可用 0不可用不能为空', trigger: 'blur' }], | ||||||
|  | 				creatorId: [{ required: true, message: '创建人不能为空', trigger: 'blur' }], | ||||||
|  | 				creatorName: [{ required: true, message: '创建人姓名不能为空', trigger: 'blur' }], | ||||||
|  | 				createTime: [{ required: true, message: '创建时间不能为空', trigger: 'blur' }], | ||||||
|  | 				updaterId: [{ required: true, message: '更新人不能为空', trigger: 'blur' }], | ||||||
|  | 				updaterName: [{ required: true, message: '更新人姓名不能为空', trigger: 'blur' }], | ||||||
|  | 				updateTime: [{ required: true, message: '更新时间不能为空', trigger: 'blur' }], | ||||||
|  | 				version: [{ required: true, message: '版本号不能为空', trigger: 'blur' }] | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		init(id) { | ||||||
|  | 			this.dataForm.id = id || 0 | ||||||
|  | 			this.visible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs['dataForm'].resetFields() | ||||||
|  | 				if (this.dataForm.id) { | ||||||
|  | 					this.$http({ | ||||||
|  | 						url: this.$http.adornUrl(`/monitoring/equipmentAlarmLog/${this.dataForm.id}`), | ||||||
|  | 						method: 'get', | ||||||
|  | 						params: this.$http.adornParams() | ||||||
|  | 					}).then(({ data }) => { | ||||||
|  | 						if (data && data.code === 0) { | ||||||
|  | 							this.dataForm.alarmId = data.equipmenalarmLog.alarmId | ||||||
|  | 							this.dataForm.alarmSource = data.equipmenalarmLog.alarmSource | ||||||
|  | 							this.dataForm.alarmContent = data.equipmenalarmLog.alarmContent | ||||||
|  | 							this.dataForm.alarmEquipmentId = data.equipmenalarmLog.alarmEquipmentId | ||||||
|  | 							this.dataForm.remark = data.equipmenalarmLog.remark | ||||||
|  | 							this.dataForm.valid = data.equipmenalarmLog.valid | ||||||
|  | 							this.dataForm.creatorId = data.equipmenalarmLog.creatorId | ||||||
|  | 							this.dataForm.creatorName = data.equipmenalarmLog.creatorName | ||||||
|  | 							this.dataForm.createTime = data.equipmenalarmLog.createTime | ||||||
|  | 							this.dataForm.updaterId = data.equipmenalarmLog.updaterId | ||||||
|  | 							this.dataForm.updaterName = data.equipmenalarmLog.updaterName | ||||||
|  | 							this.dataForm.updateTime = data.equipmenalarmLog.updateTime | ||||||
|  | 							this.dataForm.version = data.equipmenalarmLog.version | ||||||
|  | 						} | ||||||
|  | 					}) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 表单提交 | ||||||
|  | 		dataFormSubmit() { | ||||||
|  | 			this.$refs['dataForm'].validate(valid => { | ||||||
|  | 				if (valid) { | ||||||
|  | 					this.$http({ | ||||||
|  | 						url: this.$http.adornUrl(`/monitoring/equipmentAlarmLog/${!this.dataForm.id ? '' : this.dataForm.id}`), | ||||||
|  | 						method: this.dataForm.id ? 'put' : 'post', | ||||||
|  | 						data: this.$http.adornData({ | ||||||
|  | 							id: this.dataForm.id || undefined, | ||||||
|  | 							alarmId: this.dataForm.alarmId, | ||||||
|  | 							alarmSource: this.dataForm.alarmSource, | ||||||
|  | 							alarmContent: this.dataForm.alarmContent, | ||||||
|  | 							alarmEquipmentId: this.dataForm.alarmEquipmentId, | ||||||
|  | 							remark: this.dataForm.remark, | ||||||
|  | 							valid: this.dataForm.valid, | ||||||
|  | 							creatorId: this.dataForm.creatorId, | ||||||
|  | 							creatorName: this.dataForm.creatorName, | ||||||
|  | 							createTime: this.dataForm.createTime, | ||||||
|  | 							updaterId: this.dataForm.updaterId, | ||||||
|  | 							updaterName: this.dataForm.updaterName, | ||||||
|  | 							updateTime: this.dataForm.updateTime, | ||||||
|  | 							version: this.dataForm.version | ||||||
|  | 						}) | ||||||
|  | 					}).then(({ data }) => { | ||||||
|  | 						if (data && data.code === 0) { | ||||||
|  | 							this.$message({ | ||||||
|  | 								message: i18n.t('prompt.success'), | ||||||
|  | 								type: 'success', | ||||||
|  | 								duration: 1500, | ||||||
|  | 								onClose: () => { | ||||||
|  | 									this.visible = false | ||||||
|  | 									this.$emit('refreshDataList') | ||||||
|  | 								} | ||||||
|  | 							}) | ||||||
|  | 						} else { | ||||||
|  | 							this.$message.error(data.msg) | ||||||
|  | 						} | ||||||
|  | 					}) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										164
									
								
								src/views/modules/monitoring/equipmentAlarmLog.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										164
									
								
								src/views/modules/monitoring/equipmentAlarmLog.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,164 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="mod-config"> | ||||||
|  | 		<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)"> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-input v-model="dataForm.key" :placeholder="$t('parameter')" clearable></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-button @click="currentChangeHandle(1)">{{ $t('query') }}</el-button> | ||||||
|  | 				<el-button v-if="$hasPermission('monitoring:equipmenalarmlog:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  |  | ||||||
|  | 		<base-table :page="pageIndex" :size="pageSize" :data="dataList" :table-head-configs="tableConfigs" :max-height="calcMaxHeight(8)" /> | ||||||
|  | 		<el-pagination | ||||||
|  | 			@size-change="sizeChangeHandle" | ||||||
|  | 			@current-change="currentChangeHandle" | ||||||
|  | 			:current-page="pageIndex" | ||||||
|  | 			:page-sizes="[10, 20, 50, 100]" | ||||||
|  | 			:page-size="pageSize" | ||||||
|  | 			:total="totalPage" | ||||||
|  | 			layout="total, sizes, prev, pager, next, jumper" | ||||||
|  | 		> | ||||||
|  | 		</el-pagination> | ||||||
|  | 		<!-- 弹窗, 新增 / 修改 --> | ||||||
|  | 		<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import AddOrUpdate from './equipmentAlarmLog-add-or-update' | ||||||
|  | import i18n from '@/i18n' | ||||||
|  | import BaseTable from '@/components/base-table' | ||||||
|  | import TableOperateComponent from '@/components/base-table/components/operationComponent' | ||||||
|  | import TableTextComponent from '@/components/base-table/components/detailComponent' | ||||||
|  | import { calcMaxHeight } from '@/utils' | ||||||
|  | import { timeFilter } from '@/utils/filters' | ||||||
|  | const tableConfigs = [ | ||||||
|  | 	{ prop: 'id', name: 'ID' }, | ||||||
|  | 	{ prop: 'alarmId', name: '报警信息ID,关联T_equipment_group_alarm表' }, | ||||||
|  | 	{ prop: 'alarmSource', name: '报警来源' }, | ||||||
|  | 	{ prop: 'alarmContent', name: '报警详细内容' }, | ||||||
|  | 	{ prop: 'alarmEquipmentId', name: '报警设备id 关联equipment表' }, | ||||||
|  | 	{ prop: 'remark', name: i18n.t('remark') }, | ||||||
|  | 	{ prop: 'valid', name: i18n.t('delMark') }, | ||||||
|  | 	{ prop: 'creatorId', name: i18n.t('creator') }, | ||||||
|  | 	{ prop: 'creatorName', name: i18n.t('creatorName') }, | ||||||
|  | 	{ prop: 'createTime', name: i18n.t('createTime'), filter: timeFilter }, | ||||||
|  | 	{ prop: 'updaterId', name: i18n.t('updator') }, | ||||||
|  | 	{ prop: 'updaterName', name: i18n.t('updatorName') }, | ||||||
|  | 	{ prop: 'updateTime', name: i18n.t('updateTime'), filter: timeFilter }, | ||||||
|  | 	{ prop: 'version', name: i18n.t('version') }, | ||||||
|  | 	{ prop: 'operations', name: i18n.t('handle'), fixed: 'right', width: 180, subcomponent: TableOperateComponent, options: ['edit', 'delete'] } | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			tableConfigs, | ||||||
|  | 			calcMaxHeight, | ||||||
|  | 			dataForm: { | ||||||
|  | 				key: '' | ||||||
|  | 			}, | ||||||
|  | 			dataList: [], | ||||||
|  | 			pageIndex: 1, | ||||||
|  | 			pageSize: 10, | ||||||
|  | 			totalPage: 0, | ||||||
|  | 			dataListLoading: false, | ||||||
|  | 			dataListSelections: [], | ||||||
|  | 			addOrUpdateVisible: false | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	components: { | ||||||
|  | 		AddOrUpdate, | ||||||
|  | 		BaseTable | ||||||
|  | 	}, | ||||||
|  | 	activated() { | ||||||
|  | 		this.getDataList() | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		// destroy dialog | ||||||
|  | 		handleDestroyDialog() { | ||||||
|  | 			setTimeout(() => { | ||||||
|  | 				this.addOrUpdateVisible= false | ||||||
|  | 			}, /** after dialog animated */ 200); | ||||||
|  | 		}, | ||||||
|  | 		// 获取数据列表 | ||||||
|  | 		getDataList() { | ||||||
|  | 			this.dataListLoading = true | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/equipmentAlarmLog/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams({ | ||||||
|  | 					page: this.pageIndex, | ||||||
|  | 					limit: this.pageSize, | ||||||
|  | 					key: this.dataForm.key | ||||||
|  | 				}) | ||||||
|  | 			}).then(({ data }) => { | ||||||
|  | 				if (data && data.code === 0) { | ||||||
|  | 					this.dataList = data.data.list | ||||||
|  | 					this.totalPage = data.data.total | ||||||
|  | 				} else { | ||||||
|  | 					this.dataList = [] | ||||||
|  | 					this.totalPage = 0 | ||||||
|  | 				} | ||||||
|  | 				this.dataListLoading = false | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 每页数 | ||||||
|  | 		sizeChangeHandle(val) { | ||||||
|  | 			this.pageSize = val | ||||||
|  | 			this.pageIndex = 1 | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 当前页 | ||||||
|  | 		currentChangeHandle(val) { | ||||||
|  | 			this.pageIndex = val | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 多选 | ||||||
|  | 		selectionChangeHandle(val) { | ||||||
|  | 			this.dataListSelections = val | ||||||
|  | 		}, | ||||||
|  | 		// 新增 / 修改 | ||||||
|  | 		addOrUpdateHandle(id) { | ||||||
|  | 			this.addOrUpdateVisible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs.addOrUpdate.init(id) | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 删除 | ||||||
|  | 		deleteHandle(id) { | ||||||
|  | 			var ids = id | ||||||
|  | 				? [id] | ||||||
|  | 				: this.dataListSelections.map(item => { | ||||||
|  | 						return item.id | ||||||
|  | 				  }) | ||||||
|  | 			this.$confirm(`${ i18n.t('prompt.info', { handle: id ? i18n.t('delete').toLowerCase() : i18n.t('deleteBatch').toLowerCase() }) }`, i18n.t('prompt.title'), { | ||||||
|  | 				confirmButtonText: i18n.t('confirm'), | ||||||
|  | 				cancelButtonText: i18n.t('cancel'), | ||||||
|  | 				type: 'warning' | ||||||
|  | 			}).then(() => { | ||||||
|  | 				this.$http({ | ||||||
|  | 					url: this.$http.adornUrl('/monitoring/equipmentAlarmLog'), | ||||||
|  | 					method: 'delete', | ||||||
|  | 					data: this.$http.adornData(ids, false, 'raw') | ||||||
|  | 				}).then(({ data }) => { | ||||||
|  | 					if (data && data.code === 0) { | ||||||
|  | 						this.$message({ | ||||||
|  | 							message: i18n.t('prompt.success'), | ||||||
|  | 							type: 'success', | ||||||
|  | 							duration: 1500, | ||||||
|  | 							onClose: () => { | ||||||
|  | 								this.getDataList() | ||||||
|  | 							} | ||||||
|  | 						}) | ||||||
|  | 					} else { | ||||||
|  | 						this.$message.error(data.msg) | ||||||
|  | 					} | ||||||
|  | 				}) | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										156
									
								
								src/views/modules/monitoring/equipmentAttr-add-or-update.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										156
									
								
								src/views/modules/monitoring/equipmentAttr-add-or-update.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,156 @@ | |||||||
|  | <template> | ||||||
|  | 	<el-dialog :title="!dataForm.id ? i18n.t('add') : i18n.t('update')" :close-on-click-modal="false" :visible.sync="visible"> | ||||||
|  | 		<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" label-width="80px"> | ||||||
|  | 			<el-form-item label="设备ID" prop="equipmentId"> | ||||||
|  | 				<el-input v-model="dataForm.equipmentId" placeholder="设备ID"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="属性名称" prop="attrName"> | ||||||
|  | 				<el-input v-model="dataForm.attrName" placeholder="属性名称"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="属性值" prop="attrValue"> | ||||||
|  | 				<el-input v-model="dataForm.attrValue" placeholder="属性值"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="备注" prop="remark"> | ||||||
|  | 				<el-input v-model="dataForm.remark" placeholder="备注"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="删除标志,是否有效:1 可用 0不可用" prop="valid"> | ||||||
|  | 				<el-input v-model="dataForm.valid" placeholder="删除标志,是否有效:1 可用 0不可用"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('creator')" prop="creatorId"> | ||||||
|  | 				<el-input v-model="dataForm.creatorId" :placeholder="$t('creator')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('creatorName')" prop="creatorName"> | ||||||
|  | 				<el-input v-model="dataForm.creatorName" :placeholder="$t('creatorName')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="创建时间" prop="createTime"> | ||||||
|  | 				<el-input v-model="dataForm.createTime" placeholder="创建时间"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('updator')" prop="updaterId"> | ||||||
|  | 				<el-input v-model="dataForm.updaterId" :placeholder="$t('updator')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('updatorName')" prop="updaterName"> | ||||||
|  | 				<el-input v-model="dataForm.updaterName" :placeholder="$t('updatorName')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('updateTime')" prop="updateTime"> | ||||||
|  | 				<el-input v-model="dataForm.updateTime" :placeholder="$t('updateTime')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('version')" prop="version"> | ||||||
|  | 				<el-input v-model="dataForm.version" :placeholder="$t('version')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  | 		<span slot="footer" class="dialog-footer"> | ||||||
|  | 			<el-button @click="visible = false">{{ $t('cancel') }}</el-button> | ||||||
|  | 			<el-button type="primary" @click="dataFormSubmit()">{{ $t('confirm') }}</el-button> | ||||||
|  | 		</span> | ||||||
|  | 	</el-dialog> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			visible: false, | ||||||
|  | 			dataForm: { | ||||||
|  | 				id: 0, | ||||||
|  | 				equipmentId: '', | ||||||
|  | 				attrName: '', | ||||||
|  | 				attrValue: '', | ||||||
|  | 				remark: '', | ||||||
|  | 				valid: '', | ||||||
|  | 				creatorId: '', | ||||||
|  | 				creatorName: '', | ||||||
|  | 				createTime: '', | ||||||
|  | 				updaterId: '', | ||||||
|  | 				updaterName: '', | ||||||
|  | 				updateTime: '', | ||||||
|  | 				version: '' | ||||||
|  | 			}, | ||||||
|  | 			dataRule: { | ||||||
|  | 				equipmentId: [{ required: true, message: '设备ID不能为空', trigger: 'blur' }], | ||||||
|  | 				attrName: [{ required: true, message: '属性名称不能为空', trigger: 'blur' }], | ||||||
|  | 				attrValue: [{ required: true, message: '属性值不能为空', trigger: 'blur' }], | ||||||
|  | 				remark: [{ required: true, message: '备注不能为空', trigger: 'blur' }], | ||||||
|  | 				valid: [{ required: true, message: '删除标志,是否有效:1 可用 0不可用不能为空', trigger: 'blur' }], | ||||||
|  | 				creatorId: [{ required: true, message: '创建人不能为空', trigger: 'blur' }], | ||||||
|  | 				creatorName: [{ required: true, message: '创建人姓名不能为空', trigger: 'blur' }], | ||||||
|  | 				createTime: [{ required: true, message: '创建时间不能为空', trigger: 'blur' }], | ||||||
|  | 				updaterId: [{ required: true, message: '更新人不能为空', trigger: 'blur' }], | ||||||
|  | 				updaterName: [{ required: true, message: '更新人姓名不能为空', trigger: 'blur' }], | ||||||
|  | 				updateTime: [{ required: true, message: '更新时间不能为空', trigger: 'blur' }], | ||||||
|  | 				version: [{ required: true, message: '版本号不能为空', trigger: 'blur' }] | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		init(id) { | ||||||
|  | 			this.dataForm.id = id || 0 | ||||||
|  | 			this.visible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs['dataForm'].resetFields() | ||||||
|  | 				if (this.dataForm.id) { | ||||||
|  | 					this.$http({ | ||||||
|  | 						url: this.$http.adornUrl(`/monitoring/equipmentAttr/${this.dataForm.id}`), | ||||||
|  | 						method: 'get', | ||||||
|  | 						params: this.$http.adornParams() | ||||||
|  | 					}).then(({ data }) => { | ||||||
|  | 						if (data && data.code === 0) { | ||||||
|  | 							this.dataForm.equipmentId = data.equipmenattr.equipmentId | ||||||
|  | 							this.dataForm.attrName = data.equipmenattr.attrName | ||||||
|  | 							this.dataForm.attrValue = data.equipmenattr.attrValue | ||||||
|  | 							this.dataForm.remark = data.equipmenattr.remark | ||||||
|  | 							this.dataForm.valid = data.equipmenattr.valid | ||||||
|  | 							this.dataForm.creatorId = data.equipmenattr.creatorId | ||||||
|  | 							this.dataForm.creatorName = data.equipmenattr.creatorName | ||||||
|  | 							this.dataForm.createTime = data.equipmenattr.createTime | ||||||
|  | 							this.dataForm.updaterId = data.equipmenattr.updaterId | ||||||
|  | 							this.dataForm.updaterName = data.equipmenattr.updaterName | ||||||
|  | 							this.dataForm.updateTime = data.equipmenattr.updateTime | ||||||
|  | 							this.dataForm.version = data.equipmenattr.version | ||||||
|  | 						} | ||||||
|  | 					}) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 表单提交 | ||||||
|  | 		dataFormSubmit() { | ||||||
|  | 			this.$refs['dataForm'].validate(valid => { | ||||||
|  | 				if (valid) { | ||||||
|  | 					this.$http({ | ||||||
|  | 						url: this.$http.adornUrl(`/monitoring/equipmentAttr/${!this.dataForm.id ? '' : this.dataForm.id}`), | ||||||
|  | 						method: this.dataForm.id ? 'put' : 'post', | ||||||
|  | 						data: this.$http.adornData({ | ||||||
|  | 							id: this.dataForm.id || undefined, | ||||||
|  | 							equipmentId: this.dataForm.equipmentId, | ||||||
|  | 							attrName: this.dataForm.attrName, | ||||||
|  | 							attrValue: this.dataForm.attrValue, | ||||||
|  | 							remark: this.dataForm.remark, | ||||||
|  | 							valid: this.dataForm.valid, | ||||||
|  | 							creatorId: this.dataForm.creatorId, | ||||||
|  | 							creatorName: this.dataForm.creatorName, | ||||||
|  | 							createTime: this.dataForm.createTime, | ||||||
|  | 							updaterId: this.dataForm.updaterId, | ||||||
|  | 							updaterName: this.dataForm.updaterName, | ||||||
|  | 							updateTime: this.dataForm.updateTime, | ||||||
|  | 							version: this.dataForm.version | ||||||
|  | 						}) | ||||||
|  | 					}).then(({ data }) => { | ||||||
|  | 						if (data && data.code === 0) { | ||||||
|  | 							this.$message({ | ||||||
|  | 								message: i18n.t('prompt.success'), | ||||||
|  | 								type: 'success', | ||||||
|  | 								duration: 1500, | ||||||
|  | 								onClose: () => { | ||||||
|  | 									this.visible = false | ||||||
|  | 									this.$emit('refreshDataList') | ||||||
|  | 								} | ||||||
|  | 							}) | ||||||
|  | 						} else { | ||||||
|  | 							this.$message.error(data.msg) | ||||||
|  | 						} | ||||||
|  | 					}) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										258
									
								
								src/views/modules/monitoring/equipmentCurrentState.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										258
									
								
								src/views/modules/monitoring/equipmentCurrentState.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,258 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="mod-config"> | ||||||
|  | 		<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)"> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-select v-model="dataForm.lineId" :placeholder="'产线'" clearable> | ||||||
|  | 					<el-option v-for="line in lineList" :key="line.code" :value="line.id" :label="line.name" /> | ||||||
|  | 				</el-select> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-select v-model="dataForm.equipmentId" :placeholder="'设备名称'" clearable> | ||||||
|  | 					<el-option v-for="eq in eqList" :key="eq.code" :value="eq.id" :label="eq.name" /> | ||||||
|  | 				</el-select> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-button @click="currentChangeHandle(1)">{{ $t('query') }}</el-button> | ||||||
|  | 				<!-- <el-button v-if="$hasPermission('monitoring:equipmentgroup:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> --> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  |  | ||||||
|  | 		<base-table :page="pageIndex" :size="pageSize" :data="dataList" :table-head-configs="tableConfigs" :max-height="calcMaxHeight(8)" @operate-event="handleOperations" @refreshDataList="getDataList" /> | ||||||
|  | 		<el-pagination | ||||||
|  | 			@size-change="sizeChangeHandle" | ||||||
|  | 			@current-change="currentChangeHandle" | ||||||
|  | 			:current-page="pageIndex" | ||||||
|  | 			:page-sizes="[10, 20, 50, 100]" | ||||||
|  | 			:page-size="pageSize" | ||||||
|  | 			:total="totalPage" | ||||||
|  | 			layout="total, sizes, prev, pager, next, jumper" | ||||||
|  | 		> | ||||||
|  | 		</el-pagination> | ||||||
|  | 		<!-- 弹窗, 新增 / 修改 --> | ||||||
|  | 		<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" :configs="addOrUpdateConfigs" @refreshDataList="getDataList" @destory-dialog="handleDestroyDialog" /> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { calcMaxHeight } from '@/utils' | ||||||
|  | import { timeFilter } from '@/utils/filters' | ||||||
|  | import AddOrUpdate from '@/components/base-dialog/addOrUpdate' | ||||||
|  | // import AddOrUpdate from './equipmentGroup-add-or-update' | ||||||
|  | import i18n from '@/i18n' | ||||||
|  | import BaseTable from '@/components/base-table' | ||||||
|  | // import TableOperateComponent from '@/components/base-table/components/operationComponent' | ||||||
|  | import TableTextComponent from '@/components/base-table/components/detailComponent' | ||||||
|  |  | ||||||
|  | const tableConfigs = [ | ||||||
|  | 	{ | ||||||
|  | 		type: 'index', | ||||||
|  | 		name: i18n.t('index') | ||||||
|  | 	}, | ||||||
|  | 	{ prop: 'equipmentName', name: i18n.t('realtime.eqName') }, | ||||||
|  | 	{ prop: 'equipmentCode', name: i18n.t('realtime.eqCode') }, | ||||||
|  | 	{ prop: 'inputNum', name: i18n.t('realtime.input') }, | ||||||
|  | 	{ prop: 'outputNum', name: i18n.t('realtime.output') }, | ||||||
|  | 	{ | ||||||
|  | 		prop: 'run', | ||||||
|  | 		name: i18n.t('realtime.runState'), | ||||||
|  | 		filter: val => { | ||||||
|  | 			if (val !== null && val !== undefined) return val ? '是' : '否' | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	{ | ||||||
|  | 		prop: 'status', | ||||||
|  | 		name: i18n.t('realtime.state'), | ||||||
|  | 		filter: val => { | ||||||
|  | 			if (val !== null && val !== undefined) return ['正常', '计划停机', '故障'][+val] | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	{ | ||||||
|  | 		prop: 'error', | ||||||
|  | 		name: i18n.t('realtime.hasFault'), | ||||||
|  | 		filter: val => { | ||||||
|  | 			if (val !== null && val !== undefined) return val ? '是' : '否' | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	{ prop: 'quantityTime', name: i18n.t('realtime.productionSnapshotTime'), filter: timeFilter }, | ||||||
|  | 	{ prop: 'statusTime', name: i18n.t('realtime.statusSnapshotTime'), filter: timeFilter }, | ||||||
|  | 	{ | ||||||
|  | 		prop: 'alarm', | ||||||
|  | 		name: i18n.t('realtime.recentParamValue'), | ||||||
|  | 		buttonContent: i18n.t('realtime.view'), | ||||||
|  | 		subcomponent: TableTextComponent, | ||||||
|  | 		emitFullData: true, | ||||||
|  | 		actionName: 'view-alarm' | ||||||
|  | 	} | ||||||
|  | 	// { prop: 'operations', name: i18n.t('handle'), fixed: 'right', width: 180, subcomponent: TableOperateComponent, options: ['edit', 'delete'] } | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | const addOrUpdateConfigs = { | ||||||
|  | 	type: 'dialog', | ||||||
|  | 	infoUrl: '/monitoring/equipmentGroup', | ||||||
|  | 	fields: [{ name: 'name', label: i18n.t('eq.groupname') }, { name: 'code', label: i18n.t('eq.groupcode') }, 'remark'], | ||||||
|  | 	operations: [ | ||||||
|  | 		{ name: 'cancel', showAlways: true }, | ||||||
|  | 		{ name: 'save', url: '/monitoring/equipmentGroup', permission: 'monitoring:equipmentgroup:save', showOnEdit: false }, | ||||||
|  | 		{ name: 'update', url: '/monitoring/equipmentGroup', permission: 'monitoring:equipmentgroup:update', showOnEdit: true } | ||||||
|  | 	] | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			addOrUpdateConfigs, | ||||||
|  | 			calcMaxHeight, | ||||||
|  | 			tableConfigs, | ||||||
|  | 			dataForm: { | ||||||
|  | 				equipmentId: '', | ||||||
|  | 				lineId: '' | ||||||
|  | 			}, | ||||||
|  | 			dataList: [], | ||||||
|  | 			eqList: [], | ||||||
|  | 			lineList: [], | ||||||
|  | 			pageIndex: 1, | ||||||
|  | 			pageSize: 10, | ||||||
|  | 			totalPage: 0, | ||||||
|  | 			dataListLoading: false, | ||||||
|  | 			dataListSelections: [], | ||||||
|  | 			addOrUpdateVisible: false | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	components: { | ||||||
|  | 		AddOrUpdate, | ||||||
|  | 		BaseTable | ||||||
|  | 	}, | ||||||
|  | 	activated() { | ||||||
|  | 		this.getEqList() | ||||||
|  | 		this.getLineList() | ||||||
|  | 		this.getDataList() | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		// destroy dialog | ||||||
|  | 		handleDestroyDialog() { | ||||||
|  | 			setTimeout(() => { | ||||||
|  | 				this.addOrUpdateVisible= false | ||||||
|  | 			}, /** after dialog animated */ 200); | ||||||
|  | 		}, | ||||||
|  | 		// 设备 | ||||||
|  | 		getEqList() { | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/equipment/page'), | ||||||
|  | 				method: 'get' | ||||||
|  | 			}).then(({ data }) => { | ||||||
|  | 				if (data && data.code === 0) { | ||||||
|  | 					this.eqList = data.data.list | ||||||
|  | 				} else { | ||||||
|  | 					this.eqList = [] | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 产线 | ||||||
|  | 		getLineList() { | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/productionLine/list'), | ||||||
|  | 				method: 'get' | ||||||
|  | 			}).then(({ data }) => { | ||||||
|  | 				if (data && data.code === 0) { | ||||||
|  | 					this.lineList = data.data | ||||||
|  | 				} else { | ||||||
|  | 					this.lineList = [] | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 获取数据列表 | ||||||
|  | 		getDataList() { | ||||||
|  | 			this.addOrUpdateVisible = false | ||||||
|  | 			this.dataListLoading = true | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/equipmentValueMonitor/realTimePage'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams({ | ||||||
|  | 					page: this.pageIndex, | ||||||
|  | 					limit: this.pageSize, | ||||||
|  | 					equipmentId: this.dataForm.equipmentId, | ||||||
|  | 					lineId: this.dataForm.lineId | ||||||
|  | 				}) | ||||||
|  | 			}).then(({ data }) => { | ||||||
|  | 				if (data && data.code === 0) { | ||||||
|  | 					this.dataList = data.data.list | ||||||
|  | 					this.totalPage = data.data.total | ||||||
|  | 				} else { | ||||||
|  | 					this.dataList = [] | ||||||
|  | 					this.totalPage = 0 | ||||||
|  | 				} | ||||||
|  | 				this.dataListLoading = false | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 每页数 | ||||||
|  | 		sizeChangeHandle(val) { | ||||||
|  | 			this.pageSize = val | ||||||
|  | 			this.pageIndex = 1 | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 当前页 | ||||||
|  | 		currentChangeHandle(val) { | ||||||
|  | 			this.pageIndex = val | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 多选 | ||||||
|  | 		selectionChangeHandle(val) { | ||||||
|  | 			this.dataListSelections = val | ||||||
|  | 		}, | ||||||
|  | 		handleOperations({ type, data }) { | ||||||
|  | 			switch (type) { | ||||||
|  | 				case 'view-alarm': | ||||||
|  | 					const { equipmentId: id } = data | ||||||
|  | 					this.$router.push({ | ||||||
|  | 						name: 'monitoring-equipmentHistoricalParameters', | ||||||
|  | 						params: { id } | ||||||
|  | 					}) | ||||||
|  | 					break | ||||||
|  | 				// case 'edit': | ||||||
|  | 				// 	return this.addOrUpdateHandle(id) | ||||||
|  | 				// case 'delete': | ||||||
|  | 				// 	return this.deleteHandle(id) | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		// 新增 / 修改 | ||||||
|  | 		addOrUpdateHandle(id) { | ||||||
|  | 			this.addOrUpdateVisible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs.addOrUpdate.init(id) | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 删除 | ||||||
|  | 		deleteHandle(id) { | ||||||
|  | 			var ids = id | ||||||
|  | 				? [id] | ||||||
|  | 				: this.dataListSelections.map(item => { | ||||||
|  | 						return item.id | ||||||
|  | 				  }) | ||||||
|  | 			this.$confirm(`${i18n.t('prompt.info', { handle: id ? i18n.t('delete').toLowerCase() : i18n.t('deleteBatch').toLowerCase() })}`, i18n.t('prompt.title'), { | ||||||
|  | 				confirmButtonText: i18n.t('confirm'), | ||||||
|  | 				cancelButtonText: i18n.t('cancel'), | ||||||
|  | 				type: 'warning' | ||||||
|  | 			}).then(() => { | ||||||
|  | 				this.$http({ | ||||||
|  | 					url: this.$http.adornUrl('/monitoring/equipmentGroup'), | ||||||
|  | 					method: 'delete', | ||||||
|  | 					data: this.$http.adornData(ids, false, 'raw') | ||||||
|  | 				}).then(({ data }) => { | ||||||
|  | 					if (data && data.code === 0) { | ||||||
|  | 						this.$message({ | ||||||
|  | 							message: i18n.t('prompt.success'), | ||||||
|  | 							type: 'success', | ||||||
|  | 							duration: 1500, | ||||||
|  | 							onClose: () => { | ||||||
|  | 								this.getDataList() | ||||||
|  | 							} | ||||||
|  | 						}) | ||||||
|  | 					} else { | ||||||
|  | 						this.$message.error(data.msg) | ||||||
|  | 					} | ||||||
|  | 				}) | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										375
									
								
								src/views/modules/monitoring/equipmentEfficiency.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										375
									
								
								src/views/modules/monitoring/equipmentEfficiency.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,375 @@ | |||||||
|  | <template> | ||||||
|  | 	<!-- 设备效率分析 --> | ||||||
|  | 	<div class="mod-config"> | ||||||
|  | 		<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)"> | ||||||
|  | 			<!-- 工厂 --> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<!-- <el-select v-model="dataForm.factoryId" :placeholder="$t('eq.name') + ' / ' + $t('eq.code')" clearable></el-select> --> | ||||||
|  | 				<el-select v-model="dataForm.ftId" :placeholder="$t('factory.title')" clearable> | ||||||
|  | 					<el-option v-for="factory in factoryList" :key="factory.id" :value="factory.id" :label="factory.name" /> | ||||||
|  | 				</el-select> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<!-- 产线 --> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-select v-model="dataForm.productlines" :placeholder="$t('pl.title')" multiple clearable> | ||||||
|  | 					<el-option v-for="productLine in productLineList" :key="productLine.id" :value="productLine.id" :label="productLine.name" /> | ||||||
|  | 				</el-select> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<!-- 时间类型 --> | ||||||
|  | 			<!-- 按时间段 --> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-select v-model="timeType" :placeholder="$t('timetype')" clearable> | ||||||
|  | 					<el-option value="range" :label="$t('reftimerange')" /> | ||||||
|  | 					<el-option value="date" :label="$t('refdate')" /> | ||||||
|  | 				</el-select> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<!-- 日期选择 --> | ||||||
|  | 			<el-form-item v-if="timeType === 'date'"> | ||||||
|  | 				<el-date-picker key="range-picker" v-model="rawTime" type="date" :placeholder="$t('hints.date')" format="yyyy-MM-dd" /> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<!-- 时间段选择 --> | ||||||
|  | 			<el-form-item v-else> | ||||||
|  | 				<el-date-picker | ||||||
|  | 					key="time-picker" | ||||||
|  | 					v-model="rawTime" | ||||||
|  | 					type="daterange" | ||||||
|  | 					:range-separator="$t('datePicker.range')" | ||||||
|  | 					:start-placeholder="$t('datePicker.starttime')" | ||||||
|  | 					:end-placeholder="$t('datePicker.endtime')" | ||||||
|  | 					format="yyyy-MM-dd" | ||||||
|  | 				/> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<!-- 按钮 --> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-button @click="currentChangeHandle(1)">{{ $t('search') }}</el-button> | ||||||
|  | 				<!-- <el-button v-if="$hasPermission('monitoring:equipmentEffiency:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> --> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  |  | ||||||
|  | 		<transition mode="out-in" name="slide-to-left"> | ||||||
|  | 			<equipment-efficiency-graph v-if="showGraph" key="graph" ref="eegraph" @close-graph="showGraph = false" /> | ||||||
|  | 			<base-table v-else :data="dataList" :table-head-configs="tableConfigs" :max-height="calcMaxHeight(8)" | ||||||
|  | 				@operate-event="handleOperations" @refreshDataList="getDataList" /> | ||||||
|  | 			<!-- v-loading="dataIsLoading " --> | ||||||
|  | 		</transition> | ||||||
|  | 		<!-- <el-pagination | ||||||
|  | 			@size-change="sizeChangeHandle" | ||||||
|  | 			@current-change="currentChangeHandle" | ||||||
|  | 			:current-page="pageIndex" | ||||||
|  | 			:page-sizes="[10, 20, 50, 100]" | ||||||
|  | 			:page-size="pageSize" | ||||||
|  | 			:total="totalPage" | ||||||
|  | 			layout="total, sizes, prev, pager, next, jumper" | ||||||
|  | 		></el-pagination> --> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import i18n from '@/i18n' | ||||||
|  | import BaseTable from '@/components/base-table' | ||||||
|  | // import TableOperateComponent from '@/components/base-table/components/operationComponent' | ||||||
|  | import TableTextComponent from '@/components/base-table/components/detailComponent' | ||||||
|  | import EquipmentEfficiencyGraph from './equipmentEfficiencyGraph.vue' | ||||||
|  | import { calcMaxHeight } from '@/utils' | ||||||
|  | // import { timeFilter } from '@/utils/filters' | ||||||
|  | import moment from 'moment' | ||||||
|  |  | ||||||
|  | const tableConfigs = [ | ||||||
|  | 	{ | ||||||
|  | 		type: 'index', | ||||||
|  | 		name: i18n.t('index') | ||||||
|  | 	}, | ||||||
|  | 	{ | ||||||
|  | 		// name: i18n.t('createTime'), | ||||||
|  | 		prop: 'factoryName', | ||||||
|  | 		name: i18n.t('factory.title') | ||||||
|  | 	}, | ||||||
|  | 	{ prop: 'pdName', name: i18n.t('pl.title') }, | ||||||
|  | 	{ prop: 'wsName', name: i18n.t('ws.title') }, | ||||||
|  | 	{ prop: 'eqName', name: i18n.t('eq.title') }, | ||||||
|  | 	{ | ||||||
|  | 		name: i18n.t('eq.efficienttimeh'), | ||||||
|  | 		children: [ | ||||||
|  | 			{ prop: 'workTime', name: i18n.t('eq.worktimeh'), width: 120, filter: val => `${val} `+i18n.t('hour') }, | ||||||
|  | 			{ prop: 'workRate', name: i18n.t('eq.workdurationratio'), width: 120, filter: val => (val * 100).toFixed(2) + '%' } | ||||||
|  | 		] | ||||||
|  | 	}, | ||||||
|  | 	{ | ||||||
|  | 		name: i18n.t('eq.shutdowntimeh'), | ||||||
|  | 		children: [ | ||||||
|  | 			{ prop: 'stopTime', name: i18n.t('eq.stoptimeh'), width: 120, filter: val => `${val} `+i18n.t('hour') }, | ||||||
|  | 			{ prop: 'stopRate', name: i18n.t('eq.stopratio'), width: 120, filter: val => (val * 100).toFixed(2) + '%' } | ||||||
|  | 		] | ||||||
|  | 	}, | ||||||
|  | 	{ | ||||||
|  | 		name: i18n.t('eq.stoplost'), | ||||||
|  | 		children: [ | ||||||
|  | 			{ prop: 'downTime', name: i18n.t('eq.downtimeh'), width: 120, filter: val => `${val} `+i18n.t('hour') }, | ||||||
|  | 			{ prop: 'downRate', name: i18n.t('eq.downrate'), width: 120, filter: val => (val * 100).toFixed(2) + '%' }, | ||||||
|  | 			{ prop: 'timeEfficiency', name: i18n.t('eq.timeefficiency'), width: 120, filter: val => (val * 100).toFixed(2) + '%' } | ||||||
|  | 		] | ||||||
|  | 	}, | ||||||
|  | 	{ | ||||||
|  | 		name: i18n.t('eq.speedlost'), | ||||||
|  | 		children: [ | ||||||
|  | 			{ prop: 'realYield', name: i18n.t('eq.realyield'), width: 120, filter: val => `${val} `+i18n.t('hour') }, | ||||||
|  | 			{ prop: 'designYield', name: i18n.t('eq.designyield'), width: 120, filter: val => `${val} `+i18n.t('hour') }, | ||||||
|  | 			{ prop: 'peEfficiency', name: i18n.t('eq.speedefficiency'), width: 120, filter: val => (val * 100).toFixed(2) + '%' } | ||||||
|  | 		] | ||||||
|  | 	}, | ||||||
|  | 	{ | ||||||
|  | 		name: 'OEE', | ||||||
|  | 		prop: 'oee', | ||||||
|  | 		filter: val => (val * 100).toFixed(2) + '%' | ||||||
|  | 	}, | ||||||
|  | 	{ | ||||||
|  | 		name: 'TEEP', | ||||||
|  | 		prop: 'teep', | ||||||
|  | 		filter: val => (val * 100).toFixed(2) + '%' | ||||||
|  | 	}, | ||||||
|  | 	{ | ||||||
|  | 		prop: 'operations', | ||||||
|  | 		name: i18n.t('handle'), | ||||||
|  | 		fixed: 'right', | ||||||
|  | 		width: 120, | ||||||
|  | 		subcomponent: TableTextComponent, | ||||||
|  | 		// options: ['edit', 'delete'] | ||||||
|  | 		// options: ['view-trend'] // 查看趋势 | ||||||
|  | 		buttonContent: i18n.t('eq.viewtrend'), | ||||||
|  | 		actionName: 'view-trend', | ||||||
|  | 		emitFullData: true | ||||||
|  | 	} | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			/** hfxny part */ | ||||||
|  | 			factoryList: [], | ||||||
|  | 			productLineList: [], | ||||||
|  | 			showGraph: false, | ||||||
|  | 			/** */ | ||||||
|  | 			calcMaxHeight, | ||||||
|  | 			tableConfigs, | ||||||
|  | 			timeType: 'date', | ||||||
|  | 			rawTime: null, // [] or datetime | ||||||
|  | 			dataForm: { | ||||||
|  | 				type: 1, | ||||||
|  | 				ftId: null, | ||||||
|  | 				productlines: [], | ||||||
|  | 				startTime: null, | ||||||
|  | 				entTime: null | ||||||
|  | 			}, | ||||||
|  | 			dataList: [], | ||||||
|  | 			pageIndex: 1, | ||||||
|  | 			pageSize: 10, | ||||||
|  | 			totalPage: 0, | ||||||
|  | 			dataListLoading: false | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	components: { | ||||||
|  | 		BaseTable, | ||||||
|  | 		EquipmentEfficiencyGraph | ||||||
|  | 	}, | ||||||
|  |  | ||||||
|  | 	activated() { | ||||||
|  | 		this.getFactoryList().then(() => { | ||||||
|  | 			this.getProductLineList() | ||||||
|  | 		}) | ||||||
|  | 	}, | ||||||
|  | 	watch: { | ||||||
|  | 		timeType() { | ||||||
|  | 			// 防止切换日期类型时报错 | ||||||
|  | 			this.rawTime = null | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		// 获取工厂列表 | ||||||
|  | 		getFactoryList() { | ||||||
|  | 			return this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/factory/list'), | ||||||
|  | 				method: 'get' | ||||||
|  | 			}).then(({ data: res }) => { | ||||||
|  | 				if (res && res.code === 0) { | ||||||
|  | 					this.factoryList = res.data | ||||||
|  | 					/** set default */ | ||||||
|  | 					if (this.factoryList.length) { | ||||||
|  | 						this.dataForm.ftId = this.factoryList[0].id | ||||||
|  | 					} | ||||||
|  | 				} else { | ||||||
|  | 					this.factoryList = [] | ||||||
|  | 					this.dataForm.ftId = null | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		// 选择工厂时 | ||||||
|  | 		handleFactoryChange(val) { | ||||||
|  | 			this.getProductLineList() | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		// 获取产线列表 | ||||||
|  | 		getProductLineList() { | ||||||
|  | 			const query = { | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/productionLine/list'), | ||||||
|  | 				method: 'get' | ||||||
|  | 			} | ||||||
|  | 			if (this.dataForm.ftId) { | ||||||
|  | 				query.params = this.$http.adornParams({ | ||||||
|  | 					factoryId: this.dataForm.ftId | ||||||
|  | 				}); | ||||||
|  | 			} | ||||||
|  | 			this.$http(query).then(({ data: res }) => { | ||||||
|  | 				if (res && res.code === 0 && res.data.length) { | ||||||
|  | 					this.productLineList = res.data | ||||||
|  | 					/** set default */ | ||||||
|  | 					this.dataForm.productlines = [this.productLineList[0].id] | ||||||
|  | 				} else { | ||||||
|  | 					this.productLineList = [] | ||||||
|  | 					this.dataForm.productlines = [] | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		// 时间类型预处理 | ||||||
|  | 		getTimeRange() { | ||||||
|  | 			let startTime | ||||||
|  | 			let endTime | ||||||
|  | 			if (this.rawTime instanceof Array) { | ||||||
|  | 				startTime = this.rawTime[0] ? moment(this.rawTime[0]).format('YYYY-MM-DDTHH:mm:ss') : '' // 强制axios使用北京时间 | ||||||
|  | 				endTime = this.rawTime[1] ? moment(this.rawTime[1]).format('YYYY-MM-DDTHH:mm:ss') : '' | ||||||
|  | 			} else { | ||||||
|  | 				if (this.rawTime) { | ||||||
|  | 					startTime = moment(this.rawTime).format('YYYY-MM-DDTHH:mm:ss') | ||||||
|  | 					endTime = moment(startTime) | ||||||
|  | 						.add(1, 'd') | ||||||
|  | 						.format('YYYY-MM-DDTHH:mm:ss') | ||||||
|  | 				} else { | ||||||
|  | 					startTime = '' | ||||||
|  | 					endTime = '' | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			return { startTime, endTime } | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		// 获取数据列表 | ||||||
|  | 		getDataList() { | ||||||
|  | 			const { startTime, endTime } = this.getTimeRange() | ||||||
|  | 			this.showGraph = false | ||||||
|  | 			// this.dataListLoading = true | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/eqAnalysis/oee'), | ||||||
|  | 				method: 'post', | ||||||
|  | 				data: { | ||||||
|  | 					startTime, | ||||||
|  | 					endTime, | ||||||
|  | 					ftId: this.dataForm.ftId, | ||||||
|  | 					productlines: this.dataForm.productlines, | ||||||
|  | 					// limit: this.pageIndex, | ||||||
|  | 					// page: this.pageSize, | ||||||
|  | 					type: 1 | ||||||
|  | 				} | ||||||
|  | 			}).then(({ data: res }) => { | ||||||
|  | 				if (res.data && res.code !== 500) { | ||||||
|  | 					console.log('oee data:', res) | ||||||
|  | 					if (res.data.length) { | ||||||
|  | 						this.dataList = res.data | ||||||
|  | 						// this.dataList = Array(20).fill(1) | ||||||
|  | 					} else { | ||||||
|  | 						this.dataList.splice(0) | ||||||
|  | 					} | ||||||
|  | 				} else { | ||||||
|  | 					this.dataList.splice(0) | ||||||
|  | 					this.$message.error(res.msg) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		// 查看趋势 | ||||||
|  | 		viewTrend(data) { | ||||||
|  | 			const { startTime, endTime } = this.getTimeRange() | ||||||
|  | 			const injectData = { | ||||||
|  | 				// 时间段 | ||||||
|  | 				startTime, | ||||||
|  | 				endTime, | ||||||
|  | 				// 设备id | ||||||
|  | 				equipmentId: data.eqId, | ||||||
|  | 				equipmentName: data.eqName, | ||||||
|  | 				// 时间类型, type 按年,按月,按日等 | ||||||
|  | 				type: 1, // 默认 type 1, 1无间隔;2按月分隔;3按周分隔;4按天分隔 | ||||||
|  | 				// 时长数据: 工作时长, 停机时长,故障时长 | ||||||
|  | 				workTime: data.workTime, | ||||||
|  | 				stopTime: data.stopTime, | ||||||
|  | 				downTime: data.downTime, | ||||||
|  | 				// 比例数据: 工作时长比率,停机时长比率,故障时长比率,速度开动率,OEE,TEEP | ||||||
|  | 				workRate: data.workRate, | ||||||
|  | 				stopRate: data.stopRate, | ||||||
|  | 				downRate: data.downRate, | ||||||
|  | 				peEfficiency: data.peEfficiency, | ||||||
|  | 				timeEfficiency: data.timeEfficiency | ||||||
|  | 			} | ||||||
|  | 			// console.log('trends data: ', data) | ||||||
|  |  | ||||||
|  | 			this.showGraph = true | ||||||
|  |  | ||||||
|  | 			console.clear() | ||||||
|  | 			console.log('inject data: ', injectData) | ||||||
|  |  | ||||||
|  | 			setTimeout(() => { | ||||||
|  | 				// console.log('befoer graph: ', this.$refs.eegraph) | ||||||
|  | 				this.$refs.eegraph.init(injectData) // 注入初始数据,这些数据在组件内部用作条件,有可能会被更改 | ||||||
|  | 			}, 600) // 动画是500ms | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		// 每页数 | ||||||
|  | 		sizeChangeHandle(val) { | ||||||
|  | 			this.pageSize = val | ||||||
|  | 			this.pageIndex = 1 | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 当前页 | ||||||
|  | 		currentChangeHandle(val) { | ||||||
|  | 			this.pageIndex = val | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 多选 | ||||||
|  | 		selectionChangeHandle(val) { | ||||||
|  | 			this.dataListSelections = val | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		handleOperations({ type, data }) { | ||||||
|  | 			switch (type) { | ||||||
|  | 				case 'view-trend': | ||||||
|  | 					return this.viewTrend(data) | ||||||
|  | 				// return this.addOrUpdateHandle(id, true) | ||||||
|  | 				// case 'edit': | ||||||
|  | 				// 	return this.addOrUpdateHandle(id) | ||||||
|  | 				// case 'delete': | ||||||
|  | 				// 	return this.deleteHandle(id) | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style scoped> | ||||||
|  | .slide-to-left-enter-active, | ||||||
|  | .slide-to-left-leave-active { | ||||||
|  | 	transition: all 0.5s; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .slide-to-left-enter { | ||||||
|  | 	transform: translateX(10px); | ||||||
|  | 	opacity: 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .slide-to-left-leave-to { | ||||||
|  | 	transform: translateX(-10px); | ||||||
|  | 	opacity: 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .slide-to-left-leave, | ||||||
|  | .slide-to-left-enter-to { | ||||||
|  | 	transform: translateX(0); | ||||||
|  | } | ||||||
|  | </style> | ||||||
							
								
								
									
										330
									
								
								src/views/modules/monitoring/equipmentEfficiencyGraph.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										330
									
								
								src/views/modules/monitoring/equipmentEfficiencyGraph.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,330 @@ | |||||||
|  | <!-- | ||||||
|  | /* | ||||||
|  | * @Author: lb | ||||||
|  | * @Date: 2022-07-24 13:30:00 | ||||||
|  | * @LastEditTime: 2022-07-28 09:30:00 | ||||||
|  | * @LastEditors: lb | ||||||
|  | * @Description: 设备效率分析-echarts图 | ||||||
|  | */ | ||||||
|  | --> | ||||||
|  | <template> | ||||||
|  | 	<div class="graph-area"> | ||||||
|  | 		<span class="close-btn" @click="close"> | ||||||
|  | 			<svg xmlns="http://www.w3.org/2000/svg" style="height: 100%; width: 100%;" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"> | ||||||
|  | 				<path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12" /> | ||||||
|  | 			</svg> | ||||||
|  | 		</span> | ||||||
|  |  | ||||||
|  | 		<div class="close-row"> | ||||||
|  | 			<el-radio-group v-model="dataType" class="head-radio-group" size="small" @change="setLegend"> | ||||||
|  | 				<el-radio-button :label="$t('eq.ratio')" /> | ||||||
|  | 				<el-radio-button :label="$t('eq.time')" /> | ||||||
|  | 			</el-radio-group> | ||||||
|  |  | ||||||
|  | 			<el-radio-group v-if="1" v-model="searchType" class="head-radio-group" style="margin-left: 8px;" size="small" @change="handleRadioGroupChanged"> | ||||||
|  | 				<el-radio-button v-for="(opt, index) in searchRadioOptions" :key="index" :label="opt" /> | ||||||
|  | 			</el-radio-group> | ||||||
|  | 		</div> | ||||||
|  |  | ||||||
|  | 		<div id="trend-graph" class="real-graph" style="width: 100%; height: 500px;" /> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import * as echarts from 'echarts' | ||||||
|  | import moment from 'moment' | ||||||
|  | import { pick } from 'lodash/object' | ||||||
|  | import i18n from '../../../i18n' | ||||||
|  |  | ||||||
|  | class EchartConfigs { | ||||||
|  | 	constructor() { | ||||||
|  | 		this.color = ['#e91e63', '#4caf50', '#3f51b5', '#ffc107', '#607d8b'] | ||||||
|  | 		this.title = { | ||||||
|  | 			text: i18n.t('eq.timetrend'), | ||||||
|  | 			top: 0, | ||||||
|  | 			left: 'center', | ||||||
|  | 			textStyle: { | ||||||
|  | 				fontWeight: 'bold', | ||||||
|  | 				fontSize: 18, | ||||||
|  | 				lineHeight: 18 | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		this.tooltip = { | ||||||
|  | 			trigger: 'axis', | ||||||
|  | 			// 将axisPointer设置得更显眼一点 | ||||||
|  | 			axisPointer: { | ||||||
|  | 				type: 'shadow' | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		// legend | ||||||
|  | 		this.legend = { | ||||||
|  | 			icon: 'circle', | ||||||
|  | 			top: 24, | ||||||
|  | 			left: 'center', | ||||||
|  | 			padding: 8, | ||||||
|  | 			itemGap: 8, | ||||||
|  | 			data: [] // 动态设置 | ||||||
|  | 		} | ||||||
|  | 		this.xAxis = { | ||||||
|  | 			type: 'category', | ||||||
|  | 			data: [] // 动态设置 | ||||||
|  | 			// https://tushuo.baidu.com/wave/index#/manufacture/dta9pydmexfdhc0sg/999 | ||||||
|  | 		} | ||||||
|  | 		this.yAxis = { | ||||||
|  | 			type: 'value' | ||||||
|  | 		} | ||||||
|  | 		this.series = [] // 动态设置 | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	setTitle(val) { | ||||||
|  | 		this.title.text = val | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	setLegend(val) { | ||||||
|  | 		this.legend.data.splice(0) | ||||||
|  | 		if (Array.isArray(val)) { | ||||||
|  | 			this.legend.data = val | ||||||
|  | 		} else { | ||||||
|  | 			console.error('setLegend() 只接受数组参数') | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	setXAxis(val) { | ||||||
|  | 		// console.log('in setXAxis(): ', val) | ||||||
|  | 		this.xAxis.data.splice(0) | ||||||
|  | 		if (Array.isArray(val)) { | ||||||
|  | 			this.xAxis.data = val | ||||||
|  | 		} else { | ||||||
|  | 			console.error('setXAxis() 只接受数组参数') | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	setSeries(val) { | ||||||
|  | 		this.series.splice(0) | ||||||
|  | 		if (Array.isArray(val) && this.series.length === 0) { | ||||||
|  | 			this.series = val | ||||||
|  | 		} else { | ||||||
|  | 			console.error('setSeries() 只接受数组参数') | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	name: 'EquipmentEfficiencyGraph', | ||||||
|  | 	props: {}, | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			searchType: i18n.t('eq.nogap'), | ||||||
|  | 			searchRadioOptions: [i18n.t('eq.nogap'), i18n.t('eq.monthgap'), i18n.t('eq.weekgap'), i18n.t('eq.daygap')], | ||||||
|  | 			dataType: i18n.t('eq.time'), | ||||||
|  | 			dataRadioOptions: [i18n.t('eq.time'), i18n.t('eq.ratio')], | ||||||
|  | 			config: new EchartConfigs(), | ||||||
|  | 			chart: null, | ||||||
|  | 			rateList: [], // 对请求来的数据分流 | ||||||
|  | 			timeList: [], | ||||||
|  | 			xAxis: [], // 动态设置 | ||||||
|  | 			injectData: null | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		async initChart() { | ||||||
|  | 			this.config.setTitle(this.injectData.equipmentName + i18n.t('eq.timetrend')) | ||||||
|  | 			await this.getList() | ||||||
|  | 			this.setLegend() | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		init(data) { | ||||||
|  | 			this.injectData = data | ||||||
|  | 			if (!this.chart) { | ||||||
|  | 				this.chart = echarts.init(document.getElementById('trend-graph')) | ||||||
|  | 				// this.chart.setOption(this.config) | ||||||
|  | 				this.initChart() | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		close() { | ||||||
|  | 			this.$emit('close-graph') | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		makeQuerys() { | ||||||
|  | 			const searchTypeMap = { | ||||||
|  | 				[i18n.t('eq.nogap')]: 1, | ||||||
|  | 				[i18n.t('eq.monthgap')]: 2, | ||||||
|  | 				[i18n.t('eq.weekgap')]: 3, | ||||||
|  | 				[i18n.t('eq.daygap')]: 4, | ||||||
|  | 				[i18n.t('eq.hourgap')]: 5 | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			return { | ||||||
|  | 				type: searchTypeMap[this.searchType], | ||||||
|  | 				eqId: this.injectData.equipmentId, | ||||||
|  | 				startTime: this.injectData.startTime, // '2022-06-14T00:00:00' | ||||||
|  | 				endTime: this.injectData.endTime | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		// getOEE | ||||||
|  | 		getOEE(params) { | ||||||
|  | 			return this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/eqAnalysis/oee'), | ||||||
|  | 				method: 'post', | ||||||
|  | 				data: params | ||||||
|  | 			}).then(({ data: res }) => { | ||||||
|  | 				if (!res.data || res.code === 500) { | ||||||
|  | 					this.dataList.splice(0) | ||||||
|  | 					this.$message.error(res.msg) | ||||||
|  | 					return { data: null } | ||||||
|  | 				} | ||||||
|  | 				return res.data | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		getList() { | ||||||
|  | 			const params = this.makeQuerys() | ||||||
|  | 			// 发起请求 | ||||||
|  | 			return this.getOEE(params).then(datalist => { | ||||||
|  | 				console.log('getOEE res:', datalist) | ||||||
|  | 				this.timeList.splice(0) | ||||||
|  | 				this.rateList.splice(0) | ||||||
|  | 				this.xAxis.splice(0) | ||||||
|  | 				if (datalist.length) { | ||||||
|  | 					// 分流 | ||||||
|  | 					datalist.map(item => { | ||||||
|  | 						const time = moment(item.time) | ||||||
|  | 						if (this.searchType === i18n.t('eq.monthgap')) { | ||||||
|  | 							this.xAxis.push(`${time.year()}${i18n.t('eq.year')}${time.month() + 1}${i18n.t('eq.month')}`) | ||||||
|  | 						} else if (this.searchType === i18n.t('eq.weekgap')) { | ||||||
|  | 							this.xAxis.push(`${time.format('YYYY-MM-DD')}`) | ||||||
|  | 						} else if (this.searchType === i18n.t('eq.daygap')) { | ||||||
|  | 							this.xAxis.push(`${time.format('YY-M-D')}`) | ||||||
|  | 						} else { | ||||||
|  | 							this.xAxis.push(`${time.format('YYYY-MM-DD')}`) | ||||||
|  | 						} | ||||||
|  | 						this.timeList.push(pick(item, ['workTime', 'stopTime', 'downTime'])) | ||||||
|  | 						this.rateList.push(pick(item, ['workRate', 'stopRate', 'downRate', 'peEfficiency', 'timeEfficiency', 'oee', 'teep'])) | ||||||
|  | 					}) | ||||||
|  |  | ||||||
|  | 					// 设置横轴 | ||||||
|  | 					this.config.setXAxis(JSON.parse(JSON.stringify(this.xAxis))) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		async handleRadioGroupChanged() { | ||||||
|  | 			// 获取数据且设置横轴 | ||||||
|  | 			await this.getList() | ||||||
|  | 			// 设置legend和数据 | ||||||
|  | 			this.setLegend() | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		setLegend() { | ||||||
|  | 			// 设置legend | ||||||
|  | 			const legendMap = { | ||||||
|  | 				[i18n.t('eq.ratio')]: [ | ||||||
|  | 					i18n.t('eq.workdurationratio'), | ||||||
|  | 					i18n.t('eq.stopdurationratio'), | ||||||
|  | 					i18n.t('eq.downdurationratio'), | ||||||
|  | 					i18n.t('eq.speedefficiency'), | ||||||
|  | 					i18n.t('eq.timeefficiency'), | ||||||
|  | 					'OEE', | ||||||
|  | 					'TEEP' | ||||||
|  | 				], | ||||||
|  | 				[i18n.t('eq.time')]: [i18n.t('eq.worktime'), i18n.t('eq.stoptime'), i18n.t('eq.downtime')] | ||||||
|  | 			} | ||||||
|  | 			this.config.setLegend(legendMap[this.dataType]) | ||||||
|  | 			this.setData() | ||||||
|  | 			// 重新绘制 | ||||||
|  | 			this.renderGraph() | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		setData() { | ||||||
|  | 			if (this.dataType === i18n.t('eq.time')) { | ||||||
|  | 				const workTimeList = [] | ||||||
|  | 				const stopTimeList = [] | ||||||
|  | 				const downTimeList = [] | ||||||
|  | 				this.timeList.map(item => { | ||||||
|  | 					workTimeList.push(item.workTime) | ||||||
|  | 					stopTimeList.push(item.stopTime) | ||||||
|  | 					downTimeList.push(item.downTime) | ||||||
|  | 				}) | ||||||
|  | 				this.config.setSeries([ | ||||||
|  | 					{ name: i18n.t('eq.worktime'), type: 'bar', data: workTimeList }, | ||||||
|  | 					{ name: i18n.t('eq.stoptime'), type: 'bar', data: stopTimeList }, | ||||||
|  | 					{ name: i18n.t('eq.downtime'), type: 'bar', data: downTimeList } | ||||||
|  | 				]) | ||||||
|  | 			} else { | ||||||
|  | 				// 百分比 | ||||||
|  | 				const workRateList = [] | ||||||
|  | 				const stopRateList = [] | ||||||
|  | 				const downRateList = [] | ||||||
|  | 				const peEfficiencyList = [] | ||||||
|  | 				const timeEfficiencyList = [] | ||||||
|  | 				const oeeList = [] | ||||||
|  | 				const teepList = [] | ||||||
|  | 				this.rateList.map(item => { | ||||||
|  | 					workRateList.push(item.workRate) | ||||||
|  | 					stopRateList.push(item.stopRate) | ||||||
|  | 					downRateList.push(item.downRate) | ||||||
|  | 					peEfficiencyList.push(item.peEfficiency) | ||||||
|  | 					timeEfficiencyList.push(item.timeEfficiency) | ||||||
|  | 					oeeList.push(item.oee) | ||||||
|  | 					teepList.push(item.teep) | ||||||
|  | 				}) | ||||||
|  | 				this.config.setSeries([ | ||||||
|  | 					{ name: i18n.t('eq.workdurationratio'), type: 'bar', data: workRateList }, | ||||||
|  | 					{ name: i18n.t('eq.stopdurationratio'), type: 'bar', data: stopRateList }, | ||||||
|  | 					{ name: i18n.t('eq.downdurationratio'), type: 'bar', data: downRateList }, | ||||||
|  | 					{ name: i18n.t('eq.speedefficiency'), type: 'bar', data: peEfficiencyList }, | ||||||
|  | 					{ name: i18n.t('eq.timeefficiency'), type: 'bar', data: timeEfficiencyList }, | ||||||
|  | 					{ name: 'OEE', type: 'bar', data: oeeList }, | ||||||
|  | 					{ name: 'TEEP', type: 'bar', data: teepList } | ||||||
|  | 				]) | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		// 重新绘制图形 | ||||||
|  | 		renderGraph() { | ||||||
|  | 			console.log('latest config: ', JSON.stringify(this.config)) | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				// this.chart.setOption(this.config) | ||||||
|  | 				this.chart.setOption(this.config, { | ||||||
|  | 					notMerge: true | ||||||
|  | 				}) | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style scoped> | ||||||
|  | .graph-area { | ||||||
|  | 	width: 100%; | ||||||
|  | 	min-height: 200px; | ||||||
|  | 	position: relative; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .close-row { | ||||||
|  | 	position: relative; | ||||||
|  | 	padding: 8px 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .close-btn { | ||||||
|  | 	position: absolute; | ||||||
|  | 	z-index: 1; | ||||||
|  | 	top: 10px; | ||||||
|  | 	right: 10px; | ||||||
|  | 	display: inline-block; | ||||||
|  | 	width: 20px; | ||||||
|  | 	height: 20px; | ||||||
|  | 	cursor: pointer; | ||||||
|  | 	transition: color 0.3s linear; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .close-btn:hover { | ||||||
|  | 	color: #409eff; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .head-radio-group >>> .el-radio-button__orig-radio:checked + .el-radio-button__inner { | ||||||
|  | 	background-color: #409eff; | ||||||
|  | 	border-color: #409eff; | ||||||
|  | } | ||||||
|  | </style> | ||||||
							
								
								
									
										204
									
								
								src/views/modules/monitoring/equipmentException.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										204
									
								
								src/views/modules/monitoring/equipmentException.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,204 @@ | |||||||
|  | <template> | ||||||
|  | 	<!-- 设备效率分析 --> | ||||||
|  | 	<div class="mod-config"> | ||||||
|  | 		<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)"> | ||||||
|  | 			<!-- 月份 --> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-date-picker key="month-picker" v-model="rawTime" type="month" :placeholder="$t('prompt.month')" format="yyyy-MM" /> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<!-- 产线 --> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-select v-model="dataForm.productlines" :placeholder="$t('pl.title')" multiple clearable> | ||||||
|  | 					<el-option v-for="productLine in productLineList" :key="productLine.id" :value="productLine.id" :label="productLine.name" /> | ||||||
|  | 				</el-select> | ||||||
|  | 			</el-form-item> | ||||||
|  |  | ||||||
|  | 			<!-- 按钮 --> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-button @click="currentChangeHandle(1)">{{ $t('search') }}</el-button> | ||||||
|  | 				<!-- <el-button v-if="$hasPermission('monitoring:equipmentEffiency:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> --> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  |  | ||||||
|  | 		<base-table :data="dataList" :table-head-configs="tableConfigs" :max-height="calcMaxHeight(8)" @operate-event="handleOperations" @refreshDataList="getDataList" /> | ||||||
|  |  | ||||||
|  | 		<!-- <el-pagination | ||||||
|  | 			@size-change="sizeChangeHandle" | ||||||
|  | 			@current-change="currentChangeHandle" | ||||||
|  | 			:current-page="pageIndex" | ||||||
|  | 			:page-sizes="[10, 20, 50, 100]" | ||||||
|  | 			:page-size="pageSize" | ||||||
|  | 			:total="totalPage" | ||||||
|  | 			layout="total, sizes, prev, pager, next, jumper" | ||||||
|  | 		/> --> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import i18n from '@/i18n' | ||||||
|  | import BaseTable from '@/components/base-table' | ||||||
|  | // import TableOperateComponent from '@/components/base-table/components/operationComponent' | ||||||
|  | import TableTextComponent from '@/components/base-table/components/detailComponent' | ||||||
|  | import { timeFilter } from '@/utils/filters' | ||||||
|  | import { calcMaxHeight } from '@/utils' | ||||||
|  | import moment from 'moment' | ||||||
|  |  | ||||||
|  | const tableConfigs = [ | ||||||
|  | 	{ | ||||||
|  | 		type: 'index', | ||||||
|  | 		name: i18n.t('index') | ||||||
|  | 	}, | ||||||
|  | 	// { prop: 'time', name: '时间', filter: timeFilter }, | ||||||
|  | 	{ prop: 'pdName', name: i18n.t('pl.name') }, | ||||||
|  | 	{ prop: 'wsName', name: i18n.t('ws.title') }, | ||||||
|  | 	{ prop: 'eqName', name: i18n.t('eq.title') }, | ||||||
|  | 	{ prop: 'mtbf', name: i18n.t('eq.mtbf'), width: 220 }, | ||||||
|  | 	{ prop: 'mttr', name: i18n.t('eq.mttr'), width: 190 }, | ||||||
|  | 	{ prop: 'workTime', name: i18n.t('eq.worktimeh') }, | ||||||
|  | 	{ prop: 'downTime', name: i18n.t('eq.downtimeh') }, | ||||||
|  | 	{ prop: 'downCount', name: i18n.t('eq.downcount') } | ||||||
|  | 	// { | ||||||
|  | 	// 	prop: 'operations', | ||||||
|  | 	// 	name: i18n.t('handle'), | ||||||
|  | 	// 	fixed: 'right', | ||||||
|  | 	// 	width: 120, | ||||||
|  | 	// 	subcomponent: TableTextComponent, | ||||||
|  | 	// 	buttonContent: '查看详情', // 会转到“设备报警” | ||||||
|  | 	// 	emitFullData: true | ||||||
|  | 	// } | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			/** hfxny part */ | ||||||
|  | 			factoryList: [], | ||||||
|  | 			productLineList: [], | ||||||
|  | 			/** */ | ||||||
|  | 			calcMaxHeight, | ||||||
|  | 			tableConfigs, | ||||||
|  | 			timeType: 'range', | ||||||
|  | 			rawTime: new Date(), | ||||||
|  | 			dataForm: { | ||||||
|  | 				type: 1, | ||||||
|  | 				productlines: [], | ||||||
|  | 				startTime: null, | ||||||
|  | 				entTime: null | ||||||
|  | 			}, | ||||||
|  | 			dataList: [], | ||||||
|  | 			pageIndex: 1, | ||||||
|  | 			pageSize: 10, | ||||||
|  | 			totalPage: 0, | ||||||
|  | 			dataListLoading: false | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	components: { | ||||||
|  | 		BaseTable | ||||||
|  | 	}, | ||||||
|  |  | ||||||
|  | 	activated() { | ||||||
|  | 		// this.getFactoryList() | ||||||
|  | 		this.getProductLineList() | ||||||
|  | 	}, | ||||||
|  | 	watch: {}, | ||||||
|  | 	methods: { | ||||||
|  | 		// 获取工厂列表 | ||||||
|  | 		// getFactoryList() { | ||||||
|  | 		// 	this.$http({ | ||||||
|  | 		// 		url: this.$http.adornUrl('/monitoring/factory/page'), | ||||||
|  | 		// 		method: 'get' | ||||||
|  | 		// 	}).then(({ data }) => { | ||||||
|  | 		// 		if (data && data.code === 0) { | ||||||
|  | 		// 			this.factoryList = data.data.list | ||||||
|  | 		// 			/** set default */ | ||||||
|  | 		// 			if (this.factoryList.length) { | ||||||
|  | 		// 				this.dataForm.ftId = this.factoryList[0].id | ||||||
|  | 		// 			} | ||||||
|  | 		// 		} else { | ||||||
|  | 		// 			this.factoryList = [] | ||||||
|  | 		// 			this.dataForm.ftId = null | ||||||
|  | 		// 		} | ||||||
|  | 		// 	}) | ||||||
|  | 		// }, | ||||||
|  | 		// 获取产线列表 | ||||||
|  | 		getProductLineList() { | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/productionLine/list'), | ||||||
|  | 				method: 'get' | ||||||
|  | 			}).then(({ data: res }) => { | ||||||
|  | 				if (res && res.code === 0) { | ||||||
|  | 					this.productLineList = res.data | ||||||
|  | 					/** set default */ | ||||||
|  | 					if (this.productLineList.length) { | ||||||
|  | 						this.dataForm.productlines = [this.productLineList[0].id] | ||||||
|  | 					} | ||||||
|  | 				} else { | ||||||
|  | 					this.productLineList = [] | ||||||
|  | 					this.dataForm.productlines = [] | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		// 获取数据列表 | ||||||
|  | 		getDataList() { | ||||||
|  | 			// this.dataList = Array(10).fill(1) | ||||||
|  | 			// return | ||||||
|  | 			let startTime = this.rawTime | ||||||
|  | 				? moment(this.rawTime) | ||||||
|  | 						.set({ date: 1, hour: 0, minute: 0, second: 0, millisecond: 0 }) | ||||||
|  | 						.format('YYYY-MM-DDTHH:mm:ss') | ||||||
|  | 				: '' | ||||||
|  | 			let endTime = startTime | ||||||
|  | 				? moment(startTime) | ||||||
|  | 						.add(1, 'M') | ||||||
|  | 						.format('YYYY-MM-DDTHH:mm:ss') | ||||||
|  | 				: '' | ||||||
|  |  | ||||||
|  | 			this.dataListLoading = true | ||||||
|  |  | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/eqAnalysis/mtbrAndMtbr'), | ||||||
|  | 				method: 'post', | ||||||
|  | 				data: { | ||||||
|  | 					startTime, | ||||||
|  | 					endTime, | ||||||
|  | 					productlines: this.dataForm.productlines, | ||||||
|  | 					type: 1 | ||||||
|  | 				} | ||||||
|  | 			}).then(({ data: res }) => { | ||||||
|  | 				if (res.code === 500) { | ||||||
|  | 					this.dataList.splice(0) | ||||||
|  | 					this.$message.error(res.msg) | ||||||
|  | 				} else { | ||||||
|  | 					this.dataList = res.data | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 每页数 | ||||||
|  | 		sizeChangeHandle(val) { | ||||||
|  | 			this.pageSize = val | ||||||
|  | 			this.pageIndex = 1 | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 当前页 | ||||||
|  | 		currentChangeHandle(val) { | ||||||
|  | 			this.pageIndex = val | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 多选 | ||||||
|  | 		selectionChangeHandle(val) { | ||||||
|  | 			this.dataListSelections = val | ||||||
|  | 		}, | ||||||
|  | 		handleOperations({ type, data: id }) { | ||||||
|  | 			switch (type) { | ||||||
|  | 				case 'view-detail': | ||||||
|  | 					return this.addOrUpdateHandle(id, true) | ||||||
|  | 				case 'edit': | ||||||
|  | 					return this.addOrUpdateHandle(id) | ||||||
|  | 				case 'delete': | ||||||
|  | 					return this.deleteHandle(id) | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										184
									
								
								src/views/modules/monitoring/equipmentFile-add-or-update.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										184
									
								
								src/views/modules/monitoring/equipmentFile-add-or-update.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,184 @@ | |||||||
|  | <template> | ||||||
|  | 	<el-dialog :title="!dataForm.id ? i18n.t('add') : i18n.t('update')" :close-on-click-modal="false" :visible.sync="visible"> | ||||||
|  | 		<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" label-width="80px"> | ||||||
|  | 			<el-form-item label="设备ID" prop="equipmentId"> | ||||||
|  | 				<el-input v-model="dataForm.equipmentId" placeholder="设备ID"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="文件ID" prop="fileId"> | ||||||
|  | 				<el-input v-model="dataForm.fileId" placeholder="文件ID"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('desc')" prop="description"> | ||||||
|  | 				<el-input v-model="dataForm.description" :placeholder="$t('desc')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="启用状态:0 、停用,1、启用" prop="enabled"> | ||||||
|  | 				<el-input v-model="dataForm.enabled" placeholder="启用状态:0 、停用,1、启用"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="备注" prop="remark"> | ||||||
|  | 				<el-input v-model="dataForm.remark" placeholder="备注"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="删除标志,是否有效:1 可用 0不可用" prop="valid"> | ||||||
|  | 				<el-input v-model="dataForm.valid" placeholder="删除标志,是否有效:1 可用 0不可用"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('creator')" prop="creatorId"> | ||||||
|  | 				<el-input v-model="dataForm.creatorId" :placeholder="$t('creator')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('creatorName')" prop="creatorName"> | ||||||
|  | 				<el-input v-model="dataForm.creatorName" :placeholder="$t('creatorName')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="创建时间" prop="createTime"> | ||||||
|  | 				<el-input v-model="dataForm.createTime" placeholder="创建时间"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('updator')" prop="updaterId"> | ||||||
|  | 				<el-input v-model="dataForm.updaterId" :placeholder="$t('updator')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('updatorName')" prop="updaterName"> | ||||||
|  | 				<el-input v-model="dataForm.updaterName" :placeholder="$t('updatorName')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('updateTime')" prop="updateTime"> | ||||||
|  | 				<el-input v-model="dataForm.updateTime" :placeholder="$t('updateTime')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('version')" prop="version"> | ||||||
|  | 				<el-input v-model="dataForm.version" :placeholder="$t('version')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="文件类型编号" prop="typeCode"> | ||||||
|  | 				<el-input v-model="dataForm.typeCode" placeholder="文件类型编号"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="文件名字" prop="fileName"> | ||||||
|  | 				<el-input v-model="dataForm.fileName" placeholder="文件名字"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="下载地址" prop="fileUrl"> | ||||||
|  | 				<el-input v-model="dataForm.fileUrl" placeholder="下载地址"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  | 		<span slot="footer" class="dialog-footer"> | ||||||
|  | 			<el-button @click="visible = false">{{ $t('cancel') }}</el-button> | ||||||
|  | 			<el-button type="primary" @click="dataFormSubmit()">{{ $t('confirm') }}</el-button> | ||||||
|  | 		</span> | ||||||
|  | 	</el-dialog> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			visible: false, | ||||||
|  | 			dataForm: { | ||||||
|  | 				id: 0, | ||||||
|  | 				equipmentId: '', | ||||||
|  | 				fileId: '', | ||||||
|  | 				description: '', | ||||||
|  | 				enabled: '', | ||||||
|  | 				remark: '', | ||||||
|  | 				valid: '', | ||||||
|  | 				creatorId: '', | ||||||
|  | 				creatorName: '', | ||||||
|  | 				createTime: '', | ||||||
|  | 				updaterId: '', | ||||||
|  | 				updaterName: '', | ||||||
|  | 				updateTime: '', | ||||||
|  | 				version: '', | ||||||
|  | 				typeCode: '', | ||||||
|  | 				fileName: '', | ||||||
|  | 				fileUrl: '' | ||||||
|  | 			}, | ||||||
|  | 			dataRule: { | ||||||
|  | 				equipmentId: [{ required: true, message: '设备ID不能为空', trigger: 'blur' }], | ||||||
|  | 				fileId: [{ required: true, message: '文件ID不能为空', trigger: 'blur' }], | ||||||
|  | 				description: [{ required: true, message: '描述不能为空', trigger: 'blur' }], | ||||||
|  | 				enabled: [{ required: true, message: '启用状态:0 、停用,1、启用不能为空', trigger: 'blur' }], | ||||||
|  | 				remark: [{ required: true, message: '备注不能为空', trigger: 'blur' }], | ||||||
|  | 				valid: [{ required: true, message: '删除标志,是否有效:1 可用 0不可用不能为空', trigger: 'blur' }], | ||||||
|  | 				creatorId: [{ required: true, message: '创建人不能为空', trigger: 'blur' }], | ||||||
|  | 				creatorName: [{ required: true, message: '创建人姓名不能为空', trigger: 'blur' }], | ||||||
|  | 				createTime: [{ required: true, message: '创建时间不能为空', trigger: 'blur' }], | ||||||
|  | 				updaterId: [{ required: true, message: '更新人不能为空', trigger: 'blur' }], | ||||||
|  | 				updaterName: [{ required: true, message: '更新人姓名不能为空', trigger: 'blur' }], | ||||||
|  | 				updateTime: [{ required: true, message: '更新时间不能为空', trigger: 'blur' }], | ||||||
|  | 				version: [{ required: true, message: '版本号不能为空', trigger: 'blur' }], | ||||||
|  | 				typeCode: [{ required: true, message: '文件类型编号不能为空', trigger: 'blur' }], | ||||||
|  | 				fileName: [{ required: true, message: '文件名字不能为空', trigger: 'blur' }], | ||||||
|  | 				fileUrl: [{ required: true, message: '下载地址不能为空', trigger: 'blur' }] | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		init(id) { | ||||||
|  | 			this.dataForm.id = id || 0 | ||||||
|  | 			this.visible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs['dataForm'].resetFields() | ||||||
|  | 				if (this.dataForm.id) { | ||||||
|  | 					this.$http({ | ||||||
|  | 						url: this.$http.adornUrl(`/monitoring/equipmentFile/${this.dataForm.id}`), | ||||||
|  | 						method: 'get', | ||||||
|  | 						params: this.$http.adornParams() | ||||||
|  | 					}).then(({ data }) => { | ||||||
|  | 						if (data && data.code === 0) { | ||||||
|  | 							this.dataForm.equipmentId = data.equipmenfile.equipmentId | ||||||
|  | 							this.dataForm.fileId = data.equipmenfile.fileId | ||||||
|  | 							this.dataForm.description = data.equipmenfile.description | ||||||
|  | 							this.dataForm.enabled = data.equipmenfile.enabled | ||||||
|  | 							this.dataForm.remark = data.equipmenfile.remark | ||||||
|  | 							this.dataForm.valid = data.equipmenfile.valid | ||||||
|  | 							this.dataForm.creatorId = data.equipmenfile.creatorId | ||||||
|  | 							this.dataForm.creatorName = data.equipmenfile.creatorName | ||||||
|  | 							this.dataForm.createTime = data.equipmenfile.createTime | ||||||
|  | 							this.dataForm.updaterId = data.equipmenfile.updaterId | ||||||
|  | 							this.dataForm.updaterName = data.equipmenfile.updaterName | ||||||
|  | 							this.dataForm.updateTime = data.equipmenfile.updateTime | ||||||
|  | 							this.dataForm.version = data.equipmenfile.version | ||||||
|  | 							this.dataForm.typeCode = data.equipmenfile.typeCode | ||||||
|  | 							this.dataForm.fileName = data.equipmenfile.fileName | ||||||
|  | 							this.dataForm.fileUrl = data.equipmenfile.fileUrl | ||||||
|  | 						} | ||||||
|  | 					}) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 表单提交 | ||||||
|  | 		dataFormSubmit() { | ||||||
|  | 			this.$refs['dataForm'].validate(valid => { | ||||||
|  | 				if (valid) { | ||||||
|  | 					this.$http({ | ||||||
|  | 						url: this.$http.adornUrl(`/monitoring/equipmentFile/${!this.dataForm.id ? '' : this.dataForm.id}`), | ||||||
|  | 						method: this.dataForm.id ? 'put' : 'post', | ||||||
|  | 						data: this.$http.adornData({ | ||||||
|  | 							id: this.dataForm.id || undefined, | ||||||
|  | 							equipmentId: this.dataForm.equipmentId, | ||||||
|  | 							fileId: this.dataForm.fileId, | ||||||
|  | 							description: this.dataForm.description, | ||||||
|  | 							enabled: this.dataForm.enabled, | ||||||
|  | 							remark: this.dataForm.remark, | ||||||
|  | 							valid: this.dataForm.valid, | ||||||
|  | 							creatorId: this.dataForm.creatorId, | ||||||
|  | 							creatorName: this.dataForm.creatorName, | ||||||
|  | 							createTime: this.dataForm.createTime, | ||||||
|  | 							updaterId: this.dataForm.updaterId, | ||||||
|  | 							updaterName: this.dataForm.updaterName, | ||||||
|  | 							updateTime: this.dataForm.updateTime, | ||||||
|  | 							version: this.dataForm.version, | ||||||
|  | 							typeCode: this.dataForm.typeCode, | ||||||
|  | 							fileName: this.dataForm.fileName, | ||||||
|  | 							fileUrl: this.dataForm.fileUrl | ||||||
|  | 						}) | ||||||
|  | 					}).then(({ data }) => { | ||||||
|  | 						if (data && data.code === 0) { | ||||||
|  | 							this.$message({ | ||||||
|  | 								message: i18n.t('prompt.success'), | ||||||
|  | 								type: 'success', | ||||||
|  | 								duration: 1500, | ||||||
|  | 								onClose: () => { | ||||||
|  | 									this.visible = false | ||||||
|  | 									this.$emit('refreshDataList') | ||||||
|  | 								} | ||||||
|  | 							}) | ||||||
|  | 						} else { | ||||||
|  | 							this.$message.error(data.msg) | ||||||
|  | 						} | ||||||
|  | 					}) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										167
									
								
								src/views/modules/monitoring/equipmentFile.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										167
									
								
								src/views/modules/monitoring/equipmentFile.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,167 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="mod-config"> | ||||||
|  | 		<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)"> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-input v-model="dataForm.key" :placeholder="$t('parameter')" clearable></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-button @click="currentChangeHandle(1)">{{ $t('query') }}</el-button> | ||||||
|  | 				<el-button v-if="$hasPermission('monitoring:equipmenfile:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  |  | ||||||
|  | 		<base-table :data="dataList" :table-head-configs="tableConfigs" :max-height="calcMaxHeight(8)" /> | ||||||
|  | 		<el-pagination | ||||||
|  | 			@size-change="sizeChangeHandle" | ||||||
|  | 			@current-change="currentChangeHandle" | ||||||
|  | 			:current-page="pageIndex" | ||||||
|  | 			:page-sizes="[10, 20, 50, 100]" | ||||||
|  | 			:page-size="pageSize" | ||||||
|  | 			:total="totalPage" | ||||||
|  | 			layout="total, sizes, prev, pager, next, jumper" | ||||||
|  | 		> | ||||||
|  | 		</el-pagination> | ||||||
|  | 		<!-- 弹窗, 新增 / 修改 --> | ||||||
|  | 		<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import AddOrUpdate from './equipmentFile-add-or-update' | ||||||
|  | import i18n from '@/i18n' | ||||||
|  | import BaseTable from '@/components/base-table' | ||||||
|  | import TableOperateComponent from '@/components/base-table/components/operationComponent' | ||||||
|  | import TableTextComponent from '@/components/base-table/components/detailComponent' | ||||||
|  | import { calcMaxHeight } from '@/utils' | ||||||
|  | import { timeFilter } from '@/utils/filters' | ||||||
|  | const tableConfigs = [ | ||||||
|  | 	{ prop: 'id', name: '' }, | ||||||
|  | 	{ prop: 'equipmentId', name: '设备ID' }, | ||||||
|  | 	{ prop: 'fileId', name: '文件ID' }, | ||||||
|  | 	{ prop: 'description', name: i18n.t('desc') }, | ||||||
|  | 	{ prop: 'enabled', name: i18n.t('enabled') }, | ||||||
|  | 	{ prop: 'remark', name: i18n.t('remark') }, | ||||||
|  | 	{ prop: 'valid', name: i18n.t('delMark') }, | ||||||
|  | 	{ prop: 'creatorId', name: i18n.t('creator') }, | ||||||
|  | 	{ prop: 'creatorName', name: i18n.t('creatorName') }, | ||||||
|  | 	{ prop: 'createTime', name: i18n.t('createTime'), filter: timeFilter }, | ||||||
|  | 	{ prop: 'updaterId', name: i18n.t('updator') }, | ||||||
|  | 	{ prop: 'updaterName', name: i18n.t('updatorName') }, | ||||||
|  | 	{ prop: 'updateTime', name: i18n.t('updateTime'), filter: timeFilter }, | ||||||
|  | 	{ prop: 'version', name: i18n.t('version') }, | ||||||
|  | 	{ prop: 'typeCode', name: '文件类型编号' }, | ||||||
|  | 	{ prop: 'fileName', name: '文件名字' }, | ||||||
|  | 	{ prop: 'fileUrl', name: i18n.t('downloadurl') }, | ||||||
|  | 	{ prop: 'operations', name: i18n.t('handle'), fixed: 'right', width: 180, subcomponent: TableOperateComponent, options: ['edit', 'delete'] } | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			tableConfigs, | ||||||
|  | 			calcMaxHeight, | ||||||
|  | 			dataForm: { | ||||||
|  | 				key: '' | ||||||
|  | 			}, | ||||||
|  | 			dataList: [], | ||||||
|  | 			pageIndex: 1, | ||||||
|  | 			pageSize: 10, | ||||||
|  | 			totalPage: 0, | ||||||
|  | 			dataListLoading: false, | ||||||
|  | 			dataListSelections: [], | ||||||
|  | 			addOrUpdateVisible: false | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	components: { | ||||||
|  | 		AddOrUpdate, | ||||||
|  | 		BaseTable | ||||||
|  | 	}, | ||||||
|  | 	activated() { | ||||||
|  | 		this.getDataList() | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		// destroy dialog | ||||||
|  | 		handleDestroyDialog() { | ||||||
|  | 			setTimeout(() => { | ||||||
|  | 				this.addOrUpdateVisible= false | ||||||
|  | 			}, /** after dialog animated */ 200); | ||||||
|  | 		}, | ||||||
|  | 		// 获取数据列表 | ||||||
|  | 		getDataList() { | ||||||
|  | 			this.dataListLoading = true | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/equipmentFile/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams({ | ||||||
|  | 					page: this.pageIndex, | ||||||
|  | 					limit: this.pageSize, | ||||||
|  | 					key: this.dataForm.key | ||||||
|  | 				}) | ||||||
|  | 			}).then(({ data }) => { | ||||||
|  | 				if (data && data.code === 0) { | ||||||
|  | 					this.dataList = data.data.list | ||||||
|  | 					this.totalPage = data.data.total | ||||||
|  | 				} else { | ||||||
|  | 					this.dataList = [] | ||||||
|  | 					this.totalPage = 0 | ||||||
|  | 				} | ||||||
|  | 				this.dataListLoading = false | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 每页数 | ||||||
|  | 		sizeChangeHandle(val) { | ||||||
|  | 			this.pageSize = val | ||||||
|  | 			this.pageIndex = 1 | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 当前页 | ||||||
|  | 		currentChangeHandle(val) { | ||||||
|  | 			this.pageIndex = val | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 多选 | ||||||
|  | 		selectionChangeHandle(val) { | ||||||
|  | 			this.dataListSelections = val | ||||||
|  | 		}, | ||||||
|  | 		// 新增 / 修改 | ||||||
|  | 		addOrUpdateHandle(id) { | ||||||
|  | 			this.addOrUpdateVisible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs.addOrUpdate.init(id) | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 删除 | ||||||
|  | 		deleteHandle(id) { | ||||||
|  | 			var ids = id | ||||||
|  | 				? [id] | ||||||
|  | 				: this.dataListSelections.map(item => { | ||||||
|  | 						return item.id | ||||||
|  | 				  }) | ||||||
|  | 			this.$confirm(`${ i18n.t('prompt.info', { handle: id ? i18n.t('delete').toLowerCase() : i18n.t('deleteBatch').toLowerCase() }) }`, i18n.t('prompt.title'), { | ||||||
|  | 				confirmButtonText: i18n.t('confirm'), | ||||||
|  | 				cancelButtonText: i18n.t('cancel'), | ||||||
|  | 				type: 'warning' | ||||||
|  | 			}).then(() => { | ||||||
|  | 				this.$http({ | ||||||
|  | 					url: this.$http.adornUrl('/monitoring/equipmentFile'), | ||||||
|  | 					method: 'delete', | ||||||
|  | 					data: this.$http.adornData(ids, false, 'raw') | ||||||
|  | 				}).then(({ data }) => { | ||||||
|  | 					if (data && data.code === 0) { | ||||||
|  | 						this.$message({ | ||||||
|  | 							message: i18n.t('prompt.success'), | ||||||
|  | 							type: 'success', | ||||||
|  | 							duration: 1500, | ||||||
|  | 							onClose: () => { | ||||||
|  | 								this.getDataList() | ||||||
|  | 							} | ||||||
|  | 						}) | ||||||
|  | 					} else { | ||||||
|  | 						this.$message.error(data.msg) | ||||||
|  | 					} | ||||||
|  | 				}) | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										201
									
								
								src/views/modules/monitoring/equipmentGroup.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										201
									
								
								src/views/modules/monitoring/equipmentGroup.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,201 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="mod-config"> | ||||||
|  | 		<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)"> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-input v-model="dataForm.key" :placeholder="$t('eq.groupname') + ' / ' + $t('eq.groupcode')" clearable></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-button @click="currentChangeHandle(1)">{{ $t('query') }}</el-button> | ||||||
|  | 				<el-button v-if="$hasPermission('monitoring:equipmentgroup:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  |  | ||||||
|  | 		<base-table | ||||||
|  | 			:page="pageIndex" | ||||||
|  | 			:size="pageSize" | ||||||
|  | 			:data="dataList" | ||||||
|  | 			:table-head-configs="tableConfigs" | ||||||
|  | 			:max-height="calcMaxHeight(8)" | ||||||
|  | 			@operate-event="handleOperations" | ||||||
|  | 			@refreshDataList="getDataList" | ||||||
|  | 		/> | ||||||
|  | 		<el-pagination | ||||||
|  | 			@size-change="sizeChangeHandle" | ||||||
|  | 			@current-change="currentChangeHandle" | ||||||
|  | 			:current-page="pageIndex" | ||||||
|  | 			:page-sizes="[10, 20, 50, 100]" | ||||||
|  | 			:page-size="pageSize" | ||||||
|  | 			:total="totalPage" | ||||||
|  | 			layout="total, sizes, prev, pager, next, jumper" | ||||||
|  | 		> | ||||||
|  | 		</el-pagination> | ||||||
|  | 		<!-- 弹窗, 新增 / 修改 --> | ||||||
|  | 		<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" :configs="addOrUpdateConfigs" @refreshDataList="getDataList" @destory-dialog="handleDestroyDialog" /> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { calcMaxHeight } from '@/utils' | ||||||
|  | import { timeFilter } from '@/utils/filters' | ||||||
|  | import AddOrUpdate from '@/components/base-dialog/addOrUpdate' | ||||||
|  | // import AddOrUpdate from './equipmentGroup-add-or-update' | ||||||
|  | import i18n from '@/i18n' | ||||||
|  | import BaseTable from '@/components/base-table' | ||||||
|  | import TableOperateComponent from '@/components/base-table/components/operationComponent' | ||||||
|  | import TableTextComponent from '@/components/base-table/components/detailComponent' | ||||||
|  |  | ||||||
|  | const tableConfigs = [ | ||||||
|  | 	{ | ||||||
|  | 		type: 'index', | ||||||
|  | 		name: i18n.t('index') | ||||||
|  | 	}, | ||||||
|  | 	{ prop: 'createTime', name: i18n.t('createTime'), filter: timeFilter }, | ||||||
|  | 	{ prop: 'name', name: i18n.t('eq.groupname') }, | ||||||
|  | 	{ prop: 'code', name: i18n.t('eq.groupcode') }, | ||||||
|  | 	{ prop: 'remark', name: i18n.t('remark') }, | ||||||
|  | 	{ prop: 'alarm', name: i18n.t('alarm.name'), buttonContent: i18n.t('alarm.view'), subcomponent: TableTextComponent, actionName: 'view-alarm' }, | ||||||
|  | 	{ prop: 'operations', name: i18n.t('handle'), fixed: 'right', width: 180, subcomponent: TableOperateComponent, options: ['edit', 'delete'] } | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | const addOrUpdateConfigs = { | ||||||
|  | 	type: 'dialog', | ||||||
|  | 	infoUrl: '/monitoring/equipmentGroup', | ||||||
|  | 	fields: [{ name: 'name', required: true, label: i18n.t('eq.groupname') }, { name: 'code', required: true, label: i18n.t('eq.groupcode') }, 'remark'], | ||||||
|  | 	operations: [ | ||||||
|  | 		{ name: 'cancel', showAlways: true }, | ||||||
|  | 		{ name: 'save', url: '/monitoring/equipmentGroup', permission: 'monitoring:equipmentgroup:save', showOnEdit: false }, | ||||||
|  | 		{ name: 'update', url: '/monitoring/equipmentGroup', permission: 'monitoring:equipmentgroup:update', showOnEdit: true } | ||||||
|  | 	] | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			addOrUpdateConfigs, | ||||||
|  | 			calcMaxHeight, | ||||||
|  | 			tableConfigs, | ||||||
|  | 			dataForm: { | ||||||
|  | 				key: '' | ||||||
|  | 			}, | ||||||
|  | 			dataList: [], | ||||||
|  | 			pageIndex: 1, | ||||||
|  | 			pageSize: 10, | ||||||
|  | 			totalPage: 0, | ||||||
|  | 			dataListLoading: false, | ||||||
|  | 			dataListSelections: [], | ||||||
|  | 			addOrUpdateVisible: false | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	components: { | ||||||
|  | 		AddOrUpdate, | ||||||
|  | 		BaseTable | ||||||
|  | 	}, | ||||||
|  | 	activated() { | ||||||
|  | 		this.getDataList() | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		// destroy dialog | ||||||
|  | 		handleDestroyDialog() { | ||||||
|  | 			setTimeout(() => { | ||||||
|  | 				this.addOrUpdateVisible = false | ||||||
|  | 			}, /** after dialog animated */ 200) | ||||||
|  | 		}, | ||||||
|  | 		// 获取数据列表 | ||||||
|  | 		getDataList() { | ||||||
|  | 			this.addOrUpdateVisible = false | ||||||
|  | 			this.dataListLoading = true | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/equipmentGroup/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams({ | ||||||
|  | 					page: this.pageIndex, | ||||||
|  | 					limit: this.pageSize, | ||||||
|  | 					key: this.dataForm.key | ||||||
|  | 				}) | ||||||
|  | 			}).then(({ data }) => { | ||||||
|  | 				if (data && data.code === 0) { | ||||||
|  | 					this.dataList = data.data.list | ||||||
|  | 					this.totalPage = data.data.total | ||||||
|  | 				} else { | ||||||
|  | 					this.dataList = [] | ||||||
|  | 					this.totalPage = 0 | ||||||
|  | 				} | ||||||
|  | 				this.dataListLoading = false | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 每页数 | ||||||
|  | 		sizeChangeHandle(val) { | ||||||
|  | 			this.pageSize = val | ||||||
|  | 			this.pageIndex = 1 | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 当前页 | ||||||
|  | 		currentChangeHandle(val) { | ||||||
|  | 			this.pageIndex = val | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 多选 | ||||||
|  | 		selectionChangeHandle(val) { | ||||||
|  | 			this.dataListSelections = val | ||||||
|  | 		}, | ||||||
|  | 		handleOperations({ type, data: id }) { | ||||||
|  | 			switch (type) { | ||||||
|  | 				case 'view-alarm': | ||||||
|  | 					const { name, code } = this.dataList.find(item => item.id === id) | ||||||
|  | 					this.$router.push({ | ||||||
|  | 						name: 'monitoring-equipmentGroupAlarm', | ||||||
|  | 						params: { | ||||||
|  | 							groupName: name, | ||||||
|  | 							groupCode: code, | ||||||
|  | 							id | ||||||
|  | 						} | ||||||
|  | 					}) | ||||||
|  | 					break | ||||||
|  | 				case 'edit': | ||||||
|  | 					return this.addOrUpdateHandle(id) | ||||||
|  | 				case 'delete': | ||||||
|  | 					return this.deleteHandle(id) | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		// 新增 / 修改 | ||||||
|  | 		addOrUpdateHandle(id) { | ||||||
|  | 			this.addOrUpdateVisible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs.addOrUpdate.init(id) | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 删除 | ||||||
|  | 		deleteHandle(id) { | ||||||
|  | 			var ids = id | ||||||
|  | 				? [id] | ||||||
|  | 				: this.dataListSelections.map(item => { | ||||||
|  | 						return item.id | ||||||
|  | 				  }) | ||||||
|  | 			this.$confirm(`${i18n.t('prompt.info', { handle: id ? i18n.t('delete').toLowerCase() : i18n.t('deleteBatch').toLowerCase() })}`, i18n.t('prompt.title'), { | ||||||
|  | 				confirmButtonText: i18n.t('confirm'), | ||||||
|  | 				cancelButtonText: i18n.t('cancel'), | ||||||
|  | 				type: 'warning' | ||||||
|  | 			}).then(() => { | ||||||
|  | 				this.$http({ | ||||||
|  | 					url: this.$http.adornUrl('/monitoring/equipmentGroup'), | ||||||
|  | 					method: 'delete', | ||||||
|  | 					data: this.$http.adornData(ids, false, 'raw') | ||||||
|  | 				}).then(({ data }) => { | ||||||
|  | 					if (data && data.code === 0) { | ||||||
|  | 						this.$message({ | ||||||
|  | 							message: i18n.t('prompt.success'), | ||||||
|  | 							type: 'success', | ||||||
|  | 							duration: 1500, | ||||||
|  | 							onClose: () => { | ||||||
|  | 								this.getDataList() | ||||||
|  | 							} | ||||||
|  | 						}) | ||||||
|  | 					} else { | ||||||
|  | 						this.$message.error(data.msg) | ||||||
|  | 					} | ||||||
|  | 				}) | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										249
									
								
								src/views/modules/monitoring/equipmentGroupAlarm.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										249
									
								
								src/views/modules/monitoring/equipmentGroupAlarm.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,249 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="mod-config"> | ||||||
|  | 		<el-form :inline="true" :model="dataForm"> | ||||||
|  | 			<el-form-item :label="$t('eq.groupname')"> | ||||||
|  | 				<strong>{{ $route.params.groupName || '--' }}</strong></el-form-item | ||||||
|  | 			> | ||||||
|  |  | ||||||
|  | 			<el-form-item :label="$t('eq.groupcode')"> | ||||||
|  | 				<strong>{{ $route.params.groupCode || '--' }}</strong> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<!-- <el-form-item> | ||||||
|  | 				<el-input v-model="dataForm.key" :placeholder="$t('parameter')" clearable></el-input> | ||||||
|  | 			</el-form-item> --> | ||||||
|  | 			<br /> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<!-- 报警编码/内容检索 --> | ||||||
|  | 				<el-input :placeholder="$t('alarm.code') + '/' + $t('alarm.content')" v-model="dataForm.key" clearable /> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-button @click="currentChangeHandle(1)">{{ $t('query') }}</el-button> | ||||||
|  | 				<el-button v-if="$route.params.id && $hasPermission('monitoring:equipmentgroupalarm:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> | ||||||
|  | 				<!-- <el-button v-if="$hasPermission('monitoring:equipmentgroupalarm:delete')" type="danger" @click="deleteHandle()" :disabled="dataListSelections.length <= 0"> | ||||||
|  | 					批量删除 | ||||||
|  | 				</el-button> --> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  |  | ||||||
|  | 		<base-table | ||||||
|  | 			:page="pageIndex" | ||||||
|  | 			:size="pageSize" | ||||||
|  | 			:data="dataList" | ||||||
|  | 			:table-head-configs="tableConfigs" | ||||||
|  | 			:max-height="calcMaxHeight(8)" | ||||||
|  | 			@operate-event="handleOperations" | ||||||
|  | 			@refreshDataList="getDataList" | ||||||
|  | 		/> | ||||||
|  | 		<el-pagination | ||||||
|  | 			@size-change="sizeChangeHandle" | ||||||
|  | 			@current-change="currentChangeHandle" | ||||||
|  | 			:current-page="pageIndex" | ||||||
|  | 			:page-sizes="[10, 20, 50, 100]" | ||||||
|  | 			:page-size="pageSize" | ||||||
|  | 			:total="totalPage" | ||||||
|  | 			layout="total, sizes, prev, pager, next, jumper" | ||||||
|  | 		></el-pagination> | ||||||
|  | 		<!-- 弹窗, 新增 / 修改 --> | ||||||
|  | 		<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" :configs="addOrUpdateConfigs" @refreshDataList="getDataList" @destory-dialog="handleDestroyDialog" /> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { calcMaxHeight } from '@/utils' | ||||||
|  | import { timeFilter, dictFilter } from '@/utils/filters' | ||||||
|  | // import AddOrUpdate from './equipmentGroupAlarm-add-or-update' | ||||||
|  | import AddOrUpdate from '@/components/base-dialog/addOrUpdate' | ||||||
|  | import i18n from '@/i18n' | ||||||
|  | import BaseTable from '@/components/base-table' | ||||||
|  | import dictListMixin from '@/mixins/dictlist-module' | ||||||
|  | import TableOperateComponent from '@/components/base-table/components/operationComponent' | ||||||
|  | // import TableTextComponent from '@/components/base-table/components/detailComponent' | ||||||
|  |  | ||||||
|  | // const alarmTypeDictId = '1557925215454814210' | ||||||
|  | // const alarmLevelDictId = '1557925289517834242' | ||||||
|  | const dictEntries = { | ||||||
|  | 	alarmType: { value: '1557925215454814210', field: 'typeDictValue' }, // field 和下面 addOrUpdateConfigs 里对应 | ||||||
|  | 	alarmLevel: { value: '1557925289517834242', field: 'gradeDictValue' } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | const tableConfigs = [ | ||||||
|  | 	{ | ||||||
|  | 		type: 'index', | ||||||
|  | 		name: i18n.t('index') | ||||||
|  | 	}, | ||||||
|  | 	{ prop: 'createTime', name: i18n.t('createTime'), filter: timeFilter }, | ||||||
|  | 	{ prop: 'code', name: i18n.t('alarm.code') }, | ||||||
|  | 	{ prop: 'typeDictValue', name: i18n.t('alarm.type'), filter: dictFilter(dictEntries.alarmType.value) }, | ||||||
|  | 	{ prop: 'gradeDictValue', name: i18n.t('alarm.level'), filter: dictFilter(dictEntries.alarmLevel.value) }, | ||||||
|  | 	{ prop: 'alarmContent', name: i18n.t('alarm.content') }, | ||||||
|  | 	// { prop: 'externalCode', name: i18n.t('alarm.externalCode') }, | ||||||
|  | 	{ prop: 'description', name: i18n.t('alarm.description') }, | ||||||
|  | 	{ prop: 'remark', name: i18n.t('alarm.remark') }, | ||||||
|  | 	{ prop: 'operations', name: i18n.t('handle'), fixed: 'right', width: 180, subcomponent: TableOperateComponent, options: ['edit', 'delete'] } | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | const addOrUpdateConfigs = { | ||||||
|  | 	type: 'dialog', | ||||||
|  | 	infoUrl: '/monitoring/equipmentGroupAlarm', | ||||||
|  | 	fields: [ | ||||||
|  | 		{ name: 'code', label: i18n.t('alarm.code'), api: '/monitoring/equipmentGroupAlarm/getCode', required: true }, | ||||||
|  | 		{ name: 'typeDictValue', label: i18n.t('alarm.type'), type: 'select', options: [] }, | ||||||
|  | 		{ name: 'gradeDictValue', label: i18n.t('alarm.level'), type: 'select', options: [] }, | ||||||
|  | 		{ name: 'alarmContent', label: i18n.t('alarm.content'), required: true }, | ||||||
|  | 		{ name: 'description', label: i18n.t('alarm.description') }, | ||||||
|  | 		{ name: 'remark', label: i18n.t('alarm.remark') } | ||||||
|  | 		// { name: 'externalCode', label: i18n.t('alarm.externalCode') } | ||||||
|  | 	], | ||||||
|  | 	operations: [ | ||||||
|  | 		{ name: 'cancel', showAlways: true }, | ||||||
|  | 		{ name: 'save', url: '/monitoring/equipmentGroupAlarm', extraFields: { equipmentGroupId: null }, permission: 'monitoring:equipmentgroupalarm:save', showOnEdit: false }, | ||||||
|  | 		{ name: 'update', url: '/monitoring/equipmentGroupAlarm', extraFields: { equipmentGroupId: null }, permission: 'monitoring:equipmentgroupalarm:update', showOnEdit: true } | ||||||
|  | 	] | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	mixins: [dictListMixin], | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			addOrUpdateConfigs, | ||||||
|  | 			calcMaxHeight, | ||||||
|  | 			tableConfigs, | ||||||
|  | 			dataForm: { | ||||||
|  | 				key: '' | ||||||
|  | 			}, | ||||||
|  | 			dataList: [], | ||||||
|  | 			pageIndex: 1, | ||||||
|  | 			pageSize: 10, | ||||||
|  | 			totalPage: 0, | ||||||
|  | 			dataListLoading: false, | ||||||
|  | 			dataListSelections: [], | ||||||
|  | 			addOrUpdateVisible: false | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	components: { | ||||||
|  | 		AddOrUpdate, | ||||||
|  | 		BaseTable | ||||||
|  | 	}, | ||||||
|  | 	activated() { | ||||||
|  | 		this.getDictData() | ||||||
|  | 		this.getDataList() | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		// destroy dialog | ||||||
|  | 		handleDestroyDialog() { | ||||||
|  | 			setTimeout(() => { | ||||||
|  | 				this.addOrUpdateVisible= false | ||||||
|  | 			}, /** after dialog animated */ 200); | ||||||
|  | 		}, | ||||||
|  | 		// 获取字典数据 | ||||||
|  | 		getDictData() { | ||||||
|  | 			this.initDictList(Object.entries(dictEntries).map(([_, item]) => item.value)) | ||||||
|  | 			this.addOrUpdateConfigs.fields.forEach(item => { | ||||||
|  | 				if (item.options && Array.isArray(item.options)) { | ||||||
|  | 					let id | ||||||
|  | 					Object.entries(dictEntries).forEach(([_, d]) => { | ||||||
|  | 						if (d.field === item.name) { | ||||||
|  | 							id = d.value | ||||||
|  | 						} | ||||||
|  | 					}) | ||||||
|  | 					item.options = this.dictList[id] | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 获取数据列表 | ||||||
|  | 		getDataList() { | ||||||
|  | 			this.dataListLoading = true | ||||||
|  |  | ||||||
|  | 			const queryParams = { | ||||||
|  | 				page: this.pageIndex, | ||||||
|  | 				limit: this.pageSize, | ||||||
|  | 				groupId: this.$route.params.id | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			if (this.dataForm.key && this.dataForm.key.trim() !== '') queryParams.key = this.dataForm.key | ||||||
|  |  | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/equipmentGroupAlarm/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams(queryParams) | ||||||
|  | 			}).then(({ data }) => { | ||||||
|  | 				if (data && data.code === 0) { | ||||||
|  | 					this.dataList = data.data.list | ||||||
|  | 					this.totalPage = data.data.total | ||||||
|  | 				} else { | ||||||
|  | 					this.dataList = [] | ||||||
|  | 					this.totalPage = 0 | ||||||
|  | 				} | ||||||
|  | 				this.dataListLoading = false | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 每页数 | ||||||
|  | 		sizeChangeHandle(val) { | ||||||
|  | 			this.pageSize = val | ||||||
|  | 			this.pageIndex = 1 | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 当前页 | ||||||
|  | 		currentChangeHandle(val) { | ||||||
|  | 			this.pageIndex = val | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 多选 | ||||||
|  | 		selectionChangeHandle(val) { | ||||||
|  | 			this.dataListSelections = val | ||||||
|  | 		}, | ||||||
|  | 		handleOperations({ type, data: id }) { | ||||||
|  | 			switch (type) { | ||||||
|  | 				case 'edit': | ||||||
|  | 					return this.addOrUpdateHandle(id) | ||||||
|  | 				case 'delete': | ||||||
|  | 					return this.deleteHandle(id) | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		// 新增 / 修改 | ||||||
|  | 		addOrUpdateHandle(id) { | ||||||
|  | 			this.addOrUpdateConfigs.operations.forEach(item => { | ||||||
|  | 				if (item.extraFields) { | ||||||
|  | 					item.extraFields.equipmentGroupId = this.$route.params.id || null | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 			this.addOrUpdateVisible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs.addOrUpdate.init(id) | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 删除 | ||||||
|  | 		deleteHandle(id) { | ||||||
|  | 			var ids = id | ||||||
|  | 				? [id] | ||||||
|  | 				: this.dataListSelections.map(item => { | ||||||
|  | 						return item.id | ||||||
|  | 				  }) | ||||||
|  | 			this.$confirm(`${i18n.t('prompt.info', { handle: id ? i18n.t('delete').toLowerCase() : i18n.t('deleteBatch').toLowerCase() })}`, i18n.t('prompt.title'), { | ||||||
|  | 				confirmButtonText: i18n.t('confirm'), | ||||||
|  | 				cancelButtonText: i18n.t('cancel'), | ||||||
|  | 				type: 'warning' | ||||||
|  | 			}).then(() => { | ||||||
|  | 				this.$http({ | ||||||
|  | 					url: this.$http.adornUrl('/monitoring/equipmentGroupAlarm'), | ||||||
|  | 					method: 'delete', | ||||||
|  | 					data: this.$http.adornData(ids, false, 'raw') | ||||||
|  | 				}).then(({ data }) => { | ||||||
|  | 					if (data && data.code === 0) { | ||||||
|  | 						this.$message({ | ||||||
|  | 							message: i18n.t('prompt.success'), | ||||||
|  | 							type: 'success', | ||||||
|  | 							duration: 1500, | ||||||
|  | 							onClose: () => { | ||||||
|  | 								this.getDataList() | ||||||
|  | 							} | ||||||
|  | 						}) | ||||||
|  | 					} else { | ||||||
|  | 						this.$message.error(data.msg) | ||||||
|  | 					} | ||||||
|  | 				}) | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										103
									
								
								src/views/modules/monitoring/equipmentHistoricalParameters.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								src/views/modules/monitoring/equipmentHistoricalParameters.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,103 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="mod-config"> | ||||||
|  | 		<el-form :inline="true"> | ||||||
|  | 			<el-form-item :label="'当前设备id'"> | ||||||
|  | 				<strong>{{ $route.params.id }}</strong></el-form-item | ||||||
|  | 			> | ||||||
|  | 		</el-form> | ||||||
|  |  | ||||||
|  | 		<!-- <base-table :page="pageIndex" :size="pageSize" :data="dataList" :table-head-configs="tableConfigs" :max-height="calcMaxHeight(8)" @operate-event="handleOperations" @refreshDataList="getDataList" /> --> | ||||||
|  | 		<base-table :data="dataList" :table-head-configs="tableConfigs" :max-height="calcMaxHeight(8)" /> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { calcMaxHeight } from '@/utils' | ||||||
|  | import { timeFilter } from '@/utils/filters' | ||||||
|  | import AddOrUpdate from '@/components/base-dialog/addOrUpdate' | ||||||
|  | import i18n from '@/i18n' | ||||||
|  | import BaseTable from '@/components/base-table' | ||||||
|  | import { pick } from 'lodash/object' | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			calcMaxHeight, | ||||||
|  | 			tableConfigs: [], | ||||||
|  | 			dataList: [], | ||||||
|  | 			dataListLoading: false, | ||||||
|  | 			dataListSelections: [] | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	components: { | ||||||
|  | 		AddOrUpdate, | ||||||
|  | 		BaseTable | ||||||
|  | 	}, | ||||||
|  | 	activated() { | ||||||
|  | 		this.getDataList() | ||||||
|  | 	}, | ||||||
|  | 	mouted() { | ||||||
|  | 		this.getDataList() | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		// destroy dialog | ||||||
|  | 		handleDestroyDialog() { | ||||||
|  | 			setTimeout(() => { | ||||||
|  | 				this.addOrUpdateVisible= false | ||||||
|  | 			}, /** after dialog animated */ 200); | ||||||
|  | 		}, | ||||||
|  | 		// 获取数据列表 | ||||||
|  | 		getDataList() { | ||||||
|  | 			this.dataListLoading = true | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl(`/monitoring/equipmentValueMonitor/runLog/${this.$route.params.id}`), | ||||||
|  | 				method: 'get' | ||||||
|  | 			}).then(({ data: res }) => { | ||||||
|  | 				if ( | ||||||
|  | 					res && | ||||||
|  | 					res.code === 0 && | ||||||
|  | 					res.data && | ||||||
|  | 					res.data.length > 0 && | ||||||
|  | 					res.data[0].nameData && | ||||||
|  | 					res.data[0].nameData.length > 0 && | ||||||
|  | 					res.data[0].data && | ||||||
|  | 					res.data[0].data.length > 0 | ||||||
|  | 				) { | ||||||
|  | 					this.setTableProps(res.data[0].nameData) | ||||||
|  | 					this.setTableData(res.data[0].data) | ||||||
|  | 				} else { | ||||||
|  | 					this.dataList = [] | ||||||
|  | 				} | ||||||
|  | 				this.dataListLoading = false | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		setTableProps(nameData) { | ||||||
|  | 			this.tableConfigs = [ | ||||||
|  | 				{ | ||||||
|  | 					type: 'index', | ||||||
|  | 					name: i18n.t('index') | ||||||
|  | 				}, | ||||||
|  | 				{ prop: 'time', name: '时间', filter: timeFilter }, | ||||||
|  | 				{ prop: 'plcCode', name: 'PLC 编码' }, | ||||||
|  | 				{ prop: 'equName', name: '设备名称' }, | ||||||
|  | 				{ prop: 'equCode', name: '设备编码' }, | ||||||
|  | 				// ...['数值1', '数值2', '数值3'].map(name => { | ||||||
|  | 				// 	return { prop: name, name } | ||||||
|  | 				// }) | ||||||
|  | 				...Array.from(new Set(nameData.map(item => item.name))).map(name => ({ prop: name, name })) | ||||||
|  | 			] | ||||||
|  | 		}, | ||||||
|  | 		setTableData(data) { | ||||||
|  | 			this.dataList = data.map(item => { | ||||||
|  | 				const rowItem = pick(item, ['time', 'plcCode', 'equName', 'equCode']) | ||||||
|  | 				if (item.data && item.data.length > 0) { | ||||||
|  | 					item.data.forEach(param => { | ||||||
|  | 						rowItem[param.dynamicName] = param.dynamicValue | ||||||
|  | 					}) | ||||||
|  | 				} | ||||||
|  | 				return rowItem | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										202
									
								
								src/views/modules/monitoring/equipmentPlc.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										202
									
								
								src/views/modules/monitoring/equipmentPlc.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,202 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="mod-config"> | ||||||
|  | 		<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)"> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-input v-model="dataForm.key" :placeholder="$t('name') + ' / ' + $t('code')" clearable></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-button @click="currentChangeHandle(1)">{{ $t('query') }}</el-button> | ||||||
|  | 				<el-button v-if="$hasPermission('monitoring:equipmentplc:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  |  | ||||||
|  | 		<base-table :data="dataList" :table-head-configs="tableConfigs" :max-height="calcMaxHeight(8)" @operate-event="handleOperations" @refreshDataList="getDataList" /> | ||||||
|  | 		<el-pagination | ||||||
|  | 			@size-change="sizeChangeHandle" | ||||||
|  | 			@current-change="currentChangeHandle" | ||||||
|  | 			:current-page="pageIndex" | ||||||
|  | 			:page-sizes="[10, 20, 50, 100]" | ||||||
|  | 			:page-size="pageSize" | ||||||
|  | 			:total="totalPage" | ||||||
|  | 			layout="total, sizes, prev, pager, next, jumper" | ||||||
|  | 		> | ||||||
|  | 		</el-pagination> | ||||||
|  | 		<!-- 弹窗, 新增 / 修改 --> | ||||||
|  | 		<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" :configs="addOrUpdateConfigs" @refreshDataList="getDataList" @destory-dialog="handleDestroyDialog" /> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { calcMaxHeight } from '@/utils' | ||||||
|  | import { timeFilter } from '@/utils/filters' | ||||||
|  | // import AddOrUpdate from './equipmentPlc-add-or-update' | ||||||
|  | import AddOrUpdate from '@/components/base-dialog/addOrUpdate' | ||||||
|  | import i18n from '@/i18n' | ||||||
|  | import BaseTable from '@/components/base-table' | ||||||
|  | import TableOperateComponent from '@/components/base-table/components/operationComponent' | ||||||
|  | // import TableTextComponent from '@/components/base-table/components/detailComponent' | ||||||
|  |  | ||||||
|  | const tableConfigs = [ | ||||||
|  | 	{ type: 'index', width: 100, name: i18n.t('index') }, | ||||||
|  | 	{ prop: 'code', name: i18n.t('code') }, | ||||||
|  | 	{ prop: 'name', name: i18n.t('name') }, | ||||||
|  | 	{ prop: 'enName', name: i18n.t('enname') }, | ||||||
|  | 	{ prop: 'description', name: i18n.t('desc') }, | ||||||
|  | 	{ prop: 'barcode', name: i18n.t('eq.plcbarcode') }, | ||||||
|  | 	{ prop: 'collection', name: i18n.t('collectOrNot'), filter: val => ({ 0: i18n.t('notCollect'), 1: i18n.t('collect') }[val]) }, | ||||||
|  | 	{ prop: 'ip', name: 'IP' }, | ||||||
|  | 	{ prop: 'port', name: i18n.t('eq.port') }, | ||||||
|  | 	{ prop: 'remark', name: i18n.t('remark') }, | ||||||
|  | 	{ prop: 'operations', name: i18n.t('handle'), fixed: 'right', width: 180, subcomponent: TableOperateComponent, options: ['edit', 'delete'] } | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | const addOrUpdateConfigs = { | ||||||
|  | 	type: 'dialog', // dialog | drawer | page | ||||||
|  | 	infoUrl: '/monitoring/equipmentPlc', | ||||||
|  | 	fields: [ | ||||||
|  | 		{ name: 'name', required: true }, | ||||||
|  | 		{ name: 'code', required: true }, | ||||||
|  | 		{ name: 'enName', label: i18n.t('enname') }, | ||||||
|  | 		{ | ||||||
|  | 			name: 'collection', | ||||||
|  | 			label: i18n.t('collectOrNot'), | ||||||
|  | 			required: true, | ||||||
|  | 			type: 'select', | ||||||
|  | 			options: [ | ||||||
|  | 				{ label: i18n.t('collect'), value: 1 }, | ||||||
|  | 				{ label: i18n.t('notCollect'), value: 0 } | ||||||
|  | 			] | ||||||
|  | 		}, | ||||||
|  | 		{ name: 'ip', label: 'IP', required: true, placeholder: '0.0.0.0' }, | ||||||
|  | 		{ name: 'port', label: i18n.t('eq.port'), placeholder: '443' }, | ||||||
|  | 		'description', | ||||||
|  | 		'remark', | ||||||
|  | 		{ name: 'barcode', label: i18n.t('eq.plcbarcode'), span: 24 } | ||||||
|  | 	], | ||||||
|  | 	operations: [ | ||||||
|  | 		{ name: 'cancel', url: true, showAlways: true }, | ||||||
|  | 		{ name: 'save', url: '/monitoring/equipmentPlc', permission: 'monitoring:equipmentplc:save', showOnEdit: false }, | ||||||
|  | 		{ name: 'update', url: '/monitoring/equipmentPlc', permission: 'monitoring:equipmentplc:update', showOnEdit: true } | ||||||
|  | 	] | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			tableConfigs, | ||||||
|  | 			calcMaxHeight, | ||||||
|  | 			addOrUpdateConfigs, | ||||||
|  | 			dataForm: { | ||||||
|  | 				key: '' | ||||||
|  | 			}, | ||||||
|  | 			dataList: [], | ||||||
|  | 			pageIndex: 1, | ||||||
|  | 			pageSize: 10, | ||||||
|  | 			totalPage: 0, | ||||||
|  | 			dataListLoading: false, | ||||||
|  | 			dataListSelections: [], | ||||||
|  | 			addOrUpdateVisible: false | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	components: { | ||||||
|  | 		AddOrUpdate, | ||||||
|  | 		BaseTable | ||||||
|  | 	}, | ||||||
|  | 	activated() { | ||||||
|  | 		this.getDataList() | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		// destroy dialog | ||||||
|  | 		handleDestroyDialog() { | ||||||
|  | 			setTimeout(() => { | ||||||
|  | 				this.addOrUpdateVisible= false | ||||||
|  | 			}, /** after dialog animated */ 200); | ||||||
|  | 		}, | ||||||
|  | 		//handleOperations | ||||||
|  | 		handleOperations({ type, data: id }) { | ||||||
|  | 			switch (type) { | ||||||
|  | 				case 'edit': | ||||||
|  | 					return this.addOrUpdateHandle(id) | ||||||
|  | 				case 'delete': | ||||||
|  | 					return this.deleteHandle(id) | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		// 获取数据列表 | ||||||
|  | 		getDataList() { | ||||||
|  | 			this.dataListLoading = true | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/equipmentPlc/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams({ | ||||||
|  | 					page: this.pageIndex, | ||||||
|  | 					limit: this.pageSize, | ||||||
|  | 					key: this.dataForm.key | ||||||
|  | 				}) | ||||||
|  | 			}).then(({ data }) => { | ||||||
|  | 				if (data && data.code === 0) { | ||||||
|  | 					this.dataList = data.data.list | ||||||
|  | 					this.totalPage = data.data.total | ||||||
|  | 				} else { | ||||||
|  | 					this.dataList = [] | ||||||
|  | 					this.totalPage = 0 | ||||||
|  | 				} | ||||||
|  | 				this.dataListLoading = false | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 每页数 | ||||||
|  | 		sizeChangeHandle(val) { | ||||||
|  | 			this.pageSize = val | ||||||
|  | 			this.pageIndex = 1 | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 当前页 | ||||||
|  | 		currentChangeHandle(val) { | ||||||
|  | 			this.pageIndex = val | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 多选 | ||||||
|  | 		selectionChangeHandle(val) { | ||||||
|  | 			this.dataListSelections = val | ||||||
|  | 		}, | ||||||
|  | 		// 新增 / 修改 | ||||||
|  | 		addOrUpdateHandle(id) { | ||||||
|  | 			this.addOrUpdateVisible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs.addOrUpdate.init(id) | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 删除 | ||||||
|  | 		deleteHandle(id) { | ||||||
|  | 			var ids = id | ||||||
|  | 				? [id] | ||||||
|  | 				: this.dataListSelections.map(item => { | ||||||
|  | 						return item.id | ||||||
|  | 				  }) | ||||||
|  | 			this.$confirm(`${i18n.t('prompt.info', { handle: id ? i18n.t('delete').toLowerCase() : i18n.t('deleteBatch').toLowerCase() })}`, i18n.t('prompt.title'), { | ||||||
|  | 				confirmButtonText: i18n.t('confirm'), | ||||||
|  | 				cancelButtonText: i18n.t('cancel'), | ||||||
|  | 				type: 'warning' | ||||||
|  | 			}).then(() => { | ||||||
|  | 				this.$http({ | ||||||
|  | 					url: this.$http.adornUrl('/monitoring/equipmentPlc'), | ||||||
|  | 					method: 'delete', | ||||||
|  | 					data: this.$http.adornData(ids, false, 'raw') | ||||||
|  | 				}).then(({ data }) => { | ||||||
|  | 					if (data && data.code === 0) { | ||||||
|  | 						this.$message({ | ||||||
|  | 							message: i18n.t('prompt.success'), | ||||||
|  | 							type: 'success', | ||||||
|  | 							duration: 1500, | ||||||
|  | 							onClose: () => { | ||||||
|  | 								this.getDataList() | ||||||
|  | 							} | ||||||
|  | 						}) | ||||||
|  | 					} else { | ||||||
|  | 						this.$message.error(data.msg) | ||||||
|  | 					} | ||||||
|  | 				}) | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										266
									
								
								src/views/modules/monitoring/equipmentPlcConnect.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										266
									
								
								src/views/modules/monitoring/equipmentPlcConnect.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,266 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="mod-config"> | ||||||
|  | 		<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)"> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-input v-model="dataForm.key" :placeholder="$t('eq.name') + ' / ' + $t('eq.code')" clearable></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-button @click="currentChangeHandle(1)">{{ $t('query') }}</el-button> | ||||||
|  | 				<el-button v-if="$hasPermission('monitoring:equipmentplcconnect:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  |  | ||||||
|  | 		<base-table :page="pageIndex" :size="pageSize" :data="dataList" :table-head-configs="tableConfigs" :max-height="calcMaxHeight(8)" @operate-event="handleOperations" @refreshDataList="getDataList" /> | ||||||
|  |  | ||||||
|  | 		<el-pagination | ||||||
|  | 			@size-change="sizeChangeHandle" | ||||||
|  | 			@current-change="currentChangeHandle" | ||||||
|  | 			:current-page="pageIndex" | ||||||
|  | 			:page-sizes="[10, 20, 50, 100]" | ||||||
|  | 			:page-size="pageSize" | ||||||
|  | 			:total="totalPage" | ||||||
|  | 			layout="total, sizes, prev, pager, next, jumper" | ||||||
|  | 		> | ||||||
|  | 		</el-pagination> | ||||||
|  | 		<!-- 弹窗, 新增 / 修改 --> | ||||||
|  | 		<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" :configs="addOrUpdateConfigs" @refreshDataList="getDataList" @destory-dialog="handleDestroyDialog" /> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { calcMaxHeight } from '@/utils' | ||||||
|  | // import { timeFilter } from '@/utils/filters' | ||||||
|  | // import AddOrUpdate from './equipmentPlcConnect-add-or-update' | ||||||
|  | import AddOrUpdate from '@/components/base-dialog/addOrUpdate' | ||||||
|  | import i18n from '@/i18n' | ||||||
|  | import BaseTable from '@/components/base-table' | ||||||
|  | import TableOperateComponent from '@/components/base-table/components/operationComponent' | ||||||
|  | // import TableTextComponent from '@/components/base-table/components/detailComponent' | ||||||
|  | import { dictFilter } from '@/utils/filters' | ||||||
|  | // import axios from '@/utils/request.js' | ||||||
|  |  | ||||||
|  | const tableConfigs = [ | ||||||
|  | 	{ type: 'index', width: 100, name: i18n.t('index') }, | ||||||
|  | 	{ prop: 'lineName', name: i18n.t('pl.title') }, | ||||||
|  | 	{ prop: 'sectionName', name: i18n.t('ws.title') }, | ||||||
|  | 	{ prop: 'equName', name: i18n.t('equipment') }, | ||||||
|  | 	{ prop: 'equCode', name: i18n.t('eq.code') }, | ||||||
|  | 	{ prop: 'plcCode', name: i18n.t('eq.plccode') }, | ||||||
|  | 	{ prop: 'plcName', name: i18n.t('eq.plcname') }, | ||||||
|  | 	{ prop: 'plcIp', name: 'PLC IP' }, | ||||||
|  | 	{ prop: 'operations', name: i18n.t('handle'), fixed: 'right', width: 180, subcomponent: TableOperateComponent, options: ['edit', 'delete'] } | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | const UnitDictTypeId = '1557173812109242370' | ||||||
|  | const getUnitList = function() { | ||||||
|  | 	const dl = JSON.parse(localStorage.getItem('dictList'))[UnitDictTypeId] || [] | ||||||
|  | 	return dl.map(item => ({ label: item.dictLabel, value: item.dictValue })) | ||||||
|  | } | ||||||
|  | const addOrUpdateConfigs = { | ||||||
|  | 	type: 'dialog', | ||||||
|  | 	infoUrl: '/monitoring/equipmentPlcConnect', | ||||||
|  | 	fields: [ | ||||||
|  | 		{ name: 'equipmentId', label: i18n.t('equipment'), required: true, type: 'select', options: [] }, | ||||||
|  | 		{ name: 'plcId', label: i18n.t('eq.plcname'), required: true, type: 'select', options: [] } | ||||||
|  | 	], | ||||||
|  | 	operations: [ | ||||||
|  | 		{ name: 'cancel', url: true, showAlways: true }, | ||||||
|  | 		{ name: 'save', url: '/monitoring/equipmentPlcConnect', permission: 'monitoring:equipmentplcconnect:save', showOnEdit: false }, | ||||||
|  | 		{ name: 'update', url: '/monitoring/equipmentPlcConnect', permission: 'monitoring:equipmentplcconnect:update', showOnEdit: true } | ||||||
|  | 	], | ||||||
|  | 	subtable: { | ||||||
|  | 		title: i18n.t('params.plctitle'), | ||||||
|  | 		url: '/monitoring/equipmentPlcParam', | ||||||
|  | 		relatedField: 'plcConId', | ||||||
|  | 		tableConfigs: [ | ||||||
|  | 			{ type: 'index', width: 100, name: i18n.t('index') }, | ||||||
|  | 			{ prop: 'paramCode', name: i18n.t('params.code'), formField: true, rules: [{ required: true, message: i18n.t('required'), trigger: 'blur' }] }, | ||||||
|  | 			{ prop: 'paramName', name: i18n.t('params.name'), formField: true, rules: [{ required: true, message: i18n.t('required'), trigger: 'blur' }] }, | ||||||
|  | 			{ prop: 'paramAddress', name: i18n.t('paramUrl'), formField: true }, | ||||||
|  | 			{ prop: 'unitDictValue', name: i18n.t('unit'), filter: dictFilter(UnitDictTypeId), formField: true, formType: 'select', formOptions: getUnitList() }, | ||||||
|  | 			{ prop: 'minValue', name: i18n.t('min'), formField: true }, | ||||||
|  | 			{ prop: 'maxValue', name: i18n.t('max'), formField: true }, | ||||||
|  | 			{ prop: 'defaultValue', name: i18n.t('params.paramStdValue'), formField: true }, | ||||||
|  | 			{ prop: 'description', name: i18n.t('desc'), formField: true }, | ||||||
|  | 			{ | ||||||
|  | 				prop: 'enabled', | ||||||
|  | 				name: i18n.t('enabled'), | ||||||
|  | 				filter: val => [i18n.t('disable'), i18n.t('enable')][+val], | ||||||
|  | 				// filter: val => ({0:i18n.t('disable'), 1:i18n.t('enable')}[+val]), | ||||||
|  | 				rules: [{ required: true, message: i18n.t('required'), trigger: 'blur' }], | ||||||
|  | 				formField: true, | ||||||
|  | 				formType: 'select', | ||||||
|  | 				formOptions: [ | ||||||
|  | 					{ value: 0, label: i18n.t('disable') }, | ||||||
|  | 					{ value: 1, label: i18n.t('enable') } | ||||||
|  | 				] | ||||||
|  | 			}, | ||||||
|  | 			{ prop: 'remark', name: i18n.t('remark'), formField: true }, | ||||||
|  | 			{ | ||||||
|  | 				prop: 'collection', | ||||||
|  | 				name: i18n.t('collectOrNot'), | ||||||
|  | 				filter: val => [i18n.t('notCollect'), i18n.t('collect')][+val], | ||||||
|  | 				rules: [{ required: true, message: i18n.t('required'), trigger: 'blur' }], | ||||||
|  | 				formField: true, | ||||||
|  | 				formType: 'select', | ||||||
|  | 				formOptions: [ | ||||||
|  | 					{ value: 0, label: i18n.t('notCollect') }, | ||||||
|  | 					{ value: 1, label: i18n.t('collect') } | ||||||
|  | 				] | ||||||
|  | 			}, | ||||||
|  | 			{ prop: 'operations', name: i18n.t('handle'), fixed: 'right', width: 180, subcomponent: TableOperateComponent, options: ['edit', 'delete'] } | ||||||
|  | 		] | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			addOrUpdateConfigs, | ||||||
|  | 			calcMaxHeight, | ||||||
|  | 			tableConfigs, | ||||||
|  | 			dataForm: { | ||||||
|  | 				key: '' | ||||||
|  | 			}, | ||||||
|  | 			dataList: [], | ||||||
|  | 			pageIndex: 1, | ||||||
|  | 			pageSize: 10, | ||||||
|  | 			totalPage: 0, | ||||||
|  | 			dataListLoading: false, | ||||||
|  | 			dataListSelections: [], | ||||||
|  | 			addOrUpdateVisible: false | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	components: { | ||||||
|  | 		AddOrUpdate, | ||||||
|  | 		BaseTable | ||||||
|  | 	}, | ||||||
|  | 	activated() { | ||||||
|  | 		this.getEqList() | ||||||
|  | 		this.getPlcList() | ||||||
|  | 		this.getDataList() | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		// destroy dialog | ||||||
|  | 		handleDestroyDialog() { | ||||||
|  | 			setTimeout(() => { | ||||||
|  | 				this.addOrUpdateVisible= false | ||||||
|  | 			}, /** after dialog animated */ 200); | ||||||
|  | 		}, | ||||||
|  | 		// 设备列表 | ||||||
|  | 		getEqList() { | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/equipment/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams({ | ||||||
|  | 					// page: this.pageIndex, | ||||||
|  | 					// limit: this.pageSize, | ||||||
|  | 					// key: this.dataForm.key | ||||||
|  | 				}) | ||||||
|  | 			}).then(({ data }) => { | ||||||
|  | 				const eqConfig = this.addOrUpdateConfigs.fields.find(item => item.name === 'equipmentId') | ||||||
|  | 				eqConfig.options = data.data?.list?.map(item => ({ value: item.id, label: item.name })) || [] | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// plc 列表 | ||||||
|  | 		getPlcList() { | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/equipmentPlc/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams({ | ||||||
|  | 					// page: this.pageIndex, | ||||||
|  | 					// limit: this.pageSize, | ||||||
|  | 					// key: this.dataForm.key | ||||||
|  | 				}) | ||||||
|  | 			}).then(({ data }) => { | ||||||
|  | 				const plcConfig = this.addOrUpdateConfigs.fields.find(item => item.name === 'plcId') | ||||||
|  | 				plcConfig.options = data.data?.list?.map(item => ({ value: item.id, label: item.name })) || [] | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		handleOperations({ type, data: id }) { | ||||||
|  | 			switch (type) { | ||||||
|  | 				case 'edit': | ||||||
|  | 					return this.addOrUpdateHandle(id) | ||||||
|  | 				case 'delete': | ||||||
|  | 					return this.deleteHandle(id) | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		// 获取数据列表 | ||||||
|  | 		getDataList() { | ||||||
|  | 			this.dataListLoading = true | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/equipmentPlcConnect/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams({ | ||||||
|  | 					page: this.pageIndex, | ||||||
|  | 					limit: this.pageSize, | ||||||
|  | 					key: this.dataForm.key | ||||||
|  | 				}) | ||||||
|  | 			}).then(({ data }) => { | ||||||
|  | 				if (data && data.code === 0) { | ||||||
|  | 					this.dataList = data.data.list | ||||||
|  | 					this.totalPage = data.data.total | ||||||
|  | 				} else { | ||||||
|  | 					this.dataList = [] | ||||||
|  | 					this.totalPage = 0 | ||||||
|  | 				} | ||||||
|  | 				this.dataListLoading = false | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 每页数 | ||||||
|  | 		sizeChangeHandle(val) { | ||||||
|  | 			this.pageSize = val | ||||||
|  | 			this.pageIndex = 1 | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 当前页 | ||||||
|  | 		currentChangeHandle(val) { | ||||||
|  | 			this.pageIndex = val | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 多选 | ||||||
|  | 		selectionChangeHandle(val) { | ||||||
|  | 			this.dataListSelections = val | ||||||
|  | 		}, | ||||||
|  | 		// 新增 / 修改 | ||||||
|  | 		addOrUpdateHandle(id) { | ||||||
|  | 			this.addOrUpdateVisible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs.addOrUpdate.init(id) | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 删除 | ||||||
|  | 		deleteHandle(id) { | ||||||
|  | 			var ids = id | ||||||
|  | 				? [id] | ||||||
|  | 				: this.dataListSelections.map(item => { | ||||||
|  | 						return item.id | ||||||
|  | 				  }) | ||||||
|  | 			this.$confirm(`${i18n.t('prompt.info', { handle: id ? i18n.t('delete').toLowerCase() : i18n.t('deleteBatch').toLowerCase() })}`, i18n.t('prompt.title'), { | ||||||
|  | 				confirmButtonText: i18n.t('confirm'), | ||||||
|  | 				cancelButtonText: i18n.t('cancel'), | ||||||
|  | 				type: 'warning' | ||||||
|  | 			}).then(() => { | ||||||
|  | 				this.$http({ | ||||||
|  | 					url: this.$http.adornUrl('/monitoring/equipmentPlcConnect'), | ||||||
|  | 					method: 'delete', | ||||||
|  | 					data: this.$http.adornData(ids, false, 'raw') | ||||||
|  | 				}).then(({ data }) => { | ||||||
|  | 					if (data && data.code === 0) { | ||||||
|  | 						this.$message({ | ||||||
|  | 							message: i18n.t('prompt.success'), | ||||||
|  | 							type: 'success', | ||||||
|  | 							duration: 1500, | ||||||
|  | 							onClose: () => { | ||||||
|  | 								this.getDataList() | ||||||
|  | 							} | ||||||
|  | 						}) | ||||||
|  | 					} else { | ||||||
|  | 						this.$message.error(data.msg) | ||||||
|  | 					} | ||||||
|  | 				}) | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										254
									
								
								src/views/modules/monitoring/equipmentPlcParam-add-or-update.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										254
									
								
								src/views/modules/monitoring/equipmentPlcParam-add-or-update.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,254 @@ | |||||||
|  | <template> | ||||||
|  | 	<el-dialog :title="!dataForm.id ? i18n.t('add') : i18n.t('update')" :close-on-click-modal="false" :visible.sync="visible"> | ||||||
|  | 		<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" label-width="80px"> | ||||||
|  | 			<el-form-item label="plc连接表ID" prop="plcConId"> | ||||||
|  | 				<el-input v-model="dataForm.plcConId" placeholder="plc连接表ID"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="类型:status、data、constant" prop="type"> | ||||||
|  | 				<el-input v-model="dataForm.type" placeholder="类型:status、data、constant"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="参数编码" prop="paramCode"> | ||||||
|  | 				<el-input v-model="dataForm.paramCode" placeholder="参数编码"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="参数名称" prop="paramName"> | ||||||
|  | 				<el-input v-model="dataForm.paramName" placeholder="参数名称"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="参数地址,对应实时数据库表的列名" prop="paramAddress"> | ||||||
|  | 				<el-input v-model="dataForm.paramAddress" placeholder="参数地址,对应实时数据库表的列名"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="参数值类型:int、long、boolean、string、list 暂不使用" prop="valueType"> | ||||||
|  | 				<el-input v-model="dataForm.valueType" placeholder="参数值类型:int、long、boolean、string、list 暂不使用"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="单位 关联数据字典表label_value" prop="unitDictValue"> | ||||||
|  | 				<el-input v-model="dataForm.unitDictValue" placeholder="单位 关联数据字典表label_value"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="最小值" prop="minValue"> | ||||||
|  | 				<el-input v-model="dataForm.minValue" placeholder="最小值"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="最大值" prop="maxValue"> | ||||||
|  | 				<el-input v-model="dataForm.maxValue" placeholder="最大值"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="参数设定标准值" prop="defaultValue"> | ||||||
|  | 				<el-input v-model="dataForm.defaultValue" placeholder="参数设定标准值"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('desc')" prop="description"> | ||||||
|  | 				<el-input v-model="dataForm.description" :placeholder="$t('desc')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="启用状态:0 、停用,1、启用" prop="enabled"> | ||||||
|  | 				<el-input v-model="dataForm.enabled" placeholder="启用状态:0 、停用,1、启用"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="备注" prop="remark"> | ||||||
|  | 				<el-input v-model="dataForm.remark" placeholder="备注"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="删除标志,是否有效:1 可用 0不可用" prop="valid"> | ||||||
|  | 				<el-input v-model="dataForm.valid" placeholder="删除标志,是否有效:1 可用 0不可用"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('creator')" prop="creatorId"> | ||||||
|  | 				<el-input v-model="dataForm.creatorId" :placeholder="$t('creator')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('creatorName')" prop="creatorName"> | ||||||
|  | 				<el-input v-model="dataForm.creatorName" :placeholder="$t('creatorName')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="创建时间" prop="createTime"> | ||||||
|  | 				<el-input v-model="dataForm.createTime" placeholder="创建时间"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('updator')" prop="updaterId"> | ||||||
|  | 				<el-input v-model="dataForm.updaterId" :placeholder="$t('updator')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('updatorName')" prop="updaterName"> | ||||||
|  | 				<el-input v-model="dataForm.updaterName" :placeholder="$t('updatorName')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('updateTime')" prop="updateTime"> | ||||||
|  | 				<el-input v-model="dataForm.updateTime" :placeholder="$t('updateTime')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('version')" prop="version"> | ||||||
|  | 				<el-input v-model="dataForm.version" :placeholder="$t('version')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="0 代表不采集, 1 代表采集" prop="collection"> | ||||||
|  | 				<el-input v-model="dataForm.collection" placeholder="0 代表不采集, 1 代表采集"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="采集周期(s) 暂不使用" prop="collectionCycle"> | ||||||
|  | 				<el-input v-model="dataForm.collectionCycle" placeholder="采集周期(s) 暂不使用"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="上报周期(s) 暂不使用" prop="reportingCycle"> | ||||||
|  | 				<el-input v-model="dataForm.reportingCycle" placeholder="上报周期(s) 暂不使用"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="上报方式 暂不使用" prop="reportingMethod"> | ||||||
|  | 				<el-input v-model="dataForm.reportingMethod" placeholder="上报方式 暂不使用"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="上报编码 暂不使用" prop="reportingCode"> | ||||||
|  | 				<el-input v-model="dataForm.reportingCode" placeholder="上报编码 暂不使用"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  | 		<span slot="footer" class="dialog-footer"> | ||||||
|  | 			<el-button @click="visible = false">{{ $t('cancel') }}</el-button> | ||||||
|  | 			<el-button type="primary" @click="dataFormSubmit()">{{ $t('confirm') }}</el-button> | ||||||
|  | 		</span> | ||||||
|  | 	</el-dialog> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			visible: false, | ||||||
|  | 			dataForm: { | ||||||
|  | 				id: 0, | ||||||
|  | 				plcConId: '', | ||||||
|  | 				type: '', | ||||||
|  | 				paramCode: '', | ||||||
|  | 				paramName: '', | ||||||
|  | 				paramAddress: '', | ||||||
|  | 				valueType: '', | ||||||
|  | 				unitDictValue: '', | ||||||
|  | 				minValue: '', | ||||||
|  | 				maxValue: '', | ||||||
|  | 				defaultValue: '', | ||||||
|  | 				description: '', | ||||||
|  | 				enabled: '', | ||||||
|  | 				remark: '', | ||||||
|  | 				valid: '', | ||||||
|  | 				creatorId: '', | ||||||
|  | 				creatorName: '', | ||||||
|  | 				createTime: '', | ||||||
|  | 				updaterId: '', | ||||||
|  | 				updaterName: '', | ||||||
|  | 				updateTime: '', | ||||||
|  | 				version: '', | ||||||
|  | 				collection: '', | ||||||
|  | 				collectionCycle: '', | ||||||
|  | 				reportingCycle: '', | ||||||
|  | 				reportingMethod: '', | ||||||
|  | 				reportingCode: '' | ||||||
|  | 			}, | ||||||
|  | 			dataRule: { | ||||||
|  | 				plcConId: [{ required: true, message: 'plc连接表ID不能为空', trigger: 'blur' }], | ||||||
|  | 				type: [{ required: true, message: '类型:status、data、constant不能为空', trigger: 'blur' }], | ||||||
|  | 				paramCode: [{ required: true, message: '参数编码不能为空', trigger: 'blur' }], | ||||||
|  | 				paramName: [{ required: true, message: '参数名称不能为空', trigger: 'blur' }], | ||||||
|  | 				paramAddress: [{ required: true, message: '参数地址,对应实时数据库表的列名不能为空', trigger: 'blur' }], | ||||||
|  | 				valueType: [{ required: true, message: '参数值类型:int、long、boolean、string、list 暂不使用不能为空', trigger: 'blur' }], | ||||||
|  | 				unitDictValue: [{ required: true, message: '单位 关联数据字典表label_value不能为空', trigger: 'blur' }], | ||||||
|  | 				minValue: [{ required: true, message: '最小值不能为空', trigger: 'blur' }], | ||||||
|  | 				maxValue: [{ required: true, message: '最大值不能为空', trigger: 'blur' }], | ||||||
|  | 				defaultValue: [{ required: true, message: '参数设定标准值不能为空', trigger: 'blur' }], | ||||||
|  | 				description: [{ required: true, message: '描述不能为空', trigger: 'blur' }], | ||||||
|  | 				enabled: [{ required: true, message: '启用状态:0 、停用,1、启用不能为空', trigger: 'blur' }], | ||||||
|  | 				remark: [{ required: true, message: '备注不能为空', trigger: 'blur' }], | ||||||
|  | 				valid: [{ required: true, message: '删除标志,是否有效:1 可用 0不可用不能为空', trigger: 'blur' }], | ||||||
|  | 				creatorId: [{ required: true, message: '创建人不能为空', trigger: 'blur' }], | ||||||
|  | 				creatorName: [{ required: true, message: '创建人姓名不能为空', trigger: 'blur' }], | ||||||
|  | 				createTime: [{ required: true, message: '创建时间不能为空', trigger: 'blur' }], | ||||||
|  | 				updaterId: [{ required: true, message: '更新人不能为空', trigger: 'blur' }], | ||||||
|  | 				updaterName: [{ required: true, message: '更新人姓名不能为空', trigger: 'blur' }], | ||||||
|  | 				updateTime: [{ required: true, message: '更新时间不能为空', trigger: 'blur' }], | ||||||
|  | 				version: [{ required: true, message: '版本号不能为空', trigger: 'blur' }], | ||||||
|  | 				collection: [{ required: true, message: '0 代表不采集, 1 代表采集不能为空', trigger: 'blur' }], | ||||||
|  | 				collectionCycle: [{ required: true, message: '采集周期(s) 暂不使用不能为空', trigger: 'blur' }], | ||||||
|  | 				reportingCycle: [{ required: true, message: '上报周期(s) 暂不使用不能为空', trigger: 'blur' }], | ||||||
|  | 				reportingMethod: [{ required: true, message: '上报方式 暂不使用不能为空', trigger: 'blur' }], | ||||||
|  | 				reportingCode: [{ required: true, message: '上报编码 暂不使用不能为空', trigger: 'blur' }] | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		init(id) { | ||||||
|  | 			this.dataForm.id = id || 0 | ||||||
|  | 			this.visible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs['dataForm'].resetFields() | ||||||
|  | 				if (this.dataForm.id) { | ||||||
|  | 					this.$http({ | ||||||
|  | 						url: this.$http.adornUrl(`/monitoring/equipmentPlcParam/${this.dataForm.id}`), | ||||||
|  | 						method: 'get', | ||||||
|  | 						params: this.$http.adornParams() | ||||||
|  | 					}).then(({ data }) => { | ||||||
|  | 						if (data && data.code === 0) { | ||||||
|  | 							this.dataForm.plcConId = data.equipmenplcParam.plcConId | ||||||
|  | 							this.dataForm.type = data.equipmenplcParam.type | ||||||
|  | 							this.dataForm.paramCode = data.equipmenplcParam.paramCode | ||||||
|  | 							this.dataForm.paramName = data.equipmenplcParam.paramName | ||||||
|  | 							this.dataForm.paramAddress = data.equipmenplcParam.paramAddress | ||||||
|  | 							this.dataForm.valueType = data.equipmenplcParam.valueType | ||||||
|  | 							this.dataForm.unitDictValue = data.equipmenplcParam.unitDictValue | ||||||
|  | 							this.dataForm.minValue = data.equipmenplcParam.minValue | ||||||
|  | 							this.dataForm.maxValue = data.equipmenplcParam.maxValue | ||||||
|  | 							this.dataForm.defaultValue = data.equipmenplcParam.defaultValue | ||||||
|  | 							this.dataForm.description = data.equipmenplcParam.description | ||||||
|  | 							this.dataForm.enabled = data.equipmenplcParam.enabled | ||||||
|  | 							this.dataForm.remark = data.equipmenplcParam.remark | ||||||
|  | 							this.dataForm.valid = data.equipmenplcParam.valid | ||||||
|  | 							this.dataForm.creatorId = data.equipmenplcParam.creatorId | ||||||
|  | 							this.dataForm.creatorName = data.equipmenplcParam.creatorName | ||||||
|  | 							this.dataForm.createTime = data.equipmenplcParam.createTime | ||||||
|  | 							this.dataForm.updaterId = data.equipmenplcParam.updaterId | ||||||
|  | 							this.dataForm.updaterName = data.equipmenplcParam.updaterName | ||||||
|  | 							this.dataForm.updateTime = data.equipmenplcParam.updateTime | ||||||
|  | 							this.dataForm.version = data.equipmenplcParam.version | ||||||
|  | 							this.dataForm.collection = data.equipmenplcParam.collection | ||||||
|  | 							this.dataForm.collectionCycle = data.equipmenplcParam.collectionCycle | ||||||
|  | 							this.dataForm.reportingCycle = data.equipmenplcParam.reportingCycle | ||||||
|  | 							this.dataForm.reportingMethod = data.equipmenplcParam.reportingMethod | ||||||
|  | 							this.dataForm.reportingCode = data.equipmenplcParam.reportingCode | ||||||
|  | 						} | ||||||
|  | 					}) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 表单提交 | ||||||
|  | 		dataFormSubmit() { | ||||||
|  | 			this.$refs['dataForm'].validate(valid => { | ||||||
|  | 				if (valid) { | ||||||
|  | 					this.$http({ | ||||||
|  | 						url: this.$http.adornUrl(`/monitoring/equipmentPlcParam/${!this.dataForm.id ? '' : this.dataForm.id}`), | ||||||
|  | 						method: this.dataForm.id ? 'put' : 'post', | ||||||
|  | 						data: this.$http.adornData({ | ||||||
|  | 							id: this.dataForm.id || undefined, | ||||||
|  | 							plcConId: this.dataForm.plcConId, | ||||||
|  | 							type: this.dataForm.type, | ||||||
|  | 							paramCode: this.dataForm.paramCode, | ||||||
|  | 							paramName: this.dataForm.paramName, | ||||||
|  | 							paramAddress: this.dataForm.paramAddress, | ||||||
|  | 							valueType: this.dataForm.valueType, | ||||||
|  | 							unitDictValue: this.dataForm.unitDictValue, | ||||||
|  | 							minValue: this.dataForm.minValue, | ||||||
|  | 							maxValue: this.dataForm.maxValue, | ||||||
|  | 							defaultValue: this.dataForm.defaultValue, | ||||||
|  | 							description: this.dataForm.description, | ||||||
|  | 							enabled: this.dataForm.enabled, | ||||||
|  | 							remark: this.dataForm.remark, | ||||||
|  | 							valid: this.dataForm.valid, | ||||||
|  | 							creatorId: this.dataForm.creatorId, | ||||||
|  | 							creatorName: this.dataForm.creatorName, | ||||||
|  | 							createTime: this.dataForm.createTime, | ||||||
|  | 							updaterId: this.dataForm.updaterId, | ||||||
|  | 							updaterName: this.dataForm.updaterName, | ||||||
|  | 							updateTime: this.dataForm.updateTime, | ||||||
|  | 							version: this.dataForm.version, | ||||||
|  | 							collection: this.dataForm.collection, | ||||||
|  | 							collectionCycle: this.dataForm.collectionCycle, | ||||||
|  | 							reportingCycle: this.dataForm.reportingCycle, | ||||||
|  | 							reportingMethod: this.dataForm.reportingMethod, | ||||||
|  | 							reportingCode: this.dataForm.reportingCode | ||||||
|  | 						}) | ||||||
|  | 					}).then(({ data }) => { | ||||||
|  | 						if (data && data.code === 0) { | ||||||
|  | 							this.$message({ | ||||||
|  | 								message: i18n.t('prompt.success'), | ||||||
|  | 								type: 'success', | ||||||
|  | 								duration: 1500, | ||||||
|  | 								onClose: () => { | ||||||
|  | 									this.visible = false | ||||||
|  | 									this.$emit('refreshDataList') | ||||||
|  | 								} | ||||||
|  | 							}) | ||||||
|  | 						} else { | ||||||
|  | 							this.$message.error(data.msg) | ||||||
|  | 						} | ||||||
|  | 					}) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										166
									
								
								src/views/modules/monitoring/equipmentPlcParam.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										166
									
								
								src/views/modules/monitoring/equipmentPlcParam.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,166 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="mod-config"> | ||||||
|  | 		<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)"> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-input v-model="dataForm.key" :placeholder="$t('parameter')" clearable></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-button @click="currentChangeHandle(1)">{{ $t('query') }}</el-button> | ||||||
|  | 				<el-button v-if="$hasPermission('monitoring:equipmenplcparam:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  |  | ||||||
|  | 		<base-table :page="pageIndex" :size="pageSize" :data="dataList" :table-head-configs="tableConfigs" :max-height="calcMaxHeight(8)" /> | ||||||
|  | 		<el-pagination | ||||||
|  | 			@size-change="sizeChangeHandle" | ||||||
|  | 			@current-change="currentChangeHandle" | ||||||
|  | 			:current-page="pageIndex" | ||||||
|  | 			:page-sizes="[10, 20, 50, 100]" | ||||||
|  | 			:page-size="pageSize" | ||||||
|  | 			:total="totalPage" | ||||||
|  | 			layout="total, sizes, prev, pager, next, jumper" | ||||||
|  | 		> | ||||||
|  | 		</el-pagination> | ||||||
|  | 		<!-- 弹窗, 新增 / 修改 --> | ||||||
|  | 		<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { calcMaxHeight } from '@/utils' | ||||||
|  | // import { timeFilter } from '@/utils/filters' | ||||||
|  | import AddOrUpdate from './equipmentPlcParam-add-or-update' | ||||||
|  | import i18n from '@/i18n' | ||||||
|  | import BaseTable from '@/components/base-table' | ||||||
|  | // import TableOperateComponent from '@/components/base-table/components/operationComponent' | ||||||
|  | // import TableTextComponent from '@/components/base-table/components/detailComponent' | ||||||
|  | import { dictFilter } from '@/utils/filters' | ||||||
|  |  | ||||||
|  | const UnitDictTypeId = '1557173812109242370' | ||||||
|  |  | ||||||
|  | const tableConfigs = [ | ||||||
|  | 	{ type: 'index', width: 100, name: i18n.t('index') }, | ||||||
|  | 	{ prop: 'plcConId', name: i18n.t('params.plcid') }, | ||||||
|  | 	{ prop: 'paramCode', name: i18n.t('params.code') }, | ||||||
|  | 	{ prop: 'paramName', name: i18n.t('params.name') }, | ||||||
|  | 	{ prop: 'paramAddress', name: i18n.t('paramUrl') }, | ||||||
|  | 	{ prop: 'unitDictValue', name: i18n.t('unit'), filter: dictFilter(UnitDictTypeId) }, | ||||||
|  | 	{ prop: 'minValue', name: i18n.t('min') }, | ||||||
|  | 	{ prop: 'maxValue', name: i18n.t('max') }, | ||||||
|  | 	{ prop: 'defaultValue', name: i18n.t('params.paramStdValue') }, | ||||||
|  | 	{ prop: 'description', name: i18n.t('desc') }, | ||||||
|  | 	{ prop: 'enabled', name: i18n.t('enabled'), filter: val => [i18n.t('disable'), i18n.t('enable')][+val] }, | ||||||
|  | 	{ prop: 'remark', name: i18n.t('remark') }, | ||||||
|  | 	{ prop: 'collection', name: i18n.t('collectOrNot'), filter: val => [i18n.t('notCollect'), i18n.t('collect')][+val] } | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			tableConfigs, | ||||||
|  | 			calcMaxHeight, | ||||||
|  | 			dataForm: { | ||||||
|  | 				key: '' | ||||||
|  | 			}, | ||||||
|  | 			dataList: [], | ||||||
|  | 			pageIndex: 1, | ||||||
|  | 			pageSize: 10, | ||||||
|  | 			totalPage: 0, | ||||||
|  | 			dataListLoading: false, | ||||||
|  | 			dataListSelections: [], | ||||||
|  | 			addOrUpdateVisible: false | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	components: { | ||||||
|  | 		AddOrUpdate, | ||||||
|  | 		BaseTable | ||||||
|  | 	}, | ||||||
|  | 	activated() { | ||||||
|  | 		this.getDataList() | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		// destroy dialog | ||||||
|  | 		handleDestroyDialog() { | ||||||
|  | 			setTimeout(() => { | ||||||
|  | 				this.addOrUpdateVisible= false | ||||||
|  | 			}, /** after dialog animated */ 200); | ||||||
|  | 		}, | ||||||
|  | 		// 获取数据列表 | ||||||
|  | 		getDataList() { | ||||||
|  | 			this.dataListLoading = true | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/equipmentPlcParam/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams({ | ||||||
|  | 					page: this.pageIndex, | ||||||
|  | 					limit: this.pageSize, | ||||||
|  | 					key: this.dataForm.key | ||||||
|  | 				}) | ||||||
|  | 			}).then(({ data }) => { | ||||||
|  | 				if (data && data.code === 0) { | ||||||
|  | 					this.dataList = data.data.list | ||||||
|  | 					this.totalPage = data.data.total | ||||||
|  | 				} else { | ||||||
|  | 					this.dataList = [] | ||||||
|  | 					this.totalPage = 0 | ||||||
|  | 				} | ||||||
|  | 				this.dataListLoading = false | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 每页数 | ||||||
|  | 		sizeChangeHandle(val) { | ||||||
|  | 			this.pageSize = val | ||||||
|  | 			this.pageIndex = 1 | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 当前页 | ||||||
|  | 		currentChangeHandle(val) { | ||||||
|  | 			this.pageIndex = val | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 多选 | ||||||
|  | 		selectionChangeHandle(val) { | ||||||
|  | 			this.dataListSelections = val | ||||||
|  | 		}, | ||||||
|  | 		// 新增 / 修改 | ||||||
|  | 		addOrUpdateHandle(id) { | ||||||
|  | 			this.addOrUpdateVisible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs.addOrUpdate.init(id) | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 删除 | ||||||
|  | 		deleteHandle(id) { | ||||||
|  | 			var ids = id | ||||||
|  | 				? [id] | ||||||
|  | 				: this.dataListSelections.map(item => { | ||||||
|  | 						return item.id | ||||||
|  | 				  }) | ||||||
|  | 			this.$confirm(`${ i18n.t('prompt.info', { handle: id ? i18n.t('delete').toLowerCase() : i18n.t('deleteBatch').toLowerCase() }) }`, i18n.t('prompt.title'), { | ||||||
|  | 				confirmButtonText: i18n.t('confirm'), | ||||||
|  | 				cancelButtonText: i18n.t('cancel'), | ||||||
|  | 				type: 'warning' | ||||||
|  | 			}).then(() => { | ||||||
|  | 				this.$http({ | ||||||
|  | 					url: this.$http.adornUrl('/monitoring/equipmentPlcParam'), | ||||||
|  | 					method: 'delete', | ||||||
|  | 					data: this.$http.adornData(ids, false, 'raw') | ||||||
|  | 				}).then(({ data }) => { | ||||||
|  | 					if (data && data.code === 0) { | ||||||
|  | 						this.$message({ | ||||||
|  | 							message: i18n.t('prompt.success'), | ||||||
|  | 							type: 'success', | ||||||
|  | 							duration: 1500, | ||||||
|  | 							onClose: () => { | ||||||
|  | 								this.getDataList() | ||||||
|  | 							} | ||||||
|  | 						}) | ||||||
|  | 					} else { | ||||||
|  | 						this.$message.error(data.msg) | ||||||
|  | 					} | ||||||
|  | 				}) | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										191
									
								
								src/views/modules/monitoring/equipmentQuantity-add-or-update.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										191
									
								
								src/views/modules/monitoring/equipmentQuantity-add-or-update.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,191 @@ | |||||||
|  | <template> | ||||||
|  | 	<el-dialog :title="!dataForm.id ? i18n.t('add') : i18n.t('update')" :close-on-click-modal="false" :visible.sync="visible"> | ||||||
|  | 		<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" label-width="80px"> | ||||||
|  | 			<el-form-item label="设备外部编码" prop="externalCode"> | ||||||
|  | 				<el-input v-model="dataForm.externalCode" placeholder="设备外部编码"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="设备名称" prop="equipmentName"> | ||||||
|  | 				<el-input v-model="dataForm.equipmentName" placeholder="设备名称"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="进入设备的数量" prop="inQuantity"> | ||||||
|  | 				<el-input v-model="dataForm.inQuantity" placeholder="进入设备的数量"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="离开设备的数量,若plc只记录一个生产数量,也写入该字段" prop="outQuantity"> | ||||||
|  | 				<el-input v-model="dataForm.outQuantity" placeholder="离开设备的数量,若plc只记录一个生产数量,也写入该字段"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="" prop="okQuantity"> | ||||||
|  | 				<el-input v-model="dataForm.okQuantity" placeholder=""></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="设备上报的报废数量" prop="nokQuantity"> | ||||||
|  | 				<el-input v-model="dataForm.nokQuantity" placeholder="设备上报的报废数量"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="" prop="description"> | ||||||
|  | 				<el-input v-model="dataForm.description" placeholder=""></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="备注" prop="remark"> | ||||||
|  | 				<el-input v-model="dataForm.remark" placeholder="备注"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="删除标志,是否有效:1 可用 0不可用" prop="valid"> | ||||||
|  | 				<el-input v-model="dataForm.valid" placeholder="删除标志,是否有效:1 可用 0不可用"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('creator')" prop="creatorId"> | ||||||
|  | 				<el-input v-model="dataForm.creatorId" :placeholder="$t('creator')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('creatorName')" prop="creatorName"> | ||||||
|  | 				<el-input v-model="dataForm.creatorName" :placeholder="$t('creatorName')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="创建时间" prop="createTime"> | ||||||
|  | 				<el-input v-model="dataForm.createTime" placeholder="创建时间"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('updator')" prop="updaterId"> | ||||||
|  | 				<el-input v-model="dataForm.updaterId" :placeholder="$t('updator')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('updatorName')" prop="updaterName"> | ||||||
|  | 				<el-input v-model="dataForm.updaterName" :placeholder="$t('updatorName')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('updateTime')" prop="updateTime"> | ||||||
|  | 				<el-input v-model="dataForm.updateTime" :placeholder="$t('updateTime')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('version')" prop="version"> | ||||||
|  | 				<el-input v-model="dataForm.version" :placeholder="$t('version')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="生产数量的记录时间" prop="recordTime"> | ||||||
|  | 				<el-input v-model="dataForm.recordTime" placeholder="生产数量的记录时间"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  | 		<span slot="footer" class="dialog-footer"> | ||||||
|  | 			<el-button @click="visible = false">{{ $t('cancel') }}</el-button> | ||||||
|  | 			<el-button type="primary" @click="dataFormSubmit()">{{ $t('confirm') }}</el-button> | ||||||
|  | 		</span> | ||||||
|  | 	</el-dialog> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			visible: false, | ||||||
|  | 			dataForm: { | ||||||
|  | 				id: 0, | ||||||
|  | 				externalCode: '', | ||||||
|  | 				equipmentName: '', | ||||||
|  | 				inQuantity: '', | ||||||
|  | 				outQuantity: '', | ||||||
|  | 				okQuantity: '', | ||||||
|  | 				nokQuantity: '', | ||||||
|  | 				description: '', | ||||||
|  | 				remark: '', | ||||||
|  | 				valid: '', | ||||||
|  | 				creatorId: '', | ||||||
|  | 				creatorName: '', | ||||||
|  | 				createTime: '', | ||||||
|  | 				updaterId: '', | ||||||
|  | 				updaterName: '', | ||||||
|  | 				updateTime: '', | ||||||
|  | 				version: '', | ||||||
|  | 				recordTime: '' | ||||||
|  | 			}, | ||||||
|  | 			dataRule: { | ||||||
|  | 				externalCode: [{ required: true, message: '设备外部编码不能为空', trigger: 'blur' }], | ||||||
|  | 				equipmentName: [{ required: true, message: '设备名称不能为空', trigger: 'blur' }], | ||||||
|  | 				inQuantity: [{ required: true, message: '进入设备的数量不能为空', trigger: 'blur' }], | ||||||
|  | 				outQuantity: [{ required: true, message: '离开设备的数量,若plc只记录一个生产数量,也写入该字段不能为空', trigger: 'blur' }], | ||||||
|  | 				okQuantity: [{ required: true, message: i18n.t('cannotempty'), trigger: 'blur' }], | ||||||
|  | 				nokQuantity: [{ required: true, message: '设备上报的报废数量不能为空', trigger: 'blur' }], | ||||||
|  | 				description: [{ required: true, message: i18n.t('cannotempty'), trigger: 'blur' }], | ||||||
|  | 				remark: [{ required: true, message: '备注不能为空', trigger: 'blur' }], | ||||||
|  | 				valid: [{ required: true, message: '删除标志,是否有效:1 可用 0不可用不能为空', trigger: 'blur' }], | ||||||
|  | 				creatorId: [{ required: true, message: '创建人不能为空', trigger: 'blur' }], | ||||||
|  | 				creatorName: [{ required: true, message: '创建人姓名不能为空', trigger: 'blur' }], | ||||||
|  | 				createTime: [{ required: true, message: '创建时间不能为空', trigger: 'blur' }], | ||||||
|  | 				updaterId: [{ required: true, message: '更新人不能为空', trigger: 'blur' }], | ||||||
|  | 				updaterName: [{ required: true, message: '更新人姓名不能为空', trigger: 'blur' }], | ||||||
|  | 				updateTime: [{ required: true, message: '更新时间不能为空', trigger: 'blur' }], | ||||||
|  | 				version: [{ required: true, message: '版本号不能为空', trigger: 'blur' }], | ||||||
|  | 				recordTime: [{ required: true, message: '生产数量的记录时间不能为空', trigger: 'blur' }] | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		init(id) { | ||||||
|  | 			this.dataForm.id = id || 0 | ||||||
|  | 			this.visible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs['dataForm'].resetFields() | ||||||
|  | 				if (this.dataForm.id) { | ||||||
|  | 					this.$http({ | ||||||
|  | 						url: this.$http.adornUrl(`/monitoring/equipmentQuantity/${this.dataForm.id}`), | ||||||
|  | 						method: 'get', | ||||||
|  | 						params: this.$http.adornParams() | ||||||
|  | 					}).then(({ data }) => { | ||||||
|  | 						if (data && data.code === 0) { | ||||||
|  | 							this.dataForm.externalCode = data.equipmenquantity.externalCode | ||||||
|  | 							this.dataForm.equipmentName = data.equipmenquantity.equipmentName | ||||||
|  | 							this.dataForm.inQuantity = data.equipmenquantity.inQuantity | ||||||
|  | 							this.dataForm.outQuantity = data.equipmenquantity.outQuantity | ||||||
|  | 							this.dataForm.okQuantity = data.equipmenquantity.okQuantity | ||||||
|  | 							this.dataForm.nokQuantity = data.equipmenquantity.nokQuantity | ||||||
|  | 							this.dataForm.description = data.equipmenquantity.description | ||||||
|  | 							this.dataForm.remark = data.equipmenquantity.remark | ||||||
|  | 							this.dataForm.valid = data.equipmenquantity.valid | ||||||
|  | 							this.dataForm.creatorId = data.equipmenquantity.creatorId | ||||||
|  | 							this.dataForm.creatorName = data.equipmenquantity.creatorName | ||||||
|  | 							this.dataForm.createTime = data.equipmenquantity.createTime | ||||||
|  | 							this.dataForm.updaterId = data.equipmenquantity.updaterId | ||||||
|  | 							this.dataForm.updaterName = data.equipmenquantity.updaterName | ||||||
|  | 							this.dataForm.updateTime = data.equipmenquantity.updateTime | ||||||
|  | 							this.dataForm.version = data.equipmenquantity.version | ||||||
|  | 							this.dataForm.recordTime = data.equipmenquantity.recordTime | ||||||
|  | 						} | ||||||
|  | 					}) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 表单提交 | ||||||
|  | 		dataFormSubmit() { | ||||||
|  | 			this.$refs['dataForm'].validate(valid => { | ||||||
|  | 				if (valid) { | ||||||
|  | 					this.$http({ | ||||||
|  | 						url: this.$http.adornUrl(`/monitoring/equipmentQuantity/${!this.dataForm.id ? '' : this.dataForm.id}`), | ||||||
|  | 						method: this.dataForm.id ? 'put' : 'post', | ||||||
|  | 						data: this.$http.adornData({ | ||||||
|  | 							id: this.dataForm.id || undefined, | ||||||
|  | 							externalCode: this.dataForm.externalCode, | ||||||
|  | 							equipmentName: this.dataForm.equipmentName, | ||||||
|  | 							inQuantity: this.dataForm.inQuantity, | ||||||
|  | 							outQuantity: this.dataForm.outQuantity, | ||||||
|  | 							okQuantity: this.dataForm.okQuantity, | ||||||
|  | 							nokQuantity: this.dataForm.nokQuantity, | ||||||
|  | 							description: this.dataForm.description, | ||||||
|  | 							remark: this.dataForm.remark, | ||||||
|  | 							valid: this.dataForm.valid, | ||||||
|  | 							creatorId: this.dataForm.creatorId, | ||||||
|  | 							creatorName: this.dataForm.creatorName, | ||||||
|  | 							createTime: this.dataForm.createTime, | ||||||
|  | 							updaterId: this.dataForm.updaterId, | ||||||
|  | 							updaterName: this.dataForm.updaterName, | ||||||
|  | 							updateTime: this.dataForm.updateTime, | ||||||
|  | 							version: this.dataForm.version, | ||||||
|  | 							recordTime: this.dataForm.recordTime | ||||||
|  | 						}) | ||||||
|  | 					}).then(({ data }) => { | ||||||
|  | 						if (data && data.code === 0) { | ||||||
|  | 							this.$message({ | ||||||
|  | 								message: i18n.t('prompt.success'), | ||||||
|  | 								type: 'success', | ||||||
|  | 								duration: 1500, | ||||||
|  | 								onClose: () => { | ||||||
|  | 									this.visible = false | ||||||
|  | 									this.$emit('refreshDataList') | ||||||
|  | 								} | ||||||
|  | 							}) | ||||||
|  | 						} else { | ||||||
|  | 							this.$message.error(data.msg) | ||||||
|  | 						} | ||||||
|  | 					}) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										172
									
								
								src/views/modules/monitoring/equipmentQuantity.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										172
									
								
								src/views/modules/monitoring/equipmentQuantity.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,172 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="mod-config"> | ||||||
|  | 		<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)"> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-input v-model="dataForm.key" :placeholder="$t('parameter')" clearable></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-button @click="currentChangeHandle(1)">{{ $t('query') }}</el-button> | ||||||
|  | 				<el-button v-if="$hasPermission('monitoring:equipmenquantity:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  |  | ||||||
|  | 		<base-table :page="pageIndex" :size="pageSize" :data="dataList" :table-head-configs="tableConfigs" :max-height="calcMaxHeight(8)" /> | ||||||
|  | 		<el-pagination | ||||||
|  | 			@size-change="sizeChangeHandle" | ||||||
|  | 			@current-change="currentChangeHandle" | ||||||
|  | 			:current-page="pageIndex" | ||||||
|  | 			:page-sizes="[10, 20, 50, 100]" | ||||||
|  | 			:page-size="pageSize" | ||||||
|  | 			:total="totalPage" | ||||||
|  | 			layout="total, sizes, prev, pager, next, jumper" | ||||||
|  | 		> | ||||||
|  | 		</el-pagination> | ||||||
|  | 		<!-- 弹窗, 新增 / 修改 --> | ||||||
|  | 		<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { calcMaxHeight } from '@/utils' | ||||||
|  | import { timeFilter } from '@/utils/filters' | ||||||
|  | import AddOrUpdate from './equipmentQuantity-add-or-update' | ||||||
|  | import i18n from '@/i18n' | ||||||
|  | import BaseTable from '@/components/base-table' | ||||||
|  | import TableOperateComponent from '@/components/base-table/components/operationComponent' | ||||||
|  | import TableTextComponent from '@/components/base-table/components/detailComponent' | ||||||
|  |  | ||||||
|  | const tableConfigs = [ | ||||||
|  | 	{ prop: 'id', name: 'id' }, | ||||||
|  | 	{ prop: 'externalCode', name: '设备外部编码' }, | ||||||
|  | 	{ prop: 'equipmentName', name: i18n.t('eq.name') }, | ||||||
|  | 	{ prop: 'inQuantity', name: '进入设备的数量' }, | ||||||
|  | 	{ | ||||||
|  | 		prop: 'outQuantity', | ||||||
|  | 		name: '离开设备的数量,若plc只记录一个生产数量,也写入该字段' | ||||||
|  | 	}, | ||||||
|  | 	{ prop: 'okQuantity', name: '' }, | ||||||
|  | 	{ prop: 'nokQuantity', name: '设备上报的报废数量' }, | ||||||
|  | 	{ prop: 'description', name: '' }, | ||||||
|  | 	{ prop: 'remark', name: i18n.t('remark') }, | ||||||
|  | 	{ prop: 'valid', name: i18n.t('delMark') }, | ||||||
|  | 	{ prop: 'creatorId', name: i18n.t('creator') }, | ||||||
|  | 	{ prop: 'creatorName', name: i18n.t('creatorName') }, | ||||||
|  | 	{ prop: 'createTime', name: i18n.t('createTime'), filter: timeFilter }, | ||||||
|  | 	{ prop: 'updaterId', name: i18n.t('updator') }, | ||||||
|  | 	{ prop: 'updaterName', name: i18n.t('updatorName') }, | ||||||
|  | 	{ prop: 'updateTime', name: i18n.t('updateTime'), filter: timeFilter }, | ||||||
|  | 	{ prop: 'version', name: i18n.t('version') }, | ||||||
|  | 	{ prop: 'recordTime', name: '生产数量的记录时间' }, | ||||||
|  | 	{ prop: 'operations', name: i18n.t('handle'), fixed: 'right', width: 180, subcomponent: TableOperateComponent, options: ['edit', 'delete'] } | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			tableConfigs, | ||||||
|  | 			calcMaxHeight, | ||||||
|  | 			dataForm: { | ||||||
|  | 				key: '' | ||||||
|  | 			}, | ||||||
|  | 			dataList: [], | ||||||
|  | 			pageIndex: 1, | ||||||
|  | 			pageSize: 10, | ||||||
|  | 			totalPage: 0, | ||||||
|  | 			dataListLoading: false, | ||||||
|  | 			dataListSelections: [], | ||||||
|  | 			addOrUpdateVisible: false | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	components: { | ||||||
|  | 		AddOrUpdate, | ||||||
|  | 		BaseTable | ||||||
|  | 	}, | ||||||
|  | 	activated() { | ||||||
|  | 		this.getDataList() | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		// destroy dialog | ||||||
|  | 		handleDestroyDialog() { | ||||||
|  | 			setTimeout(() => { | ||||||
|  | 				this.addOrUpdateVisible= false | ||||||
|  | 			}, /** after dialog animated */ 200); | ||||||
|  | 		}, | ||||||
|  | 		// 获取数据列表 | ||||||
|  | 		getDataList() { | ||||||
|  | 			this.dataListLoading = true | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/equipmentQuantity/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams({ | ||||||
|  | 					page: this.pageIndex, | ||||||
|  | 					limit: this.pageSize, | ||||||
|  | 					key: this.dataForm.key | ||||||
|  | 				}) | ||||||
|  | 			}).then(({ data }) => { | ||||||
|  | 				if (data && data.code === 0) { | ||||||
|  | 					this.dataList = data.data.list | ||||||
|  | 					this.totalPage = data.data.total | ||||||
|  | 				} else { | ||||||
|  | 					this.dataList = [] | ||||||
|  | 					this.totalPage = 0 | ||||||
|  | 				} | ||||||
|  | 				this.dataListLoading = false | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 每页数 | ||||||
|  | 		sizeChangeHandle(val) { | ||||||
|  | 			this.pageSize = val | ||||||
|  | 			this.pageIndex = 1 | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 当前页 | ||||||
|  | 		currentChangeHandle(val) { | ||||||
|  | 			this.pageIndex = val | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 多选 | ||||||
|  | 		selectionChangeHandle(val) { | ||||||
|  | 			this.dataListSelections = val | ||||||
|  | 		}, | ||||||
|  | 		// 新增 / 修改 | ||||||
|  | 		addOrUpdateHandle(id) { | ||||||
|  | 			this.addOrUpdateVisible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs.addOrUpdate.init(id) | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 删除 | ||||||
|  | 		deleteHandle(id) { | ||||||
|  | 			var ids = id | ||||||
|  | 				? [id] | ||||||
|  | 				: this.dataListSelections.map(item => { | ||||||
|  | 						return item.id | ||||||
|  | 				  }) | ||||||
|  | 			this.$confirm(`${ i18n.t('prompt.info', { handle: id ? i18n.t('delete').toLowerCase() : i18n.t('deleteBatch').toLowerCase() }) }`, i18n.t('prompt.title'), { | ||||||
|  | 				confirmButtonText: i18n.t('confirm'), | ||||||
|  | 				cancelButtonText: i18n.t('cancel'), | ||||||
|  | 				type: 'warning' | ||||||
|  | 			}).then(() => { | ||||||
|  | 				this.$http({ | ||||||
|  | 					url: this.$http.adornUrl('/monitoring/equipmentQuantity'), | ||||||
|  | 					method: 'delete', | ||||||
|  | 					data: this.$http.adornData(ids, false, 'raw') | ||||||
|  | 				}).then(({ data }) => { | ||||||
|  | 					if (data && data.code === 0) { | ||||||
|  | 						this.$message({ | ||||||
|  | 							message: i18n.t('prompt.success'), | ||||||
|  | 							type: 'success', | ||||||
|  | 							duration: 1500, | ||||||
|  | 							onClose: () => { | ||||||
|  | 								this.getDataList() | ||||||
|  | 							} | ||||||
|  | 						}) | ||||||
|  | 					} else { | ||||||
|  | 						this.$message.error(data.msg) | ||||||
|  | 					} | ||||||
|  | 				}) | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
| @@ -0,0 +1,184 @@ | |||||||
|  | <template> | ||||||
|  | 	<el-dialog :title="!dataForm.id ? i18n.t('add') : i18n.t('update')" :close-on-click-modal="false" :visible.sync="visible"> | ||||||
|  | 		<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" label-width="80px"> | ||||||
|  | 			<el-form-item label="设备外部代码" prop="externalCode"> | ||||||
|  | 				<el-input v-model="dataForm.externalCode" placeholder="设备外部代码"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="plc id" prop="plcId"> | ||||||
|  | 				<el-input v-model="dataForm.plcId" placeholder="plc id"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="plc" prop="plc"> | ||||||
|  | 				<el-input v-model="dataForm.plc" placeholder="plc"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="设备id" prop="equipmentId"> | ||||||
|  | 				<el-input v-model="dataForm.equipmentId" placeholder="设备id"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="设备名称" prop="equipmentName"> | ||||||
|  | 				<el-input v-model="dataForm.equipmentName" placeholder="设备名称"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="状态,0正常 1计划停机 2故障" prop="status"> | ||||||
|  | 				<el-input v-model="dataForm.status" placeholder="状态,0正常 1计划停机 2故障"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="记录时间" prop="logTime"> | ||||||
|  | 				<el-input v-model="dataForm.logTime" placeholder="记录时间"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="备注" prop="remark"> | ||||||
|  | 				<el-input v-model="dataForm.remark" placeholder="备注"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="删除标志,是否有效:1 可用 0不可用" prop="valid"> | ||||||
|  | 				<el-input v-model="dataForm.valid" placeholder="删除标志,是否有效:1 可用 0不可用"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('creator')" prop="creatorId"> | ||||||
|  | 				<el-input v-model="dataForm.creatorId" :placeholder="$t('creator')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('creatorName')" prop="creatorName"> | ||||||
|  | 				<el-input v-model="dataForm.creatorName" :placeholder="$t('creatorName')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="创建时间" prop="createTime"> | ||||||
|  | 				<el-input v-model="dataForm.createTime" placeholder="创建时间"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('updator')" prop="updaterId"> | ||||||
|  | 				<el-input v-model="dataForm.updaterId" :placeholder="$t('updator')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('updatorName')" prop="updaterName"> | ||||||
|  | 				<el-input v-model="dataForm.updaterName" :placeholder="$t('updatorName')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('updateTime')" prop="updateTime"> | ||||||
|  | 				<el-input v-model="dataForm.updateTime" :placeholder="$t('updateTime')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('version')" prop="version"> | ||||||
|  | 				<el-input v-model="dataForm.version" :placeholder="$t('version')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  | 		<span slot="footer" class="dialog-footer"> | ||||||
|  | 			<el-button @click="visible = false">{{ $t('cancel') }}</el-button> | ||||||
|  | 			<el-button type="primary" @click="dataFormSubmit()">{{ $t('confirm') }}</el-button> | ||||||
|  | 		</span> | ||||||
|  | 	</el-dialog> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			visible: false, | ||||||
|  | 			dataForm: { | ||||||
|  | 				id: 0, | ||||||
|  | 				externalCode: '', | ||||||
|  | 				plcId: '', | ||||||
|  | 				plc: '', | ||||||
|  | 				equipmentId: '', | ||||||
|  | 				equipmentName: '', | ||||||
|  | 				status: '', | ||||||
|  | 				logTime: '', | ||||||
|  | 				remark: '', | ||||||
|  | 				valid: '', | ||||||
|  | 				creatorId: '', | ||||||
|  | 				creatorName: '', | ||||||
|  | 				createTime: '', | ||||||
|  | 				updaterId: '', | ||||||
|  | 				updaterName: '', | ||||||
|  | 				updateTime: '', | ||||||
|  | 				version: '' | ||||||
|  | 			}, | ||||||
|  | 			dataRule: { | ||||||
|  | 				externalCode: [{ required: true, message: '设备外部代码不能为空', trigger: 'blur' }], | ||||||
|  | 				plcId: [{ required: true, message: 'plc id不能为空', trigger: 'blur' }], | ||||||
|  | 				plc: [{ required: true, message: 'plc不能为空', trigger: 'blur' }], | ||||||
|  | 				equipmentId: [{ required: true, message: '设备id不能为空', trigger: 'blur' }], | ||||||
|  | 				equipmentName: [{ required: true, message: '设备名称不能为空', trigger: 'blur' }], | ||||||
|  | 				status: [{ required: true, message: '状态,0正常 1计划停机 2故障不能为空', trigger: 'blur' }], | ||||||
|  | 				logTime: [{ required: true, message: '记录时间不能为空', trigger: 'blur' }], | ||||||
|  | 				remark: [{ required: true, message: '备注不能为空', trigger: 'blur' }], | ||||||
|  | 				valid: [{ required: true, message: '删除标志,是否有效:1 可用 0不可用不能为空', trigger: 'blur' }], | ||||||
|  | 				creatorId: [{ required: true, message: '创建人不能为空', trigger: 'blur' }], | ||||||
|  | 				creatorName: [{ required: true, message: '创建人姓名不能为空', trigger: 'blur' }], | ||||||
|  | 				createTime: [{ required: true, message: '创建时间不能为空', trigger: 'blur' }], | ||||||
|  | 				updaterId: [{ required: true, message: '更新人不能为空', trigger: 'blur' }], | ||||||
|  | 				updaterName: [{ required: true, message: '更新人姓名不能为空', trigger: 'blur' }], | ||||||
|  | 				updateTime: [{ required: true, message: '更新时间不能为空', trigger: 'blur' }], | ||||||
|  | 				version: [{ required: true, message: '版本号不能为空', trigger: 'blur' }] | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		init(id) { | ||||||
|  | 			this.dataForm.id = id || 0 | ||||||
|  | 			this.visible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs['dataForm'].resetFields() | ||||||
|  | 				if (this.dataForm.id) { | ||||||
|  | 					this.$http({ | ||||||
|  | 						url: this.$http.adornUrl(`/monitoring/equipmentStatusLog/${this.dataForm.id}`), | ||||||
|  | 						method: 'get', | ||||||
|  | 						params: this.$http.adornParams() | ||||||
|  | 					}).then(({ data }) => { | ||||||
|  | 						if (data && data.code === 0) { | ||||||
|  | 							this.dataForm.externalCode = data.equipmenstatusLog.externalCode | ||||||
|  | 							this.dataForm.plcId = data.equipmenstatusLog.plcId | ||||||
|  | 							this.dataForm.plc = data.equipmenstatusLog.plc | ||||||
|  | 							this.dataForm.equipmentId = data.equipmenstatusLog.equipmentId | ||||||
|  | 							this.dataForm.equipmentName = data.equipmenstatusLog.equipmentName | ||||||
|  | 							this.dataForm.status = data.equipmenstatusLog.status | ||||||
|  | 							this.dataForm.logTime = data.equipmenstatusLog.logTime | ||||||
|  | 							this.dataForm.remark = data.equipmenstatusLog.remark | ||||||
|  | 							this.dataForm.valid = data.equipmenstatusLog.valid | ||||||
|  | 							this.dataForm.creatorId = data.equipmenstatusLog.creatorId | ||||||
|  | 							this.dataForm.creatorName = data.equipmenstatusLog.creatorName | ||||||
|  | 							this.dataForm.createTime = data.equipmenstatusLog.createTime | ||||||
|  | 							this.dataForm.updaterId = data.equipmenstatusLog.updaterId | ||||||
|  | 							this.dataForm.updaterName = data.equipmenstatusLog.updaterName | ||||||
|  | 							this.dataForm.updateTime = data.equipmenstatusLog.updateTime | ||||||
|  | 							this.dataForm.version = data.equipmenstatusLog.version | ||||||
|  | 						} | ||||||
|  | 					}) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 表单提交 | ||||||
|  | 		dataFormSubmit() { | ||||||
|  | 			this.$refs['dataForm'].validate(valid => { | ||||||
|  | 				if (valid) { | ||||||
|  | 					this.$http({ | ||||||
|  | 						url: this.$http.adornUrl(`/monitoring/equipmentStatusLog/${!this.dataForm.id ? '' : this.dataForm.id}`), | ||||||
|  | 						method: this.dataForm.id ? 'put' : 'post', | ||||||
|  | 						data: this.$http.adornData({ | ||||||
|  | 							id: this.dataForm.id || undefined, | ||||||
|  | 							externalCode: this.dataForm.externalCode, | ||||||
|  | 							plcId: this.dataForm.plcId, | ||||||
|  | 							plc: this.dataForm.plc, | ||||||
|  | 							equipmentId: this.dataForm.equipmentId, | ||||||
|  | 							equipmentName: this.dataForm.equipmentName, | ||||||
|  | 							status: this.dataForm.status, | ||||||
|  | 							logTime: this.dataForm.logTime, | ||||||
|  | 							remark: this.dataForm.remark, | ||||||
|  | 							valid: this.dataForm.valid, | ||||||
|  | 							creatorId: this.dataForm.creatorId, | ||||||
|  | 							creatorName: this.dataForm.creatorName, | ||||||
|  | 							createTime: this.dataForm.createTime, | ||||||
|  | 							updaterId: this.dataForm.updaterId, | ||||||
|  | 							updaterName: this.dataForm.updaterName, | ||||||
|  | 							updateTime: this.dataForm.updateTime, | ||||||
|  | 							version: this.dataForm.version | ||||||
|  | 						}) | ||||||
|  | 					}).then(({ data }) => { | ||||||
|  | 						if (data && data.code === 0) { | ||||||
|  | 							this.$message({ | ||||||
|  | 								message: i18n.t('prompt.success'), | ||||||
|  | 								type: 'success', | ||||||
|  | 								duration: 1500, | ||||||
|  | 								onClose: () => { | ||||||
|  | 									this.visible = false | ||||||
|  | 									this.$emit('refreshDataList') | ||||||
|  | 								} | ||||||
|  | 							}) | ||||||
|  | 						} else { | ||||||
|  | 							this.$message.error(data.msg) | ||||||
|  | 						} | ||||||
|  | 					}) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										168
									
								
								src/views/modules/monitoring/equipmentStatusLog.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										168
									
								
								src/views/modules/monitoring/equipmentStatusLog.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,168 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="mod-config"> | ||||||
|  | 		<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)"> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-input v-model="dataForm.key" :placeholder="$t('parameter')" clearable></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-button @click="currentChangeHandle(1)">{{ $t('query') }}</el-button> | ||||||
|  | 				<el-button v-if="$hasPermission('monitoring:equipmenstatuslog:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  |  | ||||||
|  | 		<base-table :page="pageIndex" :size="pageSize" :data="dataList" :table-head-configs="tableConfigs" :max-height="calcMaxHeight(8)" /> | ||||||
|  | 		<el-pagination | ||||||
|  | 			@size-change="sizeChangeHandle" | ||||||
|  | 			@current-change="currentChangeHandle" | ||||||
|  | 			:current-page="pageIndex" | ||||||
|  | 			:page-sizes="[10, 20, 50, 100]" | ||||||
|  | 			:page-size="pageSize" | ||||||
|  | 			:total="totalPage" | ||||||
|  | 			layout="total, sizes, prev, pager, next, jumper" | ||||||
|  | 		> | ||||||
|  | 		</el-pagination> | ||||||
|  | 		<!-- 弹窗, 新增 / 修改 --> | ||||||
|  | 		<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { calcMaxHeight } from '@/utils' | ||||||
|  | import { timeFilter } from '@/utils/filters' | ||||||
|  | import AddOrUpdate from './equipmentStatusLog-add-or-update' | ||||||
|  | import i18n from '@/i18n' | ||||||
|  | import BaseTable from '@/components/base-table' | ||||||
|  | import TableOperateComponent from '@/components/base-table/components/operationComponent' | ||||||
|  | import TableTextComponent from '@/components/base-table/components/detailComponent' | ||||||
|  |  | ||||||
|  | const tableConfigs = [ | ||||||
|  | 	{ prop: 'id', name: 'id' }, | ||||||
|  | 	{ prop: 'externalCode', name: '设备外部代码' }, | ||||||
|  | 	{ prop: 'plcId', name: 'plc id' }, | ||||||
|  | 	{ prop: 'plc', name: 'plc' }, | ||||||
|  | 	{ prop: 'equipmentId', name: '设备id' }, | ||||||
|  | 	{ prop: 'equipmentName', name: i18n.t('eq.name') }, | ||||||
|  | 	{ prop: 'status', name: '状态,0正常 1计划停机 2故障' }, | ||||||
|  | 	{ prop: 'logTime', name: i18n.t('recordTime') }, | ||||||
|  | 	{ prop: 'remark', name: i18n.t('remark') }, | ||||||
|  | 	{ prop: 'valid', name: i18n.t('delMark') }, | ||||||
|  | 	{ prop: 'creatorId', name: i18n.t('creator') }, | ||||||
|  | 	{ prop: 'creatorName', name: i18n.t('creatorName') }, | ||||||
|  | 	{ prop: 'createTime', name: i18n.t('createTime'), filter: timeFilter }, | ||||||
|  | 	{ prop: 'updaterId', name: i18n.t('updator') }, | ||||||
|  | 	{ prop: 'updaterName', name: i18n.t('updatorName') }, | ||||||
|  | 	{ prop: 'updateTime', name: i18n.t('updateTime'), filter: timeFilter }, | ||||||
|  | 	{ prop: 'version', name: i18n.t('version') }, | ||||||
|  | 	{ prop: 'operations', name: i18n.t('handle'), fixed: 'right', width: 180, subcomponent: TableOperateComponent, options: ['edit', 'delete'] } | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			tableConfigs, | ||||||
|  | 			calcMaxHeight, | ||||||
|  | 			dataForm: { | ||||||
|  | 				key: '' | ||||||
|  | 			}, | ||||||
|  | 			dataList: [], | ||||||
|  | 			pageIndex: 1, | ||||||
|  | 			pageSize: 10, | ||||||
|  | 			totalPage: 0, | ||||||
|  | 			dataListLoading: false, | ||||||
|  | 			dataListSelections: [], | ||||||
|  | 			addOrUpdateVisible: false | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	components: { | ||||||
|  | 		AddOrUpdate, | ||||||
|  | 		BaseTable | ||||||
|  | 	}, | ||||||
|  | 	activated() { | ||||||
|  | 		this.getDataList() | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		// destroy dialog | ||||||
|  | 		handleDestroyDialog() { | ||||||
|  | 			setTimeout(() => { | ||||||
|  | 				this.addOrUpdateVisible= false | ||||||
|  | 			}, /** after dialog animated */ 200); | ||||||
|  | 		}, | ||||||
|  | 		// 获取数据列表 | ||||||
|  | 		getDataList() { | ||||||
|  | 			this.dataListLoading = true | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/equipmentStatusLog/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams({ | ||||||
|  | 					page: this.pageIndex, | ||||||
|  | 					limit: this.pageSize, | ||||||
|  | 					key: this.dataForm.key | ||||||
|  | 				}) | ||||||
|  | 			}).then(({ data }) => { | ||||||
|  | 				if (data && data.code === 0) { | ||||||
|  | 					this.dataList = data.data.list | ||||||
|  | 					this.totalPage = data.data.total | ||||||
|  | 				} else { | ||||||
|  | 					this.dataList = [] | ||||||
|  | 					this.totalPage = 0 | ||||||
|  | 				} | ||||||
|  | 				this.dataListLoading = false | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 每页数 | ||||||
|  | 		sizeChangeHandle(val) { | ||||||
|  | 			this.pageSize = val | ||||||
|  | 			this.pageIndex = 1 | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 当前页 | ||||||
|  | 		currentChangeHandle(val) { | ||||||
|  | 			this.pageIndex = val | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 多选 | ||||||
|  | 		selectionChangeHandle(val) { | ||||||
|  | 			this.dataListSelections = val | ||||||
|  | 		}, | ||||||
|  | 		// 新增 / 修改 | ||||||
|  | 		addOrUpdateHandle(id) { | ||||||
|  | 			this.addOrUpdateVisible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs.addOrUpdate.init(id) | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 删除 | ||||||
|  | 		deleteHandle(id) { | ||||||
|  | 			var ids = id | ||||||
|  | 				? [id] | ||||||
|  | 				: this.dataListSelections.map(item => { | ||||||
|  | 						return item.id | ||||||
|  | 				  }) | ||||||
|  | 			this.$confirm(`${ i18n.t('prompt.info', { handle: id ? i18n.t('delete').toLowerCase() : i18n.t('deleteBatch').toLowerCase() }) }`, i18n.t('prompt.title'), { | ||||||
|  | 				confirmButtonText: i18n.t('confirm'), | ||||||
|  | 				cancelButtonText: i18n.t('cancel'), | ||||||
|  | 				type: 'warning' | ||||||
|  | 			}).then(() => { | ||||||
|  | 				this.$http({ | ||||||
|  | 					url: this.$http.adornUrl('/monitoring/equipmentStatusLog'), | ||||||
|  | 					method: 'delete', | ||||||
|  | 					data: this.$http.adornData(ids, false, 'raw') | ||||||
|  | 				}).then(({ data }) => { | ||||||
|  | 					if (data && data.code === 0) { | ||||||
|  | 						this.$message({ | ||||||
|  | 							message: i18n.t('prompt.success'), | ||||||
|  | 							type: 'success', | ||||||
|  | 							duration: 1500, | ||||||
|  | 							onClose: () => { | ||||||
|  | 								this.getDataList() | ||||||
|  | 							} | ||||||
|  | 						}) | ||||||
|  | 					} else { | ||||||
|  | 						this.$message.error(data.msg) | ||||||
|  | 					} | ||||||
|  | 				}) | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										547
									
								
								src/views/modules/monitoring/equipmentTimesequence.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										547
									
								
								src/views/modules/monitoring/equipmentTimesequence.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,547 @@ | |||||||
|  | <template> | ||||||
|  | 	<!-- 设备效率分析 --> | ||||||
|  | 	<div class="mod-config"> | ||||||
|  | 		<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()"> | ||||||
|  | 			<!-- 产线 --> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-select v-model="dataForm.productlines" :placeholder="'产线'" @change="handleProductLineChange" clearable> | ||||||
|  | 					<el-option v-for="productLine in productLineList" :key="productLine.id" :value="productLine.id" | ||||||
|  | 						:label="productLine.name" /> | ||||||
|  | 				</el-select> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<!-- 工序 --> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<!-- <el-select v-model="dataForm.factoryId" :placeholder="$t('eq.name') + ' / ' + $t('eq.code')" clearable></el-select> --> | ||||||
|  | 				<el-select v-model="dataForm.wsId" :placeholder="'工序'" clearable> | ||||||
|  | 					<el-option v-for="ws in wsList" :key="ws.id" :value="ws.id" :label="ws.name" /> | ||||||
|  | 				</el-select> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<!-- 日期选择 --> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-date-picker key="date-picker" v-model="rawTime" type="date" :placeholder="'请选择日期'" format="yyyy-MM-dd" /> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<!-- 按钮 --> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-button @click="getDataList()">{{ $t('search') }}</el-button> | ||||||
|  | 				<!-- <el-button v-if="$hasPermission('monitoring:equipmentEffiency:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> --> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-button type="success" @click="addEq()">{{ '添加设备' }}</el-button> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  |  | ||||||
|  | 		<div class="time-chart" style="margin-top: 10px;"> | ||||||
|  | 			<div v-show="equipmentCount > 0" id="time-chart__inner" ref="time-chart__inner" class="time-chart__inner" | ||||||
|  | 				style="min-height: 50vh;" :style="{ height: autoHeight + 'px', width: '100%' }" /> | ||||||
|  | 			<div v-show="equipmentCount === 0">请先查询数据</div> | ||||||
|  | 			<!-- <div v-show="equipmentCount === 0">{{ $t('module.basicData.visual.hints.searchFirst') }}</div> --> | ||||||
|  | 		</div> | ||||||
|  |  | ||||||
|  | 		<el-dialog :visible.sync="dialogVisible" :title="'添加设备'" width="30%"> | ||||||
|  | 			<el-select v-model="eqId" style="width: 100%" placeholder="请选择设备" clearable> | ||||||
|  | 				<el-option v-for="eq in dialogEqList" :key="eq.id" :label="eq.name" :value="eq.id" /> | ||||||
|  | 			</el-select> | ||||||
|  | 			<div slot="footer"> | ||||||
|  | 				<el-button @click="dialogVisible = false">{{ '取消' }}</el-button> | ||||||
|  | 				<el-button type="primary" @click="dialogConfirm">{{ '确定' }}</el-button> | ||||||
|  | 			</div> | ||||||
|  | 		</el-dialog> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import * as echarts from 'echarts' | ||||||
|  | // import i18n from '@/i18n' | ||||||
|  | import BaseTable from '@/components/base-table' | ||||||
|  | import { calcMaxHeight } from '@/utils' | ||||||
|  | import moment from 'moment' | ||||||
|  | // import TableOperateComponent from '@/components/base-table/components/operationComponent' | ||||||
|  | // import TableTextComponent from '@/components/base-table/components/detailComponent' | ||||||
|  | // import { timeFilter } from '@/utils/filters' | ||||||
|  |  | ||||||
|  | function renderItem(params, api) { | ||||||
|  | 	var categoryIndex = api.value(0) | ||||||
|  | 	var start = api.coord([api.value(1), categoryIndex]) | ||||||
|  | 	var end = api.coord([api.value(2), categoryIndex]) | ||||||
|  | 	var height = 32 | ||||||
|  |  | ||||||
|  | 	return { | ||||||
|  | 		type: 'rect', | ||||||
|  | 		shape: echarts.graphic.clipRectByRect( | ||||||
|  | 			{ | ||||||
|  | 				x: start[0], | ||||||
|  | 				y: start[1] - height / 2, | ||||||
|  | 				width: end[0] - start[0], | ||||||
|  | 				height: height | ||||||
|  | 			}, | ||||||
|  | 			{ | ||||||
|  | 				x: params.coordSys.x, | ||||||
|  | 				y: params.coordSys.y, | ||||||
|  | 				width: params.coordSys.width, | ||||||
|  | 				height: params.coordSys.height | ||||||
|  | 			} | ||||||
|  | 		), | ||||||
|  | 		style: api.style() | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | class ChartOption { | ||||||
|  | 	constructor() { | ||||||
|  | 		this.color = ['#4caf50', '#ffb300', '#e53935'] | ||||||
|  | 		this.legend = { | ||||||
|  | 			data: [ | ||||||
|  | 				// i18n.t('module.basicData.visual.echartLegends.working'), | ||||||
|  | 				'正常', | ||||||
|  | 				'停机', | ||||||
|  | 				'故障' | ||||||
|  | 			], | ||||||
|  | 			bottom: '0%', | ||||||
|  | 			selectedMode: false, | ||||||
|  | 			textStyle: { | ||||||
|  | 				color: '#000' | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		this.tooltip = { | ||||||
|  | 			formatter: function (params) { | ||||||
|  | 				return moment(params.value[1]).format('YYYY-MM-DD HH:mm:ss') + ' - ' + moment(params.value[2]).format('YYYY-MM-DD HH:mm:ss') + ' : ' + params.name | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		this.title = { | ||||||
|  | 			// text: i18n.t('module.basicData.visual.echartTitles.eqStatus'), | ||||||
|  | 			text: '设备状态时序图', | ||||||
|  | 			left: 'center' | ||||||
|  | 		} | ||||||
|  | 		this.xAxis = { | ||||||
|  | 			type: 'time', | ||||||
|  | 			// min: +new Date().setHours(0, 0, 0, 0), | ||||||
|  | 			splitNumber: 24, | ||||||
|  | 			interval: 3600 * 1000, | ||||||
|  | 			axisTick: { | ||||||
|  | 				show: true, | ||||||
|  | 				alignWithLabel: true | ||||||
|  | 			}, | ||||||
|  | 			splitLine: { | ||||||
|  | 				show: true | ||||||
|  | 			}, | ||||||
|  | 			axisLine: { | ||||||
|  | 				show: true | ||||||
|  | 			}, | ||||||
|  | 			axisLabel: { | ||||||
|  | 				formatter: function (val) { | ||||||
|  | 					const time = new Date(val) | ||||||
|  | 					const hour = time.getHours() | ||||||
|  | 					const minute = time.getMinutes() | ||||||
|  | 					const hours = hour >= 10 ? hour + '' : '0' + hour | ||||||
|  | 					const minutes = minute >= 10 ? minute + '' : '0' + minute | ||||||
|  | 					return hours + ':' + minutes | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		this.yAxis = { | ||||||
|  | 			// data: Object.keys(eqData).map(item => eqData[item].name) | ||||||
|  | 			data: [] | ||||||
|  | 		} | ||||||
|  | 		this.series = [ | ||||||
|  | 			{ name: /** i18n.t('module.basicData.visual.echartLegends.working') */ '正常', type: 'bar', data: [] }, | ||||||
|  | 			{ name: '停机', type: 'bar', data: [] }, | ||||||
|  | 			{ name: '故障', type: 'bar', data: [] }, | ||||||
|  | 			{ | ||||||
|  | 				type: 'custom', | ||||||
|  | 				renderItem: renderItem, | ||||||
|  | 				itemStyle: { | ||||||
|  | 					opacity: 0.8 | ||||||
|  | 				}, | ||||||
|  | 				encode: { | ||||||
|  | 					x: [1, 2], | ||||||
|  | 					y: 0 | ||||||
|  | 				}, | ||||||
|  | 				data: [] | ||||||
|  | 			} | ||||||
|  | 		] | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	setTitle(title) { | ||||||
|  | 		this.title.text = title | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	// date: 服务器返回来的日期时间数据 | ||||||
|  | 	setXAxis(date) { | ||||||
|  | 		// this.xAxis.min = +new Date(date).setHours(0) | ||||||
|  | 		this.xAxis.min = +new Date(date).setHours(0, 0, 0, 0) | ||||||
|  | 		this.xAxis.max = this.xAxis.min + 3600 * 1000 * 24 | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	setYAxis(data) { | ||||||
|  | 		this.yAxis.data = data | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	setData(data) { | ||||||
|  | 		this.series[3].data = data | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			/** hfxny part */ | ||||||
|  | 			wsList: [], | ||||||
|  | 			productLineList: [], | ||||||
|  | 			chart: null, | ||||||
|  | 			chartOption: new ChartOption(), | ||||||
|  | 			equipments: {}, | ||||||
|  | 			state: ['正常', '停机', '故障'], | ||||||
|  | 			colors: ['#4caf50', '#ffb300', '#e53935'], | ||||||
|  | 			// queryBuffer: {}, | ||||||
|  | 			// tableConfigs, | ||||||
|  | 			calcMaxHeight, | ||||||
|  | 			timeType: 'range', | ||||||
|  | 			currentLine: null, | ||||||
|  | 			rawTime: new Date(), | ||||||
|  | 			dataForm: { | ||||||
|  | 				wsId: null, | ||||||
|  | 				productlines: null, | ||||||
|  | 				startTime: null, | ||||||
|  | 				entTime: null | ||||||
|  | 			}, | ||||||
|  | 			dataList: [], | ||||||
|  | 			pageIndex: 1, | ||||||
|  | 			pageSize: 10, | ||||||
|  | 			totalPage: 0, | ||||||
|  | 			dataListLoading: false, | ||||||
|  | 			/** dialog */ | ||||||
|  | 			dialogVisible: false, | ||||||
|  | 			eqId: null, | ||||||
|  | 			dialogEqList: [] | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	components: { | ||||||
|  | 		BaseTable | ||||||
|  | 	}, | ||||||
|  | 	computed: { | ||||||
|  | 		autoHeight: function () { | ||||||
|  | 			return Object.keys(this.equipments).length * 100 || 500 | ||||||
|  | 		}, | ||||||
|  | 		equipmentCount: function () { | ||||||
|  | 			return Object.keys(this.equipments).length | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	created() { | ||||||
|  | 		this.getEqList() | ||||||
|  | 	}, | ||||||
|  | 	mounted() { | ||||||
|  | 		this.$nextTick(() => { | ||||||
|  | 			this.initChart() | ||||||
|  | 		}) | ||||||
|  | 	}, | ||||||
|  | 	activated() { | ||||||
|  | 		this.getProductLineList().then(() => { | ||||||
|  | 			this.getWorksetionList() | ||||||
|  | 		}) | ||||||
|  | 	}, | ||||||
|  | 	updated() { | ||||||
|  | 		if (this.chart) this.chart.resize() | ||||||
|  | 	}, | ||||||
|  | 	watch: { | ||||||
|  | 		timeType() { | ||||||
|  | 			// 防止切换日期类型时报错 | ||||||
|  | 			this.rawTime = null | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		initChart() { | ||||||
|  | 			if (!this.chart) { | ||||||
|  | 				this.chart = echarts.init(this.$refs['time-chart__inner']) | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		// 获取产线列表 | ||||||
|  | 		getProductLineList() { | ||||||
|  | 			return this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/productionLine/list'), | ||||||
|  | 				method: 'get' | ||||||
|  | 			}).then(({ data: res }) => { | ||||||
|  | 				if (res && res.code === 0) { | ||||||
|  | 					this.productLineList = res.data | ||||||
|  | 					/** set default */ | ||||||
|  | 					if (this.productLineList.length) { | ||||||
|  | 						this.dataForm.productlines = this.productLineList[0].id | ||||||
|  | 					} | ||||||
|  | 				} else { | ||||||
|  | 					this.productLineList = [] | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		// 获取工序列表 | ||||||
|  | 		getWorksetionList() { | ||||||
|  | 			// 分页列表才有根据产线过滤功能 | ||||||
|  | 			this.$http({ | ||||||
|  | 				// url: this.$http.adornUrl('/monitoring/workshopSection/list'), | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/workshopSection/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams({ | ||||||
|  | 					limit: 99999, | ||||||
|  | 					page: 1, | ||||||
|  | 					lineId: this.dataForm.productlines ?? '' | ||||||
|  | 				}) | ||||||
|  | 			}).then(({ data: res }) => { | ||||||
|  | 				if (res && res.code === 0) { | ||||||
|  | 					this.wsList = res.data.list | ||||||
|  | 					/** set default */ | ||||||
|  | 					if (this.wsList.length) { | ||||||
|  | 						this.dataForm.wsId = this.wsList[0].id | ||||||
|  | 					} else { | ||||||
|  | 						this.dataForm.wsId = null | ||||||
|  | 					} | ||||||
|  | 				} else { | ||||||
|  | 					this.wsList.splice(0) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		// 把服务器数据按照设备分组 | ||||||
|  | 		transformDataToEquipments(dataList) { | ||||||
|  | 			console.log('transformDataToEquipments() datalist: ', dataList) | ||||||
|  | 			const equipments = {} | ||||||
|  | 			dataList.map(item => { | ||||||
|  | 				if (equipments[item.eqId]) { | ||||||
|  | 					// 如果设备已存在 | ||||||
|  | 					// equipments[item.eqId].name = item.eqName | ||||||
|  | 					equipments[item.eqId].status.push({ | ||||||
|  | 						startTime: +new Date(item.startTime), | ||||||
|  | 						endTime: +new Date(item.endTime), | ||||||
|  | 						status: this.state[item.status] // 0 正常、1 停机、2 故障 | ||||||
|  | 					}) | ||||||
|  | 				} else { | ||||||
|  | 					equipments[item.eqId] = { | ||||||
|  | 						name: item.eqName, | ||||||
|  | 						status: [ | ||||||
|  | 							{ | ||||||
|  | 								startTime: +new Date(item.startTime), | ||||||
|  | 								endTime: +new Date(item.endTime), | ||||||
|  | 								status: this.state[item.status] // 0 正常、1 停机、2 故障 | ||||||
|  | 							} | ||||||
|  | 						] | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 			console.log('created equipments --- ', equipments) | ||||||
|  | 			return equipments | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		// 把分组好的设备数据转换为echarts需要的series数据 | ||||||
|  | 		transformEquipmentsToSeries(equipments) { | ||||||
|  | 			const seriesData = [] | ||||||
|  | 			Object.entries(equipments).map(([key, item], index) => { | ||||||
|  | 				item.status.forEach(status => { | ||||||
|  | 					seriesData.push({ | ||||||
|  | 						name: status.status, | ||||||
|  | 						value: [index, status.startTime, status.endTime], | ||||||
|  | 						itemStyle: { | ||||||
|  | 							normal: { | ||||||
|  | 								color: status.status === '正常' ? '#4caf50' : status.status === '停机' ? '#ffb300' : status.status === '故障' ? '#e53935' : null | ||||||
|  | 							} | ||||||
|  | 						} | ||||||
|  | 					}) | ||||||
|  | 				}) | ||||||
|  | 			}) | ||||||
|  | 			return seriesData | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		// 获取数据列表 | ||||||
|  | 		getDataList() { | ||||||
|  | 			let startTime = this.rawTime | ||||||
|  | 				? moment(this.rawTime) | ||||||
|  | 					.set({ hour: 0, minute: 0, second: 0, millisecond: 0 }) | ||||||
|  | 					.format('YYYY-MM-DDTHH:mm:ss') | ||||||
|  | 				: '' | ||||||
|  | 			let endTime = startTime | ||||||
|  | 				? moment(startTime) | ||||||
|  | 					.add(1, 'd') | ||||||
|  | 					.format('YYYY-MM-DDTHH:mm:ss') | ||||||
|  | 				: '' | ||||||
|  |  | ||||||
|  | 			// this.dataListLoading = true | ||||||
|  | 			const condition = { | ||||||
|  | 				startTime, | ||||||
|  | 				endTime, | ||||||
|  | 				productlines: [this.dataForm.productlines], | ||||||
|  | 				wsId: this.dataForm.wsId | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			/** fetch data */ | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/eqAnalysis/timeAndStatus'), | ||||||
|  | 				method: 'post', | ||||||
|  | 				data: condition | ||||||
|  | 			}).then(({ data: res }) => { | ||||||
|  | 				if (res.code === 500) { | ||||||
|  | 					this.dataList.splice(0) | ||||||
|  | 					this.equipments = {} // 关闭 echarts 的显示 | ||||||
|  | 					this.$message.error(res.msg) | ||||||
|  | 				} else { | ||||||
|  | 					/** handle actual data */ | ||||||
|  | 					this.dataList = res.data | ||||||
|  |  | ||||||
|  | 					/** test data */ | ||||||
|  | 					// this.dataList = [ | ||||||
|  | 					// 	{ | ||||||
|  | 					// 		eqId: 'eq-001', | ||||||
|  | 					// 		eqName: 'A1预热机', | ||||||
|  | 					// 		startTime: '2022-05-04T00:30:34', | ||||||
|  | 					// 		endTime: '2022-05-04T08:30:34', | ||||||
|  | 					// 		status: 0 | ||||||
|  | 					// 	}, | ||||||
|  | 					// 	{ | ||||||
|  | 					// 		eqId: 'eq-001', | ||||||
|  | 					// 		eqName: 'A1预热机', | ||||||
|  | 					// 		startTime: '2022-05-04T08:30:34', | ||||||
|  | 					// 		endTime: '2022-05-04T09:30:34', | ||||||
|  | 					// 		status: 1 | ||||||
|  | 					// 	}, | ||||||
|  | 					// 	{ | ||||||
|  | 					// 		eqId: 'eq-001', | ||||||
|  | 					// 		eqName: 'A1预热机', | ||||||
|  | 					// 		startTime: '2022-05-04T09:30:34', | ||||||
|  | 					// 		endTime: '2022-05-04T11:30:34', | ||||||
|  | 					// 		status: 2 | ||||||
|  | 					// 	}, | ||||||
|  | 					// 	{ | ||||||
|  | 					// 		eqId: 'eq-001', | ||||||
|  | 					// 		eqName: 'A1预热机', | ||||||
|  | 					// 		startTime: '2022-05-04T11:30:34', | ||||||
|  | 					// 		endTime: '2022-05-04T13:30:34', | ||||||
|  | 					// 		status: 1 | ||||||
|  | 					// 	} | ||||||
|  | 					// ] | ||||||
|  |  | ||||||
|  | 					this.equipments = this.transformDataToEquipments(this.dataList) | ||||||
|  | 					this.chartOption.setYAxis(Object.keys(this.equipments).map(eId => this.equipments[eId].name)) | ||||||
|  | 					console.log('(((set x axis))): ', this.dataList[0].startTime) | ||||||
|  | 					this.chartOption.setXAxis(this.dataList[0].startTime) | ||||||
|  | 					this.chartOption.setData(this.transformEquipmentsToSeries(this.equipments)) | ||||||
|  |  | ||||||
|  | 					this.$nextTick(() => { | ||||||
|  | 						this.renderChart() | ||||||
|  | 					}) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		handleProductLineChange(val) { | ||||||
|  | 			this.getWorksetionList() | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		// 渲染 echarts | ||||||
|  | 		renderChart() { | ||||||
|  | 			console.log('>>> chart configs: ', this.chartOption) | ||||||
|  | 			this.chart.setOption(this.chartOption) | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		// 获取对话框里的设备列表 | ||||||
|  | 		getEqList() { | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/equipment/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams({ | ||||||
|  | 					page: 1, | ||||||
|  | 					limit: 99999 | ||||||
|  | 				}) | ||||||
|  | 			}).then(({ data }) => { | ||||||
|  | 				if (data && data.code === 0) { | ||||||
|  | 					this.dialogEqList = data.data.list | ||||||
|  | 				} else { | ||||||
|  | 					this.dialogEqList.splice(0) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		// 添加设备 | ||||||
|  | 		addEq() { | ||||||
|  | 			if (this.equipmentCount) { | ||||||
|  | 				this.dialogVisible = true | ||||||
|  | 			} else { | ||||||
|  | 				this.$message.warning('请先查询数据') | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		// 确认添加设备 | ||||||
|  | 		dialogConfirm() { | ||||||
|  | 			let startTime = this.rawTime | ||||||
|  | 				? moment(this.rawTime) | ||||||
|  | 					.set({ hour: 0, minute: 0, second: 0, millisecond: 0 }) | ||||||
|  | 					.format('YYYY-MM-DDTHH:mm:ss') | ||||||
|  | 				: '' | ||||||
|  | 			let endTime = startTime | ||||||
|  | 				? moment(startTime) | ||||||
|  | 					.add(1, 'd') | ||||||
|  | 					.format('YYYY-MM-DDTHH:mm:ss') | ||||||
|  | 				: '' | ||||||
|  |  | ||||||
|  | 			const condition = { | ||||||
|  | 				startTime, | ||||||
|  | 				endTime, | ||||||
|  | 				productlines: [this.dataForm.productlines], | ||||||
|  | 				wsId: this.dataForm.wsId, | ||||||
|  | 				eqId: this.eqId | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			/** fetch data */ | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/eqAnalysis/timeAndStatus'), | ||||||
|  | 				method: 'post', | ||||||
|  | 				data: condition | ||||||
|  | 			}).then(({ data: res }) => { | ||||||
|  | 				if (res.code === 500) { | ||||||
|  | 					this.$message.error(res.msg) | ||||||
|  | 				} else { | ||||||
|  | 					/** handle new equipment */ | ||||||
|  | 					const newEqStatusList = res.data | ||||||
|  | 					console.log('添加设备', res) | ||||||
|  | 					const newEq = this.transformDataToEquipments(newEqStatusList) | ||||||
|  | 					this.$set(this.equipments, Object.keys(newEq)[0], newEq[Object.keys(newEq)[0]]) | ||||||
|  | 					this.chartOption.setYAxis(Object.keys(this.equipments).map(item => this.equipments[item].name)) | ||||||
|  | 					this.chartOption.setData(this.transformEquipmentsToSeries(this.equipments)) | ||||||
|  |  | ||||||
|  | 					this.$message.success('新设备数据获取成功') | ||||||
|  | 					this.$nextTick(() => { | ||||||
|  | 						this.dialogVisible = false | ||||||
|  | 						this.renderChart() | ||||||
|  | 					}) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		// 每页数 | ||||||
|  | 		sizeChangeHandle(val) { | ||||||
|  | 			this.pageSize = val | ||||||
|  | 			this.pageIndex = 1 | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 当前页 | ||||||
|  | 		currentChangeHandle(val) { | ||||||
|  | 			this.pageIndex = val | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 多选 | ||||||
|  | 		selectionChangeHandle(val) { | ||||||
|  | 			this.dataListSelections = val | ||||||
|  | 		}, | ||||||
|  | 		handleOperations({ type, data: id }) { | ||||||
|  | 			switch (type) { | ||||||
|  | 				case 'view-detail': | ||||||
|  | 					return this.addOrUpdateHandle(id, true) | ||||||
|  | 				case 'edit': | ||||||
|  | 					return this.addOrUpdateHandle(id) | ||||||
|  | 				case 'delete': | ||||||
|  | 					return this.deleteHandle(id) | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style scoped> | ||||||
|  | /* .time-chart__inner { | ||||||
|  | 	transition: all 300ms ease-out; | ||||||
|  | } */ | ||||||
|  | </style> | ||||||
							
								
								
									
										225
									
								
								src/views/modules/monitoring/equipmentType.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										225
									
								
								src/views/modules/monitoring/equipmentType.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,225 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="mod-config"> | ||||||
|  | 		<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)"> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-input v-model="dataForm.key" :placeholder="$t('eq.type')" clearable></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-button @click="currentChangeHandle(1)">{{ $t('query') }}</el-button> | ||||||
|  | 				<el-button v-if="$hasPermission('monitoring:equipmenttype:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  |  | ||||||
|  | 		<base-table | ||||||
|  | 			:page="pageIndex" | ||||||
|  | 			:size="pageSize" | ||||||
|  | 			:data="dataList" | ||||||
|  | 			:table-head-configs="tableConfigs" | ||||||
|  | 			:max-height="calcMaxHeight(8)" | ||||||
|  | 			@operate-event="handleOperations" | ||||||
|  | 			@refreshDataList="getDataList" | ||||||
|  | 		/> | ||||||
|  | 		<el-pagination | ||||||
|  | 			@size-change="sizeChangeHandle" | ||||||
|  | 			@current-change="currentChangeHandle" | ||||||
|  | 			:current-page="pageIndex" | ||||||
|  | 			:page-sizes="[10, 20, 50, 100]" | ||||||
|  | 			:page-size="pageSize" | ||||||
|  | 			:total="totalPage" | ||||||
|  | 			layout="total, sizes, prev, pager, next, jumper" | ||||||
|  | 		> | ||||||
|  | 		</el-pagination> | ||||||
|  | 		<!-- 弹窗, 新增 / 修改 --> | ||||||
|  | 		<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" :configs="addOrUpdateConfigs" @refreshDataList="getDataList" @destory-dialog="handleDestroyDialog" /> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { calcMaxHeight } from '@/utils' | ||||||
|  | import { timeFilter } from '@/utils/filters' | ||||||
|  | import AddOrUpdate from '@/components/base-dialog/addOrUpdate' | ||||||
|  | // import AddOrUpdate from './equipmentType-add-or-update' | ||||||
|  | import i18n from '@/i18n' | ||||||
|  | import BaseTable from '@/components/base-table' | ||||||
|  | import TableOperateComponent from '@/components/base-table/components/operationComponent' | ||||||
|  | // import TableTextComponent from '@/components/base-table/components/detailComponent' | ||||||
|  |  | ||||||
|  | const tableConfigs = [ | ||||||
|  | 	{ | ||||||
|  | 		type: 'index', | ||||||
|  | 		name: i18n.t('index') | ||||||
|  | 	}, | ||||||
|  | 	{ prop: 'createTime', name: i18n.t('createTime'), filter: timeFilter }, | ||||||
|  | 	{ prop: 'name', name: i18n.t('eq.type') }, | ||||||
|  | 	{ prop: 'code', name: i18n.t('eq.typecode') }, | ||||||
|  | 	{ prop: 'remark', name: i18n.t('remark') }, | ||||||
|  | 	{ prop: 'operations', name: i18n.t('handle'), fixed: 'right', width: 180, subcomponent: TableOperateComponent, options: ['edit', 'delete'] } | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | const addOrUpdateConfigs = { | ||||||
|  | 	type: 'dialog', | ||||||
|  | 	infoUrl: '/monitoring/equipmentType', | ||||||
|  | 	fields: [ | ||||||
|  | 		{ name: 'name', required: true, label: i18n.t('eq.type') }, | ||||||
|  | 		{ name: 'code', required: true, label: i18n.t('eq.typecode'), api: '/monitoring/equipmentType/getCode' }, | ||||||
|  | 		{ name: 'parentId', label: i18n.t('eq.parent'), type: 'cascader', props: { label: 'name', value: 'id', checkStrictly: true, emitPath: false }, options: [] }, | ||||||
|  | 		'remark' | ||||||
|  | 	], | ||||||
|  | 	operations: [ | ||||||
|  | 		{ name: 'cancel', showAlways: true }, | ||||||
|  | 		{ name: 'save', url: '/monitoring/equipmentType', permission: 'monitoring:equipmenttype:save', showOnEdit: false }, | ||||||
|  | 		{ name: 'update', url: '/monitoring/equipmentType', permission: 'monitoring:equipmenttype:update', showOnEdit: true } | ||||||
|  | 	], | ||||||
|  | 	extraComponents: [ | ||||||
|  | 		{ | ||||||
|  | 			name: 'files', | ||||||
|  | 			fieldType: 'array', | ||||||
|  | 			label: i18n.t('upload.title'), | ||||||
|  | 			component: () => import('@/components/base-upload'), | ||||||
|  | 			props: { | ||||||
|  | 				// 上传组件需要的 props | ||||||
|  | 				url: '/monitoring/attachment/uploadFileFormData', | ||||||
|  | 				extraParams: { typeCode: 'EquipmentTypeFile' }, | ||||||
|  | 				buttonContent: i18n.t('upload.button'), | ||||||
|  | 				tip: i18n.t('hints.upload2m') | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	] | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			addOrUpdateConfigs, | ||||||
|  | 			calcMaxHeight, | ||||||
|  | 			tableConfigs, | ||||||
|  | 			dataForm: { | ||||||
|  | 				key: '' | ||||||
|  | 			}, | ||||||
|  | 			dataList: [], | ||||||
|  | 			pageIndex: 1, | ||||||
|  | 			pageSize: 10, | ||||||
|  | 			totalPage: 0, | ||||||
|  | 			dataListLoading: false, | ||||||
|  | 			dataListSelections: [], | ||||||
|  | 			addOrUpdateVisible: false | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	components: { | ||||||
|  | 		AddOrUpdate, | ||||||
|  | 		BaseTable | ||||||
|  | 	}, | ||||||
|  | 	activated() { | ||||||
|  | 		this.getTreeEquipmentType() | ||||||
|  | 		this.getDataList() | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		// destroy dialog | ||||||
|  | 		handleDestroyDialog() { | ||||||
|  | 			setTimeout(() => { | ||||||
|  | 				this.addOrUpdateVisible = false | ||||||
|  | 			}, /** after dialog animated */ 200) | ||||||
|  | 		}, | ||||||
|  | 		// 获取设备类型树形数据 | ||||||
|  | 		getTreeEquipmentType() { | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/equipmentType/getTree'), | ||||||
|  | 				method: 'post' | ||||||
|  | 			}).then(({ data: res }) => { | ||||||
|  | 				if (res && res.code === 0 && res.data.length) { | ||||||
|  | 					this.addOrUpdateConfigs.fields.find(item => item.name === 'parentId').options = res.data | ||||||
|  | 				} else { | ||||||
|  | 					this.addOrUpdateConfigs.fields.find(item => item.name === 'parentId').options.splice(0) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 获取数据列表 | ||||||
|  | 		getDataList() { | ||||||
|  | 			this.addOrUpdateVisible = false | ||||||
|  | 			this.dataListLoading = true | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/equipmentType/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams({ | ||||||
|  | 					page: this.pageIndex, | ||||||
|  | 					limit: this.pageSize, | ||||||
|  | 					key: this.dataForm.key | ||||||
|  | 				}) | ||||||
|  | 			}).then(({ data }) => { | ||||||
|  | 				if (data && data.code === 0) { | ||||||
|  | 					this.dataList = data.data.list | ||||||
|  | 					this.totalPage = data.data.total | ||||||
|  | 				} else { | ||||||
|  | 					this.dataList = [] | ||||||
|  | 					this.totalPage = 0 | ||||||
|  | 				} | ||||||
|  | 				this.dataListLoading = false | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 每页数 | ||||||
|  | 		sizeChangeHandle(val) { | ||||||
|  | 			this.pageSize = val | ||||||
|  | 			this.pageIndex = 1 | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 当前页 | ||||||
|  | 		currentChangeHandle(val) { | ||||||
|  | 			this.pageIndex = val | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 多选 | ||||||
|  | 		selectionChangeHandle(val) { | ||||||
|  | 			this.dataListSelections = val | ||||||
|  | 		}, | ||||||
|  | 		handleOperations({ type, data: id }) { | ||||||
|  | 			switch (type) { | ||||||
|  | 				case 'edit': | ||||||
|  | 					return this.addOrUpdateHandle(id) | ||||||
|  | 				case 'delete': | ||||||
|  | 					return this.deleteHandle(id) | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		// 新增 / 修改 | ||||||
|  | 		addOrUpdateHandle(id) { | ||||||
|  | 			// 更新树形结构 | ||||||
|  | 			this.getTreeEquipmentType() | ||||||
|  | 			this.addOrUpdateVisible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs.addOrUpdate.init(id) | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 删除 | ||||||
|  | 		deleteHandle(id) { | ||||||
|  | 			var ids = id | ||||||
|  | 				? [id] | ||||||
|  | 				: this.dataListSelections.map(item => { | ||||||
|  | 						return item.id | ||||||
|  | 				  }) | ||||||
|  | 			this.$confirm(`${i18n.t('prompt.info', { handle: id ? i18n.t('delete').toLowerCase() : i18n.t('deleteBatch').toLowerCase() })}`, i18n.t('prompt.title'), { | ||||||
|  | 				confirmButtonText: i18n.t('confirm'), | ||||||
|  | 				cancelButtonText: i18n.t('cancel'), | ||||||
|  | 				type: 'warning' | ||||||
|  | 			}).then(() => { | ||||||
|  | 				this.$http({ | ||||||
|  | 					url: this.$http.adornUrl('/monitoring/equipmentType'), | ||||||
|  | 					method: 'delete', | ||||||
|  | 					data: this.$http.adornData(ids, false, 'raw') | ||||||
|  | 				}).then(({ data }) => { | ||||||
|  | 					if (data && data.code === 0) { | ||||||
|  | 						this.$message({ | ||||||
|  | 							message: i18n.t('prompt.success'), | ||||||
|  | 							type: 'success', | ||||||
|  | 							duration: 1500, | ||||||
|  | 							onClose: () => { | ||||||
|  | 								this.getDataList() | ||||||
|  | 							} | ||||||
|  | 						}) | ||||||
|  | 					} else { | ||||||
|  | 						this.$message.error(data.msg) | ||||||
|  | 					} | ||||||
|  | 				}) | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										184
									
								
								src/views/modules/monitoring/equipmentTypeFile-add-or-update.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										184
									
								
								src/views/modules/monitoring/equipmentTypeFile-add-or-update.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,184 @@ | |||||||
|  | <template> | ||||||
|  | 	<el-dialog :title="!dataForm.id ? i18n.t('add') : i18n.t('update')" :close-on-click-modal="false" :visible.sync="visible"> | ||||||
|  | 		<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" label-width="80px"> | ||||||
|  | 			<el-form-item label="设备类型ID" prop="equipmentTypeId"> | ||||||
|  | 				<el-input v-model="dataForm.equipmentTypeId" placeholder="设备类型ID"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="文件ID" prop="fileId"> | ||||||
|  | 				<el-input v-model="dataForm.fileId" placeholder="文件ID"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="文件类型编码" prop="typeCode"> | ||||||
|  | 				<el-input v-model="dataForm.typeCode" placeholder="文件类型编码"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="文件名称" prop="fileName"> | ||||||
|  | 				<el-input v-model="dataForm.fileName" placeholder="文件名称"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="下载地址" prop="fileUrl"> | ||||||
|  | 				<el-input v-model="dataForm.fileUrl" placeholder="下载地址"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('desc')" prop="description"> | ||||||
|  | 				<el-input v-model="dataForm.description" :placeholder="$t('desc')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="启用状态:0 、停用,1、启用" prop="enabled"> | ||||||
|  | 				<el-input v-model="dataForm.enabled" placeholder="启用状态:0 、停用,1、启用"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="备注" prop="remark"> | ||||||
|  | 				<el-input v-model="dataForm.remark" placeholder="备注"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="删除标志,是否有效:1 可用 0不可用" prop="valid"> | ||||||
|  | 				<el-input v-model="dataForm.valid" placeholder="删除标志,是否有效:1 可用 0不可用"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('creator')" prop="creatorId"> | ||||||
|  | 				<el-input v-model="dataForm.creatorId" :placeholder="$t('creator')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('creatorName')" prop="creatorName"> | ||||||
|  | 				<el-input v-model="dataForm.creatorName" :placeholder="$t('creatorName')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="创建时间" prop="createTime"> | ||||||
|  | 				<el-input v-model="dataForm.createTime" placeholder="创建时间"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('updator')" prop="updaterId"> | ||||||
|  | 				<el-input v-model="dataForm.updaterId" :placeholder="$t('updator')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('updatorName')" prop="updaterName"> | ||||||
|  | 				<el-input v-model="dataForm.updaterName" :placeholder="$t('updatorName')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('updateTime')" prop="updateTime"> | ||||||
|  | 				<el-input v-model="dataForm.updateTime" :placeholder="$t('updateTime')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('version')" prop="version"> | ||||||
|  | 				<el-input v-model="dataForm.version" :placeholder="$t('version')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  | 		<span slot="footer" class="dialog-footer"> | ||||||
|  | 			<el-button @click="visible = false">{{ $t('cancel') }}</el-button> | ||||||
|  | 			<el-button type="primary" @click="dataFormSubmit()">{{ $t('confirm') }}</el-button> | ||||||
|  | 		</span> | ||||||
|  | 	</el-dialog> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			visible: false, | ||||||
|  | 			dataForm: { | ||||||
|  | 				id: 0, | ||||||
|  | 				equipmentTypeId: '', | ||||||
|  | 				fileId: '', | ||||||
|  | 				typeCode: '', | ||||||
|  | 				fileName: '', | ||||||
|  | 				fileUrl: '', | ||||||
|  | 				description: '', | ||||||
|  | 				enabled: '', | ||||||
|  | 				remark: '', | ||||||
|  | 				valid: '', | ||||||
|  | 				creatorId: '', | ||||||
|  | 				creatorName: '', | ||||||
|  | 				createTime: '', | ||||||
|  | 				updaterId: '', | ||||||
|  | 				updaterName: '', | ||||||
|  | 				updateTime: '', | ||||||
|  | 				version: '' | ||||||
|  | 			}, | ||||||
|  | 			dataRule: { | ||||||
|  | 				equipmentTypeId: [{ required: true, message: '设备类型ID不能为空', trigger: 'blur' }], | ||||||
|  | 				fileId: [{ required: true, message: '文件ID不能为空', trigger: 'blur' }], | ||||||
|  | 				typeCode: [{ required: true, message: '文件类型编码不能为空', trigger: 'blur' }], | ||||||
|  | 				fileName: [{ required: true, message: '文件名称不能为空', trigger: 'blur' }], | ||||||
|  | 				fileUrl: [{ required: true, message: '下载地址不能为空', trigger: 'blur' }], | ||||||
|  | 				description: [{ required: true, message: '描述不能为空', trigger: 'blur' }], | ||||||
|  | 				enabled: [{ required: true, message: '启用状态:0 、停用,1、启用不能为空', trigger: 'blur' }], | ||||||
|  | 				remark: [{ required: true, message: '备注不能为空', trigger: 'blur' }], | ||||||
|  | 				valid: [{ required: true, message: '删除标志,是否有效:1 可用 0不可用不能为空', trigger: 'blur' }], | ||||||
|  | 				creatorId: [{ required: true, message: '创建人不能为空', trigger: 'blur' }], | ||||||
|  | 				creatorName: [{ required: true, message: '创建人姓名不能为空', trigger: 'blur' }], | ||||||
|  | 				createTime: [{ required: true, message: '创建时间不能为空', trigger: 'blur' }], | ||||||
|  | 				updaterId: [{ required: true, message: '更新人不能为空', trigger: 'blur' }], | ||||||
|  | 				updaterName: [{ required: true, message: '更新人姓名不能为空', trigger: 'blur' }], | ||||||
|  | 				updateTime: [{ required: true, message: '更新时间不能为空', trigger: 'blur' }], | ||||||
|  | 				version: [{ required: true, message: '版本号不能为空', trigger: 'blur' }] | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		init(id) { | ||||||
|  | 			this.dataForm.id = id || 0 | ||||||
|  | 			this.visible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs['dataForm'].resetFields() | ||||||
|  | 				if (this.dataForm.id) { | ||||||
|  | 					this.$http({ | ||||||
|  | 						url: this.$http.adornUrl(`/monitoring/equipmentTypeFile/${this.dataForm.id}`), | ||||||
|  | 						method: 'get', | ||||||
|  | 						params: this.$http.adornParams() | ||||||
|  | 					}).then(({ data }) => { | ||||||
|  | 						if (data && data.code === 0) { | ||||||
|  | 							this.dataForm.equipmentTypeId = data.equipmentypeFile.equipmentTypeId | ||||||
|  | 							this.dataForm.fileId = data.equipmentypeFile.fileId | ||||||
|  | 							this.dataForm.typeCode = data.equipmentypeFile.typeCode | ||||||
|  | 							this.dataForm.fileName = data.equipmentypeFile.fileName | ||||||
|  | 							this.dataForm.fileUrl = data.equipmentypeFile.fileUrl | ||||||
|  | 							this.dataForm.description = data.equipmentypeFile.description | ||||||
|  | 							this.dataForm.enabled = data.equipmentypeFile.enabled | ||||||
|  | 							this.dataForm.remark = data.equipmentypeFile.remark | ||||||
|  | 							this.dataForm.valid = data.equipmentypeFile.valid | ||||||
|  | 							this.dataForm.creatorId = data.equipmentypeFile.creatorId | ||||||
|  | 							this.dataForm.creatorName = data.equipmentypeFile.creatorName | ||||||
|  | 							this.dataForm.createTime = data.equipmentypeFile.createTime | ||||||
|  | 							this.dataForm.updaterId = data.equipmentypeFile.updaterId | ||||||
|  | 							this.dataForm.updaterName = data.equipmentypeFile.updaterName | ||||||
|  | 							this.dataForm.updateTime = data.equipmentypeFile.updateTime | ||||||
|  | 							this.dataForm.version = data.equipmentypeFile.version | ||||||
|  | 						} | ||||||
|  | 					}) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 表单提交 | ||||||
|  | 		dataFormSubmit() { | ||||||
|  | 			this.$refs['dataForm'].validate(valid => { | ||||||
|  | 				if (valid) { | ||||||
|  | 					this.$http({ | ||||||
|  | 						url: this.$http.adornUrl(`/monitoring/equipmentTypeFile/${!this.dataForm.id ? '' : this.dataForm.id}`), | ||||||
|  | 						method: this.dataForm.id ? 'put' : 'post', | ||||||
|  | 						data: this.$http.adornData({ | ||||||
|  | 							id: this.dataForm.id || undefined, | ||||||
|  | 							equipmentTypeId: this.dataForm.equipmentTypeId, | ||||||
|  | 							fileId: this.dataForm.fileId, | ||||||
|  | 							typeCode: this.dataForm.typeCode, | ||||||
|  | 							fileName: this.dataForm.fileName, | ||||||
|  | 							fileUrl: this.dataForm.fileUrl, | ||||||
|  | 							description: this.dataForm.description, | ||||||
|  | 							enabled: this.dataForm.enabled, | ||||||
|  | 							remark: this.dataForm.remark, | ||||||
|  | 							valid: this.dataForm.valid, | ||||||
|  | 							creatorId: this.dataForm.creatorId, | ||||||
|  | 							creatorName: this.dataForm.creatorName, | ||||||
|  | 							createTime: this.dataForm.createTime, | ||||||
|  | 							updaterId: this.dataForm.updaterId, | ||||||
|  | 							updaterName: this.dataForm.updaterName, | ||||||
|  | 							updateTime: this.dataForm.updateTime, | ||||||
|  | 							version: this.dataForm.version | ||||||
|  | 						}) | ||||||
|  | 					}).then(({ data }) => { | ||||||
|  | 						if (data && data.code === 0) { | ||||||
|  | 							this.$message({ | ||||||
|  | 								message: i18n.t('prompt.success'), | ||||||
|  | 								type: 'success', | ||||||
|  | 								duration: 1500, | ||||||
|  | 								onClose: () => { | ||||||
|  | 									this.visible = false | ||||||
|  | 									this.$emit('refreshDataList') | ||||||
|  | 								} | ||||||
|  | 							}) | ||||||
|  | 						} else { | ||||||
|  | 							this.$message.error(data.msg) | ||||||
|  | 						} | ||||||
|  | 					}) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										168
									
								
								src/views/modules/monitoring/equipmentTypeFile.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										168
									
								
								src/views/modules/monitoring/equipmentTypeFile.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,168 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="mod-config"> | ||||||
|  | 		<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)"> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-input v-model="dataForm.key" :placeholder="$t('parameter')" clearable></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-button @click="currentChangeHandle(1)">{{ $t('query') }}</el-button> | ||||||
|  | 				<el-button v-if="$hasPermission('monitoring:equipmentypefile:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  |  | ||||||
|  | 		<base-table :data="dataList" :table-head-configs="tableConfigs" :max-height="calcMaxHeight(8)" /> | ||||||
|  | 		<el-pagination | ||||||
|  | 			@size-change="sizeChangeHandle" | ||||||
|  | 			@current-change="currentChangeHandle" | ||||||
|  | 			:current-page="pageIndex" | ||||||
|  | 			:page-sizes="[10, 20, 50, 100]" | ||||||
|  | 			:page-size="pageSize" | ||||||
|  | 			:total="totalPage" | ||||||
|  | 			layout="total, sizes, prev, pager, next, jumper" | ||||||
|  | 		> | ||||||
|  | 		</el-pagination> | ||||||
|  | 		<!-- 弹窗, 新增 / 修改 --> | ||||||
|  | 		<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { calcMaxHeight } from '@/utils' | ||||||
|  | import { timeFilter } from '@/utils/filters' | ||||||
|  | import AddOrUpdate from './equipmentTypeFile-add-or-update' | ||||||
|  | import i18n from '@/i18n' | ||||||
|  | import BaseTable from '@/components/base-table' | ||||||
|  | import TableOperateComponent from '@/components/base-table/components/operationComponent' | ||||||
|  | import TableTextComponent from '@/components/base-table/components/detailComponent' | ||||||
|  |  | ||||||
|  | const tableConfigs = [ | ||||||
|  | 	{ prop: 'id', name: 'ID' }, | ||||||
|  | 	{ prop: 'equipmentTypeId', name: '设备类型ID' }, | ||||||
|  | 	{ prop: 'fileId', name: '文件ID' }, | ||||||
|  | 	{ prop: 'typeCode', name: i18n.t('file.typeCode') }, | ||||||
|  | 	{ prop: 'fileName', name: i18n.t('file.name') }, | ||||||
|  | 	{ prop: 'fileUrl', name: i18n.t('downloadurl') }, | ||||||
|  | 	{ prop: 'description', name: i18n.t('desc') }, | ||||||
|  | 	{ prop: 'enabled', name: i18n.t('enabled') }, | ||||||
|  | 	{ prop: 'remark', name: i18n.t('remark') }, | ||||||
|  | 	{ prop: 'valid', name: i18n.t('delMark') }, | ||||||
|  | 	{ prop: 'creatorId', name: i18n.t('creator') }, | ||||||
|  | 	{ prop: 'creatorName', name: i18n.t('creatorName') }, | ||||||
|  | 	{ prop: 'createTime', name: i18n.t('createTime'), filter: timeFilter }, | ||||||
|  | 	{ prop: 'updaterId', name: i18n.t('updator') }, | ||||||
|  | 	{ prop: 'updaterName', name: i18n.t('updatorName') }, | ||||||
|  | 	{ prop: 'updateTime', name: i18n.t('updateTime'), filter: timeFilter }, | ||||||
|  | 	{ prop: 'version', name: i18n.t('version') }, | ||||||
|  | 	{ prop: 'operations', name: i18n.t('handle'), fixed: 'right', width: 180, subcomponent: TableOperateComponent, options: ['edit', 'delete'] } | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			tableConfigs, | ||||||
|  | 			calcMaxHeight, | ||||||
|  | 			dataForm: { | ||||||
|  | 				key: '' | ||||||
|  | 			}, | ||||||
|  | 			dataList: [], | ||||||
|  | 			pageIndex: 1, | ||||||
|  | 			pageSize: 10, | ||||||
|  | 			totalPage: 0, | ||||||
|  | 			dataListLoading: false, | ||||||
|  | 			dataListSelections: [], | ||||||
|  | 			addOrUpdateVisible: false | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	components: { | ||||||
|  | 		AddOrUpdate, | ||||||
|  | 		BaseTable | ||||||
|  | 	}, | ||||||
|  | 	activated() { | ||||||
|  | 		this.getDataList() | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		// destroy dialog | ||||||
|  | 		handleDestroyDialog() { | ||||||
|  | 			setTimeout(() => { | ||||||
|  | 				this.addOrUpdateVisible= false | ||||||
|  | 			}, /** after dialog animated */ 200); | ||||||
|  | 		}, | ||||||
|  | 		// 获取数据列表 | ||||||
|  | 		getDataList() { | ||||||
|  | 			this.dataListLoading = true | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/equipmentTypeFile/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams({ | ||||||
|  | 					page: this.pageIndex, | ||||||
|  | 					limit: this.pageSize, | ||||||
|  | 					key: this.dataForm.key | ||||||
|  | 				}) | ||||||
|  | 			}).then(({ data }) => { | ||||||
|  | 				if (data && data.code === 0) { | ||||||
|  | 					this.dataList = data.data.list | ||||||
|  | 					this.totalPage = data.data.total | ||||||
|  | 				} else { | ||||||
|  | 					this.dataList = [] | ||||||
|  | 					this.totalPage = 0 | ||||||
|  | 				} | ||||||
|  | 				this.dataListLoading = false | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 每页数 | ||||||
|  | 		sizeChangeHandle(val) { | ||||||
|  | 			this.pageSize = val | ||||||
|  | 			this.pageIndex = 1 | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 当前页 | ||||||
|  | 		currentChangeHandle(val) { | ||||||
|  | 			this.pageIndex = val | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 多选 | ||||||
|  | 		selectionChangeHandle(val) { | ||||||
|  | 			this.dataListSelections = val | ||||||
|  | 		}, | ||||||
|  | 		// 新增 / 修改 | ||||||
|  | 		addOrUpdateHandle(id) { | ||||||
|  | 			this.addOrUpdateVisible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs.addOrUpdate.init(id) | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 删除 | ||||||
|  | 		deleteHandle(id) { | ||||||
|  | 			var ids = id | ||||||
|  | 				? [id] | ||||||
|  | 				: this.dataListSelections.map(item => { | ||||||
|  | 						return item.id | ||||||
|  | 				  }) | ||||||
|  | 			this.$confirm(`${ i18n.t('prompt.info', { handle: id ? i18n.t('delete').toLowerCase() : i18n.t('deleteBatch').toLowerCase() }) }`, i18n.t('prompt.title'), { | ||||||
|  | 				confirmButtonText: i18n.t('confirm'), | ||||||
|  | 				cancelButtonText: i18n.t('cancel'), | ||||||
|  | 				type: 'warning' | ||||||
|  | 			}).then(() => { | ||||||
|  | 				this.$http({ | ||||||
|  | 					url: this.$http.adornUrl('/monitoring/equipmentTypeFile'), | ||||||
|  | 					method: 'delete', | ||||||
|  | 					data: this.$http.adornData(ids, false, 'raw') | ||||||
|  | 				}).then(({ data }) => { | ||||||
|  | 					if (data && data.code === 0) { | ||||||
|  | 						this.$message({ | ||||||
|  | 							message: i18n.t('prompt.success'), | ||||||
|  | 							type: 'success', | ||||||
|  | 							duration: 1500, | ||||||
|  | 							onClose: () => { | ||||||
|  | 								this.getDataList() | ||||||
|  | 							} | ||||||
|  | 						}) | ||||||
|  | 					} else { | ||||||
|  | 						this.$message.error(data.msg) | ||||||
|  | 					} | ||||||
|  | 				}) | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										166
									
								
								src/views/modules/monitoring/equipmentattr.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										166
									
								
								src/views/modules/monitoring/equipmentattr.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,166 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="mod-config"> | ||||||
|  | 		<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)"> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-input v-model="dataForm.key" :placeholder="$t('parameter')" clearable></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-button @click="currentChangeHandle(1)">{{ $t('query') }}</el-button> | ||||||
|  | 				<el-button v-if="$hasPermission('monitoring:equipmenattr:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  |  | ||||||
|  | 		<base-table :page="pageIndex" :size="pageSize" :data="dataList" :table-head-configs="tableConfigs" :max-height="calcMaxHeight(8)" /> | ||||||
|  | 		<el-pagination | ||||||
|  | 			@size-change="sizeChangeHandle" | ||||||
|  | 			@current-change="currentChangeHandle" | ||||||
|  | 			:current-page="pageIndex" | ||||||
|  | 			:page-sizes="[10, 20, 50, 100]" | ||||||
|  | 			:page-size="pageSize" | ||||||
|  | 			:total="totalPage" | ||||||
|  | 			layout="total, sizes, prev, pager, next, jumper" | ||||||
|  | 		> | ||||||
|  | 		</el-pagination> | ||||||
|  | 		<!-- 弹窗, 新增 / 修改 --> | ||||||
|  | 		<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { calcMaxHeight } from '@/utils' | ||||||
|  | import { timeFilter } from '@/utils/filters' | ||||||
|  | import AddOrUpdate from './equipmentAttr-add-or-update' | ||||||
|  | import i18n from '@/i18n' | ||||||
|  | import BaseTable from '@/components/base-table' | ||||||
|  | import TableOperateComponent from '@/components/base-table/components/operationComponent' | ||||||
|  | // import TableTextComponent from '@/components/base-table/components/detailComponent' | ||||||
|  |  | ||||||
|  | const tableConfigs = [ | ||||||
|  | 	{ | ||||||
|  | 		type: 'index', | ||||||
|  | 		name: i18n.t('index') | ||||||
|  | 	}, | ||||||
|  | 	{ prop: 'createTime', name: i18n.t('createTime'), filter: timeFilter }, | ||||||
|  | 	{ prop: 'equipmentId', name: i18n.t('eq.id') }, | ||||||
|  | 	{ prop: 'attrName', name: i18n.t('attrName') }, | ||||||
|  | 	{ prop: 'attrValue', name: i18n.t('attrValue') }, | ||||||
|  | 	{ | ||||||
|  | 		prop: 'operations', | ||||||
|  | 		name: i18n.t('handle'), | ||||||
|  | 		fixed: 'right', | ||||||
|  | 		width: 180, | ||||||
|  | 		subcomponent: TableOperateComponent, | ||||||
|  | 		options: ['edit', 'delete'] | ||||||
|  | 	} | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			tableConfigs, | ||||||
|  | 			calcMaxHeight, | ||||||
|  | 			dataForm: { | ||||||
|  | 				key: '' | ||||||
|  | 			}, | ||||||
|  | 			dataList: [], | ||||||
|  | 			pageIndex: 1, | ||||||
|  | 			pageSize: 10, | ||||||
|  | 			totalPage: 0, | ||||||
|  | 			dataListLoading: false, | ||||||
|  | 			dataListSelections: [], | ||||||
|  | 			addOrUpdateVisible: false | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	components: { | ||||||
|  | 		AddOrUpdate, | ||||||
|  | 		BaseTable | ||||||
|  | 	}, | ||||||
|  | 	activated() { | ||||||
|  | 		this.getDataList() | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		// destroy dialog | ||||||
|  | 		handleDestroyDialog() { | ||||||
|  | 			setTimeout(() => { | ||||||
|  | 				this.addOrUpdateVisible= false | ||||||
|  | 			}, /** after dialog animated */ 200); | ||||||
|  | 		}, | ||||||
|  | 		// 获取数据列表 | ||||||
|  | 		getDataList() { | ||||||
|  | 			this.dataListLoading = true | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/equipmentAttr/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams({ | ||||||
|  | 					page: this.pageIndex, | ||||||
|  | 					limit: this.pageSize, | ||||||
|  | 					key: this.dataForm.key | ||||||
|  | 				}) | ||||||
|  | 			}).then(({ data }) => { | ||||||
|  | 				if (data && data.code === 0) { | ||||||
|  | 					this.dataList = data.data.list | ||||||
|  | 					this.totalPage = data.data.total | ||||||
|  | 				} else { | ||||||
|  | 					this.dataList = [] | ||||||
|  | 					this.totalPage = 0 | ||||||
|  | 				} | ||||||
|  | 				this.dataListLoading = false | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 每页数 | ||||||
|  | 		sizeChangeHandle(val) { | ||||||
|  | 			this.pageSize = val | ||||||
|  | 			this.pageIndex = 1 | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 当前页 | ||||||
|  | 		currentChangeHandle(val) { | ||||||
|  | 			this.pageIndex = val | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 多选 | ||||||
|  | 		selectionChangeHandle(val) { | ||||||
|  | 			this.dataListSelections = val | ||||||
|  | 		}, | ||||||
|  | 		// 新增 / 修改 | ||||||
|  | 		addOrUpdateHandle(id) { | ||||||
|  | 			this.addOrUpdateVisible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs.addOrUpdate.init(id) | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 删除 | ||||||
|  | 		deleteHandle(id) { | ||||||
|  | 			var ids = id | ||||||
|  | 				? [id] | ||||||
|  | 				: this.dataListSelections.map(item => { | ||||||
|  | 						return item.id | ||||||
|  | 				  }) | ||||||
|  | 			this.$confirm(`${i18n.t('prompt.info', { handle: id ? i18n.t('delete').toLowerCase() : i18n.t('deleteBatch').toLowerCase() })}`, i18n.t('prompt.title'), { | ||||||
|  | 				confirmButtonText: i18n.t('confirm'), | ||||||
|  | 				cancelButtonText: i18n.t('cancel'), | ||||||
|  | 				type: 'warning' | ||||||
|  | 			}).then(() => { | ||||||
|  | 				this.$http({ | ||||||
|  | 					url: this.$http.adornUrl('/monitoring/equipmentAttr'), | ||||||
|  | 					method: 'delete', | ||||||
|  | 					data: this.$http.adornData(ids, false, 'raw') | ||||||
|  | 				}).then(({ data }) => { | ||||||
|  | 					if (data && data.code === 0) { | ||||||
|  | 						this.$message({ | ||||||
|  | 							message: i18n.t('prompt.success'), | ||||||
|  | 							type: 'success', | ||||||
|  | 							duration: 1500, | ||||||
|  | 							onClose: () => { | ||||||
|  | 								this.getDataList() | ||||||
|  | 							} | ||||||
|  | 						}) | ||||||
|  | 					} else { | ||||||
|  | 						this.$message.error(data.msg) | ||||||
|  | 					} | ||||||
|  | 				}) | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										205
									
								
								src/views/modules/monitoring/factory.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										205
									
								
								src/views/modules/monitoring/factory.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,205 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="mod-config"> | ||||||
|  | 		<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)"> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-input v-model="dataForm.key" :placeholder="$t('factory.name') + ' / ' + $t('factory.code')" clearable></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-button @click="currentChangeHandle(1)">{{ $t('query') }}</el-button> | ||||||
|  | 				<el-button v-if="$hasPermission('monitoring:factory:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  |  | ||||||
|  | 		<base-table | ||||||
|  | 			:page="pageIndex" | ||||||
|  | 			:size="pageSize" | ||||||
|  | 			:data="dataList" | ||||||
|  | 			:table-head-configs="tableConfigs" | ||||||
|  | 			:max-height="calcMaxHeight(8)" | ||||||
|  | 			@operate-event="handleOperations" | ||||||
|  | 			@refreshDataList="getDataList" | ||||||
|  | 		/> | ||||||
|  | 		<el-pagination | ||||||
|  | 			@size-change="sizeChangeHandle" | ||||||
|  | 			@current-change="currentChangeHandle" | ||||||
|  | 			:current-page="pageIndex" | ||||||
|  | 			:page-sizes="[10, 20, 50, 100]" | ||||||
|  | 			:page-size="pageSize" | ||||||
|  | 			:total="totalPage" | ||||||
|  | 			layout="total, sizes, prev, pager, next, jumper" | ||||||
|  | 		> | ||||||
|  | 		</el-pagination> | ||||||
|  | 		<!-- 弹窗, 新增 / 修改 --> | ||||||
|  | 		<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" :configs="addOrUpdateConfigs" @refreshDataList="getDataList" @destory-dialog="handleDestroyDialog" /> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { calcMaxHeight } from '@/utils' | ||||||
|  | import { timeFilter } from '@/utils/filters' | ||||||
|  | // import AddOrUpdate from './factory-add-or-update' | ||||||
|  | import AddOrUpdate from '@/components/base-dialog/addOrUpdate' | ||||||
|  | import i18n from '@/i18n' | ||||||
|  | import BaseTable from '@/components/base-table' | ||||||
|  | import TableOperateComponent from '@/components/base-table/components/operationComponent' | ||||||
|  | // import TableTextComponent from '@/components/base-table/components/detailComponent' | ||||||
|  |  | ||||||
|  | const tableConfigs = [ | ||||||
|  | 	{ | ||||||
|  | 		type: 'index', | ||||||
|  | 		name: i18n.t('index') | ||||||
|  | 	}, | ||||||
|  | 	{ prop: 'createTime', name: i18n.t('createTime'), filter: timeFilter }, | ||||||
|  | 	{ prop: 'name', name: i18n.t('factory.name') }, | ||||||
|  | 	{ prop: 'code', name: i18n.t('factory.code') }, | ||||||
|  | 	{ prop: 'address', name: i18n.t('addr') }, | ||||||
|  | 	{ prop: 'remark', name: i18n.t('remark') }, | ||||||
|  | 	{ prop: 'operations', name: i18n.t('handle'), fixed: 'right', width: 180, subcomponent: TableOperateComponent, options: ['edit', 'delete'] } | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | const addOrUpdateConfigs = { | ||||||
|  | 	type: 'dialog', | ||||||
|  | 	infoUrl: '/monitoring/factory', | ||||||
|  | 	fields: [ | ||||||
|  | 		{ name: 'name', required: true }, | ||||||
|  | 		{ | ||||||
|  | 			name: 'code', | ||||||
|  | 			required: true, | ||||||
|  | 			api: '/monitoring/factory/getCode' | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name: 'address', | ||||||
|  | 			label: i18n.t('addr'), | ||||||
|  | 			placeholder: i18n.t('hints.addr') | ||||||
|  | 		}, | ||||||
|  | 		'remark' | ||||||
|  | 	], | ||||||
|  | 	operations: [ | ||||||
|  | 		{ name: 'reset', url: true, showAlways: true }, | ||||||
|  | 		{ name: 'cancel', url: true, showAlways: true }, | ||||||
|  | 		{ name: 'save', url: '/monitoring/factory', permission: 'monitoring:factory:save', showOnEdit: false }, | ||||||
|  | 		{ name: 'update', url: '/monitoring/factory', permission: 'monitoring:factory:update', showOnEdit: true } | ||||||
|  | 	] | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			calcMaxHeight, | ||||||
|  | 			addOrUpdateConfigs, | ||||||
|  | 			tableConfigs, | ||||||
|  | 			dataForm: { | ||||||
|  | 				key: '' | ||||||
|  | 			}, | ||||||
|  | 			dataList: [], | ||||||
|  | 			pageIndex: 1, | ||||||
|  | 			pageSize: 10, | ||||||
|  | 			totalPage: 0, | ||||||
|  | 			dataListLoading: false, | ||||||
|  | 			dataListSelections: [], | ||||||
|  | 			addOrUpdateVisible: false | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	components: { | ||||||
|  | 		AddOrUpdate, | ||||||
|  | 		BaseTable | ||||||
|  | 	}, | ||||||
|  | 	activated() { | ||||||
|  | 		this.getDataList() | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		// destroy dialog | ||||||
|  | 		handleDestroyDialog() { | ||||||
|  | 			setTimeout(() => { | ||||||
|  | 				this.addOrUpdateVisible = false | ||||||
|  | 			}, /** after dialog animated */ 200) | ||||||
|  | 		}, | ||||||
|  | 		// 获取数据列表 | ||||||
|  | 		getDataList() { | ||||||
|  | 			this.addOrUpdateVisible = false | ||||||
|  | 			this.dataListLoading = true | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/factory/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams({ | ||||||
|  | 					page: this.pageIndex, | ||||||
|  | 					limit: this.pageSize, | ||||||
|  | 					key: this.dataForm.key | ||||||
|  | 				}) | ||||||
|  | 			}).then(({ data }) => { | ||||||
|  | 				if (data && data.code === 0) { | ||||||
|  | 					this.dataList = data.data.list | ||||||
|  | 					this.totalPage = data.data.total | ||||||
|  | 					console.log('total page: ', this.totalPage) | ||||||
|  | 				} else { | ||||||
|  | 					this.dataList = [] | ||||||
|  | 					this.totalPage = 0 | ||||||
|  | 				} | ||||||
|  | 				this.dataListLoading = false | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 每页数 | ||||||
|  | 		sizeChangeHandle(val) { | ||||||
|  | 			this.pageSize = val | ||||||
|  | 			this.pageIndex = 1 | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 当前页 | ||||||
|  | 		currentChangeHandle(val) { | ||||||
|  | 			this.pageIndex = val | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 多选 | ||||||
|  | 		selectionChangeHandle(val) { | ||||||
|  | 			this.dataListSelections = val | ||||||
|  | 		}, | ||||||
|  | 		handleOperations({ type, data: id }) { | ||||||
|  | 			switch (type) { | ||||||
|  | 				case 'edit': | ||||||
|  | 					return this.addOrUpdateHandle(id) | ||||||
|  | 				case 'delete': | ||||||
|  | 					return this.deleteHandle(id) | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		// 新增 / 修改 | ||||||
|  | 		addOrUpdateHandle(id) { | ||||||
|  | 			this.addOrUpdateVisible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs.addOrUpdate.init(id) | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 删除 | ||||||
|  | 		deleteHandle(id) { | ||||||
|  | 			var ids = id | ||||||
|  | 				? [id] | ||||||
|  | 				: this.dataListSelections.map(item => { | ||||||
|  | 						return item.id | ||||||
|  | 				  }) | ||||||
|  | 			this.$confirm(`${i18n.t('prompt.info', { handle: id ? i18n.t('delete').toLowerCase() : i18n.t('deleteBatch').toLowerCase() })}`, i18n.t('prompt.title'), { | ||||||
|  | 				confirmButtonText: i18n.t('confirm'), | ||||||
|  | 				cancelButtonText: i18n.t('cancel'), | ||||||
|  | 				type: 'warning' | ||||||
|  | 			}).then(() => { | ||||||
|  | 				this.$http({ | ||||||
|  | 					url: this.$http.adornUrl('/monitoring/factory'), | ||||||
|  | 					method: 'delete', | ||||||
|  | 					data: this.$http.adornData(ids, false, 'raw') | ||||||
|  | 				}).then(({ data }) => { | ||||||
|  | 					if (data && data.code === 0) { | ||||||
|  | 						this.$message({ | ||||||
|  | 							message: i18n.t('prompt.success'), | ||||||
|  | 							type: 'success', | ||||||
|  | 							duration: 1500, | ||||||
|  | 							onClose: () => { | ||||||
|  | 								this.getDataList() | ||||||
|  | 							} | ||||||
|  | 						}) | ||||||
|  | 					} else { | ||||||
|  | 						this.$message.error(data.msg) | ||||||
|  | 					} | ||||||
|  | 				}) | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										594
									
								
								src/views/modules/monitoring/icons-dialog.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										594
									
								
								src/views/modules/monitoring/icons-dialog.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,594 @@ | |||||||
|  | <template> | ||||||
|  | 	<el-dialog :visible.sync="visible" :title="'Icons'"> | ||||||
|  | 		<div style="background: #efefef; max-height: 500px; overflow: hidden scroll;"> | ||||||
|  | 			<el-row :gutter="10"> | ||||||
|  | 				<el-col v-for="icon in icons" :key="icon" :span="3" class="col-hover" style="padding: 8px; text-align: center; cursor: pointer;" @click.native="handleCopy(icon)"> | ||||||
|  | 					<svg class="icon-svg aui-navbar__icon-menu" style="height: 24px; width: 24px;" aria-hidden="true"> | ||||||
|  | 						<use v-bind:xlink:href="`#${icon}`"></use> | ||||||
|  | 					</svg> | ||||||
|  | 				</el-col> | ||||||
|  | 			</el-row> | ||||||
|  | 		</div> | ||||||
|  |  | ||||||
|  | 		<div slot="footer"> | ||||||
|  | 			<el-button @click="close()">Close</el-button> | ||||||
|  | 		</div> | ||||||
|  | 	</el-dialog> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | export default { | ||||||
|  | 	name: 'IconsDialog', | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			icons: [], | ||||||
|  | 			visible: false | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		init() { | ||||||
|  | 			this.loadIcons() | ||||||
|  | 			this.visible = true | ||||||
|  | 		}, | ||||||
|  | 		loadIcons() { | ||||||
|  | 			this.icons = [ | ||||||
|  | 				'icon-check-circle', | ||||||
|  | 				'icon-CI', | ||||||
|  | 				'icon-Dollar', | ||||||
|  | 				'icon-compass', | ||||||
|  | 				'icon-close-circle', | ||||||
|  | 				'icon-frown', | ||||||
|  | 				'icon-info-circle', | ||||||
|  | 				'icon-left-circle', | ||||||
|  | 				'icon-down-circle', | ||||||
|  | 				'icon-EURO', | ||||||
|  | 				'icon-copyright', | ||||||
|  | 				'icon-minus-circle', | ||||||
|  | 				'icon-meh', | ||||||
|  | 				'icon-plus-circle', | ||||||
|  | 				'icon-play-circle', | ||||||
|  | 				'icon-question-circle', | ||||||
|  | 				'icon-Pound', | ||||||
|  | 				'icon-right-circle', | ||||||
|  | 				'icon-smile', | ||||||
|  | 				'icon-trademark', | ||||||
|  | 				'icon-time-circle', | ||||||
|  | 				'icon-timeout', | ||||||
|  | 				'icon-earth', | ||||||
|  | 				'icon-YUAN', | ||||||
|  | 				'icon-up-circle', | ||||||
|  | 				'icon-warning-circle', | ||||||
|  | 				'icon-sync', | ||||||
|  | 				'icon-transaction', | ||||||
|  | 				'icon-undo', | ||||||
|  | 				'icon-redo', | ||||||
|  | 				'icon-reload', | ||||||
|  | 				'icon-reloadtime', | ||||||
|  | 				'icon-message', | ||||||
|  | 				'icon-dashboard', | ||||||
|  | 				'icon-issuesclose', | ||||||
|  | 				'icon-poweroff', | ||||||
|  | 				'icon-logout', | ||||||
|  | 				'icon-login', | ||||||
|  | 				'icon-piechart', | ||||||
|  | 				'icon-setting', | ||||||
|  | 				'icon-eye', | ||||||
|  | 				'icon-location', | ||||||
|  | 				'icon-edit-square', | ||||||
|  | 				'icon-export', | ||||||
|  | 				'icon-save', | ||||||
|  | 				'icon-Import', | ||||||
|  | 				'icon-appstore', | ||||||
|  | 				'icon-close-square', | ||||||
|  | 				'icon-down-square', | ||||||
|  | 				'icon-layout', | ||||||
|  | 				'icon-left-square', | ||||||
|  | 				'icon-play-square', | ||||||
|  | 				'icon-control', | ||||||
|  | 				'icon-codelibrary', | ||||||
|  | 				'icon-detail', | ||||||
|  | 				'icon-minus-square', | ||||||
|  | 				'icon-plus-square', | ||||||
|  | 				'icon-right-square', | ||||||
|  | 				'icon-project', | ||||||
|  | 				'icon-wallet', | ||||||
|  | 				'icon-up-square', | ||||||
|  | 				'icon-calculator', | ||||||
|  | 				'icon-interation', | ||||||
|  | 				'icon-check-square', | ||||||
|  | 				'icon-border', | ||||||
|  | 				'icon-border-outer', | ||||||
|  | 				'icon-border-top', | ||||||
|  | 				'icon-border-bottom', | ||||||
|  | 				'icon-border-left', | ||||||
|  | 				'icon-border-right', | ||||||
|  | 				'icon-border-inner', | ||||||
|  | 				'icon-border-verticle', | ||||||
|  | 				'icon-border-horizontal', | ||||||
|  | 				'icon-radius-bottomleft', | ||||||
|  | 				'icon-radius-bottomright', | ||||||
|  | 				'icon-radius-upleft', | ||||||
|  | 				'icon-radius-upright', | ||||||
|  | 				'icon-radius-setting', | ||||||
|  | 				'icon-adduser', | ||||||
|  | 				'icon-deleteteam', | ||||||
|  | 				'icon-deleteuser', | ||||||
|  | 				'icon-addteam', | ||||||
|  | 				'icon-user', | ||||||
|  | 				'icon-team', | ||||||
|  | 				'icon-areachart', | ||||||
|  | 				'icon-linechart', | ||||||
|  | 				'icon-barchart', | ||||||
|  | 				'icon-pointmap', | ||||||
|  | 				'icon-container', | ||||||
|  | 				'icon-database', | ||||||
|  | 				'icon-sever', | ||||||
|  | 				'icon-mobile', | ||||||
|  | 				'icon-tablet', | ||||||
|  | 				'icon-redenvelope', | ||||||
|  | 				'icon-book', | ||||||
|  | 				'icon-filedone', | ||||||
|  | 				'icon-reconciliation', | ||||||
|  | 				'icon-file-exception', | ||||||
|  | 				'icon-filesync', | ||||||
|  | 				'icon-filesearch', | ||||||
|  | 				'icon-solution', | ||||||
|  | 				'icon-fileprotect', | ||||||
|  | 				'icon-file-add', | ||||||
|  | 				'icon-file-excel', | ||||||
|  | 				'icon-file-exclamation', | ||||||
|  | 				'icon-file-pdf', | ||||||
|  | 				'icon-file-image', | ||||||
|  | 				'icon-file-markdown', | ||||||
|  | 				'icon-file-unknown', | ||||||
|  | 				'icon-file-ppt', | ||||||
|  | 				'icon-file-word', | ||||||
|  | 				'icon-file', | ||||||
|  | 				'icon-file-zip', | ||||||
|  | 				'icon-file-text', | ||||||
|  | 				'icon-file-copy', | ||||||
|  | 				'icon-snippets', | ||||||
|  | 				'icon-audit', | ||||||
|  | 				'icon-diff', | ||||||
|  | 				'icon-Batchfolding', | ||||||
|  | 				'icon-securityscan', | ||||||
|  | 				'icon-propertysafety', | ||||||
|  | 				'icon-safetycertificate', | ||||||
|  | 				'icon-insurance', | ||||||
|  | 				'icon-alert', | ||||||
|  | 				'icon-delete', | ||||||
|  | 				'icon-hourglass', | ||||||
|  | 				'icon-bulb', | ||||||
|  | 				'icon-experiment', | ||||||
|  | 				'icon-bell', | ||||||
|  | 				'icon-trophy', | ||||||
|  | 				'icon-rest', | ||||||
|  | 				'icon-USB', | ||||||
|  | 				'icon-skin', | ||||||
|  | 				'icon-home', | ||||||
|  | 				'icon-bank', | ||||||
|  | 				'icon-filter', | ||||||
|  | 				'icon-funnelplot', | ||||||
|  | 				'icon-like', | ||||||
|  | 				'icon-unlike', | ||||||
|  | 				'icon-unlock', | ||||||
|  | 				'icon-lock', | ||||||
|  | 				'icon-customerservice', | ||||||
|  | 				'icon-flag', | ||||||
|  | 				'icon-moneycollect', | ||||||
|  | 				'icon-medicinebox', | ||||||
|  | 				'icon-shop', | ||||||
|  | 				'icon-rocket', | ||||||
|  | 				'icon-shopping', | ||||||
|  | 				'icon-folder', | ||||||
|  | 				'icon-folder-open', | ||||||
|  | 				'icon-folder-add', | ||||||
|  | 				'icon-deploymentunit', | ||||||
|  | 				'icon-accountbook', | ||||||
|  | 				'icon-contacts', | ||||||
|  | 				'icon-carryout', | ||||||
|  | 				'icon-calendar-check', | ||||||
|  | 				'icon-calendar', | ||||||
|  | 				'icon-scan', | ||||||
|  | 				'icon-select', | ||||||
|  | 				'icon-boxplot', | ||||||
|  | 				'icon-build', | ||||||
|  | 				'icon-sliders', | ||||||
|  | 				'icon-laptop', | ||||||
|  | 				'icon-barcode', | ||||||
|  | 				'icon-camera', | ||||||
|  | 				'icon-cluster', | ||||||
|  | 				'icon-gateway', | ||||||
|  | 				'icon-car', | ||||||
|  | 				'icon-printer', | ||||||
|  | 				'icon-read', | ||||||
|  | 				'icon-cloud-server', | ||||||
|  | 				'icon-cloud-upload', | ||||||
|  | 				'icon-cloud', | ||||||
|  | 				'icon-cloud-download', | ||||||
|  | 				'icon-cloud-sync', | ||||||
|  | 				'icon-video', | ||||||
|  | 				'icon-notification', | ||||||
|  | 				'icon-sound', | ||||||
|  | 				'icon-radarchart', | ||||||
|  | 				'icon-qrcode', | ||||||
|  | 				'icon-fund', | ||||||
|  | 				'icon-image', | ||||||
|  | 				'icon-mail', | ||||||
|  | 				'icon-table', | ||||||
|  | 				'icon-idcard', | ||||||
|  | 				'icon-creditcard', | ||||||
|  | 				'icon-heart', | ||||||
|  | 				'icon-block', | ||||||
|  | 				'icon-error', | ||||||
|  | 				'icon-star', | ||||||
|  | 				'icon-gold', | ||||||
|  | 				'icon-heatmap', | ||||||
|  | 				'icon-wifi', | ||||||
|  | 				'icon-attachment', | ||||||
|  | 				'icon-edit', | ||||||
|  | 				'icon-key', | ||||||
|  | 				'icon-api', | ||||||
|  | 				'icon-disconnect', | ||||||
|  | 				'icon-highlight', | ||||||
|  | 				'icon-monitor', | ||||||
|  | 				'icon-link', | ||||||
|  | 				'icon-man', | ||||||
|  | 				'icon-percentage', | ||||||
|  | 				'icon-search', | ||||||
|  | 				'icon-pushpin', | ||||||
|  | 				'icon-phone', | ||||||
|  | 				'icon-shake', | ||||||
|  | 				'icon-tag', | ||||||
|  | 				'icon-wrench', | ||||||
|  | 				'icon-woman', | ||||||
|  | 				'icon-tags', | ||||||
|  | 				'icon-scissor', | ||||||
|  | 				'icon-mr', | ||||||
|  | 				'icon-share', | ||||||
|  | 				'icon-branches', | ||||||
|  | 				'icon-fork', | ||||||
|  | 				'icon-shrink', | ||||||
|  | 				'icon-arrawsalt', | ||||||
|  | 				'icon-verticalright', | ||||||
|  | 				'icon-verticalleft', | ||||||
|  | 				'icon-right', | ||||||
|  | 				'icon-left', | ||||||
|  | 				'icon-up', | ||||||
|  | 				'icon-down', | ||||||
|  | 				'icon-fullscreen', | ||||||
|  | 				'icon-fullscreen-exit', | ||||||
|  | 				'icon-doubleleft', | ||||||
|  | 				'icon-doubleright', | ||||||
|  | 				'icon-arrowright', | ||||||
|  | 				'icon-arrowup', | ||||||
|  | 				'icon-arrowleft', | ||||||
|  | 				'icon-arrowdown', | ||||||
|  | 				'icon-upload', | ||||||
|  | 				'icon-colum-height', | ||||||
|  | 				'icon-vertical-align-botto', | ||||||
|  | 				'icon-vertical-align-middl', | ||||||
|  | 				'icon-totop', | ||||||
|  | 				'icon-vertical-align-top', | ||||||
|  | 				'icon-download', | ||||||
|  | 				'icon-sort-descending', | ||||||
|  | 				'icon-sort-ascending', | ||||||
|  | 				'icon-fall', | ||||||
|  | 				'icon-swap', | ||||||
|  | 				'icon-stock', | ||||||
|  | 				'icon-rise', | ||||||
|  | 				'icon-indent', | ||||||
|  | 				'icon-outdent', | ||||||
|  | 				'icon-menu', | ||||||
|  | 				'icon-unorderedlist', | ||||||
|  | 				'icon-orderedlist', | ||||||
|  | 				'icon-align-right', | ||||||
|  | 				'icon-align-center', | ||||||
|  | 				'icon-align-left', | ||||||
|  | 				'icon-pic-center', | ||||||
|  | 				'icon-pic-right', | ||||||
|  | 				'icon-pic-left', | ||||||
|  | 				'icon-bold', | ||||||
|  | 				'icon-font-colors', | ||||||
|  | 				'icon-exclaimination', | ||||||
|  | 				'icon-font-size', | ||||||
|  | 				'icon-infomation', | ||||||
|  | 				'icon-line-height', | ||||||
|  | 				'icon-strikethrough', | ||||||
|  | 				'icon-underline', | ||||||
|  | 				'icon-number', | ||||||
|  | 				'icon-italic', | ||||||
|  | 				'icon-code', | ||||||
|  | 				'icon-column-width', | ||||||
|  | 				'icon-check', | ||||||
|  | 				'icon-ellipsis', | ||||||
|  | 				'icon-dash', | ||||||
|  | 				'icon-close', | ||||||
|  | 				'icon-enter', | ||||||
|  | 				'icon-line', | ||||||
|  | 				'icon-minus', | ||||||
|  | 				'icon-question', | ||||||
|  | 				'icon-plus', | ||||||
|  | 				'icon-rollback', | ||||||
|  | 				'icon-small-dash', | ||||||
|  | 				'icon-pause', | ||||||
|  | 				'icon-bg-colors', | ||||||
|  | 				'icon-crown', | ||||||
|  | 				'icon-drag', | ||||||
|  | 				'icon-desktop', | ||||||
|  | 				'icon-gift', | ||||||
|  | 				'icon-stop', | ||||||
|  | 				'icon-fire', | ||||||
|  | 				'icon-thunderbolt', | ||||||
|  | 				'icon-check-circle-fill', | ||||||
|  | 				'icon-left-circle-fill', | ||||||
|  | 				'icon-down-circle-fill', | ||||||
|  | 				'icon-minus-circle-fill', | ||||||
|  | 				'icon-close-circle-fill', | ||||||
|  | 				'icon-info-circle-fill', | ||||||
|  | 				'icon-up-circle-fill', | ||||||
|  | 				'icon-right-circle-fill', | ||||||
|  | 				'icon-plus-circle-fill', | ||||||
|  | 				'icon-question-circle-fill', | ||||||
|  | 				'icon-EURO-circle-fill', | ||||||
|  | 				'icon-frown-fill', | ||||||
|  | 				'icon-copyright-circle-fil', | ||||||
|  | 				'icon-CI-circle-fill', | ||||||
|  | 				'icon-compass-fill', | ||||||
|  | 				'icon-Dollar-circle-fill', | ||||||
|  | 				'icon-poweroff-circle-fill', | ||||||
|  | 				'icon-meh-fill', | ||||||
|  | 				'icon-play-circle-fill', | ||||||
|  | 				'icon-Pound-circle-fill', | ||||||
|  | 				'icon-smile-fill', | ||||||
|  | 				'icon-stop-fill', | ||||||
|  | 				'icon-warning-circle-fill', | ||||||
|  | 				'icon-time-circle-fill', | ||||||
|  | 				'icon-trademark-circle-fil', | ||||||
|  | 				'icon-YUAN-circle-fill', | ||||||
|  | 				'icon-heart-fill', | ||||||
|  | 				'icon-piechart-circle-fil', | ||||||
|  | 				'icon-dashboard-fill', | ||||||
|  | 				'icon-message-fill', | ||||||
|  | 				'icon-check-square-fill', | ||||||
|  | 				'icon-down-square-fill', | ||||||
|  | 				'icon-minus-square-fill', | ||||||
|  | 				'icon-close-square-fill', | ||||||
|  | 				'icon-codelibrary-fill', | ||||||
|  | 				'icon-left-square-fill', | ||||||
|  | 				'icon-play-square-fill', | ||||||
|  | 				'icon-up-square-fill', | ||||||
|  | 				'icon-right-square-fill', | ||||||
|  | 				'icon-plus-square-fill', | ||||||
|  | 				'icon-accountbook-fill', | ||||||
|  | 				'icon-carryout-fill', | ||||||
|  | 				'icon-calendar-fill', | ||||||
|  | 				'icon-calculator-fill', | ||||||
|  | 				'icon-interation-fill', | ||||||
|  | 				'icon-project-fill', | ||||||
|  | 				'icon-detail-fill', | ||||||
|  | 				'icon-save-fill', | ||||||
|  | 				'icon-wallet-fill', | ||||||
|  | 				'icon-control-fill', | ||||||
|  | 				'icon-layout-fill', | ||||||
|  | 				'icon-appstore-fill', | ||||||
|  | 				'icon-mobile-fill', | ||||||
|  | 				'icon-tablet-fill', | ||||||
|  | 				'icon-book-fill', | ||||||
|  | 				'icon-redenvelope-fill', | ||||||
|  | 				'icon-safetycertificate-f', | ||||||
|  | 				'icon-propertysafety-fill', | ||||||
|  | 				'icon-insurance-fill', | ||||||
|  | 				'icon-securityscan-fill', | ||||||
|  | 				'icon-file-exclamation-fil', | ||||||
|  | 				'icon-file-add-fill', | ||||||
|  | 				'icon-file-fill', | ||||||
|  | 				'icon-file-excel-fill', | ||||||
|  | 				'icon-file-markdown-fill', | ||||||
|  | 				'icon-file-text-fill', | ||||||
|  | 				'icon-file-ppt-fill', | ||||||
|  | 				'icon-file-unknown-fill', | ||||||
|  | 				'icon-file-word-fill', | ||||||
|  | 				'icon-file-zip-fill', | ||||||
|  | 				'icon-file-pdf-fill', | ||||||
|  | 				'icon-file-image-fill', | ||||||
|  | 				'icon-diff-fill', | ||||||
|  | 				'icon-file-copy-fill', | ||||||
|  | 				'icon-snippets-fill', | ||||||
|  | 				'icon-batchfolding-fill', | ||||||
|  | 				'icon-reconciliation-fill', | ||||||
|  | 				'icon-folder-add-fill', | ||||||
|  | 				'icon-folder-fill', | ||||||
|  | 				'icon-folder-open-fill', | ||||||
|  | 				'icon-database-fill', | ||||||
|  | 				'icon-container-fill', | ||||||
|  | 				'icon-sever-fill', | ||||||
|  | 				'icon-calendar-check-fill', | ||||||
|  | 				'icon-image-fill', | ||||||
|  | 				'icon-idcard-fill', | ||||||
|  | 				'icon-creditcard-fill', | ||||||
|  | 				'icon-fund-fill', | ||||||
|  | 				'icon-read-fill', | ||||||
|  | 				'icon-contacts-fill', | ||||||
|  | 				'icon-delete-fill', | ||||||
|  | 				'icon-notification-fill', | ||||||
|  | 				'icon-flag-fill', | ||||||
|  | 				'icon-moneycollect-fill', | ||||||
|  | 				'icon-medicinebox-fill', | ||||||
|  | 				'icon-rest-fill', | ||||||
|  | 				'icon-shopping-fill', | ||||||
|  | 				'icon-skin-fill', | ||||||
|  | 				'icon-video-fill', | ||||||
|  | 				'icon-sound-fill', | ||||||
|  | 				'icon-bulb-fill', | ||||||
|  | 				'icon-bell-fill', | ||||||
|  | 				'icon-filter-fill', | ||||||
|  | 				'icon-fire-fill', | ||||||
|  | 				'icon-funnelplot-fill', | ||||||
|  | 				'icon-gift-fill', | ||||||
|  | 				'icon-hourglass-fill', | ||||||
|  | 				'icon-home-fill', | ||||||
|  | 				'icon-trophy-fill', | ||||||
|  | 				'icon-location-fill', | ||||||
|  | 				'icon-cloud-fill', | ||||||
|  | 				'icon-customerservice-fill', | ||||||
|  | 				'icon-experiment-fill', | ||||||
|  | 				'icon-eye-fill', | ||||||
|  | 				'icon-like-fill', | ||||||
|  | 				'icon-lock-fill', | ||||||
|  | 				'icon-unlike-fill', | ||||||
|  | 				'icon-star-fill', | ||||||
|  | 				'icon-unlock-fill', | ||||||
|  | 				'icon-alert-fill', | ||||||
|  | 				'icon-api-fill', | ||||||
|  | 				'icon-highlight-fill', | ||||||
|  | 				'icon-phone-fill', | ||||||
|  | 				'icon-edit-fill', | ||||||
|  | 				'icon-pushpin-fill', | ||||||
|  | 				'icon-rocket-fill', | ||||||
|  | 				'icon-thunderbolt-fill', | ||||||
|  | 				'icon-tag-fill', | ||||||
|  | 				'icon-wrench-fill', | ||||||
|  | 				'icon-tags-fill', | ||||||
|  | 				'icon-bank-fill', | ||||||
|  | 				'icon-camera-fill', | ||||||
|  | 				'icon-error-fill', | ||||||
|  | 				'icon-crown-fill', | ||||||
|  | 				'icon-mail-fill', | ||||||
|  | 				'icon-car-fill', | ||||||
|  | 				'icon-printer-fill', | ||||||
|  | 				'icon-shop-fill', | ||||||
|  | 				'icon-setting-fill', | ||||||
|  | 				'icon-USB-fill', | ||||||
|  | 				'icon-golden-fill', | ||||||
|  | 				'icon-build-fill', | ||||||
|  | 				'icon-boxplot-fill', | ||||||
|  | 				'icon-sliders-fill', | ||||||
|  | 				'icon-alibaba', | ||||||
|  | 				'icon-alibabacloud', | ||||||
|  | 				'icon-antdesign', | ||||||
|  | 				'icon-ant-cloud', | ||||||
|  | 				'icon-behance', | ||||||
|  | 				'icon-googleplus', | ||||||
|  | 				'icon-medium', | ||||||
|  | 				'icon-google', | ||||||
|  | 				'icon-IE', | ||||||
|  | 				'icon-amazon', | ||||||
|  | 				'icon-slack', | ||||||
|  | 				'icon-alipay', | ||||||
|  | 				'icon-taobao', | ||||||
|  | 				'icon-zhihu', | ||||||
|  | 				'icon-HTML', | ||||||
|  | 				'icon-linkedin', | ||||||
|  | 				'icon-yahoo', | ||||||
|  | 				'icon-facebook', | ||||||
|  | 				'icon-skype', | ||||||
|  | 				'icon-CodeSandbox', | ||||||
|  | 				'icon-chrome', | ||||||
|  | 				'icon-codepen', | ||||||
|  | 				'icon-aliwangwang', | ||||||
|  | 				'icon-apple', | ||||||
|  | 				'icon-android', | ||||||
|  | 				'icon-sketch', | ||||||
|  | 				'icon-Gitlab', | ||||||
|  | 				'icon-dribbble', | ||||||
|  | 				'icon-instagram', | ||||||
|  | 				'icon-reddit', | ||||||
|  | 				'icon-windows', | ||||||
|  | 				'icon-yuque', | ||||||
|  | 				'icon-Youtube', | ||||||
|  | 				'icon-Gitlab-fill', | ||||||
|  | 				'icon-dropbox', | ||||||
|  | 				'icon-dingtalk', | ||||||
|  | 				'icon-android-fill', | ||||||
|  | 				'icon-apple-fill', | ||||||
|  | 				'icon-HTML-fill', | ||||||
|  | 				'icon-windows-fill', | ||||||
|  | 				'icon-QQ', | ||||||
|  | 				'icon-twitter', | ||||||
|  | 				'icon-skype-fill', | ||||||
|  | 				'icon-weibo', | ||||||
|  | 				'icon-yuque-fill', | ||||||
|  | 				'icon-Youtube-fill', | ||||||
|  | 				'icon-yahoo-fill', | ||||||
|  | 				'icon-wechat-fill', | ||||||
|  | 				'icon-chrome-fill', | ||||||
|  | 				'icon-alipay-circle-fill', | ||||||
|  | 				'icon-aliwangwang-fill', | ||||||
|  | 				'icon-behance-circle-fill', | ||||||
|  | 				'icon-amazon-circle-fill', | ||||||
|  | 				'icon-codepen-circle-fill', | ||||||
|  | 				'icon-CodeSandbox-circle-f', | ||||||
|  | 				'icon-dropbox-circle-fill', | ||||||
|  | 				'icon-github-fill', | ||||||
|  | 				'icon-dribbble-circle-fill', | ||||||
|  | 				'icon-googleplus-circle-f', | ||||||
|  | 				'icon-medium-circle-fill', | ||||||
|  | 				'icon-QQ-circle-fill', | ||||||
|  | 				'icon-IE-circle-fill', | ||||||
|  | 				'icon-google-circle-fill', | ||||||
|  | 				'icon-dingtalk-circle-fill', | ||||||
|  | 				'icon-sketch-circle-fill', | ||||||
|  | 				'icon-slack-circle-fill', | ||||||
|  | 				'icon-twitter-circle-fill', | ||||||
|  | 				'icon-taobao-circle-fill', | ||||||
|  | 				'icon-weibo-circle-fill', | ||||||
|  | 				'icon-zhihu-circle-fill', | ||||||
|  | 				'icon-reddit-circle-fill', | ||||||
|  | 				'icon-alipay-square-fill', | ||||||
|  | 				'icon-dingtalk-square-fill', | ||||||
|  | 				'icon-CodeSandbox-square-f', | ||||||
|  | 				'icon-behance-square-fill', | ||||||
|  | 				'icon-amazon-square-fill', | ||||||
|  | 				'icon-codepen-square-fill', | ||||||
|  | 				'icon-dribbble-square-fill', | ||||||
|  | 				'icon-dropbox-square-fill', | ||||||
|  | 				'icon-facebook-fill', | ||||||
|  | 				'icon-googleplus-square-f', | ||||||
|  | 				'icon-google-square-fill', | ||||||
|  | 				'icon-instagram-fill', | ||||||
|  | 				'icon-IE-square-fill', | ||||||
|  | 				'icon-medium-square-fill', | ||||||
|  | 				'icon-linkedin-fill', | ||||||
|  | 				'icon-QQ-square-fill', | ||||||
|  | 				'icon-reddit-square-fill', | ||||||
|  | 				'icon-twitter-square-fill', | ||||||
|  | 				'icon-sketch-square-fill', | ||||||
|  | 				'icon-slack-square-fill', | ||||||
|  | 				'icon-taobao-square-fill', | ||||||
|  | 				'icon-weibo-square-fill', | ||||||
|  | 				'icon-zhihu-square-fill', | ||||||
|  | 				'icon-zoomout', | ||||||
|  | 				'icon-apartment', | ||||||
|  | 				'icon-audio', | ||||||
|  | 				'icon-audio-fill', | ||||||
|  | 				'icon-robot', | ||||||
|  | 				'icon-zoomin' | ||||||
|  | 			] | ||||||
|  | 		}, | ||||||
|  | 		handleCopy(v) { | ||||||
|  | 			if (navigator.clipboard) { | ||||||
|  | 				/** 如果支持剪切板api */ | ||||||
|  | 				navigator.clipboard | ||||||
|  | 					.writeText(`<svg class="icon-svg aui-navbar__icon-menu" style="height: 24px; width: 24px;" aria-hidden="true"><use xlink:href="#${v}"></use></svg>`) | ||||||
|  | 					.then(() => { | ||||||
|  | 						this.$message.success('已复制') | ||||||
|  | 					}) | ||||||
|  | 			} else { | ||||||
|  | 				this.$message.info('请打开 Console 手动复制.') | ||||||
|  | 				console.log(`<svg class="icon-svg aui-navbar__icon-menu" style="height: 24px; width: 24px;" aria-hidden="true"><use xlink:href="#${v}"></use></svg>`) | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		close() { | ||||||
|  | 			this.visible = false | ||||||
|  | 			this.$emit('destory-me') | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style scoped> | ||||||
|  | .col-hover:hover { | ||||||
|  | 	background: #ddd; | ||||||
|  | } | ||||||
|  | </style> | ||||||
							
								
								
									
										292
									
								
								src/views/modules/monitoring/product.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										292
									
								
								src/views/modules/monitoring/product.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,292 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="mod-config"> | ||||||
|  | 		<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)"> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-input v-model="dataForm.key" :placeholder="$t('prod.name') + ' / ' + $t('prod.code')" clearable></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-button @click="currentChangeHandle(1)">{{ $t('query') }}</el-button> | ||||||
|  | 				<!-- <el-button @click="addOrEdit()">测试</el-button> --> | ||||||
|  | 				<!-- <el-button v-if="$hasPermission('monitoring:product:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> --> | ||||||
|  | 				<el-button v-if="$hasPermission('monitoring:product:save')" type="primary" @click="addOrEdit()">{{ $t('add') }}</el-button> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  |  | ||||||
|  | 		<base-table | ||||||
|  | 			:page="pageIndex" | ||||||
|  | 			:size="pageSize" | ||||||
|  | 			:data="dataList" | ||||||
|  | 			:table-head-configs="tableConfigs" | ||||||
|  | 			:max-height="calcMaxHeight(8)" | ||||||
|  | 			@operate-event="handleOperations" | ||||||
|  | 			@refreshDataList="getDataList" | ||||||
|  | 		/> | ||||||
|  |  | ||||||
|  | 		<el-pagination | ||||||
|  | 			@size-change="sizeChangeHandle" | ||||||
|  | 			@current-change="currentChangeHandle" | ||||||
|  | 			:current-page="pageIndex" | ||||||
|  | 			:page-sizes="[10, 20, 50, 100]" | ||||||
|  | 			:page-size="pageSize" | ||||||
|  | 			:total="totalPage" | ||||||
|  | 			layout="total, sizes, prev, pager, next, jumper" | ||||||
|  | 		></el-pagination> | ||||||
|  | 		<!-- 弹窗, 新增 / 修改 --> | ||||||
|  | 		<!-- <add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update> --> | ||||||
|  | 		<base-dialog v-if="showbasedialog" ref="basedialog" :configs="addOrUpdateConfigs" @refreshDataList="getDataList" @destory-dialog="handleDestroyDialog" /> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { calcMaxHeight } from '@/utils' | ||||||
|  | import { timeFilter } from '@/utils/filters' | ||||||
|  | // import AddOrUpdate from './product-add-or-update' | ||||||
|  | import i18n from '@/i18n' | ||||||
|  | import BaseTable from '@/components/base-table' | ||||||
|  | import TableOperateComponent from '@/components/base-table/components/operationComponent' | ||||||
|  | // import TableTextComponent from '@/components/base-table/components/detailComponent' | ||||||
|  | import BaseDialog from '@/components/base-dialog/addOrUpdate' | ||||||
|  | import moment from 'moment' | ||||||
|  | import dictListMixin from '@/mixins/dictlist-module' | ||||||
|  | import { dictFilter } from '@/utils/filters' | ||||||
|  |  | ||||||
|  | const UnitDictTypeId = '1557173812109242370' | ||||||
|  | const ProductTypeDictTypeId = '1557179530308616193' | ||||||
|  | const tableConfigs = [ | ||||||
|  | 	{ type: 'index', width: 100, name: i18n.t('index') }, | ||||||
|  | 	{ prop: 'createTime', name: i18n.t('createTime'), filter: timeFilter }, | ||||||
|  | 	{ prop: 'name', name: i18n.t('prod.name') }, | ||||||
|  | 	{ prop: 'code', name: i18n.t('prod.code') }, | ||||||
|  | 	{ prop: 'specifications', name: i18n.t('prod.spec') }, | ||||||
|  | 	{ prop: 'unitDictValue', name: i18n.t('unit'), filter: dictFilter(UnitDictTypeId) }, | ||||||
|  | 	{ prop: 'operations', name: i18n.t('handle'), fixed: 'right', width: 180, subcomponent: TableOperateComponent, options: ['edit', 'delete'] } | ||||||
|  | 	// { prop: 'operations', name: i18n.t('handle'), fixed: 'right', width: 180, subcomponent: TableOperateComponent, options: ['edit', 'viewAttr', 'delete'] } | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | const addOrUpdateConfigs = { | ||||||
|  | 	type: 'dialog', // dialog | drawer | page | ||||||
|  | 	infoUrl: '/monitoring/product', | ||||||
|  | 	fields: [ | ||||||
|  | 		// 'name', | ||||||
|  | 		{ | ||||||
|  | 			name: 'name', | ||||||
|  | 			required: true | ||||||
|  | 			// label: i18n.t('pl.name') | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name: 'code', | ||||||
|  | 			required: true, | ||||||
|  | 			// label: i18n.t('pl.code'), | ||||||
|  | 			api: '/monitoring/product/getCode' | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name: 'processTime', | ||||||
|  | 			label: i18n.t('prod.processTime'), | ||||||
|  | 			placeholder: i18n.t('prod.processTimeHints'), | ||||||
|  | 			type: 'number', | ||||||
|  | 			required: true, | ||||||
|  | 			rules: [ | ||||||
|  | 				{ | ||||||
|  | 					type: 'number', | ||||||
|  | 					trigger: 'blur', | ||||||
|  | 					transform: val => Number(val), | ||||||
|  | 					message: i18n.t('hints.number') | ||||||
|  | 				} | ||||||
|  | 			] | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name: 'typeDictValue', | ||||||
|  | 			label: i18n.t('prod.type'), // 对于非常见属性,最好自己指定label | ||||||
|  | 			type: 'select', | ||||||
|  | 			options: [ | ||||||
|  | 				// 动态获取 | ||||||
|  | 			] | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name: 'unitDictValue', | ||||||
|  | 			label: i18n.t('unit'), | ||||||
|  | 			type: 'select', | ||||||
|  | 			// placeholder: '请选择单位', | ||||||
|  | 			options: [ | ||||||
|  | 				// 动态获取 | ||||||
|  | 			] | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name: 'area', | ||||||
|  | 			label: i18n.t('prod.area'), | ||||||
|  | 			type: 'number', | ||||||
|  | 			rules: [{ type: 'number', transform: val => Number(val), message: i18n.t('hints.number'), trigger: 'blur' }] | ||||||
|  | 		}, | ||||||
|  | 		'specifications', | ||||||
|  | 		'remark' | ||||||
|  | 	], | ||||||
|  | 	operations: [ | ||||||
|  | 		{ name: 'cancel', url: true, showAlways: true }, | ||||||
|  | 		{ name: 'save', url: '/monitoring/product', permission: 'monitoring:product:save', showOnEdit: false }, | ||||||
|  | 		{ name: 'update', url: '/monitoring/product', permission: 'monitoring:product:update', showOnEdit: true } | ||||||
|  | 	], | ||||||
|  | 	subtable: { | ||||||
|  | 		// for i18n | ||||||
|  | 		title: i18n.t('prod.attr'), | ||||||
|  | 		url: '/monitoring/productArrt', | ||||||
|  | 		relatedField: 'productId', | ||||||
|  | 		tableConfigs: [ | ||||||
|  | 			{ type: 'index', width: 100, name: i18n.t('index') }, | ||||||
|  | 			{ prop: 'createTime', name: i18n.t('createTime'), filter: val => (val ? moment(val).format('YYYY-MM-DD hh:mm:ss') : '-') }, | ||||||
|  | 			{ prop: 'name', name: i18n.t('attrName'), formField: true, rules: [{ required: true, message: i18n.t('required'), trigger: 'blur' }] }, | ||||||
|  | 			{ prop: 'code', name: i18n.t('attrValue'), formField: true }, | ||||||
|  | 			{ prop: 'operations', name: i18n.t('handle'), fixed: 'right', width: 180, subcomponent: TableOperateComponent, options: ['edit', 'delete'] } | ||||||
|  | 		] | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	mixins: [dictListMixin], | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			calcMaxHeight, | ||||||
|  | 			tableConfigs, | ||||||
|  | 			dataForm: { | ||||||
|  | 				key: '' | ||||||
|  | 			}, | ||||||
|  | 			dataList: [], | ||||||
|  | 			pageIndex: 1, | ||||||
|  | 			pageSize: 10, | ||||||
|  | 			totalPage: 0, | ||||||
|  | 			dataListLoading: false, | ||||||
|  | 			dataListSelections: [], | ||||||
|  | 			addOrUpdateVisible: false, | ||||||
|  | 			addOrUpdateConfigs, | ||||||
|  | 			showbasedialog: false | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	components: { | ||||||
|  | 		// AddOrUpdate, | ||||||
|  | 		BaseTable, | ||||||
|  | 		BaseDialog | ||||||
|  | 	}, | ||||||
|  | 	created() { | ||||||
|  | 		this.initDictList([UnitDictTypeId, ProductTypeDictTypeId]) | ||||||
|  | 		this.addOrUpdateConfigs.fields.forEach(item => { | ||||||
|  | 			if (item.name) { | ||||||
|  | 				if (item.name === 'typeDictValue') { | ||||||
|  | 					item.options = this.dictList[ProductTypeDictTypeId] | ||||||
|  | 				} else if (item.name === 'unitDictValue') { | ||||||
|  | 					item.options = this.dictList[UnitDictTypeId] | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		}) | ||||||
|  | 	}, | ||||||
|  | 	activated() { | ||||||
|  | 		this.getDataList() | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		// destroy dialog | ||||||
|  | 		handleDestroyDialog() { | ||||||
|  | 			setTimeout(() => { | ||||||
|  | 				this.showbasedialog = false | ||||||
|  | 			}, /** after dialog animated */ 200) | ||||||
|  | 		}, | ||||||
|  | 		addOrEdit(id) { | ||||||
|  | 			this.showbasedialog = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs.basedialog.init(id) | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 获取数据列表 | ||||||
|  | 		getDataList() { | ||||||
|  | 			// console.log("after dialog close: ", this.showbasedialog) | ||||||
|  | 			this.showbasedialog = false // 清理弹窗 | ||||||
|  | 			this.dataListLoading = true | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/product/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams({ | ||||||
|  | 					page: this.pageIndex, | ||||||
|  | 					limit: this.pageSize, | ||||||
|  | 					key: this.dataForm.key | ||||||
|  | 				}) | ||||||
|  | 			}).then(({ data }) => { | ||||||
|  | 				if (data && data.code === 0) { | ||||||
|  | 					this.dataList = data.data.list | ||||||
|  | 					this.totalPage = data.data.total | ||||||
|  | 				} else { | ||||||
|  | 					this.dataList = [] | ||||||
|  | 					this.totalPage = 0 | ||||||
|  | 				} | ||||||
|  | 				this.dataListLoading = false | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 每页数 | ||||||
|  | 		sizeChangeHandle(val) { | ||||||
|  | 			this.pageSize = val | ||||||
|  | 			this.pageIndex = 1 | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 当前页 | ||||||
|  | 		currentChangeHandle(val) { | ||||||
|  | 			this.pageIndex = val | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 多选 | ||||||
|  | 		selectionChangeHandle(val) { | ||||||
|  | 			this.dataListSelections = val | ||||||
|  | 		}, | ||||||
|  | 		// 新增 / 修改 | ||||||
|  | 		addOrUpdateHandle(id) { | ||||||
|  | 			this.addOrUpdateVisible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs.addOrUpdate.init(id) | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 表格操作事件管理 | ||||||
|  | 		handleOperations({ type, data }) { | ||||||
|  | 			switch (type) { | ||||||
|  | 				case 'edit': // <== 对照 tableConfig | ||||||
|  | 					return this.addOrEdit(data) | ||||||
|  | 				case 'viewAttr': // <== 对照 tableConfig | ||||||
|  | 					return this.addOrEdit(data) | ||||||
|  | 				case 'delete': | ||||||
|  | 					return this.deleteHandle(data) | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		// 删除 | ||||||
|  | 		deleteHandle(id) { | ||||||
|  | 			console.log('id is: ', id) | ||||||
|  | 			var ids = id | ||||||
|  | 				? [id] | ||||||
|  | 				: // ? [1556817256347828335] | ||||||
|  | 				  this.dataListSelections.map(item => { | ||||||
|  | 						return item.id | ||||||
|  | 				  }) | ||||||
|  | 			this.$confirm(`${i18n.t('prompt.info', { handle: id ? i18n.t('delete').toLowerCase() : i18n.t('deleteBatch').toLowerCase() })}`, i18n.t('prompt.title'), { | ||||||
|  | 				confirmButtonText: i18n.t('confirm'), | ||||||
|  | 				cancelButtonText: i18n.t('cancel'), | ||||||
|  | 				type: 'warning' | ||||||
|  | 			}).then(() => { | ||||||
|  | 				this.$http({ | ||||||
|  | 					url: this.$http.adornUrl('/monitoring/product'), | ||||||
|  | 					method: 'delete', | ||||||
|  | 					data: ids | ||||||
|  | 					// or : data: this.$http.adornData(ids, false, 'raw') | ||||||
|  | 				}) | ||||||
|  | 					// or: this.$http.delete(this.$http.adornUrl('/monitoring/product'), { data: this.$http.adornData(ids, false) }) | ||||||
|  | 					.then(({ data }) => { | ||||||
|  | 						if (data && data.code === 0) { | ||||||
|  | 							this.$message({ | ||||||
|  | 								message: i18n.t('prompt.success'), | ||||||
|  | 								type: 'success', | ||||||
|  | 								duration: 1500, | ||||||
|  | 								onClose: () => { | ||||||
|  | 									this.getDataList() | ||||||
|  | 								} | ||||||
|  | 							}) | ||||||
|  | 						} else { | ||||||
|  | 							this.$message.error(data.msg) | ||||||
|  | 						} | ||||||
|  | 					}) | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										228
									
								
								src/views/modules/monitoring/productArrt.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										228
									
								
								src/views/modules/monitoring/productArrt.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,228 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="mod-config"> | ||||||
|  | 		<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)"> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-input v-model="dataForm.key" :placeholder="$t('parameter')" clearable></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-button @click="currentChangeHandle(1)">{{ $t('query') }}</el-button> | ||||||
|  | 				<el-button v-if="$hasPermission('monitoring:productarrt:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  |  | ||||||
|  | 		<base-table :data="dataList" :table-head-configs="tableConfigs" :max-height="calcMaxHeight(8)" @operate-event="handleOperations" @refreshDataList="getDataList" /> | ||||||
|  | 		<el-pagination | ||||||
|  | 			@size-change="sizeChangeHandle" | ||||||
|  | 			@current-change="currentChangeHandle" | ||||||
|  | 			:current-page="pageIndex" | ||||||
|  | 			:page-sizes="[10, 20, 50, 100]" | ||||||
|  | 			:page-size="pageSize" | ||||||
|  | 			:total="totalPage" | ||||||
|  | 			layout="total, sizes, prev, pager, next, jumper" | ||||||
|  | 		> | ||||||
|  | 		</el-pagination> | ||||||
|  | 		<!-- 弹窗, 新增 / 修改 --> | ||||||
|  | 		<add-or-update v-if="addOrUpdateVisible" :configs="addOrUpdateConfigs" ref="addOrUpdate" @refreshDataList="getDataList" @destory-dialog="handleDestroyDialog" /> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { calcMaxHeight } from '@/utils' | ||||||
|  | import { timeFilter } from '@/utils/filters' | ||||||
|  | // import AddOrUpdate from './productArrt-add-or-update' | ||||||
|  | import AddOrUpdate from '@/components/base-dialog/addOrUpdate' | ||||||
|  | import i18n from '@/i18n' | ||||||
|  | import BaseTable from '@/components/base-table' | ||||||
|  | import TableOperateComponent from '@/components/base-table/components/operationComponent' | ||||||
|  | // import TableTextComponent from '@/components/base-table/components/detailComponent' | ||||||
|  |  | ||||||
|  | const tableConfigs = [ | ||||||
|  | 	{ prop: 'createTime', name: i18n.t('createTime'), filter: timeFilter }, | ||||||
|  | 	{ prop: 'name', name: i18n.t('attrName') }, | ||||||
|  | 	{ prop: 'code', name: i18n.t('prod.attrcode') }, | ||||||
|  | 	{ prop: 'productId', name: i18n.t('prod.id') }, | ||||||
|  | 	{ prop: 'value', name: i18n.t('attrValue') }, | ||||||
|  | 	{ prop: 'description', name: i18n.t('desc') }, | ||||||
|  | 	{ prop: 'operations', name: i18n.t('handle'), fixed: 'right', width: 180, subcomponent: TableOperateComponent, options: ['edit', 'delete'] } | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | const addOrUpdateConfigs = { | ||||||
|  | 	type: 'dialog', | ||||||
|  | 	infoUrl: '/monitoring/productArrt', | ||||||
|  | 	fields: [ | ||||||
|  | 		{ | ||||||
|  | 			name: 'name', | ||||||
|  | 			label: i18n.t('attrName'), | ||||||
|  | 			placeholder: i18n.t('prod.attrnameHints') | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name: 'code', | ||||||
|  | 			label: i18n.t('prod.attrcode'), | ||||||
|  | 			placeholder: i18n.t('prod.attrcodeHints') | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name: 'productId', | ||||||
|  | 			label: i18n.t('prod.relatedPid'), | ||||||
|  | 			type: 'select', | ||||||
|  | 			options: [] | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name: 'value', | ||||||
|  | 			label: i18n.t('attrValue'), | ||||||
|  | 			placeholder: i18n.t('prod.attrvalueHints') | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name: 'description', | ||||||
|  | 			label: i18n.t('desc'), | ||||||
|  | 			placeholder: i18n.t('prod.descHints') | ||||||
|  | 		} | ||||||
|  | 	], | ||||||
|  | 	operations: [ | ||||||
|  | 		{ name: 'cancel', showAlways: true }, | ||||||
|  | 		{ name: 'save', url: '/monitoring/productArrt', permission: 'monitoring:productarrt:save', showOnEdit: false }, | ||||||
|  | 		{ name: 'update', url: '/monitoring/productArrt', permission: 'monitoring:productarrt:update', showOnEdit: true } | ||||||
|  | 	] | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			calcMaxHeight, | ||||||
|  | 			addOrUpdateConfigs, | ||||||
|  | 			tableConfigs, | ||||||
|  | 			dataForm: { | ||||||
|  | 				key: '' | ||||||
|  | 			}, | ||||||
|  | 			dataList: [], | ||||||
|  | 			pageIndex: 1, | ||||||
|  | 			pageSize: 10, | ||||||
|  | 			totalPage: 0, | ||||||
|  | 			dataListLoading: false, | ||||||
|  | 			dataListSelections: [], | ||||||
|  | 			addOrUpdateVisible: false | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	components: { | ||||||
|  | 		AddOrUpdate, | ||||||
|  | 		BaseTable | ||||||
|  | 	}, | ||||||
|  | 	activated() { | ||||||
|  | 		this.getProductList() | ||||||
|  | 		this.getDataList() | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		// destroy dialog | ||||||
|  | 		handleDestroyDialog() { | ||||||
|  | 			setTimeout(() => { | ||||||
|  | 				this.addOrUpdateVisible = false | ||||||
|  | 			}, /** after dialog animated */ 200) | ||||||
|  | 		}, | ||||||
|  | 		// 获取产品列表 | ||||||
|  | 		getProductList() { | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/product/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams({ | ||||||
|  | 					limit: 999, | ||||||
|  | 					page: 1 | ||||||
|  | 				}) | ||||||
|  | 			}).then(({ data: res }) => { | ||||||
|  | 				if (res && res.code === 0) { | ||||||
|  | 					this.addOrUpdateConfigs.fields.forEach(item => { | ||||||
|  | 						if (item.name === 'productId') item.options = res.data.list.map(item => ({ label: item.name, value: item.id })) | ||||||
|  | 					}) | ||||||
|  | 				} else { | ||||||
|  | 					this.addOrUpdateConfigs.fields.forEach(item => { | ||||||
|  | 						if (item.name === 'productId') item.options.splice(0) | ||||||
|  | 					}) | ||||||
|  | 					// this.plList.splice(0) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 获取数据列表 | ||||||
|  | 		getDataList() { | ||||||
|  | 			this.dataListLoading = true | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/productArrt/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams({ | ||||||
|  | 					page: this.pageIndex, | ||||||
|  | 					limit: this.pageSize, | ||||||
|  | 					key: this.dataForm.key | ||||||
|  | 				}) | ||||||
|  | 			}).then(({ data }) => { | ||||||
|  | 				if (data && data.code === 0) { | ||||||
|  | 					this.dataList = data.data.list | ||||||
|  | 					this.totalPage = data.data.total | ||||||
|  | 				} else { | ||||||
|  | 					this.dataList = [] | ||||||
|  | 					this.totalPage = 0 | ||||||
|  | 				} | ||||||
|  | 				this.dataListLoading = false | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 每页数 | ||||||
|  | 		sizeChangeHandle(val) { | ||||||
|  | 			this.pageSize = val | ||||||
|  | 			this.pageIndex = 1 | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 当前页 | ||||||
|  | 		currentChangeHandle(val) { | ||||||
|  | 			this.pageIndex = val | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 多选 | ||||||
|  | 		selectionChangeHandle(val) { | ||||||
|  | 			this.dataListSelections = val | ||||||
|  | 		}, | ||||||
|  | 		handleOperations({ type, data: id }) { | ||||||
|  | 			switch (type) { | ||||||
|  | 				case 'edit': | ||||||
|  | 					return this.addOrUpdateHandle(id) | ||||||
|  | 				case 'delete': | ||||||
|  | 					return this.deleteHandle(id) | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		// 新增 / 修改 | ||||||
|  | 		addOrUpdateHandle(id) { | ||||||
|  | 			this.addOrUpdateVisible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs.addOrUpdate.init(id) | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 删除 | ||||||
|  | 		deleteHandle(id) { | ||||||
|  | 			var ids = id | ||||||
|  | 				? [id] | ||||||
|  | 				: this.dataListSelections.map(item => { | ||||||
|  | 						return item.id | ||||||
|  | 				  }) | ||||||
|  | 			this.$confirm(`${i18n.t('prompt.info', { handle: id ? i18n.t('delete').toLowerCase() : i18n.t('deleteBatch').toLowerCase() })}`, i18n.t('prompt.title'), { | ||||||
|  | 				confirmButtonText: i18n.t('confirm'), | ||||||
|  | 				cancelButtonText: i18n.t('cancel'), | ||||||
|  | 				type: 'warning' | ||||||
|  | 			}).then(() => { | ||||||
|  | 				this.$http({ | ||||||
|  | 					url: this.$http.adornUrl('/monitoring/productArrt'), | ||||||
|  | 					method: 'delete', | ||||||
|  | 					data: this.$http.adornData(ids, false, 'raw') | ||||||
|  | 				}).then(({ data }) => { | ||||||
|  | 					if (data && data.code === 0) { | ||||||
|  | 						this.$message({ | ||||||
|  | 							message: i18n.t('prompt.success'), | ||||||
|  | 							type: 'success', | ||||||
|  | 							duration: 1500, | ||||||
|  | 							onClose: () => { | ||||||
|  | 								this.getDataList() | ||||||
|  | 							} | ||||||
|  | 						}) | ||||||
|  | 					} else { | ||||||
|  | 						this.$message.error(data.msg) | ||||||
|  | 					} | ||||||
|  | 				}) | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										231
									
								
								src/views/modules/monitoring/productionLine.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										231
									
								
								src/views/modules/monitoring/productionLine.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,231 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="mod-config"> | ||||||
|  | 		<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)"> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-input v-model="dataForm.key" :placeholder="$t('pl.name')" clearable></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-button @click="currentChangeHandle(1)">{{ $t('query') }}</el-button> | ||||||
|  | 				<el-button v-if="$hasPermission('monitoring:productionline:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  |  | ||||||
|  | 		<base-table | ||||||
|  | 			:page="pageIndex" | ||||||
|  | 			:size="pageSize" | ||||||
|  | 			:data="dataList" | ||||||
|  | 			:table-head-configs="tableConfigs" | ||||||
|  | 			:max-height="calcMaxHeight(8)" | ||||||
|  | 			@operate-event="handleOperations" | ||||||
|  | 			@refreshDataList="getDataList" | ||||||
|  | 		/> | ||||||
|  | 		<el-pagination | ||||||
|  | 			@size-change="sizeChangeHandle" | ||||||
|  | 			@current-change="currentChangeHandle" | ||||||
|  | 			:current-page="pageIndex" | ||||||
|  | 			:page-sizes="[10, 20, 50, 100]" | ||||||
|  | 			:page-size="pageSize" | ||||||
|  | 			:total="totalPage" | ||||||
|  | 			layout="total, sizes, prev, pager, next, jumper" | ||||||
|  | 		> | ||||||
|  | 		</el-pagination> | ||||||
|  | 		<!-- 弹窗, 新增 / 修改 --> | ||||||
|  | 		<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" :configs="addOrUpdateConfigs" @refreshDataList="getDataList" @destory-dialog="handleDestroyDialog" /> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { calcMaxHeight } from '@/utils' | ||||||
|  | import { timeFilter } from '@/utils/filters' | ||||||
|  | import AddOrUpdate from '@/components/base-dialog/addOrUpdate' | ||||||
|  | import i18n from '@/i18n' | ||||||
|  | import BaseTable from '@/components/base-table' | ||||||
|  | import TableOperateComponent from '@/components/base-table/components/operationComponent' | ||||||
|  | // import TableTextComponent from '@/components/base-table/components/detailComponent' | ||||||
|  |  | ||||||
|  | const tableConfigs = [ | ||||||
|  | 	{ | ||||||
|  | 		type: 'index', | ||||||
|  | 		name: i18n.t('index') | ||||||
|  | 	}, | ||||||
|  | 	{ prop: 'createTime', name: i18n.t('createTime'), filter: timeFilter }, | ||||||
|  | 	{ prop: 'factoryName', name: i18n.t('factory.title') }, | ||||||
|  | 	{ prop: 'name', name: i18n.t('pl.name') }, | ||||||
|  | 	{ prop: 'code', name: i18n.t('pl.code') }, | ||||||
|  | 	{ prop: 'status', name: i18n.t('pl.status'), filter: val => (val === 0 || val === 1 || val === 2) && ['停止', '运行', '未知'][val] }, | ||||||
|  | 	{ prop: 'description', name: i18n.t('desc') }, | ||||||
|  | 	{ prop: 'remark', name: i18n.t('remark') }, | ||||||
|  | 	{ prop: 'operations', name: i18n.t('handle'), fixed: 'right', width: 180, subcomponent: TableOperateComponent, options: ['edit', 'delete'] } | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | const addOrUpdateConfigs = { | ||||||
|  | 	type: 'dialog', | ||||||
|  | 	infoUrl: '/monitoring/productionLine', | ||||||
|  | 	fields: [ | ||||||
|  | 		// 'name', | ||||||
|  | 		{ name: 'name', label: i18n.t('pl.name'), required: true }, | ||||||
|  | 		{ name: 'code', label: i18n.t('pl.code'), required: true, api: '/monitoring/productionLine/getCode' }, | ||||||
|  | 		{ | ||||||
|  | 			name: 'factoryId', | ||||||
|  | 			required: true, | ||||||
|  | 			label: i18n.t('factory.title'), | ||||||
|  | 			type: 'select', | ||||||
|  | 			placeholder: i18n.t('pl.factoryHints'), | ||||||
|  | 			options: [] | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name: 'tvalue', | ||||||
|  | 			label: i18n.t('pl.tvalue'), | ||||||
|  | 			placeholder: i18n.t('hints.number'), | ||||||
|  | 			type: 'number', // TODO: 可改进为自动应用 number 验证,此时还必须添加下述规则: | ||||||
|  | 			required: true, | ||||||
|  | 			rules: [{ type: 'number', transform: val => Number(val), trigger: 'blur', message: i18n.t('hints.number') }] | ||||||
|  | 		}, | ||||||
|  | 		'description', | ||||||
|  | 		'remark' | ||||||
|  | 	], | ||||||
|  | 	operations: [ | ||||||
|  | 		{ name: 'cancel', url: true, showAlways: true }, | ||||||
|  | 		{ name: 'save', url: '/monitoring/productionLine', permission: 'monitoring:productionline:save', showOnEdit: false }, | ||||||
|  | 		{ name: 'update', url: '/monitoring/productionLine', permission: 'monitoring:productionline:update', showOnEdit: true } | ||||||
|  | 	] | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			calcMaxHeight, | ||||||
|  | 			addOrUpdateConfigs, | ||||||
|  | 			tableConfigs, | ||||||
|  | 			dataForm: { | ||||||
|  | 				key: '' | ||||||
|  | 			}, | ||||||
|  | 			dataList: [], | ||||||
|  | 			factoryList: [], | ||||||
|  | 			pageIndex: 1, | ||||||
|  | 			pageSize: 10, | ||||||
|  | 			totalPage: 0, | ||||||
|  | 			dataListLoading: false, | ||||||
|  | 			dataListSelections: [], | ||||||
|  | 			addOrUpdateVisible: false | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	components: { | ||||||
|  | 		AddOrUpdate, | ||||||
|  | 		BaseTable | ||||||
|  | 	}, | ||||||
|  | 	activated() { | ||||||
|  | 		this.getFactoryList() | ||||||
|  | 		this.getDataList() | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		// destroy dialog | ||||||
|  | 		handleDestroyDialog() { | ||||||
|  | 			setTimeout(() => { | ||||||
|  | 				this.addOrUpdateVisible = false | ||||||
|  | 			}, /** after dialog animated */ 200) | ||||||
|  | 		}, | ||||||
|  | 		// 获取工厂列表 | ||||||
|  | 		getFactoryList() { | ||||||
|  | 			this.$http.get(this.$http.adornUrl('/monitoring/factory/list')).then(({ data: res }) => { | ||||||
|  | 				if (res && res.code === 0) { | ||||||
|  | 					this.factoryList = res.data | ||||||
|  | 				} else { | ||||||
|  | 					this.factoryList.splice(0) | ||||||
|  | 				} | ||||||
|  | 				this.addOrUpdateConfigs.fields.forEach(item => { | ||||||
|  | 					if (item.name === 'factoryId') { | ||||||
|  | 						console.log('res', item) | ||||||
|  | 						item.options = this.factoryList.map(f => ({ value: f.id, label: f.name })) | ||||||
|  | 					} | ||||||
|  | 				}) | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 获取数据列表 | ||||||
|  | 		getDataList() { | ||||||
|  | 			this.addOrUpdateVisible = false | ||||||
|  | 			this.dataListLoading = true | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/productionLine/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams({ | ||||||
|  | 					page: this.pageIndex, | ||||||
|  | 					limit: this.pageSize, | ||||||
|  | 					key: this.dataForm.key | ||||||
|  | 				}) | ||||||
|  | 			}).then(({ data }) => { | ||||||
|  | 				if (data && data.code === 0) { | ||||||
|  | 					this.dataList = data.data.list | ||||||
|  | 					this.totalPage = data.data.total | ||||||
|  | 				} else { | ||||||
|  | 					this.dataList = [] | ||||||
|  | 					this.totalPage = 0 | ||||||
|  | 				} | ||||||
|  | 				this.dataListLoading = false | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 每页数 | ||||||
|  | 		sizeChangeHandle(val) { | ||||||
|  | 			this.pageSize = val | ||||||
|  | 			this.pageIndex = 1 | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 当前页 | ||||||
|  | 		currentChangeHandle(val) { | ||||||
|  | 			this.pageIndex = val | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 多选 | ||||||
|  | 		selectionChangeHandle(val) { | ||||||
|  | 			this.dataListSelections = val | ||||||
|  | 		}, | ||||||
|  | 		handleOperations({ type, data: id }) { | ||||||
|  | 			switch (type) { | ||||||
|  | 				case 'edit': | ||||||
|  | 					return this.addOrUpdateHandle(id) | ||||||
|  | 				case 'delete': | ||||||
|  | 					return this.deleteHandle(id) | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		// 新增 / 修改 | ||||||
|  | 		addOrUpdateHandle(id) { | ||||||
|  | 			this.addOrUpdateVisible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs.addOrUpdate.init(id) | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 删除 | ||||||
|  | 		deleteHandle(id) { | ||||||
|  | 			var ids = id | ||||||
|  | 				? [id] | ||||||
|  | 				: this.dataListSelections.map(item => { | ||||||
|  | 						return item.id | ||||||
|  | 				  }) | ||||||
|  | 			this.$confirm(`${i18n.t('prompt.info', { handle: id ? i18n.t('delete').toLowerCase() : i18n.t('deleteBatch').toLowerCase() })}`, i18n.t('prompt.title'), { | ||||||
|  | 				confirmButtonText: i18n.t('confirm'), | ||||||
|  | 				cancelButtonText: i18n.t('cancel'), | ||||||
|  | 				type: 'warning' | ||||||
|  | 			}).then(() => { | ||||||
|  | 				this.$http({ | ||||||
|  | 					url: this.$http.adornUrl('/monitoring/productionLine'), | ||||||
|  | 					method: 'delete', | ||||||
|  | 					data: this.$http.adornData(ids, false, 'raw') | ||||||
|  | 				}).then(({ data }) => { | ||||||
|  | 					if (data && data.code === 0) { | ||||||
|  | 						this.$message({ | ||||||
|  | 							message: i18n.t('prompt.success'), | ||||||
|  | 							type: 'success', | ||||||
|  | 							duration: 1500, | ||||||
|  | 							onClose: () => { | ||||||
|  | 								this.getDataList() | ||||||
|  | 							} | ||||||
|  | 						}) | ||||||
|  | 					} else { | ||||||
|  | 						this.$message.error(data.msg) | ||||||
|  | 					} | ||||||
|  | 				}) | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
| @@ -0,0 +1,121 @@ | |||||||
|  | <template> | ||||||
|  | 	<el-dialog :title="!dataForm.id ? i18n.t('add') : i18n.t('update')" :close-on-click-modal="false" :visible.sync="visible"> | ||||||
|  | 		<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" label-width="80px"> | ||||||
|  | 			<el-form-item label="产线id" prop="productionLineId"> | ||||||
|  | 				<el-input v-model="dataForm.productionLineId" placeholder="产线id"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="上一次记录时间至该条记录时间端内上片数量" prop="inputNum"> | ||||||
|  | 				<el-input v-model="dataForm.inputNum" placeholder="上一次记录时间至该条记录时间端内上片数量"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="上一次记录时间至该条记录时间端内下片数量" prop="outputNum"> | ||||||
|  | 				<el-input v-model="dataForm.outputNum" placeholder="上一次记录时间至该条记录时间端内下片数量"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="记录时间" prop="recordTime"> | ||||||
|  | 				<el-input v-model="dataForm.recordTime" placeholder="记录时间"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="删除标志,是否有效:1 可用 0不可用" prop="valid"> | ||||||
|  | 				<el-input v-model="dataForm.valid" placeholder="删除标志,是否有效:1 可用 0不可用"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="该记录时间点的累计上片数量" prop="sumInputNum"> | ||||||
|  | 				<el-input v-model="dataForm.sumInputNum" placeholder="该记录时间点的累计上片数量"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="该记录时间点的累计下片数量" prop="sumOutputNum"> | ||||||
|  | 				<el-input v-model="dataForm.sumOutputNum" placeholder="该记录时间点的累计下片数量"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  | 		<span slot="footer" class="dialog-footer"> | ||||||
|  | 			<el-button @click="visible = false">{{ $t('cancel') }}</el-button> | ||||||
|  | 			<el-button type="primary" @click="dataFormSubmit()">{{ $t('confirm') }}</el-button> | ||||||
|  | 		</span> | ||||||
|  | 	</el-dialog> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			visible: false, | ||||||
|  | 			dataForm: { | ||||||
|  | 				id: 0, | ||||||
|  | 				productionLineId: '', | ||||||
|  | 				inputNum: '', | ||||||
|  | 				outputNum: '', | ||||||
|  | 				recordTime: '', | ||||||
|  | 				valid: '', | ||||||
|  | 				sumInputNum: '', | ||||||
|  | 				sumOutputNum: '' | ||||||
|  | 			}, | ||||||
|  | 			dataRule: { | ||||||
|  | 				productionLineId: [{ required: true, message: '产线id不能为空', trigger: 'blur' }], | ||||||
|  | 				inputNum: [{ required: true, message: '上一次记录时间至该条记录时间端内上片数量不能为空', trigger: 'blur' }], | ||||||
|  | 				outputNum: [{ required: true, message: '上一次记录时间至该条记录时间端内下片数量不能为空', trigger: 'blur' }], | ||||||
|  | 				recordTime: [{ required: true, message: '记录时间不能为空', trigger: 'blur' }], | ||||||
|  | 				valid: [{ required: true, message: '删除标志,是否有效:1 可用 0不可用不能为空', trigger: 'blur' }], | ||||||
|  | 				sumInputNum: [{ required: true, message: '该记录时间点的累计上片数量不能为空', trigger: 'blur' }], | ||||||
|  | 				sumOutputNum: [{ required: true, message: '该记录时间点的累计下片数量不能为空', trigger: 'blur' }] | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		init(id) { | ||||||
|  | 			this.dataForm.id = id || 0 | ||||||
|  | 			this.visible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs['dataForm'].resetFields() | ||||||
|  | 				if (this.dataForm.id) { | ||||||
|  | 					this.$http({ | ||||||
|  | 						url: this.$http.adornUrl(`/monitoring/productionLineRecSch/${this.dataForm.id}`), | ||||||
|  | 						method: 'get', | ||||||
|  | 						params: this.$http.adornParams() | ||||||
|  | 					}).then(({ data }) => { | ||||||
|  | 						if (data && data.code === 0) { | ||||||
|  | 							this.dataForm.productionLineId = data.productionLineRecSch.productionLineId | ||||||
|  | 							this.dataForm.inputNum = data.productionLineRecSch.inputNum | ||||||
|  | 							this.dataForm.outputNum = data.productionLineRecSch.outputNum | ||||||
|  | 							this.dataForm.recordTime = data.productionLineRecSch.recordTime | ||||||
|  | 							this.dataForm.valid = data.productionLineRecSch.valid | ||||||
|  | 							this.dataForm.sumInputNum = data.productionLineRecSch.sumInputNum | ||||||
|  | 							this.dataForm.sumOutputNum = data.productionLineRecSch.sumOutputNum | ||||||
|  | 						} | ||||||
|  | 					}) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 表单提交 | ||||||
|  | 		dataFormSubmit() { | ||||||
|  | 			this.$refs['dataForm'].validate(valid => { | ||||||
|  | 				if (valid) { | ||||||
|  | 					this.$http({ | ||||||
|  | 						url: this.$http.adornUrl(`/monitoring/productionLineRecSch/${!this.dataForm.id ? '' : this.dataForm.id}`), | ||||||
|  | 						method: this.dataForm.id ? 'put' : 'post', | ||||||
|  | 						data: this.$http.adornData({ | ||||||
|  | 							id: this.dataForm.id || undefined, | ||||||
|  | 							productionLineId: this.dataForm.productionLineId, | ||||||
|  | 							inputNum: this.dataForm.inputNum, | ||||||
|  | 							outputNum: this.dataForm.outputNum, | ||||||
|  | 							recordTime: this.dataForm.recordTime, | ||||||
|  | 							valid: this.dataForm.valid, | ||||||
|  | 							sumInputNum: this.dataForm.sumInputNum, | ||||||
|  | 							sumOutputNum: this.dataForm.sumOutputNum | ||||||
|  | 						}) | ||||||
|  | 					}).then(({ data }) => { | ||||||
|  | 						if (data && data.code === 0) { | ||||||
|  | 							this.$message({ | ||||||
|  | 								message: i18n.t('prompt.success'), | ||||||
|  | 								type: 'success', | ||||||
|  | 								duration: 1500, | ||||||
|  | 								onClose: () => { | ||||||
|  | 									this.visible = false | ||||||
|  | 									this.$emit('refreshDataList') | ||||||
|  | 								} | ||||||
|  | 							}) | ||||||
|  | 						} else { | ||||||
|  | 							this.$message.error(data.msg) | ||||||
|  | 						} | ||||||
|  | 					}) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										159
									
								
								src/views/modules/monitoring/productionLineRecSch.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										159
									
								
								src/views/modules/monitoring/productionLineRecSch.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,159 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="mod-config"> | ||||||
|  | 		<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)"> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-input v-model="dataForm.key" :placeholder="$t('parameter')" clearable></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-button @click="currentChangeHandle(1)">{{ $t('query') }}</el-button> | ||||||
|  | 				<el-button v-if="$hasPermission('monitoring:productionlinerecsch:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  |  | ||||||
|  | 		<base-table :data="dataList" :table-head-configs="tableConfigs" :max-height="calcMaxHeight(8)" /> | ||||||
|  | 		<el-pagination | ||||||
|  | 			@size-change="sizeChangeHandle" | ||||||
|  | 			@current-change="currentChangeHandle" | ||||||
|  | 			:current-page="pageIndex" | ||||||
|  | 			:page-sizes="[10, 20, 50, 100]" | ||||||
|  | 			:page-size="pageSize" | ||||||
|  | 			:total="totalPage" | ||||||
|  | 			layout="total, sizes, prev, pager, next, jumper" | ||||||
|  | 		> | ||||||
|  | 		</el-pagination> | ||||||
|  | 		<!-- 弹窗, 新增 / 修改 --> | ||||||
|  | 		<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { calcMaxHeight } from '@/utils' | ||||||
|  | import { timeFilter } from '@/utils/filters' | ||||||
|  | import AddOrUpdate from './productionLineRecSch-add-or-update' | ||||||
|  | import i18n from '@/i18n' | ||||||
|  | import BaseTable from '@/components/base-table' | ||||||
|  | import TableOperateComponent from '@/components/base-table/components/operationComponent' | ||||||
|  | import TableTextComponent from '@/components/base-table/components/detailComponent' | ||||||
|  |  | ||||||
|  | const tableConfigs = [ | ||||||
|  | 	{ prop: 'id', name: 'ID' }, | ||||||
|  | 	{ prop: 'productionLineId', name: i18n.t('pl.id') }, | ||||||
|  | 	{ prop: 'inputNum', name: '上一次记录时间至该条记录时间端内上片数量' }, | ||||||
|  | 	{ prop: 'outputNum', name: '上一次记录时间至该条记录时间端内下片数量' }, | ||||||
|  | 	{ prop: 'recordTime', name: i18n.t('recordTime') }, | ||||||
|  | 	{ prop: 'valid', name: i18n.t('delMark') }, | ||||||
|  | 	{ prop: 'sumInputNum', name: '该记录时间点的累计上片数量' }, | ||||||
|  | 	{ prop: 'sumOutputNum', name: '该记录时间点的累计下片数量' }, | ||||||
|  | 	{ prop: 'operations', name: i18n.t('handle'), fixed: 'right', width: 180, subcomponent: TableOperateComponent, options: ['edit', 'delete'] } | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			calcMaxHeight, | ||||||
|  | 			tableConfigs, | ||||||
|  | 			dataForm: { | ||||||
|  | 				key: '' | ||||||
|  | 			}, | ||||||
|  | 			dataList: [], | ||||||
|  | 			pageIndex: 1, | ||||||
|  | 			pageSize: 10, | ||||||
|  | 			totalPage: 0, | ||||||
|  | 			dataListLoading: false, | ||||||
|  | 			dataListSelections: [], | ||||||
|  | 			addOrUpdateVisible: false | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	components: { | ||||||
|  | 		AddOrUpdate, | ||||||
|  | 		BaseTable | ||||||
|  | 	}, | ||||||
|  | 	activated() { | ||||||
|  | 		this.getDataList() | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		// destroy dialog | ||||||
|  | 		handleDestroyDialog() { | ||||||
|  | 			setTimeout(() => { | ||||||
|  | 				this.addOrUpdateVisible= false | ||||||
|  | 			}, /** after dialog animated */ 200); | ||||||
|  | 		}, | ||||||
|  | 		// 获取数据列表 | ||||||
|  | 		getDataList() { | ||||||
|  | 			this.dataListLoading = true | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/productionLineRecSch/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams({ | ||||||
|  | 					page: this.pageIndex, | ||||||
|  | 					limit: this.pageSize, | ||||||
|  | 					key: this.dataForm.key | ||||||
|  | 				}) | ||||||
|  | 			}).then(({ data }) => { | ||||||
|  | 				if (data && data.code === 0) { | ||||||
|  | 					this.dataList = data.data.list | ||||||
|  | 					this.totalPage = data.data.total | ||||||
|  | 				} else { | ||||||
|  | 					this.dataList = [] | ||||||
|  | 					this.totalPage = 0 | ||||||
|  | 				} | ||||||
|  | 				this.dataListLoading = false | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 每页数 | ||||||
|  | 		sizeChangeHandle(val) { | ||||||
|  | 			this.pageSize = val | ||||||
|  | 			this.pageIndex = 1 | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 当前页 | ||||||
|  | 		currentChangeHandle(val) { | ||||||
|  | 			this.pageIndex = val | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 多选 | ||||||
|  | 		selectionChangeHandle(val) { | ||||||
|  | 			this.dataListSelections = val | ||||||
|  | 		}, | ||||||
|  | 		// 新增 / 修改 | ||||||
|  | 		addOrUpdateHandle(id) { | ||||||
|  | 			this.addOrUpdateVisible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs.addOrUpdate.init(id) | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 删除 | ||||||
|  | 		deleteHandle(id) { | ||||||
|  | 			var ids = id | ||||||
|  | 				? [id] | ||||||
|  | 				: this.dataListSelections.map(item => { | ||||||
|  | 						return item.id | ||||||
|  | 				  }) | ||||||
|  | 			this.$confirm(`${ i18n.t('prompt.info', { handle: id ? i18n.t('delete').toLowerCase() : i18n.t('deleteBatch').toLowerCase() }) }`, i18n.t('prompt.title'), { | ||||||
|  | 				confirmButtonText: i18n.t('confirm'), | ||||||
|  | 				cancelButtonText: i18n.t('cancel'), | ||||||
|  | 				type: 'warning' | ||||||
|  | 			}).then(() => { | ||||||
|  | 				this.$http({ | ||||||
|  | 					url: this.$http.adornUrl('/monitoring/productionLineRecSch'), | ||||||
|  | 					method: 'delete', | ||||||
|  | 					data: this.$http.adornData(ids, false, 'raw') | ||||||
|  | 				}).then(({ data }) => { | ||||||
|  | 					if (data && data.code === 0) { | ||||||
|  | 						this.$message({ | ||||||
|  | 							message: i18n.t('prompt.success'), | ||||||
|  | 							type: 'success', | ||||||
|  | 							duration: 1500, | ||||||
|  | 							onClose: () => { | ||||||
|  | 								this.getDataList() | ||||||
|  | 							} | ||||||
|  | 						}) | ||||||
|  | 					} else { | ||||||
|  | 						this.$message.error(data.msg) | ||||||
|  | 					} | ||||||
|  | 				}) | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										368
									
								
								src/views/modules/monitoring/qualityInspectionBoxBtn.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										368
									
								
								src/views/modules/monitoring/qualityInspectionBoxBtn.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,368 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="mod-config"> | ||||||
|  | 		<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)"> | ||||||
|  | 			<!-- <el-form-item> --> | ||||||
|  | 			<!-- <el-input v-model="dataForm.key" :placeholder="$t('eq.name') + ' / ' + $t('eq.code')" clearable></el-input> | ||||||
|  | 			</el-form-item> --> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-button @click="currentChangeHandle(1)">{{ $t('search') }}</el-button> | ||||||
|  | 				<el-button v-if="$hasPermission('monitoring:qualityInspectionBoxBtn:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> | ||||||
|  | 				<!-- <el-button v-if="$hasPermission('monitoring:equipment:export')" @click="exportHandle()">{{ $t('export') }}</el-button> --> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  |  | ||||||
|  | 		<base-table | ||||||
|  | 			:page="pageIndex" | ||||||
|  | 			:size="pageSize" | ||||||
|  | 			:data="dataList" | ||||||
|  | 			:table-head-configs="tableConfigs" | ||||||
|  | 			:max-height="calcMaxHeight(8)" | ||||||
|  | 			@operate-event="handleOperations" | ||||||
|  | 			@refreshDataList="getDataList" | ||||||
|  | 		/> | ||||||
|  | 		<el-pagination | ||||||
|  | 			@size-change="sizeChangeHandle" | ||||||
|  | 			@current-change="currentChangeHandle" | ||||||
|  | 			:current-page="pageIndex" | ||||||
|  | 			:page-sizes="[10, 20, 50, 100]" | ||||||
|  | 			:page-size="pageSize" | ||||||
|  | 			:total="totalPage" | ||||||
|  | 			layout="total, sizes, prev, pager, next, jumper" | ||||||
|  | 		></el-pagination> | ||||||
|  | 		<!-- 弹窗, 新增 / 修改 --> | ||||||
|  | 		<add-or-update | ||||||
|  | 			v-if="addOrUpdateVisible" | ||||||
|  | 			ref="addOrUpdate" | ||||||
|  | 			:configs="addOrUpdateConfigs" | ||||||
|  | 			@refreshDataList="getDataList" | ||||||
|  | 			@select-change="handleDialogSelectChange" | ||||||
|  | 			@destory-dialog="handleDestroyDialog" | ||||||
|  | 		/> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import i18n from '@/i18n' | ||||||
|  | import AddOrUpdate from '@/components/base-dialog/addOrUpdate' | ||||||
|  | // import AddOrUpdate from './equipment-add-or-update' | ||||||
|  | import BaseTable from '@/components/base-table' | ||||||
|  | import TableOperateComponent from '@/components/base-table/components/operationComponent' | ||||||
|  | // import TableTextComponent from '@/components/base-table/components/detailComponent' | ||||||
|  | // import CKEditor from 'ckeditor4-vue' | ||||||
|  | import { calcMaxHeight } from '@/utils' | ||||||
|  | import { timeFilter } from '@/utils/filters' | ||||||
|  | // import Cookies from 'js-cookie' | ||||||
|  |  | ||||||
|  | const tableConfigs = [ | ||||||
|  | 	{ | ||||||
|  | 		type: 'index', | ||||||
|  | 		name: i18n.t('index') | ||||||
|  | 	}, | ||||||
|  | 	{ | ||||||
|  | 		prop: 'createTime', | ||||||
|  | 		name: i18n.t('createTime'), | ||||||
|  | 		filter: timeFilter | ||||||
|  | 	}, | ||||||
|  | 	{ prop: 'inspectionDetContent', name: i18n.t('andeng.inspectContent') }, // name: '检测内容' }, | ||||||
|  | 	{ prop: 'keyValue', name: i18n.t('andeng.btnVal') }, // name: '按钮值' }, | ||||||
|  | 	{ prop: 'model', name: i18n.t('andeng.btnBoxModel') }, // name: '按钮盒模式' }, | ||||||
|  |  | ||||||
|  | 	{ | ||||||
|  | 		prop: 'operations', | ||||||
|  | 		name: i18n.t('handle'), | ||||||
|  | 		fixed: 'right', | ||||||
|  | 		width: 180, | ||||||
|  | 		subcomponent: TableOperateComponent, | ||||||
|  | 		options: ['edit', 'delete'] | ||||||
|  | 	} | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | const addOrUpdateConfigs = { | ||||||
|  | 	type: 'dialog', | ||||||
|  | 	infoUrl: '/monitoring/qualityInspectionBoxBtn', | ||||||
|  | 	fields: [ | ||||||
|  | 		// { name: 'productionId', label: i18n.t('eq.name'), required: true }, | ||||||
|  | 		{ name: 'productionId', label: i18n.t('pl.title'), required: true, type: 'select', options: [], relatedField: 'sectionId' }, | ||||||
|  | 		{ name: 'sectionId', label: i18n.t('ws.title'), required: true, type: 'select', options: [] }, | ||||||
|  | 		{ name: 'model', label: i18n.t('andeng.btnBoxModel') }, | ||||||
|  | 		{ | ||||||
|  | 			name: 'keyValue', | ||||||
|  | 			label: i18n.t('andeng.btnVal'), | ||||||
|  | 			required: true, | ||||||
|  | 			rules: [{ type: 'integer', trigger: 'blur', message: i18n.t('hints.integer'), transform: val => Number(val) }] | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name: 'inspectionDetContent', | ||||||
|  | 			label: i18n.t('andeng.inspectContent') | ||||||
|  | 		} | ||||||
|  | 	], | ||||||
|  | 	operations: [ | ||||||
|  | 		{ name: 'cancel', showAlways: true }, | ||||||
|  | 		{ | ||||||
|  | 			name: 'save', | ||||||
|  | 			url: '/monitoring/qualityInspectionBoxBtn', | ||||||
|  | 			permission: 'monitoring:qualityInspectionBoxBtn:save', | ||||||
|  | 			showOnEdit: false | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name: 'update', | ||||||
|  | 			url: '/monitoring/qualityInspectionBoxBtn', | ||||||
|  | 			permission: 'monitoring:qualityInspectionBoxBtn:update', | ||||||
|  | 			showOnEdit: true | ||||||
|  | 		} | ||||||
|  | 	] | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			calcMaxHeight, | ||||||
|  | 			tableConfigs, | ||||||
|  | 			addOrUpdateConfigs, | ||||||
|  | 			dataForm: { | ||||||
|  | 				key: '' | ||||||
|  | 			}, | ||||||
|  | 			dataList: [], | ||||||
|  | 			pageIndex: 1, | ||||||
|  | 			pageSize: 10, | ||||||
|  | 			totalPage: 0, | ||||||
|  | 			dataListLoading: false, | ||||||
|  | 			dataListSelections: [], | ||||||
|  | 			addOrUpdateVisible: false | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	components: { | ||||||
|  | 		AddOrUpdate, | ||||||
|  | 		BaseTable | ||||||
|  | 	}, | ||||||
|  | 	activated() { | ||||||
|  | 		this.getDataList() | ||||||
|  | 		this.getPlList() | ||||||
|  | 		this.getWsList() | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		// destroy dialog | ||||||
|  | 		handleDestroyDialog() { | ||||||
|  | 			setTimeout(() => { | ||||||
|  | 				this.addOrUpdateVisible = false | ||||||
|  | 			}, /** after dialog animated */ 200) | ||||||
|  | 		}, | ||||||
|  | 		// 获取产线列表,用于刷新工段列表 | ||||||
|  | 		getPlList() { | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/productionLine/list'), | ||||||
|  | 				method: 'get' | ||||||
|  | 			}).then(({ data: res }) => { | ||||||
|  | 				const plConfig = this.addOrUpdateConfigs.fields.find(item => item.name === 'productionId') | ||||||
|  | 				plConfig.options = | ||||||
|  | 					res.data?.map(item => ({ | ||||||
|  | 						value: item.id, | ||||||
|  | 						label: item.name | ||||||
|  | 					})) || [] | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 获取工段列表 | ||||||
|  | 		getWsList(id) { | ||||||
|  | 			let params = { | ||||||
|  | 				page: 1, | ||||||
|  | 				limit: 999 | ||||||
|  | 			} | ||||||
|  | 			if (id) { | ||||||
|  | 				params.lineId = id | ||||||
|  | 			} | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/workshopSection/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams(params) | ||||||
|  | 			}).then(({ data: res }) => { | ||||||
|  | 				const wsConfig = this.addOrUpdateConfigs.fields.find(item => item.name === 'sectionId') | ||||||
|  | 				wsConfig.options = | ||||||
|  | 					res.data?.list?.map(item => ({ | ||||||
|  | 						value: item.id, | ||||||
|  | 						label: item.name | ||||||
|  | 					})) || [] | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 获取设备类型列表 | ||||||
|  | 		getTypeList() { | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/equipmentType/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams({ | ||||||
|  | 					// page: this.pageIndex, | ||||||
|  | 					// limit: this.pageSize, | ||||||
|  | 					// key: this.dataForm.key | ||||||
|  | 				}) | ||||||
|  | 			}).then(({ data }) => { | ||||||
|  | 				const eqTypeConfig = this.addOrUpdateConfigs.fields.find(item => item.name === 'equipmentTypeId') | ||||||
|  | 				eqTypeConfig.options = | ||||||
|  | 					data.data?.list?.map(item => ({ | ||||||
|  | 						value: item.id, | ||||||
|  | 						label: item.name | ||||||
|  | 					})) || [] | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 获取设备分组列表 | ||||||
|  | 		getGroupList() { | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/equipmentGroup/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams({ | ||||||
|  | 					// page: this.pageIndex, | ||||||
|  | 					// limit: this.pageSize, | ||||||
|  | 					// key: this.dataForm.key | ||||||
|  | 				}) | ||||||
|  | 			}).then(({ data }) => { | ||||||
|  | 				const groupConfig = this.addOrUpdateConfigs.fields.find(item => item.name === 'groupId') | ||||||
|  | 				groupConfig.options = | ||||||
|  | 					data.data?.list?.map(item => ({ | ||||||
|  | 						value: item.id, | ||||||
|  | 						label: item.name | ||||||
|  | 					})) || [] | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 获取数据列表 | ||||||
|  | 		getDataList() { | ||||||
|  | 			this.dataListLoading = true | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/qualityInspectionBoxBtn/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams({ | ||||||
|  | 					page: this.pageIndex, | ||||||
|  | 					limit: this.pageSize | ||||||
|  | 					// key: this.dataForm.key | ||||||
|  | 				}) | ||||||
|  | 			}).then(({ data }) => { | ||||||
|  | 				if (data && data.code === 0) { | ||||||
|  | 					this.dataList = data.data.list | ||||||
|  | 					// this.dataList = new Array(20).fill('1') | ||||||
|  | 					// console.log('data list', this.dataList) | ||||||
|  | 					this.totalPage = data.data.total | ||||||
|  | 				} else { | ||||||
|  | 					this.dataList = [] | ||||||
|  | 					this.totalPage = 0 | ||||||
|  | 				} | ||||||
|  | 				this.dataListLoading = false | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 每页数 | ||||||
|  | 		sizeChangeHandle(val) { | ||||||
|  | 			this.pageSize = val | ||||||
|  | 			this.pageIndex = 1 | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 当前页 | ||||||
|  | 		currentChangeHandle(val) { | ||||||
|  | 			this.pageIndex = val | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 多选 | ||||||
|  | 		selectionChangeHandle(val) { | ||||||
|  | 			this.dataListSelections = val | ||||||
|  | 		}, | ||||||
|  | 		// 对话框里的某个选择改变了 | ||||||
|  | 		handleDialogSelectChange({ name, id }) { | ||||||
|  | 			switch (name) { | ||||||
|  | 				case 'productionId': | ||||||
|  | 					this.getWsList(id) | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		handleOperations({ type, data: id }) { | ||||||
|  | 			switch (type) { | ||||||
|  | 				case 'view-detail': | ||||||
|  | 					// const { name, code } = this.dataList.find(item => item.id === id) | ||||||
|  | 					// this.$router.push({ | ||||||
|  | 					// 	name: 'monitoring-equipmentAdd', | ||||||
|  | 					// 	params: { | ||||||
|  | 					// 		isdetail: true, | ||||||
|  | 					// 		equipmentId: id | ||||||
|  | 					// 	} | ||||||
|  | 					// }) | ||||||
|  | 					// break | ||||||
|  | 					return this.addOrUpdateHandle(id, true) | ||||||
|  | 				case 'edit': | ||||||
|  | 					return this.addOrUpdateHandle(id) | ||||||
|  | 				case 'delete': | ||||||
|  | 					return this.deleteHandle(id) | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		exportHandle() { | ||||||
|  | 			// this.$http.get(this.$http.adornUrl('/monitoring/equipment/export')).then(({ data: res }) => { | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/equipment/export'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				responseType: 'blob' | ||||||
|  | 			}).then(res => { | ||||||
|  | 				let fileName = 'equipment-list.xls' | ||||||
|  | 				if (res.headers['content-disposition']) { | ||||||
|  | 					const contentDisposition = res.headers['content-disposition'] | ||||||
|  | 					fileName = contentDisposition.slice(contentDisposition.indexOf('filename=') + 9) | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				fileName = decodeURIComponent(fileName) | ||||||
|  |  | ||||||
|  | 				const blob = new Blob([res.data]) | ||||||
|  |  | ||||||
|  | 				if ('download' in document.createElement('a')) { | ||||||
|  | 					const alink = document.createElement('a') | ||||||
|  | 					alink.download = fileName | ||||||
|  | 					alink.style.display = 'none' | ||||||
|  | 					alink.target = '_blank' | ||||||
|  | 					alink.href = URL.createObjectURL(blob) | ||||||
|  | 					document.body.appendChild(alink) | ||||||
|  | 					alink.click() | ||||||
|  | 					URL.revokeObjectURL(alink.href) | ||||||
|  | 					document.body.removeChild(alink) | ||||||
|  | 				} else { | ||||||
|  | 					navigator.msSaveBlob(blob, fileName) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 新增 / 修改 | ||||||
|  | 		addOrUpdateHandle(id, isdetail = false) { | ||||||
|  | 			this.addOrUpdateVisible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs.addOrUpdate.init(id, isdetail) | ||||||
|  | 			}) | ||||||
|  | 			// this.$router.push({ | ||||||
|  | 			// 	name: 'monitoring-equipmentAdd', | ||||||
|  | 			// 	params: { | ||||||
|  | 			// 		equipmentId: id | ||||||
|  | 			// 	} | ||||||
|  | 			// }) | ||||||
|  | 		}, | ||||||
|  | 		// 删除 | ||||||
|  | 		deleteHandle(id) { | ||||||
|  | 			var ids = id | ||||||
|  | 				? [id] | ||||||
|  | 				: this.dataListSelections.map(item => { | ||||||
|  | 						return item.id | ||||||
|  | 				  }) | ||||||
|  | 			this.$confirm(`${i18n.t('prompt.info', { handle: id ? i18n.t('delete').toLowerCase() : i18n.t('deleteBatch').toLowerCase() })}`, i18n.t('prompt.title'), { | ||||||
|  | 				confirmButtonText: i18n.t('confirm'), | ||||||
|  | 				cancelButtonText: i18n.t('cancel'), | ||||||
|  | 				type: 'warning' | ||||||
|  | 			}).then(() => { | ||||||
|  | 				this.$http({ | ||||||
|  | 					url: this.$http.adornUrl('/monitoring/qualityInspectionBoxBtn'), | ||||||
|  | 					method: 'delete', | ||||||
|  | 					data: this.$http.adornData(ids, false, 'raw') | ||||||
|  | 				}).then(({ data }) => { | ||||||
|  | 					if (data && data.code === 0) { | ||||||
|  | 						this.$message({ | ||||||
|  | 							message: i18n.t('prompt.success'), | ||||||
|  | 							type: 'success', | ||||||
|  | 							duration: 1500, | ||||||
|  | 							onClose: () => { | ||||||
|  | 								this.getDataList() | ||||||
|  | 							} | ||||||
|  | 						}) | ||||||
|  | 					} else { | ||||||
|  | 						this.$message.error(data.msg) | ||||||
|  | 					} | ||||||
|  | 				}) | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										402
									
								
								src/views/modules/monitoring/qualityInspectionCurrent.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										402
									
								
								src/views/modules/monitoring/qualityInspectionCurrent.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,402 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="mod-config"> | ||||||
|  | 		<el-form :inline="true" @keyup.enter.native="getDataList()"> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<!-- type="datetimerange" --> | ||||||
|  | 				<el-date-picker | ||||||
|  | 					type="daterange" | ||||||
|  | 					v-model="datetime" | ||||||
|  | 					value-format="yyyy-MM-ddTHH:mm:ss" | ||||||
|  | 					:start-placeholder="$t('startTime')" | ||||||
|  | 					:end-placeholder="$t('endTime')" | ||||||
|  | 					:range-separator="$t('to')" | ||||||
|  | 					:default-time="['00:00:00', '23:59:59']" | ||||||
|  | 					:picker-options="quickOptions" | ||||||
|  | 					clearable | ||||||
|  | 				/> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-button @click="getDataList()">{{ $t('query') }}</el-button> | ||||||
|  | 				<!-- <el-button v-if="$hasPermission('monitoring:qualityinspectionrecord:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> --> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  |  | ||||||
|  | 		<div class="quality-inspection-current base-container"> | ||||||
|  | 			<el-row> | ||||||
|  | 				<el-col> | ||||||
|  | 					<small-title :size="'md'">{{ $t('inspect.ioTotal') }}</small-title> | ||||||
|  | 					<el-row style="margin-top: 12px;"> | ||||||
|  | 						<base-table :data="dataListStatic" :table-head-configs="tableConfigStatic" :max-height="500" @operate-event="handleOperations" @refreshDataList="getDataList" /> | ||||||
|  | 					</el-row> | ||||||
|  | 				</el-col> | ||||||
|  | 			</el-row> | ||||||
|  |  | ||||||
|  | 			<el-row style="margin-top: 28px;"> | ||||||
|  | 				<el-col> | ||||||
|  | 					<el-row> | ||||||
|  | 						<small-title :size="'md'">{{ $t('inspect.plTotal') }}</small-title> | ||||||
|  | 					</el-row> | ||||||
|  | 					<el-row style="margin-top: 8px;"> | ||||||
|  | 						<el-radio-group v-model="dataType" size="medium" @change="handleDataTypeChange"> | ||||||
|  | 							<el-radio-button :label="$t('table2')"></el-radio-button> | ||||||
|  | 							<el-radio-button :label="$t('graph')"></el-radio-button> | ||||||
|  | 						</el-radio-group> | ||||||
|  | 					</el-row> | ||||||
|  | 					<el-row style="margin-top: 12px;"> | ||||||
|  | 						<base-table | ||||||
|  | 							v-if="!showGraph" | ||||||
|  | 							:data="dataListDynamic" | ||||||
|  | 							:table-head-configs="tableConfigDynamic" | ||||||
|  | 							:max-height="500" | ||||||
|  | 							@operate-event="handleOperations" | ||||||
|  | 							@refreshDataList="getDataList" | ||||||
|  | 						/> | ||||||
|  | 						<fake-chart v-else :categories="echartCategories" :type-list="echartCheckTypes" :series-data="echartsData" /> | ||||||
|  | 					</el-row> | ||||||
|  | 				</el-col> | ||||||
|  | 			</el-row> | ||||||
|  | 		</div> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { calcMaxHeight } from '@/utils' | ||||||
|  | import { timeFilter } from '@/utils/filters' | ||||||
|  | import moment from 'moment' | ||||||
|  | import i18n from '@/i18n' | ||||||
|  | import BaseTable from '@/components/base-table' | ||||||
|  | import SmallTitle from '@/components/small-title' | ||||||
|  | import * as echarts from 'echarts' | ||||||
|  |  | ||||||
|  | const tableConfigStatic = [ | ||||||
|  | 	{ type: 'index', width: 100, name: i18n.t('index') }, | ||||||
|  | 	{ name: i18n.t('pl.title'), prop: 'lineName' }, | ||||||
|  | 	{ name: i18n.t('inspect.inTotal'), prop: 'sumUp' }, | ||||||
|  | 	{ name: i18n.t('inspect.outTotal'), prop: 'sumDown' }, | ||||||
|  | 	{ name: i18n.t('inspect.checkTotal'), prop: 'sumCheck' }, | ||||||
|  | 	{ name: i18n.t('inspect.rate'), prop: 'scrapRatio', filter: val => (val || val === 0 ? `${val}%` : '-') } | ||||||
|  | ] | ||||||
|  | const tableConfigDynamic = [ | ||||||
|  | 	{ type: 'index', width: 100, name: i18n.t('index') }, | ||||||
|  | 	{ name: i18n.t('inspect.det'), prop: 'inspectionContent' }, | ||||||
|  | 	/** dynamic */ | ||||||
|  | 	{ name: i18n.t('inspect.typetotal'), prop: '' }, | ||||||
|  | 	{ name: i18n.t('inspect.rate'), prop: '' } | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | const FakeChart = { | ||||||
|  | 	name: 'FakeChart', | ||||||
|  | 	props: { | ||||||
|  | 		categories: { | ||||||
|  | 			type: Array, | ||||||
|  | 			default: () => [] | ||||||
|  | 		}, | ||||||
|  | 		typeList: { | ||||||
|  | 			type: Array, | ||||||
|  | 			default: () => [] | ||||||
|  | 		}, | ||||||
|  | 		seriesData: { | ||||||
|  | 			type: Array, | ||||||
|  | 			default: () => [] | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			calcMaxHeight, | ||||||
|  | 			chart: null, | ||||||
|  | 			defaultOpts: { | ||||||
|  | 				grid: { | ||||||
|  | 					left: '5%', | ||||||
|  | 					right: '12%', | ||||||
|  | 					top: '20%', | ||||||
|  | 					bottom: '10%' | ||||||
|  | 				}, | ||||||
|  | 				title: { | ||||||
|  | 					text: i18n.t('inspect.typeCount') | ||||||
|  | 				}, | ||||||
|  | 				tooltip: {}, | ||||||
|  | 				legend: { | ||||||
|  | 					orient: 'vertical', | ||||||
|  | 					type: 'scroll', | ||||||
|  | 					top: 10, | ||||||
|  | 					right: 0, | ||||||
|  | 					width: '12%', | ||||||
|  | 					/** 修复文本太长时显示问题 */ | ||||||
|  | 					formatter: function(name) { | ||||||
|  | 						return echarts.format.truncateText(name, 120, '14px Microsoft Yahei', '...') | ||||||
|  | 					}, | ||||||
|  | 					tooltip: { | ||||||
|  | 						show: true | ||||||
|  | 					}, | ||||||
|  | 					/** end */ | ||||||
|  | 					data: [] | ||||||
|  | 				}, | ||||||
|  | 				xAxis: { | ||||||
|  | 					data: [ | ||||||
|  | 						/** dynamic */ | ||||||
|  | 					] | ||||||
|  | 				}, | ||||||
|  | 				yAxis: {}, | ||||||
|  | 				series: [ | ||||||
|  | 					// dynamic | ||||||
|  | 					// { | ||||||
|  | 					// 	name: '销售', | ||||||
|  | 					// 	type: 'bar', | ||||||
|  | 					// 	data: [23, 42, 12, 4, 3] | ||||||
|  | 					// } | ||||||
|  | 				] | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	watch: { | ||||||
|  | 		categories: { | ||||||
|  | 			handler: function(val, oldVal) { | ||||||
|  | 				if (val && val !== oldVal) { | ||||||
|  | 					this.defaultOpts.xAxis.data.push(...val) | ||||||
|  | 				} | ||||||
|  | 			}, | ||||||
|  | 			immediate: true | ||||||
|  | 		}, | ||||||
|  | 		typeList: { | ||||||
|  | 			handler: function(val, oldVal) { | ||||||
|  | 				if (val && val !== oldVal) { | ||||||
|  | 					this.defaultOpts.legend.data.push(...val) | ||||||
|  | 				} | ||||||
|  | 			}, | ||||||
|  | 			immediate: true | ||||||
|  | 		}, | ||||||
|  | 		seriesData: { | ||||||
|  | 			handler: function(val, oldVal) { | ||||||
|  | 				if (val && val !== oldVal) { | ||||||
|  | 					this.defaultOpts.series.push(...val) | ||||||
|  | 				} | ||||||
|  | 			}, | ||||||
|  | 			immediate: true | ||||||
|  | 		}, | ||||||
|  | 		defaultOpts: { | ||||||
|  | 			handler: function(val) { | ||||||
|  | 				console.log('defaullt opts change: ', val) | ||||||
|  | 				this.setOptions() | ||||||
|  | 			}, | ||||||
|  | 			immediate: true, | ||||||
|  | 			deep: true | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	mounted() { | ||||||
|  | 		this.$nextTick(() => { | ||||||
|  | 			this.initChart() | ||||||
|  | 			this.setOptions() | ||||||
|  | 		}) | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		initChart() { | ||||||
|  | 			if (!this.chart) { | ||||||
|  | 				this.chart = echarts.init(document.getElementById('bar-chart')) | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		setOptions(opts) { | ||||||
|  | 			/** prop options */ | ||||||
|  | 			if (opts) { | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			if (this.chart) this.chart.setOption(this.defaultOpts) | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	render: function(h) { | ||||||
|  | 		return h('div', { attrs: { id: 'bar-chart' }, style: { background: '#eee', width: '100%', height: '300px', padding: '8px' } }, '') | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | const dict = [i18n.t('table2'), i18n.t('graph')] | ||||||
|  | export default { | ||||||
|  | 	name: 'QualityInspectionCurrent', | ||||||
|  | 	components: { BaseTable, SmallTitle, FakeChart }, | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			tableConfigStatic, | ||||||
|  | 			tableConfigDynamic, | ||||||
|  | 			dataListStatic: [], | ||||||
|  | 			dataListDynamic: [], | ||||||
|  | 			dict, | ||||||
|  | 			dataType: dict[0], // 表格 | 图形 | ||||||
|  | 			showGraph: false, | ||||||
|  | 			datetime: [], | ||||||
|  | 			quickOptions: { | ||||||
|  | 				shortcuts: [ | ||||||
|  | 					{ | ||||||
|  | 						text: i18n.t('today'), | ||||||
|  | 						onClick(picker) { | ||||||
|  | 							const baseTime = moment().set({ hour: 0, minute: 0, second: 0, millisecond: 0 }) | ||||||
|  | 							const startTime = baseTime.format('yyyy-MM-DDTHH:mm:ss') | ||||||
|  | 							const endTime = baseTime.set({ hour: 23, minute: 59, second: 59, millisecond: 999 }).format('yyyy-MM-DDTHH:mm:ss') | ||||||
|  | 							picker.$emit('pick', [startTime, endTime]) | ||||||
|  | 						} | ||||||
|  | 					} | ||||||
|  | 				] | ||||||
|  | 			}, | ||||||
|  | 			echartCategories: null, | ||||||
|  | 			echartCheckTypes: [], | ||||||
|  | 			interval: null | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	mounted() { | ||||||
|  | 		this.getDataList() | ||||||
|  |  | ||||||
|  | 		this.interval = setInterval(() => { | ||||||
|  | 			this.$message.info(i18n.t('refresh')) | ||||||
|  | 			this.dataListStatic.splice(0) | ||||||
|  | 			this.dataListDynamic.splice(0) | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, 1000 * 5 * 60) | ||||||
|  | 	}, | ||||||
|  | 	deactivated() { | ||||||
|  | 		if (this.interval) { | ||||||
|  | 			clearInterval(this.interval) | ||||||
|  | 			this.interval = null | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		handleOperations() {}, | ||||||
|  | 		handleDataTypeChange(value) { | ||||||
|  | 			this.showGraph = value === dict[0] ? false : true | ||||||
|  | 		}, | ||||||
|  | 		getDataList() { | ||||||
|  | 			this.showGraph = false | ||||||
|  | 			this.dataType = i18n.t('table2') | ||||||
|  | 			this.echartCategories = null | ||||||
|  | 			this.echartCheckTypes.splice(0) | ||||||
|  | 			/** 设置默认日期 */ | ||||||
|  | 			const startTime = | ||||||
|  | 				this.datetime[0] || | ||||||
|  | 				moment() | ||||||
|  | 					.set({ hour: 0, minute: 0, second: 0 }) | ||||||
|  | 					.format('yyyy-MM-DDTHH:mm:ss') | ||||||
|  | 			const endTime = | ||||||
|  | 				this.datetime[1] || | ||||||
|  | 				moment() | ||||||
|  | 					.set({ hour: 23, minute: 59, second: 59 }) | ||||||
|  | 					.format('yyyy-MM-DDTHH:mm:ss') | ||||||
|  |  | ||||||
|  | 			/** [1] 获取上下片数据 */ | ||||||
|  | 			this.fetchList('sx', startTime, endTime).then(({ data: res }) => { | ||||||
|  | 				// console.log('sx: ', res) | ||||||
|  | 				this.dataListStatic = res.data || [] | ||||||
|  | 			}) | ||||||
|  | 			/** [2] 获取产线检测类型 */ | ||||||
|  | 			this.fetchList('pl', startTime, endTime).then(({ data: res }) => { | ||||||
|  | 				// console.log('pl: ', res) | ||||||
|  | 				/** TODO: 解析 nameData */ | ||||||
|  | 				this.parseTableProps(res.data.nameData) | ||||||
|  |  | ||||||
|  | 				this.dataListDynamic = this.parseDynamicData(res.data.data) || [] | ||||||
|  |  | ||||||
|  | 				this.buildGraphData() | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		parseTableProps(nameData) { | ||||||
|  | 			const subProps = [] | ||||||
|  | 			const labelNameMap = new Map() | ||||||
|  |  | ||||||
|  | 			if (nameData.length) { | ||||||
|  | 				/** 处理 nameData */ | ||||||
|  | 				nameData.forEach(item => { | ||||||
|  | 					if (!labelNameMap.get(item.name)) { | ||||||
|  | 						labelNameMap.set(item.name, 1) | ||||||
|  | 						subProps.push({ name: item.name, prop: item.name }) | ||||||
|  | 					} | ||||||
|  | 				}) | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			this.tableConfigDynamic = [ | ||||||
|  | 				{ type: 'index', width: 100, name: i18n.t('index') }, | ||||||
|  | 				{ name: i18n.t('inspect.det'), prop: 'inspectionContent' }, | ||||||
|  | 				...subProps, | ||||||
|  | 				{ name: i18n.t('inspect.typetotal'), prop: 'sumInput' }, | ||||||
|  | 				{ name: i18n.t('inspect.rate'), prop: 'scrapRatio', filter: val => (val || val === 0 ? `${val}%` : '-') } | ||||||
|  | 			] | ||||||
|  |  | ||||||
|  | 			/** echarts related */ | ||||||
|  | 			this.echartCategories = subProps.map(item => item.name) | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		parseDynamicData(data) { | ||||||
|  | 			this.echartCheckTypes.splice(0) | ||||||
|  | 			return data.map(item => { | ||||||
|  | 				/** echarts related */ | ||||||
|  | 				this.echartCheckTypes.push(item.inspectionContent) | ||||||
|  | 				if (item.data.length) { | ||||||
|  | 					/** 解析子数组 */ | ||||||
|  | 					item.data.forEach(subitem => { | ||||||
|  | 						item[subitem.dynamicName] = subitem.dynamicValue | ||||||
|  | 					}) | ||||||
|  | 				} | ||||||
|  | 				return item | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		buildGraphData() { | ||||||
|  | 			/** 构造 echart 需要的数据 */ | ||||||
|  | 			const result = [] | ||||||
|  |  | ||||||
|  | 			this.echartCheckTypes.forEach(ect => { | ||||||
|  | 				result.push({ name: ect, type: 'bar', data: [] }) | ||||||
|  | 			}) | ||||||
|  |  | ||||||
|  | 			this.dataListDynamic.forEach((inspection, index) => { | ||||||
|  | 				console.log('inspection: ', inspection) | ||||||
|  | 				this.echartCategories.forEach(cate => { | ||||||
|  | 					if (cate in inspection) { | ||||||
|  | 						result[index].data.push(inspection[cate]) | ||||||
|  | 					} else { | ||||||
|  | 						result[index].data.push('0') | ||||||
|  | 					} | ||||||
|  | 				}) | ||||||
|  | 			}) | ||||||
|  |  | ||||||
|  | 			this.echartsData = result | ||||||
|  | 			// [ | ||||||
|  | 			// 	{ name: '11', type: 'bar', data: [/**产线1*/ 2, /**产线2*/ 3] }, | ||||||
|  | 			// 	{ name: '222', type: 'bar', data: [1, 2, 3] } | ||||||
|  | 			// ] | ||||||
|  |  | ||||||
|  | 			console.log('echarts data: ', this.echartsData) | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		fetchList(type, startTime, endTime) { | ||||||
|  | 			switch (type) { | ||||||
|  | 				case 'sx': | ||||||
|  | 					return this.$http({ | ||||||
|  | 						url: this.$http.adornUrl('/monitoring/qualityInspectionRecord/pageCountRecordNow'), | ||||||
|  | 						method: 'POST', | ||||||
|  | 						data: { | ||||||
|  | 							startTime, | ||||||
|  | 							endTime | ||||||
|  | 						} | ||||||
|  | 					}).catch(err => { | ||||||
|  | 						console.error(err) | ||||||
|  | 					}) | ||||||
|  | 				case 'pl': | ||||||
|  | 					return this.$http({ | ||||||
|  | 						url: this.$http.adornUrl('/monitoring/qualityInspectionRecord/qualityInspectionRecordsDet'), | ||||||
|  | 						method: 'POST', | ||||||
|  | 						data: { | ||||||
|  | 							startTime, | ||||||
|  | 							endTime | ||||||
|  | 						} | ||||||
|  | 					}).catch(err => { | ||||||
|  | 						console.error(err) | ||||||
|  | 					}) | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style scoped> | ||||||
|  | .base-container { | ||||||
|  | 	min-height: 60vh; | ||||||
|  | 	background: #fff; | ||||||
|  | 	padding: 12px; | ||||||
|  | } | ||||||
|  | </style> | ||||||
							
								
								
									
										209
									
								
								src/views/modules/monitoring/qualityInspectionDet.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										209
									
								
								src/views/modules/monitoring/qualityInspectionDet.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,209 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="mod-config"> | ||||||
|  | 		<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)"> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-input v-model="dataForm.key" :placeholder="$t('inspect.det')" clearable></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-button @click="currentChangeHandle(1)">{{ $t('query') }}</el-button> | ||||||
|  | 				<el-button v-if="$hasPermission('monitoring:qualityinspectiondet:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  |  | ||||||
|  | 		<base-table :page="pageIndex" :size="pageSize" :data="dataList" :table-head-configs="tableConfigs" :max-height="calcMaxHeight(8)" @operate-event="handleOperations" @refreshDataList="getDataList" /> | ||||||
|  | 		<el-pagination | ||||||
|  | 			@size-change="sizeChangeHandle" | ||||||
|  | 			@current-change="currentChangeHandle" | ||||||
|  | 			:current-page="pageIndex" | ||||||
|  | 			:page-sizes="[10, 20, 50, 100]" | ||||||
|  | 			:page-size="pageSize" | ||||||
|  | 			:total="totalPage" | ||||||
|  | 			layout="total, sizes, prev, pager, next, jumper" | ||||||
|  | 		> | ||||||
|  | 		</el-pagination> | ||||||
|  | 		<!-- 弹窗, 新增 / 修改 --> | ||||||
|  | 		<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" :configs="addOrUpdateConfigs" @refreshDataList="getDataList" @destory-dialog="handleDestroyDialog" /> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { calcMaxHeight } from '@/utils' | ||||||
|  | import { timeFilter } from '@/utils/filters' | ||||||
|  | import AddOrUpdate from '@/components/base-dialog/addOrUpdate' | ||||||
|  | // import AddOrUpdate from './qualityInspectionDet-add-or-update' | ||||||
|  | import i18n from '@/i18n' | ||||||
|  | import BaseTable from '@/components/base-table' | ||||||
|  | import TableOperateComponent from '@/components/base-table/components/operationComponent' | ||||||
|  | // import TableTextComponent from '@/components/base-table/components/detailComponent' | ||||||
|  |  | ||||||
|  | const tableConfigs = [ | ||||||
|  | 	{ | ||||||
|  | 		type: 'index', | ||||||
|  | 		name: i18n.t('index') | ||||||
|  | 	}, | ||||||
|  | 	{ prop: 'createTime', name: i18n.t('createTime'), filter: timeFilter }, | ||||||
|  | 	{ prop: 'typeName', name: i18n.t('inspect.type') }, | ||||||
|  | 	{ prop: 'content', name: i18n.t('inspect.det') }, | ||||||
|  | 	{ prop: 'code', name: i18n.t('inspect.code') }, | ||||||
|  | 	{ prop: 'remark', name: i18n.t('remark') }, | ||||||
|  | 	{ prop: 'operations', name: i18n.t('handle'), fixed: 'right', width: 180, subcomponent: TableOperateComponent, options: ['edit', 'delete'] } | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | const addOrUpdateConfigs = { | ||||||
|  | 	type: 'dialog', | ||||||
|  | 	infoUrl: '/monitoring/qualityInspectionDet', | ||||||
|  | 	fields: [ | ||||||
|  | 		{ name: 'typeId', label: i18n.t('inspect.type'), required: true, type: 'select', options: [] }, | ||||||
|  | 		{ name: 'content', label: i18n.t('inspect.det'), required: true }, | ||||||
|  | 		{ name: 'code', label: i18n.t('inspect.code'), api: '/monitoring/qualityInspectionDet/getCode' }, | ||||||
|  | 		'remark' | ||||||
|  | 	], | ||||||
|  | 	operations: [ | ||||||
|  | 		{ name: 'cancel', showAlways: true }, | ||||||
|  | 		{ name: 'save', url: '/monitoring/qualityInspectionDet', permission: 'monitoring:qualityinspectiondet:save', showOnEdit: false }, | ||||||
|  | 		{ name: 'update', url: '/monitoring/qualityInspectionDet', permission: 'monitoring:qualityinspectiondet:update', showOnEdit: true } | ||||||
|  | 	] | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			calcMaxHeight, | ||||||
|  | 			addOrUpdateConfigs, | ||||||
|  | 			tableConfigs, | ||||||
|  | 			dataForm: { | ||||||
|  | 				key: '' | ||||||
|  | 			}, | ||||||
|  | 			dataList: [], | ||||||
|  | 			pageIndex: 1, | ||||||
|  | 			pageSize: 10, | ||||||
|  | 			totalPage: 0, | ||||||
|  | 			dataListLoading: false, | ||||||
|  | 			dataListSelections: [], | ||||||
|  | 			addOrUpdateVisible: false | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	components: { | ||||||
|  | 		AddOrUpdate, | ||||||
|  | 		BaseTable | ||||||
|  | 	}, | ||||||
|  | 	activated() { | ||||||
|  | 		this.getInspectionTypeList() | ||||||
|  | 		this.getDataList() | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		// destroy dialog | ||||||
|  | 		handleDestroyDialog() { | ||||||
|  | 			setTimeout(() => { | ||||||
|  | 				this.addOrUpdateVisible= false | ||||||
|  | 			}, /** after dialog animated */ 200); | ||||||
|  | 		}, | ||||||
|  | 		// 获取产检测类型列表 | ||||||
|  | 		getInspectionTypeList() { | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/qualityInspectionType/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams({ | ||||||
|  | 					limit: 999, | ||||||
|  | 					page: 1 | ||||||
|  | 				}) | ||||||
|  | 			}).then(({ data: res }) => { | ||||||
|  | 				if (res && res.code === 0) { | ||||||
|  | 					this.addOrUpdateConfigs.fields.forEach(item => { | ||||||
|  | 						if (item.name === 'typeId') item.options = res.data.list.map(item => ({ label: item.name, value: item.id })) | ||||||
|  | 					}) | ||||||
|  | 				} else { | ||||||
|  | 					this.addOrUpdateConfigs.fields.forEach(item => { | ||||||
|  | 						if (item.name === 'typeId') item.options.splice(0) | ||||||
|  | 					}) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 获取数据列表 | ||||||
|  | 		getDataList() { | ||||||
|  | 			this.addOrUpdateVisible = false | ||||||
|  | 			this.dataListLoading = true | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/qualityInspectionDet/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams({ | ||||||
|  | 					page: this.pageIndex, | ||||||
|  | 					limit: this.pageSize, | ||||||
|  | 					key: this.dataForm.key | ||||||
|  | 				}) | ||||||
|  | 			}).then(({ data }) => { | ||||||
|  | 				if (data && data.code === 0) { | ||||||
|  | 					this.dataList = data.data.list | ||||||
|  | 					this.totalPage = data.data.total | ||||||
|  | 				} else { | ||||||
|  | 					this.dataList = [] | ||||||
|  | 					this.totalPage = 0 | ||||||
|  | 				} | ||||||
|  | 				this.dataListLoading = false | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 每页数 | ||||||
|  | 		sizeChangeHandle(val) { | ||||||
|  | 			this.pageSize = val | ||||||
|  | 			this.pageIndex = 1 | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 当前页 | ||||||
|  | 		currentChangeHandle(val) { | ||||||
|  | 			this.pageIndex = val | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 多选 | ||||||
|  | 		selectionChangeHandle(val) { | ||||||
|  | 			this.dataListSelections = val | ||||||
|  | 		}, | ||||||
|  | 		handleOperations({ type, data: id }) { | ||||||
|  | 			switch (type) { | ||||||
|  | 				case 'edit': | ||||||
|  | 					return this.addOrUpdateHandle(id) | ||||||
|  | 				case 'delete': | ||||||
|  | 					return this.deleteHandle(id) | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		// 新增 / 修改 | ||||||
|  | 		addOrUpdateHandle(id) { | ||||||
|  | 			this.addOrUpdateVisible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs.addOrUpdate.init(id) | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 删除 | ||||||
|  | 		deleteHandle(id) { | ||||||
|  | 			var ids = id | ||||||
|  | 				? [id] | ||||||
|  | 				: this.dataListSelections.map(item => { | ||||||
|  | 						return item.id | ||||||
|  | 				  }) | ||||||
|  | 			this.$confirm(`${i18n.t('prompt.info', { handle: id ? i18n.t('delete').toLowerCase() : i18n.t('deleteBatch').toLowerCase() })}`, i18n.t('prompt.title'), { | ||||||
|  | 				confirmButtonText: i18n.t('confirm'), | ||||||
|  | 				cancelButtonText: i18n.t('cancel'), | ||||||
|  | 				type: 'warning' | ||||||
|  | 			}).then(() => { | ||||||
|  | 				this.$http({ | ||||||
|  | 					url: this.$http.adornUrl('/monitoring/qualityInspectionDet'), | ||||||
|  | 					method: 'delete', | ||||||
|  | 					data: this.$http.adornData(ids, false, 'raw') | ||||||
|  | 				}).then(({ data }) => { | ||||||
|  | 					if (data && data.code === 0) { | ||||||
|  | 						this.$message({ | ||||||
|  | 							message: i18n.t('prompt.success'), | ||||||
|  | 							type: 'success', | ||||||
|  | 							duration: 1500, | ||||||
|  | 							onClose: () => { | ||||||
|  | 								this.getDataList() | ||||||
|  | 							} | ||||||
|  | 						}) | ||||||
|  | 					} else { | ||||||
|  | 						this.$message.error(data.msg) | ||||||
|  | 					} | ||||||
|  | 				}) | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										308
									
								
								src/views/modules/monitoring/qualityInspectionRecord.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										308
									
								
								src/views/modules/monitoring/qualityInspectionRecord.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,308 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="mod-config"> | ||||||
|  | 		<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)"> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-select v-model="dataForm.lineId" :placeholder="$t('pl.title')" clearable filterable> | ||||||
|  | 					<el-option v-for="pl in plList" :key="pl.value" :value="pl.value" :label="pl.label" /> | ||||||
|  | 				</el-select> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-input v-model="dataForm.key" :placeholder="$t('inspect.det')" clearable></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-button @click="currentChangeHandle(1)">{{ $t('query') }}</el-button> | ||||||
|  | 				<el-button v-if="$hasPermission('monitoring:qualityinspectionrecord:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  |  | ||||||
|  | 		<base-table | ||||||
|  | 			:page="pageIndex" | ||||||
|  | 			:size="pageSize" | ||||||
|  | 			:data="dataList" | ||||||
|  | 			:table-head-configs="tableConfigs" | ||||||
|  | 			:max-height="calcMaxHeight(8)" | ||||||
|  | 			@operate-event="handleOperations" | ||||||
|  | 			@refreshDataList="getDataList" | ||||||
|  | 		/> | ||||||
|  |  | ||||||
|  | 		<el-pagination | ||||||
|  | 			@size-change="sizeChangeHandle" | ||||||
|  | 			@current-change="currentChangeHandle" | ||||||
|  | 			:current-page="pageIndex" | ||||||
|  | 			:page-sizes="[10, 20, 50, 100]" | ||||||
|  | 			:page-size="pageSize" | ||||||
|  | 			:total="totalPage" | ||||||
|  | 			layout="total, sizes, prev, pager, next, jumper" | ||||||
|  | 		> | ||||||
|  | 		</el-pagination> | ||||||
|  |  | ||||||
|  | 		<!-- 弹窗, 新增 / 修改 --> | ||||||
|  | 		<add-or-update | ||||||
|  | 			v-if="addOrUpdateVisible" | ||||||
|  | 			ref="addOrUpdate" | ||||||
|  | 			:configs="addOrUpdateConfigs" | ||||||
|  | 			@refreshDataList="getDataList" | ||||||
|  | 			@destory-dialog="handleDestroyDialog" | ||||||
|  | 			@select-change="handleSelectChange" | ||||||
|  | 		/> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { calcMaxHeight } from '@/utils' | ||||||
|  | import { timeFilter } from '@/utils/filters' | ||||||
|  | import AddOrUpdate from '@/components/base-dialog/addOrUpdate' | ||||||
|  | // import AddOrUpdate from './qualityInspectionRecord-add-or-update' | ||||||
|  | import i18n from '@/i18n' | ||||||
|  | import BaseTable from '@/components/base-table' | ||||||
|  | import TableOperateComponent from '@/components/base-table/components/operationComponent' | ||||||
|  | // import TableTextComponent from '@/components/base-table/components/detailComponent' | ||||||
|  |  | ||||||
|  | const tableConfigs = [ | ||||||
|  | 	{ | ||||||
|  | 		type: 'index', | ||||||
|  | 		name: i18n.t('index') | ||||||
|  | 	}, | ||||||
|  | 	{ prop: 'createTime', name: i18n.t('createTime'), filter: timeFilter }, | ||||||
|  | 	{ | ||||||
|  | 		prop: 'inspectionDetContent', | ||||||
|  | 		name: i18n.t('inspect.det') | ||||||
|  | 	}, | ||||||
|  | 	{ prop: 'checkTime', name: i18n.t('inspect.time'), filter: timeFilter }, | ||||||
|  | 	{ prop: 'productionName', name: i18n.t('pl.title') }, | ||||||
|  | 	{ prop: 'sectionName', name: i18n.t('ws.title') }, | ||||||
|  | 	// { prop: 'productionId', name: i18n.t('pl.id') }, | ||||||
|  | 	// { prop: 'sectionId', name: i18n.t('ws.id') }, | ||||||
|  | 	{ prop: 'checkPerson', name: i18n.t('inspect.people') }, | ||||||
|  | 	{ prop: 'source', name: i18n.t('source'), filter: val => ({ 1: i18n.t('manual'), 2: i18n.t('auto') }[val]) }, | ||||||
|  | 	{ prop: 'explainText', name: i18n.t('desc') }, | ||||||
|  | 	{ prop: 'remark', name: i18n.t('remark') }, | ||||||
|  | 	{ prop: 'operations', name: i18n.t('handle'), fixed: 'right', width: 180, subcomponent: TableOperateComponent, options: ['edit', 'delete'] } | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | const addOrUpdateConfigs = { | ||||||
|  | 	type: 'dialog', | ||||||
|  | 	infoUrl: '/monitoring/qualityInspectionRecord', | ||||||
|  | 	fields: [ | ||||||
|  | 		{ name: 'checkTime', required: true, label: i18n.t('inspect.time'), type: 'date', props: { style: 'width: 100%', type: 'datetime' }, placeholder: i18n.t('hints.checktime') }, | ||||||
|  | 		{ name: 'productionId', required: true, label: i18n.t('pl.title'), type: 'select', options: [] }, | ||||||
|  | 		{ name: 'sectionId', required: true, label: i18n.t('ws.title'), type: 'select', options: [] }, | ||||||
|  | 		{ | ||||||
|  | 			name: 'source', | ||||||
|  | 			label: i18n.t('source'), | ||||||
|  | 			type: 'select', | ||||||
|  | 			options: [ | ||||||
|  | 				{ value: 1, label: i18n.t('manual'), default: true }, | ||||||
|  | 				{ value: 2, label: i18n.t('auto') } | ||||||
|  | 			] | ||||||
|  | 		}, | ||||||
|  | 		{ name: 'inspectionDetId', required: true, label: i18n.t('inspect.det'), type: 'select', options: [] }, | ||||||
|  | 		{ name: 'checkPerson', label: i18n.t('inspect.people') }, | ||||||
|  | 		{ name: 'explainText', label: i18n.t('desc') }, | ||||||
|  | 		'remark' | ||||||
|  | 	], | ||||||
|  | 	operations: [ | ||||||
|  | 		{ name: 'cancel', showAlways: true }, | ||||||
|  | 		{ name: 'save', url: '/monitoring/qualityInspectionRecord', permission: 'monitoring:qualityinspectionrecord:save', showOnEdit: false }, | ||||||
|  | 		{ name: 'update', url: '/monitoring/qualityInspectionRecord', permission: 'monitoring:qualityinspectionrecord:update', showOnEdit: true } | ||||||
|  | 	] | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			calcMaxHeight, | ||||||
|  | 			addOrUpdateConfigs, | ||||||
|  | 			tableConfigs, | ||||||
|  | 			dataForm: { | ||||||
|  | 				key: '', | ||||||
|  | 				lineId: '' | ||||||
|  | 			}, | ||||||
|  | 			plList: [], | ||||||
|  | 			dataList: [], | ||||||
|  | 			pageIndex: 1, | ||||||
|  | 			pageSize: 10, | ||||||
|  | 			totalPage: 0, | ||||||
|  | 			dataListLoading: false, | ||||||
|  | 			dataListSelections: [], | ||||||
|  | 			addOrUpdateVisible: false | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	components: { | ||||||
|  | 		AddOrUpdate, | ||||||
|  | 		BaseTable | ||||||
|  | 	}, | ||||||
|  | 	activated() { | ||||||
|  | 		this.getDataList() | ||||||
|  | 		this.getInspectionDet() | ||||||
|  | 		this.getWorkSections() | ||||||
|  | 		this.getProductLines() | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		// destroy dialog | ||||||
|  | 		handleDestroyDialog() { | ||||||
|  | 			setTimeout(() => { | ||||||
|  | 				this.addOrUpdateVisible = false | ||||||
|  | 			}, /** after dialog animated */ 200) | ||||||
|  | 		}, | ||||||
|  | 		// handle | ||||||
|  | 		async handleSelectChange({ name, id }) { | ||||||
|  | 			if (name === 'productionId') { | ||||||
|  | 				// 如果选择了产线,就依据此更新工单的选项 | ||||||
|  | 				await this.getWorkSections(id) | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		// 获取检测内容 | ||||||
|  | 		getInspectionDet() { | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/qualityInspectionDet/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams({ | ||||||
|  | 					page: this.pageIndex, | ||||||
|  | 					limit: this.pageSize, | ||||||
|  | 					key: this.dataForm.key | ||||||
|  | 				}) | ||||||
|  | 			}).then(({ data: res }) => { | ||||||
|  | 				console.log('insdet:', res) | ||||||
|  | 				const insDetOpt = this.addOrUpdateConfigs.fields.find(item => item.name === 'inspectionDetId') | ||||||
|  | 				if (insDetOpt) { | ||||||
|  | 					insDetOpt.options = res.data.list.map(item => ({ value: item.id, label: item.content })) || [] | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 获取产线 | ||||||
|  | 		getProductLines() { | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/productionLine/list'), | ||||||
|  | 				method: 'get' | ||||||
|  | 			}).then(({ data: res }) => { | ||||||
|  | 				const plOpt = this.addOrUpdateConfigs.fields.find(item => item.name === 'productionId') | ||||||
|  | 				if (plOpt) { | ||||||
|  | 					plOpt.options = res.data.map(item => ({ value: item.id, label: item.name })) || [] | ||||||
|  | 				} | ||||||
|  | 				this.plList = res.data.map(item => ({ value: item.id, label: item.name })) || [] | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 获取工段 | ||||||
|  | 		getWorkSections(lineId) { | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/workshopSection/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: lineId | ||||||
|  | 					? this.$http.adornParams({ | ||||||
|  | 							// page: this.pageIndex, | ||||||
|  | 							// limit: this.pageSize, | ||||||
|  | 							// key: this.dataForm.key | ||||||
|  | 							lineId | ||||||
|  | 					  }) | ||||||
|  | 					: {} | ||||||
|  | 			}).then(({ data: res }) => { | ||||||
|  | 				if (this.addOrUpdateVisible) { | ||||||
|  | 					if (res.data.total === 0) { | ||||||
|  | 						this.$message.error(i18n.t('errors.nosection')) | ||||||
|  | 					} else { | ||||||
|  | 						this.$message.success(i18n.t('errors.numsection', { num: res.data.total })) | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 				const wsOpt = this.addOrUpdateConfigs.fields.find(item => item.name === 'sectionId') | ||||||
|  | 				if (wsOpt) { | ||||||
|  | 					wsOpt.options = res.data.list.map(item => ({ value: item.id, label: item.name })) || [] | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 获取数据列表 | ||||||
|  | 		getDataList() { | ||||||
|  | 			this.addOrUpdateVisible = false | ||||||
|  | 			this.dataListLoading = true | ||||||
|  |  | ||||||
|  | 			const queryParams = { | ||||||
|  | 				page: this.pageIndex, | ||||||
|  | 				limit: this.pageSize | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			if (this.dataForm.key) { | ||||||
|  | 				queryParams['key'] = this.dataForm.key | ||||||
|  | 			} | ||||||
|  | 			if (this.dataForm.lineId) { | ||||||
|  | 				queryParams['lineId'] = this.dataForm.lineId | ||||||
|  | 			} | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/qualityInspectionRecord/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams(queryParams) | ||||||
|  | 			}).then(({ data }) => { | ||||||
|  | 				if (data && data.code === 0) { | ||||||
|  | 					this.dataList = data.data.list | ||||||
|  | 					this.totalPage = data.data.total | ||||||
|  | 				} else { | ||||||
|  | 					this.dataList = [] | ||||||
|  | 					this.totalPage = 0 | ||||||
|  | 				} | ||||||
|  | 				this.dataListLoading = false | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 每页数 | ||||||
|  | 		sizeChangeHandle(val) { | ||||||
|  | 			this.pageSize = val | ||||||
|  | 			this.pageIndex = 1 | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 当前页 | ||||||
|  | 		currentChangeHandle(val) { | ||||||
|  | 			this.pageIndex = val | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 多选 | ||||||
|  | 		selectionChangeHandle(val) { | ||||||
|  | 			this.dataListSelections = val | ||||||
|  | 		}, | ||||||
|  | 		handleOperations({ type, data: id }) { | ||||||
|  | 			switch (type) { | ||||||
|  | 				case 'edit': | ||||||
|  | 					return this.addOrUpdateHandle(id) | ||||||
|  | 				case 'delete': | ||||||
|  | 					return this.deleteHandle(id) | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		// 新增 / 修改 | ||||||
|  | 		addOrUpdateHandle(id) { | ||||||
|  | 			this.addOrUpdateVisible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs.addOrUpdate.init(id) | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 删除 | ||||||
|  | 		deleteHandle(id) { | ||||||
|  | 			var ids = id | ||||||
|  | 				? [id] | ||||||
|  | 				: this.dataListSelections.map(item => { | ||||||
|  | 						return item.id | ||||||
|  | 				  }) | ||||||
|  | 			this.$confirm(`${i18n.t('prompt.info', { handle: id ? i18n.t('delete').toLowerCase() : i18n.t('deleteBatch').toLowerCase() })}`, i18n.t('prompt.title'), { | ||||||
|  | 				confirmButtonText: i18n.t('confirm'), | ||||||
|  | 				cancelButtonText: i18n.t('cancel'), | ||||||
|  | 				type: 'warning' | ||||||
|  | 			}).then(() => { | ||||||
|  | 				this.$http({ | ||||||
|  | 					url: this.$http.adornUrl('/monitoring/qualityInspectionRecord'), | ||||||
|  | 					method: 'delete', | ||||||
|  | 					data: this.$http.adornData(ids, false, 'raw') | ||||||
|  | 				}).then(({ data }) => { | ||||||
|  | 					if (data && data.code === 0) { | ||||||
|  | 						this.$message({ | ||||||
|  | 							message: i18n.t('prompt.success'), | ||||||
|  | 							type: 'success', | ||||||
|  | 							duration: 1500, | ||||||
|  | 							onClose: () => { | ||||||
|  | 								this.getDataList() | ||||||
|  | 							} | ||||||
|  | 						}) | ||||||
|  | 					} else { | ||||||
|  | 						this.$message.error(data.msg) | ||||||
|  | 					} | ||||||
|  | 				}) | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										192
									
								
								src/views/modules/monitoring/qualityInspectionType.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										192
									
								
								src/views/modules/monitoring/qualityInspectionType.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,192 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="mod-config"> | ||||||
|  | 		<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)"> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-input v-model="dataForm.key" :placeholder="$t('inspect.typename')" clearable></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-button @click="currentChangeHandle(1)">{{ $t('query') }}</el-button> | ||||||
|  | 				<el-button v-if="$hasPermission('monitoring:qualityinspectiontype:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  |  | ||||||
|  | 		<base-table | ||||||
|  | 			:page="pageIndex" | ||||||
|  | 			:size="pageSize" | ||||||
|  | 			:data="dataList" | ||||||
|  | 			:table-head-configs="tableConfigs" | ||||||
|  | 			:max-height="calcMaxHeight(8)" | ||||||
|  | 			@operate-event="handleOperations" | ||||||
|  | 			@refreshDataList="getDataList" | ||||||
|  | 		/> | ||||||
|  | 		<el-pagination | ||||||
|  | 			@size-change="sizeChangeHandle" | ||||||
|  | 			@current-change="currentChangeHandle" | ||||||
|  | 			:current-page="pageIndex" | ||||||
|  | 			:page-sizes="[10, 20, 50, 100]" | ||||||
|  | 			:page-size="pageSize" | ||||||
|  | 			:total="totalPage" | ||||||
|  | 			layout="total, sizes, prev, pager, next, jumper" | ||||||
|  | 		> | ||||||
|  | 		</el-pagination> | ||||||
|  | 		<!-- 弹窗, 新增 / 修改 --> | ||||||
|  | 		<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" :configs="addOrUpdateConfigs" @refreshDataList="getDataList" @destory-dialog="handleDestroyDialog" /> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import AddOrUpdate from '@/components/base-dialog/addOrUpdate' | ||||||
|  | // import AddOrUpdate from './qualityInspectionType-add-or-update' | ||||||
|  | import i18n from '@/i18n' | ||||||
|  | import BaseTable from '@/components/base-table' | ||||||
|  | import TableOperateComponent from '@/components/base-table/components/operationComponent' | ||||||
|  | // import TableTextComponent from '@/components/base-table/components/detailComponent' | ||||||
|  | import { calcMaxHeight } from '@/utils' | ||||||
|  | import { timeFilter } from '@/utils/filters' | ||||||
|  | const tableConfigs = [ | ||||||
|  | 	{ | ||||||
|  | 		type: 'index', | ||||||
|  | 		name: i18n.t('index') | ||||||
|  | 	}, | ||||||
|  | 	{ prop: 'createTime', name: i18n.t('createTime'), filter: timeFilter }, | ||||||
|  | 	{ prop: 'name', name: i18n.t('inspect.typename') }, | ||||||
|  | 	{ prop: 'code', name: i18n.t('inspect.typecode') }, | ||||||
|  | 	{ prop: 'remark', name: i18n.t('remark') }, | ||||||
|  | 	{ prop: 'operations', name: i18n.t('handle'), fixed: 'right', width: 180, subcomponent: TableOperateComponent, options: ['edit', 'delete'] } | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | const addOrUpdateConfigs = { | ||||||
|  | 	type: 'dialog', | ||||||
|  | 	infoUrl: '/monitoring/qualityInspectionType', | ||||||
|  | 	fields: [ | ||||||
|  | 		{ name: 'name', label: i18n.t('inspect.type'), required: true }, | ||||||
|  | 		{ name: 'code', label: i18n.t('inspect.typecode'), api: '/monitoring/qualityInspectionType/getCode' }, | ||||||
|  | 		'remark' | ||||||
|  | 	], | ||||||
|  | 	operations: [ | ||||||
|  | 		{ name: 'cancel', showAlways: true }, | ||||||
|  | 		{ name: 'save', url: '/monitoring/qualityInspectionType', permission: 'monitoring:qualityinspectiontype:save', showOnEdit: false }, | ||||||
|  | 		{ name: 'update', url: '/monitoring/qualityInspectionType', permission: 'monitoring:qualityinspectiontype:update', showOnEdit: true } | ||||||
|  | 	] | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			calcMaxHeight, | ||||||
|  | 			addOrUpdateConfigs, | ||||||
|  | 			tableConfigs, | ||||||
|  | 			dataForm: { | ||||||
|  | 				key: '' | ||||||
|  | 			}, | ||||||
|  | 			dataList: [], | ||||||
|  | 			pageIndex: 1, | ||||||
|  | 			pageSize: 10, | ||||||
|  | 			totalPage: 0, | ||||||
|  | 			dataListLoading: false, | ||||||
|  | 			dataListSelections: [], | ||||||
|  | 			addOrUpdateVisible: false | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	components: { | ||||||
|  | 		AddOrUpdate, | ||||||
|  | 		BaseTable | ||||||
|  | 	}, | ||||||
|  | 	activated() { | ||||||
|  | 		this.getDataList() | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		// destroy dialog | ||||||
|  | 		handleDestroyDialog() { | ||||||
|  | 			setTimeout(() => { | ||||||
|  | 				this.addOrUpdateVisible = false | ||||||
|  | 			}, /** after dialog animated */ 200) | ||||||
|  | 		}, | ||||||
|  | 		// 获取数据列表 | ||||||
|  | 		getDataList() { | ||||||
|  | 			this.addOrUpdateVisible = false | ||||||
|  | 			this.dataListLoading = true | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/qualityInspectionType/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams({ | ||||||
|  | 					page: this.pageIndex, | ||||||
|  | 					limit: this.pageSize, | ||||||
|  | 					key: this.dataForm.key | ||||||
|  | 				}) | ||||||
|  | 			}).then(({ data }) => { | ||||||
|  | 				if (data && data.code === 0) { | ||||||
|  | 					this.dataList = data.data.list | ||||||
|  | 					this.totalPage = data.data.total | ||||||
|  | 				} else { | ||||||
|  | 					this.dataList = [] | ||||||
|  | 					this.totalPage = 0 | ||||||
|  | 				} | ||||||
|  | 				this.dataListLoading = false | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 每页数 | ||||||
|  | 		sizeChangeHandle(val) { | ||||||
|  | 			this.pageSize = val | ||||||
|  | 			this.pageIndex = 1 | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 当前页 | ||||||
|  | 		currentChangeHandle(val) { | ||||||
|  | 			this.pageIndex = val | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 多选 | ||||||
|  | 		selectionChangeHandle(val) { | ||||||
|  | 			this.dataListSelections = val | ||||||
|  | 		}, | ||||||
|  | 		handleOperations({ type, data: id }) { | ||||||
|  | 			switch (type) { | ||||||
|  | 				case 'edit': | ||||||
|  | 					return this.addOrUpdateHandle(id) | ||||||
|  | 				case 'delete': | ||||||
|  | 					return this.deleteHandle(id) | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		// 新增 / 修改 | ||||||
|  | 		addOrUpdateHandle(id) { | ||||||
|  | 			this.addOrUpdateVisible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs.addOrUpdate.init(id) | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 删除 | ||||||
|  | 		deleteHandle(id) { | ||||||
|  | 			var ids = id | ||||||
|  | 				? [id] | ||||||
|  | 				: this.dataListSelections.map(item => { | ||||||
|  | 						return item.id | ||||||
|  | 				  }) | ||||||
|  | 			this.$confirm(`${i18n.t('prompt.info', { handle: id ? i18n.t('delete').toLowerCase() : i18n.t('deleteBatch').toLowerCase() })}`, i18n.t('prompt.title'), { | ||||||
|  | 				confirmButtonText: i18n.t('confirm'), | ||||||
|  | 				cancelButtonText: i18n.t('cancel'), | ||||||
|  | 				type: 'warning' | ||||||
|  | 			}).then(() => { | ||||||
|  | 				this.$http({ | ||||||
|  | 					url: this.$http.adornUrl('/monitoring/qualityInspectionType'), | ||||||
|  | 					method: 'delete', | ||||||
|  | 					data: this.$http.adornData(ids, false, 'raw') | ||||||
|  | 				}).then(({ data }) => { | ||||||
|  | 					if (data && data.code === 0) { | ||||||
|  | 						this.$message({ | ||||||
|  | 							message: i18n.t('prompt.success'), | ||||||
|  | 							type: 'success', | ||||||
|  | 							duration: 1500, | ||||||
|  | 							onClose: () => { | ||||||
|  | 								this.getDataList() | ||||||
|  | 							} | ||||||
|  | 						}) | ||||||
|  | 					} else { | ||||||
|  | 						this.$message.error(data.msg) | ||||||
|  | 					} | ||||||
|  | 				}) | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										208
									
								
								src/views/modules/monitoring/realtimeEquipment.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										208
									
								
								src/views/modules/monitoring/realtimeEquipment.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,208 @@ | |||||||
|  | <!-- | ||||||
|  |  * @Author: lb | ||||||
|  |  * @Date: 2022-06-22 14:00:17 | ||||||
|  |  * @LastEditors: lb | ||||||
|  |  * @LastEditTime: 2022-06-22 14:00:17 | ||||||
|  |  * @Description: 设备生产实时数据 | ||||||
|  | --> | ||||||
|  | <template> | ||||||
|  | 	<div> | ||||||
|  | 		<div class="app-container"> | ||||||
|  | 			<small-title :size="'md'">{{ $t('realtime.eq') }}</small-title> | ||||||
|  | 			<base-table v-if="loadTable" :table-head-configs="tableProps" :data="tableData.length ? tableData : []" :span-method="spanMethod" /> | ||||||
|  | 		</div> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import i18n from '@/i18n' | ||||||
|  | import BaseTable from '@/components/base-table' | ||||||
|  | import SmallTitle from '@/components/small-title' | ||||||
|  | import moment from 'moment' | ||||||
|  | import { calcMaxHeight } from '@/utils' | ||||||
|  | import { timeFilter } from '@/utils/filters' | ||||||
|  | export default { | ||||||
|  | 	name: 'RealtimeDataOfEquipment', | ||||||
|  | 	components: { BaseTable, SmallTitle }, | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			calcMaxHeight, | ||||||
|  | 			loadTable: false, | ||||||
|  | 			tableProps: [{ label: 'default', prop: 'default' }], | ||||||
|  | 			stepOneArray: [], | ||||||
|  | 			tableData: [], | ||||||
|  | 			testData: null, | ||||||
|  | 			equipmentCount: {}, // 每个产线的设备数量记录 | ||||||
|  | 			dynamicPropSet: false, // 是否设置过动态prop | ||||||
|  | 			listLoading: false, | ||||||
|  | 			rowNum: 0, | ||||||
|  | 			intervalId: null | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	created() { | ||||||
|  | 		this.clearData() | ||||||
|  | 		this.fetchList().then(({ data: res }) => { | ||||||
|  | 			this.testData = res.data.filter(item => !!item.equDet) | ||||||
|  | 			this.handleData() | ||||||
|  | 		}) | ||||||
|  | 		this.intervalId = setInterval(() => { | ||||||
|  | 			this.$message({ | ||||||
|  | 				message: this.$t('realtime.refresh'), | ||||||
|  | 				type: 'warning', | ||||||
|  | 				duration: 1500, | ||||||
|  | 				onClose: () => { | ||||||
|  | 					this.clearData() | ||||||
|  | 					this.fetchList().then(({ data: res }) => { | ||||||
|  | 						this.testData = res.data.filter(item => !!item.equDet) | ||||||
|  | 						this.handleData() | ||||||
|  | 					}) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, 1000 * 60 * 5) | ||||||
|  | 	}, | ||||||
|  | 	// beforeDestroy() { | ||||||
|  | 	// 	console.log('before destroyed...') | ||||||
|  | 	// 	if (this.intervalId) clearInterval(this.intervalId) | ||||||
|  | 	// }, | ||||||
|  | 	deactivated() { | ||||||
|  | 		if (this.intervalId) clearInterval(this.intervalId) | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		clearData() { | ||||||
|  | 			this.tableData.splice(0) | ||||||
|  | 			this.tableProps.splice(0) | ||||||
|  | 			this.stepOneArray.splice(0) | ||||||
|  | 			this.dynamicPropSet = false | ||||||
|  | 			this.rowNum = 0 | ||||||
|  | 			this.testData = null | ||||||
|  | 			this.loadTable = false | ||||||
|  | 			this.equipmentCount = {} | ||||||
|  | 			this.setStaticTableProps() | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		handleData() { | ||||||
|  | 			this.expandDataStepOne() | ||||||
|  | 			this.expandDataStepTwo() | ||||||
|  | 			this.loadTable = true | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		fetchList() { | ||||||
|  | 			// 获取设备实时数据 | ||||||
|  | 			return this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/productionMonitoring/equipmentProductionRealTimeData'), | ||||||
|  | 				method: 'post' | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		expandDataStepOne() { | ||||||
|  | 			// console.log('testdata: ', this.testData) | ||||||
|  | 			this.stepOneArray = this.testData.map(item => { | ||||||
|  | 				if (item.equDet) { | ||||||
|  | 					item.equDet.forEach((equipment, index) => { | ||||||
|  | 						equipment.lineName = item.lineName | ||||||
|  | 					}) | ||||||
|  | 				} | ||||||
|  | 				return item.equDet | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		expandDataStepTwo() { | ||||||
|  | 			// 扩展服务器返回的数据第二阶段 | ||||||
|  | 			this.rowNum = 0 | ||||||
|  |  | ||||||
|  | 			this.stepOneArray.forEach(line => { | ||||||
|  | 				let avaliableEquipmentCount = 0 | ||||||
|  |  | ||||||
|  | 				line.forEach(equipment => { | ||||||
|  | 					const newItem = { | ||||||
|  | 						equId: equipment.equId, | ||||||
|  | 						lineName: equipment.lineName, | ||||||
|  | 						equName: equipment.equName, | ||||||
|  | 						externalCode: equipment.externalCode, | ||||||
|  | 						totalProduction: equipment.totalProduction ?? '-' | ||||||
|  | 					} | ||||||
|  |  | ||||||
|  | 					if (equipment.det) { | ||||||
|  | 						avaliableEquipmentCount += 1 | ||||||
|  | 						equipment.det.forEach(obj => { | ||||||
|  | 							if (!this.dynamicPropSet) { | ||||||
|  | 								if (obj.recordTime) { | ||||||
|  | 									// 如果 obj.recordTime 是有效的 | ||||||
|  | 									this.tableProps.push({ | ||||||
|  | 										label: moment(obj.recordTime).format('YYYY-MM-DD HH:mm:ss'), | ||||||
|  | 										children: [ | ||||||
|  | 											{ prop: obj.recordTime + '-inputNum', label: i18n.t('realtime.in') }, | ||||||
|  | 											{ prop: obj.recordTime + '-outputNum', label: i18n.t('realtime.out') }, | ||||||
|  | 											{ prop: obj.recordTime + '-scrapNum', label: i18n.t('realtime.data') }, | ||||||
|  | 											{ prop: obj.recordTime + '-scrapRate', label: i18n.t('realtime.rate'), filter: val => (val !== '-' ? `${val.toFixed(2)}%` : '-') } | ||||||
|  | 										] | ||||||
|  | 									}) | ||||||
|  | 								} | ||||||
|  | 							} | ||||||
|  |  | ||||||
|  | 							Object.defineProperty(newItem, obj.recordTime + '-inputNum', { | ||||||
|  | 								value: obj.inputNum ?? '-', | ||||||
|  | 								enumerable: true, | ||||||
|  | 								writable: true | ||||||
|  | 							}) | ||||||
|  | 							Object.defineProperty(newItem, obj.recordTime + '-outputNum', { | ||||||
|  | 								value: obj.outputNum ?? '-', | ||||||
|  | 								enumerable: true, | ||||||
|  | 								writable: true | ||||||
|  | 							}) | ||||||
|  | 							Object.defineProperty(newItem, obj.recordTime + '-scrapNum', { | ||||||
|  | 								value: obj.scrapNum ?? '-', | ||||||
|  | 								enumerable: true, | ||||||
|  | 								writable: true | ||||||
|  | 							}) | ||||||
|  | 							Object.defineProperty(newItem, obj.recordTime + '-scrapRate', { | ||||||
|  | 								value: obj.scrapRate ?? '-', | ||||||
|  | 								enumerable: true, | ||||||
|  | 								writable: true | ||||||
|  | 							}) | ||||||
|  | 							Object.defineProperty(newItem, 'recordTime', { | ||||||
|  | 								value: obj.recordTime, | ||||||
|  | 								enumerable: true, | ||||||
|  | 								writable: true | ||||||
|  | 							}) | ||||||
|  | 						}) | ||||||
|  |  | ||||||
|  | 						if (!this.dynamicPropSet) this.dynamicPropSet = true | ||||||
|  | 						this.tableData.push(newItem) | ||||||
|  | 					} | ||||||
|  | 				}) | ||||||
|  | 				this.$set(this.equipmentCount, [this.rowNum], avaliableEquipmentCount) | ||||||
|  | 				this.rowNum += avaliableEquipmentCount | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		setStaticTableProps() { | ||||||
|  | 			// Step1: 设置静态的 table props | ||||||
|  | 			const staticTableProps = [ | ||||||
|  | 				{ prop: 'lineName', label: i18n.t('pl.title'), fixed: true }, | ||||||
|  | 				{ prop: 'equName', label: i18n.t('equipment'), fixed: true }, | ||||||
|  | 				{ prop: 'totalProduction', label: i18n.t('realtime.total'), fixed: true } | ||||||
|  | 			] | ||||||
|  | 			this.tableProps = staticTableProps | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		spanMethod({ row, column, rowIndex, columnIndex }) { | ||||||
|  | 			// 设置合并行列的方式 | ||||||
|  | 			if (columnIndex === 0) { | ||||||
|  | 				if (this.equipmentCount[rowIndex]) { | ||||||
|  | 					// 如果找到需要合并的行号 | ||||||
|  | 					return { | ||||||
|  | 						rowspan: this.equipmentCount[rowIndex], | ||||||
|  | 						colspan: 1 | ||||||
|  | 					} | ||||||
|  | 				} else { | ||||||
|  | 					return { | ||||||
|  | 						rowspan: 0, | ||||||
|  | 						colspan: 0 | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										165
									
								
								src/views/modules/monitoring/realtimeProductLine.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										165
									
								
								src/views/modules/monitoring/realtimeProductLine.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,165 @@ | |||||||
|  | <!-- | ||||||
|  |  * @Author: lb | ||||||
|  |  * @Date: 2022-06-22 14:00:17 | ||||||
|  |  * @LastEditors: lb | ||||||
|  |  * @LastEditTime: 2022-06-22 14:00:17 | ||||||
|  |  * @Description: 产线生产实时数据 | ||||||
|  | --> | ||||||
|  | <template> | ||||||
|  | 	<div> | ||||||
|  | 		<div class="app-container"> | ||||||
|  | 			<small-title :size="'md'">{{ $t('realtime.pl') }}</small-title> | ||||||
|  | 			<base-table v-if="loadTable" :table-head-configs="tableProps" :data="tableData.length ? tableData : []" /> | ||||||
|  | 		</div> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import i18n from '@/i18n' | ||||||
|  | import BaseTable from '@/components/base-table' | ||||||
|  | import SmallTitle from '@/components/small-title' | ||||||
|  | import moment from 'moment' | ||||||
|  | import { calcMaxHeight } from '@/utils' | ||||||
|  | import { timeFilter } from '@/utils/filters' | ||||||
|  | export default { | ||||||
|  | 	name: 'RealtimeDataOfLine', | ||||||
|  | 	components: { BaseTable, SmallTitle }, | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			calcMaxHeight, | ||||||
|  | 			loadTable: false, | ||||||
|  | 			dynamicPropSet: false, | ||||||
|  | 			tableProps: [{ label: 'default', prop: 'default' }], | ||||||
|  | 			tableData: [], | ||||||
|  | 			testData: null, | ||||||
|  | 			listLoading: false, | ||||||
|  | 			intervalId: null | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  |  | ||||||
|  | 	mounted() { | ||||||
|  | 		this.clearData() | ||||||
|  | 		this.fetchList().then(({ data: res }) => { | ||||||
|  | 			// console.log('fetchlist:', res) | ||||||
|  | 			this.testData = res | ||||||
|  | 			this.handleData() | ||||||
|  | 		}) | ||||||
|  |  | ||||||
|  | 		this.intervalId = setInterval(() => { | ||||||
|  | 			this.$message({ | ||||||
|  | 				message: this.$t('realtime.refresh'), | ||||||
|  | 				type: 'warning', | ||||||
|  | 				onClose: () => { | ||||||
|  | 					this.clearData() | ||||||
|  | 					this.fetchList().then(({ data: res }) => { | ||||||
|  | 						this.testData = res | ||||||
|  | 						this.handleData() | ||||||
|  | 					}) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, 1000 * 60 * 5) | ||||||
|  | 	}, | ||||||
|  |  | ||||||
|  | 	deactivated() { | ||||||
|  | 		if (this.intervalId) clearInterval(this.intervalId) | ||||||
|  | 	}, | ||||||
|  |  | ||||||
|  | 	methods: { | ||||||
|  | 		fetchList() { | ||||||
|  | 			return this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/productionMonitoring/lineProductionRealTimeData'), | ||||||
|  | 				method: 'post' | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		clearData() { | ||||||
|  | 			this.dynamicPropSet = false | ||||||
|  | 			this.loadTable = false | ||||||
|  | 			this.testData = null | ||||||
|  | 			this.tableData.splice(0) | ||||||
|  | 			this.tableProps.splice(0) | ||||||
|  | 			this.setStaticTableProps() | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		handleData() { | ||||||
|  | 			this.expandDataStepOne() | ||||||
|  | 			// this.expandDataStepTwo() | ||||||
|  | 			if (this.tableData.length > 0) this.loadTable = true | ||||||
|  | 			else { | ||||||
|  | 				this.$message({ | ||||||
|  | 					message: i18n.t('errors.nodata'), | ||||||
|  | 					type: 'info', | ||||||
|  | 					duration: 2000 | ||||||
|  | 				}) | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		expandDataStepOne() { | ||||||
|  | 			// 扩展服务器返回的数据第一阶段 | ||||||
|  | 			// console.log('create new one') | ||||||
|  | 			this.tableData = this.testData.data.map(item => { | ||||||
|  | 				const newItem = { | ||||||
|  | 					lineName: item.lineName, | ||||||
|  | 					orderName: item.orderName, | ||||||
|  | 					productSize: item.productSize ?? '-' | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				if (item.det) { | ||||||
|  | 					item.det.forEach(obj => { | ||||||
|  | 						// Step2: 设置动态props | ||||||
|  | 						if (!this.dynamicPropSet) { | ||||||
|  | 							this.tableProps.push({ | ||||||
|  | 								label: moment(obj.recordTime).format('YYYY-MM-DD HH:mm:ss'), | ||||||
|  | 								children: [ | ||||||
|  | 									{ prop: obj.recordTime + '-inputNum', label: i18n.t('realtime.in') }, | ||||||
|  | 									{ prop: obj.recordTime + '-outputNum', label: i18n.t('realtime.out') }, | ||||||
|  | 									// { prop: obj.recordTime + '-passArea', label: i18n.t('realtime.goodrate') }, | ||||||
|  | 									// { prop: obj.recordTime + '-scrapNum', label: i18n.t('realtime.num') }, | ||||||
|  | 									// { prop: obj.recordTime + '-scrapRate', label: i18n.t('realtime.rate') } | ||||||
|  | 								] | ||||||
|  | 							}) | ||||||
|  | 						} | ||||||
|  |  | ||||||
|  | 						Object.defineProperty(newItem, obj.recordTime + '-inputNum', { | ||||||
|  | 							value: obj.inputNum ?? '-', | ||||||
|  | 							enumerable: true, | ||||||
|  | 							writable: true | ||||||
|  | 						}) | ||||||
|  | 						Object.defineProperty(newItem, obj.recordTime + '-outputNum', { | ||||||
|  | 							value: obj.outputNum ?? '-', | ||||||
|  | 							enumerable: true, | ||||||
|  | 							writable: true | ||||||
|  | 						}) | ||||||
|  | 						Object.defineProperty(newItem, obj.recordTime + '-scrapNum', { | ||||||
|  | 							value: obj.scrapNum ?? '-', | ||||||
|  | 							enumerable: true, | ||||||
|  | 							writable: true | ||||||
|  | 						}) | ||||||
|  |  | ||||||
|  | 						const scrapRate = obj.scrapRate ?? '-' | ||||||
|  | 						Object.defineProperty(newItem, obj.recordTime + '-scrapRate', { | ||||||
|  | 							value: scrapRate === '-' ? '-' : scrapRate * 100 + '%', | ||||||
|  | 							enumerable: true, | ||||||
|  | 							writable: true | ||||||
|  | 						}) | ||||||
|  | 						Object.defineProperty(newItem, obj.recordTime + '-passArea', { | ||||||
|  | 							value: obj.passArea ?? '-', | ||||||
|  | 							enumerable: true, | ||||||
|  | 							writable: true | ||||||
|  | 						}) | ||||||
|  | 					}) | ||||||
|  |  | ||||||
|  | 					this.dynamicPropSet = true | ||||||
|  | 					return newItem | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		setStaticTableProps() { | ||||||
|  | 			// Step1: 设置静态的 table props | ||||||
|  | 			const staticTableProps = [{ prop: 'lineName', label: i18n.t('pl.title'), fixed: true }] | ||||||
|  | 			this.tableProps = staticTableProps | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										152
									
								
								src/views/modules/monitoring/realtimeQualityInspection.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										152
									
								
								src/views/modules/monitoring/realtimeQualityInspection.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,152 @@ | |||||||
|  | <template> | ||||||
|  | 	<div> | ||||||
|  | 		<div class="app-container"> | ||||||
|  | 			<small-title :size="'md'">{{ $t('realtime.inspect') }}</small-title> | ||||||
|  | 			<base-table v-if="loadTable" :table-head-configs="tableProps" :data="tableData.length ? tableData : []" /> | ||||||
|  | 		</div> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | // @ts-nocheck | ||||||
|  | /* eslint-disable */ | ||||||
|  | import i18n from '@/i18n' | ||||||
|  | import BaseTable from '@/components/base-table' | ||||||
|  | import SmallTitle from '@/components/small-title' | ||||||
|  | import moment from 'moment' | ||||||
|  | import { calcMaxHeight } from '@/utils' | ||||||
|  | import { timeFilter } from '@/utils/filters' | ||||||
|  |  | ||||||
|  | // tslint: disable | ||||||
|  | export default { | ||||||
|  | 	name: 'RealtimeDataOfTeam', | ||||||
|  | 	components: { BaseTable, SmallTitle }, | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			calcMaxHeight, | ||||||
|  | 			loadTable: false, | ||||||
|  | 			// dynamicPropSet: false, | ||||||
|  | 			tableProps: [{ label: 'default', prop: 'default' }], | ||||||
|  | 			tableData: [], | ||||||
|  | 			testData: null, | ||||||
|  | 			listLoading: false, | ||||||
|  | 			intervalId: null | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  |  | ||||||
|  | 	mounted() { | ||||||
|  | 		this.clearData() | ||||||
|  |  | ||||||
|  | 		this.fetchList().then(({ data: res }) => { | ||||||
|  | 			this.testData = res | ||||||
|  | 			this.handleData() | ||||||
|  | 		}) | ||||||
|  |  | ||||||
|  | 		this.intervalId = setInterval(() => { | ||||||
|  | 			this.$message({ | ||||||
|  | 				message: this.$t('realtime.refresh'), | ||||||
|  | 				type: 'warning', | ||||||
|  | 				onClose: () => { | ||||||
|  | 					this.clearData() | ||||||
|  | 					this.fetchList().then(({ data: res }) => { | ||||||
|  | 						this.testData = res | ||||||
|  | 						this.handleData() | ||||||
|  | 					}) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, 1000 * 60 * 5) | ||||||
|  | 	}, | ||||||
|  |  | ||||||
|  | 	deactivated() { | ||||||
|  | 		if (this.intervalId) clearInterval(this.intervalId) | ||||||
|  | 	}, | ||||||
|  |  | ||||||
|  | 	methods: { | ||||||
|  | 		fetchList() { | ||||||
|  | 			// 获取质量数据 | ||||||
|  | 			return this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/productionMonitoring/qualityInspectionRealTimeData'), | ||||||
|  | 				method: 'post' | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		clearData() { | ||||||
|  | 			this.loadTable = false | ||||||
|  | 			this.testData = null | ||||||
|  | 			this.tableData.splice(0) | ||||||
|  | 			this.tableProps.splice(0) | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		handleData() { | ||||||
|  | 			// console.log('testData ===> ', this.testData) | ||||||
|  | 			this.initProps() | ||||||
|  | 			// console.log('props ===> ', this.tableProps) | ||||||
|  | 			this.initData() | ||||||
|  | 			// console.log('datas ===> ', this.tableData) | ||||||
|  | 			this.loadTable = true | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		handleRow(data) { | ||||||
|  | 			// data: { data:[], checkType: '' } | ||||||
|  | 			const item = {} | ||||||
|  | 			item.checkType = data.checkType | ||||||
|  |  | ||||||
|  | 			data.data.forEach(timepoint => { | ||||||
|  | 				if (timepoint.children && timepoint.children.length) { | ||||||
|  | 					timepoint.children.forEach(line => { | ||||||
|  | 						// item[timepoint.dynamicValue + line.dynamicName] = line.dynamicValue | ||||||
|  | 						item[timepoint.dynamicName + line.dynamicName] = line.dynamicValue | ||||||
|  | 					}) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  |  | ||||||
|  | 			return item | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		initData() { | ||||||
|  | 			this.tableData = this.testData.data.data.map(row => this.handleRow(row)) | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		initProps() { | ||||||
|  | 			this.tableProps = this.handlePropsEntry(this.testData.data.nameData) | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		handlePropsEntry(nameData) { | ||||||
|  | 			const dynamicPropNames = [] | ||||||
|  | 			const timeMap = {} | ||||||
|  |  | ||||||
|  | 			const parentNode = nameData.filter(item => item.tree === 1) | ||||||
|  | 			const childNode = nameData.filter(item => item.tree === 2) | ||||||
|  |  | ||||||
|  | 			const handleChild = function(prop) { | ||||||
|  | 				const time = parentNode.find(item => item.id === prop.parentId).name | ||||||
|  | 				// 填充 timeMap | ||||||
|  | 				timeMap[time] = timeMap[time] ? timeMap[time] : {} | ||||||
|  | 				timeMap[time][prop.name] = true | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			childNode.forEach(item => { | ||||||
|  | 				handleChild(item) | ||||||
|  | 			}) | ||||||
|  |  | ||||||
|  | 			// 对键值排序(时间排序) | ||||||
|  | 			const sortedTime = Object.keys(timeMap).sort((a, b) => { | ||||||
|  | 				if (moment(a).isBefore(b)) return -1 | ||||||
|  | 				else return 1 | ||||||
|  | 			}) | ||||||
|  |  | ||||||
|  | 			// 保存为 props | ||||||
|  | 			for (const key of sortedTime) { | ||||||
|  | 				// const prop = { label: key, children: [] } | ||||||
|  | 				const prop = { label: moment(key).format('YYYY-MM-DD HH:mm:ss'), children: [] } | ||||||
|  | 				for (const subKey in timeMap[key]) { | ||||||
|  | 					prop.children.push({ label: subKey, prop: key + subKey }) | ||||||
|  | 				} | ||||||
|  | 				dynamicPropNames.push(prop) | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			return [{ prop: 'checkType', label: i18n.t('inspect.type'), isFixed: true }, ...dynamicPropNames] | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										178
									
								
								src/views/modules/monitoring/reportCategory.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										178
									
								
								src/views/modules/monitoring/reportCategory.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,178 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="mod-config"> | ||||||
|  | 		<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)"> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-input v-model="dataForm.name" :placeholder="$t('categoryName')" clearable></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-button @click="currentChangeHandle(1)">{{ $t('query') }}</el-button> | ||||||
|  | 				<el-button v-if="$hasPermission('monitoring:reportsheetcategory:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  |  | ||||||
|  | 		<base-table :page="pageIndex" :size="pageSize" :data="dataList" :table-head-configs="tableConfigs" :max-height="calcMaxHeight(8)" @operate-event="handleOperations" @refreshDataList="getDataList" /> | ||||||
|  |  | ||||||
|  | 		<el-pagination | ||||||
|  | 			@size-change="sizeChangeHandle" | ||||||
|  | 			@current-change="currentChangeHandle" | ||||||
|  | 			:current-page="pageIndex" | ||||||
|  | 			:page-sizes="[10, 20, 50, 100]" | ||||||
|  | 			:page-size="pageSize" | ||||||
|  | 			:total="totalPage" | ||||||
|  | 			layout="total, sizes, prev, pager, next, jumper" | ||||||
|  | 		> | ||||||
|  | 		</el-pagination> | ||||||
|  | 		<!-- 弹窗, 新增 / 修改 --> | ||||||
|  | 		<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" :configs="addOrUpdateConfigs" @refreshDataList="getDataList" @destory-dialog="handleDestroyDialog" /> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | // import AddOrUpdate from './reportSheetCategory-add-or-update' | ||||||
|  | import AddOrUpdate from '@/components/base-dialog/addOrUpdate' | ||||||
|  | import i18n from '@/i18n' | ||||||
|  | import BaseTable from '@/components/base-table' | ||||||
|  | import TableOperateComponent from '@/components/base-table/components/operationComponent' | ||||||
|  | // import TableTextComponent from '@/components/base-table/components/detailComponent' | ||||||
|  | import { calcMaxHeight } from '@/utils' | ||||||
|  | import { timeFilter } from '@/utils/filters' | ||||||
|  | const tableConfigs = [ | ||||||
|  | 	{ | ||||||
|  | 		type: 'index', | ||||||
|  | 		name: i18n.t('index') | ||||||
|  | 	}, | ||||||
|  | 	{ prop: 'createTime', name: i18n.t('createTime'), filter: timeFilter }, | ||||||
|  | 	{ prop: 'name', name: i18n.t('categoryName') }, | ||||||
|  | 	{ prop: 'operations', name: i18n.t('handle'), width: 180, subcomponent: TableOperateComponent, options: ['edit', 'delete'] } | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | const addOrUpdateConfigs = { | ||||||
|  | 	type: 'dialog', | ||||||
|  | 	infoUrl: '/monitoring/reportSheetCategory', | ||||||
|  | 	fields: [{ name: 'name', label: i18n.t('categoryName'), required: true, span: 24 }], | ||||||
|  | 	operations: [ | ||||||
|  | 		{ name: 'cancel', url: true, showAlways: true }, | ||||||
|  | 		{ name: 'save', url: '/monitoring/reportSheetCategory', permission: 'monitoring:reportsheetcategory:save', showOnEdit: false }, | ||||||
|  | 		{ name: 'update', url: '/monitoring/reportSheetCategory', permission: 'monitoring:reportsheetcategory:update', showOnEdit: true } | ||||||
|  | 	] | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			calcMaxHeight, | ||||||
|  | 			tableConfigs, | ||||||
|  | 			addOrUpdateConfigs, | ||||||
|  | 			dataForm: { | ||||||
|  | 				name: '' | ||||||
|  | 			}, | ||||||
|  | 			dataList: [], | ||||||
|  | 			pageIndex: 1, | ||||||
|  | 			pageSize: 10, | ||||||
|  | 			totalPage: 0, | ||||||
|  | 			dataListLoading: false, | ||||||
|  | 			dataListSelections: [], | ||||||
|  | 			addOrUpdateVisible: false | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	components: { | ||||||
|  | 		AddOrUpdate, | ||||||
|  | 		BaseTable | ||||||
|  | 	}, | ||||||
|  | 	activated() { | ||||||
|  | 		this.getDataList() | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		// destroy dialog | ||||||
|  | 		handleDestroyDialog() { | ||||||
|  | 			setTimeout(() => { | ||||||
|  | 				this.addOrUpdateVisible= false | ||||||
|  | 			}, /** after dialog animated */ 200); | ||||||
|  | 		}, | ||||||
|  | 		handleOperations({ type, data: id }) { | ||||||
|  | 			switch (type) { | ||||||
|  | 				case 'edit': | ||||||
|  | 					return this.addOrUpdateHandle(id) | ||||||
|  | 				case 'delete': | ||||||
|  | 					return this.deleteHandle(id) | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		// 获取数据列表 | ||||||
|  | 		getDataList() { | ||||||
|  | 			this.dataListLoading = true | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/reportSheetCategory/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams({ | ||||||
|  | 					page: this.pageIndex, | ||||||
|  | 					limit: this.pageSize, | ||||||
|  | 					name: this.dataForm.name | ||||||
|  | 				}) | ||||||
|  | 			}).then(({ data }) => { | ||||||
|  | 				if (data && data.code === 0) { | ||||||
|  | 					this.dataList = data.data.list | ||||||
|  | 					this.totalPage = data.data.total | ||||||
|  | 				} else { | ||||||
|  | 					this.dataList = [] | ||||||
|  | 					this.totalPage = 0 | ||||||
|  | 				} | ||||||
|  | 				this.dataListLoading = false | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 每页数 | ||||||
|  | 		sizeChangeHandle(val) { | ||||||
|  | 			this.pageSize = val | ||||||
|  | 			this.pageIndex = 1 | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 当前页 | ||||||
|  | 		currentChangeHandle(val) { | ||||||
|  | 			this.pageIndex = val | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 多选 | ||||||
|  | 		selectionChangeHandle(val) { | ||||||
|  | 			this.dataListSelections = val | ||||||
|  | 		}, | ||||||
|  | 		// 新增 / 修改 | ||||||
|  | 		addOrUpdateHandle(id) { | ||||||
|  | 			this.addOrUpdateVisible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs.addOrUpdate.init(id) | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 删除 | ||||||
|  | 		deleteHandle(id) { | ||||||
|  | 			var ids = id | ||||||
|  | 				? [id] | ||||||
|  | 				: this.dataListSelections.map(item => { | ||||||
|  | 						return item.id | ||||||
|  | 				  }) | ||||||
|  | 			this.$confirm(`${i18n.t('prompt.info', { handle: id ? i18n.t('delete').toLowerCase() : i18n.t('deleteBatch').toLowerCase() })}`, i18n.t('prompt.title'), { | ||||||
|  | 				confirmButtonText: i18n.t('confirm'), | ||||||
|  | 				cancelButtonText: i18n.t('cancel'), | ||||||
|  | 				type: 'warning' | ||||||
|  | 			}).then(() => { | ||||||
|  | 				this.$http({ | ||||||
|  | 					url: this.$http.adornUrl('/monitoring/reportSheetCategory'), | ||||||
|  | 					method: 'delete', | ||||||
|  | 					data: this.$http.adornData(ids, false, 'raw') | ||||||
|  | 				}).then(({ data }) => { | ||||||
|  | 					if (data && data.code === 0) { | ||||||
|  | 						this.$message({ | ||||||
|  | 							message: i18n.t('prompt.success'), | ||||||
|  | 							type: 'success', | ||||||
|  | 							duration: 1500, | ||||||
|  | 							onClose: () => { | ||||||
|  | 								this.getDataList() | ||||||
|  | 							} | ||||||
|  | 						}) | ||||||
|  | 					} else { | ||||||
|  | 						this.$message.error(data.msg) | ||||||
|  | 					} | ||||||
|  | 				}) | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										44
									
								
								src/views/modules/monitoring/reportDesign.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								src/views/modules/monitoring/reportDesign.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,44 @@ | |||||||
|  | <template> | ||||||
|  | 	<div v-loading="loading" :class="$style.container"> | ||||||
|  | 		<iframe id="zgboke" :class="$style.mainIframe" name="mainIframe" :src="url" frameborder="0" scrolling="auto" /> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  | <script> | ||||||
|  | export default { | ||||||
|  | 	components: {}, | ||||||
|  | 	props: {}, | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			loading: true, | ||||||
|  | 			// url: process.env.VUE_APP_REPORT_DESIGN_URL | ||||||
|  | 			// url: window.SITE_CONFIG['apiURL'] + this.$http.adornUrl('/ureport/designer') | ||||||
|  | 			// url: this.$http.adornUrl('/ureport/designer') | ||||||
|  | 			// url: (process.env.NODE_ENV === 'production' ? '/api' : '/yd-monitor') + '/ureport/designer' | ||||||
|  | 			url: '/api/ureport/designer' | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	mounted() { | ||||||
|  | 		const vm = this | ||||||
|  | 		console.log(this.$route.query) | ||||||
|  | 		const { name } = this.$route.query | ||||||
|  | 		this.url += name ? '?_u=db:' + this.$route.query.name : '' | ||||||
|  | 		const ifream = document.getElementById('zgboke') | ||||||
|  |  | ||||||
|  | 		ifream.onload = function() { | ||||||
|  | 			vm.loading = false | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	methods: {} | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  | <style lang="scss" module> | ||||||
|  | .container { | ||||||
|  | 	margin: 0px 16px 0 8px; | ||||||
|  | 	width: 98.5%; | ||||||
|  | 	height: calc(100vh - 180px); | ||||||
|  | 	.mainIframe { | ||||||
|  | 		width: 100%; | ||||||
|  | 		height: 100%; | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </style> | ||||||
							
								
								
									
										277
									
								
								src/views/modules/monitoring/reportDetail.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										277
									
								
								src/views/modules/monitoring/reportDetail.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,277 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="mod-config"> | ||||||
|  | 		<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)"> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-input v-model="dataForm.name" :placeholder="$t('report.name')" clearable></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-button @click="currentChangeHandle(1)">{{ $t('query') }}</el-button> | ||||||
|  | 				<!-- <el-button v-if="$hasPermission('')" type="primary" @click="addOrUpdateHandle()">新增(跳到设计)</el-button> --> | ||||||
|  | 				<el-button v-if="$hasPermission('monitoring:reportsheet:save')" type="primary" @click="handleAdd()">{{ $t('add') }}</el-button> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  |  | ||||||
|  | 		<base-table :page="pageIndex" :size="pageSize" :data="dataList" :table-head-configs="tableConfigs" :max-height="500" @operate-event="handleOperations" @refreshDataList="getDataList" /> | ||||||
|  |  | ||||||
|  | 		<el-pagination | ||||||
|  | 			@size-change="sizeChangeHandle" | ||||||
|  | 			@current-change="currentChangeHandle" | ||||||
|  | 			:current-page="pageIndex" | ||||||
|  | 			:page-sizes="[10, 20, 50, 100]" | ||||||
|  | 			:page-size="pageSize" | ||||||
|  | 			:total="totalPage" | ||||||
|  | 			layout="total, sizes, prev, pager, next, jumper" | ||||||
|  | 		> | ||||||
|  | 		</el-pagination> | ||||||
|  | 		<!-- 弹窗, 新增 / 修改 --> | ||||||
|  | 		<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" :configs="addOrUpdateConfigs" @refreshDataList="getDataList" @destory-dialog="handleDestroyDialog" /> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { calcMaxHeight } from '@/utils' | ||||||
|  | import { timeFilter } from '@/utils/filters' | ||||||
|  | // import AddOrUpdate from './equipmentPlcConnect-add-or-update' | ||||||
|  | import AddOrUpdate from '@/components/base-dialog/addOrUpdate' | ||||||
|  | import i18n from '@/i18n' | ||||||
|  | import BaseTable from '@/components/base-table' | ||||||
|  | import TableOperateComponent from '@/components/base-table/components/operationComponent' | ||||||
|  | import axios from '@/utils/request' | ||||||
|  |  | ||||||
|  | const CategoryList = { | ||||||
|  | 	name: 'CategoryList', | ||||||
|  | 	props: { | ||||||
|  | 		injectData: { | ||||||
|  | 			type: Object, | ||||||
|  | 			required: true, | ||||||
|  | 			default: () => ({}) | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	data() { | ||||||
|  | 		return { calcMaxHeight, pickedId: null } | ||||||
|  | 	}, | ||||||
|  | 	mounted() { | ||||||
|  | 		console.log(this.injectData) | ||||||
|  | 		this.pickedId = this.injectData[this.injectData.head.prop] | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		// destroy dialog | ||||||
|  | 		handleDestroyDialog() { | ||||||
|  | 			setTimeout(() => { | ||||||
|  | 				this.addOrUpdateVisible= false | ||||||
|  | 			}, /** after dialog animated */ 200); | ||||||
|  | 		}, | ||||||
|  | 		handleChange(id) { | ||||||
|  | 			this.pickedId = id | ||||||
|  | 			this.$emit('emit-data', { | ||||||
|  | 				type: 'change-category', | ||||||
|  | 				data: { id: this.injectData.id, fileName: this.injectData.fileName, name: this.injectData.name, url: this.injectData.url, categoryId: id } | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	render: function(h) { | ||||||
|  | 		const childOptions = [] | ||||||
|  | 		this.injectData.head.options?.forEach(item => { | ||||||
|  | 			console.log('item', item.value) | ||||||
|  | 			childOptions.push(h('el-option', { props: { label: item.label, value: item.value } }, null)) | ||||||
|  | 		}) | ||||||
|  | 		return h('el-select', { props: { value: this.pickedId }, on: { change: this.handleChange } }, childOptions) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | const addOrUpdateConfigs = { | ||||||
|  | 	type: 'dialog', | ||||||
|  | 	infoUrl: '/monitoring/reportSheet', | ||||||
|  | 	fields: [{ name: 'fileName', label: i18n.t('report.name'), required: true, span: 24 }], | ||||||
|  | 	operations: [ | ||||||
|  | 		{ name: 'cancel', url: true, showAlways: true }, | ||||||
|  | 		{ name: 'save', url: '/monitoring/reportSheet', permission: 'monitoring:reportsheet:save', showOnEdit: false }, | ||||||
|  | 		{ name: 'update', url: '/monitoring/reportSheet', permission: 'monitoring:reportsheet:update', showOnEdit: true } | ||||||
|  | 	] | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			addOrUpdateConfigs, | ||||||
|  | 			tableConfigs: [], | ||||||
|  | 			dataForm: { | ||||||
|  | 				name: '' | ||||||
|  | 			}, | ||||||
|  | 			dataList: [], | ||||||
|  | 			pageIndex: 1, | ||||||
|  | 			pageSize: 10, | ||||||
|  | 			totalPage: 0, | ||||||
|  | 			dataListLoading: false, | ||||||
|  | 			dataListSelections: [], | ||||||
|  | 			addOrUpdateVisible: false | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	components: { | ||||||
|  | 		AddOrUpdate, | ||||||
|  | 		BaseTable | ||||||
|  | 	}, | ||||||
|  | 	activated() { | ||||||
|  | 		this.dataList.splice(0) | ||||||
|  | 		this.getAllCategories() | ||||||
|  | 		this.getDataList() | ||||||
|  | 	}, | ||||||
|  | 	computed: {}, | ||||||
|  | 	methods: { | ||||||
|  | 		// destroy dialog | ||||||
|  | 		handleDestroyDialog() { | ||||||
|  | 			setTimeout(() => { | ||||||
|  | 				this.addOrUpdateVisible= false | ||||||
|  | 			}, /** after dialog animated */ 200); | ||||||
|  | 		}, | ||||||
|  | 		getAllCategories() { | ||||||
|  | 			axios.get(axios.adornUrl('/monitoring/reportSheetCategory/page')).then(({ data: res }) => { | ||||||
|  | 				if (res.data && res.data.list) { | ||||||
|  | 					const categories = res.data.list.map(item => ({ label: item.name, value: item.id })) | ||||||
|  | 					this.tableConfigs = [ | ||||||
|  | 						{ type: 'index', width: 100, name: i18n.t('index') }, | ||||||
|  | 						{ prop: 'createTime', name: i18n.t('createTime'), filter: timeFilter, width: 200 }, | ||||||
|  | 						{ prop: 'fileName', name: i18n.t('report.name') }, | ||||||
|  | 						{ prop: 'category', name: i18n.t('report.type'), subcomponent: CategoryList, options: categories }, | ||||||
|  | 						{ | ||||||
|  | 							prop: 'operations', | ||||||
|  | 							name: i18n.t('handle'), | ||||||
|  | 							fixed: 'right', | ||||||
|  | 							// width: 180, | ||||||
|  | 							subcomponent: TableOperateComponent, | ||||||
|  | 							options: [{ name: 'preview', emitField: 'fileName' }, { name: 'design', emitField: 'name' }, 'edit', 'delete'] | ||||||
|  | 						} | ||||||
|  | 					] | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		handleOperations({ type, data }) { | ||||||
|  | 			console.log('operation data: ', data) | ||||||
|  | 			let id = data | ||||||
|  | 			switch (type) { | ||||||
|  | 				case 'change-category': | ||||||
|  | 					return this.updateCategory(data) | ||||||
|  | 				case 'edit': | ||||||
|  | 					return this.addOrUpdateHandle(id) | ||||||
|  | 				case 'delete': | ||||||
|  | 					return this.deleteHandle(id) | ||||||
|  | 				case 'design': | ||||||
|  | 					return this.$router.push({ | ||||||
|  | 						name: 'monitoring-reportDesign', | ||||||
|  | 						query: { | ||||||
|  | 							// data 的数据是 emitField 的值 | ||||||
|  | 							name: data | ||||||
|  | 						} | ||||||
|  | 					}) | ||||||
|  | 				case 'preview': | ||||||
|  | 					return this.$router.push({ | ||||||
|  | 						name: 'monitoring-reportPreview', | ||||||
|  | 						query: { | ||||||
|  | 							name: data | ||||||
|  | 						} | ||||||
|  | 					}) | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		updateCategory({ id, fileName, categoryId }) { | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/reportSheet'), | ||||||
|  | 				method: 'put', | ||||||
|  | 				data: { | ||||||
|  | 					id, | ||||||
|  | 					fileName, | ||||||
|  | 					category: categoryId | ||||||
|  | 				} | ||||||
|  | 			}).then(({ data: res }) => { | ||||||
|  | 				this.$message.success(i18n.t('success')) | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 获取数据列表 | ||||||
|  | 		getDataList() { | ||||||
|  | 			this.dataListLoading = true | ||||||
|  |  | ||||||
|  | 			const queries = { | ||||||
|  | 				page: this.pageIndex, | ||||||
|  | 				limit: this.pageSize, | ||||||
|  | 				name: this.dataForm.name | ||||||
|  | 			} | ||||||
|  | 			if (this.$route.query.category) { | ||||||
|  | 				queries['category'] = this.$route.query.category | ||||||
|  | 			} | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/reportSheet/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams(queries) | ||||||
|  | 			}).then(({ data }) => { | ||||||
|  | 				if (data && data.code === 0) { | ||||||
|  | 					this.dataList = data.data.list | ||||||
|  | 					this.totalPage = data.data.total | ||||||
|  | 				} else { | ||||||
|  | 					this.dataList = [] | ||||||
|  | 					this.totalPage = 0 | ||||||
|  | 				} | ||||||
|  | 				this.dataListLoading = false | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 每页数 | ||||||
|  | 		sizeChangeHandle(val) { | ||||||
|  | 			this.pageSize = val | ||||||
|  | 			this.pageIndex = 1 | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 当前页 | ||||||
|  | 		currentChangeHandle(val) { | ||||||
|  | 			this.pageIndex = val | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 多选 | ||||||
|  | 		selectionChangeHandle(val) { | ||||||
|  | 			this.dataListSelections = val | ||||||
|  | 		}, | ||||||
|  | 		// 新增 - 跳转到设计 | ||||||
|  | 		handleAdd() { | ||||||
|  | 			this.$router.push({ | ||||||
|  | 				name: 'monitoring-reportDesign' | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		addOrUpdateHandle(id) { | ||||||
|  | 			console.log('edit:', id) | ||||||
|  | 			this.addOrUpdateVisible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs.addOrUpdate.init(id) | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 删除 | ||||||
|  | 		deleteHandle(id) { | ||||||
|  | 			var ids = id | ||||||
|  | 				? [id] | ||||||
|  | 				: this.dataListSelections.map(item => { | ||||||
|  | 						return item.id | ||||||
|  | 				  }) | ||||||
|  | 			this.$confirm(`${ i18n.t('prompt.info', { handle: id ? i18n.t('delete').toLowerCase() : i18n.t('deleteBatch').toLowerCase() }) }`, i18n.t('prompt.title'), { | ||||||
|  | 				confirmButtonText: i18n.t('confirm'), | ||||||
|  | 				cancelButtonText: i18n.t('cancel'), | ||||||
|  | 				type: 'warning' | ||||||
|  | 			}).then(() => { | ||||||
|  | 				this.$http({ | ||||||
|  | 					url: this.$http.adornUrl('/monitoring/equipmentPlcConnect'), | ||||||
|  | 					method: 'delete', | ||||||
|  | 					data: this.$http.adornData(ids, false, 'raw') | ||||||
|  | 				}).then(({ data }) => { | ||||||
|  | 					if (data && data.code === 0) { | ||||||
|  | 						this.$message({ | ||||||
|  | 							message: i18n.t('prompt.success'), | ||||||
|  | 							type: 'success', | ||||||
|  | 							duration: 1500, | ||||||
|  | 							onClose: () => { | ||||||
|  | 								this.getDataList() | ||||||
|  | 							} | ||||||
|  | 						}) | ||||||
|  | 					} else { | ||||||
|  | 						this.$message.error(data.msg) | ||||||
|  | 					} | ||||||
|  | 				}) | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										135
									
								
								src/views/modules/monitoring/reportList.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										135
									
								
								src/views/modules/monitoring/reportList.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,135 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="container"> | ||||||
|  | 		<el-row class="sort-box" :gutter="20"> | ||||||
|  | 			<el-col class="sort-item" :span="4" @click.native="handleClick('')"> | ||||||
|  | 				<div class="sort-item-box"> | ||||||
|  | 					<div class="sort-item-box-top"> | ||||||
|  | 						<!-- <p>{{ $t('module.report.reportSort.all') }}</p> --> | ||||||
|  | 						<p>{{ $t('all') }}</p> | ||||||
|  | 					</div> | ||||||
|  | 					<div class="sort-item-box-bottom">{{ allNum }} {{ allNum > 1 ? 'Reports' : 'Report' }}</div> | ||||||
|  | 				</div> | ||||||
|  | 			</el-col> | ||||||
|  | 			<el-col v-for="item in dataList" :key="item.id" class="sort-item" @click.native="handleClick(item.id)"> | ||||||
|  | 				<div class="sort-item-box"> | ||||||
|  | 					<div class="sort-item-box-top"> | ||||||
|  | 						<p>{{ item.name }}</p> | ||||||
|  | 					</div> | ||||||
|  | 					<div class="sort-item-box-bottom">{{ item.quantity }} {{ item.quantity > 1 ? 'Reports' : 'Report' }}</div> | ||||||
|  | 				</div> | ||||||
|  | 			</el-col> | ||||||
|  | 		</el-row> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { dataList: [], pageIndex: 1, pageSize: 10, totalPage: 0, allNum: 0 } | ||||||
|  | 	}, | ||||||
|  | 	created() { | ||||||
|  | 		this.getDataList() | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		// get list | ||||||
|  | 		getDataList() { | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/reportSheetCategory/list'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: {} | ||||||
|  | 			}).then(({ data: res }) => { | ||||||
|  | 				this.allNum = 0 | ||||||
|  | 				if (res.data) { | ||||||
|  | 					this.dataList = res.data | ||||||
|  | 					res.data.forEach(item => { | ||||||
|  | 						this.allNum += item.quantity | ||||||
|  | 					}) | ||||||
|  | 				} else this.dataList.splice(0) | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		handleClick(id) { | ||||||
|  | 			this.$router.push({ | ||||||
|  | 				name: 'monitoring-reportDetail', | ||||||
|  | 				query: { | ||||||
|  | 					category: id | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style lang="scss"> | ||||||
|  | .container { | ||||||
|  | 	padding: 20px; | ||||||
|  | 	.sort-box { | ||||||
|  | 		.sort-item { | ||||||
|  | 			height: 400px; | ||||||
|  | 			width: 280px; | ||||||
|  | 			margin-bottom: 20px; | ||||||
|  | 			.sort-item-box { | ||||||
|  | 				width: 100%; | ||||||
|  | 				height: 400px; | ||||||
|  | 				background: #faefc2; | ||||||
|  | 				border-radius: 10px; | ||||||
|  | 				box-shadow: 0px 3px 3px rgba(0, 0, 0, 0.5); | ||||||
|  | 				cursor: pointer; | ||||||
|  | 				position: relative; | ||||||
|  | 				overflow: hidden; | ||||||
|  | 				.sort-item-box-top { | ||||||
|  | 					margin: 0 10%; | ||||||
|  | 					width: 80%; | ||||||
|  | 					height: 199px; | ||||||
|  | 					border-bottom: 1px solid #e3d47d; | ||||||
|  | 					color: #b3a995; | ||||||
|  | 					position: relative; | ||||||
|  | 					p { | ||||||
|  | 						width: 100%; | ||||||
|  | 						position: absolute; | ||||||
|  | 						bottom: 0px; | ||||||
|  | 						line-height: 50px; | ||||||
|  | 						font-size: 24px; | ||||||
|  | 						letter-spacing: 5px; | ||||||
|  | 						text-align: center; | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 				.sort-item-box-bottom { | ||||||
|  | 					width: 100%; | ||||||
|  | 					height: 200px; | ||||||
|  | 					line-height: 200px; | ||||||
|  | 					font-size: 24px; | ||||||
|  | 					font-weight: bold; | ||||||
|  | 					text-align: center; | ||||||
|  | 					letter-spacing: 5px; | ||||||
|  | 					color: #6e7680; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			.sort-item-box::before { | ||||||
|  | 				content: ''; | ||||||
|  | 				position: absolute; | ||||||
|  | 				right: 0; | ||||||
|  | 				width: 4px; | ||||||
|  | 				height: 400px; | ||||||
|  | 				background: #f8e69b; | ||||||
|  | 			} | ||||||
|  | 			.sort-item-box::after { | ||||||
|  | 				content: ''; | ||||||
|  | 				position: absolute; | ||||||
|  | 				right: 0; | ||||||
|  | 				top: 70px; | ||||||
|  | 				width: 18px; | ||||||
|  | 				height: 60px; | ||||||
|  | 				background: #f8e69b; | ||||||
|  | 				border-radius: 5px; | ||||||
|  | 			} | ||||||
|  | 			.sort-item-box:hover { | ||||||
|  | 				transition: border linear 0.2s, box-shadow linear 0.2s; | ||||||
|  | 				border-color: rgba(141, 39, 142, 0.75); | ||||||
|  | 				box-shadow: 0 0 5px rgba(111, 1, 32, 3); | ||||||
|  | 				// border: 2px solid #fff; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </style> | ||||||
							
								
								
									
										73
									
								
								src/views/modules/monitoring/reportPreview.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								src/views/modules/monitoring/reportPreview.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,73 @@ | |||||||
|  | <!-- | ||||||
|  |  * @Author: gtz | ||||||
|  |  * @Date: 2021-03-07 18:39:03 | ||||||
|  |  * @LastEditors: gtz | ||||||
|  |  * @LastEditTime: 2022-02-24 16:35:51 | ||||||
|  |  * @Description: file content | ||||||
|  | --> | ||||||
|  | <template> | ||||||
|  | 	<div v-loading="loading" :class="$style.container"> | ||||||
|  | 		<small-title :size="'md'" style="margin-bottom: 10px">{{ $t('report.name') + ': ' + $route.query.name }}</small-title> | ||||||
|  |  | ||||||
|  | 		<iframe id="reportView" :class="$style.mainIframe" name="mainIframe" :src="url" frameborder="0" scrolling="auto" /> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  | <script> | ||||||
|  | import SmallTitle from '@/components/small-title' | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	components: { SmallTitle }, | ||||||
|  | 	props: {}, | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			loading: true, | ||||||
|  | 			// url: process.env.VUE_APP_REPORT_VIEW_URL | ||||||
|  | 			// url: window.SITE_CONFIG['apiURL'] + this.$http.adornUrl('/ureport/preview') | ||||||
|  | 			// url: (process.env.NODE_ENV === 'production' ? '/api' : '/yd-monitor') + '/ureport/preview' | ||||||
|  | 			url: '/api/ureport/preview' | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	mounted() { | ||||||
|  | 		const vm = this | ||||||
|  | 		console.log(this.$route.query) | ||||||
|  | 		this.url += '?_u=db:' + this.$route.query.name + '.ureport.xml' | ||||||
|  | 		// if (this.$route.query.params) { | ||||||
|  | 		//   const params = JSON.parse(this.$route.query.params) | ||||||
|  | 		//   params.map(item => { | ||||||
|  | 		//     this.url += '&' + item.key + '=' + item.value | ||||||
|  | 		//   }) | ||||||
|  | 		// } | ||||||
|  | 		if (this.$route.query.substrateId) { | ||||||
|  | 			this.url += '&substrateId=' + this.$route.query.substrateId | ||||||
|  | 		} | ||||||
|  | 		if (this.$route.query.equipmentId) { | ||||||
|  | 			this.url += '&equipmentId=' + this.$route.query.equipmentId | ||||||
|  | 		} | ||||||
|  | 		if (this.$route.query.dataId) { | ||||||
|  | 			this.url += '&dataId=' + this.$route.query.dataId | ||||||
|  | 		} | ||||||
|  | 		if (this.$route.query.workOrderNo) { | ||||||
|  | 			this.url += '&workOrderNo=' + this.$route.query.workOrderNo | ||||||
|  | 		} | ||||||
|  | 		if (this.$route.query.id) { | ||||||
|  | 			this.url += '&id=' + this.$route.query.id | ||||||
|  | 		} | ||||||
|  | 		const ifream = document.getElementById('reportView') | ||||||
|  | 		ifream.onload = function() { | ||||||
|  | 			vm.loading = false | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	methods: {} | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  | <style lang="scss" module> | ||||||
|  | .container { | ||||||
|  | 	margin: 0px 16px 0 8px; | ||||||
|  | 	width: 98.5%; | ||||||
|  | 	height: calc(100vh - 180px); | ||||||
|  | 	.mainIframe { | ||||||
|  | 		width: 100%; | ||||||
|  | 		height: 100%; | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </style> | ||||||
							
								
								
									
										191
									
								
								src/views/modules/monitoring/reportSheet-add-or-update.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										191
									
								
								src/views/modules/monitoring/reportSheet-add-or-update.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,191 @@ | |||||||
|  | <template> | ||||||
|  | 	<el-dialog :title="!dataForm.id ? i18n.t('add') : i18n.t('update')" :close-on-click-modal="false" :visible.sync="visible"> | ||||||
|  | 		<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" label-width="80px"> | ||||||
|  | 			<el-form-item label="分类:关联report_sheet_category" prop="category"> | ||||||
|  | 				<el-input v-model="dataForm.category" placeholder="分类:关联report_sheet_category"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="编码" prop="code"> | ||||||
|  | 				<el-input v-model="dataForm.code" placeholder="编码"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="名称" prop="name"> | ||||||
|  | 				<el-input v-model="dataForm.name" placeholder="名称"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="文件名称" prop="fileName"> | ||||||
|  | 				<el-input v-model="dataForm.fileName" placeholder="文件名称"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="链接地址" prop="url"> | ||||||
|  | 				<el-input v-model="dataForm.url" placeholder="链接地址"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('desc')" prop="description"> | ||||||
|  | 				<el-input v-model="dataForm.description" :placeholder="$t('desc')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="启用状态:0 、停用,1、启用" prop="enabled"> | ||||||
|  | 				<el-input v-model="dataForm.enabled" placeholder="启用状态:0 、停用,1、启用"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="备注" prop="remark"> | ||||||
|  | 				<el-input v-model="dataForm.remark" placeholder="备注"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="删除标志,是否有效:1 可用 0不可用" prop="valid"> | ||||||
|  | 				<el-input v-model="dataForm.valid" placeholder="删除标志,是否有效:1 可用 0不可用"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('creator')" prop="creatorId"> | ||||||
|  | 				<el-input v-model="dataForm.creatorId" :placeholder="$t('creator')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('creatorName')" prop="creatorName"> | ||||||
|  | 				<el-input v-model="dataForm.creatorName" :placeholder="$t('creatorName')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="创建时间" prop="createTime"> | ||||||
|  | 				<el-input v-model="dataForm.createTime" placeholder="创建时间"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('updator')" prop="updaterId"> | ||||||
|  | 				<el-input v-model="dataForm.updaterId" :placeholder="$t('updator')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('updatorName')" prop="updaterName"> | ||||||
|  | 				<el-input v-model="dataForm.updaterName" :placeholder="$t('updatorName')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('updateTime')" prop="updateTime"> | ||||||
|  | 				<el-input v-model="dataForm.updateTime" :placeholder="$t('updateTime')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('version')" prop="version"> | ||||||
|  | 				<el-input v-model="dataForm.version" :placeholder="$t('version')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="报表内容" prop="content"> | ||||||
|  | 				<el-input v-model="dataForm.content" placeholder="报表内容"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  | 		<span slot="footer" class="dialog-footer"> | ||||||
|  | 			<el-button @click="visible = false">{{ $t('cancel') }}</el-button> | ||||||
|  | 			<el-button type="primary" @click="dataFormSubmit()">{{ $t('confirm') }}</el-button> | ||||||
|  | 		</span> | ||||||
|  | 	</el-dialog> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			visible: false, | ||||||
|  | 			dataForm: { | ||||||
|  | 				id: 0, | ||||||
|  | 				category: '', | ||||||
|  | 				code: '', | ||||||
|  | 				name: '', | ||||||
|  | 				fileName: '', | ||||||
|  | 				url: '', | ||||||
|  | 				description: '', | ||||||
|  | 				enabled: '', | ||||||
|  | 				remark: '', | ||||||
|  | 				valid: '', | ||||||
|  | 				creatorId: '', | ||||||
|  | 				creatorName: '', | ||||||
|  | 				createTime: '', | ||||||
|  | 				updaterId: '', | ||||||
|  | 				updaterName: '', | ||||||
|  | 				updateTime: '', | ||||||
|  | 				version: '', | ||||||
|  | 				content: '' | ||||||
|  | 			}, | ||||||
|  | 			dataRule: { | ||||||
|  | 				category: [{ required: true, message: '分类:关联report_sheet_category不能为空', trigger: 'blur' }], | ||||||
|  | 				code: [{ required: true, message: '编码不能为空', trigger: 'blur' }], | ||||||
|  | 				name: [{ required: true, message: '名称不能为空', trigger: 'blur' }], | ||||||
|  | 				fileName: [{ required: true, message: '文件名称不能为空', trigger: 'blur' }], | ||||||
|  | 				url: [{ required: true, message: '链接地址不能为空', trigger: 'blur' }], | ||||||
|  | 				description: [{ required: true, message: '描述不能为空', trigger: 'blur' }], | ||||||
|  | 				enabled: [{ required: true, message: '启用状态:0 、停用,1、启用不能为空', trigger: 'blur' }], | ||||||
|  | 				remark: [{ required: true, message: '备注不能为空', trigger: 'blur' }], | ||||||
|  | 				valid: [{ required: true, message: '删除标志,是否有效:1 可用 0不可用不能为空', trigger: 'blur' }], | ||||||
|  | 				creatorId: [{ required: true, message: '创建人不能为空', trigger: 'blur' }], | ||||||
|  | 				creatorName: [{ required: true, message: '创建人姓名不能为空', trigger: 'blur' }], | ||||||
|  | 				createTime: [{ required: true, message: '创建时间不能为空', trigger: 'blur' }], | ||||||
|  | 				updaterId: [{ required: true, message: '更新人不能为空', trigger: 'blur' }], | ||||||
|  | 				updaterName: [{ required: true, message: '更新人姓名不能为空', trigger: 'blur' }], | ||||||
|  | 				updateTime: [{ required: true, message: '更新时间不能为空', trigger: 'blur' }], | ||||||
|  | 				version: [{ required: true, message: '版本号不能为空', trigger: 'blur' }], | ||||||
|  | 				content: [{ required: true, message: '报表内容不能为空', trigger: 'blur' }] | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		init(id) { | ||||||
|  | 			this.dataForm.id = id || 0 | ||||||
|  | 			this.visible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs['dataForm'].resetFields() | ||||||
|  | 				if (this.dataForm.id) { | ||||||
|  | 					this.$http({ | ||||||
|  | 						url: this.$http.adornUrl(`/monitoring/reportSheet/${this.dataForm.id}`), | ||||||
|  | 						method: 'get', | ||||||
|  | 						params: this.$http.adornParams() | ||||||
|  | 					}).then(({ data }) => { | ||||||
|  | 						if (data && data.code === 0) { | ||||||
|  | 							this.dataForm.category = data.reporsheet.category | ||||||
|  | 							this.dataForm.code = data.reporsheet.code | ||||||
|  | 							this.dataForm.name = data.reporsheet.name | ||||||
|  | 							this.dataForm.fileName = data.reporsheet.fileName | ||||||
|  | 							this.dataForm.url = data.reporsheet.url | ||||||
|  | 							this.dataForm.description = data.reporsheet.description | ||||||
|  | 							this.dataForm.enabled = data.reporsheet.enabled | ||||||
|  | 							this.dataForm.remark = data.reporsheet.remark | ||||||
|  | 							this.dataForm.valid = data.reporsheet.valid | ||||||
|  | 							this.dataForm.creatorId = data.reporsheet.creatorId | ||||||
|  | 							this.dataForm.creatorName = data.reporsheet.creatorName | ||||||
|  | 							this.dataForm.createTime = data.reporsheet.createTime | ||||||
|  | 							this.dataForm.updaterId = data.reporsheet.updaterId | ||||||
|  | 							this.dataForm.updaterName = data.reporsheet.updaterName | ||||||
|  | 							this.dataForm.updateTime = data.reporsheet.updateTime | ||||||
|  | 							this.dataForm.version = data.reporsheet.version | ||||||
|  | 							this.dataForm.content = data.reporsheet.content | ||||||
|  | 						} | ||||||
|  | 					}) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 表单提交 | ||||||
|  | 		dataFormSubmit() { | ||||||
|  | 			this.$refs['dataForm'].validate(valid => { | ||||||
|  | 				if (valid) { | ||||||
|  | 					this.$http({ | ||||||
|  | 						url: this.$http.adornUrl(`/monitoring/reportSheet/${!this.dataForm.id ? '' : this.dataForm.id}`), | ||||||
|  | 						method: this.dataForm.id ? 'put' : 'post', | ||||||
|  | 						data: this.$http.adornData({ | ||||||
|  | 							id: this.dataForm.id || undefined, | ||||||
|  | 							category: this.dataForm.category, | ||||||
|  | 							code: this.dataForm.code, | ||||||
|  | 							name: this.dataForm.name, | ||||||
|  | 							fileName: this.dataForm.fileName, | ||||||
|  | 							url: this.dataForm.url, | ||||||
|  | 							description: this.dataForm.description, | ||||||
|  | 							enabled: this.dataForm.enabled, | ||||||
|  | 							remark: this.dataForm.remark, | ||||||
|  | 							valid: this.dataForm.valid, | ||||||
|  | 							creatorId: this.dataForm.creatorId, | ||||||
|  | 							creatorName: this.dataForm.creatorName, | ||||||
|  | 							createTime: this.dataForm.createTime, | ||||||
|  | 							updaterId: this.dataForm.updaterId, | ||||||
|  | 							updaterName: this.dataForm.updaterName, | ||||||
|  | 							updateTime: this.dataForm.updateTime, | ||||||
|  | 							version: this.dataForm.version, | ||||||
|  | 							content: this.dataForm.content | ||||||
|  | 						}) | ||||||
|  | 					}).then(({ data }) => { | ||||||
|  | 						if (data && data.code === 0) { | ||||||
|  | 							this.$message({ | ||||||
|  | 								message: i18n.t('prompt.success'), | ||||||
|  | 								type: 'success', | ||||||
|  | 								duration: 1500, | ||||||
|  | 								onClose: () => { | ||||||
|  | 									this.visible = false | ||||||
|  | 									this.$emit('refreshDataList') | ||||||
|  | 								} | ||||||
|  | 							}) | ||||||
|  | 						} else { | ||||||
|  | 							this.$message.error(data.msg) | ||||||
|  | 						} | ||||||
|  | 					}) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										160
									
								
								src/views/modules/monitoring/reportSheet.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										160
									
								
								src/views/modules/monitoring/reportSheet.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,160 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="mod-config"> | ||||||
|  | 		<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)"> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-input v-model="dataForm.key" :placeholder="$t('parameter')" clearable></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-button @click="currentChangeHandle(1)">{{ $t('query') }}</el-button> | ||||||
|  | 				<el-button v-if="$hasPermission('monitoring:reporsheet:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  |  | ||||||
|  | 		<base-table :data="dataList" :table-head-configs="tableConfigs" :max-height="calcMaxHeight(8)" /> | ||||||
|  | 		<el-pagination | ||||||
|  | 			@size-change="sizeChangeHandle" | ||||||
|  | 			@current-change="currentChangeHandle" | ||||||
|  | 			:current-page="pageIndex" | ||||||
|  | 			:page-sizes="[10, 20, 50, 100]" | ||||||
|  | 			:page-size="pageSize" | ||||||
|  | 			:total="totalPage" | ||||||
|  | 			layout="total, sizes, prev, pager, next, jumper" | ||||||
|  | 		> | ||||||
|  | 		</el-pagination> | ||||||
|  | 		<!-- 弹窗, 新增 / 修改 --> | ||||||
|  | 		<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { calcMaxHeight } from '@/utils' | ||||||
|  | import { timeFilter } from '@/utils/filters' | ||||||
|  | import AddOrUpdate from './reportSheet-add-or-update' | ||||||
|  | import i18n from '@/i18n' | ||||||
|  | import BaseTable from '@/components/base-table' | ||||||
|  | import TableOperateComponent from '@/components/base-table/components/operationComponent' | ||||||
|  | import TableTextComponent from '@/components/base-table/components/detailComponent' | ||||||
|  |  | ||||||
|  | const tableConfigs = [ | ||||||
|  | 	{ prop: 'createTime', name: i18n.t('createTime'), filter: timeFilter }, | ||||||
|  | 	{ prop: 'name', name: i18n.t('report.name') }, | ||||||
|  | 	{ prop: 'code', name: i18n.t('report.code') }, | ||||||
|  | 	{ prop: 'category', name: i18n.t('report.type') }, | ||||||
|  | 	{ prop: 'fileName', name: i18n.t('file.name') }, | ||||||
|  | 	{ prop: 'url', name: i18n.t('report.lnk') }, | ||||||
|  | 	{ prop: 'description', name: i18n.t('desc') }, | ||||||
|  | 	{ prop: 'remark', name: i18n.t('remark') }, | ||||||
|  | 	{ prop: 'content', name: i18n.t('report.det') }, | ||||||
|  | 	{ prop: 'operations', name: i18n.t('handle'), fixed: 'right', width: 180, subcomponent: TableOperateComponent, options: ['edit', 'delete'] } | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			calcMaxHeight, | ||||||
|  | 			tableConfigs, | ||||||
|  | 			dataForm: { | ||||||
|  | 				key: '' | ||||||
|  | 			}, | ||||||
|  | 			dataList: [], | ||||||
|  | 			pageIndex: 1, | ||||||
|  | 			pageSize: 10, | ||||||
|  | 			totalPage: 0, | ||||||
|  | 			dataListLoading: false, | ||||||
|  | 			dataListSelections: [], | ||||||
|  | 			addOrUpdateVisible: false | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	components: { | ||||||
|  | 		AddOrUpdate, | ||||||
|  | 		BaseTable | ||||||
|  | 	}, | ||||||
|  | 	activated() { | ||||||
|  | 		this.getDataList() | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		// destroy dialog | ||||||
|  | 		handleDestroyDialog() { | ||||||
|  | 			setTimeout(() => { | ||||||
|  | 				this.addOrUpdateVisible= false | ||||||
|  | 			}, /** after dialog animated */ 200); | ||||||
|  | 		}, | ||||||
|  | 		// 获取数据列表 | ||||||
|  | 		getDataList() { | ||||||
|  | 			this.dataListLoading = true | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/reportSheet/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams({ | ||||||
|  | 					page: this.pageIndex, | ||||||
|  | 					limit: this.pageSize, | ||||||
|  | 					key: this.dataForm.key | ||||||
|  | 				}) | ||||||
|  | 			}).then(({ data }) => { | ||||||
|  | 				if (data && data.code === 0) { | ||||||
|  | 					this.dataList = data.data.list | ||||||
|  | 					this.totalPage = data.data.total | ||||||
|  | 				} else { | ||||||
|  | 					this.dataList = [] | ||||||
|  | 					this.totalPage = 0 | ||||||
|  | 				} | ||||||
|  | 				this.dataListLoading = false | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 每页数 | ||||||
|  | 		sizeChangeHandle(val) { | ||||||
|  | 			this.pageSize = val | ||||||
|  | 			this.pageIndex = 1 | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 当前页 | ||||||
|  | 		currentChangeHandle(val) { | ||||||
|  | 			this.pageIndex = val | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 多选 | ||||||
|  | 		selectionChangeHandle(val) { | ||||||
|  | 			this.dataListSelections = val | ||||||
|  | 		}, | ||||||
|  | 		// 新增 / 修改 | ||||||
|  | 		addOrUpdateHandle(id) { | ||||||
|  | 			this.addOrUpdateVisible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs.addOrUpdate.init(id) | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 删除 | ||||||
|  | 		deleteHandle(id) { | ||||||
|  | 			var ids = id | ||||||
|  | 				? [id] | ||||||
|  | 				: this.dataListSelections.map(item => { | ||||||
|  | 						return item.id | ||||||
|  | 				  }) | ||||||
|  | 			this.$confirm(`${ i18n.t('prompt.info', { handle: id ? i18n.t('delete').toLowerCase() : i18n.t('deleteBatch').toLowerCase() }) }`, i18n.t('prompt.title'), { | ||||||
|  | 				confirmButtonText: i18n.t('confirm'), | ||||||
|  | 				cancelButtonText: i18n.t('cancel'), | ||||||
|  | 				type: 'warning' | ||||||
|  | 			}).then(() => { | ||||||
|  | 				this.$http({ | ||||||
|  | 					url: this.$http.adornUrl('/monitoring/reportSheet'), | ||||||
|  | 					method: 'delete', | ||||||
|  | 					data: this.$http.adornData(ids, false, 'raw') | ||||||
|  | 				}).then(({ data }) => { | ||||||
|  | 					if (data && data.code === 0) { | ||||||
|  | 						this.$message({ | ||||||
|  | 							message: i18n.t('prompt.success'), | ||||||
|  | 							type: 'success', | ||||||
|  | 							duration: 1500, | ||||||
|  | 							onClose: () => { | ||||||
|  | 								this.getDataList() | ||||||
|  | 							} | ||||||
|  | 						}) | ||||||
|  | 					} else { | ||||||
|  | 						this.$message.error(data.msg) | ||||||
|  | 					} | ||||||
|  | 				}) | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
| @@ -0,0 +1,170 @@ | |||||||
|  | <template> | ||||||
|  | 	<el-dialog :title="!dataForm.id ? i18n.t('add') : i18n.t('update')" :close-on-click-modal="false" :visible.sync="visible"> | ||||||
|  | 		<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" label-width="80px"> | ||||||
|  | 			<el-form-item label="编码" prop="code"> | ||||||
|  | 				<el-input v-model="dataForm.code" placeholder="编码"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="名称" prop="name"> | ||||||
|  | 				<el-input v-model="dataForm.name" placeholder="名称"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('desc')" prop="description"> | ||||||
|  | 				<el-input v-model="dataForm.description" :placeholder="$t('desc')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="外部编码,用于对照外部系统的编码" prop="externalCode"> | ||||||
|  | 				<el-input v-model="dataForm.externalCode" placeholder="外部编码,用于对照外部系统的编码"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="启用状态:0 、停用,1、启用" prop="enabled"> | ||||||
|  | 				<el-input v-model="dataForm.enabled" placeholder="启用状态:0 、停用,1、启用"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="备注" prop="remark"> | ||||||
|  | 				<el-input v-model="dataForm.remark" placeholder="备注"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="删除标志,是否有效:1 可用 0不可用" prop="valid"> | ||||||
|  | 				<el-input v-model="dataForm.valid" placeholder="删除标志,是否有效:1 可用 0不可用"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('creator')" prop="creatorId"> | ||||||
|  | 				<el-input v-model="dataForm.creatorId" :placeholder="$t('creator')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('creatorName')" prop="creatorName"> | ||||||
|  | 				<el-input v-model="dataForm.creatorName" :placeholder="$t('creatorName')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="创建时间" prop="createTime"> | ||||||
|  | 				<el-input v-model="dataForm.createTime" placeholder="创建时间"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('updator')" prop="updaterId"> | ||||||
|  | 				<el-input v-model="dataForm.updaterId" :placeholder="$t('updator')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('updatorName')" prop="updaterName"> | ||||||
|  | 				<el-input v-model="dataForm.updaterName" :placeholder="$t('updatorName')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('updateTime')" prop="updateTime"> | ||||||
|  | 				<el-input v-model="dataForm.updateTime" :placeholder="$t('updateTime')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('version')" prop="version"> | ||||||
|  | 				<el-input v-model="dataForm.version" :placeholder="$t('version')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  | 		<span slot="footer" class="dialog-footer"> | ||||||
|  | 			<el-button @click="visible = false">{{ $t('cancel') }}</el-button> | ||||||
|  | 			<el-button type="primary" @click="dataFormSubmit()">{{ $t('confirm') }}</el-button> | ||||||
|  | 		</span> | ||||||
|  | 	</el-dialog> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			visible: false, | ||||||
|  | 			dataForm: { | ||||||
|  | 				id: 0, | ||||||
|  | 				code: '', | ||||||
|  | 				name: '', | ||||||
|  | 				description: '', | ||||||
|  | 				externalCode: '', | ||||||
|  | 				enabled: '', | ||||||
|  | 				remark: '', | ||||||
|  | 				valid: '', | ||||||
|  | 				creatorId: '', | ||||||
|  | 				creatorName: '', | ||||||
|  | 				createTime: '', | ||||||
|  | 				updaterId: '', | ||||||
|  | 				updaterName: '', | ||||||
|  | 				updateTime: '', | ||||||
|  | 				version: '' | ||||||
|  | 			}, | ||||||
|  | 			dataRule: { | ||||||
|  | 				code: [{ required: true, message: '编码不能为空', trigger: 'blur' }], | ||||||
|  | 				name: [{ required: true, message: '名称不能为空', trigger: 'blur' }], | ||||||
|  | 				description: [{ required: true, message: '描述不能为空', trigger: 'blur' }], | ||||||
|  | 				externalCode: [{ required: true, message: '外部编码,用于对照外部系统的编码不能为空', trigger: 'blur' }], | ||||||
|  | 				enabled: [{ required: true, message: '启用状态:0 、停用,1、启用不能为空', trigger: 'blur' }], | ||||||
|  | 				remark: [{ required: true, message: '备注不能为空', trigger: 'blur' }], | ||||||
|  | 				valid: [{ required: true, message: '删除标志,是否有效:1 可用 0不可用不能为空', trigger: 'blur' }], | ||||||
|  | 				creatorId: [{ required: true, message: '创建人不能为空', trigger: 'blur' }], | ||||||
|  | 				creatorName: [{ required: true, message: '创建人姓名不能为空', trigger: 'blur' }], | ||||||
|  | 				createTime: [{ required: true, message: '创建时间不能为空', trigger: 'blur' }], | ||||||
|  | 				updaterId: [{ required: true, message: '更新人不能为空', trigger: 'blur' }], | ||||||
|  | 				updaterName: [{ required: true, message: '更新人姓名不能为空', trigger: 'blur' }], | ||||||
|  | 				updateTime: [{ required: true, message: '更新时间不能为空', trigger: 'blur' }], | ||||||
|  | 				version: [{ required: true, message: '版本号不能为空', trigger: 'blur' }] | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		init(id) { | ||||||
|  | 			this.dataForm.id = id || 0 | ||||||
|  | 			this.visible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs['dataForm'].resetFields() | ||||||
|  | 				if (this.dataForm.id) { | ||||||
|  | 					this.$http({ | ||||||
|  | 						url: this.$http.adornUrl(`/monitoring/reportSheetCategory/${this.dataForm.id}`), | ||||||
|  | 						method: 'get', | ||||||
|  | 						params: this.$http.adornParams() | ||||||
|  | 					}).then(({ data }) => { | ||||||
|  | 						if (data && data.code === 0) { | ||||||
|  | 							this.dataForm.code = data.reporsheecategory.code | ||||||
|  | 							this.dataForm.name = data.reporsheecategory.name | ||||||
|  | 							this.dataForm.description = data.reporsheecategory.description | ||||||
|  | 							this.dataForm.externalCode = data.reporsheecategory.externalCode | ||||||
|  | 							this.dataForm.enabled = data.reporsheecategory.enabled | ||||||
|  | 							this.dataForm.remark = data.reporsheecategory.remark | ||||||
|  | 							this.dataForm.valid = data.reporsheecategory.valid | ||||||
|  | 							this.dataForm.creatorId = data.reporsheecategory.creatorId | ||||||
|  | 							this.dataForm.creatorName = data.reporsheecategory.creatorName | ||||||
|  | 							this.dataForm.createTime = data.reporsheecategory.createTime | ||||||
|  | 							this.dataForm.updaterId = data.reporsheecategory.updaterId | ||||||
|  | 							this.dataForm.updaterName = data.reporsheecategory.updaterName | ||||||
|  | 							this.dataForm.updateTime = data.reporsheecategory.updateTime | ||||||
|  | 							this.dataForm.version = data.reporsheecategory.version | ||||||
|  | 						} | ||||||
|  | 					}) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 表单提交 | ||||||
|  | 		dataFormSubmit() { | ||||||
|  | 			this.$refs['dataForm'].validate(valid => { | ||||||
|  | 				if (valid) { | ||||||
|  | 					this.$http({ | ||||||
|  | 						url: this.$http.adornUrl(`/monitoring/reportSheetCategory/${!this.dataForm.id ? '' : this.dataForm.id}`), | ||||||
|  | 						method: this.dataForm.id ? 'put' : 'post', | ||||||
|  | 						data: this.$http.adornData({ | ||||||
|  | 							id: this.dataForm.id || undefined, | ||||||
|  | 							code: this.dataForm.code, | ||||||
|  | 							name: this.dataForm.name, | ||||||
|  | 							description: this.dataForm.description, | ||||||
|  | 							externalCode: this.dataForm.externalCode, | ||||||
|  | 							enabled: this.dataForm.enabled, | ||||||
|  | 							remark: this.dataForm.remark, | ||||||
|  | 							valid: this.dataForm.valid, | ||||||
|  | 							creatorId: this.dataForm.creatorId, | ||||||
|  | 							creatorName: this.dataForm.creatorName, | ||||||
|  | 							createTime: this.dataForm.createTime, | ||||||
|  | 							updaterId: this.dataForm.updaterId, | ||||||
|  | 							updaterName: this.dataForm.updaterName, | ||||||
|  | 							updateTime: this.dataForm.updateTime, | ||||||
|  | 							version: this.dataForm.version | ||||||
|  | 						}) | ||||||
|  | 					}).then(({ data }) => { | ||||||
|  | 						if (data && data.code === 0) { | ||||||
|  | 							this.$message({ | ||||||
|  | 								message: i18n.t('prompt.success'), | ||||||
|  | 								type: 'success', | ||||||
|  | 								duration: 1500, | ||||||
|  | 								onClose: () => { | ||||||
|  | 									this.visible = false | ||||||
|  | 									this.$emit('refreshDataList') | ||||||
|  | 								} | ||||||
|  | 							}) | ||||||
|  | 						} else { | ||||||
|  | 							this.$message.error(data.msg) | ||||||
|  | 						} | ||||||
|  | 					}) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										154
									
								
								src/views/modules/monitoring/reportSheetCategory.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										154
									
								
								src/views/modules/monitoring/reportSheetCategory.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,154 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="mod-config"> | ||||||
|  | 		<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)"> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-input v-model="dataForm.key" :placeholder="$t('parameter')" clearable></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item> | ||||||
|  | 				<el-button @click="currentChangeHandle(1)">{{ $t('query') }}</el-button> | ||||||
|  | 				<el-button v-if="$hasPermission('monitoring:reporsheecategory:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  |  | ||||||
|  | 		<base-table :page="pageIndex" :size="pageSize" :data="dataList" :table-head-configs="tableConfigs" :max-height="calcMaxHeight(8)" /> | ||||||
|  | 		<el-pagination | ||||||
|  | 			@size-change="sizeChangeHandle" | ||||||
|  | 			@current-change="currentChangeHandle" | ||||||
|  | 			:current-page="pageIndex" | ||||||
|  | 			:page-sizes="[10, 20, 50, 100]" | ||||||
|  | 			:page-size="pageSize" | ||||||
|  | 			:total="totalPage" | ||||||
|  | 			layout="total, sizes, prev, pager, next, jumper" | ||||||
|  | 		> | ||||||
|  | 		</el-pagination> | ||||||
|  | 		<!-- 弹窗, 新增 / 修改 --> | ||||||
|  | 		<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { calcMaxHeight } from '@/utils' | ||||||
|  | import { timeFilter } from '@/utils/filters' | ||||||
|  | import AddOrUpdate from './reportSheetCategory-add-or-update' | ||||||
|  | import i18n from '@/i18n' | ||||||
|  | import BaseTable from '@/components/base-table' | ||||||
|  | import TableOperateComponent from '@/components/base-table/components/operationComponent' | ||||||
|  | import TableTextComponent from '@/components/base-table/components/detailComponent' | ||||||
|  |  | ||||||
|  | const tableConfigs = [ | ||||||
|  | 	{ prop: 'createTime', name: i18n.t('createTime'), filter: timeFilter }, | ||||||
|  | 	{ prop: 'name', name: i18n.t('categoryName') }, | ||||||
|  | 	{ prop: 'code', name: i18n.t('categoryCode') }, | ||||||
|  | 	{ prop: 'operations', name: i18n.t('handle'), fixed: 'right', width: 180, subcomponent: TableOperateComponent, options: ['edit', 'delete'] } | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			calcMaxHeight, | ||||||
|  | 			tableConfigs, | ||||||
|  | 			dataForm: { | ||||||
|  | 				key: '' | ||||||
|  | 			}, | ||||||
|  | 			dataList: [], | ||||||
|  | 			pageIndex: 1, | ||||||
|  | 			pageSize: 10, | ||||||
|  | 			totalPage: 0, | ||||||
|  | 			dataListLoading: false, | ||||||
|  | 			dataListSelections: [], | ||||||
|  | 			addOrUpdateVisible: false | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	components: { | ||||||
|  | 		AddOrUpdate, | ||||||
|  | 		BaseTable | ||||||
|  | 	}, | ||||||
|  | 	activated() { | ||||||
|  | 		this.getDataList() | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		// destroy dialog | ||||||
|  | 		handleDestroyDialog() { | ||||||
|  | 			setTimeout(() => { | ||||||
|  | 				this.addOrUpdateVisible= false | ||||||
|  | 			}, /** after dialog animated */ 200); | ||||||
|  | 		}, | ||||||
|  | 		// 获取数据列表 | ||||||
|  | 		getDataList() { | ||||||
|  | 			this.dataListLoading = true | ||||||
|  | 			this.$http({ | ||||||
|  | 				url: this.$http.adornUrl('/monitoring/reportSheetCategory/page'), | ||||||
|  | 				method: 'get', | ||||||
|  | 				params: this.$http.adornParams({ | ||||||
|  | 					page: this.pageIndex, | ||||||
|  | 					limit: this.pageSize, | ||||||
|  | 					key: this.dataForm.key | ||||||
|  | 				}) | ||||||
|  | 			}).then(({ data }) => { | ||||||
|  | 				if (data && data.code === 0) { | ||||||
|  | 					this.dataList = data.data.list | ||||||
|  | 					this.totalPage = data.data.total | ||||||
|  | 				} else { | ||||||
|  | 					this.dataList = [] | ||||||
|  | 					this.totalPage = 0 | ||||||
|  | 				} | ||||||
|  | 				this.dataListLoading = false | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 每页数 | ||||||
|  | 		sizeChangeHandle(val) { | ||||||
|  | 			this.pageSize = val | ||||||
|  | 			this.pageIndex = 1 | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 当前页 | ||||||
|  | 		currentChangeHandle(val) { | ||||||
|  | 			this.pageIndex = val | ||||||
|  | 			this.getDataList() | ||||||
|  | 		}, | ||||||
|  | 		// 多选 | ||||||
|  | 		selectionChangeHandle(val) { | ||||||
|  | 			this.dataListSelections = val | ||||||
|  | 		}, | ||||||
|  | 		// 新增 / 修改 | ||||||
|  | 		addOrUpdateHandle(id) { | ||||||
|  | 			this.addOrUpdateVisible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs.addOrUpdate.init(id) | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 删除 | ||||||
|  | 		deleteHandle(id) { | ||||||
|  | 			var ids = id | ||||||
|  | 				? [id] | ||||||
|  | 				: this.dataListSelections.map(item => { | ||||||
|  | 						return item.id | ||||||
|  | 				  }) | ||||||
|  | 			this.$confirm(`${ i18n.t('prompt.info', { handle: id ? i18n.t('delete').toLowerCase() : i18n.t('deleteBatch').toLowerCase() }) }`, i18n.t('prompt.title'), { | ||||||
|  | 				confirmButtonText: i18n.t('confirm'), | ||||||
|  | 				cancelButtonText: i18n.t('cancel'), | ||||||
|  | 				type: 'warning' | ||||||
|  | 			}).then(() => { | ||||||
|  | 				this.$http({ | ||||||
|  | 					url: this.$http.adornUrl('/monitoring/reportSheetCategory'), | ||||||
|  | 					method: 'delete', | ||||||
|  | 					data: this.$http.adornData(ids, false, 'raw') | ||||||
|  | 				}).then(({ data }) => { | ||||||
|  | 					if (data && data.code === 0) { | ||||||
|  | 						this.$message({ | ||||||
|  | 							message: i18n.t('prompt.success'), | ||||||
|  | 							type: 'success', | ||||||
|  | 							duration: 1500, | ||||||
|  | 							onClose: () => { | ||||||
|  | 								this.getDataList() | ||||||
|  | 							} | ||||||
|  | 						}) | ||||||
|  | 					} else { | ||||||
|  | 						this.$message.error(data.msg) | ||||||
|  | 					} | ||||||
|  | 				}) | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										163
									
								
								src/views/modules/monitoring/sysFile-add-or-update.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										163
									
								
								src/views/modules/monitoring/sysFile-add-or-update.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,163 @@ | |||||||
|  | <template> | ||||||
|  | 	<el-dialog :title="!dataForm.id ? i18n.t('add') : i18n.t('update')" :close-on-click-modal="false" :visible.sync="visible"> | ||||||
|  | 		<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" label-width="80px"> | ||||||
|  | 			<el-form-item label="文件类型编号" prop="typeCode"> | ||||||
|  | 				<el-input v-model="dataForm.typeCode" placeholder="文件类型编号"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="文件编号" prop="fileCode"> | ||||||
|  | 				<el-input v-model="dataForm.fileCode" placeholder="文件编号"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="文件名称" prop="fileName"> | ||||||
|  | 				<el-input v-model="dataForm.fileName" placeholder="文件名称"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="文件路径URL" prop="fileUrl"> | ||||||
|  | 				<el-input v-model="dataForm.fileUrl" placeholder="文件路径URL"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="备注" prop="remark"> | ||||||
|  | 				<el-input v-model="dataForm.remark" placeholder="备注"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="删除标志,是否有效:1 可用 0不可用" prop="valid"> | ||||||
|  | 				<el-input v-model="dataForm.valid" placeholder="删除标志,是否有效:1 可用 0不可用"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('creator')" prop="creatorId"> | ||||||
|  | 				<el-input v-model="dataForm.creatorId" :placeholder="$t('creator')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('creatorName')" prop="creatorName"> | ||||||
|  | 				<el-input v-model="dataForm.creatorName" :placeholder="$t('creatorName')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="创建时间" prop="createTime"> | ||||||
|  | 				<el-input v-model="dataForm.createTime" placeholder="创建时间"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('updator')" prop="updaterId"> | ||||||
|  | 				<el-input v-model="dataForm.updaterId" :placeholder="$t('updator')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('updatorName')" prop="updaterName"> | ||||||
|  | 				<el-input v-model="dataForm.updaterName" :placeholder="$t('updatorName')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('updateTime')" prop="updateTime"> | ||||||
|  | 				<el-input v-model="dataForm.updateTime" :placeholder="$t('updateTime')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('version')" prop="version"> | ||||||
|  | 				<el-input v-model="dataForm.version" :placeholder="$t('version')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  | 		<span slot="footer" class="dialog-footer"> | ||||||
|  | 			<el-button @click="visible = false">{{ $t('cancel') }}</el-button> | ||||||
|  | 			<el-button type="primary" @click="dataFormSubmit()">{{ $t('confirm') }}</el-button> | ||||||
|  | 		</span> | ||||||
|  | 	</el-dialog> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			visible: false, | ||||||
|  | 			dataForm: { | ||||||
|  | 				id: 0, | ||||||
|  | 				typeCode: '', | ||||||
|  | 				fileCode: '', | ||||||
|  | 				fileName: '', | ||||||
|  | 				fileUrl: '', | ||||||
|  | 				remark: '', | ||||||
|  | 				valid: '', | ||||||
|  | 				creatorId: '', | ||||||
|  | 				creatorName: '', | ||||||
|  | 				createTime: '', | ||||||
|  | 				updaterId: '', | ||||||
|  | 				updaterName: '', | ||||||
|  | 				updateTime: '', | ||||||
|  | 				version: '' | ||||||
|  | 			}, | ||||||
|  | 			dataRule: { | ||||||
|  | 				typeCode: [{ required: true, message: '文件类型编号不能为空', trigger: 'blur' }], | ||||||
|  | 				fileCode: [{ required: true, message: '文件编号不能为空', trigger: 'blur' }], | ||||||
|  | 				fileName: [{ required: true, message: '文件名称不能为空', trigger: 'blur' }], | ||||||
|  | 				fileUrl: [{ required: true, message: '文件路径URL不能为空', trigger: 'blur' }], | ||||||
|  | 				remark: [{ required: true, message: '备注不能为空', trigger: 'blur' }], | ||||||
|  | 				valid: [{ required: true, message: '删除标志,是否有效:1 可用 0不可用不能为空', trigger: 'blur' }], | ||||||
|  | 				creatorId: [{ required: true, message: '创建人不能为空', trigger: 'blur' }], | ||||||
|  | 				creatorName: [{ required: true, message: '创建人姓名不能为空', trigger: 'blur' }], | ||||||
|  | 				createTime: [{ required: true, message: '创建时间不能为空', trigger: 'blur' }], | ||||||
|  | 				updaterId: [{ required: true, message: '更新人不能为空', trigger: 'blur' }], | ||||||
|  | 				updaterName: [{ required: true, message: '更新人姓名不能为空', trigger: 'blur' }], | ||||||
|  | 				updateTime: [{ required: true, message: '更新时间不能为空', trigger: 'blur' }], | ||||||
|  | 				version: [{ required: true, message: '版本号不能为空', trigger: 'blur' }] | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		init(id) { | ||||||
|  | 			this.dataForm.id = id || 0 | ||||||
|  | 			this.visible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs['dataForm'].resetFields() | ||||||
|  | 				if (this.dataForm.id) { | ||||||
|  | 					this.$http({ | ||||||
|  | 						url: this.$http.adornUrl(`/monitoring/sysFile/${this.dataForm.id}`), | ||||||
|  | 						method: 'get', | ||||||
|  | 						params: this.$http.adornParams() | ||||||
|  | 					}).then(({ data }) => { | ||||||
|  | 						if (data && data.code === 0) { | ||||||
|  | 							this.dataForm.typeCode = data.sysFile.typeCode | ||||||
|  | 							this.dataForm.fileCode = data.sysFile.fileCode | ||||||
|  | 							this.dataForm.fileName = data.sysFile.fileName | ||||||
|  | 							this.dataForm.fileUrl = data.sysFile.fileUrl | ||||||
|  | 							this.dataForm.remark = data.sysFile.remark | ||||||
|  | 							this.dataForm.valid = data.sysFile.valid | ||||||
|  | 							this.dataForm.creatorId = data.sysFile.creatorId | ||||||
|  | 							this.dataForm.creatorName = data.sysFile.creatorName | ||||||
|  | 							this.dataForm.createTime = data.sysFile.createTime | ||||||
|  | 							this.dataForm.updaterId = data.sysFile.updaterId | ||||||
|  | 							this.dataForm.updaterName = data.sysFile.updaterName | ||||||
|  | 							this.dataForm.updateTime = data.sysFile.updateTime | ||||||
|  | 							this.dataForm.version = data.sysFile.version | ||||||
|  | 						} | ||||||
|  | 					}) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 表单提交 | ||||||
|  | 		dataFormSubmit() { | ||||||
|  | 			this.$refs['dataForm'].validate(valid => { | ||||||
|  | 				if (valid) { | ||||||
|  | 					this.$http({ | ||||||
|  | 						url: this.$http.adornUrl(`/monitoring/sysFile/${!this.dataForm.id ? '' : this.dataForm.id}`), | ||||||
|  | 						method: this.dataForm.id ? 'put' : 'post', | ||||||
|  | 						data: this.$http.adornData({ | ||||||
|  | 							id: this.dataForm.id || undefined, | ||||||
|  | 							typeCode: this.dataForm.typeCode, | ||||||
|  | 							fileCode: this.dataForm.fileCode, | ||||||
|  | 							fileName: this.dataForm.fileName, | ||||||
|  | 							fileUrl: this.dataForm.fileUrl, | ||||||
|  | 							remark: this.dataForm.remark, | ||||||
|  | 							valid: this.dataForm.valid, | ||||||
|  | 							creatorId: this.dataForm.creatorId, | ||||||
|  | 							creatorName: this.dataForm.creatorName, | ||||||
|  | 							createTime: this.dataForm.createTime, | ||||||
|  | 							updaterId: this.dataForm.updaterId, | ||||||
|  | 							updaterName: this.dataForm.updaterName, | ||||||
|  | 							updateTime: this.dataForm.updateTime, | ||||||
|  | 							version: this.dataForm.version | ||||||
|  | 						}) | ||||||
|  | 					}).then(({ data }) => { | ||||||
|  | 						if (data && data.code === 0) { | ||||||
|  | 							this.$message({ | ||||||
|  | 								message: i18n.t('prompt.success'), | ||||||
|  | 								type: 'success', | ||||||
|  | 								duration: 1500, | ||||||
|  | 								onClose: () => { | ||||||
|  | 									this.visible = false | ||||||
|  | 									this.$emit('refreshDataList') | ||||||
|  | 								} | ||||||
|  | 							}) | ||||||
|  | 						} else { | ||||||
|  | 							this.$message.error(data.msg) | ||||||
|  | 						} | ||||||
|  | 					}) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										149
									
								
								src/views/modules/monitoring/sysFileType-add-or-update.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										149
									
								
								src/views/modules/monitoring/sysFileType-add-or-update.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,149 @@ | |||||||
|  | <template> | ||||||
|  | 	<el-dialog :title="!dataForm.id ? i18n.t('add') : i18n.t('update')" :close-on-click-modal="false" :visible.sync="visible"> | ||||||
|  | 		<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" label-width="80px"> | ||||||
|  | 			<el-form-item label="文件类型编号" prop="typeCode"> | ||||||
|  | 				<el-input v-model="dataForm.typeCode" placeholder="文件类型编号"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="文件类型名称" prop="typeName"> | ||||||
|  | 				<el-input v-model="dataForm.typeName" placeholder="文件类型名称"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="备注" prop="remark"> | ||||||
|  | 				<el-input v-model="dataForm.remark" placeholder="备注"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="删除标志,是否有效:1 可用 0不可用" prop="valid"> | ||||||
|  | 				<el-input v-model="dataForm.valid" placeholder="删除标志,是否有效:1 可用 0不可用"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('creator')" prop="creatorId"> | ||||||
|  | 				<el-input v-model="dataForm.creatorId" :placeholder="$t('creator')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('creatorName')" prop="creatorName"> | ||||||
|  | 				<el-input v-model="dataForm.creatorName" :placeholder="$t('creatorName')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item label="创建时间" prop="createTime"> | ||||||
|  | 				<el-input v-model="dataForm.createTime" placeholder="创建时间"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('updator')" prop="updaterId"> | ||||||
|  | 				<el-input v-model="dataForm.updaterId" :placeholder="$t('updator')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('updatorName')" prop="updaterName"> | ||||||
|  | 				<el-input v-model="dataForm.updaterName" :placeholder="$t('updatorName')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('updateTime')" prop="updateTime"> | ||||||
|  | 				<el-input v-model="dataForm.updateTime" :placeholder="$t('updateTime')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 			<el-form-item :label="$t('version')" prop="version"> | ||||||
|  | 				<el-input v-model="dataForm.version" :placeholder="$t('version')"></el-input> | ||||||
|  | 			</el-form-item> | ||||||
|  | 		</el-form> | ||||||
|  | 		<span slot="footer" class="dialog-footer"> | ||||||
|  | 			<el-button @click="visible = false">{{ $t('cancel') }}</el-button> | ||||||
|  | 			<el-button type="primary" @click="dataFormSubmit()">{{ $t('confirm') }}</el-button> | ||||||
|  | 		</span> | ||||||
|  | 	</el-dialog> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | export default { | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			visible: false, | ||||||
|  | 			dataForm: { | ||||||
|  | 				id: 0, | ||||||
|  | 				typeCode: '', | ||||||
|  | 				typeName: '', | ||||||
|  | 				remark: '', | ||||||
|  | 				valid: '', | ||||||
|  | 				creatorId: '', | ||||||
|  | 				creatorName: '', | ||||||
|  | 				createTime: '', | ||||||
|  | 				updaterId: '', | ||||||
|  | 				updaterName: '', | ||||||
|  | 				updateTime: '', | ||||||
|  | 				version: '' | ||||||
|  | 			}, | ||||||
|  | 			dataRule: { | ||||||
|  | 				typeCode: [{ required: true, message: '文件类型编号不能为空', trigger: 'blur' }], | ||||||
|  | 				typeName: [{ required: true, message: '文件类型名称不能为空', trigger: 'blur' }], | ||||||
|  | 				remark: [{ required: true, message: '备注不能为空', trigger: 'blur' }], | ||||||
|  | 				valid: [{ required: true, message: '删除标志,是否有效:1 可用 0不可用不能为空', trigger: 'blur' }], | ||||||
|  | 				creatorId: [{ required: true, message: '创建人不能为空', trigger: 'blur' }], | ||||||
|  | 				creatorName: [{ required: true, message: '创建人姓名不能为空', trigger: 'blur' }], | ||||||
|  | 				createTime: [{ required: true, message: '创建时间不能为空', trigger: 'blur' }], | ||||||
|  | 				updaterId: [{ required: true, message: '更新人不能为空', trigger: 'blur' }], | ||||||
|  | 				updaterName: [{ required: true, message: '更新人姓名不能为空', trigger: 'blur' }], | ||||||
|  | 				updateTime: [{ required: true, message: '更新时间不能为空', trigger: 'blur' }], | ||||||
|  | 				version: [{ required: true, message: '版本号不能为空', trigger: 'blur' }] | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		init(id) { | ||||||
|  | 			this.dataForm.id = id || 0 | ||||||
|  | 			this.visible = true | ||||||
|  | 			this.$nextTick(() => { | ||||||
|  | 				this.$refs['dataForm'].resetFields() | ||||||
|  | 				if (this.dataForm.id) { | ||||||
|  | 					this.$http({ | ||||||
|  | 						url: this.$http.adornUrl(`/monitoring/sysFileType/${this.dataForm.id}`), | ||||||
|  | 						method: 'get', | ||||||
|  | 						params: this.$http.adornParams() | ||||||
|  | 					}).then(({ data }) => { | ||||||
|  | 						if (data && data.code === 0) { | ||||||
|  | 							this.dataForm.typeCode = data.sysFileType.typeCode | ||||||
|  | 							this.dataForm.typeName = data.sysFileType.typeName | ||||||
|  | 							this.dataForm.remark = data.sysFileType.remark | ||||||
|  | 							this.dataForm.valid = data.sysFileType.valid | ||||||
|  | 							this.dataForm.creatorId = data.sysFileType.creatorId | ||||||
|  | 							this.dataForm.creatorName = data.sysFileType.creatorName | ||||||
|  | 							this.dataForm.createTime = data.sysFileType.createTime | ||||||
|  | 							this.dataForm.updaterId = data.sysFileType.updaterId | ||||||
|  | 							this.dataForm.updaterName = data.sysFileType.updaterName | ||||||
|  | 							this.dataForm.updateTime = data.sysFileType.updateTime | ||||||
|  | 							this.dataForm.version = data.sysFileType.version | ||||||
|  | 						} | ||||||
|  | 					}) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}, | ||||||
|  | 		// 表单提交 | ||||||
|  | 		dataFormSubmit() { | ||||||
|  | 			this.$refs['dataForm'].validate(valid => { | ||||||
|  | 				if (valid) { | ||||||
|  | 					this.$http({ | ||||||
|  | 						url: this.$http.adornUrl(`/monitoring/sysFileType/${!this.dataForm.id ? '' : this.dataForm.id}`), | ||||||
|  | 						method: this.dataForm.id ? 'put' : 'post', | ||||||
|  | 						data: this.$http.adornData({ | ||||||
|  | 							id: this.dataForm.id || undefined, | ||||||
|  | 							typeCode: this.dataForm.typeCode, | ||||||
|  | 							typeName: this.dataForm.typeName, | ||||||
|  | 							remark: this.dataForm.remark, | ||||||
|  | 							valid: this.dataForm.valid, | ||||||
|  | 							creatorId: this.dataForm.creatorId, | ||||||
|  | 							creatorName: this.dataForm.creatorName, | ||||||
|  | 							createTime: this.dataForm.createTime, | ||||||
|  | 							updaterId: this.dataForm.updaterId, | ||||||
|  | 							updaterName: this.dataForm.updaterName, | ||||||
|  | 							updateTime: this.dataForm.updateTime, | ||||||
|  | 							version: this.dataForm.version | ||||||
|  | 						}) | ||||||
|  | 					}).then(({ data }) => { | ||||||
|  | 						if (data && data.code === 0) { | ||||||
|  | 							this.$message({ | ||||||
|  | 								message: i18n.t('prompt.success'), | ||||||
|  | 								type: 'success', | ||||||
|  | 								duration: 1500, | ||||||
|  | 								onClose: () => { | ||||||
|  | 									this.visible = false | ||||||
|  | 									this.$emit('refreshDataList') | ||||||
|  | 								} | ||||||
|  | 							}) | ||||||
|  | 						} else { | ||||||
|  | 							this.$message.error(data.msg) | ||||||
|  | 						} | ||||||
|  | 					}) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </script> | ||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user