yxh
13 小时以前 38c26c3049d55ffda598ce0263498448b7c60834
src/views/project/tallage/computingBill/index.vue
@@ -42,7 +42,7 @@
            ><el-form-item label="算税时间" prop="donateno">
              <el-date-picker
                v-model="form.taxedtime"
                value-format="yyyy-MM-dd HH:mm"
                value-format="yyyy-MM-dd HH:mm:ss"
                type="datetime" format="yyyy-MM-dd HH:mm"
                :disabled="true"
                placeholder="选择时间"
@@ -61,21 +61,50 @@
            </el-form-item>
          </el-col>
          <el-col :span="6"
            ><el-form-item label="扣税金额" prop="donateno">
            ><el-form-item label="增值税" prop="donateno">
              <el-input
                v-model="form.vatAmount"
                :disabled="true"
                placeholder="请输入增值税"
              />
            </el-form-item>
          </el-col>
          <el-col :span="6"
            ><el-form-item label="城建税" prop="donateno">
              <el-input
                v-model="form.cityTaxAmount"
                :disabled="true"
                placeholder="请输入城建税"
              />
            </el-form-item>
          </el-col>
          <el-col :span="6"
            ><el-form-item label="劳务税前" prop="donateno">
              <el-input
                v-model="form.laborPretaxAmount"
                :disabled="true"
                placeholder="请输入劳务税前"
              />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="6"
            ><el-form-item label="劳务个税" prop="donateno">
              <el-input
                v-model="form.taxMoney"
                :disabled="true"
                placeholder="请输入扣税金额"
                placeholder="请输入劳务个税"
              />
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="税后金额" prop="donationcategory">
            <el-form-item label="劳务税后" prop="donationcategory">
              <el-input
                v-model="form.taxedamount"
                :disabled="true"
                placeholder="请输入收款行号"
                placeholder="请输入劳务税后"
              />
            </el-form-item>
          </el-col>
@@ -195,23 +224,50 @@
                />
              </template>
            </el-table-column>
            <el-table-column label="扣税金额" align="center" prop="taXmoney">
            <el-table-column prop="vatCost" align="center" label="增值税">
              <template slot-scope="scope">
                <el-input
                  v-model="scope.row.taXmoney"
                  v-model="scope.row.vatCost"
                  :disabled="true"
                  placeholder="扣税金额"
                  placeholder="增值税"
                />
              </template>
            </el-table-column>
            <el-table-column prop="cityTaxCost" align="center" label="城建税">
              <template slot-scope="scope">
                <el-input
                  v-model="scope.row.cityTaxCost"
                  :disabled="true"
                  placeholder="城建税"
                />
              </template>
            </el-table-column>
            <el-table-column prop="laborPretaxCost" align="center" label="劳务税前">
              <template slot-scope="scope">
                <el-input
                  v-model="scope.row.laborPretaxCost"
                  :disabled="true"
                  placeholder="劳务税前"
                />
              </template>
            </el-table-column>
            <el-table-column label="劳务个税" align="center" prop="taxcost">
              <template slot-scope="scope">
                <el-input
                  v-model="scope.row.taxcost"
                  :disabled="true"
                  placeholder="劳务个税"
                />
              </template>
            </el-table-column>
            <el-table-column prop="taxedcost" align="center" label="税后金额">
            <el-table-column prop="taxedcost" align="center" label="劳务税后">
              <template slot-scope="scope">
                <el-input
                  @blur="chargeSum"
                  :disabled="true"
                  v-model="scope.row.taxedcost"
                  placeholder="税后金额"
                  placeholder="劳务税后"
                />
              </template>
            </el-table-column>
@@ -298,6 +354,7 @@
            <el-row :gutter="20">
              <!--用户数据-->
              <el-form
                class="opo-query-form"
                :model="patientqueryParams"
                ref="queryForm"
                size="small"
