yxh
2023-05-23 86a98c135c7ebc417f8af2045aa105a94f2ccbeb
src/views/project/travelexpenseslist/index.vue
@@ -3,20 +3,27 @@
  <div class="app-container">
    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
      <el-row>
        <!--
        <el-col :span="6">
          <el-form-item label="出差人" prop="travelers">
            <el-input v-model="queryParams.travelers" placeholder="请输入出差人" clearable size="small"
              @keyup.enter.native="handleQuery" />
          </el-form-item>
        </el-col>
-->
        <el-col :span="6">
          <el-form-item label="经办人" prop="username">
            <el-input v-model="queryParams.username" placeholder="请输入经办人" clearable size="small"
              @keyup.enter.native="handleQuery" />
          </el-form-item>
        </el-col>
        <el-col :span="8">
          <el-form-item label="报销日期" prop="createTime">
            <el-date-picker format="yyyy-MM-dd" value-format="yyyy-MM-dd" v-model="value1" type="daterange" @blur="onpick"
              range-separator="至" start-placeholder="报销开始日期" end-placeholder="报销结束日期" @keyup.enter.native="handleQuery">
            </el-date-picker>
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="审核状态" prop="recordstatus">
            <el-input v-model="queryParams.recordstatus" placeholder="请选择审核状态" clearable size="small" v-if="0"
@@ -27,18 +34,7 @@
            </el-select>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row>
        <el-col :span="8">
          <el-form-item label="报销日期" prop="createTime">
            <el-date-picker format="yyyy-MM-dd" value-format="yyyy-MM-dd" v-model="value1" type="daterange" @blur="onpick"
              range-separator="至" start-placeholder="报销开始日期" end-placeholder="报销结束日期" @keyup.enter.native="handleQuery">
            </el-date-picker>
          </el-form-item>
        </el-col>
        <el-col :span="6">
        <el-col :span="4">
          <el-form-item>
            <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
            <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@@ -61,31 +57,31 @@
    </el-row>
    <el-table border v-loading="loading" :data="reimbursementList" @selection-change="handleSelectionChange">
      <!-- <el-table-column type="selection" width="55" align="center" /> -->
      <el-table-column label="记录状态" align="center" prop="recordstatus" width="180">
        <template slot-scope="scope">
          <dict-tag :options="dict.type.sys_recordstatus" :value="scope.row.recordstatus" />
        </template>
      </el-table-column>
      <!--
      <!-- <el-table-column type="selection" width="55" align="center" />
      <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 label="申请时间" width="120" align="center" prop="createTime">
      <el-table-column label="申请时间" width="150" 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="审核状态" align="center" prop="recordstatus" width="160">
        <template slot-scope="scope">
          <dict-tag :options="dict.type.sys_recordstatus" :value="scope.row.recordstatus" />
        </template>
      </el-table-column>
      <el-table-column label="经办人" width="150" align="center" prop="username" />
      <!--
      <el-table-column label="出差人" width="180" align="center" prop="travelers">
      </el-table-column>-->
      <el-table-column label="报销金额" width="120" align="center" prop="amountrequested">
      <el-table-column label="报销金额" width="150" 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="150" align="center" prop="deptmentname" />
      <el-table-column label="组长" width="150" align="center" prop="managername" />
      <el-table-column label="出差事由" align="center" prop="reason" />
      <!-- <el-table-column label="联系电话" width="120" align="center" prop="phone">
      </el-table-column>
      <el-table-column label="开户银行" width="180" align="center" prop="depositbank">
@@ -94,9 +90,8 @@
      </el-table-column>
      <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="300">
      <el-table-column label="捐献者" width="150" align="center" prop="donorname" />
      <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
        <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>
@@ -127,8 +122,7 @@
                placeholder="申请日期">
              </el-date-picker>
            </el-form-item>
          </el-col>
          <el-col :span="5">
          </el-col> <el-col :span="5">
            <el-form-item label="经办人" prop="username">
              <el-select v-model="form.username" clearable filterable allow-create ref="getReportname"
                default-first-option placeholder="请选择">
@@ -137,12 +131,24 @@
                </el-option>
              </el-select>
            </el-form-item>
          </el-col><el-col :span="5">
            <el-form-item label="区域组长" prop="managername">
              <el-input v-model="form.managername" placeholder="区域组长" />
          </el-col>
          <el-col :span="5">
            <el-form-item label="所属组别" prop="deptmentname">
              <el-input v-model="form.deptmentname" placeholder="所属组别" />
            </el-form-item>
          </el-col>
          <el-col :span="5">
            <el-form-item label="组长" prop="managername">
              <el-input v-model="form.managername" placeholder="组长" />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="15">
            <el-form-item label="出差事由" prop="reason">
              <el-input v-model="form.reason" placeholder="出差事由" />
            </el-form-item>
          </el-col>
          <el-col :span="5">
            <el-form-item label="捐献者" prop="infoid">
              <el-select v-model="form.infoid" @change="selectbaseinfo" filterable placeholder="请选择捐献者">
