UNPKG

fx-form-widget

Version:
378 lines (362 loc) 14 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports["default"] = void 0; var _popconfirm = _interopRequireDefault(require("antd/lib/popconfirm")); var _message2 = _interopRequireDefault(require("antd/lib/message")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _button = _interopRequireDefault(require("antd/lib/button")); var _react = _interopRequireWildcard(require("react")); var _icons = require("@ant-design/icons"); var _proComponents = require("@ant-design/pro-components"); var _renderWidget = require("../ContentWrap/renderWidget"); var _nanoid = require("nanoid"); var _widgets = require("../../widgets"); var _index = require("../../index"); var _BatchImportModal = _interopRequireDefault(require("../BatchImportModal")); function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; } var DefaultWidgets = _widgets.Widgets; var actions = { title: '操作', valueType: 'option', width: 80, render: function render() { return /*#__PURE__*/_react["default"].createElement(_button["default"], { type: "link" }); }, fixed: 'right', align: 'center' }; var serialNumber = { title: '序号', width: 80, editable: false, render: function render(_, __, index) { return index + 1; }, fixed: 'left', align: 'center' }; var renderTitle = function renderTitle(title, required) { // 外界自定义的节点,需要自己去加入星号以及其他操作 if (typeof title !== 'string') { return title; } // 渲染表格必填项 if (required) { return /*#__PURE__*/_react["default"].createElement("div", { className: "required-mask" }, title); } return title; }; var EditableTable = function EditableTable(props) { var ContentContext = (0, _react.useContext)(_index.Context); var onSchemaChange = ContentContext.onSchemaChange, formId = ContentContext.formId; var _props$schemaChildren = props.schemaChildrenData, schemaChildrenData = _props$schemaChildren === void 0 ? [] : _props$schemaChildren, _props$viewSchema = props.viewSchema, viewSchema = _props$viewSchema === void 0 ? {} : _props$viewSchema, _props$canEditable = props.canEditable, canEditable = _props$canEditable === void 0 ? true : _props$canEditable, schema = props.schema, wid = props.wid, value = props.value; var subFormAddButtonText = viewSchema.subFormAddButtonText, showActionButton = viewSchema.showActionButton, maxCountNumber = viewSchema.maxCountNumber, articlePageNumber = viewSchema.articlePageNumber, _viewSchema$showBulkI = viewSchema.showBulkImportButton, showBulkImportButton = _viewSchema$showBulkI === void 0 ? true : _viewSchema$showBulkI, title = viewSchema.title, readonly = viewSchema.readonly, showSerialNumberButton = viewSchema.showSerialNumberButton; var _useState = (0, _react.useState)(false), visible = _useState[0], setVisible = _useState[1]; var _useState2 = (0, _react.useState)([]), columns = _useState2[0], setColumns = _useState2[1]; var _useState3 = (0, _react.useState)({}), dataColumns = _useState3[0], setDataColumns = _useState3[1]; var _useState4 = (0, _react.useState)([]), dataSource = _useState4[0], setDataSource = _useState4[1]; var _useState5 = (0, _react.useState)([]), editableKeys = _useState5[0], setEditableRowKeys = _useState5[1]; var formRef = (0, _react.useRef)(); var _useState6 = (0, _react.useState)(1), current = _useState6[0], setCurrent = _useState6[1]; var allDataSource = (0, _react.useRef)(value || []); // 将所有的数据进行输出 var onDataChange = function onDataChange(value) { var newSchema = (0, _extends2["default"])({}, schema); newSchema.viewSchema.data = value; onSchemaChange('edit', newSchema); }; var onChange = function onChange(value) { var _props$onChange; setDataSource(value); removeDataSources(allDataSource.current, value); onDataChange(allDataSource.current); (_props$onChange = props.onChange) === null || _props$onChange === void 0 ? void 0 : _props$onChange.call(props, value); }; var removeDataSource = function removeDataSource(dataSource, column) { var editableId = column.editableId; var index = dataSource.findIndex(function (data) { return data.editableId === editableId; }); if (index < 0) { return; } dataSource.splice(index, 1, column); }; var removeDataSources = function removeDataSources(dataSource, columns) { columns.forEach(function (column) { removeDataSource(dataSource, column); }); }; // 将subform中的内容转化为tableClounm var renderSubForm2TablClounm = function renderSubForm2TablClounm(children, showActionButton, showSerialNumberButton) { var columns = children.map(function (schemaData) { var wid = schemaData.wid, widget = schemaData.widget, filename = schemaData.filename, viewSchema = schemaData.viewSchema; var _ref = viewSchema, title = _ref.title, required = _ref.required; var dataIndex = filename ? filename : wid; var Widget = DefaultWidgets[widget]; return { title: renderTitle(title, required), dataIndex: dataIndex, key: dataIndex, width: 150, formItemProps: { rules: required ? (0, _renderWidget.setRules)(viewSchema) : [] }, renderFormItem: function renderFormItem() { if (!Widget) { return null; } return /*#__PURE__*/_react["default"].createElement(Widget, { schema: viewSchema }); } }; }); if (showActionButton) { columns.push(actions); } if (showSerialNumberButton) { columns.unshift(serialNumber); } setColumns(columns); }; // 如果当前页大于每一页,就向后前进一页,如果删除页当前数据为空前进一页 var gotoPrevPageOrNextPage = function gotoPrevPageOrNextPage(current, data) { // 前面一页添加满了以后第二页进行自动添加 if (data.length === +articlePageNumber) { setCurrent(current + 1); getSliceDataSource(current + 1); return; } // 当前页为一条数据,删除以后应该回到前面一页 if (data.length === 1 && current > 1) { setCurrent(current - 1); getSliceDataSource(current - 1); return; } if (data.length === 1 && current === 1) { setDataSource([]); } }; // 新增一行 var handleAddTabelColum = function handleAddTabelColum() { var newDataSource = [].concat(allDataSource.current, [(0, _extends2["default"])({}, dataColumns, { editableId: (0, _nanoid.nanoid)(6) })]); allDataSource.current = newDataSource; onDataChange(allDataSource.current); // message.success('新增成功'); var newEditableRowKeys = newDataSource.map(function (item) { return item.editableId; }); setEditableRowKeys(newEditableRowKeys); if (dataSource.length < +articlePageNumber) { getSliceDataSource(current); return; } gotoPrevPageOrNextPage(current, dataSource); }; // 批量导入 var handleAddTabelColumByBatchimport = function handleAddTabelColumByBatchimport() { // 计算本次导入还可以导入多少条 // const canBatchImportTotal = +maxCountNumber! - allDataSource.current.length; // if (canBatchImportTotal < 0) { // return; // } // // 批量导入接口返回的数据 // allDataSource.current = [...allDataSource.current,...[]]; // onDataChange(allDataSource.current); setVisible(true); }; // 全部导入 var handleAllExportByExcel = function handleAllExportByExcel() {}; (0, _react.useEffect)(function () { renderSubForm2TablClounm(schemaChildrenData, showActionButton, showSerialNumberButton); }, [schemaChildrenData, showActionButton, showSerialNumberButton]); // 监听删除某一项数据 var onDeleteColunm = function onDeleteColunm(id) { var index = allDataSource.current.findIndex(function (dataSoure) { return dataSoure.editableId === id; }); var newEditableKeys = [].concat(editableKeys); var editableKeysIndex = newEditableKeys.findIndex(function (editableId) { return editableId === id; }); if (index < 0) { return; } allDataSource.current.splice(index, 1); onDataChange(allDataSource.current); if (editableKeysIndex < 0) { return; } newEditableKeys.splice(index, 1); setEditableRowKeys(newEditableKeys); _message2["default"].success('删除成功'); if (dataSource.length === 1) { gotoPrevPageOrNextPage(current, dataSource); return; } getSliceDataSource(current); }; var onCurrentePageChange = function onCurrentePageChange(current) { setCurrent(current); getSliceDataSource(current); }; // 获取分页以后的数据 var getSliceDataSource = function getSliceDataSource(current) { var prevTotal = (current - 1) * +articlePageNumber; var total = current * +articlePageNumber; var newDataSoure = allDataSource.current.slice(prevTotal, total); setDataSource(newDataSoure); }; // 缓存事件 var handleCloseClick = (0, _react.useCallback)(function () { setVisible(false); }, []); var handleOkClick = (0, _react.useCallback)(function (tableData) { setVisible(false); if (!tableData || !tableData.length) { return; } allDataSource.current = [].concat(tableData.slice(0, maxCountNumber - allDataSource.current.length), allDataSource.current); // 导入数据完成以后返回第一页 var newEditableRowKeys = allDataSource.current.map(function (item) { return item.editableId; }); setEditableRowKeys(newEditableRowKeys); onDataChange(allDataSource.current); getSliceDataSource(1); }, []); (0, _react.useEffect)(function () { var dataColumns = {}; schemaChildrenData.forEach(function (schemaData) { var wid = schemaData.wid, filename = schemaData.filename; var dataIndex = filename ? filename : wid; dataColumns[dataIndex] = void 0; }); setDataColumns(dataColumns); }, [schemaChildrenData]); var renderButton = function renderButton(showActionButton, title, icon, onClick) { if (allDataSource.current.length >= maxCountNumber) { return null; } if (showActionButton) { return /*#__PURE__*/_react["default"].createElement(_button["default"], { ghost: true, disabled: readonly, size: "small", icon: icon, type: "primary", onClick: onClick }, title); } return null; }; (0, _react.useEffect)(function () { if (!value) { return; } allDataSource.current = value; setDataSource(value.slice(0, Number(articlePageNumber))); var defalutEditableKeys = value.map(function (item) { return item.editableId; }); setEditableRowKeys(defalutEditableKeys); }, [value]); var pagination = { showSizeChanger: true, current: current, total: allDataSource.current.length, pageSize: articlePageNumber, pageSizeOptions: [articlePageNumber], onChange: onCurrentePageChange }; return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_proComponents.EditableProTable, { bordered: true, columns: columns, rowKey: "editableId", value: dataSource, formRef: formRef, scroll: { x: true }, recordCreatorProps: false, headerTitle: title, maxLength: maxCountNumber, pagination: pagination, controlled: true, onChange: onChange, toolBarRender: function toolBarRender() { return [renderButton(true, subFormAddButtonText, /*#__PURE__*/_react["default"].createElement(_icons.PlusOutlined, null), handleAddTabelColum), renderButton(showBulkImportButton, '批量导入', /*#__PURE__*/_react["default"].createElement(_icons.CloudUploadOutlined, null), handleAddTabelColumByBatchimport)]; }, editable: { type: 'multiple', editableKeys: canEditable ? editableKeys : [], actionRender: function actionRender(record) { var editableId = record.editableId; var handleDeleteClick = function handleDeleteClick() { onDeleteColunm(editableId); }; return [/*#__PURE__*/_react["default"].createElement(_popconfirm["default"], { title: "\u5220\u9664\u6B64\u884C\uFF1F", onConfirm: handleDeleteClick, okText: "\u786E\u5B9A", key: "delete", cancelText: "\u53D6\u6D88" }, /*#__PURE__*/_react["default"].createElement(_button["default"], { type: "link" }, "\u5220\u9664"))]; } } }), /*#__PURE__*/_react["default"].createElement(_BatchImportModal["default"], { visible: visible, formId: formId, subformWid: wid, maxCount: maxCountNumber, onCancel: handleCloseClick, getImportData: handleOkClick })); }; var _default = exports["default"] = EditableTable;