12 changed files with 5040 additions and 241 deletions
-
30src/router/index.js
-
2src/views/basic-dictionary/MedicalConclusionType.vue
-
1src/views/customerReport/combinationDetails.vue
-
529src/views/workload/departmentalfees.vue
-
38src/views/workload/deskwork.vue
-
677src/views/workload/feeforservice.vue
-
511src/views/workload/financialsettlement.vue
-
1246src/views/workload/individualfeedetails.vue
-
438src/views/workload/peispersontime.vue
-
1src/views/workload/registrar.vue
-
486src/views/workload/summaryoftollcollectors.vue
-
1322src/views/workload/tollcollector.vue
@ -0,0 +1,529 @@ |
|||
<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-cascader |
|||
v-model="username" |
|||
:options="registrardata" |
|||
ref="example" |
|||
popper-class="example" |
|||
@change="ischangsItemTypeId" |
|||
style="width: 100px" |
|||
:props="{ |
|||
value: 'id', |
|||
label: 'displayName', |
|||
children: 'treeChildren', |
|||
checkStrictly: true, |
|||
expandTrigger: 'hover', |
|||
}" |
|||
size="small" |
|||
> |
|||
</el-cascader> |
|||
<!-- <el-select |
|||
v-model="username" |
|||
placeholder="请选择" |
|||
size="small" |
|||
multiple |
|||
> |
|||
<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 |
|||
> |
|||
</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 |
|||
> |
|||
</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 |
|||
: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 |
|||
:label=" |
|||
'应收总金额:' + |
|||
sumChargeMoney + |
|||
'折扣金额:' + |
|||
sumDiscountMoney + |
|||
'实收总金额:' + |
|||
sumReceivedChargeMoney |
|||
" |
|||
> |
|||
<el-table-column |
|||
prop="itemTypeName" |
|||
label="科室" |
|||
></el-table-column> |
|||
<el-table-column |
|||
prop="chargeMoney" |
|||
label="应收金额" |
|||
></el-table-column> |
|||
<el-table-column prop="discountMoney" label="折扣金额"> |
|||
</el-table-column> |
|||
<el-table-column prop="receivedChargeMoney" label="实收金额"> |
|||
</el-table-column> |
|||
</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"; |
|||
import { projectlist } from "@/request/commonapi"; |
|||
export default { |
|||
components: { |
|||
ChartBlock, |
|||
}, |
|||
data() { |
|||
return { |
|||
registrardata: [], |
|||
username: [], |
|||
startDate: "", |
|||
endDate: "", |
|||
tableData: [], |
|||
seriesData: [], |
|||
yAxisData: [], |
|||
flag: true, |
|||
pieData: [], |
|||
sumChargeMoney: "", |
|||
sumDiscountMoney: "", |
|||
sumReceivedChargeMoney: "", |
|||
}; |
|||
}, |
|||
created() { |
|||
this.getList(); |
|||
}, |
|||
mounted() { |
|||
this.getNowTime(); |
|||
}, |
|||
methods: { |
|||
ischangsItemTypeId(v) { |
|||
if (v.length > 1) { |
|||
this.username = this.username.slice(-1)[0]; |
|||
} else { |
|||
this.username = this.username[0]; |
|||
} |
|||
this.$refs.example.toggleDropDownVisible(); |
|||
}, |
|||
headerStyle({ row, column, rowIndex, columnIndex }) { |
|||
console.log(rowIndex); |
|||
if (rowIndex === 1) { |
|||
return "left-align"; |
|||
} |
|||
if (rowIndex === 2) { |
|||
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 || index === 2) { |
|||
sums[index] = values.reduce((prev, curr) => { |
|||
const value = Number(curr); |
|||
if (!isNaN(value)) { |
|||
return prev + curr; |
|||
} else { |
|||
return prev; |
|||
} |
|||
}, 0); |
|||
if (index === 1) { |
|||
sums[index] = "共" + sums[index] + "人"; |
|||
} |
|||
if (index === 2) { |
|||
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; |
|||
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; |
|||
}); |
|||
}, |
|||
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.username == "" || this.username == []) { |
|||
return this.$message({ |
|||
message: "请先选择科室", |
|||
type: "error", |
|||
}); |
|||
} |
|||
if (this.startDate == "") { |
|||
return this.$message({ |
|||
message: "请先选择开始日期", |
|||
type: "error", |
|||
}); |
|||
} |
|||
if (this.endDate == "") { |
|||
return this.$message({ |
|||
message: "请先选择结束日期", |
|||
type: "error", |
|||
}); |
|||
} |
|||
postapi( |
|||
"/api/app/charge-report/get-summary-of-departmental-fees-report", |
|||
{ |
|||
itemTypeId: that.username, |
|||
startDate: that.startDate, |
|||
endDate: that.endDate, |
|||
} |
|||
).then((res) => { |
|||
if (res.code != -1) { |
|||
that.tableData = [...res.data.details]; |
|||
that.sumChargeMoney = res.data.sumChargeMoney; |
|||
that.sumDiscountMoney = res.data.sumDiscountMoney; |
|||
that.sumReceivedChargeMoney = res.data.sumReceivedChargeMoney; |
|||
this.yAxisData = []; |
|||
this.seriesData = []; |
|||
this.pieData = []; |
|||
let pies = { |
|||
name: "", |
|||
value: 0, |
|||
}; |
|||
for (let i = 0; i < res.data.details.length; i++) { |
|||
let pie = JSON.parse(JSON.stringify(pies)); |
|||
this.yAxisData.push(res.data.details[i].itemTypeName); |
|||
this.seriesData.push(res.data.details[i].receivedChargeMoney); |
|||
pie.name = res.data.details[i].itemTypeName; |
|||
pie.value = res.data.details[i].receivedChargeMoney; |
|||
this.pieData.push(pie); |
|||
} |
|||
this.columnarChart(); |
|||
} |
|||
}); |
|||
}, |
|||
getList() { |
|||
projectlist().then((res) => { |
|||
if (res.code != -1) { |
|||
this.registrardata = [...res.data]; |
|||
this.registrardata = this.formatData(this.registrardata); |
|||
} |
|||
}); |
|||
}, |
|||
formatData(dataList) { |
|||
for (let i = 0; i < dataList.length; i++) { |
|||
if (dataList[i].treeChildren.length < 1) { |
|||
dataList[i].treeChildren = undefined; |
|||
} else { |
|||
this.formatData(dataList[i].treeChildren); |
|||
} |
|||
} |
|||
return dataList; |
|||
}, |
|||
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: 15px; |
|||
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; |
|||
} |
|||
</style> |
|||
@ -0,0 +1,677 @@ |
|||
<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-cascader |
|||
v-model="username" |
|||
:options="registrardata" |
|||
ref="example" |
|||
popper-class="example" |
|||
@change="ischangsItemTypeId" |
|||
style="width: 100px" |
|||
:props="{ |
|||
value: 'id', |
|||
label: 'displayName', |
|||
children: 'treeChildren', |
|||
checkStrictly: true, |
|||
expandTrigger: 'hover', |
|||
}" |
|||
size="small" |
|||
> |
|||
</el-cascader> |
|||
<!-- <el-select |
|||
v-model="username" |
|||
placeholder="请选择" |
|||
size="small" |
|||
multiple |
|||
> |
|||
<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-input |
|||
placeholder="请选择组合项目" |
|||
v-model="patientRegister.query.asbitemOCX" |
|||
style="width: 200px" |
|||
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-date-picker |
|||
type="date" |
|||
placeholder="选择开始日期" |
|||
size="small" |
|||
v-model="startDate" |
|||
value-format="yyyy-MM-dd" |
|||
editable |
|||
style="width:150px" |
|||
> |
|||
</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:150px" |
|||
> |
|||
</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" |
|||
:span-method="objectStandardSpanMethod" |
|||
:height=" |
|||
flag |
|||
? window.pageHeight < 600 |
|||
? 415 |
|||
: window.pageHeight - 185 - 20 |
|||
: '' |
|||
" |
|||
:data="tableData" |
|||
id="table" |
|||
ref="table" |
|||
style="width: 100%" |
|||
:header-cell-class-name="headerStyle" |
|||
:cell-style="tableRowClassName" |
|||
> |
|||
<el-table-column label="项目收费汇总"> |
|||
<el-table-column :label="'时间:' + startDate + '至' + endDate"> |
|||
<el-table-column |
|||
:label=" |
|||
'应收总金额:' + |
|||
sumChargeMoney + |
|||
'折扣金额:' + |
|||
sumDiscountMoney + |
|||
'实收总金额:' + |
|||
sumReceivedChargeMoney |
|||
" |
|||
> |
|||
<el-table-column |
|||
prop="itemTypeName" |
|||
label="科室" |
|||
></el-table-column> |
|||
<el-table-column |
|||
prop="asbitemName" |
|||
label="组合项目" |
|||
></el-table-column> |
|||
<el-table-column |
|||
prop="chargeMoney" |
|||
label="应收金额" |
|||
></el-table-column> |
|||
<el-table-column prop="discountMoney" label="折扣金额"> |
|||
</el-table-column> |
|||
<el-table-column prop="receivedChargeMoney" label="实收金额"> |
|||
</el-table-column> |
|||
</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> |
|||
<!--通用选组合项目的控件--> |
|||
<el-dialog |
|||
title="组合项目选择" |
|||
:visible.sync="report.dialogAsbitemOCX" |
|||
:close-on-click-modal="false" |
|||
width="700px" |
|||
height="600px" |
|||
> |
|||
<AsbitemOCX /> |
|||
</el-dialog> |
|||
</div> |
|||
</template> |
|||
<script> |
|||
import { mapState, mapActions } from "vuex"; |
|||
import { getapi, postapi, putapi, deletapi } from "@/api/api"; |
|||
import ChartBlock from "../../components/workload/chartsBlock"; |
|||
import AsbitemOCX from "../../components/report/AsbitemOCX.vue"; |
|||
import { exportToExcel } from "../../utlis/Export2Excel"; |
|||
import html2canvas from "html2canvas"; |
|||
import printJs from "print-js"; |
|||
import { projectlist } from "@/request/commonapi"; |
|||
import { |
|||
tcdate, |
|||
} from "@/utlis/proFunc"; |
|||
export default { |
|||
components: { |
|||
ChartBlock, |
|||
AsbitemOCX |
|||
}, |
|||
data() { |
|||
return { |
|||
registrardata: [], |
|||
username: [], |
|||
startDate: "", |
|||
endDate: "", |
|||
tableData: [], |
|||
seriesData: [], |
|||
yAxisData: [], |
|||
flag: true, |
|||
pieData: [], |
|||
sumChargeMoney: "", |
|||
sumDiscountMoney: "", |
|||
sumReceivedChargeMoney: "", |
|||
}; |
|||
}, |
|||
created() { |
|||
this.getList(); |
|||
this.dictInit() |
|||
}, |
|||
mounted() { |
|||
this.getNowTime(); |
|||
}, |
|||
methods: { |
|||
//数据初始化 |
|||
dictInit() { |
|||
|
|||
// //体检类别 |
|||
// getapi("/api/app/medical-type/in-filter").then((res) => { |
|||
// if (res.code == 1) { |
|||
// this.dict.medicalType = res.data.items; |
|||
// } |
|||
// }); |
|||
|
|||
// //体检类别 树结构 |
|||
getapi("/api/app/item-type/by-code-all").then((res) => { |
|||
if (res.code == 1) { |
|||
this.dict.itemTypeTree = res.data; |
|||
tcdate(this.dict.itemTypeTree); |
|||
} |
|||
}); |
|||
}, |
|||
ischangsItemTypeId(v) { |
|||
if (v.length > 1) { |
|||
this.username = this.username.slice(-1)[0]; |
|||
} else { |
|||
this.username = this.username[0]; |
|||
} |
|||
this.$refs.example.toggleDropDownVisible(); |
|||
}, |
|||
headerStyle({ row, column, rowIndex, columnIndex }) { |
|||
console.log(rowIndex); |
|||
if (rowIndex === 1) { |
|||
return "left-align"; |
|||
} |
|||
if (rowIndex === 2) { |
|||
return "left-align"; |
|||
} |
|||
}, |
|||
summarizeRegisterCount(param) { |
|||
const { columns, data } = param; |
|||
const sums = []; |
|||
columns.forEach((column, index) => { |
|||
if (index === 0) { |
|||
sums[index] = "合计"; |
|||
return; |
|||
} |
|||
if (index === 4) { |
|||
sums[index] = this.sumReceivedChargeMoney+"元"; |
|||
return; |
|||
} |
|||
}); |
|||
|
|||
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; |
|||
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; |
|||
}); |
|||
}, |
|||
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.username == "" || this.username == []) { |
|||
return this.$message({ |
|||
message: "请先选择科室", |
|||
type: "error", |
|||
}); |
|||
} |
|||
if (this.startDate == "") { |
|||
return this.$message({ |
|||
message: "请先选择开始日期", |
|||
type: "error", |
|||
}); |
|||
} |
|||
if (this.endDate == "") { |
|||
return this.$message({ |
|||
message: "请先选择结束日期", |
|||
type: "error", |
|||
}); |
|||
} |
|||
let asbitemIds = []; |
|||
if (this.report.dataAsbitemOCX.length > 0) { |
|||
this.report.dataAsbitemOCX.forEach((e) => { |
|||
asbitemIds.push(e.id); |
|||
}); |
|||
} |
|||
postapi( |
|||
"/api/app/charge-report/get-project-fees-report", |
|||
{ |
|||
itemTypeId: that.username, |
|||
asbitems:asbitemIds, |
|||
startDate: that.startDate, |
|||
endDate: that.endDate, |
|||
} |
|||
).then((res) => { |
|||
if (res.code != -1) { |
|||
// that.tableData = [...res.data.details]; |
|||
that.sumChargeMoney = res.data.sumChargeMoney; |
|||
that.sumDiscountMoney = res.data.sumDiscountMoney; |
|||
that.sumReceivedChargeMoney = res.data.sumReceivedChargeMoney; |
|||
this.yAxisData = []; |
|||
this.seriesData = []; |
|||
this.pieData = []; |
|||
that.computedStandardTableData(res.data.details) |
|||
let pies = { |
|||
name: "", |
|||
value: 0, |
|||
}; |
|||
for (let i = 0; i < res.data.details.length; i++) { |
|||
let pie = JSON.parse(JSON.stringify(pies)); |
|||
this.yAxisData.push('('+res.data.details[i].itemTypeName+')'+res.data.details[i].asbitemName); |
|||
this.seriesData.push(res.data.details[i].receivedChargeMoney); |
|||
pie.name = '('+res.data.details[i].itemTypeName+')'+res.data.details[i].asbitemName |
|||
pie.value = res.data.details[i].receivedChargeMoney; |
|||
this.pieData.push(pie); |
|||
} |
|||
this.columnarChart(); |
|||
} |
|||
}); |
|||
}, |
|||
computedStandardTableData(tableData) { |
|||
const newData = [...tableData]; // 创建一个新的数组,避免修改原始数据 |
|||
const totalRows = { |
|||
itemTypeName: "", |
|||
asbitemName: "合计", |
|||
chargeMoney: 0, |
|||
discountMoney: 0, |
|||
receivedChargeMoney: 0, |
|||
}; // 合计行的数据 |
|||
// let pies = { |
|||
// name: "", |
|||
// value: 0, |
|||
// }; |
|||
let obj = {}; |
|||
for (let i = 0; i < tableData.length; i++) { |
|||
var item = tableData[i].itemTypeName; |
|||
obj[item] = obj[item] + 1 || 1; |
|||
} |
|||
|
|||
Object.keys(obj).forEach((key) => { |
|||
let totalRow = JSON.parse(JSON.stringify(totalRows)); |
|||
// let pie = JSON.parse(JSON.stringify(pies)); |
|||
tableData.forEach((item) => { |
|||
if (item.itemTypeName == key) { |
|||
totalRow.itemTypeName = item.itemTypeName; |
|||
totalRow.chargeMoney = |
|||
(totalRow.chargeMoney * 100000 + |
|||
item.chargeMoney * 100000) / |
|||
100000; |
|||
totalRow.discountMoney = |
|||
(totalRow.discountMoney * 100000 + |
|||
item.discountMoney * 100000) / |
|||
100000; |
|||
totalRow.receivedChargeMoney = |
|||
(totalRow.receivedChargeMoney * 100000 + |
|||
item.receivedChargeMoney * 100000) / |
|||
100000; |
|||
} |
|||
// pie.name = '('+item.itemTypeName+')'+item.asbitemName; |
|||
// pie.value = item.receivedChargeMoney; |
|||
// this.yAxisData.push('('+item.itemTypeName+')'+item.asbitemName); |
|||
// this.seriesData.push(item.receivedChargeMoney); |
|||
}); |
|||
newData.push(totalRow); |
|||
// this.pieData.push(pie); |
|||
}); |
|||
this.ForwardStandardRanking(newData, "itemTypeName"); |
|||
this.columnarChart(); |
|||
}, |
|||
ForwardStandardRanking(data, p) { |
|||
for (var i = 0; i < data.length - 1; i++) { |
|||
for (var j = 0; j < data.length - 1 - i; j++) { |
|||
var dd = data[j][p].localeCompare(data[j + 1][p], "zh"); //1---前者往后移,-1===位置不变 |
|||
if (dd > 0) { |
|||
var temp = data[j]; |
|||
data[j] = data[j + 1]; |
|||
data[j + 1] = temp; |
|||
} |
|||
} |
|||
} |
|||
this.tableData = data; |
|||
this.setStandardDates(this.tableData); |
|||
}, |
|||
setStandardDates(arr) { |
|||
var obj = {}, |
|||
k, |
|||
arr1 = []; |
|||
this.arr1 = []; |
|||
for (var i = 0, len = arr.length; i < len; i++) { |
|||
k = arr[i].itemTypeName; //需要合并的字段 |
|||
if (obj[k]) obj[k]++; |
|||
else obj[k] = 1; |
|||
} |
|||
//保存结果{el-'元素',count-出现次数} |
|||
for (var o in obj) { |
|||
for (let i = 0; i < obj[o]; i++) { |
|||
if (i === 0) { |
|||
this.arr1.push(obj[o]); |
|||
} else { |
|||
this.arr1.push(0); |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
objectStandardSpanMethod({ row, column, rowIndex, columnIndex }) { |
|||
if (columnIndex === 0) { |
|||
let _row = this.arr1[rowIndex]; |
|||
let _col = this.arr1[rowIndex] > 0 ? 1 : 0; |
|||
return [_row, _col]; |
|||
} |
|||
}, |
|||
tableRowClassName({ row, column, rowIndex, columnIndex }) { |
|||
if (row.asbitemName == "合计") { |
|||
return { backgroundColor: "#F5F7FA" }; |
|||
} |
|||
}, |
|||
getList() { |
|||
projectlist().then((res) => { |
|||
if (res.code != -1) { |
|||
this.registrardata = [...res.data]; |
|||
this.registrardata = this.formatData(this.registrardata); |
|||
} |
|||
}); |
|||
}, |
|||
formatData(dataList) { |
|||
for (let i = 0; i < dataList.length; i++) { |
|||
if (dataList[i].treeChildren.length < 1) { |
|||
dataList[i].treeChildren = undefined; |
|||
} else { |
|||
this.formatData(dataList[i].treeChildren); |
|||
} |
|||
} |
|||
return dataList; |
|||
}, |
|||
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: 15px; |
|||
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; |
|||
} |
|||
</style> |
|||
@ -0,0 +1,511 @@ |
|||
<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 |
|||
> |
|||
<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 |
|||
> |
|||
</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 |
|||
> |
|||
</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="settlement" 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 id="domTable"> |
|||
<div |
|||
style="background-color: #fff; padding: 15px; border-radius: 8px" |
|||
ref="imageDom" |
|||
> |
|||
<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%" |
|||
> |
|||
<el-table-column label="财务结算"> |
|||
<el-table-column :label="'时间:' + startDate + '至' + endDate"> |
|||
<template slot-scope="scope"> |
|||
<el-table :data="scope.row.chargeDetails" border> |
|||
<el-table-column label="收费汇总"> |
|||
<template slot-scope="scopes"> |
|||
<el-table |
|||
:data="scopes.row.payModeDetails" |
|||
border |
|||
show-summary |
|||
:summary-method="summarizeRegisterCounts" |
|||
> |
|||
<el-table-column :label="scopes.row.userName"> |
|||
<el-table-column |
|||
label="支付方式" |
|||
prop="payModeName" |
|||
></el-table-column> |
|||
<el-table-column |
|||
label="收费或退费金额" |
|||
prop="money" |
|||
></el-table-column> |
|||
</el-table-column> |
|||
</el-table> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<el-table :data="scope.row.chargeBackDetails" border> |
|||
<el-table-column label="退费汇总"> |
|||
<template slot-scope="scopes"> |
|||
<el-table |
|||
:data="scopes.row.payModeDetails" |
|||
border |
|||
show-summary |
|||
:summary-method="summarizeRegisterCounts" |
|||
> |
|||
<el-table-column :label="scopes.row.userName"> |
|||
<el-table-column |
|||
label="支付方式" |
|||
prop="payModeName" |
|||
></el-table-column> |
|||
<el-table-column |
|||
label="收费或退费金额" |
|||
prop="money" |
|||
></el-table-column> |
|||
</el-table-column> |
|||
</el-table> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
</template> |
|||
</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: [], |
|||
}; |
|||
}, |
|||
created() { |
|||
this.getList(); |
|||
}, |
|||
mounted() { |
|||
this.getNowTime(); |
|||
}, |
|||
methods: { |
|||
headerStyle({ row, column, rowIndex, columnIndex }) { |
|||
console.log(rowIndex); |
|||
if (rowIndex === 1) { |
|||
return "left-align"; |
|||
} |
|||
}, |
|||
summarizeRegisterCount(param) { |
|||
const { columns, data } = param; |
|||
const sums = []; |
|||
columns.forEach((column, index) => { |
|||
if (index === 0) { |
|||
let sumPrice = 0; |
|||
let chargeDetails = data[0].chargeDetails; |
|||
let chargeBackDetails = data[0].chargeBackDetails; |
|||
for (let i = 0; i < chargeDetails.length; i++) { |
|||
for (let k = 0; k < chargeDetails[i].payModeDetails.length; k++) { |
|||
sumPrice = ( |
|||
Number(sumPrice) + |
|||
Number(chargeDetails[i].payModeDetails[k].money) |
|||
).toFixed(2); |
|||
} |
|||
} |
|||
for (let i = 0; i < chargeBackDetails.length; i++) { |
|||
for ( |
|||
let k = 0; |
|||
k < chargeBackDetails[i].payModeDetails.length; |
|||
k++ |
|||
) { |
|||
sumPrice = ( |
|||
Number(sumPrice) - |
|||
Number(chargeBackDetails[i].payModeDetails[k].money) |
|||
).toFixed(2); |
|||
} |
|||
} |
|||
sums[index] = "收费扣除退费余计:" + sumPrice; |
|||
return; |
|||
} |
|||
}); |
|||
return sums; |
|||
}, |
|||
summarizeRegisterCounts(param) { |
|||
const { columns, data } = param; |
|||
const sums = []; |
|||
columns.forEach((column, index) => { |
|||
if (index === 0) { |
|||
sums[index] = "合计"; |
|||
return; |
|||
} |
|||
if (index === 1) { |
|||
let sum = 0; |
|||
data.forEach((data, index) => { |
|||
sum += Number(data.money); |
|||
}); |
|||
sums[index] = sum; |
|||
return; |
|||
} |
|||
}); |
|||
|
|||
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; |
|||
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; |
|||
}); |
|||
}, |
|||
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/charge/get-charge-and-charge-back-summary", { |
|||
userIds: that.username, |
|||
startDate: that.startDate, |
|||
endDate: that.endDate, |
|||
}).then((res) => { |
|||
if (res.code != -1) { |
|||
that.tableData = []; |
|||
this.tableData.push(res.data); |
|||
// this.yAxisData = []; |
|||
// this.seriesData = []; |
|||
// 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].personnelName); |
|||
// this.seriesData.push(res.data[i].registerCount); |
|||
// pie.name=res.data[i].personnelName |
|||
// pie.value=res.data[i].registerCount |
|||
// this.pieData.push(pie) |
|||
// } |
|||
// this.columnarChart(); |
|||
} |
|||
}); |
|||
}, |
|||
settlement() { |
|||
this.$confirm("请仔细核对金额,是否继续结算?", "提示", { |
|||
confirmButtonText: "确定", |
|||
cancelButtonText: "取消", |
|||
type: "warning", |
|||
cancelButtonClass: "difference", |
|||
confirmButtonClass: "commonbutton", |
|||
}) |
|||
.then(() => { |
|||
postapi("/api/app/charge/charge-and-charge-back-settlement", { |
|||
userIds: this.username, |
|||
startDate: this.startDate, |
|||
endDate: this.endDate, |
|||
}).then((res) => { |
|||
if (res.code != -1) { |
|||
this.$message.success("结算成功"); |
|||
} |
|||
}); |
|||
}) |
|||
.catch(() => {}); |
|||
}, |
|||
getList() { |
|||
getapi("/api/identity/users/getlist").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: 15px; |
|||
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; |
|||
} |
|||
</style> |
|||
1246
src/views/workload/individualfeedetails.vue
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,438 @@ |
|||
<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 |
|||
> |
|||
<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 |
|||
> |
|||
</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 |
|||
> |
|||
</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 :label="'体检总人次:' + sumCount + '个人:' + personalCount+'单位:'+customerOrgCount"> |
|||
<el-table-column |
|||
prop="customerOrgName" |
|||
label="单位" |
|||
></el-table-column> |
|||
<el-table-column |
|||
prop="summaryCount" |
|||
label="总检人数" |
|||
></el-table-column> |
|||
<el-table-column prop="chargeMoney" label="应收总金额"> |
|||
</el-table-column> |
|||
</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: [], |
|||
sumCount:"", |
|||
personalCount:"", |
|||
customerOrgCount:"" |
|||
}; |
|||
}, |
|||
created() { |
|||
// this.getList(); |
|||
}, |
|||
mounted() { |
|||
this.getNowTime(); |
|||
}, |
|||
methods: { |
|||
headerStyle({ row, column, rowIndex, columnIndex }) { |
|||
console.log(rowIndex); |
|||
if (rowIndex === 1) { |
|||
return "left-align"; |
|||
} |
|||
if (rowIndex === 2) { |
|||
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 || index === 2) { |
|||
sums[index] = values.reduce((prev, curr) => { |
|||
const value = Number(curr); |
|||
if (!isNaN(value)) { |
|||
return prev + curr; |
|||
} else { |
|||
return prev; |
|||
} |
|||
}, 0); |
|||
if(index === 1){ |
|||
sums[index] = "共" + sums[index] + "人"; |
|||
} |
|||
if(index===2){ |
|||
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; |
|||
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; |
|||
}); |
|||
}, |
|||
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/charge-report/get-summary-of-physical-examination-personnel-report", |
|||
{ |
|||
startDate: that.startDate, |
|||
endDate: that.endDate, |
|||
} |
|||
).then((res) => { |
|||
if (res.code != -1) { |
|||
that.tableData = [...res.data.details]; |
|||
that.sumCount=res.data.sumCount |
|||
that.personalCount=res.data.personalCount |
|||
that.customerOrgCount=res.data.customerOrgCount |
|||
this.yAxisData = []; |
|||
this.seriesData = []; |
|||
this.pieData=[] |
|||
let pies = { |
|||
name: "", |
|||
value: 0, |
|||
}; |
|||
for (let i = 0; i < res.data.details.length; i++) { |
|||
let pie = JSON.parse(JSON.stringify(pies)); |
|||
this.yAxisData.push(res.data.details[i].customerOrgName); |
|||
this.seriesData.push(res.data.details[i].summaryCount); |
|||
pie.name=res.data.details[i].customerOrgName |
|||
pie.value=res.data.details[i].summaryCount |
|||
this.pieData.push(pie) |
|||
} |
|||
this.columnarChart(); |
|||
} |
|||
}); |
|||
}, |
|||
getList() { |
|||
// getapi("/api/identity/users/getlist").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: 15px; |
|||
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; |
|||
} |
|||
</style> |
|||
@ -0,0 +1,486 @@ |
|||
<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 |
|||
> |
|||
<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 |
|||
> |
|||
</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 |
|||
> |
|||
</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 |
|||
: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 |
|||
:label=" |
|||
'实收总金额:' + |
|||
sumChargeMoney + |
|||
'退费金额:' + |
|||
sumChargeBackMoney + |
|||
'合计:' + |
|||
sumTotalMoney |
|||
" |
|||
> |
|||
<el-table-column |
|||
prop="chargeName" |
|||
label="收费员" |
|||
></el-table-column> |
|||
<el-table-column |
|||
prop="chargeMoney" |
|||
label="收费金额" |
|||
></el-table-column> |
|||
<el-table-column prop="chargeBackMoney" label="退费金额"> |
|||
</el-table-column> |
|||
<el-table-column prop="totalMoney" label="合计金额"> |
|||
</el-table-column> |
|||
</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"; |
|||
import { projectlist } from "@/request/commonapi"; |
|||
export default { |
|||
components: { |
|||
ChartBlock, |
|||
}, |
|||
data() { |
|||
return { |
|||
registrardata: [], |
|||
username: [], |
|||
startDate: "", |
|||
endDate: "", |
|||
tableData: [], |
|||
seriesData: [], |
|||
yAxisData: [], |
|||
flag: true, |
|||
pieData: [], |
|||
sumChargeMoney: "", |
|||
sumChargeBackMoney: "", |
|||
sumTotalMoney: "", |
|||
}; |
|||
}, |
|||
created() { |
|||
this.getList(); |
|||
}, |
|||
mounted() { |
|||
this.getNowTime(); |
|||
}, |
|||
methods: { |
|||
headerStyle({ row, column, rowIndex, columnIndex }) { |
|||
if (rowIndex === 1) { |
|||
return "left-align"; |
|||
} |
|||
if (rowIndex === 2) { |
|||
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 || index === 2) { |
|||
sums[index] = values.reduce((prev, curr) => { |
|||
const value = Number(curr); |
|||
if (!isNaN(value)) { |
|||
return prev + curr; |
|||
} else { |
|||
return prev; |
|||
} |
|||
}, 0); |
|||
if (index === 1) { |
|||
sums[index] = "共" + sums[index] + "人"; |
|||
} |
|||
if (index === 2) { |
|||
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; |
|||
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; |
|||
}); |
|||
}, |
|||
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/charge-report/get-toll-collector-fee-summary-report", |
|||
{ |
|||
userIds: that.username, |
|||
startDate: that.startDate, |
|||
endDate: that.endDate, |
|||
} |
|||
).then((res) => { |
|||
if (res.code != -1) { |
|||
that.tableData = [...res.data.details]; |
|||
that.sumChargeMoney = res.data.sumChargeMoney; |
|||
that.sumChargeBackMoney = res.data.sumChargeBackMoney; |
|||
that.sumTotalMoney = res.data.sumTotalMoney; |
|||
this.yAxisData = []; |
|||
this.seriesData = []; |
|||
this.pieData = []; |
|||
let pies = { |
|||
name: "", |
|||
value: 0, |
|||
}; |
|||
for (let i = 0; i < res.data.details.length; i++) { |
|||
let pie = JSON.parse(JSON.stringify(pies)); |
|||
this.yAxisData.push(res.data.details[i].chargeName); |
|||
this.seriesData.push(res.data.details[i].totalMoney); |
|||
pie.name = res.data.details[i].chargeName; |
|||
pie.value = res.data.details[i].totalMoney; |
|||
this.pieData.push(pie); |
|||
} |
|||
this.columnarChart(); |
|||
} |
|||
}); |
|||
}, |
|||
getList() { |
|||
getapi("/api/identity/users/getlist").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: 15px; |
|||
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; |
|||
} |
|||
</style> |
|||
1322
src/views/workload/tollcollector.vue
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
Write
Preview
Loading…
Cancel
Save
Reference in new issue