yxh
2023-05-11 0c14c70cbc02619b516dd92f1cee3d74b2b1f4a3
src/views/project/travelexpenseslist/index.vue
@@ -67,35 +67,36 @@
          <dict-tag :options="dict.type.sys_recordstatus" :value="scope.row.recordstatus" />
        </template>
      </el-table-column>
      <!--
      <el-table-column label="报销人类别" width="120" align="center" prop="costtype">
        <template slot-scope="scope">
          <dict-tag :options="dict.type.sys_travelexpensebelong" :value="scope.row.costtype" />
        </template>
      </el-table-column>
      </el-table-column>-->
      <el-table-column label="申请时间" width="120" align="center" prop="createTime">
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.createTime, "{y}-{m}-{d}") }}</span>
        </template>
      </el-table-column>
      <el-table-column label="报销人" width="120" align="center" prop="username">
      </el-table-column>
      <el-table-column label="经办人" width="120" align="center" prop="username">
      </el-table-column><!--
      <el-table-column label="出差人" width="180" align="center" prop="travelers">
      </el-table-column>
      </el-table-column>-->
      <el-table-column label="报销金额" width="120" align="center" prop="amountrequested">
      </el-table-column>
      <el-table-column label="出差事由" align="center" width="280" prop="reason">
      </el-table-column>
      <el-table-column label="联系电话" width="120" align="center" prop="phone">
      <!-- <el-table-column label="联系电话" width="120" align="center" prop="phone">
      </el-table-column>
      <el-table-column label="开户银行" width="180" align="center" prop="depositbank">
      </el-table-column>
      <el-table-column label="银行卡号" width="180" align="center" prop="bankcardno">
      </el-table-column>
      <!-- <el-table-column label="报销合计" align="center" prop="financechecher"/>-->
      <el-table-column label="报销合计" align="center" prop="financechecher"/>-->
      <!-- <el-table-column label="财务审核" width="120" align="center" prop="financechecher" /> -->
      <el-table-column label="捐献者" width="120" align="center" prop="donorname">
      </el-table-column>
      <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width" width="250">
      <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width" width="300">
        <template slot-scope="scope">
          <el-button v-if="scope.row.recordstatus == -1 || scope.row.recordstatus == 1" size="mini" type="text"
            icon="el-icon-upload2" @click="handleup(scope.row)">上报</el-button>
@@ -261,7 +262,7 @@
              plain
              icon="el-icon-plus"
              size="mini"
              @click="adddetailRow"
              @click="addDetailRow"
              >新增一行</el-button
            >
          </el-col>
@@ -289,17 +290,17 @@
              </template>
            </el-table-column>
            <el-table-column prop="persontype" slot="" label="人员类别" align="center" fixed width="120">
            <el-table-column prop="persontype" slot="" label="人员类别" align="center" fixed width="130">
              <template slot-scope="scope">
                <el-select v-model="scope.row.persontype" value-key="value" placeholder="人员类别"
                  @change="getPersons(scope.row)">
                  <el-option v-for="dict in dict.type.sys_travelexpensebelong" :key="dict.value" :label="dict.label"
                    :value="dict.value"></el-option>
                    :value="dict.label"></el-option>
                </el-select>
              </template>
            </el-table-column>
            <el-table-column prop="personname" slot="" label="费用人员" align="center" fixed width="120">
            <el-table-column prop="personname" slot="" label="费用人员" align="center" fixed width="110">
              <template slot-scope="scope">
                <el-select v-model="scope.row.personname" clearable filterable allow-create default-first-option
                  placeholder="请选择" @focus1="getPersons(scope.row)">
@@ -336,7 +337,7 @@
                <el-input v-model="scope.row.departure" placeholder="出发地" />
              </template>
            </el-table-column>
            <el-table-column label="到达地" prop="destination2" align="center" width="120">
            <el-table-column label="到达地" prop="destination2" align="center" width="140">
              <template slot-scope="scope">
                <!--  <el-input v-model="scope.row.destination" placeholder="到达地" @blur="getallowance(scope.row)" /> -->
