5 changed files with 724 additions and 496 deletions
-
200src/components/patientRegister/PatientRegisterEditGroupBatch.vue
-
472src/components/patientRegister/PatientRegisterEditItemBatch.vue
-
509src/components/patientRegister/PatientRegisterList.vue
-
12src/main.js
-
27src/store/index.js
@ -0,0 +1,200 @@ |
|||
<template> |
|||
<div style="display: flex"> |
|||
<div> |
|||
<div> |
|||
<div> |
|||
批量调整分组只针对单位体检有效,个人体检将忽略此操作;不能调整已收费或已检的项目及已总检的体检人员。 |
|||
</div> |
|||
<div> |
|||
<br /><span>分组</span> |
|||
<el-select |
|||
v-model="groupBatch.customerOrgGroupId" |
|||
placeholder="请选择" |
|||
filterable |
|||
size="small" |
|||
> |
|||
<el-option |
|||
v-for="item in customerOrgGroup" |
|||
:key="item.id" |
|||
:label="item.displayName" |
|||
:value="item.id" |
|||
/> |
|||
</el-select> |
|||
</div> |
|||
<div> |
|||
<br /><el-radio v-model="groupBatch.payTypeFlag" label="0" |
|||
>个人支付</el-radio |
|||
> |
|||
<br /><el-radio v-model="groupBatch.payTypeFlag" label="1" |
|||
>单位支付</el-radio |
|||
> |
|||
<br /><el-radio v-model="groupBatch.payTypeFlag" label="2" |
|||
>免费</el-radio |
|||
> |
|||
</div> |
|||
<div> |
|||
<br /><el-checkbox v-model="groupBatch.isReserveAddAsbitem" |
|||
>保留加做项目(包括不属于原分组的、没有设置分组的)</el-checkbox |
|||
> |
|||
</div> |
|||
</div> |
|||
<div> |
|||
<el-button type="primary" @click="groupBatchHandle">确 定</el-button> |
|||
<el-button @click="dialogWin.PatientRegisterEditGroupBatch = false">取 消</el-button> |
|||
</div> |
|||
</div> |
|||
<!-- 通用进度条 --> |
|||
<el-dialog |
|||
title="数据处理中……" |
|||
:visible.sync="elProgress.display" |
|||
width="600px" |
|||
height="400" |
|||
:show-close="false" |
|||
:close-on-click-modal="false" |
|||
:append-to-body="true" |
|||
> |
|||
<ElProgressOCX /> |
|||
</el-dialog> |
|||
</div> |
|||
</template> |
|||
<script> |
|||
import moment from "moment"; |
|||
import { mapState, mapActions } from "vuex"; |
|||
import { getapi, postapi, putapi, deletapi } from "@/api/api"; |
|||
import Sortable from "sortablejs"; |
|||
import FileSaver from 'file-saver'; |
|||
import html2canvas from 'html2canvas'; |
|||
|
|||
import { |
|||
dddw, |
|||
objCopy, |
|||
arrayReduce, |
|||
arrayExistObj, |
|||
deepCopy, |
|||
} from "../../utlis/proFunc"; |
|||
|
|||
import ElProgressOCX from "../report/ElProgressOCX.vue"; |
|||
|
|||
export default { |
|||
components: { |
|||
ElProgressOCX, |
|||
}, |
|||
props:["multipleSelection"], |
|||
data() { |
|||
return { |
|||
customerOrgGroup:[], //单位分组 |
|||
groupBatch: { |
|||
patientRegisterId: null, |
|||
customerOrgGroupId: null, |
|||
payTypeFlag: "1", //0:个人付费,1:单位付费 2:免费 |
|||
isReserveAddAsbitem: true, //是否保留加做项目 |
|||
}, |
|||
|
|||
}; |
|||
}, |
|||
|
|||
created() { |
|||
|
|||
}, |
|||
|
|||
//挂载完成 |
|||
mounted() { |
|||
|
|||
}, |
|||
computed: { |
|||
...mapState([ |
|||
"window", |
|||
"dataTransOpts", |
|||
"dialogWin", |
|||
"dict", |
|||
"elProgress", |
|||
"patientRegister", |
|||
"customerOrg", |
|||
]), |
|||
}, |
|||
methods: { |
|||
moment,dddw,deepCopy, |
|||
|
|||
//获取单位分组 /api/app/customer-org-group/in-customer-org-id/3a0c0444-d7a0-871f-4074-19faf1655caf |
|||
getCustomerOrgGroup(customerOrgId) { |
|||
getapi( |
|||
`/api/app/customer-org-group/in-customer-org-id/${customerOrgId}` |
|||
).then((res) => { |
|||
console.log("getCustomerOrgGroup", res.data); |
|||
if (res.code == 1) { |
|||
this.customerOrgGroup = res.data; |
|||
} |
|||
}); |
|||
}, |
|||
|
|||
//批量更新分组处理(确定) |
|||
async groupBatchHandle() { |
|||
let groupBatch = { patientRegisterId: null, ...this.groupBatch }; |
|||
|
|||
if (groupBatch.isReserveAddAsbitem) { |
|||
groupBatch.isReserveAddAsbitem = "Y"; |
|||
} else { |
|||
groupBatch.isReserveAddAsbitem = "N"; |
|||
} |
|||
console.log("groupBatch", groupBatch); |
|||
if (!groupBatch.customerOrgGroupId) { |
|||
this.$message.warning("请选择分组"); |
|||
return; |
|||
} |
|||
|
|||
this.elProgress.display = true; |
|||
this.elProgress.percentage = 0; |
|||
for (let i = 0; i < this.multipleSelection.length; i++) { |
|||
groupBatch.patientRegisterId = this.multipleSelection[i].id; |
|||
try { |
|||
await postapi( |
|||
"/api/app/patientregister/updatepatientregistercustomerorggroup", |
|||
groupBatch |
|||
); |
|||
} catch (error) { |
|||
console.log(error); |
|||
} |
|||
this.elProgress.percentage = Math.floor( |
|||
((i + 1) * 100) / this.multipleSelection.length |
|||
); |
|||
} |
|||
console.log("操作成功!"); |
|||
this.dialogWin.PatientRegisterEditGroupBatch = false |
|||
// 操作成功后,刷新列表 |
|||
this.patientRegister.query.times++ |
|||
}, |
|||
}, |
|||
|
|||
//监听事件 |
|||
watch: { |
|||
"dataTransOpts.refresh.asbitem.M":{ |
|||
immediate: true, // 立即执行 |
|||
// deep: true, // 深度监听复杂类型内变化 |
|||
handler(newVal,oldVal){ |
|||
console.log(`watch: 刷新单位分组 newVal: ${newVal} oldVal:${oldVal}`) |
|||
this.getCustomerOrgGroup(this.multipleSelection[0].customerOrgParentId) |
|||
} |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
<style scoped> |
|||
@import "../../assets/css/global_input.css"; |
|||
@import "../../assets/css/global_table.css"; |
|||
@import "../../assets/css/global.css"; |
|||
|
|||
|
|||
.box { |
|||
display: flex; |
|||
} |
|||
|
|||
.listBtn { |
|||
margin-top: 5px; |
|||
text-align: center; |
|||
} |
|||
|
|||
.btnClass { |
|||
width: 100px; |
|||
} |
|||
|
|||
</style> |
|||
@ -0,0 +1,472 @@ |
|||
<template> |
|||
<div style="display: flex"> |
|||
<div> |
|||
<div> |
|||
批量调整分组只针对单位体检有效,个人体检将忽略此操作;不能调整已收费或已检的项目及已总检的体检人员。 |
|||
</div> |
|||
<div> |
|||
<br /><el-radio v-model="asbitemBatch.operate" label="add" |
|||
>增加项目</el-radio |
|||
> |
|||
<el-radio v-model="asbitemBatch.operate" label="del" |
|||
>删除项目</el-radio |
|||
> |
|||
</div> |
|||
<div> |
|||
<br /><el-checkbox |
|||
v-model="asbitemBatch.isDeleteGroup" |
|||
:disabled="asbitemBatch.operate == 'add' ? true : false" |
|||
>如果删除项目属于分组则删除体检记录信息的分组设置</el-checkbox |
|||
> |
|||
</div> |
|||
<div> |
|||
<br /><span>直接录入</span> |
|||
<el-select |
|||
v-model="asbitemBatch.asbItemId" |
|||
placeholder="快速选择组合项目" |
|||
size="small" highlight-current-row |
|||
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 style="display: flex; margin-top: 2px"> |
|||
<div style="width: 480px"> |
|||
<el-table |
|||
:data="asbitemBatch.asbitemsTemp" |
|||
height="240" |
|||
width="100%" |
|||
show-summary |
|||
@row-dblclick="removeAbs" |
|||
size="small" highlight-current-row |
|||
@row-click="rowClickaAbitemCurr" |
|||
border |
|||
> |
|||
<el-table-column |
|||
label="组合项目" |
|||
width="150" |
|||
prop="asbitemName" |
|||
/> |
|||
<el-table-column label="数量" prop="amount" width="60"> |
|||
<template slot-scope="scope"> |
|||
<el-input |
|||
type="number" |
|||
v-model="scope.row.amount" |
|||
size="small" |
|||
:disabled="asbitemBatch.operate == 'del' ? true : false" |
|||
/> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="实收价格" prop="chargePrice" width="90"> |
|||
<template slot-scope="scope"> |
|||
<el-input |
|||
type="number" |
|||
v-model="scope.row.chargePrice" |
|||
size="small" |
|||
:disabled="asbitemBatch.operate == 'del' ? true : false" |
|||
/> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="支付方式" prop="payTypeFlag" width="120"> |
|||
<template slot-scope="scope"> |
|||
<el-select |
|||
v-model="scope.row.payTypeFlag" |
|||
size="small" |
|||
:disabled="asbitemBatch.operate == 'del' ? true : false" |
|||
> |
|||
<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> |
|||
</div> |
|||
<div style="display: block; width: 110px; margin-left: 10px"> |
|||
<div style="margin-top: 5px"> |
|||
<el-button |
|||
type="danger" |
|||
@click="asbitemDel(1)" |
|||
style="width: 100px" |
|||
>删除</el-button |
|||
> |
|||
</div> |
|||
<div style="margin-top: 5px"> |
|||
<el-button |
|||
type="danger" |
|||
@click="asbitemDel(0)" |
|||
style="width: 100px" |
|||
>删除全部</el-button |
|||
> |
|||
</div> |
|||
<div style="margin-top: 5px"> |
|||
<el-button |
|||
type="primary" |
|||
@click="changePayTypeFlag('0')" |
|||
style="width: 100px" |
|||
>全个人支付</el-button |
|||
> |
|||
</div> |
|||
<div style="margin-top: 5px"> |
|||
<el-button |
|||
type="primary" |
|||
@click="changePayTypeFlag('1')" |
|||
style="width: 100px" |
|||
>全单位支付</el-button |
|||
> |
|||
</div> |
|||
<div style="margin-top: 5px"> |
|||
<el-button |
|||
type="primary" |
|||
@click="changePayTypeFlag('2')" |
|||
style="width: 100px" |
|||
>全赠送</el-button |
|||
> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div style="margin-top: 5px;margin-left: 460px;"> |
|||
<el-button type="primary" @click="asbitemBatchHandle">确 定</el-button> |
|||
<el-button @click="dialogWin.PatientRegisterEditItemBatch = false">取 消</el-button> |
|||
</div> |
|||
</div> |
|||
|
|||
<!-- 通用进度条 --> |
|||
<el-dialog |
|||
title="数据处理中……" |
|||
:visible.sync="elProgress.display" |
|||
width="600px" |
|||
height="400" |
|||
:show-close="false" |
|||
:close-on-click-modal="false" |
|||
:append-to-body="true" |
|||
> |
|||
<ElProgressOCX /> |
|||
</el-dialog> |
|||
</div> |
|||
</template> |
|||
<script> |
|||
import moment from "moment"; |
|||
import { mapState, mapActions } from "vuex"; |
|||
import { getapi, postapi, putapi, deletapi } from "@/api/api"; |
|||
|
|||
|
|||
import { |
|||
dddw, |
|||
arrayReduce, |
|||
arrayExistObj, |
|||
deepCopy, |
|||
} from "../../utlis/proFunc"; |
|||
|
|||
|
|||
|
|||
import ElProgressOCX from "../report/ElProgressOCX.vue"; |
|||
|
|||
export default { |
|||
components: { |
|||
ElProgressOCX, |
|||
}, |
|||
props:["multipleSelection"], |
|||
data() { |
|||
return { |
|||
asbitemBatch: { |
|||
operate: "add", |
|||
isDeleteGroup: false, |
|||
asbItemId: "", |
|||
asbitemsTemp: [], //删除或增加项目临时用 |
|||
asbitemCurr: {}, //当前选中要删除的项目(批量调整) |
|||
}, |
|||
|
|||
asbItemQuick:[], //快速选择未过滤前全部项目 |
|||
quickAsb: [], //可供快速选择的组合项目 |
|||
|
|||
}; |
|||
}, |
|||
|
|||
// 组件创建完成 |
|||
created() { |
|||
|
|||
}, |
|||
|
|||
//挂载完成 |
|||
mounted() { |
|||
// 初始化数据,如:在用组合项目 |
|||
// this.dictInit() |
|||
}, |
|||
|
|||
computed: { |
|||
...mapState([ |
|||
"window", |
|||
"dataTransOpts", |
|||
"dialogWin", |
|||
"dict", |
|||
"elProgress", |
|||
"patientRegister", |
|||
"customerOrg", |
|||
]), |
|||
|
|||
}, |
|||
methods: { |
|||
moment,dddw,deepCopy, |
|||
|
|||
//快速查询项目 |
|||
filterMethod(keyWords) { |
|||
//console.log('filterMethod',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); |
|||
} |
|||
}, |
|||
|
|||
//快速选择项目 |
|||
quickChoosedAsb(v) { |
|||
//过滤已选的的组合项目 |
|||
let lfind = -1; |
|||
if (v) { |
|||
lfind = arrayExistObj(this.quickAsb, "id", v); |
|||
if (lfind > -1) { |
|||
this.asbitemBatch.asbitemsTemp.push({ |
|||
asbitemId: v, |
|||
asbitemName: this.quickAsb[lfind].displayName, //仅作显示用 |
|||
patientRegisterId: null, |
|||
standardPrice: this.quickAsb[lfind].price, |
|||
chargePrice: this.quickAsb[lfind].price, |
|||
payTypeFlag: "1", //默认单位支付 |
|||
isCharge: "N", |
|||
amount: 1, |
|||
}); |
|||
this.quickAsb.splice(lfind, 1); |
|||
arrayReduce(this.asbItemQuick, { id: v }, "id=id"); |
|||
} |
|||
} |
|||
//console.log(v, this.asbitemBatch.asbitemsTemp); |
|||
this.$nextTick(() => { |
|||
this.$refs['quickAsbOCX'].blur(); //total asbItemId |
|||
this.asbItemId = '' |
|||
this.quickAsb = deepCopy(this.asbItemQuick) |
|||
this.$refs['quickAsbOCX'].focus(); //total asbItemId |
|||
}); |
|||
|
|||
}, |
|||
|
|||
//删除临时显示的组合项目 |
|||
removeAbs(row) { |
|||
let lfind = arrayExistObj( |
|||
this.asbitemBatch.asbitemsTemp, |
|||
"asbitemId", |
|||
row.asbitemId |
|||
); |
|||
if (lfind > -1) this.asbitemBatch.asbitemsTemp.splice(lfind, 1); |
|||
}, |
|||
|
|||
rowClickaAbitemCurr(row) { |
|||
this.asbitemBatch.asbitemCurr = row; |
|||
}, |
|||
|
|||
btnRemoveAbs() { |
|||
if (!this.asbitemBatch.asbitemCurr.asbitemId) { |
|||
this.$message.warning("请选择要删除的组合项目!"); |
|||
return; |
|||
} |
|||
this.removeAbs(this.asbitemBatch.asbitemCurr); |
|||
this.asbitemBatch.asbitemCurr.asbitemId = null; |
|||
}, |
|||
|
|||
removeAllAbs() { |
|||
this.asbitemBatch.asbitemsTemp = []; |
|||
}, |
|||
|
|||
asbitemDel(type) { |
|||
//typ==0 为批量删除 |
|||
if (Number(type) == 0) { |
|||
this.asbitemBatch.asbitemsTemp = []; |
|||
} else { |
|||
if (!this.asbitemBatch.asbitemCurr.asbitemId) { |
|||
this.$message.warning("请选中要删除的项目!"); |
|||
return; |
|||
} |
|||
//console.log(this.asbitemBatch.asbitemsTemp,this.asbitemBatch.asbitemCurr) |
|||
let lfind = arrayExistObj( |
|||
this.asbitemBatch.asbitemsTemp, |
|||
"asbitemId", |
|||
this.asbitemBatch.asbitemCurr.asbitemId |
|||
); |
|||
if (lfind > -1) { |
|||
this.asbitemBatch.asbitemsTemp.splice(lfind, 1); |
|||
this.asbitemBatch.asbitemCurr.asbitemId = null; |
|||
} |
|||
//console.log(lfind); |
|||
} |
|||
}, |
|||
|
|||
//批量调整支付方式 |
|||
changePayTypeFlag(flag) { |
|||
this.asbitemBatch.asbitemsTemp.forEach((e) => { |
|||
e.payTypeFlag = flag; |
|||
return e; |
|||
}); |
|||
}, |
|||
|
|||
//批量调整项目(确定按钮) |
|||
async asbitemBatchHandle() { |
|||
let msg = "", |
|||
body = {}; |
|||
if (this.asbitemBatch.asbitemsTemp.length == 0) { |
|||
this.$message.warning("没有选择组合项目,不可执行此操作!"); |
|||
return; |
|||
} |
|||
if (this.asbitemBatch.operate == "add") { |
|||
this.asbitemBatch.asbitemsTemp.forEach((e, index) => { |
|||
if (!e.amount || !e.chargePrice) { |
|||
msg = "第 " + (index + 1) + " 行,未输入数量或价格!"; |
|||
} |
|||
}); |
|||
if (msg) { |
|||
this.$message.warning(msg); |
|||
return; |
|||
} |
|||
|
|||
let createRegisterAsbitemDtos = deepCopy( |
|||
this.asbitemBatch.asbitemsTemp |
|||
); |
|||
|
|||
createRegisterAsbitemDtos.forEach((e) => { |
|||
delete e.asbitemName; |
|||
return e; |
|||
}); |
|||
this.elProgress.display = true; |
|||
this.elProgress.percentage = 0; |
|||
for (let i = 0; i < this.multipleSelection.length; i++) { |
|||
createRegisterAsbitemDtos.forEach((e) => { |
|||
e.patientRegisterId = this.multipleSelection[i].id; |
|||
return e; |
|||
}); |
|||
body = { |
|||
organizationUnitId: this.multipleSelection[i].organizationUnitId, |
|||
createRegisterAsbitemDtos, |
|||
}; |
|||
try { |
|||
await postapi( |
|||
"/api/app/registerasbitem/createregisterasbitemincustomerorgmany", |
|||
body |
|||
); |
|||
} catch (error) { |
|||
console.log("批量增加项目错误,原因:", error); |
|||
} |
|||
this.elProgress.percentage = Math.floor( |
|||
((i + 1) * 100) / this.multipleSelection.length |
|||
); |
|||
} |
|||
} else { |
|||
// { |
|||
// isDeleteGroup: 'N', |
|||
// patientRegisterId: null, |
|||
// asbitemIds: [], |
|||
// } |
|||
let asbitemIds = []; |
|||
if (this.asbitemBatch.isDeleteGroup) { |
|||
body.isDeleteGroup = "Y"; |
|||
} else { |
|||
body.isDeleteGroup = "N"; |
|||
} |
|||
this.elProgress.display = true; |
|||
this.elProgress.percentage = 0; |
|||
for (let i = 0; i < this.multipleSelection.length; i++) { |
|||
this.asbitemBatch.asbitemsTemp.forEach((e) => { |
|||
asbitemIds.push(e.asbitemId); |
|||
}); |
|||
|
|||
body.patientRegisterId = this.multipleSelection[i].id; |
|||
body.asbitemIds = asbitemIds; |
|||
|
|||
try { |
|||
await postapi( |
|||
"/api/app/registerasbitem/deleteregisterasbitemincustomerorgmany", |
|||
body |
|||
); |
|||
} catch (error) { |
|||
console.log("批量删除项目错误,原因:", error); |
|||
} |
|||
this.elProgress.percentage = Math.floor( |
|||
((i + 1) * 100) / this.multipleSelection.length |
|||
); |
|||
} |
|||
} |
|||
|
|||
console.log("操作成功!"); |
|||
this.dialogWin.PatientRegisterEditItemBatch = false; |
|||
// 操作成功后,刷新列表 |
|||
this.patientRegister.query.times++ |
|||
}, |
|||
|
|||
// 初始化字典信息 |
|||
dictInit(){ |
|||
|
|||
// 获取在用的组合项目 |
|||
postapi('/api/app/asbitem/getasbitemlist',{isFilterActive:'Y'}).then(res =>{ |
|||
if(res.code != -1){ |
|||
this.asbItemQuick = res.data |
|||
this.quickAsb = res.data |
|||
} |
|||
}); |
|||
}, |
|||
|
|||
}, |
|||
|
|||
//监听事件 |
|||
watch: { |
|||
"dataTransOpts.refresh.asbitem.M":{ |
|||
immediate: true, // 立即执行 |
|||
// deep: true, // 深度监听复杂类型内变化 |
|||
handler(newVal,oldVal){ |
|||
console.log(`watch: 刷新在用组合项目 newVal: ${newVal} oldVal:${oldVal}`) |
|||
this.dictInit() |
|||
} |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
<style scoped> |
|||
@import "../../assets/css/global_input.css"; |
|||
@import "../../assets/css/global_table.css"; |
|||
@import "../../assets/css/global.css"; |
|||
|
|||
|
|||
.box { |
|||
display: flex; |
|||
} |
|||
|
|||
.listBtn { |
|||
margin-top: 5px; |
|||
text-align: center; |
|||
} |
|||
|
|||
.btnClass { |
|||
width: 100px; |
|||
} |
|||
|
|||
</style> |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue