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.
940 lines
31 KiB
940 lines
31 KiB
<template>
|
|
<div style="display: flex; margin-top:5px;">
|
|
<div :style="'display: flex;width:' + (window.pageWidth - 45 - 110) + 'px;'">
|
|
<!--未选组合项目-->
|
|
<div style="display: block; width:230px;">
|
|
<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="getAsbItemByItemType" size="small">
|
|
</el-cascader>
|
|
</div>
|
|
<div class="box">
|
|
<el-table :data="dict.asbItem" border size="small" highlight-current-row
|
|
:height="window.pageHeight < 668 ? 200:(window.pageHeight - 110 - 358)"
|
|
@row-dblclick="dbClickChoosedAsb"
|
|
@selection-change="handleSelectionChange" :row-class-name="handleRowClassName"
|
|
@row-click="chooseAsbItem">
|
|
<!--
|
|
<el-table-column type="selection" align="center" ></el-table-column>
|
|
-->
|
|
<el-table-column type="index" align="center" min-width="40"/>
|
|
<el-table-column
|
|
label="未选组合项目" min-width="170"
|
|
prop="displayName" align="center"
|
|
></el-table-column>
|
|
</el-table>
|
|
</div>
|
|
</div>
|
|
|
|
<!--中间操作按钮-->
|
|
<div style="display: block;margin: 40px 10px 0 10px;">
|
|
<div>
|
|
<el-button class="btnClass" @click="addAbs(asbItemChoosed,'choosed')" >添加 <i class="el-icon-arrow-right"></i></el-button>
|
|
</div>
|
|
<div>
|
|
<el-button class="btnClass" @click="addAbs(asbItemChoosed,'all')">全部添加</el-button>
|
|
</div>
|
|
<div>
|
|
<el-button class="btnClass"
|
|
@click="delAbs(patientRegisterAbsChoosed,'choosed')">移除 <i class="el-icon-arrow-left"></i
|
|
></el-button>
|
|
</div>
|
|
<div>
|
|
<el-button class="btnClass" @click="delAbs(patientRegisterAbsChoosed,'all')">全部移除</el-button>
|
|
</div>
|
|
</div>
|
|
|
|
<!--已选组合项目-->
|
|
<div :style="'display: block; width:' + (window.pageWidth - 230 - 120 - 45 - 110) + 'px;'">
|
|
<div style="height:32px;">
|
|
<span>快速选择</span>
|
|
<el-select v-model="asbItemId" placeholder="快速选择组合项目" size="small"
|
|
filterable clearable remote automatic-dropdown
|
|
:remote-method="remoteMethod" @change="quickChoosedAsb" default-first-option ref="asbItemId"
|
|
style="margin-left: 3px;width:160px;">
|
|
<el-option v-for="item in quickAsb" :key="item.id" :value="item.id" :label="item.displayName" />
|
|
</el-select>
|
|
</div>
|
|
<div class="box">
|
|
<el-table :data="customerOrgGroupAsbitems" border size="small"
|
|
@selection-change="selecteditems" highlight-current-row :key="id"
|
|
:height="window.pageHeight < 668 ? 200:(window.pageHeight - 110 - 358)"
|
|
:summary-method="getSummaries" show-summary
|
|
:row-class-name="handleRowClassName" @row-dblclick="removeAbs"
|
|
@row-click="removeAsbItem" ref="tableCustomerOrgGroupAsbitems">
|
|
<!--
|
|
<el-table-column type="selection"></el-table-column>
|
|
-->
|
|
<el-table-column type="index" min-width="40" align="center"/>
|
|
<el-table-column
|
|
label="已选组合项目"
|
|
min-width="120"
|
|
prop="displayName"
|
|
></el-table-column>
|
|
<el-table-column label="标准价格" prop="price" min-width="60" align="center"/>
|
|
<el-table-column label="折扣" prop="price" min-width="50" align="center">
|
|
<template slot-scope="scope">
|
|
<el-input
|
|
@input="changeDiscount(scope.$index)"
|
|
type="number" size="small"
|
|
v-model="scope.row.discount"
|
|
/>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column label="应收价格" prop="customerOrgGroupDetailPrice" min-width="60" align="center">
|
|
<template slot-scope="scope">
|
|
<el-input
|
|
@input="changePrices(scope.$index)"
|
|
type="number" size="small"
|
|
v-model="scope.row.customerOrgGroupDetailPrice"
|
|
/>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column label="数量" prop="customerOrgGroupDetailAmount" min-width="40" align="center">
|
|
<template slot-scope="scope">
|
|
<el-input
|
|
@input="changePrices(scope.$index)"
|
|
type="number" size="small"
|
|
v-model="scope.row.customerOrgGroupDetailAmount"
|
|
/>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column label="标准金额" prop="asbitemMoney" min-width="60" align="center">
|
|
</el-table-column>
|
|
<el-table-column label="应收金额" prop="customerOrgGroupDetailMoney" min-width="60" align="center">
|
|
</el-table-column>
|
|
</el-table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!--批量操作按钮(复制套餐与分组)-->
|
|
<div style="display: block;margin-left: 10px;">
|
|
<div style="margin-top: 50px;">
|
|
<el-button class="btnClass" @click="btnCopyGroup">复制分组</el-button>
|
|
</div>
|
|
<div>
|
|
<el-button class="btnClass" @click="btnCopyMedicalPackage">复制套餐</el-button>
|
|
</div>
|
|
<div>
|
|
<el-button class="btnClass" @click="btnSave">保存</el-button>
|
|
</div>
|
|
</div>
|
|
|
|
<!--复制套餐-->
|
|
<el-dialog title="体检套餐" :visible.sync="medicalPackageVisble" width="600px" height="400"
|
|
:show-close="false" :close-on-click-modal="false" :append-to-body="true">
|
|
<el-table :data="dict.medicalPackage" border height="350" row-key="id" size="small"
|
|
highlight-current-row @row-click="packageRowClick" @row-dblclick="rowDblclick" ref="patientList" >
|
|
|
|
<!-- "displayName": "健康体检套餐",
|
|
"price": 20.00,
|
|
"forSexId": "0",
|
|
"isActive": "Y",
|
|
"remark": "2",
|
|
"displayOrder": 1,
|
|
"simpleCode": "JKTJTC",
|
|
"creatorName": "admin",
|
|
"lastModifierName": "users",
|
|
"lastModificationTime": "2023-08-04T16:34:02.94408",
|
|
"lastModifierId": "3a0ca83b-3116-da05-3916-dfd4c0c548cb",
|
|
"creationTime": "2023-07-10T19:53:30.210553",
|
|
"creatorId": "3a0c4180-107c-0c89-b25b-0bd34666dcec",
|
|
"id": "3a0c51d3-2345-38df-ba0b-1862a3c3606f" -->
|
|
<el-table-column type="index" width="50" />
|
|
<el-table-column prop="displayName" label="套餐名称" width="180"/>
|
|
<el-table-column prop="price" label="价格" width="80"/>
|
|
<el-table-column prop="forSexId" label="适用性别" width="80">
|
|
<template slot-scope="scope">
|
|
<div>
|
|
{{ dddw(dict.forSex, "id", scope.row.forSexId, "displayName") }}
|
|
</div>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column prop="remark" label="备注" width="100"/>
|
|
<el-table-column prop="creatorName" label="创建人员" width="80"/>
|
|
<el-table-column prop="creationTime" label="创建日期" width="100">
|
|
<template slot-scope="scope">
|
|
<div v-if="scope.row.creationTime">
|
|
{{ moment(scope.row.creationTime).format("yyyy-MM-DD") }}
|
|
</div>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column prop="lastModifierName" label="修改人员" width="80"/>
|
|
<el-table-column prop="lastModificationTime" label="修改日期" width="100">
|
|
<template slot-scope="scope">
|
|
<div v-if="scope.row.lastModificationTime">
|
|
{{ moment(scope.row.lastModificationTime).format("yyyy-MM-DD") }}
|
|
</div>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
<span slot="footer" class="dialog-footer">
|
|
<el-button @click="medicalPackageVisble = false" style="width:90px;">取消</el-button>
|
|
<el-button type="primary" @click="copyMedicalPackage" style="width:90px;">确定</el-button>
|
|
</span>
|
|
</el-dialog>
|
|
|
|
<!--复制分组-->
|
|
<el-dialog title="单位分组" :visible.sync="groupVisble" width="700px" height="500"
|
|
:show-close="false" :close-on-click-modal="false" :append-to-body="true">
|
|
<el-table
|
|
:data="customerOrgGroups" ref="customerOrgGroups"
|
|
style="margin-top: 2px"
|
|
row-key="id"
|
|
border
|
|
height="240px"
|
|
size="small"
|
|
highlight-current-row :row-class-name="handleRowClassName"
|
|
@row-click="groupRowClick" @row-dblclick="groupRowDblclick" >
|
|
>
|
|
<el-table-column
|
|
type="index"
|
|
label="序号"
|
|
min-width="50"
|
|
align="center"
|
|
/>
|
|
<el-table-column prop="displayName" label="名称" min-width="150" />
|
|
<el-table-column
|
|
prop="price"
|
|
label="价格"
|
|
min-width="60"
|
|
align="center"
|
|
/>
|
|
<el-table-column
|
|
prop="forSexId"
|
|
label="适用性别"
|
|
min-width="60"
|
|
align="center"
|
|
>
|
|
<template slot-scope="scope">
|
|
{{ dddw(dict.forSex, "id", scope.row.forSexId, "displayName") }}
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column
|
|
prop="maritalStatusId"
|
|
label="适用婚姻状况"
|
|
min-width="80"
|
|
align="center"
|
|
>
|
|
<template slot-scope="scope">
|
|
{{
|
|
dddw(
|
|
dict.forMaritalStatus,
|
|
"id",
|
|
scope.row.maritalStatusId,
|
|
"displayName"
|
|
)
|
|
}}
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column
|
|
prop="creatorName"
|
|
label="创建者"
|
|
min-width="60"
|
|
align="center"
|
|
/>
|
|
<el-table-column label="创建时间" min-width="150" align="center">
|
|
<template slot-scope="scope">
|
|
{{
|
|
scope.row.creationTime
|
|
? moment(scope.row.creationTime).format("yyyy-MM-DD HH:mm:ss")
|
|
: ""
|
|
}}
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column label="操作">
|
|
<template>
|
|
<el-tag
|
|
class="move"
|
|
style="cursor: move; margin-left: 15px"
|
|
draggable="true"
|
|
>
|
|
<i class="el-icon-d-caret" style="width: 1rem; height: 1rem"></i>
|
|
</el-tag>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
<span slot="footer" class="dialog-footer">
|
|
<el-button @click="groupVisble = false" style="width:90px;">取消</el-button>
|
|
<el-button type="primary" @click="copyGroup" style="width:90px;">确定</el-button>
|
|
</span>
|
|
</el-dialog>
|
|
</div>
|
|
</template>
|
|
<script>
|
|
import moment from 'moment';
|
|
import { mapState } from "vuex";
|
|
import { getapi, postapi } from "@/api/api";
|
|
import { arrayExistObj, tcdate, arrayFilter, arrayReduce, deepCopy,dddw } from "../../utlis/proFunc";
|
|
|
|
|
|
export default {
|
|
props:['customerOrgGroup'],
|
|
data() {
|
|
return {
|
|
customerOrgGroupAsbitems:[], //分组包含组合项目
|
|
itemTypeIds:[], //项目类别
|
|
asbItemId:'', //当前快速选到的给合项目ID
|
|
quickAsb:[], //过滤显示的组合项目
|
|
|
|
asbItemChoosed: [], //勾选的 未选组合项目
|
|
startPoint:-1,
|
|
PstartPoint:-1,
|
|
|
|
medicalPackageVisble:false, //复制套餐
|
|
curPackageId:'', //当前选中套餐ID
|
|
packageAsbitems:[], //套餐中包含的组合项目
|
|
|
|
groupVisble:false, //复制分组
|
|
customerOrgGroups:[], //历次分组
|
|
curGroupId:'', //当前选中套餐ID
|
|
groupAsbitems:[], //选中分组包含组合项目
|
|
|
|
|
|
selecteddata: [], //已选数据
|
|
unselecteddata: [], //未选数据
|
|
unselecteddata: [], //右边勾选中
|
|
rightselctedata: [], //右侧已选
|
|
options: [],
|
|
value: "",
|
|
dialogVisible: false,
|
|
copyGroupdialogVisible: false,
|
|
packagelist: [],
|
|
tabledata: [],
|
|
temporaryselection: [], //已选组合项目table
|
|
copegroupdata: [], //复制分组
|
|
addrulst: [], //添加保存的Id
|
|
price: "", //价格
|
|
title: 1,
|
|
};
|
|
},
|
|
computed: {
|
|
...mapState(["window","dict","customerOrg"]),
|
|
},
|
|
|
|
created() {
|
|
this.dictInit()
|
|
},
|
|
|
|
updated () {
|
|
this.refreshTable('tableCustomerOrgGroupAsbitems')
|
|
},
|
|
methods: {
|
|
moment,dddw,
|
|
//表格强制刷新
|
|
refreshTable(tableRef){
|
|
this.$nextTick(() => {
|
|
this.$refs[tableRef].doLayout()
|
|
})
|
|
},
|
|
|
|
//初始数据
|
|
dictInit(){
|
|
//体检类别 树结构
|
|
getapi("/api/app/item-type/by-code-all").then((res) => {
|
|
if (res.code != -1) {
|
|
this.dict.itemTypeTree = res.data;
|
|
tcdate(this.dict.itemTypeTree);
|
|
}
|
|
});
|
|
|
|
//获取所有组合项目
|
|
getapi("/api/app/asbitem/in-filter?Filter").then((res) => {
|
|
if (res.code != -1) {
|
|
this.dict.asbItemAll = res.data.items;
|
|
this.dict.asbItemAll.forEach(e => {
|
|
e.choosed = false
|
|
})
|
|
this.dict.asbItem = deepCopy(this.dict.asbItemAll);
|
|
this.dict.asbItemQuick = deepCopy(res.data.items);
|
|
}
|
|
});
|
|
|
|
//套餐
|
|
getapi("/api/app/medical-package/in-filter").then((res) => {
|
|
if (res.code != -1) {
|
|
this.dict.medicalPackage = res.data.items;
|
|
}
|
|
});
|
|
|
|
},
|
|
|
|
handleRowClassName({ row, rowIndex }) {
|
|
// highLightBg 为 'selected'的高亮
|
|
//console.log(rowIndex, row)
|
|
//return row.highLightBg == 'selected' ? 'high-light-bg' : '';
|
|
if (row.choosed) {
|
|
return 'current-row';
|
|
} else {
|
|
return '';
|
|
}
|
|
|
|
},
|
|
|
|
//项目类别过滤 组合项目,未过滤已选择的组合项目
|
|
getAsbItemByItemTypeAll() {
|
|
//console.log('getAsbItemByItemType', typeof this.itemTypeIds, this.itemTypeIds)
|
|
let lv = "";
|
|
if (typeof this.itemTypeIds === "object") {
|
|
lv = this.itemTypeIds[this.itemTypeIds.length - 1];
|
|
}
|
|
|
|
if (lv) {
|
|
this.dict.asbItem = arrayFilter(this.dict.asbItemAll, "itemTypeId", lv);
|
|
} else {
|
|
this.dict.asbItem = deepCopy(this.dict.asbItemAll);
|
|
}
|
|
//console.log('lv,this.dict.asbItem', lv, this.dict.asbItem)
|
|
this.dict.asbItemQuick = deepCopy(this.dict.asbItemAll);
|
|
|
|
},
|
|
|
|
//按项目类别显示组合项目,并过滤已选择的组合项目
|
|
getAsbItemByItemType() {
|
|
this.getAsbItemByItemTypeAll()
|
|
//刷新显示 未选组合项目
|
|
arrayReduce(this.dict.asbItem, [...this.customerOrgGroupAsbitems], "id=asbitemId");
|
|
arrayReduce(this.dict.asbItemQuick, [...this.customerOrgGroupAsbitems], "id=asbitemId");
|
|
},
|
|
|
|
//快速选择组合项目时,调整可按拼间简码及简称查找
|
|
remoteMethod(keyWords) {
|
|
//console.log('remoteMethod',this.dict.asbItemQuick)
|
|
if (keyWords) {
|
|
this.quickAsb = [];
|
|
this.dict.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 = [...this.dict.asbItemQuick];
|
|
}
|
|
},
|
|
|
|
// 添加组合项目
|
|
///api/app/register-asbitem/many/3fa85f64-5717-4562-b3fc-2c963f66afa6'
|
|
async addAbs(asbItemChoosed,oprType) {
|
|
console.log('this.customerOrgGroup',this.customerOrgGroup)
|
|
console.log('asbItemChoosed', asbItemChoosed)
|
|
if(!this.customerOrgGroup.id){
|
|
this.$message.warning("请先选中单位分组")
|
|
return
|
|
}
|
|
let message = []
|
|
let checked = true
|
|
let lfind = -1
|
|
|
|
//oprType 不传值时,兼容勾选方式
|
|
//勾选时不需要此操作 start
|
|
if(oprType && oprType == 'all'){
|
|
asbItemChoosed = deepCopy(this.dict.asbItem)
|
|
}else if(oprType && oprType == 'choosed'){
|
|
asbItemChoosed = []
|
|
this.dict.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,
|
|
|
|
// for (let i = 0; i < asbItemChoosed.length; i++) {
|
|
// if (this.customerOrgGroup.forSexId == 'A') break //未选性别时,无需判断组合项目性别限制
|
|
// if (asbItemChoosed[i].forSexId == 'A' || asbItemChoosed[i].forSexId == 'U') continue
|
|
// if (asbItemChoosed[i].forSexId != this.customerOrgGroup.sexId) {
|
|
// this.$message.warning(`所选项目:${asbItemChoosed[i].displayName},不适合当前人员性别`)
|
|
// checked = false
|
|
// break
|
|
// }
|
|
// }
|
|
// //console.log(222,checked)
|
|
// if (!checked) return
|
|
|
|
// 去掉重复的项目
|
|
arrayReduce(asbItemChoosed, this.customerOrgGroupAsbitems, "id=asbitemId")
|
|
|
|
for (let i = asbItemChoosed.length - 1; i > - 1; i--) {
|
|
if (this.customerOrgGroup.forSexId == 'A') break //未选性别时,无需判断组合项目性别限制
|
|
if (asbItemChoosed[i].forSexId == 'A' || asbItemChoosed[i].forSexId == 'U') continue
|
|
if (asbItemChoosed[i].forSexId != this.customerOrgGroup.forSexId) {
|
|
message.push(asbItemChoosed[i].displayName) //.warning(`所选项目:${asbItemChoosed[i].displayName},不适合当前人员性别`)
|
|
checked = false
|
|
asbItemChoosed.splice(i,1)
|
|
}
|
|
}
|
|
//console.log(222,checked)
|
|
if (!checked) this.$message.warning(`所选项目【${JSON.stringify(message)}】不适合当前人员性别`)
|
|
|
|
for (let i = 0; i < asbItemChoosed.length; i++) {
|
|
let pojo = {
|
|
asbitemId: asbItemChoosed[i].id,
|
|
displayName:asbItemChoosed[i].displayName,
|
|
discount:100,
|
|
customerOrgGroupDetailAmount:1,
|
|
price:asbItemChoosed[i].price,
|
|
customerOrgGroupDetailPrice:asbItemChoosed[i].price,
|
|
customerOrgGroupDetailMoney: asbItemChoosed[i].price,
|
|
asbitemMoney: asbItemChoosed[i].price,
|
|
}
|
|
|
|
|
|
this.customerOrgGroupAsbitems.push(pojo)
|
|
//this.customerOrgGroupAsbitems.push({ ...pojo, asbitemName: asbItemChoosed[i].displayName })
|
|
|
|
lfind = arrayExistObj(this.dict.asbItem, 'id', asbItemChoosed[i].id)
|
|
if (lfind > -1) this.dict.asbItem.splice(lfind, 1)
|
|
|
|
lfind = arrayExistObj(this.dict.asbItemQuick, 'id', asbItemChoosed[i].id)
|
|
if (lfind > -1) this.dict.asbItemQuick.splice(lfind, 1)
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
//双击选择组合项目
|
|
dbClickChoosedAsb(row) {
|
|
this.addAbs([row]);
|
|
},
|
|
//快速选择组合项目
|
|
quickChoosedAsb(v) {
|
|
//远程查询时,设置了 value-key 也不管用,只能取到value console.log('quickChoosedAsb',v)
|
|
let lfind = -1
|
|
if (v) {
|
|
lfind = arrayExistObj(this.dict.asbItemQuick, 'id', v)
|
|
if (lfind > -1) {
|
|
this.addAbs([this.dict.asbItemQuick[lfind]])
|
|
}
|
|
}
|
|
|
|
},
|
|
|
|
//选择 未选的组合项目
|
|
chooseAsbItem(row){
|
|
this.dict.asbItem.forEach((e,index) => {
|
|
e.index = index;
|
|
return e
|
|
});
|
|
// 按住了shift键
|
|
if (this.window.shift) {
|
|
//清除所有选择
|
|
this.dict.asbItem.forEach(e => {
|
|
e.choosed = false;
|
|
return e
|
|
});
|
|
|
|
if (this.startPoint == - 1) {
|
|
this.dict.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.dict.asbItem[i].choosed = true
|
|
}
|
|
} else if (this.startPoint <= row.index) {
|
|
for (let i = this.startPoint; i <= row.index; i++) {
|
|
this.dict.asbItem[i].choosed = true
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
// 按住了ctrl 键
|
|
if (this.window.ctrl) {
|
|
console.log('this.window.ctrl',this.window.ctrl,this.dict.asbItem)
|
|
this.dict.asbItem[row.index].choosed = true;
|
|
this.startPoint = row.index;
|
|
return
|
|
}
|
|
|
|
// 未按住了ctrl 、shift 键
|
|
//清除所有选择
|
|
//console.log('清除所有选择')
|
|
this.dict.asbItem.forEach(e => {
|
|
e.choosed = false;
|
|
return e
|
|
});
|
|
this.dict.asbItem[row.index].choosed = true;
|
|
this.startPoint = row.index;
|
|
|
|
},
|
|
|
|
//删除 人员已选中的组合项目
|
|
///api/app/register-asbitem/many?RegisterAsbitemIds=3fa85f64-5717-4562-b3fc-2c963f66afa6
|
|
delAbs(absForDel,oprType) {
|
|
let body = {}
|
|
let registerAsbitemIds = []
|
|
let chargeComplete = ''
|
|
let lfind = -1
|
|
|
|
//勾选时不需要此操作 start
|
|
if(oprType && oprType == 'all'){
|
|
absForDel = deepCopy(this.customerOrgGroupAsbitems)
|
|
}else if(oprType && oprType == 'choosed'){
|
|
absForDel = []
|
|
this.customerOrgGroupAsbitems.forEach(e =>{
|
|
if(e.choosed){
|
|
absForDel.push(deepCopy(e))
|
|
e.choosed = false
|
|
}
|
|
})
|
|
}
|
|
//勾选时不需要此操作 end
|
|
|
|
if (absForDel.length < 1) {
|
|
this.$message.warning("请选择要移除的组合项目")
|
|
return
|
|
}
|
|
|
|
for (let i = 0; i < absForDel.length; i++) {
|
|
|
|
lfind = arrayExistObj(this.customerOrgGroupAsbitems, 'asbitemId', absForDel[i].asbitemId)
|
|
if (lfind > -1) this.customerOrgGroupAsbitems.splice(lfind, 1)
|
|
|
|
absForDel.splice(i, 1)
|
|
i--
|
|
continue
|
|
|
|
}
|
|
|
|
//刷新
|
|
this.getAsbItemByItemType()
|
|
|
|
},
|
|
|
|
//双击删除已选项目
|
|
removeAbs(row) {
|
|
this.delAbs([row]);
|
|
},
|
|
|
|
//选择 已选的组合项目
|
|
removeAsbItem(row){
|
|
this.customerOrgGroupAsbitems.forEach((e,index) => {
|
|
e.index = index;
|
|
return e
|
|
});
|
|
// 按住了shift键
|
|
if (this.window.shift) {
|
|
//清除所有选择
|
|
this.customerOrgGroupAsbitems.forEach(e => {
|
|
e.choosed = false;
|
|
return e
|
|
});
|
|
|
|
if (this.PstartPoint == - 1) {
|
|
this.customerOrgGroupAsbitems[row.index].choosed = true;
|
|
this.PstartPoint = row.index;
|
|
return
|
|
}
|
|
|
|
if (this.PstartPoint > row.index) {
|
|
for (let i = row.index; i <= this.PstartPoint; i++) {
|
|
this.customerOrgGroupAsbitems[i].choosed = true
|
|
}
|
|
} else if (this.PstartPoint <= row.index) {
|
|
for (let i = this.PstartPoint; i <= row.index; i++) {
|
|
this.customerOrgGroupAsbitems[i].choosed = true
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
// 按住了ctrl 键
|
|
if (this.window.ctrl) {
|
|
console.log('this.window.ctrl',this.window.ctrl,this.customerOrgGroupAsbitems)
|
|
this.customerOrgGroupAsbitems[row.index].choosed = true;
|
|
this.PstartPoint = row.index;
|
|
return
|
|
}
|
|
|
|
// 未按住了ctrl 、shift 键
|
|
//清除所有选择
|
|
//console.log('清除所有选择')
|
|
this.customerOrgGroupAsbitems.forEach(e => {
|
|
e.choosed = false;
|
|
return e
|
|
});
|
|
this.customerOrgGroupAsbitems[row.index].choosed = true;
|
|
this.PstartPoint = row.index;
|
|
|
|
},
|
|
|
|
changeDiscount(index){
|
|
|
|
this.customerOrgGroupAsbitems[index].customerOrgGroupDetailPrice =
|
|
(this.customerOrgGroupAsbitems[index].discount * this.customerOrgGroupAsbitems[index].price/100).toFixed(2)
|
|
|
|
|
|
this.customerOrgGroupAsbitems[index].customerOrgGroupDetailMoney =
|
|
(this.customerOrgGroupAsbitems[index].customerOrgGroupDetailPrice * this.customerOrgGroupAsbitems[index].customerOrgGroupDetailAmount).toFixed(2)
|
|
|
|
//this.getSummaries()
|
|
|
|
},
|
|
|
|
//修改价格或数量
|
|
changePrices(index){
|
|
this.customerOrgGroupAsbitems[index].customerOrgGroupDetailMoney =
|
|
(this.customerOrgGroupAsbitems[index].customerOrgGroupDetailPrice * this.customerOrgGroupAsbitems[index].customerOrgGroupDetailAmount).toFixed(2)
|
|
|
|
this.customerOrgGroupAsbitems[index].discount = (this.customerOrgGroupAsbitems[index].customerOrgGroupDetailPrice * 100 / this.customerOrgGroupAsbitems[index].price).toFixed(2)
|
|
//this.getSummaries()
|
|
},
|
|
|
|
|
|
//合计
|
|
getSummaries(param) {
|
|
console.log('getSummaries param',param)
|
|
// if(!param){
|
|
// param = {
|
|
// columns:[{}, {}, {}, {}, {}, {}, {property: 'asbitemMoney'},{property: 'customerOrgGroupDetailMoney'}],
|
|
// data:this.customerOrgGroupAsbitems
|
|
// }
|
|
// }
|
|
|
|
const { columns, data } = param;
|
|
const sumCol = [6, 7] //需合计的列
|
|
const sums = [];
|
|
columns.forEach((column, index) => {
|
|
//console.log('column, index,data',column, index,data)
|
|
//显示合计列
|
|
if (index === 1) {
|
|
sums[index] = '合计';
|
|
return;
|
|
}
|
|
|
|
//不合计的列
|
|
if (sumCol.indexOf(index) == -1) {
|
|
sums[index] = '';
|
|
return;
|
|
}
|
|
|
|
sums[index] = 0
|
|
data.forEach(e => {
|
|
if (!isNaN(e[column.property])) sums[index] += Number(e[column.property])// * e['amount']
|
|
})
|
|
sums[index] = sums[index].toFixed(2) //+ ' 元';
|
|
|
|
});
|
|
//this.totalStand = sums[2];
|
|
console.log('getSummaries',sums)
|
|
// if (!this.totalFoucs) this.total = sums[5];
|
|
// if (!this.discountFoucs) this.discount = Number(this.total * 100 / this.totalStand).toFixed(2);
|
|
return sums;
|
|
},
|
|
|
|
//复制分组
|
|
btnCopyGroup(){
|
|
if(!this.customerOrgGroup.id || !this.customerOrgGroup.customerOrgId){
|
|
this.$message.warning("请先选中单位分组")
|
|
return
|
|
}
|
|
|
|
getapi(
|
|
`/api/app/customerorggroup/getlistinfilter?CustomerOrgRegisterId=${this.customerOrgGroup.customerOrgRegisterId}`
|
|
).then((res) => {
|
|
if (res.code != -1) {
|
|
this.customerOrgGroups = res.data.items;
|
|
if(this.customerOrgGroups.length <2){
|
|
this.$message.warning("暂无其他分组可供复制")
|
|
}else{
|
|
this.groupVisble = true
|
|
}
|
|
}
|
|
});
|
|
|
|
},
|
|
|
|
//选中分组
|
|
async groupRowClick(row){
|
|
this.curGroupId = row.id
|
|
this.groupAsbitems = []
|
|
try {
|
|
let res = await getapi(`/api/app/customerorggroupdetail/getcustomerorggroupdetailinasbitem?CustomerOrgGroupId=${row.id}`)
|
|
if(res.code != -1) this.groupAsbitems = res.data
|
|
} catch (error) {
|
|
console.log(error)
|
|
}
|
|
},
|
|
|
|
|
|
|
|
//双击选分组,并确认复制
|
|
async groupRowDblclick(row){
|
|
await this.groupRowClick(row)
|
|
this.copyGroup()
|
|
},
|
|
|
|
//复制分组(确认选中分组)
|
|
copyGroup(){
|
|
if(!this.curGroupId){
|
|
this.$message.warning("请先选择要复制的套餐!")
|
|
return
|
|
}
|
|
console.log('this.packageAsbitems',this.groupAsbitems)
|
|
this.addAbs(deepCopy(this.groupAsbitems))
|
|
this.groupVisble = false
|
|
},
|
|
|
|
|
|
|
|
//复制套餐
|
|
btnCopyMedicalPackage(){
|
|
if(!this.customerOrgGroup.id){
|
|
this.$message.warning("请先选中单位分组")
|
|
return
|
|
}
|
|
this.medicalPackageVisble = true
|
|
},
|
|
|
|
//选中套餐
|
|
async packageRowClick(row){
|
|
this.curPackageId = row.id
|
|
this.packageAsbitems = []
|
|
try {
|
|
let res = await getapi(`/api/app/medical-package-detail/medical-package-in-asbitem?MedicalPackageId=${row.id}`)
|
|
this.packageAsbitems = res.data
|
|
} catch (error) {
|
|
console.log(error)
|
|
}
|
|
},
|
|
|
|
//双击选套餐,并确认复制
|
|
async rowDblclick(row){
|
|
await this.packageRowClick(row)
|
|
this.copyMedicalPackage()
|
|
},
|
|
|
|
//复制套餐(确认选中套餐)
|
|
copyMedicalPackage(){
|
|
if(!this.curPackageId){
|
|
this.$message.warning("请先选择要复制的套餐!")
|
|
return
|
|
}
|
|
console.log('this.packageAsbitems',this.packageAsbitems)
|
|
this.addAbs(deepCopy(this.packageAsbitems))
|
|
this.medicalPackageVisble = false
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
//保存按钮
|
|
btnSave() {
|
|
if(!this.customerOrgGroup.id){
|
|
this.$message.warning("请先选中单位分组")
|
|
return
|
|
}
|
|
let body = {
|
|
customerOrgGroupId:this.customerOrgGroup.id,
|
|
details:[]
|
|
}
|
|
// {
|
|
// "customerOrgGroupId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
|
|
// "details": [
|
|
// {
|
|
// "customerOrgGroupId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
|
|
// "asbitemId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
|
|
// "price": 0,
|
|
// "amount": 0
|
|
// }
|
|
// ]
|
|
// }
|
|
this.customerOrgGroupAsbitems.forEach(e =>{
|
|
body.details.push({
|
|
customerOrgGroupId:this.customerOrgGroup.id,
|
|
asbitemId:e.asbitemId,
|
|
price:e.customerOrgGroupDetailPrice,
|
|
amount:e.customerOrgGroupDetailAmount
|
|
})
|
|
})
|
|
|
|
postapi('/api/app/customerorggroupdetail/createcustomerorggroupdetailmany',body).then(res => {
|
|
if(res.code != -1){
|
|
this.$message.success("操作成功");
|
|
}
|
|
})
|
|
|
|
},
|
|
|
|
|
|
//右侧勾选按钮
|
|
selecteditems(val) {
|
|
this.rightselctedata = val;
|
|
console.log(this.rightselctedata);
|
|
},
|
|
|
|
|
|
// 左侧未选
|
|
handleSelectionChange(val) {
|
|
// this.selecteddata = val;
|
|
this.unselecteddata = val;
|
|
console.log(this.unselecteddata);
|
|
},
|
|
|
|
|
|
//获取当前列列表数据
|
|
getCustomerOrgGroupAsbitems(customerOrgGroupId) {
|
|
if(customerOrgGroupId){
|
|
getapi(
|
|
`/api/app/customerorggroupdetail/getcustomerorggroupdetailinasbitem?CustomerOrgGroupId=${customerOrgGroupId}`
|
|
).then((res) => {
|
|
if(res.code != -1){
|
|
this.customerOrgGroupAsbitems = res.data;
|
|
this.getAsbItemByItemType()
|
|
}
|
|
});
|
|
}else{
|
|
this.customerOrgGroupAsbitems = []
|
|
this.getAsbItemByItemType()
|
|
}
|
|
},
|
|
|
|
},
|
|
|
|
//监听事件
|
|
watch: {
|
|
//
|
|
"customerOrgGroup.id"(newVal, oldVal) {
|
|
console.log("customerOrgGroup.id ",newVal,oldVal);
|
|
if (newVal != oldVal) {
|
|
this.getCustomerOrgGroupAsbitems(newVal);
|
|
}
|
|
},
|
|
},
|
|
};
|
|
</script>
|
|
<style scoped>
|
|
|
|
.box {
|
|
margin-top: 5px;
|
|
border: 1px solid #000;
|
|
}
|
|
|
|
.btnClass {
|
|
width:100px;
|
|
margin-bottom: 5px
|
|
}
|
|
|
|
</style>
|