yxh
3 天以前 5743e533414c608a12f9323f17a7c86721c7f54c
src/views/project/tallage/computingBill/index.vue
@@ -8,8 +8,8 @@
            <el-form-item label="申请日期" prop="createTime">
              <el-date-picker
                v-model="form.createTime"
                value-format="yyyy-MM-dd HH:mm:ss"
                type="datetime"
                value-format="yyyy-MM-dd "
                type="date"
                :disabled="true"
                placeholder="选择出生年月"
              >
@@ -43,7 +43,7 @@
              <el-date-picker
                v-model="form.taxedtime"
                value-format="yyyy-MM-dd HH:mm:ss"
                type="datetime"
                type="datetime" format="yyyy-MM-dd HH:mm"
                :disabled="true"
                placeholder="选择时间"
              >
@@ -115,6 +115,14 @@
            show-summary
          >
            <el-table-column
              prop="index"
              align="center"
              fixed
              label="序号"
              width="120"
            >
            </el-table-column>
            <el-table-column
              prop="donorname"
              align="center"
              fixed
@@ -172,8 +180,8 @@
                  v-model="scope.row.applyTime"
                  :disabled="true"
                  type="date"
                  value-format="yyyy-MM-dd HH:mm:ss"
                  placeholder="申请日期"
                  value-format="yyyy-MM-dd"
                >
                </el-date-picker>
              </template>
@@ -268,10 +276,29 @@
        :before-close="handleClosehz"
      >
        <div class="examine-jic">
          <div style="margin: 0 10px 20px 10px;">
            <el-card class="box-card">
              <el-tag
                v-for="item in overallCase"
                :key="item.id"
                closable
                @close="handleClose(item)"
              >
                {{ item.donorname }}
              </el-tag>
              <div style="margin-top: 20px; text-align: right;">
                共选择<span
                  style="font-size: 18px; color: #409EFF;margin: 0 10px;"
                  >{{ overallCase.length }}</span
                >条数据
              </div>
            </el-card>
          </div>
          <div class="jic-value">
            <el-row :gutter="20">
              <!--用户数据-->
              <el-form
                class="opo-query-form"
                :model="patientqueryParams"
                ref="queryForm"
                size="small"
@@ -280,19 +307,43 @@
              >
                <el-form-item label="捐献案例" prop="status">
                  <el-select
                    v-model="patientqueryParams.donorno"
                    v-model="patientqueryParams.donorname"
                    filterable
                    allow-create
                    default-first-option
                    placeholder="请选择"
                  >
                    <el-option
                      v-for="item in donorchargeanlList"
                      :key="item.id"
                      :label="item.name"
                      :value="item.id"
                      :value="item.name"
                    >
                    </el-option>
                  </el-select>
                </el-form-item>
                <el-form-item label="申请人" prop="name">
                  <el-input
                    v-model="patientqueryParams.pausername"
                    placeholder="请输入申请人姓名"
                    @keyup.enter.native="handleAddpatient"
                  />
                </el-form-item>
                <!-- <el-form-item label="算税状态" prop="status">
                  <el-select
                    v-model="patientqueryParams.istax"
                    filterable
                    placeholder="请选择"
                  >
                    <el-option
                      v-for="item in istaxlist"
                      :key="item.value"
                      :label="item.label"
                      :value="item.value"
                    >
                    </el-option>
                  </el-select>
                </el-form-item> -->
                <el-form-item>
                  <el-button
@@ -347,7 +398,7 @@
                </el-table-column>
                <el-table-column
                  prop="taXmoney"
                  label="扣税金额(缺)"
                  label="扣税金额"
                  show-overflow-tooltip
                >
                </el-table-column>
