271 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			271 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
<template>
 | 
						|
	<div class="app-container">
 | 
						|
		<search-bar
 | 
						|
			:formConfigs="formConfig"
 | 
						|
			ref="searchBarForm"
 | 
						|
			@headBtnClick="buttonClick" />
 | 
						|
 | 
						|
		<div v-if="tableData.length">
 | 
						|
			<el-tabs
 | 
						|
				v-model="activeName"
 | 
						|
				@tab-click="handleTabClick"
 | 
						|
				style="height: 100%">
 | 
						|
				<el-tab-pane :label="'\u2002数据列表\u2002'" name="table">
 | 
						|
					<!-- @emitFun="handleEmitFun"> -->
 | 
						|
					<base-table
 | 
						|
						v-if="mode == 'table'"
 | 
						|
						:span-method="mergeColumnHandler"
 | 
						|
						:page="1"
 | 
						|
						:limit="999"
 | 
						|
						:table-props="tableProps"
 | 
						|
						:table-data="tableData" />
 | 
						|
				</el-tab-pane>
 | 
						|
				<el-tab-pane :label="'\u3000产线平衡分析图\u3000'" name="graph">
 | 
						|
					<div class="graph" style="height: 100%">
 | 
						|
						<!-- graph  -->
 | 
						|
						<!-- <Graph
 | 
						|
										v-if="list.length"
 | 
						|
										:equipment-list="list"
 | 
						|
										:render="renderKey" /> -->
 | 
						|
						<BalanceChart ref="lineChart" />
 | 
						|
						<div v-if="list.length == 0" class="no-data-bg"></div>
 | 
						|
					</div>
 | 
						|
				</el-tab-pane>
 | 
						|
			</el-tabs>
 | 
						|
 | 
						|
			<!-- <SearchBar :formConfigs="[{ label: '产线平衡分析图', type: 'title' }]" /> -->
 | 
						|
		</div>
 | 
						|
		<div v-else class="no-data-bg"></div>
 | 
						|
	</div>
 | 
						|
</template>
 | 
						|
 | 
						|
<script>
 | 
						|
import { getCT } from '@/api/core/analysis/index';
 | 
						|
import { getCorePLList } from '@/api/base/coreProductionLine';
 | 
						|
import BalanceChart from '../balanceChart';
 | 
						|
 | 
						|
export default {
 | 
						|
	components: {
 | 
						|
		BalanceChart,
 | 
						|
	},
 | 
						|
	// mixins: [basicPage],
 | 
						|
	data() {
 | 
						|
		return {
 | 
						|
			urlOptions: {
 | 
						|
				getDataListURL: getCT,
 | 
						|
			},
 | 
						|
			activeName: 'table',
 | 
						|
			tableProps: [],
 | 
						|
 | 
						|
			tableData: [],
 | 
						|
			listQuery: {
 | 
						|
				// time: ''
 | 
						|
				endTime: undefined,
 | 
						|
				lineId: undefined,
 | 
						|
				startTime: undefined,
 | 
						|
			},
 | 
						|
			timeList: [],
 | 
						|
			spanArr: [],
 | 
						|
			xData: [],
 | 
						|
			yData: [],
 | 
						|
			optionArrUrl: [getCorePLList],
 | 
						|
			formConfig: [
 | 
						|
				{
 | 
						|
					type: 'select',
 | 
						|
					label: '产线',
 | 
						|
					selectOptions: [],
 | 
						|
					param: 'lineIds',
 | 
						|
					defaultSelect: '',
 | 
						|
					multiple: false,
 | 
						|
					filterable: true,
 | 
						|
				},
 | 
						|
				{
 | 
						|
					type: 'datePicker',
 | 
						|
					label: '时间',
 | 
						|
					dateType: 'datetimerange',
 | 
						|
					format: 'yyyy-MM-dd',
 | 
						|
					valueFormat: 'yyyy-MM-dd HH:mm:ss',
 | 
						|
					rangeSeparator: '-',
 | 
						|
					startPlaceholder: '开始时间',
 | 
						|
					endPlaceholder: '结束时间',
 | 
						|
					width: 350,
 | 
						|
					param: 'time',
 | 
						|
				},
 | 
						|
				{
 | 
						|
					type: 'button',
 | 
						|
					btnName: '查询',
 | 
						|
					name: 'search',
 | 
						|
					color: 'primary',
 | 
						|
				},
 | 
						|
			],
 | 
						|
		};
 | 
						|
	},
 | 
						|
	created() {
 | 
						|
		this.getArr();
 | 
						|
	},
 | 
						|
	methods: {
 | 
						|
		handleTabClick(tab, event) {
 | 
						|
			if (tab.name == 'graph') this.renderKey = Math.random();
 | 
						|
		},
 | 
						|
 | 
						|
		getArr() {
 | 
						|
			const params = {
 | 
						|
				page: 1,
 | 
						|
				limit: 500,
 | 
						|
			};
 | 
						|
			this.optionArrUrl.forEach((item, index) => {
 | 
						|
				item(params).then((response) => {
 | 
						|
					this.formConfig[index].selectOptions = response.data;
 | 
						|
				});
 | 
						|
			});
 | 
						|
		},
 | 
						|
		setRowSpan(arr) {
 | 
						|
			let count = 0;
 | 
						|
			arr.forEach((item, index) => {
 | 
						|
				if (index === 0) {
 | 
						|
					this.spanArr.push(1);
 | 
						|
				} else {
 | 
						|
					if (item === arr[index - 1]) {
 | 
						|
						this.spanArr[count] += 1;
 | 
						|
						this.spanArr.push(0);
 | 
						|
					} else {
 | 
						|
						count = index;
 | 
						|
						this.spanArr.push(1);
 | 
						|
					}
 | 
						|
				}
 | 
						|
			});
 | 
						|
		},
 | 
						|
		/** 合并table列的规则 */
 | 
						|
		mergeColumnHandler({ row, column, rowIndex, columnIndex }) {
 | 
						|
			if (columnIndex == 0) {
 | 
						|
				if (this.spanArr[rowIndex]) {
 | 
						|
					return [
 | 
						|
						this.spanArr[rowIndex], // row span
 | 
						|
						1, // col span
 | 
						|
					];
 | 
						|
				} else {
 | 
						|
					return [0, 0];
 | 
						|
				}
 | 
						|
			}
 | 
						|
		},
 | 
						|
		getData() {
 | 
						|
			// this.listQuery.lineId = '1672847052717821953'
 | 
						|
			// this.listQuery.startTime = '1693497600000';
 | 
						|
			// this.listQuery.endTime = '1693843200000';
 | 
						|
			this.urlOptions.getDataListURL(this.listQuery).then((res) => {
 | 
						|
				console.log(res);
 | 
						|
				let arr = [
 | 
						|
					{
 | 
						|
						prop: 'sectionName',
 | 
						|
						label: '工段',
 | 
						|
						align: 'center',
 | 
						|
					},
 | 
						|
					{
 | 
						|
						prop: 'equName',
 | 
						|
						label: '设备',
 | 
						|
						align: 'center',
 | 
						|
					},
 | 
						|
				];
 | 
						|
				let sectionArr = [];
 | 
						|
				res.data.data.forEach((ele, index) => {
 | 
						|
					let tempData = [];
 | 
						|
					let eqData = [];
 | 
						|
					let plData = [];
 | 
						|
					ele.data.forEach((item, index) => {
 | 
						|
						item.children.forEach((params) => {
 | 
						|
							if (params.dynamicName === '设备CT') {
 | 
						|
								tempData[item.dynamicName + '_eq'] = params.dynamicValue;
 | 
						|
								eqData[index] = params.dynamicValue;
 | 
						|
							} else {
 | 
						|
								tempData[item.dynamicName + '_pl'] = params.dynamicValue;
 | 
						|
								plData[index] = params.dynamicValue;
 | 
						|
							}
 | 
						|
						});
 | 
						|
					});
 | 
						|
					const equipment = {
 | 
						|
						name: ele.equName,
 | 
						|
						eqData: eqData,
 | 
						|
						plData: plData,
 | 
						|
					};
 | 
						|
					tempData['equName'] = ele.equName;
 | 
						|
					tempData['sectionName'] = ele.sectionName;
 | 
						|
					this.tableData.push(tempData);
 | 
						|
					const { sectionName } = tempData;
 | 
						|
					sectionArr.push(sectionName);
 | 
						|
					this.yData.push(equipment);
 | 
						|
					console.log('看看equ', this.yData);
 | 
						|
				});
 | 
						|
				this.setRowSpan(sectionArr);
 | 
						|
				res.data.nameData.forEach((item) => {
 | 
						|
					this.timeList.push(item.name);
 | 
						|
				});
 | 
						|
				const timeArray = Array.from(new Set(this.timeList));
 | 
						|
				for (const times of timeArray) {
 | 
						|
					if (times !== '设备CT' && times !== '产线CT') {
 | 
						|
						const subprop = {
 | 
						|
							label: times,
 | 
						|
							align: 'center',
 | 
						|
							children: [
 | 
						|
								{ prop: times + '_eq', label: '设备CT', align: 'center' },
 | 
						|
								{ prop: times + '_pl', label: '产线CT', align: 'center' },
 | 
						|
							],
 | 
						|
						};
 | 
						|
						arr.push(subprop);
 | 
						|
						this.xData.push(times);
 | 
						|
					}
 | 
						|
				}
 | 
						|
				this.tableProps = arr;
 | 
						|
 | 
						|
				console.log('表格横坐标', this.xData, this.yData);
 | 
						|
				this.$nextTick(() => {
 | 
						|
					this.$refs.lineChart.initChart(this.xData, this.yData);
 | 
						|
				});
 | 
						|
				// this.total = response.data.total;
 | 
						|
				// this.dataListLoading = false;
 | 
						|
			});
 | 
						|
		},
 | 
						|
		buttonClick(val) {
 | 
						|
			// console.log(val)
 | 
						|
			switch (val.btnName) {
 | 
						|
				case 'search':
 | 
						|
					// this.listQuery.pageNo = 1;
 | 
						|
					// this.listQuery.pageSize = 10;
 | 
						|
					this.listQuery.lineId = val.lineIds;
 | 
						|
					this.listQuery.startTime = val.time
 | 
						|
						? String(new Date(val.time[0]).getTime())
 | 
						|
						: undefined;
 | 
						|
					this.listQuery.endTime = val.time
 | 
						|
						? String(new Date(val.time[1]).getTime())
 | 
						|
						: undefined;
 | 
						|
					if (val.time && val.lineIds) {
 | 
						|
						this.tableData = [];
 | 
						|
						this.xData = [];
 | 
						|
						this.yData = [];
 | 
						|
						this.tableProps = [];
 | 
						|
						this.spanArr = [];
 | 
						|
						this.timeList = [];
 | 
						|
						this.getData();
 | 
						|
					} else {
 | 
						|
						this.$message({
 | 
						|
							message: '请选择产线和时间',
 | 
						|
							type: 'warning',
 | 
						|
						});
 | 
						|
					}
 | 
						|
					break;
 | 
						|
				case 'reset':
 | 
						|
					this.$refs.searchBarForm.resetForm();
 | 
						|
					this.listQuery = {
 | 
						|
						pageSize: 10,
 | 
						|
						pageNo: 1,
 | 
						|
						total: 1,
 | 
						|
					};
 | 
						|
					this.getDataList();
 | 
						|
					break;
 | 
						|
				default:
 | 
						|
					console.log(val);
 | 
						|
			}
 | 
						|
		},
 | 
						|
	},
 | 
						|
};
 | 
						|
</script>
 |