罗斌杰 1 year ago
parent
commit
cbeb2f97e8
  1. 389
      src/components/occDisease/occReport.vue

389
src/components/occDisease/occReport.vue

@ -31,226 +31,48 @@
<el-select v-model="format" placeholder="请选择" style="width: 80px" @change="changeValue" size="small"> <el-select v-model="format" placeholder="请选择" style="width: 80px" @change="changeValue" size="small">
<el-option label="疾控汇报" value="0" /> <el-option label="疾控汇报" value="0" />
<el-option label="单位格式" value="1" /> <el-option label="单位格式" value="1" />
<el-option label="导出excel" value="2" />
</el-select> </el-select>
</div> </div>
<div class="query"> <div class="query">
<el-button @click="btnQuery(true)" size="small" class="commonbutton">预览</el-button>
<el-button @click="btnQuery(false)" size="small" class="commonbutton">打印</el-button>
<el-button @click="btnQuery(true)" size="small" class="commonbutton" :disabled="format == 2">预览</el-button>
<el-button @click="btnQuery(false)" size="small" class="commonbutton" :disabled="format == 2">打印</el-button>
</div> </div>
<!--
<div class="query"> <div class="query">
<el-button size="small" class="commonbutton" :disabled="format == 2" @click="handleExport">导出excel</el-button>
<el-button size="small" class="commonbutton" :disabled="format != 2" @click="query">查询</el-button>
</div> </div>
<div class="query"> <div class="query">
<el-button size="small" class="commonbutton" :disabled="format == 2" @click="onPrint">打印</el-button>
<el-button size="small" class="commonbutton" :disabled="format != 2" @click="handleExport">导出excel</el-button>
</div> </div>
-->
<!-- <div class="query">
<el-button size="small" class="commonbutton" :disabled="format != 2" @click="onPrint">打印</el-button>
</div> -->
</div> </div>
<div v-show="format == 3" ref="imageDom0">
<div v-show="format == 2" ref="imageDom2">
<div style="background-color: #fff; padding: 15px; border-radius: 8px"> <div style="background-color: #fff; padding: 15px; border-radius: 8px">
<el-table border :height="flag <el-table border :height="flag
? window.pageHeight < 600 ? window.pageHeight < 600
? 415 ? 415
: window.pageHeight - 185 - 20 : window.pageHeight - 185 - 20
: '' : ''
" :data="tableData" id="standardTableData" ref="standardTableData" style="width: 100%"
:header-cell-class-name="headerStyle">
<el-table-column :label="reportTitle">
<el-table-column
:label="`单位: ${customerOrgName || ''} 体检次数 ${medicalTimes || ''} 开始月份: ${startMonth || ''} 结束月份: ${endMonth || ''}`">
<template slot-scope="scope">
<el-table :data="scope.row.patientRegisterPositiveReports" border show-summary
:summary-method="summarizeRegisterCounts" :header-cell-class-name="headerStyle">
<el-table-column label="人员阳性结果清单">
<el-table-column :label="`${startDate || ''}
${endDate || ''}
体检人员共计
${sumMedicalNumber || ''}
其中男
${maleMedicalNumber || ''}
${femaleMedicalNumber || ''}
其他
${otherMedicalNumber || ''}
`">
<el-table-column prop="patientNo" label="档案号" width="120" />
<el-table-column prop="patientName" label="姓名" width="120" />
<el-table-column prop="sexName" label="性别" width="50" />
<el-table-column prop="age" label="年龄" width="80" />
<el-table-column prop="medicalTimes" label="次数" width="50" />
<el-table-column prop="mobileTelephone" label="手机号码" width="120" />
<el-table-column prop="diagnosisNames" label="诊断名称" />
</el-table-column>
</el-table-column>
</el-table>
<el-table :data="scope.row.positivePatientRegisterReportStandards" border
:header-cell-class-name="headerStyle" style="margin-top: 15px">
<el-table-column label="阳性结果人员清单">
<el-table-column :label="`${startDate || ''}
${endDate || ''}
体检人员共计
${sumMedicalNumber || ''}
其中男
${maleMedicalNumber || ''}
${femaleMedicalNumber || ''}
其他
${otherMedicalNumber || ''}
`">
<template slot-scope="scopes">
<el-table :data="scopes.row.patientRegisters" border show-summary
:summary-method="summarizeRegisterCounts">
<el-table-column :label="scopes.row.diagnosisName">
<el-table-column label="部门名称" prop="departmentName"></el-table-column>
<el-table-column label="姓名" prop="patientName"></el-table-column>
<el-table-column label="性别" prop="sexName"></el-table-column>
<el-table-column prop="age" label="年龄">
</el-table-column>
<el-table-column prop="patientRegisterNo" label="条码号">
</el-table-column>
<el-table-column prop="patientNo" label="档案号">
</el-table-column>
<el-table-column prop="medicalTimes" label="体检次数">
</el-table-column>
<el-table-column prop="telephone" label="电话">
</el-table-column>
<el-table-column prop="mobileTelephone" label="手机号">
</el-table-column>
</el-table-column>
</el-table>
</template>
</el-table-column>
</el-table-column>
</el-table>
<el-table :data="scope.row.diseaseCountStatisticsReports" border
:header-cell-class-name="headerStyle" show-summary :summary-method="summarizeRegisterCount"
style="margin-top: 15px">
<el-table-column label="疾病人数统计">
<el-table-column :label="`${startDate || ''}
${endDate || ''}
体检人员共计
${sumMedicalNumber || ''}
其中男
${maleMedicalNumber || ''}
${femaleMedicalNumber || ''}
其他
${otherMedicalNumber || ''}
`">
<el-table-column label="序号" type="index">
</el-table-column>
<el-table-column prop="diagnosisName" label="疾病" />
<el-table-column prop="patientCount" label="人数" />
<el-table-column prop="percentage" label="占总检人员百分比" />
</el-table-column>
</el-table-column>
</el-table>
</template>
</el-table-column>
</el-table-column>
" :data="tableData" id="standardTableData" ref="standardTableData" style="width: 100%">
<el-table-column type="index" label="序号" width="40" align="center"/>
<el-table-column prop="patientRegisterNo" label="人员条码号"/>
<el-table-column prop="patientName" label="姓名"/>
<el-table-column prop="jobType" label="工种"/>
<el-table-column prop="poisonWorkTime" label="接害工龄"/>
<el-table-column prop="poisonNames" label="毒害因素"/>
<el-table-column prop="anomalyIndex" label="异常指标"/>
<el-table-column prop="handlingSuggestions" label="处理意见"/>
<el-table-column prop="medicalConclusion" label="体检结论"/>
<el-table-column prop="ocCheckTypeName" label="职业病检查类别"/>
<el-table-column prop="medicalStartDate" label="体检日期"/>
<el-table-column prop="summaryDoctorName" label="总检医生"/>
</el-table> </el-table>
</div> </div>
</div> </div>
<div v-show="format == 4" ref="imageDom1">
<div style="background-color: #fff; padding: 15px; border-radius: 8px">
<el-table border :height="flag
? window.pageHeight < 600
? 415
: window.pageHeight - 185 - 20
: ''
" :data="reducetableData" id="reducetableData" ref="reducetableData" style="width: 100%"
:header-cell-class-name="headerStyle">
<el-table-column :label="reducereportTitle">
<el-table-column
:label="`单位: ${customerOrgName || ''} 体检次数 ${medicalTimes || ''} 开始月份: ${startMonth || ''} 结束月份: ${endMonth || ''}`">
<template slot-scope="scope">
<el-table :data="scope.row.patientRegisterPositiveReports" border show-summary
:summary-method="summarizeRegisterCounts" :header-cell-class-name="headerStyle">
<el-table-column label="人员阳性结果清单">
<el-table-column :label="`${reducestartDate || ''}
${reduceendDate || ''}
体检人员共计
${reducesumMedicalNumber || ''}
其中男
${reducemaleMedicalNumber || ''}
${reducefemaleMedicalNumber || ''}
其他
${reduceotherMedicalNumber || ''}
`">
<el-table-column prop="patientNo" label="档案号" width="120" />
<el-table-column prop="patientName" label="姓名" width="120" />
<el-table-column prop="sexName" label="性别" width="50" />
<el-table-column prop="age" label="年龄" width="80" />
<el-table-column prop="medicalTimes" label="次数" width="50" />
<el-table-column prop="mobileTelephone" label="手机号码" width="120" />
<el-table-column prop="diagnosisNames" label="诊断名称" />
</el-table-column>
</el-table-column>
</el-table>
<el-table :data="scope.row.positivePatientRegisterReportReduces" border
:header-cell-class-name="headerStyle" show-summary :summary-method="summarizeRegisterCount"
style="margin-top: 15px">
<el-table-column label="阳性结果人员清单">
<el-table-column :label="`${reducestartDate || ''}
${reduceendDate || ''}
体检人员共计
${reducesumMedicalNumber || ''}
其中男
${reducemaleMedicalNumber || ''}
${reducefemaleMedicalNumber || ''}
其他
${reduceotherMedicalNumber || ''}
`">
<el-table-column label="序号" type="index">
</el-table-column>
<el-table-column prop="diagnosisName" label="诊断" />
<el-table-column prop="patientCount" label="人数" />
<el-table-column prop="percentage" label="占总检人员百分比" />
</el-table-column>
</el-table-column>
</el-table>
<el-table :data="scope.row.diseaseCountStatisticsReports" border
:header-cell-class-name="headerStyle" show-summary :summary-method="summarizeRegisterCount"
style="margin-top: 15px">
<el-table-column label="疾病人数统计">
<el-table-column :label="`${reducestartDate || ''}
${reduceendDate || ''}
体检人员共计
${reducesumMedicalNumber || ''}
其中男
${reducemaleMedicalNumber || ''}
${reducefemaleMedicalNumber || ''}
其他
${reduceotherMedicalNumber || ''}
`">
<el-table-column label="序号" type="index">
</el-table-column>
<el-table-column prop="diagnosisName" label="疾病" />
<el-table-column prop="patientCount" label="人数" />
<el-table-column prop="percentage" label="占总检人员百分比" />
</el-table-column>
</el-table-column>
</el-table>
</template>
</el-table-column>
</el-table-column>
</el-table>
</div>
</div>
<div v-show="format == 0 || format == 1" ref="imageDom2">
<div v-show="format == 0 || format == 1">
<div style="background-color: #fff; padding: 15px; border-radius: 8px"> <div style="background-color: #fff; padding: 15px; border-radius: 8px">
<div :style="'display: flex;justify-content: center;align-items: center;height:' + <div :style="'display: flex;justify-content: center;align-items: center;height:' +
(window.pageHeight < 600 ? 415 : window.pageHeight - 185 - 20) + (window.pageHeight < 600 ? 415 : window.pageHeight - 185 - 20) +
@ -298,29 +120,8 @@ export default {
format: "0", format: "0",
flag: true, flag: true,
tableData: [], tableData: [],
reducetableData: [],
reportTitle: "",
customerOrgName: "",
medicalTimes: null,
startMonth: "",
endMonth: "",
startDate: "", startDate: "",
endDate: "", endDate: "",
sumMedicalNumber: null,
maleMedicalNumber: null,
femaleMedicalNumber: null,
otherMedicalNumber: null,
reducereportTitle: "",
reducecustomerOrgName: "",
reducemedicalTimes: null,
reducestartMonth: "",
reduceendMonth: "",
reducestartDate: "",
reduceendDate: "",
reducesumMedicalNumber: null,
reducemaleMedicalNumber: null,
reducefemaleMedicalNumber: null,
reduceotherMedicalNumber: null,
reportUrl: "", reportUrl: "",
}; };
}, },
@ -337,6 +138,48 @@ export default {
...mapState(["window", "dict", "patientRegister", "report"]), ...mapState(["window", "dict", "patientRegister", "report"]),
}, },
methods: { methods: {
query(){
let body = {},
customerOrgs = [];
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);
});
}
body.customerOrgs = customerOrgs;
if (this.completeFlag) body.completeFlag = this.completeFlag;
body.isAudit = this.classification;
postapi(
"/api/app/OccupationalDiseaseReport/GetCompanyOccupationalDiseaseDataExcel",
body
).then((res) => {
if (res.code != -1) {
this.tableData = res.data;
}
});
},
btnQuery(isPreview) { btnQuery(isPreview) {
let customerOrgs = []; let customerOrgs = [];
if (this.report.dataCusOrgOCX.length > 0) { if (this.report.dataCusOrgOCX.length > 0) {
@ -438,115 +281,27 @@ export default {
}); });
} }
}, },
summarizeRegisterCounts(param) {
const { columns, data } = param;
const sums = [];
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = "合计";
return;
}
if (index === 1) {
sums[index] = data.length + "人";
return;
}
});
return sums;
},
summarizeRegisterCount(param) {
const { columns, data } = param;
const sums = [];
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = "合计";
return;
}
const values = data.map((item) => Number(item[column.property]));
if (index === 2) {
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return prev + curr;
} else {
return prev;
}
}, 0);
sums[index] += " 人";
}
});
return sums;
},
headerStyle({ row, column, rowIndex, columnIndex }) {
if (rowIndex === 1) {
return "left-align";
}
},
changeValue(value) { changeValue(value) {
if (value == 0) {
if (value == 2) {
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.standardTableData.doLayout(); this.$refs.standardTableData.doLayout();
}); });
} else if (value == 1) {
this.$nextTick(() => {
this.$refs.reducetableData.doLayout();
});
} }
}, },
handleExport() { handleExport() {
if (this.format == 0) {
let name = "北京神豚软件开发有限公司体检报告";
if (this.reportTitle != "") {
name = this.reportTitle;
}
let index = 3;
let list = [];
list.push(index);
index += this.tableData[0].patientRegisterPositiveReports.length + 7;
list.push(index);
for (
let i = 0;
i <
this.tableData[0].positivePatientRegisterReportStandards.length - 1;
i++
) {
index +=
this.tableData[0].positivePatientRegisterReportStandards[i]
.patientRegisters.length + 4;
list.push(index);
}
exportToExcel("#standardTableData", name, true, list);
} else if (this.format == 1) {
let name = "北京神豚软件开发有限公司体检报告";
if (this.reducereportTitle != "") {
name = this.reducereportTitle;
}
let index = 3;
let list = [];
list.push(index);
exportToExcel("#reducetableData", name, true, list);
}
exportToExcel("#standardTableData", "单位职业病汇总", false);
}, },
onPrint() { onPrint() {
this.flag = false; this.flag = false;
let index = "";
if (this.format == 0) {
index = "imageDom0";
} else if (this.format == 1) {
index = "imageDom1";
} else {
index = "imageDom2";
}
this.$nextTick(() => { this.$nextTick(() => {
let width = this.$refs[index].style.width;
let cloneDom = this.$refs[index].cloneNode(true);
let imageDom = this.$refs[index];
let width = this.$refs.imageDom2.style.width;
let cloneDom = this.$refs.imageDom2.cloneNode(true);
let imageDom = this.$refs.imageDom2;
cloneDom.style.position = "absolute"; cloneDom.style.position = "absolute";
cloneDom.style.top = "0px"; cloneDom.style.top = "0px";
cloneDom.style.zIndex = "-1"; cloneDom.style.zIndex = "-1";
cloneDom.style.width = width; cloneDom.style.width = width;
console.log(cloneDom);
imageDom.appendChild(cloneDom); imageDom.appendChild(cloneDom);
html2canvas(cloneDom).then((canvas) => { html2canvas(cloneDom).then((canvas) => {
// //

Loading…
Cancel
Save