update 设备产量时序图
This commit is contained in:
		| @@ -0,0 +1,49 @@ | |||||||
|  | <!--  | ||||||
|  |     filename: lineChart.vue | ||||||
|  |     author: liubin | ||||||
|  |     date: 2023-09-04 13:45:00 | ||||||
|  |     description:  | ||||||
|  | --> | ||||||
|  |  | ||||||
|  | <template> | ||||||
|  | 	<div class="line-chart"></div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import * as echarts from 'echarts'; | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  | 	name: 'LineChart', | ||||||
|  | 	components: {}, | ||||||
|  | 	props: ['config'], | ||||||
|  | 	data() { | ||||||
|  | 		return { | ||||||
|  | 			chart: null, | ||||||
|  | 		}; | ||||||
|  | 	}, | ||||||
|  | 	computed: {}, | ||||||
|  | 	mounted() { | ||||||
|  | 		this.init(); | ||||||
|  | 	}, | ||||||
|  | 	beforeDestroy() { | ||||||
|  | 		if (this.chart) { | ||||||
|  | 			this.chart.dispose(); | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	methods: { | ||||||
|  | 		init() { | ||||||
|  | 			console.log('thsi el', this.$el); | ||||||
|  | 			if (!this.chart) this.chart = echarts.init(this.$el); | ||||||
|  | 			this.chart.setOption(this.config); | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | }; | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style scoped lang="scss"> | ||||||
|  | .line-chart { | ||||||
|  | 	padding: 0 12px; | ||||||
|  | 	// background: #e1e1e1; | ||||||
|  | 	min-height: 320px; | ||||||
|  | } | ||||||
|  | </style> | ||||||
| @@ -15,46 +15,10 @@ | |||||||
| 			@headBtnClick="handleSearchBarBtnClick" /> | 			@headBtnClick="handleSearchBarBtnClick" /> | ||||||
|  |  | ||||||
| 		<div class="main-area"> | 		<div class="main-area"> | ||||||
| 			<div class="legend-row"> |  | ||||||
| 				<div class="legend"> |  | ||||||
| 					<div class="icon running"></div> |  | ||||||
| 					<div>运行中</div> |  | ||||||
| 				</div> |  | ||||||
| 				<!-- <div class="legend"> |  | ||||||
| 					<div class="icon waiting"></div> |  | ||||||
| 					<div>待机</div> |  | ||||||
| 				</div> --> |  | ||||||
| 				<div class="legend"> |  | ||||||
| 					<div class="icon fault"></div> |  | ||||||
| 					<div>故障</div> |  | ||||||
| 				</div> |  | ||||||
| 				<!-- <div class="legend"> |  | ||||||
| 					<div class="icon lack"></div> |  | ||||||
| 					<div>缺料</div> |  | ||||||
| 				</div> |  | ||||||
| 				<div class="legend"> |  | ||||||
| 					<div class="icon full"></div> |  | ||||||
| 					<div>满料</div> |  | ||||||
| 				</div> --> |  | ||||||
| 				<div class="legend"> |  | ||||||
| 					<div class="icon stop"></div> |  | ||||||
| 					<div>计划停机</div> |  | ||||||
| 				</div> |  | ||||||
| 			</div> |  | ||||||
| 			<div class="graphs" v-if="graphList.length"> | 			<div class="graphs" v-if="graphList.length"> | ||||||
| 				<div class="graph" v-for="eq in graphList" :key="eq.key"> | 				<div class="graph" v-for="eq,index in graphList" :key="eq.key"> | ||||||
| 					<h2 class="graph-title">{{ eq.key }}</h2> | 					<h2 class="graph-title">{{ eq.key }}</h2> | ||||||
| 					<div | 					<LineChart :key="eq.key + '__linechart'" :config="getRealConfig(index)" /> | ||||||
| 						v-for="blc in eq" |  | ||||||
| 						:key="blc.startTime" |  | ||||||
| 						class="graph-item-fixed tick" |  | ||||||
| 						:class="{ |  | ||||||
| 							running: blc.status == 0, |  | ||||||
| 							fault: blc.status == 2, |  | ||||||
| 							stop: blc.status == 1, |  | ||||||
| 						}" |  | ||||||
| 						:style="{ width: blc.duration * 2 + 'px' }" |  | ||||||
| 						:data-time="new Date(blc.startTime).toLocaleTimeString()"></div> |  | ||||||
| 				</div> | 				</div> | ||||||
| 			</div> | 			</div> | ||||||
| 			<h2 v-else>请添加设备</h2> | 			<h2 v-else>请添加设备</h2> | ||||||
| @@ -63,9 +27,11 @@ | |||||||
| </template> | </template> | ||||||
|  |  | ||||||
| <script> | <script> | ||||||
|  | import LineChart from './components/lineChart.vue'; | ||||||
|  |  | ||||||
| export default { | export default { | ||||||
| 	name: 'SGProduction', | 	name: 'SGProduction', | ||||||
| 	components: {}, | 	components: { LineChart }, | ||||||
| 	props: {}, | 	props: {}, | ||||||
| 	data() { | 	data() { | ||||||
| 		return { | 		return { | ||||||
| @@ -119,9 +85,57 @@ export default { | |||||||
| 			queryParams: { | 			queryParams: { | ||||||
| 				lineId: null, | 				lineId: null, | ||||||
| 				sectionId: null, | 				sectionId: null, | ||||||
|  | 				equipmentId: null, | ||||||
| 				recordTime: [], | 				recordTime: [], | ||||||
| 			}, | 			}, | ||||||
| 			graphList: [], | 			graphList: [], | ||||||
|  | 			templateConfig: { | ||||||
|  | 				grid: { | ||||||
|  | 					top: 88, | ||||||
|  | 					left: 56, | ||||||
|  | 					right: 56, | ||||||
|  | 					bottom: 56, | ||||||
|  | 				}, | ||||||
|  | 				legend: { | ||||||
|  | 					top: 0, | ||||||
|  | 					left: 0, | ||||||
|  | 					padding: 5, | ||||||
|  | 					icon: 'roundRect', | ||||||
|  | 					itemWidth: 12, | ||||||
|  | 					itemHeight: 12, | ||||||
|  | 					itemGap: 20, | ||||||
|  | 					textStyle: { | ||||||
|  | 						fontSize: 14, | ||||||
|  | 						lineHeight: 14, | ||||||
|  | 					}, | ||||||
|  | 				}, | ||||||
|  | 				xAxis: { | ||||||
|  | 					type: 'category', | ||||||
|  | 					data: Array(24) | ||||||
|  | 						.fill(1) | ||||||
|  | 						.map((item, index) => `${index}:00`), | ||||||
|  | 				}, | ||||||
|  | 				yAxis: { | ||||||
|  | 					type: 'value', | ||||||
|  | 					name: '产量', | ||||||
|  | 					nameLocation: 'end', | ||||||
|  | 					nameTextStyle: { | ||||||
|  | 						fontSize: 14, | ||||||
|  | 						align: 'right', | ||||||
|  | 					}, | ||||||
|  | 					nameGap: 26, | ||||||
|  | 				}, | ||||||
|  | 				series: [ | ||||||
|  | 					{ | ||||||
|  | 						name: '产线1', | ||||||
|  | 						data: Array(24) | ||||||
|  | 							.fill(1) | ||||||
|  | 							.map(() => Math.random() * 100), | ||||||
|  | 						type: 'line', | ||||||
|  | 						smooth: true, | ||||||
|  | 					}, | ||||||
|  | 				], | ||||||
|  | 			}, | ||||||
| 		}; | 		}; | ||||||
| 	}, | 	}, | ||||||
| 	created() { | 	created() { | ||||||
| @@ -130,25 +144,91 @@ export default { | |||||||
| 		this.getList(); | 		this.getList(); | ||||||
| 	}, | 	}, | ||||||
| 	methods: { | 	methods: { | ||||||
|  | 		handleSearchBarBtnClick({ btnName, ...payload }) { | ||||||
|  | 			switch (btnName) { | ||||||
|  | 				case 'search': | ||||||
|  | 					this.queryParams.lineId = payload.lineId || null; | ||||||
|  | 					this.queryParams.sectionId = payload.sectionId || null; | ||||||
|  | 					this.queryParams.equipmentId = payload.equipmentId || null; | ||||||
|  | 					this.queryParams.recordTime = payload.recordTime || null; | ||||||
|  | 					this.getList(); | ||||||
|  | 					break; | ||||||
|  | 				case 'compare': | ||||||
|  | 					this.$message.info('暂未实现该接口'); | ||||||
|  | 					break; | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  |  | ||||||
| 		/** 重置查询条件 */ | 		/** 重置查询条件 */ | ||||||
| 		initQuery() { | 		initQuery() { | ||||||
| 			this.queryParams.lineId = null; | 			this.queryParams.lineId = null; | ||||||
| 			this.queryParams.sectionId = null; | 			this.queryParams.sectionId = null; | ||||||
|  | 			this.queryParams.equipmentId = null; | ||||||
| 			this.queryParams.recordTime = []; | 			this.queryParams.recordTime = []; | ||||||
| 		}, | 		}, | ||||||
|  |  | ||||||
|  | 		/** 对象到数组的转换 */ | ||||||
|  | 		objectToArray(obj) { | ||||||
|  | 			return Object.keys(obj).map((key) => { | ||||||
|  | 				obj[key].sort((a, b) => a.startTime - b.startTime); | ||||||
|  | 				obj[key].key = key; | ||||||
|  | 				return obj[key]; | ||||||
|  | 			}); | ||||||
|  | 		}, | ||||||
|  |  | ||||||
| 		async getList() { | 		async getList() { | ||||||
| 			const { code, data } = await this.$axios({ | 			const { code, data } = await this.$axios({ | ||||||
| 				url: '/analysis/equipment-analysis/status', | 				url: '/analysis/equipment-analysis/quantity', | ||||||
| 				method: 'get', | 				method: 'get', | ||||||
| 				params: this.queryParams, | 				params: this.queryParams, | ||||||
| 			}); | 			}); | ||||||
| 			if (code == 0) { | 			if (code == 0) { | ||||||
| 				this.graphList = data; | 				this.graphList = this.objectToArray(data); | ||||||
|  | 				// const eq1 = [ | ||||||
|  | 				// 	{ totalQuantity: 20, startTime: 1693964578000 }, | ||||||
|  | 				// 	{ totalQuantity: 43, startTime: 1693964678000 }, | ||||||
|  | 				// 	{ totalQuantity: 12, startTime: 1693964778000 }, | ||||||
|  | 				// 	{ totalQuantity: 11, startTime: 1693964878000 }, | ||||||
|  | 				// 	{ totalQuantity: 98, startTime: 1693965478000 }, | ||||||
|  | 				// 	{ totalQuantity: 87, startTime: 1693965578000 }, | ||||||
|  | 				// ]; | ||||||
|  | 				// eq1.key = 'SS1'; | ||||||
|  | 				// const eq2 = [ | ||||||
|  | 				// 	{ totalQuantity: 23, startTime: 1693961578000 }, | ||||||
|  | 				// 	{ totalQuantity: 42, startTime: 1693964578000 }, | ||||||
|  | 				// 	{ totalQuantity: 51, startTime: 1693965578000 }, | ||||||
|  | 				// 	{ totalQuantity: 18, startTime: 1693966578000 }, | ||||||
|  | 				// 	{ totalQuantity: 77, startTime: 1693966778000 }, | ||||||
|  | 				// 	{ totalQuantity: 38, startTime: 1693967578000 }, | ||||||
|  | 				// 	{ totalQuantity: 57, startTime: 1693969578000 }, | ||||||
|  | 				// ]; | ||||||
|  | 				// eq2.key = 'SS2'; | ||||||
|  | 				// this.graphList = [eq1, eq2]; | ||||||
| 				console.log('graph list', this.graphList); | 				console.log('graph list', this.graphList); | ||||||
| 			} | 			} | ||||||
| 		}, | 		}, | ||||||
|  |  | ||||||
|  | 		/** 获得设备产量 */ | ||||||
|  | 		getEquipmentQuantity(equipmentArr) { | ||||||
|  | 			return equipmentArr.map((item) => item.totalQuantity); | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		/** 获得设备产量的时间 */ | ||||||
|  | 		getTimeinfo(equipmentArr) { | ||||||
|  | 			return equipmentArr.map((item) => new Date(item.startTime).toLocaleTimeString()); | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		getRealConfig(index) { | ||||||
|  | 			// if (!this.graphList || this.graphList.length == 0) return; | ||||||
|  | 			const config = JSON.parse(JSON.stringify(this.templateConfig)); | ||||||
|  | 			// config.legend.data = this.graphList[index].key; | ||||||
|  | 			config.series[0].name = this.graphList[index]?.key; | ||||||
|  | 			// console.log("this.graphList?.[index]", this.graphList?.[index]); | ||||||
|  | 			config.series[0].data = this.getEquipmentQuantity(this.graphList?.[index] || []); | ||||||
|  | 			config.xAxis.data = this.getTimeinfo(this.graphList?.[index] || []); | ||||||
|  | 			return config; | ||||||
|  | 		}, | ||||||
|  |  | ||||||
| 		/** 准备产线数据 */ | 		/** 准备产线数据 */ | ||||||
| 		async initProductline() { | 		async initProductline() { | ||||||
| 			const { code, data } = await this.$axios({ | 			const { code, data } = await this.$axios({ | ||||||
|   | |||||||
| @@ -173,6 +173,7 @@ export default { | |||||||
| 			queryParams: { | 			queryParams: { | ||||||
| 				lineId: null, | 				lineId: null, | ||||||
| 				sectionId: null, | 				sectionId: null, | ||||||
|  | 				equipmentId: null, | ||||||
| 				recordTime: [], | 				recordTime: [], | ||||||
| 			}, | 			}, | ||||||
| 			graphList: [], | 			graphList: [], | ||||||
| @@ -208,6 +209,7 @@ export default { | |||||||
| 		/** 重置查询条件 */ | 		/** 重置查询条件 */ | ||||||
| 		initQuery() { | 		initQuery() { | ||||||
| 			this.queryParams.lineId = null; | 			this.queryParams.lineId = null; | ||||||
|  | 			this.queryParams.equipmentId = null; | ||||||
| 			this.queryParams.sectionId = null; | 			this.queryParams.sectionId = null; | ||||||
| 			this.queryParams.recordTime = []; | 			this.queryParams.recordTime = []; | ||||||
| 		}, | 		}, | ||||||
| @@ -270,6 +272,7 @@ export default { | |||||||
| 				case 'search': | 				case 'search': | ||||||
| 					this.queryParams.lineId = payload.lineId || null; | 					this.queryParams.lineId = payload.lineId || null; | ||||||
| 					this.queryParams.sectionId = payload.sectionId || null; | 					this.queryParams.sectionId = payload.sectionId || null; | ||||||
|  | 					this.queryParams.equipmentId = payload.equipmentId || null; | ||||||
| 					this.queryParams.recordTime = payload.recordTime || null; | 					this.queryParams.recordTime = payload.recordTime || null; | ||||||
| 					this.getList(); | 					this.getList(); | ||||||
| 					break; | 					break; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user