@@ -388,8 +439,17 @@
        :close-on-click-modal="false"
        :title="pdftitle"
        :visible.sync="pdfVisible"
        :fullscreen="pdfFullscreen"
        width="60%"
        custom-class="pdf-resize-dialog"
        @closed="pdfFullscreen = false"
      >
        <template slot="title">
          <span>{{ pdftitle }}</span>
          <el-button class="pdf-fullscreen-btn" size="mini"
            :icon="pdfFullscreen ? 'el-icon-close' : 'el-icon-full-screen'"
            @click="pdfFullscreen = !pdfFullscreen">{{ pdfFullscreen ? "还原" : "全屏" }}</el-button>
        </template>
        <div class="pdfimg">
          <div class="box-pdf">
            <div>
@@ -475,19 +535,7 @@
            </div>
          </div>
          <div v-if="this.previewpdf && pdfimgsrcList.length" class="pdfimgmin">
            <!-- <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>
          <attachment-preview-pane :file="embeddedFile" style="flex: 1; min-width: 0;" />
        </div>
      </el-dialog>
    </div>
@@ -520,6 +568,7 @@
import Li_area_select from "@/components/Address";
import { getUserProfile } from "@/api/system/user";
import { getToken } from "@/utils/auth";
import { moneySum, moneyRound } from "@/utils/money";
import {
  ExpertfeeListnb,
  getFundtax,
@@ -536,23 +585,27 @@
    Li_area_select,
    pdf
  },
  dicts: ["sys_gathering", "sys_0_1"],
  dicts: ["Collection_status", "sys_0_1"],
  name: "Donorchargemanager",
  data() {
    return {
      swgatheringlist: [
        { label: "未算税", value: 0 },
        { label: "已算税", value: 1 }
        { label: "已算税", value: 1 },
        { label: "未算税", value: 0 }
      ],
      gatheringlist: [
        { label: "未付款", value: "0" },
        { label: "已付款", value: "1" }
      ],
      // 当前页选中数据
      multipleSelection: [],
      // 总选中数据
      overallCase: [],
      patientqueryParams: {
        paApplyType: 1,
        pacheckno: "047",
        checkstatus: 0,
        // pacheckno: "047",
        // checkstatus: 0,
        pfundtaxid: 0,
        pageNum: 1,
        pageSize: 10
      },
@@ -614,11 +667,13 @@
      organParams: {
        pageNum: 1,
        pageSize: 10,
        paymentid: null
        paymentid: null,
        istax: 0
      },
      // 当前用户信息
      userprofile: {},
      decision: false,
      // 表单参数
      form: {
        istax: 0,
@@ -655,6 +710,10 @@
      baselist: [],
      donorList: [],
      istaxlist: [
        { value: 0, label: "未算税" },
        { value: 2, label: "待算税" }
      ],
      organchargelist: [],
      standardlevel: 0,
      defaultperson: {},
@@ -689,6 +748,7 @@
  created() {
    console.log(234);
    this.Networkheader = window.location.origin;
    this.GetMaxTaxid();
    //获取参数
@@ -733,20 +793,24 @@
    },
    handleQuery() {},
    resetQuery() {
      this.patientqueryParams.pausername = null;
      this.patientqueryParams.donorname = null;
      this.patientqueryParams.donorchargeid = null;
      this.handleAddpatient();
    },
    handleUploadError() {},
    // 弹框添加
    AddDispatchpatients() {
      this.donorchargeorgans = this.donorchargeorgans.concat(
        this.multipleSelection
      );
      console.log(this.donorchargeorgans, "donorchargeorgans");
      this.donorchargeorgans.forEach(item => {
        CalculationDetail({ id: item.id, fundTaxId: this.form.id });
      let newArr = this.donorchargeorgans.concat(this.overallCase);
      this.donorchargeorgans = newArr.filter((item, index, self) => {
        return !self.slice(index + 1).some(other => other.id === item.id);
      });
      console.log(this.donorchargeorgans, "donorchargeorgans");
      if (this.form.id) {
        this.donorchargeorgans.forEach(item => {
          CalculationDetail({ id: item.id, fundTaxId: this.form.id });
        });
      }
      this.donorchargeorgans.forEach(item => {
        item.taXmoney = item.pretaxcost - item.taxedcost;
        item.taXmoney = item.taXmoney.toFixed(2);
@@ -797,22 +861,87 @@
    },
    // 金额合计
    accumulation() {
      this.form.pretaxamount = this.donorchargeorgans.reduce(
        (acc, obj) => acc + Number(obj.pretaxcost),
        0
      );
      this.form.taxMoney = this.donorchargeorgans.reduce(
        (acc, obj) => acc + Number(obj.taXmoney),
        0
      );
      this.form.taxedamount = this.donorchargeorgans.reduce(
        (acc, obj) => acc + Number(obj.taxedcost),
        0
      );
      this.form.pretaxamount = this.donorchargeorgans
        .reduce((acc, obj) => acc + Number(obj.pretaxcost), 0)
        .toFixed(2);
      this.form.taxMoney = this.donorchargeorgans
        .reduce((acc, obj) => acc + Number(obj.taXmoney), 0)
        .toFixed(2);
      this.form.taxedamount = this.donorchargeorgans
        .reduce((acc, obj) => acc + Number(obj.taxedcost), 0)
        .toFixed(2);
    },
    // 多选框选中数据
    handleSelectionChange(val) {
      this.multipleSelection = val;
    handleSelectionChange(selection) {
      if (this.decision) return;
      // 判断是否有删除
      if (this.multipleSelection.length <= selection.length) {
        this.multipleSelection = selection;
      } else {
        this.multipleSelection.forEach(item => {
          if (selection.includes(item)) {
          } else {
            if (this.multipleSelection.length == 1) {
              this.multipleSelection = [];
            } else {
              this.multipleSelection.splice(
                this.multipleSelection.indexOf(item),
                1
              );
            }
            if (this.overallCase.length == 1) {
              this.overallCase = [];
            } else {
              this.overallCase.splice(this.overallCase.indexOf(item), 1);
            }
          }
        });
      }
      // 赋值给整体选中数组
      this.multipleSelection.forEach(item => {
        if (!this.overallCase.includes(item)) {
          this.overallCase.push(item);
        }
      });
      console.log(this.multipleSelection, "触发选择后multipleSelection");
    },
    // 切换页后恢复选中
    Restorecheck() {
      console.log(this.overallCase, "this.overallCase");
      const allid = this.overallCase.map(item => item.id);
      const overlap = this.donorchargeList.filter(value => {
        return allid.includes(value.id);
      });
      // 保持ids和当前页面的同步性
      this.multipleSelection = overlap;
      console.log(this.multipleSelection, "进入分页multipleSelection");
      this.toggleSelection(overlap);
    },
    // 挂载选择状态
    toggleSelection(rows) {
      if (rows) {
        this.decision = true;
        this.$nextTick(() => {
          rows.forEach(row => {
            this.$refs.multipleTable.toggleRowSelection(row, true);
          });
          this.decision = false;
        });
        console.log(123);
      } else {
        this.$refs.multipleTable.clearSelection();
      }
    },
    // 选择人员标签删除事件
    handleClose(item) {
      this.overallCase.splice(this.overallCase.indexOf(item), 1);
      if (this.multipleSelection.indexOf(item) == -1) {
      } else {
        this.multipleSelection.splice(this.multipleSelection.indexOf(item), 1);
        this.$refs.multipleTable.toggleRowSelection(item, false);
        // this.toggleSelection(this.multipleSelection);
      }
    },
    // 点击新增
    handleAddpatient(row) {
@@ -821,7 +950,7 @@
      ExpertfeeListnb(this.patientqueryParams).then(res => {
        this.donorchargeList = res.rows;
        this.patienttotal = res.total;
        console.log(this.donorchargeList);
        this.Restorecheck();
      });
    },
    // 获取最大taxid
@@ -856,11 +985,11 @@
      });
    },
    /** 重置按钮操作 */
    resetQuery() {
      this.resetForm("queryForm");
      this.handleQuery();
    },
    // /** 重置按钮操作 */
    // resetQuery() {
    //   this.resetForm("queryForm");
    //   this.handleQuery();
    // },
    // 取消按钮
    cancel() {
@@ -873,7 +1002,7 @@
      this.title = "新增专家费汇总单";
      //获取登录者信息
      getUserProfile().then(res => {
        this.form.username = res.createBy;
        this.form.username = res.data.createBy;
      });
    },
@@ -884,9 +1013,10 @@
        this.form = response.data;
        if (this.form.serviceFunds[0]) {
          this.donorchargeorgans = this.form.serviceFunds;
          this.donorchargeorgans.forEach(item => {
          this.donorchargeorgans.forEach((item, index) => {
            item.taXmoney = item.pretaxcost - item.taxedcost;
            item.taXmoney = item.taXmoney.toFixed(2);
            item.index = index + 1;
            this.accumulation();
          });
        }
@@ -900,9 +1030,10 @@
        this.form = response.data;
        if (this.form.serviceFunds[0]) {
          this.donorchargeorgans = this.form.serviceFunds;
          this.donorchargeorgans.forEach(item => {
          this.donorchargeorgans.forEach((item, index) => {
            item.taXmoney = item.pretaxcost - item.taxedcost;
            item.taXmoney = item.taXmoney.toFixed(2);
            item.index = index + 1;
            this.accumulation();
          });
        }
@@ -916,18 +1047,22 @@
        if (valid) {
          this.$modal.loading("正在提交,请稍候!");
          //保存
          console.log(1);
          this.form.serviceFunds = this.donorchargeorgans;
          console.log(2);
          if (this.form.id != null) {
            updateFundtax(this.form).then(res1 => {
              if (res1.code == 200) {
                console.log(3);
                this.$modal.msgSuccess("保存成功!");
                getFundtax(this.curId).then(response => {
                getFundtax(this.form.id).then(response => {
                  this.form = response.data;
                  if (this.form.serviceFunds[0]) {
                    this.donorchargeorgans = this.form.serviceFunds;
                    this.donorchargeorgans.forEach(item => {
                    this.donorchargeorgans.forEach((item, index) => {
                      item.taXmoney = item.pretaxcost - item.taxedcost;
                      item.taXmoney = item.taXmoney.toFixed(2);
                      item.index = index + 1;
                      this.accumulation();
                    });
                  }
@@ -941,15 +1076,16 @@
          } else {
            addFundtax(this.form).then(response => {
              if (response.code == 200) {
                this.form.id = response.data.fundTaxId;
                this.$modal.msgSuccess("新增成功!");
                getFundtax(response.msg).then(response => {
                  this.form = response.data;
                getFundtax(response.data.fundTaxId).then(res => {
                  this.form = res.data;
                  if (this.form.serviceFunds[0]) {
                    this.donorchargeorgans = this.form.serviceFunds;
                    this.donorchargeorgans.forEach(item => {
                    this.donorchargeorgans.forEach((item, index) => {
                      item.taXmoney = item.pretaxcost - item.taxedcost;
                      item.taXmoney = item.taXmoney.toFixed(2);
                      item.index = index + 1;
                      this.accumulation();
                    });
                  }
@@ -974,23 +1110,16 @@
        this.$modal.msgError("注意实收金额不等于应收金额,请核对数据!");
      }
    },
    //修改实收或应收后触发
    //修改实收或应收后触发(金额一律走精确运算)
    chargeSum() {
      let ChargeSum = 0;
      let ChargeamountSum = 0;
      //费用合计
      try {
        for (let i = 0; i < this.donorchargeorgans.length; i++) {
          if (!isNaN(parseFloat(this.donorchargeorgans[i].organcharge))) {
            ChargeSum += parseFloat(this.donorchargeorgans[i].organcharge);
          }
          if (!isNaN(parseFloat(this.donorchargeorgans[i].amount))) {
            ChargeamountSum += parseFloat(this.donorchargeorgans[i].amount);
          }
        }
        this.form.receivableamount = ChargeSum.toFixed(2);
        this.form.receivedamount = ChargeamountSum.toFixed(2);
        this.form.receivableamount = moneyRound(
          moneySum(this.donorchargeorgans, "organcharge")
        ).toFixed(2);
        this.form.receivedamount = moneyRound(
          moneySum(this.donorchargeorgans, "amount")
        ).toFixed(2);
      } catch {}
    },
@@ -1070,25 +1199,23 @@
      const config = {
        headers: { Authorization: "Bearer " + this.ICDtoken }
      };
      const pdfimg = this.Networkheader + "/prod-api" + response.fileName;
      const pdfimg = this.Networkheader + process.env.VUE_APP_BASE_API + response.fileName;
      //获取票据信息位置
      if (response.code == 200) {
        this.previewpdf = true;
        fetch(pdfimg, config)
          .then(response => response.blob())
          .then(blob => {
            // 将获取的数据流转换为URL
            this.pdfimg = URL.createObjectURL(blob);
            this.pdfimgsrcList.push(URL.createObjectURL(blob));
            this.fileListto.push({
              name: file.name,
              url: URL.createObjectURL(blob)
            });
          })
          .catch(error => {
            console.error("Error loading image", error);
            return;
          });
        const localBlob = file.raw;
        const localUrl = URL.createObjectURL(localBlob);
        this.pdfimg = localUrl;
        this.embeddedFile = {
          name: file.name,
          url: localUrl,
          type: /\.pdf$/i.test(file.name) ? "pdf" : "image"
        };
        this.pdfimgsrcList.push(localUrl);
        this.fileListto.push({
          name: file.name,
          url: localUrl
        });
        this.$modal.msgSuccess(response.msg);
@@ -1126,7 +1253,7 @@
      if (this.donorchargeorgans[index].annexFilesList) {
        const fetchPromises = this.donorchargeorgans[index].annexFilesList.map(
          (value, indexson) => {
            const pdfimg = this.Networkheader + "/prod-api" + value.url;
            const pdfimg = this.Networkheader + process.env.VUE_APP_BASE_API + value.url;
            return fetch(pdfimg, config)
              .then(response => response.blob())
              .then(blob => {
@@ -1165,28 +1292,32 @@
      );
    },
    // 点击已上传文件
    // 点击已上传文件:在附件弹窗右侧内嵌预览
    downFile(item) {
      if (this.operationType == "detail") {
        const list = (this.fileListto || []).map(f => ({
          name: f.name,
          url: f.url
        }));
        const index = list.findIndex(f => f.url === item.url);
        this.$previewFile(list, index > -1 ? index : 0);
        return;
      }
      const ext = String(item.name || "").toLowerCase().split(".").pop();
      const isImage = ["jpg", "jpeg", "png", "gif", "bmp", "webp"].includes(ext);
      if (ext !== "pdf" && !isImage) {
        this.hintitle = "当前文件暂不支持预览";
        this.$modal.msgWarning("当前文件暂不支持预览");
        return;
      }
      this.embeddedFile = {
        name: item.name,
        url: item.url,
        type: ext === "pdf" ? "pdf" : "image"
      };
      this.pdftitle =
        "共" + this.pdfimgsrcList.length + "项,当前选中" + item.name;
      let name = item.name.split(".");
      if (name[1] == "pdf") {
        this.$modal.msgWarning("当前文件暂不支持预览");
        this.previewpdf = false;
        this.hintitle = "当前文件暂不支持预览";
      } else if (name[1] == "jpg" || "png") {
        console.log(item, "展示");
        this.previewpdf = true;
        if (item.url) {
          this.pdfimg = item.url;
        } else {
          this.pdfimg = "";
        }
      } else {
        this.hintitle = "当前文件暂不支持预览";
        this.$modal.msgWarning("当前文件暂不支持预览");
        this.previewpdf = false;
      }
      this.pdfVisible = true;
    },
    getIndexInArray(arr, obj) {
      return arr.indexOf(obj);
@@ -1375,6 +1506,13 @@
  color: #000000;
  cursor: not-allowed;
}
::v-deep .el-tag--medium {
  height: 28px;
  line-height: 26px;
  margin-right: 15px;
  margin-bottom: 15px;
  font-size: 16px;
}
::v-deep .el-input--medium .el-input__inner {
  height: 36px;