:qx
qx
2 天以前 74b6e2cd66725fcf9911d59fdff41a99b56756cc
src/views/hosp/order/index.vue
@@ -2,7 +2,7 @@
  <div v-loading="isLoading" element-loading-text="正在提交,请稍候..." element-loading-spinner="el-icon-loading"
    element-loading-background="rgba(255, 255, 255, 0.8)" style="height: 100%; padding: 20px; position: relative;">
    <div class="app-container">
       <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
      <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
        <el-form-item label="姓名" prop="name">
          <el-input ref="inputName" v-model="queryParams.name" placeholder="请输入姓名" style="width: 150px" clearable
            @keyup.enter.native="handleQuery" />
@@ -15,7 +15,7 @@
          <el-input ref="inputName" v-model="queryParams.xmmc" placeholder="请输入体检项目" style="width: 150px" clearable
            @keyup.enter.native="handleQuery" />
        </el-form-item>
        <el-form-item label="单位名称" prop="tjCompName" >
        <el-form-item label="单位名称" prop="tjCompName">
          <el-select :remote-method="getRemoteData" v-model="queryParams.tjCompName" value-key="drugManufacturerId"
            style="width: 200px" remote filterable placeholder="请选择单位名称" clearable @change="searchSelect">
            <el-option v-for="dict in CompanyList" :key="dict.drugManufacturerId" :label="dict.cnName" :value="dict" />
@@ -89,8 +89,8 @@
          <el-button type="primary" size="mini" @click="handleProject1" :disabled="single"
            v-hasPermi="['hosp:order:export']">补录项目</el-button>
        </el-col>
 <el-col :span="1.5">
          <el-button type="primary"  size="mini" @click="revokeProject" :disabled="single"
        <el-col :span="1.5">
          <el-button type="primary" size="mini" @click="revokeProject" :disabled="single"
            v-hasPermi="['hosp:order:export']">撤销补录</el-button>
        </el-col>
@@ -106,8 +106,8 @@
          <el-button type="primary" size="mini" @click="budadzd" :disabled="single"
            v-hasPermi="['hosp:order:export']">打印补录单</el-button>
        </el-col>
         <el-col :span="1.5">
          <el-button style="background-color:#E6A23C;color:#fff" size="mini" @click="handleRevoke"
        <el-col :span="1.5">
          <el-button style="background-color:#E6A23C;color:#fff" size="mini" @click="handleRevoke"
            :disabled="singles">撤销签到</el-button>
        </el-col>
        <el-col :span="1.5">
