UNPKG

vxe-table-demonic

Version:

一个基于 vue 的 PC 端表单/表格组件,支持增删改查、虚拟列表、虚拟树、懒加载、快捷菜单、数据校验、树形结构、打印导出、表单渲染、数据分页、弹窗、自定义模板、渲染器、JSON 配置式...

796 lines (795 loc) 36.1 kB
var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; import { h } from 'vue'; import XEUtils from 'xe-utils'; import GlobalConfig from '../../v-x-e-table/src/conf'; import { VXETable } from '../../v-x-e-table'; import { getFuncText, isEnableConf, formatText, eqEmptyValue } from '../../tools/utils'; import { updateCellTitle } from '../../tools/dom'; import { createColumn, getRowid } from './util'; import { getSlotVNs } from '../../tools/vn'; function renderTitlePrefixIcon(params) { var $table = params.$table, column = params.column; var titlePrefix = column.titlePrefix || column.titleHelp; return titlePrefix ? [ h('i', { class: ['vxe-cell-title-prefix-icon', titlePrefix.icon || GlobalConfig.icon.TABLE_TITLE_PREFIX], onMouseenter: function (evnt) { $table.triggerHeaderTitleEvent(evnt, titlePrefix, params); }, onMouseleave: function (evnt) { $table.handleTargetLeaveEvent(evnt); } }) ] : []; } function renderTitleSuffixIcon(params) { var $table = params.$table, column = params.column; var titleSuffix = column.titleSuffix; return titleSuffix ? [ h('i', { class: ['vxe-cell-title-suffix-icon', titleSuffix.icon || GlobalConfig.icon.TABLE_TITLE_SUFFIX], onMouseenter: function (evnt) { $table.triggerHeaderTitleEvent(evnt, titleSuffix, params); }, onMouseleave: function (evnt) { $table.handleTargetLeaveEvent(evnt); } }) ] : []; } function renderTitleContent(params, content) { var $table = params.$table, column = params.column; var props = $table.props, reactData = $table.reactData; var computeTooltipOpts = $table.getComputeMaps().computeTooltipOpts; var allColumnHeaderOverflow = props.showHeaderOverflow; var type = column.type, showHeaderOverflow = column.showHeaderOverflow; var tooltipOpts = computeTooltipOpts.value; var showAllTip = tooltipOpts.showAll; var headOverflow = XEUtils.isUndefined(showHeaderOverflow) || XEUtils.isNull(showHeaderOverflow) ? allColumnHeaderOverflow : showHeaderOverflow; var showTitle = headOverflow === 'title'; var showTooltip = headOverflow === true || headOverflow === 'tooltip'; var ons = {}; if (showTitle || showTooltip || showAllTip) { ons.onMouseenter = function (evnt) { if (reactData._isResize) { return; } if (showTitle) { updateCellTitle(evnt.currentTarget, column); } else if (showTooltip || showAllTip) { $table.triggerHeaderTooltipEvent(evnt, params); } }; } if (showTooltip || showAllTip) { ons.onMouseleave = function (evnt) { if (reactData._isResize) { return; } if (showTooltip || showAllTip) { $table.handleTargetLeaveEvent(evnt); } }; } return [ type === 'html' && XEUtils.isString(content) ? h('span', __assign({ class: 'vxe-cell--title', innerHTML: content }, ons)) : h('span', __assign({ class: 'vxe-cell--title' }, ons), getSlotVNs(content)) ]; } function getFooterContent(params) { var $table = params.$table, column = params.column, _columnIndex = params._columnIndex, items = params.items; var slots = column.slots, editRender = column.editRender, cellRender = column.cellRender; var renderOpts = editRender || cellRender; var footerSlot = slots ? slots.footer : null; if (footerSlot) { return $table.callSlot(footerSlot, params); } if (renderOpts) { var compConf = VXETable.renderer.get(renderOpts.name); if (compConf && compConf.renderFooter) { return getSlotVNs(compConf.renderFooter(renderOpts, params)); } } return [formatText(items[_columnIndex], 1)]; } function getDefaultCellLabel(params) { var $table = params.$table, row = params.row, column = params.column; return formatText($table.getCellLabel(row, column), 1); } export var Cell = { createColumn: function ($xetable, columnOpts) { var type = columnOpts.type, sortable = columnOpts.sortable, filters = columnOpts.filters, editRender = columnOpts.editRender, treeNode = columnOpts.treeNode; var props = $xetable.props; var editConfig = props.editConfig; var _a = $xetable.getComputeMaps(), computeEditOpts = _a.computeEditOpts, computeCheckboxOpts = _a.computeCheckboxOpts; var checkboxOpts = computeCheckboxOpts.value; var editOpts = computeEditOpts.value; var renConfs = { renderHeader: Cell.renderDefaultHeader, renderCell: treeNode ? Cell.renderTreeCell : Cell.renderDefaultCell, renderFooter: Cell.renderDefaultFooter }; switch (type) { case 'seq': renConfs.renderHeader = Cell.renderSeqHeader; renConfs.renderCell = treeNode ? Cell.renderTreeIndexCell : Cell.renderSeqCell; break; case 'radio': renConfs.renderHeader = Cell.renderRadioHeader; renConfs.renderCell = treeNode ? Cell.renderTreeRadioCell : Cell.renderRadioCell; break; case 'checkbox': renConfs.renderHeader = Cell.renderCheckboxHeader; renConfs.renderCell = checkboxOpts.checkField ? (treeNode ? Cell.renderTreeSelectionCellByProp : Cell.renderCheckboxCellByProp) : (treeNode ? Cell.renderTreeSelectionCell : Cell.renderCheckboxCell); break; case 'expand': renConfs.renderCell = Cell.renderExpandCell; renConfs.renderData = Cell.renderExpandData; break; case 'html': renConfs.renderCell = treeNode ? Cell.renderTreeHTMLCell : Cell.renderHTMLCell; if (filters && sortable) { renConfs.renderHeader = Cell.renderSortAndFilterHeader; } else if (sortable) { renConfs.renderHeader = Cell.renderSortHeader; } else if (filters) { renConfs.renderHeader = Cell.renderFilterHeader; } break; default: if (editConfig && editRender) { renConfs.renderHeader = Cell.renderEditHeader; renConfs.renderCell = editOpts.mode === 'cell' ? (treeNode ? Cell.renderTreeCellEdit : Cell.renderCellEdit) : (treeNode ? Cell.renderTreeRowEdit : Cell.renderRowEdit); } else if (filters && sortable) { renConfs.renderHeader = Cell.renderSortAndFilterHeader; } else if (sortable) { renConfs.renderHeader = Cell.renderSortHeader; } else if (filters) { renConfs.renderHeader = Cell.renderFilterHeader; } } return createColumn($xetable, columnOpts, renConfs); }, /** * 单元格 */ renderHeaderTitle: function (params) { var $table = params.$table, column = params.column; var slots = column.slots, editRender = column.editRender, cellRender = column.cellRender; var renderOpts = editRender || cellRender; var headerSlot = slots ? slots.header : null; if (headerSlot) { return renderTitleContent(params, $table.callSlot(headerSlot, params)); } if (renderOpts) { var compConf = VXETable.renderer.get(renderOpts.name); if (compConf && compConf.renderHeader) { return renderTitleContent(params, getSlotVNs(compConf.renderHeader(renderOpts, params))); } } return renderTitleContent(params, formatText(column.getTitle(), 1)); }, renderDefaultHeader: function (params) { return renderTitlePrefixIcon(params).concat(Cell.renderHeaderTitle(params)).concat(renderTitleSuffixIcon(params)); }, renderDefaultCell: function (params) { var $table = params.$table, row = params.row, column = params.column; var slots = column.slots, editRender = column.editRender, cellRender = column.cellRender; var renderOpts = editRender || cellRender; var defaultSlot = slots ? slots.default : null; if (defaultSlot) { return $table.callSlot(defaultSlot, params); } if (renderOpts) { var funName = editRender ? 'renderCell' : 'renderDefault'; var compConf = VXETable.renderer.get(renderOpts.name); var compFn = compConf ? compConf[funName] : null; if (compFn) { return getSlotVNs(compFn(renderOpts, Object.assign({ $type: editRender ? 'edit' : 'cell' }, params))); } } var cellValue = $table.getCellLabel(row, column); var cellPlaceholder = editRender ? editRender.placeholder : ''; return [ h('span', { class: 'vxe-cell--label' }, editRender && eqEmptyValue(cellValue) ? [ // 如果设置占位符 h('span', { class: 'vxe-cell--placeholder' }, formatText(getFuncText(cellPlaceholder), 1)) ] : formatText(cellValue, 1)) ]; }, renderTreeCell: function (params) { return Cell.renderTreeIcon(params, Cell.renderDefaultCell(params)); }, renderDefaultFooter: function (params) { return [ h('span', { class: 'vxe-cell--item' }, getFooterContent(params)) ]; }, /** * 树节点 */ renderTreeIcon: function (params, cellVNodes) { var $table = params.$table, isHidden = params.isHidden; var reactData = $table.reactData; var computeTreeOpts = $table.getComputeMaps().computeTreeOpts; var treeExpandedMaps = reactData.treeExpandedMaps, treeExpandLazyLoadedMaps = reactData.treeExpandLazyLoadedMaps; var treeOpts = computeTreeOpts.value; var row = params.row, column = params.column, level = params.level; var slots = column.slots; var indent = treeOpts.indent, lazy = treeOpts.lazy, trigger = treeOpts.trigger, iconLoaded = treeOpts.iconLoaded, showIcon = treeOpts.showIcon, iconOpen = treeOpts.iconOpen, iconClose = treeOpts.iconClose; var childrenField = treeOpts.children || treeOpts.childrenField; var hasChildField = treeOpts.hasChild || treeOpts.hasChildField; var rowChilds = row[childrenField]; var iconSlot = slots ? slots.icon : null; var hasLazyChilds = false; var isAceived = false; var isLazyLoaded = false; var ons = {}; if (iconSlot) { return $table.callSlot(iconSlot, params); } if (!isHidden) { var rowid = getRowid($table, row); isAceived = !!treeExpandedMaps[rowid]; if (lazy) { isLazyLoaded = !!treeExpandLazyLoadedMaps[rowid]; hasLazyChilds = row[hasChildField]; } } if (!trigger || trigger === 'default') { ons.onClick = function (evnt) { evnt.stopPropagation(); $table.triggerTreeExpandEvent(evnt, params); }; } return [ h('div', { class: ['vxe-cell--tree-node', { 'is--active': isAceived }], style: { paddingLeft: "".concat(level * indent, "px") } }, [ showIcon && ((rowChilds && rowChilds.length) || hasLazyChilds) ? [ h('div', __assign({ class: 'vxe-tree--btn-wrapper' }, ons), [ h('i', { class: ['vxe-tree--node-btn', isLazyLoaded ? (iconLoaded || GlobalConfig.icon.TABLE_TREE_LOADED) : (isAceived ? (iconOpen || GlobalConfig.icon.TABLE_TREE_OPEN) : (iconClose || GlobalConfig.icon.TABLE_TREE_CLOSE))] }) ]) ] : null, h('div', { class: 'vxe-tree-cell' }, cellVNodes) ]) ]; }, /** * 索引 */ renderSeqHeader: function (params) { var $table = params.$table, column = params.column; var slots = column.slots; var headerSlot = slots ? slots.header : null; return renderTitleContent(params, headerSlot ? $table.callSlot(headerSlot, params) : formatText(column.getTitle(), 1)); }, renderSeqCell: function (params) { var $table = params.$table, column = params.column; var props = $table.props; var treeConfig = props.treeConfig; var computeSeqOpts = $table.getComputeMaps().computeSeqOpts; var seqOpts = computeSeqOpts.value; var slots = column.slots; var defaultSlot = slots ? slots.default : null; if (defaultSlot) { return $table.callSlot(defaultSlot, params); } var seq = params.seq; var seqMethod = seqOpts.seqMethod; return [formatText(seqMethod ? seqMethod(params) : treeConfig ? seq : (seqOpts.startIndex || 0) + seq, 1)]; }, renderTreeIndexCell: function (params) { return Cell.renderTreeIcon(params, Cell.renderSeqCell(params)); }, /** * 单选 */ renderRadioHeader: function (params) { var $table = params.$table, column = params.column; var slots = column.slots; var headerSlot = slots ? slots.header : null; var titleSlot = slots ? slots.title : null; return renderTitleContent(params, headerSlot ? $table.callSlot(headerSlot, params) : [ h('span', { class: 'vxe-radio--label' }, titleSlot ? $table.callSlot(titleSlot, params) : formatText(column.getTitle(), 1)) ]); }, renderRadioCell: function (params) { var $table = params.$table, column = params.column, isHidden = params.isHidden; var reactData = $table.reactData; var computeRadioOpts = $table.getComputeMaps().computeRadioOpts; var selectRadioRow = reactData.selectRadioRow; var radioOpts = computeRadioOpts.value; var slots = column.slots; var labelField = radioOpts.labelField, checkMethod = radioOpts.checkMethod, visibleMethod = radioOpts.visibleMethod; var row = params.row; var defaultSlot = slots ? slots.default : null; var radioSlot = slots ? slots.radio : null; var isChecked = $table.eqRow(row, selectRadioRow); var isVisible = !visibleMethod || visibleMethod({ row: row }); var isDisabled = !!checkMethod; var ons; if (!isHidden) { ons = { onClick: function (evnt) { if (!isDisabled && isVisible) { evnt.stopPropagation(); $table.triggerRadioRowEvent(evnt, params); } } }; if (checkMethod) { isDisabled = !checkMethod({ row: row }); } } var radioParams = __assign(__assign({}, params), { checked: isChecked, disabled: isDisabled, visible: isVisible }); if (radioSlot) { return $table.callSlot(radioSlot, radioParams); } var radioVNs = []; if (isVisible) { radioVNs.push(h('span', { class: ['vxe-radio--icon', isChecked ? GlobalConfig.icon.TABLE_RADIO_CHECKED : GlobalConfig.icon.TABLE_RADIO_UNCHECKED] })); } if (defaultSlot || labelField) { radioVNs.push(h('span', { class: 'vxe-radio--label' }, defaultSlot ? $table.callSlot(defaultSlot, radioParams) : XEUtils.get(row, labelField))); } return [ h('span', __assign({ class: ['vxe-cell--radio', { 'is--checked': isChecked, 'is--disabled': isDisabled }] }, ons), radioVNs) ]; }, renderTreeRadioCell: function (params) { return Cell.renderTreeIcon(params, Cell.renderRadioCell(params)); }, /** * 多选 */ renderCheckboxHeader: function (params) { var $table = params.$table, column = params.column, isHidden = params.isHidden; var reactData = $table.reactData; var _a = $table.getComputeMaps(), computeIsAllCheckboxDisabled = _a.computeIsAllCheckboxDisabled, computeCheckboxOpts = _a.computeCheckboxOpts; var isAllCheckboxSelected = reactData.isAllSelected, treeIndeterminateMaps = reactData.treeIndeterminateMaps, isAllCheckboxIndeterminate = reactData.isIndeterminate; var isAllCheckboxDisabled = computeIsAllCheckboxDisabled.value; var slots = column.slots; var headerSlot = slots ? slots.header : null; var titleSlot = slots ? slots.title : null; var checkboxOpts = computeCheckboxOpts.value; var headerTitle = column.getTitle(); var ons; if (!isHidden) { ons = { onClick: function (evnt) { if (!isAllCheckboxDisabled) { evnt.stopPropagation(); $table.triggerCheckAllEvent(evnt, !isAllCheckboxSelected); } } }; } var checkboxParams = __assign(__assign({}, params), { checked: isAllCheckboxSelected, disabled: isAllCheckboxDisabled, indeterminate: isAllCheckboxIndeterminate }); if (headerSlot) { return renderTitleContent(checkboxParams, $table.callSlot(headerSlot, checkboxParams)); } if (checkboxOpts.checkStrictly ? !checkboxOpts.showHeader : checkboxOpts.showHeader === false) { return renderTitleContent(checkboxParams, [ h('span', { class: 'vxe-checkbox--label' }, titleSlot ? $table.callSlot(titleSlot, checkboxParams) : headerTitle) ]); } return renderTitleContent(checkboxParams, [ h('span', __assign({ class: ['vxe-cell--checkbox', { 'is--checked': isAllCheckboxSelected, 'is--disabled': isAllCheckboxDisabled, 'is--indeterminate': isAllCheckboxIndeterminate || Object.keys(treeIndeterminateMaps).length > 0 }], title: GlobalConfig.i18n('vxe.table.allTitle') }, ons), [ h('span', { class: ['vxe-checkbox--icon', (isAllCheckboxIndeterminate || Object.keys(treeIndeterminateMaps).length > 0) ? GlobalConfig.icon.TABLE_CHECKBOX_INDETERMINATE : (isAllCheckboxSelected ? GlobalConfig.icon.TABLE_CHECKBOX_CHECKED : GlobalConfig.icon.TABLE_CHECKBOX_UNCHECKED)] }) ].concat(titleSlot || headerTitle ? [ h('span', { class: 'vxe-checkbox--label' }, titleSlot ? $table.callSlot(titleSlot, checkboxParams) : headerTitle) ] : [])) ]); }, renderCheckboxCell: function (params) { var $table = params.$table, row = params.row, column = params.column, isHidden = params.isHidden; var props = $table.props, reactData = $table.reactData; var treeConfig = props.treeConfig; var selectCheckboxMaps = reactData.selectCheckboxMaps, treeIndeterminateMaps = reactData.treeIndeterminateMaps; var computeCheckboxOpts = $table.getComputeMaps().computeCheckboxOpts; var checkboxOpts = computeCheckboxOpts.value; var labelField = checkboxOpts.labelField, checkMethod = checkboxOpts.checkMethod, visibleMethod = checkboxOpts.visibleMethod; var slots = column.slots; var defaultSlot = slots ? slots.default : null; var checkboxSlot = slots ? slots.checkbox : null; var indeterminate = false; var isChecked = false; var isVisible = !visibleMethod || visibleMethod({ row: row }); var isDisabled = !!checkMethod; var ons; if (!isHidden) { var rowid = getRowid($table, row); isChecked = !!selectCheckboxMaps[rowid]; ons = { onClick: function (evnt) { if (!isDisabled && isVisible) { evnt.stopPropagation(); $table.triggerCheckRowEvent(evnt, params, !isChecked); } } }; if (checkMethod) { isDisabled = !checkMethod({ row: row }); } if (treeConfig) { indeterminate = !!treeIndeterminateMaps[rowid]; } } var checkboxParams = __assign(__assign({}, params), { checked: isChecked, disabled: isDisabled, visible: isVisible, indeterminate: indeterminate }); if (checkboxSlot) { return $table.callSlot(checkboxSlot, checkboxParams); } var checkVNs = []; if (isVisible) { checkVNs.push(h('span', { class: ['vxe-checkbox--icon', indeterminate ? GlobalConfig.icon.TABLE_CHECKBOX_INDETERMINATE : (isChecked ? GlobalConfig.icon.TABLE_CHECKBOX_CHECKED : GlobalConfig.icon.TABLE_CHECKBOX_UNCHECKED)] })); } if (defaultSlot || labelField) { checkVNs.push(h('span', { class: 'vxe-checkbox--label' }, defaultSlot ? $table.callSlot(defaultSlot, checkboxParams) : XEUtils.get(row, labelField))); } return [ h('span', __assign({ class: ['vxe-cell--checkbox', { 'is--checked': isChecked, 'is--disabled': isDisabled, 'is--indeterminate': indeterminate }] }, ons), checkVNs) ]; }, renderTreeSelectionCell: function (params) { return Cell.renderTreeIcon(params, Cell.renderCheckboxCell(params)); }, renderCheckboxCellByProp: function (params) { var $table = params.$table, row = params.row, column = params.column, isHidden = params.isHidden; var props = $table.props, reactData = $table.reactData; var treeConfig = props.treeConfig; var treeIndeterminateMaps = reactData.treeIndeterminateMaps; var computeCheckboxOpts = $table.getComputeMaps().computeCheckboxOpts; var checkboxOpts = computeCheckboxOpts.value; var labelField = checkboxOpts.labelField, checkField = checkboxOpts.checkField, checkMethod = checkboxOpts.checkMethod, visibleMethod = checkboxOpts.visibleMethod; var indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField; var slots = column.slots; var defaultSlot = slots ? slots.default : null; var checkboxSlot = slots ? slots.checkbox : null; var isIndeterminate = false; var isChecked = false; var isVisible = !visibleMethod || visibleMethod({ row: row }); var isDisabled = !!checkMethod; var ons; if (!isHidden) { var rowid = getRowid($table, row); isChecked = XEUtils.get(row, checkField); ons = { onClick: function (evnt) { if (!isDisabled && isVisible) { evnt.stopPropagation(); $table.triggerCheckRowEvent(evnt, params, !isChecked); } } }; if (checkMethod) { isDisabled = !checkMethod({ row: row }); } if (treeConfig) { isIndeterminate = !!treeIndeterminateMaps[rowid]; } } var checkboxParams = __assign(__assign({}, params), { checked: isChecked, disabled: isDisabled, visible: isVisible, indeterminate: isIndeterminate }); if (checkboxSlot) { return $table.callSlot(checkboxSlot, checkboxParams); } var checkVNs = []; if (isVisible) { checkVNs.push(h('span', { class: ['vxe-checkbox--icon', isIndeterminate ? GlobalConfig.icon.TABLE_CHECKBOX_INDETERMINATE : (isChecked ? GlobalConfig.icon.TABLE_CHECKBOX_CHECKED : GlobalConfig.icon.TABLE_CHECKBOX_UNCHECKED)] })); if (defaultSlot || labelField) { checkVNs.push(h('span', { class: 'vxe-checkbox--label' }, defaultSlot ? $table.callSlot(defaultSlot, checkboxParams) : XEUtils.get(row, labelField))); } } return [ h('span', __assign({ class: ['vxe-cell--checkbox', { 'is--checked': isChecked, 'is--disabled': isDisabled, 'is--indeterminate': indeterminateField && !isChecked ? row[indeterminateField] : isIndeterminate }] }, ons), checkVNs) ]; }, renderTreeSelectionCellByProp: function (params) { return Cell.renderTreeIcon(params, Cell.renderCheckboxCellByProp(params)); }, /** * 展开行 */ renderExpandCell: function (params) { var $table = params.$table, isHidden = params.isHidden, row = params.row, column = params.column; var reactData = $table.reactData; var rowExpandedMaps = reactData.rowExpandedMaps, rowExpandLazyLoadedMaps = reactData.rowExpandLazyLoadedMaps; var computeExpandOpts = $table.getComputeMaps().computeExpandOpts; var expandOpts = computeExpandOpts.value; var lazy = expandOpts.lazy, labelField = expandOpts.labelField, iconLoaded = expandOpts.iconLoaded, showIcon = expandOpts.showIcon, iconOpen = expandOpts.iconOpen, iconClose = expandOpts.iconClose, visibleMethod = expandOpts.visibleMethod; var slots = column.slots; var defaultSlot = slots ? slots.default : null; var iconSlot = slots ? slots.icon : null; var isAceived = false; var isLazyLoaded = false; if (iconSlot) { return $table.callSlot(iconSlot, params); } if (!isHidden) { var rowid = getRowid($table, row); isAceived = !!rowExpandedMaps[rowid]; if (lazy) { isLazyLoaded = !!rowExpandLazyLoadedMaps[rowid]; } } return [ showIcon && (!visibleMethod || visibleMethod(params)) ? h('span', { class: ['vxe-table--expanded', { 'is--active': isAceived }], onClick: function (evnt) { evnt.stopPropagation(); $table.triggerRowExpandEvent(evnt, params); } }, [ h('i', { class: ['vxe-table--expand-btn', isLazyLoaded ? (iconLoaded || GlobalConfig.icon.TABLE_EXPAND_LOADED) : (isAceived ? (iconOpen || GlobalConfig.icon.TABLE_EXPAND_OPEN) : (iconClose || GlobalConfig.icon.TABLE_EXPAND_CLOSE))] }) ]) : null, defaultSlot || labelField ? h('span', { class: 'vxe-table--expand-label' }, defaultSlot ? $table.callSlot(defaultSlot, params) : XEUtils.get(row, labelField)) : null ]; }, renderExpandData: function (params) { var $table = params.$table, column = params.column; var slots = column.slots, contentRender = column.contentRender; var contentSlot = slots ? slots.content : null; if (contentSlot) { return $table.callSlot(contentSlot, params); } if (contentRender) { var compConf = VXETable.renderer.get(contentRender.name); if (compConf && compConf.renderExpand) { return getSlotVNs(compConf.renderExpand(contentRender, params)); } } return []; }, /** * HTML 标签 */ renderHTMLCell: function (params) { var $table = params.$table, column = params.column; var slots = column.slots; var defaultSlot = slots ? slots.default : null; if (defaultSlot) { return $table.callSlot(defaultSlot, params); } return [ h('span', { class: 'vxe-cell--html', innerHTML: getDefaultCellLabel(params) }) ]; }, renderTreeHTMLCell: function (params) { return Cell.renderTreeIcon(params, Cell.renderHTMLCell(params)); }, /** * 排序和筛选 */ renderSortAndFilterHeader: function (params) { return Cell.renderDefaultHeader(params) .concat(Cell.renderSortIcon(params)) .concat(Cell.renderFilterIcon(params)); }, /** * 排序 */ renderSortHeader: function (params) { return Cell.renderDefaultHeader(params).concat(Cell.renderSortIcon(params)); }, renderSortIcon: function (params) { var $table = params.$table, column = params.column; var computeSortOpts = $table.getComputeMaps().computeSortOpts; var sortOpts = computeSortOpts.value; var showIcon = sortOpts.showIcon, iconLayout = sortOpts.iconLayout, iconAsc = sortOpts.iconAsc, iconDesc = sortOpts.iconDesc; var order = column.order; if (showIcon) { return [ h('span', { class: ['vxe-cell--sort', "vxe-cell--sort-".concat(iconLayout, "-layout")] }, [ h('i', { class: ['vxe-sort--asc-btn', iconAsc || GlobalConfig.icon.TABLE_SORT_ASC, { 'sort--active': order === 'asc' }], title: GlobalConfig.i18n('vxe.table.sortAsc'), onClick: function (evnt) { evnt.stopPropagation(); $table.triggerSortEvent(evnt, column, 'asc'); } }), h('i', { class: ['vxe-sort--desc-btn', iconDesc || GlobalConfig.icon.TABLE_SORT_DESC, { 'sort--active': order === 'desc' }], title: GlobalConfig.i18n('vxe.table.sortDesc'), onClick: function (evnt) { evnt.stopPropagation(); $table.triggerSortEvent(evnt, column, 'desc'); } }) ]) ]; } return []; }, /** * 筛选 */ renderFilterHeader: function (params) { return Cell.renderDefaultHeader(params).concat(Cell.renderFilterIcon(params)); }, renderFilterIcon: function (params) { var $table = params.$table, column = params.column, hasFilter = params.hasFilter; var reactData = $table.reactData; var filterStore = reactData.filterStore; var computeFilterOpts = $table.getComputeMaps().computeFilterOpts; var filterOpts = computeFilterOpts.value; var showIcon = filterOpts.showIcon, iconNone = filterOpts.iconNone, iconMatch = filterOpts.iconMatch; return showIcon ? [ h('span', { class: ['vxe-cell--filter', { 'is--active': filterStore.visible && filterStore.column === column }] }, [ h('i', { class: ['vxe-filter--btn', hasFilter ? (iconMatch || GlobalConfig.icon.TABLE_FILTER_MATCH) : (iconNone || GlobalConfig.icon.TABLE_FILTER_NONE)], title: GlobalConfig.i18n('vxe.table.filter'), onClick: function (evnt) { if ($table.triggerFilterEvent) { $table.triggerFilterEvent(evnt, params.column, params); } } }) ]) ] : []; }, /** * 可编辑 */ renderEditHeader: function (params) { var $table = params.$table, column = params.column; var props = $table.props; var computeEditOpts = $table.getComputeMaps().computeEditOpts; var editConfig = props.editConfig, editRules = props.editRules; var editOpts = computeEditOpts.value; var sortable = column.sortable, filters = column.filters, editRender = column.editRender; var isRequired = false; if (editRules) { var columnRules = XEUtils.get(editRules, column.field); if (columnRules) { isRequired = columnRules.some(function (rule) { return rule.required; }); } } return (isEnableConf(editConfig) ? [ isRequired && editOpts.showAsterisk ? h('i', { class: 'vxe-cell--required-icon' }) : null, isEnableConf(editRender) && editOpts.showIcon ? h('i', { class: ['vxe-cell--edit-icon', editOpts.icon || GlobalConfig.icon.TABLE_EDIT] }) : null ] : []).concat(Cell.renderDefaultHeader(params)) .concat(sortable ? Cell.renderSortIcon(params) : []) .concat(filters ? Cell.renderFilterIcon(params) : []); }, // 行格编辑模式 renderRowEdit: function (params) { var $table = params.$table, column = params.column; var reactData = $table.reactData; var editStore = reactData.editStore; var actived = editStore.actived; var editRender = column.editRender; return Cell.runRenderer(params, isEnableConf(editRender) && actived && actived.row === params.row); }, renderTreeRowEdit: function (params) { return Cell.renderTreeIcon(params, Cell.renderRowEdit(params)); }, // 单元格编辑模式 renderCellEdit: function (params) { var $table = params.$table, column = params.column; var reactData = $table.reactData; var editStore = reactData.editStore; var actived = editStore.actived; var editRender = column.editRender; return Cell.runRenderer(params, isEnableConf(editRender) && actived && actived.row === params.row && actived.column === params.column); }, renderTreeCellEdit: function (params) { return Cell.renderTreeIcon(params, Cell.renderCellEdit(params)); }, runRenderer: function (params, isEdit) { var $table = params.$table, column = params.column; var slots = column.slots, editRender = column.editRender, formatter = column.formatter; var defaultSlot = slots ? slots.default : null; var editSlot = slots ? slots.edit : null; var compConf = VXETable.renderer.get(editRender.name); if (isEdit) { if (editSlot) { return $table.callSlot(editSlot, params); } if (compConf && compConf.renderEdit) { return getSlotVNs(compConf.renderEdit(editRender, Object.assign({ $type: 'edit' }, params))); } return []; } if (defaultSlot) { return $table.callSlot(defaultSlot, params); } if (formatter) { return [ h('span', { class: 'vxe-cell--label' }, getDefaultCellLabel(params)) ]; } return Cell.renderDefaultCell(params); } }; export default Cell;