react-toolkits 2.24.18 → 2.24.19

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 (113) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/lib/chunk-7X2LW6EY.js +73 -0
  3. package/lib/chunk-7X2LW6EY.js.map +1 -0
  4. package/lib/chunk-D75NVCYN.js +2 -0
  5. package/lib/chunk-D75NVCYN.js.map +1 -0
  6. package/lib/chunk-DLTAWT6S.js +2 -0
  7. package/lib/chunk-DLTAWT6S.js.map +1 -0
  8. package/lib/chunk-E6L6VKSV.js +227 -0
  9. package/lib/chunk-E6L6VKSV.js.map +1 -0
  10. package/lib/chunk-ESCBNFWD.js +498 -0
  11. package/lib/chunk-ESCBNFWD.js.map +1 -0
  12. package/lib/chunk-FSXYUF4U.js +276 -0
  13. package/lib/chunk-FSXYUF4U.js.map +1 -0
  14. package/lib/chunk-H5Y4DYUL.js +2 -0
  15. package/lib/chunk-H5Y4DYUL.js.map +1 -0
  16. package/lib/chunk-LXMQLSQY.js +46 -0
  17. package/lib/chunk-LXMQLSQY.js.map +1 -0
  18. package/lib/chunk-MTRFNFEM.js +2 -0
  19. package/lib/chunk-MTRFNFEM.js.map +1 -0
  20. package/lib/chunk-NNXVZIY2.js +2 -0
  21. package/lib/chunk-NNXVZIY2.js.map +1 -0
  22. package/lib/chunk-OH74GXG4.js +570 -0
  23. package/lib/chunk-OH74GXG4.js.map +1 -0
  24. package/lib/chunk-P25BHLH3.js +3 -0
  25. package/lib/chunk-P25BHLH3.js.map +1 -0
  26. package/lib/chunk-QACSRYJY.js +147 -0
  27. package/lib/chunk-QACSRYJY.js.map +1 -0
  28. package/lib/chunk-ST7VUWJ4.js +2 -0
  29. package/lib/chunk-ST7VUWJ4.js.map +1 -0
  30. package/lib/chunk-UPO7NB6O.js +2 -0
  31. package/lib/chunk-UPO7NB6O.js.map +1 -0
  32. package/lib/chunk-Z6PDWY44.js +17 -0
  33. package/lib/chunk-Z6PDWY44.js.map +1 -0
  34. package/lib/chunk-ZF7POJAA.js +2 -0
  35. package/lib/chunk-ZF7POJAA.js.map +1 -0
  36. package/lib/chunk-ZOHMJAAX.js +120 -0
  37. package/lib/chunk-ZOHMJAAX.js.map +1 -0
  38. package/lib/createMenuItem-CICLQWU6.js +86 -0
  39. package/lib/createMenuItem-CICLQWU6.js.map +1 -0
  40. package/lib/createMenuItem-SXFYDNCW.js +2 -0
  41. package/lib/createMenuItem-SXFYDNCW.js.map +1 -0
  42. package/lib/index.css +1 -1
  43. package/lib/index.d.ts +16 -11
  44. package/lib/index.js +2 -2
  45. package/lib/index.js.map +1 -1
  46. package/lib/menuItemList-EHQSS4YZ.js +132 -0
  47. package/lib/{menuItemList-VPYVIEYR.js.map → menuItemList-EHQSS4YZ.js.map} +1 -1
  48. package/lib/menuItemList-NIBRDRTA.js +2 -0
  49. package/lib/menuItemList-NIBRDRTA.js.map +1 -0
  50. package/lib/{roleDetail-EYQ2HREL.js → roleDetail-7HEBW7IS.js} +2 -2
  51. package/lib/roleDetail-7HEBW7IS.js.map +1 -0
  52. package/lib/roleDetail-JCDOXKAM.js +72 -0
  53. package/lib/roleDetail-JCDOXKAM.js.map +1 -0
  54. package/lib/roleList-4C77ULPK.js +161 -0
  55. package/lib/roleList-4C77ULPK.js.map +1 -0
  56. package/lib/roleList-WGLD3HXB.js +2 -0
  57. package/lib/roleList-WGLD3HXB.js.map +1 -0
  58. package/lib/updateMenuItem-K62CKVXP.js +109 -0
  59. package/lib/updateMenuItem-K62CKVXP.js.map +1 -0
  60. package/lib/updateMenuItem-TECCUD6Z.js +2 -0
  61. package/lib/updateMenuItem-TECCUD6Z.js.map +1 -0
  62. package/lib/userDetail-WGQJ7IC5.js +2 -0
  63. package/lib/userDetail-WGQJ7IC5.js.map +1 -0
  64. package/lib/userDetail-WYN52ZJ2.js +116 -0
  65. package/lib/userDetail-WYN52ZJ2.js.map +1 -0
  66. package/lib/{userList-AFTI4FQV.js → userList-2S2FRAG6.js} +2 -2
  67. package/lib/userList-2S2FRAG6.js.map +1 -0
  68. package/lib/userList-AMVG7RCE.js +195 -0
  69. package/lib/userList-AMVG7RCE.js.map +1 -0
  70. package/locale/context.js +7 -1
  71. package/locale/context.js.map +1 -1
  72. package/locale/en_GB.js +94 -1
  73. package/locale/en_GB.js.map +1 -1
  74. package/locale/hooks.js +18 -1
  75. package/locale/hooks.js.map +1 -1
  76. package/locale/index.d.ts +1 -1
  77. package/locale/index.js +2 -1
  78. package/locale/ja_JP.js +94 -1
  79. package/locale/ja_JP.js.map +1 -1
  80. package/locale/ko_KR.js +94 -1
  81. package/locale/ko_KR.js.map +1 -1
  82. package/locale/zh_CN.js +94 -1
  83. package/locale/zh_CN.js.map +1 -1
  84. package/package.json +10 -10
  85. package/lib/chunk-2OEQYX3O.js +0 -2
  86. package/lib/chunk-2OEQYX3O.js.map +0 -1
  87. package/lib/chunk-47QCX44D.js +0 -2
  88. package/lib/chunk-47QCX44D.js.map +0 -1
  89. package/lib/chunk-4EBAPE4B.js +0 -2
  90. package/lib/chunk-4EBAPE4B.js.map +0 -1
  91. package/lib/chunk-4XO7JAVX.js +0 -2
  92. package/lib/chunk-4XO7JAVX.js.map +0 -1
  93. package/lib/chunk-RMU775LC.js +0 -2
  94. package/lib/chunk-RMU775LC.js.map +0 -1
  95. package/lib/chunk-RPEFI7RP.js +0 -3
  96. package/lib/chunk-RPEFI7RP.js.map +0 -1
  97. package/lib/chunk-WOYFKIRH.js +0 -2
  98. package/lib/chunk-WOYFKIRH.js.map +0 -1
  99. package/lib/chunk-Y3RYS76E.js +0 -2
  100. package/lib/chunk-Y3RYS76E.js.map +0 -1
  101. package/lib/chunk-ZFIKMQD3.js +0 -2
  102. package/lib/chunk-ZFIKMQD3.js.map +0 -1
  103. package/lib/createMenuItem-SETFJ7U7.js +0 -2
  104. package/lib/createMenuItem-SETFJ7U7.js.map +0 -1
  105. package/lib/menuItemList-VPYVIEYR.js +0 -2
  106. package/lib/roleDetail-EYQ2HREL.js.map +0 -1
  107. package/lib/roleList-ZW4RLM25.js +0 -2
  108. package/lib/roleList-ZW4RLM25.js.map +0 -1
  109. package/lib/updateMenuItem-2ZS3SMYT.js +0 -2
  110. package/lib/updateMenuItem-2ZS3SMYT.js.map +0 -1
  111. package/lib/userDetail-5NE5PUBC.js +0 -2
  112. package/lib/userDetail-5NE5PUBC.js.map +0 -1
  113. package/lib/userList-AFTI4FQV.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # react-toolkits
