/** * @description 基于zTree.js实现 */ import React from "react" import { observer } from "mobx-react" import { Spin, Empty, Drawer, Button, List, Row, Col } from "antd" import TreeService from "./Service" import SearchAutoComplete from "./SearchAutoComplete" import { StateManage } from "../../../service/state" import { PropertyService } from "../../../service/property" import "./z-tree/js/jquery.ztree.all" import { IProps } from "../../../@types/Tree" import { DeleteOutlined, EnvironmentOutlined } from "@ant-design/icons" export const Tree = function (props: IProps, bool?: boolean) { const treeService = new TreeService(props) const Template: any = observer(() => { let { loading } = StateManage.get(treeService.treeMobxProps) if (loading !== false) { loading = true } const { treeId, footerId, treeContainer } = treeService const { allowSearch, maxHeight = 500, height, showFooter, disabled, mode = {} } = treeService.props const drawerModalState = PropertyService.getObservableObj({ visible: false }) const checkedDataList = PropertyService.getObservableObj({ checkedData: [], activedKey: "" }) const CheckedDataList = observer(function () { const { checkedData, activedKey } = StateManage.get(checkedDataList) const deleteCheckedData = function (item: any) { const nextCheckedData = checkedData.filter((data: any) => data["key"] !== item["key"]) StateManage.set(checkedDataList, { checkedData: nextCheckedData }) } const setActivedKey = function (item: any) { StateManage.set(checkedDataList, { activedKey: activedKey !== item["key"] ? item["key"] : "" }) } return }} renderItem={(item: any) => { return {!disabled ? deleteCheckedData(item)} /> {mode.isRadio === false ? setActivedKey(item)} /> : null} : null} {item["title"]} }} /> }) const DrawerModal = observer(function () { const { visible } = StateManage.get(drawerModalState) const onClose = function () { const { checkedData, activedKey } = StateManage.get(checkedDataList) const checkedKeys = checkedData.map((item: any) => item["key"]) const { updateCheckedKeys, triggerOnSelectOption } = StateManage.get(treeService.treeMobxProps) updateCheckedKeys(checkedKeys, "replace") treeService.triggerCallback("onChange") if (checkedKeys.length > 0 && activedKey) { triggerOnSelectOption(activedKey) } StateManage.set(drawerModalState, { visible: false }) } return }) const showCheckedData = function () { const { getCallbackData } = StateManage.get(treeService.treeMobxProps) const { checkedData } = getCallbackData() const nextCheckedData = checkedData.map((item: any) => { return { title: item["title"], key: item["id"] } }) StateManage.set(drawerModalState, { visible: true }) StateManage.set(checkedDataList, { checkedData: nextCheckedData }) } const heightMapArr = { container: [(height || maxHeight) - 10], tree: [(height || maxHeight) - 80] } return
{treeService.renderDisableModal()} {allowSearch === false ? null : } {(treeService.isEmptyData() && !loading) ? :
} {showFooter ?
: null}
}) if (bool === false) { return [treeService.treeMobxProps, Template] } return Template }