yxh
2026-09-30 d21d7dd23f15a0ca395a4c9d1b3bb31330ff56c0
src/views/project/fund/expertFeeApply/index.vue
@@ -1,66 +1,6 @@
<!--  -->
<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">
@@ -71,6 +11,54 @@
              </el-row>
            </el-col>
          </el-row>
          <div>
            <el-form
              :model="queryParams"
              ref="queryForm"
              :inline="true"
              label-width="70px"
            >
              <el-form-item label="姓名" prop="name">
                <el-input
                  v-model="queryParams.name"
                  placeholder="请输入姓名"
                  clearable
                  size="small"
                  @keyup.enter.native="handleQuery"
                />
              </el-form-item>
              <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>
              <div style="float: right; margin-bottom: 10px;">
                <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
                >
              </div>
            </el-form>
          </div>
          <el-table
            v-loading="loading"
            highlight-current-row
@@ -104,7 +92,7 @@
        <el-card shadow="naver">
          <el-form ref="infoform" label-width="100px">
            <el-row :gutter="4" align="right" class="mb8">
              <el-col :span="9">
              <el-col :span="7">
                <el-form-item label="捐献编号">
                  <el-input
                    v-model="curCase.donorno"
@@ -112,12 +100,20 @@
                  ></el-input>
                </el-form-item>
              </el-col>
              <el-col :span="9">
              <el-col :span="8">
                <el-form-item label="姓名">
                  <el-input v-model="curCase.name" :disabled="true"></el-input>
                </el-form-item>
              </el-col>
              <el-col> </el-col>
              <el-col :span="3">
                <el-button
                  type="primary"
                  icon="el-icon-search"
                  size="mini"
                  @click="allgetfundList"
                  >检索全部</el-button
                >
              </el-col>
            </el-row>
            <el-row :gutter="10" class="mb8">
              <el-col :span="1.5">
@@ -137,16 +133,17 @@
                v-loading="loading"
                border
                :data="donateconsolationfundList"
                :row-class-name="rowClassName"
              >
                <el-table-column
                  label="申请日期"
                  align="center"
                  prop="createTime"
                  prop="applyTime"
                  width="180px"
                >
                  <template slot-scope="scope">
                    <span>{{
                      parseTime(scope.row.createTime, "{y}-{m}-{d}")
                      parseTime(scope.row.applyTime, "{y}-{m}-{d}")
                    }}</span>
                  </template>
                </el-table-column>
@@ -156,11 +153,17 @@
                  prop="username"
                  width="120px"
                />
                <el-table-column
                <!-- <el-table-column
                  label="申请金额"
                  align="center"
                  prop="pretaxcost"
                  width="200px"
                /> -->
                <el-table-column
                  label="捐献人"
                  align="center"
                  prop="donorname"
                  width="120px"
                />
                <el-table-column
                  label="组长"
@@ -186,10 +189,23 @@
                    />
                  </template>
                </el-table-column>
                <!--
                <el-table-column label="申请金额" align="center" prop="amountrequested" width="120px" />
                <el-table-column
                  label="材料预审状态"
                  width="140"
                  align="center"
                  prop="checkstatus"
                >
                  <template slot-scope="scope">
                    <dict-tag
                      :options="dict.type.sys_stage_type"
                      :value="scope.row.checkstatus"
                    />
                  </template>
                </el-table-column>
                <!--
                <el-table-column label="申请金额" align="center" prop="amountrequested" width="120px" />
                <el-table-column label="联系电话" align="center" prop="phone" width="150px" />
                <el-table-column label="工作单位" align="center" prop="unitname" width="220px" />
                <el-table-column label="工作单位" align="center" prop="unitname" width="220px" />
                -->
                <el-table-column
                  label="操作"
@@ -224,7 +240,7 @@
                    <el-button
                      size="mini"
                      type="text"
                      icon="el-icon-edit"
                      icon="el-icon-view"
                      @click="handleDetail(scope.row)"
                      >查看</el-button
                    >
@@ -236,9 +252,10 @@
                      "
                      size="mini"
                      type="text"
                      icon="el-icon-delete"
                      @click="handleDelete(scope.row)"
                      >删除</el-button
                      ><span class="button-delete"
                        ><i class="el-icon-delete"></i>删除</span
                      ></el-button
                    >
                    <!-- v-hasPermi="['project:expretfund:delete']" -->
                    <!-- <el-button
@@ -249,6 +266,25 @@
                      >下载</el-button
                                          > -->
                    <!-- v-hasPermi="['project:expretfund:download']" -->
                  </template>
                </el-table-column>
                <el-table-column
                  fixed="right"
                  align="center"
                  width="120"
                  label="功能"
                >
                  <template slot-scope="scope">
                    <el-button size="mini" v-if="scope.row.uploadStates == 1"
                      >线下已报销</el-button
                    >
                    <el-button
                      size="mini"
                      type="success"
                      v-else-if="scope.row.uploadStates == 0"
                      @click="Dooffline(scope.$index, scope.row)"
                      >线下报销</el-button
                    >
                  </template>
                </el-table-column>
              </el-table>
