import React, { useState, useMemo, useRef, createContext } from "react";
import {
Tree,
Input,
Popconfirm,
Tooltip,
Divider,
Modal,
message,
} from "antd";
import {
MinusSquareOutlined,
FormOutlined,
PlusSquareOutlined,
ArrowDownOutlined,
ArrowRightOutlined,
} from "@ant-design/icons";
import getPrem from "@/utils/getPrem";
import { useRequest } from "ahooks";
import { doFetch } from "@/utils/doFetch";
import { useEffect } from "react";
import Login from "@/pages/user/Login";
const ReachableContext = createContext(null);
let { Search } = Input,
{ TreeNode } = Tree;
const getParentKey = (key, tree) => {
let parentKey;
for (let i = 0; i < tree.length; i++) {
const node = tree[i];
if (node.children) {
if (
node.children.some((item) => {
return item.key === key;
})
) {
parentKey = node.key;
} else if (getParentKey(key, node.children)) {
parentKey = getParentKey(key, node.children);
}
}
}
return parentKey;
};
function TreeRender({
url,
deleteurl,
saveurl,
onselected,
params,
noaction,
maxWidth,
hasTool = false,
}) {
const [search, setsearch] = useState("");
const [savetitle, setsavetitle] = useState(null);
const [modal, setModal] = useState({
visible: false,
});
const [expandall, setexpandall] = useState(false);
const [expandedKeys, onExpand] = useState();
const { data, loading, refresh } = useRequest(() => {
return doFetch({ url, params: params ?? {} });
});
const [autoExpandParent, setAutoExpandParent] = useState(true);
const allkeys = useMemo(() => {
let res = [];
const fn = (source) => {
source.map((el) => {
res.push(el);
el.children && el.children.length > 0 ? fn(el.children) : ""; // 子级递归
});
};
fn(data?.data?.dataList ?? []);
return res.filter((it) => it.children).map((it) => it.key);
}, [data]);
const alldata = useMemo(() => {
let res = [];
const fn = (source) => {
source.map((el) => {
res.push(el);
el.children && el.children.length > 0 ? fn(el.children) : ""; // 子级递归
});
};
fn(data?.data?.dataList ?? []);
return res;
}, [data]);
const treeData = useMemo(() => {
let res = data?.data?.dataList ?? [];
return [
{
title: "全部",
key: "00000000",
children: res,
},
];
}, [data]);
const onChange = (e) => {
const { value } = e.target;
const dataLists = getAllList();
const newExpandedKeys = dataLists
.map((item) => {
if (item.title.indexOf(value) > -1) {
return getParentKey(item.key, treeData);
}
return null;
})
.filter((item, i, self) => item && self.indexOf(item) === i);
setsearch(value);
if (newExpandedKeys.length > 0) {
setexpandall(true);
setAutoExpandParent(true);
} else {
setexpandall(false);
setAutoExpandParent(false);
}
onExpand(newExpandedKeys);
};
const loop = (data) =>
data.map((item) => {
const index = item.title.indexOf(search);
const beforeStr = item.title.substr(0, index);
const afterStr = item.title.substr(index + search.length);
let title =
index > -1 ? (