@@ -396,14 +453,32 @@
                >
                </el-table-column>
                <el-table-column
                  prop="taXmoney"
                  label="扣税金额"
                  prop="vatCost"
                  label="增值税"
                  show-overflow-tooltip
                >
                </el-table-column>
                <el-table-column
                  prop="cityTaxCost"
                  label="城建税"
                  show-overflow-tooltip
                >
                </el-table-column>
                <el-table-column
                  prop="laborPretaxCost"
                  label="劳务税前"
                  show-overflow-tooltip
                >
                </el-table-column>
                <el-table-column
                  prop="taxcost"
                  label="劳务个税"
                  show-overflow-tooltip
                >
                </el-table-column>
                <el-table-column
                  prop="taxedcost"
                  label="税后金额"
                  label="劳务税后"
                  show-overflow-tooltip
                >
                </el-table-column>
@@ -438,8 +513,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>
@@ -525,19 +609,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>
@@ -750,6 +822,7 @@
  created() {
    console.log(234);
    this.Networkheader = window.location.origin;
    this.GetMaxTaxid();
    //获取参数
@@ -813,8 +886,6 @@
        });
      }
      this.donorchargeorgans.forEach(item => {
        item.taXmoney = item.pretaxcost - item.taxedcost;
        item.taXmoney = item.taXmoney.toFixed(2);
        this.accumulation();
      });
      if (this.form.id) {
@@ -829,47 +900,81 @@
      this.dialogVisiblepatient = false;
    },
    // 计算个税
    // 计算个税(先保存当前单据,保存成功后再算税;算税成功后从后端重新加载,不再用页面旧金额回写)
    calculateFn() {
      if (this.form.id >= this.MaxFundTaxId) {
        this.$modal.loading("正在提交,请稍候!");
        this.$modal
          .confirm("即将进行算税是否已保存全部数据?")
          .then(res => {
            listbxiaostatistics({
              fundTaxId: Number(this.form.id),
              addOrupdate: 1
            }).then(res1 => {
              if (res1.code == 200) {
                this.$modal.msgSuccess("计算成功");
                this.$modal.closeLoading();
                this.form.istax = 1;
                this.form.taxedtime = this.$moment().format(
                  "YYYY-MM-DD HH:mm:ss"
                );
                this.submitForm();
              } else {
                this.$modal.closeLoading();
                this.$modal.msgError(res1.msg);
          .confirm("算税前会先保存当前单据,是否继续?")
          .then(() => {
            this.form.serviceFunds = this.donorchargeorgans;
            this.$refs["form"].validate(valid => {
              if (!valid) {
                this.$modal.msgError("单据校验未通过,请检查后重试");
                return;
              }
              this.$modal.loading("正在提交,请稍候!");
              updateFundtax(this.form).then(res0 => {
                if (res0.code != 200) {
                  this.$modal.closeLoading();
                  this.$modal.msgError(res0.msg);
                  return;
                }
                listbxiaostatistics({
                  fundTaxId: Number(this.form.id),
                  addOrupdate: 1
                }).then(res1 => {
                  if (res1.code == 200) {
                    // 后端已回写 service_fund / service_fundtax,这里只做重新加载
                    this.refreshFundtax().then(() => {
                      this.$modal.closeLoading();
                      this.$modal.msgSuccess("计算成功");
                    });
                  } else {
                    this.$modal.closeLoading();
                    this.$modal.msgError(res1.msg);
                  }
                });
              });
            });
          })
          .catch(() => {});
      } else {
        this.$modal.msgError("当前单据不为最新申请单");
      }
    },
    // 金额合计
    // 从后端重新加载汇总单(含明细单据行)并重算合计
    refreshFundtax() {
      return getFundtax(this.form.id).then(response => {
        this.form = response.data;
        if (this.form.serviceFunds && this.form.serviceFunds[0]) {
          this.donorchargeorgans = this.form.serviceFunds;
          this.donorchargeorgans.forEach((item, index) => {
            item.index = index + 1;
          });
        }
        this.accumulation();
        return response;
      });
    },
    // 金额合计(6 个金额全部取自单据上的后端金额,不再用“税前-税后”倒算)
    accumulation() {
      this.form.pretaxamount = this.donorchargeorgans
        .reduce((acc, obj) => acc + Number(obj.pretaxcost), 0)
        .reduce((acc, obj) => acc + Number(obj.pretaxcost || 0), 0)
        .toFixed(2);
      this.form.vatAmount = this.donorchargeorgans
        .reduce((acc, obj) => acc + Number(obj.vatCost || 0), 0)
        .toFixed(2);
      this.form.cityTaxAmount = this.donorchargeorgans
        .reduce((acc, obj) => acc + Number(obj.cityTaxCost || 0), 0)
        .toFixed(2);
      this.form.laborPretaxAmount = this.donorchargeorgans
        .reduce((acc, obj) => acc + Number(obj.laborPretaxCost || 0), 0)
        .toFixed(2);
      this.form.taxMoney = this.donorchargeorgans
        .reduce((acc, obj) => acc + Number(obj.taXmoney), 0)
        .reduce((acc, obj) => acc + Number(obj.taxcost || 0), 0)
        .toFixed(2);
      this.form.taxedamount = this.donorchargeorgans
        .reduce((acc, obj) => acc + Number(obj.taxedcost), 0)
        .reduce((acc, obj) => acc + Number(obj.taxedcost || 0), 0)
        .toFixed(2);
    },
    // 多选框选中数据
@@ -1012,14 +1117,12 @@
      this.title = "专家费汇总单编辑";
      getFundtax(this.curId).then(response => {
        this.form = response.data;
        if (this.form.serviceFunds[0]) {
        if (this.form.serviceFunds && this.form.serviceFunds[0]) {
          this.donorchargeorgans = this.form.serviceFunds;
          this.donorchargeorgans.forEach((item, index) => {
            item.taXmoney = item.pretaxcost - item.taxedcost;
            item.taXmoney = item.taXmoney.toFixed(2);
            item.index = index + 1;
            this.accumulation();
          });
          this.accumulation();
        }
      });
    },
@@ -1029,14 +1132,12 @@
      this.title = "查看专家费汇总单";
      getFundtax(this.curId).then(response => {
        this.form = response.data;
        if (this.form.serviceFunds[0]) {
        if (this.form.serviceFunds && this.form.serviceFunds[0]) {
          this.donorchargeorgans = this.form.serviceFunds;
          this.donorchargeorgans.forEach((item, index) => {
            item.taXmoney = item.pretaxcost - item.taxedcost;
            item.taXmoney = item.taXmoney.toFixed(2);
            item.index = index + 1;
            this.accumulation();
          });
          this.accumulation();
        }
      });
    },
@@ -1054,21 +1155,10 @@
          if (this.form.id != null) {
            updateFundtax(this.form).then(res1 => {
              if (res1.code == 200) {
                console.log(3);
                this.$modal.msgSuccess("保存成功!");
                getFundtax(this.form.id).then(response => {
                  this.form = response.data;
                  if (this.form.serviceFunds[0]) {
                    this.donorchargeorgans = this.form.serviceFunds;
                    this.donorchargeorgans.forEach((item, index) => {
                      item.taXmoney = item.pretaxcost - item.taxedcost;
                      item.taXmoney = item.taXmoney.toFixed(2);
                      item.index = index + 1;
                      this.accumulation();
                    });
                  }
                this.refreshFundtax().then(() => {
                  this.$modal.closeLoading();
                });
                this.$modal.closeLoading();
              } else {
                this.$modal.closeLoading();
                this.$modal.msgError(res1.msg);
@@ -1078,20 +1168,10 @@
            addFundtax(this.form).then(response => {
              if (response.code == 200) {
                this.$modal.msgSuccess("新增成功!");
                getFundtax(response.data.fundTaxId).then(res => {
                  this.form = res.data;
                  if (this.form.serviceFunds[0]) {
                    this.donorchargeorgans = this.form.serviceFunds;
                    this.donorchargeorgans.forEach((item, index) => {
                      item.taXmoney = item.pretaxcost - item.taxedcost;
                      item.taXmoney = item.taXmoney.toFixed(2);
                      item.index = index + 1;
                      this.accumulation();
                    });
                  }
                this.form.id = response.data.fundTaxId;
                this.refreshFundtax().then(() => {
                  this.$modal.closeLoading();
                });
                this.$modal.closeLoading();
              } else {
                this.$modal.msgError(response.msg);
                this.$modal.closeLoading();
@@ -1200,25 +1280,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);
@@ -1256,7 +1334,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 => {
@@ -1295,28 +1373,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);