| 
						 | 
						<template>  <div style="display: flex; margin-left: 10px; margin-top: 10px;">    <div style="width:220px;">      <div>        <span>项目类别</span>        <el-cascader :options="dict.itemTypeTree" v-model="itemTypeIds" style="margin-left: 3px;width:160px;"          :props="{ checkStrictly: true, expandTrigger: 'hover', ...customerOrg.treeprops, }" :show-all-levels="false"          clearable filterable @change="changeItemType" size="small">        </el-cascader>      </div>      <div class="mainareaBox">        <el-table :data="asbItem"          :height="(window.pageHeight > 700 ? (window.pageHeight - 440) : 260)" @row-dblclick="dbClickChoosedAsb" highlight-current-row          @selection-change="handleSelectionChange" size="small" :row-class-name="handleRowClassName"           @row-click="chooseAsbItem">          <!--          <el-table-column type="selection" align="center" width="40" />          -->          <el-table-column prop="displayName" label="未选组合项目" />          <!--          <el-table-column prop="price" label="标准价格" width="70">            <template slot-scope="scope">              <div style="text-align: center;">{{ scope.row.price }}</div>            </template>          </el-table-column>          <el-table-column prop="forSexId" label="适用性别" width="70">            <template slot-scope="scope">              <div style="text-align: center;">{{ ldddw(dict.forSex, "id", scope.row.forSexId, "displayName") }}</div>            </template>          </el-table-column>          -->                  </el-table>      </div>    </div>
    <div style="width:100px;margin-top: 70px;">      <div class="btnList">        <el-button type="primary" @click="addAbs(asbItemChoosed,'choosed')" style="width:90px;">添加 <i class="el-icon-arrow-right"></i>        </el-button>      </div>      <div class="btnList">        <el-button type="success" @click="addAbs(asbItemChoosed,'all')" style="width:90px;">全添加 <i class="el-icon-d-arrow-right"></i>        </el-button>      </div>      <div class="btnList">        <el-button type="warning" @click="delAbs(patientRegisterAbsChoosed,'choosed')" style="width:90px;"><i class="el-icon-arrow-left"> 移除</i>        </el-button>      </div>      <div class="btnList">        <el-button type="danger" @click="delAbs(patientRegisterAbsChoosed,'all')" style="width:90px;"><i class="el-icon-d-arrow-left"> 全移除</i>        </el-button>      </div>      <!-- 不显示保存,当已选组合有修改时,失去焦点自动保存      <div class="btnList">        <el-button type="success" @click="onSubmit('保存')">保存 <i class="el-icon-check"></i>        </el-button>      </div>       -->    </div>
    <div :style="'width:' + (window.pageWidth - 110 - 20 - 230 - 100) + 'px;'">      <div style="display: flex;">        <div class="disTotal">          <el-tooltip class="item" effect="dark" content="根据输入的折扣,自动计算折后总价" placement="top">            <span>折扣 </span>          </el-tooltip>          <el-input style="width:55px;" v-model="discount" size="small" type="number" @input="changeAllDiscount"            @focus="discountFoucs = true" @blur="discountFoucs = false" />        </div>        <div class="disTotal">          <el-tooltip class="item" effect="dark" content="总金额即该人员此次体检实收金额,并根据此金额自动计算折扣" placement="top">            <span>总金额 </span>          </el-tooltip>          <el-input style="width:70px;" v-model="total" size="small" type="number" @input="changeTotal" ref="total"            @focus="totalFoucs = true" @blur="totalFoucs = false" />        </div>        <div class="disTotal">          <el-select v-model="asbItemId" placeholder="快速选择组合项目" size="small"             filterable :filter-method="filterMethod"             clearable @clear="quickAsb = deepCopy(asbItemQuick)"             @change="quickChoosedAsb" default-first-option ref="quickAsbOCX"            style="width:150px;text-align: left;padding-right: 15px;">            <el-option v-for="item in quickAsb" :key="item.id" :value="item.id" :label="item.displayName" />          </el-select>        </div>      </div>      <div class="mainareaBox">        <el-table :data="prAsb" highlight-current-row border ref="patientRegister_patientRegisterAbs"          :height="(window.pageHeight > 700 ? (window.pageHeight - 440) : 260)" width="100%" :summary-method="getSummaries"          show-summary :row-class-name="handleRowClassName" @row-dblclick="removeAbs" @selection-change="selecteditems" size="small"          @row-click="removeAsbItem">          <!-- temporaryselection   personnelUnit.nogroupselected-->          <!-- 取消勾选,换成选中          <el-table-column type="selection" align="center"/>          -->          <el-table-column label="已选组合项目" min-width="120" prop="asbitemName" >            <template slot-scope="scope">              <div>                <i v-if="scope.row.groupPackageId" class="el-icon-star-on" style="font-size: 14px;color: purple;"></i>{{ scope.row.asbitemName }}              </div>            </template>          </el-table-column>          <el-table-column label="标准价格" prop="standardPrice" min-width="70" align="center" />          <el-table-column label="折扣" prop="discount" min-width="60">            <template slot-scope="scope">              <el-input type="number" v-model="scope.row.discount" size="small" @input="changeDiscount(scope.$index)" />            </template>          </el-table-column>          <el-table-column label="数量" prop="amount" min-width="50">            <template slot-scope="scope">              <el-input type="number" v-model="scope.row.amount" size="small" @input="changeDiscount(scope.$index)" />            </template>          </el-table-column>          <el-table-column label="实收价格" prop="chargePrice" min-width="70">            <template slot-scope="scope">              <el-input type="number" v-model="scope.row.chargePrice" size="small"                @input="changePrice(scope.$index)" /> <!--立即触发保存 @blur="onSubmit('')"  -->            </template>          </el-table-column>          <el-table-column prop="total" label="金额" min-width="70" align="center"/>          <el-table-column prop="standardPrice" label="标准金额" min-width="70" v-if="false" />          <el-table-column label="支付方式" prop="payTypeFlag" min-width="100">            <template slot-scope="scope">              <el-select v-model="scope.row.payTypeFlag" size="small">                <el-option v-for="item in dict.payType" :key="item.id" :label="item.displayName" :value="item.id" />              </el-select>            </template>          </el-table-column>          <el-table-column prop="isCharge" label="收费" min-width="40" align="center">            <template slot-scope="scope">              <el-checkbox :value="scope.row.isCharge == 'Y'" />            </template>          </el-table-column>          <el-table-column prop="checkCompleteFlag" label="状态" min-width="40" align="center">            <template slot-scope="scope">              <div>{{ dddw(dict.checkCompleteFlag, "id", scope.row.checkCompleteFlag, "displayName") }}</div>            </template>          </el-table-column>          <el-table-column prop="isLock" label="锁" min-width="40" align="center">            <template slot-scope="scope">              <el-checkbox :value="scope.row.isLock == 'Y'" />            </template>          </el-table-column>          <el-table-column prop="creatorName" label="登记人" min-width="70" align="center"></el-table-column>          <el-table-column prop="creationTime" label="登记日期" win-width="90" align="center">            <template slot-scope="scope">              <div>{{ scope.row.creationTime ? moment(scope.row.creationTime).format('yyyy-MM-DD'):'' }}</div>            </template>          </el-table-column>        </el-table>      </div>    </div>  </div></template><script>import moment from 'moment';import { mapState, mapActions } from "vuex";import { getapi, postapi, putapi, deletapi } from "@/api/api";import { arrayFilter, arrayReduce, arrayExistObj, dddw, deepCopy, tcdate} from "../../utlis/proFunc";import proApi from "../../utlis/proApi";
