vue-fantable
Version:
Vue table component for huge data
106 lines (102 loc) • 2.31 kB
JSX
import { clsName } from '../util/index'
import FooterTr from './footer-tr.jsx'
import { COMPS_NAME } from '../util/constant'
export default {
name: COMPS_NAME.FAN_TABLE_FOOTER,
props: {
colgroups: {
type: Array,
required: true,
},
footerData: {
type: Array,
required: true,
},
hasFixedColumn: {
type: Boolean,
default: false,
},
allRowKeys: {
type: Array,
required: true,
},
rowKeyFieldName: {
type: String,
default: null,
},
// cell style option
cellStyleOption: {
type: Object,
default: function () {
return null
},
},
// event custom option
eventCustomOption: {
type: Object,
default: function () {
return null
},
},
// footer rows
footerRows: {
type: Array,
default: function () {
return []
},
},
// fixed footer
fixedFooter: {
type: Boolean,
default: true,
},
// cell span option
cellSpanOption: {
type: Object,
default: function () {
return null
},
},
},
computed: {
// footer class
footerClass() {
return {
[clsName('fixed-footer')]: this.fixedFooter,
}
},
},
methods: {
// get tr key
getTrKey({ rowData, rowIndex }) {
let result = rowIndex
const { rowKeyFieldName } = this
if (rowKeyFieldName) {
result = rowData[rowKeyFieldName]
}
return result
},
},
render() {
const { colgroups, rowKeyFieldName, cellStyleOption } = this
return (
<tfoot class={this.footerClass}>
{this.footerData.map((rowData, rowIndex) => {
const trProps = {
key: this.getTrKey({ rowData, rowIndex }),
rowIndex,
rowData,
colgroups,
rowKeyFieldName,
cellStyleOption,
footerRows: this.footerRows,
fixedFooter: this.fixedFooter,
cellSpanOption: this.cellSpanOption,
eventCustomOption: this.eventCustomOption,
}
return <FooterTr {...trProps} />
})}
</tfoot>
)
},
}