@@ -268,7 +274,7 @@
          </el-col>
          </el-row>
          -->
        <el-row>
        <el-row style="margin-top: 25px; margin-bottom: 5px">
          <el-col :span="20">报销明细录入:</el-col>
        </el-row>
        <el-row>
@@ -290,17 +296,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)">
@@ -337,7 +343,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)" /> -->
@@ -454,7 +460,7 @@
            </el-table-column>
          </el-table>
        </el-row>
        <el-row>
        <el-row style="margin-top: 25px; margin-bottom: 5px">
          <el-col :span="20">报销请款明细:</el-col>
        </el-row>
        <el-row style="margin-top: 30px">
@@ -477,16 +483,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)">
@@ -564,9 +570,8 @@
              <el-input v-model="form.financedirector" placeholder="财务部主任" />
            </el-form-item>
          </el-col>
        </el-row>
                                                                                                -->
        <el-row>
        </el-row> -->
        <el-row style="margin-top: 25px; margin-bottom: 5px">
          <el-col :span="14">
            <!--
          <el-form-item label="文件地址" prop="fileurl">
@@ -607,7 +612,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,
@@ -649,7 +654,6 @@
    "sys_travelexpensebelong",
    "sys_traffictype",
    "sys_area_name",
    "sys_traffictype"
  ],
  data() {
    return {
@@ -727,19 +731,17 @@
      // 表单参数
      form: {},
      reimbursementList: [],
      // 表单校验
      rules: {
        costtype: [
          { required: true, message: "请选择报销归类", trigger: "blur" },
        ],
        username: [
          { required: true, message: "请选择填报人", trigger: "blur" },
        ],
        travelers: [
          { required: true, message: "请选择报销人", trigger: "blur" },
        createTime: [
          { required: true, message: "请输入填报日期", trigger: "blur" },
        ],
        reason: [
          { required: true, message: "请输入出差事由", trigger: "blur" },
        ],
        deptmentname: [
          { required: true, message: "请输入所属业务组", trigger: "blur" },
        ],
      },
      //费用申请单form
@@ -869,15 +871,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;
      }
    },
@@ -898,13 +900,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;
      }
@@ -925,34 +927,29 @@
        row.endtime != null
      ) {
        //计算天数
        row.days = 1 + Math.floor(Math.abs(Date.parse(row.starttime) - Date.parse(row.endtime)) / (1099 * 3699 * 24))
        /*let aDate, oDate1, oDate2, Date_end,Date_start;
        Date_end = row.endtime.split(" "); //将时间以空格划分为两个数组  第一个数组是 2019-05-20 第二个数组是 00:00:00
        aDate = Date_end[0].split("-"); //获取第一个数组的值
        oDate1 = new Date(aDate[0], aDate[1], aDate[2]);  //将前半个数组以-拆分,每一个是一个数值
        Date_start = row.starttime.split(" ");
        aDate = Date_start[0].split("-");
        oDate2 = new Date(aDate[0], aDate[1], aDate[2]);
        row.days = 1+parseInt(Math.abs(oDate1 - oDate2) / 1000 / 60 / 60 / 24);    //把相差的毫秒数转换为天数
        */
        row.days = (Math.floor(Math.abs(Date.parse(row.starttime) - Date.parse(row.endtime)) / (1000 * 3600 * 24)) + 1).toString()
      } else {
        row.days = ''
        row.days = '';
      };
      //公杂费补助:杭州桐庐,建德,淳安60,杭州其他地区0,非杭州地区80
      if (row.destination2 != "") {
        var str = row.destination2;
        var tempStr = row.destination2;
        //验证城市
        ////if (str.indexOf("桐庐,建德,淳安") !== -1) { };
        if (str.includes("杭州")) { row.otherexpense = parseInt(row.days) * 0 }
        else if (str.includes("桐庐") || str.includes("建德") || str.includes("淳安")) { row.otherexpense = parseInt(row.days) * 60 }
        else { row.otherexpense = parseInt(row.days) * 80 };
        if (tempStr == "杭州") {
          row.otherexpense = '';
        }
        else if (tempStr == "杭州-桐庐" || tempStr == "杭州-建德" || tempStr == "杭州-淳安") {
          row.otherexpense = (parseInt(row.days) * 60).toString();
        }
        else {
          row.otherexpense = (parseInt(row.days) * 80).toString();
        };
      }
      //伙食费补助:城市(西藏,新疆,青海.120)(其他100)
      row.foodallowance = parseInt(row.days) * 100
      row.foodallowance = (parseInt(row.days) * 100).toString();
      //计算合计
      this.sumTotalFee();
