react-toolkits 2.22.16 → 2.22.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +3 -3
  3. package/lib/{chunk-MFVQ4PJU.js → chunk-5AZUEAO6.js} +2 -2
  4. package/lib/{chunk-MFVQ4PJU.js.map → chunk-5AZUEAO6.js.map} +1 -1
  5. package/lib/chunk-ELWFPSZ3.js +3 -0
  6. package/lib/chunk-ELWFPSZ3.js.map +1 -0
  7. package/lib/chunk-FYDL6C7K.js +2 -0
  8. package/lib/{chunk-TLXOBLJT.js.map → chunk-FYDL6C7K.js.map} +1 -1
  9. package/lib/chunk-JY2FBS4J.js +2 -0
  10. package/lib/chunk-JY2FBS4J.js.map +1 -0
  11. package/lib/chunk-LFXV5XDO.js +2 -0
  12. package/lib/chunk-LFXV5XDO.js.map +1 -0
  13. package/lib/chunk-NTNSPCQ6.js +2 -0
  14. package/lib/chunk-NTNSPCQ6.js.map +1 -0
  15. package/lib/chunk-WTIZ34IN.js +2 -0
  16. package/lib/chunk-WTIZ34IN.js.map +1 -0
  17. package/lib/chunk-XJ4VOQSY.js +2 -0
  18. package/lib/chunk-XJ4VOQSY.js.map +1 -0
  19. package/lib/chunk-ZFJEJO64.js +2 -0
  20. package/lib/chunk-ZFJEJO64.js.map +1 -0
  21. package/lib/{createMenuItem-Z5SGFFW4.js → createMenuItem-YQKGNZJ3.js} +2 -2
  22. package/lib/{createMenuItem-Z5SGFFW4.js.map → createMenuItem-YQKGNZJ3.js.map} +1 -1
  23. package/lib/index.d.ts +39 -16
  24. package/lib/index.js +2 -2
  25. package/lib/index.js.map +1 -1
  26. package/lib/{menuItemList-BOXALHYO.js → menuItemList-MSUEQLKS.js} +2 -2
  27. package/lib/{menuItemList-BOXALHYO.js.map → menuItemList-MSUEQLKS.js.map} +1 -1
  28. package/lib/{roleDetail-NQS6CEVO.js → roleDetail-NTCJ4RHD.js} +2 -2
  29. package/lib/roleDetail-NTCJ4RHD.js.map +1 -0
  30. package/lib/{roleList-CZJYZNRP.js → roleList-KIAIR7EW.js} +2 -2
  31. package/lib/roleList-KIAIR7EW.js.map +1 -0
  32. package/lib/{updateMenuItem-YNY4BC67.js → updateMenuItem-VXB2TQLX.js} +2 -2
  33. package/lib/{updateMenuItem-YNY4BC67.js.map → updateMenuItem-VXB2TQLX.js.map} +1 -1
  34. package/lib/userDetail-GYVSA5RN.js +2 -0
  35. package/lib/userDetail-GYVSA5RN.js.map +1 -0
  36. package/lib/userList-4CZ6IEGA.js +2 -0
  37. package/lib/userList-4CZ6IEGA.js.map +1 -0
  38. package/locale/en_GB.js +1 -1
  39. package/locale/en_GB.js.map +1 -1
  40. package/locale/index.d.ts +1 -0
  41. package/locale/ja_JP.js +1 -1
  42. package/locale/ja_JP.js.map +1 -1
  43. package/locale/ko_KR.js +1 -1
  44. package/locale/ko_KR.js.map +1 -1
  45. package/locale/zh_CN.js +1 -1
  46. package/locale/zh_CN.js.map +1 -1
  47. package/package.json +1 -1
  48. package/lib/chunk-267EULS6.js +0 -2
  49. package/lib/chunk-267EULS6.js.map +0 -1
  50. package/lib/chunk-7KC4QGFG.js +0 -2
  51. package/lib/chunk-7KC4QGFG.js.map +0 -1
  52. package/lib/chunk-BKF7C4LV.js +0 -2
  53. package/lib/chunk-BKF7C4LV.js.map +0 -1
  54. package/lib/chunk-EKBAANKX.js +0 -3
  55. package/lib/chunk-EKBAANKX.js.map +0 -1
  56. package/lib/chunk-EQKZ3442.js +0 -2
  57. package/lib/chunk-EQKZ3442.js.map +0 -1
  58. package/lib/chunk-K227EWOS.js +0 -2
  59. package/lib/chunk-K227EWOS.js.map +0 -1
  60. package/lib/chunk-T2ZOW3WL.js +0 -2
  61. package/lib/chunk-T2ZOW3WL.js.map +0 -1
  62. package/lib/chunk-TLXOBLJT.js +0 -2
  63. package/lib/roleDetail-NQS6CEVO.js.map +0 -1
  64. package/lib/roleList-CZJYZNRP.js.map +0 -1
  65. package/lib/userDetail-53CJQES3.js +0 -2
  66. package/lib/userDetail-53CJQES3.js.map +0 -1
  67. package/lib/userList-NQKY4SV2.js +0 -2
  68. package/lib/userList-NQKY4SV2.js.map +0 -1
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/dynamicTags/DynamicTags.tsx","../src/components/expandableParagraph/ExpandableParagraph.tsx","../src/components/infiniteList/stores.ts","../src/components/infiniteList/InfiniteList.tsx","../src/components/navMenu/stores.ts","../src/components/navMenu/utils.tsx","../src/components/navMenu/NavMenu.tsx","../src/components/requireGame/RequireGame.tsx","../src/components/userWidget/UserWidget.tsx","../src/components/layout/GameSelect.tsx","../src/components/layout/LayoutHeader.tsx","../src/components/logo/Logo.tsx","../src/components/layout/Layout.tsx","../src/components/requirePermission/RequirePermission.tsx","../src/hooks/drawer/stores.ts","../src/hooks/drawer/drawer.tsx","../src/hooks/drawer/formDrawer.tsx","../src/modules/menu/index.tsx","../src/modules/permission/index.tsx","../src/pages/notFound/index.tsx","../src/pages/operationLogList/index.tsx","../src/pages/signIn/index.tsx","../src/pages/signIn/hooks.ts"],"names":["DynamicTags","props","initialTags","addable","removable","addCallback","removeCallback","t","useTranslation","token","theme","tags","setTags","useState","inputVisible","setInputVisible","inputValue","setInputValue","editInputIndex","setEditInputIndex","editInputValue","setEditInputValue","inputRef","useRef","editInputRef","useEffect","handleClose","removedTag","newTags","tag","showInput","handleInputChange","e","handleInputConfirm","handleEditInputChange","handleEditInputConfirm","tagInputStyle","tagPlusStyle","jsxs","Space","jsx","index","Input","Tag","PlusOutlined","DynamicTags_default","ExpandableParagraph","children","restProps","expanded","setExpanded","Typography","_","info","ExpandableParagraph_default","DEFAULT_PAYLOAD","createStore","create","devtools","subscribeWithSelector","set","get","id","url","queryKey","refetch","fetchNextPage","state","existingInstance","updatedInstance","newInstances","instance","payload","newPayload","isEqual","payloadChanged","currentPayload","error","store","useInfiniteListStore","DEFAULT_CACHE_TIME","DEFAULT_STALE_TIME","SPIN_STYLE","identifierCounter","generateUniqueIdentifier","InternalInfiniteList","ref","internalProps","data","page","lastPage","allPages","_pageParam","pageData","identifier","code","buttonsAlign","showReset","refreshInterval","request","tableExtra","renderForm","afterSuccess","afterError","dataAdapter","initialPageParam","footer","form","tableProps","_form","Form","isValid","setIsValid","shouldPoll","action","ky","useKy","accessible","isChecking","usePermission","finalIdentifier","useMemo","subscribedPayload","s","formInstance","method","body","params","headers","cacheTime","staleTime","requestHeaders","hasNextPage","isFetchingNextPage","isFetching","useInfiniteQuery","pageParam","requestParams","requestBody","kyOptions","response","err","errorObj","failureCount","retryError","attemptIndex","dataSource","isLoadingMore","isReachingEnd","isEmpty","onConfirm","values","loadMore","onReset","useImperativeHandle","Spin","Result","renderFooter","renderTableExtra","formRenderer","FilterFormWrapper_default","cloneElement","Fragment","Table","Button","InfiniteList","forwardRef","InfiniteList_default","useNavStore","persist","keys","current","key","createJSONStorage","MemoizedLink","memo","to","Link","transformItems","items","result","i","rest","route","label","labelNode","flatItems","keypath","item","NavMenu","loading","location","useLocation","previousItemsRef","previousLocationRef","flattenItems","internalItems","openKeys","selectedKeys","setOpenKeys","setSelectedKeys","onOpenChange","useCallback","expandedKey","match","fullPath","k","Menu","NavMenu_default","Antd","RequireGame","permissionVersion","gameId","isGlobal","useToolkitsStore","isLoading","useGames","Empty","RequireGame_default","UserWidget","navigate","useNavigate","clearToken","getUser","signInPath","user","handleSignOut","handleKeyDown","handleDropdownKeyDown","LogoutOutlined","Dropdown","UserOutlined","UserWidget_default","Text","GameSelect","filter","options","gameApiV2","setGameId","queryClient","useQueryClient","filteredData","_options","onChange","value","clearCache","query","firstId","Select","GameSelect_default","Logo","logo_default","Logo_default","LayoutHeader","title","subtitle","mainPagePath","collapsed","LayoutHeader_default","Header","Sider","Content","Layout","collapsible","isMenuLoading","headerExtra","navWidth","gameSelectOptions","colorBgContainer","colorBorder","globalNavWidth","globalCollapsible","setContext","internalCollapsed","setInternalCollapsed","onCollapse","internalCollapsible","Divider","MenuUnfoldOutlined","MenuFoldOutlined","extra","Suspense","Layout_default","RequirePermission","config","RequirePermission_default","useDrawerStore","createVisibilityStore","useDrawer","content","afterOpen","afterClose","confirmText","cancelText","confirmButtonProps","cancelButtonProps","drawerProps","_id","generateId","show","hide","isOpen","cleanup","open","confirmLoading","setConfirmLoading","isRenderFunction","_show","_hide","onClose","handleConfirm","drawerFooter","internalDrawer","Drawer","useFormDrawer","formProps","onSuccess","internalExtraValues","setInternalExtraValues","internalForm","drawer","operation","showForm","initialValues","extraValues","MenuItemList","lazy","CreateMenuItem","UpdateMenuItem","menu_default","Routes","Route","UserList","UserDetail","RoleList","RoleDetail","permission_default","Navigate","NotFound","redirectUrl","notFound_default","Option","OperationLogList","columns","dayjs","Card","QueryList_default","operationLogList_default","withContext","useTicketLogin","setToken","ticket","unregisteredFromUrl","queryParams","isUnregistered","setIsUnregistered","useQuery","dismissUnregistered","SignIn","hashMode","path","background_default","Alert","SSO_URL","signIn_default"],"mappings":"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","file":"index.js","sourcesContent":["import { PlusOutlined } from '@ant-design/icons'\nimport type { InputRef } from 'antd'\nimport { Input, Space, Tag, theme } from 'antd'\nimport type { ChangeEvent, CSSProperties, FC } from 'react'\nimport { useEffect, useRef, useState } from 'react'\n\nimport { useTranslation } from '@/locale'\n\nexport interface DynamicTagsProps {\n initialTags?: string[]\n addable?: boolean\n removable?: boolean\n // 返回 Promise。如果返回 Promise.resolve(true),则添加; 如果返回 Promise.resolve(false) 或 Promise.reject,则不添加\n addCallback?: (addedTag: string) => Promise<boolean>\n // 返回 Promise。如果返回 Promise.resolve(true),则删除; 如果返回 Promise.resolve(false) 或 Promise.reject,则不删除\n removeCallback?: (removedTag: string) => Promise<boolean>\n}\n\nconst DynamicTags: FC<DynamicTagsProps> = props => {\n const { initialTags, addable, removable, addCallback, removeCallback } = props\n const { t } = useTranslation()\n const { token } = theme.useToken()\n const [tags, setTags] = useState<string[]>([])\n const [inputVisible, setInputVisible] = useState(false)\n const [inputValue, setInputValue] = useState('')\n const [editInputIndex, setEditInputIndex] = useState(-1)\n const [editInputValue, setEditInputValue] = useState<string>('')\n const inputRef = useRef<InputRef>(null)\n const editInputRef = useRef<InputRef>(null)\n\n useEffect(() => {\n setTags(initialTags ?? [])\n }, [initialTags])\n\n useEffect(() => {\n if (inputVisible) {\n inputRef.current?.focus()\n }\n }, [inputVisible])\n\n useEffect(() => {\n editInputRef.current?.focus()\n }, [inputValue])\n\n const handleClose = async (removedTag: string) => {\n const success = await removeCallback?.(removedTag)\n\n if (success) {\n const newTags = tags.filter(tag => tag !== removedTag)\n setTags(newTags)\n }\n }\n\n const showInput = () => {\n setInputVisible(true)\n }\n\n const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n setInputValue(e.target.value)\n }\n\n const handleInputConfirm = async () => {\n if (inputValue && tags.indexOf(inputValue) === -1) {\n const success = await addCallback?.(inputValue)\n\n if (success) {\n setTags([...tags, inputValue])\n }\n }\n\n setInputVisible(false)\n setInputValue('')\n }\n\n const handleEditInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n setEditInputValue(e.target.value)\n }\n\n const handleEditInputConfirm = () => {\n const newTags = [...tags]\n newTags[editInputIndex] = editInputValue\n setTags(newTags)\n setEditInputIndex(-1)\n setInputValue('')\n }\n\n const tagInputStyle: CSSProperties = {\n width: 78,\n verticalAlign: 'top',\n }\n\n const tagPlusStyle: CSSProperties = {\n background: token.colorBgContainer,\n borderStyle: 'dashed',\n }\n\n return (\n <Space wrap size={[0, 8]}>\n <Space wrap size={[0, 8]}>\n {tags.map((tag, index) => {\n if (editInputIndex === index) {\n return (\n <Input\n ref={editInputRef}\n key={tag}\n size=\"small\"\n style={tagInputStyle}\n value={editInputValue}\n onChange={handleEditInputChange}\n onBlur={handleEditInputConfirm}\n onPressEnter={handleEditInputConfirm}\n />\n )\n }\n\n return (\n <Tag\n key={tag}\n closable={removable}\n style={{ userSelect: 'none' }}\n onClose={async e => {\n e.preventDefault()\n await handleClose(tag)\n }}\n >\n <span\n onDoubleClick={e => {\n if (index !== 0) {\n setEditInputIndex(index)\n setEditInputValue(tag)\n e.preventDefault()\n }\n }}\n >\n {tag}\n </span>\n </Tag>\n )\n })}\n </Space>\n {addable &&\n (inputVisible ? (\n <Input\n ref={inputRef}\n type=\"text\"\n size=\"small\"\n style={tagInputStyle}\n value={inputValue}\n onChange={handleInputChange}\n onBlur={handleInputConfirm}\n onPressEnter={handleInputConfirm}\n />\n ) : (\n <Tag style={tagPlusStyle} onClick={showInput}>\n <PlusOutlined />\n &nbsp;{t('global.add')}\n </Tag>\n ))}\n </Space>\n )\n}\n\nexport default DynamicTags\n","import { Typography } from 'antd'\nimport type { ParagraphProps } from 'antd/es/typography/Paragraph'\nimport type { FC } from 'react'\nimport { useState } from 'react'\n\nexport type ExpandableParagraphProps = Omit<ParagraphProps, 'ellipsis' | 'className'>\n\nconst ExpandableParagraph: FC<ExpandableParagraphProps> = props => {\n const { children, ...restProps } = props\n const [expanded, setExpanded] = useState(false)\n\n return (\n <Typography.Paragraph\n {...restProps}\n className=\"mb-0\"\n ellipsis={{\n rows: 2,\n expandable: 'collapsible',\n expanded,\n onExpand: (_, info) => {\n setExpanded(info.expanded)\n },\n }}\n >\n {children}\n </Typography.Paragraph>\n )\n}\n\nexport default ExpandableParagraph\n","import { isEqual } from 'lodash-es'\nimport { create } from 'zustand'\nimport { devtools, subscribeWithSelector } from 'zustand/middleware'\n\nimport type { InfiniteListPayload } from './InfiniteList'\n\n// Infinite Query 更新函数类型\ntype InfiniteQueryRefetchFunction = () => void | Promise<unknown>\ntype InfiniteQueryFetchNextPageFunction = () => void | Promise<unknown>\n\n// InfiniteList 实例信息\ninterface InfiniteListInstance {\n id: string\n url: string\n queryKey: readonly unknown[]\n payload: InfiniteListPayload\n refetch: InfiniteQueryRefetchFunction\n fetchNextPage: InfiniteQueryFetchNextPageFunction\n}\n\n// 简化的状态接口\ninterface InfiniteListState {\n // 实例管理\n instances: Map<string, InfiniteListInstance>\n\n // 核心方法\n registerInstance(\n id: string,\n url: string,\n queryKey: readonly unknown[],\n refetch: InfiniteQueryRefetchFunction,\n fetchNextPage: InfiniteQueryFetchNextPageFunction,\n ): void\n unregisterInstance(id: string): void\n updatePayload(id: string, payload: InfiniteListPayload): void\n getPayload(id: string): InfiniteListPayload\n refetch(id: string, payload?: InfiniteListPayload): Promise<void>\n fetchNextPage(id: string): Promise<void>\n\n // 工具方法\n getInstance(id: string): InfiniteListInstance | undefined\n getAllInstances(): InfiniteListInstance[]\n}\n\n// 稳定的默认 payload 引用,避免未注册时每次返回新对象导致 getSnapshot 无限循环\nconst DEFAULT_PAYLOAD: InfiniteListPayload = Object.freeze({\n page: 0,\n // 这里使用冻结的空对象,确保引用稳定\n filters: Object.freeze({}) as Record<string, never>,\n})\n\n// 创建简化的 store\nconst createStore = () =>\n create<InfiniteListState>()(\n devtools(\n subscribeWithSelector((set, get) => ({\n instances: new Map(),\n\n registerInstance(id, url, queryKey, refetch, fetchNextPage) {\n set(state => {\n const existingInstance = state.instances.get(id)\n\n // 如果实例已存在,只更新函数\n if (existingInstance) {\n // 仅当引用发生变化时才更新,避免无意义 setState\n if (existingInstance.refetch !== refetch || existingInstance.fetchNextPage !== fetchNextPage) {\n const updatedInstance = {\n ...existingInstance,\n refetch,\n fetchNextPage,\n }\n const newInstances = new Map(state.instances)\n newInstances.set(id, updatedInstance)\n return { instances: newInstances }\n }\n return state\n }\n\n // 创建新实例\n const instance: InfiniteListInstance = {\n id,\n url,\n queryKey,\n payload: DEFAULT_PAYLOAD,\n refetch,\n fetchNextPage,\n }\n\n const newInstances = new Map(state.instances)\n newInstances.set(id, instance)\n\n return { instances: newInstances }\n })\n },\n\n unregisterInstance(id) {\n set(state => {\n const newInstances = new Map(state.instances)\n const existed = newInstances.delete(id)\n\n if (existed) {\n return { instances: newInstances }\n }\n return state\n })\n },\n\n updatePayload(id, payload) {\n set(state => {\n const instance = state.instances.get(id)\n if (!instance) return state\n\n const newPayload = { ...instance.payload, ...payload }\n\n // 只有当 payload 真正改变时才更新\n if (!isEqual(instance.payload, newPayload)) {\n const updatedInstance = {\n ...instance,\n payload: newPayload,\n }\n\n const newInstances = new Map(state.instances)\n newInstances.set(id, updatedInstance)\n\n return { instances: newInstances }\n }\n\n return state\n })\n },\n\n getPayload(id) {\n const instance = get().instances.get(id)\n return instance?.payload ?? DEFAULT_PAYLOAD\n },\n\n async refetch(id, payload) {\n const instance = get().instances.get(id)\n if (!instance) {\n console.warn(`InfiniteList instance with id \"${id}\" not found`)\n return\n }\n\n let payloadChanged = false\n\n // 更新 payload 如果提供且确实有变化\n if (payload) {\n const currentPayload = instance.payload\n const newPayload = { ...currentPayload, ...payload }\n\n // 只有当 payload 真正改变时才更新\n if (!isEqual(currentPayload, newPayload)) {\n get().updatePayload(id, payload)\n payloadChanged = true\n }\n }\n\n // 若 payload 发生变化,queryKey 会变化,React Query 会自动触发请求,此处不再手动 refetch,避免重复请求\n if (payloadChanged) {\n return\n }\n\n // 否则手动触发一次请求\n try {\n await instance.refetch()\n } catch (error) {\n console.error(`Failed to refetch InfiniteList instance \"${id}\":`, error)\n throw error\n }\n },\n\n async fetchNextPage(id) {\n const instance = get().instances.get(id)\n if (!instance) {\n console.warn(`InfiniteList instance with id \"${id}\" not found`)\n return\n }\n\n // 调用 fetchNextPage 函数\n try {\n await instance.fetchNextPage()\n } catch (error) {\n console.error(`Failed to fetch next page for InfiniteList instance \"${id}\":`, error)\n throw error\n }\n },\n\n getInstance(id) {\n return get().instances.get(id)\n },\n\n getAllInstances() {\n return Array.from(get().instances.values())\n },\n })),\n {\n name: 'infinite-list-store',\n },\n ),\n )\n\n// 创建 store 实例\nconst store = createStore()\n\nexport const useInfiniteListStore = store\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useInfiniteQuery } from '@tanstack/react-query'\nimport type { FormInstance } from 'antd'\nimport { Button, Form, Result, Spin, Table } from 'antd'\nimport type { AnyObject } from 'antd/es/_util/type'\nimport type { TableProps } from 'antd/es/table'\nimport type { Options as KyOptions } from 'ky'\nimport type { ReactElement, ReactNode, Ref } from 'react'\nimport { cloneElement, forwardRef, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react'\n\nimport type { FilterFormWrapperProps } from '@/components/filterFormWrapper'\nimport { FilterFormWrapper } from '@/components/filterFormWrapper'\nimport { useKy } from '@/libs'\nimport { useTranslation } from '@/locale'\nimport { usePermission } from '@/services'\n\nimport { useInfiniteListStore } from './stores'\n\nexport interface InfiniteListPayload<Values = any> {\n page?: number\n filters?: Values\n}\n\nexport interface InfiniteListRequestConfig<Values = any> {\n url: string\n method?: 'GET' | 'POST'\n body?:\n | FormData\n | Record<string | number, any>\n | ((payload: InfiniteListPayload<Values>, pageParam: any) => FormData | Record<string | number, any>)\n params?:\n | Record<string | number, any>\n | ((payload: InfiniteListPayload<Values>, pageParam: any) => Record<string | number, any>)\n headers?: Record<string, string> | ((form: FormInstance<Values>) => Record<string, string>)\n // 缓存配置\n cacheTime?: number // 缓存时间(毫秒)\n staleTime?: number // 数据新鲜时间(毫秒)\n}\n\nexport enum InfiniteListAction {\n Confirm,\n Reset,\n LoadMore,\n Init,\n}\n\nexport interface InfiniteListDataAdapter<Item = any, Values = any, Data = any> {\n items?: (data: Data[] | undefined, form: FormInstance<Values>) => Item[] | undefined\n hasMore?: (lastPage: Data | undefined, allPages: Data[]) => boolean\n nextPageParam?: (lastPage: Data | undefined, allPages: Data[], pageParam: any) => any\n}\n\nexport interface InfiniteListRef<Item = any, Values = any, Data = any> {\n data: Data[] | undefined\n dataSource: Item[] | undefined\n form: FormInstance<Values>\n refetch: () => void\n fetchNextPage: () => void\n hasNextPage: boolean\n isFetchingNextPage: boolean\n}\n\nexport interface InfiniteListProps<Item, Values, Data>\n extends Omit<TableProps<Item>, 'pagination' | 'dataSource' | 'loading' | 'footer'>,\n Pick<FilterFormWrapperProps, 'buttonsAlign' | 'showReset'> {\n identifier?: string // 可选标识符,未提供时自动生成\n code?: string\n form?: FormInstance<Values>\n refreshInterval?: number\n request: InfiniteListRequestConfig<Values> // 必需的请求配置\n tableExtra?: ReactNode | ((form: FormInstance<Values>, data?: Data[]) => ReactNode)\n renderForm?: (form: FormInstance<Values>) => ReactElement\n afterSuccess?: (action: InfiniteListAction, form: FormInstance<Values>, data?: Data[]) => void\n afterError?: (error: Error, action: InfiniteListAction, form: FormInstance<Values>) => void\n dataAdapter?: InfiniteListDataAdapter<Item, Values, Data>\n initialPageParam?: any\n footer?: (data: Data[] | undefined) => ReactNode\n}\n\n// 常量定义(对齐 QueryList 行为)\nconst DEFAULT_CACHE_TIME = 5 * 60 * 1000\nconst DEFAULT_STALE_TIME = 30 * 1000\n\nconst SPIN_STYLE: React.CSSProperties = {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: 300,\n}\n\n// 生成唯一 identifier 的计数器\nlet identifierCounter = 0\nconst generateUniqueIdentifier = (): string => `infiniteList_${Date.now()}_${++identifierCounter}`\n\nconst InternalInfiniteList = <Item extends AnyObject, Values extends object | undefined = undefined, Data = any>(\n props: InfiniteListProps<Item, Values, Data>,\n ref: Ref<InfiniteListRef<Item, Values, Data>>,\n) => {\n const defaultDataAdapter: InfiniteListDataAdapter<Item, Values, Data> = {\n items: (data: Data[] | undefined) => {\n if (!data) return []\n return data.flatMap((page: any) => page?.list || page || [])\n },\n hasMore: (lastPage: Data | undefined): boolean => {\n if (!lastPage) return false\n const page = lastPage as any\n return page?.hasMore || page?.has_more || false\n },\n nextPageParam: (lastPage: Data | undefined, allPages: Data[], _pageParam: any): any => {\n const hasMore = (page: Data | undefined): boolean => {\n if (!page) return false\n const pageData = page as any\n return pageData?.hasMore || pageData?.has_more || false\n }\n return hasMore(lastPage) ? allPages.length : undefined\n },\n }\n\n const internalProps: InfiniteListProps<Item, Values, Data> & {\n refreshInterval: number\n initialPageParam: any\n } = {\n refreshInterval: 0,\n initialPageParam: 0,\n ...props,\n dataAdapter: {\n ...defaultDataAdapter,\n ...props.dataAdapter,\n },\n }\n\n const {\n identifier,\n code,\n buttonsAlign,\n showReset,\n refreshInterval,\n request,\n tableExtra,\n renderForm,\n afterSuccess,\n afterError,\n dataAdapter,\n initialPageParam,\n footer,\n form,\n ...tableProps\n } = internalProps\n const { t } = useTranslation()\n const [_form] = Form.useForm<Values>(form)\n const [isValid, setIsValid] = useState(false)\n const shouldPoll = useRef(false)\n const action = useRef(InfiniteListAction.Init)\n const ky = useKy()\n\n const { data: accessible, isLoading: isChecking } = usePermission(code)\n\n // 生成或使用提供的 identifier\n const finalIdentifier = useMemo(() => identifier || generateUniqueIdentifier(), [identifier])\n\n // 订阅当前 identifier 的 payload,驱动 queryKey 与渲染\n const subscribedPayload = useInfiniteListStore(s => s.getPayload(finalIdentifier))\n\n // 获取当前表单值\n const formInstance = useMemo(() => _form, [_form])\n\n // 构建请求参数\n const {\n url,\n method = 'GET',\n body,\n params,\n headers,\n cacheTime = DEFAULT_CACHE_TIME,\n staleTime = DEFAULT_STALE_TIME,\n } = request\n const requestHeaders = useMemo(\n () => (typeof headers === 'function' ? headers(formInstance) : headers),\n [headers, formInstance],\n )\n // 请求参数和 body 将在 queryFn 中动态构建,因为它们依赖于 pageParam\n\n // 构建查询键\n const queryKey = useMemo(() => {\n return ['infiniteList', url, finalIdentifier, accessible, isValid, subscribedPayload, requestHeaders]\n }, [url, finalIdentifier, accessible, isValid, subscribedPayload, requestHeaders])\n\n const { data, fetchNextPage, hasNextPage, isFetchingNextPage, refetch, isFetching } = useInfiniteQuery({\n queryKey,\n queryFn: async ({ pageParam = initialPageParam }) => {\n try {\n const payload = subscribedPayload\n\n // 动态构建请求参数,包含 pageParam\n const requestParams = typeof params === 'function' ? params(payload, pageParam) : params\n const requestBody = typeof body === 'function' ? body(payload, pageParam) : body\n\n const kyOptions: KyOptions = {\n method: method as any,\n searchParams: requestParams,\n headers: requestHeaders,\n }\n\n if (requestBody) {\n if (requestBody instanceof FormData) {\n kyOptions.body = requestBody\n } else {\n kyOptions.json = requestBody\n }\n }\n\n const response = await ky.request<Data>({ url, ...kyOptions })\n shouldPoll.current = true\n afterSuccess?.(action.current, formInstance, [response])\n return response\n } catch (err) {\n const errorObj = err instanceof Error ? err : new Error(String(err))\n afterError?.(errorObj, action.current, formInstance)\n throw errorObj\n }\n },\n initialPageParam,\n getNextPageParam: (lastPage: Data, allPages: Data[]) => {\n return dataAdapter?.nextPageParam?.(lastPage, allPages, initialPageParam)\n },\n enabled: accessible && isValid,\n retry: (failureCount, retryError) => {\n if (failureCount >= 3) return false\n if (retryError?.message?.includes('401')) return false\n return true\n },\n retryDelay: attemptIndex => Math.min(1000 * 2 ** attemptIndex, 30000),\n refetchOnWindowFocus: false,\n refetchInterval: shouldPoll.current ? refreshInterval : 0,\n gcTime: cacheTime,\n staleTime,\n })\n\n // 在组件挂载时注册实例\n useEffect(() => {\n useInfiniteListStore.getState().registerInstance(finalIdentifier, url, queryKey, refetch, fetchNextPage)\n return () => {\n useInfiniteListStore.getState().unregisterInstance(finalIdentifier)\n }\n }, [finalIdentifier, url, queryKey, refetch, fetchNextPage])\n\n const dataSource = dataAdapter?.items?.(data?.pages, formInstance)\n const isLoadingMore = isFetchingNextPage\n const isReachingEnd = !hasNextPage\n const isEmpty = !dataSource || dataSource.length === 0\n\n const onConfirm = async () => {\n action.current = InfiniteListAction.Confirm\n const values = await _form.getFieldsValue()\n\n try {\n await _form.validateFields()\n setIsValid(true)\n\n // 更新 store 中的 payload\n useInfiniteListStore.getState().refetch(finalIdentifier, { page: 0, filters: values })\n } catch {\n setIsValid(false)\n }\n }\n\n const loadMore = () => {\n action.current = InfiniteListAction.LoadMore\n fetchNextPage()\n }\n\n const onReset = async () => {\n action.current = InfiniteListAction.Reset\n try {\n _form.resetFields()\n const values = await _form.getFieldsValue()\n\n // 重置 store 中的 payload\n useInfiniteListStore.getState().updatePayload(finalIdentifier, { page: 0, filters: values })\n\n await _form.validateFields({ validateOnly: true })\n useInfiniteListStore.getState().refetch(finalIdentifier)\n } catch {\n // Handle validation error\n }\n }\n\n useEffect(() => {\n setTimeout(() => {\n if (accessible) {\n _form\n .validateFields({ validateOnly: true })\n .then(values => {\n setIsValid(true)\n\n // 初始化 store 中的 payload\n useInfiniteListStore.getState().updatePayload(finalIdentifier, { page: 0, filters: values })\n })\n .catch(() => {\n setIsValid(false)\n })\n }\n }, 300)\n }, [accessible, _form, finalIdentifier])\n\n useImperativeHandle(ref, () => ({\n data: data?.pages,\n dataSource,\n form: _form,\n refetch: () => useInfiniteListStore.getState().refetch(finalIdentifier),\n fetchNextPage: () => useInfiniteListStore.getState().fetchNextPage(finalIdentifier),\n hasNextPage: !!hasNextPage,\n isFetchingNextPage,\n }))\n\n if (isChecking) {\n return <Spin style={SPIN_STYLE} />\n }\n\n if (!accessible) {\n return <Result status={403} subTitle={t('global.noEntitlement')} />\n }\n\n const renderFooter = footer && (() => footer(data?.pages))\n\n const renderTableExtra = () => {\n if (typeof tableExtra === 'function') {\n return tableExtra(formInstance, data?.pages)\n }\n return tableExtra\n }\n\n const formRenderer =\n typeof renderForm === 'function' ? (\n <FilterFormWrapper\n showReset={showReset}\n buttonsAlign={buttonsAlign}\n isConfirming={isFetching}\n onReset={onReset}\n onConfirm={onConfirm}\n >\n {cloneElement(renderForm(_form), {\n onKeyUp: (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n onConfirm()\n }\n },\n })}\n </FilterFormWrapper>\n ) : (\n // 屏蔽 Form 组件的警告(Instance created by `useForm` is not connected to any Form element. Forget to pass `form` prop?)\n <Form form={_form} />\n )\n\n return (\n <>\n {formRenderer}\n {renderTableExtra()}\n <div style={{ minHeight: '400px' }}>\n <Table {...tableProps} dataSource={dataSource} loading={isFetching} pagination={false} footer={renderFooter} />\n </div>\n {!isEmpty && (\n <Button\n block\n loading={isLoadingMore}\n type=\"link\"\n htmlType=\"button\"\n disabled={isLoadingMore || isReachingEnd}\n onClick={loadMore}\n >\n {isLoadingMore\n ? t('InfiniteList.loadingText')\n : isReachingEnd\n ? t('InfiniteList.reachEndText')\n : t('InfiniteList.loadMoreText')}\n </Button>\n )}\n </>\n )\n}\n\nconst InfiniteList = forwardRef(InternalInfiniteList) as <\n Item extends AnyObject = AnyObject,\n Values extends object | undefined = undefined,\n Data = any,\n>(\n props: InfiniteListProps<Item, Values, Data> & { ref?: Ref<InfiniteListRef<Item, Values, Data>> },\n) => ReactElement\n\nexport default InfiniteList\n","import { create } from 'zustand'\nimport { createJSONStorage, persist } from 'zustand/middleware'\n\nexport interface NavState {\n openKeys: string[]\n selectedKeys: string[]\n setOpenKeys: (keys: string[]) => void\n setSelectedKeys: (keys: string[]) => void\n}\n\nexport const useNavStore = create<NavState>()(\n persist(\n (set, get) => ({\n openKeys: [],\n setOpenKeys: keys => {\n const current = get()\n // 避免不必要的状态更新 - 使用更高效的比较方式\n if (current.openKeys.length !== keys.length || !current.openKeys.every((key, index) => key === keys[index])) {\n set({ openKeys: keys })\n }\n },\n selectedKeys: [],\n setSelectedKeys: keys => {\n const current = get()\n // 避免不必要的状态更新 - 使用更高效的比较方式\n if (\n current.selectedKeys.length !== keys.length ||\n !current.selectedKeys.every((key, index) => key === keys[index])\n ) {\n set({ selectedKeys: keys })\n }\n },\n }),\n {\n name: 'nav',\n storage: createJSONStorage(() => localStorage),\n partialize: state => ({\n openKeys: state.openKeys,\n selectedKeys: state.selectedKeys,\n }),\n // 减少持久化频率,提升性能\n skipHydration: false,\n version: 1,\n },\n ),\n)\n","import type { ItemType, MenuDividerType } from 'antd/es/menu/interface'\nimport { memo } from 'react'\nimport { Link } from 'react-router-dom'\nimport type { Merge } from 'ts-essentials'\n\nimport type { MenuItemGroupType2, MenuItemType2, NavMenuItem, SubMenuType2 } from './types'\n\n// 优化 Link 组件,避免重复创建\nconst MemoizedLink = memo(({ to, children }: { to: string; children: React.ReactNode }) => (\n <Link to={to}>{children}</Link>\n))\n\nMemoizedLink.displayName = 'MemoizedLink'\n\n// 将自定义的菜单配置转换为 antd 的菜单配置,添加 react-router-dom Link 等。\nexport function transformItems(items?: NavMenuItem[]) {\n const result: ItemType[] = []\n\n if (items) {\n for (let i = 0; i < items.length; i++) {\n if (items[i] === null || (items[i] as MenuDividerType).type === 'divider') {\n result[i] = items[i] as null | MenuDividerType\n } else if ((items[i] as SubMenuType2 | MenuItemGroupType2).children) {\n const { children, ...rest } = items[i] as SubMenuType2 | MenuItemGroupType2\n result[i] = {\n ...rest,\n children: transformItems(children),\n }\n } else {\n const { route, label, ...rest } = items[i] as MenuItemType2\n const labelNode = route ? <MemoizedLink to={route}>{label}</MemoizedLink> : label\n\n result[i] = {\n ...rest,\n label: labelNode,\n }\n }\n }\n }\n\n return result\n}\n\n// 拍平导航配置,并且注入 keypath 字段\nexport function flatItems(\n items: NavMenuItem[],\n result: Merge<MenuItemType2, { keypath?: string[] }>[] = [],\n keypath: string[] = [],\n) {\n for (const item of items) {\n const children = (item as SubMenuType2 | MenuItemGroupType2)?.children as NavMenuItem[]\n\n if (Array.isArray(children)) {\n const keys =\n (item as MenuItemGroupType2).type !== 'group' && item!.key ? [...keypath, item!.key as string] : keypath\n flatItems(children, result, keys)\n } else if (item) {\n result.push(Object.assign(item as MenuItemType2, { keypath }))\n }\n }\n\n return result\n}\n","import type { MenuProps } from 'antd'\nimport { Menu, Spin } from 'antd'\nimport { memo, useCallback, useEffect, useMemo, useRef } from 'react'\nimport { useLocation } from 'react-router-dom'\n\nimport { useNavStore } from './stores'\nimport type { NavMenuItem } from './types'\nimport { flatItems, transformItems } from './utils'\n\nexport interface NavMenuProps {\n items?: NavMenuItem[]\n theme?: MenuProps['theme']\n loading?: boolean\n}\n\nconst NavMenu = memo(function NavMenu(props: NavMenuProps) {\n const { items = [], theme, loading } = props\n const location = useLocation()\n const previousItemsRef = useRef<NavMenuItem[]>()\n const previousLocationRef = useRef<string>()\n\n const flattenItems = useMemo(() => {\n if (previousItemsRef.current === items) {\n return previousItemsRef.current ? flatItems(previousItemsRef.current) : []\n }\n previousItemsRef.current = items\n return flatItems(items)\n }, [items])\n\n const internalItems = useMemo(() => {\n if (previousItemsRef.current === items) {\n return previousItemsRef.current ? transformItems(previousItemsRef.current) : []\n }\n return transformItems(items)\n }, [items])\n\n const { openKeys, selectedKeys, setOpenKeys, setSelectedKeys } = useNavStore()\n\n const onOpenChange = useCallback(\n (keys: string[]) => {\n // 找到新打开的菜单项\n const expandedKey = keys.find(key => !openKeys.includes(key))\n\n if (expandedKey) {\n // 展开操作:找到完整的层级路径\n const match = flattenItems.find(item => item.key === expandedKey)\n const fullPath = match?.keypath ? [...match.keypath, expandedKey] : [expandedKey]\n setOpenKeys(fullPath)\n } else {\n // 折叠操作:直接使用新的 keys\n setOpenKeys(keys)\n }\n },\n [flattenItems, openKeys, setOpenKeys],\n )\n\n useEffect(() => {\n // 避免不必要的重新计算\n if (previousLocationRef.current === location.pathname) {\n return\n }\n previousLocationRef.current = location.pathname\n\n const match = flattenItems.find(item => location.pathname === item.route)\n\n if (match) {\n const key = match.key as string\n const keypath = match.keypath as string[]\n\n // 批量更新状态以减少重新渲染\n if (selectedKeys[0] !== key || !openKeys.every((k, i) => k === keypath[i])) {\n setSelectedKeys([key])\n setOpenKeys(keypath)\n }\n }\n }, [flattenItems, location.pathname, selectedKeys, openKeys, setSelectedKeys, setOpenKeys])\n\n if (loading) {\n return (\n <div className=\"flex justify-center items-center\" style={{ height: 'calc(100vh - 64px)' }}>\n <Spin />\n </div>\n )\n }\n\n return (\n <Menu\n theme={theme}\n style={{ borderRight: 'none' }}\n items={internalItems}\n mode=\"inline\"\n openKeys={openKeys}\n selectedKeys={selectedKeys}\n onOpenChange={onOpenChange}\n />\n )\n})\n\nif (process.env.NODE_ENV === 'development') {\n NavMenu.displayName = 'NavMenu'\n}\n\nexport default NavMenu\n","import * as Antd from 'antd'\nimport { Empty } from 'antd'\nimport type { FC, PropsWithChildren } from 'react'\nimport { Fragment } from 'react'\n\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { PermissionVersion } from '@/constants'\nimport { useTranslation } from '@/locale'\nimport { useGames } from '@/services'\n\nconst { Spin } = Antd\n\nconst RequireGame: FC<PropsWithChildren> = ({ children }) => {\n const { permissionVersion, gameId, isGlobal } = useToolkitsStore(s => s)\n const { isLoading } = useGames()\n const { t } = useTranslation()\n\n if (isLoading) {\n return (\n <div\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: 400,\n }}\n >\n <Spin />\n </div>\n )\n }\n\n if (permissionVersion === PermissionVersion.V1 || isGlobal) {\n return children\n }\n\n if (!gameId) {\n return <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} description={t('RequireGame.description')} />\n }\n\n return <Fragment key={gameId}>{children}</Fragment>\n}\n\nexport default RequireGame\n","/* eslint-disable jsx-a11y/anchor-is-valid */\nimport { LogoutOutlined, UserOutlined } from '@ant-design/icons'\nimport type { MenuProps } from 'antd'\nimport { Dropdown, Space } from 'antd'\nimport type { FC, KeyboardEvent } from 'react'\nimport { useNavigate } from 'react-router-dom'\n\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { useTranslation } from '@/locale'\n\nconst UserWidget: FC = () => {\n const { t } = useTranslation()\n const navigate = useNavigate()\n const { clearToken, getUser, signInPath } = useToolkitsStore(s => s)\n const user = getUser()\n\n const handleSignOut = () => {\n clearToken()\n navigate(signInPath)\n }\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleSignOut()\n }\n }\n\n const handleDropdownKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n }\n }\n\n const items: MenuProps['items'] = [\n {\n key: '1',\n icon: <LogoutOutlined />,\n label: (\n <a role=\"button\" tabIndex={0} onClick={handleSignOut} onKeyDown={handleKeyDown}>\n {t('UserWidget.signOutText')}\n </a>\n ),\n },\n ]\n\n return (\n <div>\n <Dropdown\n menu={{\n selectable: true,\n items,\n }}\n placement=\"bottomRight\"\n >\n <a\n role=\"button\"\n tabIndex={0}\n onClick={e => {\n e.preventDefault()\n }}\n onKeyDown={handleDropdownKeyDown}\n >\n <Space align=\"center\">\n <span>{user?.authorityId}</span>\n <UserOutlined style={{ fontSize: '16px' }} />\n </Space>\n </a>\n </Dropdown>\n </div>\n )\n}\n\nexport default UserWidget\n","import { useQueryClient } from '@tanstack/react-query'\nimport type { SelectProps } from 'antd'\nimport { Select, Space, Typography } from 'antd'\nimport type { FC } from 'react'\nimport { useEffect } from 'react'\n\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { useTranslation } from '@/locale'\nimport { useGames } from '@/services'\n\nimport type { Game } from './types'\n\nconst { Text } = Typography\n\nexport interface GameSelectProps {\n filter?: (game: Game) => boolean\n options?: (data?: Game[]) => SelectProps['options']\n}\n\nconst GameSelect: FC<GameSelectProps> = props => {\n const { filter, options } = props\n const { t } = useTranslation()\n const { gameApiV2, gameId, setGameId } = useToolkitsStore(s => s)\n const { data, isLoading } = useGames()\n const queryClient = useQueryClient()\n\n const filteredData = data?.filter(item => filter?.(item) ?? true)\n\n const _options =\n typeof options === 'function'\n ? options(filteredData)\n : filteredData?.map(item => ({\n label: item.name,\n value: gameApiV2 ? item.game_id : item.id,\n }))\n\n // 切换游戏时清空 TanStack Query 缓存触发重新请求以更新视图。\n const onChange = (value: string | number) => {\n clearCache()\n setGameId(value)\n }\n\n const clearCache = () => {\n // 清除除游戏列表外的所有缓存\n queryClient.removeQueries({\n predicate: query => {\n const queryKey = query.queryKey\n return !queryKey.includes('/api/game/list') && !queryKey.includes('/api/usystem/game/all')\n },\n })\n }\n\n useEffect(() => {\n if (data && data.length > 0) {\n const firstId = gameApiV2 ? data[0].game_id : data[0].id\n if (data.every(item => String(item.game_id || item.id) !== String(gameId))) {\n // 如果当前游戏 ID 不在数据中,则设置为第一个游戏 ID\n setGameId(firstId)\n }\n }\n }, [data])\n\n return (\n <Space>\n <Text>{t('GameSelect.label')}</Text>\n <Select<string | number>\n showSearch\n optionFilterProp=\"label\"\n value={gameId}\n placeholder={t('GameSelect.placeholder')}\n loading={isLoading}\n style={{ width: '200px' }}\n options={_options}\n onChange={onChange}\n />\n </Space>\n )\n}\n\nexport default GameSelect\n","import { memo } from 'react'\nimport { Link } from 'react-router-dom'\n\nimport { Logo } from '@/components/logo'\n\ninterface LayoutHeaderProps {\n title?: string\n subtitle?: string\n mainPagePath: string\n collapsed: boolean\n}\n\nconst LayoutHeader = memo<LayoutHeaderProps>(({ title, subtitle, mainPagePath, collapsed }) => (\n <div\n className=\"px-6 py-2 font-bold relative bg-gradient-to-r from-white to-gray-50/30\"\n style={{\n height: 'auto',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n backdropFilter: 'blur(4px)',\n WebkitBackdropFilter: 'blur(4px)',\n }}\n >\n <div className={`flex items-center w-full ${collapsed ? 'justify-center' : ''}`}>\n <Link\n to={mainPagePath}\n className=\"hover:opacity-80 transition-all duration-300 ease-out block rounded-lg p-1 hover:bg-white/50 hover:shadow-sm\"\n style={{\n transition: 'all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n opacity: collapsed ? 0.8 : 1,\n transform: collapsed ? 'translateX(0)' : 'translateX(0)',\n }}\n >\n <Logo\n width={36}\n style={{\n objectFit: 'contain',\n display: 'block',\n filter: 'drop-shadow(0 1px 1px rgba(0, 0, 0, 0.05))',\n transition: 'all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n }}\n />\n </Link>\n {title && (\n <div\n className=\"ml-4 overflow-hidden min-w-0\"\n style={{\n transition: 'all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n opacity: collapsed ? 0 : 1,\n width: collapsed ? '0px' : 'auto',\n marginLeft: collapsed ? '0px' : '16px',\n transform: collapsed ? 'translateX(-8px)' : 'translateX(0)',\n }}\n >\n <Link\n to={mainPagePath}\n className=\"text-xl leading-tight hover:text-blue-600 transition-all duration-300 font-bold text-ellipsis overflow-hidden whitespace-nowrap block bg-gradient-to-r from-gray-800 to-gray-600 bg-clip-text text-transparent hover:from-blue-600 hover:to-blue-500\"\n title={title}\n style={{\n letterSpacing: '0.02em',\n textShadow: '0 1px 2px rgba(0, 0, 0, 0.05)',\n }}\n >\n {title}\n </Link>\n </div>\n )}\n </div>\n <div\n className=\"w-full mt-2 overflow-hidden\"\n style={{\n height: subtitle && !collapsed ? '20px' : '1px',\n transition: 'height 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n }}\n >\n <div className=\"flex items-center justify-center h-full w-full\">\n <div\n className=\"w-full border-t border-gray-200 absolute\"\n style={{\n opacity: !subtitle || collapsed ? 1 : 0,\n transition: 'opacity 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n }}\n />\n {subtitle && (\n <div\n className=\"flex items-center w-full text-sm\"\n style={{\n opacity: collapsed ? 0 : 1,\n transform: collapsed ? 'translateY(-3px)' : 'translateY(0)',\n transition: 'all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n }}\n >\n <div className=\"flex-1 border-t border-gray-200\"></div>\n <span className=\"px-3 text-gray-500 font-medium whitespace-nowrap\" title={subtitle}>\n {subtitle}\n </span>\n <div className=\"flex-1 border-t border-gray-200\"></div>\n </div>\n )}\n </div>\n </div>\n </div>\n))\n\nLayoutHeader.displayName = 'LayoutHeader'\n\nexport default LayoutHeader\n","import type { DetailedHTMLProps, FC, ImgHTMLAttributes } from 'react'\n\nimport logoUrl from './logo.png'\n\nexport type LogoProps = Omit<DetailedHTMLProps<ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement>, 'src' | 'alt'>\n\nconst Logo: FC<LogoProps> = props => {\n return <img src={logoUrl} alt=\"logo\" {...props} />\n}\n\nexport default Logo\n","import { MenuFoldOutlined, MenuUnfoldOutlined } from '@ant-design/icons'\nimport { Button, Divider, Space } from 'antd'\nimport * as Antd from 'antd'\nimport type { FC, Key, PropsWithChildren, ReactNode } from 'react'\nimport { Suspense, useState } from 'react'\n\nimport type { NavMenuItem } from '@/components/navMenu'\nimport { NavMenu } from '@/components/navMenu'\nimport { RequireGame } from '@/components/requireGame'\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { UserWidget } from '@/components/userWidget'\nimport { PermissionVersion } from '@/constants'\n\nimport type { GameSelectProps } from './GameSelect'\nimport GameSelect from './GameSelect'\nimport LayoutHeader from './LayoutHeader'\n\nconst { Spin, theme } = Antd\nconst { Header, Sider, Content } = Antd.Layout\n\ntype HeaderExtra = { key: Key; children: ReactNode }\n\nexport interface LayoutProps extends Pick<GameSelectProps, 'filter'> {\n collapsible?: boolean\n isMenuLoading?: boolean\n items?: NavMenuItem[]\n navWidth?: string | number\n gameSelectOptions?: GameSelectProps['options']\n headerExtra?: {\n left?: HeaderExtra[]\n right?: HeaderExtra[]\n }\n title?: string\n subtitle?: string\n}\n\nconst Layout: FC<PropsWithChildren<LayoutProps>> = props => {\n const {\n collapsible,\n isMenuLoading,\n items,\n headerExtra,\n children,\n navWidth,\n filter,\n gameSelectOptions,\n title,\n subtitle,\n } = props\n const {\n token: { colorBgContainer, colorBorder },\n } = theme.useToken()\n const {\n permissionVersion,\n navWidth: globalNavWidth,\n collapsible: globalCollapsible,\n mainPagePath,\n collapsed,\n setContext,\n isGlobal,\n } = useToolkitsStore()\n\n const [internalCollapsed, setInternalCollapsed] = useState(collapsed)\n\n const onCollapse = async () => {\n setInternalCollapsed(!internalCollapsed)\n setContext({ collapsed: !internalCollapsed })\n }\n\n const internalCollapsible = collapsible ?? globalCollapsible ?? false\n\n return (\n <Antd.Layout>\n <Sider\n collapsible={internalCollapsible}\n theme=\"light\"\n trigger={null}\n collapsed={internalCollapsed}\n width={navWidth ?? globalNavWidth}\n style={{\n height: '100vh',\n overflowX: 'hidden',\n overflowY: 'auto',\n borderRightWidth: 1,\n borderRightStyle: 'solid',\n borderRightColor: colorBorder,\n transition: 'all 0.2s cubic-bezier(0.645, 0.045, 0.355, 1)',\n }}\n >\n <LayoutHeader\n title={title}\n subtitle={subtitle}\n mainPagePath={mainPagePath}\n collapsed={internalCollapsed || false}\n />\n <NavMenu items={items} loading={isMenuLoading} />\n </Sider>\n <Antd.Layout>\n <Header\n style={{\n padding: '0 24px',\n background: colorBgContainer,\n }}\n >\n <div className=\"flex justify-between items-center h-full\">\n <Space size=\"small\" split={<Divider type=\"vertical\" />} className=\"mr-6\">\n {internalCollapsible && (\n <Button\n type=\"text\"\n icon={internalCollapsed ? <MenuUnfoldOutlined /> : <MenuFoldOutlined />}\n style={{ fontSize: '16px' }}\n onClick={onCollapse}\n />\n )}\n {permissionVersion !== PermissionVersion.V1 && !isGlobal && (\n <GameSelect filter={filter} options={gameSelectOptions} />\n )}\n {headerExtra?.left?.map(extra => <span key={extra.key}>{extra.children}</span>)}\n </Space>\n <Space size=\"small\" split={<Divider type=\"vertical\" />}>\n {headerExtra?.right?.map(extra => <span key={extra.key}>{extra.children}</span>)}\n <UserWidget />\n </Space>\n </div>\n </Header>\n <Content\n style={{\n overflow: 'auto',\n padding: '24px 16px',\n maxHeight: 'calc(100vh - 64px)',\n transition: 'margin-left 0.2s cubic-bezier(0.645, 0.045, 0.355, 1)',\n }}\n >\n <Suspense\n fallback={\n <Spin\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: '200px',\n }}\n />\n }\n >\n <RequireGame>{children}</RequireGame>\n </Suspense>\n </Content>\n </Antd.Layout>\n </Antd.Layout>\n )\n}\n\nexport default Layout\n","import { Result, Spin } from 'antd'\nimport type { Options as KyOptions } from 'ky'\nimport type { FC, PropsWithChildren } from 'react'\n\nimport { useTranslation } from '@/locale'\nimport { usePermission } from '@/services'\n\nexport interface RequirePermissionProps {\n code: string\n config?: KyOptions\n}\n\nconst RequirePermission: FC<PropsWithChildren<RequirePermissionProps>> = props => {\n const { code, config, children } = props\n const { data: accessible, isLoading } = usePermission(code, config)\n const { t } = useTranslation()\n\n if (isLoading) {\n return (\n <Spin\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: 200,\n }}\n />\n )\n }\n\n if (!accessible) {\n return <Result status=\"403\" subTitle={t('global.noEntitlement')} />\n }\n\n return <>{children}</>\n}\n\nexport default RequirePermission\n","import { createVisibilityStore } from '@/utils'\n\nexport const useDrawerStore = createVisibilityStore()\n","import type { DrawerProps } from 'antd'\nimport { Button, Drawer } from 'antd'\nimport type { ComponentProps, ReactNode } from 'react'\nimport { useCallback, useEffect, useMemo, useState } from 'react'\n\nimport { generateId } from '@/utils'\n\nimport { useDrawerStore } from './stores'\n\nexport interface UseDrawerOperation {\n hide: () => void\n}\n\nexport interface UseDrawerProps extends Omit<DrawerProps, 'open' | 'confirmLoading' | 'onClose' | 'footer'> {\n content?: ReactNode | ((operation: UseDrawerOperation) => ReactNode)\n onConfirm?: () => void | Promise<void>\n afterOpen?: () => void | Promise<void>\n afterClose?: () => void | Promise<void>\n footer?: ReactNode | null\n confirmText?: string\n cancelText?: string\n confirmButtonProps?: ComponentProps<typeof Button>\n cancelButtonProps?: ComponentProps<typeof Button>\n}\n\nexport function useDrawer(props: UseDrawerProps) {\n const {\n content,\n onConfirm,\n afterOpen,\n afterClose,\n footer,\n confirmText = '确认',\n cancelText = '取消',\n confirmButtonProps,\n cancelButtonProps,\n ...drawerProps\n } = props\n\n const _id = useMemo(() => generateId(), [])\n const { show, hide, isOpen, cleanup } = useDrawerStore()\n\n // 组件销毁时清理 ID\n useEffect(() => {\n return () => {\n cleanup(_id)\n }\n }, [_id, cleanup])\n\n const open = isOpen(_id)\n const [confirmLoading, setConfirmLoading] = useState(false)\n const isRenderFunction = typeof content === 'function'\n\n const _show = useCallback(async () => {\n show(_id)\n await afterOpen?.()\n }, [_id, show, afterOpen])\n\n const _hide = useCallback(() => {\n hide(_id)\n }, [_id, hide])\n\n const onClose: DrawerProps['onClose'] = useCallback(async () => {\n _hide()\n await afterClose?.()\n }, [_hide, afterClose])\n\n const handleConfirm = useCallback(async () => {\n try {\n setConfirmLoading(true)\n await onConfirm?.()\n } catch (error) {\n console.error('Drawer confirm error:', error)\n throw error\n } finally {\n setConfirmLoading(false)\n }\n }, [onConfirm])\n\n const drawerFooter =\n footer !== undefined ? (\n footer\n ) : (\n <div className=\"flex gap-4 mx-4\">\n <Button type=\"primary\" loading={confirmLoading} {...confirmButtonProps} onClick={handleConfirm}>\n {confirmText}\n </Button>\n <Button {...cancelButtonProps} onClick={onClose}>\n {cancelText}\n </Button>\n </div>\n )\n\n const internalDrawer = (\n <Drawer {...drawerProps} open={open} footer={drawerFooter} onClose={onClose}>\n {isRenderFunction ? content({ hide: _hide }) : content}\n </Drawer>\n )\n\n return {\n id: _id,\n show: _show,\n hide: _hide,\n confirmLoading,\n drawer: internalDrawer,\n }\n}\n","import type { FormInstance, FormProps } from 'antd'\nimport { Form } from 'antd'\nimport type { AnyObject } from 'antd/es/_util/type'\nimport type { ReactNode } from 'react'\nimport { useCallback, useState } from 'react'\n\nimport type { RecursivePartial } from '@/types'\n\nimport { useDrawer, type UseDrawerOperation, type UseDrawerProps } from './drawer'\n\nexport interface ShowFormOptions<Values extends AnyObject, ExtraValues> {\n initialValues?: RecursivePartial<Values>\n extraValues?: ExtraValues\n}\n\nexport interface UseFormDrawerProps<Values extends AnyObject = AnyObject, ExtraValues = Record<string, unknown>>\n extends Omit<UseDrawerProps, 'onConfirm' | 'content' | 'onShow' | 'afterClose'> {\n formProps?: Omit<FormProps, 'form'>\n form?: FormInstance<Values>\n content?: ReactNode | ((extraValues: ExtraValues, operation: UseDrawerOperation) => ReactNode)\n onConfirm?: (values: Values, extraValues: ExtraValues) => void | Promise<void>\n onSuccess?: () => void\n afterClose?: (form: FormInstance<Values>) => void\n}\n\nexport interface UseFormDrawerReturn<Values extends AnyObject, ExtraValues> {\n id: number\n show: (options?: ShowFormOptions<Values, ExtraValues>) => void\n hide: () => void\n drawer: ReactNode\n}\n\nexport function useFormDrawer<Values extends AnyObject = AnyObject, ExtraValues = Record<string, unknown>>(\n props: UseFormDrawerProps<Values, ExtraValues>,\n): UseFormDrawerReturn<Values, ExtraValues> {\n const { content, form, formProps, onConfirm, onSuccess, afterClose, ...drawerProps } = props\n const [internalExtraValues, setInternalExtraValues] = useState<ExtraValues>({} as ExtraValues)\n const [internalForm] = Form.useForm<Values>(form)\n\n const isRenderFunction = typeof content === 'function'\n\n const { id, show, hide, drawer } = useDrawer({\n ...drawerProps,\n content: operation => (\n <Form {...formProps} form={internalForm}>\n {isRenderFunction ? content(internalExtraValues, operation) : content}\n </Form>\n ),\n onConfirm: async () => {\n try {\n const values = await internalForm.validateFields()\n await onConfirm?.(values, internalExtraValues)\n onSuccess?.()\n hide()\n } catch (error) {\n console.error('Form validation or submission error:', error)\n throw error\n }\n },\n afterClose: () => {\n setInternalExtraValues({} as ExtraValues)\n afterClose?.(internalForm)\n },\n })\n\n const showForm = useCallback(\n (options?: ShowFormOptions<Values, ExtraValues>) => {\n const { initialValues, extraValues } = options || {}\n\n if (extraValues !== undefined) {\n setInternalExtraValues(extraValues)\n }\n\n if (initialValues) {\n internalForm.setFieldsValue(initialValues)\n }\n\n show()\n },\n [internalForm, show],\n )\n\n return {\n id,\n show: showForm,\n hide,\n drawer,\n }\n}\n","import { lazy } from 'react'\nimport { Route, Routes } from 'react-router-dom'\n\nconst MenuItemList = lazy(() => import('./pages/menuItemList'))\nconst CreateMenuItem = lazy(() => import('./pages/createMenuItem'))\nconst UpdateMenuItem = lazy(() => import('./pages/updateMenuItem'))\n\nexport default (\n <Routes>\n <Route index element={<MenuItemList />} />\n <Route path=\"create\" element={<CreateMenuItem />} />\n <Route path=\"update/:id\" element={<UpdateMenuItem />} />\n </Routes>\n)\n","import { lazy } from 'react'\nimport { Navigate, Route, Routes } from 'react-router-dom'\n\nconst UserList = lazy(() => import('./pages/userList'))\nconst UserDetail = lazy(() => import('./pages/userDetail'))\nconst RoleList = lazy(() => import('./pages/roleList'))\nconst RoleDetail = lazy(() => import('./pages/roleDetail'))\n\nexport default (\n <Routes>\n <Route index element={<Navigate to=\"user\" />} />\n <Route path=\"user\" element={<UserList />} />\n <Route path=\"user/:id\" element={<UserDetail />} />\n <Route path=\"role\" element={<RoleList />} />\n <Route path=\"role/:name\" element={<RoleDetail />} />\n </Routes>\n)\n","import { Button, Result } from 'antd'\nimport type { FC } from 'react'\nimport { useNavigate } from 'react-router-dom'\n\nimport { useTranslation } from '@/locale'\n\ninterface NotFoundProps {\n redirectUrl?: string\n}\n\nconst NotFound: FC<NotFoundProps> = props => {\n const { redirectUrl } = props\n const navigate = useNavigate()\n const { t } = useTranslation()\n\n return (\n <div className=\"text-center\">\n <Result\n status=\"404\"\n title=\"404\"\n subTitle={t('NotFound.subTitle')}\n extra={\n redirectUrl && (\n <Button\n type=\"primary\"\n onClick={() => {\n navigate(redirectUrl)\n }}\n >\n {t('NotFound.buttonText')}\n </Button>\n )\n }\n />\n </div>\n )\n}\n\nexport default NotFound\n","import { Card, Form, Input, Select } from 'antd'\nimport type { ColumnsType } from 'antd/es/table'\nimport dayjs from 'dayjs'\nimport type { FC } from 'react'\n\nimport { ExpandableParagraph } from '@/components/expandableParagraph'\nimport { QueryList } from '@/components/queryList'\nimport { withContext } from '@/components/toolkitsProvider'\nimport { useTranslation } from '@/locale'\n\nimport type { OperationLogListItem } from './types'\n\nconst { Option } = Select\n\nconst OperationLogList: FC = () => {\n const { t } = useTranslation()\n\n const columns: ColumnsType<OperationLogListItem> = [\n {\n key: 'username',\n title: t('global.username'),\n dataIndex: 'uname',\n width: 100,\n },\n {\n key: 'label',\n title: t('global.label'),\n dataIndex: 'label',\n width: 150,\n },\n {\n key: 'method',\n title: t('global.method'),\n dataIndex: 'method',\n width: 100,\n },\n {\n key: 'route',\n title: t('global.route'),\n dataIndex: 'route',\n width: 200,\n },\n {\n key: 'request',\n title: t('global.request'),\n dataIndex: 'request',\n render(value: string) {\n return <ExpandableParagraph>{value}</ExpandableParagraph>\n },\n },\n {\n key: 'response',\n title: t('global.response'),\n dataIndex: 'response',\n render(value: string) {\n return <ExpandableParagraph>{value}</ExpandableParagraph>\n },\n },\n {\n key: 'creation_time',\n title: t('global.creationTime'),\n dataIndex: 'ctime',\n width: 200,\n render(value: string) {\n return dayjs(value).format('YYYY-MM-DD HH:mm:ss')\n },\n },\n ]\n\n return (\n <Card title=\"操作日志\">\n <QueryList<\n OperationLogListItem,\n {\n uname?: string\n route?: string\n method?: 'get' | 'post'\n label?: string\n },\n { List: OperationLogListItem[]; Total: number }\n >\n identifier=\"operation-log-list\"\n rowKey=\"id\"\n code=\"300001\"\n columns={columns}\n tableLayout=\"fixed\"\n request={{\n url: '/api/usystem/log/list',\n method: 'GET',\n }}\n dataAdapter={data => ({\n total: data?.Total,\n items: data?.List,\n })}\n renderForm={form => (\n <Form form={form} layout=\"inline\">\n <Form.Item label={t('global.username')} name=\"uname\">\n <Input allowClear />\n </Form.Item>\n <Form.Item label={t('global.route')} name=\"route\">\n <Input allowClear />\n </Form.Item>\n <Form.Item label={t('global.method')} name=\"method\">\n <Select allowClear style={{ width: '100px' }}>\n <Option value=\"get\">GET</Option>\n <Option value=\"post\">POST</Option>\n </Select>\n </Form.Item>\n <Form.Item label={t('global.label')} name=\"label\">\n <Input allowClear />\n </Form.Item>\n </Form>\n )}\n />\n </Card>\n )\n}\n\nexport default withContext(OperationLogList, { isGlobal: true })\n","import { Alert, Button, Divider, Form, Input, Space, Spin, Typography } from 'antd'\nimport type { FC, ReactNode } from 'react'\nimport { Navigate } from 'react-router-dom'\n\nimport { Logo } from '@/components/logo'\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { SSO_URL } from '@/constants'\nimport { useTranslation } from '@/locale'\n\nimport backgroundUrl from './background.svg'\nimport { useTicketLogin } from './hooks'\n\ninterface SignInProps {\n extra?: ReactNode\n title?: string\n}\n\nconst SignIn: FC<SignInProps> = ({ extra, title }) => {\n const { token, mainPagePath } = useToolkitsStore(s => s)\n const { t } = useTranslation()\n const { isLoading, isUnregistered, dismissUnregistered } = useTicketLogin()\n\n if (isLoading) {\n return (\n <div className=\"w-screen h-screen flex justify-center items-center\">\n <Spin />\n </div>\n )\n }\n\n if (token) {\n const hashMode = !!window.location.hash\n const path = mainPagePath\n\n if (!hashMode) {\n return <Navigate replace to={mainPagePath} />\n }\n\n // 移除 ticket\n window.location.href = `${window.location.origin}${window.location.pathname}#${path}`\n\n return null\n }\n\n return (\n <div className=\"w-screen h-screen relative flex overflow-hidden\">\n <div className=\"absolute top-16 right-16 z-10\">{extra}</div>\n <div className=\"absolute left-14 top-6\">\n <Space align=\"center\">\n <Logo width={48} />\n {title && <span className=\"text-2xl font-bold\">{title}</span>}\n </Space>\n </div>\n <div className=\"flex-1 flex justify-center items-center bg-slate-50\">\n <img src={backgroundUrl} alt=\"background\" className=\"w-10/12\" />\n </div>\n <div className=\"w-[650px] relative top-0 left-0 right-0 bottom-0\">\n <div className=\"absolute top-1/2 -translate-y-1/2 left-0 right-0\">\n <div className=\"-translate-y-10 px-36\">\n <div className=\"flex flex-col justify-center\">\n <div className=\"h-10\">\n {isUnregistered && (\n <Alert\n banner\n closable\n message={t('SignIn.unregistered')}\n type=\"error\"\n onClose={dismissUnregistered}\n />\n )}\n </div>\n <Typography.Title level={2}>{t('SignIn.welcome')}</Typography.Title>\n <div className=\"mt-4\">\n <Form layout=\"vertical\" autoComplete=\"off\">\n <Form.Item label={t('global.username')} name=\"username\" rules={[{ required: true }]}>\n <Input />\n </Form.Item>\n <Form.Item label={t('global.password')} name=\"password\" rules={[{ required: true }]}>\n <Input.Password />\n </Form.Item>\n <Form.Item>\n <Button block type=\"primary\" shape=\"round\" htmlType=\"submit\">\n {t('global.signIn')}\n </Button>\n </Form.Item>\n </Form>\n </div>\n <Divider plain dashed>\n {t('SignIn.thirdParty')}\n </Divider>\n <div className=\"flex justify-center items-center\">\n <Button\n block\n shape=\"round\"\n href={`${SSO_URL}/logout?service=${SSO_URL}/login?service=${window.location.href}`}\n target=\"_self\"\n >\n <Logo width={18} />\n {t('SignIn.signInWithIDass')}\n </Button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n )\n}\n\nexport default SignIn\n","import { useQuery } from '@tanstack/react-query'\nimport { useEffect, useMemo, useState } from 'react'\n\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { useKy } from '@/libs'\n\n/**\n * 处理登录页面的票据逻辑和未注册用户提示\n */\nexport function useTicketLogin() {\n const ky = useKy()\n const { setToken } = useToolkitsStore()\n\n // 解析 URL 参数\n const { ticket, unregisteredFromUrl } = useMemo(() => {\n const queryParams = new URLSearchParams(window.location.search)\n return {\n ticket: queryParams.get('ticket'),\n unregisteredFromUrl: queryParams.get('unregistered') === 'true',\n }\n }, [])\n\n // 初始化未注册状态\n const [isUnregistered, setIsUnregistered] = useState(unregisteredFromUrl)\n\n // 使用票据登录\n const { data, isLoading, error } = useQuery({\n queryKey: ['ticket-login', ticket],\n queryFn: () => ky.get<{ token: string }>(`/api/usystem/user/login?ticket=${ticket}`),\n enabled: !!ticket,\n retry: false,\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n })\n\n // 处理登录成功和错误\n useEffect(() => {\n if (data?.token) {\n setToken(data.token)\n } else if (error && 'response' in error && (error.response as { status?: number })?.status === 403) {\n setIsUnregistered(true)\n }\n }, [data, error, setToken])\n\n // 关闭未注册提示\n const dismissUnregistered = useMemo(\n () => () => {\n setIsUnregistered(false)\n // 清理 URL 参数\n if (unregisteredFromUrl) {\n const url = new URL(window.location.href)\n url.searchParams.delete('unregistered')\n window.history.replaceState({}, '', url.toString())\n }\n },\n [unregisteredFromUrl],\n )\n\n return {\n hasTicket: !!ticket,\n isLoading,\n error,\n isUnregistered,\n dismissUnregistered,\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/components/dynamicTags/DynamicTags.tsx","../src/components/expandableParagraph/ExpandableParagraph.tsx","../src/components/infiniteList/stores.ts","../src/components/infiniteList/InfiniteList.tsx","../src/components/navMenu/stores.ts","../src/components/navMenu/utils.tsx","../src/components/navMenu/NavMenu.tsx","../src/components/requireGame/RequireGame.tsx","../src/components/userWidget/UserWidget.tsx","../src/components/layout/GameSelect.tsx","../src/components/layout/LayoutHeader.tsx","../src/components/logo/Logo.tsx","../src/components/layout/Layout.tsx","../src/components/requireAuth/RequireAuth.tsx","../src/hooks/drawer/stores.ts","../src/hooks/drawer/drawer.tsx","../src/hooks/drawer/formDrawer.tsx","../src/modules/menu/index.tsx","../src/modules/permission/index.tsx","../src/pages/notFound/index.tsx","../src/pages/operationLogList/index.tsx","../src/pages/signIn/hooks.ts","../src/pages/signIn/index.tsx"],"names":["DynamicTags","props","initialTags","addable","removable","addCallback","removeCallback","t","useTranslation","token","theme","tags","setTags","useState","inputVisible","setInputVisible","inputValue","setInputValue","editInputIndex","setEditInputIndex","editInputValue","setEditInputValue","inputRef","useRef","editInputRef","useEffect","handleClose","removedTag","newTags","tag","showInput","handleInputChange","e","handleInputConfirm","handleEditInputChange","handleEditInputConfirm","tagInputStyle","tagPlusStyle","jsxs","Space","jsx","index","Input","Tag","PlusOutlined","DynamicTags_default","ExpandableParagraph","children","restProps","expanded","setExpanded","Typography","_","info","ExpandableParagraph_default","DEFAULT_PAYLOAD","createStore","create","devtools","subscribeWithSelector","set","get","id","url","queryKey","refetch","fetchNextPage","state","existingInstance","updatedInstance","newInstances","instance","payload","newPayload","isEqual","payloadChanged","currentPayload","error","store","useInfiniteListStore","DEFAULT_CACHE_TIME","DEFAULT_STALE_TIME","SPIN_STYLE","identifierCounter","generateUniqueIdentifier","InternalInfiniteList","ref","internalProps","data","page","lastPage","allPages","_pageParam","pageData","identifier","code","buttonsAlign","showReset","refreshInterval","request","tableExtra","renderForm","afterSuccess","afterError","dataAdapter","initialPageParam","footer","form","tableProps","_form","Form","isValid","setIsValid","shouldPoll","action","ky","useKy","accessible","isChecking","usePermission","finalIdentifier","useMemo","subscribedPayload","s","formInstance","method","body","params","headers","cacheTime","staleTime","requestHeaders","hasNextPage","isFetchingNextPage","isFetching","useInfiniteQuery","pageParam","requestParams","requestBody","kyOptions","response","err","errorObj","failureCount","retryError","attemptIndex","dataSource","isLoadingMore","isReachingEnd","isEmpty","onConfirm","values","loadMore","onReset","useImperativeHandle","Spin","Result","renderFooter","renderTableExtra","formRenderer","FilterFormWrapper_default","cloneElement","Fragment","Table","Button","InfiniteList","forwardRef","InfiniteList_default","useNavStore","persist","keys","current","key","createJSONStorage","MemoizedLink","memo","to","Link","transformItems","items","result","i","rest","route","label","labelNode","flatItems","keypath","item","NavMenu","loading","location","useLocation","previousItemsRef","previousLocationRef","flattenItems","internalItems","openKeys","selectedKeys","setOpenKeys","setSelectedKeys","onOpenChange","useCallback","expandedKey","match","fullPath","k","Menu","NavMenu_default","Antd","RequireGame","permissionVersion","gameId","isGlobal","useToolkitsStore","isLoading","useGames","Empty","RequireGame_default","UserWidget","navigate","useNavigate","clearToken","getUser","loginPath","user","handleSignOut","handleKeyDown","handleDropdownKeyDown","LogoutOutlined","Dropdown","UserOutlined","UserWidget_default","Text","GameSelect","filter","options","gameApiV2","setGameId","queryClient","useQueryClient","filteredData","_options","onChange","value","clearCache","query","firstId","Select","GameSelect_default","Logo","logo_default","Logo_default","LayoutHeader","title","subtitle","mainPagePath","collapsed","LayoutHeader_default","Header","Sider","Content","Layout","collapsible","isMenuLoading","headerExtra","navWidth","gameSelectOptions","colorBgContainer","colorBorder","globalNavWidth","globalCollapsible","setContext","internalCollapsed","setInternalCollapsed","onCollapse","internalCollapsible","Divider","MenuUnfoldOutlined","MenuFoldOutlined","extra","Suspense","Layout_default","RequireAuth","config","redirectPath","RequireAuth_default","useDrawerStore","createVisibilityStore","useDrawer","content","afterOpen","afterClose","confirmText","cancelText","confirmButtonProps","cancelButtonProps","drawerProps","_id","generateId","show","hide","isOpen","cleanup","open","confirmLoading","setConfirmLoading","isRenderFunction","_show","_hide","onClose","handleConfirm","drawerFooter","internalDrawer","Drawer","useFormDrawer","formProps","onSuccess","internalExtraValues","setInternalExtraValues","internalForm","drawer","operation","showForm","initialValues","extraValues","MenuItemList","lazy","CreateMenuItem","UpdateMenuItem","menu_default","Routes","Route","UserList","UserDetail","RoleList","RoleDetail","permission_default","Navigate","NotFound","redirectUrl","notFound_default","Option","OperationLogList","columns","dayjs","Card","QueryList_default","operationLogList_default","withContext","useTicketLogin","setToken","ticket","unregisteredFromUrl","queryParams","isUnregistered","setIsUnregistered","useQuery","dismissUnregistered","SignIn","hashMode","path","background_default","Alert","SSO_URL","signIn_default"],"mappings":"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","file":"index.js","sourcesContent":["import { PlusOutlined } from '@ant-design/icons'\nimport type { InputRef } from 'antd'\nimport { Input, Space, Tag, theme } from 'antd'\nimport type { ChangeEvent, CSSProperties, FC } from 'react'\nimport { useEffect, useRef, useState } from 'react'\n\nimport { useTranslation } from '@/locale'\n\nexport interface DynamicTagsProps {\n initialTags?: string[]\n addable?: boolean\n removable?: boolean\n // 返回 Promise。如果返回 Promise.resolve(true),则添加; 如果返回 Promise.resolve(false) 或 Promise.reject,则不添加\n addCallback?: (addedTag: string) => Promise<boolean>\n // 返回 Promise。如果返回 Promise.resolve(true),则删除; 如果返回 Promise.resolve(false) 或 Promise.reject,则不删除\n removeCallback?: (removedTag: string) => Promise<boolean>\n}\n\nconst DynamicTags: FC<DynamicTagsProps> = props => {\n const { initialTags, addable, removable, addCallback, removeCallback } = props\n const { t } = useTranslation()\n const { token } = theme.useToken()\n const [tags, setTags] = useState<string[]>([])\n const [inputVisible, setInputVisible] = useState(false)\n const [inputValue, setInputValue] = useState('')\n const [editInputIndex, setEditInputIndex] = useState(-1)\n const [editInputValue, setEditInputValue] = useState<string>('')\n const inputRef = useRef<InputRef>(null)\n const editInputRef = useRef<InputRef>(null)\n\n useEffect(() => {\n setTags(initialTags ?? [])\n }, [initialTags])\n\n useEffect(() => {\n if (inputVisible) {\n inputRef.current?.focus()\n }\n }, [inputVisible])\n\n useEffect(() => {\n editInputRef.current?.focus()\n }, [inputValue])\n\n const handleClose = async (removedTag: string) => {\n const success = await removeCallback?.(removedTag)\n\n if (success) {\n const newTags = tags.filter(tag => tag !== removedTag)\n setTags(newTags)\n }\n }\n\n const showInput = () => {\n setInputVisible(true)\n }\n\n const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n setInputValue(e.target.value)\n }\n\n const handleInputConfirm = async () => {\n if (inputValue && tags.indexOf(inputValue) === -1) {\n const success = await addCallback?.(inputValue)\n\n if (success) {\n setTags([...tags, inputValue])\n }\n }\n\n setInputVisible(false)\n setInputValue('')\n }\n\n const handleEditInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n setEditInputValue(e.target.value)\n }\n\n const handleEditInputConfirm = () => {\n const newTags = [...tags]\n newTags[editInputIndex] = editInputValue\n setTags(newTags)\n setEditInputIndex(-1)\n setInputValue('')\n }\n\n const tagInputStyle: CSSProperties = {\n width: 78,\n verticalAlign: 'top',\n }\n\n const tagPlusStyle: CSSProperties = {\n background: token.colorBgContainer,\n borderStyle: 'dashed',\n }\n\n return (\n <Space wrap size={[0, 8]}>\n <Space wrap size={[0, 8]}>\n {tags.map((tag, index) => {\n if (editInputIndex === index) {\n return (\n <Input\n ref={editInputRef}\n key={tag}\n size=\"small\"\n style={tagInputStyle}\n value={editInputValue}\n onChange={handleEditInputChange}\n onBlur={handleEditInputConfirm}\n onPressEnter={handleEditInputConfirm}\n />\n )\n }\n\n return (\n <Tag\n key={tag}\n closable={removable}\n style={{ userSelect: 'none' }}\n onClose={async e => {\n e.preventDefault()\n await handleClose(tag)\n }}\n >\n <span\n onDoubleClick={e => {\n if (index !== 0) {\n setEditInputIndex(index)\n setEditInputValue(tag)\n e.preventDefault()\n }\n }}\n >\n {tag}\n </span>\n </Tag>\n )\n })}\n </Space>\n {addable &&\n (inputVisible ? (\n <Input\n ref={inputRef}\n type=\"text\"\n size=\"small\"\n style={tagInputStyle}\n value={inputValue}\n onChange={handleInputChange}\n onBlur={handleInputConfirm}\n onPressEnter={handleInputConfirm}\n />\n ) : (\n <Tag style={tagPlusStyle} onClick={showInput}>\n <PlusOutlined />\n &nbsp;{t('global.add')}\n </Tag>\n ))}\n </Space>\n )\n}\n\nexport default DynamicTags\n","import { Typography } from 'antd'\nimport type { ParagraphProps } from 'antd/es/typography/Paragraph'\nimport type { FC } from 'react'\nimport { useState } from 'react'\n\nexport type ExpandableParagraphProps = Omit<ParagraphProps, 'ellipsis' | 'className'>\n\nconst ExpandableParagraph: FC<ExpandableParagraphProps> = props => {\n const { children, ...restProps } = props\n const [expanded, setExpanded] = useState(false)\n\n return (\n <Typography.Paragraph\n {...restProps}\n className=\"mb-0\"\n ellipsis={{\n rows: 2,\n expandable: 'collapsible',\n expanded,\n onExpand: (_, info) => {\n setExpanded(info.expanded)\n },\n }}\n >\n {children}\n </Typography.Paragraph>\n )\n}\n\nexport default ExpandableParagraph\n","import { isEqual } from 'lodash-es'\nimport { create } from 'zustand'\nimport { devtools, subscribeWithSelector } from 'zustand/middleware'\n\nimport type { InfiniteListPayload } from './InfiniteList'\n\n// Infinite Query 更新函数类型\ntype InfiniteQueryRefetchFunction = () => void | Promise<unknown>\ntype InfiniteQueryFetchNextPageFunction = () => void | Promise<unknown>\n\n// InfiniteList 实例信息\ninterface InfiniteListInstance {\n id: string\n url: string\n queryKey: readonly unknown[]\n payload: InfiniteListPayload\n refetch: InfiniteQueryRefetchFunction\n fetchNextPage: InfiniteQueryFetchNextPageFunction\n}\n\n// 简化的状态接口\ninterface InfiniteListState {\n // 实例管理\n instances: Map<string, InfiniteListInstance>\n\n // 核心方法\n registerInstance(\n id: string,\n url: string,\n queryKey: readonly unknown[],\n refetch: InfiniteQueryRefetchFunction,\n fetchNextPage: InfiniteQueryFetchNextPageFunction,\n ): void\n unregisterInstance(id: string): void\n updatePayload(id: string, payload: InfiniteListPayload): void\n getPayload(id: string): InfiniteListPayload\n refetch(id: string, payload?: InfiniteListPayload): Promise<void>\n fetchNextPage(id: string): Promise<void>\n\n // 工具方法\n getInstance(id: string): InfiniteListInstance | undefined\n getAllInstances(): InfiniteListInstance[]\n}\n\n// 稳定的默认 payload 引用,避免未注册时每次返回新对象导致 getSnapshot 无限循环\nconst DEFAULT_PAYLOAD: InfiniteListPayload = Object.freeze({\n page: 0,\n // 这里使用冻结的空对象,确保引用稳定\n filters: Object.freeze({}) as Record<string, never>,\n})\n\n// 创建简化的 store\nconst createStore = () =>\n create<InfiniteListState>()(\n devtools(\n subscribeWithSelector((set, get) => ({\n instances: new Map(),\n\n registerInstance(id, url, queryKey, refetch, fetchNextPage) {\n set(state => {\n const existingInstance = state.instances.get(id)\n\n // 如果实例已存在,只更新函数\n if (existingInstance) {\n // 仅当引用发生变化时才更新,避免无意义 setState\n if (existingInstance.refetch !== refetch || existingInstance.fetchNextPage !== fetchNextPage) {\n const updatedInstance = {\n ...existingInstance,\n refetch,\n fetchNextPage,\n }\n const newInstances = new Map(state.instances)\n newInstances.set(id, updatedInstance)\n return { instances: newInstances }\n }\n return state\n }\n\n // 创建新实例\n const instance: InfiniteListInstance = {\n id,\n url,\n queryKey,\n payload: DEFAULT_PAYLOAD,\n refetch,\n fetchNextPage,\n }\n\n const newInstances = new Map(state.instances)\n newInstances.set(id, instance)\n\n return { instances: newInstances }\n })\n },\n\n unregisterInstance(id) {\n set(state => {\n const newInstances = new Map(state.instances)\n const existed = newInstances.delete(id)\n\n if (existed) {\n return { instances: newInstances }\n }\n return state\n })\n },\n\n updatePayload(id, payload) {\n set(state => {\n const instance = state.instances.get(id)\n if (!instance) return state\n\n const newPayload = { ...instance.payload, ...payload }\n\n // 只有当 payload 真正改变时才更新\n if (!isEqual(instance.payload, newPayload)) {\n const updatedInstance = {\n ...instance,\n payload: newPayload,\n }\n\n const newInstances = new Map(state.instances)\n newInstances.set(id, updatedInstance)\n\n return { instances: newInstances }\n }\n\n return state\n })\n },\n\n getPayload(id) {\n const instance = get().instances.get(id)\n return instance?.payload ?? DEFAULT_PAYLOAD\n },\n\n async refetch(id, payload) {\n const instance = get().instances.get(id)\n if (!instance) {\n console.warn(`InfiniteList instance with id \"${id}\" not found`)\n return\n }\n\n let payloadChanged = false\n\n // 更新 payload 如果提供且确实有变化\n if (payload) {\n const currentPayload = instance.payload\n const newPayload = { ...currentPayload, ...payload }\n\n // 只有当 payload 真正改变时才更新\n if (!isEqual(currentPayload, newPayload)) {\n get().updatePayload(id, payload)\n payloadChanged = true\n }\n }\n\n // 若 payload 发生变化,queryKey 会变化,React Query 会自动触发请求,此处不再手动 refetch,避免重复请求\n if (payloadChanged) {\n return\n }\n\n // 否则手动触发一次请求\n try {\n await instance.refetch()\n } catch (error) {\n console.error(`Failed to refetch InfiniteList instance \"${id}\":`, error)\n throw error\n }\n },\n\n async fetchNextPage(id) {\n const instance = get().instances.get(id)\n if (!instance) {\n console.warn(`InfiniteList instance with id \"${id}\" not found`)\n return\n }\n\n // 调用 fetchNextPage 函数\n try {\n await instance.fetchNextPage()\n } catch (error) {\n console.error(`Failed to fetch next page for InfiniteList instance \"${id}\":`, error)\n throw error\n }\n },\n\n getInstance(id) {\n return get().instances.get(id)\n },\n\n getAllInstances() {\n return Array.from(get().instances.values())\n },\n })),\n {\n name: 'infinite-list-store',\n },\n ),\n )\n\n// 创建 store 实例\nconst store = createStore()\n\nexport const useInfiniteListStore = store\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useInfiniteQuery } from '@tanstack/react-query'\nimport type { FormInstance } from 'antd'\nimport { Button, Form, Result, Spin, Table } from 'antd'\nimport type { AnyObject } from 'antd/es/_util/type'\nimport type { TableProps } from 'antd/es/table'\nimport type { Options as KyOptions } from 'ky'\nimport type { ReactElement, ReactNode, Ref } from 'react'\nimport { cloneElement, forwardRef, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react'\n\nimport type { FilterFormWrapperProps } from '@/components/filterFormWrapper'\nimport { FilterFormWrapper } from '@/components/filterFormWrapper'\nimport { useKy } from '@/libs'\nimport { useTranslation } from '@/locale'\nimport { usePermission } from '@/services'\n\nimport { useInfiniteListStore } from './stores'\n\nexport interface InfiniteListPayload<Values = any> {\n page?: number\n filters?: Values\n}\n\nexport interface InfiniteListRequestConfig<Values = any> {\n url: string\n method?: 'GET' | 'POST'\n body?:\n | FormData\n | Record<string | number, any>\n | ((payload: InfiniteListPayload<Values>, pageParam: any) => FormData | Record<string | number, any>)\n params?:\n | Record<string | number, any>\n | ((payload: InfiniteListPayload<Values>, pageParam: any) => Record<string | number, any>)\n headers?: Record<string, string> | ((form: FormInstance<Values>) => Record<string, string>)\n // 缓存配置\n cacheTime?: number // 缓存时间(毫秒)\n staleTime?: number // 数据新鲜时间(毫秒)\n}\n\nexport enum InfiniteListAction {\n Confirm,\n Reset,\n LoadMore,\n Init,\n}\n\nexport interface InfiniteListDataAdapter<Item = any, Values = any, Data = any> {\n items?: (data: Data[] | undefined, form: FormInstance<Values>) => Item[] | undefined\n hasMore?: (lastPage: Data | undefined, allPages: Data[]) => boolean\n nextPageParam?: (lastPage: Data | undefined, allPages: Data[], pageParam: any) => any\n}\n\nexport interface InfiniteListRef<Item = any, Values = any, Data = any> {\n data: Data[] | undefined\n dataSource: Item[] | undefined\n form: FormInstance<Values>\n refetch: () => void\n fetchNextPage: () => void\n hasNextPage: boolean\n isFetchingNextPage: boolean\n}\n\nexport interface InfiniteListProps<Item, Values, Data>\n extends Omit<TableProps<Item>, 'pagination' | 'dataSource' | 'loading' | 'footer'>,\n Pick<FilterFormWrapperProps, 'buttonsAlign' | 'showReset'> {\n identifier?: string // 可选标识符,未提供时自动生成\n code?: string\n form?: FormInstance<Values>\n refreshInterval?: number\n request: InfiniteListRequestConfig<Values> // 必需的请求配置\n tableExtra?: ReactNode | ((form: FormInstance<Values>, data?: Data[]) => ReactNode)\n renderForm?: (form: FormInstance<Values>) => ReactElement\n afterSuccess?: (action: InfiniteListAction, form: FormInstance<Values>, data?: Data[]) => void\n afterError?: (error: Error, action: InfiniteListAction, form: FormInstance<Values>) => void\n dataAdapter?: InfiniteListDataAdapter<Item, Values, Data>\n initialPageParam?: any\n footer?: (data: Data[] | undefined) => ReactNode\n}\n\n// 常量定义(对齐 QueryList 行为)\nconst DEFAULT_CACHE_TIME = 5 * 60 * 1000\nconst DEFAULT_STALE_TIME = 30 * 1000\n\nconst SPIN_STYLE: React.CSSProperties = {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: 300,\n}\n\n// 生成唯一 identifier 的计数器\nlet identifierCounter = 0\nconst generateUniqueIdentifier = (): string => `infiniteList_${Date.now()}_${++identifierCounter}`\n\nconst InternalInfiniteList = <Item extends AnyObject, Values extends object | undefined = undefined, Data = any>(\n props: InfiniteListProps<Item, Values, Data>,\n ref: Ref<InfiniteListRef<Item, Values, Data>>,\n) => {\n const defaultDataAdapter: InfiniteListDataAdapter<Item, Values, Data> = {\n items: (data: Data[] | undefined) => {\n if (!data) return []\n return data.flatMap((page: any) => page?.list || page || [])\n },\n hasMore: (lastPage: Data | undefined): boolean => {\n if (!lastPage) return false\n const page = lastPage as any\n return page?.hasMore || page?.has_more || false\n },\n nextPageParam: (lastPage: Data | undefined, allPages: Data[], _pageParam: any): any => {\n const hasMore = (page: Data | undefined): boolean => {\n if (!page) return false\n const pageData = page as any\n return pageData?.hasMore || pageData?.has_more || false\n }\n return hasMore(lastPage) ? allPages.length : undefined\n },\n }\n\n const internalProps: InfiniteListProps<Item, Values, Data> & {\n refreshInterval: number\n initialPageParam: any\n } = {\n refreshInterval: 0,\n initialPageParam: 0,\n ...props,\n dataAdapter: {\n ...defaultDataAdapter,\n ...props.dataAdapter,\n },\n }\n\n const {\n identifier,\n code,\n buttonsAlign,\n showReset,\n refreshInterval,\n request,\n tableExtra,\n renderForm,\n afterSuccess,\n afterError,\n dataAdapter,\n initialPageParam,\n footer,\n form,\n ...tableProps\n } = internalProps\n const { t } = useTranslation()\n const [_form] = Form.useForm<Values>(form)\n const [isValid, setIsValid] = useState(false)\n const shouldPoll = useRef(false)\n const action = useRef(InfiniteListAction.Init)\n const ky = useKy()\n\n const { data: accessible, isLoading: isChecking } = usePermission(code)\n\n // 生成或使用提供的 identifier\n const finalIdentifier = useMemo(() => identifier || generateUniqueIdentifier(), [identifier])\n\n // 订阅当前 identifier 的 payload,驱动 queryKey 与渲染\n const subscribedPayload = useInfiniteListStore(s => s.getPayload(finalIdentifier))\n\n // 获取当前表单值\n const formInstance = useMemo(() => _form, [_form])\n\n // 构建请求参数\n const {\n url,\n method = 'GET',\n body,\n params,\n headers,\n cacheTime = DEFAULT_CACHE_TIME,\n staleTime = DEFAULT_STALE_TIME,\n } = request\n const requestHeaders = useMemo(\n () => (typeof headers === 'function' ? headers(formInstance) : headers),\n [headers, formInstance],\n )\n // 请求参数和 body 将在 queryFn 中动态构建,因为它们依赖于 pageParam\n\n // 构建查询键\n const queryKey = useMemo(() => {\n return ['infiniteList', url, finalIdentifier, accessible, isValid, subscribedPayload, requestHeaders]\n }, [url, finalIdentifier, accessible, isValid, subscribedPayload, requestHeaders])\n\n const { data, fetchNextPage, hasNextPage, isFetchingNextPage, refetch, isFetching } = useInfiniteQuery({\n queryKey,\n queryFn: async ({ pageParam = initialPageParam }) => {\n try {\n const payload = subscribedPayload\n\n // 动态构建请求参数,包含 pageParam\n const requestParams = typeof params === 'function' ? params(payload, pageParam) : params\n const requestBody = typeof body === 'function' ? body(payload, pageParam) : body\n\n const kyOptions: KyOptions = {\n method: method as any,\n searchParams: requestParams,\n headers: requestHeaders,\n }\n\n if (requestBody) {\n if (requestBody instanceof FormData) {\n kyOptions.body = requestBody\n } else {\n kyOptions.json = requestBody\n }\n }\n\n const response = await ky.request<Data>({ url, ...kyOptions })\n shouldPoll.current = true\n afterSuccess?.(action.current, formInstance, [response])\n return response\n } catch (err) {\n const errorObj = err instanceof Error ? err : new Error(String(err))\n afterError?.(errorObj, action.current, formInstance)\n throw errorObj\n }\n },\n initialPageParam,\n getNextPageParam: (lastPage: Data, allPages: Data[]) => {\n return dataAdapter?.nextPageParam?.(lastPage, allPages, initialPageParam)\n },\n enabled: accessible && isValid,\n retry: (failureCount, retryError) => {\n if (failureCount >= 3) return false\n if (retryError?.message?.includes('401')) return false\n return true\n },\n retryDelay: attemptIndex => Math.min(1000 * 2 ** attemptIndex, 30000),\n refetchOnWindowFocus: false,\n refetchInterval: shouldPoll.current ? refreshInterval : 0,\n gcTime: cacheTime,\n staleTime,\n })\n\n // 在组件挂载时注册实例\n useEffect(() => {\n useInfiniteListStore.getState().registerInstance(finalIdentifier, url, queryKey, refetch, fetchNextPage)\n return () => {\n useInfiniteListStore.getState().unregisterInstance(finalIdentifier)\n }\n }, [finalIdentifier, url, queryKey, refetch, fetchNextPage])\n\n const dataSource = dataAdapter?.items?.(data?.pages, formInstance)\n const isLoadingMore = isFetchingNextPage\n const isReachingEnd = !hasNextPage\n const isEmpty = !dataSource || dataSource.length === 0\n\n const onConfirm = async () => {\n action.current = InfiniteListAction.Confirm\n const values = await _form.getFieldsValue()\n\n try {\n await _form.validateFields()\n setIsValid(true)\n\n // 更新 store 中的 payload\n useInfiniteListStore.getState().refetch(finalIdentifier, { page: 0, filters: values })\n } catch {\n setIsValid(false)\n }\n }\n\n const loadMore = () => {\n action.current = InfiniteListAction.LoadMore\n fetchNextPage()\n }\n\n const onReset = async () => {\n action.current = InfiniteListAction.Reset\n try {\n _form.resetFields()\n const values = await _form.getFieldsValue()\n\n // 重置 store 中的 payload\n useInfiniteListStore.getState().updatePayload(finalIdentifier, { page: 0, filters: values })\n\n await _form.validateFields({ validateOnly: true })\n useInfiniteListStore.getState().refetch(finalIdentifier)\n } catch {\n // Handle validation error\n }\n }\n\n useEffect(() => {\n setTimeout(() => {\n if (accessible) {\n _form\n .validateFields({ validateOnly: true })\n .then(values => {\n setIsValid(true)\n\n // 初始化 store 中的 payload\n useInfiniteListStore.getState().updatePayload(finalIdentifier, { page: 0, filters: values })\n })\n .catch(() => {\n setIsValid(false)\n })\n }\n }, 300)\n }, [accessible, _form, finalIdentifier])\n\n useImperativeHandle(ref, () => ({\n data: data?.pages,\n dataSource,\n form: _form,\n refetch: () => useInfiniteListStore.getState().refetch(finalIdentifier),\n fetchNextPage: () => useInfiniteListStore.getState().fetchNextPage(finalIdentifier),\n hasNextPage: !!hasNextPage,\n isFetchingNextPage,\n }))\n\n if (isChecking) {\n return <Spin style={SPIN_STYLE} />\n }\n\n if (!accessible) {\n return <Result status={403} subTitle={t('global.noEntitlement')} />\n }\n\n const renderFooter = footer && (() => footer(data?.pages))\n\n const renderTableExtra = () => {\n if (typeof tableExtra === 'function') {\n return tableExtra(formInstance, data?.pages)\n }\n return tableExtra\n }\n\n const formRenderer =\n typeof renderForm === 'function' ? (\n <FilterFormWrapper\n showReset={showReset}\n buttonsAlign={buttonsAlign}\n isConfirming={isFetching}\n onReset={onReset}\n onConfirm={onConfirm}\n >\n {cloneElement(renderForm(_form), {\n onKeyUp: (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n onConfirm()\n }\n },\n })}\n </FilterFormWrapper>\n ) : (\n // 屏蔽 Form 组件的警告(Instance created by `useForm` is not connected to any Form element. Forget to pass `form` prop?)\n <Form form={_form} />\n )\n\n return (\n <>\n {formRenderer}\n {renderTableExtra()}\n <div style={{ minHeight: '400px' }}>\n <Table {...tableProps} dataSource={dataSource} loading={isFetching} pagination={false} footer={renderFooter} />\n </div>\n {!isEmpty && (\n <Button\n block\n loading={isLoadingMore}\n type=\"link\"\n htmlType=\"button\"\n disabled={isLoadingMore || isReachingEnd}\n onClick={loadMore}\n >\n {isLoadingMore\n ? t('InfiniteList.loadingText')\n : isReachingEnd\n ? t('InfiniteList.reachEndText')\n : t('InfiniteList.loadMoreText')}\n </Button>\n )}\n </>\n )\n}\n\nconst InfiniteList = forwardRef(InternalInfiniteList) as <\n Item extends AnyObject = AnyObject,\n Values extends object | undefined = undefined,\n Data = any,\n>(\n props: InfiniteListProps<Item, Values, Data> & { ref?: Ref<InfiniteListRef<Item, Values, Data>> },\n) => ReactElement\n\nexport default InfiniteList\n","import { create } from 'zustand'\nimport { createJSONStorage, persist } from 'zustand/middleware'\n\nexport interface NavState {\n openKeys: string[]\n selectedKeys: string[]\n setOpenKeys: (keys: string[]) => void\n setSelectedKeys: (keys: string[]) => void\n}\n\nexport const useNavStore = create<NavState>()(\n persist(\n (set, get) => ({\n openKeys: [],\n setOpenKeys: keys => {\n const current = get()\n // 避免不必要的状态更新 - 使用更高效的比较方式\n if (current.openKeys.length !== keys.length || !current.openKeys.every((key, index) => key === keys[index])) {\n set({ openKeys: keys })\n }\n },\n selectedKeys: [],\n setSelectedKeys: keys => {\n const current = get()\n // 避免不必要的状态更新 - 使用更高效的比较方式\n if (\n current.selectedKeys.length !== keys.length ||\n !current.selectedKeys.every((key, index) => key === keys[index])\n ) {\n set({ selectedKeys: keys })\n }\n },\n }),\n {\n name: 'nav',\n storage: createJSONStorage(() => localStorage),\n partialize: state => ({\n openKeys: state.openKeys,\n selectedKeys: state.selectedKeys,\n }),\n // 减少持久化频率,提升性能\n skipHydration: false,\n version: 1,\n },\n ),\n)\n","import type { ItemType, MenuDividerType } from 'antd/es/menu/interface'\nimport { memo } from 'react'\nimport { Link } from 'react-router-dom'\nimport type { Merge } from 'ts-essentials'\n\nimport type { MenuItemGroupType2, MenuItemType2, NavMenuItem, SubMenuType2 } from './types'\n\n// 优化 Link 组件,避免重复创建\nconst MemoizedLink = memo(({ to, children }: { to: string; children: React.ReactNode }) => (\n <Link to={to}>{children}</Link>\n))\n\nMemoizedLink.displayName = 'MemoizedLink'\n\n// 将自定义的菜单配置转换为 antd 的菜单配置,添加 react-router-dom Link 等。\nexport function transformItems(items?: NavMenuItem[]) {\n const result: ItemType[] = []\n\n if (items) {\n for (let i = 0; i < items.length; i++) {\n if (items[i] === null || (items[i] as MenuDividerType).type === 'divider') {\n result[i] = items[i] as null | MenuDividerType\n } else if ((items[i] as SubMenuType2 | MenuItemGroupType2).children) {\n const { children, ...rest } = items[i] as SubMenuType2 | MenuItemGroupType2\n result[i] = {\n ...rest,\n children: transformItems(children),\n }\n } else {\n const { route, label, ...rest } = items[i] as MenuItemType2\n const labelNode = route ? <MemoizedLink to={route}>{label}</MemoizedLink> : label\n\n result[i] = {\n ...rest,\n label: labelNode,\n }\n }\n }\n }\n\n return result\n}\n\n// 拍平导航配置,并且注入 keypath 字段\nexport function flatItems(\n items: NavMenuItem[],\n result: Merge<MenuItemType2, { keypath?: string[] }>[] = [],\n keypath: string[] = [],\n) {\n for (const item of items) {\n const children = (item as SubMenuType2 | MenuItemGroupType2)?.children as NavMenuItem[]\n\n if (Array.isArray(children)) {\n const keys =\n (item as MenuItemGroupType2).type !== 'group' && item!.key ? [...keypath, item!.key as string] : keypath\n flatItems(children, result, keys)\n } else if (item) {\n result.push(Object.assign(item as MenuItemType2, { keypath }))\n }\n }\n\n return result\n}\n","import type { MenuProps } from 'antd'\nimport { Menu, Spin } from 'antd'\nimport { memo, useCallback, useEffect, useMemo, useRef } from 'react'\nimport { useLocation } from 'react-router-dom'\n\nimport { useNavStore } from './stores'\nimport type { NavMenuItem } from './types'\nimport { flatItems, transformItems } from './utils'\n\nexport interface NavMenuProps {\n items?: NavMenuItem[]\n theme?: MenuProps['theme']\n loading?: boolean\n}\n\nconst NavMenu = memo(function NavMenu(props: NavMenuProps) {\n const { items = [], theme, loading } = props\n const location = useLocation()\n const previousItemsRef = useRef<NavMenuItem[]>()\n const previousLocationRef = useRef<string>()\n\n const flattenItems = useMemo(() => {\n if (previousItemsRef.current === items) {\n return previousItemsRef.current ? flatItems(previousItemsRef.current) : []\n }\n previousItemsRef.current = items\n return flatItems(items)\n }, [items])\n\n const internalItems = useMemo(() => {\n if (previousItemsRef.current === items) {\n return previousItemsRef.current ? transformItems(previousItemsRef.current) : []\n }\n return transformItems(items)\n }, [items])\n\n const { openKeys, selectedKeys, setOpenKeys, setSelectedKeys } = useNavStore()\n\n const onOpenChange = useCallback(\n (keys: string[]) => {\n // 找到新打开的菜单项\n const expandedKey = keys.find(key => !openKeys.includes(key))\n\n if (expandedKey) {\n // 展开操作:找到完整的层级路径\n const match = flattenItems.find(item => item.key === expandedKey)\n const fullPath = match?.keypath ? [...match.keypath, expandedKey] : [expandedKey]\n setOpenKeys(fullPath)\n } else {\n // 折叠操作:直接使用新的 keys\n setOpenKeys(keys)\n }\n },\n [flattenItems, openKeys, setOpenKeys],\n )\n\n useEffect(() => {\n // 避免不必要的重新计算\n if (previousLocationRef.current === location.pathname) {\n return\n }\n previousLocationRef.current = location.pathname\n\n const match = flattenItems.find(item => location.pathname === item.route)\n\n if (match) {\n const key = match.key as string\n const keypath = match.keypath as string[]\n\n // 批量更新状态以减少重新渲染\n if (selectedKeys[0] !== key || !openKeys.every((k, i) => k === keypath[i])) {\n setSelectedKeys([key])\n setOpenKeys(keypath)\n }\n }\n }, [flattenItems, location.pathname, selectedKeys, openKeys, setSelectedKeys, setOpenKeys])\n\n if (loading) {\n return (\n <div className=\"flex justify-center items-center\" style={{ height: 'calc(100vh - 64px)' }}>\n <Spin />\n </div>\n )\n }\n\n return (\n <Menu\n theme={theme}\n style={{ borderRight: 'none' }}\n items={internalItems}\n mode=\"inline\"\n openKeys={openKeys}\n selectedKeys={selectedKeys}\n onOpenChange={onOpenChange}\n />\n )\n})\n\nif (process.env.NODE_ENV === 'development') {\n NavMenu.displayName = 'NavMenu'\n}\n\nexport default NavMenu\n","import * as Antd from 'antd'\nimport { Empty } from 'antd'\nimport type { FC, PropsWithChildren } from 'react'\nimport { Fragment } from 'react'\n\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { PermissionVersion } from '@/constants'\nimport { useTranslation } from '@/locale'\nimport { useGames } from '@/services'\n\nconst { Spin } = Antd\n\nconst RequireGame: FC<PropsWithChildren> = ({ children }) => {\n const { permissionVersion, gameId, isGlobal } = useToolkitsStore(s => s)\n const { isLoading } = useGames()\n const { t } = useTranslation()\n\n if (isLoading) {\n return (\n <div\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: 400,\n }}\n >\n <Spin />\n </div>\n )\n }\n\n if (permissionVersion === PermissionVersion.V1 || isGlobal) {\n return children\n }\n\n if (!gameId) {\n return <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} description={t('RequireGame.description')} />\n }\n\n return <Fragment key={gameId}>{children}</Fragment>\n}\n\nexport default RequireGame\n","/* eslint-disable jsx-a11y/anchor-is-valid */\nimport { LogoutOutlined, UserOutlined } from '@ant-design/icons'\nimport type { MenuProps } from 'antd'\nimport { Dropdown, Space } from 'antd'\nimport type { FC, KeyboardEvent } from 'react'\nimport { useNavigate } from 'react-router-dom'\n\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { useTranslation } from '@/locale'\n\nconst UserWidget: FC = () => {\n const { t } = useTranslation()\n const navigate = useNavigate()\n const { clearToken, getUser, loginPath } = useToolkitsStore(s => s)\n const user = getUser()\n\n const handleSignOut = () => {\n clearToken()\n navigate(loginPath)\n }\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleSignOut()\n }\n }\n\n const handleDropdownKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n }\n }\n\n const items: MenuProps['items'] = [\n {\n key: '1',\n icon: <LogoutOutlined />,\n label: (\n <a role=\"button\" tabIndex={0} onClick={handleSignOut} onKeyDown={handleKeyDown}>\n {t('UserWidget.signOutText')}\n </a>\n ),\n },\n ]\n\n return (\n <div>\n <Dropdown\n menu={{\n selectable: true,\n items,\n }}\n placement=\"bottomRight\"\n >\n <a\n role=\"button\"\n tabIndex={0}\n onClick={e => {\n e.preventDefault()\n }}\n onKeyDown={handleDropdownKeyDown}\n >\n <Space align=\"center\">\n <span>{user?.authorityId}</span>\n <UserOutlined style={{ fontSize: '16px' }} />\n </Space>\n </a>\n </Dropdown>\n </div>\n )\n}\n\nexport default UserWidget\n","import { useQueryClient } from '@tanstack/react-query'\nimport type { SelectProps } from 'antd'\nimport { Select, Space, Typography } from 'antd'\nimport type { FC } from 'react'\nimport { useEffect } from 'react'\n\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { useTranslation } from '@/locale'\nimport { useGames } from '@/services'\n\nimport type { Game } from './types'\n\nconst { Text } = Typography\n\nexport interface GameSelectProps {\n filter?: (game: Game) => boolean\n options?: (data?: Game[]) => SelectProps['options']\n}\n\nconst GameSelect: FC<GameSelectProps> = props => {\n const { filter, options } = props\n const { t } = useTranslation()\n const { gameApiV2, gameId, setGameId } = useToolkitsStore(s => s)\n const { data, isLoading } = useGames()\n const queryClient = useQueryClient()\n\n const filteredData = data?.filter(item => filter?.(item) ?? true)\n\n const _options =\n typeof options === 'function'\n ? options(filteredData)\n : filteredData?.map(item => ({\n label: item.name,\n value: gameApiV2 ? item.game_id : item.id,\n }))\n\n // 切换游戏时清空 TanStack Query 缓存触发重新请求以更新视图。\n const onChange = (value: string | number) => {\n clearCache()\n setGameId(value)\n }\n\n const clearCache = () => {\n // 标记除游戏列表外的所有缓存为过期,保留现有数据直到新数据加载完成\n queryClient.invalidateQueries({\n predicate: query => {\n const queryKey = query.queryKey\n return !queryKey.includes('/api/game/list') && !queryKey.includes('/api/usystem/game/all')\n },\n })\n }\n\n useEffect(() => {\n if (data && data.length > 0) {\n const firstId = gameApiV2 ? data[0].game_id : data[0].id\n if (data.every(item => String(item.game_id || item.id) !== String(gameId))) {\n // 如果当前游戏 ID 不在数据中,则设置为第一个游戏 ID\n setGameId(firstId)\n }\n }\n }, [data])\n\n return (\n <Space>\n <Text>{t('GameSelect.label')}</Text>\n <Select<string | number>\n showSearch\n optionFilterProp=\"label\"\n value={gameId}\n placeholder={t('GameSelect.placeholder')}\n loading={isLoading}\n style={{ width: '200px' }}\n options={_options}\n onChange={onChange}\n />\n </Space>\n )\n}\n\nexport default GameSelect\n","import { memo } from 'react'\nimport { Link } from 'react-router-dom'\n\nimport { Logo } from '@/components/logo'\n\ninterface LayoutHeaderProps {\n title?: string\n subtitle?: string\n mainPagePath: string\n collapsed: boolean\n}\n\nconst LayoutHeader = memo<LayoutHeaderProps>(({ title, subtitle, mainPagePath, collapsed }) => (\n <div\n className=\"px-6 py-2 font-bold relative bg-gradient-to-r from-white to-gray-50/30\"\n style={{\n height: 'auto',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n backdropFilter: 'blur(4px)',\n WebkitBackdropFilter: 'blur(4px)',\n }}\n >\n <div className={`flex items-center w-full ${collapsed ? 'justify-center' : ''}`}>\n <Link\n to={mainPagePath}\n className=\"hover:opacity-80 transition-all duration-300 ease-out block rounded-lg p-1 hover:bg-white/50 hover:shadow-sm\"\n style={{\n transition: 'all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n opacity: collapsed ? 0.8 : 1,\n transform: collapsed ? 'translateX(0)' : 'translateX(0)',\n }}\n >\n <Logo\n width={36}\n style={{\n objectFit: 'contain',\n display: 'block',\n filter: 'drop-shadow(0 1px 1px rgba(0, 0, 0, 0.05))',\n transition: 'all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n }}\n />\n </Link>\n {title && (\n <div\n className=\"ml-4 overflow-hidden min-w-0\"\n style={{\n transition: 'all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n opacity: collapsed ? 0 : 1,\n width: collapsed ? '0px' : 'auto',\n marginLeft: collapsed ? '0px' : '16px',\n transform: collapsed ? 'translateX(-8px)' : 'translateX(0)',\n }}\n >\n <Link\n to={mainPagePath}\n className=\"text-xl leading-tight hover:text-blue-600 transition-all duration-300 font-bold text-ellipsis overflow-hidden whitespace-nowrap block bg-gradient-to-r from-gray-800 to-gray-600 bg-clip-text text-transparent hover:from-blue-600 hover:to-blue-500\"\n title={title}\n style={{\n letterSpacing: '0.02em',\n textShadow: '0 1px 2px rgba(0, 0, 0, 0.05)',\n }}\n >\n {title}\n </Link>\n </div>\n )}\n </div>\n <div\n className=\"w-full mt-2 overflow-hidden\"\n style={{\n height: subtitle && !collapsed ? '20px' : '1px',\n transition: 'height 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n }}\n >\n <div className=\"flex items-center justify-center h-full w-full\">\n <div\n className=\"w-full border-t border-gray-200 absolute\"\n style={{\n opacity: !subtitle || collapsed ? 1 : 0,\n transition: 'opacity 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n }}\n />\n {subtitle && (\n <div\n className=\"flex items-center w-full text-sm\"\n style={{\n opacity: collapsed ? 0 : 1,\n transform: collapsed ? 'translateY(-3px)' : 'translateY(0)',\n transition: 'all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n }}\n >\n <div className=\"flex-1 border-t border-gray-200\"></div>\n <span className=\"px-3 text-gray-500 font-medium whitespace-nowrap\" title={subtitle}>\n {subtitle}\n </span>\n <div className=\"flex-1 border-t border-gray-200\"></div>\n </div>\n )}\n </div>\n </div>\n </div>\n))\n\nLayoutHeader.displayName = 'LayoutHeader'\n\nexport default LayoutHeader\n","import type { DetailedHTMLProps, FC, ImgHTMLAttributes } from 'react'\n\nimport logoUrl from './logo.png'\n\nexport type LogoProps = Omit<DetailedHTMLProps<ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement>, 'src' | 'alt'>\n\nconst Logo: FC<LogoProps> = props => {\n return <img src={logoUrl} alt=\"logo\" {...props} />\n}\n\nexport default Logo\n","import { MenuFoldOutlined, MenuUnfoldOutlined } from '@ant-design/icons'\nimport { Button, Divider, Space } from 'antd'\nimport * as Antd from 'antd'\nimport type { FC, Key, PropsWithChildren, ReactNode } from 'react'\nimport { Suspense, useState } from 'react'\n\nimport type { NavMenuItem } from '@/components/navMenu'\nimport { NavMenu } from '@/components/navMenu'\nimport { RequireGame } from '@/components/requireGame'\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { UserWidget } from '@/components/userWidget'\nimport { PermissionVersion } from '@/constants'\n\nimport type { GameSelectProps } from './GameSelect'\nimport GameSelect from './GameSelect'\nimport LayoutHeader from './LayoutHeader'\n\nconst { Spin, theme } = Antd\nconst { Header, Sider, Content } = Antd.Layout\n\ntype HeaderExtra = { key: Key; children: ReactNode }\n\nexport interface LayoutProps extends Pick<GameSelectProps, 'filter'> {\n collapsible?: boolean\n isMenuLoading?: boolean\n items?: NavMenuItem[]\n navWidth?: string | number\n gameSelectOptions?: GameSelectProps['options']\n headerExtra?: {\n left?: HeaderExtra[]\n right?: HeaderExtra[]\n }\n title?: string\n subtitle?: string\n}\n\nconst Layout: FC<PropsWithChildren<LayoutProps>> = props => {\n const {\n collapsible,\n isMenuLoading,\n items,\n headerExtra,\n children,\n navWidth,\n filter,\n gameSelectOptions,\n title,\n subtitle,\n } = props\n const {\n token: { colorBgContainer, colorBorder },\n } = theme.useToken()\n const {\n permissionVersion,\n navWidth: globalNavWidth,\n collapsible: globalCollapsible,\n mainPagePath,\n collapsed,\n setContext,\n isGlobal,\n } = useToolkitsStore()\n\n const [internalCollapsed, setInternalCollapsed] = useState(collapsed)\n\n const onCollapse = async () => {\n setInternalCollapsed(!internalCollapsed)\n setContext({ collapsed: !internalCollapsed })\n }\n\n const internalCollapsible = collapsible ?? globalCollapsible ?? false\n\n return (\n <Antd.Layout>\n <Sider\n collapsible={internalCollapsible}\n theme=\"light\"\n trigger={null}\n collapsed={internalCollapsed}\n width={navWidth ?? globalNavWidth}\n style={{\n height: '100vh',\n overflowX: 'hidden',\n overflowY: 'auto',\n borderRightWidth: 1,\n borderRightStyle: 'solid',\n borderRightColor: colorBorder,\n transition: 'all 0.2s cubic-bezier(0.645, 0.045, 0.355, 1)',\n }}\n >\n <LayoutHeader\n title={title}\n subtitle={subtitle}\n mainPagePath={mainPagePath}\n collapsed={internalCollapsed || false}\n />\n <NavMenu items={items} loading={isMenuLoading} />\n </Sider>\n <Antd.Layout>\n <Header\n style={{\n padding: '0 24px',\n background: colorBgContainer,\n }}\n >\n <div className=\"flex justify-between items-center h-full\">\n <Space size=\"small\" split={<Divider type=\"vertical\" />} className=\"mr-6\">\n {internalCollapsible && (\n <Button\n type=\"text\"\n icon={internalCollapsed ? <MenuUnfoldOutlined /> : <MenuFoldOutlined />}\n style={{ fontSize: '16px' }}\n onClick={onCollapse}\n />\n )}\n {permissionVersion !== PermissionVersion.V1 && !isGlobal && (\n <GameSelect filter={filter} options={gameSelectOptions} />\n )}\n {headerExtra?.left?.map(extra => <span key={extra.key}>{extra.children}</span>)}\n </Space>\n <Space size=\"small\" split={<Divider type=\"vertical\" />}>\n {headerExtra?.right?.map(extra => <span key={extra.key}>{extra.children}</span>)}\n <UserWidget />\n </Space>\n </div>\n </Header>\n <Content\n style={{\n overflow: 'auto',\n padding: '24px 16px',\n maxHeight: 'calc(100vh - 64px)',\n transition: 'margin-left 0.2s cubic-bezier(0.645, 0.045, 0.355, 1)',\n }}\n >\n <Suspense\n fallback={\n <Spin\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: '200px',\n }}\n />\n }\n >\n <RequireGame>{children}</RequireGame>\n </Suspense>\n </Content>\n </Antd.Layout>\n </Antd.Layout>\n )\n}\n\nexport default Layout\n","import { Button, Result, Spin } from 'antd'\nimport type { Options as KyOptions } from 'ky'\nimport type { FC, PropsWithChildren } from 'react'\nimport { useNavigate } from 'react-router-dom'\n\nimport { useTranslation } from '@/locale'\nimport { usePermission } from '@/services'\n\nexport interface RequireAuthProps {\n /** 权限码 */\n code: string\n /** 请求配置 */\n config?: KyOptions\n /** 无权限时点击返回按钮跳转的路径,默认为首页 '/' */\n redirectPath?: string\n}\n\n/**\n * 授权保护组件\n * 根据权限码控制子组件的访问权限\n * - 有权限:渲染子组件\n * - 无权限:显示 403 无权限页面,可点击按钮返回指定路径\n * - 加载中:显示加载动画\n */\nconst RequireAuth: FC<PropsWithChildren<RequireAuthProps>> = props => {\n const { code, config, redirectPath = '/', children } = props\n const { data: accessible, isLoading } = usePermission(code, config)\n const { t } = useTranslation()\n const navigate = useNavigate()\n\n if (isLoading) {\n return (\n <Spin\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: 200,\n }}\n />\n )\n }\n\n if (!accessible) {\n return (\n <Result\n status=\"403\"\n subTitle={t('global.noEntitlement')}\n extra={\n <Button type=\"primary\" onClick={() => navigate(redirectPath)}>\n {t('global.back')}\n </Button>\n }\n />\n )\n }\n\n return <>{children}</>\n}\n\nexport default RequireAuth\n","import { createVisibilityStore } from '@/utils'\n\nexport const useDrawerStore = createVisibilityStore()\n","import type { DrawerProps } from 'antd'\nimport { Button, Drawer } from 'antd'\nimport type { ComponentProps, ReactNode } from 'react'\nimport { useCallback, useEffect, useMemo, useState } from 'react'\n\nimport { generateId } from '@/utils'\n\nimport { useDrawerStore } from './stores'\n\nexport interface UseDrawerOperation {\n hide: () => void\n}\n\nexport interface UseDrawerProps extends Omit<DrawerProps, 'open' | 'confirmLoading' | 'onClose' | 'footer'> {\n content?: ReactNode | ((operation: UseDrawerOperation) => ReactNode)\n onConfirm?: () => void | Promise<void>\n afterOpen?: () => void | Promise<void>\n afterClose?: () => void | Promise<void>\n footer?: ReactNode | null\n confirmText?: string\n cancelText?: string\n confirmButtonProps?: ComponentProps<typeof Button>\n cancelButtonProps?: ComponentProps<typeof Button>\n}\n\nexport function useDrawer(props: UseDrawerProps) {\n const {\n content,\n onConfirm,\n afterOpen,\n afterClose,\n footer,\n confirmText = '确认',\n cancelText = '取消',\n confirmButtonProps,\n cancelButtonProps,\n ...drawerProps\n } = props\n\n const _id = useMemo(() => generateId(), [])\n const { show, hide, isOpen, cleanup } = useDrawerStore()\n\n // 组件销毁时清理 ID\n useEffect(() => {\n return () => {\n cleanup(_id)\n }\n }, [_id, cleanup])\n\n const open = isOpen(_id)\n const [confirmLoading, setConfirmLoading] = useState(false)\n const isRenderFunction = typeof content === 'function'\n\n const _show = useCallback(async () => {\n show(_id)\n await afterOpen?.()\n }, [_id, show, afterOpen])\n\n const _hide = useCallback(() => {\n hide(_id)\n }, [_id, hide])\n\n const onClose: DrawerProps['onClose'] = useCallback(async () => {\n _hide()\n await afterClose?.()\n }, [_hide, afterClose])\n\n const handleConfirm = useCallback(async () => {\n try {\n setConfirmLoading(true)\n await onConfirm?.()\n } catch (error) {\n console.error('Drawer confirm error:', error)\n throw error\n } finally {\n setConfirmLoading(false)\n }\n }, [onConfirm])\n\n const drawerFooter =\n footer !== undefined ? (\n footer\n ) : (\n <div className=\"flex gap-4 mx-4\">\n <Button type=\"primary\" loading={confirmLoading} {...confirmButtonProps} onClick={handleConfirm}>\n {confirmText}\n </Button>\n <Button {...cancelButtonProps} onClick={onClose}>\n {cancelText}\n </Button>\n </div>\n )\n\n const internalDrawer = (\n <Drawer {...drawerProps} open={open} footer={drawerFooter} onClose={onClose}>\n {isRenderFunction ? content({ hide: _hide }) : content}\n </Drawer>\n )\n\n return {\n id: _id,\n show: _show,\n hide: _hide,\n confirmLoading,\n drawer: internalDrawer,\n }\n}\n","import type { FormInstance, FormProps } from 'antd'\nimport { Form } from 'antd'\nimport type { AnyObject } from 'antd/es/_util/type'\nimport type { ReactNode } from 'react'\nimport { useCallback, useState } from 'react'\n\nimport type { RecursivePartial } from '@/types'\n\nimport { useDrawer, type UseDrawerOperation, type UseDrawerProps } from './drawer'\n\nexport interface ShowFormOptions<Values extends AnyObject, ExtraValues> {\n initialValues?: RecursivePartial<Values>\n extraValues?: ExtraValues\n}\n\nexport interface UseFormDrawerProps<Values extends AnyObject = AnyObject, ExtraValues = Record<string, unknown>>\n extends Omit<UseDrawerProps, 'onConfirm' | 'content' | 'onShow' | 'afterClose'> {\n formProps?: Omit<FormProps, 'form'>\n form?: FormInstance<Values>\n content?: ReactNode | ((extraValues: ExtraValues, operation: UseDrawerOperation) => ReactNode)\n onConfirm?: (values: Values, extraValues: ExtraValues) => void | Promise<void>\n onSuccess?: () => void\n afterClose?: (form: FormInstance<Values>) => void\n}\n\nexport interface UseFormDrawerReturn<Values extends AnyObject, ExtraValues> {\n id: number\n show: (options?: ShowFormOptions<Values, ExtraValues>) => void\n hide: () => void\n drawer: ReactNode\n}\n\nexport function useFormDrawer<Values extends AnyObject = AnyObject, ExtraValues = Record<string, unknown>>(\n props: UseFormDrawerProps<Values, ExtraValues>,\n): UseFormDrawerReturn<Values, ExtraValues> {\n const { content, form, formProps, onConfirm, onSuccess, afterClose, ...drawerProps } = props\n const [internalExtraValues, setInternalExtraValues] = useState<ExtraValues>({} as ExtraValues)\n const [internalForm] = Form.useForm<Values>(form)\n\n const isRenderFunction = typeof content === 'function'\n\n const { id, show, hide, drawer } = useDrawer({\n ...drawerProps,\n content: operation => (\n <Form {...formProps} form={internalForm}>\n {isRenderFunction ? content(internalExtraValues, operation) : content}\n </Form>\n ),\n onConfirm: async () => {\n try {\n const values = await internalForm.validateFields()\n await onConfirm?.(values, internalExtraValues)\n onSuccess?.()\n hide()\n } catch (error) {\n console.error('Form validation or submission error:', error)\n throw error\n }\n },\n afterClose: () => {\n setInternalExtraValues({} as ExtraValues)\n afterClose?.(internalForm)\n },\n })\n\n const showForm = useCallback(\n (options?: ShowFormOptions<Values, ExtraValues>) => {\n const { initialValues, extraValues } = options || {}\n\n if (extraValues !== undefined) {\n setInternalExtraValues(extraValues)\n }\n\n if (initialValues) {\n internalForm.setFieldsValue(initialValues)\n }\n\n show()\n },\n [internalForm, show],\n )\n\n return {\n id,\n show: showForm,\n hide,\n drawer,\n }\n}\n","import { lazy } from 'react'\nimport { Route, Routes } from 'react-router-dom'\n\nconst MenuItemList = lazy(() => import('./pages/menuItemList'))\nconst CreateMenuItem = lazy(() => import('./pages/createMenuItem'))\nconst UpdateMenuItem = lazy(() => import('./pages/updateMenuItem'))\n\nexport default (\n <Routes>\n <Route index element={<MenuItemList />} />\n <Route path=\"create\" element={<CreateMenuItem />} />\n <Route path=\"update/:id\" element={<UpdateMenuItem />} />\n </Routes>\n)\n","import { lazy } from 'react'\nimport { Navigate, Route, Routes } from 'react-router-dom'\n\nconst UserList = lazy(() => import('./pages/userList'))\nconst UserDetail = lazy(() => import('./pages/userDetail'))\nconst RoleList = lazy(() => import('./pages/roleList'))\nconst RoleDetail = lazy(() => import('./pages/roleDetail'))\n\nexport default (\n <Routes>\n <Route index element={<Navigate to=\"user\" />} />\n <Route path=\"user\" element={<UserList />} />\n <Route path=\"user/:id\" element={<UserDetail />} />\n <Route path=\"role\" element={<RoleList />} />\n <Route path=\"role/:name\" element={<RoleDetail />} />\n </Routes>\n)\n","import { Button, Result } from 'antd'\nimport type { FC } from 'react'\nimport { useNavigate } from 'react-router-dom'\n\nimport { useTranslation } from '@/locale'\n\ninterface NotFoundProps {\n redirectUrl?: string\n}\n\nconst NotFound: FC<NotFoundProps> = props => {\n const { redirectUrl } = props\n const navigate = useNavigate()\n const { t } = useTranslation()\n\n return (\n <div className=\"text-center\">\n <Result\n status=\"404\"\n title=\"404\"\n subTitle={t('NotFound.subTitle')}\n extra={\n redirectUrl && (\n <Button\n type=\"primary\"\n onClick={() => {\n navigate(redirectUrl)\n }}\n >\n {t('NotFound.buttonText')}\n </Button>\n )\n }\n />\n </div>\n )\n}\n\nexport default NotFound\n","import { Card, Form, Input, Select } from 'antd'\nimport type { ColumnsType } from 'antd/es/table'\nimport dayjs from 'dayjs'\nimport type { FC } from 'react'\n\nimport { ExpandableParagraph } from '@/components/expandableParagraph'\nimport { QueryList } from '@/components/queryList'\nimport { withContext } from '@/components/toolkitsProvider'\nimport { useTranslation } from '@/locale'\n\nimport type { OperationLogListItem } from './types'\n\nconst { Option } = Select\n\nconst OperationLogList: FC = () => {\n const { t } = useTranslation()\n\n const columns: ColumnsType<OperationLogListItem> = [\n {\n key: 'username',\n title: t('global.username'),\n dataIndex: 'uname',\n width: 100,\n },\n {\n key: 'label',\n title: t('global.label'),\n dataIndex: 'label',\n width: 150,\n },\n {\n key: 'method',\n title: t('global.method'),\n dataIndex: 'method',\n width: 100,\n },\n {\n key: 'route',\n title: t('global.route'),\n dataIndex: 'route',\n width: 200,\n },\n {\n key: 'request',\n title: t('global.request'),\n dataIndex: 'request',\n render(value: string) {\n return <ExpandableParagraph>{value}</ExpandableParagraph>\n },\n },\n {\n key: 'response',\n title: t('global.response'),\n dataIndex: 'response',\n render(value: string) {\n return <ExpandableParagraph>{value}</ExpandableParagraph>\n },\n },\n {\n key: 'creation_time',\n title: t('global.creationTime'),\n dataIndex: 'ctime',\n width: 200,\n render(value: string) {\n return dayjs(value).format('YYYY-MM-DD HH:mm:ss')\n },\n },\n ]\n\n return (\n <Card title=\"操作日志\">\n <QueryList<\n OperationLogListItem,\n {\n uname?: string\n route?: string\n method?: 'get' | 'post'\n label?: string\n },\n { List: OperationLogListItem[]; Total: number }\n >\n identifier=\"operation-log-list\"\n rowKey=\"id\"\n code=\"300001\"\n columns={columns}\n tableLayout=\"fixed\"\n request={{\n url: '/api/usystem/log/list',\n method: 'GET',\n }}\n dataAdapter={data => ({\n total: data?.Total,\n items: data?.List,\n })}\n renderForm={form => (\n <Form form={form} layout=\"inline\">\n <Form.Item label={t('global.username')} name=\"uname\">\n <Input allowClear />\n </Form.Item>\n <Form.Item label={t('global.route')} name=\"route\">\n <Input allowClear />\n </Form.Item>\n <Form.Item label={t('global.method')} name=\"method\">\n <Select allowClear style={{ width: '100px' }}>\n <Option value=\"get\">GET</Option>\n <Option value=\"post\">POST</Option>\n </Select>\n </Form.Item>\n <Form.Item label={t('global.label')} name=\"label\">\n <Input allowClear />\n </Form.Item>\n </Form>\n )}\n />\n </Card>\n )\n}\n\nexport default withContext(OperationLogList, { isGlobal: true })\n","import { useQuery } from '@tanstack/react-query'\nimport { useEffect, useMemo, useState } from 'react'\n\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { useKy } from '@/libs'\n\n/**\n * 处理登录页面的票据逻辑和未注册用户提示\n */\nexport function useTicketLogin() {\n const ky = useKy()\n const { setToken } = useToolkitsStore()\n\n // 解析 URL 参数\n const { ticket, unregisteredFromUrl } = useMemo(() => {\n const queryParams = new URLSearchParams(window.location.search)\n return {\n ticket: queryParams.get('ticket'),\n unregisteredFromUrl: queryParams.get('unregistered') === 'true',\n }\n }, [])\n\n // 初始化未注册状态\n const [isUnregistered, setIsUnregistered] = useState(unregisteredFromUrl)\n\n // 使用票据登录\n const { data, isLoading, error } = useQuery({\n queryKey: ['ticket-login', ticket],\n queryFn: () => ky.get<{ token: string }>(`/api/usystem/user/login?ticket=${ticket}`),\n enabled: !!ticket,\n retry: false,\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n })\n\n // 处理登录成功和错误\n useEffect(() => {\n if (data?.token) {\n setToken(data.token)\n } else if (error && 'response' in error && (error.response as { status?: number })?.status === 403) {\n setIsUnregistered(true)\n }\n }, [data, error, setToken])\n\n // 关闭未注册提示\n const dismissUnregistered = useMemo(\n () => () => {\n setIsUnregistered(false)\n // 清理 URL 参数\n if (unregisteredFromUrl) {\n const url = new URL(window.location.href)\n url.searchParams.delete('unregistered')\n window.history.replaceState({}, '', url.toString())\n }\n },\n [unregisteredFromUrl],\n )\n\n return {\n hasTicket: !!ticket,\n isLoading,\n error,\n isUnregistered,\n dismissUnregistered,\n }\n}\n","import { Alert, Button, Divider, Form, Input, Space, Spin, Typography } from 'antd'\nimport type { FC, ReactNode } from 'react'\nimport { Navigate } from 'react-router-dom'\n\nimport { Logo } from '@/components/logo'\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { SSO_URL } from '@/constants'\nimport { useTranslation } from '@/locale'\n\nimport backgroundUrl from './background.svg'\nimport { useTicketLogin } from './hooks'\n\ninterface SignInProps {\n extra?: ReactNode\n title?: string\n}\n\nconst SignIn: FC<SignInProps> = ({ extra, title }) => {\n const { token, mainPagePath } = useToolkitsStore(s => s)\n const { t } = useTranslation()\n const { isLoading, isUnregistered, dismissUnregistered } = useTicketLogin()\n\n if (isLoading) {\n return (\n <div className=\"w-screen h-screen flex justify-center items-center\">\n <Spin />\n </div>\n )\n }\n\n if (token) {\n const hashMode = !!window.location.hash\n const path = mainPagePath\n\n if (!hashMode) {\n return <Navigate replace to={mainPagePath} />\n }\n\n // 移除 ticket\n window.location.href = `${window.location.origin}${window.location.pathname}#${path}`\n\n return null\n }\n\n return (\n <div className=\"w-screen h-screen relative flex overflow-hidden\">\n <div className=\"absolute top-16 right-16 z-10\">{extra}</div>\n <div className=\"absolute left-14 top-6\">\n <Space align=\"center\">\n <Logo width={48} />\n {title && <span className=\"text-2xl font-bold\">{title}</span>}\n </Space>\n </div>\n <div className=\"flex-1 flex justify-center items-center bg-slate-50\">\n <img src={backgroundUrl} alt=\"background\" className=\"w-10/12\" />\n </div>\n <div className=\"w-[650px] relative top-0 left-0 right-0 bottom-0\">\n <div className=\"absolute top-1/2 -translate-y-1/2 left-0 right-0\">\n <div className=\"-translate-y-10 px-36\">\n <div className=\"flex flex-col justify-center\">\n <div className=\"h-10\">\n {isUnregistered && (\n <Alert\n banner\n closable\n message={t('SignIn.unregistered')}\n type=\"error\"\n onClose={dismissUnregistered}\n />\n )}\n </div>\n <Typography.Title level={2}>{t('SignIn.welcome')}</Typography.Title>\n <div className=\"mt-4\">\n <Form layout=\"vertical\" autoComplete=\"off\">\n <Form.Item label={t('global.username')} name=\"username\" rules={[{ required: true }]}>\n <Input />\n </Form.Item>\n <Form.Item label={t('global.password')} name=\"password\" rules={[{ required: true }]}>\n <Input.Password />\n </Form.Item>\n <Form.Item>\n <Button block type=\"primary\" shape=\"round\" htmlType=\"submit\">\n {t('global.signIn')}\n </Button>\n </Form.Item>\n </Form>\n </div>\n <Divider plain dashed>\n {t('SignIn.thirdParty')}\n </Divider>\n <div className=\"flex justify-center items-center\">\n <Button\n block\n shape=\"round\"\n href={`${SSO_URL}/logout?service=${SSO_URL}/login?service=${window.location.href}`}\n target=\"_self\"\n >\n <Logo width={18} />\n {t('SignIn.signInWithIDass')}\n </Button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n )\n}\n\nexport default SignIn\n"]}
@@ -1,2 +1,2 @@
1
- import {c}from'./chunk-MFVQ4PJU.js';import {c as c$1,e,b as b$1}from'./chunk-T2ZOW3WL.js';import {a}from'./chunk-TLXOBLJT.js';import {b}from'./chunk-7KC4QGFG.js';import {j}from'./chunk-EKBAANKX.js';import {App,Card,Button,Space,Popconfirm}from'antd';import {useNavigate}from'react-router-dom';import {jsx,Fragment,jsxs}from'react/jsx-runtime';var M=j(()=>{let{t:n}=a(),{message:y}=App.useApp(),f=c(),{refetch:g}=c$1(),{refetch:h}=b(),m=useNavigate();return jsx(Fragment,{children:jsx(Card,{title:"\u83DC\u5355\u7BA1\u7406",extra:jsx(Button,{type:"primary",onClick:()=>{m("./create");},children:"\u521B\u5EFA\u83DC\u5355\u9879"}),children:jsx(e,{identifier:"menu-item-list",onePage:!0,code:"9900001",rowKey:"id",columns:[{title:"\u83DC\u5355\u540D\u79F0",dataIndex:"category",key:"category"},{title:"\u524D\u7AEF\u8DEF\u7531",dataIndex:"front_route"},{title:"Order",dataIndex:"order"},{title:"Is Common",dataIndex:"is_common",key:"is_common",render:o=>o?"\u662F":"\u5426"},{title:"\u6A21\u677F\u540D\u79F0",dataIndex:"model_name",key:"model_name"},{title:"\u64CD\u4F5C",key:"action",width:150,align:"center",render(o,t){return t.is_model?jsxs(Space,{size:"small",children:[jsx(Button,{type:"link",onClick:()=>{m(`./update/${t.id}`);},children:n("global.update")}),jsx(Popconfirm,{title:"\u5220\u9664\u83DC\u5355",placement:"topRight",description:jsxs(b$1,{texts:[t.category],children:["\u786E\u5B9A\u8981\u5220\u9664\u83DC\u5355 ",t.category," \u5417\uFF1F"]}),onConfirm:async()=>{await f.mutate(t.id),g("menu-item-list"),h(),y.success("\u5220\u9664\u6210\u529F");},children:jsx(Button,{danger:!0,type:"link",size:"small",children:n("global.delete")})})]}):null}}],request:{url:"/api/usystem/menu/list",method:"GET"},dataAdapter:o=>({items:o})})})})},{isGlobal:!0}),G=M;export{G as default};//# sourceMappingURL=menuItemList-BOXALHYO.js.map
2
- //# sourceMappingURL=menuItemList-BOXALHYO.js.map
1
+ import {c}from'./chunk-5AZUEAO6.js';import {c as c$1,e,b as b$1}from'./chunk-XJ4VOQSY.js';import {a}from'./chunk-FYDL6C7K.js';import {b}from'./chunk-ZFJEJO64.js';import {j}from'./chunk-ELWFPSZ3.js';import {App,Card,Button,Space,Popconfirm}from'antd';import {useNavigate}from'react-router-dom';import {jsx,Fragment,jsxs}from'react/jsx-runtime';var M=j(()=>{let{t:n}=a(),{message:y}=App.useApp(),f=c(),{refetch:g}=c$1(),{refetch:h}=b(),m=useNavigate();return jsx(Fragment,{children:jsx(Card,{title:"\u83DC\u5355\u7BA1\u7406",extra:jsx(Button,{type:"primary",onClick:()=>{m("./create");},children:"\u521B\u5EFA\u83DC\u5355\u9879"}),children:jsx(e,{identifier:"menu-item-list",onePage:!0,code:"9900001",rowKey:"id",columns:[{title:"\u83DC\u5355\u540D\u79F0",dataIndex:"category",key:"category"},{title:"\u524D\u7AEF\u8DEF\u7531",dataIndex:"front_route"},{title:"Order",dataIndex:"order"},{title:"Is Common",dataIndex:"is_common",key:"is_common",render:o=>o?"\u662F":"\u5426"},{title:"\u6A21\u677F\u540D\u79F0",dataIndex:"model_name",key:"model_name"},{title:"\u64CD\u4F5C",key:"action",width:150,align:"center",render(o,t){return t.is_model?jsxs(Space,{size:"small",children:[jsx(Button,{type:"link",onClick:()=>{m(`./update/${t.id}`);},children:n("global.update")}),jsx(Popconfirm,{title:"\u5220\u9664\u83DC\u5355",placement:"topRight",description:jsxs(b$1,{texts:[t.category],children:["\u786E\u5B9A\u8981\u5220\u9664\u83DC\u5355 ",t.category," \u5417\uFF1F"]}),onConfirm:async()=>{await f.mutate(t.id),g("menu-item-list"),h(),y.success("\u5220\u9664\u6210\u529F");},children:jsx(Button,{danger:!0,type:"link",size:"small",children:n("global.delete")})})]}):null}}],request:{url:"/api/usystem/menu/list",method:"GET"},dataAdapter:o=>({items:o})})})})},{isGlobal:!0}),G=M;export{G as default};//# sourceMappingURL=menuItemList-MSUEQLKS.js.map
2
+ //# sourceMappingURL=menuItemList-MSUEQLKS.js.map