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.
360 lines
11 KiB
360 lines
11 KiB
<template>
|
|
<div style="display: flex; ">
|
|
<div style="width:230px;">
|
|
<div style="display: flex;">
|
|
<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="parseAsbitem" size="small" ref="example" popper-class="example">
|
|
</el-cascader>
|
|
</div>
|
|
<div class="mainareaBox">
|
|
<el-table :data="asbItems" :height="400" @row-dblclick="dbClickChoosedAsb"
|
|
@selection-change="handleSelectionChange" size="small">
|
|
<el-table-column type="selection" align="center" width="60" />
|
|
<el-table-column prop="displayName" label="未选诊断" width="160" />
|
|
</el-table>
|
|
</div>
|
|
</div>
|
|
|
|
<div style="width:110px;margin-top: 70px;">
|
|
<div class="btnList">
|
|
<el-button type="primary" @click="addAbs(asbItemChoosed)" style="width:90px;">添加 <i class="el-icon-right"></i>
|
|
</el-button>
|
|
</div>
|
|
<div class="btnList">
|
|
<el-button type="primary" @click="delAbs(asbItemOCXChoosed)" style="width:90px;">移除 <i class="el-icon-back"></i>
|
|
</el-button>
|
|
</div>
|
|
</div>
|
|
|
|
<div style="display: block; width:230px;">
|
|
|
|
<div class="disTotal">
|
|
<el-select v-model="asbItemId" placeholder="快速选择诊断" size="small" filterable clearable remote automatic-dropdown
|
|
:remote-method="remoteMethod" @change="quickChoosedAsb" default-first-option ref="asbItemId"
|
|
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 class="mainareaBox">
|
|
<el-table :data="diagnosis.dataAsbitemOCX" height="400" width="100%" @row-dblclick="removeAbs"
|
|
@selection-change="selecteditems" size="small">
|
|
<!-- temporaryselection personnelUnit.nogroupselected-->
|
|
<el-table-column type="selection" align="center" width="60" />
|
|
<el-table-column label="已选诊断" width="160" prop="displayName" />
|
|
</el-table>
|
|
</div>
|
|
</div>
|
|
|
|
<div style="width:100px;margin-top: 70px;">
|
|
<div class="btnList">
|
|
<el-button type="primary" @click="diagnosisTemplateVisble = true" style="width:90px;">复制模板</el-button>
|
|
</div>
|
|
<div class="btnList">
|
|
<el-button type="primary" @click="btnOk('close')" style="width:90px;">确定 <i class="el-icon-check"></i>
|
|
</el-button>
|
|
</div>
|
|
<!-- <div class="btnList"
|
|
style="text-align: center;background-color: rgb(192, 192, 192);border-radius: 5%;padding: 5px 0;">
|
|
已选组合项<br>
|
|
目为空时即<br>
|
|
表示选择所<br>
|
|
有组合项自
|
|
</div> -->
|
|
</div>
|
|
|
|
<!--诊断模板-->
|
|
<el-dialog title="诊断模板" :visible.sync="diagnosisTemplateVisble" width="600px" height="400" :show-close="false"
|
|
:close-on-click-modal="false" :append-to-body="true">
|
|
<el-table :data="dict.diagnosisTemplates" border height="350" row-key="id" size="small" highlight-current-row
|
|
@row-click="rowClick" @row-dblclick="rowDblclick" ref="patientList" style="margin-top: -10px;">
|
|
<el-table-column type="index" width="50" label="序号" align="center" />
|
|
<!--
|
|
<el-table-column prop="id" label="编号" width="300">
|
|
</el-table-column>
|
|
-->
|
|
<el-table-column prop="displayName" width="150" label="诊断模板名称" align="center">
|
|
</el-table-column>
|
|
<el-table-column prop="creatorName" width="70" label="创建者" align="center">
|
|
</el-table-column>
|
|
<el-table-column prop="creationTime" label="创建时间" width="160" align="center">
|
|
<template slot-scope="scope">
|
|
{{ moment(scope.row.creationTime).format("yyyy-MM-DD HH:mm:ss") }}
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column prop="lastModifierName" width="70" label="修改者" align="center">
|
|
</el-table-column>
|
|
<el-table-column prop="lastModificationTime" label="修改时间" width="160" align="center">
|
|
<template slot-scope="scope">
|
|
{{ moment(scope.row.lastModificationTime).format("yyyy-MM-DD HH:mm:ss") }}
|
|
</template>
|
|
</el-table-column>
|
|
|
|
</el-table>
|
|
<span slot="footer" class="dialog-footer">
|
|
<el-button @click="diagnosisTemplateVisble = false" style="width:90px;">取消</el-button>
|
|
<el-button type="primary" @click="copyDiagnosisTemplate" style="width:90px;">确定</el-button>
|
|
</span>
|
|
</el-dialog>
|
|
|
|
</div>
|
|
</template>
|
|
<script>
|
|
|
|
import { mapState, mapActions } from "vuex";
|
|
import moment from "moment";
|
|
import { getapi, postapi, putapi, deletapi } from "@/api/api";
|
|
import { dddw, arrayFilter, arrayReduce, arrayExistObj, deepCopy } from "../../utlis/proFunc";
|
|
|
|
|
|
export default {
|
|
components: {
|
|
|
|
},
|
|
props: ["patientRegisterForm", "payTypeFlag"],
|
|
data() {
|
|
return {
|
|
itemTypeIds: [], //项目类别
|
|
|
|
asbItems: [], //可被选的 asbItem
|
|
asbItemChoosed: [], //勾选的 未选组合项目
|
|
|
|
asbItemOCXChoosed: [], //勾选的 已选组合项目
|
|
|
|
asbItemQuick: [], //可供 快速选择的组合项目
|
|
quickAsb: [], //快速选择当前显的下拉数据
|
|
asbItemId: '', //快速选择的组合项目ID
|
|
|
|
diagnosisTemplateVisble: false,
|
|
diagnosisTemplateId: '', //当前选中套餐ID
|
|
packageAsbitems: [], //套餐中包含的组合项目
|
|
|
|
};
|
|
},
|
|
computed: {
|
|
...mapState(["dict", "customerOrg", "patientRegister", "personnelUnit", "diagnosis"]),
|
|
},
|
|
|
|
created() {
|
|
|
|
},
|
|
|
|
mounted() {
|
|
this.dictInit();
|
|
// this.diagnosis.dataAsbitemOCX=[]
|
|
// this.patientRegister.query.StatisticsOCX = ''
|
|
},
|
|
|
|
methods: {
|
|
moment, dddw,
|
|
|
|
dictInit() {
|
|
getapi('/api/app/diagnosis-template/in-filter')
|
|
.then(res => {
|
|
if (res.code > -1) this.dict.diagnosisTemplates = res.data
|
|
})
|
|
|
|
|
|
//分析可选组合项目,及快速可选组合项目的数据
|
|
this.parseAsbitem();
|
|
|
|
|
|
|
|
},
|
|
|
|
//分析可选组合项目,及快速可选组合项目的数据
|
|
parseAsbitem(v) {
|
|
this.asbItemQuick = deepCopy(this.dict.asbItemAll);
|
|
arrayReduce(this.asbItemQuick, this.diagnosis.dataAsbitemOCX, 'id');
|
|
this.asbItems = deepCopy(this.asbItemQuick);
|
|
if (this.itemTypeIds && this.itemTypeIds.length > 0) {
|
|
this.asbItems = arrayFilter(this.asbItems, 'itemTypeId', this.itemTypeIds[this.itemTypeIds.length - 1])
|
|
}
|
|
if (v) {
|
|
this.$refs.example.toggleDropDownVisible();
|
|
}
|
|
},
|
|
|
|
|
|
|
|
//未选组合项目 勾选情况
|
|
handleSelectionChange(val) {
|
|
// this.selecteddata = val;
|
|
this.asbItemChoosed = val;
|
|
//console.log(this.asbItemChoosed);
|
|
},
|
|
|
|
// 添加组合项目
|
|
///api/app/register-asbitem/many/3fa85f64-5717-4562-b3fc-2c963f66afa6'
|
|
addAbs(asbItemChoosed) {
|
|
|
|
if (asbItemChoosed.length < 1) {
|
|
alert("请选择要添加的诊断")
|
|
return
|
|
}
|
|
arrayReduce(this.asbItems, asbItemChoosed, 'id')
|
|
arrayReduce(this.asbItemQuick, asbItemChoosed, 'id')
|
|
// 选模板时,防止重复添加
|
|
let tempArr = []
|
|
asbItemChoosed.forEach(e => {
|
|
if(arrayExistObj(this.diagnosis.dataAsbitemOCX,'id',e.id) < 0) tempArr.push(e)
|
|
});
|
|
this.diagnosis.dataAsbitemOCX = this.diagnosis.dataAsbitemOCX.concat(tempArr)
|
|
|
|
this.btnOk();
|
|
},
|
|
|
|
//人员已选组合项目 勾选情况
|
|
selecteditems(val) {
|
|
this.asbItemOCXChoosed = val
|
|
},
|
|
|
|
//删除 人员已选中的组合项目
|
|
///api/app/register-asbitem/many?RegisterAsbitemIds=3fa85f64-5717-4562-b3fc-2c963f66afa6
|
|
delAbs(absForDel) {
|
|
if (absForDel.length < 1) {
|
|
alert("请选择要移除的诊断")
|
|
return
|
|
}
|
|
arrayReduce(this.diagnosis.dataAsbitemOCX, absForDel, 'id');
|
|
this.asbItems = this.asbItems.concat(absForDel)
|
|
this.asbItemQuick = this.asbItemQuick.concat(absForDel)
|
|
this.btnOk();
|
|
},
|
|
|
|
//双击删除已选项目
|
|
removeAbs(row) {
|
|
this.delAbs([row]);
|
|
},
|
|
|
|
|
|
//双击选择组合项目
|
|
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]])
|
|
}
|
|
}
|
|
},
|
|
|
|
//快速选择组合项目时,调整可按拼间简码及简称查找
|
|
remoteMethod(keyWords) {
|
|
//console.log('remoteMethod',this.dict.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);
|
|
}
|
|
},
|
|
|
|
//选中诊断模板
|
|
rowClick(row) {
|
|
this.diagnosisTemplateId = row.id
|
|
},
|
|
|
|
//双击选诊断模板,并确认复制
|
|
rowDblclick(row) {
|
|
this.copyDiagnosisTemplate()
|
|
},
|
|
|
|
//复制诊断模板(确认选中诊断模板)
|
|
copyDiagnosisTemplate() {
|
|
if (!this.diagnosisTemplateId) {
|
|
this.$message.warning({ showClose: true, message: "请先选择诊断模板!" })
|
|
return
|
|
}
|
|
|
|
// 获取模板的诊断,并添加到已选
|
|
postapi('/api/app/diagnosistemplatedetail/getdiagnosistemplateindiagnosis', { diagnosisTemplateId: this.diagnosisTemplateId })
|
|
.then(res => {
|
|
if (res.code > -1) {
|
|
this.addAbs(res.data)
|
|
this.diagnosisTemplateVisble = false
|
|
}
|
|
})
|
|
},
|
|
|
|
btnOk(closed) {
|
|
if (this.diagnosis.dataAsbitemOCX && this.diagnosis.dataAsbitemOCX.length > 0) {
|
|
switch (this.diagnosis.dataAsbitemOCX.length) {
|
|
case 1:
|
|
this.patientRegister.query.StatisticsOCX = this.diagnosis.dataAsbitemOCX[0].displayName
|
|
break;
|
|
default:
|
|
this.patientRegister.query.StatisticsOCX = this.diagnosis.dataAsbitemOCX[0].displayName + ',… + ' + this.diagnosis.dataAsbitemOCX.length
|
|
break;
|
|
}
|
|
} else {
|
|
this.patientRegister.query.StatisticsOCX = ''
|
|
}
|
|
|
|
if (closed) {
|
|
this.diagnosis.dialogAsbitemOCX = false
|
|
}
|
|
}
|
|
|
|
},
|
|
|
|
//监听事件
|
|
watch: {
|
|
|
|
},
|
|
};
|
|
</script>
|
|
<style lang="scss" scoped>
|
|
@import "../../assets/css/global.css";
|
|
|
|
.mainareaBox {
|
|
border: 1px solid #000;
|
|
height: 400px;
|
|
margin-top: 5px;
|
|
}
|
|
|
|
.btnList {
|
|
margin-top: 5px;
|
|
margin-left: 10px;
|
|
margin-right: 10px;
|
|
}
|
|
|
|
.disTotal {
|
|
margin-left: 10px;
|
|
}
|
|
</style>
|
|
<style>
|
|
.example .el-cascader-panel .el-radio {
|
|
width: 100%;
|
|
height: 100%;
|
|
z-index: 10;
|
|
position: absolute;
|
|
top: 0px;
|
|
right: 0px;
|
|
}
|
|
|
|
.example .el-cascader-panel .el-radio__input {
|
|
/* margin-top: 10px;
|
|
margin-left: 8px; */
|
|
display: none;
|
|
}
|
|
|
|
.example .el-cascader-panel .el-cascader-node__postfix {
|
|
top: 10px;
|
|
}
|
|
</style>
|