7 changed files with 615 additions and 1042 deletions
-
6src/router/index.js
-
7src/views/Home.vue
-
573src/views/customerReport/combinationDetails.vue
-
28src/views/customerReport/diseaseStatistics.vue
-
49src/views/customerReport/personnelPositive.vue
-
212src/views/customerReport/positiveResultsList.vue
-
782src/views/workload/deskwork.vue
@ -0,0 +1,573 @@ |
|||||
|
<template> |
||||
|
<div> |
||||
|
<el-card> |
||||
|
<div slot="header">组合项目检查状态</div> |
||||
|
<div :style="'display: block; width:' + (window.pageWidth - 45) + 'px;'"> |
||||
|
<div style="display: flex; flex-wrap: wrap; height: 35px"> |
||||
|
<div class="query"> |
||||
|
<span>体检单位:</span> |
||||
|
<el-input |
||||
|
placeholder="请选择体检单位" |
||||
|
v-model="patientRegister.query.cusOrgOCX" |
||||
|
style="width: 300px" |
||||
|
size="small" |
||||
|
disabled |
||||
|
> |
||||
|
<el-button |
||||
|
slot="append" |
||||
|
icon="el-icon-search" |
||||
|
@click="report.dialogCusOrgOCX = true" |
||||
|
style="font-size: 20px" |
||||
|
></el-button> |
||||
|
</el-input> |
||||
|
</div> |
||||
|
<div class="query"> |
||||
|
<span>组合项目:</span> |
||||
|
<el-input |
||||
|
placeholder="请选择组合项目" |
||||
|
v-model="patientRegister.query.asbitemOCX" |
||||
|
style="width: 240px" |
||||
|
size="small" |
||||
|
disabled |
||||
|
> |
||||
|
<el-button |
||||
|
slot="append" |
||||
|
icon="el-icon-search" |
||||
|
@click="report.dialogAsbitemOCX = true" |
||||
|
style="font-size: 20px" |
||||
|
></el-button> |
||||
|
</el-input> |
||||
|
</div> |
||||
|
<!-- <div class="query"> |
||||
|
<span>检查状态:</span> |
||||
|
<el-select |
||||
|
v-model="patientRegister.query.checkCompleteFlag" |
||||
|
placeholder="请选择" |
||||
|
clearable |
||||
|
style="width: 80px" |
||||
|
size="small" |
||||
|
> |
||||
|
<el-option |
||||
|
v-for="item in dict.checkCompleteFlag" |
||||
|
:key="item.id" |
||||
|
:label="item.displayName" |
||||
|
:value="item.id" |
||||
|
> |
||||
|
</el-option> |
||||
|
</el-select> |
||||
|
</div> --> |
||||
|
<div class="query"> |
||||
|
<el-button @click="btnQuery" size="small" |
||||
|
>查询</el-button |
||||
|
> |
||||
|
</div> |
||||
|
<div class="query"> |
||||
|
<el-button @click="handleExport" size="small">导出excel</el-button> |
||||
|
</div> |
||||
|
<div class="query"> |
||||
|
<el-button @click="onPrint" size="small">打印</el-button> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div ref="imageDom"> |
||||
|
<el-table |
||||
|
:data="dataList" |
||||
|
border |
||||
|
:height="window.pageHeight < 600 ? 415 : window.pageHeight - 185" |
||||
|
row-key="id" |
||||
|
highlight-current-row |
||||
|
ref="dataList" |
||||
|
:row-class-name="tableRowClassName" |
||||
|
id="table" |
||||
|
> |
||||
|
<el-table-column prop="patientName" label="姓名"></el-table-column> |
||||
|
<el-table-column prop="sexName" label="性别"></el-table-column> |
||||
|
<el-table-column prop="age" label="年龄"></el-table-column> |
||||
|
<el-table-column |
||||
|
prop="medicalTimes" |
||||
|
label="体检次数" |
||||
|
></el-table-column> |
||||
|
<el-table-column |
||||
|
v-for="(item, index) in columnData" |
||||
|
:key="index" |
||||
|
:prop="item.prop" |
||||
|
:label="item.lable" |
||||
|
align="left" |
||||
|
> |
||||
|
</el-table-column> |
||||
|
</el-table> |
||||
|
</div> |
||||
|
</div> |
||||
|
</el-card> |
||||
|
<!--通用选单位、体检次数、分组的控件--> |
||||
|
<el-dialog |
||||
|
title="体检单位选择" |
||||
|
:visible.sync="report.dialogCusOrgOCX" |
||||
|
:close-on-click-modal="false" |
||||
|
width="840px" |
||||
|
height="600px" |
||||
|
> |
||||
|
<CusOrgOCX /> |
||||
|
</el-dialog> |
||||
|
<!--通用选组合项目的控件--> |
||||
|
<el-dialog |
||||
|
title="组合项目选择" |
||||
|
:visible.sync="report.dialogAsbitemOCX" |
||||
|
:close-on-click-modal="false" |
||||
|
width="700px" |
||||
|
height="600px" |
||||
|
> |
||||
|
<AsbitemOCX /> |
||||
|
</el-dialog> |
||||
|
</div> |
||||
|
</template> |
||||
|
<script> |
||||
|
import moment from "moment"; |
||||
|
import { mapState, mapActions } from "vuex"; |
||||
|
import { getapi, postapi, putapi, deletapi } from "@/api/api"; |
||||
|
import { |
||||
|
dddw, |
||||
|
objCopy, |
||||
|
arrayReduce, |
||||
|
arrayExistObj, |
||||
|
tcdate, |
||||
|
} from "@/utlis/proFunc"; |
||||
|
import CusOrgOCX from "../../components/report/CusOrgOCX.vue"; |
||||
|
import AsbitemOCX from "../../components/report/AsbitemOCX.vue"; |
||||
|
import { exportToExcel } from "../../utlis/Export2Excel"; |
||||
|
import html2canvas from "html2canvas"; |
||||
|
import printJs from "print-js"; |
||||
|
export default { |
||||
|
components: { |
||||
|
CusOrgOCX, |
||||
|
AsbitemOCX, |
||||
|
}, |
||||
|
data() { |
||||
|
return { |
||||
|
dataList: [], //列表数据 |
||||
|
columnData: [], |
||||
|
flag: true, |
||||
|
}; |
||||
|
}, |
||||
|
|
||||
|
created() { |
||||
|
this.dictInit(); |
||||
|
}, |
||||
|
|
||||
|
//挂载完成 |
||||
|
mounted() { |
||||
|
// this.btnQuery(); |
||||
|
}, |
||||
|
|
||||
|
computed: { |
||||
|
...mapState(["window", "dict", "patientRegister", "report"]), |
||||
|
}, |
||||
|
|
||||
|
methods: { |
||||
|
moment, |
||||
|
dddw, |
||||
|
//数据初始化 |
||||
|
dictInit() { |
||||
|
//性别 |
||||
|
// getapi("/api/app/sex").then((res) => { |
||||
|
// if (res.code == 1) { |
||||
|
// this.dict.sex = res.data; |
||||
|
// } |
||||
|
// }); |
||||
|
|
||||
|
//体检中心 |
||||
|
getapi("/api/app/organization-units/organization-unit-by-is-peis").then( |
||||
|
(res) => { |
||||
|
if (res.code == 1) { |
||||
|
this.dict.organization = res.data; |
||||
|
} |
||||
|
} |
||||
|
); |
||||
|
|
||||
|
//体检单位树 |
||||
|
getapi("/api/app/customerorg/getbycodeall").then((res) => { |
||||
|
if (res.code == 1) { |
||||
|
this.patientRegister.customerOrgTreeAll = res.data; |
||||
|
tcdate(this.patientRegister.customerOrgTreeAll); |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
// //体检类别 |
||||
|
getapi("/api/app/medical-type/in-filter").then((res) => { |
||||
|
if (res.code == 1) { |
||||
|
this.dict.medicalType = res.data.items; |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
// //人员类别 |
||||
|
// getapi("/api/app/personnel-type/in-filter").then((res) => { |
||||
|
// if (res.code == 1) { |
||||
|
// this.dict.personnelType = res.data.items; |
||||
|
// } |
||||
|
// }); |
||||
|
|
||||
|
// //婚姻状况 |
||||
|
// getapi("/api/app/marital-statuses").then((res) => { |
||||
|
// if (res.code == 1) { |
||||
|
// this.dict.maritalStatus = res.data.items; |
||||
|
// } |
||||
|
// }); |
||||
|
|
||||
|
// //性激素期 |
||||
|
// getapi("/api/app/sex-hormone-term/in-filter").then((res) => { |
||||
|
// if (res.code == 1) { |
||||
|
// this.dict.sexHormoneTerm = res.data.items; |
||||
|
// } |
||||
|
// }); |
||||
|
|
||||
|
// //民族 |
||||
|
// getapi("/api/app/nation/in-filter").then((res) => { |
||||
|
// if (res.code == 1) { |
||||
|
// this.dict.nation = res.data.items; |
||||
|
// } |
||||
|
// }); |
||||
|
|
||||
|
// //籍惯 ,出生地 |
||||
|
// getapi("/api/app/birth-place/in-filter").then((res) => { |
||||
|
// if (res.code == 1) { |
||||
|
// this.dict.birthPlace = res.data.items; |
||||
|
// } |
||||
|
// }); |
||||
|
|
||||
|
// //套餐 |
||||
|
// postapi("/api/app/medicalpackage/getmedicalpackagelist", {}).then( |
||||
|
// (res) => { |
||||
|
// if (res.code == 1) { |
||||
|
// this.dict.medicalPackage = res.data; |
||||
|
// } |
||||
|
// } |
||||
|
// ); |
||||
|
|
||||
|
// //分组,所有分组,不限单位,不限次数 |
||||
|
// getapi("/api/app/customer-org-group").then((res) => { |
||||
|
// if (res.code == 1) { |
||||
|
// this.dict.customerOrgGroupAll = res.data.items; |
||||
|
// } |
||||
|
// }); |
||||
|
|
||||
|
// //支付方式 |
||||
|
// getapi("/api/app/pay-mode").then((res) => { |
||||
|
// if (res.code == 1) { |
||||
|
// this.dict.payMode = res.data; |
||||
|
// } |
||||
|
// }); |
||||
|
|
||||
|
// //体检类别 树结构 |
||||
|
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/getasbitemlist", {}).then((res) => { |
||||
|
// if (res.code == 1) { |
||||
|
// this.dict.asbItemAll = res.data; |
||||
|
// } |
||||
|
// }); |
||||
|
|
||||
|
console.log("dict", this.dict); |
||||
|
}, |
||||
|
|
||||
|
tableRowClassName({ row, rowIndex }) { |
||||
|
switch (row.completeFlag) { |
||||
|
case "0": |
||||
|
return "danger"; |
||||
|
case "2": |
||||
|
return "info"; |
||||
|
default: |
||||
|
return ""; |
||||
|
} |
||||
|
}, |
||||
|
onPrint() { |
||||
|
this.flag = false; |
||||
|
this.$nextTick(() => { |
||||
|
let width = this.$refs.imageDom.style.width; |
||||
|
let cloneDom = this.$refs.imageDom.cloneNode(true); |
||||
|
let imageDom = this.$refs.imageDom; |
||||
|
cloneDom.style.position = "absolute"; |
||||
|
cloneDom.style.top = "0px"; |
||||
|
cloneDom.style.zIndex = "-1"; |
||||
|
cloneDom.style.width = width; |
||||
|
console.log(cloneDom); |
||||
|
imageDom.appendChild(cloneDom); |
||||
|
html2canvas(cloneDom).then((canvas) => { |
||||
|
// 转成图片,生成图片地址 |
||||
|
const url = canvas.toDataURL("image/png"); |
||||
|
printJs({ |
||||
|
printable: url, |
||||
|
type: "image", |
||||
|
documentTitle: "", // 标题 |
||||
|
style: "@page{size:auto;margin: 0cm 1cm 0cm 1cm;}", // 去除页眉页脚 |
||||
|
}); |
||||
|
}); |
||||
|
cloneDom.style.display = "none"; |
||||
|
this.flag = true; |
||||
|
}); |
||||
|
}, |
||||
|
handleExport() { |
||||
|
exportToExcel("#table", "组合项目结果明细", false); |
||||
|
}, |
||||
|
//查询 |
||||
|
btnQuery() { |
||||
|
let body = {}, |
||||
|
customerOrgs = [], |
||||
|
asbitemIds = []; |
||||
|
// { |
||||
|
// "customerOrgs": [ |
||||
|
// { |
||||
|
// "customerOrgId": "3fa85f64-5717-4562-b3fc-2c963f66afa6", |
||||
|
// "customerOrgRegisterId": "3fa85f64-5717-4562-b3fc-2c963f66afa6", |
||||
|
// "customerOrgGroupId": [ |
||||
|
// "3fa85f64-5717-4562-b3fc-2c963f66afa6" |
||||
|
// ], |
||||
|
// "dateType": "string", |
||||
|
// "startDate": "string", |
||||
|
// "endDate": "string" |
||||
|
// } |
||||
|
// ], |
||||
|
// "asbitemIds": [ |
||||
|
// "3fa85f64-5717-4562-b3fc-2c963f66afa6" |
||||
|
// ], |
||||
|
// "completeFlag": "string" |
||||
|
// } |
||||
|
|
||||
|
if (this.report.dataCusOrgOCX.length > 0) { |
||||
|
this.report.dataCusOrgOCX.forEach((e) => { |
||||
|
let rd = { |
||||
|
startDate: moment(e.startDate).format("yyyy-MM-DD"), |
||||
|
endDate: moment(e.endDate).format("yyyy-MM-DD"), |
||||
|
dateType: |
||||
|
e.dateType == "summaryDate" |
||||
|
? "3" |
||||
|
: e.dateType == "medicalStartDate" |
||||
|
? "2" |
||||
|
: "1", |
||||
|
}; |
||||
|
|
||||
|
if (e.customerOrgId) { |
||||
|
rd.customerOrgId = e.customerOrgId; |
||||
|
if (e.customerOrgId == this.dict.personOrgId) { |
||||
|
rd.customerOrgRegisterId = null; |
||||
|
rd.customerOrgGroupId = []; |
||||
|
} else { |
||||
|
rd.customerOrgRegisterId = e.customerOrgRegister.id; |
||||
|
rd.customerOrgGroupId = e.customerOrgGroupIds; |
||||
|
} |
||||
|
} |
||||
|
customerOrgs.push(rd); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
if (this.report.dataAsbitemOCX.length > 0) { |
||||
|
this.report.dataAsbitemOCX.forEach((e) => { |
||||
|
asbitemIds.push(e.id); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
body.customerOrgs = customerOrgs; |
||||
|
body.asbitemId = asbitemIds; |
||||
|
|
||||
|
// if (this.patientRegister.query.checkCompleteFlag) |
||||
|
// body.completeFlag = this.patientRegister.query.checkCompleteFlag; |
||||
|
|
||||
|
//console.log('/api/app/peisreport/getpatientregisterreport',body) |
||||
|
|
||||
|
postapi("/api/customerreport/getasbitemspecificresultreport", body).then( |
||||
|
(res) => { |
||||
|
if (res.code != -1) { |
||||
|
let bodys= res.data |
||||
|
// let bodys = [ |
||||
|
// { |
||||
|
// medicalTimes: 0, |
||||
|
// patientName: "小王", |
||||
|
// sexName: "string", |
||||
|
// age: 0, |
||||
|
// registerChecks: [ |
||||
|
// { |
||||
|
// registerCheckId: "3fa85f64-5717-4562-b3fc-2c963f66afa6", |
||||
|
// checkName: "血常规", |
||||
|
// registerCheckItems: [ |
||||
|
// { |
||||
|
// itemName: "血型", |
||||
|
// result: "O", |
||||
|
// }, |
||||
|
// { |
||||
|
// itemName: "ct", |
||||
|
// result: "良好", |
||||
|
// }, |
||||
|
// ], |
||||
|
// registerCheckSummarys: "血常规优秀", |
||||
|
// }, |
||||
|
// { |
||||
|
// registerCheckId: "3fa85f64-5717-4562-b3fc-2c963f66afa5", |
||||
|
// checkName: "乙肝三项", |
||||
|
// registerCheckItems: [ |
||||
|
// { |
||||
|
// itemName: "乙肝", |
||||
|
// result: "A", |
||||
|
// }, |
||||
|
// { |
||||
|
// itemName: "血液", |
||||
|
// result: "B", |
||||
|
// }, |
||||
|
// { |
||||
|
// itemName: "ct", |
||||
|
// result: "C", |
||||
|
// }, |
||||
|
// ], |
||||
|
// registerCheckSummarys: "乙肝三项良好", |
||||
|
// }, |
||||
|
// ], |
||||
|
// }, |
||||
|
// { |
||||
|
// medicalTimes: 0, |
||||
|
// patientName: "小李", |
||||
|
// sexName: "string", |
||||
|
// age: 0, |
||||
|
// registerChecks: [ |
||||
|
// { |
||||
|
// registerCheckId: "3fa85f64-5717-4562-b3fc-2c963f66afa6", |
||||
|
// checkName: "血常规", |
||||
|
// registerCheckItems: [ |
||||
|
// { |
||||
|
// itemName: "血型", |
||||
|
// result: "A", |
||||
|
// }, |
||||
|
// { |
||||
|
// itemName: "ct", |
||||
|
// result: "危险", |
||||
|
// }, |
||||
|
// { |
||||
|
// itemName: "核磁", |
||||
|
// result: "有", |
||||
|
// }, |
||||
|
// ], |
||||
|
// registerCheckSummarys: "血常规危险", |
||||
|
// }, |
||||
|
// { |
||||
|
// registerCheckId: "3fa85f64-5717-4562-b3fc-2c963f66afa5", |
||||
|
// checkName: "乙肝三项", |
||||
|
// registerCheckItems: [ |
||||
|
// { |
||||
|
// itemName: "乙肝", |
||||
|
// result: "B", |
||||
|
// }, |
||||
|
// { |
||||
|
// itemName: "血液", |
||||
|
// result: "A", |
||||
|
// }, |
||||
|
// ], |
||||
|
// registerCheckSummarys: "乙肝三项危险", |
||||
|
// }, |
||||
|
// { |
||||
|
// registerCheckId: "3fa85f64-5717-4562-b3fc-2c963f66afa4", |
||||
|
// checkName: "血型鉴侧", |
||||
|
// registerCheckItems: [ |
||||
|
// { |
||||
|
// itemName: "a实验", |
||||
|
// result: "7", |
||||
|
// }, |
||||
|
// { |
||||
|
// itemName: "b实验", |
||||
|
// result: "8", |
||||
|
// }, |
||||
|
// ], |
||||
|
// registerCheckSummarys: "乙肝三项危险", |
||||
|
// }, |
||||
|
// ], |
||||
|
// }, |
||||
|
// ]; |
||||
|
let that = this; |
||||
|
let template = { |
||||
|
prop: "", |
||||
|
lable: "", |
||||
|
}; |
||||
|
for (let i = 0; i < bodys.length; i++) { |
||||
|
for (let k = 0; k < bodys[i].registerChecks.length; k++) { |
||||
|
for ( |
||||
|
let j = 0; |
||||
|
j < bodys[i].registerChecks[k].registerCheckItems.length; |
||||
|
j++ |
||||
|
) { |
||||
|
let templatess = JSON.parse(JSON.stringify(template)); |
||||
|
templatess.prop = |
||||
|
// bodys[i].registerChecks[k].registerCheckId + |
||||
|
bodys[i].registerChecks[k].checkName + |
||||
|
bodys[i].registerChecks[k].registerCheckItems[j].itemName; |
||||
|
templatess.lable = |
||||
|
bodys[i].registerChecks[k].checkName +'/'+ |
||||
|
bodys[i].registerChecks[k].registerCheckItems[j].itemName; |
||||
|
that.columnData.push(templatess); |
||||
|
this.$set( |
||||
|
bodys[i], |
||||
|
// bodys[i].registerChecks[k].registerCheckId + |
||||
|
bodys[i].registerChecks[k].checkName + |
||||
|
bodys[i].registerChecks[k].registerCheckItems[j].itemName, |
||||
|
bodys[i].registerChecks[k].registerCheckItems[j].result |
||||
|
); |
||||
|
} |
||||
|
// if(bodys[i].registerChecks[k].registerCheckSummarys!=''&&bodys[i].registerChecks[k].registerCheckSummarys!=null){ |
||||
|
let templates = JSON.parse(JSON.stringify(template)); |
||||
|
templates.prop = |
||||
|
// bodys[i].registerChecks[k].registerCheckId + |
||||
|
bodys[i].registerChecks[k].checkName + |
||||
|
"小结"; |
||||
|
templates.lable = bodys[i].registerChecks[k].checkName+'/' + "小结"; |
||||
|
that.columnData.push(templates); |
||||
|
this.$set( |
||||
|
bodys[i], |
||||
|
// bodys[i].registerChecks[k].registerCheckId + |
||||
|
bodys[i].registerChecks[k].checkName + |
||||
|
"小结", |
||||
|
bodys[i].registerChecks[k].registerCheckSummarys |
||||
|
); |
||||
|
// } |
||||
|
} |
||||
|
} |
||||
|
this.$nextTick(()=>{ |
||||
|
this.$refs.dataList.doLayout() |
||||
|
}) |
||||
|
let map = new Map(); |
||||
|
let qc = this.columnData.filter( |
||||
|
(key) => !map.has(key.prop) && map.set(key.prop, 1) |
||||
|
); |
||||
|
qc.sort(function (a, b) { |
||||
|
return a.lable < b.lable ? -1 : 1; //根据名称属性进行排序 |
||||
|
}) |
||||
|
|
||||
|
this.columnData = qc; |
||||
|
this.dataList = bodys; |
||||
|
} |
||||
|
} |
||||
|
); |
||||
|
}, |
||||
|
}, |
||||
|
|
||||
|
//监听事件 |
||||
|
watch: { |
||||
|
//触发查询事件 |
||||
|
// "patientRegister.query.times"(newVal, oldVal) { |
||||
|
// if (newVal != oldVal) { |
||||
|
// //alert('触发查询事件') |
||||
|
// this.query(); |
||||
|
// } |
||||
|
// }, |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
<style scoped> |
||||
|
@import "../../assets/css/global_button.css"; |
||||
|
@import "../../assets/css/global_card.css"; |
||||
|
@import "../../assets/css/global_input.css"; |
||||
|
@import "../../assets/css/global_table.css"; |
||||
|
@import "../../assets/css/global.css"; |
||||
|
|
||||
|
.query { |
||||
|
margin-left: 10px; |
||||
|
} |
||||
|
</style> |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue