diff --git a/src/components/DataTable/DataTable.vue b/src/components/DataTable/DataTable.vue index fc8bbea..ceb41f3 100644 --- a/src/components/DataTable/DataTable.vue +++ b/src/components/DataTable/DataTable.vue @@ -44,7 +44,7 @@ interface Column { label: string width?: number | string minWidth?: number | string - type?: 'status' | 'text' + type?: 'status' | 'text' | 'selection' statusMap?: Record slot?: string formatter?: (row: any) => string @@ -87,6 +87,7 @@ const emit = defineEmits<{ (e: 'row-click', row: any): void (e: 'page-change', page: number): void (e: 'limit-change', limit: number): void + (e: 'selection-change', rows: any[]): void }>() const hasStatusCol = computed(() => props.columns.some(c => c.type === 'status')) @@ -97,6 +98,7 @@ function getStatusMeta(col: Column, value: string) { return col.statusMap?.[value] || { label: value || '--', type: 'info' } } +function onSelectionChange(rows: any[]) { emit('selection-change', rows) } function onRowClick(row: any) { emit('row-click', row) } @@ -118,6 +120,7 @@ function onLimitChange(l: number) { :row-key="rowKey" style="width: 100%" @row-click="onRowClick" + @selection-change="onSelectionChange" row-class-name="rr-clickable-row" :header-row-style="{ height: '40px' }" :row-style="{ height: '52px' }" @@ -141,9 +144,15 @@ function onLimitChange(l: number) { height: '52px' }" > +