修改报表格式2

This commit is contained in:
2025-11-04 16:45:41 +08:00
parent 97571652e5
commit b7412648b4

View File

@@ -168,6 +168,8 @@
fit fit
:default-sort="{ prop: 'chargeTime', order: 'descending' }" :default-sort="{ prop: 'chargeTime', order: 'descending' }"
@header-click="handleHeaderClick" @header-click="handleHeaderClick"
show-summary
:summary-method="getSummaries"
> >
<!-- :span-method="arraySpanMethod" --> <!-- :span-method="arraySpanMethod" -->
<!-- :summary-method="getSummaries" <!-- :summary-method="getSummaries"
@@ -283,7 +285,11 @@
min-width="100px" min-width="100px"
:show-overflow-tooltip="true" :show-overflow-tooltip="true"
resizable resizable
/> >
<template #default="scope">
<span>{{ scope.row.price || scope.row.salePrice || '0.00' }}</span>
</template>
</el-table-column>
<el-table-column <el-table-column
label="金额" label="金额"
align="center" align="center"
@@ -312,7 +318,7 @@
resizable resizable
> >
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.chargeTime) }}</span> <span>{{ parseTime(scope.row.chargeTime || scope.row.createTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@@ -351,6 +357,7 @@ import {
} from "./statisticalManagent"; } from "./statisticalManagent";
import useUserStore from "@/store/modules/user"; import useUserStore from "@/store/modules/user";
import { watch } from "vue"; import { watch } from "vue";
import { parseTime } from '@/utils/his'; // 导入日期时间处理工具函数
const userStore = useUserStore(); const userStore = useUserStore();
const router = useRouter(); const router = useRouter();
@@ -436,10 +443,10 @@ function getTotals(row,i){
// totalReturnPriceSums += Number(purchaseinventoryList.value[i-j].refundPrice) // totalReturnPriceSums += Number(purchaseinventoryList.value[i-j].refundPrice)
} }
} }
xiaojiTotal.value.push({inde:i+1,busNo:row.busNo,genderEnum_enumText:row.genderEnum_enumText,totalPrice:totalPriceSums.toFixed(4)||0.0000}) xiaojiTotal.value.push({inde:i+1,busNo:row.busNo,genderEnum_enumText:row.genderEnum_enumText,totalPrice:totalPriceSums.toFixed(2)||0.00})
// var totalPrice2 = 0 // var totalPrice2 = 0
// var refundPrice2 = 0 // var refundPrice2 = 0
purchaseinventoryList.value.splice(i+1, 0, {busNo:row.busNo,genderEnum_enumText:row.genderEnum_enumText,departmentName:'小计',totalPrice:totalPriceSums.toFixed(4)||0.0000}) purchaseinventoryList.value.splice(i+1, 0, {busNo:row.busNo,genderEnum_enumText:row.genderEnum_enumText,departmentName:'小计',totalPrice:totalPriceSums.toFixed(2)||0.00})
// purchaseinventoryList.value.map(k=>{ // purchaseinventoryList.value.map(k=>{
// if(k.departmentName!='小计'){ // if(k.departmentName!='小计'){
// totalPrice2 += Number(k.totalPrice) // totalPrice2 += Number(k.totalPrice)
@@ -450,66 +457,43 @@ function getTotals(row,i){
// refundPrice2 = refundPrice2?refundPrice2.toFixed(4):refundPrice2 // refundPrice2 = refundPrice2?refundPrice2.toFixed(4):refundPrice2
// purchaseinventoryList.value.push({departmentName:'合计',totalPrice:totalPrice2,refundPrice:refundPrice2}) // purchaseinventoryList.value.push({departmentName:'合计',totalPrice:totalPrice2,refundPrice:refundPrice2})
} }
const arraySpanMethod = ({ // 行合并方法 - 简化实现,避免在合并过程中修改数组
row, const arraySpanMethod = ({row, column, rowIndex, columnIndex}) => {
column, // 跳过小计行和合计行的合并处理
rowIndex, if (row.departmentName === '小计' || row.departmentName === '合计') {
columnIndex, return { rowspan: 1, colspan: 1 };
}) => {
// 合并一样的列住院号 outpatientNumber属性&&(queryParams.value.statisticsType==1||queryParams.value.statisticsType==4||queryParams.value.statisticsType==6)
if (columnIndex === 1&&purchaseinventoryList.value.length>0) {
if (rowIndex === 0 || (rowIndex > 0 && row.busNo !== purchaseinventoryList.value[rowIndex - 1]?.busNo)) {
let rowspan = 1;
let totalPriceSum = 0
// let totalReturnPriceSum = 0
for (let i = rowIndex + 1; i < purchaseinventoryList.value.length+1; i++) {
if(purchaseinventoryList.value[i-1].departmentName!='合计'){
if (purchaseinventoryList.value[i]&&purchaseinventoryList.value[i].busNo === row.busNo) {
rowspan++;
totalPriceSum += Number(purchaseinventoryList.value[i].totalPrice)
// totalReturnPriceSum += Number(purchaseinventoryList.value[i].refundPrice)
if(i==purchaseinventoryList.value.length-1){
let findIndexTotal = xiaojiTotal.value.findIndex(k=>k.busNo==row.busNo)
if(findIndexTotal<0){
getTotals(row,i)
}
}else{
}
} else {
totalPriceSum += Number(row.totalPrice)
// totalReturnPriceSum += Number(row.refundPrice)
let findIndexTotal = xiaojiTotal.value.findIndex(k=>k.busNo==row.busNo)
if(findIndexTotal<0){
xiaojiTotal.value.push({inde:i,genderEnum_enumText:row.genderEnum_enumText,busNo:row.busNo,totalPrice:totalPriceSum})
purchaseinventoryList.value.splice(i, 0, {busNo:row.busNo,genderEnum_enumText:row.genderEnum_enumText,departmentName:'小计',totalPrice:totalPriceSum.toFixed(4)||0.0000})
// console.log(purchaseinventoryList.value,"12121")
} }
// 只合并门诊号列(索引1)
if (columnIndex === 1) {
// 查找当前门诊号的起始位置
let startIndex = rowIndex;
while (startIndex > 0) {
const prevRow = purchaseinventoryList.value[startIndex - 1];
// 如果前一行是小计行或者门诊号不同,当前行就是起始行
if (prevRow.departmentName === '小计' || prevRow.busNo !== row.busNo) {
break; break;
} }
startIndex--;
} }
// 如果当前行是门诊号的起始行
if (startIndex === rowIndex) {
let rowspan = 1;
// 计算门诊号相同的连续行数
for (let i = rowIndex + 1; i < purchaseinventoryList.value.length; i++) {
const nextRow = purchaseinventoryList.value[i];
// 如果下一行是小计行或者门诊号不同,停止计数
if (nextRow.departmentName === '小计' || nextRow.busNo !== row.busNo) {
break;
}
rowspan++;
} }
// console.log(purchaseinventoryList.value,"12122")
return { rowspan, colspan: 1 }; return { rowspan, colspan: 1 };
} else { } else {
// console.log(purchaseinventoryList.value,"12123") // 非起始行不显示
return { rowspan: 0, colspan: 0 }; return { rowspan: 0, colspan: 0 };
} }
// }else{ // 姓名列patientName
// if (columnIndex ===2&&purchaseinventoryList.value.length>0) {
// if (rowIndex === 0 || (rowIndex > 0 && row.name !== purchaseinventoryList.value[rowIndex - 1]?.name)) {
// let rowspan = 1;
// for (let i = rowIndex + 1; i < purchaseinventoryList.value.length; i++) {
// if (purchaseinventoryList.value[i].name === row.name) {
// rowspan++;
// } else {
// break;
// }
// }
// return { rowspan:rowspan, colspan: 1 };
// } else {
// return { rowspan: 0, colspan: 0 };
// }
// }
} }
} }
const getSummaries = (param) => { const getSummaries = (param) => {
@@ -527,11 +511,11 @@ const getSummaries = (param) => {
sums[index] = `${values.reduce((prev, curr) => { sums[index] = `${values.reduce((prev, curr) => {
const value = Number(curr) const value = Number(curr)
if (!Number.isNaN(value)) { if (!Number.isNaN(value)) {
return (Number(prev) + Number(curr)).toFixed(4) || 0.0000 return (Number(prev) + Number(curr)).toFixed(2) || 0.00
} else { } else {
return Number(prev) return Number(prev)
} }
}, 0.0000)}` }, 0.00)}`
} else { } else {
sums[index] = ' ' sums[index] = ' '
} }
@@ -583,6 +567,7 @@ function getList(type) {
// var purchaseinventoryLists = [] // var purchaseinventoryLists = []
// var purchaseinventoryListsArray = [] // var purchaseinventoryListsArray = []
getReportChargePage(queryParams.value).then((res) => { getReportChargePage(queryParams.value).then((res) => {
console.log('API返回数据:', res.data.records && res.data.records.length > 0 ? res.data.records[0] : {}); // 调试日志
// purchaseinventoryLists = res.data.records||[] //转换数据结构 // purchaseinventoryLists = res.data.records||[] //转换数据结构
// if(purchaseinventoryLists.length>0){ // if(purchaseinventoryLists.length>0){
// purchaseinventoryLists.map(p=>{ // purchaseinventoryLists.map(p=>{
@@ -594,10 +579,15 @@ function getList(type) {
purchaseinventoryList.value = res.data.records||[] purchaseinventoryList.value = res.data.records||[]
total.value = res.data.total total.value = res.data.total
purchaseinventoryList.value.map(k=>{ purchaseinventoryList.value.map(k=>{
k.totalPrice = k.totalPrice?k.totalPrice.toFixed(4):'0.0000' k.totalPrice = k.totalPrice?k.totalPrice.toFixed(2):'0.00'
k.price = k.price?k.price.toFixed(4):'0.0000' // 优先使用price其次使用salePrice
k.price = k.price ? k.price.toFixed(2) : (k.salePrice ? k.salePrice.toFixed(2) : '0.00')
// 如果没有chargeTime尝试使用createTime作为替代
if (!k.chargeTime && k.createTime) {
k.chargeTime = k.createTime;
}
// k.refundPrice = k.refundPrice || '0.00' // k.refundPrice = k.refundPrice || '0.00'
k.number = k.number?(k.number+(k.quantityUnit_dictText?k.quantityUnit_dictText:"")):('0.0000'+ k.quantityUnit_dictText?k.quantityUnit_dictText:"") k.number = k.number ? (k.number + (k.quantityUnit_dictText || '')) : ('0.00' + (k.quantityUnit_dictText || ''))
// k.refundQuantity = k.refundQuantity?(k.refundQuantity+k.refundUnitCode_dictText):('0.00'+ k.quantityUnit_dictText) // k.refundQuantity = k.refundQuantity?(k.refundQuantity+k.refundUnitCode_dictText):('0.00'+ k.quantityUnit_dictText)
if(total.value&&total.value<=queryParams.value.pageSize){ if(total.value&&total.value<=queryParams.value.pageSize){
totalPrice2 += Number(k.totalPrice) totalPrice2 += Number(k.totalPrice)
@@ -607,15 +597,7 @@ function getList(type) {
if(total.value<=res.data.size){ if(total.value<=res.data.size){
loading.value = false; loading.value = false;
} }
// 1页数据 // 1页数据不再手动添加合计行使用表格的show-summary功能
if(total.value&&total.value<=queryParams.value.pageSize){
totalPrice2 = totalPrice2?totalPrice2.toFixed(4):totalPrice2
// refundPrice2 = refundPrice2?refundPrice2.toFixed(4):refundPrice2
let pageNoAll = total.value / queryParams.value.pageSize
if(Math.ceil(pageNoAll)==queryParams.value.pageNo){
purchaseinventoryList.value.push({departmentName:'合计',totalPrice:totalPrice2})
}
}
// 带分页数据 // 带分页数据
if(total.value&&total.value>queryParams.value.pageSize){ if(total.value&&total.value>queryParams.value.pageSize){
@@ -636,10 +618,15 @@ function getList(type) {
purchaseinventoryListAll.value = res.data.records||[] purchaseinventoryListAll.value = res.data.records||[]
if(purchaseinventoryListAll.value.length>0){ if(purchaseinventoryListAll.value.length>0){
purchaseinventoryListAll.value.map((k,index)=>{ purchaseinventoryListAll.value.map((k,index)=>{
k.totalPrice = k.totalPrice?k.totalPrice.toFixed(4):'0.0000' k.totalPrice = k.totalPrice?k.totalPrice.toFixed(2):'0.00'
k.price = k.price?k.price.toFixed(4):'0.0000' // 优先使用price其次使用salePrice
k.price = k.price ? k.price.toFixed(2) : (k.salePrice ? k.salePrice.toFixed(2) : '0.00')
// 如果没有chargeTime尝试使用createTime作为替代
if (!k.chargeTime && k.createTime) {
k.chargeTime = k.createTime;
}
// k.refundPrice = k.refundPrice || '0.00' // k.refundPrice = k.refundPrice || '0.00'
k.number = k.number?(k.number+k.quantityUnit_dictText?k.quantityUnit_dictText:""):('0.0000'+ k.quantityUnit_dictText?k.quantityUnit_dictText:"") k.number = k.number ? (k.number + (k.quantityUnit_dictText || '')) : ('0.00' + (k.quantityUnit_dictText || ''))
// k.refundQuantity = k.refundQuantity?(k.refundQuantity+k.refundUnitCode_dictText):('0.00'+ k.quantityUnit_dictText) // k.refundQuantity = k.refundQuantity?(k.refundQuantity+k.refundUnitCode_dictText):('0.00'+ k.quantityUnit_dictText)
totalPrice2 += Number(k.totalPrice) totalPrice2 += Number(k.totalPrice)
// refundPrice2 += Number(k.refundPrice) // refundPrice2 += Number(k.refundPrice)
@@ -655,7 +642,7 @@ function getList(type) {
if(dispenseNoIndex1>0){ if(dispenseNoIndex1>0){
purchaseinventoryList.value[dispenseNoIndex1].totalPrice = Number(purchaseinventoryList.value[dispenseNoIndex1].totalPrice)+Number(purchaseinventoryListAll.value[index-m].totalPrice) purchaseinventoryList.value[dispenseNoIndex1].totalPrice = Number(purchaseinventoryList.value[dispenseNoIndex1].totalPrice)+Number(purchaseinventoryListAll.value[index-m].totalPrice)
purchaseinventoryList.value[dispenseNoIndex1].totalPrice = purchaseinventoryList.value[dispenseNoIndex1].totalPrice?purchaseinventoryList.value[dispenseNoIndex1].totalPrice.toFixed(4):'0.0000' purchaseinventoryList.value[dispenseNoIndex1].totalPrice = purchaseinventoryList.value[dispenseNoIndex1].totalPrice?purchaseinventoryList.value[dispenseNoIndex1].totalPrice.toFixed(2):'0.00'
} }
} }
if ((index+m) == (queryParams.value.pageSize*queryParams.value.pageNo)&& k.busNo == purchaseinventoryListAll.value[index + m]?.busNo) { if ((index+m) == (queryParams.value.pageSize*queryParams.value.pageNo)&& k.busNo == purchaseinventoryListAll.value[index + m]?.busNo) {
@@ -674,10 +661,7 @@ function getList(type) {
totalPrice2 = totalPrice2?totalPrice2.toFixed(4):totalPrice2 totalPrice2 = totalPrice2?totalPrice2.toFixed(4):totalPrice2
// refundPrice2 = refundPrice2?refundPrice2.toFixed(4):refundPrice2 // refundPrice2 = refundPrice2?refundPrice2.toFixed(4):refundPrice2
loading.value = false; loading.value = false;
let pageNoAll = total.value / queryParams.value.pageSize // 不再手动添加合计行使用表格的show-summary功能
if(Math.ceil(pageNoAll)==queryParams.value.pageNo){
purchaseinventoryList.value.push({departmentName:'合计',totalPrice:totalPrice2})
}
} }
}) })
} }