@@ -444,8 +445,8 @@
            </el-table-column>
            <el-table-column fixed="right" label="操作" align="center" width="120" v-if="dialogType == 'edit'">
              <template slot-scope="scope">
                <el-button type="text" size="mini" @click="adddetailRow(scope.$index)">新增</el-button>
                <el-button @click.native.prevent="deleteRow(scope.$index, rbDetails, scope.row)
                <el-button type="text" size="mini" @click="addDetailRow(scope.$index)">新增</el-button>
                <el-button @click.native.prevent="deleteDetailRow(scope.$index, rbDetails, scope.row)
                  " type="text" size="small">
                  删除
                </el-button>
@@ -476,16 +477,16 @@
              </template>
            </el-table-column>
            <el-table-column prop="persontype" slot="" label="人员类别" align="center" fixed width="120">
            <el-table-column prop="persontype" slot="" label="人员类别" align="center" fixed width="130">
              <template slot-scope="scope">
                <el-select v-model="scope.row.persontype" value-key="value" placeholder="人员类别"
                  @change="getPersons(scope.row)">
                  <el-option v-for="dict in dict.type.sys_travelexpensebelong" :key="dict.value" :label="dict.label"
                    :value="dict.value"></el-option>
                    :value="dict.label"></el-option>
                </el-select>
              </template>
            </el-table-column>
            <el-table-column prop="personname" slot="" label="收款人" align="center" fixed width="130">
            <el-table-column prop="personname" slot="" label="收款人" align="center" fixed width="110">
              <template slot-scope="scope">
                <el-select v-model="scope.row.personname" clearable filterable allow-create ref="getReportname"
                  default-first-option placeholder="请选择" @change="getAccountinfo2(scope.row, scope.row.persontype)">
@@ -523,8 +524,8 @@
            </el-table-column>
            <el-table-column label="操作" align="center" width="100" v-if="dialogType == 'edit'">
              <template slot-scope="scope">
                <el-button type="text" size="mini" @click="addpayeeRow(scope.$index)">新增</el-button>
                <el-button @click.native.prevent="deleteRow2(scope.$index, rbPayees, scope.row)
                <el-button type="text" size="mini" @click="addPayeeRow(scope.$index)">新增</el-button>
                <el-button @click.native.prevent="deletePayeeRow(scope.$index, rbPayees, scope.row)
                  " type="text" size="small">
                  删除
                </el-button>
