diff --git a/config/routes.ts b/config/routes.ts index 1216828c49906804fe7f6ff813ea72d6db87c1aa..3a0d944a88e3f1f2f5cf18cbeb1186fb49c39140 100644 --- a/config/routes.ts +++ b/config/routes.ts @@ -91,7 +91,7 @@ }, */ { path: "user", - name: "user", + name: "user-list", access: "canTestAdmin", hideInMenu: true, component: "./Sys/Users" diff --git a/src/app.tsx b/src/app.tsx index 5a181076f71ce025c753f9812b5e0f3adda70d8d..c6a43e5250b2758bc2ecfd6eff6f6e7503d10935 100644 --- a/src/app.tsx +++ b/src/app.tsx @@ -11,6 +11,8 @@ import { HeaderCls } from './components/Header/headerStyled'; import { getUserInfo } from './pages/Auth/Login/services'; import { request as requestInject } from "./request" import { toLoginPage } from "@/utils" +import { ConfigProvider } from 'antd'; +import zhCN from 'antd/lib/locale/zh_CN'; const isDev = process.env.NODE_ENV === 'development'; const ignorePathname = ["/login", "/regist"] @@ -77,6 +79,9 @@ export const layout: RunTimeLayoutConfig = (props) => { } }, headerTheme: "dark", + childrenRender(dom, props) { + return {dom} + }, headerRender: (props, dom) => , menuItemRender, contentStyle: { diff --git a/src/components/RightContent/AvatarDropdown.tsx b/src/components/RightContent/AvatarDropdown.tsx index cc679199d694eaeb0364cd59cde79683856622d0..3dc0433b49b821229fe8a005d2b31029cf143c8e 100644 --- a/src/components/RightContent/AvatarDropdown.tsx +++ b/src/components/RightContent/AvatarDropdown.tsx @@ -29,7 +29,8 @@ const loginOut = async () => { localStorage.setItem("auth_token", "") // Note: There may be security issues, please note - if (((window as any).webSiteEnv) === "openanolis") { + //@ts-ignore + if (["openanolis", "opensource"].includes(window.webSiteEnv)) { window.location.href = `/api/user/logout` return } diff --git a/src/locales/zh-CN/menu.ts b/src/locales/zh-CN/menu.ts index 085479747f2b49806d259fdd7471262cee9cd330..99ed866f89a5649682d3585f40d168edf2135108 100644 --- a/src/locales/zh-CN/menu.ts +++ b/src/locales/zh-CN/menu.ts @@ -11,7 +11,7 @@ export default { "menu.task": "测试任务", "menu.server": "测试设备", "menu.sys": "设置", - "menu.sys.user": "用户管理", + "menu.sys.user-list": "用户管理", "menu.sys.tag": "标签管理", "menu.sys.suite": "测试套管理", "menu.sys.approval": "审批管理", diff --git a/src/pages/Sys/Users/index.tsx b/src/pages/Sys/Users/index.tsx index a4f8ec4c2aace3e4030b7d652b8d094ff95f9d0f..650990192806349f721e0a22a840e8907c8a5280 100644 --- a/src/pages/Sys/Users/index.tsx +++ b/src/pages/Sys/Users/index.tsx @@ -35,10 +35,25 @@ const TableList: React.FC = (props) => { refresh() } + const roleMap = new Map([ + ["admin", 4], + ["senior", 3], + ["junior", 2], + ["common", 1] + ]) + const handleUserRoleChange = async (role: string, row: any) => { if (pendding) return setPendding(true) - const { code, msg } = await updateUserRole({ user_id: row.id, role, method: role === "senior" ? "upgrade" : "downgrade" }) + + const selectRole: any = roleMap.get(role) + const oldRole: any = roleMap.get(row.role) + + const { code, msg } = await updateUserRole({ + user_id: row.id, + role, + method: (selectRole - oldRole) > 0 ? "downgrade" : "upgrade" + }) setPendding(false) if (code !== 200) return message.error(msg) message.success("操作成功!") @@ -100,7 +115,15 @@ const TableList: React.FC = (props) => { style={{ width: 200 }} selectedKeys={[row.role]} > - + + + + 测试管理员 + 所有测试资源的管理 + + + + 测试人员 @@ -108,7 +131,7 @@ const TableList: React.FC = (props) => { - + 普通用户 diff --git a/src/pages/Sys/index.tsx b/src/pages/Sys/index.tsx index 9ae66eff298e36a739aa7f95f2f938c85d7bf91d..10df8a877c10e8d038595cbd85a706632d3a9caf 100644 --- a/src/pages/Sys/index.tsx +++ b/src/pages/Sys/index.tsx @@ -1,6 +1,6 @@ import React from "react" import { Layout, Menu } from "antd" -import { Link, useIntl, useLocation } from "umi" +import { Link, useIntl, useLocation, useAccess } from "umi" type IProps = { [k: string]: any @@ -8,8 +8,10 @@ type IProps = { const SysContainer: React.FC = (props) => { const { children, route } = props + const intl = useIntl() const { pathname } = useLocation() + const access = useAccess() const currentPath = React.useMemo(() => { for (const child of route.children) @@ -29,6 +31,12 @@ const SysContainer: React.FC = (props) => { { route.children .filter((i: any) => "path" in i && !i.hideInLeftMenu) + .filter((i: any) => { + if (i.access) { + return access[i.access]() + } + return true + }) .map( (item: any) => (