263 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			263 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
<template>
 | 
						|
  <div class="app-container">
 | 
						|
    <search-bar :formConfigs="formConfig" ref="searchBarForm" @headBtnClick="buttonClick" />
 | 
						|
    <div v-if="tableData.length">
 | 
						|
      <base-table v-loading="dataListLoading" :span-method="mergeColumnHandler" :table-props="tableProps" :table-data="tableData" />
 | 
						|
      <SearchBar :formConfigs="[{ label: '产线平衡分析图', type: 'title' }]" />
 | 
						|
      <BalanceChart ref="lineChart" />
 | 
						|
    </div>
 | 
						|
    <div v-else class="no-data-bg"></div>
 | 
						|
    <!-- <pagination
 | 
						|
			:limit.sync="listQuery.pageSize"
 | 
						|
			:page.sync="listQuery.pageNo"
 | 
						|
			:total="listQuery.total"
 | 
						|
			@pagination="getDataList" /> -->
 | 
						|
  </div>
 | 
						|
</template>
 | 
						|
 | 
						|
<script>
 | 
						|
// import basicPage from '../../mixins/basic-page';
 | 
						|
import { parseTime } from '../../mixins/code-filter';
 | 
						|
import { getCT } from '@/api/core/analysis/index';
 | 
						|
import { getCorePLList } from '@/api/base/coreProductionLine';
 | 
						|
import BalanceChart from '../balanceChart'
 | 
						|
import { time } from 'echarts';
 | 
						|
// import { getWorkshopSectionPage } from '@/api/core/base/workshopSection';
 | 
						|
 | 
						|
// const tableProps = [
 | 
						|
// 	// {
 | 
						|
//   //   prop: 'lineName',
 | 
						|
// 	// 	label: '产线',
 | 
						|
// 	// 	align: 'center',
 | 
						|
// 	// },
 | 
						|
//   // {
 | 
						|
//   //   prop: 'sum',
 | 
						|
//   //   label: '合计',
 | 
						|
//   //   align: 'center',
 | 
						|
//   // },
 | 
						|
//   // {
 | 
						|
//   //   prop: 'dynamicValue',
 | 
						|
//   //   label: 'dynamicName',
 | 
						|
//   //   align: 'center',
 | 
						|
//   //   children:[
 | 
						|
 | 
						|
//   //   ]
 | 
						|
//   // }
 | 
						|
// ];
 | 
						|
 | 
						|
export default {
 | 
						|
  components: {
 | 
						|
    BalanceChart
 | 
						|
  },
 | 
						|
  // mixins: [basicPage],
 | 
						|
  data() {
 | 
						|
    return {
 | 
						|
      urlOptions: {
 | 
						|
        getDataListURL: getCT,
 | 
						|
      },
 | 
						|
      tableProps: [],
 | 
						|
      dataListLoading: false,
 | 
						|
      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: {
 | 
						|
    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>
 |