import Excel from 'exceljs/dist/exceljs.min.js';
Vue.prototype.$Excel = Excel;
man.js導(dǎo)入模塊
methods
? ? exportExcel() {
? ? ? let param = Object.assign({}, this.filters);
? ? ? if (param.appVersionName.includes("all")) {
? ? ? ? param["appVersionName"] = this.versions;
? ? ? }
? ? ? param["page"] = 0;
? ? ? param["pageSize"] = 0;
? ? ? param["sortCond"] = store.getters.io_filters.sortCond;
? ? ? param["sortOrder"] = store.getters.io_filters.sortOrder;
? ? ? let time = this.addDay(this.timeRange[1]);
? ? ? param["startDate"] = this.timeRange[0];
? ? ? param["endDate"] = time;
? ? ? this.$axios
? ? ? ? .post("/api/v1/io/category", param)
? ? ? ? .then(response => {
? ? ? ? ? if (response.data.code == 1) {
? ? ? ? ? ? let res = response.data.data.data;
? ? ? ? ? ? for (let i = 0; i < res.length; i++) {
? ? ? ? ? ? ? let resarr = res[i].type.split(",");
? ? ? ? ? ? ? let arr = [];
? ? ? ? ? ? ? // delete res[i].appName;
? ? ? ? ? ? ? // delete res[i].md5;
? ? ? ? ? ? ? // delete res[i].modifier;
? ? ? ? ? ? ? // delete res[i].dealTime;
? ? ? ? ? ? ? if (res[i].updateTime) {
? ? ? ? ? ? ? ? res[i].updateTime=res[i].updateTime.split('.')[0];
? ? ? ? ? ? ? }
? ? ? ? ? ? ? res[i].createTimeMax=res[i].createTimeMax.split('.')[0];
? ? ? ? ? ? ? // console.log(res[i].updateTime)
? ? ? ? ? ? ? switch (res[i].status) {
? ? ? ? ? ? ? ? case -1:
? ? ? ? ? ? ? ? ? res[i].status = "未處理";
? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? case 0:
? ? ? ? ? ? ? ? ? res[i].status = "處理中";
? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? case 1:
? ? ? ? ? ? ? ? ? res[i].status = "已解決";
? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? case -2:
? ? ? ? ? ? ? ? ? res[i].status = "無效問題";
? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? case 2:
? ? ? ? ? ? ? ? ? res[i].status = "無效問題";
? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? default:
? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? }
? ? ? ? ? ? ? for (let index = 0; index < resarr.length; index++) {
? ? ? ? ? ? ? ? switch (resarr[index]) {
? ? ? ? ? ? ? ? ? case "1":
? ? ? ? ? ? ? ? ? ? arr.push("主線程IO");
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? case "2":
? ? ? ? ? ? ? ? ? ? arr.push("讀寫buffer過小");
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? case "3":
? ? ? ? ? ? ? ? ? ? arr.push("重復(fù)讀文件");
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? case "4":
? ? ? ? ? ? ? ? ? ? arr.push("關(guān)閉泄露");
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? default:
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? }
? ? ? ? ? ? ? res[i].type = arr.toString();
? ? ? ? ? ? }
? ? ? ? ? ? this.saveAsExcel(res);
? ? ? ? ? ? // let workbook = new this.$Excel.Workbook();
? ? ? ? ? ? // const ws = this.$XLSX.utils.json_to_sheet(res);
? ? ? ? ? ? // const wb = this.$XLSX.utils.book_new();
? ? ? ? ? ? // ws.A1.l={Target:'https://www.baidu.com',Tooltip:"Find us @ SheetJS.com!"}
? ? ? ? ? ? // ws.A1.s= { font: {underline: true }};
? ? ? ? ? ? // console.log(ws.A1)
? ? ? ? ? ? // console.log(wb)
? ? ? ? ? ? // this.$XLSX.utils.book_append_sheet(wb, ws, "excel");
? ? ? ? ? ? // let wbout =? this.$XLSX.writeFile(wb,"io.xlsx");
? ? ? ? ? } else {
? ? ? ? ? ? this.$message.error(
? ? ? ? ? ? ? "請求錯(cuò)誤,錯(cuò)誤信息:" + JSON.stringify(response.data.msg)
? ? ? ? ? ? );
? ? ? ? ? }
? ? ? ? })
? ? ? ? .catch(error => {
? ? ? ? ? this.$message.error("請求錯(cuò)誤,錯(cuò)誤信息:" + JSON.stringify(error));
? ? ? ? });
? ? },
? ? async saveAsExcel(data) {
? ? ? //cell style
? ? ? var fills = {
? ? ? ? solid: {
? ? ? ? ? type: "pattern",
? ? ? ? ? pattern: "solid",
? ? ? ? ? fgColor: { argb: "32a77e" }
? ? ? ? }
? ? ? };
? ? ? //create a workbook
? ? ? var workbook = new this.$Excel.Workbook();
? ? ? //add header
? ? ? var ws1 = workbook.addWorksheet('io數(shù)據(jù)列表', {properties:{tabColor:{argb:'FFC0000'}}});
? ? ? ws1.properties.defaultRowHeight = 50;
? ? ? ws1.columns = [
? ? ? ? { header: 'I/O數(shù)據(jù)列表', style: { font: { size:12 } } },
? ? ? ];
? ? ? ws1.addRow(["ID", "異常類型","異常數(shù)量","異常場景","版本","狀態(tài)","備注","責(zé)任人","上報(bào)時(shí)間","更新時(shí)間","修復(fù)版本號(hào)"]);
? ? ? ws1.getRow(1).font={size: 18, bold: true };
? ? ? ws1.getRow(1).fill=fills.solid;
? ? ? ws1.getRow(1).height = 50;
? ? ? ws1.getRow(2).fill=fills.solid;
? ? ? ws1.getRow(2).height = 50;
? ? ? ws1.getRow(2).font={ name: 'Comic Sans MS', family: 4, size: 15, bold: true };
? ? ? for (let i = 0; i < data.length; i++) {
? ? ? ? let arr=[]
? ? ? ? arr.length=11
? ? ? ? arr[0]=data[i].id
? ? ? ? arr[1]=data[i].stack
? ? ? ? arr[2]=data[i].count
? ? ? ? arr[3]=data[i].type
? ? ? ? arr[4]=data[i].appVersionName
? ? ? ? arr[5]=data[i].status
? ? ? ? arr[6]=data[i].mark
? ? ? ? arr[7]=data[i].persons
? ? ? ? arr[8]=data[i].createTimeMax
? ? ? ? arr[9]=data[i].updateTime
? ? ? ? arr[10]=data[i].repairVersion
? ? ? ? ws1.addRow(arr);
? ? ? ? ws1.getRow(i+3).height = 50;
? ? ? ? if (data[i].status=="已解決") {
? ? ? ? ? ws1.getCell('F'+(i+3)).font={color:{argb: "32cd32"}};
? ? ? ? }else{
? ? ? ? ? ws1.getCell('F'+(i+3)).font={color:{argb: "ff0000"}};
? ? ? ? }
? ? ? ? ws1.getCell('B'+(i+3)).font={color:{argb: "0000ff"},underline:"single",? italic: true};
? ? ? ? let str ="http://localhost:9090/io/ioDetail?filters=" +? Base64.encode(JSON.stringify(this.filters)) +"&";
? ? ? ? for (let i = 0; i < this.timeRange.length; i++) {
? ? ? ? ? str += "time=" + this.timeRange[i] + "&";
? ? ? ? }
? ? ? ? str += "appVersionName=" + data[i].appVersionName + "&";
? ? ? ? for (let i = 0; i < this.versions.length; i++) {
? ? ? ? ? str += "versions=" + this.versions[i] + "&";
? ? ? ? }
? ? ? ? str += "md5=" + data[i].md5 + "&";
? ? ? ? str += "id=" + data[i].id;
? ? ? ? ws1.getCell('B'+(i+3)).value={text: data[i].stack,hyperlink: str,tooltip: 'www.mylink.com'}
? ? ? }
? ? ? ws1.mergeCells("A1:K1");
? ? ? this.rowCenter(ws1, 1, data.length+2);
? ? ? this.colWidth(ws1, 11, 20);
? ? ? ws1.getColumn(2).width = 30;
? ? ? const buf = await workbook.xlsx.writeBuffer();
? ? ? saveAs(new Blob([buf]), "I/O數(shù)據(jù)列表.xlsx");
? ? },
? ? //設(shè)置 start-end 行單元格水平垂直居中/添加邊框
? ? rowCenter: function(arg_ws, arg_start, arg_end) {
? ? ? for (let i = arg_start; i <= arg_end; i++) {
? ? ? ? arg_ws.findRow(i).alignment = {
? ? ? ? ? vertical: "middle",
? ? ? ? ? horizontal: "center"
? ? ? ? };
? ? ? ? //循環(huán) row 中的 cell,給每個(gè) cell添加邊框
? ? ? ? arg_ws.findRow(i).eachCell(function(cell, index) {
? ? ? ? ? cell.border = {
? ? ? ? ? ? top: { style: "thin" },
? ? ? ? ? ? left: { style: "thin" },
? ? ? ? ? ? bottom: { style: "thin" },
? ? ? ? ? ? right: { style: "thin" }
? ? ? ? ? };
? ? ? ? });
? ? ? }
? ? },
? ? //設(shè)置 start-end 列的寬度
? ? colWidth: function(arg_ws, arg_cols, arg_width) {
? ? ? for (let i = 1; i < arg_cols+1; i++) {
? ? ? ? if (i==2) {
? ? ? ? ? arg_ws.getColumn(i).width = 50;? ? ? ? ? ? ?
? ? ? ? }else{
? ? ? ? ? arg_ws.getColumn(i).width = arg_width;? ?
? ? ? ? }
? ? ? }
? ? }