@@ -544,76 +544,94 @@
      </el-dialog>
      <!-- 添加补录项目 -->
      <el-dialog :title="title" :visible.sync="Projectopen1" width="1100px" style="height: 860px" append-to-body
      <el-dialog :title="title" :visible.sync="Projectopen1" width="1100px" style="height: 880px" append-to-body
        :close-on-click-modal="false">
        <div class="box">
          <div class="box1">
            <div style="text-align: center; margin-bottom: 10px; margin-top: 10px">
              项目选择
            </div>
            <el-tabs type="border-card" style="height: 560px; margin: 0 10px; width: 100%" @tab-click="handleClick"
              v-model="activeNames">
              <el-tab-pane label="组合" name="first">
                <div class="tab8">
                  <el-row :gutter="20" style="width: 100%">
                    <el-col :span="22">
                      <el-input placeholder="输入关键字进行过滤" v-model="filterage">
                      </el-input>
                      <div class="tab3">
                        <el-tree class="filter-tree" v-loading="loading" :data="packageList" :props="defaultProp"
                          show-checkbox node-key="id" @check-change="handlepackage" :default-checked-keys="checkedkeys"
                          :filter-node-method="filterpackage" ref="treas" :render-content="renderContents">
                        </el-tree>
                      </div>
                    </el-col>
                  </el-row>
          <el-row :gutter="20">
            <el-col :span="8">
              <div class="grid-content bg-purple">
                <div style="text-align: center; margin-bottom: 10px; margin-top: 10px">
                  项目选择
                </div>
              </el-tab-pane>
              <el-tab-pane label="单项" name="third">
                <div class="tab8">
                  <el-row type="flex" class="row-bg" justify="space-around">
                    <el-col :span="22">
                      <el-input placeholder="输入关键字进行过滤" v-model="filterText">
                      </el-input>
                      <div class="tab3">
                        <el-tree class="filter-tree" v-loading="loading" :data="Treedata" :props="defaultProps"
                          show-checkbox node-key="proId" @check-change="handleCurrentChecked"
                          :default-checked-keys="checkedkey" :filter-node-method="filterNode" ref="tree"
                          :render-content="renderContent">
                        </el-tree>
                      </div>
                    </el-col>
                  </el-row>
                <el-tabs type="border-card" style="height: 560px; margin: 0 10px; width: 100%" @tab-click="handleClick"
                  v-model="activeNames">
                  <el-tab-pane label="组合" name="first">
                    <div class="tab8">
                      <el-row :gutter="20" style="width: 100%">
                        <el-col :span="22">
                          <el-input placeholder="输入关键字进行过滤" v-model="filterage">
                          </el-input>
                          <div class="tab3">
                            <el-tree class="filter-tree" v-loading="loading" :data="packageList" :props="defaultProp"
                              show-checkbox node-key="id" @check-change="handlepackage"
                              :default-checked-keys="checkedkeys" :filter-node-method="filterpackage" ref="treas"
                              :render-content="renderContents">
                            </el-tree>
                          </div>
                        </el-col>
                      </el-row>
                    </div>
                  </el-tab-pane>
                  <el-tab-pane label="单项" name="third">
                    <div class="tab8">
                      <el-row type="flex" class="row-bg" justify="space-around">
                        <el-col :span="22">
                          <el-input placeholder="输入关键字进行过滤" v-model="filterText">
                          </el-input>
                          <div class="tab3">
                            <el-tree class="filter-tree" v-loading="loading" :data="Treedata" :props="defaultProps"
                              show-checkbox node-key="proId" @check-change="handleCurrentChecked"
                              :default-checked-keys="checkedkey" :filter-node-method="filterNode" ref="tree"
                              :render-content="renderContent">
                            </el-tree>
                          </div>
                        </el-col>
                      </el-row>
                    </div>
                  </el-tab-pane>
                </el-tabs>
              </div>
            </el-col>
            <el-col :span="16">
              <div class="grid-content bg-purple">
                <div style="text-align: center; margin-bottom: 10px; margin-top: 9px">
                  已选项目列表
                </div>
              </el-tab-pane>
            </el-tabs>
          </div>
                <el-table :data="DataList3" border style="width: 100%; table-layout: fixed" height="560"
                  :span-method="objectspanmethod">
                  <el-table-column prop="propinName" label="检查项目" width="160px" :show-overflow-tooltip="true">
                  </el-table-column>
                  <el-table-column prop="proName" label="明细项目" width="160px" :show-overflow-tooltip="true">
                  </el-table-column>
                  <el-table-column prop="sl" label="数量" width="56px">
                  </el-table-column>
                  <el-table-column prop="proPrice" label="原价" width="56px">
                  </el-table-column>
                  <el-table-column label="折扣" width="150px">
                    <template slot-scope="scope">
                      <!-- @input="validateDiscount(scope.row)" -->
                      <el-input-number v-model.number="scope.row.discount" @change="handleManualChange(scope.row)"
                        placeholder="输入折扣" size="small" type="number" :precision="1" :step="0.1" :max="10" :min="0">
                      </el-input-number>
                    </template>
                  </el-table-column>
                  <el-table-column prop="nowPrice" label="现价">
                    <template slot-scope="scope">
                      {{ scope.row.nowPrice ? scope.row.nowPrice.toFixed(2) : scope.row.nowPrice }}
                    </template>
                  </el-table-column>
          <div class="grid-content bg-purple">
            <div style="text-align: center; margin-bottom: 10px; margin-top: 9px">
              已选项目列表
            </div>
            <el-table :data="DataList3" border style="width: 100%; table-layout: fixed" height="560"
              :span-method="objectspanmethod">
              <el-table-column prop="propinName" label="检查项目" width="200px" :show-overflow-tooltip="true">
              </el-table-column>
              <el-table-column prop="proName" label="明细项目" width="200px" :show-overflow-tooltip="true">
              </el-table-column>
              <el-table-column prop="sl" label="数量" width="56px">
              </el-table-column>
              <el-table-column prop="proPrice" label="原价" width="56px">
              </el-table-column>
              <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="50px">
                <template slot-scope="scope">
                  <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDel(scope.row)"
                    title="删除"></el-button>
                </template>
              </el-table-column>
            </el-table>
            <!-- <h3 style="font-weight: 600">合计:{{ marryalls }}元</h3> -->
          </div>
                  <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="50px">
                    <template slot-scope="scope">
                      <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDel(scope.row)"
                        title="删除"></el-button>
                    </template>
                  </el-table-column>
                </el-table>
                <!-- <h3 style="font-weight: 600">合计:{{ marryalls }}元</h3> -->
              </div>
            </el-col>
          </el-row>
        </div>
        <el-form :model="form" inline style="display: flex; justify-content: space-between; margin-top: 20px">
