mirror of
https://github.com/PlayEdu/backend
synced 2025-06-23 01:14:13 +08:00
树形部门选择组件
This commit is contained in:
parent
18ec9ee48c
commit
d6107055b0
@ -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} />;
|
||||||
};
|
};
|
||||||
|
@ -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">
|
||||||
|
Loading…
x
Reference in New Issue
Block a user