yxh
6 小时以前 c75027743ea7c3ecc2d0885f01d11d2ad78679a3
src/views/project/fund/ethicalExpertFeeApply/index.vue
@@ -1,122 +1,67 @@
<!--  -->
<template>
  <div class="app-container">
    <el-form
      :model="queryParams"
      ref="queryForm"
      :inline="true"
      label-width="70px"
    >
      <el-row align="left">
        <el-col :span="6">
          <el-form-item label="姓名" prop="name">
            <el-input
              v-model="queryParams.name"
              placeholder="请输入姓名"
              clearable
              size="small"
              @keyup.enter.native="handleQuery"
            />
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="捐献进度" prop="recordstate">
            <el-select
              v-model="queryParams.recordstate"
              placeholder="请选择记录状态"
              clearable
              size="small"
            >
              <el-option
                v-for="dict in dict.type.sys_DonationStatus"
                :key="dict.value"
                :label="dict.label"
                :value="dict.value"
              />
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="捐献者" prop="name">
            <el-input
              v-model="queryParams.donorname"
              placeholder="请输入捐献者姓名"
              clearable
              size="small"
              @keyup.enter.native="handleQuery"
            />
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <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
          >
        </el-col>
      </el-row>
    </el-form>
    <el-row>
      <el-col :span="6">
        <el-card shadow="never">
          <!-- 捐献案例列表 -->
          <el-row>
            <el-col :span="10">
              <el-row type="flex" :gutter="10" align="right" class="mb8">
              </el-row>
            </el-col>
          </el-row>
          <el-table
            v-loading="loading"
            border
            highlight-current-row
            :data="donatebaseinfoList"
            @row-click="selectDonotor"
          >
            <!-- <el-table-column label="捐献编号" align="center" prop="donorno" /> -->
            <el-table-column label="捐献进度" align="center" prop="recordstate">
              <template slot-scope="scope">
                <dict-tag
                  :options="dict.type.sys_DonationStatus"
                  :value="scope.row.recordstate"
                />
              </template>
            </el-table-column>
            <el-table-column label="姓名" align="center" prop="name" />
          </el-table>
          <pagination
            v-show="total > 0"
            :total="total"
            small
            :page.sync="queryParams.pageNum"
            :limit.sync="queryParams.pageSize"
            @pagination="getBaseInfoList"
          />
        </el-card>
      </el-col>
      <el-col :span="18">
      <el-col :span="24">
        <el-card shadow="naver">
          <el-form ref="infoform" label-width="100px">
            <el-row :gutter="4" align="right" class="mb8">
              <el-col :span="9">
                <el-form-item label="捐献编号">
                  <el-input
                    v-model="curCase.donorno"
                    :disabled="true"
                  ></el-input>
                </el-form-item>
              </el-col>
              <el-col :span="9">
                <el-form-item label="姓名">
                  <el-input v-model="curCase.name" :disabled="true"></el-input>
                </el-form-item>
              </el-col>
            </el-row>
            <!-- 报销单筛选:捐献者、审批状态 -->
            <el-form
              class="opo-query-form"
              :model="fundQueryParam"
              ref="fundQueryForm"
              :inline="true"
              label-width="82px"
            >
              <el-row>
                <el-col :span="6">
                  <el-form-item label="捐献者" prop="donorname">
                    <el-input
                      v-model="fundQueryParam.donorname"
                      placeholder="请输入捐献者姓名"
                      clearable
                      size="small"
                      @keyup.enter.native="handleQueryFund"
                    />
                  </el-form-item>
                </el-col>
                <el-col :span="6">
                  <el-form-item label="审批状态" prop="recordstatus">
                    <el-select
                      v-model="fundQueryParam.recordstatus"
                      placeholder="请选择审批状态"
                      clearable
                      size="small"
                      style="width: 100%"
                    >
                      <el-option
                        v-for="dict in dict.type.sys_recordstatus"
                        :key="dict.value"
                        :label="dict.label"
                        :value="Number(dict.value)"
                      />
                    </el-select>
                  </el-form-item>
                </el-col>
                <el-col :span="6">
                  <el-form-item label-width="10px">
                    <el-button
                      type="primary"
                      icon="el-icon-search"
                      size="small"
                      @click="handleQueryFund"
                      >搜索</el-button
                    >
                    <el-button
                      icon="el-icon-refresh"
                      size="small"
                      @click="resetFundQuery"
                      >重置</el-button
                    >
                  </el-form-item>
                </el-col>
              </el-row>
            </el-form>
            <el-row :gutter="10" class="mb8">
              <el-col :span="1.5">
                <el-button
