From d1b7ac7d9dda39bfd8a5a3701d22e191c9a1ec36 Mon Sep 17 00:00:00 2001 From: hcyhuchaoyue <hcyhuchaoyue@163.com> Date: Wed, 28 Dec 2022 23:26:45 +0800 Subject: [PATCH] =?UTF-8?q?feat:Ag=20Grid=20=E8=A1=A8=E6=A0=BC=E6=89=A9?= =?UTF-8?q?=E5=B1=95=E8=A1=8C=E5=AD=A6=E4=B9=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 4 + src/modules/page9/IndexPage.vue | 10 +- src/modules/page9/element/AgGridGroup1.vue | 143 +++++++++++++++++++++ 3 files changed, 155 insertions(+), 2 deletions(-) create mode 100644 src/modules/page9/element/AgGridGroup1.vue diff --git a/CHANGELOG.md b/CHANGELOG.md index 938aa78..e8d1366 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2022-12-28 + +- Ag Grid è¡¨æ ¼æ‰©å±•è¡Œå¦ä¹ + ## 2022-12-25 - 一言 diff --git a/src/modules/page9/IndexPage.vue b/src/modules/page9/IndexPage.vue index ea46b62..a9cc799 100644 --- a/src/modules/page9/IndexPage.vue +++ b/src/modules/page9/IndexPage.vue @@ -10,6 +10,7 @@ import SvgLineDrawingAnimation from './element/SvgLineDrawingAnimation.vue'; import FlyingTextAnimationEffects from './element/FlyingTextAnimationEffects.vue'; import TransformationAnimation from './element/TransformationAnimation.vue'; import AgGridStudy from './element/AgGridStudy2.vue'; +import AgGridGroup1 from './element/AgGridGroup1.vue'; const listData = [ { @@ -36,10 +37,14 @@ const listData = [ title: 'AG grid', name: 'ag-grid-study', }, + { + title: 'AG grid 分组1', + name: 'ag-grid-group1', + }, ]; const isShow = ref(true); -const elementName = ref('ag-grid-study'); -const elementTitle = ref(''); +const elementName = ref('ag-grid-group1'); +const elementTitle = ref('AG grid 分组1'); function onclick(data: any) { elementTitle.value = data.title; @@ -77,6 +82,7 @@ function goBack() { v-if="elementName === 'transformation-animation'" /> <ag-grid-study v-if="elementName === 'ag-grid-study'" /> + <ag-grid-group1 v-if="elementName === 'ag-grid-group1'" /> </div> </div> <div v-else> diff --git a/src/modules/page9/element/AgGridGroup1.vue b/src/modules/page9/element/AgGridGroup1.vue new file mode 100644 index 0000000..fa027d8 --- /dev/null +++ b/src/modules/page9/element/AgGridGroup1.vue @@ -0,0 +1,143 @@ +<!-- + * AG-grid ç»†èŠ‚ç½‘æ ¼ + * https://www.ag-grid.com/vue-data-grid/master-detail/ + --> +<script setup lang="ts"> +import { ref, reactive, onMounted } from 'vue'; +import { AgGridVue } from 'ag-grid-vue3'; +import 'ag-grid-enterprise'; +import 'ag-grid-community/styles/ag-grid.css'; +import 'ag-grid-community/styles/ag-theme-alpine.css'; + +const defaultColDef = { + resizable: true, + flex: 1, +}; + +const gridApi = ref<any>(null); +const columnApi = ref<any>(null); +const detailCellRendererParams = reactive({ + // æä¾›è¦åœ¨ç»†èŠ‚ç½‘æ ¼ä¸Šä½¿ç”¨çš„ç½‘æ ¼é€‰é¡¹ + detailGridOptions: { + columnDefs: [ + { field: 'name', headerName: 'å§“å' }, + { field: 'remark', headerName: '备注' }, + { field: 'age', headerName: '年龄' }, + ], + defaultColDef: { + flex: 1, + }, + }, + // 获得æ¯ä¸ªç»†èŠ‚ç½‘æ ¼çš„è¡Œæ•° + getDetailRowData: (params: any) => { + console.log('getDetailRowData params', params); + params.successCallback(params.data.items || []); + }, +}); + +const state = reactive({ + columnDefs: [ + { field: 'year', headerName: '年份', cellRenderer: 'agGroupCellRenderer' }, + { field: 'age', headerName: '年龄' }, + { + field: 'country', + headerName: '国家', + }, + { + field: 'sport', + headerName: 'è¿åЍ', + }, + { field: 'gold', headerName: '金' }, + { field: 'silver', headerName: 'é“¶' }, + { + field: 'bronze', + headerName: '铜', + }, + ], + rowData: [] as any, +}); + +onMounted(() => { + fetch('https://www.ag-grid.com/example-assets/olympic-winners.json') + .then((result) => result.json()) + .then((remoteRowData) => { + state.rowData = remoteRowData; + state.rowData[0].items = [ + { + name: 'å¼ ä¸‰', + remark: 'æ³•å¤–ç‹‚å¾’å¼ ä¸‰', + age: 18, + }, + { + name: 'æŽå››', + remark: 'å¼ ä¸‰çš„å°å¼Ÿ', + age: 17, + }, + { + name: '王五', + remark: 'å¼ ä¸‰èˆ…èˆ…', + age: 54, + }, + { + name: 'æŽå¤§ç™½', + remark: 'å¼ ä¸‰çˆ¶äº²', + age: 50, + }, + { + name: '刘波', + remark: 'å¼ ä¸‰å“¥å“¥', + age: 23, + }, + ]; + console.log('rowData', state.rowData[0]); + }); + + // .then((remoteRowData) => (state.rowData = remoteRowData)); +}); + +function cellWasClicked(event: any) { + console.log('cellWasClicked >>>>', event); +} + +function onGridReady(params: any) { + gridApi.value = params.api; + columnApi.value = params.columnApi; +} + +function isRowMaster(dataItem: any) { + let flag; + if (dataItem && dataItem.items && dataItem.items.length > 0) { + flag = true; + } else { + flag = false; + } + return flag; +} +</script> +<template> + <div class="box"> + <!-- + rowSelection="multiple":多选,按ä½control键多选;ã€control+shift+é¼ æ ‡ç‚¹å‡»ã€‘å¯é€‰ä¸å¤šè¡Œ + animateRows=true:å¯ç”¨è¡ŒåŠ¨ç”» + --> + + <div> + <ag-grid-vue + style="height: 500px" + class="ag-theme-alpine" + :columnDefs="state.columnDefs" + :rowData="state.rowData" + :defaultColDef="defaultColDef" + :isRowMaster="isRowMaster" + :animateRows="true" + :masterDetail="true" + :detailCellRendererParams="detailCellRendererParams" + @cell-clicked="cellWasClicked" + @grid-ready="onGridReady" + > + </ag-grid-vue> + </div> + </div> +</template> + +<style lang="scss" scoped></style> -- 2.21.0