树形部门选择组件

This commit is contained in:
禺狨 2023-03-07 15:16:04 +08:00
parent 18ec9ee48c
commit d6107055b0
2 changed files with 48 additions and 23 deletions

View File

@ -1,12 +1,14 @@
import { Button, Input, message, Tree } from "antd"; import { Button, Input, message, Tree } from "antd";
import { useState, useEffect } from "react"; import { useState, useEffect } from "react";
import { department } from "../../api/index"; import { department } from "../../api/index";
interface Option {
key: string | number;
title: string;
children?: Option[];
}
interface PropInterface { interface PropInterface {
defaultExpandedKeys: any; onUpdate: (keys: any) => void;
defaultSelectedKeys: any;
defaultCheckedKeys: any;
onUpdate: () => void;
} }
export const TreeDepartment = (props: PropInterface) => { export const TreeDepartment = (props: PropInterface) => {
@ -15,23 +17,38 @@ export const TreeDepartment = (props: PropInterface) => {
useEffect(() => { useEffect(() => {
setLoading(true); setLoading(true);
department.departmentList().then((res: any) => { department.departmentList().then((res: any) => {
setTreeData(res.data); const departments = res.data.departments;
const new_arr: Option[] = checkArr(departments, 0);
setTreeData(new_arr);
setTimeout(() => { setTimeout(() => {
setLoading(false); setLoading(false);
}, 1000); }, 1000);
}); });
}, []); }, []);
const onSelect = () => {};
const onCheck = () => {}; const checkArr = (departments: any[], id: number) => {
return ( const arr = [];
<Tree for (let i = 0; i < departments[id].length; i++) {
checkable if (!departments[departments[id][i].id]) {
defaultExpandedKeys={props.defaultExpandedKeys} arr.push({
defaultSelectedKeys={props.defaultSelectedKeys} title: departments[id][i].name,
defaultCheckedKeys={props.defaultCheckedKeys} key: departments[id][i].id,
onSelect={onSelect} });
onCheck={onCheck} } else {
treeData={treeData} const new_arr: Option[] = checkArr(departments, departments[id][i].id);
/> arr.push({
); title: departments[id][i].name,
key: departments[id][i].id,
children: new_arr,
});
}
}
return arr;
};
const onSelect = (selectedKeys: any, info: any) => {
props.onUpdate(selectedKeys);
};
return <Tree onSelect={onSelect} treeData={treeData} />;
}; };

View File

@ -17,6 +17,7 @@ import { PlusOutlined, ReloadOutlined } from "@ant-design/icons";
import { user } from "../../api/index"; import { user } from "../../api/index";
import { dateFormat } from "../../utils/index"; import { dateFormat } from "../../utils/index";
import { Link, useNavigate } from "react-router-dom"; import { Link, useNavigate } from "react-router-dom";
import { TreeDepartment } from "../../compenents";
interface DataType { interface DataType {
id: React.Key; id: React.Key;
@ -32,15 +33,16 @@ export const MemberPage: React.FC = () => {
const navigate = useNavigate(); const navigate = useNavigate();
const [selectedRowKeys, setSelectedRowKeys] = useState<React.Key[]>([]); const [selectedRowKeys, setSelectedRowKeys] = useState<React.Key[]>([]);
const [loading, setLoading] = useState<boolean>(true); const [loading, setLoading] = useState<boolean>(true);
const [page, setPage] = useState<number>(1); const [page, setPage] = useState(1);
const [size, setSize] = useState<number>(10); const [size, setSize] = useState(10);
const [list, setList] = useState<any>([]); const [list, setList] = useState<any>([]);
const [total, setTotal] = useState<number>(0); const [total, setTotal] = useState(0);
const [refresh, setRefresh] = useState(false); const [refresh, setRefresh] = useState(false);
const [nickname, setNickname] = useState<string>(""); const [nickname, setNickname] = useState<string>("");
const [email, setEmail] = useState<string>(""); const [email, setEmail] = useState<string>("");
const [id_card, setIdCard] = useState<string>(""); const [id_card, setIdCard] = useState<string>("");
const [dep_ids, setDepIds] = useState<any>([]);
const columns: ColumnsType<DataType> = [ const columns: ColumnsType<DataType> = [
{ {
@ -104,7 +106,7 @@ export const MemberPage: React.FC = () => {
useEffect(() => { useEffect(() => {
getData(); getData();
}, [refresh, page, size]); }, [refresh, page, size, dep_ids]);
const onSelectChange = (newSelectedRowKeys: React.Key[]) => { const onSelectChange = (newSelectedRowKeys: React.Key[]) => {
console.log("selectedRowKeys changed: ", newSelectedRowKeys); console.log("selectedRowKeys changed: ", newSelectedRowKeys);
@ -112,12 +114,14 @@ export const MemberPage: React.FC = () => {
}; };
const getData = () => { const getData = () => {
let depIds = dep_ids.join(",");
setLoading(true); setLoading(true);
user user
.userList(page, size, { .userList(page, size, {
nickname: nickname, nickname: nickname,
email: email, email: email,
id_card: id_card, id_card: id_card,
dep_ids: depIds,
}) })
.then((res: any) => { .then((res: any) => {
setList(res.data.data); setList(res.data.data);
@ -171,7 +175,11 @@ export const MemberPage: React.FC = () => {
return ( return (
<> <>
<Row> <Row>
<Col span={4}></Col> <Col span={4}>
<div className="playedu-main-body" style={{ marginLeft: -24 }}>
<TreeDepartment onUpdate={(keys: any) => setDepIds(keys)} />
</div>
</Col>
<Col span={20}> <Col span={20}>
<div className="playedu-main-body mb-24"> <div className="playedu-main-body mb-24">
<div className="float-left d-flex"> <div className="float-left d-flex">