UNPKG

fastlion-amis

Version:

一种MIS页面生成工具

229 lines (228 loc) 13.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TableBody = void 0; var tslib_1 = require("tslib"); var react_1 = (0, tslib_1.__importDefault)(require("react")); var TableRow_1 = require("./TableRow"); var tpl_1 = require("../../utils/tpl"); var mobx_react_1 = require("mobx-react"); var helper_1 = require("../../utils/helper"); var cloneDeep_1 = (0, tslib_1.__importDefault)(require("lodash/cloneDeep")); var LionContextMenu_1 = require("../Lion/components/LionContextMenu"); var utils_1 = require("../Lion/utils/utils"); var msgsub_1 = (0, tslib_1.__importDefault)(require("../Lion/utils/msgsub")); var TableBody = /** @class */ (function (_super) { (0, tslib_1.__extends)(TableBody, _super); function TableBody(props) { var _this = _super.call(this, props) || this; _this.dom = react_1.default.createRef(); _this.state = { index: props.itemAction ? 0 : null, current: null, }; _this.headCurrentRows = _this.headCurrentRows.bind(_this); _this.headKeydown = _this.headKeydown.bind(_this); return _this; } TableBody.prototype.headCurrentRows = function (index, val) { var _this = this; this.setState({ index: index, current: index, }, function () { window.onkeydown = function (e) { _this.headKeydown(e, val); }; }); }; TableBody.prototype.headKeydown = function (e, val) { var _a; var _b = this.props, rows = _b.rows, itemAction = _b.itemAction, onAction = _b.onAction; var current = this.state.current; if (e.key === "ArrowUp" || e.key === "ArrowDown") { // tbody及高度 var currentParent = this.dom.current.parentElement.parentElement; // 表格头部thead及高度 var previous = this.dom.current.previousElementSibling; var previousHeight = previous.clientHeight; //cxd-Table-content var content_1 = currentParent.parentElement; //可视区域,不包括头部 var visual = content_1.clientHeight - previousHeight; // 可视区域内容条数 var contnumber_1 = Math.floor(visual / val.current.clientHeight) - 2; if (e.key === "ArrowUp") { if (current > 0) { --current; this.setState({ current: current }, function () { if (current >= contnumber_1) { content_1.scrollTop = (current - contnumber_1) * val.current.clientHeight; } }); } } if (e.key === "ArrowDown") { if (current < rows.length - 1) { ++current; this.setState({ current: current }, function () { if (current >= contnumber_1 - 2) { content_1.scrollTop = (current - contnumber_1) * val.current.clientHeight; } }); } } } if (e.key === "Enter") { this.setState({ index: current }); if (itemAction) { onAction && onAction(e, itemAction, (_a = rows[current]) === null || _a === void 0 ? void 0 : _a.data); } } }; TableBody.prototype.renderRows = function (rows, columns, rowProps) { var _this = this; if (columns === void 0) { columns = this.props.columns; } if (rowProps === void 0) { rowProps = {}; } var _a = this.props, rowClassName = _a.rowClassName, rowClassNameExpr = _a.rowClassNameExpr, onAction = _a.onAction, buildItemProps = _a.buildItemProps, checkOnItemClick = _a.checkOnItemClick, cx = _a.classnames, render = _a.render, renderCell = _a.renderCell, onCheck = _a.onCheck, onQuickChange = _a.onQuickChange, footable = _a.footable, ignoreFootableContent = _a.ignoreFootableContent, footableColumns = _a.footableColumns, itemAction = _a.itemAction, store = _a.store, mobileLayout = _a.mobileLayout; // Aug var allColumns = (0, cloneDeep_1.default)(columns); if ((store === null || store === void 0 ? void 0 : store.mobileUI) && footable && footableColumns.length) { allColumns.splice.apply(allColumns, (0, tslib_1.__spreadArray)([-1, 0], footableColumns, false)); } return rows.map(function (item, rowIndex) { var itemProps = buildItemProps ? buildItemProps(item, rowIndex) : null; var itemHighlight = (_this.state.index == rowIndex); var currentHighlight = (_this.state.current == rowIndex); var doms = [ react_1.default.createElement(TableRow_1.TableRow, (0, tslib_1.__assign)({}, itemProps, { mobileLayout: mobileLayout, itemAction: itemAction, classnames: cx, checkOnItemClick: checkOnItemClick, key: item.id, itemIndex: rowIndex, item: item, headCurrentRows: _this.headCurrentRows, itemHighlight: itemHighlight, currentHighlight: currentHighlight, handleRowClick: _this.props.handleRowClick, itemClassName: cx(rowClassNameExpr ? (0, tpl_1.filter)(rowClassNameExpr, item.data) : rowClassName, { 'is-last': item.depth > 1 && rowIndex === rows.length - 1 }), // columns={columns} // Aug 移动端且展开更多信息时加载所有列 columns: (store === null || store === void 0 ? void 0 : store.mobileUI) && item.expanded ? allColumns : columns, renderCell: renderCell, render: render, onAction: onAction, onCheck: onCheck, // todo 先注释 quickEditEnabled={item.depth === 1} onQuickChange: onQuickChange }, rowProps, { // Jay store: _this.props.store, stickyWidths: _this.props.stickyWidths })) ]; // Aug 加入mobile判断,移动端将列统一放在上面一个tablerow里 if (!(store === null || store === void 0 ? void 0 : store.mobileUI) && footable && footableColumns.length) { if (item.depth === 1) { doms.push(react_1.default.createElement(TableRow_1.TableRow, (0, tslib_1.__assign)({}, itemProps, { mobileLayout: mobileLayout, itemAction: itemAction, classnames: cx, checkOnItemClick: checkOnItemClick, key: "foot-" + item.id, itemIndex: rowIndex, item: item, handleRowClick: _this.props.handleRowClick, itemClassName: cx(rowClassNameExpr ? (0, tpl_1.filter)(rowClassNameExpr, item.data) : rowClassName), columns: footableColumns, renderCell: renderCell, render: render, onAction: onAction, onCheck: onCheck, footableMode: true, footableColSpan: columns.length, onQuickChange: onQuickChange, ignoreFootableContent: ignoreFootableContent }, rowProps, { // Jay store: _this.props.store, stickyWidths: _this.props.stickyWidths }))); } } else if (item.children.length && item.expanded) { // 嵌套表格 doms.push.apply(doms, _this.renderRows(item.children, columns, (0, tslib_1.__assign)((0, tslib_1.__assign)({}, rowProps), { parent: item }))); } return doms; }); }; TableBody.prototype.renderSummaryRow = function (position, items, rowIndex) { var _a = this.props, columns = _a.columns, render = _a.render, data = _a.data, cx = _a.classnames, rows = _a.rows; if (!(Array.isArray(items) && items.length)) { return null; } var filterColumns = columns.filter(function (item) { return item.toggable; }); var result = []; for (var index = 0; index < filterColumns.length; index++) { var item = items[filterColumns[index].rawIndex]; item && result.push((0, tslib_1.__assign)({}, item)); } // 如果是勾选栏,让它和下一列合并。 if (columns[0].type === '__checkme' && result[0]) { result[0].colSpan = (result[0].colSpan || 1) + 1; } // 如果是展开栏,让它和下一列合并。 if (columns[0].type === '__expandme' && result[0]) { result[0].colSpan = (result[0].colSpan || 1) + 1; } // 缺少的单元格补齐 var appendLen = columns.length - result.reduce(function (p, c) { return p + (c.colSpan || 1); }, 0); if (appendLen) { var item = result.pop(); result.push((0, tslib_1.__assign)((0, tslib_1.__assign)({}, item), { colSpan: (item.colSpan || 1) + appendLen })); } var ctx = (0, helper_1.createObject)(data, { items: rows.map(function (row) { return row.locals; }) }); return (react_1.default.createElement("tr", { className: cx('Table-tr', 'is-summary'), key: "summary-" + position + "-" + (rowIndex || 0) }, result.map(function (item, index) { var Com = item.isHead ? 'th' : 'td'; return (react_1.default.createElement(Com, { key: index, colSpan: item.colSpan, className: item.cellClassName }, render("summary-row/" + index, item, { data: ctx }))); }))); }; TableBody.prototype.renderSummary = function (position, items) { var _this = this; return Array.isArray(items) ? items.some(function (i) { return Array.isArray(i); }) ? items.map(function (i, rowIndex) { return _this.renderSummaryRow(position, Array.isArray(i) ? i : [i], rowIndex); }) : this.renderSummaryRow(position, items) : null; }; TableBody.prototype.handleContextMenu = function (type, _a) { var _b; var rowIndex = _a[0], _ = _a[1], colName = _a[2]; var _c = this.props, columns = _c.columns, primaryField = _c.primaryField, store = _c.store, onContextMenuVisibleChange = _c.onContextMenuVisibleChange; onContextMenuVisibleChange(false); var _d = this.props.data, items = _d.items, selectedItems = _d.selectedItems; var fields = columns.map(function (column) { return column.name; }).filter(function (name) { return name !== undefined; }); var value = ' '; var isSelected = selectedItems.length > 0; switch (type) { case 0: value = items[rowIndex][colName]; break; case 1: value = colName; break; case 2: case 3: value = (_b = store === null || store === void 0 ? void 0 : store.getCopyRowValue(fields, isSelected, rowIndex, primaryField, type === 3)) !== null && _b !== void 0 ? _b : ''; break; case 4: value = store === null || store === void 0 ? void 0 : store.getCopyColumnValue(isSelected, colName, fields.includes(primaryField) ? primaryField : undefined); break; default: return; } try { (0, utils_1.copy)(value); msgsub_1.default._success('复制成功'); } catch (error) { msgsub_1.default._error('复制失败'); } }; TableBody.prototype.render = function () { var _this = this; var _a = this.props, cx = _a.classnames, className = _a.className, render = _a.render, rows = _a.rows, columns = _a.columns, rowsProps = _a.rowsProps, prefixRow = _a.prefixRow, affixRow = _a.affixRow, __ = _a.translate; return (react_1.default.createElement(LionContextMenu_1.ControlledContextMenu, { menuItems: [ { id: 0, title: '复制单元格', icon: 'fa fa-file-o' }, { id: 1, title: '复制单元格名称', icon: 'fa fa-file-text-o' }, { id: 2, title: '复制行', icon: 'fa fa-list' }, { id: 3, title: '复制行和表头', icon: 'fa fa-list-alt' }, { id: 4, title: '复制列', icon: 'fa fa-columns' }, ], visible: this.props.contextMenuVisible, onItemClick: function (index) { return _this.handleContextMenu(index, _this.props.position); }, onVisibleChange: this.props.onContextMenuVisibleChange }, react_1.default.createElement("tbody", { className: className, ref: this.dom }, rows.length ? (react_1.default.createElement(react_1.default.Fragment, null, this.renderSummary('prefix', prefixRow), this.renderRows(rows, columns, rowsProps), this.renderSummary('affix', affixRow))) : null))); }; TableBody = (0, tslib_1.__decorate)([ mobx_react_1.observer, (0, tslib_1.__metadata)("design:paramtypes", [Object]) ], TableBody); return TableBody; }(react_1.default.Component)); exports.TableBody = TableBody; //# sourceMappingURL=./renderers/MobileTableHorizontal/TableBody.js.map