【elementUi】绘制自定义表格、绘制曲线表格

要求绘制下图系列表格:
【elementUi】绘制自定义表格、绘制曲线表格_第1张图片

实现步骤:
1.绘制树,实现树勾选字段—>表格绘制字段
逻辑: 树:@check-change=“treeChart.handleCheckChange” 绑定点击选择事件,改变data.column3数据项;表格:columns="data.column3"绑定相对应的data.column3实现表格列自定义;
2.绘制表格,表格中使用插槽去定义绘制曲线图< template >
逻辑:表格定义插槽,插槽中绘制一个div,div中的id 与绘制表格的自定义字段勾连起来,根据Id给对应的div绘制曲线图

1.绘制树的部分结构代码

  <el-tree :data="treeChart.treedata"
   	show-checkbox node-key="prop"
   	@check-change="treeChart.handleCheckChange" 
   	:default-checked-keys="treeChart.TagNode"
  />

对应的setup内代码
【elementUi】绘制自定义表格、绘制曲线表格_第2张图片
表的代码块

<el-table 
 :columns="data.column3" 
 :data="treeChart.ListChartTable || []" 
 :border="true"
 :resizable="true"
 highlight-currrent-row 
 :show-overflow-tooltip="true">
	<el-table-column 
		v-for=" (  item, index  ) in   data.column3  " 
		:key="index" 
		:prop="item.prop"
	    :width="item.width" 
	    :fixed="item.fixed" 
	    :sortable="item.sortable" 
	    :label="item.label"
	    :align="item.align" 
	    :formatter="item.formatter" 
	    :show-overflow-tooltip="true">
     	<template v-slot="scope">
            <div :ref="'chartContainer-' + '-' + item.prop + scope.$index"
                 :id="'chart-' + item.prop + '-' + scope.$index" 
                  style="width: 120px; height: 50px;"
            ></div>
     	</template>
    </el-table-column>
</el-table>

勾选树和表格相连的逻辑处理

 //复选框是否勾选
            handleCheckChange: async (treedata, checked, indeterminate) => {
                data.column3 = []; //存储自定义字段的数组
                if (checked) {
                    if (!treedata.children) {
                        treeChart.TagNode.push(treedata);
                    }
                } else {
                    treeChart.TagNode.forEach(function (item, index, arr) {
                        if (item == treedata) {
                            arr.splice(index, 1);
                        }
                    });
                }
                treeChart.TagNode.forEach((k, v) => {
                    data.column3.push({
                        label: k.label,
                        prop: k.prop,
                        visible: true,
                        align: "center",
                        width: "120",
                    })
                });

                if (data.column3.length > 0) {
                    renderCharts();     //加载曲线
                }
            },

加载曲线代码

    //加载曲线 (采用ice的取值BDB数据,参考意义不大)
       const renderCharts = async () => {
            data.column3.forEach(item => {
                var i = 0;
                data.piecenoList.forEach(async pieceno => {
                    const chartId = `chart-${item.prop}-` + i;
                    i += 1;
                    try {
                    	//调用接口获取数据
                        var productPrx = await Chart.locate(pieceno);  
                        const mea = await productPrx.getPosMeasurementSeries(item.prop);
                        drawChart(chartId, mea);
                    } catch (e) {
                        console.log("查询曲线失败", e);
                        drawChart(chartId);
                    }
                })
            });
        }
       //绘制曲线
        const drawChart = async (chartId, mea) => {
            //mea自定义存储数据 存在y_data和x_data 两个数组数据
            if (mea) {
                var y_data = [];
                var x_data = [];
                for (let i = 0; i < mea.y_data.length; i++) {
                    y_data.push(isFloat(mea.y_data[i]));
                }
                for (let j = 0; j < mea.x_data.length; j++) {
                    x_data.push(isFloat(mea.x_data[j]));
                }
            } else {
            //给一个默认曲线
                x = [0, 1, 2, 3, 4];
                y = [1, 1, 1, 1, 1];
            }
            //绘制曲线
            var chart;
            var chartElement = document.getElementById(chartId);
            if (chartElement && chartElement.getAttribute('_echarts_instance_')) {
                // 存在 ECharts 曲线,执行 removeAttribute 操作
                chartElement.removeAttribute('_echarts_instance_');
                chart = echarts.init(document.getElementById(chartId));
            } else {
                chart = echarts.init(document.getElementById(chartId));
            }
            const option = {
                xAxis: {
                    type: 'category',
                    data: x_data,
                },
                yAxis: {
                    type: 'value',
                    max: function (value) { return value.max + 1 },
                    min: function (value) { return value.min - 1 },
                },
                series: [{
                    type: 'line',
                    data: y_data,
                }]
            };
            chart.setOption(option);
        }

你可能感兴趣的:(elementui,echarts,vue,elementui,wps,前端)