echarts中的数据视图表格

361 阅读1分钟

今天公司内的一个项目有一个需求需要调整 这个问题就是echarts中的数据视图内的数据无法完整的排列好,如下图

图片.png 数据视图内的内容排列十分紊乱,然后需要将里面的数据排放整齐,并且可以编辑,一开始在网上找到的代码片段发现这个只是将数据排列,然后里面的内容是无法完成编辑的,然后就需要调整

图片.png

上面这效果是无法完成表格内编辑,然后根据需求修改是需要可以排序成表格切可以修改表格内容的 效果如下:

图片.png

最终可以排序且修改的代码如下:

dataView: { show: true, readOnly: false,

              optionToContent: function(opt) {

                const axisData = opt.xAxis[0].data // 坐标数据

                const series = opt.series // 折线图数据

                let tdHeads = '<td  style="padding: 2px 10px;background-color: #eeeeee;font-weight: 700;color: #333333"">时间' // 表头

                let tdBodys = '' // 数据

                console.log(series)

                series.forEach(function(item) {

                  // 组装表头

                  tdHeads += `<td style="padding: 2px 10px;background-color: #eeeeee;font-weight: 700;color: #333333">${item.name}</td>`

                })

                let table = `<table   border="1" style=" width: 96%;margin-left:20px;border-collapse:collapse;font-size:14px;text-align:center" class="dataViewTable"><tbody><tr>${tdHeads} </tr>`

                for (let i = 0, l = axisData.length; i < l; i++) {

                  for (let j = 0; j < series.length; j++) {

                    // 组装表数据

                    tdBodys += `<td><input class="${j}x" type="text" value="${series[j].data[i]}" style="border: none;text-align: center;color: #444444;color: #444444"></td>`

                  }

                  table += `<tr><td style="padding: 2px 10px;text-align: center"><input type="text" value="${axisData[i]}" style="border: none;text-align: center;color: #444444"> </td>${tdBodys}</tr>`

                  tdBodys = ''

                }

                table += ''

                return table

              },

              // 编辑功能

              contentToOption: (HTMLDomElement, opt) => {

                if (document.getElementsByClassName('dataViewTable').length > 1) {

                  this.$message.error('有其他未关闭的数据视图,请关闭后重试')

                } else {

                  for (let i = 0; i < opt.series.length; i++) {

                    var name = 'dataX' + i

                    window[name] = []

                    for (const j of document.getElementsByClassName(`${i}x`)) {

                      window[name].push(j.value)

                    }

                    opt.series[i].data = window[name]

                  }

                  return opt

                }

              }

            },

  


作者:Sprite  
链接:https://juejin.cn/post/7163204393918005255  
来源:稀土掘金  
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。