fastlion-amis
Version:
一种MIS页面生成工具
785 lines (784 loc) • 214 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.TableCell = exports.TableRenderer = exports.EDITWIDTHKEY = void 0;
var tslib_1 = require("tslib");
var react_1 = (0, tslib_1.__importDefault)(require("react"));
var react_dom_1 = require("react-dom");
var factory_1 = require("../../factory");
var types_1 = require("../../types");
var forEach_1 = (0, tslib_1.__importDefault)(require("lodash/forEach"));
var tpl_1 = require("../../utils/tpl");
// import './ColumnToggler';
var Checkbox_1 = (0, tslib_1.__importDefault)(require("../../components/Checkbox"));
var Button_1 = (0, tslib_1.__importDefault)(require("../../components/Button"));
var table_1 = require("../../store/table");
var file_saver_1 = require("file-saver");
var index_1 = require("../../utils/shell/index");
var helper_1 = require("../../utils/helper");
var tpl_builtin_1 = require("../../utils/tpl-builtin");
var debounce_1 = (0, tslib_1.__importDefault)(require("lodash/debounce"));
var sortablejs_1 = (0, tslib_1.__importDefault)(require("sortablejs"));
var resize_sensor_1 = require("../../utils/resize-sensor");
var find_1 = (0, tslib_1.__importDefault)(require("lodash/find"));
var icons_1 = require("../../components/icons");
var TableCell_1 = require("./TableCell");
Object.defineProperty(exports, "TableCell", { enumerable: true, get: function () { return TableCell_1.TableCell; } });
var HeadCellFilterDropdown_1 = require("./HeadCellFilterDropdown");
var HeadCellBatchEditDropdown_1 = require("./HeadCellBatchEditDropdown");
var TableContent_1 = require("./TableContent");
var image_1 = require("../../utils/image");
var mobx_state_tree_1 = require("mobx-state-tree");
var ColumnToggler_1 = tslib_1.__importStar(require("./ColumnToggler"));
var offset_1 = (0, tslib_1.__importDefault)(require("../../utils/offset"));
var dom_1 = require("../../utils/dom");
var cloneDeep_1 = (0, tslib_1.__importDefault)(require("lodash/cloneDeep"));
var LionContextMenu_1 = require("../Lion/components/LionContextMenu");
var isEqual_1 = (0, tslib_1.__importDefault)(require("lodash/isEqual"));
var antd_1 = require("antd");
var popover_1 = (0, tslib_1.__importDefault)(require("antd/lib/popover"));
var tools_1 = require("../../utils/shell/tools");
var Bubble_1 = (0, tslib_1.__importDefault)(require("../../components/ScrollMB/Bubble"));
var sub_1 = require("../../utils/sub");
var crud_1 = require("../../store/crud");
var types_2 = require("../../components/table/SecondFilter/types");
var utils_1 = require("../../utils/utils");
// import TipsContanier from '../../components/TipsContanier';
var icons_2 = require("@ant-design/icons");
var storage_1 = require("../../utils/storage");
var lodash_1 = require("lodash");
var api_1 = require("../../utils/api");
var DataStatic_1 = (0, tslib_1.__importDefault)(require("./DataStatic"));
var DataCross_1 = (0, tslib_1.__importDefault)(require("./DataCross"));
var utils_2 = require("../Lion/utils/utils");
var ProcessToolsModal_1 = (0, tslib_1.__importDefault)(require("./ProcessToolsModal"));
var FindAndReplace_1 = (0, tslib_1.__importDefault)(require("./FindAndReplace"));
var cross_1 = require("./cross");
var tableCtxMenuStore_1 = (0, tslib_1.__importDefault)(require("./tableCtxMenuStore"));
var mobx_react_1 = require("mobx-react");
var AiTool_1 = (0, tslib_1.__importDefault)(require("./AiTool"));
var SqlOptimize_1 = (0, tslib_1.__importDefault)(require("./SqlOptimize"));
var DataCharts_1 = (0, tslib_1.__importDefault)(require("./DataCharts"));
var commonTableFunction_1 = require("../../store/utils/commonTableFunction");
// 本地编辑map
exports.EDITWIDTHKEY = 'localEditWidthMap';
/**
* 将 url 转成绝对地址
*/
var getAbsoluteUrl = (function () {
var link;
return function (url) {
if (!link)
link = document.createElement('a');
link.href = url;
return link.href;
};
})();
var Table = /** @class */ (function (_super) {
(0, tslib_1.__extends)(Table, _super);
function Table(props) {
var _a, _b, _c, _d, _e, _f;
var _this = _super.call(this, props) || this;
_this.tableId = (0, utils_2.uuid)();
_this.lastScrollLeft = -1;
_this.lastScrollTop = -1;
_this.totalWidth = 0;
_this.totalHeight = 0;
_this.outterWidth = 0;
_this.outterHeight = 0;
_this.widths = {};
_this.widths2 = {};
_this.heights = {};
_this.renderedToolbars = [];
_this.subForms = {};
_this.setIndexCol = function (show) {
_this.setState({ indexColShow: show });
};
_this.scrollPingBox = function (e) {
if (!_this.table)
return;
var ns = _this.props.classPrefix;
var table = (0, react_dom_1.findDOMNode)(_this);
// 如果没有不重新获取drag
var container = _this.scrollPingBoxContainer || table.querySelector("." + ns + "Table-contentWrap");
_this.scrollPingBoxContainer = container;
var scrollLeft = container.scrollLeft;
var scrollWidth = container.scrollWidth;
var clientWidth = container.clientWidth;
// 判断是否滚动到最左侧
if (scrollLeft === 0) {
container.classList.remove('table-ping-left');
}
else {
container.classList.add('table-ping-left');
}
// 判断是否滚动到最右侧
if (Math.abs(scrollLeft + clientWidth - scrollWidth) <= 1) {
container.classList.remove('table-ping-right');
}
else {
container.classList.add('table-ping-right');
}
};
_this.subFormRef = function (form, x, y) {
var quickEditFormRef = _this.props.quickEditFormRef;
quickEditFormRef && quickEditFormRef(form, x, y);
_this.subForms[x + "-" + y] = form;
form && _this.props.store.addForm(form.props.store, y);
};
//统计数据记录, 141-交叉制表,142-统计,143-图表
_this.staticRecords = function (port) {
var _a = _this.props, name = _a.name, env = _a.env;
env.fetcher({
url: "/api/v1/opt/" + name + "_" + (port == 141 ? 'cross' : port == 142 ? 'total' : 'chart') + "/record/" + port,
method: 'get'
});
};
_this.handleDragStart = function (e) {
var store = _this.props.store;
var target = e.currentTarget;
var tr = (_this.draggingTr = target.closest('tr'));
var id = tr.getAttribute('data-id');
var tbody = tr.parentNode;
_this.originIndex = Array.prototype.indexOf.call(tbody.childNodes, tr);
tr.classList.add('is-dragging');
e.dataTransfer.effectAllowed = 'move';
e.dataTransfer.setData('text/plain', id);
e.dataTransfer.setDragImage(tr, 0, 0);
var item = store.getRowById(id);
store.collapseAllAtDepth(item.depth);
var siblings = store.rows;
if (item.parentId) {
var parent = store.getRowById(item.parentId);
siblings = parent.children;
}
siblings = siblings.filter(function (sibling) { return sibling !== item; });
tbody.addEventListener('dragover', _this.handleDragOver);
tbody.addEventListener('drop', _this.handleDrop);
_this.draggingSibling = siblings.map(function (item) {
var tr = tbody.querySelector("tr[data-id=\"" + item.id + "\"]");
tr.classList.add('is-drop-allowed');
return tr;
});
tr.addEventListener('dragend', _this.handleDragEnd);
};
_this.handleDragOver = function (e) {
if (!e.target) {
return;
}
e.preventDefault();
e.dataTransfer.dropEffect = 'move';
var overTr = e.target.closest('tr');
if (!overTr ||
!~overTr.className.indexOf('is-drop-allowed') ||
overTr === _this.draggingTr) {
return;
}
var tbody = overTr.parentElement;
var dRect = _this.draggingTr.getBoundingClientRect();
var tRect = overTr.getBoundingClientRect();
var ratio = dRect.top < tRect.top ? 0.1 : 0.9;
var next = (e.clientY - tRect.top) / (tRect.bottom - tRect.top) > ratio;
tbody.insertBefore(_this.draggingTr, (next && overTr.nextSibling) || overTr);
};
_this.handleDrop = function () {
var store = _this.props.store;
var tr = _this.draggingTr;
var tbody = tr.parentElement;
var index = Array.prototype.indexOf.call(tbody.childNodes, tr);
var item = store.getRowById(tr.getAttribute('data-id'));
// destroy
_this.handleDragEnd();
store.exchange(_this.originIndex, index, item);
};
_this.handleDragEnd = function () {
var tr = _this.draggingTr;
var tbody = tr.parentElement;
var index = Array.prototype.indexOf.call(tbody.childNodes, tr);
tbody.insertBefore(tr, tbody.childNodes[index < _this.originIndex ? _this.originIndex + 1 : _this.originIndex]);
tr.classList.remove('is-dragging');
tr.removeEventListener('dragend', _this.handleDragEnd);
tbody.removeEventListener('dragover', _this.handleDragOver);
tbody.removeEventListener('drop', _this.handleDrop);
_this.draggingSibling.forEach(function (item) {
return item.classList.remove('is-drop-allowed');
});
};
_this.handleImageEnlarge = function (info, target) {
var onImageEnlarge = _this.props.onImageEnlarge;
// 如果已经是多张了,直接跳过
if (Array.isArray(info.list)) {
return onImageEnlarge && onImageEnlarge(info, target);
}
// 从列表中收集所有图片,然后作为一个图片集合派送出去。
var store = _this.props.store;
var column = store.columns[target.colIndex].pristine;
var index = target.rowIndex;
var list = [];
store.rows.forEach(function (row, i) {
var src = (0, tpl_builtin_1.resolveVariable)(column.name, row.data);
if (!src) {
if (i < target.rowIndex) {
index--;
}
return;
}
list.push({
src: src,
originalSrc: column.originalSrc
? (0, tpl_1.filter)(column.originalSrc, row.data)
: src,
title: column.enlargeTitle
? (0, tpl_1.filter)(column.enlargeTitle, row.data)
: column.title
? (0, tpl_1.filter)(column.title, row.data)
: undefined,
caption: column.enlargeCaption
? (0, tpl_1.filter)(column.enlargeCaption, row.data)
: column.caption
? (0, tpl_1.filter)(column.caption, row.data)
: undefined
});
});
if (list.length > 1) {
onImageEnlarge &&
onImageEnlarge((0, tslib_1.__assign)((0, tslib_1.__assign)({}, info), { list: list, index: index }), target);
}
else {
onImageEnlarge && onImageEnlarge(info, target);
}
};
// 开始设置拖拽线
_this.setDragLine = function (targetTh) {
var dragLine = _this.dragLineShadowRef.current;
dragLine.style.height = _this.table.querySelector('tbody').clientHeight + 'px';
dragLine.style.top = (targetTh || _this.targetTh).clientHeight + 1 + 'px';
dragLine.style.display = 'unset';
};
// 开始设置拖拽线
_this.hideDragLine = function () {
var dragLine = _this.dragLineShadowRef.current;
dragLine.style.display = 'none';
};
// 开始列宽度调整
_this.handleColResizeMouseDown = function (e, col) {
_this.onDraging = true;
_this.lineStartX = e.clientX;
var currentTarget = e.currentTarget;
_this.resizeColumn = col;
_this.resizeLine = currentTarget;
// this.resizeLineLeft = parseInt(
// getComputedStyle(this.resizeLine).getPropertyValue('left'),
// 10
// );
_this.targetTh = _this.resizeLine.parentElement;
_this.targetThWidth = _this.targetTh.getBoundingClientRect().width;
_this.setDragLine();
document.addEventListener('mousemove', _this.handleColResizeMouseMove);
document.addEventListener('mouseup', _this.handleColResizeMouseUp);
};
// 垂直线拖拽移动
_this.handleColResizeMouseMove = function (e) {
var _a, _b;
var targetThRect = _this.targetTh.getBoundingClientRect();
var moveX = e.clientX - _this.lineStartX;
_this.dragLineShadowRef.current.style.left = targetThRect.left - ((_b = (_a = _this.table) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect) === null || _b === void 0 ? void 0 : _b.call(_a).left) + _this.targetThWidth + moveX + 'px';
_this.targetTh.style.width = _this.targetThWidth + moveX + 'px';
};
// 垂直线拖拽结束
_this.handleColResizeMouseUp = function (e) {
requestAnimationFrame(function () {
_this.onDraging = false;
_this.hideDragLine();
});
if ((0, helper_1.isMobile)())
return;
var store = _this.props.store;
var editWidthMap = (0, storage_1.getLocalStorage)(exports.EDITWIDTHKEY) || {};
var newCols = store.columnsData.map(function (item) {
var _a;
if (item.name === _this.resizeColumn.name) {
editWidthMap[_this.props.crudName || ''] = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, editWidthMap[_this.props.crudName || '']), (_a = {}, _a[_this.resizeColumn.name || ''] = _this.targetTh.style.width, _a));
(0, storage_1.setLocalStorage)(exports.EDITWIDTHKEY, editWidthMap);
return (0, tslib_1.__assign)((0, tslib_1.__assign)({}, item), { pristine: (0, tslib_1.__assign)((0, tslib_1.__assign)({}, item.pristine), { editWidth: _this.targetTh.style.width }) });
}
return item;
});
_this.handleColumnToggle(newCols, {}, false);
document.removeEventListener('mousemove', _this.handleColResizeMouseMove);
document.removeEventListener('mouseup', _this.handleColResizeMouseUp);
};
//获取设置列模板
_this.getColumnSettingList = function () { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () {
var _a, saveColApi, env, api, data, list;
return (0, tslib_1.__generator)(this, function (_b) {
switch (_b.label) {
case 0:
_a = this.props, saveColApi = _a.saveColApi, env = _a.env;
if (!saveColApi) return [3 /*break*/, 2];
api = (0, api_1.normalizeApi)((saveColApi === null || saveColApi === void 0 ? void 0 : saveColApi.url) || '', 'get');
return [4 /*yield*/, env.fetcher(api)];
case 1:
data = (_b.sent()).data;
list = (data === null || data === void 0 ? void 0 : data.filter(function (item) { return item.tempKey; })) || [];
this.setState({ columnSettingTemps: list });
_b.label = 2;
case 2: return [2 /*return*/];
}
});
}); };
//设置列保存到远程
_this.sendColumns = function (saveCols, targetTemp, isDraggled) {
if (isDraggled === void 0) { isDraggled = false; }
var saveColApi = _this.props.saveColApi;
_this.props.env
.fetcher({ url: saveColApi.url, method: saveColApi.method }, (0, tslib_1.__assign)((0, tslib_1.__assign)({}, targetTemp), { columnInfo: saveCols }))
.then(function (res) {
if (res.ok) {
!isDraggled && antd_1.message.success(res.msg);
_this.getColumnSettingList();
}
else {
!isDraggled && antd_1.message.error(res.msg);
}
});
};
//拖拽设置列时防抖
_this.debounceSendColumns = (0, debounce_1.default)(_this.sendColumns.bind(_this), 1000 * 60);
// onDraging: boolean // 拖动中标识
_this.dragShadowRef = react_1.default.createRef();
_this.dragLineShadowRef = react_1.default.createRef();
_this.onHeaderDragStart = function (e) {
if (!_this.dragShadowRef.current)
return;
var store = _this.props.store;
var target = e.currentTarget;
var th = (_this.draggingTh = target.closest('th'));
var name = th.getAttribute('column-name');
var tr = th.parentNode;
_this.dragShadowRef.current.style.width = th.clientWidth + 'px';
_this.dragShadowRef.current.style.height = _this.table.querySelector('tbody').clientHeight + 'px';
_this.dragShadowRef.current.style.top = th.clientHeight + 'px';
var offsetx = e.clientX - (e.clientX - (_this.table.getBoundingClientRect().left)) - _this.table.getBoundingClientRect().left;
_this.draggingThStartX = e.clientX;
_this.draggingThOffsetX = offsetx;
_this.draggingThStartLeft = (th.getBoundingClientRect().left - (_this.table.getBoundingClientRect().left)) - offsetx;
_this.dragShadowRef.current.style.left = _this.draggingThStartLeft + 'px';
_this.originColumnName = name;
e.dataTransfer.effectAllowed = 'move';
e.dataTransfer.setData('text/plain', name);
e.dataTransfer.setDragImage(document.createElement('div'), 0, 0);
var siblings = (0, cloneDeep_1.default)(store.filteredColumns);
tr.addEventListener('dragover', _this.onHeaderDragOver);
tr.addEventListener('drop', _this.onHeaderDrop);
tr.addEventListener('dragend', _this.onHeaderDragEnd);
// (tr as HTMLDivElement).classList.add('is-headerdrop-allowed');
_this.draggingSiblingTh = siblings.map(function (item) {
if (item.name) {
var th_1 = tr.querySelector("th[column-name=\"" + item.name + "\"]");
// th.classList.add('is-headerdrop-allowed');
return th_1;
}
else {
var th_2 = tr.querySelector("th[data-index=\"" + item.index + "\"]");
// th.classList.add('is-headerdrop-not-allowed')
return th_2;
}
});
};
_this.onHeaderDragOver = function (e) {
var _a, _b, _c, _d, _e, _f, _g;
e.preventDefault();
if (_this.dragShadowRef.current) {
var tableBound_1 = (_b = (_a = _this.table) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect) === null || _b === void 0 ? void 0 : _b.call(_a);
var thArray = Array.from(((_c = _this.table) === null || _c === void 0 ? void 0 : _c.querySelectorAll('table>thead>tr>th')) || []);
_this.dragShadowRef.current.style.left = _this.draggingThStartLeft + (e.clientX - _this.draggingThStartX) + 'px';
var targetThIndex = _this.leftDistances.findIndex(function (_) { return _ > e.clientX - tableBound_1.left; }) - 1;
var startThIndex = _this.leftDistances.findIndex(function (_) { return _ > _this.draggingThStartX - tableBound_1.left; }) - 1;
var targetTh = thArray[targetThIndex];
// console.log(startThIndex, targetThIndex)
if (_this.dragLineShadowRef.current) {
var dragLine = _this.dragLineShadowRef.current;
_this.setDragLine(targetTh);
var targetThBound = targetTh.getBoundingClientRect();
// 如果是刚开始的列不展示拖拽线
if (targetThIndex !== startThIndex) {
if (targetThBound.x > _this.draggingThStartX)
dragLine.style.left = targetThBound.x - ((_e = (_d = _this.table) === null || _d === void 0 ? void 0 : _d.getBoundingClientRect) === null || _e === void 0 ? void 0 : _e.call(_d).left) + targetThBound.width - 1 + 'px';
else
dragLine.style.left = targetThBound.x - ((_g = (_f = _this.table) === null || _f === void 0 ? void 0 : _f.getBoundingClientRect) === null || _g === void 0 ? void 0 : _g.call(_f).left) + 1 + 'px';
}
else {
_this.hideDragLine();
}
}
}
else {
if (_this.dragShadowRef.current) {
var dragLine = _this.dragLineShadowRef.current;
_this.hideDragLine();
}
}
};
_this.onHeaderDrop = function (e) {
var _a;
var thArray = Array.from(((_a = _this.table) === null || _a === void 0 ? void 0 : _a.querySelectorAll('table>thead>tr>th')) || []);
var targetTh = thArray[_this.leftDistances.findIndex(function (_) { var _a, _b; return _ > e.clientX - ((_b = (_a = _this.table) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect) === null || _b === void 0 ? void 0 : _b.call(_a).left); }) - 1];
if (_this.dragLineShadowRef.current)
_this.dragLineShadowRef.current.style.display = 'none';
var name = targetTh === null || targetTh === void 0 ? void 0 : targetTh.getAttribute('column-name');
// console.log(targetTh, this.leftDistances.findIndex(_ => _ > e.clientX - (this.table as HTMLElement)?.getBoundingClientRect?.().left) - 1)
if (_this.originColumnName && name) {
_this.swapColumnPosition(_this.originColumnName, name);
}
_this.onHeaderDragEnd();
};
_this.onHeaderDragEnd = function () {
if (!_this.dragShadowRef.current)
return;
_this.dragShadowRef.current.style.width = '0px';
_this.dragShadowRef.current.style.height = '0px';
_this.dragShadowRef.current.style.top = '0px';
_this.dragShadowRef.current.style.left = '0px';
requestAnimationFrame(function () {
_this.caculateLeft(true);
});
// this.draggingTh.classList.remove('is-header-dragging');
// this.draggingSiblingTh.forEach(item =>
// item.classList.remove('is-drop-allowed')
// );
var tr = _this.draggingTh.parentNode;
if (tr) {
tr.removeEventListener('dragover', _this.onHeaderDragOver);
tr.removeEventListener('drop', _this.onHeaderDrop);
tr.removeEventListener('dragend', _this.onHeaderDragEnd);
}
};
/** 渲染sql优化dom */
_this.renderSqlOptimize = function (action) {
var _a, _b, _c;
var _d = _this.props, store = _d.store, columns = _d.columns, data = _d.data, env = _d.env;
var columnsArr = (_a = columns === null || columns === void 0 ? void 0 : columns.map(function (item) { return item.name; })) !== null && _a !== void 0 ? _a : [];
var selectedList = (_c = (_b = store.selectedRows) === null || _b === void 0 ? void 0 : _b.map(function (item) { return item.data; }).filter(Boolean)) !== null && _c !== void 0 ? _c : [];
return (react_1.default.createElement(SqlOptimize_1.default, { env: env, selectedList: selectedList, action: action, columns: columnsArr, sqlStr: data === null || data === void 0 ? void 0 : data.sql, store: store }));
};
_this.renderDataCharts = function (action) {
var _a, _b, _c, _d;
var _e = _this.props, store = _e.store, selected = _e.selected, aliasTitle = _e.aliasTitle, tabTitle = _e.tabTitle, name = _e.name, primaryField = _e.primaryField, loadDataOnce = _e.loadDataOnce, getAllData = _e.getAllData, env = _e.env;
var selectedItems = (_b = (_a = selected === null || selected === void 0 ? void 0 : selected.concat()) !== null && _a !== void 0 ? _a : store.selectedRows.map(function (item) { return item.data; })) !== null && _b !== void 0 ? _b : [];
var items = store.rows.map(function (item) { return item.data; });
var colList = store.columnsData.filter(function (col) { return !col.pristine.hidden && col.type !== 'operation'; })
.map(function (item) { return item.toJSON ? item.toJSON() : item; });
var itemRaws = (_c = store.data) === null || _c === void 0 ? void 0 : _c.itemsRaw;
return react_1.default.createElement(DataCharts_1.default, { crudTitle: aliasTitle || tabTitle || '', container: (_d = env.getTopModalContainer) !== null && _d !== void 0 ? _d : _this.tableContainer.current, data: { items: items, selectedItems: selectedItems, itemRaws: itemRaws }, columns: colList, action: action, name: name, handleDealData: _this.handleDealData, primaryField: primaryField, loadDataOnce: loadDataOnce, getAllData: getAllData, staticRecords: _this.staticRecords });
};
_this.renderFieldTranslate = function (action) {
var fieldTranslate = _this.state.fieldTranslate;
return react_1.default.createElement("div", { className: 'show-field-translate-container' },
react_1.default.createElement(antd_1.Checkbox, { checked: fieldTranslate, onChange: function (e) { return _this.setState({ fieldTranslate: e.target.checked }); } }, action.label || '显示字段翻译'));
};
_this.updateActiveCell = function (row, col) {
_this.setState({ activeRow: row, activeCol: col });
};
//替换
_this.onBulkReplace = function (rowDataList) {
var store = _this.props.store;
var rows = store.rows.filter(function (item) {
return (0, find_1.default)(rowDataList, function (rowItem) { return rowItem.rowData[crud_1.DATAKEYID] == item.data[crud_1.DATAKEYID]; });
});
store.bulkQuickChange(rows, rowDataList);
var modefiedMap = (0, cloneDeep_1.default)(store.modefiedMap);
rowDataList.forEach(function (item) {
var rowItem = store.rows[item.index];
var values = item.rowData;
// rowItem.change(values);
modefiedMap.modifiedDataSet[rowItem.data[crud_1.DATAKEYID]] = values;
});
store.bulkRecordEditValues(modefiedMap);
};
_this.renderFindReplace = function (action) {
var _a;
var _b = _this.props, store = _b.store, currentSelectedRow = _b.currentSelectedRow, translate = _b.translate, env = _b.env;
var selectedList = (_a = store.selectedRows.map(function (item) { return item.index; })) !== null && _a !== void 0 ? _a : [];
var items = store.rows.map(function (item) { return item.data; });
var colList = store.columnsData.filter(function (col) { return !col.pristine.hidden && col.type !== 'operation'; })
.map(function (item) { return item.toJSON ? item.toJSON() : item; }).filter(function (item) { return !item.type || ['plain', 'input-text', 'number', 'input-number', 'static-number', 'html', 'static-html', 'input-rich-text', 'date', 'input-date', 'datetime', 'input-datetime', 'time', 'input-time', 'input-date-range', 'input-time-range', 'input-datetime-range', 'input-month', 'input-quarter', 'input-year', 'textarea'].includes(item.type); });
var canReplace = colList.some(function (item) { var _a; return !!((_a = item.pristine) === null || _a === void 0 ? void 0 : _a.quickEdit); });
// const itemRaws = store.data?.itemsRaw
return react_1.default.createElement(FindAndReplace_1.default, { selectedList: selectedList, data: items, columns: colList, action: action, onBulkReplace: _this.onBulkReplace, canReplace: canReplace, currentCheckIndex: currentSelectedRow, updateActiveCell: _this.updateActiveCell, container: _this.tableContainer.current, translate: translate });
};
_this.renderDataStatic = function (action) {
var _a, _b, _c, _d;
var _e = _this.props, store = _e.store, selected = _e.selected, loadDataOnce = _e.loadDataOnce, getAllData = _e.getAllData, aliasTitle = _e.aliasTitle, tabTitle = _e.tabTitle, name = _e.name, isStatic = _e.isStatic;
var selectedItems = (_b = (_a = selected === null || selected === void 0 ? void 0 : selected.concat()) !== null && _a !== void 0 ? _a : store.selectedRows.map(function (item) { return item.data; })) !== null && _b !== void 0 ? _b : [];
var items = store.rows.map(function (item) { return item.data; });
var colList = store.columnsData.filter(function (col) { return !col.pristine.hidden && col.type !== 'operation'; })
.map(function (item) { return item.toJSON ? item.toJSON() : item; });
var itemRaws = (_c = store.data) === null || _c === void 0 ? void 0 : _c.itemsRaw;
return react_1.default.createElement(DataStatic_1.default, { originHeaderToolbar: _this.props.headerToolbar, crudTitle: aliasTitle || tabTitle || '', container: ((_d = _this.props.env) === null || _d === void 0 ? void 0 : _d.getTopModalContainer) || _this.tableContainer.current, staticRecords: _this.staticRecords, getAllData: getAllData, data: { items: items, selectedItems: selectedItems, itemRaws: itemRaws }, loadDataOnce: loadDataOnce, columns: colList, action: action, name: name, isStatic: isStatic, handleDealData: _this.handleDealData });
};
_this.renderDataCross = function (action) {
var _a;
if ((0, helper_1.isMobile)())
return null;
return (react_1.default.createElement(DataCross_1.default, { tableName: _this.props.name, action: action, columns: _this.props.store.filteredColumns, data: { items: _this.props.store.rows.map(function (row) { return row.data; }), selectedItems: _this.props.store.selectedRows.map(function (row) { return row.data; }) }, modalContainer: ((_a = _this.props.env) === null || _a === void 0 ? void 0 : _a.getTopModalContainer) || _this.tableContainer.current, getAllData: _this.props.getAllData, staticRecords: _this.staticRecords, onOK: function (cross, crossColumns, datas, countColumns, extraProps) {
var _a, _b;
var linkTitle = ((_b = (_a = _this.props.aliasTitle) === null || _a === void 0 ? void 0 : _a.trim) === null || _b === void 0 ? void 0 : _b.call(_a)) + "-\u4EA4\u53C9\u5236\u8868";
var schema = {
aliasTitle: linkTitle,
type: "crud",
mode: 'cross',
name: (_this.props.name || (0, utils_2.uuid)()) + "_cross",
cross: cross,
crossColumns: crossColumns,
isCross: true,
combineNum: cross.positionType == 1 ? cross.rowFields.length : undefined,
"affixHeader": true,
"columns": _this.props.columns,
"defaultData": datas,
'affixRow': countColumns,
"perPage": 10000,
"autoFillHeight": true,
"multiple": true,
"setBorder": true,
"keepItemSelectionOnPageChange": false,
"syncLocation": false,
"headerToolbar": [{
"redDot": false,
"actionType": "export",
"type": "action",
"name": "default_export",
"label": "导出",
"icon": "#icon-tooltool_download",
"tooltip": "默认导出",
"align": "right",
"close": true,
"tooltipPlacement": "top"
},
{
"type": "data-statics",
"label": "统计",
"icon": "#icon-tooltotal",
"align": "right"
},
{
"type": "data-cross",
"label": "交叉制表",
"icon": "#icon-toolcross",
"align": "right"
}],
"footerToolbar": [{
"type": "statistics",
"align": "right"
}],
"checkOnItemClick": false,
"header": [],
"footer": []
};
_this.handleDealData('data-cross', linkTitle, schema, extraProps);
} }));
};
_this.destroyDragTable = function () {
_this.dragTable && _this.dragTable.destroy();
};
//列拖拽
_this.initDragTable = function () {
var ns = _this.props.classPrefix;
var el = (0, react_dom_1.findDOMNode)(_this).querySelector(".table-head-drag");
if (el) {
_this.dragTable = new sortablejs_1.default(el, {
group: "." + ns + "Table-table",
animation: 150,
removeCloneOnHide: true,
// 提供class可拖动
handle: ".header-cell",
ghostClass: 'tableCell-dragglable-dragging',
dragClass: 'tableCell-dragglable-dragging',
filter: function (e, target) {
return target.className.includes('__') || target.className.includes('operation');
},
scroll: false,
fallbackOnBody: false,
removeOnSpill: true,
draggable: "." + ns + "TableCell-dragglable",
onEnd: function (e) {
if (e.newIndex === e.oldIndex || _this.onDraging) {
return;
}
_this.swapColumnPosition(e.oldIndex, e.newIndex);
},
});
}
};
_this.swapColumnPosition = function (oldName, targetName) {
var _a;
var store = _this.props.store;
var finalColumns = (0, cloneDeep_1.default)(store.columnsData);
var newColumns = (0, cloneDeep_1.default)(store.filteredColumns);
var oldColumn = newColumns.find(function (item) { return item.name === oldName; });
var newColumn = newColumns.find(function (item) { return item.name === targetName; });
if (oldColumn && newColumn) {
var originOldIndex = finalColumns.findIndex(function (item) { return item.name === oldColumn.name; });
var originNewIndex = finalColumns.findIndex(function (item) { return item.name === newColumn.name; });
finalColumns.splice(originNewIndex > originOldIndex ? originNewIndex + 1 : originNewIndex, 0, oldColumn);
originOldIndex > originNewIndex
? finalColumns.splice(originOldIndex + 1, 1)
: finalColumns.splice(originOldIndex, 1);
var saveColInfo = (0, ColumnToggler_1.productColumnInfo)(finalColumns);
var targetTemp = ((_a = _this.state.columnSettingTemps) === null || _a === void 0 ? void 0 : _a.length) > 0 ? (0, tslib_1.__assign)((0, tslib_1.__assign)({}, _this.state.columnSettingTemps[0]), { columnInfo: saveColInfo }) : undefined;
_this.handleColumnToggle(finalColumns, saveColInfo, true, targetTemp, true);
}
};
_this.renderDetailModelToggler = function (config) {
// const switchModelRender = {
// label: __(this.state.tableMode === 'vertical' ? 'Table.switchToHorizontal' : 'Table.switchToVertical'),
// type: 'detail-model', icon: this.state.tableMode === 'vertical' ? <FileSyncOutlined /> : <ProjectOutlined />
// }
var __ = _this.props.translate;
var label = __(_this.state.tableMode === 'vertical' ? 'Table.switchToHorizontal' : 'Table.switchToVertical');
var icon = _this.state.tableMode === 'vertical' ? react_1.default.createElement(icons_2.FileSyncOutlined, null) : react_1.default.createElement(icons_2.ProjectOutlined, null);
return (react_1.default.createElement(react_1.default.Fragment, null,
react_1.default.createElement("div", { className: 'toolbar-item', onClick: function () { return _this.handleToolsClick(config.type); } },
react_1.default.createElement("div", { className: 'toolbar-item-icon' }, icon),
react_1.default.createElement("div", { className: 'toolbar-item-name' }, label))));
};
_this.handleToolsClick = function (type) {
var _a;
var _b = _this.props, store = _b.store, handleResetData = _b.handleResetData;
switch (type) {
case 'columns-toggler':
_this.setState({ columnsTogglerShow: true });
(_a = _this.debounceSendColumns) === null || _a === void 0 ? void 0 : _a.cancel();
break;
case 'detail-model':
case 'switch-layout':
_this.setState({ tableMode: _this.state.tableMode == 'vertical' ? 'horizontal' : 'vertical' }, function () {
store.update({
footable: _this.state.tableMode === 'vertical' ? true : false
});
});
break;
default:
break;
}
};
/** 移动端 - 渲染工具 */
_this.renderTools = function () {
var _a = _this.props, headerToolbar = _a.headerToolbar, __ = _a.translate, cx = _a.classnames, env = _a.env, store = _a.store, data = _a.data, filterRender = _a.filterRender, isPick = _a.isPick, clearSelectedItems = _a.clearSelectedItems, crudRenderToolbarFunc = _a.crudRenderToolbarFunc, multiple = _a.multiple;
/** 折叠在工具里的tools */
var foldedHeaderTools = [];
/** 在筛选/多选右侧的tools */
var unfoldedHeaderTools = [];
/** 将移动端需要显示的功能过滤出来: 目前工具栏仅保留 ai工具,设置,详情模式 */
// const switchModelRender = {
// label: __(this.state.tableMode === 'vertical' ? 'Table.switchToHorizontal' : 'Table.switchToVertical'),
// type: 'detail-model', icon: this.state.tableMode === 'vertical' ? <FileSyncOutlined /> : <ProjectOutlined />
// }
headerToolbar.forEach(function (item) {
var type = item.type, isToolBar = item.isToolBar, foldable = item.foldable;
/** 是否是移动端的工具 */
if (isToolBar) {
/** foldable: 是否归到折叠菜单中 */
/** 配置非折叠的工具 */
if (!foldable) {
unfoldedHeaderTools.push(item);
}
else {
foldedHeaderTools.push(item);
}
}
});
// const tools = headerToolbar.filter((item: any) => (['columns-toggler'].includes(item.type) && store.columnsTogglable) || ['help', 'ai-tool', 'reload'].includes(item.type));
/** 再添加一个 列表模式切换 */
// foldedHeaderTools.push({
// label: __(this.state.tableMode === 'vertical' ? 'Table.switchToHorizontal' : 'Table.switchToVertical'),
// type: 'switch-layout', icon: this.state.tableMode === 'vertical' ? <FileSyncOutlined /> : <ProjectOutlined />
// });
/** 筛选 */
var isFilter = !!Object.keys(data.filterParam || {}).length;
var filterNode = filterRender && filterRender(isFilter);
return (react_1.default.createElement(react_1.default.Fragment, null,
(foldedHeaderTools === null || foldedHeaderTools === void 0 ? void 0 : foldedHeaderTools.length) ? (react_1.default.createElement("div", { className: "header-btns" },
react_1.default.createElement(popover_1.default, { showArrow: false, placement: "bottom", getPopupContainer: env.getModalContainer, trigger: "click", overlayClassName: "table-toolbar-pop", autoAdjustOverflow: true, visible: _this.state.toolbarShow, onOpenChange: function (open) { return _this.setState({ toolbarShow: open }); }, content: react_1.default.createElement("div", { className: 'toolbar-container', onClick: function () { return _this.setState({ toolbarShow: false }); } }, foldedHeaderTools.map(function (item, index) {
var _a;
return (_a = _this.renderToolbar(item)) !== null && _a !== void 0 ? _a : crudRenderToolbarFunc(item);
})) },
react_1.default.createElement("div", { className: cx('Mobile-batch-manage'), onClick: function () { return _this.setState({ toolbarShow: true }); } },
react_1.default.createElement(icons_1.Icon, { icon: '#icon-toolbox', className: "icon" }),
react_1.default.createElement("span", { className: 'batch-text' }, __('Table.tools')))))) : null,
filterNode,
unfoldedHeaderTools.map(function (item) {
var _a;
return (react_1.default.createElement("div", { className: cx('Mobile-batch-manage') }, (_a = _this.renderToolbar(item)) !== null && _a !== void 0 ? _a : crudRenderToolbarFunc(item)));
})));
};
_this.renderPagenation = function () {
var _a, _b, _c, _d, _e, _f, _g;
var _h = _this.props, store = _h.store, selected = _h.selected, cx = _h.classnames, multiple = _h.multiple, popOverContainer = _h.popOverContainer, footerToolbarRender = _h.footerToolbarRender, footerToolbar = _h.footerToolbar;
var column = store.filteredColumns[0] && store.filteredColumns[0].type == "__checkme";
var selectedItems = (_b = (_a = selected === null || selected === void 0 ? void 0 : selected.concat()) !== null && _a !== void 0 ? _a : store.selectedRows.map(function (item) { return item.data; })) !== null && _b !== void 0 ? _b : [];
var _footer = footerToolbar || [];
// 居右的这里展示
var leftChild = footerToolbarRender ? footerToolbarRender((0, tslib_1.__assign)((0, tslib_1.__assign)({}, _this.props), { selectedItems: store.selectedRows.map(function (item) { return item.data; }), items: store.rows.map(function (item) { return item.data; }) }), _this.renderToolbar, (0, helper_1.isMobile)() ? _footer : _footer.filter(function (item) { return item.align !== 'right'; }) //Aug
) : null;
// 居左的在这边
var rightChild = footerToolbarRender ? footerToolbarRender((0, tslib_1.__assign)((0, tslib_1.__assign)({}, _this.props), { selectedItems: store.selectedRows.map(function (item) { return item.data; }), items: store.rows.map(function (item) { return item.data; }) }), _this.renderToolbar, _footer.filter(function (item) { return item.align == 'right'; }) //Aug
) : null;
var checkAllWidth = (((_e = (_d = (_c = _this.table) === null || _c === void 0 ? void 0 : _c.querySelector('thead')) === null || _d === void 0 ? void 0 : _d.querySelector('th')) === null || _e === void 0 ? void 0 : _e.clientWidth) || 25) + 'px';
// 2025-03 新增判断子选项是否为空,为空就不渲染父div
return (column && multiple && _this.state.selectedIndex != undefined || leftChild || rightChild) ? (react_1.default.createElement("div", { className: cx('Table-affix') },
column && multiple && _this.state.selectedIndex != undefined && (react_1.default.createElement("span", { className: cx('Table-affixs'), style: { marginRight: 0, alignItems: 'center' } },
column && multiple && react_1.default.createElement("span", { className: cx('Table-affix-Arr') }, _this.renderHeadCell(store.filteredColumns[0], { style: { width: checkAllWidth, paddingBottom: '2px', minWidth: '25px' } })),
react_1.default.createElement("div", { className: cx('Table-affix-text') },
((_f = store.filterColumns) === null || _f === void 0 ? void 0 : _f.size) > 0 && react_1.default.createElement("span", null,
"\u5DF2\u7B5B\u9009",
store.rows.length,
"\u6761\u6570\u636E"),
(selectedItems.length == 0 ? "" : "\u5DF2\u9009\uFF1A" + selectedItems.length + "\u884C" + " , "),
((_g = _this.props.store.filteredColumns) === null || _g === void 0 ? void 0 : _g.find(function (_) { return _.type === '__checkme'; })) ? (_this.state.selectedIndex != undefined && "\u7B2C" + (_this.state.selectedIndex + 1) + "\u884C") : null))),
react_1.default.createElement(react_1.default.Fragment, null,
leftChild,
rightChild))) : null;
};
_this.onToolsChange = function (key) {
_this.setState({ currentKey: key });
};
_this.onToolsClose = function (key) {
_this.setState(function (prev) { return ({
processToolsModalList: prev.processToolsModalList.filter(function (item) { return item.key !== key; }),
currentKey: ''
}); });
};
//使用二次加工工具处理完数据后,新增一个弹窗
_this.handleDealData = function (toolType, label, schema, extraProps, subTitle) {
var processToolsModalList = _this.state.processToolsModalList;
var key = schema.name + '' + processToolsModalList.length;
_this.setState({
currentKey: key,
processToolsModalList: (0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], processToolsModalList, true), [{ toolType: toolType, key: key, label: label, schema: schema, subTitle: subTitle, extraProps: extraProps }], false)
});
};
//修改二次加工工具条件
_this.handleChangeData = function (itemKey, schema) {
_this.setState(function (prev) { return ({
processToolsModalList: prev.processToolsModalList.map(function (item) {
if (item.key === itemKey) {
return (0, tslib_1.__assign)((0, tslib_1.__assign)({}, item), { schema: schema });
}
return item;
})
}); });
};
_this.affix = function (isAll) {
var _a, _b;
var _c = _this.props, store = _c.store, affixRow = _c.affixRow, selected = _c.selected;
var selectedItems = (_b = (_a = selected === null || selected === void 0 ? void 0 : selected.concat()) !== null && _a !== void 0 ? _a : store.selectedRows.map(function (item) { return item.data; })) !== null && _b !== void 0 ? _b : [];
var items = isAll ? store.rows.map(function (item) { return item.data; }) : selectedItems;
var calcValue = function (groupItem) {
var _a, _b, _c, _d, _e, _f, _g;
var rawName = (_a = groupItem.rawName) !== null && _a !== void 0 ? _a : groupItem.name;
var field = affixRow === null || affixRow === void 0 ? void 0 : affixRow.find(function (aitem) { return rawName === aitem.name; });
if (field) {
var formulaRule = (_b = field.formula) === null || _b === void 0 ? void 0 : _b.toLocaleLowerCase();
var showText = ((_c = field.label) !== null && _c !== void 0 ? _c : '') + ':';
var value = (0, utils_1.calcFn)(formulaRule, rawName !== null && rawName !== void 0 ? rawName : '', items);
if (formulaRule === 'count') {