销售汇总表合计行固定在底部 板块列内容竖排 第二列相同内容合并

This commit is contained in:
mll
2026-04-28 14:47:32 +08:00
parent 8a3d5bf562
commit 72d2455849
2 changed files with 39 additions and 9 deletions

View File

@@ -310,15 +310,17 @@ const openSaleDetail=(row)=>{
// 第一列纵向合并的标记数组
const rowMergeArr = ref([])
const rowMergeArr1 = ref([])
// 预处理计算第一列相邻bk相同的纵向合并规则
const initMerge = () => {
const list = tableData.value
const len = list.length
rowMergeArr.value = new Array(len).fill(1)
rowMergeArr1.value = new Array(len).fill(1)
// 遍历所有行统计相邻bk相同的行数
let count = 1
let count = 1,count1=1
for (let i = 1; i < len; i++) {
if (list[i].bk === list[i - 1].bk) {
// 相同bk当前行标记为0隐藏累加计数
@@ -329,9 +331,19 @@ const initMerge = () => {
rowMergeArr.value[i - count] = count
count = 1
}
if (list[i].zone_name === list[i - 1].zone_name) {
// 相同bk当前行标记为0隐藏累加计数
count1++
rowMergeArr1.value[i] = 0
} else {
// 不同bk把之前的计数赋值给组内第一行
rowMergeArr1.value[i - count1] = count1
count1 = 1
}
}
// 处理最后一组数据
rowMergeArr.value[len - count] = count
rowMergeArr1.value[len - count1] = count1
}
// Avue 核心合并方法
@@ -360,6 +372,11 @@ const spanMethod = ({ row, rowIndex, columnIndex }) => {
rowspan: rowMergeArr.value[rowIndex],
colspan: 1
}
}else if(columnIndex===1){
return {
rowspan: rowMergeArr1.value[rowIndex],
colspan: 1
}
}
// ======================================
@@ -440,7 +457,7 @@ watch(()=>tableHeightRef.value,()=>{
if(tableHeightRef.value){
setTimeout(()=>{
observeHeightChange(document.querySelector('.avue-crud__search'))
if(tableOption.value.showSummary&&tableOption.value.index&&tableOption.value.selection){
if(tableOption.value.showSummary&&(tableOption.value.index&&tableOption.value.selection||props.reportCode==='zhxs-hz')){
document.querySelector('tfoot tr td').colSpan="2"
document.querySelectorAll('tfoot tr td')[1].style.display="none"
}
@@ -497,7 +514,7 @@ const summaryMethod1=({columns,data})=>{
if(props.reportCode=='zhxs-hz'){
if(row.zone_name.includes('总计')&&row.zone_name!=='总计') return 'color-B9DEE8'
else if((row.zone_name.includes('合计')&&row.bk!=='合计')||row.zone_name=='其他收入'||(columnIndex==0&&row.zone_name!=='总计')) return 'color-90B3E2'
else if(row.bk=='总计'&&row.zone_name=='总计') return 'color-548CD6'
}
}
const headerCellClassNameMethod=({row,column,rowIndex,columnIndex})=>{
@@ -623,6 +640,9 @@ const initTable = async () => {
}
defualtSearch.value[config.prop]=tableSearch.value[config.prop]
}
if(props.reportCode=='zhxs-hz'&&item.fieldName=='板块'){
config.overHidden=false
}
if(['年','年度','年份','月','月度','月份','年月'].includes(item.fieldName)&&config.search){
config.searchSpan=3
@@ -1047,6 +1067,15 @@ const getTableData = async (isLoading = true) => {
})
tableData.value=tableData.value.filter(item=>item.customname!=='合计')
}
if(props.reportCode==='zhxs-hz'&&tableData.value.filter(item=>item.bk=='总计').length){
value=tData.filter(item=>item.bk=='总计'&&item.zone_name=='总计')[0]
value.bk=''
value.zone_name=''
Object.keys(value).forEach(key=>{
value[key+'_s']=value[key]
})
tableData.value=tableData.value.filter(item=> item.bk!=='总计'&&item.zone_name!=='总计')
}
keys.forEach(item=>{
let key=amountFieds.value[item].prop
key!=='fistField'?obj[key]=value[item]:''
@@ -1074,7 +1103,8 @@ const getTableData = async (isLoading = true) => {
'PSI':['产品ID','货品ID','产品名称','产品规格','单位','每件数量'],
'ZHXSQK':['标准品名','客户名称'],
'kcqmltj':['产品名称','规格','商品名','通用名'],
'zd_customer':['客户名称','年月']
'zd_customer':['客户名称','年月'],
'zhxs-hz':['板块']
}
Object.keys(tableOption.value.column).forEach(key=>{
const showCols=Object.values(tableOption.value.column).filter(item=>!item.hide)
@@ -1256,10 +1286,7 @@ defineExpose({
background-color: #90B3E2 !important;
font-weight: bold !important;
}
.color-548CD6{
background-color: #548CD6 !important;
font-weight: bold !important;
}
td.el-table__cell,th.el-table__cell{
border-right: 1px solid #000 !important;
border-bottom: 1px solid #000 !important;

View File

@@ -159,5 +159,8 @@
white-space: normal;
word-break: break-all;
}
.low-reoprt.low-report__zhxs-hz .el-table__footer-wrapper tfoot td.el-table__cell{
background-color:#548CD6 !important;color:#fff !important;font-weight:bold !important;
}
@include scrollBar;