vue集成导出 txt文本文档 和 excel文档 的方法

1、导出txt文档方法
(1)在template中定义方法

<template>
<li>
     <el-button class="download" type="success" @click="download">下载</el-button>
</li>
</template>

(2)在methods()中开发方法逻辑

download() {
      var index = this.area - 1;
      var name = this.areaList[index].name;

      console.log("this.area.name ====", this.areaList[index].name);
      // 创建一个新的Blob对象,内容类型为纯文本
      // console.log(this.tableData);
      var date = moment(this.date).format("YYYY-MM-DD");
      var txt = date + name + "车辆使用情况 \r\n";

      var whiteAllRunTime = 0;
      var whiteAllVehicleTime = 0;
      var nightAllRunTime = 0;
      var nightAllVehicleTime = 0;
      var whiteVehicleCount = 0;
      var nightVehicleCount = 0;
      var whiteStorageCount = 0;
      var nightStorageCount = 0;
      var count = 0;
      var useVehicleNameList = []; //使用车辆列表
      var unUseVehicleNameList = []; //未使用车辆列表

      var whiteUseVehicleNameList = []; //白班使用车辆列表
      var nightUseVehicleNameList = []; //晚班使用车辆列表

      this.tableData.map((item) => {
        var usageRate = parseFloat(item.whiteData.usageRate);
        var usageRate2 = parseFloat(item.nightData.usageRate);

        whiteAllRunTime += item.whiteData.allRunTime;
        whiteAllVehicleTime +=
          item.whiteData.allRunTime + item.noTask.whiteData.chargeTime;
        nightAllRunTime += item.nightData.allRunTime;
        nightAllVehicleTime +=
          item.nightData.allRunTime + item.noTask.nightData.chargeTime;
        whiteStorageCount += item.whiteData.transportQty;
        nightStorageCount += item.nightData.transportQty;

        if (usageRate == 0 && usageRate2 == 0) {
          count++;
          unUseVehicleNameList.push(item.vehicleName);
        } else {
          useVehicleNameList.push(item.vehicleName);
          if (usageRate > 0) {
            whiteVehicleCount++;
            whiteUseVehicleNameList.push(item.vehicleName);
          }
          if (usageRate2 > 0) {
            nightVehicleCount++;
            nightUseVehicleNameList.push(item.vehicleName);
          }
        }
      });

      txt += "投入使用的车辆共有  " + (this.tableData.length - count) + "辆";

      if (useVehicleNameList.length > 0) {
        var useVehicleText = "";
        for (var i = 0; i < useVehicleNameList.length; i++) {
          if (useVehicleNameList.length - 1 == i) {
            useVehicleText += useVehicleNameList[i];
          } else {
            useVehicleText += useVehicleNameList[i] + ", ";
          }
        }

        txt += ",分别为: " + useVehicleText;
      }

      txt += "\r\n未投入使用车辆共有  " + count + "辆";
      if (unUseVehicleNameList.length > 0) {
        var unUseVehicleText = "";
        for (var i = 0; i < unUseVehicleNameList.length; i++) {
          if (unUseVehicleNameList.length - 1 == i) {
            unUseVehicleText += unUseVehicleNameList[i];
          } else {
            unUseVehicleText += unUseVehicleNameList[i] + ", ";
          }
        }

        txt += ",分别为: " + unUseVehicleText;
      }

      txt += "\r\n(1)白班:\r\n共有" + whiteVehicleCount + "台车辆投入使用";
      if (whiteUseVehicleNameList.length > 0) {
        var whiteUseVehicleText = "";
        for (var i = 0; i < whiteUseVehicleNameList.length; i++) {
          if (whiteUseVehicleNameList.length - 1 == i) {
            whiteUseVehicleText += whiteUseVehicleNameList[i];
          } else {
            whiteUseVehicleText += whiteUseVehicleNameList[i] + ", ";
          }
        }

        txt += ", 分别为: " + whiteUseVehicleText;
      }

      txt +=
        "\r\n运行总时长:" +
        this.commonService.formatSecond(whiteAllRunTime) +
        "\r\n";
      var whiteAllRunTimeRate = 0;
      if (whiteVehicleCount > 0) {
        whiteAllRunTimeRate = (
          (whiteAllRunTime * 100) /
          this.baseTime /
          3600 /
          whiteVehicleCount
        ).toFixed(2);
      }
      txt += "车辆平均使用率:" + whiteAllRunTimeRate + "%\r\n";
      var whiteAllVehicleTimeRate = 0;
      if (whiteVehicleCount > 0) {
        whiteAllVehicleTimeRate = (
          (whiteAllVehicleTime * 100) /
          this.baseTime /
          3600 /
          whiteVehicleCount
        ).toFixed(2);
      }
      txt +=
        "车辆毛运行总时长:" +
        this.commonService.formatSecond(whiteAllVehicleTime) +
        "\r\n";
      txt += "车辆毛平均使用率:" + whiteAllVehicleTimeRate + "%\r\n";
      txt += "出入库总次数:" + whiteStorageCount + "次\r\n";

      txt += "\r\n(2)晚班:\r\n共有" + nightVehicleCount + "台车辆投入使用";
      if (nightUseVehicleNameList.length > 0) {
        var nightUseVehicleNameText = "";
        for (var i = 0; i < nightUseVehicleNameList.length; i++) {
          if (nightUseVehicleNameList.length - 1 == i) {
            nightUseVehicleNameText += nightUseVehicleNameList[i];
          } else {
            nightUseVehicleNameText += nightUseVehicleNameList[i] + ", ";
          }
        }

        txt += ", 分别为: " + nightUseVehicleNameText;
      }

      txt +=
        "\r\n运行总时长:" +
        this.commonService.formatSecond(nightAllRunTime) +
        "\r\n";
      var nightAllRunTimeRate = 0;
      if (nightVehicleCount > 0) {
        nightAllRunTimeRate = (
          (nightAllRunTime * 100) /
          this.baseTime /
          3600 /
          nightVehicleCount
        ).toFixed(2);
      }
      txt += "车辆平均使用率:" + nightAllRunTimeRate + "%\r\n";
      var nightAllVehicleTimeRate = 0;
      if (nightVehicleCount > 0) {
        nightAllVehicleTimeRate = (
          (nightAllVehicleTime * 100) /
          this.baseTime /
          3600 /
          nightVehicleCount
        ).toFixed(2);
      }
      txt +=
        "车辆毛运行总时长:" +
        this.commonService.formatSecond(nightAllVehicleTime) +
        "\r\n";
      txt += "车辆毛平均使用率:" + nightAllVehicleTimeRate + "%\r\n";
      txt += "出入库总次数:" + nightStorageCount + "次\r\n";

      txt += "\r\n\r\n\r\n以下为该基地各小车运行详细数据,请根据需要查看:";

      this.tableData.map((item) => {
        var usageRate = parseFloat(item.whiteData.usageRate);
        var usageRate2 = parseFloat(item.nightData.usageRate);
        if (usageRate == 0 && usageRate2 == 0) {
        } else {
          txt += "\r\n\r\n" + item.vehicleName + "号车\r\n";
          if (usageRate > 0) {
            var allRate = (
              ((item.whiteData.allRunTime + item.noTask.whiteData.chargeTime) *
                100) /
              this.baseTime /
              3600
            ).toFixed(2);
            txt += "白班:\r\n";
            txt +=
              "车辆运行总时长:" +
              this.commonService.formatSecond(item.whiteData.allRunTime) +
              "\r\n";
            txt += "订单任务使用率:" + item.whiteData.usageRate + "%\r\n";
            txt += "车辆毛使用率:" + allRate + "%\r\n";
            txt +=
              "订单任务时长:" +
              this.commonService.formatSecond(item.whiteData.transportTime) +
              ",次数:" +
              item.whiteData.transportQty +
              "\r\n";
            txt +=
              "充电任务时长:" +
              this.commonService.formatSecond(item.whiteData.chargeTime) +
              ",次数:" +
              item.whiteData.chargeQty +
              "\r\n";
            txt +=
              "停车任务时长:" +
              this.commonService.formatSecond(item.whiteData.parkTime) +
              ",次数:" +
              item.whiteData.parkQty +
              "\r\n";
            txt +=
              "充电桩充电时长:" +
              this.commonService.formatSecond(
                item.noTask.whiteData.chargeTime
              ) +
              "\r\n";
          }
          if (usageRate2 > 0) {
            txt += "晚班:" + "\r\n";
            txt +=
              "车辆运行总时长:" +
              this.commonService.formatSecond(item.nightData.allRunTime) +
              "\r\n";
            txt += "订单任务使用率:" + item.nightData.usageRate + "%\r\n";
            txt +=
              "订单任务时长:" +
              this.commonService.formatSecond(item.nightData.transportTime) +
              ",次数:" +
              item.nightData.transportQty +
              "\r\n";
            txt +=
              "充电任务时长:" +
              this.commonService.formatSecond(item.nightData.chargeTime) +
              ",次数:" +
              item.nightData.chargeQty +
              "\r\n";
            txt +=
              "停车任务时长:" +
              this.commonService.formatSecond(item.nightData.parkTime) +
              ",次数:" +
              item.nightData.parkQty +
              "\r\n";
            txt +=
              "充电桩充电时长:" +
              this.commonService.formatSecond(
                item.noTask.nightData.chargeTime
              ) +
              "\r\n";
          }
        }
      });

      const blob = new Blob([txt], {
        type: "text/plain;charset=utf-8",
      });
      // 创建一个指向该Blob的URL
      const url = URL.createObjectURL(blob);
      // 创建一个a标签
      const link = document.createElement("a");
      link.href = url;
      link.setAttribute("download", date + name + "车辆使用情况.txt");
      document.body.appendChild(link);
      // 触发下载
      link.click();
      // 清理
      document.body.removeChild(link);
      URL.revokeObjectURL(url);
    },
  },