@@ -186,7 +131,7 @@
                  </template>
                </el-table-column>
                <el-table-column
                  label="申请材料状态"
                  label="材料预审状态"
                  width="140"
                  align="center"
                  prop="checkstatus"
@@ -198,6 +143,13 @@
                    />
                  </template>
                </el-table-column>
                <el-table-column
                  label="捐献者"
                  align="center"
                  prop="donorname"
                  width="110px"
                  show-overflow-tooltip
                />
                <!--
                <el-table-column label="联系电话" align="center" prop="phone" width="150px" />
                <el-table-column label="工作单位" align="center" prop="unitname" width="220px" />
@@ -230,7 +182,6 @@
                      type="text"
                      icon="el-icon-edit"
                      @click="handleUpdate(scope.row)"
                      v-hasPermi="['project:ethicalfund:edit']"
                      >修改</el-button
                    >
                    <el-button
@@ -248,27 +199,133 @@
                      size="mini"
                      type="text"
                      @click="handleDelete(scope.row)"
                      v-hasPermi="['project:ethicalfund:delete']"
                      ><span class="button-delete"
              ><i class="el-icon-delete"></i>删除</span
            ></el-button
                        ><i class="el-icon-delete"></i>删除</span
                      ></el-button
                    >
                    <el-button
                      size="mini"
                      type="text"
                      icon="el-icon-download"
                      @click="mixExport(scope.row.id)"
                      v-hasPermi="['project:ethicalfund:download']"
                      >下载</el-button
                    >
                  </template>
                </el-table-column>
              </el-table>
              <!-- 未选择案例时展示该登录人全部伦理审查单据,超过一页可用分页翻看 -->
              <pagination
                v-show="fundTotal > 0"
                :total="fundTotal"
                small
                :page.sync="fundQueryParam.pageNum"
                :limit.sync="fundQueryParam.pageSize"
                @pagination="listFundData"
              />
            </el-row>
          </el-form>
        </el-card>
      </el-col>
    </el-row>
    <!-- 新增申请单前先选择捐献案例(原左侧案例列表移到这里) -->
    <el-dialog
      title="选择捐献案例"
      :visible.sync="caseDialogVisible"
      width="760px"
      append-to-body
    >
      <el-form
        class="opo-query-form"
        :model="queryParams"
        ref="queryForm"
        :inline="true"
        label-width="70px"
      >
        <el-row>
          <el-col :span="8">
            <el-form-item label="姓名" prop="name">
              <el-input
                v-model="queryParams.name"
                placeholder="请输入姓名"
                clearable
                size="small"
                @keyup.enter.native="handleQuery"
              />
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="捐献进度" prop="recordstate">
              <el-select
                v-model="queryParams.recordstate"
                placeholder="请选择记录状态"
                clearable
                size="small"
                style="width: 100%"
              >
                <el-option
                  v-for="dict in dict.type.sys_DonationStatus"
                  :key="dict.value"
                  :label="dict.label"
                  :value="dict.value"
                />
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label-width="10px">
              <el-button
                type="primary"
                icon="el-icon-search"
                size="small"
                @click="handleQuery"
                >搜索</el-button
              >
              <el-button icon="el-icon-refresh" size="small" @click="resetQuery"
                >重置</el-button
              >
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
      <el-table
        ref="caseTable"
        v-loading="loading"
        border
        height="380"
        highlight-current-row
        :data="donatebaseinfoList"
        @row-click="selectDonotor"
      >
        <el-table-column label="捐献进度" align="center" prop="recordstate">
          <template slot-scope="scope">
            <dict-tag
              :options="dict.type.sys_DonationStatus"
              :value="scope.row.recordstate"
            />
          </template>
        </el-table-column>
        <el-table-column label="姓名" align="center" prop="name" />
        <el-table-column label="操作" align="center" width="90">
          <template slot-scope="scope">
            <el-button type="text" size="mini" @click="selectDonotor(scope.row)"
              >选择</el-button
            >
          </template>
        </el-table-column>
      </el-table>
      <pagination
        v-show="total > 0"
        :total="total"
        small
        :page.sync="queryParams.pageNum"
        :limit.sync="queryParams.pageSize"
        @pagination="getBaseInfoList"
      />
      <div slot="footer" class="dialog-footer">
        <el-button @click="caseDialogVisible = false">取 消</el-button>
      </div>
    </el-dialog>
    <!-- 添加或修改费用申请单 -->
    <el-dialog
