echarts基礎封裝

function getToken() {
    let regex = /^csrftoken=([^;.]*).*$/;
    let cookies = document.cookie.split('; ')
    let cookiesFilters = cookies.filter(v => {
      if(v.match(regex)) {
        return v
      }
    })
    return cookiesFilters[0].split('=')[1]
}
/**
 *
 * @param {string} echarData.element - 生成echarts圖表的標籤ID
 * @param {string} echarData.title - echarts的標題
 * @param {list} echarData.dataX - echarts的X軸數據
 * @param {list} echarData.dataY - echarts的Y軸數據
 */
function echartFun(echarData) {
    let myChart = echarts.init(document.getElementById(echarData.element))
    let option = {}
    if(echarData.type == 'pie') {
        let legendData = []
        echarData.data.forEach(val => {
            legendData.push(val.name)
        });
        option = {
            title: {//標題屬性
                text: echarData.title, //標題內容
                x: 'center', //標題X軸定位 可用參數 center | left | right | 數字
                y: 0 //標題Y軸定位 可用參數 center | left | right | 數字
            },
            toolbox: {
                feature: {
                    saveAsImage: {}
                }
            },
            tooltip: {//鼠標懸浮層內容
                trigger: 'item', // 懸浮層類型
                formatter: '{a}<br/>{b} : {c} ({d}%)' //自定義懸浮層內容 a:series中的name值 b:對應data的name值 c:對應data的value值 d:對應value值的百分比佔比
            },
            legend: {//圖例
                orient: 'vertical',
                x: 'left', //圖例相對X軸定位center | left | right | 數字
                y: 0, //圖例相對Y軸定位 可用參數 center | left | right | 數字
                data: legendData //圖例數據  爲data的每一項name值組成的列表
            },
            series: [
                {
                    name: '容量:',
                    type: 'pie', //圖形類型
                    radius: ['25%', '75'], //餅圖大小 0 - 100
                    center: ['50%', '60%'], //餅圖對應整個標籤的位置 [X, Y]
                    label: { //餅圖圖形上的文本標籤
                            normal: {
                                show: true, //是否顯示文本標籤
                                formatter: '{c}', // 文本標籤的內容
                            },
                        },
                    data: echarData.data, // 餅圖的具體數據
                }
            ]
        };
    } else {
        let series = []
        // 定義圖形的顯示格式
        if(echarData.dataY[0].constructor == Array) {
            echarData.dataY.map((v, i) => {
                series[i] = {}
                series[i].data = v
                series[i].type = echarData.type
            })
        } else {
            series[0] = {}
            series[0].data = echarData.dataY
            series[0].type = echarData.type
        }
        option = {
            title: {
                text: echarData.title,
                x: 'center'
            },
            tooltip: {
                trigger: 'axis'
            },
            legend: {
                x: 'center',
                y: 'bottom',
            },
            toolbox: {
                feature: {
                    saveAsImage: {}
                }
            },
            grid: {
                left: '8%',
                right: '4%',
                bottom: '3%',
                containLabel: true
            },
            xAxis: {
                type: 'category',
                data: echarData.dataX,
                // axisLabel: {
                    // interval: 0,// 強制顯示全部x值不寫會自動隱藏
                    // rotate: 50,  //傾斜50度
                    // fontSize: 11 //字體大小
                // }
            },
            yAxis: {
                type: 'value',
            },
            series: series
        };
    }
    myChart.setOption(option);
};

function exportCSV({tableLable = [], tableData = [], fileUrl = '未命名'}){
    fileUrl += '.csv'
    let addobj = {}
    // 2.1獲取表頭內容 以rowData形式從新賦值
    try {
        tableLable.map((v, i) => {
            addobj['rowData' + i] = v
        })
    } catch (error) {
        this.$message.error('請填寫tableLable表頭屬性')
        return
    }
    // 2.2用JSON轉義清理對象的內存地址關聯  來獲取表格數據
    let tableData2 = JSON.parse(JSON.stringify(tableData))
    // 2.3把表頭添加到表格數據的最前面充當表頭
    tableData2.unshift(addobj)
    // 2.4列標題,逗號隔開,每個逗號就是隔開一個單元格
    let str = ``;
    // 2.5增長\t爲了避免讓表格顯示科學計數法或者其餘格式
    for(let i = 0; i < tableData2.length; i++) {
        for(let item in tableData2[i]) {
            // 2.5.1 注意要將自己就有換行或者英文逗號的內容進行變換 不然表格內容會錯亂
            tableData2[i][item] = tableData2[i][item].replace(/\n/g, ' ')
            tableData2[i][item] = tableData2[i][item].replace(/,/g, ',') // 英文替換爲中文
            str += `${tableData2[i][item] + '\t'},`;
        }
        str += '\n';
    }
    // 2.6encodeURIComponent解決中文亂碼
    let uri = 'data:text/csv;charset=utf-8,\ufeff' + encodeURIComponent(str);
    // 2.7經過建立a標籤實現
    let link = document.createElement('a');
    link.href = uri;
    // 2.8對下載的文件命名
    link.download = fileUrl;
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
}
複製代碼
相關文章
相關標籤/搜索