11
WXL
2024-08-14 0ac2d43fce4d74f6eea5a51a2e16af4e6a536c7c
src/views/project/travelexpenseapply/travelexpensedetail/index.vue
@@ -5,13 +5,14 @@
      <el-form ref="form" :model="form" :rules="rules" label-width="120px">
        <el-row
          ><el-col :span="5">
            <el-form-item label="申请日期" prop="createTime">
            <el-form-item label="申请日期" prop="applyTime">
              <el-date-picker
                style="width: 100%"
                v-model="form.createTime"
                v-model="form.applyTime"
                type="date"
                value-format="yyyy-MM-dd HH:mm:ss"
                placeholder="申请日期"
                :disabled="true"
              >
              </el-date-picker>
            </el-form-item>
@@ -84,7 +85,7 @@
              />
            </el-form-item>
          </el-col>
          <el-col :span="10">
          <el-col :span="7">
            <el-form-item label="大写金额" prop="bigstrmoney">
              <el-input
                :disabled="true"
@@ -92,7 +93,7 @@
                placeholder="报销大写金额"
              />
            </el-form-item> </el-col
          ><el-col :span="5">
          ><el-col :span="4">
            <el-form-item label="审核状态" prop="flowlevel">
              <el-select
                v-model="form.recordstatus"
@@ -194,7 +195,7 @@
          </el-col>
        </el-row>
                -->
        <!--
        <!--
        <el-row type="flex" :gutter="10" align="right" class="mb8">
          <el-col :span="6">
            <el-button
@@ -208,6 +209,16 @@
          </el-col>
          </el-row>
          -->
        <el-row v-if="jurisdiction">
          <!-- <el-alert title="当前为查看状态,不支持修改存储。" type="warning">
          </el-alert> -->
          <el-alert
            title="当前为查看状态,不支持修改存储。"
            type="warning"
            show-icon
          >
          </el-alert>
        </el-row>
        <el-row style="margin-top: 25px; margin-bottom: 5px">
          <el-col :span="20">报销明细</el-col>
        </el-row>
@@ -216,6 +227,7 @@
            :data="rbDetails"
            ref="table"
            border
            max-height="800"
            highlight-current-row
            :summary-method="getSummaries"
            show-summary
@@ -226,7 +238,7 @@
              label="序号"
              align="center"
              fixed
              width="65"
              width="88"
            >
              <template slot-scope="scope">
                <el-input v-model="scope.row.orderno" placeholder="序号" />
@@ -412,7 +424,12 @@
                </el-select>
              </template>
            </el-table-column>
            <el-table-column prop="days" label="天数" width="65" align="center">
            <el-table-column
              prop="days"
              label="天数"
              width="100"
              align="center"
            >
              <template slot-scope="scope">
                <el-input
                  v-model="scope.row.days"
@@ -465,7 +482,7 @@
              prop="trafficexpense"
              label="交通费"
              align="center"
              width="80"
              width="120"
            >
              <template slot-scope="scope">
                <el-input
@@ -483,7 +500,7 @@
              prop="cityfee"
              label="市内交通费"
              align="center"
              width="100"
              width="120"
            >
              <template slot-scope="scope">
                <el-input
@@ -502,7 +519,7 @@
              prop="hotelexpense"
              label="住宿费"
              align="center"
              width="80"
              width="120"
            >
              <template slot-scope="scope">
                <el-input
@@ -517,11 +534,11 @@
              </template>
            </el-table-column>
            <el-table-column
            <!-- <el-table-column
              prop="foodexpenses"
              label="餐费报销"
              align="center"
              width="80"
              width="120"
            >
              <template slot-scope="scope">
                <el-input
@@ -534,12 +551,12 @@
                  "
                />
              </template>
            </el-table-column>
            </el-table-column> -->
            <el-table-column
              prop="foodallowance"
              label="伙食补助"
              align="center"
              width="80"
              width="120"
            >
              <template slot-scope="scope">
                <el-input
@@ -557,7 +574,7 @@
              prop="otherexpense"
              label="公杂费补助"
              align="center"
              width="80"
              width="120"
            >
              <template slot-scope="scope">
                <el-input
@@ -576,7 +593,7 @@
              prop="otherfeeamount"
              label="其他费用"
              align="center"
              width="90"
              width="120"
            >
              <template slot-scope="scope">
                <el-input
@@ -658,6 +675,7 @@
          <el-table
            :data="rbPayees"
            border
            max-height="400"
            highlight-current-row
            :summary-method="getSummaries"
            show-summary
@@ -706,16 +724,16 @@
            <el-table-column
              prop="persontype"
              slot=""
              label="人员类别"
              label="收款人类别"
              align="center"
              fixed
              width="130"
              width="150"
            >
              <template slot-scope="scope">
                <el-select
                  v-model="scope.row.persontype"
                  value-key="value"
                  placeholder="人员类别"
                  placeholder="收款人类别"
                  @change="getPersons(scope.row)"
                >
                  <el-option
@@ -733,7 +751,7 @@
              label="收款人"
              align="center"
              fixed
              width="110"
              width="200"
            >
              <template slot-scope="scope">
                <el-select
@@ -759,19 +777,19 @@
            <el-table-column
              prop="bankname"
              slot=""
              label="银行名称"
              label="收款银行"
              align="center"
              fixed
              width="200"
              width="250"
            >
              <template slot-scope="scope">
                <el-input v-model="scope.row.bankname" placeholder="银行名称" />
                <el-input v-model="scope.row.bankname" placeholder="收款银行" />
              </template>
            </el-table-column>
            <el-table-column
              prop="bankcardno"
              slot=""
              label="银行卡号"
              label="银行账号"
              align="center"
              fixed
              width="200"
@@ -779,7 +797,7 @@
              <template slot-scope="scope">
                <el-input
                  v-model="scope.row.bankcardno"
                  placeholder="银行卡号"
                  placeholder="银行账号"
                />
              </template>
            </el-table-column>
