UNPKG

syber-lowcode-business-materials

Version:
1,286 lines (1,263 loc) 52 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports["default"] = void 0; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _input = _interopRequireDefault(require("antd/lib/input")); var _spin = _interopRequireDefault(require("antd/lib/spin")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _dropdown = _interopRequireDefault(require("antd/lib/dropdown")); var _tooltip = _interopRequireDefault(require("antd/lib/tooltip")); var _modal = _interopRequireDefault(require("antd/lib/modal")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")); var _treeDataHandler = _interopRequireDefault(require("../../utils/function/treeDataHandler")); var _icons = require("@ant-design/icons"); var _dndKitSortableTree = require("dnd-kit-sortable-tree"); var _react = _interopRequireWildcard(require("react")); require("./directory-plus.scss"); var _variables = require("../../variables"); 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 BaseConfig = { maxLevel: 3, // 最多允许几层 childIndent: 24, // 子项缩进 couldDrag: true, // 是否允许拖拽 couldAddGroup: true, // 是否允许新增分组 couldAddItem: true, // 是否允许新增项目 couldEditGroup: true, // 是否允许编辑分组 couldEditItem: true, // 是否允许编辑项目 couldDeleteGroup: true, // 是否允许删除分组 couldDeleteItem: true, // 是否允许删除项目 showGroupNum: true, // 目录显示子元素数量 showEmptyMark: true, // 目录为空时展示子元素数量 showAddItem: false, // 是否允许子级新增项目 couldCloneItem: false, // 是否允许子级克隆项目 subTitle: '分组目录', groupName: '分组', itemName: '项目', editGroupName: '重命名', editItemName: '重命名', deleteGroupName: '删除', deleteItemName: '删除', addItemName: '新增', cloneItemName: '克隆', placeholderText: '请输入名称', hideArrow: true, // 隐藏分组的展开箭头 hideTitle: false, // 隐藏头部 hideItemAddBtn: false, // 隐藏目录中的新增按钮,不管是否有新增权限(不影响顶部的新增按钮) addIcon: /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-icon', style: { backgroundImage: "url(" + require("./image/add.png") + ")", filter: "invert(100%)" } }), // 新增的图标 moreIcon: /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-icon', style: { backgroundImage: "url(" + require("./image/more.png") + ")", filter: "invert(100%)" } }), // 更多的图标 addGroupIcon: /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-icon', style: { backgroundImage: "url(" + require("./image/addGroup.png") + ")" } }), // 新增分组的图标 addItemIcon: /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-icon', style: { backgroundImage: "url(" + require("./image/addItem.png") + ")" } }), // 新增项目的图标 groupArrowExpanded: /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-icon', style: { backgroundImage: "url(" + require("./image/down.png") + ")", backgroundSize: '120%', filter: "invert(100%)" } }), // 分组箭头展开 groupArrowCollapsed: /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-icon', style: { backgroundImage: "url(" + require("./image/right.png") + ")", backgroundSize: '120%', filter: "invert(100%)" } }), // 分组箭头收起 groupLogoExpanded: /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-icon', style: { backgroundImage: "url(" + require("./image/groupIcon.png") + ")", marginRight: '2px', filter: "invert(100%)" } }), // 分组logo展开 groupLogoCollapsed: /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-icon', style: { backgroundImage: "url(" + require("./image/groupIcon.png") + ")", marginRight: '2px', filter: "invert(100%)" } }), // 分组logo收起 itemLogo: /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-icon', style: { backgroundImage: "url(" + require("./image/itemIcon.png") + ")", filter: "invert(100%)" } }), // 项目logo itemLogoFn: undefined, // 自定义logo,return节点 renderItemName: null, // 自定义项目名称的渲染 renderGroupName: null, // 自定义分组名称的渲染 // 自定义操作按钮 customRightActionBefore: null, customRightActionAfter: null }; // 字段映射 var FieldsConfig = { title: 'title', id: 'id', isGroup: 'isGroup', //1 分组 0文件 children: 'children', url: 'url' // 分组图标 }; // 对样式的修改 var CustomStyle = { containerStyle: {}, //外层样式 selectItemStyle: { background: "#843CFF33" }, usualItemStyle: {} }; var Directory = exports["default"] = /*#__PURE__*/function (_React$PureComponent) { function Directory(props) { var _this2, _this2$config; var _this; _this = _React$PureComponent.call(this, props) || this; // 整合配置项 _this.config = Object.assign({}, BaseConfig, _this.props.staticConfig); _this.fields = Object.assign({}, FieldsConfig, _this.props.fieldsConfig); // 记录反映射,返回数据时需要反处理 _this.fieldsReverse = {}; Object.keys(_this.fields).forEach(function (field) { _this.fieldsReverse[_this.fields[field]] = field; }); _this.state = { treeData: [], expandKeys: props.defaultExpandedKeys || {}, // 展开的节点key,设置为对象,方便增删的操作 selectTreeNode: null, // 已经选择的节点 matchTxt: null, // 模糊搜索关键词 disableDragAndDrop: (_this2 = _this) === null || _this2 === void 0 ? void 0 : (_this2$config = _this2.config) === null || _this2$config === void 0 ? void 0 : _this2$config.couldDrag, loading: false, // 加载中 upDate: 0, // 控制强更 hasGroup: 0 // 是否存在分组,用于控制是否展示展开icon }; _this.treeDataFull = []; // 记录最完整的数据,用于筛选恢复 _this.refresh = _this.refreshTreeDataAction; _this.setData = function (data) { _this.setState(data); }; return _this; } (0, _inheritsLoose2["default"])(Directory, _React$PureComponent); var _proto = Directory.prototype; _proto.componentDidMount = function componentDidMount() { this.initTreeData(); } // 设置树数据 ; _proto.setTreeDataWithLastStatus = function setTreeDataWithLastStatus(newTreeData) { this.treeDataFull = newTreeData; // 第一个分组 var firstGroupItem = _treeDataHandler["default"].searchTreeNodeByField(newTreeData, { field: 'isGroup', value: 1 }, 'children'); this.setState({ treeData: newTreeData, hasGroup: !!firstGroupItem, upDate: this.state.upDate + 1 }); } // 初始化树结构 ; _proto.initTreeData = /*#__PURE__*/ function () { var _initTreeData = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() { var _this3 = this; var treeData, selectTreeNode, defaultExpandedKeys, idValue, path; return _regenerator["default"].wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: this.setState({ loading: true }); _context.next = 3; return this.getCompleteTreeData(); case 3: treeData = _context.sent; // 如果有选择的值,则展开的键要算 selectTreeNode = null; defaultExpandedKeys = {}; console.log('this.props.selectConfig', this.props.selectConfig); if (this.props.selectConfig) { if (this.props.selectConfig.defaultSelectMatchRule) { // 由外部传入自定义匹配初始选择项 selectTreeNode = _treeDataHandler["default"].searchTreeNodeByField(treeData, this.props.selectConfig.defaultSelectMatchRule, 'children'); console.log('selectTreeNode', selectTreeNode); } else if (this.props.selectConfig.defaultSelect) { idValue = this.props.selectConfig.defaultSelect[this.fields.id]; selectTreeNode = _treeDataHandler["default"].searchTreeNodeByField(treeData, { field: 'id', value: idValue }, 'children'); } } else if (this.props.initAutoSelect) { // 默认选择一个项目 selectTreeNode = _treeDataHandler["default"].searchTreeNodeByField(treeData, { field: 'isGroup', value: 0 }, 'children'); if (!selectTreeNode) { // 没有子集,选择分组 selectTreeNode = _treeDataHandler["default"].searchTreeNodeByField(treeData, { field: 'isGroup', value: 1 }, 'children'); } } if (selectTreeNode) { path = _treeDataHandler["default"].getNodeDeepPath(treeData, function (o) { return o.id === selectTreeNode.id; }, 'children'); if (path.length >= 0) { path.forEach(function (item) { defaultExpandedKeys[item.id] = true; }); } } // 给设置扩展属性 treeData = _treeDataHandler["default"].recursionDeal(treeData, function (item) { // 是否展开 item.collapsed = !Object.prototype.hasOwnProperty.call(defaultExpandedKeys, item.id); // 是否能接收子元素 if (item.isGroup === 0) { item.canHaveChildren = false; } return item; }); console.log('初始化处理后数据'); console.log(treeData); this.setTreeDataWithLastStatus(treeData); this.init = true; this.setState({ expandKeys: defaultExpandedKeys, selectTreeNode: selectTreeNode, loading: false }, function () { if (_this3.props.initAutoSelect && selectTreeNode) { _this3.props.initAutoSelect(_this3.dealReturnItem(selectTreeNode), _this3.dealReturnItem(path)); } }); case 15: case "end": return _context.stop(); } }, _callee, this); })); function initTreeData() { return _initTreeData.apply(this, arguments); } return initTreeData; }() // 设置选择的内容 ; _proto.setSelItem = function setSelItem(selItemId, cb, keepOriginExpand) { var _this4 = this; if (keepOriginExpand === void 0) { keepOriginExpand = false; } //如果有选择的值,则展开的键要算 var selectTreeNode = null; // keepOriginExpand 保持原来已经展开的 var defaultExpandedKeys = keepOriginExpand ? _.cloneDeep(this.state.expandKeys || {}) : {}; if (selItemId) { selectTreeNode = _treeDataHandler["default"].searchTreeNodeByField(this.treeDataFull, { field: 'id', value: selItemId }, 'children'); var path = _treeDataHandler["default"].getNodeDeepPath(this.treeDataFull, function (o) { return o['id'] === selItemId; }, 'children'); if (path.length >= 0) { path.forEach(function (item) { defaultExpandedKeys[item.id] = true; }); } cb === null || cb === void 0 ? void 0 : cb(this.dealReturnItem(path) || []); } console.log('selectTreeNode', selectTreeNode); console.log('defaultExpandedKeys', defaultExpandedKeys); this.setState({ matchTxt: null, expandKeys: defaultExpandedKeys, selectTreeNode: selectTreeNode }, function () { _this4.refreshTreeDataAction(_this4.treeDataFull); }); } // 刷新数据 ; _proto.refreshTreeDataAction = /*#__PURE__*/ function () { var _refreshTreeDataAction = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2(treeData, cb) { var expandKeys; return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: this.setState({ loading: true }); if (treeData) { _context2.next = 5; break; } _context2.next = 4; return this.getCompleteTreeData(); case 4: treeData = _context2.sent; case 5: expandKeys = this.state.expandKeys; // 给设置扩展属性 treeData = _treeDataHandler["default"].recursionDeal(treeData, function (item, depth) { // 是否展开 item.collapsed = !expandKeys.hasOwnProperty(item.id); // 是否能接收子元素 if (item.isGroup === 0) { item.canHaveChildren = false; } return item; }); console.log('刷新数据'); console.log(treeData); this.setTreeDataWithLastStatus(treeData); this.setState({ loading: false }); cb === null || cb === void 0 ? void 0 : cb(treeData); case 12: case "end": return _context2.stop(); } }, _callee2, this); })); function refreshTreeDataAction(_x, _x2) { return _refreshTreeDataAction.apply(this, arguments); } return refreshTreeDataAction; }() // 获取完整的树结构数据 ; _proto.getCompleteTreeData = /*#__PURE__*/ function () { var _getCompleteTreeData = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3() { var result; return _regenerator["default"].wrap(function _callee3$(_context3) { while (1) switch (_context3.prev = _context3.next) { case 0: if (!this.props.requestTreeData) { _context3.next = 10; break; } _context3.next = 3; return this.props.requestTreeData()["catch"](function (err) { _modal["default"].error({ title: '获取目录数据失败', content: (err === null || err === void 0 ? void 0 : err.toString()) || '未知原因' }); }); case 3: _context3.t0 = _context3.sent; if (_context3.t0) { _context3.next = 6; break; } _context3.t0 = []; case 6: result = _context3.t0; // 处理字段映射 result = _treeDataHandler["default"].changeField(result, this.fields, 'new', this.fields.children || 'children'); _context3.next = 11; break; case 10: result = []; case 11: return _context3.abrupt("return", result); case 12: case "end": return _context3.stop(); } }, _callee3, this); })); function getCompleteTreeData() { return _getCompleteTreeData.apply(this, arguments); } return getCompleteTreeData; }() // 绘制树节点 ; _proto.drawTreeItem = function drawTreeItem(item) { var _this5 = this, _item$children, _item$children2, _item$children3; var _this$state = this.state, expandKeys = _this$state.expandKeys, selectTreeNode = _this$state.selectTreeNode; var getArrowIcon = function getArrowIcon(treeNode) { var icon = null; if (!_this5.config.hideArrow) { if (treeNode.isGroup === 1) { var _treeNode$children; if (!((_treeNode$children = treeNode.children) !== null && _treeNode$children !== void 0 && _treeNode$children.length)) { icon = _this5.config.groupArrowCollapsed; } else { var ifExpand = expandKeys[treeNode.id]; icon = ifExpand ? _this5.config.groupArrowExpanded : _this5.config.groupArrowCollapsed; } } } return icon; }; // 根据节点类型展示右边的图标 var getLeftIcon = function getLeftIcon(treeNode) { var _treeNode$children2; var expandKeys = _this5.state.expandKeys; var icon = null; if (treeNode.url) { return /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-icon', style: { backgroundImage: "url(" + treeNode.url + ")", marginRight: '2px' } }); } switch (treeNode.isGroup) { case 1: // 目录 icon = expandKeys[treeNode.id] ? /*#__PURE__*/_react["default"].createElement("div", null, _this5.config.groupLogoExpanded) : /*#__PURE__*/_react["default"].createElement("div", { style: (_treeNode$children2 = treeNode.children) !== null && _treeNode$children2 !== void 0 && _treeNode$children2.length ? {} : { opacity: 0.65 } }, _this5.config.groupLogoCollapsed); break; case 0: // 子项 icon = _this5.config.itemLogoFn ? _this5.config.itemLogoFn(treeNode) : _this5.config.itemLogo; break; default: break; } return icon; }; // sortableTree组件导致提前生成matchTitle 会丢失react子元素属性,所以每次渲染重新生成 var matchTitle = null; if (item.matchTitleConfig) { var title = item.title; matchTitle = /*#__PURE__*/_react["default"].createElement("span", null, title.slice(0, item.matchTitleConfig.currentFindIndex), /*#__PURE__*/_react["default"].createElement("span", { className: _variables.bizCssPrefix + '-matchStyle' }, title.slice(item.matchTitleConfig.currentFindIndex, item.matchTitleConfig.currentFindIndex + item.matchTitleConfig.matchTxt.length)), title.slice(item.matchTitleConfig.currentFindIndex + item.matchTitleConfig.matchTxt.length)); } var customRightView = null; if (this.props.customRightAction) { var _this$props$customRig, _this$props; // 通用右侧自定义,目录和子项都改 customRightView = (_this$props$customRig = (_this$props = this.props).customRightAction) === null || _this$props$customRig === void 0 ? void 0 : _this$props$customRig.call(_this$props, this.dealReturnItem(item)); } else { if (item.isGroup === 1 && this.props.customGroupRightAction) { var _this$props$customGro, _this$props2; // 自定义目录的右侧按钮 customRightView = (_this$props$customGro = (_this$props2 = this.props).customGroupRightAction) === null || _this$props$customGro === void 0 ? void 0 : _this$props$customGro.call(_this$props2, this.dealReturnItem(item)); } if (item.isGroup !== 1 && this.props.customItemRightAction) { var _this$props$customIte, _this$props3; console.log('自定义子项的右侧按钮', item); // 自定义子项的右侧按钮 customRightView = (_this$props$customIte = (_this$props3 = this.props).customItemRightAction) === null || _this$props$customIte === void 0 ? void 0 : _this$props$customIte.call(_this$props3, this.dealReturnItem(item)); } } var styleSet = Object.assign({}, CustomStyle, this.props.customStyle); return /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-treeItemBox', style: (selectTreeNode === null || selectTreeNode === void 0 ? void 0 : selectTreeNode.id) === item.id ? styleSet.selectItemStyle : styleSet.usualItemStyle, onClick: function onClick() { _this5.setState({ selectTreeNode: item }, function () { var _this5$props$onClickT, _this5$props; var pathData = _treeDataHandler["default"].getNodeDeepPath(_this5.treeDataFull, function (o) { return o['id'] === item.id; }, 'children'); (_this5$props$onClickT = (_this5$props = _this5.props).onClickTreeItem) === null || _this5$props$onClickT === void 0 ? void 0 : _this5$props$onClickT.call(_this5$props, _this5.dealReturnItem(item), _this5.dealReturnItem(pathData)); }); } }, /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-itemLeftBox' }, getArrowIcon(item), getLeftIcon(item), item.isGroup === 1 ? /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-groupName' }, this.config.renderGroupName ? this.config.renderGroupName(item, matchTitle) : /*#__PURE__*/_react["default"].createElement(_tooltip["default"], { mouseEnterDelay: 0.5, title: /*#__PURE__*/_react["default"].createElement("span", { style: { color: '#333' } }, item.title), color: '#fff' }, /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-groupNameOneLine' }, /*#__PURE__*/_react["default"].createElement("span", { className: _variables.bizCssPrefix + '-groupNameText', style: expandKeys[item.id] && (_item$children = item.children) !== null && _item$children !== void 0 && _item$children.length ? {} : { opacity: 0.65 } }, matchTitle || item.title), this.config.showGroupNum ? !((_item$children2 = item.children) !== null && _item$children2 !== void 0 && _item$children2.length) ? this.config.showEmptyMark ? /*#__PURE__*/_react["default"].createElement("span", { className: _variables.bizCssPrefix + '-childNumEmptyTag' }, "0") : null : /*#__PURE__*/_react["default"].createElement("span", { className: _variables.bizCssPrefix + '-childNumTag' }, ((_item$children3 = item.children) === null || _item$children3 === void 0 ? void 0 : _item$children3.length) || 0) : null))) : /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-itemName' }, this.config.renderItemName ? this.config.renderItemName(item, matchTitle) : /*#__PURE__*/_react["default"].createElement(_tooltip["default"], { mouseEnterDelay: 0.5, title: /*#__PURE__*/_react["default"].createElement("span", { style: { color: '#333' } }, item.title), color: '#fff' }, /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-nameOneLine' }, matchTitle || item.title)))), /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-itemRightBox', onClick: function onClick(event) { event.stopPropagation(); event.preventDefault(); } }, customRightView, this.getGetItemAddBtnView(item), this.getGetItemMoreBtnView(item))); } // 顶部新增按钮 ; _proto.getTopAddView = function getTopAddView() { var _this6 = this; if (!this.config.couldAddItem && !this.config.couldAddGroup) { return null; } if (this.config.couldAddItem && this.config.couldAddGroup) { // 分组和项目都能新增,需要下拉选 return /*#__PURE__*/_react["default"].createElement(_dropdown["default"], { menu: { items: [{ key: 'addGroup', label: /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-flexCenter5' }, this.config.addGroupIcon, "\u65B0\u589E" + this.config.groupName) }, { key: 'addItem', label: /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-flexCenter5' }, this.config.addItemIcon, "\u65B0\u589E" + this.config.itemName) }], onClick: function onClick(_ref) { var item = _ref.item, key = _ref.key; switch (key) { case 'addGroup': _this6.dealItemAction(null, { type: 'addGroup' }); break; case 'addItem': _this6.dealItemAction(null, { type: 'addItem' }); break; } } }, placement: "bottomLeft" }, /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-addIconBtn' }, /*#__PURE__*/_react["default"].createElement(_icons.PlusOutlined, null))); } return /*#__PURE__*/_react["default"].createElement(_tooltip["default"], { title: "\u65B0\u589E" + (this.config.couldAddItem ? this.config.itemName : this.config.groupName) }, /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-addIconBtn', onClick: function onClick() { if (_this6.config.couldAddItem) { _this6.dealItemAction(null, { type: 'addItem' }); } else { _this6.dealItemAction(null, { type: 'addGroup' }); } } }, /*#__PURE__*/_react["default"].createElement(_icons.PlusOutlined, null))); } // 栏目中的新增按钮 ; _proto.getGetItemAddBtnView = function getGetItemAddBtnView(currentTreeNode) { var _this7 = this; if (this.config.hideItemAddBtn) { return null; } if (currentTreeNode.isGroup === 0) { // 项目下不能新增任何内容 return null; } if (!this.config.couldAddItem && !this.config.couldAddGroup) { // 没有任何新增权限 return null; } if (this.config.couldAddItem && this.config.couldAddGroup) { // 分组和项目都能新增,需要下拉选 var items = [{ key: 'addGroup', label: /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-flexCenter5' }, this.config.addGroupIcon, "\u65B0\u589E" + this.config.groupName) }, { key: 'addItem', label: /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-flexCenter5' }, this.config.addItemIcon, "\u65B0\u589E" + this.config.itemName) }]; if (this.props.diyAddDropdown) { items = this.props.diyAddDropdown(currentTreeNode, this.config); } return /*#__PURE__*/_react["default"].createElement(_dropdown["default"], { menu: { items: items, onClick: function onClick(_ref2) { var item = _ref2.item, key = _ref2.key; switch (key) { case 'addGroup': _this7.dealItemAction(currentTreeNode, { type: 'addGroup' }); break; case 'addItem': _this7.dealItemAction(currentTreeNode, { type: 'addItem' }); break; } } }, placement: "bottomLeft" }, /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-actionIconOut' }, this.config.addIcon)); } return /*#__PURE__*/_react["default"].createElement(_tooltip["default"], { title: "\u65B0\u589E" + (this.config.couldAddItem ? this.config.itemName : this.config.groupName) }, /*#__PURE__*/_react["default"].createElement("div", { onClick: function onClick() { if (_this7.config.couldAddItem) { _this7.dealItemAction(currentTreeNode, { type: 'addItem' }); } else { _this7.dealItemAction(currentTreeNode, { type: 'addGroup' }); } } }, /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-actionIconOut' }, this.config.addIcon))); } // 更多操作的按钮 ; _proto.getGetItemMoreBtnView = function getGetItemMoreBtnView(currentTreeNode) { var _this8 = this; if (!this.config.couldEditGroup && !this.config.couldDeleteGroup && currentTreeNode.isGroup === 1) { // 没有分组的任何操作权限 return null; } if (!this.config.couldEditItem && !this.config.couldDeleteItem && currentTreeNode.isGroup === 0) { // 没有项目的任何操作权限 return null; } var items = []; if (this.config.customRightActionBefore && this.config.customRightActionBefore.length) { this.config.customRightActionBefore.forEach(function (item, index) { var itemNode = item(_this8.dealReturnItem(currentTreeNode)); if (itemNode) { items.push({ key: 'before-' + index, label: itemNode }); } }); } if (this.config.couldEditGroup && currentTreeNode.isGroup === 1 || this.config.couldEditItem && currentTreeNode.isGroup === 0) { items.push({ key: 'edit', label: /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-flexCenter5' }, currentTreeNode.isGroup === 1 ? this.config.editGroupName : this.config.editItemName) }); } if (this.config.couldCloneItem && currentTreeNode.isGroup === 0) { items.push({ key: 'clone', label: /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-flexCenter5' }, this.config.cloneItemName) }); } if (this.config.couldDeleteGroup && currentTreeNode.isGroup === 1 || this.config.couldDeleteItem && currentTreeNode.isGroup === 0) { items.push({ key: 'delete', label: /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-flexCenter5', style: { color: 'red' } }, currentTreeNode.isGroup === 1 ? this.config.deleteGroupName : this.config.deleteItemName) }); } if (this.config.customRightActionAfter && this.config.customRightActionAfter.length) { this.config.customRightActionAfter.forEach(function (item, index) { var itemNode = item(_this8.dealReturnItem(currentTreeNode)); if (itemNode) { items.push({ key: 'after-' + index, label: itemNode }); } }); } return /*#__PURE__*/_react["default"].createElement(_dropdown["default"], { menu: { items: items, onClick: function onClick(_ref3) { var item = _ref3.item, key = _ref3.key; switch (key) { case 'edit': _this8.dealItemAction(currentTreeNode, { type: 'edit' }); break; case 'delete': _this8.dealItemAction(currentTreeNode, { type: 'delete' }); break; case 'clone': _this8.cloneItemAction(_this8.dealReturnItem(currentTreeNode), { type: 'clone' }); break; } } }, placement: "bottomLeft" }, /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-actionIconOut' }, this.config.moreIcon)); }; _proto.render = function render() { var _styleSet$containerSt, _this9 = this, _Object$keys, _this$config; var _this$state2 = this.state, treeData = _this$state2.treeData, loading = _this$state2.loading, matchTxt = _this$state2.matchTxt, upDate = _this$state2.upDate, expandKeys = _this$state2.expandKeys, disableDragAndDrop = _this$state2.disableDragAndDrop, selectTreeNode = _this$state2.selectTreeNode, hasGroup = _this$state2.hasGroup; var styleSet = Object.assign({}, CustomStyle, this.props.customStyle); return /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-outerBox', style: (0, _extends2["default"])({}, styleSet.containerStyle) }, loading ? /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-loadingLayer' }, /*#__PURE__*/_react["default"].createElement(_spin["default"], { size: 'large' })) : null, this.config.hideTitle ? null : /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-mainTitleBox' }, /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-directoryTitle' }, typeof this.props.title === 'function' ? this.props.title(this) : this.props.title), this.getTopAddView()), /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-searchBox' }, /*#__PURE__*/_react["default"].createElement(_input["default"], { // size={"small"} className: ((_styleSet$containerSt = styleSet.containerStyle) === null || _styleSet$containerSt === void 0 ? void 0 : _styleSet$containerSt.background) === 'transparent' ? _variables.bizCssPrefix + '-transparentInput' : '', prefix: /*#__PURE__*/_react["default"].createElement(_icons.SearchOutlined, null), allowClear: true, placeholder: this.config.placeholderText, maxLength: 20, value: matchTxt, onChange: function onChange(e) { var value = e.target.value; _this9.findMatchTree(value); } })), this.props.customToolBar ? this.props.customToolBar(this) : null, /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-subTitleBox' }, /*#__PURE__*/_react["default"].createElement(_tooltip["default"], { title: '点击刷新' }, /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-directoryTitle', onClick: function onClick() { _this9.setState({ selectTreeNode: null }, function () { _this9.refreshTreeDataAction(); }); } }, this.config.subTitle)), hasGroup ? (_Object$keys = Object.keys(expandKeys)) !== null && _Object$keys !== void 0 && _Object$keys.length ? /*#__PURE__*/_react["default"].createElement(_tooltip["default"], { title: '全部收起' }, /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-closeAllIcon', onClick: function onClick() { _this9.closeAll(); } })) : /*#__PURE__*/_react["default"].createElement(_tooltip["default"], { title: '全部展开' }, /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-openAllIcon', onClick: function onClick() { _this9.openAll(); } })) : null), /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-treeBox' }, treeData && treeData.length > 0 ? /*#__PURE__*/_react["default"].createElement(_dndKitSortableTree.SortableTree, { key: 'st_' + upDate, items: treeData // 数据源 , indentationWidth: this.config.childIndent // 子项距离 , disableSorting: !(this !== null && this !== void 0 && (_this$config = this.config) !== null && _this$config !== void 0 && _this$config.couldDrag) // 禁止拖拽 , disabled: true, keepGhostInPlace: false // 拖拽保留原位 , dndContextProps: {} // 覆盖 @dnd-kit 原始 DndContext 属性 , sortableProps: {} // 覆盖 @dnd-kit 原始 useSortable 属性 , pointerSensorOptions: { activationConstraint: { distance: 10 } }, onItemsChanged: function onItemsChanged(newTreeData, reason) { _this9.dealItemChanged(newTreeData, reason); }, TreeItemComponent: /*#__PURE__*/_react["default"].forwardRef(function (props, ref) { return /*#__PURE__*/_react["default"].createElement(_dndKitSortableTree.SimpleTreeItemWrapper, (0, _extends2["default"])({}, props, { ref: ref, manualDrag: false // 设置仅通过dragHandle抓取 , showDragHandle: false // 是否显示dragHandle }), _this9.drawTreeItem(props.item)); }) }) : this.state.matchTxt ? /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-noMatch' }, "\u6CA1\u6709\u5339\u914D\"", this.state.matchTxt, "\"\u7684\u6570\u636E") : /*#__PURE__*/_react["default"].createElement("div", { className: _variables.bizCssPrefix + '-noMatch02' }, "\u6682\u65E0\u6570\u636E"))); } // 收起所有 ; _proto.closeAll = function closeAll() { var _this10 = this; this.setState({ expandKeys: {} }, function () { _this10.refreshTreeDataAction(_this10.treeDataFull); }); }; _proto.openAll = function openAll() { var _this11 = this; var defaultExpandedKeys = {}; var allNodes = _treeDataHandler["default"].searchTreeNodes(this.treeDataFull, function (item) { return true; }, false, 'children'); if (allNodes.length >= 0) { allNodes.forEach(function (item) { defaultExpandedKeys[item.id] = true; }); } this.setState({ expandKeys: defaultExpandedKeys }, function () { _this11.refreshTreeDataAction(_this11.treeDataFull); }); } // 通过关键词匹配节点 ; _proto.findMatchTree = function findMatchTree(value) { var _this12 = this; this.setState({ matchTxt: value }, function () { var filterResult = _this12.filterTreeData(_this12.treeDataFull, value); _this12.setState({ treeData: filterResult.returnTree, expandKeys: filterResult.pathKeys }); }); } // 过滤节点 ; _proto.filterTreeData = function filterTreeData(oldTree, matchTxt) { var _this13 = this; var pathKeys = []; // 哈希数组 oldTree = JSON.parse(JSON.stringify(oldTree)); if (!oldTree) { return { pathKeys: this.state.expandKeys, returnTree: oldTree }; } if (!matchTxt) { // 不再搜索 var expandedKeys = this.state.expandKeys; // 如果有选择的值,则展开的键要算 if (this.state.selectTreeNode) { expandedKeys = {}; var path = _treeDataHandler["default"].getNodeDeepPath(oldTree, function (o) { return o.id === _this13.state.selectTreeNode.id; }, 'children'); if (path.length >= 0) { path.forEach(function (item) { expandedKeys[item.id] = true; }); } } // 给设置扩展属性 oldTree = _treeDataHandler["default"].recursionDeal(oldTree, function (item) { // 是否展开 item.collapsed = !expandedKeys.hasOwnProperty(item.id); return item; }); return { pathKeys: expandedKeys, returnTree: oldTree }; } matchTxt = _.trim(matchTxt.toLowerCase()); var _find = function find(treeNode) { if (!treeNode) { return null; } // 判断子节点有没有找到 var childFindArr = []; treeNode.children && treeNode.children.forEach(function (child) { if (_find(child)) { childFindArr.push(child); } }); if (childFindArr.length > 0) { // 子找到了 treeNode.children = childFindArr; treeNode.collapsed = false; pathKeys[treeNode.id] = true; return treeNode; } else { // 子没找到 var currentFindIndex = treeNode.title.toLowerCase().indexOf(matchTxt); if (currentFindIndex !== -1) { treeNode.matchTitleConfig = { currentFindIndex: currentFindIndex, matchTxt: matchTxt }; return treeNode; } else { return null; } } }; var newTree = []; oldTree.forEach(function (item) { if (_find(item)) { newTree.push(item); } }); return { pathKeys: pathKeys, returnTree: newTree }; } // 返回数据之前,先处理字段映射 ; _proto.dealReturnItem = function dealReturnItem(data) { var result = _treeDataHandler["default"].changeField(data, this.fieldsReverse, 'new', 'children'); return result; } // 处理编辑事件 ; _proto.dealItemAction = /*#__PURE__*/ function () { var _dealItemAction = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4(targetTree, reason) { var _this$props$onDelete, _this$props4, _this$props$onAddGrou, _this$props5, _this$props$onAddItem, _this$props6; var depthMsg, _this$props$onEditGro, _this$props7, _this$props$onEditIte, _this$props8; return _regenerator["default"].wrap(function _callee4$(_context4) { while (1) switch (_context4.prev = _context4.next) { case 0: _context4.t0 = reason.type; _context4.next = _context4.t0 === 'delete' ? 3 : _context4.t0 === 'addGroup' ? 8 : _context4.t0 === 'addItem' ? 19 : _context4.t0 === 'edit' ? 24 : 36; break; case 3: _context4.next = 5; return (_this$props$onDelete = (_this$props4 = this.props).onDelete) === null || _this$props$onDelete === void 0 ? void 0 : _this$props$onDelete.call(_this$props4, this.dealReturnItem(targetTree)); case 5: _context4.next = 7; return this.refreshTreeDataAction(); case 7: return _context4.abrupt("break", 36); case 8: if (!targetTree) { _context4.next = 14; break; } depthMsg = _treeDataHandler["default"].getNodeDeepPath(this.treeDataFull, function (item) { return item.id === targetTree.id; }, 'children'); console.log(depthMsg); if (!((depthMsg === null || depthMsg === void 0 ? void 0 : depthMsg.length) >= this.config.maxLevel - 1)) { _context4.next = 14; break; } _modal["default"].info({ title: '提示', content: '当前层级分组无法再创建子分组' }); return _context4.abrupt("return"); case 14: _context4.next = 16; return (_this$props$onAddGrou = (_this$props5 = this.props).onAddGroup) === null || _this$props$onAddGrou === void 0 ? void 0 : _this$props$onAddGrou.call(_this$props5, targetTree ? this.dealReturnItem(targetTree) : null); case 16: _context4.next = 18; return this.refreshTreeDataAction(); case 18: return _context4.abrupt("break", 36); case 19: _context4.next = 21; return (_this$props$onAddItem = (_this$props6 = this.props).onAddItem) === null || _this$props$onAddItem === void 0 ? void 0 : _this$props$onAddItem.call(_this$props6, targetTree ? this.dealReturnItem(targetTree) : null); case 21: _context4.next = 23; return this.refreshTreeDataAction(); case 23: return _context4.abrupt("break", 36); case 24: if (!(targetTree.isGroup === 1)) { _context4.next = 31; break; } _context4.next = 27; return (_this$props$onEditGro = (_this$props7 = this.props).onEditGroup) === null || _this$props$onEditGro === void 0 ? void 0 : _this$props$onEditGro.call(_this$props7, this.dealReturnItem(targetTree)); case 27: _context4.next = 29; return this.refreshTreeDataAction(); case 29: _context4.next = 35; break; case 31: _context4.next = 33; return (_this$props$onEditIte = (_this$props8 = this.props).onEditItem) === null || _this$props$onEditIte === void 0 ? void 0 : _this$props$onEditIte.call(_this$props8, this.dealReturnItem(targetTree)); case 33: _context4.next = 35; return this.refreshTreeDataAction(); case 35: return _context4.abrupt("break", 36); case 36: case "end": return _context4.stop(); } }, _callee4, this); })); function dealItemAction(_x3, _x4) { return _dealItemAction.apply(this, arguments); } return dealItemAction; }() // 处理树结构变更 ; _proto.dealItemChanged = /*#__PURE__*/ function () { var _dealItemChanged = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee5(newTreeData, reason) { var _reason$draggedFromPa, _reason$droppedToPare; var expandKeys, _this$props$onSort, _this$props9, sortChildren, parentItem, newParentItem, _this$props$onChangeG, _this$props10, childItem, _parentItem, _sortChildren, _newParentItem; return _regenerator["default"].wrap(function _callee5$(_context5) { while (1) switch (_context5.prev = _context5.next) { case 0: // console.warn("newTreeData",newTreeData); // console.warn("reason",reason); expandKeys = this.state.expandKeys; _context5.t0 = reason.type; _context5.next = _context5.t0 === 'expanded' ? 4 : _context5.t0 === 'collapsed' ? 7 : _context5.t0 === 'dropped' ? 10 : 38; break; case 4: // 处理展开 expandKeys[reason.item.id] = true; this.setState({ expandKeys: expandKeys, treeData: newTreeData, upDate: this.state.upDate + 1 }); return _context5.abrupt("break", 38); case 7: // 处理收起 delete expandKeys[reason.item.id]; this.setState({ expandKeys: expandKeys, treeData: newTreeData, upDate: this.state.upDate + 1 }); return _context5.abrupt("break", 38); case 10: if (!(((_reason$draggedFromPa = reason.draggedFromParent) === null || _reason$draggedFromPa === void 0 ? void 0 : _reason$draggedFromPa.id) === ((_reason$droppedToPare = reason.droppedToParent) === null || _reason$droppedToPare === void 0 ? void 0 : _reason$droppedToPare.id))) { _context5.next = 20; break; } // 父级没有改变,属于排序操作 sortChildren = []; parentItem = null; if (reason.draggedFromParent) { parentItem = this.dealReturnItem(reason.draggedFromParent); newParentItem = _treeDataHandler["default"].searchTreeNodeByField(newTreeData, { field: 'id', value: reason.draggedFromParent.id }, 'children'); sortChildren = this.dealReturnItem(newParentItem.children); } else { // 顶层项目排序 parentItem = null; sortChildren = this.dealReturnItem(newTreeData); } _context5.next = 16; return (_this$props$onSort = (_this$props9 = this.props).onSort) === null || _this$props$onSort === void 0 ? void 0 : _this$props$onSort.call(_this$props9, parentItem, sortChildren, reason === null || reason === void 0 ? void 0 : reason.draggedItem); case 16: _context5.next = 18; return this.refreshTreeDataAction(); case 18: _context5.next = 37; break; case 20: //父级发生改变,属于改变层级 childItem = reason.draggedItem; _parentItem = null; _sortChildren = []; if (!reason.droppedToParent) { _context5.next = 32; break; } if (!(reason.droppedToParent.depth >= this.config.maxLevel - 2 && childItem.isGroup === 1)) { _context5.next = 27; break; } _modal["default"].info({ title: '提示', content: '当前层级分组无法接收子分组' }); return _context5.abrupt("return"); case 27: _parentItem = this.dealReturnItem(reason.droppedToParent); _newParentItem = _treeDataHandler["default"].searchTreeNodeByField(newTreeData, { field: 'id', value: reason.droppedToParent.id }, 'children'); _sortChildren = this.dealReturnItem(_newParentItem.children); _context5.next = 33; break; case 32: _sortChildren = this.dealReturnItem(newTreeData); case 33: _context5.next = 35; return (_this$props$onChangeG = (_this$props10 = this.props).onChangeGroup) === null || _this$props$onChangeG === void 0 ? void 0 : _this$props$onChangeG.call(_this$props10, _parentItem, this.dealReturnItem(childItem), _sortChildren); case 35: _context5.next = 37; return this.refreshTreeDataAction(); case 37: return _context5.abrupt("break", 38); case 38: case "end": return _context5.stop(); } }, _callee5, this); })); function dealItemChanged(_x5, _x6) { return _dealItemChanged.apply(this, arguments); } return dealItemChanged; }(); _proto.cloneItemAction = /*#__PURE__*/function () { var _cloneItemAction = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee6(newTreeData, reason) { return _regenerator["default"].wrap(function _callee6$(_context6) { while (1) switch (_context6.prev = _context6.next) { case 0: _context6.next = 2; return this.props.onCloneItem(newTreeData, reason); case 2: case "end": return _context6.stop(); } }, _callee6, this); })); function cloneItemAction(_x7, _x8) { return _cloneItemAction.apply(this, arguments); } return cloneItem