@@ -287,7 +344,7 @@
                clearable
                style="width: 100%"
                v-model="form.applyTime"
                type="date"
                type="date" format="yyyy-MM-dd"
                value-format="yyyy-MM-dd HH:mm:ss"
                placeholder="申请日期"
              >
@@ -705,9 +762,9 @@
                  type="text"
                  size="small"
                >
                <span class="button-delete"
              ><i class="el-icon-delete"></i>删除</span
            >
                  <span class="button-delete"
                    ><i class="el-icon-delete"></i>删除</span
                  >
                </el-button>
              </template>
            </el-table-column>
@@ -963,6 +1020,7 @@
import { getUserProfile } from "@/api/system/user";
import { listFundflow } from "@/api/project/fundflow";
import { getToken } from "@/utils/auth";
import { moneySum, moneyAdd, moneySub, moneyMul, moneyRound } from "@/utils/money";
export default {
  //import引入的组件需要注入到对象中才能使用
@@ -1014,11 +1072,19 @@
      },
      fundQueryParam: {
        pageNum: 1,
        pageSize: 100,
        pageSize: 10,
        infoid: null,
        applytype: "2",
        createBy: null
        createBy: null,
        // 报销单筛选条件
        donorname: null,
        recordstatus: null
      },
      // 右侧报销单总数(用于分页)
      fundTotal: 0,
      // 「选择捐献案例」对话框(新增申请单时使用)
      caseDialogVisible: false,
      casePickerMode: "",
      // 表单参数
      form: {},
      // 表单校验