@@ -880,6 +898,30 @@
        </el-row>
        <el-row
          style="margin-top: 25px; margin-bottom: 5px"
          v-if="operationType == 'check' && userprofile.nickName == '陈慕华'"
        >
          <el-col :span="12">
            <el-form-item label="预审材料" prop="infoid">
              <el-radio-group v-model="form.checkstatus" align="left">
                <el-radio label="1">待申请材料</el-radio>
                <el-radio label="2">审核通过等待邮寄纸质材料</el-radio>
                <el-radio label="3">已收到报销材料</el-radio>
              </el-radio-group>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="算税状态" prop="infoid">
              <el-radio-group v-model="form.istax" align="left">
                <el-radio :label="-1">审核中</el-radio>
                <el-radio :label="0">允许算税</el-radio>
                <el-radio :label="1">已算税</el-radio>
              </el-radio-group>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row
          style="margin-top: 25px; margin-bottom: 5px"
          v-if="operationType == 'check'"
        >
          <el-col :span="7">
@@ -903,74 +945,264 @@
        <el-button
          type="primary"
          @click="submitForm"
          v-if="operationType == 'edit'"
          v-if="operationType == 'edit' || userprofile.nickName == '陈慕华'"
          >保 存</el-button
        >
        <el-button
          type="primary"
          @click="checksubmit"
          v-if="operationType == 'check'"
          >提 交</el-button
          >提交审核</el-button
        >
        <!--<el-button @click="cancel">退 出</el-button>-->
      </div>
    </div>
    <el-dialog :title="pdftitle" :visible.sync="pdfVisible" width="50%">
      <div class="pdfimg">
        <div class="box-pdf">
          <div>
            <el-upload
              size="mini"
              class="upload-demo"
              :action="uploadFileUrl"
              :file-list="fileListto"
              multiple
              :limit="20"
              :headers="headers"
              :on-success="
                (response, file, fileList) =>
                  uploadSccess(response, file, fileList)
              "
              :on-preview="downFile"
              :disabled="operationType == 'detail'"
              :on-error="handleUploadError"
              :on-exceed="handleExceed"
              :on-remove="remove"
              accept="image/*,.pdf"
            >
              <el-button
                :disabled="operationType == 'detail'"
                size="small"
                type="primary"
                >上传</el-button
              >
            </el-upload>
          </div>
          <!-- <div
            class="pdftit"
            @click="pdffn(item)"
            v-for="item in fileList"
            :key="item.name"
          >
            {{ item.name }}
          </div> -->
        </div>
    <el-dialog
      v-dialogDrags
      :modal="false"
      :close-on-click-modal="false"
      :title="pdftitle"
      :visible.sync="pdfVisible"
      width="60%"
    >
      <div style="margin-bottom: 10px;">
        <el-table :data="tableDatatop" style="width: 100%">
          <el-table-column prop="orderno" label="序号"> </el-table-column>
          <el-table-column prop="personname" label="费用人员">
          </el-table-column>
          <el-table-column prop="starttime" label="开始日期"> </el-table-column>
          <el-table-column prop="endtime" label="结束日期"> </el-table-column>
          <el-table-column prop="departure" label="出发地"> </el-table-column>
          <el-table-column prop="destination" label="到达地"> </el-table-column>
          <el-table-column prop="days" label="天数"> </el-table-column>
        </el-table>
        <el-table :data="tableDatatop" style="width: 100%">
          <el-table-column prop="traffictype" label="出发交通工具">
          </el-table-column>
          <el-table-column prop="traffictype2" label="返回交通工具">
          </el-table-column>
          <el-table-column prop="trafficexpense" label="交通费">
          </el-table-column>
          <el-table-column prop="cityfee" label="市内交通费"> </el-table-column>
          <el-table-column prop="hotelexpense" label="住宿费">
          </el-table-column>
          <el-table-column prop="foodallowance" label="伙食补助">
          </el-table-column>
          <el-table-column prop="otherexpense" label="公杂费补助">
          </el-table-column>
          <el-table-column prop="otherfeeamount" label="其他费用">
          </el-table-column>
        </el-table>
      </div>
      <el-alert
        title="新上传文件需在提交保存后才可进行案例关联,否则视为放弃"
        type="error"
        show-icon
        close-text="知道了"
      >
      </el-alert>
      <el-tabs
        style="margin-top: 20px;"
        v-model="activeName"
        type="border-card"
        @tab-click="handleClick"
      >
        <el-tab-pane label="普通附件" :name="1">
          <div class="pdfimg">
            <div class="box-pdf">
              <div>
                <el-upload
                  size="mini"
                  class="upload-demo"
                  :action="uploadFileUrl"
                  :file-list="fileListto"
                  :show-file-list="false"
                  multiple
                  drag
                  :headers="headers"
                  :on-success="
                    (response, file, fileList) =>
                      uploadSccess(response, file, fileList)
                  "
                  :on-preview="downFile"
                  :disabled="operationType == 'detail'"
                  :on-error="handleUploadError"
                  :on-remove="remove"
                  accept="image/*,.pdf"
                >
                  <i class="el-icon-upload"></i>
                  <div class="el-upload__text">
                    将票据拖到此处,或
                    <em
                      ><el-button
                        :disabled="operationType == 'detail'"
                        size="small"
                        type="primary"
                        >点击上传</el-button
                      ></em
                    >
                  </div>
                </el-upload>
                <el-table
                  :data="fileListto"
                  @row-click="downFile"
                  style="width: 100%"
                  height="400"
                >
                  <el-table-column
                    prop="name"
                    :show-overflow-tooltip="true"
                    label="名称"
                  >
                    <template slot-scope="scope">
                      <i style="color:#409EFF" class=" el-icon-s-order" />{{
                        scope.row.name
                      }}
                    </template>
                  </el-table-column>
        <div v-if="this.previewpdf" class="pdfimgmin">
          <!-- <img :src="pdfimg" /> -->
          <el-image
            style="width: 95%; height: 90%"
            :src="pdfimg"
            :preview-src-list="pdfimgsrcList"
          >
            <!-- <div slot="error" class="image-slot">
                  <el-table-column
                    prop="name"
                    width="180"
                    :show-overflow-tooltip="true"
                    label="功能"
                  >
                    <template slot-scope="scope">
                      <el-button
                        type="danger"
                        size="mini"
                        @click.native.prevent.stop="deletedowfile(scope.row)"
                        >删除</el-button
                      >
                      <el-button
                        type="primary"
                        size="mini"
                        @click.native.prevent.stop="moveupdowfile(scope.row)"
                        >上移</el-button
                      >
                    </template>
                  </el-table-column>
                </el-table>
              </div>
            </div>
            <div
              v-if="this.previewpdf && pdfimgsrcList.length"
              class="pdfimgmin"
            >
              <!-- <img :src="pdfimg" /> -->
              <el-image
                style="width: 95%; height: 90%"
                :src="pdfimg"
                :preview-src-list="pdfimgsrcList"
              >
                <!-- <div slot="error" class="image-slot">
              <i class="el-icon-picture-outline"></i>
            </div> -->
          </el-image>
        </div>
        <div v-else class="pdfimgmins">{{ hintitle }}</div>
      </div>
              </el-image>
            </div>
            <div v-else class="pdfimgmins">{{ hintitle }}</div>
          </div>
        </el-tab-pane>
        <el-tab-pane label="发票文件" :name="2">
          <div class="pdfimg">
            <div class="box-pdf">
              <div>
                <el-upload
                  size="mini"
                  class="upload-demo"
                  :action="uploadFileUrl"
                  :file-list="invoicefileList"
                  :show-file-list="false"
                  multiple
                  drag
                  :headers="headers"
                  :on-success="
                    (response, file, fileList) =>
                      uploadSccess(response, file, fileList)
                  "
                  :on-preview="downFile"
                  :disabled="operationType == 'detail'"
                  :on-error="handleUploadError"
                  :on-remove="remove"
                  accept="image/*,.pdf"
                >
                  <i class="el-icon-upload"></i>
                  <div class="el-upload__text">
                    将发票文件拖到此处,或
                    <em
                      ><el-button
                        :disabled="operationType == 'detail'"
                        size="small"
                        type="primary"
                        >点击上传</el-button
                      ></em
                    >
                  </div>
                </el-upload>
                <el-table
                  :data="invoicefileListto"
                  @row-click="downFile"
                  style="width: 100%"
                  height="400"
                >
                  <el-table-column
                    prop="name"
                    :show-overflow-tooltip="true"
                    label="名称"
                  >
                    <template slot-scope="scope">
                      <i style="color:#409EFF" class=" el-icon-s-order" />{{
                        scope.row.name
                      }}
                    </template>
                  </el-table-column>
                  <el-table-column
                    prop="name"
                    width="180"
                    :show-overflow-tooltip="true"
                    label="功能"
                  >
                    <template slot-scope="scope">
                      <el-button
                        type="primary"
                        size="mini"
                        @click.native.prevent.stop="deletedowfile(scope.row)"
                        >删除</el-button
                      >
                      <el-button
                        type="primary"
                        size="mini"
                        @click.native.prevent.stop="moveupdowfile(scope.row)"
                        >上移</el-button
                      >
                    </template>
                  </el-table-column>
                </el-table>
              </div>
            </div>
            <div
              v-if="this.previewpdf && invoicepdfimgsrcList.length"
              class="pdfimgmin"
            >
              <!-- <img :src="pdfimg" /> -->
              <el-image
                style="width: 95%; height: 90%"
                :src="invoicepdfimg"
                :preview-src-list="invoicepdfimgsrcList"
              >
                <!-- <div slot="error" class="image-slot">
              <i class="el-icon-picture-outline"></i>
            </div> -->
              </el-image>
            </div>
            <div v-else class="pdfimgmins">{{ hintitle }}</div>
          </div>
        </el-tab-pane>
      </el-tabs>
    </el-dialog>
    <el-dialog title="提示" :visible.sync="Savereminder" width="30%">
      <el-alert
