pengjun 2 weeks ago
parent
commit
d5ae8db47c
  1. 547
      src/components/common/HcAsbitem.vue
  2. 2
      src/components/patientRegister/PatientRegisterItem.vue
  3. 120
      src/views/fee-settings/Asbitem.vue

547
src/components/common/HcAsbitem.vue

@ -0,0 +1,547 @@
<template>
<div>
<div :style="'display: flex;width:' + (window.pageWidth - 45 - 110) + 'px;'">
<!--未选组合项目-->
<div style="display: block; width:260px;">
<div>
<span style="padding: 5px;font-size: 14px;font-weight: 400;color: #232748;font-family: NotoSansSC-Regular;margin-bottom: 10px;">项目类别</span>
<el-cascader :options="dict.itemTypeTree" v-model="itemTypeIds"
:props="{ checkStrictly: true, expandTrigger: 'hover', ...customerOrg.treeprops, }" popper-class="example" @change="getAsbItemByItemType" size="small" ref="itemTypeIds">
</el-cascader>
</div>
<div class="box">
<el-table :data="dict.asbItem" size="small" highlight-current-row
:height="window.pageHeight < 600 ? 190:Math.floor((window.pageHeight - 230) / 2)"
@row-dblclick="dbClickChoosedAsb" row-key="id" border
@selection-change="selectLeft"
@row-click="chooseAsbItem">
<!--
<el-table-column type="selection" align="center" ></el-table-column>
-->
<el-table-column type="index" align="center" min-width="40" label="序号"/>
<el-table-column
label="未选组合项目" min-width="170"
prop="displayName" align="center"
></el-table-column>
</el-table>
</div>
</div>
<!--中间操作按钮-->
<div style="display: flex;margin: 0px 10px 0px;flex-direction: column;justify-content: center;">
<div>
<el-button class="commonbutton" @click="addAbs(asbItemChoosed,'choosed')" >添加 <i class="el-icon-arrow-right"></i></el-button>
</div>
<div style="margin-top: 10px">
<el-button class="difference" @click="addAbs(asbItemChoosed,'all')">全部添加</el-button>
</div>
<div style="margin-top: 10px">
<el-button class="commonbutton"
@click="delAbs(medicalPackageAsbitemsChoosed,'choosed')">移除 <i class="el-icon-arrow-left"></i
></el-button>
</div>
<div style="margin-top: 10px">
<el-button class="difference" @click="delAbs(medicalPackageAsbitemsChoosed,'all')">全部移除</el-button>
</div>
</div>
<!--已选组合项目-->
<div :style="'display: block; width:' + (window.pageWidth - 310 - 280 - 120 - 45 - 110) + 'px;'">
<div style="height:32px;">
<span style="padding: 5px;font-size: 14px;font-weight: 400;color: #232748;font-family: NotoSansSC-Regular;margin-bottom: 10px;">快速选择</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">
<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="medicalPackageAsbitems" size="small" border
@selection-change="selectRight" highlight-current-row
:height="window.pageHeight < 600 ? 190:Math.floor((window.pageHeight - 230) / 2)"
@row-dblclick="removeAbs"
@row-click="removeAsbItem" ref="tablemedicalPackageAsbitems">
<!--
<el-table-column type="selection"></el-table-column>
-->
<el-table-column type="index" min-width="40" align="center" label="序号"/>
<el-table-column
label="已选组合项目"
min-width="120"
prop="displayName"
></el-table-column>
</el-table>
</div>
</div>
<!--批量操作按钮复制套餐与分组-->
<div style="margin: 190px 0 0 10px;">
<el-button class="commonbutton" @click="btnSave">确定</el-button>
</div>
</div>
</div>
</template>
<script>
import moment from 'moment';
import { mapState } from "vuex";
import { getapi, postapi, putapi } from "@/api/api";
import { arrayExistObj, tcdate, arrayFilter, arrayReduce, deepCopy,dddw } from "../../utlis/proFunc";
export default {
props:['asbitemId'],
data() {
return {
packagePrice:0, //
medicalPackageAsbitems:[], //
medicalPackageAsbitemsChoosed:[], //()
itemTypeIds:[], //
asbItemId:'', //ID
quickAsb:[], //
asbItemChoosed: [], //
startPoint:-1,
PstartPoint:-1,
medicalPackageVisble:false, //
curPackageId:'', //ID
packageAsbitems:[], //
selecteddata: [], //
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('tablemedicalPackageAsbitems')
},
methods: {
moment,dddw,deepCopy,
//
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);
}
});
//
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;
}
});
},
//
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(e) {
this.getAsbItemByItemTypeAll()
//
arrayReduce(this.dict.asbItem, [...this.medicalPackageAsbitems], "id=id");
arrayReduce(this.dict.asbItemQuick, [...this.medicalPackageAsbitems], "id=id");
this.quickAsb = Object.assign(this.dict.asbItemQuick)
if(e){
this.$refs.itemTypeIds.toggleDropDownVisible();
}
},
//
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.medicalPackage',this.medicalPackage)
// console.log('asbItemChoosed', asbItemChoosed)
if(!this.asbitemId){
this.$message.warning({ showClose: true, message: "请先选中组合项目"})
return
}
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
}
//
arrayReduce(asbItemChoosed, this.medicalPackageAsbitems, "id=asbitemId")
for (let i = 0; i < asbItemChoosed.length; i++) {
let pojo = {
asbitemId: asbItemChoosed[i].id,
displayName:asbItemChoosed[i].displayName
}
this.medicalPackageAsbitems.push(pojo)
//this.medicalPackageAsbitems.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.asbitemId){
this.$message.warning({ showClose: true, message: "请先选中组合项目"})
return
}
let lfind = -1
// start
if(oprType && oprType == 'all'){
absForDel = deepCopy(this.medicalPackageAsbitems)
}else if(oprType && oprType == 'choosed'){
absForDel = []
this.medicalPackageAsbitems.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.medicalPackageAsbitems, 'asbitemId', absForDel[i].asbitemId)
if (lfind > -1) this.medicalPackageAsbitems.splice(lfind, 1)
absForDel.splice(i, 1)
i--
continue
}
//
this.getAsbItemByItemType()
},
//
removeAbs(row) {
this.delAbs([row]);
},
//
removeAsbItem(row){
this.medicalPackageAsbitems.forEach((e,index) => {
e.index = index;
return e
});
// shift
if (this.window.shift) {
//
this.medicalPackageAsbitems.forEach(e => {
e.choosed = false;
return e
});
if (this.PstartPoint == - 1) {
this.medicalPackageAsbitems[row.index].choosed = true;
this.PstartPoint = row.index;
return
}
if (this.PstartPoint > row.index) {
for (let i = row.index; i <= this.PstartPoint; i++) {
this.medicalPackageAsbitems[i].choosed = true
}
} else if (this.PstartPoint <= row.index) {
for (let i = this.PstartPoint; i <= row.index; i++) {
this.medicalPackageAsbitems[i].choosed = true
}
}
return
}
// ctrl
if (this.window.ctrl) {
console.log('this.window.ctrl',this.window.ctrl,this.medicalPackageAsbitems)
this.medicalPackageAsbitems[row.index].choosed = true;
this.PstartPoint = row.index;
return
}
// ctrl shift
//
//console.log('')
this.medicalPackageAsbitems.forEach(e => {
e.choosed = false;
return e
});
this.medicalPackageAsbitems[row.index].choosed = true;
this.PstartPoint = row.index;
},
//
btnSave() {
if(!this.asbitemId){
this.$message.warning({ showClose: true, message: "请先选中组合项目"})
return
}
let body = {
asbitemId:this.asbitemId,
mutualExclusionAsbitemIds:[]
}
this.medicalPackageAsbitems.forEach(e =>{
body.mutualExclusionAsbitemIds.push(e.asbitemId)
})
// /api/app/medical-package-detail/many
postapi('/api/app/AsbitemMutualExclusion/UpdateAsbitemMutualExclusion',body
).then(res => {
if(res.code > -1){
this.$message.success({showClose:true,message:'操作成功!'})
}
})
},
//
selectRight(val) {
this.medicalPackageAsbitemsChoosed = val;
},
//
selectLeft(val) {
this.asbItemChoosed = val;
},
//
getHcAsbitems(asbitemId) {
if(asbitemId){
postapi('/api/app/AsbitemMutualExclusion/GetAsbitemMutualExclusionByAsbitemId',{asbitemId}).then((res) => {
if(res.code != -1){
//this.medicalPackageAsbitems = res.data;
this.getAsbItemByItemType()
}
});
}else{
this.medicalPackageAsbitems = []
this.getAsbItemByItemType()
}
},
},
//
watch: {
//
"asbitemId"(newVal, oldVal) {
console.log("asbitemId ",newVal,oldVal);
if (newVal != oldVal) {
this.getHcAsbitems(newVal);
}
},
},
};
</script>
<style scoped>
.box {
margin-top: 5px;
}
</style>

