You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
153 lines
3.7 KiB
153 lines
3.7 KiB
<template>
|
|
<AgGridVue
|
|
:style="`width: 100%; height: ${tableHeight}`"
|
|
class="ag-theme-alpine"
|
|
:columnDefs="columnDefs"
|
|
@grid-ready="onGridReady"
|
|
:defaultColDef="defaultColDef"
|
|
:suppressDragLeaveHidesColumns="true"
|
|
:columnResized="columnResized"
|
|
@filterChanged="onFloatingFilterChanged"
|
|
></AgGridVue>
|
|
</template>
|
|
<script>
|
|
import "ag-grid-community/styles/ag-grid.css";
|
|
import "ag-grid-community/styles/ag-theme-alpine.css";
|
|
import { AgGridVue } from 'ag-grid-vue';
|
|
export default {
|
|
name: "AgTable",
|
|
components: {
|
|
AgGridVue
|
|
},
|
|
props:{
|
|
// 列数据
|
|
columnDefs:{
|
|
type: Array,
|
|
default: null
|
|
},
|
|
// 底部汇总元素
|
|
BottomFixedItem:{
|
|
type:Array,
|
|
default:[]
|
|
},
|
|
},
|
|
data () {
|
|
return {
|
|
gridApi: null,
|
|
gridColumnApi: null,
|
|
defaultColDef: {
|
|
flex: 1,
|
|
filter: true,
|
|
sortable: true,
|
|
floatingFilter: true,
|
|
resizable:true,
|
|
cellClass:"cell-wrap-text",
|
|
headerClass: 'ag-header-center',
|
|
autoHeight:true
|
|
},
|
|
tableHeight:null,
|
|
// pagination: true, //开启分页(前端分页)
|
|
// paginationAutoPageSize: true, //根据网页高度自动分页(前端分页)
|
|
};
|
|
},
|
|
mounted(){
|
|
this.setTableHeight()
|
|
},
|
|
methods: {
|
|
// 筛选后操作
|
|
onFloatingFilterChanged(data){
|
|
const allData = [];
|
|
data.api.forEachNodeAfterFilter(node => {
|
|
allData.push(node.data)
|
|
});
|
|
this.setTableTotal(allData)
|
|
},
|
|
// 自适应高度
|
|
columnResized(event){
|
|
if(event.finished){
|
|
this.gridApi.resetRowHeights()
|
|
}
|
|
},
|
|
// 总计
|
|
setTableTotal(list) {
|
|
if(!this.BottomFixedItem || this.BottomFixedItem.length <= 0)return
|
|
let result = [{}]
|
|
this.BottomFixedItem.forEach(item=>{
|
|
result[0][item] = 0
|
|
})
|
|
list.forEach((item,key) => {
|
|
for(let o in item){
|
|
if(this.BottomFixedItem.indexOf(o) >= 0){
|
|
result[0][o] += item[o]
|
|
}
|
|
}
|
|
});
|
|
this.gridApi.setPinnedBottomRowData(result);
|
|
},
|
|
// 设置表格高度
|
|
setTableHeight(){
|
|
let _headerH = document.getElementsByClassName('reportPageHeader')[0].clientHeight + 10
|
|
this.tableHeight = `calc(100% - ${_headerH}px)`
|
|
},
|
|
// 更新table值
|
|
updateTableData(data){
|
|
this.gridApi.setRowData(data)
|
|
this.setTableTotal(data)
|
|
this.gridApi.resetRowHeights();
|
|
},
|
|
// 加载agGrid
|
|
onGridReady(params) {
|
|
this.gridApi = params.api;
|
|
this.gridColumnApi = params.columnApi;
|
|
},
|
|
},
|
|
};
|
|
</script>
|
|
<style lang="less">
|
|
.ag-theme-alpine{
|
|
--ag-header-foreground-color: white;
|
|
--ag-header-background-color: #5a81b7;
|
|
--ag-header-cell-hover-background-color: #5a81b7;
|
|
--ag-header-cell-moving-background-color: #5a81b7;
|
|
|
|
.ag-floating-filter-input .ag-input-field-input{
|
|
color:#333 !important
|
|
}
|
|
|
|
.ag-header-icon{
|
|
color:#fff !important
|
|
}
|
|
|
|
.cell-wrap-text{
|
|
white-space:normal !important
|
|
}
|
|
|
|
.ag-row-pinned{
|
|
background:#5a81b7;
|
|
color:#fff;
|
|
font-weight:bold
|
|
}
|
|
|
|
.ag-cell{
|
|
line-height:unset;
|
|
display: flex;
|
|
align-items: center;
|
|
|
|
&.rightAlign{
|
|
justify-content: flex-end;
|
|
}
|
|
|
|
&.centerAlign{
|
|
justify-content: center;
|
|
}
|
|
}
|
|
|
|
.ag-cell-value{
|
|
overflow: unset;
|
|
text-overflow: unset;
|
|
word-break:break-all;
|
|
padding-top:5px;
|
|
padding-bottom:5px
|
|
}
|
|
}
|
|
</style>
|