vxe-table-demonic
Version:
一个基于 vue 的 PC 端表单/表格组件,支持增删改查、虚拟列表、虚拟树、懒加载、快捷菜单、数据校验、树形结构、打印导出、表单渲染、数据分页、弹窗、自定义模板、渲染器、JSON 配置式...
48 lines (39 loc) • 1.44 kB
text/typescript
import { defineComponent, h, onUnmounted, provide, inject, ref, Ref, onMounted, Slot } from 'vue'
import { columnProps } from './column'
import { XEColumnInstance, watchColumn, assemColumn, destroyColumn } from '../../table/src/util'
import Cell from '../../table/src/cell'
import { VxeTableConstructor, VxeTablePrivateMethods } from '../../../types/all'
export default defineComponent({
name: 'VxeColgroup',
props: columnProps,
setup (props, { slots }) {
const refElem = ref() as Ref<HTMLDivElement>
const $xetable = inject('$xetable', {} as VxeTableConstructor & VxeTablePrivateMethods)
const colgroup = inject('xecolgroup', null as XEColumnInstance | null)
const column = Cell.createColumn($xetable, props)
const columnSlots: {
header?: Slot;
} = {}
if (slots.header) {
columnSlots.header = slots.header
}
const xecolumn: XEColumnInstance = { column }
column.slots = columnSlots
column.children = []
provide('xecolgroup', xecolumn)
provide('$xegrid', null)
watchColumn($xetable, props, column)
onMounted(() => {
assemColumn($xetable, refElem.value, column, colgroup)
})
onUnmounted(() => {
destroyColumn($xetable, column)
})
const renderVN = () => {
return h('div', {
ref: refElem
}, slots.default ? slots.default() : [])
}
return renderVN
}
})