@@ -630,13 +648,23 @@
          </el-form-item>
          <!-- 折扣设定 -->
          <el-form-item label="折扣" style="display: flex">
          <!-- <el-form-item label="折扣" style="display: flex">
            <el-input style="width: 90px" type="number" v-model="discount" :value="discount"></el-input>
          </el-form-item> -->
          <el-form-item label="折扣">
            <!-- {{ discount }} -->
            <el-input-number ref="inputNumber" style="width: 140px" v-model="discount" :precision="1" :step="0.1"
              :max="10" :min="0" @change="debounceNumberChange"></el-input-number>
          </el-form-item>
          <!-- 应付金额 -->
          <el-form-item label="应付" style="display: flex">
          <!-- <el-form-item label="应付" style="display: flex">
            <el-input placeholder="应付金额" :value="TotalPrice1 * (discount / 10)" style="width: 90px"></el-input>
          </el-form-item> -->
          <el-form-item label="应付">
            <el-input placeholder="应付金额" v-model="TotalPrice" style="width: 90px" @input="changeXianjia"
              @blur="numberChangeXianPrice(discount, discount)" />
          </el-form-item>
          <!-- 付款类型 -->
@@ -649,7 +677,7 @@
          <!-- 结算方式 -->
          <el-form-item label="结算方式" prop="jsType" style="display: flex">
            <el-select v-model="jsType" placeholder="请选择结算方式" style="width: 130px" clearable>
            <el-select v-model="jsType" placeholder="请选择结算方式" style="width: 120px" clearable>
              <el-option v-for="dict in dict.type.reservation_pay_type" :key="dict.value" :label="dict.label"
                :value="dict.value" />
            </el-select>