2
2
 
3
+ ## 2.24.19
4
+
5
+ ### Patch Changes
6
+
7
+ - 8749bdc: chore: update dependencies and refactor components for improved functionality
8
+
3
9
  ## 2.24.18
4
10
 
5
11
  ### Patch Changes
@@ -0,0 +1,73 @@
1
+ import { __name, useKy, useToolkitsStore, queryKeys, APP_ID_HEADER } from './chunk-OH74GXG4.js';
2
+ import { useQuery } from '@tanstack/react-query';
3
+
4
+ function useAuth(code, config) {
5
+ const ky = useKy();
6
+ const { permissionVersion } = useToolkitsStore();
7
+ const permissionCodes = typeof code !== "undefined" ? typeof code === "string" ? [code] : code : [];
8
+ const version = permissionVersion !== "v1" /* V1 */ ? "v2" : "v1";
9
+ const { data, ...rest } = useQuery({
10
+ queryKey: queryKeys.permissions.check(permissionCodes, version),
11
+ queryFn: /* @__PURE__ */ __name(() => ky.post(
12
+ permissionVersion !== "v1" /* V1 */ ? "/api/usystem/user/checkV2" : "/api/usystem/user/check",
13
+ {
14
+ permissions: permissionCodes
15
+ },
16
+ config
17
+ ), "queryFn"),
18
+ enabled: permissionCodes.length > 0,
19
+ retry: false
20
+ });
21
+ let newData = true;
22
+ if (typeof code === "string") {
23
+ newData = data?.has_all ? true : data?.[code] ?? false;
24
+ } else if (Array.isArray(code) && code.length > 0) {
25
+ newData = permissionCodes.reduce((acc, curr) => {
26
+ acc[curr] = data?.has_all ? true : data?.[curr] ?? false;
27
+ return acc;
28
+ }, {});
29
+ }
30
+ return {
31
+ ...rest,
32
+ data: newData
33
+ };
34
+ }
35
+ __name(useAuth, "useAuth");
36
+ function useMenuList() {
37
+ const { loginPath, appId } = useToolkitsStore();
38
+ const ky = useKy();
39
+ return useQuery({
40
+ queryKey: queryKeys.menus.navbar(appId ? String(appId) : void 0),
41
+ queryFn: /* @__PURE__ */ __name(() => ky.get("/api/usystem/menu/navbar", {
42
+ headers: { [APP_ID_HEADER]: appId ? encodeURIComponent(String(appId)) : "global" }
43
+ }), "queryFn"),
44
+ enabled: window.location.pathname !== loginPath
45
+ });
46
+ }
47
+ __name(useMenuList, "useMenuList");
48
+ var useGames = /* @__PURE__ */ __name(() => {
49
+ const { gameApiV2, permissionVersion } = useToolkitsStore();
50
+ const ky = useKy();
51
+ return useQuery({
52
+ queryKey: queryKeys.games.all,
53
+ queryFn: /* @__PURE__ */ __name(async () => {
54
+ const requestConfig = {
55
+ headers: {
56
+ [APP_ID_HEADER]: "global"
57
+ }
58
+ };
59
+ if (gameApiV2) {
60
+ const response2 = await ky.get("/api/game/list", requestConfig);
61
+ return response2?.list ?? [];
62
+ }
63
+ const response = await ky.get("/api/usystem/game/all", requestConfig);
64
+ return response ?? [];
65
+ }, "queryFn"),
66
+ enabled: permissionVersion !== "v1" /* V1 */,
67
+ retry: false
68
+ });
69
+ }, "useGames");
70
+
71
+ export { useAuth, useGames, useMenuList };
72
+ //# sourceMappingURL=chunk-7X2LW6EY.js.map
73
+ //# sourceMappingURL=chunk-7X2LW6EY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/services/index.ts"],"names":["response"],"mappings":"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","file":"chunk-7X2LW6EY.js","sourcesContent":["import { useQuery } from '@tanstack/react-query'\nimport type { Options as KyOptions } from 'ky'\n\nimport type { Game } from '@/components/layout/types'\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { APP_ID_HEADER, PermissionVersion } from '@/constants'\nimport { useKy } from '@/libs'\nimport { queryKeys } from '@/queryKeys'\nimport type { MenuListItem } from '@/types'\n\nexport function useAuth(code?: string | string[], config?: KyOptions) {\n const ky = useKy()\n const { permissionVersion } = useToolkitsStore()\n const permissionCodes: string[] = typeof code !== 'undefined' ? (typeof code === 'string' ? [code] : code) : []\n const version = permissionVersion !== PermissionVersion.V1 ? 'v2' : 'v1'\n\n const { data, ...rest } = useQuery({\n queryKey: queryKeys.permissions.check(permissionCodes, version),\n queryFn: () =>\n ky.post<Record<string, boolean> & { has_all?: boolean }>(\n permissionVersion !== PermissionVersion.V1 ? '/api/usystem/user/checkV2' : '/api/usystem/user/check',\n {\n permissions: permissionCodes,\n },\n config,\n ),\n enabled: permissionCodes.length > 0,\n retry: false,\n })\n\n let newData: boolean | Record<string, boolean> = true\n\n if (typeof code === 'string') {\n newData = data?.has_all ? true : (data?.[code] ?? false)\n } else if (Array.isArray(code) && code.length > 0) {\n newData = permissionCodes.reduce<Record<string, boolean>>((acc, curr) => {\n acc[curr] = data?.has_all ? true : (data?.[curr] ?? false)\n return acc\n }, {})\n }\n\n return {\n ...rest,\n data: newData,\n }\n}\n\nexport function useMenuList() {\n const { loginPath, appId } = useToolkitsStore()\n const ky = useKy()\n\n return useQuery({\n queryKey: queryKeys.menus.navbar(appId ? String(appId) : undefined),\n queryFn: () =>\n ky.get<MenuListItem[]>('/api/usystem/menu/navbar', {\n headers: { [APP_ID_HEADER]: appId ? encodeURIComponent(String(appId)) : 'global' },\n }),\n enabled: window.location.pathname !== loginPath,\n })\n}\n\nexport const useGames = () => {\n const { gameApiV2, permissionVersion } = useToolkitsStore()\n const ky = useKy()\n\n return useQuery({\n queryKey: queryKeys.games.all,\n queryFn: async () => {\n const requestConfig = {\n headers: {\n [APP_ID_HEADER]: 'global',\n },\n }\n\n if (gameApiV2) {\n const response = await ky.get<{ list: Game[] }>('/api/game/list', requestConfig)\n return response?.list ?? []\n }\n\n const response = await ky.get<Game[]>('/api/usystem/game/all', requestConfig)\n return response ?? []\n },\n enabled: permissionVersion !== PermissionVersion.V1,\n retry: false,\n })\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import {a as a$2}from'./chunk-NNXVZIY2.js';import {a as a$1}from'./chunk-DLTAWT6S.js';import {a,b}from'./chunk-P25BHLH3.js';import {Button,Tooltip,Modal,Form}from'antd';import {jsx,Fragment}from'react/jsx-runtime';import {useMemo,useEffect,useState,useCallback}from'react';var N=h=>{let{children:r,code:n,showLoading:l,disabled:a,config:x,...o}=h,u=n?Array.isArray(n)?n:[n]:[],{data:s,isLoading:d}=a$1(u,x),{t:e}=a$2(),y=s&&(typeof s=="boolean"||Object.values(s).some(Boolean)),p=a||!y||d&&!l,c=d&&l,m=p,f=jsx(Button,{disabled:p,loading:c,...o,children:r});return m?jsx(Tooltip,{defaultOpen:false,title:e("global.noEntitlement"),children:f}):f},j=N;var O=a();function w(h){let{content:r,onConfirm:n,afterOpen:l,afterClose:a,...x}=h,o=useMemo(()=>b(),[]),{show:u,hide:s,isOpen:d,cleanup:e}=O();useEffect(()=>()=>{e(o);},[o,e]);let y=d(o),[p,c]=useState(false),m=typeof r=="function",f=useCallback(async()=>{u(o),await l?.();},[o,u,l]),i=useCallback(()=>{s(o);},[o,s]),t=useCallback(async()=>{i(),await a?.();},[i,a]),V=useCallback(async()=>{try{c(!0),await n?.(),i(),await a?.();}catch(b){throw console.error("Modal confirm error:",b),b}finally{c(false);}},[n,i,a]),P=jsx(Modal,{...x,open:y,confirmLoading:p,onOk:V,onCancel:t,children:m?jsx(Fragment,{children:r({hide:i})}):jsx(Fragment,{children:r})});return {id:o,show:f,hide:i,modal:P}}function q(h){let{content:r,form:n,formProps:l,onConfirm:a,onSuccess:x,afterClose:o,...u}=h,[s,d]=useState({}),[e]=Form.useForm(n),y=typeof r=="function",{id:p,show:c,hide:m,modal:f}=w({...u,content:t=>jsx(Form,{...l,form:e,children:y?jsx(Fragment,{children:r(s,t)}):jsx(Fragment,{children:r})}),onConfirm:async()=>{try{let t=await e.validateFields();await a?.(t,s),x?.(),m();}catch(t){throw console.error("Form validation or submission error:",t),t}},afterClose:()=>{d({}),o?.(e);}}),i=useCallback(t=>{let{initialValues:V,extraValues:P}=t||{};P!==void 0&&d(P),V&&e.setFieldsValue(V),c();},[e,c]);return {id:p,show:i,hide:m,modal:f}}export{j as a,O as b,w as c,q as d};//# sourceMappingURL=chunk-D75NVCYN.js.map
2
+ //# sourceMappingURL=chunk-D75NVCYN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/authButton/AuthButton.tsx","../src/hooks/modal/stores.ts","../src/hooks/modal/modal.tsx","../src/hooks/modal/formModal.tsx"],"names":["AuthButton","props","children","code","showLoading","disabled","config","restProps","codes","data","isLoading","useAuth","t","useTranslation","hasPermission","isButtonDisabled","isButtonLoading","shouldShowTooltip","buttonNode","jsx","Button","Tooltip","AuthButton_default","useModalStore","createVisibilityStore","useModal","content","onConfirm","afterOpen","afterClose","modalProps","_id","useMemo","generateId","show","hide","isOpen","cleanup","useEffect","open","confirmLoading","setConfirmLoading","useState","isRenderFunction","_show","useCallback","_hide","onCancel","onOk","error","internalModal","Modal","Fragment","useFormModal","form","formProps","onSuccess","internalExtraValues","setInternalExtraValues","internalForm","Form","id","modal","operation","values","showForm","options","initialValues","extraValues"],"mappings":"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","file":"chunk-D75NVCYN.js","sourcesContent":["import type { ButtonProps } from 'antd'\nimport { Button, Tooltip } from 'antd'\nimport type { Options as KyOptions } from 'ky'\nimport type { FC, PropsWithChildren } from 'react'\n\nimport { useTranslation } from '@/locale'\nimport { useAuth } from '@/services'\n\nexport interface AuthButtonProps extends ButtonProps {\n /** 权限码,支持单个或多个 */\n code?: string | string[]\n /** 加载时是否显示 loading 状态 */\n showLoading?: boolean\n /** 请求配置 */\n config?: KyOptions\n}\n\n/**\n * 授权按钮组件\n * 根据权限码自动控制按钮的启用/禁用状态\n * - 有权限:正常显示可点击按钮\n * - 无权限:显示禁用按钮并带有提示\n * - 加载中:显示加载状态\n */\nconst AuthButton: FC<PropsWithChildren<AuthButtonProps>> = props => {\n const { children, code, showLoading, disabled, config, ...restProps } = props\n const codes = code ? (Array.isArray(code) ? code : [code]) : []\n const { data, isLoading } = useAuth(codes, config)\n const { t } = useTranslation()\n\n // 判断是否有权限\n const hasPermission = data && (typeof data === 'boolean' || Object.values(data).some(Boolean))\n\n // 计算最终的禁用状态和加载状态\n const isButtonDisabled = disabled || !hasPermission || (isLoading && !showLoading)\n const isButtonLoading = isLoading && showLoading\n\n // 判断是否需要显示 tooltip(任何禁用状态都显示)\n const shouldShowTooltip = isButtonDisabled\n\n const buttonNode = (\n <Button disabled={isButtonDisabled} loading={isButtonLoading} {...restProps}>\n {children}\n </Button>\n )\n\n if (shouldShowTooltip) {\n return (\n <Tooltip defaultOpen={false} title={t('global.noEntitlement')}>\n {buttonNode}\n </Tooltip>\n )\n }\n\n return buttonNode\n}\n\nexport default AuthButton\n","import { createVisibilityStore } from '@/utils'\n\nexport const useModalStore = createVisibilityStore()\n","import type { ModalProps } from 'antd'\nimport { Modal } from 'antd'\nimport { type ReactNode, useCallback, useEffect, useMemo, useState } from 'react'\n\nimport { generateId } from '@/utils'\n\nimport { useModalStore } from './stores'\n\nexport interface UseModalOperation {\n hide: () => void\n}\n\nexport interface UseModalProps extends Omit<ModalProps, 'open' | 'confirmLoading' | 'onOk' | 'onCancel'> {\n content?: ReactNode | ((operation: UseModalOperation) => ReactNode)\n onConfirm?: () => void | Promise<void>\n afterOpen?: () => void | Promise<void>\n afterClose?: () => void | Promise<void>\n}\n\nexport function useModal(props: UseModalProps) {\n const { content, onConfirm, afterOpen, afterClose, ...modalProps } = props\n\n const _id = useMemo(() => generateId(), [])\n const { show, hide, isOpen, cleanup } = useModalStore()\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 onCancel: ModalProps['onCancel'] = useCallback(async () => {\n _hide()\n await afterClose?.()\n }, [_hide, afterClose])\n\n const onOk = useCallback(async () => {\n try {\n setConfirmLoading(true)\n await onConfirm?.()\n _hide()\n await afterClose?.()\n } catch (error) {\n console.error('Modal confirm error:', error)\n throw error\n } finally {\n setConfirmLoading(false)\n }\n }, [onConfirm, _hide, afterClose])\n\n const internalModal = (\n <Modal {...modalProps} open={open} confirmLoading={confirmLoading} onOk={onOk} onCancel={onCancel}>\n {isRenderFunction ? <>{content({ hide: _hide })}</> : <>{content}</>}\n </Modal>\n )\n\n return {\n id: _id,\n show: _show,\n hide: _hide,\n modal: internalModal,\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 { useModal, type UseModalOperation, type UseModalProps } from './modal'\n\nexport interface ShowFormOptions<Values extends AnyObject, ExtraValues> {\n initialValues?: RecursivePartial<Values>\n extraValues?: ExtraValues\n}\n\nexport interface UseFormModalProps<Values extends AnyObject = AnyObject, ExtraValues = Record<string, unknown>>\n extends Omit<UseModalProps, 'onConfirm' | 'content' | 'onShow' | 'afterClose'> {\n formProps?: Omit<FormProps, 'form'>\n form?: FormInstance<Values>\n content?: ReactNode | ((extraValues: ExtraValues, operation: UseModalOperation) => ReactNode)\n onConfirm?: (values: Values, extraValues: ExtraValues) => void | Promise<void>\n onSuccess?: () => void\n afterClose?: (form: FormInstance<Values>) => void\n}\n\nexport interface UseFormModalReturn<Values extends AnyObject, ExtraValues> {\n id: number\n show: (options?: ShowFormOptions<Values, ExtraValues>) => void\n hide: () => void\n modal: ReactNode\n}\n\nexport function useFormModal<Values extends AnyObject = AnyObject, ExtraValues = Record<string, unknown>>(\n props: UseFormModalProps<Values, ExtraValues>,\n): UseFormModalReturn<Values, ExtraValues> {\n const { content, form, formProps, onConfirm, onSuccess, afterClose, ...modalProps } = 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, modal } = useModal({\n ...modalProps,\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 modal,\n }\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import {l,i,m,e}from'./chunk-P25BHLH3.js';import {useQuery}from'@tanstack/react-query';function K(e,s){let t=l(),{permissionVersion:n}=i(),r=typeof e<"u"?typeof e=="string"?[e]:e:[],y=n!=="v1"?"v2":"v1",{data:o,...c}=useQuery({queryKey:m.permissions.check(r,y),queryFn:()=>t.post(n!=="v1"?"/api/usystem/user/checkV2":"/api/usystem/user/check",{permissions:r},s),enabled:r.length>0,retry:false}),m$1=true;return typeof e=="string"?m$1=o?.has_all?true:o?.[e]??false:Array.isArray(e)&&e.length>0&&(m$1=r.reduce((f,g)=>(f[g]=o?.has_all?true:o?.[g]??false,f),{})),{...c,data:m$1}}function A(){let{loginPath:e$1,appId:s}=i(),t=l();return useQuery({queryKey:m.menus.navbar(s?String(s):void 0),queryFn:()=>t.get("/api/usystem/menu/navbar",{headers:{[e]:s?encodeURIComponent(String(s)):"global"}}),enabled:window.location.pathname!==e$1})}var v=()=>{let{gameApiV2:e$1,permissionVersion:s}=i(),t=l();return useQuery({queryKey:m.games.all,queryFn:async()=>{let n={headers:{[e]:"global"}};return e$1?(await t.get("/api/game/list",n))?.list??[]:await t.get("/api/usystem/game/all",n)??[]},enabled:s!=="v1",retry:false})};export{K as a,A as b,v as c};//# sourceMappingURL=chunk-DLTAWT6S.js.map
2
+ //# sourceMappingURL=chunk-DLTAWT6S.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/services/index.ts"],"names":["useAuth","code","config","ky","useKy","permissionVersion","useToolkitsStore","permissionCodes","version","data","rest","useQuery","queryKeys","newData","acc","curr","useMenuList","loginPath","appId","APP_ID_HEADER","useGames","gameApiV2","requestConfig"],"mappings":"uFAUO,SAASA,CAAAA,CAAQC,CAAAA,CAA0BC,CAAAA,CAAoB,CACpE,IAAMC,CAAAA,CAAKC,CAAAA,EAAM,CACX,CAAE,kBAAAC,CAAkB,CAAA,CAAIC,CAAAA,EAAiB,CACzCC,CAAAA,CAA4B,OAAON,CAAAA,CAAS,GAAA,CAAe,OAAOA,CAAAA,EAAS,QAAA,CAAW,CAACA,CAAI,CAAA,CAAIA,EAAQ,EAAC,CACxGO,CAAAA,CAAUH,CAAAA,GAAsB,IAAA,CAAuB,IAAA,CAAO,IAAA,CAE9D,CAAE,IAAA,CAAAI,CAAAA,CAAM,GAAGC,CAAK,CAAA,CAAIC,QAAAA,CAAS,CACjC,QAAA,CAAUC,CAAAA,CAAU,WAAA,CAAY,KAAA,CAAML,CAAAA,CAAiBC,CAAO,CAAA,CAC9D,OAAA,CAAS,IACPL,CAAAA,CAAG,IAAA,CACDE,CAAAA,GAAsB,IAAA,CAAuB,2BAAA,CAA8B,yBAAA,CAC3E,CACE,WAAA,CAAaE,CACf,CAAA,CACAL,CACF,CAAA,CACF,OAAA,CAASK,CAAAA,CAAgB,MAAA,CAAS,CAAA,CAClC,KAAA,CAAO,KACT,CAAC,CAAA,CAEGM,GAAAA,CAA6C,KAEjD,OAAI,OAAOZ,CAAAA,EAAS,QAAA,CAClBY,GAAAA,CAAUJ,CAAAA,EAAM,OAAA,CAAU,IAAA,CAAQA,CAAAA,GAAOR,CAAI,CAAA,EAAK,KAAA,CACzC,KAAA,CAAM,OAAA,CAAQA,CAAI,CAAA,EAAKA,CAAAA,CAAK,MAAA,CAAS,CAAA,GAC9CY,GAAAA,CAAUN,CAAAA,CAAgB,MAAA,CAAgC,CAACO,CAAAA,CAAKC,CAAAA,IAC9DD,CAAAA,CAAIC,CAAI,CAAA,CAAIN,CAAAA,EAAM,OAAA,CAAU,IAAA,CAAQA,CAAAA,GAAOM,CAAI,CAAA,EAAK,KAAA,CAC7CD,CAAAA,CAAAA,CACN,EAAE,CAAA,CAAA,CAGA,CACL,GAAGJ,CAAAA,CACH,IAAA,CAAMG,GACR,CACF,CAEO,SAASG,CAAAA,EAAc,CAC5B,GAAM,CAAE,SAAA,CAAAC,GAAAA,CAAW,KAAA,CAAAC,CAAM,CAAA,CAAIZ,CAAAA,EAAiB,CACxCH,CAAAA,CAAKC,CAAAA,GAEX,OAAOO,QAAAA,CAAS,CACd,QAAA,CAAUC,CAAAA,CAAU,KAAA,CAAM,MAAA,CAAOM,CAAAA,CAAQ,MAAA,CAAOA,CAAK,CAAA,CAAI,MAAS,CAAA,CAClE,OAAA,CAAS,IACPf,CAAAA,CAAG,GAAA,CAAoB,0BAAA,CAA4B,CACjD,OAAA,CAAS,CAAE,CAACgB,CAAa,EAAGD,CAAAA,CAAQ,kBAAA,CAAmB,MAAA,CAAOA,CAAK,CAAC,CAAA,CAAI,QAAS,CACnF,CAAC,CAAA,CACH,OAAA,CAAS,MAAA,CAAO,QAAA,CAAS,QAAA,GAAaD,GACxC,CAAC,CACH,CAEO,IAAMG,CAAAA,CAAW,IAAM,CAC5B,GAAM,CAAE,SAAA,CAAAC,GAAAA,CAAW,iBAAA,CAAAhB,CAAkB,CAAA,CAAIC,CAAAA,EAAiB,CACpDH,CAAAA,CAAKC,CAAAA,EAAM,CAEjB,OAAOO,QAAAA,CAAS,CACd,QAAA,CAAUC,CAAAA,CAAU,KAAA,CAAM,GAAA,CAC1B,OAAA,CAAS,SAAY,CACnB,IAAMU,CAAAA,CAAgB,CACpB,OAAA,CAAS,CACP,CAACH,CAAa,EAAG,QACnB,CACF,CAAA,CAEA,OAAIE,GAAAA,CAAAA,CACe,MAAMlB,CAAAA,CAAG,GAAA,CAAsB,gBAAA,CAAkBmB,CAAa,CAAA,GAC9D,IAAA,EAAQ,EAAC,CAGX,MAAMnB,CAAAA,CAAG,GAAA,CAAY,uBAAA,CAAyBmB,CAAa,CAAA,EACzD,EACrB,CAAA,CACA,OAAA,CAASjB,CAAAA,GAAsB,IAAA,CAC/B,KAAA,CAAO,KACT,CAAC,CACH","file":"chunk-DLTAWT6S.js","sourcesContent":["import { useQuery } from '@tanstack/react-query'\nimport type { Options as KyOptions } from 'ky'\n\nimport type { Game } from '@/components/layout/types'\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { APP_ID_HEADER, PermissionVersion } from '@/constants'\nimport { useKy } from '@/libs'\nimport { queryKeys } from '@/queryKeys'\nimport type { MenuListItem } from '@/types'\n\nexport function useAuth(code?: string | string[], config?: KyOptions) {\n const ky = useKy()\n const { permissionVersion } = useToolkitsStore()\n const permissionCodes: string[] = typeof code !== 'undefined' ? (typeof code === 'string' ? [code] : code) : []\n const version = permissionVersion !== PermissionVersion.V1 ? 'v2' : 'v1'\n\n const { data, ...rest } = useQuery({\n queryKey: queryKeys.permissions.check(permissionCodes, version),\n queryFn: () =>\n ky.post<Record<string, boolean> & { has_all?: boolean }>(\n permissionVersion !== PermissionVersion.V1 ? '/api/usystem/user/checkV2' : '/api/usystem/user/check',\n {\n permissions: permissionCodes,\n },\n config,\n ),\n enabled: permissionCodes.length > 0,\n retry: false,\n })\n\n let newData: boolean | Record<string, boolean> = true\n\n if (typeof code === 'string') {\n newData = data?.has_all ? true : (data?.[code] ?? false)\n } else if (Array.isArray(code) && code.length > 0) {\n newData = permissionCodes.reduce<Record<string, boolean>>((acc, curr) => {\n acc[curr] = data?.has_all ? true : (data?.[curr] ?? false)\n return acc\n }, {})\n }\n\n return {\n ...rest,\n data: newData,\n }\n}\n\nexport function useMenuList() {\n const { loginPath, appId } = useToolkitsStore()\n const ky = useKy()\n\n return useQuery({\n queryKey: queryKeys.menus.navbar(appId ? String(appId) : undefined),\n queryFn: () =>\n ky.get<MenuListItem[]>('/api/usystem/menu/navbar', {\n headers: { [APP_ID_HEADER]: appId ? encodeURIComponent(String(appId)) : 'global' },\n }),\n enabled: window.location.pathname !== loginPath,\n })\n}\n\nexport const useGames = () => {\n const { gameApiV2, permissionVersion } = useToolkitsStore()\n const ky = useKy()\n\n return useQuery({\n queryKey: queryKeys.games.all,\n queryFn: async () => {\n const requestConfig = {\n headers: {\n [APP_ID_HEADER]: 'global',\n },\n }\n\n if (gameApiV2) {\n const response = await ky.get<{ list: Game[] }>('/api/game/list', requestConfig)\n return response?.list ?? []\n }\n\n const response = await ky.get<Game[]>('/api/usystem/game/all', requestConfig)\n return response ?? []\n },\n enabled: permissionVersion !== PermissionVersion.V1,\n retry: false,\n })\n}\n"]}
@@ -0,0 +1,227 @@
1
+ import { useAllRoles, useCreateUser, useUpdateUser } from './chunk-QACSRYJY.js';
2
+ import { useFormModal } from './chunk-ZOHMJAAX.js';
3
+ import { useTranslation } from './chunk-Z6PDWY44.js';
4
+ import { __name, useToolkitsStore, useKy, queryKeys, WILDCARD } from './chunk-OH74GXG4.js';
5
+ import { MinusCircleOutlined } from '@ant-design/icons';
6
+ import { useQuery } from '@tanstack/react-query';
7
+ import { Typography, App, Form, Input, Select, Row, Col, Empty, Button } from 'antd';
8
+ import { last, first } from 'lodash-es';
9
+ import { Fragment as Fragment$1 } from 'react';
10
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
11
+
12
+ var { Text } = Typography;
13
+ var handleWildcardSelection = /* @__PURE__ */ __name((value, onChange) => {
14
+ if (last(value) === WILDCARD) {
15
+ onChange?.([WILDCARD]);
16
+ } else if (first(value) === WILDCARD) {
17
+ onChange?.(value.slice(1));
18
+ } else {
19
+ onChange?.(value);
20
+ }
21
+ }, "handleWildcardSelection");
22
+ var GroupSelect = /* @__PURE__ */ __name((props) => {
23
+ const { onChange, ...rest } = props;
24
+ const ky = useKy();
25
+ const { data, isLoading } = useQuery({
26
+ queryKey: queryKeys.enums.gameGroups,
27
+ queryFn: /* @__PURE__ */ __name(() => ky.get("/api/enum/get?enum=game_group&type=all"), "queryFn")
28
+ });
29
+ const options = [{ label: "\u901A\u7528", value: WILDCARD }].concat(
30
+ data?.map((group) => ({ label: group, value: group })) ?? []
31
+ );
32
+ return /* @__PURE__ */ jsx(
33
+ Select,
34
+ {
35
+ ...rest,
36
+ allowClear: true,
37
+ showSearch: true,
38
+ mode: "tags",
39
+ optionFilterProp: "label",
40
+ loading: isLoading,
41
+ options,
42
+ onChange: (value) => handleWildcardSelection(value, onChange)
43
+ }
44
+ );
45
+ }, "GroupSelect");
46
+ var GameSelect = /* @__PURE__ */ __name((props) => {
47
+ const { groups, onChange, ...rest } = props;
48
+ const ky = useKy();
49
+ const { permissionVersion } = useToolkitsStore();
50
+ const isV3 = permissionVersion === "v3" /* V3 */;
51
+ const isV4 = permissionVersion === "v4" /* V4 */;
52
+ const { data, isLoading } = useQuery({
53
+ queryKey: queryKeys.enums.gameIds(isV4 ? [] : groups ?? []),
54
+ queryFn: /* @__PURE__ */ __name(() => ky.get(`/api/enum/game_group/get_game_ids${isV4 ? "" : `?game_groups=${groups?.join(",")}`}`).then((response) => response?.list), "queryFn"),
55
+ enabled: isV4 || isV3 && !!groups?.length
56
+ });
57
+ const options = data?.map((group) => ({ label: group.name, value: group.id }));
58
+ return /* @__PURE__ */ jsx(
59
+ Select,
60
+ {
61
+ ...rest,
62
+ allowClear: true,
63
+ showSearch: true,
64
+ optionFilterProp: "label",
65
+ mode: "tags",
66
+ loading: isLoading,
67
+ options,
68
+ onChange: (value) => handleWildcardSelection(value, onChange)
69
+ }
70
+ );
71
+ }, "GameSelect");
72
+ var useUserModal = /* @__PURE__ */ __name(({ mode, onSuccess }) => {
73
+ const { message } = App.useApp();
74
+ const { t } = useTranslation();
75
+ const { data: roles, isLoading: isRolesLoading } = useAllRoles();
76
+ const create = useCreateUser();
77
+ const update = useUpdateUser();
78
+ const isCreateMode = mode === "create";
79
+ const title = isCreateMode ? t("User.createTitle") : t("User.updateTitle");
80
+ const content = /* @__PURE__ */ jsxs(Fragment, { children: [
81
+ /* @__PURE__ */ jsx(Form.Item, { label: t("global.name"), name: "name", rules: [{ required: true }], children: /* @__PURE__ */ jsx(Input, { disabled: !isCreateMode }) }),
82
+ /* @__PURE__ */ jsx(Form.Item, { label: t("global.role"), name: "roles", children: /* @__PURE__ */ jsx(
83
+ Select,
84
+ {
85
+ allowClear: true,
86
+ showSearch: true,
87
+ mode: "multiple",
88
+ loading: isRolesLoading,
89
+ optionFilterProp: "label",
90
+ options: roles?.map((role) => ({ label: role.name, value: role.name }))
91
+ }
92
+ ) })
93
+ ] });
94
+ const onConfirm = /* @__PURE__ */ __name(async (values, extraValues) => {
95
+ if (isCreateMode) {
96
+ await create.mutateAsync(values);
97
+ message.success(t("User.createSuccessfully"));
98
+ } else {
99
+ await update.mutateAsync({ ...values, id: extraValues?.id });
100
+ message.success(t("User.updateSuccessfully"));
101
+ }
102
+ onSuccess?.();
103
+ }, "onConfirm");
104
+ return useFormModal({
105
+ title,
106
+ width: "600px",
107
+ formProps: {
108
+ autoComplete: "off",
109
+ labelCol: { flex: "80px" }
110
+ },
111
+ content,
112
+ onConfirm
113
+ });
114
+ }, "useUserModal");
115
+ var useUserModalV2 = /* @__PURE__ */ __name(({ mode, onSuccess }) => {
116
+ const { message } = App.useApp();
117
+ const { t } = useTranslation();
118
+ const { data: roles, isLoading: isRolesLoading } = useAllRoles();
119
+ const create = useCreateUser();
120
+ const update = useUpdateUser();
121
+ const isCreateMode = mode === "create";
122
+ const title = isCreateMode ? t("User.createTitle") : t("User.updateTitle");
123
+ const { permissionVersion } = useToolkitsStore();
124
+ const isV3 = permissionVersion === "v3" /* V3 */;
125
+ const content = /* @__PURE__ */ jsxs(Fragment, { children: [
126
+ /* @__PURE__ */ jsx(Form.Item, { label: t("global.name"), name: "name", rules: [{ required: true }], children: /* @__PURE__ */ jsx(Input, { disabled: !isCreateMode }) }),
127
+ /* @__PURE__ */ jsx(Form.List, { name: "permissions", children: (fields, { add, remove }) => /* @__PURE__ */ jsxs(Row, { gutter: 8, children: [
128
+ isV3 && /* @__PURE__ */ jsx(Col, { span: 8, className: "text-center mb-4", children: /* @__PURE__ */ jsx(Text, { strong: true, children: t("global.projectGroup") }) }),
129
+ /* @__PURE__ */ jsx(Col, { span: isV3 ? 10 : 14, className: "text-center mb-4", children: /* @__PURE__ */ jsx(Text, { strong: true, children: t("global.game") }) }),
130
+ /* @__PURE__ */ jsx(Col, { span: isV3 ? 6 : 10, className: "text-center mb-4", children: /* @__PURE__ */ jsx(Text, { strong: true, children: t("global.role") }) }),
131
+ fields.map((field) => /* @__PURE__ */ jsxs(Fragment$1, { children: [
132
+ isV3 && /* @__PURE__ */ jsx(Col, { span: 8, children: /* @__PURE__ */ jsx(Form.Item, { noStyle: true, shouldUpdate: true, children: ({ setFieldValue }) => /* @__PURE__ */ jsx(Form.Item, { name: [field.name, "game_group"], children: /* @__PURE__ */ jsx(
133
+ GroupSelect,
134
+ {
135
+ onChange: () => {
136
+ setFieldValue(["permissions", field.name, "game_ids"], []);
137
+ }
138
+ }
139
+ ) }) }) }),
140
+ /* @__PURE__ */ jsx(Col, { span: isV3 ? 10 : 14, children: isV3 ? /* @__PURE__ */ jsx(
141
+ Form.Item,
142
+ {
143
+ noStyle: true,
144
+ shouldUpdate: (prevValues, nextValues) => prevValues.permissions[field.name]?.game_group !== nextValues.permissions[field.name]?.game_group,
145
+ children: ({ getFieldValue }) => {
146
+ const _groups = getFieldValue(["permissions", field.name, "game_group"]);
147
+ return /* @__PURE__ */ jsx(
148
+ Form.Item,
149
+ {
150
+ name: [field.name, "game_ids"],
151
+ dependencies: [["permissions", field.name, "game_group"]],
152
+ rules: [{ required: !!_groups?.length, message: "\u8BF7\u9009\u62E9\u6E38\u620F" }],
153
+ children: /* @__PURE__ */ jsx(GameSelect, { groups: _groups })
154
+ }
155
+ );
156
+ }
157
+ }
158
+ ) : /* @__PURE__ */ jsx(Form.Item, { name: [field.name, "game_ids"], rules: [{ required: true, message: "\u8BF7\u9009\u62E9\u6E38\u620F" }], children: /* @__PURE__ */ jsx(GameSelect, {}) }) }),
159
+ /* @__PURE__ */ jsx(Col, { span: isV3 ? 6 : 10, children: /* @__PURE__ */ jsxs("div", { className: "flex", children: [
160
+ /* @__PURE__ */ jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsx(
161
+ Form.Item,
162
+ {
163
+ name: [field.name, "role"],
164
+ rules: [
165
+ { required: true, message: "\u8BF7\u9009\u62E9\u89D2\u8272" },
166
+ ({ getFieldValue }) => ({
167
+ validator(_rule, value) {
168
+ const items = getFieldValue("permissions");
169
+ const otherItems = items.filter((item, index) => !!item && index !== field.name);
170
+ if (otherItems.some((item) => item.role === value)) {
171
+ return Promise.reject(new Error("\u8BF7\u52FF\u91CD\u590D\u9009\u62E9\u89D2\u8272"));
172
+ }
173
+ return Promise.resolve();
174
+ }
175
+ })
176
+ ],
177
+ children: /* @__PURE__ */ jsx(
178
+ Select,
179
+ {
180
+ allowClear: true,
181
+ showSearch: true,
182
+ optionFilterProp: "label",
183
+ loading: isRolesLoading,
184
+ options: roles?.map((role) => ({ label: role.name, value: role.name }))
185
+ }
186
+ )
187
+ }
188
+ ) }),
189
+ /* @__PURE__ */ jsx("div", { className: "w-8 text-center", children: /* @__PURE__ */ jsx(Form.Item, { children: /* @__PURE__ */ jsx(
190
+ MinusCircleOutlined,
191
+ {
192
+ onClick: () => {
193
+ remove(field.name);
194
+ }
195
+ }
196
+ ) }) })
197
+ ] }) })
198
+ ] }, field.key)),
199
+ fields.length === 0 && /* @__PURE__ */ jsx(Col, { span: 24, children: /* @__PURE__ */ jsx(Empty, { className: "mb-6" }) }),
200
+ /* @__PURE__ */ jsx(Col, { span: 24, children: /* @__PURE__ */ jsx(Button, { block: true, type: "dashed", onClick: () => add(), children: t("global.add") }) })
201
+ ] }) })
202
+ ] });
203
+ const onConfirm = /* @__PURE__ */ __name(async (values, extraValues) => {
204
+ if (isCreateMode) {
205
+ await create.mutateAsync(values);
206
+ message.success(t("User.createSuccessfully"));
207
+ } else {
208
+ await update.mutateAsync({ ...values, id: extraValues?.id });
209
+ message.success(t("User.updateSuccessfully"));
210
+ }
211
+ onSuccess?.();
212
+ }, "onConfirm");
213
+ return useFormModal({
214
+ title,
215
+ width: "1000px",
216
+ formProps: {
217
+ autoComplete: "off",
218
+ labelCol: { flex: "80px" }
219
+ },
220
+ content,
221
+ onConfirm
222
+ });
223
+ }, "useUserModalV2");
224
+
225
+ export { useUserModal, useUserModalV2 };
226
+ //# sourceMappingURL=chunk-E6L6VKSV.js.map
227
+ //# sourceMappingURL=chunk-E6L6VKSV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/modules/permission/hooks/user-hooks.tsx"],"names":["Fragment"],"mappings":"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","file":"chunk-E6L6VKSV.js","sourcesContent":["import { MinusCircleOutlined } from '@ant-design/icons'\nimport { useQuery } from '@tanstack/react-query'\nimport { App, Button, Col, Empty, Form, Input, Row, Select, Typography } from 'antd'\nimport { first, last } from 'lodash-es'\nimport { Fragment } from 'react'\nimport { type FC } from 'react'\n\nimport { useToolkitsStore } from '@/components'\nimport { PermissionVersion, WILDCARD } from '@/constants'\nimport { useFormModal } from '@/hooks/modal'\nimport { useKy } from '@/libs'\nimport { useTranslation } from '@/locale'\nimport { queryKeys } from '@/queryKeys'\n\nimport { useAllRoles, useCreateUser, useUpdateUser } from '../services'\n\nconst { Text } = Typography\n\n/**\n * 处理通配符选择逻辑\n * - 如果最后选择的是通配符,则只保留通配符\n * - 如果第一个是通配符但又选择了其他项,则移除通配符\n */\nconst handleWildcardSelection = (value: string[], onChange?: (value: string[]) => void) => {\n if (last(value) === WILDCARD) {\n onChange?.([WILDCARD])\n } else if (first(value) === WILDCARD) {\n onChange?.(value.slice(1))\n } else {\n onChange?.(value)\n }\n}\n\ninterface GroupSelectProps {\n value?: string[]\n onChange?: (value: string[]) => void\n}\n\nconst GroupSelect: FC<GroupSelectProps> = props => {\n const { onChange, ...rest } = props\n const ky = useKy()\n\n const { data, isLoading } = useQuery({\n queryKey: queryKeys.enums.gameGroups,\n queryFn: () => ky.get<string[]>('/api/enum/get?enum=game_group&type=all'),\n })\n\n const options = [{ label: '通用', value: WILDCARD }].concat(\n data?.map(group => ({ label: group, value: group })) ?? [],\n )\n\n return (\n <Select\n {...rest}\n allowClear\n showSearch\n mode=\"tags\"\n optionFilterProp=\"label\"\n loading={isLoading}\n options={options}\n onChange={value => handleWildcardSelection(value, onChange)}\n />\n )\n}\n\ninterface GameSelectProps {\n groups?: string[]\n value?: string[]\n onChange?: (value: string[]) => void\n}\n\n/**\n * 游戏选择组件\n * - V3: 依赖 groups 参数,需要先选择项目组才能加载游戏列表\n * - V4: 不依赖 groups,直接加载所有游戏列表\n */\nconst GameSelect: FC<GameSelectProps> = props => {\n const { groups, onChange, ...rest } = props\n const ky = useKy()\n const { permissionVersion } = useToolkitsStore()\n const isV3 = permissionVersion === PermissionVersion.V3\n const isV4 = permissionVersion === PermissionVersion.V4\n\n const { data, isLoading } = useQuery({\n queryKey: queryKeys.enums.gameIds(isV4 ? [] : (groups ?? [])),\n queryFn: () =>\n ky\n .get<{\n list: {\n id: string\n name: string\n }[]\n }>(`/api/enum/game_group/get_game_ids${isV4 ? '' : `?game_groups=${groups?.join(',')}`}`)\n .then(response => response?.list),\n enabled: isV4 || (isV3 && !!groups?.length),\n })\n\n const options = data?.map((group: { id: string; name: string }) => ({ label: group.name, value: group.id }))\n\n return (\n <Select\n {...rest}\n allowClear\n showSearch\n optionFilterProp=\"label\"\n mode=\"tags\"\n loading={isLoading}\n options={options}\n onChange={value => handleWildcardSelection(value, onChange)}\n />\n )\n}\n\ninterface UserModalFormSchema {\n name: string\n roles: string[]\n}\n\nexport const useUserModal = ({ mode, onSuccess }: { mode: 'create' | 'update'; onSuccess?: () => void }) => {\n const { message } = App.useApp()\n const { t } = useTranslation()\n const { data: roles, isLoading: isRolesLoading } = useAllRoles()\n const create = useCreateUser()\n const update = useUpdateUser()\n\n const isCreateMode = mode === 'create'\n\n const title = isCreateMode ? t('User.createTitle') : t('User.updateTitle')\n\n const content = (\n <>\n <Form.Item label={t('global.name')} name=\"name\" rules={[{ required: true }]}>\n <Input disabled={!isCreateMode} />\n </Form.Item>\n <Form.Item label={t('global.role')} name=\"roles\">\n <Select\n allowClear\n showSearch\n mode=\"multiple\"\n loading={isRolesLoading}\n optionFilterProp=\"label\"\n options={roles?.map(role => ({ label: role.name, value: role.name }))}\n />\n </Form.Item>\n </>\n )\n\n const onConfirm = async (values: UserModalFormSchema, extraValues: { id: string }) => {\n if (isCreateMode) {\n await create.mutateAsync(values)\n message.success(t('User.createSuccessfully'))\n } else {\n await update.mutateAsync({ ...values, id: extraValues?.id })\n message.success(t('User.updateSuccessfully'))\n }\n onSuccess?.()\n }\n\n return useFormModal<UserModalFormSchema, { id: string }>({\n title,\n width: '600px',\n formProps: {\n autoComplete: 'off',\n labelCol: { flex: '80px' },\n },\n content,\n onConfirm,\n })\n}\n\ninterface UserModalV2FormSchema {\n name: string\n permissions: {\n game_group: string[]\n game_ids: string[]\n role: string\n }[]\n}\n\n/**\n * 用户弹窗 V2 版本(用于 V3 和 V4 权限系统)\n * - V3: 显示项目组选择,游戏列表依赖项目组\n * - V4: 隐藏项目组选择,游戏列表独立加载\n */\nexport const useUserModalV2 = ({ mode, onSuccess }: { mode: 'create' | 'update'; onSuccess?: () => void }) => {\n const { message } = App.useApp()\n const { t } = useTranslation()\n const { data: roles, isLoading: isRolesLoading } = useAllRoles()\n const create = useCreateUser()\n const update = useUpdateUser()\n const isCreateMode = mode === 'create'\n const title = isCreateMode ? t('User.createTitle') : t('User.updateTitle')\n const { permissionVersion } = useToolkitsStore()\n const isV3 = permissionVersion === PermissionVersion.V3\n\n const content = (\n <>\n <Form.Item label={t('global.name')} name=\"name\" rules={[{ required: true }]}>\n <Input disabled={!isCreateMode} />\n </Form.Item>\n <Form.List name=\"permissions\">\n {(fields, { add, remove }) => (\n <Row gutter={8}>\n {isV3 && (\n <Col span={8} className=\"text-center mb-4\">\n <Text strong>{t('global.projectGroup')}</Text>\n </Col>\n )}\n <Col span={isV3 ? 10 : 14} className=\"text-center mb-4\">\n <Text strong>{t('global.game')}</Text>\n </Col>\n <Col span={isV3 ? 6 : 10} className=\"text-center mb-4\">\n <Text strong>{t('global.role')}</Text>\n </Col>\n {fields.map(field => (\n <Fragment key={field.key}>\n {isV3 && (\n <Col span={8}>\n <Form.Item noStyle shouldUpdate>\n {({ setFieldValue }) => (\n <Form.Item name={[field.name, 'game_group']}>\n <GroupSelect\n onChange={() => {\n setFieldValue(['permissions', field.name, 'game_ids'], [])\n }}\n />\n </Form.Item>\n )}\n </Form.Item>\n </Col>\n )}\n <Col span={isV3 ? 10 : 14}>\n {isV3 ? (\n <Form.Item\n noStyle\n shouldUpdate={(prevValues, nextValues) =>\n prevValues.permissions[field.name]?.game_group !==\n nextValues.permissions[field.name]?.game_group\n }\n >\n {({ getFieldValue }) => {\n const _groups = getFieldValue(['permissions', field.name, 'game_group'])\n\n return (\n <Form.Item\n name={[field.name, 'game_ids']}\n dependencies={[['permissions', field.name, 'game_group']]}\n rules={[{ required: !!_groups?.length, message: '请选择游戏' }]}\n >\n <GameSelect groups={_groups} />\n </Form.Item>\n )\n }}\n </Form.Item>\n ) : (\n <Form.Item name={[field.name, 'game_ids']} rules={[{ required: true, message: '请选择游戏' }]}>\n <GameSelect />\n </Form.Item>\n )}\n </Col>\n <Col span={isV3 ? 6 : 10}>\n <div className=\"flex\">\n <div className=\"flex-1\">\n <Form.Item\n name={[field.name, 'role']}\n rules={[\n { required: true, message: '请选择角色' },\n ({ getFieldValue }) => ({\n validator(_rule, value) {\n const items = getFieldValue('permissions') as UserModalV2FormSchema['permissions']\n const otherItems = items.filter((item, index) => !!item && index !== field.name)\n if (otherItems.some(item => item.role === value)) {\n return Promise.reject(new Error('请勿重复选择角色'))\n }\n return Promise.resolve()\n },\n }),\n ]}\n >\n <Select\n allowClear\n showSearch\n optionFilterProp=\"label\"\n loading={isRolesLoading}\n options={roles?.map(role => ({ label: role.name, value: role.name }))}\n />\n </Form.Item>\n </div>\n <div className=\"w-8 text-center\">\n <Form.Item>\n <MinusCircleOutlined\n onClick={() => {\n remove(field.name)\n }}\n />\n </Form.Item>\n </div>\n </div>\n </Col>\n </Fragment>\n ))}\n {fields.length === 0 && (\n <Col span={24}>\n <Empty className=\"mb-6\" />\n </Col>\n )}\n <Col span={24}>\n <Button block type=\"dashed\" onClick={() => add()}>\n {t('global.add')}\n </Button>\n </Col>\n </Row>\n )}\n </Form.List>\n </>\n )\n\n const onConfirm = async (values: UserModalV2FormSchema, extraValues: { id: string }) => {\n if (isCreateMode) {\n await create.mutateAsync(values)\n message.success(t('User.createSuccessfully'))\n } else {\n await update.mutateAsync({ ...values, id: extraValues?.id })\n message.success(t('User.updateSuccessfully'))\n }\n onSuccess?.()\n }\n\n return useFormModal<UserModalV2FormSchema, { id: string }>({\n title,\n width: '1000px',\n formProps: {\n autoComplete: 'off',\n labelCol: { flex: '80px' },\n },\n content,\n onConfirm,\n })\n}\n"]}