import React, { useCallback, useEffect, useRef, useState } from "react"; import { CaretUpOutlined, CaretDownOutlined } from "@ant-design/icons"; import styles from "./index.module.scss"; import SpinLoding from "@/components/SpinLoding"; import { Route, Switch, useLocation } from "react-router-dom"; import AuthRoute from "@/components/AuthRoute"; import classNames from "classnames"; import history from "@/utils/history"; import { Button, Form, Input, Modal } from "antd"; import { Base64 } from "js-base64"; import encodeStr from "@/utils/pass"; import { passWordEditAPI } from "@/store/action/layout"; import { getTokenInfo, removeTokenInfo } from "@/utils/storage"; import { MessageFu } from "@/utils/message"; import logoImg from "@/assets/img/logo.png"; import NotFound from "@/components/NotFound"; import { RouterType, RouterTypeRow } from "@/types"; import tabLeftArr from "./data"; import MyPopconfirm from "@/components/MyPopconfirm"; import { UserListType } from "../Z1user/Z1auth"; import { D3_APIgetInfo } from "@/store/action/D3role"; function Layout() { // 当前路径选中的左侧菜单 const location = useLocation(); const [path, setPath] = useState(""); useEffect(() => { const arr = location.pathname.split("/"); let pathTemp = "/"; if (arr[1]) pathTemp = "/" + arr[1]; setPath(pathTemp); }, [location]); // 获取用户权限信息 const getUserAuthFu = useCallback(async () => { const userInfo = getTokenInfo().user; const res = await D3_APIgetInfo(userInfo.roleId); if (res.code === 0) { console.log(123456,res); const tempList: UserListType[] = res.data.permission || []; const isOkIdArr = tempList.filter((c) => c.authority).map((v) => v.id); // 是管理员 if (userInfo.isAdmin === 1) { isOkIdArr.push(2100); isOkIdArr.push(2200); isOkIdArr.push(2300); } const tempArr: RouterTypeRow = []; tabLeftArr.forEach((v1) => { if (v1.son && v1.son[0]) { v1.son.forEach((v2) => { if (isOkIdArr.includes(v2.id)) { tempArr.push(v2); } }); } }); setRouterCom(tempArr); // 如果当前页面没有权限了,跳转有权限的第一个页面 const urlAll = window.location.hash; const isNowPath = urlAll.replace("#", ""); const pathArr = tempArr.map((v) => v.path); if (!pathArr.includes(isNowPath)) { history.push(pathArr[0]); } const resList = tabLeftArr.map((v) => ({ ...v, son: v.son.filter((c) => isOkIdArr.includes(c.id)), })); setList(resList); } }, []); useEffect(() => { getUserAuthFu(); }, [getUserAuthFu]); // 左侧菜单 信息 const [list, setList] = useState([] as RouterType); // 路由信息(过滤之后的) const [RouterCom, setRouterCom] = useState([]); // useEffect(() => { // console.log(123, list); // }, [list]); // 点击跳转 const pathCutFu = useCallback((path: string) => { history.push(path); }, []); // 修改密码相关 const [open, setOpen] = useState(false); // 拿到新密码的输入框的值 const oldPasswordValue = useRef(""); const checkPassWord = (rule: any, value: any = "") => { if (value !== oldPasswordValue.current) return Promise.reject("新密码不一致!"); else return Promise.resolve(value); }; const onFinish = async (values: any) => { // 通过校验之后发送请求 if (values.oldPassword === values.newPassword) return MessageFu.warning("新旧密码不能相同!"); const obj = { oldPassword: encodeStr(Base64.encode(values.oldPassword)), newPassword: encodeStr(Base64.encode(values.newPassword)), }; const res: any = await passWordEditAPI(obj); if (res.code === 0) { MessageFu.success("修改成功!"); loginExit(); } }; // 点击退出登录 const loginExit = () => { removeTokenInfo(); history.push("/login"); }; return (
{/* 左边 */}
{/* 左边主体 */}
{list.map((v) => ( ))}
{/* 右边 */}
{/* 用户相关 */}
{getTokenInfo().user.realName || getTokenInfo().user.userName || "匿名"}
setOpen(true)}>修改密码
{/* 右边主体 */}
{/* 二级路由页面 */}
}> {RouterCom.map((v) => ( ))}
{/* 点击修改密码打开的对话框 */} setOpen(false)} footer={ [] // 设置footer为空,去掉 取消 确定默认按钮 } >
e.target.value.replace(/\s+/g, "")} > e.target.value.replace(/\s+/g, "")} > (oldPasswordValue.current = e.target.value)} /> e.target.value.replace(/\s+/g, "")} >
); } // 使用 React.memo 来优化组件,避免组件的无效更新,类似 类组件里面的PureComponent const MemoLayout = React.memo(Layout); export default MemoLayout;