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.
 
 
 

546 lines
16 KiB

<template>
<div class="box">
<div style="position: relative;">
<div class="middlebox">
<div class="contenttitle">
客户报表 /
<span class="contenttitleBold"
>组合项目具体结果明细统计</span
>
</div>
</div>
<div :style="'display: block;'">
<div style="background-color: #fff; padding: 15px; border-radius: 8px;display: flex;flex-wrap: wrap; margin-bottom: 10px;height:35px;margin-top: 7px;">
<div class="query">
<span>体检单位</span>
<el-input
placeholder="请选择体检单位"
v-model="patientRegister.query.cusOrgOCX"
style="width: 240px"
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" class="commonbutton">查询</el-button>
</div>
<div class="query">
<el-button @click="handleExport" size="small" class="commonbutton">导出excel</el-button>
</div>
<div class="query">
<el-button @click="onPrint" size="small" class="commonbutton">打印</el-button>
</div>
</div>
<div style="background-color: #fff; padding: 15px; border-radius: 8px;">
<div ref="imageDom">
<el-table
:data="dataList"
border
style="width: 100%"
:height="flag
?window.pageHeight < 600 ? 415 : window.pageHeight - 185-20:''"
row-key="id"
highlight-current-row
ref="dataList"
:row-class-name="tableRowClassName"
id="table"
show-summary
:summary-method="summarizeRegisterCount"
:cell-style="tableRowClassNames"
:header-cell-class-name="addClass"
>
<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>
</div>
</div>
<!--通用选单位体检次数分组的控件-->
<el-dialog
title="体检单位选择"
:visible.sync="report.dialogCusOrgOCX"
:close-on-click-modal="false"
width="880px"
height="600px"
>
<CusOrgOCX :initDateType="'creationTime'" :useCustomerOrg="true" />
</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,
category: [],
};
},
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;
}
});
// //人员类别
// 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/GetBasicList", {}).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;
// }
// });
},
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;
imageDom.appendChild(cloneDom);
html2canvas(cloneDom).then((canvas) => {
// 转成图片,生成图片地址
const url = canvas.toDataURL("image/png");
printJs({
printable: url,
type: "image",
documentTitle: "", // 标题
style: `@media print { @page {size: auto; margin: 0 0 0 0; } body{margin:0 5px}canvas{page-break-after: always;page-break-inside: avoid;
page-break-after: avoid;
page-break-before: avoid;}}`, // 去除页眉页脚
});
});
cloneDom.style.display = "none";
this.flag = true;
});
},
handleExport() {
exportToExcel("#table", "组合项目结果明细", false);
},
tableRowClassNames({ row, column, rowIndex, columnIndex }) {
if(column.label.length>2){
let columnLabel= column.label.slice(-2)
if(columnLabel=="小结"){
return { backgroundColor: "#F5F7FA" };
}
}
},
addClass({ row, column, rowIndex, columnIndex }){
if(column.label.length>2){
let columnLabel= column.label.slice(-2)
if(columnLabel=="小结"){
return "backcolor";
}
}
},
summarizeRegisterCount(param) {
const { columns, data } = param;
const sums = [];
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = "合计";
return;
}
if (index === 1) {
sums[index] = "共" + data.length + "人";
} else {
sums[index] = "";
}
});
return sums;
},
//查询
btnQuery() {
let body = {},
customerOrgs = [],
asbitemIds = [];
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 that = this;
let template = {
prop: "",
lable: "",
};
that.columnData = [];
that.category = [];
for (let i = 0; i < bodys.length; i++) {
for (let k = 0; k < bodys[i].registerChecks.length; k++) {
that.category.push(bodys[i].registerChecks[k].checkName);
}
}
that.category = Array.from(new Set(that.category));
for (let m = 0; m < that.category.length; m++) {
for (let i = 0; i < bodys.length; i++) {
for (let k = 0; k < bodys[i].registerChecks.length; k++) {
this.$set(
bodys[i],
// bodys[i].registerChecks[k].registerCheckId +
bodys[i].registerChecks[k].checkName +
"小结",
bodys[i].registerChecks[k].registerCheckSummarys
);
if (bodys[i].registerChecks[k].checkName == that.category[m]) {
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
)
}
}
}
}
let templates = JSON.parse(JSON.stringify(template));
templates.prop =that.category[m] +"小结";
templates.lable = that.category[m] + "小结";
that.columnData.push(templates);
}
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_dialog.css";
@import "../../assets/css/global_table.css";
@import "../../assets/css/global_form.css";
@import "../../assets/css/global_input.css";
@import "../../assets/css/global.css";
.query{
margin-right: 10px;
display: flex;
justify-content: center;
align-items: center;
font-size: 14px;
color: #232748;
font-size: 400;
font-family: "NotoSansSC-Regular";
}
.box {
display: flex;
flex-direction: column;
}
::v-deep .el-table__header-wrapper th.backcolor {
background-color: #F5F7FA;
}
::v-deep .el-input__inner {
/*text-align: center;*/
padding-left: 5px;
padding-right: 15px;
}
::v-deep .el-input__icon {
width: 15px;
/* 输入框下拉箭头或清除图标 默认 25 */
}
::v-deep .el-input-group__append {
padding: 0 5px;
/* 控件默认 0 20px;*/
}
::v-deep .el-icon-search:before {
color: #00F;
}
.query:last-child{
margin-right: 0;
}
</style>