11
WXL
2023-09-04 1fc6fb99de36cc345e23f8ca5a6cbb9bc1828c07
src/views/project/travelexpenseapply/travelexpensedetail/index.vue
@@ -209,12 +209,14 @@
          </el-row>
          -->
        <el-row style="margin-top: 25px; margin-bottom: 5px">
          <el-col :span="20">报销明细录入:</el-col>
          <el-col :span="20">报销明细</el-col>
        </el-row>
        <el-row>
          <el-table
            :data="rbDetails"
            ref="table"
            border
            max-height="400"
            highlight-current-row
            :summary-method="getSummaries"
            show-summary
@@ -478,18 +480,25 @@
                />
              </template>
            </el-table-column>
            <!--
            <el-table-column prop="cityfee" label="市内交通费" align="center" width="100">
            <el-table-column
              prop="cityfee"
              label="市内交通费"
              align="center"
              width="100"
            >
              <template slot-scope="scope">
                <el-input v-model="scope.row.cityfee" placeholder="市内交通费" @blur="
                  (val) => {
                    sumRowFee(scope.row);
                  }
                ">{{ Number(scope.row.cityfee).toFixed(2) }}
                <el-input
                  v-model="scope.row.cityfee"
                  placeholder="市内交通费"
                  @blur="
                    val => {
                      sumRowFee(scope.row);
                    }
                  "
                  >{{ Number(scope.row.cityfee).toFixed(2) }}
                </el-input>
              </template>
            </el-table-column>
                                                                                                                                      -->
            <el-table-column
              prop="hotelexpense"
              label="住宿费"
@@ -619,7 +628,7 @@
                  type="text"
                  size="mini"
                  @click="addDetailRow(scope.$index)"
                  v-if="dialogType == 'edit'"
                  v-if="operationType == 'edit'"
                  >新增</el-button
                >
                <el-button
@@ -628,7 +637,7 @@
                  "
                  type="text"
                  size="small"
                  v-if="dialogType == 'edit'"
                  v-if="operationType == 'edit'"
                  >删除</el-button
                >
                <el-button
@@ -644,12 +653,13 @@
          </el-table>
        </el-row>
        <el-row style="margin-top: 25px; margin-bottom: 5px">
          <el-col :span="20">报销请款明细:</el-col>
          <el-col :span="20">打款明细</el-col>
        </el-row>
        <el-row style="margin-top: 30px">
        <el-row style="margin-top: 5px">
          <el-table
            :data="rbPayees"
            border
            max-height="400"
            highlight-current-row
            :summary-method="getSummaries"
            show-summary
@@ -810,7 +820,7 @@
              label="操作"
              align="center"
              width="100"
              v-if="dialogType == 'edit'"
              v-if="operationType == 'edit'"
            >
              <template slot-scope="scope">
                <el-button
@@ -832,32 +842,36 @@
            </el-table-column>
          </el-table>
        </el-row>
        <el-row v-if="dialogType == 'detail' || dialogType == 'check'">
        <el-row
          style="margin-top: 25px; margin-bottom: 5px"
          v-if="operationType != 'edit'"
        >
          <el-col :span="20">审核记录</el-col>
        </el-row>
        <el-row v-if="operationType != 'add'">
          <el-table :data="fundflowList" border>
            <el-table-column
              label="审核人"
              align="center"
              width="120"
              prop="checkusername"
            />
            <el-table-column
              label="审核日期"
              align="center"
              width="160"
              width="200"
              prop="createTime"
            />
            <el-table-column
              label="审核人"
              align="center"
              width="150"
              prop="checkusername"
            />
            <el-table-column
              label="审核结果"
              align="center"
              width="200"
              prop="flowconclusion"
              ><template slot-scope="scope"
                ><span v-if="scope.row.flowconclusion == 1">通过</span
                ><span v-if="scope.row.flowconclusion == 2"
                  >不通过</span
                ></template
              >
            >
              <template slot-scope="scope">
                <span v-if="scope.row.flowconclusion == 1">通过</span>
                <span v-if="scope.row.flowconclusion == 2">不通过</span>
              </template>
            </el-table-column>
            <el-table-column
              label="审核备注"
