|
|
<template> <div class="box"> <div> <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-select v-model="username" placeholder="请选择" size="small" multiple filterable :multiple-limit=2 > <el-option v-for="item in registrardata" :key="item.id" :label="item.surname" :value="item.id" > </el-option> </el-select> </div> <div class="query"> <span>开始日期:</span> <el-date-picker type="date" placeholder="选择开始日期" size="small" v-model="startDate" value-format="yyyy-MM-dd" editable style="width: 177px;" > </el-date-picker> </div> <div class="query"> <span>结束日期:</span> <el-date-picker type="date" placeholder="选择结束日期" size="small" v-model="endDate" value-format="yyyy-MM-dd" editable style="width: 177px;" > </el-date-picker> </div> <div class="query"> <el-button size="small" @click="onSubmit" class="commonbutton">查询</el-button> </div> <div class="query"> <el-button size="small" @click="handleExport" class="commonbutton">导出excel</el-button> </div> <div class="query"> <el-button size="small" @click="onPrint" class="commonbutton">打印</el-button> </div> <div class="query"> <el-button size="small" @click="columnarChart" class="commonbutton">柱状图</el-button> </div> <div class="query"> <el-button size="small" @click="peiChart" class="commonbutton">饼图</el-button> </div> </div> <div style=" display: flex; justify-content: space-between; position: relative; " id="domTable" > <div style="width: 47.7%;background-color: #fff; padding: 15px; border-radius: 8px;" ref="imageDom"> <!-- <h3 align="center">登记员工作量统计</h3> - 53-18 <h5 align="right" style="margin-bottom: 5px;"> 时间:<span>{{ startDate }}</span >至<span>{{ endDate }}</span> </h5> --> <el-table border show-summary :summary-method="summarizeRegisterCount" :height=" flag ? window.pageHeight < 600 ? 415 : window.pageHeight - 185 - 20 : '' " :data="tableData" id="table" ref="table" style="width: 100%" :header-cell-class-name="headerStyle" > <el-table-column label="审核医生工作量统计"> <el-table-column :label="'时间:' + startDate + '至' + endDate"> <el-table-column prop="auditDoctorName" label="医生" ></el-table-column> <el-table-column prop="auditCount" label="人数" ></el-table-column> <el-table-column prop="percentage" label="占登记总人数百分比"> </el-table-column> </el-table-column> </el-table-column> </el-table> </div> <div :style=" 'width: 47.7%;overflow: hidden;height:' + (window.pageHeight < 600 ? 415 : window.pageHeight - 185 - 20) + 'px;background-color: #fff; padding: 15px; border-radius: 8px;' " > <div style=" font-size: 20px; font-weight: 700; color: #232748; font-family: 'NotoSansSC-Bold'; text-align: center;">审核医生工作量统计</div> <div :style=" 'height:' +(window.pageHeight < 600 ? 387 : window.pageHeight - 185 - 48) +'px;' "> <ChartBlock ref="chart2"></ChartBlock> </div> </div> </div> </div> </div> </div></template><script>import { mapState, mapActions } from "vuex";import { getapi, postapi, putapi, deletapi } from "@/api/api";import ChartBlock from "../../components/workload/chartsBlock";import { exportToExcel } from "../../utlis/Export2Excel";import html2canvas from "html2canvas";import printJs from "print-js";export default { components: { ChartBlock, }, data() { return { registrardata: [], username: [], startDate: "", endDate: "", tableData: [], seriesData: [], yAxisData: [], flag: true, pieData: [], pages: { SkipCount: 0, MaxResultCount: 1000, }, }; }, created() { this.getList(); }, mounted() { this.getNowTime(); }, methods: { headerStyle({ row, column, rowIndex, columnIndex }) { if (rowIndex === 1) { return "left-align"; } }, 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 === 1) { sums[index] = values.reduce((prev, curr) => { const value = Number(curr); if (!isNaN(value)) { return prev + curr; } else { return prev; } }, 0); sums[index] = "共" + sums[index] + "人"; } else { sums[index] = ""; } });
return sums; }, 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: "@page{size:auto;margin: 0cm 1cm 0cm 1cm;}", // 去除页眉页脚
}); }); cloneDom.style.display = "none"; this.flag = true; }); }, columnarChart() { let option2 = { // title: {
// text: "审核医生工作量统计",
// left: "center",
// },
tooltip: { trigger: "axis", confine: true, }, legend: { type: "scroll", orient: "horizontal", // 垂直
right: "3%", // 左对齐
top: "0%", // 位于顶部
}, grid: { show: false, left: "0%", right: "0%", top: "0%", bottom: "0%", containLabel: true, }, xAxis: { type: "value", axisLabel: { textStyle: { fontSize: "14", }, }, axisLine: { show: true, }, }, yAxis: { type: "category", data: this.yAxisData, axisLabel: { textStyle: { fontSize: "14", }, }, }, series: [ { name: "人数", type: "bar", data: this.seriesData, }, ], }; this.$refs.chart2.setOption(option2); }, peiChart() { let option2 = { // title: {
// text: "审核医生工作量统计",
// left: "center",
// },
tooltip: { trigger: "item", confine: true, }, legend: { data: this.yAxisData, orient: "horizontal", right: "3%", top: "0%", }, grid: { show: false, left: "0%", right: "0%", top: "0%", bottom: "0%", containLabel: true, }, series: [ { type: "pie", label: { show: true, formatter: "{b} : {c}人 ({d}%)", // b代表名称,c代表对应值,d代表百分比
}, data: this.pieData, }, ], }; this.$refs.chart2.setOption(option2); }, onSubmit() { let that = this; if (this.startDate == "") { return this.$message({ message: "请先选择开始日期", type: "error", }); } if (this.endDate == "") { return this.$message({ message: "请先选择结束日期", type: "error", }); } postapi( "/api/app/internalreport/getauditdoctorworkloadreport", { userIds: that.username, startDate: that.startDate, endDate: that.endDate, } ).then((res) => { if (res.code != -1) { that.tableData = [...res.data]; this.yAxisData = []; this.seriesData = []; this.pieData=[] let pies = { name: "", value: 0, }; for (let i = 0; i < res.data.length; i++) { let pie = JSON.parse(JSON.stringify(pies)); this.yAxisData.push(res.data[i].auditDoctorName); this.seriesData.push(res.data[i].auditCount); pie.name=res.data[i].auditDoctorName pie.value=res.data[i].auditCount this.pieData.push(pie) } this.columnarChart(); } }); }, getList() { getapi("/api/identity/users/getlist",this.pages).then((res) => { if (res.code != -1) { this.registrardata = [...res.data.items]; } }); }, getNowTime() { var now = new Date(); var year = now.getFullYear(); // 得到年份
var month = now.getMonth(); // 得到月份
var date = now.getDate(); // 得到日期
month = month + 1; month = month.toString().padStart(2, "0"); date = date.toString().padStart(2, "0"); var defaultDate = `${year}-${month}-${date}`; this.startDate = defaultDate; this.endDate = defaultDate; }, handleExport() { exportToExcel("#table", "审核医生工作量统计", false); }, }, computed: { ...mapState(["window", "dict", "patientRegister", "report"]), }, updated() { this.$nextTick(() => { this.$refs.table.doLayout(); }); },};</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;}:deep .left-align .cell { text-align: left !important;}.query:last-child{ margin-right: 0;}:deep .el-input--suffix .el-input__inner{ height: 32px !important;}:deep .el-select__tags{ flex-wrap: nowrap;}</style>
|