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>
|