@@ -963,7 +960,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;
@@ -994,6 +991,7 @@
          patowncode: this.$refs["residenceSelect_" + row.index].getQu(),
          standardlevel: this.standardlevel,
        };
        getTravelStandard(info)
          .then((response) => {
            let fee = 0;
@@ -1122,7 +1120,7 @@
    },
    // 表单重置
    reset() {
      this.fileList = []
      this.fileList = [];
      this.form = {
        ceshi: {},
        bigstrmoney: null,
@@ -1216,20 +1214,28 @@
    /** 新增按钮操作 */
    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.form.username = this.defaultperson.nickName;
      this.form.deptmentname = this.defaultperson.dept.deptName;
      this.form.deptmentno = this.defaultperson.dept.deptId;
      this.form.managername = this.defaultperson.dept.leader;
      this.addDetailRow(0);
      this.addPayeeRow(0);
    },
    /** 修改按钮操作 */
    handleUpdate(row) {
      this.dialogType = "edit";
      this.reset();
      this.open = true;
      this.title = "修改报销申请";
      //获取报销主信息
      const id = row.id || this.ids;
@@ -1243,6 +1249,7 @@
        //获取报销明细信息
        getReimbursementdetaillist(ids).then((res) => {
          this.rbDetails = res.data;
          if (this.rbDetails.length == 0) { this.addDetailRow(0); }
          //解析出差地址
          /*
          for (let i = 0; i < this.rbDetails.length; i++) {
@@ -1259,26 +1266,21 @@
        });
        //获取报销打款信息
        queryParamsPayee.rbid=response.data.id;
        console.log("rbPayees11111    ", queryParamsPayee);
        listReimbursementpayee(queryParamsPayee).then((res) => {
          console.log("rbPayees", res);
          this.rbPayees = res.data.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();
      this.open = true;
      this.title = "修改报销申请";
    },
    /** 查看按钮操作 */
    handleDetail(row) {
      this.dialogType = "detail";
      this.title = "查看报销申请";
      this.reset();
      this.open = true;
      const id = row.id || this.ids;
@@ -1312,15 +1314,14 @@
          //this.sumTotalFee();
        });
        //账户
        getReimbursementpayeelist(ids).then((res) => {
          this.rbPayees = res.data;
        //账户
        this.queryParamsPayee.rbid = ids;
        listReimbursementpayee(this.queryParamsPayee).then((res) => {
          this.rbPayees = res.rows;
          if (this.rbPayees.length == 0) { this.addPayeeRow(0); }
        });
      });
      this.open = true;
      this.title = "查看报销申请";
    },
    /** 提交按钮 */
@@ -1348,11 +1349,11 @@
             });
             return;
           }
           let emptyStartTimeindex = this.rbDetails.findIndex(
             (item) => item.starttime == null || item.starttime == undefined || item.starttime == ""
           );
           if (emptyStartTimeindex > -1) {
             this.$message({
               message: "第" + (emptyStartTimeindex + 1) + "行出发日期为空",
@@ -1360,11 +1361,11 @@
             });
             return;
           }
           let emptyEndTimeindex = this.rbDetails.findIndex(
             (item) => item.endtime == null || item.endtime == undefined || item.endtime == ""
           );
           if (emptyEndTimeindex > -1) {
             this.$message({
               message: "第" + (emptyEndTimeindex + 1) + "行到达日期为空",
@@ -1372,7 +1373,7 @@
             });
             return;
           }           
          //费用归属
          let belongArr = this.dict.type.sys_travelexpensebelong;
          let costtypeindex = belongArr.findIndex(
@@ -1401,7 +1402,7 @@
          const rbDetails = [...this.rbDetails]
          const rbPayees = [...this.rbPayees]
          if (this.form.id != null) {
            updateReimbursement(this.form).then((response) => {
            updateReimbursement(this.form).then((res) => {
              //保存明细
              for (let i = 0; i < rbDetails.length; i++) {
                if (rbDetails[i].rbid != null) {
@@ -1424,12 +1425,12 @@
                }
              }
              this.$modal.msgSuccess("报销单修改成功!");
              this.$modal.msgSuccess("修改报销单保存成功!");
              this.open = false;
              this.getList();
            }).catch(err => {
              this.$modal.msgError("报销单保存失败!");
              this.$modal.msgError("修改报销单保存失败!");
            });
          }
          else {
@@ -1445,16 +1446,16 @@
              //保存账号
              for (let i = 0; i < rbPayees.length; i++) {
                //rbid关联主表Id
                rbPayees[i].rbid = id;
                rbPayees[i].rbid = response.data;
                addReimbursementpayee(rbPayees[i]);
              }
              this.$modal.msgSuccess("报销单修改成功!");
              this.$modal.msgSuccess("新增报销单保存成功!");
              this.open = false;
              this.getList();
            }).catch(err => {
              this.$modal.msgError("报销单保存失败!");
              this.$modal.msgError("新增报销单保存失败!");
            });
          }
        }
@@ -1512,6 +1513,7 @@
        days: null,
        trafficexpense: 0,
        traffictype: null,
        traffictype2: null,
        cityfee: 0,
        hotelexpense: 0,
        invoicecount: null,
@@ -1558,7 +1560,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);