You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1150 lines
38 KiB
1150 lines
38 KiB
<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>
|
|
|