@@ -910,6 +938,7 @@
import { getwater } from "@/api/hosp/customer";
import { getInfo } from "@/api/login";
import ViewPdf from "@/components/ViewPdf";
import Big from "big.js";
import {
  shijianzhou,
  getaddtTransition,
@@ -1008,6 +1037,7 @@
      TotalPrice1: 0,
      TotalPrice6: 0,
      TotalPrice7: 0,
      TotalPrice: 0,
      numberList: [],
      dialogVisible: false,
      CheckBox: {},
@@ -1958,8 +1988,8 @@
      this.DataList3 = [];
      this.Datalists = [];
      this.filterText = "",
      this.filterage = "",
      this.TotalPrice1 = 0;
        this.filterage = "",
        this.TotalPrice1 = 0;
      this.orderId = row.orderId;
      this.cusId = row.tjCusIdCard;
      this.userId = row.userId;
@@ -2036,7 +2066,9 @@
      this.DataList3 = [];
      this.Datalists = [];
      this.filterText = "",
      this.filterage = "",
        this.filterage = "",
        this.TotalPrice = 0;
      this.discount = 10;
      this.TotalPrice1 = 0;
      this.orderId = this.ids;
      this.cusId = this.cusIds;
@@ -2148,6 +2180,9 @@
          this.TotalPrice1 = 0;
          this.DataList3.forEach((item) => {
            this.TotalPrice1 += item.proPrice * item.sl;
            let TotalPrice = this.TotalPrice1 * (this.discount / 10)
              this.TotalPrice  = TotalPrice.toFixed(2);
            this.lastXianPrice = this.TotalPrice;
          });
        });
      } else if (checked === false) {
@@ -2176,6 +2211,9 @@
          this.TotalPrice1 = 0;
          this.DataList3.forEach((item) => {
            this.TotalPrice1 += item.proPrice * item.sl;
           let TotalPrice = this.TotalPrice1 * (this.discount / 10)
              this.TotalPrice  = TotalPrice.toFixed(2);
            this.lastXianPrice = this.TotalPrice;
          });
        });
      }