@@ -1105,55 +1171,23 @@
    },
    /** 新增按钮操作 */
    handleAdd() {
      if (this.curCase.id) {
        this.$router.push({
          path: "/finance/applyDetail/",
          query: {
            id: 0,
            businessType: "2",
            operationType: "add",
            curCase: this.curCase
          }
        });
      } else {
        const h = this.$createElement;
        this.$message({
          message: h("p", null, [
            h("span", null, "请在左边的捐献案例表选择需要操作的案例!")
          ])
        });
      }
      return;
      // 新增申请单:先弹出「选择捐献案例」对话框
      this.casePickerMode = "add";
      this.caseDialogVisible = true;
      this.getBaseInfoList();
    },
      if (this.curCase.id) {
        this.istrue += 2;
        this.reset();
        this.dialogOpen = true;
        this.title = "添加费用申请";
        this.dialogType = "edit";
        this.queryParams.params = {};
        this.form.infoid = this.curCase.id;
        this.form.donorno = this.curCase.donorno;
        this.form.donorname = this.curCase.name;
        this.form.username = this.defaultperson.nickName;
        this.form.userno = this.defaultperson.userName;
        this.form.deptmentname = this.defaultperson.dept.deptName;
        this.form.deptmentno = this.defaultperson.dept.deptId;
        this.form.managername = this.defaultperson.dept.leader;
        // this.form.createTime = nowdate;
        //this.open = true;
        //this.initFundApplyForm();
        this.fundDetailArr = [];
        this.fundflowList = [];
        this.addRow();
      } else {
        const h = this.$createElement;
        this.$message({
          message: h("p", null, [h("span", null, "请先选择左方捐献案例 ")])
        });
      }
    /** 携带已选案例跳转到申请单填写页 */
    goApplyAdd() {
      this.$router.push({
        path: "/finance/applyDetail/",
        query: {
          id: 0,
          businessType: "2",
          operationType: "add",
          curCase: this.curCase
        }
      });
    },
    /** 修改按钮操作 */
    handleUpdate(row) {
@@ -1363,15 +1397,11 @@
            // } catch {
            //   tempDetail.unitname = tempDetail.unitno;
            // }
            if (!isNaN(parseFloat(tempDetail.amount))) {
              totalPreTaxAmount += parseFloat(tempDetail.amount);
              totalAmount += parseFloat(tempDetail.amount);
            }
            if (!isNaN(parseFloat(tempDetail.taxedamount))) {
              totalAfterTaxAmount += parseFloat(tempDetail.taxedamount);
              totalAmount += parseFloat(tempDetail.taxedamount);
            }
          }
          //金额一律走精确运算,禁止 parseFloat 累加
          totalPreTaxAmount = moneySum(this.fundDetailArr, "amount");
          totalAfterTaxAmount = moneySum(this.fundDetailArr, "taxedamount");
          totalAmount = moneyAdd(totalPreTaxAmount, totalAfterTaxAmount);
          try {
            this.form.unitname = this.$refs.orgSelecter.getOptionByValue(
              this.form.unitno
@@ -1501,18 +1531,60 @@
    //点击捐献案例列表触发方法
    selectDonotor(row, column, event) {
      this.curCase = row;
      this.getfundList();
      if (this.casePickerMode === "add") {
        // 从「新增申请单」进入:选完案例直接跳到申请单填写页
        this.casePickerMode = "";
        this.caseDialogVisible = false;
        this.goApplyAdd();
      }
    },
    /** 按当前 fundQueryParam 查询右侧报销单列表 */
    listFundData() {
      this.loading = true;
      listFund(this.fundQueryParam).then(response => {
        this.loading = false;
        this.donateconsolationfundList = response.rows;
        this.fundTotal = response.total;
      });
    },
    /** 报销单筛选:搜索 */
    handleQueryFund() {
      this.fundQueryParam.pageNum = 1;
      this.listFundData();
    },
    /** 报销单筛选:重置(清空条件与已选案例,回到该登录人全部单据) */
    resetFundQuery() {
      this.fundQueryParam.donorname = null;
      this.fundQueryParam.recordstatus = null;
      this.getAllfundList();
    },
    /** 检索全部:取消案例选择与筛选条件,查询当前登录人的全部伦理审查单据 */
    getAllfundList() {
      this.curCase = {};
      if (this.$refs.caseTable) {
        this.$refs.caseTable.setCurrentRow();
      }
      this.reset();
      this.fundQueryParam.infoid = null;
      this.fundQueryParam.donorname = null;
      this.fundQueryParam.recordstatus = null;
      this.fundQueryParam.pageNum = 1;
      this.listFundData();
    },
    //获取案例专家费用申请单
    getfundList() {
      this.loading = true;
      this.reset();
      // 选中案例后按案例展示,同时清掉列表筛选条件,避免两个条件叠加导致空列表
      this.fundQueryParam.donorname = null;
      this.fundQueryParam.recordstatus = null;
      this.fundQueryParam.infoid = this.curCase.id;
      listFund(this.fundQueryParam).then(response => {
        this.loading = false;
        this.donateconsolationfundList = response.rows;
      });
      this.fundQueryParam.pageNum = 1;
      this.listFundData();
    },
    select(row) {
@@ -1739,49 +1811,45 @@
        });
    },
    //计算总金额
    //计算总金额(金额一律走精确运算,禁止 parseFloat 累加)
    sumTotalFee() {
      let allSum = 0;
      const detailsArr = [];
      let preTaxSum = 0;
      let taxedSum = 0;
      if (this.form.applytype != null) {
        for (let i = 0; i < this.fundDetailArr.length; i++) {
          const detail = this.fundDetailArr[i];
          let totalFee = 0;
          let taxFee = 0;
          if (this.form.applytype == 1 || this.form.applytype == 2) {
            //计算当前报销内容费用合计
            if (!isNaN(parseFloat(this.fundDetailArr[i].amount))) {
              totalFee += parseFloat(this.fundDetailArr[i].amount);
              taxFee += parseFloat(this.fundDetailArr[i].amount);
              preTaxSum += parseFloat(this.fundDetailArr[i].amount);
            //计算当前报销内容费用合计:税前 - 扣税
            if (!isNaN(parseFloat(detail.amount))) {
              totalFee = moneyAdd(totalFee, detail.amount);
              preTaxSum = moneyAdd(preTaxSum, detail.amount);
            }
            if (!isNaN(parseFloat(this.fundDetailArr[i].taxamount))) {
              totalFee -= parseFloat(this.fundDetailArr[i].taxamount);
              taxFee -= parseFloat(this.fundDetailArr[i].taxamount);
            if (!isNaN(parseFloat(detail.taxamount))) {
              totalFee = moneySub(totalFee, detail.taxamount);
            }
            //taxedamount
            if (!isNaN(parseFloat(this.fundDetailArr[i].taxedamount))) {
              taxedSum += parseFloat(this.fundDetailArr[i].taxedamount);
            if (!isNaN(parseFloat(detail.taxedamount))) {
              taxedSum = moneyAdd(taxedSum, detail.taxedamount);
            }
          } else if (this.form.applytype == 3) {
            if (
              !isNaN(parseFloat(this.fundDetailArr[i].price)) &&
              !isNaN(parseFloat(this.fundDetailArr[i].quantity))
              !isNaN(parseFloat(detail.price)) &&
              !isNaN(parseFloat(detail.quantity))
            ) {
              totalFee +=
                parseFloat(this.fundDetailArr[i].price) *
                parseFloat(this.fundDetailArr[i].quantity);
              totalFee = moneyMul(detail.price, detail.quantity);
            }
          }
          // if (!isNaN(parseFloat(taxFee))) {
          //   this.fundDetailArr[i].taxedamount = taxFee.toFixed(2);
          // }
          allSum += totalFee;
          detailsArr.push(totalFee);
        }
      }
      this.form.amountrequested = allSum.toFixed(2);
      this.form.pretaxcost = preTaxSum.toFixed(2);
      this.form.taxedcost = taxedSum.toFixed(2);
      this.form.amountrequested = moneyRound(moneySum(detailsArr)).toFixed(2);
      this.form.pretaxcost = moneyRound(preTaxSum).toFixed(2);
      this.form.taxedcost = moneyRound(taxedSum).toFixed(2);
      this.$forceUpdate();
    },
@@ -2057,7 +2125,7 @@
      this.detailInfoDialogShow = false;
    },
    rowClassName({ row, column, rowIndex, columnIndex }) {
      if (row.recordstatus == -1 && row.backflowlevel >= 0) {
      if (row.recordstatus == -1 && row.backflowlevel != null) {
        return "error-row";
      }
      return "";
@@ -2067,10 +2135,11 @@
  //生命周期 - 创建完成(可以访问当前this实例)
  created() {
    this.getUnitList();
    this.getList();
    this.getBaseInfoList();
    // 案例列表已移入「选择捐献案例」对话框,打开对话框时再查询
    this.getlistUser();
    this.getCurFundType();
    // 首屏展示当前登录人的全部伦理审查单据
    this.getAllfundList();
  },
  //生命周期 - 挂载完成(可以访问DOM元素)
  mounted() {
@@ -2089,7 +2158,7 @@
</script>
<style lang="scss" scoped>
/* @import url(); 引入公共css类 */
.button-delete{
.button-delete {
  color: rgb(236, 69, 69);
}
::v-deep.el-table .error-row {