@@ -868,7 +882,7 @@
        </el-row>
        <el-row
          style="margin-top: 25px; margin-bottom: 5px"
          v-if="dialogType == 'check'"
          v-if="operationType == 'check'"
        >
          <el-col :span="7">
            <el-form-item label="审核结果" align="left">
@@ -879,7 +893,7 @@
            </el-form-item>
          </el-col>
        </el-row>
        <el-row v-if="dialogType == 'check'">
        <el-row v-if="operationType == 'check'">
          <el-col :span="17">
            <el-form-item label="审核备注" align="left">
              <el-input v-model="checkObj.flowconclusion" placeholder="备注" />
@@ -891,20 +905,27 @@
        <el-button
          type="primary"
          @click="submitForm"
          v-if="dialogType == 'edit'"
          v-if="operationType == 'edit'"
          >保 存</el-button
        >
        <el-button
          type="primary"
          @click="checksubmit"
          v-if="dialogType == 'check'"
          v-if="operationType == 'check'"
          >提 交</el-button
        >
        <!--<el-button @click="cancel">退 出</el-button>-->
      </div>
    </div>
    <el-dialog :title="pdftitle" :visible.sync="pdfVisible" width="50%">
    <el-dialog
      v-dialogDrags
      :modal="false"
      :close-on-click-modal="false"
      :title="pdftitle"
      :visible.sync="pdfVisible"
      width="60%"
    >
      <div class="pdfimg">
        <div class="box-pdf">
          <div>
@@ -913,7 +934,9 @@
              class="upload-demo"
              :action="uploadFileUrl"
              :file-list="fileListto"
              :show-file-list="false"
              multiple
              drag
              :limit="20"
              :headers="headers"
              :on-success="
@@ -921,35 +944,96 @@
                  uploadSccess(response, file, fileList)
              "
              :on-preview="downFile"
              :disabled="dialogType == 'detail'"
              :disabled="operationType == 'detail'"
              :on-error="handleUploadError"
              :on-exceed="handleExceed"
              :on-remove="remove"
              accept="image/*,.pdf"
            >
              <el-button
                :disabled="dialogType == 'detail'"
                size="small"
                type="primary"
                >上传</el-button
              >
              <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%"
            >
              <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="deletedowfile(scope.row)"
                    >删除</el-button
                  >
                  <el-button
                    type="primary"
                    size="mini"
                    @click.native.prevent="moveupdowfile(scope.row)"
                    >上移</el-button
                  >
                </template>
              </el-table-column>
            </el-table>
          </div>
          <!-- <div
            class="pdftit"
            @click="pdffn(item)"
            v-for="item in fileList"
            :key="item.name"
          >
            {{ item.name }}
          </div> -->
        </div>
        <div v-if="this.previewpdf" class="pdfimgmin">
          <img :src="pdfimg" />
          <!-- <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-dialog>
    <el-dialog title="提示" :visible.sync="Savereminder" width="30%">
      <el-alert
        :title="
          '您已添加' +
            totalquantity +
            '条数据,为防止数据丢失是否提交保存再继续添加。'
        "
        type="warning"
      >
      </el-alert>
      <span slot="footer" class="dialog-footer">
        <el-button @click="unsave">取 消</el-button>
        <el-button type="primary" @click="Savenow">确 定</el-button>
      </span>
    </el-dialog>
  </div>
</template>
@@ -993,6 +1077,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,
@@ -1035,6 +1120,10 @@
        value: 0,
        label: ""
      },
      pdfimgsrcList: [],
      Savereminder: false, //提醒保存弹框
      Reminderquantity: 0, //提醒数量
      totalquantity: 0, //总数量
      hintitle: "选中左侧已上传文件预览查看",
      atpresent: "",
@@ -1052,6 +1141,11 @@
      loading: true,
      // 导出遮罩层
      exportLoading: false,
      // 网络请求头
      Networkheader: null,
      // 当前单据ID
      curId: 0,
      // 选中数组
      ids: [],
      // 非单个禁用
@@ -1114,7 +1208,7 @@
      defaultperson: {},
      fundflowList: [],
      showApproveRecordDialog: false,
      dialogType: "edit",
      operationType: "edit",
      //上传发票文件路径
      uploadFileUrl: process.env.VUE_APP_BASE_API + "/common/upload",
@@ -1143,6 +1237,8 @@
  },
  created() {
    this.Getnetworkheader();
    //获取记录列表
    // this.getList();
@@ -1179,23 +1275,41 @@
  mounted() {
    //选择业务类型:1、新增;2、修改;3、查看
    let ids = this.$route.query.id;
    let curId = this.$route.query.id;
    let pos = this.$route.query.pos;
    this.defaultperson = this.$route.query.routerparam;
    if (pos == 1) {
      this.handleAdd(ids);
      this.handleAdd(curId);
    } else if (pos == 2) {
      this.handleUpdate(ids);
      this.handleUpdate(curId);
    } else if (pos == 3) {
      this.handleDetail(ids);
      this.handleDetail(curId);
    } else if (pos == 4) {
      this.handleCheck(ids);
      this.handleCheck(curId);
    }
  },
  updated() {
    this.$nextTick(() => {
      this.$refs["table"].doLayout();
    });
  },
  methods: {
    handleUploadError() {},
    // 获取请求头
    Getnetworkheader() {
      console.log(window.location.href);
      let string = window.location.href;
      if (string.includes("9091")) {
        const index = string.indexOf("9091");
        this.Networkheader = string.slice(0, index + 4); // 截取9091及其前部字符
        console.log(this.Networkheader);
      } else {
        const index = string.indexOf("8032");
        this.Networkheader = string.slice(0, index + 4); // 截取8032及其前部字符
        console.log(this.Networkheader);
      }
    },
    remove(file, fileList) {
      const rbDetails = [...this.rbDetails];
      this.fileListto.splice(this.fileListto.indexOf(file), 1);
@@ -1209,13 +1323,19 @@
    //文件上传成功回调
    uploadSccess(response, file, fileList) {
      this.rbDetails;
      //获取票据信息位置
      if (response.code == 200) {
        this.form.filename = file.raw.name;
        this.$modal.msgSuccess(response.msg);
        this.fileListto.push({ name: file.name, url: response.url });
        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;
      } else {
        console.log(response.msg);
@@ -1225,8 +1345,17 @@
    Filepopup(index, rows, 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;
        this.pdfimgsrcList = [];
        this.fileListto.forEach(item => {
          this.pdfimgsrcList.push(this.Networkheader + "/prod-api" + item.url);
        });
        console.log(this.pdfimgsrcList);
        console.log(this.pdfimg);
      } else {
        this.fileListto = [];
        this.pdfimg = "";
@@ -1246,9 +1375,12 @@
      } else if (name[1] == "jpg" || "png") {
        this.previewpdf = true;
        if (item.url) {
          this.pdfimg = item.url;
          this.pdfimg = this.Networkheader + "/prod-api" + item.url;
          // this.pdfimgsrcList = [];
          // this.pdfimgsrcList.push(this.pdfimg);
          console.log(this.pdfimg);
        } else {
          this.pdfimg = item.response.url;
          this.pdfimg = this.Networkheader + "/prod-api" + item.response.url;
        }
      } else {
        this.hintitle = "当前文件暂不支持预览";
@@ -1256,12 +1388,32 @@
        this.previewpdf = false;
      }
    },
    getIndexInArray(arr, obj) {
      return arr.indexOf(obj);
    },
    // 点击删除
    deletedowfile(row) {
      console.log(this.fileListto);
      console.log(row);
      const index = this.getIndexInArray(this.fileListto, row);
      this.fileList = this.fileListto.splice(index, 1);
      console.log(index);
    },
    // 点击上移
    moveupdowfile(row) {
      const index = this.getIndexInArray(this.fileListto, row);
      const item = this.fileListto.splice(index, 1)[0]; // 移除指定索引处的元素,并保存到item变量中
      this.fileListto.splice(index - 1, 0, item); // 将item插入到索引位置的前一位
    },
    /** 查询部门下拉树结构 */
    getTreeselect() {
      treeselect().then(response => {
        this.deptOptions = response.data;
      });
    },
    cellCilicksa(row) {
      console.log(row);
    },
    //获取人员列表
@@ -1391,7 +1543,17 @@
        }
        //伙食费补助:城市(西藏,新疆,青海.120)(其他100)
        row.foodallowance = (parseInt(row.days) * 100).toString();
        if (tempStr == "杭州") {
          row.foodallowance = "";
        } else if (
          tempStr == "西藏" ||
          tempStr == "新疆" ||
          tempStr == "青海"
        ) {
          row.foodallowance = (parseInt(row.days) * 120).toString();
        } else {
          row.foodallowance = (parseInt(row.days) * 100).toString();
        }
        //计算合计
        this.sumRowFee(row);
@@ -1536,6 +1698,7 @@
      this.loading = true;
      listReimbursement(this.queryParams).then(response => {
        this.reimbursementList = response.rows;
        console.log(this.reimbursementList);
        this.total = response.total;
        this.loading = false;
      });
@@ -1635,7 +1798,7 @@
      this.reset();
      // this.open = true;
      this.title = "新增差旅申请单";
      this.dialogType = "edit";
      this.operationType = "edit";
      this.fundflowList = [];
      console.log(this.title, this.defaultperson);
@@ -1651,20 +1814,19 @@
    },
    /** 修改按钮操作 */
    handleUpdate(ids) {
    handleUpdate(curId) {
      // this.$router.push({
      //   path: "/finance/travelexpenseslist/Modifydetails/",
      //   query: { id: ids }
      // });
      this.dialogType = "edit";
      this.operationType = "edit";
      this.reset();
      // this.open = true;
      this.title = "报销申请修改";
      //获取报销主信息
      const id = ids || this.ids;
      getReimbursement(id).then(response => {
      getReimbursement(curId).then(response => {
        this.form = response.data;
        this.fileListto = this.form.annexfiles
          ? this.form.annexfiles
@@ -1673,9 +1835,8 @@
          : [];
        this.form.recordstatus = response.data.recordstatus + "";
        let ids = response.data.id;
        //获取报销明细信息
        getReimbursementdetaillist(ids).then(res => {
        getReimbursementdetaillist(curId).then(res => {
          this.rbDetails = res.data;
          console.log(this.rbDetails);
          if (this.rbDetails.length == 0) {
@@ -1698,19 +1859,29 @@
        });
        //获取报销打款信息
        this.queryParamsPayee.rbid = ids;
        this.queryParamsPayee.rbid = curId;
        listReimbursementpayee(this.queryParamsPayee).then(res => {
          this.rbPayees = res.rows;
          if (this.rbPayees.length == 0) {
            this.addPayeeRow(0);
          }
        });
        //审核状态
        this.form.recordstatus = response.data.recordstatus + "";
        let listFundflowparams = {
          fundid: curId,
          fundtype: 1
        };
        listFundflow(listFundflowparams).then(res => {
          this.fundflowList = res.rows;
        });
      });
    },
    /** 查看按钮操作 */
    handleDetail(ids) {
      this.dialogType = "detail";
      this.operationType = "detail";
      this.title = "报销申请详情";
      this.reset();
@@ -1770,7 +1941,7 @@
    /** 审核按钮操作 */
    handleCheck(ids) {
      this.dialogType = "check";
      this.operationType = "check";
      this.title = "报销申请详情";
      this.reset();
@@ -1852,13 +2023,15 @@
      checkfund(checkfundobj).then(res => {
        this.reset();
        this.open = false;
        this.getList();
        this.$modal.msgSuccess("提交审核成功!");
        // 关闭窗口
        this.$store.dispatch("tagsView/delView", this.$route);
        this.$router.go(-1);
      });
    },
    /** 提交保存按钮 */
    submitForm() {
    submitForm: debounce(function(data) {
      this.$refs["form"].validate(valid => {
        if (valid) {
          // idisabled=true;
@@ -1970,7 +2143,9 @@
            this.open = false;
            // 关闭窗口
            this.$store.dispatch("tagsView/delView", this.$route);
            this.$router.go(-1);
            // this.getList();
            // })
            // .catch(err => {
@@ -1998,6 +2173,7 @@
                this.open = false;
                // 关闭窗口
                this.$store.dispatch("tagsView/delView", this.$route);
                this.$router.go(-1);
              })
              .catch(err => {
@@ -2006,7 +2182,7 @@
          }
        }
      });
    },
    }, 500),
    /** 删除按钮操作 */
    handleDelete(row) {
@@ -2039,6 +2215,100 @@
          this.exportLoading = false;
        })
        .catch(() => {});
    },
    // 取消提醒
    unsave() {
      this.Savereminder = false;
      this.Reminderquantity = 0;
    },
    // 接受提醒立刻保存
    Savenow() {
      this.Savereminder = false;
      this.Reminderquantity = 0;
      this.totalquantity = 0;
      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
            )
          ) {
            this.$message({
              message:
                "报销请款表中合计金额不等于报销单的报销金额,请更正后再保存!",
              type: "warning"
            });
            return;
          }
          const rbDetails = [...this.rbDetails];
          const rbPayees = [...this.rbPayees];
          if (this.form.id != null) {
            console.log(this.form);
            updateReimbursement(this.form);
            //   .then(res => {
            //保存明细
            for (let i = 0; i < rbDetails.length; i++) {
              if (rbDetails[i].rbid != null) {
                updateReimbursementdetail(rbDetails[i]);
              } else {
                //rbid关联主表Id
                rbDetails[i].rbid = this.form.id;
                addReimbursementdetail(rbDetails[i]);
              }
            }
            //保存账户
            for (let i = 0; i < rbPayees.length; i++) {
              if (rbPayees[i].rbid != null) {
                updateReimbursementpayee(rbPayees[i]);
              } else {
                //rbid关联主表Id
                rbPayees[i].rbid = this.form.id;
                addReimbursementpayee(rbPayees[i]);
              }
            }
            this.$modal.msgSuccess("修改报销单保存成功!");
            // this.getList();
            // })
            // .catch(err => {
            //   this.$modal.msgError("修改报销单保存失败!");
            // });
          } else {
            this.form.recordstatus = -1;
            addReimbursement(this.form)
              .then(response => {
                //保存明细
                for (let i = 0; i < rbDetails.length; i++) {
                  //rbid关联主表Id
                  rbDetails[i].rbid = response.data;
                  addReimbursementdetail(rbDetails[i]);
                }
                //保存账号
                for (let i = 0; i < rbPayees.length; i++) {
                  //rbid关联主表Id
                  rbPayees[i].rbid = response.data;
                  addReimbursementpayee(rbPayees[i]);
                }
                this.$modal.msgSuccess("新增报销单保存成功!");
              })
              .catch(err => {
                this.$modal.msgError("新增报销单保存失败!");
              });
          }
        }
      });
    },
    //新增一行
@@ -2083,11 +2353,17 @@
        personname: null,
        destination: null
      };
      // if (this.Reminderquantity >= 5) {
      //   this.Savereminder = true;
      //   return;
      // }
      if (rowIndex == undefined || rowIndex == null || rowIndex < 0) {
        this.rbDetails.push(rowData);
      } else {
        this.rbDetails.splice(rowIndex + 1, 0, rowData);
      }
      this.Reminderquantity++;
      this.totalquantity++;
      for (let i = 0; i < this.rbDetails.length; i++) {
        this.rbDetails[i].orderno = i + 1;
      }
@@ -2106,11 +2382,17 @@
        personname: null,
        amount: null
      };
      // if (this.Reminderquantity >= 5) {
      //   this.Savereminder = true;
      //   return;
      // }
      if (rowIndex == undefined || rowIndex == null || rowIndex <= 0) {
        this.rbPayees.push(rowData);
      } else {
        this.rbPayees.splice(rowIndex + 1, 0, rowData);
      }
      this.Reminderquantity++;
      this.totalquantity++;
      for (let i = 0; i < this.rbPayees.length; i++) {
        this.rbPayees[i].orderno = i + 1;
      }
@@ -2507,7 +2789,7 @@
  height: 600px;
  .box-pdf {
    width: 200px;
    width: 400px;
    padding-top: 20px;
    margin-right: 30px;
    border: 1px solid #dcdfe6;