(3)页面展示
在这里插入图片描述

2、导出excel方法
(1)在template中定义方法

<template>
<li>
     <el-button class="download" type="success" @click="download">下载</el-button>
</li>
</template>

(2)在methods()中开发方法逻辑

  download() {
      if (this.area == 0 || !this.endDate || !this.startDate) {
        this.$message({
          message: "请选择一个基地或开始时间、结束时间不能为空",
          type: "warning",
        });
        return false;
      }

      var s = this.startDate.getTime();

      var e = this.endDate.getTime();
      if (e - s < 0) {
        this.$message({
          message: "开始时间不能大于结束时间",
          type: "warning",
        });
        return false;
      }

      var input =
        "endDate=" +
        moment(this.endDate).format("YYYY/MM/DD") +
        "&startDate=" +
        moment(this.startDate).format("YYYY/MM/DD");

      this.isExportXls = true;

      api
        .getVehicleSomeTimeDataAsync(this.area, input)
        .then((res) => {
          // this.isExportXls = false;
          if (res) {
            this.exportData = [];
            var flag = this.area - 1;
            res.map((item, index) => {
              var a = {};
              a.areaName = this.areaList[flag].name;
              a.vehicleName = item.vehicleName;
              a.vehicleName = item.vehicleName;
              a.allRunTime = item.whiteAndNightData.allRunTime;
              a.transportTime = item.whiteAndNightData.transportTime;
              a.transportQty = item.whiteAndNightData.transportQty;
              a.chargeTime = item.whiteAndNightData.chargeTime;
              a.chargeQty = item.whiteAndNightData.chargeQty;
              a.parkTime = item.whiteAndNightData.parkTime;
              a.parkQty = item.whiteAndNightData.parkQty;
              a.noTaskChargeTime = item.noTask.whiteAndNightData.chargeTime;
              a.noTaskParkTime = item.noTask.whiteAndNightData.parkTime;
              if (index % 2 == 0) {
                a.hasColor = true;
              } else {
                a.hasColor = false;
              }
              this.exportData.push(a);
              console.log("this.exportData====",this.exportData);
            });

            this.downloadXLS();
            // this.isExportXls = false;
          }
        })
        .catch(() => {});
    },

    downloadXLS() {
      setTimeout(() => {
        this.Export2Excel();
        this.isExportXls = false;
        console.log("this.isExportXls=====", this.isExportXls);
      }, 1000);
    },

    Export2Excel() {
      require.ensure([], () => {
        const { export_json_to_excel } = require("../../excel/Export2Excel");
        var tHeader = [
          "基地名称",
          "车辆名称",
          "运行总时长",
          "订单任务时长",
          "订单任务次数",
          "充电任务时长",
          "充电任务次数",
          "停车任务时长",
          "停车任务次数",
          "无任务充电时长",
          "无任务停车时长",
        ];

        var filterVal = [
          "areaName",
          "vehicleName",
          "allRunTime",
          "transportTime",
          "transportQty",
          "chargeTime",
          "chargeQty",
          "parkTime",
          "parkQty",
          "noTaskChargeTime",
          "noTaskParkTime",
        ];
        const list = this.exportData;
        console.log("this.exportData====", this.exportData);
        const data = this.formatJson(filterVal, list);
        export_json_to_excel(
          tHeader,
          data,

          "基地历史数据(" +
            moment(this.startDate).format("YYYY/MM/DD HH:mm:ss") +
            "-" +
            moment(this.endDate).format("YYYY/MM/DD HH:mm:ss")
        );
      });
    },
    formatJson(filterVal, jsonData) {
      return jsonData.map((v) =>
        filterVal.map((j) => {
          if (j === "allRunTime" || j === "transportTime" || j === "chargeTime" || j === "parkTime" || j === "noTaskChargeTime" || j === "noTaskParkTime") {
            return this.commonService.formatSecond(v[j]);
          }else{
            return v[j];
          } 
        })
      );
    },

(3)页面展示
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值