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.
 
 
 

1072 lines
39 KiB

<template>
<div style="display: flex; margin-top:5px;">
<div :style="'display: flex;width:' + (window.pageWidth - window.pageMarginWidth - 110 - 5) + 'px;font-size:14px;'">
<!--未选组合项目-->
<div style="display: block; width:300px;">
<div>
<span>项目类别</span>
<el-cascader :options="dict.itemTypeTree" v-model="itemTypeIds" popper-class="example"
style="margin-left: 3px;width:240px;"
:props="{ checkStrictly: true, expandTrigger: 'hover', ...customerOrg.treeprops, }" clearable filterable
@change="getAsbItemByItemType" size="small">
</el-cascader>
</div>
<div class="box">
<el-table :data="dict.asbItem" border size="small" highlight-current-row :height="tableHeight"
@row-dblclick="dbClickChoosedAsb" row-key="id" @selection-change="selectLeft"
:row-class-name="handleRowClassName" @row-click="chooseAsbItem">
<!--
<el-table-column type="selection" align="center" ></el-table-column>
-->
<el-table-column type="index" align="center" 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 15px;width:110px;">
<div v-show="checkPagePriv(pagePriv.privs, '添加')" style="padding: 5px 0;">
<el-button class="commonbutton" @click="addAbs(asbItemChoosed, 'choosed')">添加 <i
class="el-icon-arrow-right"></i></el-button>
</div>
<div v-show="checkPagePriv(pagePriv.privs, '全部添加')" style="padding: 5px 0;">
<el-button class="difference" @click="addAbs(asbItemChoosed, 'all')">全部添加</el-button>
</div>
<div v-show="checkPagePriv(pagePriv.privs, '移除')" style="padding: 5px 0;">
<el-button class="commonbutton" @click="delAbs(customerOrgGroupAsbitemsChoosed, 'choosed')">移除 <i
class="el-icon-arrow-left"></i></el-button>
</div>
<div v-show="checkPagePriv(pagePriv.privs, '全部移除')" style="padding: 5px 0;">
<el-button class="difference" @click="delAbs(customerOrgGroupAsbitemsChoosed, 'all')">全部移除</el-button>
</div>
</div>
<!--已选组合项目-->
<div
:style="'display: block; width:' + (window.pageWidth - 300 - 120 - window.pageMarginWidth - 110 - 5) + 'px;'">
<div style="height:32px;">
<div v-show="checkPagePriv(pagePriv.privs, '快速选择')">
<span>快速选择</span>
<el-select v-model="asbItemId" placeholder="快速选择组合项目" size="small" filterable default-first-option
:filter-method="filterMethod" clearable @clear="quickAsb = deepCopy(dict.asbItemQuick)"
@change="quickChoosedAsb" ref="quickAsbOCX" style="margin-left: 3px;width:240px;">
<el-option v-for="item in quickAsb" :key="item.id" :value="item.id" :label="item.displayName" />
</el-select>
</div>
</div>
<div class="box">
<el-table :data="customerOrgGroupAsbitems" border size="small" @selection-change="selectRight"
highlight-current-row :height="tableHeight" :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" width="40" align="center" />
<el-table-column label="已选组合项目" min-width="140" prop="displayName"></el-table-column>
<el-table-column label="标准价格" prop="price" min-width="60" align="center" />
<el-table-column label="折扣" min-width="40" 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" width="50" 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: 5px;">
<div v-show="checkPagePriv(pagePriv.privs, '复制分组')" style="margin-top: 50px;">
<el-button class="commonbutton" @click="btnCopyGroup">复制分组</el-button>
</div>
<div v-show="checkPagePriv(pagePriv.privs, '复制套餐')" style="margin-top: 10px;">
<el-button class="commonbutton" @click="btnCopyMedicalPackage">复制套餐</el-button>
</div>
<div v-show="checkPagePriv(pagePriv.privs, '保存')" style="margin-top: 10px;">
<el-button class="commonbutton" @click="btnSave">保存</el-button>
</div>
</div>
<!--复制套餐-->
<el-dialog title="复制体检套餐" :visible.sync="medicalPackageVisble" width="800px" height="500" :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 class="commonbutton" type="primary" @click="copyMedicalPackage" style="width:90px;">确定</el-button>
<el-button class="commonbutton" @click="medicalPackageVisble = false" style="width:90px;">取消</el-button>
</span>
</el-dialog>
<!--复制分组-->
<el-dialog title="复制单位分组" :visible.sync="groupVisble" width="800px" height="500" :show-close="false"
:close-on-click-modal="false" :append-to-body="true">
<div>
<div style="display: flex">
<div>
<span>体检单位:</span>
<el-select v-model="customerOrgId" placeholder="请选择体检单位" :filter-method="filterMethodOrg" default-first-option
clearable filterable @clear="customerOrgDisp = deepCopy(customerOrgAll)" style="margin-left: 10px"
@change="changeCustomerOrg" size="small">
<el-option v-for="item in customerOrgDisp" :key="item.id" :label="item.displayName" :value="item.id">
{{ item.displayName }}
</el-option>
</el-select>
</div>
<div style="margin-left: 20px">
<span>单位体检次数:</span>
<el-select v-model="customerOrgRegister" placeholder="次数" style="width: 60px; margin-left: 10px"
size="small" @change="changeTimes" value-key="id">
<el-option v-for="item in customerOrgRegisterList" :key="item.id" :label="item.medicalTimes"
:value="item" />
</el-select>
</div>
</div>
<el-table :data="customerOrgGroups" ref="customerOrgGroups" style="margin-top: 2px" row-key="id" border
height="450px" 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>
<div style="display: flex;justify-content: space-between;margin-top: 10px;">
<div></div>
<span slot="footer" class="dialog-footer">
<el-button class="commonbutton" type="primary" @click="copyGroup" style="width:90px;">确定</el-button>
<el-button class="commonbutton" @click="groupVisble = false" style="width:90px;">取消</el-button>
</span>
</div>
</div>
</el-dialog>
</div>
</template>
<script>
import moment from 'moment';
import { mapState } from "vuex";
import { getapi, postapi, putapi } from "@/api/api";
import { getPagePriv, checkPagePriv, arrayExistObj, tcdate, arrayFilter, arrayReduce, deepCopy, objCopy,dddw } from "../../utlis/proFunc";
export default {
props: ['customerOrgGroup', 'curOrgGroups','customerOrgAll','curOrgRegister','curOrgRegisterList','refreshMoney'],
data() {
return {
pagePriv: {
routeUrlorPageName: 'customerOrgGroup', //当前页面归属路由或归属页面权限名称
privs: [] // 页面权限
},
groupPrice: 0, //分组总价
customerOrgGroupAsbitems: [], //分组包含组合项目(显示)
customerOrgGroupAsbitemsChoosed: [], //分组包含组合项目(显示) 被选中
itemTypeIds: [], //项目类别
asbItemId: '', //当前快速选到的给合项目ID
quickAsb: [], //过滤显示的组合项目
asbItemChoosed: [], //勾选的 未选组合项目
startPoint: -1,
PstartPoint: -1,
medicalPackageVisble: false, //复制套餐
curPackageId: '', //当前选中套餐ID
packageAsbitems: [], //套餐中包含的组合项目
groupVisble: false, //复制分组
customerOrgGroups: [], //历次分组
curGroupId: '', //当前选中套餐ID
groupAsbitems: [], //选中分组包含组合项目
customerOrgId:'', // 当前选中企业ID
customerOrgDisp:[], // 显示单位
customerOrgRegisterList:[], //当前体检次数集合
customerOrgRegister:{}, // 当前选择体检次数
dialogVisible: false,
copyGroupdialogVisible: false,
packagelist: [],
tabledata: [],
temporaryselection: [], //已选组合项目table
copegroupdata: [], //复制分组
addrulst: [], //添加保存的Id
price: "", //价格
title: 1,
};
},
computed: {
...mapState(["window", "dict", "dataTransOpts", "customerOrg"]),
tableHeight() {
let height = 600
if (this.window.pageHeight > 600) {
height = this.window.pageHeight
}
// console.log(height - this.window.pageHeaderHeight - this.window.pageMarginHeight - 240 - 96 - 10)
return height - this.window.pageHeaderHeight - this.window.pageMarginHeight - 240 - 96 - 36
}
},
created() {
//获取用户当前页面的权限
let userPriv = window.sessionStorage.getItem('userPriv')
if (userPriv) this.pagePriv.privs = deepCopy(getPagePriv(this.pagePriv.routeUrlorPageName))
this.dictInit()
},
mounted() {
this.getCustomerOrgGroupAsbitems(this.customerOrgGroup.id);
},
updated() {
this.refreshTable('tableCustomerOrgGroupAsbitems')
},
methods: {
moment, dddw, deepCopy, checkPagePriv,
//表格强制刷新
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);
}
});
//获取所有组合项目 api/app/asbitem/GetBasicList
postapi("/api/app/asbitem/GetBasicList", { isFilterActive: 'Y' }).then((res) => {
if (res.code != -1) {
this.dict.asbItemAll = res.data;
this.dict.asbItemAll.forEach(e => {
e.choosed = false
})
this.dict.asbItem = deepCopy(this.dict.asbItemAll);
this.dict.asbItemQuick = deepCopy(res.data);
this.quickAsb = deepCopy(res.data);
}
});
//套餐 ()
postapi("/api/app/medicalpackage/getmedicalpackagelist", {}).then((res) => {
if (res.code != -1) {
this.dict.medicalPackage = res.data;
}
});
},
// 过滤体检单位
filterMethodOrg(keyWords) {
if (keyWords) {
this.customerOrgDisp = [];
this.customerOrgAll.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.customerOrgDisp.push(item);
}
});
} else {
this.customerOrgDisp = deepCopy(this.customerOrgAll);
}
},
//选择单位
changeCustomerOrg(v) {
if (!v) {
this.customerOrgRegisterList = [];
this.customerOrgRegister = {};
this.customerOrgGroups = [];
this.isDrag = false;
this.form.id = "";
setTimeout(() => {
this.dataTransOpts.refresh.customer_org_group_detail.M++;
}, 20);
return;
}
getapi(
`/api/app/customerorgregister/getlistincustomerorgid?CustomerOrgId=${v}`
).then((res) => {
if (res.code != -1) {
this.customerOrgRegisterList = res.data;
if (res.data.length > 0) {
this.customerOrgRegister = res.data[res.data.length - 1];
this.getCustomerOrgGroup(this.customerOrgRegister.id);
} else {
this.customerOrgRegister = {};
this.customerOrgGroups = [];
this.isDrag = false;
}
objCopy(this.formInit, this.form);
setTimeout(() => {
this.dataTransOpts.refresh.customer_org_group_detail.M++;
}, 20);
}
});
},
//选择体检次数
changeTimes(v) {
this.getCustomerOrgGroup(v.id);
},
//获取体检次数下的分组
getCustomerOrgGroup(customerOrgRegisterId) {
// this.isDrag = false;
// objCopy(this.formInit, this.form);
// this.form.customerOrgRegisterId = customerOrgRegisterId;
this.customerOrgGroups = [];
getapi(
`/api/app/customerorggroup/getlistinfilter?CustomerOrgRegisterId=${customerOrgRegisterId}`
).then((res) => {
if (res.code != -1) {
this.customerOrgGroups = res.data;
this.customerOrgGroups.forEach((e) => {
e.customerOrgRegisterId = customerOrgRegisterId;
});
}
});
},
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");
this.quickAsb = Object.assign(this.dict.asbItemQuick)
},
//快速选择组合项目时,调整可按拼间简码及简称查找
filterMethod(keyWords) {
//console.log('filterMethod',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 = deepCopy(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({ showClose: true, message: "请先选中单位分组" })
return
}
if (this.customerOrgGroup.isComplete && this.customerOrgGroup.isComplete.toUpperCase() == 'Y') {
this.$message.warning({ showClose: true, message: "体检次数已完成,不允许操作" })
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({ showClose: true, message: "请选择要添加的组合项目" })
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]])
}
}
this.$nextTick(() => {
this.$refs['quickAsbOCX'].blur(); //total asbItemId
this.asbItemId = ''
this.quickAsb = deepCopy(this.dict.asbItemQuick)
this.$refs['quickAsbOCX'].focus(); //total asbItemId
});
},
//选择 未选的组合项目
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) {
if (!this.customerOrgGroup.id) {
this.$message.warning({ showClose: true, message: "请先选中单位分组" })
return
}
if (this.customerOrgGroup.isComplete && this.customerOrgGroup.isComplete.toUpperCase() == 'Y') {
this.$message.warning({ showClose: true, message: "体检次数已完成,不允许操作" })
return
}
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({ showClose: true, message: "请选择要移除的组合项目" })
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].asbitemMoney =
(this.customerOrgGroupAsbitems[index].price * 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.groupPrice = sums[7];
// 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() {
console.log('this.customerOrgGroup', this.customerOrgGroup)
if (!this.customerOrgGroup.id) {
this.$message.warning({ showClose: true, message: "请先选中单位分组" })
return
}
if (this.customerOrgGroup.isComplete && this.customerOrgGroup.isComplete.toUpperCase() == 'Y') {
this.$message.warning({ showClose: true, message: "体检次数已完成,不允许操作" })
return
}
this.groupVisble = true
/* 允许复制其他单位的分组 故屏蔽此段代码
getapi(
`/api/app/customerorggroup/getlistinfilter?CustomerOrgRegisterId=${this.customerOrgGroup.customerOrgRegisterId}`
).then((res) => {
if (res.code != -1) {
this.customerOrgGroups = res.data;
if (this.customerOrgGroups.length < 2) {
this.$message.warning({ showClose: true, message: "暂无其他分组可供复制" })
} 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({ showClose: true, message: "请先选择要复制的套餐!" })
return
}
console.log('this.packageAsbitems', this.groupAsbitems)
this.addAbs(deepCopy(this.groupAsbitems))
this.groupVisble = false
},
//复制套餐
btnCopyMedicalPackage() {
// console.log('this.customerOrgGroup',this.customerOrgGroup)
if (!this.customerOrgGroup.id) {
this.$message.warning({ showClose: true, message: "请先选中单位分组" })
return
}
if (this.customerOrgGroup.isComplete && this.customerOrgGroup.isComplete.toUpperCase() == 'Y') {
this.$message.warning({ showClose: true, message: "体检次数已完成,不允许操作" })
return
}
this.medicalPackageVisble = true
},
//选中套餐
async packageRowClick(row) {
this.curPackageId = row.id
this.packageAsbitems = []
try {
let res = await postapi('/api/app/medicalpackagedetail/getmedicalpackageinasbitem', { 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({ showClose: true, message: "请先选择要复制的套餐!" })
return
}
console.log('this.packageAsbitems', this.packageAsbitems)
this.addAbs(deepCopy(this.packageAsbitems))
this.medicalPackageVisble = false
},
//保存按钮
btnSave() {
if (!this.customerOrgGroup.id) {
this.$message.warning({ showClose: true, message: "请先选中单位分组" })
return
}
if (this.customerOrgGroup.isComplete && this.customerOrgGroup.isComplete.toUpperCase() == 'Y') {
this.$message.warning({ showClose: true, message: "体检次数已完成,不允许操作" })
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
})
})
let group = deepCopy(this.customerOrgGroup);
postapi('/api/app/customerorggroupdetail/createcustomerorggroupdetailmany', body
)
// .then(res => {
// if(res.code != -1){
// delete group.id;
// delete group.customerOrgId;
// delete group.isComplete;
// group.price = this.groupPrice
// // console.log('this.customerOrgGroup',this.customerOrgGroup)
// // console.log('group',group)
// return putapi(`/api/app/customer-org-group/${this.customerOrgGroup.id}`, group)
// }
// }) 后台合并事务
.then(res => {
if (res && res.code != -1) {
console.log("操作成功");
group.price = this.groupPrice
group.id = this.customerOrgGroup.id
this.refreshMoney(group)
this.$message.success({ showClose: true, message: "保存成功" })
}
})
},
//右侧勾选按钮
selectRight(val) {
this.customerOrgGroupAsbitemsChoosed = val;
},
// 左侧未选
selectLeft(val) {
this.asbItemChoosed = val;
},
//获取当前列列表数据
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: {
// 体检分组ID未切换换时 也可以强制刷新数据
"dataTransOpts.refresh.customer_org_group_detail.M": {
// immediate:true,
handler(newVal, oldVal) {
console.log(`watch 体检分组 newVal:${newVal} oldVal:${oldVal} registerCheckId: ${this.customerOrgGroup.id}`);
this.getCustomerOrgGroupAsbitems(this.customerOrgGroup.id);
}
},
// 显示复制分组页面时,刷单位与体检次数数据
"groupVisble":{
handler(newVal, oldVal) {
if(newVal){
console.log('customerOrgGroup',this.customerOrgGroup,this.customerOrgAll,this.curOrgRegisterList)
this.customerOrgDisp = deepCopy(this.customerOrgAll)
this.customerOrgRegisterList = deepCopy(this.curOrgRegisterList)
this.customerOrgRegister = deepCopy(this.curOrgRegister)
this.customerOrgId = this.customerOrgGroup.customerOrgId
this.customerOrgGroups = deepCopy(this.curOrgGroups)
}
}
}
},
};
</script>
<style scoped>
.box {
margin-top: 5px;
/* border: 1px solid #000; */
}
.btnClass {
width: 100px;
margin-bottom: 5px
}
</style>