2
src/components/patientRegister/PatientRegisterItem.vue

@ -198,7 +198,7 @@ export default {
oldFormId: '', //使
itemType: [], //
// itemTypeIds: '', //ID
itemTypeIds: '', //ID
// asbItem: [], //
// asbItemAll: [], //

120
src/views/fee-settings/Asbitem.vue

@ -282,106 +282,10 @@
</div>
<!-- 科室改为体检中心 -->
</el-tab-pane>
<!-- 互斥组合项目 -->
<el-tab-pane label="互斥组合项目" name="3">
<div style="display: flex;">
<!--未选组合项目-->
<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>
<HcAsbitem :asbitemId="curRow.id" />
</el-tab-pane>
</el-tabs>
</div>
@ -859,7 +763,12 @@ import {
deletescombinationprojectid,
combination,
} from "@/request/commonapi";
import HcAsbitem from "../../components/common/HcAsbitem.vue";
export default {
components: {
HcAsbitem
},
data() {
return {
guiderules: {
@ -1190,11 +1099,13 @@ export default {
displayName: "不打印",
},
],
};
},
created() {
// this.getlist();
this.gitprojectcategory();
},
mounted() {
this.rowDrop();
@ -1208,11 +1119,11 @@ export default {
},
computed: {
...mapState(["window", "dict"]),
tableHeight(){
return this.window.pageHeight < 600
? 190
: Math.floor((this.window.pageHeight - 260) / 2)
},
// tableHeight(){
// return this.window.pageHeight < 600
// ? 190
// : Math.floor((this.window.pageHeight - 260) / 2)
// },
},
methods: {
dddw,
@ -2128,7 +2039,7 @@ export default {
}
},
rowick(row) {
this.curRow = { ...row };
this.curRow = row;
this.form = { ...row };
// asbitemgetid(row.id).then((res) => {
// this.curRow = { ...res.data };
@ -2180,6 +2091,7 @@ export default {
}
});
},
},
};
</script>

Loading…
Cancel
Save