<!-- * Ag Grid 组选择 * https://www.ag-grid.com/vue-data-grid/row-selection/#group-selection --> <script setup lang="ts"> import { ref, reactive, onMounted } from 'vue'; import { AgGridVue } from 'ag-grid-vue3'; import AG_GRID_LOCALE from 'src/config/ag-grid-locale'; const defaultColDef = { flex: 1, minWidth: 100, suppressMenu: true, // 是否禁用标题行菜单 }; const gridApi = ref<any>(null); const gridColumnApi = ref<any>(null); const autoGroupColumnDef = reactive({ headerName: '运动员', field: 'athlete', minWidth: 250, sortable: true, cellRenderer: 'agGroupCellRenderer', cellRendererParams: { checkbox: true, }, }); const columnDefs = reactive([ { field: 'year', minWidth: 150, rowGroup: true, hide: true, sortable: true, headerName: '年份', }, { field: 'country', rowGroup: true, hide: true, sortable: true, headerName: '国家', }, { field: 'sport', headerName: '运动' }, { field: 'gold', aggFunc: 'sum', headerName: '金牌' }, { field: 'silver', aggFunc: 'sum', headerName: '银牌' }, { field: 'bronze', aggFunc: 'sum', headerName: '铜牌' }, { field: 'age', minWidth: 120, aggFunc: 'sum', headerName: '年龄', }, { field: 'date', minWidth: 150, headerName: '日期' }, ]); const state = reactive({ rowData: [] as any, }); onMounted(() => { // }); function getData() { fetch('https://www.ag-grid.com/example-assets/olympic-winners.json') .then((resp) => resp.json()) .then((data) => { state.rowData = data; console.log('state.rowData[0]', state.rowData[0]); }); } function onGridReady(params: any) { gridApi.value = params.api; gridColumnApi.value = params.columnApi; getData(); } function onFirstDataRendered() { // } function onSelectionChanged() { // const selectedNodes = gridApi.value.getSelectedNodes(); // console.log('selectedNodes', selectedNodes); } </script> <template> <div class="box"> <!-- rowSelection="multiple":多选,按住control键多选;【control+shift+鼠标点击】可选中多行 animateRows=true:启用行动画 :masterDetail="true" 启用展开的细节网格行 :isRowMaster="isRowMaster" 确定哪一个行该展开 rowSelection="single" single单选 multiple多选 :suppressContextMenu="true" 阻止显示右键单击时的上下文菜单 :suppressCellFocus="true" 阻止单元格聚焦 --> <div class="ag-table"> <ag-grid-vue style="height: 550px" class="ag-theme-alpine" :animateRows="true" :localeText="AG_GRID_LOCALE" :suppressContextMenu="true" :suppressCellFocus="true" :defaultColDef="defaultColDef" :columnDefs="columnDefs" :rowData="state.rowData" :autoGroupColumnDef="autoGroupColumnDef" :groupSelectsChildren="true" rowSelection="multiple" :suppressAggFuncInHeader="true" :suppressRowClickSelection="true" @grid-ready="onGridReady" @first-data-rendered="onFirstDataRendered" @selection-changed="onSelectionChanged" > </ag-grid-vue> </div> </div> </template> <style lang="scss" scoped> .ag-table { padding: 0 10px 10px 10px; } </style>