@@ -276,11 +312,11 @@
      >
        <el-row style="text-align: left">
          <el-col :span="5">
            <el-form-item label="申请日期" prop="createTime">
            <el-form-item label="申请日期" prop="applyTime">
              <el-date-picker
                clearable
                style="width: 100%"
                v-model="form.createTime"
                v-model="form.applyTime"
                type="date"
                value-format="yyyy-MM-dd HH:mm:ss"
                placeholder="申请日期"
@@ -389,10 +425,10 @@
            </el-form-item>
          </el-col>-->
          <el-col :span="5">
            <el-form-item label="捐献者" prop="name">
            <el-form-item label="捐献者" prop="donorname">
              <el-input
                :disabled="true"
                v-model="form.name"
                v-model="form.donorname"
                placeholder="请输入捐献者姓名"
              />
            </el-form-item>
@@ -741,21 +777,23 @@
                  type="text"
                  size="small"
                >
                  删除
                  <span class="button-delete"
                    ><i class="el-icon-delete"></i>删除</span
                  >
                </el-button>
              </template>
            </el-table-column>
          </el-table>
        </el-row>
        <!--
        <el-row>
        <el-row>
          <el-col :span="7">
            <el-form-item label="预支金额" prop="prepaidamount">
              <el-input v-model="form.prepaidamount" placeholder="申请金额" />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="7">
            <el-form-item label="OPO中心签字" prop="opochecker">
              <el-input v-model="form.opochecker" placeholder="opo中心签字" />
@@ -988,7 +1026,7 @@
                  :value="dict.value"></el-option>
              </el-select>
            </el-form-item>
          </el-col>
          </el-col>
        </el-row>
      -->
        <el-row>
@@ -1074,7 +1112,8 @@
  getdownloadYX,
  getdownloadBX,
  addorupdateFund,
  getdetailsByItemId
  getdetailsByItemId,
  validateExpertFee
} from "@/api/project/fund";
import {
@@ -1116,12 +1155,12 @@
  updateExternalperson,
  exportExternalperson
} from "@/api/project/externalperson";
import { getUserProfile } from "@/api/system/user";
import Li_area_select from "@/components/Address";
import OrgSelecter from "@/views/project/components/orgselect";
import elementIcons from "../../../components/icons/element-icons";
import { getToken } from "@/utils/auth";
import { moneySum, moneyAdd, moneySub, moneyMul, moneyRound } from "@/utils/money";
export default {
  //import引入的组件需要注入到对象中才能使用
@@ -1144,7 +1183,8 @@
    //"sys_financeitemtype",
    //"sys_expensetype",
    "sys_recordstatus",
    "sys_professionaltitle"
    "sys_professionaltitle",
    "sys_stage_type"
  ],
  data() {
@@ -1211,7 +1251,7 @@
        username: [
          { required: true, message: "请输入申请人", trigger: "blur" }
        ],
        createTime: [
        applyTime: [
          { required: true, message: "请输入申请日期", trigger: "blur" }
        ],
        deptmentname: [
@@ -1357,6 +1397,17 @@
      this.daterangeReporttime = [];
      this.resetForm("queryForm");
      this.handleQuery();
    },
    Dooffline(a, value) {
      value.uploadStates = 1;
      value.notes = "线下已报销";
      addorupdateFund(value).then(res => {
        if (res.code == 200) {
          this.$modal.msgSuccess("记录成功");
        } else {
          this.$modal.msgError(res.msg);
        }
      });
    },
    /** 新增按钮操作 */
@@ -1559,6 +1610,7 @@
    /** 上报按钮操作 */
    handleUp(row) {
      console.log(row);
      this.$confirm("是否确认将登记记录上报?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
@@ -1568,6 +1620,20 @@
          //查找是否存在登记完成记录
          //判断是否存在上报记录
          row.recordstatus = 0;
          var currenttime = new Date();
          row.applyTime =
            currenttime.getFullYear() +
            "-" +
            (currenttime.getMonth() + 1) +
            "-" +
            currenttime.getDate() +
            " " +
            currenttime.getHours() +
            ":" +
            currenttime.getMinutes() +
            ":" +
            currenttime.getSeconds();
          updateFund(row).then(response => {
            if (response.code == 200) {
              this.$message({
@@ -1681,7 +1747,7 @@
            }
            this.fundDetails[i] = tempDetail;
            /*
            //计算个税
            //计算个税
            //if (isNaN(parseFloat(tempDetail.taxedamount)))
            //获取参数
            this.taxParam.beneficiaryNo = tempDetail.beneficiaryno;
@@ -1760,21 +1826,37 @@
            // });
          }
          addorupdateFund(this.form).then(response => {
            if (response.code === 200) {
              this.selectDonotor(this.curCase);
              this.$modal.msgSuccess("专家劳务费保存成功!");
            } else {
              this.$modal.msgError("专家劳务费保存失败:" + response.msg);
            }
          });
          // 保存前先做专家劳务费 9 条费用控制校验(同一案例累计)
          validateExpertFee(this.form).then(valid => {
            const errors = (valid && valid.errors) || [];
            const warnings = (valid && valid.warnings) || [];
          //关闭窗口
          this.loading = false;
          this.dialogOpen = false;
          // this.getfundList();
          this.getList();
          this.selectDonotor(this.curCase);
            // warnings(规则 5、6)仅提示,不阻断保存
            if (warnings.length > 0) {
              this.$modal.msgWarning(warnings.join(";"));
            }
            // errors 阻断保存,保留窗口让经办人先修正
            if (errors.length > 0) {
              this.$modal.msgError(errors.join(";"));
              this.loading = false;
              return;
            }
            addorupdateFund(this.form).then(response => {
              if (response.code === 200) {
                //关闭窗口
                this.loading = false;
                this.dialogOpen = false;
                this.selectDonotor(this.curCase);
                this.$modal.msgSuccess("专家劳务费保存成功!");
                this.getList();
              } else {
                this.$modal.msgError("专家劳务费保存失败:" + response.msg);
                this.loading = false;
              }
            });
          });
        }
      });
    },
@@ -1964,7 +2046,7 @@
        this.standardlevel = response.data.standardlevel;
        if (
          this.defaultperson.createBy == "admin" ||
          this.defaultperson.createBy == "001" ||
          this.defaultperson.createBy == "053" ||
          this.defaultperson.createBy == "002"
        ) {
          this.ismanager = true;
@@ -2090,7 +2172,15 @@
      this.curCase = row;
      this.getfundList();
    },
    allgetfundList() {
      this.loading = true;
      this.reset();
      this.fundQueryParam.infoid = null;
      listFund(this.fundQueryParam).then(response => {
        this.loading = false;
        this.donateconsolationfundList = response.rows;
      });
    },
    getfundList() {
      this.loading = true;
      this.reset();
@@ -2379,43 +2469,34 @@
    //计算个税
    calculateTax() {},
    //计算总金额
    //计算总金额(金额一律走精确运算)
    sumTotalFee(row) {
      let allSum = 0;
      const detailsArr = [];
      if (this.form.applytype != null) {
        for (let i = 0; i < this.fundDetails.length; i++) {
          const detail = this.fundDetails[i];
          let totalFee = 0;
          let taxFee = 0;
          if (this.form.applytype == 1 || this.form.applytype == 2) {
            //计算当前报销内容费用合计
            if (!isNaN(parseFloat(this.fundDetails[i].amount))) {
              totalFee += parseFloat(this.fundDetails[i].amount);
              taxFee += parseFloat(this.fundDetails[i].amount);
            //计算当前报销内容费用合计:税前 - 扣税
            if (!isNaN(parseFloat(detail.amount))) {
              totalFee = moneyAdd(totalFee, detail.amount);
            }
            if (!isNaN(parseFloat(this.fundDetails[i].taxamount))) {
              totalFee -= parseFloat(this.fundDetails[i].taxamount);
              taxFee -= parseFloat(this.fundDetails[i].taxamount);
            if (!isNaN(parseFloat(detail.taxamount))) {
              totalFee = moneySub(totalFee, detail.taxamount);
            }
          } else if (this.form.applytype == 3) {
            if (
              !isNaN(parseFloat(this.fundDetails[i].price)) &&
              !isNaN(parseFloat(this.fundDetails[i].quantity))
              !isNaN(parseFloat(detail.price)) &&
              !isNaN(parseFloat(detail.quantity))
            ) {
              totalFee +=
                parseFloat(this.fundDetails[i].price) *
                parseFloat(this.fundDetails[i].quantity);
              totalFee = moneyMul(detail.price, detail.quantity);
            }
          }
          //税前、税后需要独立录入
          // if (!isNaN(parseFloat(taxFee))) {
          //   this.fundDetails[i].taxedamount = taxFee.toFixed(2);
          // }
          allSum += totalFee;
          detailsArr.push(totalFee);
        }
      }
      // this.form.amountrequested = allSum.toFixed(2);
      // 合计仍在确认口径后启用;先保证计算本身是精确的
      // this.form.amountrequested = moneyRound(moneySum(detailsArr)).toFixed(2);
      // this.$forceUpdate();
    },
@@ -2456,22 +2537,35 @@
    //专家费劳务打印
    dayin(id) {
      getdownloadLW(id).then(res => {
        if (res.downloadUrl) {
          var fileUrl = res;
          //获取当前网址
          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();
          this.$alert("下载成功", "提示", {
            confirmButtonText: "确定",
            type: "success"
        var fileUrl = res;
        //获取当前网址
        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"];
        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);
          });
        }
      });
    },
@@ -2529,10 +2623,22 @@
      } else {
        console.log(response.msg);
      }
    },
    rowClassName({ row, column, rowIndex, columnIndex }) {
      if (row.recordstatus == -1 && row.backflowlevel != null) {
        return "error-row";
      }
      return "";
    }
  }
};
</script>
<style scoped>
<style lang="scss" scoped>
/* @import url(); 引入公共css类 */
.button-delete {
  color: rgb(236, 69, 69);
}
::v-deep.el-table .error-row {
  background: #fcebeb;
}
</style>