@@ -998,7 +1230,8 @@
import {
  listReimbursementpayee,
  addReimbursementpayee,
  updateReimbursementpayee
  updateReimbursementpayee,
  delReimbursementpayee
} from "@/api/project/reimbursementpayee";
import {
  listReimbursement,
@@ -1029,6 +1262,7 @@
import { getSubsidy } from "@/api/project/travelcity";
import { listReportname, listUser } from "@/api/project/organization";
import { getToken } from "@/utils/auth";
import debounce from "lodash/debounce";
export default {
  components: {
    Treeselect,
@@ -1060,6 +1294,7 @@
      personsList: [],
      //下拉可以选择人员列表
      personsSel: [],
      activeName: 1, //文件类型
      // 部门树选项
      deptOptions: undefined,
@@ -1071,6 +1306,7 @@
        value: 0,
        label: ""
      },
      ICDtoken: getToken(),
      pdfimgsrcList: [],
      Savereminder: false, //提醒保存弹框
      Reminderquantity: 0, //提醒数量
@@ -1122,19 +1358,25 @@
        starttime: null,
        endtime: null
      },
      tableDatatop: [
        {
          date: "2016-05-02",
          name: "王小虎",
          address: "上海市普陀区金沙江路 1518 弄"
        }
      ],
      //查询付款
      queryParamsPayee: {
        rbid: null
      },
      // 当前用户信息
      userprofile: {},
      // 表单参数
      form: {},
      reimbursementList: [],
      // 表单校验
      rules: {
        createTime: [
          { required: true, message: "请输入填报日期", trigger: "blur" }
        ],
        reason: [
          { required: true, message: "请输入出差事由", trigger: "blur" }
        ],
@@ -1153,6 +1395,20 @@
      rbDetails: [],
      rbPayees: [],
      arrr2: [],
      baselisttages: [
        {
          id: 1,
          name: "待申请材料"
        },
        {
          id: 2,
          name: "审核通过等待邮寄纸质材料"
        },
        {
          id: 3,
          name: "已收到报销材料"
        }
      ],
      baselist: [],
      donatorList: [],
      standardlevel: 0,
@@ -1166,11 +1422,14 @@
      //文件列表
      fileList: [],
      fileListto: [],
      invoicefileList: [],
      invoicefileListto: [],
      invoicepdfimg: "",
      invoicepdfimgsrcList: [],
      //人员类别
      persontype: null,
      //到达地
      arriveAddr: null,
      headers: {
        Authorization: "Bearer " + getToken()
      },
@@ -1181,6 +1440,7 @@
        flowconclusion: null,
        fundid: null
      },
      jurisdiction: false,
      //保存按钮控制
      idisabled: false
@@ -1198,6 +1458,7 @@
    //获取登录者信息
    getUserProfile().then(response => {
      this.userprofile = response.data;
      this.defaultperson = response.data;
      this.standardlevel = response.data.standardlevel;
      console.log("this.defaultperson", this.defaultperson);
@@ -1225,6 +1486,8 @@
  },
  mounted() {
    window.addEventListener("beforeunload", e => this.beforeunloadHandler(e));
    //选择业务类型:1、新增;2、修改;3、查看
    let curId = this.$route.query.id;
    let pos = this.$route.query.pos;
@@ -1244,8 +1507,29 @@
      this.$refs["table"].doLayout();
    });
  },
  destroyed() {
    window.removeEventListener("beforeunload", e => this.beforeunloadFn(e));
  }, //生命周期 - 销毁完成
  methods: {
    // 浏览器页面关闭或刷新提示
    beforeunloadHandler(e) {
      if (
        (JSON.stringify(this.form) == sessionStorage.getItem("apiform") &&
          JSON.stringify(this.rbDetails) ==
            sessionStorage.getItem("apifunddetail")) ||
        !sessionStorage.getItem("apifunddetail")
      ) {
      } else {
        this._beforeUnload_time = new Date().getTime();
        e = e || window.event;
        if (e) {
          e.returnValue = "关闭提示";
        }
        return "关闭提示";
      }
    },
    handleUploadError() {},
    // 获取请求头
    Getnetworkheader() {
@@ -1261,10 +1545,23 @@
        console.log(this.Networkheader);
      }
    },
    // 发票切换
    handleClick(tab, event) {
      if (this.activeName == 1) {
        this.pdftitle = "共" + this.pdfimgsrcList.length + "项";
      } else {
        this.pdftitle = "共" + this.invoicepdfimgsrcList.length + "项";
      }
    },
    remove(file, fileList) {
      const rbDetails = [...this.rbDetails];
      this.fileListto.splice(this.fileListto.indexOf(file), 1);
      rbDetails[this.atpresent].annexfilesList = this.fileListto;
      if (this.activeName == 1) {
        this.fileListto.splice(this.fileListto.indexOf(file), 1);
        rbDetails[this.atpresent].annexfilesList = this.fileListto;
      } else {
        this.invoicefileListto.splice(this.invoicefileListto.indexOf(file), 1);
        rbDetails[this.atpresent].invoicefilesList = this.invoicefileListto;
      }
    },
    handleExceed() {
@@ -1274,66 +1571,293 @@
    //文件上传成功回调
    uploadSccess(response, file, fileList) {
      this.rbDetails;
      const config = {
        headers: { Authorization: "Bearer " + this.ICDtoken }
      };
      const pdfimg = this.Networkheader + "/prod-api" + response.fileName;
      //获取票据信息位置
      if (response.code == 200) {
        this.form.filename = file.raw.name;
      if (this.activeName == 1) {
        if (response.code == 200) {
          this.previewpdf = true;
        this.$modal.msgSuccess(response.msg);
        this.fileListto.push({
          name: file.name,
          url: response.fileName
        });
        // this.fileListto.push({
        //   name: file.name,
        //   url: response.url
        // });
        this.rbDetails[this.atpresent].annexfilesList = this.fileListto;
          fetch(pdfimg, config)
            .then(response => response.blob())
            .then(blob => {
              // 将获取的数据流转换为URL
              this.pdfimg = URL.createObjectURL(blob);
              this.pdfimgsrcList.push(URL.createObjectURL(blob));
              this.fileListto.push({
                name: file.name,
                url: URL.createObjectURL(blob)
              });
            })
            .catch(error => {
              console.error("Error loading image", error);
              return;
            });
          this.$modal.msgSuccess(response.msg);
          console.log(this.fileListto, "新增后");
          if (!this.rbDetails[this.atpresent].annexfilesList) {
            this.rbDetails[this.atpresent].annexfilesList = [];
          }
          this.rbDetails[this.atpresent].annexfilesList.push({
            name: file.name,
            url: response.fileName
          });
          this.pdftitle = "共" + this.pdfimgsrcList.length + "项";
        } else {
          console.log(response.msg);
        }
      } else {
        console.log(response.msg);
        if (response.code == 200) {
          this.previewpdf = true;
          fetch(pdfimg, config)
            .then(response => response.blob())
            .then(blob => {
              // 将获取的数据流转换为URL
              this.invoicepdfimg = URL.createObjectURL(blob);
              this.invoicepdfimgsrcList.push(URL.createObjectURL(blob));
              this.invoicefileListto.push({
                name: file.name,
                url: URL.createObjectURL(blob)
              });
            })
            .catch(error => {
              console.error("Error loading image", error);
              return;
            });
          this.$modal.msgSuccess(response.msg);
          console.log(this.invoicefileListto, "新增后");
          if (!this.rbDetails[this.atpresent].invoicefilesList) {
            this.rbDetails[this.atpresent].invoicefilesList = [];
          }
          this.rbDetails[this.atpresent].invoicefilesList.push({
            name: file.name,
            url: response.fileName
          });
          this.pdftitle = "共" + this.invoicepdfimgsrcList.length + "项";
        }
      }
    },
    // 点击票据
    Filepopup(index, rows, row) {
      const config = {
        headers: { Authorization: "Bearer " + this.ICDtoken }
      };
      this.tableDatatop = [];
      this.fileListto = [];
      this.invoicefileListto = [];
      this.pdfimg = "";
      this.invoicepdfimg = [];
      this.pdfimgsrcList = [];
      this.invoicepdfimgsrcList = [];
      this.tableDatatop.push(row);
      this.atpresent = index;
      this.pdfVisible = true;
      console.log(this.rbDetails[index]);
      if (this.rbDetails[index].annexfilesList) {
        this.fileListto = this.rbDetails[index].annexfilesList;
        console.log(this.fileListto);
        this.pdfimg = this.Networkheader + "/prod-api" + this.fileListto[0].url;
        console.log(this.pdfimg);
        this.pdfimgsrcList = [];
        this.pdfimgsrcList.push(this.pdfimg);
        const fetchPromises = this.rbDetails[index].annexfilesList.map(
          (value, indexson) => {
            const pdfimg = this.Networkheader + "/prod-api" + value.url;
            return fetch(pdfimg, config)
              .then(response => response.blob())
              .then(blob => {
                return {
                  name: value.name,
                  url: URL.createObjectURL(blob)
                };
              })
              .catch(error => {
                console.error("Error loading image", error);
                return null;
              });
          }
        );
        Promise.all(fetchPromises).then(fileListto => {
          this.fileListto = fileListto.filter(item => item !== null);
          this.pdfimg = this.fileListto[0].url;
          console.log(this.pdfimg, "pdfimg");
          this.pdfimgsrcList = this.fileListto.map(item => item.url);
        });
        this.previewpdf = true;
      } else {
        this.fileListto = [];
        this.pdfimg = "";
        this.pdftitle = "";
      }
      //发票
      if (this.rbDetails[index].invoicefilesList) {
        const fetchPromises = this.rbDetails[index].invoicefilesList.map(
          (value, indexson) => {
            const pdfimg = this.Networkheader + "/prod-api" + value.url;
            return fetch(pdfimg, config)
              .then(response => response.blob())
              .then(blob => {
                return {
                  name: value.name,
                  url: URL.createObjectURL(blob)
                };
              })
              .catch(error => {
                console.error("Error loading image", error);
                return null;
              });
          }
        );
        Promise.all(fetchPromises).then(invoicefileListto => {
          this.invoicefileListto = invoicefileListto.filter(
            item => item !== null
          );
          this.invoicepdfimg = this.invoicefileListto[0].url;
          console.log(this.invoicepdfimg, "invoicepdfimg");
          this.invoicepdfimgsrcList = this.invoicefileListto.map(
            item => item.url
          );
        });
        this.previewpdf = true;
      } else {
        this.invoicefileListto = [];
        this.invoicepdfimg = "";
        this.pdftitle = "";
      }
      if (this.activeName == "common") {
        this.pdftitle = "共" + this.pdfimgsrcList.length + "项";
      } else {
        this.pdftitle = "共" + this.invoicepdfimgsrcList.length + "项";
      }
      console.log(this.fileListto, "this.fileListto");
      console.log(this.rbDetails[index].annexfilesList, "annexfilesList");
    },
    // 点击已上传文件
    downFile(item) {
      console.log(item);
      this.pdftitle = item.name;
      let name = item.name.split(".");
      if (name[1] == "pdf") {
        this.$modal.msgWarning("当前文件暂不支持预览");
        this.previewpdf = false;
        this.hintitle = "当前文件暂不支持预览";
      } else if (name[1] == "jpg" || "png") {
        this.previewpdf = true;
        if (item.url) {
          this.pdfimg = this.Networkheader + "/prod-api" + item.url;
          this.pdfimgsrcList = [];
          this.pdfimgsrcList.push(this.pdfimg);
          console.log(this.pdfimg);
      if (this.activeName == 1) {
        this.pdftitle =
          "共" + this.pdfimgsrcList.length + "项,当前选中" + item.name;
        let name = item.name.split(".");
        if (name[1] == "pdf") {
          this.$modal.msgWarning("当前文件暂不支持预览");
          this.previewpdf = false;
          this.hintitle = "当前文件暂不支持预览";
        } else if (name[1] == "jpg" || "png") {
          console.log(item, "展示");
          this.previewpdf = true;
          if (item.url) {
            this.pdfimg = item.url;
          } else {
            this.pdfimg = "";
          }
        } else {
          this.pdfimg = this.Networkheader + "/prod-api" + item.response.url;
          this.hintitle = "当前文件暂不支持预览";
          this.$modal.msgWarning("当前文件暂不支持预览");
          this.previewpdf = false;
        }
      } else {
        this.hintitle = "当前文件暂不支持预览";
        this.$modal.msgWarning("当前文件暂不支持预览");
        this.previewpdf = false;
        this.pdftitle =
          "共" + this.invoicepdfimgsrcList.length + "项,当前选中" + item.name;
        let name = item.name.split(".");
        if (name[1] == "pdf") {
          this.$modal.msgWarning("当前文件暂不支持预览");
          this.previewpdf = false;
          this.hintitle = "当前文件暂不支持预览";
        } else if (name[1] == "jpg" || "png") {
          this.previewpdf = true;
          if (item.url) {
            this.invoicepdfimg = item.url;
          } else {
            this.invoicepdfimg = "";
          }
        } else {
          this.hintitle = "当前文件暂不支持预览";
          this.$modal.msgWarning("当前文件暂不支持预览");
          this.previewpdf = false;
        }
      }
    },
    getIndexInArray(arr, obj) {
      return arr.indexOf(obj);
    },
    // 点击删除
    deletedowfile(row) {
      console.log(row);
      let indexvalue = "";
      if (this.activeName == 1) {
        const indexlist = this.getIndexInArray(this.pdfimgsrcList, row.url);
        this.pdfimgsrcList.splice(indexlist, 1);
        const index = this.getIndexInArray(this.fileListto, row);
        this.fileListto.splice(index, 1);
        console.log(this.rbDetails[this.atpresent].annexfilesList);
        indexvalue = this.rbDetails[this.atpresent].annexfilesList.find(
          (item, index) => {
            return item.name == row.name;
          }
        );
        console.log(indexvalue, "删除索引");
        this.rbDetails[this.atpresent].annexfilesList.splice(indexvalue, 1);
      } else {
        const indexlist = this.getIndexInArray(
          this.invoicepdfimgsrcList,
          row.url
        );
        this.invoicepdfimgsrcList.splice(indexlist, 1);
        const index = this.getIndexInArray(this.invoicefileListto, row);
        this.invoicefileListto.splice(index, 1);
        console.log(this.rbDetails[this.atpresent].invoicefilesList);
        indexvalue = this.rbDetails[this.atpresent].invoicefilesList.find(
          (item, index) => {
            return item.name == row.name;
          }
        );
        console.log(indexvalue, "删除索引");
        this.rbDetails[this.atpresent].invoicefilesList.splice(indexvalue, 1);
      }
    },
    // 点击上移
    moveupdowfile(row) {
      if (this.activeName == 1) {
        const index = this.getIndexInArray(this.fileListto, row);
        const item = this.fileListto.splice(index, 1)[0]; // 移除指定索引处的元素,并保存到item变量中
        this.fileListto.splice(index - 1, 0, item); // 将item插入到索引位置的前一位
        const indexann = this.rbDetails[
          this.atpresent
        ].annexfilesList.findIndex(item => item.name == row.name);
        const itemann = this.rbDetails[this.atpresent].annexfilesList.splice(
          indexann,
          1
        )[0]; // 移除指定索引处的元素,并保存到item变量中
        this.rbDetails[this.atpresent].annexfilesList.splice(
          indexann - 1,
          0,
          itemann
        ); // 将itemann插入到索引位置的前一位
      } else {
        const index = this.getIndexInArray(this.invoicefileListto, row);
        const item = this.invoicefileListto.splice(index, 1)[0]; // 移除指定索引处的元素,并保存到item变量中
        this.invoicefileListto.splice(index - 1, 0, item); // 将item插入到索引位置的前一位
        const indexinvo = this.rbDetails[
          this.atpresent
        ].invoicefilesList.findIndex(item => item.name == row.name);
        const iteminvo = this.rbDetails[this.atpresent].invoicefilesList.splice(
          indexinvo,
          1
        )[0]; // 移除指定索引处的元素,并保存到item变量中
        this.rbDetails[this.atpresent].invoicefilesList.splice(
          indexinvo - 1,
          0,
          iteminvo
        ); // 将iteminvo插入到索引位置的前一位
      }
    },
@@ -1607,21 +2131,27 @@
        var aEle = document.createElement("a");
        aEle.href =
          curWWWPath.substring(0, pos) + urlBase + fileUrl["downloadUrl"];
        aEle.click();
        console.log(aEle.href);
        // 添加Authorization头部
        fetch(aEle.href, {
          headers: this.headers
        })
          .then(response => {
            // 将文件下载链接作为blob对象进行下载
            return response.blob();
          })
          .then(blob => {
            const url = window.URL.createObjectURL(new Blob([blob]));
            console.log(url);
            const link = document.createElement("a");
            link.href = url;
            const name = fileUrl["downloadName"];
            link.setAttribute("download", name); // 替换file.pdf为实际的文件名
            document.body.appendChild(link);
            link.click();
            link.parentNode.removeChild(link);
          });
      });
      // downloadconfirmationinfo(id).then((response) => {
      //   var fileUrl = response;
      //   //获取当前网址
      //   var urlBase = process.env.VUE_APP_BASE_API;
      //   var curWWWPath = window.document.location.href;
      //   var pos = curWWWPath.indexOf(window.document.location.pathname);
      //   // 创建a标签
      //   var aEle = document.createElement("a");
      //   aEle.href =
      //     curWWWPath.substring(0, pos) + urlBase + fileUrl["downloadUrl"];
      //   aEle.click();
      // });
    },
    /** 查询报销申请列表 */
@@ -1759,12 +2289,20 @@
      //获取报销主信息
      getReimbursement(curId).then(response => {
        this.form = response.data;
        this.fileListto = this.form.annexfiles
          ? this.form.annexfiles
              .split(",")
              .map(item => ({ url: item, name: item }))
          : [];
        this.invoicefileListto = this.form.invoicefilesList
          ? this.form.invoicefilesList
              .split(",")
              .map(item => ({ url: item, name: item }))
          : [];
        this.form.recordstatus = response.data.recordstatus + "";
        sessionStorage.removeItem("apiform");
        sessionStorage.setItem("apiform", JSON.stringify(this.form));
        //获取报销明细信息
        getReimbursementdetaillist(curId).then(res => {
@@ -1773,20 +2311,16 @@
          if (this.rbDetails.length == 0) {
            this.addDetailRow(0);
          }
          //实时合计金额
          //this.sumTotalFee();
          for (let i = 0; i < this.rbDetails.length; i++) {
            this.sumRowFee(this.rbDetails[i]);
            //解析出差地址
            /*
              this.rbDetails[i].index = i;
              this.rbDetails[i].searchAddress = {
                sheng: this.rbDetails[i].travelprovincename,
                shi: this.rbDetails[i].travelcityname,
                qu: this.rbDetails[i].traveltownname,
              }; */
          }
          sessionStorage.removeItem("apifunddetail");
          sessionStorage.setItem(
            "apifunddetail",
            JSON.stringify(this.rbDetails)
          );
        });
        //获取报销打款信息
@@ -1814,11 +2348,10 @@
    handleDetail(ids) {
      this.operationType = "detail";
      this.title = "报销申请详情";
      this.jurisdiction = true;
      this.reset();
      this.open = true;
      const id = ids || this.ids;
      getReimbursement(id).then(response => {
        this.form = response.data;
        //票据
@@ -1827,7 +2360,11 @@
              .split(",")
              .map(item => ({ url: item, name: item }))
          : [];
        this.invoicefileListto = this.form.invoicefilesList
          ? this.form.invoicefilesList
              .split(",")
              .map(item => ({ url: item, name: item }))
          : [];
        //审核状态
        this.form.recordstatus = response.data.recordstatus + "";
        let ids = response.data.id;
@@ -1842,16 +2379,6 @@
        //报销明细
        getReimbursementdetaillist(ids).then(res => {
          this.rbDetails = res.data;
          /*
          for (let i = 0; i < this.rbDetails.length; i++) {
            this.rbDetails[i].index = i;
            this.rbDetails[i].searchAddress = {
              sheng: this.rbDetails[i].travelprovincename,
              shi: this.rbDetails[i].travelcityname,
              qu: this.rbDetails[i].traveltownname,
            };
          }
          */
          //合计费用
          // if (this.rbDetails.length > 0) this.sumTotalFee();
          for (let i = 0; i < this.rbDetails.length; i++) {
@@ -1867,6 +2394,8 @@
            this.addPayeeRow(0);
          }
        });
        sessionStorage.removeItem("apiform");
        sessionStorage.setItem("apiform", JSON.stringify(this.form));
      });
    },
@@ -1882,9 +2411,17 @@
      getReimbursement(id).then(response => {
        this.form = response.data;
        console.log(this.form.checkstatus, "checkstatus");
        this.form.checkstatus = this.form.checkstatus.toString();
        //票据
        this.fileListto = this.form.annexfiles
          ? this.form.annexfiles
              .split(",")
              .map(item => ({ url: item, name: item }))
          : [];
        this.invoicefileListto = this.form.invoicefilesList
          ? this.form.invoicefilesList
              .split(",")
              .map(item => ({ url: item, name: item }))
          : [];
@@ -1905,16 +2442,6 @@
        getReimbursementdetaillist(ids).then(res => {
          this.rbDetails = res.data;
          console.log(this.rbDetails);
          /*
          for (let i = 0; i < this.rbDetails.length; i++) {
            this.rbDetails[i].index = i;
            this.rbDetails[i].searchAddress = {
              sheng: this.rbDetails[i].travelprovincename,
              shi: this.rbDetails[i].travelcityname,
              qu: this.rbDetails[i].traveltownname,
            };
          }
          */
          //合计费用
          // if (this.rbDetails.length > 0) this.sumTotalFee();
@@ -1931,11 +2458,21 @@
            this.addPayeeRow(0);
          }
        });
        sessionStorage.removeItem("apiform");
        sessionStorage.setItem("apiform", JSON.stringify(this.form));
      });
    },
    //提交审核意见
    checksubmit() {
      if (
        this.form.checkstatus != 3 &&
        this.userprofile.nickName == "陈慕华" &&
        this.checkObj.flowlevelone == 1
      ) {
        this.$modal.msgError("请选确认材料状态已收到!");
        return;
      }
      let checkfundobj = {
        flowconclusion: this.checkObj.flowlevelone,
        flowcontent: this.checkObj.flowconclusion,
@@ -1950,90 +2487,42 @@
        this.$modal.msgError("请选择审核结论后再提交审批结果!");
        return;
      }
      if (this.userprofile.nickName == "陈慕华") {
        this.Savenow();
        console.log("保存");
      }
      this.$modal.loading("正在提交审核,请稍候!");
      checkfund(checkfundobj).then(res => {
        this.reset();
        this.open = false;
        this.$modal.msgSuccess("提交审核成功!");
        // 关闭窗口
        this.$store.dispatch("tagsView/delView", this.$route);
        this.$router.go(-1);
        if (res.code == 200) {
          this.$modal.closeLoading();
          this.$modal.msgSuccess("提交审核成功!");
          // 关闭窗口
          this.$store.dispatch("tagsView/delView", this.$route);
          this.$router.go(-1);
        } else {
          this.$modal.closeLoading();
          if (res.msg) {
            this.$modal.msgError("操作失误");
          } else {
            this.$modal.msgError(res.msg);
          }
        }
      });
    },
    /** 提交保存按钮 */
    submitForm() {
    submitForm: debounce(function(data) {
      this.$refs["form"].validate(valid => {
        if (valid) {
          // idisabled=true;
          /**
           let indexErrTime = this.rbDetails.findIndex((item) => {
             if (item.endtime && item.starttime) {
               let d = this.$moment(item.endtime).diff(this.$moment(item.starttime), "d");
               if (d < 0) {
                 return true;
               } else {
                 return false;
               }
             } else {
               false;
             }
           });
           if (indexErrTime > -1) {
             this.$message({
               message: "第" + (indexErrTime + 1) + "行到达日期早于出发日期",
               type: "warning",
             });
             return;
           }
           let emptyStartTimeindex = this.rbDetails.findIndex(
             (item) => item.starttime == null || item.starttime == undefined || item.starttime == ""
           );
           if (emptyStartTimeindex > -1) {
             this.$message({
               message: "第" + (emptyStartTimeindex + 1) + "行出发日期为空",
               type: "warning",
             });
             return;
           }
           let emptyEndTimeindex = this.rbDetails.findIndex(
             (item) => item.endtime == null || item.endtime == undefined || item.endtime == ""
           );
           if (emptyEndTimeindex > -1) {
             this.$message({
               message: "第" + (emptyEndTimeindex + 1) + "行到达日期为空",
               type: "warning",
             });
             return;
           }
          //费用归属
          let belongArr = this.dict.type.sys_travelexpensebelong;
          let costtypeindex = belongArr.findIndex(
            (item) => this.form.costtype == item.value
          );
          if (costtypeindex > -1) {
            this.form.costtypename = belongArr[costtypeindex].label;
          }
          */
          //票据文件处理
          let list = this.fileListto;
          console.log(list);
          const addnumber = this.rbPayees.reduce(
            (amount, item) => amount + Number(item.amount),
            0
          );
          //校验请款金额合计是否等于报销单金额
          if (
            this.form.amountrequested !=
            this.rbPayees.reduce(
              (amount, item) => amount + Number(item.amount),
              0.0
            )
          ) {
          if (this.form.amountrequested != addnumber) {
            this.$message({
              message:
                "报销请款表中合计金额不等于报销单的报销金额,请更正后再保存!",
@@ -2044,6 +2533,47 @@
          const rbDetails = [...this.rbDetails];
          const rbPayees = [...this.rbPayees];
          //保存前校验数据
          for (let k = 0; k < rbDetails.length; k++) {
            let tempDetail = rbDetails[k];
            console.log(tempDetail, "tem");
            if (!tempDetail.persontype) {
              this.$modal.msgWarning(
                "明细表中,第" +
                  (k + 1).toString() +
                  "行的人员类别未选择,请先选择人员类别后再提交保存!"
              );
              return;
            }
            if (!tempDetail.personname) {
              this.$modal.msgWarning(
                "明细表中,第" +
                  (k + 1).toString() +
                  "行的费用人员未选择,请选择费用人员后再提交保存!"
              );
              return;
            }
            if (!tempDetail.starttime) {
              this.$modal.msgWarning(
                "明细表中,第" +
                  (k + 1).toString() +
                  "行的开始日期未选择,请选择开始日期后再提交保存!"
              );
              return;
            }
            if (!tempDetail.endtime) {
              this.$modal.msgWarning(
                "明细表中,第" +
                  (k + 1).toString() +
                  "行的结束日期姓名为选择,请选择结束日期后再提交保存!"
              );
              return;
            }
          }
          if (this.form.id != null) {
            console.log(this.form);
            updateReimbursement(this.form);
@@ -2051,11 +2581,33 @@
            //保存明细
            for (let i = 0; i < rbDetails.length; i++) {
              if (rbDetails[i].rbid != null) {
                updateReimbursementdetail(rbDetails[i]);
                if (rbDetails[i].persontype == "家属") {
                  if (this.form.infoid) {
                    updateReimbursementdetail(rbDetails[i]);
                  } else {
                    return this.$message.error(
                      `因家属分配要求,请选择捐献者信息`
                    );
                  }
                } else {
                  updateReimbursementdetail(rbDetails[i]);
                }
              } else {
                //rbid关联主表Id
                rbDetails[i].rbid = this.form.id;
                addReimbursementdetail(rbDetails[i]);
                if (rbDetails[i].persontype == "家属") {
                  if (this.form.infoid) {
                    //rbid关联主表Id
                    rbDetails[i].rbid = this.form.id;
                    addReimbursementdetail(rbDetails[i]);
                  } else {
                    return this.$message.error(
                      `因家属分配要求,请选择捐献者信息`
                    );
                  }
                } else {
                  //rbid关联主表Id
                  rbDetails[i].rbid = this.form.id;
                  addReimbursementdetail(rbDetails[i]);
                }
              }
            }
@@ -2069,21 +2621,31 @@
                addReimbursementpayee(rbPayees[i]);
              }
            }
            this.$modal.msgSuccess("修改报销单保存成功!");
            if (this.userprofile.nickName != "陈慕华") {
              this.$modal.msgSuccess("修改报销单保存成功!");
            }
            this.open = false;
            // 关闭窗口
            this.$store.dispatch("tagsView/delView", this.$route);
            this.$router.go(-1);
            // this.getList();
            // })
            // .catch(err => {
            //   this.$modal.msgError("修改报销单保存失败!");
            // });
          } else {
            this.form.recordstatus = -1;
            // 申请时间
            var currenttime = new Date();
            this.form.applyTime =
              currenttime.getFullYear() +
              "-" +
              (currenttime.getMonth() + 1) +
              "-" +
              currenttime.getDate() +
              " " +
              currenttime.getHours() +
              ":" +
              currenttime.getMinutes() +
              ":" +
              currenttime.getSeconds();
            addReimbursement(this.form)
              .then(response => {
                //保存明细
@@ -2099,6 +2661,11 @@
                  rbPayees[i].rbid = response.data;
                  addReimbursementpayee(rbPayees[i]);
                }
                sessionStorage.setItem(
                  "apifunddetail",
                  JSON.stringify(this.rbDetails)
                );
                sessionStorage.setItem("apiform", JSON.stringify(this.form));
                this.$modal.msgSuccess("新增报销单保存成功!");
                this.open = false;
@@ -2108,12 +2675,12 @@
                this.$router.go(-1);
              })
              .catch(err => {
                this.$modal.msgError("新增报销单保存失败!");
                this.$modal.msgError("新增报销单保存失败!" + res);
              });
          }
        }
      });
    },
    }, 500),
    /** 删除按钮操作 */
    handleDelete(row) {
@@ -2157,20 +2724,16 @@
      this.Savereminder = false;
      this.Reminderquantity = 0;
      this.totalquantity = 0;
      const addnumber = this.rbPayees.reduce(
        (amount, item) => amount + Number(item.amount),
        0
      );
      console.log(addnumber, "addnumber");
      this.$refs["form"].validate(valid => {
        if (valid) {
          //票据文件处理
          let list = this.fileListto;
          console.log(list);
          //校验请款金额合计是否等于报销单金额
          if (
            this.form.amountrequested !=
            this.rbPayees.reduce(
              (amount, item) => amount + Number(item.amount),
              0.0
            )
          ) {
          if (this.form.amountrequested != addnumber) {
            this.$message({
              message:
                "报销请款表中合计金额不等于报销单的报销金额,请更正后再保存!",
@@ -2208,12 +2771,6 @@
            }
            this.$modal.msgSuccess("修改报销单保存成功!");
            // this.getList();
            // })
            // .catch(err => {
            //   this.$modal.msgError("修改报销单保存失败!");
            // });
          } else {
            this.form.recordstatus = -1;
            addReimbursement(this.form)
@@ -2244,6 +2801,8 @@
    //新增一行
    addDetailRow(rowIndex) {
      console.log(rowIndex);
      let rowData = {
        //index: this.rbDetails.length,
        searchAddress: {
@@ -2258,6 +2817,8 @@
        endtime: null,
        destination: null,
        days: null,
        persontype: null,
        personname: null,
        trafficexpense: 0,
        traffictype: null,
        traffictype2: null,
@@ -2281,13 +2842,18 @@
        total: 0,
        orderno: null,
        personname2: null,
        personname: null,
        destination: null
      };
      if (this.Reminderquantity >= 5) {
        this.Savereminder = true;
        return;
      if (this.rbDetails.length) {
        console.log(this.rbDetails[rowIndex].persontype);
        console.log(this.rbDetails[rowIndex].personname);
        rowData.persontype = this.rbDetails[rowIndex].persontype;
        rowData.personname = this.rbDetails[rowIndex].personname;
      }
      // if (this.Reminderquantity >= 5) {
      //   this.Savereminder = true;
      //   return;
      // }
      if (rowIndex == undefined || rowIndex == null || rowIndex < 0) {
        this.rbDetails.push(rowData);
      } else {
@@ -2313,10 +2879,10 @@
        personname: null,
        amount: null
      };
      if (this.Reminderquantity >= 5) {
        this.Savereminder = true;
        return;
      }
      // if (this.Reminderquantity >= 5) {
      //   this.Savereminder = true;
      //   return;
      // }
      if (rowIndex == undefined || rowIndex == null || rowIndex <= 0) {
        this.rbPayees.push(rowData);
      } else {
@@ -2364,8 +2930,10 @@
      })
        .then(() => {
          console.log(row);
          let arrow = [];
          arrow.push(row.id);
          if (row.id !== null) {
            delReimbursementdetail(row.id).then(res => {
            delReimbursementpayee(arrow).then(res => {
              this.$modal.msgSuccess("删除成功");
              rows.splice(index, 1);
              this.recountOrderNo2();
@@ -2456,7 +3024,7 @@
      if (!isNaN(parseFloat(row.otherfeeamount))) {
        totalFee += parseFloat(row.otherfeeamount);
      }
      row.total = totalFee;
      row.total = totalFee.toFixed(2);
      /*
      if (!isNaN(parseFloat(this.rbDetails[rowIndex].trafficexpense))) {
@@ -2651,12 +3219,15 @@
        "departure",
        "destination",
        "traffictype",
        "traffictype2",
        "departure"
        "traffictype2"
      ];
      columns.forEach((column, index) => {
        if (index === 0) {
          sums[index] = "合计";
          return;
        }
        if (index === 18) {
          sums[index] = this.form.amountrequested;
          return;
        }
        //去除部分字段计算
@@ -2674,7 +3245,7 @@
              return prev;
            }
          }, 0);
          sums[index] += "";
          sums[index] = sums[index].toFixed(2); // 保留2位小数,解决小数合计列;
        } else {
          sums[index] = "";
        }
@@ -2720,7 +3291,7 @@
  height: 600px;
  .box-pdf {
    width: 200px;
    width: 400px;
    padding-top: 20px;
    margin-right: 30px;
    border: 1px solid #dcdfe6;
@@ -2759,4 +3330,9 @@
  line-height: 36px;
  text-align: center;
}
::v-deep .el-alert__title {
  font-size: 20px;
  line-height: 20px;
}
</style>