58 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Vue
		
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Vue
		
	
	
| import { defineComponent } from 'vue';
 | |
| import Cell from '../Cell';
 | |
| import { useInjectSummary } from '../context/SummaryContext';
 | |
| import { useInjectTable } from '../context/TableContext';
 | |
| import type { AlignType } from '../interface';
 | |
| import { getCellFixedInfo } from '../utils/fixUtil';
 | |
| 
 | |
| export interface SummaryCellProps {
 | |
|   index: number;
 | |
|   colSpan?: number;
 | |
|   rowSpan?: number;
 | |
|   align?: AlignType;
 | |
| }
 | |
| 
 | |
| export default defineComponent<SummaryCellProps>({
 | |
|   name: 'SummaryCell',
 | |
|   inheritAttrs: false,
 | |
|   props: ['index', 'colSpan', 'rowSpan', 'align'] as any,
 | |
|   setup(props, { attrs, slots }) {
 | |
|     const tableContext = useInjectTable();
 | |
|     const summaryContext = useInjectSummary();
 | |
|     return () => {
 | |
|       const { index, colSpan = 1, rowSpan, align } = props;
 | |
|       const { prefixCls, direction } = tableContext;
 | |
|       const { scrollColumnIndex, stickyOffsets, flattenColumns } = summaryContext;
 | |
|       const lastIndex = index + colSpan - 1;
 | |
|       const mergedColSpan = lastIndex + 1 === scrollColumnIndex ? colSpan + 1 : colSpan;
 | |
| 
 | |
|       const fixedInfo = getCellFixedInfo(
 | |
|         index,
 | |
|         index + mergedColSpan - 1,
 | |
|         flattenColumns,
 | |
|         stickyOffsets,
 | |
|         direction,
 | |
|       );
 | |
|       return (
 | |
|         <Cell
 | |
|           class={attrs.class as string}
 | |
|           index={index}
 | |
|           component="td"
 | |
|           prefixCls={prefixCls}
 | |
|           record={null}
 | |
|           dataIndex={null}
 | |
|           align={align}
 | |
|           customRender={() => ({
 | |
|             children: slots.default?.(),
 | |
|             props: {
 | |
|               colSpan: mergedColSpan,
 | |
|               rowSpan,
 | |
|             },
 | |
|           })}
 | |
|           {...fixedInfo}
 | |
|         />
 | |
|       );
 | |
|     };
 | |
|   },
 | |
| });
 |