vxe-table-demonic
Version:
一个基于 vue 的 PC 端表单/表格组件,支持增删改查、虚拟列表、虚拟树、懒加载、快捷菜单、数据校验、树形结构、打印导出、表单渲染、数据分页、弹窗、自定义模板、渲染器、JSON 配置式...
880 lines (879 loc) • 32.9 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.Cell = void 0;
var _vue = require("vue");
var _xeUtils = _interopRequireDefault(require("xe-utils"));
var _conf = _interopRequireDefault(require("../../v-x-e-table/src/conf"));
var _vXETable = require("../../v-x-e-table");
var _utils = require("../../tools/utils");
var _dom = require("../../tools/dom");
var _util = require("./util");
var _vn = require("../../tools/vn");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var __assign = void 0 && (void 0).__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);
};
function renderTitlePrefixIcon(params) {
var $table = params.$table,
column = params.column;
var titlePrefix = column.titlePrefix || column.titleHelp;
return titlePrefix ? [(0, _vue.h)('i', {
class: ['vxe-cell-title-prefix-icon', titlePrefix.icon || _conf.default.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 ? [(0, _vue.h)('i', {
class: ['vxe-cell-title-suffix-icon', titleSuffix.icon || _conf.default.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.default.isUndefined(showHeaderOverflow) || _xeUtils.default.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) {
(0, _dom.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.default.isString(content) ? (0, _vue.h)('span', __assign({
class: 'vxe-cell--title',
innerHTML: content
}, ons)) : (0, _vue.h)('span', __assign({
class: 'vxe-cell--title'
}, ons), (0, _vn.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.VXETable.renderer.get(renderOpts.name);
if (compConf && compConf.renderFooter) {
return (0, _vn.getSlotVNs)(compConf.renderFooter(renderOpts, params));
}
}
return [(0, _utils.formatText)(items[_columnIndex], 1)];
}
function getDefaultCellLabel(params) {
var $table = params.$table,
row = params.row,
column = params.column;
return (0, _utils.formatText)($table.getCellLabel(row, column), 1);
}
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 (0, _util.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.VXETable.renderer.get(renderOpts.name);
if (compConf && compConf.renderHeader) {
return renderTitleContent(params, (0, _vn.getSlotVNs)(compConf.renderHeader(renderOpts, params)));
}
}
return renderTitleContent(params, (0, _utils.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.VXETable.renderer.get(renderOpts.name);
var compFn = compConf ? compConf[funName] : null;
if (compFn) {
return (0, _vn.getSlotVNs)(compFn(renderOpts, Object.assign({
$type: editRender ? 'edit' : 'cell'
}, params)));
}
}
var cellValue = $table.getCellLabel(row, column);
var cellPlaceholder = editRender ? editRender.placeholder : '';
return [(0, _vue.h)('span', {
class: 'vxe-cell--label'
}, editRender && (0, _utils.eqEmptyValue)(cellValue) ? [
// 如果设置占位符
(0, _vue.h)('span', {
class: 'vxe-cell--placeholder'
}, (0, _utils.formatText)((0, _utils.getFuncText)(cellPlaceholder), 1))] : (0, _utils.formatText)(cellValue, 1))];
},
renderTreeCell: function (params) {
return Cell.renderTreeIcon(params, Cell.renderDefaultCell(params));
},
renderDefaultFooter: function (params) {
return [(0, _vue.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 = (0, _util.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 [(0, _vue.h)('div', {
class: ['vxe-cell--tree-node', {
'is--active': isAceived
}],
style: {
paddingLeft: "".concat(level * indent, "px")
}
}, [showIcon && (rowChilds && rowChilds.length || hasLazyChilds) ? [(0, _vue.h)('div', __assign({
class: 'vxe-tree--btn-wrapper'
}, ons), [(0, _vue.h)('i', {
class: ['vxe-tree--node-btn', isLazyLoaded ? iconLoaded || _conf.default.icon.TABLE_TREE_LOADED : isAceived ? iconOpen || _conf.default.icon.TABLE_TREE_OPEN : iconClose || _conf.default.icon.TABLE_TREE_CLOSE]
})])] : null, (0, _vue.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) : (0, _utils.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 [(0, _utils.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) : [(0, _vue.h)('span', {
class: 'vxe-radio--label'
}, titleSlot ? $table.callSlot(titleSlot, params) : (0, _utils.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((0, _vue.h)('span', {
class: ['vxe-radio--icon', isChecked ? _conf.default.icon.TABLE_RADIO_CHECKED : _conf.default.icon.TABLE_RADIO_UNCHECKED]
}));
}
if (defaultSlot || labelField) {
radioVNs.push((0, _vue.h)('span', {
class: 'vxe-radio--label'
}, defaultSlot ? $table.callSlot(defaultSlot, radioParams) : _xeUtils.default.get(row, labelField)));
}
return [(0, _vue.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, [(0, _vue.h)('span', {
class: 'vxe-checkbox--label'
}, titleSlot ? $table.callSlot(titleSlot, checkboxParams) : headerTitle)]);
}
return renderTitleContent(checkboxParams, [(0, _vue.h)('span', __assign({
class: ['vxe-cell--checkbox', {
'is--checked': isAllCheckboxSelected,
'is--disabled': isAllCheckboxDisabled,
'is--indeterminate': isAllCheckboxIndeterminate || Object.keys(treeIndeterminateMaps).length > 0
}],
title: _conf.default.i18n('vxe.table.allTitle')
}, ons), [(0, _vue.h)('span', {
class: ['vxe-checkbox--icon', isAllCheckboxIndeterminate || Object.keys(treeIndeterminateMaps).length > 0 ? _conf.default.icon.TABLE_CHECKBOX_INDETERMINATE : isAllCheckboxSelected ? _conf.default.icon.TABLE_CHECKBOX_CHECKED : _conf.default.icon.TABLE_CHECKBOX_UNCHECKED]
})].concat(titleSlot || headerTitle ? [(0, _vue.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 = (0, _util.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((0, _vue.h)('span', {
class: ['vxe-checkbox--icon', indeterminate ? _conf.default.icon.TABLE_CHECKBOX_INDETERMINATE : isChecked ? _conf.default.icon.TABLE_CHECKBOX_CHECKED : _conf.default.icon.TABLE_CHECKBOX_UNCHECKED]
}));
}
if (defaultSlot || labelField) {
checkVNs.push((0, _vue.h)('span', {
class: 'vxe-checkbox--label'
}, defaultSlot ? $table.callSlot(defaultSlot, checkboxParams) : _xeUtils.default.get(row, labelField)));
}
return [(0, _vue.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 = (0, _util.getRowid)($table, row);
isChecked = _xeUtils.default.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((0, _vue.h)('span', {
class: ['vxe-checkbox--icon', isIndeterminate ? _conf.default.icon.TABLE_CHECKBOX_INDETERMINATE : isChecked ? _conf.default.icon.TABLE_CHECKBOX_CHECKED : _conf.default.icon.TABLE_CHECKBOX_UNCHECKED]
}));
if (defaultSlot || labelField) {
checkVNs.push((0, _vue.h)('span', {
class: 'vxe-checkbox--label'
}, defaultSlot ? $table.callSlot(defaultSlot, checkboxParams) : _xeUtils.default.get(row, labelField)));
}
}
return [(0, _vue.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 = (0, _util.getRowid)($table, row);
isAceived = !!rowExpandedMaps[rowid];
if (lazy) {
isLazyLoaded = !!rowExpandLazyLoadedMaps[rowid];
}
}
return [showIcon && (!visibleMethod || visibleMethod(params)) ? (0, _vue.h)('span', {
class: ['vxe-table--expanded', {
'is--active': isAceived
}],
onClick: function (evnt) {
evnt.stopPropagation();
$table.triggerRowExpandEvent(evnt, params);
}
}, [(0, _vue.h)('i', {
class: ['vxe-table--expand-btn', isLazyLoaded ? iconLoaded || _conf.default.icon.TABLE_EXPAND_LOADED : isAceived ? iconOpen || _conf.default.icon.TABLE_EXPAND_OPEN : iconClose || _conf.default.icon.TABLE_EXPAND_CLOSE]
})]) : null, defaultSlot || labelField ? (0, _vue.h)('span', {
class: 'vxe-table--expand-label'
}, defaultSlot ? $table.callSlot(defaultSlot, params) : _xeUtils.default.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.VXETable.renderer.get(contentRender.name);
if (compConf && compConf.renderExpand) {
return (0, _vn.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 [(0, _vue.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 [(0, _vue.h)('span', {
class: ['vxe-cell--sort', "vxe-cell--sort-".concat(iconLayout, "-layout")]
}, [(0, _vue.h)('i', {
class: ['vxe-sort--asc-btn', iconAsc || _conf.default.icon.TABLE_SORT_ASC, {
'sort--active': order === 'asc'
}],
title: _conf.default.i18n('vxe.table.sortAsc'),
onClick: function (evnt) {
evnt.stopPropagation();
$table.triggerSortEvent(evnt, column, 'asc');
}
}), (0, _vue.h)('i', {
class: ['vxe-sort--desc-btn', iconDesc || _conf.default.icon.TABLE_SORT_DESC, {
'sort--active': order === 'desc'
}],
title: _conf.default.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 ? [(0, _vue.h)('span', {
class: ['vxe-cell--filter', {
'is--active': filterStore.visible && filterStore.column === column
}]
}, [(0, _vue.h)('i', {
class: ['vxe-filter--btn', hasFilter ? iconMatch || _conf.default.icon.TABLE_FILTER_MATCH : iconNone || _conf.default.icon.TABLE_FILTER_NONE],
title: _conf.default.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.default.get(editRules, column.field);
if (columnRules) {
isRequired = columnRules.some(function (rule) {
return rule.required;
});
}
}
return ((0, _utils.isEnableConf)(editConfig) ? [isRequired && editOpts.showAsterisk ? (0, _vue.h)('i', {
class: 'vxe-cell--required-icon'
}) : null, (0, _utils.isEnableConf)(editRender) && editOpts.showIcon ? (0, _vue.h)('i', {
class: ['vxe-cell--edit-icon', editOpts.icon || _conf.default.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, (0, _utils.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, (0, _utils.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.VXETable.renderer.get(editRender.name);
if (isEdit) {
if (editSlot) {
return $table.callSlot(editSlot, params);
}
if (compConf && compConf.renderEdit) {
return (0, _vn.getSlotVNs)(compConf.renderEdit(editRender, Object.assign({
$type: 'edit'
}, params)));
}
return [];
}
if (defaultSlot) {
return $table.callSlot(defaultSlot, params);
}
if (formatter) {
return [(0, _vue.h)('span', {
class: 'vxe-cell--label'
}, getDefaultCellLabel(params))];
}
return Cell.renderDefaultCell(params);
}
};
exports.Cell = Cell;
var _default = Cell;
exports.default = _default;