export default {  props: ["prForm","prAsbOpraOpts","triggerHeadSave","refreshFormId"],  data() {    return {      oldFormId:'',     //配合登记人员复制新增使用
      itemType: [],     //项目类别
      itemTypeIds: '', //被选中的项目类别ID
      asbItem:[],      //左侧显示的未选组合项目
      asbItemAll:[],   //所有未选组合项目
      asbItemChoosed: [], //勾选的  未选组合项目
      startPoint:-1,
      //patientRegisterAbs:[],         //体检人员所选组合项目 放vuex
      patientRegisterAbsChoosed: [], //勾选的 体检人员所选组合项目
      PstartPoint:-1,      //patientRegisterAbsDel: [], //体检人员 待删除的组合项目
      prAsb:[],  //当前显示的已选组合项目(新增与编辑的在一起)
      prAsbDels:[], //待提交 删除的组合项目
      groupAsbs:[],   //分组包含的项目
      packageAsbs:[], //套餐包含的项目
   
      asbItemId: '',      discount: 100,      total: 0,      totalStand: 0,      quickAsb: [],      totalFoucs: false,    //总价是否获取焦点
      discountFoucs: false, //总折扣是否获取焦点
    };  },  computed: {    ...mapState(["window", "dict", "customerOrg", "patientRegister", "personnelUnit"]),  },
  created(){    this.dictInit()      },
  updated(){    this.$nextTick(() => {      this.$refs['patientRegister_patientRegisterAbs'].doLayout()    })  },  mounted() {       },
  methods: {    ...mapActions(['getCustomerOrgGroup', 'getPatientRegisterAbs']),    dddw,moment,deepCopy,
    // 初始化字典信息
    dictInit(){            // 项目类别 树结构
      getapi("/api/app/item-type/by-code-all").then((res) => {        if (res.code != -1) {          this.dict.itemTypeTree = res.data;          tcdate(this.dict.itemTypeTree);        }      });
      // 获取组合项目
      postapi('/api/app/asbitem/getasbitemlist',{isFilterActive:'Y'}).then(res =>{        if(res.code != -1){          this.asbItem = res.data          this.asbItemAll = res.data          this.asbItemQuick = res.data          this.quickAsb = res.data        }      });    },
    // 获取人员组合项目信息
    async getPrAsb(id){      // debugger
      // 清空待删除、分组、套餐
      console.log('getPrAsb(id)',`getPrAsb(${id})`)      this.prAsbDels = []      this.groupAsbs = []      this.packageAsbs = []
      let result = await proApi.getPrAsb(id)      this.prAsb = result.data      this.refreshAsbitem()      },
    // 复制新增 拷贝明细项目
    async copyNew(){      if(this.oldFormId){        let result = await proApi.getPrAsb(this.oldFormId)        this.prAsb = result.data        this.prAsb.forEach(e => {          e.id = '';          e.patientRegisterId = '';          e.isCharge = 'N';          e.checkCompleteFlag = '0'          e.isLock = 'N'        })        this.refreshAsbitem()      }    },
    // 刷新未选组合项目
    refreshAsbitem(){      let asbItemAll = deepCopy(this.asbItemAll)      arrayReduce(asbItemAll, this.prAsb, "id=asbitemId");      this.changeItemType();             this.asbItemQuick = deepCopy(asbItemAll);            this.quickAsb = deepCopy(asbItemAll);    },        handleRowClassName({ row, rowIndex }) {      if (row.choosed) {        return 'current-row';      } else {        return '';      }    },
    //选择 未选的组合项目
    chooseAsbItem(row){      this.asbItem.forEach((e,index) => {        e.index = index;         return e      });      // 按住了shift键
      if (this.window.shift) {                 //清除所有选择
        this.asbItem.forEach(e => {          e.choosed = false;            return e        });
        if (this.startPoint == - 1) {          this.asbItem[row.index].choosed = true;          this.startPoint = row.index;          return        }
        if (this.startPoint > row.index) {          for (let i = row.index; i <= this.startPoint; i++) {            this.asbItem[i].choosed = true          }        } else if (this.startPoint <= row.index) {          for (let i = this.startPoint; i <= row.index; i++) {            this.asbItem[i].choosed = true          }        }        return      }
      // 按住了ctrl 键
      if (this.window.ctrl) {           console.log('this.window.ctrl',this.window.ctrl,this.asbItem)              this.asbItem[row.index].choosed = true;        this.startPoint = row.index;        return              }
      // 未按住了ctrl 、shift 键
      //清除所有选择
      //console.log('清除所有选择')
      this.asbItem.forEach(e => {        e.choosed = false;          return e      });      this.asbItem[row.index].choosed = true;      this.startPoint = row.index;   
    },
    //选择 已选的组合项目
    removeAsbItem(row){      this.prAsb.forEach((e,index) => {        e.index = index;         return e      });      // 按住了shift键
      if (this.window.shift) {                 //清除所有选择
        this.prAsb.forEach(e => {          e.choosed = false;            return e        });
        if (this.PstartPoint == - 1) {          this.prAsb[row.index].choosed = true;          this.PstartPoint = row.index;          return        }
        if (this.PstartPoint > row.index) {          for (let i = row.index; i <= this.PstartPoint; i++) {            this.prAsb[i].choosed = true          }        } else if (this.PstartPoint <= row.index) {          for (let i = this.PstartPoint; i <= row.index; i++) {            this.prAsb[i].choosed = true          }        }        return      }
      // 按住了ctrl 键
      if (this.window.ctrl) {           console.log('this.window.ctrl',this.window.ctrl,this.prAsb)              this.prAsb[row.index].choosed = true;        this.PstartPoint = row.index;        return              }
      // 未按住了ctrl 、shift 键
      //清除所有选择
      //console.log('清除所有选择')
      this.prAsb.forEach(e => {        e.choosed = false;          return e      });      this.prAsb[row.index].choosed = true;      this.PstartPoint = row.index;   
    },
    //更新所选组合项目
    async onSubmit(msg) {      let ret = false
      ret = await this.batchAddAsb()      if(!ret){        if(msg) this.$message.warning(`组合项目 ${msg} 失败!`)        return      }
      ret = await this.batchDelAsb()      if(!ret){        if(msg) this.$message.warning(`组合项目 ${msg} 失败!`)        return      }
      ret = await this.batchEditAsb()      if(!ret){        if(msg) this.$message.warning(`组合项目 ${msg} 失败!`)        return      }            console.log('this.prAsbOpraOpts.formId',this.prAsbOpraOpts.formId)      if(this.prAsbOpraOpts.formId){        this.refreshFormId()              }else{         //触发保存人员基本信息        
        this.triggerHeadSave()        this.getPrAsb(this.prForm.id)      }    },
    //未选组合项目 勾选情况
    handleSelectionChange(val) {      // this.selecteddata = val;
      this.asbItemChoosed = val;      //console.log(this.asbItemChoosed);
    },
    
    // 添加组合项目
    ///api/app/register-asbitem/many/3fa85f64-5717-4562-b3fc-2c963f66afa6'
    addAbs(asbItemChoosed,oprType) {            let checked = true      let payTypeFlag = '0' //默认个人支付
      
      //勾选时不需要此操作  start
      if(oprType && oprType == 'all'){        asbItemChoosed = deepCopy(this.asbItem)      }else if(oprType && oprType == 'choosed'){        asbItemChoosed = []         this.asbItem.forEach(e =>{          if(e.choosed){            asbItemChoosed.push(e)            e.choosed = false          }        })      }      //勾选时不需要此操作  end 
      if (asbItemChoosed.length < 1) {        this.$message.warning("请选择要添加的组合项目")        return      }
      //性别、年龄判断 
      // "displayName": "身高体重",
      //   "shortName": "哈f哈",
      //   "forSexId": "F",
      //   "itemTypeId": "3a0b16de-75b9-c910-c61b-844709a88940",
      //   "price": 0,
      console.log('asbItemChoosed.length', asbItemChoosed.length)      for (let i = 0; i < asbItemChoosed.length; i++) {        if (this.prForm.sexId == 'U') break //未选性别时,无需判断组合项目性别限制
        if (asbItemChoosed[i].forSexId == 'A') continue        if (asbItemChoosed[i].forSexId != this.prForm.sexId) {          this.$message.warning(`所选项目:${asbItemChoosed[i].displayName},不适合当前人员性别`)          checked = false          break        }      }      //console.log(222,checked)
      if (!checked) return
      if (this.prForm.customerOrgId != this.dict.personOrgId) payTypeFlag = '1'      for (let i = 0; i < asbItemChoosed.length; i++) {        let pojo = {          asbitemId: asbItemChoosed[i].id,          asbitemName: asbItemChoosed[i].displayName,          patientRegisterId: this.prForm.id,          standardPrice: asbItemChoosed[i].price,          chargePrice: asbItemChoosed[i].price,          payTypeFlag,          isCharge: "N",          discount:100,          amount: 1,          total: asbItemChoosed[i].price,        }                this.prAsb.push(pojo)      }
      this.refreshAsbitem()
    },
    //人员已选组合项目 勾选情况
    selecteditems(val) {      this.patientRegisterAbsChoosed = val    },
    //批量提交添加组合项目
    async batchAddAsb() {      let ret = false      let patientRegisterId = this.prForm.id || this.prAsbOpraOpts.formId      if(!patientRegisterId){        this.$message.warning("人员基本信息未保存");        return ret      }
      let registerAsbitems = []
      this.prAsb.forEach(e => {        if(!e.id){          registerAsbitems.push({            asbitemId: e.asbitemId,            patientRegisterId,            standardPrice: e.standardPrice,            chargePrice: e.chargePrice,            payTypeFlag: e.payTypeFlag,            isCharge: e.isCharge,            amount: e.amount,            groupPackageId: e.groupPackageId          })        }      })
      if(registerAsbitems.length == 0) return true
      let body = {        organizationUnitId:this.prForm.organizationUnitId,        registerAsbitems,        isAutoMerger:'Y'      }
      try {        let res = await postapi('/api/app/registerasbitem/createregisterasbitemmany', body)        if(res.code != -1) ret = true      } catch (error) {        console.log('批量添加组合项目失败',error)      }
      return ret          },
    //批量提交更新组合项目
    async batchEditAsb() {      let ret = false      let body = []
      this.prAsb.forEach(e => {        if(e.id){          body.push({            registerAsbitemId:e.id,            input: {              chargePrice: e.chargePrice,              payTypeFlag: e.payTypeFlag,              isCharge: e.isCharge,              amount: e.amount,              groupPackageId: e.groupPackageId            }          })                  }      })      if(body.length == 0) return true
      try {        let res = await postapi(`/api/app/registerasbitem/updatemany`, body)        if(res.code != -1) ret = true      } catch (error) {        console.log('批量提交更新组合项目失败',error)      }      return ret    },
    //批量提交删除组合项目
    async batchDelAsb() {      let ret = false      if(this.prAsbDels.length == 0) return true
      let registerAsbitemIds=[]
      this.prAsbDels.forEach(e => {        registerAsbitemIds.push(e.id)      })
      console.log(`/api/app/registerasbitem/deletemany`, {registerAsbitemIds})
      try {        let res = await postapi(`/api/app/registerasbitem/deletemany`, {registerAsbitemIds})        if(res.code != -1) ret = true      } catch (error) {        console.log('批量删除组合项目失败',error)      }
      return ret    },
    //删除 人员已选中的组合项目
    ///api/app/register-asbitem/many?RegisterAsbitemIds=3fa85f64-5717-4562-b3fc-2c963f66afa6
    delAbs(absForDel,oprType) {            let chargeComplete = ''      let lfind = -1      let tempRd = {}
      //勾选时不需要此操作  start
      if(oprType && oprType == 'all'){        absForDel = deepCopy(this.prAsb)      }else if(oprType && oprType == 'choosed'){        absForDel = []         this.prAsb.forEach(e =>{          if(e.choosed){            absForDel.push(e)            e.choosed = false          }        })      }      //勾选时不需要此操作  end 
      if (absForDel.length < 1) {        this.$message.warning("请选择要移除的组合项目")        return      }
      absForDel.forEach(e => {        // 如果已经收费 或 体检,则不允许删除
        if (e.isCharge == 'Y' || (e.checkCompleteFlag && e.checkCompleteFlag != '0')) {          chargeComplete += e.asbitemName + ','           }else{          lfind = arrayExistObj(this.prAsb, 'asbitemId', e.asbitemId)          if(lfind > -1){            tempRd = Object.assign({},this.prAsb.splice(lfind,1)[0])            if(e.id) this.prAsbDels.push(tempRd)          }            }                  })
      //刷新
      this.refreshAsbitem()
      if (chargeComplete) {        this.$message({ type: "info", message: `所选项目:${chargeComplete}已收费或已检,不可删除!` });      }
    },
    //双击删除已选项目
    removeAbs(row) {      this.delAbs([row]);    },
    //项目类别过滤 组合项目,未过滤已选择的组合项目
    changeItemType() {      //console.log('getAsbItemByItemType', typeof this.itemTypeIds, this.itemTypeIds)
      let asbItemAll = deepCopy(this.asbItemAll)      let lv = "";      if (typeof this.itemTypeIds == "object") {        if(this.itemTypeIds.length > 0) lv = this.itemTypeIds[this.itemTypeIds.length - 1];      }
      if (lv) {        this.asbItem = arrayFilter(asbItemAll, "itemTypeId", lv);      } else {        this.asbItem = deepCopy(asbItemAll);      }      arrayReduce(this.asbItem, this.prAsb, "id=asbitemId");    },
     
    //选中 分组 所包含的组合项目
    getGroupAsbs(id){      if(!id){        this.groupAsbs = []        this.changeGroup(id)        return      }            getapi(`/api/app/customerorggroupdetail/getcustomerorggroupdetailinasbitem?CustomerOrgGroupId=${id}`)      .then((res) => {        if(res.code != -1){                    this.groupAsbs = res.data          this.changeGroup(id)        }      });          },
    //选中 套餐 所包含的组合项目
    getPackageAsbs(id){      if(!id){        this.packageAsbs = []        this.changePackage(id)        return      }
      postapi('/api/app/medicalpackagedetail/getmedicalpackageinasbitem',{medicalPackageId:id})      .then((res) => {        if(res.code != -1){          this.packageAsbs = res.data          this.changePackage(id)        }      });    },
    // 更换分组 
    changeGroup(newId){      //已收费项目,不更改收费方式、价格及数量,只更改分组id
      let payTypeFlag = '0'      let lfind = -1      let tempRd = {}
      if(!newId){        this.setGroupPackageNull()        return      }
      if (this.prForm.customerOrgId != this.dict.personOrgId) payTypeFlag = '1'  //单位支付
      for(let i = this.prAsb.length - 1;i>-1;i--){        lfind = arrayExistObj(this.groupAsbs,'asbitemId',this.prAsb[i].asbitemId)        if(lfind > -1){          //找到了则更新此项目
          tempRd = Object.assign({},this.groupAsbs.splice(lfind,1)[0])          this.prAsb[i].groupPackageId = newId          if(this.prAsb[i].isCharge != 'Y'){            this.prAsb[i].payTypeFlag = payTypeFlag            this.prAsb[i].amount = tempRd.customerOrgGroupDetailAmount            this.prAsb[i].standardPrice = tempRd.price                        this.prAsb[i].chargePrice = tempRd.customerOrgGroupDetailPrice            this.prAsb[i].discount = tempRd.discount          }        }else{          //没找到则移除此项目
          if(this.prAsb[i].isCharge == 'Y' || (this.prAsb[i].checkCompleteFlag && this.prAsb[i].checkCompleteFlag != '0')){            this.prAsb[i].groupPackageId = null          }else{            tempRd = Object.assign({},this.prAsb.splice(i,1)[0])            if(tempRd.id) this.prAsbDels.push(tempRd)          }        }      }
      // debugger
      //未找到则添加(如果在待删除中找到记录,则待删除中记录移至当前显示记录中来)
      this.groupAsbs.forEach(e =>{        lfind = arrayExistObj(this.prAsbDels,'asbitemId',e.asbitemId)        if(lfind > -1){          tempRd = Object.assign(this.prAsbDels.splice(lfind,1)[0],            {              groupPackageId:newId,              standardPrice:e.price,              chargePrice:e.customerOrgGroupDetailPrice,              payTypeFlag,              isCharge: "N",              discount:e.discount,              amount:e.customerOrgGroupDetailAmount,              total: Math.round(e.customerOrgGroupDetailAmount * e.customerOrgGroupDetailPrice * 100)/100            }          )        }else{          tempRd = {              groupPackageId:newId,                   asbitemId:e.asbitemId,            asbitemName:e.displayName,            patientRegisterId:this.prForm.id,            standardPrice:e.price,            chargePrice:e.customerOrgGroupDetailPrice,            payTypeFlag,            isCharge: "N",            discount:e.discount,            amount:e.customerOrgGroupDetailAmount,            total: Math.round(e.customerOrgGroupDetailAmount * e.customerOrgGroupDetailPrice * 100)/100          }        }        this.prAsb.push(tempRd)      })
      this.refreshAsbitem()    },
    // 更换套餐 
    changePackage(newId){      //已收费项目,不更改收费方式、价格及数量,只更改分组id
      let payTypeFlag = '0'      let lfind = -1      let tempRd = {}
      if(!newId){        this.setGroupPackageNull()        return      }
      if (this.prForm.customerOrgId != this.dict.personOrgId) payTypeFlag = '1'  //单位支付
      for(let i = this.prAsb.length - 1;i>-1;i--){        lfind = arrayExistObj(this.packageAsbs,'id',this.prAsb[i].asbitemId)        if(lfind > -1){          //找到了则更新此项目
          tempRd = Object.assign({},this.packageAsbs.splice(lfind,1)[0])          this.prAsb[i].groupPackageId = newId          if(this.prAsb[i].isCharge != 'Y'){            this.prAsb[i].payTypeFlag = payTypeFlag            this.prAsb[i].amount = tempRd.medicalPackageDetailAmount            this.prAsb[i].standardPrice = tempRd.price                        this.prAsb[i].chargePrice = tempRd.medicalPackageDetailPrice            this.prAsb[i].discount = tempRd.discount          }        }else{          //没找到则移除此项目
          if(this.prAsb[i].isCharge == 'Y' || (this.prAsb[i].checkCompleteFlag && this.prAsb[i].checkCompleteFlag != '0')){            this.prAsb[i].groupPackageId = null          }else{            tempRd = Object.assign({},this.prAsb.splice(i,1)[0])            if(tempRd.id) this.prAsbDels.push(tempRd)          }        }      }
      //未找到则添加(如果在待删除中找到记录,则待删除中记录移至当前显示记录中来)
      this.packageAsbs.forEach(e =>{        lfind = arrayExistObj(this.prAsbDels,'asbitemId',e.id)        if(lfind > -1){          tempRd = Object.assign(this.prAsbDels.splice(lfind,1)[0],            {              groupPackageId:newId,              standardPrice:e.price,              chargePrice:e.medicalPackageDetailPrice,              payTypeFlag,              isCharge: "N",              discount:e.discount,              amount:e.medicalPackageDetailAmount,              total: Math.round(e.medicalPackageDetailAmount * e.medicalPackageDetailPrice * 100)/100            }          )        }else{          tempRd = {            groupPackageId:newId,            asbitemId:e.id,            asbitemName:e.displayName,            patientRegisterId:this.prForm.id,            standardPrice:e.price,            chargePrice:e.medicalPackageDetailPrice,            payTypeFlag,            isCharge: "N",            discount:e.discount,            amount:e.medicalPackageDetailAmount,            total: Math.round(e.medicalPackageDetailAmount * e.medicalPackageDetailPrice * 100)/100          }        }        this.prAsb.push(tempRd)      })
      this.refreshAsbitem()    },
    // 从 有分组/套餐 切换成 无分组/套餐 时
    setGroupPackageNull(){      this.prAsb.forEach(e =>{        e.groupPackageId = null      })    },       //双击选择组合项目
    dbClickChoosedAsb(row) {      this.addAbs([row]);    },
    //快速选择组合项目
    quickChoosedAsb(v) {      //远程查询时,设置了 value-key 也不管用,只能取到value console.log('quickChoosedAsb',v)
      let lfind = -1      if (v) {        lfind = arrayExistObj(this.asbItemQuick, 'id', v)        if (lfind > -1) {          this.addAbs([this.asbItemQuick[lfind]])        }      }          //this.$refs['quickAsbOCX'].focus(); //asbItemId
      this.$nextTick(() => {                this.$refs['quickAsbOCX'].blur(); //total  asbItemId
        this.asbItemId = ''        this.quickAsb = deepCopy(this.asbItemQuick)                this.$refs['quickAsbOCX'].focus(); //total  asbItemId       
      });          }, 
    //快速选择组合项目时,调整可按拼间简码及简称查找
    filterMethod(keyWords) {      //console.log('filterMethod',this.asbItemQuick)  
      if (keyWords) {        this.quickAsb = [];        this.asbItemQuick.forEach(item => {          if (item.displayName.toLowerCase().indexOf(keyWords.toLowerCase()) > - 1            || item.simpleCode.toLowerCase().indexOf(keyWords.toLowerCase()) > - 1            || item.shortName.toLowerCase().indexOf(keyWords.toLowerCase()) > - 1) {            this.quickAsb.push(item);          }        });      } else {        this.quickAsb = deepCopy(this.asbItemQuick);      }    },    
    //修改总折扣
    changeAllDiscount() {
      if (!this.discount || this.discount == 0) return      if (!this.prAsb || this.prAsb.length == 0) return
      this.prAsb.forEach(e => {        e.discount = this.discount        e.chargePrice = Math.round(e.standardPrice * this.discount) / 100        e.total = Math.round(e.standardPrice * this.discount * e.amount) / 100      });      // this.onSubmit('')
    },
    //修改总金额
    changeTotal() {
      if (!this.total) return      if (!this.prAsb || this.prAsb.length == 0) return
      let sumChargeDetails = Number(0) //单个标准价折后价 合计总计 
      let qtyIsOneLast = 0   //数量为1的最后行项目,用于返写金额
      // console.log('this.total / this.totalStand',this.total , this.totalStand)
      this.discount = Math.round((100 * this.total / this.totalStand) * 100)/100
      this.prAsb.forEach((e, index) => {        if (e.amount == 1) qtyIsOneLast = index        e.discount = this.discount        e.chargePrice = Math.round((e.standardPrice * this.discount / 100) * 100)/100        e.total = Math.round((e.standardPrice * this.discount * e.amount / 100) * 100)/100        sumChargeDetails += Math.round((e.standardPrice * this.discount * e.amount / 100) * 100)/100      });
      // console.log('this.total - sumChargeDetails', sumChargeDetails, this.total - sumChargeDetails)
      //平衡金额(按总价折扣后,再根据折扣合计 会出现金额差)
      if (this.total != sumChargeDetails) {        console.log('qtyIsOneLast',qtyIsOneLast)        this.prAsb[qtyIsOneLast].total =           Math.round((Number(this.prAsb[qtyIsOneLast].total) + Number(this.total) - Number(sumChargeDetails))*100)/100        this.prAsb[qtyIsOneLast].chargePrice =           Math.round(this.prAsb[qtyIsOneLast].total * 100 / this.prAsb[qtyIsOneLast].amount)/100        if(this.prAsb[qtyIsOneLast].standardPrice != 0){          this.prAsb[qtyIsOneLast].discount =             Math.round(this.prAsb[qtyIsOneLast].chargePrice * 10000/this.prAsb[qtyIsOneLast].standardPrice)/100        }      }      //this.onSubmit('')
    }, 
    //修改数量
    changeDiscount(index) {      //console.log('index',index)
      if (!this.prAsb || this.prAsb.length == 0) return      if (!this.prAsb[index].discount) return      //console.log(this.prAsb[index].chargePrice,this.prAsb[index].standardPrice)
      this.prAsb[index].chargePrice = Math.round(this.prAsb[index].standardPrice * this.prAsb[index].discount)/100      this.prAsb[index].total = this.prAsb[index].chargePrice * this.prAsb[index].amount      // this.onSubmit('')
    },
    //修改单价
    changePrice(index) {      //console.log('index',index)
      if (!this.prAsb || this.prAsb.length == 0) return      if (!this.prAsb[index].chargePrice) return      //console.log(this.prAsb[index].chargePrice,this.prAsb[index].standardPrice)
      this.prAsb[index].discount = Math.round(this.prAsb[index].chargePrice * 10000 / this.prAsb[index].standardPrice)/100      // this.onSubmit('')
    },
    //自定义计算列
    getSummaries(param) {      const { columns, data } = param;      const sumCol = [1, 5]  //需合计的列
      const sums = [];      columns.forEach((column, index) => {        //console.log('column, index,data',column, index,data)
        //显示合计列
        if (index === 0) {          sums[index] = '合计';          return;        }
        //不合计的列
        if (sumCol.indexOf(index) == -1) {          sums[index] = '';          return;        }
        sums[index] = 0        data.forEach(e => {          if (!isNaN(e[column.property])){            if(index == 1){              sums[index] += e[column.property] * e['amount']            }else{              sums[index] += e[column.property]            }                      }        })        sums[index] = Math.round(sums[index] * 100)/100 //+ ' 元';
        // const values = data.map(item => Number(item[column.property]));
        // if (!values.every(value => isNaN(value))) {
        //   sums[index] = values.reduce((prev, curr) => {
        //     const value = Number(curr);
        //     if (!isNaN(value)) {
        //       //return prev + curr;  //原始
        //       return prev + curr;  //改造
        //     } else {
        //       return prev;
        //     }
        //   }, 0);
        //   sums[index] = sums[index].toFixed(2) + ' 元';
        // } else {
        //   sums[index] = 'N/A';
        // }
      });      this.totalStand = sums[1];      //console.log('this.totalFoucs/this.discountFoucs',this.totalFoucs,this.discountFoucs)
      if (!this.totalFoucs) this.total = sums[5];      if (!this.discountFoucs) this.discount = Math.round(this.total * 10000 / this.totalStand)/100;      return sums;    },  },
  //监听事件
  watch: {
    //配合复制新增使用 查询人员下的组合项目
    "prForm.id":{      immediate: true, // 立即执行
      deep: true, // 深度监听复杂类型内变化
      handler(newVal,oldVal){        this.oldFormId = oldVal           if(newVal != oldVal){          if(newVal == ''){            this.getPrAsb(newVal)          }else if(newVal != this.prAsbOpraOpts.formId){            this.getPrAsb(newVal)          }                  }           }    },
    //人员 id 未变的情况下,触发刷新,主要针对收费
    "prAsbOpraOpts.prAsbQuery":{      // immediate: true, // 立即执行
      deep: true, // 深度监听复杂类型内变化
      handler(newVal,oldVal){                console.log('watch:prAsbOpraOpts.prAsbQuery:',newVal,oldVal)        if(newVal != oldVal){          this.getPrAsb(this.prForm.id)        }      }    },
    //按钮更新支付方式
    "prAsbOpraOpts.payTypeFlag":{      // immediate: true, // 立即执行
      deep: true, // 深度监听复杂类型内变化
      handler(newVal, oldVal) {        if (newVal != oldVal && newVal != '') {          this.prAsb.forEach(e =>{            e.payTypeFlag = newVal;            return e;          });          // this.onSubmit('调整支付方式');
        }      }    },
    //更换分组
    "prAsbOpraOpts.prAsbGroup":{      // immediate: true, // 立即执行
      deep: true, // 深度监听复杂类型内变化
      handler(newVal, oldVal) {                if (newVal != oldVal) {          this.getGroupAsbs(this.prForm.customerOrgGroupId)        }      }    },
    //更换套餐
    "prAsbOpraOpts.prAsbPackage":{      // immediate: true, // 立即执行
      deep: true, // 深度监听复杂类型内变化
      handler(newVal, oldVal) {        if (newVal != oldVal) {          this.getPackageAsbs(this.prForm.medicalPackageId)        }      }    },
    //复制新增 拷贝明细项目
    "prAsbOpraOpts.copyNew":{      // immediate: true, // 立即执行
      deep: true, // 深度监听复杂类型内变化
      handler(newVal, oldVal) {        if (newVal != oldVal) {          this.copyNew()        }      }    },
    //体检信息保存,触发已选组合项目保存
    "prAsbOpraOpts.prAsbSave"(newVal, oldVal) {      console.log("patientRegister.saveTimes newVal:", newVal, " oldVal:", oldVal);      if (newVal != oldVal) {        this.onSubmit('');      }    },
  },};</script><style lang="scss" scoped>@import "../../assets/css/global_table.css";@import "../../assets/css/global_input.css";@import "../../assets/css/global.css";
.mainareaBox {  border: 1px solid #000;  height: v-bind("(window.pageHeight > 700 ? (window.pageHeight - 440) : 260) + 'px'");  margin-top: 5px;}
.btnList {  margin-top: 5px;  margin-left: 5px;  margin-right: 5px;}
.disTotal {  margin-left: 10px;}
</style>
  |