vxe-table-demonic
Version:
一个基于 vue 的 PC 端表单/表格组件,支持增删改查、虚拟列表、虚拟树、懒加载、快捷菜单、数据校验、树形结构、打印导出、表单渲染、数据分页、弹窗、自定义模板、渲染器、JSON 配置式...
59 lines (48 loc) • 1.8 kB
text/typescript
import { defineComponent, h, onUnmounted, inject, ref, Ref, reactive, onMounted, provide, nextTick } from 'vue'
import { errLog } from '../../tools/log'
import { createItem, watchItem, destroyItem, assemItem, XEFormItemProvide } from './util'
import { formItemProps } from './form-item'
import { VxeFormConstructor, VxeFormPrivateMethods } from '../../../types/all'
export default defineComponent({
name: 'VxeFormGather',
props: formItemProps,
setup (props, { slots }) {
const refElem = ref() as Ref<HTMLDivElement>
const $xeform = inject('$xeform', {} as VxeFormConstructor & VxeFormPrivateMethods)
const formGather = inject('$xeformgather', null as XEFormItemProvide | null)
const defaultSlot = slots.default
const formItem = reactive(createItem($xeform, props))
const xeformitem: XEFormItemProvide = { formItem }
const xeformiteminfo = { itemConfig: formItem }
formItem.children = []
provide('$xeformiteminfo', xeformiteminfo)
provide('$xeformgather', xeformitem)
provide('$xeformitem', null)
watchItem(props, formItem)
onMounted(() => {
assemItem($xeform, refElem.value, formItem, formGather)
})
onUnmounted(() => {
destroyItem($xeform, formItem)
})
if (process.env.VUE_APP_VXE_TABLE_ENV === 'development') {
nextTick(() => {
if ($xeform && $xeform.props.customLayout) {
errLog('vxe.error.errConflicts', ['custom-layout', '<form-gather ...>'])
}
})
}
const renderVN = () => {
return h('div', {
ref: refElem
}, defaultSlot ? defaultSlot() : [])
}
const $xeformgather = {
renderVN
}
return $xeformgather
},
render () {
return this.renderVN()
}
})