UNPKG

@wufengteam/inputs

Version:

平台提供的右侧属性编辑器,需要在主工程中注册

514 lines (513 loc) 20.8 kB
"use strict"; function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireWildcard(require("react")); var _icons = _interopRequireWildcard(require("@ant-design/icons")); var _antd = require("antd"); var _reactDnd = require("react-dnd"); var _reactDndHtml5Backend = require("react-dnd-html5-backend"); var _immutabilityHelper = _interopRequireDefault(require("immutability-helper")); var _core = require("@wufengteam/core"); var _assets = require("../../../assets"); var _utils = require("../../../utils"); var _createId = _interopRequireDefault(require("../../../utils/createId")); var _BatchEdit = _interopRequireDefault(require("../../../BatchEdit")); var _DraggableBodyRow = _interopRequireDefault(require("../../../components/DraggableBodyRow")); require("../../index.css"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 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; } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } /* eslint-disable no-console */ var TreeOptionSetModal = function TreeOptionSetModal(props) { // console.log('TreeOptionSetModal', props); var onChange = props.onChange, visible = props.visible, selectedComp = props.selectedComp, wrapRef = props.wrapRef, onCancel = props.onCancel; if (!window.appId) { window.appId = sessionStorage.getItem('appId'); } // TODO: 暂时先从window中获取应用id,虽然不保险 var _window = window, appId = _window.appId; // 解决第一次获取value值为undefined的问题 var _ref = (selectedComp === null || selectedComp === void 0 ? void 0 : selectedComp.props) || {}, treeData = _ref.treeData, options = _ref.options, staticData = _ref.staticData; var initalData = treeData || options || (staticData === null || staticData === void 0 ? void 0 : staticData.data) || []; // 选项数据存在低代码静态数据中的额外attrNbr和attrId数据 var _ref2 = (initalData === null || initalData === void 0 ? void 0 : initalData[0]) || {}, extraData = _ref2.extraData; // 树结构选项数据 var _useState = (0, _react.useState)(initalData), _useState2 = _slicedToArray(_useState, 2), treeOptionList = _useState2[0], setTreeOptionList = _useState2[1]; // 树结构选项id集合 var _useState3 = (0, _react.useState)([]), _useState4 = _slicedToArray(_useState3, 2), treeOptionIds = _useState4[0], setTreeOptionIds = _useState4[1]; // 树结构展开节点id集合 var _useState5 = (0, _react.useState)([]), _useState6 = _slicedToArray(_useState5, 2), expandKeys = _useState6[0], setExpandKeys = _useState6[1]; // 保存选项数据的额外参数 var _useState7 = (0, _react.useState)({ appId: appId, attrName: '静态数据' }), _useState8 = _slicedToArray(_useState7, 2), extraParams = _useState8[0], setExtraParams = _useState8[1]; // 自定义选项数据字段表格加载开关 var _useState9 = (0, _react.useState)(false), _useState10 = _slicedToArray(_useState9, 2), tableLoading = _useState10[0], setTableLoading = _useState10[1]; // 保存选项数据加载开关 var _useState11 = (0, _react.useState)(false), _useState12 = _slicedToArray(_useState11, 2), saveLoading = _useState12[0], setSaveLoading = _useState12[1]; var _useState13 = (0, _react.useState)(false), _useState14 = _slicedToArray(_useState13, 2), batchEditModal = _useState14[0], setBatchEditModal = _useState14[1]; var initData = function initData(data) { var ids = []; var getTreeOptionIds = function getTreeOptionIds(arr) { return (arr || []).map(function (c) { var id = c.id; var item = Object.assign(Object.assign({}, c), { id: id || (0, _createId.default)() }); ids.push(id); if (Array.isArray(c.children)) { item.children = getTreeOptionIds(c.children); } return item; }); }; var newTreeOptionList = getTreeOptionIds(data); setTreeOptionIds(ids); setTreeOptionList(function (oldValue) { return [].concat(_toConsumableArray(oldValue), _toConsumableArray(newTreeOptionList)); }); }; // 获取选项数据保存在低代码静态数据中的一些数据 var getExtraParams = function getExtraParams(id) { setTableLoading(true); _core.wufengController.getAction('queryOptionList', { attrId: id }).then(function (res) { setTableLoading(false); var _ref3 = res || {}, resultCode = _ref3.resultCode, resultObject = _ref3.resultObject; if (resultCode === '0') { if (resultObject === null) { // setOptionList([]); console.error('您所存储的选项数据在静态数据中查询不到'); // onChange?.({ data: [], type: 'custom' }); } else { var _ref4 = resultObject || {}, appid = _ref4.appId, attrName = _ref4.attrName, attrDesc = _ref4.attrDesc, attrNbr = _ref4.attrNbr, attrId = _ref4.attrId; setExtraParams({ appId: appid, attrName: attrName, attrDesc: attrDesc, attrNbr: attrNbr, attrId: attrId }); // 设置选项数据还是从DSL中获取,不从低代码静态数据中获取 initData(initalData); } } else { console.error('从低代码平台获取静态数据失败'); } }).catch(function (error) { setTableLoading(false); console.error(error); }); }; (0, _react.useEffect)(function () { if (visible) { if (extraData === null || extraData === void 0 ? void 0 : extraData.attrId) { getExtraParams(extraData === null || extraData === void 0 ? void 0 : extraData.attrId); } } else { setTreeOptionIds([]); setTreeOptionList([]); } }, [visible]); var handleOk = function handleOk() { var keysMap = {}; var isCheck = ''; var flatTreeOptionList = []; var checkTreeOptionList = function checkTreeOptionList(arr) { return arr.map(function (c) { var newData = Object.assign({}, c); // 校验value唯一性 if (isCheck === '') { if (!c.value) { isCheck = '选项值不能为空'; } else if (keysMap[c.value]) { isCheck = '选项值不可重复'; } else { keysMap[c.value] = true; } } if (Array.isArray(c.children)) { newData.children = checkTreeOptionList(c.children); } // delete newData.id; flatTreeOptionList.push(newData); return newData; }); }; var checkResult = checkTreeOptionList(treeOptionList); if (!isCheck && flatTreeOptionList.length > 0) { var attrValueDTOList = flatTreeOptionList.map(function (item, index) { var list = { appId: appId, attrValueId: item.id || (0, _createId.default)(), attrValueName: item.title, attrValue: item.value, sort: index, i18nCopywritings: [] }; if ((extraParams === null || extraParams === void 0 ? void 0 : extraParams.attrId) && (extraParams === null || extraParams === void 0 ? void 0 : extraParams.attrNbr)) { return Object.assign(Object.assign({}, list), { attrId: extraParams.attrId, attrNbr: extraParams.attrNbr }); } return list; }); var params = Object.assign(Object.assign({}, extraParams), { attrValueDTOList: attrValueDTOList }); setSaveLoading(true); // 将选项数据保存到低代码平台静态数据中 _core.wufengController.getAction('saveOptionList', params).then(function (res) { var _a; setSaveLoading(false); var _ref5 = res || {}, resultCode = _ref5.resultCode, resultObject = _ref5.resultObject; if (resultCode === '0') { checkResult[0].extraData = { attrId: resultObject === null || resultObject === void 0 ? void 0 : resultObject.attrId, attrNbr: resultObject === null || resultObject === void 0 ? void 0 : resultObject.attrNbr }; if (((_a = props === null || props === void 0 ? void 0 : props.selectedComp) === null || _a === void 0 ? void 0 : _a.type) === 'Cascader') { onChange === null || onChange === void 0 ? void 0 : onChange({ data: checkResult, type: 'custom' }); } else { onChange === null || onChange === void 0 ? void 0 : onChange(checkResult); } onCancel(); } else { _antd.message.error(resultObject || '选项数据保存失败'); onCancel(); } }).catch(function () { setSaveLoading(false); _antd.message.error('选项数据保存失败'); onCancel(); }); } else { _antd.message.warn(isCheck); } }; var handleAdd = function handleAdd() { var id = (0, _createId.default)(); var newTree = { title: '显示值', value: '显示值', key: '显示值', id: id, $$isParent: true }; var newData = _toConsumableArray(treeOptionList); newData.push(newTree); setTreeOptionList(newData); setTreeOptionIds(function (pre) { return [].concat(_toConsumableArray(pre), [id]); }); }; var findItem = function findItem(list, id) { var item = null; var recusive = function recusive(arr) { arr.find(function (c) { if (c.id === id) { item = c; return true; } if (Array.isArray(c.children)) { return recusive(c.children); } return false; }); }; recusive(list); return item; }; var handleChangeValue = function handleChangeValue(val, valKey, record) { var id = record.id; var newData = _toConsumableArray(treeOptionList); var item = findItem(newData, id); item[valKey] = val; if (valKey === 'title' && !item.isValueEdited) { item.value = val; item.key = val; } if (valKey === 'value') { item.key = val; item.isValueEdited = true; } setTreeOptionList(newData); }; var addCatalog = function addCatalog(_ref6) { var id = _ref6.id; var newData = _toConsumableArray(treeOptionList); var item = findItem(newData, id); var newId = (0, _createId.default)(); var newTree = { title: '显示值', value: '显示值', key: '显示值', id: newId }; if (item.children) { item.children.push(newTree); } else { item.children = [newTree]; } setTreeOptionIds(function (pre) { return [].concat(_toConsumableArray(pre), [newId]); }); setTreeOptionList(newData); }; var deleteCatalog = function deleteCatalog(_ref7) { var id = _ref7.id; var newSource = _toConsumableArray(treeOptionList); var recusiveDelete = function recusiveDelete(list, deleteId) { return list.filter(function (c) { var item = c; if (item.id !== deleteId) { if (Array.isArray(item.children)) { item.children = recusiveDelete(item.children, deleteId); } return true; } return false; }); }; newSource = recusiveDelete(newSource, id); if (!newSource.length) { _antd.message.warn('至少保留一项'); return; } setTreeOptionIds(function (pre) { return _toConsumableArray(pre).filter(function (c) { return c !== id; }); }); setTreeOptionList(newSource); }; // 自定义数据表格表头配置 var customColumns = (0, _react.useMemo)(function () { var cols = [{ title: '显示值', key: 'title', dataIndex: 'title', render: function render(_, record) { return /*#__PURE__*/_react.default.createElement(_antd.Row, null, /*#__PURE__*/_react.default.createElement(_antd.Col, { span: 3 }, (record === null || record === void 0 ? void 0 : record.$$isParent) && /*#__PURE__*/_react.default.createElement(_icons.MenuOutlined, { style: { cursor: 'grab', color: '#999', marginTop: '5px' } })), /*#__PURE__*/_react.default.createElement(_antd.Col, { span: 21 }, /*#__PURE__*/_react.default.createElement(_antd.Input, { size: "small", value: record.title, onChange: function onChange(e) { return handleChangeValue(e.target.value, 'title', record); }, maxLength: 100 }))); } }, { title: '选项值', key: 'value', dataIndex: 'value', render: function render(_, record) { return /*#__PURE__*/_react.default.createElement(_antd.Input, { size: "small", value: record.value, onChange: function onChange(e) { return handleChangeValue(e.target.value, 'value', record); } }); } }, // { // title: '是否禁用', // key: 'disabled', // width: '85px', // render: (_, record: any) => ( // <Switch // checkedChildren="启用" // unCheckedChildren="关闭" // size="small" // checked={record.disabled} // onChange={(e) => handleChangeValue(e, 'disabled', record)} // /> // ), // }, { title: '操作', key: 'ctrl', render: function render(_, record) { return /*#__PURE__*/_react.default.createElement(_antd.Space, null, /*#__PURE__*/_react.default.createElement(_icons.default, { component: _assets.AddIcon, onClick: function onClick() { return addCatalog(record); }, className: "".concat(_utils.cssPrefixCls, "-icon") }), /*#__PURE__*/_react.default.createElement(_icons.default, { component: _assets.DeleteIcon, onClick: function onClick() { return deleteCatalog(record); }, className: "".concat(_utils.cssPrefixCls, "-icon") })); } }]; return cols; }, [treeOptionList]); var components = { body: { row: _DraggableBodyRow.default } }; var moveRow = (0, _react.useCallback)(function (dragIndex, hoverIndex) { var dragRow = treeOptionList[dragIndex]; if (dragRow === null || dragRow === void 0 ? void 0 : dragRow.$$isParent) { setTreeOptionList((0, _immutabilityHelper.default)(treeOptionList, { $splice: [[dragIndex, 1], [hoverIndex, 0, dragRow]] })); } else { _antd.message.info('子级节点不支持进行移动!'); } }, [treeOptionList]); return /*#__PURE__*/_react.default.createElement(_antd.Modal, { width: 800, maskClosable: false, className: "".concat(_utils.cssPrefixCls, "-treecolumns-modal"), title: "\u9879\u76EE\u8BBE\u7F6E", visible: visible, getContainer: wrapRef === null || wrapRef === void 0 ? void 0 : wrapRef.current, confirmLoading: saveLoading, onOk: handleOk, onCancel: onCancel }, /*#__PURE__*/_react.default.createElement("div", { className: "".concat(_utils.cssPrefixCls, "-treecolumns-panel") }, /*#__PURE__*/_react.default.createElement("div", { className: "panelHd" }, /*#__PURE__*/_react.default.createElement(_antd.Space, null, /*#__PURE__*/_react.default.createElement(_antd.Button, { icon: /*#__PURE__*/_react.default.createElement(_icons.PlusOutlined, { style: { color: '#47E' } }), size: "small", type: "primary", ghost: true, onClick: handleAdd }, "\u6DFB\u52A0\u9009\u9879"), /*#__PURE__*/_react.default.createElement(_antd.Button, { style: { width: '110px' }, icon: /*#__PURE__*/_react.default.createElement(_icons.PlusOutlined, { style: { color: 'rgba(28, 36, 46, 0.75)' } }), size: "small", onClick: function onClick() { setBatchEditModal(true); } }, "\u6279\u91CF\u6DFB\u52A0"), /*#__PURE__*/_react.default.createElement(_antd.Button, { size: "small", onClick: function onClick() { // console.log('treeOptionIds', treeOptionIds); setExpandKeys(treeOptionIds); } }, "\u5168\u90E8\u5C55\u5F00"))), /*#__PURE__*/_react.default.createElement("div", { className: "panelBd" }, /*#__PURE__*/_react.default.createElement(_reactDnd.DndProvider, { backend: _reactDndHtml5Backend.HTML5Backend }, /*#__PURE__*/_react.default.createElement(_antd.Table, { loading: tableLoading, columns: customColumns, dataSource: treeOptionList, expandedRowKeys: expandKeys, onExpandedRowsChange: setExpandKeys, className: "table", pagination: false, rowKey: "id", components: components, onRow: function onRow(_, index) { var attrs = { index: index, moveRow: moveRow }; return attrs; } }))), /*#__PURE__*/_react.default.createElement(_BatchEdit.default // type="TreeOptionSet" , { // type="TreeOptionSet" titleKey: "title", isCascade: true, visible: batchEditModal, onCancel: function onCancel() { setBatchEditModal(false); }, onOk: function onOk(batchData) { // console.log('batchData', batchData); initData(batchData); // setTreeOptionList(batchData); setBatchEditModal(false); } }))); }; var _default = exports.default = TreeOptionSetModal;