@@ -2219,9 +2257,6 @@
        this.spliceData();
        this.TotalPrice1 = 0;
        this.DataList.forEach((item1) => {
          console.log(item1.proPrice, 3322);
          console.log(this.TotalPrice1, 1122);
          this.TotalPrice1 = item1.proPrice + this.TotalPrice1;
        });
        if (this.marryalls != 0) {
@@ -2229,6 +2264,118 @@
        }
      }
    },
    handleManualChange(row) {
      this.updateProPrice(row);
    },
    updateProPrice(row) {
      if (row.proPrice == 0) {
        row.discount = 10
        return
      } else {
        const ordPrice = new Big(row.proPrice);
        const discount = new Big(row.discount);
        const result = ordPrice.times(discount.div(10)); // ordPrice * (discount / 10)
        row.nowPrice = result.toNumber();
       let TotalPrice= this.DataList3.reduce((sum, item) => {
          return sum.plus(new Big(item.nowPrice || "0"));
        }, new Big(0))
         this.TotalPrice  = TotalPrice.toFixed(2);
        this.discount =
          (Math.floor((this.TotalPrice / this.TotalPrice1) * 100) / 100) * 10;
      }
    },
    debounceNumberChange(currentValue, oldValue) {
      clearTimeout(this.debounceTimer);
      this.debounceTimer = setTimeout(() => {
        this.numberChange(currentValue, oldValue);
      }, 300);
    },
    // 折扣
    numberChange(currentValue, oldValue) {
      this.$confirm("确定修改所有子项的折扣吗?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          this.discount = currentValue;
          this.DataList3.forEach((item) => {
            item.discount = this.discount;
            const ordPrice = new Big(item.proPrice.toString());
            const discount = new Big(item.discount.toString());
            const result = ordPrice.times(discount.div(10));
            item.nowPrice = result.toNumber();
            // this.TotalPrice = this.DataList3.reduce((sum, item) => {
            //   return sum.plus(new Big(item.nowPrice || "0"));
            // }, new Big(0));
            let TotalPrice = new Big(this.TotalPrice1 * (this.discount / 10))
              this.TotalPrice  = TotalPrice.toFixed(2);
          });
        })
        .catch(() => {
          this.discount = oldValue;
        });
    },
    changeXianjia() {
      // 原始折扣率计算
      if (this.TotalPrice1 !== 0) {
        this.discount =
          (Math.floor((this.TotalPrice / this.TotalPrice1) * 100) / 100) * 10;
      }
    },
    numberChangeXianPrice(currentValue, oldValue) {
      // 如果现价没有变化,直接返回
      if (this.TotalPrice === this.lastXianPrice || !this.TotalPrice) {
        return;
      }
      this.$confirm("确定修改所有子项的折扣吗?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          this.discount = currentValue;
          // if (this.discount < this.getInfodis) {
          //   this.discount = this.getInfodis;
          // }
          let totalYsprice = new Big(0);
          this.DataList3.forEach((item) => {
            item.discount = this.discount;
            const ordPrice = new Big(item.proPrice);
            const discount = new Big(item.discount);
            const result = ordPrice.times(discount.div(10));
            item.nowPrice = result.toNumber();
            totalYsprice = totalYsprice.plus(new Big(item.nowPrice));
          });
          if (!totalYsprice.eq(this.TotalPrice)) {
            const diff = new Big(this.TotalPrice).minus(totalYsprice);
            if (this.tableData1.length > 0) {
              const lastItem = this.tableData3[this.tableData3.length - 1];
              const newYsPrice = new Big(lastItem.nowPrice)
                .plus(diff)
                .toNumber();
              // console.log(
              //   "hhh",
              //   this.tableData1[this.tableData1.length - 1].nowPrice,
              //   newYsPrice
              // );
              this.$set(
                this.tableData3[this.tableData3.length - 1],
                "nowPrice",
                newYsPrice
              );
            }
          }
          this.lastXianPrice = this.TotalPrice;
        })
        .catch(() => {
          this.discount = oldValue;
        });
    },
    handleDel(row) {
      this.Datalists.forEach((item, index) => {
        if (item.proId == row.proId) {
@@ -2239,8 +2386,18 @@
          });
        }
      });
      this.DataList3.forEach((item, index) => {
        if (item.proId == row.proId) {
          let proParentId = item.proParentId
          // 获取当前选中的节点key
          const currentCheckedKeys = this.$refs.tree.getCheckedKeys();
          // 创建一个新数组,移除想要取消选中的节点key(这里假设是1)
          const newCheckedKeys = currentCheckedKeys.filter(key => key !== proParentId);
          // 使用setCheckedKeys方法更新选中状态
          this.$refs.tree.setCheckedKeys(newCheckedKeys);
          this.DataList3.splice(index, 1);
          this.marryalls = 0;
          this.DataList3.forEach((item1) => {
@@ -2248,21 +2405,36 @@
          });
        }
      });
      if (this.DataList3.length == 0) {
        this.discount = 10
        this.checkedkey = []
        this.$refs.tree.setCheckedKeys([])
        this.TotalPrice1 = this.marryalls;
        this.TotalPrice = new Big(this.TotalPrice1 * (this.discount / 10))
      } else if (this.DataList3.length == 1) {
        this.discount = this.DataList3[0].discount
        this.TotalPrice = new Big(this.TotalPrice1 * (this.discount / 10)).toFixed(2)
      }
      this.DataList.forEach((item, index) => {
        if (item.proId == row.proId) {
          this.DataList.splice(index, 1);
          this.TotalPrice1 = 0;
          this.TotalPrice = 0;
          this.DataList.forEach((item1) => {
            this.TotalPrice1 = item1.proPrice + this.TotalPrice1;
            this.TotalPrice = new Big(this.TotalPrice1 * (this.discount / 10))
          });
          if (this.marryalls != 0) {
            this.TotalPrice1 += this.marryalls;
            this.TotalPrice = new Big(this.TotalPrice1 * (this.discount / 10))
          }
        }
      });
      this.TotalPrice1 = 0;
      this.TotalPrice = 0;
      this.DataList3.forEach((item) => {
        this.TotalPrice1 += item.proPrice;
        this.TotalPrice = new Big(this.TotalPrice1 * (this.discount / 10))
      });
    },
    /** 删除按钮操作 */
@@ -2677,7 +2849,7 @@
}
.box1 {
  width: 50%;
  width: 35%;
  display: flex;
  flex-direction: column;
}