vxe-table-demonic
Version:
一个基于 vue 的 PC 端表单/表格组件,支持增删改查、虚拟列表、虚拟树、懒加载、快捷菜单、数据校验、树形结构、打印导出、表单渲染、数据分页、弹窗、自定义模板、渲染器、JSON 配置式...
83 lines (78 loc) • 2.85 kB
text/typescript
import { ComponentOptions, h, resolveComponent } from 'vue'
import GlobalConfig from '../../v-x-e-table/src/conf'
import { VXETable } from '../../v-x-e-table'
import { getFuncText, isEnableConf } from '../../tools/utils'
import { getSlotVNs } from '../../tools/vn'
import { VxeFormConstructor, VxeFormDefines, VxeFormItemPropTypes, VxeFormPrivateMethods } from '../../../types/all'
function renderPrefixIcon (titlePrefix: VxeFormItemPropTypes.TitlePrefix) {
return h('span', {
class: 'vxe-form--item-title-prefix'
}, [
h('i', {
class: titlePrefix.icon || GlobalConfig.icon.FORM_PREFIX
})
])
}
function renderSuffixIcon (titleSuffix: VxeFormItemPropTypes.TitleSuffix) {
return h('span', {
class: 'vxe-form--item-title-suffix'
}, [
h('i', {
class: titleSuffix.icon || GlobalConfig.icon.FORM_SUFFIX
})
])
}
export function renderTitle ($xeform: VxeFormConstructor & VxeFormPrivateMethods, item: VxeFormDefines.ItemInfo) {
const { data } = $xeform.props
const { computeTooltipOpts } = $xeform.getComputeMaps()
const { slots, field, itemRender, titlePrefix, titleSuffix } = item
const tooltipOpts = computeTooltipOpts.value
const compConf = isEnableConf(itemRender) ? VXETable.renderer.get(itemRender.name) : null
const params = { data, field, property: field, item, $form: $xeform, $grid: $xeform.xegrid }
const titleSlot = slots ? slots.title : null
const contVNs = []
const titVNs = []
if (titlePrefix) {
titVNs.push(
(titlePrefix.content || titlePrefix.message)
? h(resolveComponent('vxe-tooltip') as ComponentOptions, {
...tooltipOpts,
...titlePrefix,
content: getFuncText(titlePrefix.content || titlePrefix.message)
}, {
default: () => renderPrefixIcon(titlePrefix)
})
: renderPrefixIcon(titlePrefix)
)
}
titVNs.push(
h('span', {
class: 'vxe-form--item-title-label'
}, compConf && compConf.renderItemTitle ? getSlotVNs(compConf.renderItemTitle(itemRender, params)) : (titleSlot ? $xeform.callSlot(titleSlot, params) : getFuncText(item.title)))
)
contVNs.push(
h('div', {
class: 'vxe-form--item-title-content'
}, titVNs)
)
const fixVNs = []
if (titleSuffix) {
fixVNs.push(
(titleSuffix.content || titleSuffix.message)
? h(resolveComponent('vxe-tooltip') as ComponentOptions, {
...tooltipOpts,
...titleSuffix,
content: getFuncText(titleSuffix.content || titleSuffix.message)
}, {
default: () => renderSuffixIcon(titleSuffix)
})
: renderSuffixIcon(titleSuffix)
)
}
contVNs.push(
h('div', {
class: 'vxe-form--item-title-postfix'
}, fixVNs)
)
return contVNs
}