import { useState, useEffect } from "react"; import { Button, Input, Select, DatePicker, Space, message, Table, Tag, Modal, Pagination, Form, Checkbox, InputNumber, Radio, Tree, ConfigProvider, } from "antd"; import type { CheckboxChangeEvent } from "antd/es/checkbox"; import type { DatePickerProps, RangePickerProps } from "antd/es/date-picker"; import type { ColumnsType } from "antd/es/table"; import { SyncOutlined, SearchOutlined, ExclamationCircleFilled, } from "@ant-design/icons"; import zh_CN from "antd/es/locale/zh_CN"; import dataLocale from "antd/es/date-picker/locale/zh_CN"; import "dayjs/locale/zh-cn"; import "./index.scss"; import { getRolesDataAPI, delRoleAPI, getRoleAPI, addRoleAPI, setRoleDataAPI, getMenuLiseAPI, } from "../../../api/system/role"; // import { useForm } from "antd/es/form/Form"; interface searchValueType { dateTime: string[] | undefined; roleName: string | undefined; roleKey: string | undefined; state: string | undefined; startTime: string | undefined; endTime: string | undefined; } //表格单项数据类型 interface TableDataType { createTime: string; dataScope: string; deptIds: any[]; menuIds: any[]; roleId: number; roleKey: string; roleName: string; roleSort: string; state: string; updateTime: string; key?: number; total?: number; } //当前选择的角色信息 const fieldNames = { title: "menuName", key: "menuId", children: "children", }; let thisrole: any = {}; let treeIds: number[] = []; export default function Role() { const { confirm } = Modal; const { RangePicker } = DatePicker; //提示组件 const [messageApi, contextHolder] = message.useMessage(); //搜索框内所有内容 let [searchValue, setSearchValue] = useState({ dateTime: undefined, roleName: undefined, roleKey: undefined, startTime: undefined, state: undefined, endTime: undefined, }); //树列表数据 const [menuTreeData, setMenuTreeData] = useState([]); //父子联动 const [checkStrictly, setCheckStrictly] = useState(false); //树所有节点IDs //树是否自动展开 const [expandedKeys, setExpandedKeys] = useState([]); const [checkedKeys, setCheckedKeys] = useState([]); const [selectedKeys, setSelectedKeys] = useState([]); //Modal const [isModalOpen, setIsModalOpen] = useState(false); const [modalTitle, setModalTitle] = useState(""); //表单区域 const [form] = Form.useForm(); //serach const [formSearch] = Form.useForm(); //当前页面页数 let [count, setCount] = useState(1); //表格内数据 let [tableData, setTableData] = useState([]); //表格数据总条数 let [total, setTotal] = useState(0); //表格格式 const columns: ColumnsType = [ { title: "序号", dataIndex: "key", key: "key", }, { title: "角色名称", dataIndex: "roleName", key: "roleName", }, { title: "角色权限", dataIndex: "roleKey", key: "roleKey", }, { title: "数据范围", key: "dataScope", dataIndex: "dataScope", render: (text) => { switch (text) { case "1": return <>所有数据权限; case "2": return <>自定义数据权限; case "3": return <>本部门数据权限; default: return <>本部门及以下数据权限; } }, }, { title: "显示顺序", key: "roleSort", dataIndex: "roleSort", }, { title: "状态", key: "state", dataIndex: "state", render: (text) => ( <> {text === "0" ? ( 正常 ) : ( 停用 )} ), }, { title: "创建时间", key: "createTime", dataIndex: "createTime", }, { title: "操作", key: "", dataIndex: "", render: (text) => ( <> {/* */} ), }, ]; //请求表格内容参数 let [queryTableDataParams, setQueryTableDataParams] = useState({ roleKey: undefined, roleName: undefined, state: undefined, endTime: undefined, startTime: undefined, pageNum: undefined, pageSize: undefined, }); const [allChecked, setAllChecked] = useState(false); const onTreeExpand = (expandedKeysValue: React.Key[]) => { // console.log("onExpand", expandedKeysValue); setExpandedKeys(expandedKeysValue); }; const onCheckExpand = (e: CheckboxChangeEvent) => { console.log(`checked = ${e.target.checked}`); console.log(treeIds); if (e.target.checked) setExpandedKeys(treeIds); else setExpandedKeys([]); console.log(expandedKeys); }; const onCheckAll = (e: CheckboxChangeEvent) => { console.log(`checked = ${e.target.checked}`); setAllChecked(!allChecked); if (!allChecked) setCheckedKeys(treeIds); else setCheckedKeys([]); }; const onCheckFaSon = (e: CheckboxChangeEvent) => { console.log(`checked = ${e.target.checked}`); setCheckStrictly(!e.target.checked); }; const onTreeCheck = (checkedKeysValue: any) => { // console.log("onCheck", checkedKeysValue.checked); console.log("onCheck", checkedKeysValue); console.log("treeIds", treeIds); if (checkedKeysValue.length != treeIds.length) { setAllChecked(false); } else { setAllChecked(true); } if (checkStrictly === false) { form.setFieldsValue({ menuIds: checkedKeysValue }); setCheckedKeys(checkedKeysValue); } else { form.setFieldsValue({ menuIds: checkedKeysValue.checked }); setCheckedKeys(checkedKeysValue.checked); } }; const onTreeSelect = (selectedKeysValue: React.Key[], info: any) => { console.log("onSelect", info); // setExpandedKeys([...expandedKeys,...selectedKeysValue]) setSelectedKeys(selectedKeysValue); }; //当前角色的数据 // let thisrole: any = {roleId:'s'}; const handleEdit = async (role: any) => { await getRoleData(role); setModalTitle("修改角色"); // setCheckedKeys(role) setIsModalOpen(true); }; const handleDelete = (role: any) => { console.log(role); confirm({ title: "系统提示", icon: , content: `确定删除角色名称为${role.roleName}的数据吗`, okText: "确定", okType: "danger", cancelText: "取消", onOk() { handleClickDel(role); }, onCancel() { console.log("Cancel"); }, }); }; const handleSerach = () => { searchValue = formSearch.getFieldsValue(); if (typeof searchValue.dateTime !== "undefined") { searchValue.startTime = (searchValue.dateTime as string[])[0]; searchValue.endTime = (searchValue.dateTime as string[])[1]; } setSearchValue(searchValue); count = 1; setQueryTableDataParams({ ...searchValue }); }; const handleReset = () => { formSearch.resetFields(); searchValue = formSearch.getFieldsValue(); setSearchValue(searchValue); setQueryTableDataParams({ ...searchValue }); // setSearchValue({ ...searchValue }); // setCount(1) }; //Modal区域 const handleModalOk = () => { form .validateFields() .then((values) => { // form.resetFields(); console.log("add", values); if (modalTitle == "新增角色") { postAdd({ ...values, menuIds: checkedKeys }); } else if (modalTitle == "修改角色") { console.log(thisrole); console.log(checkedKeys); console.log("now", { ...thisrole, ...values, menuIds: checkedKeys }); // console.log({ ...thisrole, ...values,menuIds:setCheckedKeys }); thisrole = { ...thisrole, ...values, menuIds: checkedKeys }; editRoleData({ ...thisrole }); } }) .catch((info) => { console.log("Validate Failed:", info); }); console.log("modal thisrole", thisrole); }; const handleModalCanle = () => { setIsModalOpen(false); }; //新增 const handleNewAdd = () => { setModalTitle("新增角色"); form.setFieldsValue({ roleName: "", roleKey: "", state: "0", dataScope: "1", roleSort: "0", }); setCheckedKeys([]); setIsModalOpen(true); }; const onDateChange = ( valueDate: DatePickerProps["value"] | RangePickerProps["value"], dateString: [string, string] | string ) => { // setSelectedDate(valueDate) console.log(valueDate); searchValue.startTime = dateString[0]; searchValue.endTime = dateString[1]; formSearch.setFieldsValue({ dateTime: [dateString[0], dateString[1]] }); setSearchValue(searchValue); // setSearchValue({ ...searchValue }) }; const filterOption = ( input: string, option?: { label: string; value: string } ) => (option?.label ?? "").toLowerCase().includes(input.toLowerCase()); //表格函数 //从服务器获取数据 //页码改变 const pageChange = (page: number, pageSize: number) => { console.log(page, pageSize); queryTableDataParams = { ...queryTableDataParams, pageNum: page, pageSize }; // setQueryParams({...queryParams,pageNum:page,pageSize}) console.log(queryTableDataParams); getRolesData(queryTableDataParams); setCount(page); }; //删除单项 const handleClickDel = (role: TableDataType) => { console.log(role); let { roleId } = role; del(roleId); }; //遍历菜单树获取所有节点ID const getTreeIds = function (tree: any) { // console.log('Ids:',tree); tree.forEach((item: any) => { // console.log(item); treeIds.push(item.menuId); if (item.children != null) getTreeIds(item.children); }); }; //获取单个角色详细信息 const getRoleData = async (role: any) => { // const {roleId,roleKey,roleName,roleSort,dataScope,state,meunIds}=role // thisrole=role try { let { code, data } = await getRoleAPI(role); if (code === 1000) { console.log("role:", data); thisrole = data; console.log("thisrole", thisrole); form.setFieldsValue(thisrole); setCheckedKeys(data.menuIds); } } catch (error) { console.log(error); } // setOpen(true); }; //获取菜单权限树 const getMenuList = async () => { try { let menul = await getMenuLiseAPI(); console.log("tree", menul.data); if (treeIds.length == 0) getTreeIds(menul.data); console.log(treeIds); setMenuTreeData(menul.data); // treeData = menul.data // setMenulist(menul.data) } catch (error) { console.log(error); } }; //新增请求 const postAdd = async (value: any) => { try { let { code } = await addRoleAPI(value); console.log(code); if (code === 1000) { console.log("success"); messageApi.open({ type: "success", content: "操作成功", }); form.setFieldsValue({ roleName: "", roleKey: "", state: "0", dataScope: "1", }); getRolesData({ ...queryTableDataParams, pageNum: count }); setIsModalOpen(false); } else { messageApi.open({ type: "error", content: "角色名称已存在", }); } } catch (error) {} }; const getRolesData = async (queryTableDataParams: any) => { console.log("参数:", queryTableDataParams); try { const { code, data } = await getRolesDataAPI(queryTableDataParams); if (code === 1000) { const sortData = data.rows.sort( (a: TableDataType, b: TableDataType) => parseInt(a.roleSort) - parseInt(b.roleSort) ); sortData.forEach((element: TableDataType, i: number) => { element.key = i + 1; }); setTableData(sortData); setTotal(data.total); } } catch (err: any) { console.log("555", err); } }; //服务器删除角色 const del = async (roleId: number) => { try { let { code } = await delRoleAPI({ roleId }); if (code === 1000) { console.log("del", roleId); messageApi.open({ type: "success", content: "操作成功", }); getRolesData({ pageNum: count }); } } catch (error) { console.log(error); } }; //修改角色信息 const editRoleData = async (role: any) => { console.log(role); try { let { code, data } = await setRoleDataAPI(thisrole); // let a = await setRoleDataAPI(role); if (code === 1000) { thisrole = { ...thisrole, ...data }; getRolesData({ ...queryTableDataParams, pageNum: count }); messageApi.open({ type: "success", content: "操作成功", }); setIsModalOpen(false); form.setFieldsValue({ roleName: "", roleKey: "", state: "0", dataScope: "1", }); } else { messageApi.open({ type: "error", content: "角色名称已存在!", }); } } catch (error) { messageApi.open({ type: "error", content: "系统未知错误", }); console.log(error); } }; useEffect(() => { // setQueryParams({...queryParams,...valueSch}) queryTableDataParams = { ...queryTableDataParams, // ...searchValue, pageNum: count, }; getRolesData(queryTableDataParams); // console.log(queryParams); }, [queryTableDataParams]); useEffect(() => { getMenuList(); }, []); return (
所有数据权限 自定义数据权限 本部门数据权限 本部门及以下数据权限 正常 停用 {/* */}
展开 全选 父子联动
{/* 表格 */}
{contextHolder} pageChange(page, pageSize)} showTotal={(total) => `共 ${total} 条`} /> ); }