@@ -606,7 +607,7 @@
<script>
import { listDonatebaseinfo } from "@/api/project/donatebaseinfo";
import { addOrUpdateRBpayee, listReimbursementpayee, addReimbursementpayee, updateReimbursementpayee } from "@/api/project/reimbursementpayee";
import { listReimbursementpayee, addReimbursementpayee, updateReimbursementpayee } from "@/api/project/reimbursementpayee";
import {
  listReimbursement,
  getReimbursement,
@@ -718,6 +719,10 @@
      queryParams2: {
        persontype: null,
        arriveAddr: null,
      },
      //查询付款
      queryParamsPayee: {
        rbid: null,
      },
      // 表单参数
      form: {},
@@ -864,15 +869,15 @@
    getPersons(row) {
      //专职人员-1,协调员-2,专家-3,家属-4,其他人员-5
      let tmpList = null;
      if (row.persontype == "1") {
      if (row.persontype == "专职人员") {
        this.personsSel = this.personsZzry;
      } else if (row.persontype == "2") {
      } else if (row.persontype == "协调员") {
        this.personsSel = this.personsXty;
      } else if (row.persontype == "3") {
      } else if (row.persontype == "专家") {
        this.personsSel = this.personsExpert;
      } else if (row.persontype == "4") {
      } else if (row.persontype == "家属") {
        this.personsSel = tmpList;
      } else if (row.persontype == "5") {
      } else if (row.persontype == "管理人员") {
        this.personsSel = this.personsManager;
      }
    },
@@ -893,13 +898,13 @@
    //获取设置人员账号信息
    getAccountinfo2(row, personType) {
      let dataArr = [];
      if (personType == 1) {
      if (personType == '专职人员') {
        dataArr = this.personsZzry;
      } else if (personType == 2) {
      } else if (personType == '协调员') {
        dataArr = this.personsXty;
      } else if (personType == 3) {
      } else if (personType == '专家') {
        dataArr = this.personsExpert;
      } else if (personType == 5) {
      } else if (personType == '管理人员') {
        dataArr = this.personsManager;
      }
@@ -958,7 +963,7 @@
      this.arriveAddr = val2;
      this.queryParams2.arriveAddr;
      this.queryParams2.personType = row;
      if (row.persontype != undefined && row.persontype == "2" || row.persontype == "5") {
      if (row.persontype != undefined && row.persontype == "协调员" || row.persontype == "管理人员") {
        this.loading = true;
        getSubsidy(val2).then((response) => {
          this.loading = false;
@@ -1211,20 +1216,23 @@
    /** 新增按钮操作 */
    handleAdd() {
      this.reset();
      this.open = true;
      this.title = "新增报销申请";
      this.dialogType = "edit";
      this.fundflowList = [];
      this.form.username = this.defaultperson.nickName;
      this.form.userno = this.defaultperson.userName;
      this.adddetailRow();
      this.addpayeeRow();
      this.open = true;
      this.title = "添加报销申请";
      this.addDetailRow(0);
      this.addPayeeRow(0);
    },
    /** 修改按钮操作 */
    handleUpdate(row) {
      this.dialogType = "edit";
      this.reset();
      this.open = true;
      this.title = "修改报销申请";
      //获取报销主信息
      const id = row.id || this.ids;
@@ -1232,21 +1240,15 @@
        this.form = response.data;
        this.fileList = this.form.annexfiles ? this.form.annexfiles.split(",").map(item => ({ url: item, name: item })) : []
        this.form.recordstatus = response.data.recordstatus + "";
        this.open = true;
        this.title = "修改报销申请";
        let ids = response.data.id;
        let ids = response.data.id;
        //获取报销明细信息
        getReimbursementdetaillist(ids).then((res) => {
          if (res.data.length == 0) {
            return;
          }
          this.rbDetails = res.data;
          for (let i = 0; i < this.rbDetails.length; i++) {
            //   this.rbDetails[i].personname2 = res.data[i].personname;
          }
          if (this.rbDetails.length==0) {this.addDetailRow(0);}
          //解析出差地址
          /*
          for (let i = 0; i < this.rbDetails.length; i++) {
            this.rbDetails[i].index = i;
            this.rbDetails[i].searchAddress = {
@@ -1255,37 +1257,38 @@
              qu: this.rbDetails[i].traveltownname,
            };
          }
          */
          //实时合计金额
          this.sumTotalFee();
          //this.sumTotalFee();
        });
          //获取报销打款信息
          let obj = { rbid: ids };
          listReimbursementpayee(obj).then((res) => {
            if (res.rows.length == 0) {
              return;
            }
            this.rbPayees = res.rows;
            console.log("listReimbursementpayee", res.rows);
          });
        //获取报销打款信息
        this.queryParamsPayee.rbid=ids;
        listReimbursementpayee(this.queryParamsPayee).then((res) => {
          this.rbPayees = res.rows;
          if (this.rbPayees.length==0) {this.addPayeeRow(0);}
        });
      });
      //默认存在一行
      this.adddetailRow();
      this.addpayeeRow();
    },
    /** 查看按钮操作 */
    handleDetail(row) {
      this.dialogType = "detail";
      this.reset();
      this.title = "查看报销申请";
      this.reset();
      this.open = true;
      const id = row.id || this.ids;
      getReimbursement(id).then((response) => {
        this.form = response.data;
        //附件
        this.fileList = this.form.annexfiles ? this.form.annexfiles.split(",").map(item => ({ url: item, name: item })) : []
        //审核状态
        this.form.recordstatus = response.data.recordstatus + "";
        this.open = true;
        this.title = "查看报销申请";
        let ids = response.data.id;
        let listFundflowparams = {
          fundid: row.id,
@@ -1294,6 +1297,7 @@
        listFundflow(listFundflowparams).then((res) => {
          this.fundflowList = res.rows;
        });
        //报销明细
        getReimbursementdetaillist(ids).then((res) => {
          this.rbDetails = res.data;
          for (let i = 0; i < this.rbDetails.length; i++) {
@@ -1306,6 +1310,14 @@
          }
          //this.sumTotalFee();
        });
        //账户
        this.queryParamsPayee.rbid=ids;
        listReimbursementpayee(this.queryParamsPayee).then((res) => {
          this.rbPayees = res.rows;
          if (this.rbPayees.length==0) {this.addPayeeRow(0);}
        });
      });
    },
@@ -1313,61 +1325,66 @@
    submitForm() {
      this.$refs["form"].validate((valid) => {
        if (valid) {
          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;
            }
          });
          /**
           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;
           }
          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.fileList;
          if (list.length > 0) {
            this.form.annexfiles = list.map(item => item.url).join(",");
          }
          if (costtypeindex > -1) {
            this.form.costtypename = belongArr[costtypeindex].label;
          }
          //校验请款金额合计是否等于报销单金额
@@ -1379,61 +1396,64 @@
            return;
          }
          const rbDetails = [...this.rbDetails]
          const rbPayees = [...this.rbPayees]
          if (this.form.id != null) {
            //rbid主表Id,方便后面关联主表
            let rbid = this.form.id;
            for (let i = 0; i < this.rbDetails.length; i++) {
              this.rbDetails[i].rbid = rbid;
            }
            updateReimbursement(this.form).then((response) => {
              addOrupdateReimbursementdetaillist(this.rbDetails).then((response) => {
                //更新支付表信息
                for (let i = 0; i < this.rbPayees.length; i++) {
                  this.rbPayees[i].rbid = rbid;
                }
                //addOrUpdateRBpayee(this.rbPayees);
                for (let i = 0; i < this.rbPayees.length; i++) {
                  if (this.rbPayees[i].rbid != null) {
                    updateReimbursementpayee(this.rbPayees[i]);
                  } else {
                    addReimbursementpayee(this.rbPayees[i]);
                  }
                }
                this.$modal.msgSuccess("修改成功");
                this.open = false;
                this.getList();
              });
            }).catch(err => {
              console.log(err);
            })
          } else {
            this.form.recordstatus = -1;
            const rbDetails = [...this.rbDetails]
            const rbPayees = [...this.rbPayees]
            addReimbursement(this.form).then((response) => {
            updateReimbursement(this.form).then((res) => {
              //保存明细
              for (let i = 0; i < rbDetails.length; i++) {
                rbDetails[i].rbid = response.data;
                if (rbDetails[i].rbid != null) {
                  updateReimbursementdetail(rbDetails[i]);
                } else {
                  //rbid关联主表Id
                  rbDetails[i].rbid = this.form.id;
                  addReimbursementdetail(rbDetails[i]);
                }
              }
              addOrupdateReimbursementdetaillist(rbDetails).then((response) => {
                this.$modal.msgSuccess("新增成功");
                this.open = false;
                this.getList();
                listReimbursementdetailid().then((res) => {
                  let id = res.data;
                  for (let i = 0; i < rbDetails.length; i++) {
                    rbDetails[i].rbid = id;
                    addReimbursementdetail(rbDetails[i]);
                  }
                  for (let i = 0; i < rbPayees.length; i++) {
                    rbPayees[i].rbid = id;
                  }
                  //addOrUpdateRBpayee(rbPayees);
                  addReimbursementpayee(rbPayees);
                })
              })
            })
              //保存账户
              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.open = false;
              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("新增报销单保存成功!");
              this.open = false;
              this.getList();
            }).catch(err => {
              this.$modal.msgError("新增报销单保存失败!");
            });
          }
        }
      });
@@ -1473,7 +1493,7 @@
    },
    //新增一行
    adddetailRow(rowIndex) {
    addDetailRow(rowIndex) {
      let rowData = {
        //index: this.rbDetails.length,
        searchAddress: {
@@ -1523,7 +1543,7 @@
      }
    },
    addpayeeRow(rowIndex) {
    addPayeeRow(rowIndex) {
      let rowData = {
        id: null,
        personType: null,
@@ -1536,7 +1556,7 @@
        personname: null,
        amount: null,
      };
      if (rowIndex == undefined || rowIndex == null || rowIndex < 0) {
      if (rowIndex == undefined || rowIndex == null || rowIndex <= 0) {
        this.rbPayees.push(rowData);
      } else {
        this.rbPayees.splice(rowIndex + 1, 0, rowData);
@@ -1546,7 +1566,7 @@
      }
    },
    deleteRow(index, rows, row) {
    deleteDetailRow(index, rows, row) {
      this.$confirm("是否确认删除?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
@@ -1573,7 +1593,7 @@
        });
    },
    deleteRow2(index, rows, row) {
    deletePayeeRow(index, rows, row) {
      this.$confirm("是否确认删除?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",