diff --git a/api/fetch.ts b/api/fetch.ts index 890efd3..ca3c7d1 100644 --- a/api/fetch.ts +++ b/api/fetch.ts @@ -156,7 +156,6 @@ async function httpfetch(options: OptionsProps): Promise { } } else { const { status } = response - if (status === 400) { if ( response.headers.get("Content-Type")?.includes("application/json") @@ -170,6 +169,42 @@ async function httpfetch(options: OptionsProps): Promise { Message.error({ content: errInfo || "" }) throw new Error(errInfo) } + } else if (status === 401) { + try { + const refreshResponse = await refreshKey({ + token: refresh_token, + }) + if (refreshResponse.code === 200) { + let access_token = refreshResponse.message?.access || "" + let refresh_token = refreshResponse.message?.refresh || "" + refreshToken({ + refresh_token, + access_token, + }) + const retry_request = createNewRequest(options, access_token) + const retry_response = await fetch(retry_request) + return options.isDownload + ? retry_response.blob() + : retry_response.json() + } else { + const { code } = refreshResponse + if (code === 406) { + try { + await deleteCookie() + } catch (error) { + rejected(error) + } finally { + // 清空身份信息并跳转至登录页面 + removeUserInfo() + window.location.href = "/login" + } + } else { + throw new Error("重新获取token失败!") + } + } + } catch (error) { + rejected(error) + } } else if (status === 403) { if ( response.headers.get("Content-Type")?.includes("application/json") diff --git a/app/entry/page.tsx b/app/entry/page.tsx new file mode 100644 index 0000000..567ba3c --- /dev/null +++ b/app/entry/page.tsx @@ -0,0 +1,35 @@ +"use client" + +import { useUserStore } from "@/app/store/user" +import { usePermissionStore } from "@/components/label/store/auth" +import { getUserPermission } from "@/components/login/api" +import { useCallback, useEffect } from "react" + +export default function EntryCheck() { + const user_info = useUserStore.getState().user_info + const { setUserPermissionInfo } = usePermissionStore() + + const asyncGetUserPermission = useCallback(async () => { + const { message: permissionRes } = await getUserPermission() + const { uid, name } = permissionRes + setUserPermissionInfo({ + user_id: uid, + user_name: name, + detailInfo: permissionRes, + }) + }, [setUserPermissionInfo]) + + useEffect(() => { + if (!user_info.account) { + window.location.href = "/login" + } else { + try { + asyncGetUserPermission() + window.location.href = `${process.env.NEXT_PUBLIC_BASE_PATH}/management` + } catch { + window.location.href = "/login" + } + } + }, [asyncGetUserPermission, user_info.account]) + return <> +} diff --git a/app/management/team/employee/page.tsx b/app/management/team/employee/page.tsx index f2ee93e..b462add 100644 --- a/app/management/team/employee/page.tsx +++ b/app/management/team/employee/page.tsx @@ -1,20 +1,10 @@ "use client" -import { getUserList, userEditById } from "@/components/label/api/user" +import { getUserList } from "@/components/label/api/user" import { User } from "@/components/label/api/user/typing" import useAuth from "@/components/label/hooks/useAuth" import { useAllUserStore } from "@/components/label/store/auth" -import { - ActionIcon, - Badge, - Button, - Group, - Paper, - Stack, - Text, - TextInput, -} from "@mantine/core" -import { modals } from "@mantine/modals" +import { Badge, Button, Group, Paper, Stack, TextInput } from "@mantine/core" import { notifications } from "@mantine/notifications" import { IconEdit, IconRefresh, IconSearch } from "@tabler/icons-react" import { DataTable, DataTableColumn } from "mantine-datatable" @@ -107,7 +97,7 @@ export default function TeamEmployeePage() { textAlign: "center", render: (record) => ( - {isShow("edit") ? ( + {/* {isShow("edit") ? ( - ) : null} + ) : null} */} {isShow("edit") ? ( - } color="blue" onClick={() => { setSelectedUser(record) setEditOpened(true) }}> - - + 编辑 + ) : null} ), @@ -234,6 +225,7 @@ export default function TeamEmployeePage() { fetching={loading} records={records} columns={columns} + idAccessor="uid" noRecordsText="暂无数据" totalRecords={totalItems} recordsPerPage={pageSize} diff --git a/app/management/team/organization/components/CreateModal.tsx b/app/management/team/organization/components/CreateModal.tsx index ff8fda9..cfe70e3 100644 --- a/app/management/team/organization/components/CreateModal.tsx +++ b/app/management/team/organization/components/CreateModal.tsx @@ -107,7 +107,12 @@ export default function CreateModal({ opened, onCloseAction }: ComponentProps) { radius="xs" withAsterisk searchable - data={finalUserOpts} + data={finalUserOpts.map((item) => { + return { + label: item.label.toString(), + value: item.value.toString(), + } + })} {...form.getInputProps("leader_uid")} />