import React, { useCallback, useEffect, useMemo, 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, Popconfirm } 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 { useDispatch, useSelector } from "react-redux"; import { A5_APIgetList } from "@/store/action/A5Section"; import { A4_APIgetRoleAll } from "@/store/action/A4Role"; import NotFound from "@/components/NotFound"; import tabLeftArr from "./data"; import { RootState } from "@/store"; import { RouterType } from "@/types"; import { A1_APIOgetHardCoded } from "@/store/action/A1Project"; function Layout() { const dispatch = useDispatch(); useEffect(() => { // 获取权限信息(整个项目的关于权限的信息--已过滤) dispatch(A4_APIgetRoleAll()); // 进页面获取 部门 列表 信息(给 用户管理、字典管理 项目管理-内控文件下拉框 页面使用) dispatch(A5_APIgetList()); // 获取 项目管理-项目文件-左侧一级写死目录 dispatch(A1_APIOgetHardCoded()); }, [dispatch]); // 左侧菜单 和 路由 信息 const [list, setList] = useState([] as RouterType); //获取权限信息(id数组,已过滤) const A4RoleAll = useSelector((state: RootState) => state.A4Role.A4RoleAll); // 通过权限信息 动态 显示 侧边栏 useEffect(() => { const arr = [...tabLeftArr]; arr.forEach((v) => { if (A4RoleAll.includes(v.id)) v.done = true; else v.done = false; }); setList(arr.filter((v) => v.done)); }, [A4RoleAll]); // 第一个页面不是 项目 管理 的时候 动态 跳转 useEffect(() => { if (list && list[0] && list[0].id !== "1000") { history.replace(list[0].path); } }, [list]); // 点击跳转 const pathCutFu = useCallback((path: string) => { history.push(path); }, []); // 当前路径选中的左侧菜单 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 userInfo = useMemo(() => { return getTokenInfo().user; }, []); // 修改密码相关 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 (