react-toolkits 2.24.19 → 2.25.0
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.
- package/CHANGELOG.md +6 -2
- package/lib/chunk-742NAY4S.js +2 -0
- package/lib/{chunk-UPO7NB6O.js.map → chunk-742NAY4S.js.map} +1 -1
- package/lib/chunk-EESZYCYA.js +2 -0
- package/lib/chunk-EESZYCYA.js.map +1 -0
- package/lib/chunk-GI5OS4VD.js +2 -0
- package/lib/chunk-GI5OS4VD.js.map +1 -0
- package/lib/chunk-K43HSNXS.js +2 -0
- package/lib/chunk-K43HSNXS.js.map +1 -0
- package/lib/chunk-LEVOCZUQ.js +2 -0
- package/lib/{chunk-H5Y4DYUL.js.map → chunk-LEVOCZUQ.js.map} +1 -1
- package/lib/chunk-PLJPZJ7T.js +2 -0
- package/lib/chunk-PLJPZJ7T.js.map +1 -0
- package/lib/chunk-V3YBDED3.js +2 -0
- package/lib/{chunk-ZF7POJAA.js.map → chunk-V3YBDED3.js.map} +1 -1
- package/lib/chunk-VFRB44XY.js +2 -0
- package/lib/{chunk-NNXVZIY2.js.map → chunk-VFRB44XY.js.map} +1 -1
- package/lib/chunk-W3E3WPLB.js +3 -0
- package/lib/chunk-W3E3WPLB.js.map +1 -0
- package/lib/createMenuItem-C7HUFDD4.js +2 -0
- package/lib/createMenuItem-C7HUFDD4.js.map +1 -0
- package/lib/index.css +1 -1
- package/lib/index.d.ts +17 -21
- package/lib/index.js +2 -2
- package/lib/index.js.map +1 -1
- package/lib/menuItemList-2OFNRCPR.js +2 -0
- package/lib/menuItemList-2OFNRCPR.js.map +1 -0
- package/lib/roleDetail-YBO7TOL5.js +2 -0
- package/lib/roleDetail-YBO7TOL5.js.map +1 -0
- package/lib/roleList-UEZPNJ2L.js +2 -0
- package/lib/roleList-UEZPNJ2L.js.map +1 -0
- package/lib/updateMenuItem-23ZR4X2P.js +2 -0
- package/lib/updateMenuItem-23ZR4X2P.js.map +1 -0
- package/lib/userDetail-QZDRSIYE.js +2 -0
- package/lib/userDetail-QZDRSIYE.js.map +1 -0
- package/lib/userList-IBXB6M6R.js +2 -0
- package/lib/userList-IBXB6M6R.js.map +1 -0
- package/locale/context.js +1 -7
- package/locale/context.js.map +1 -1
- package/locale/en_GB.js +1 -94
- package/locale/en_GB.js.map +1 -1
- package/locale/hooks.js +1 -18
- package/locale/hooks.js.map +1 -1
- package/locale/index.js +1 -2
- package/locale/ja_JP.js +1 -94
- package/locale/ja_JP.js.map +1 -1
- package/locale/ko_KR.js +1 -94
- package/locale/ko_KR.js.map +1 -1
- package/locale/zh_CN.js +1 -94
- package/locale/zh_CN.js.map +1 -1
- package/package.json +3 -3
- package/lib/chunk-7X2LW6EY.js +0 -73
- package/lib/chunk-7X2LW6EY.js.map +0 -1
- package/lib/chunk-D75NVCYN.js +0 -2
- package/lib/chunk-D75NVCYN.js.map +0 -1
- package/lib/chunk-DLTAWT6S.js +0 -2
- package/lib/chunk-DLTAWT6S.js.map +0 -1
- package/lib/chunk-E6L6VKSV.js +0 -227
- package/lib/chunk-E6L6VKSV.js.map +0 -1
- package/lib/chunk-ESCBNFWD.js +0 -498
- package/lib/chunk-ESCBNFWD.js.map +0 -1
- package/lib/chunk-FSXYUF4U.js +0 -276
- package/lib/chunk-FSXYUF4U.js.map +0 -1
- package/lib/chunk-H5Y4DYUL.js +0 -2
- package/lib/chunk-LXMQLSQY.js +0 -46
- package/lib/chunk-LXMQLSQY.js.map +0 -1
- package/lib/chunk-MTRFNFEM.js +0 -2
- package/lib/chunk-MTRFNFEM.js.map +0 -1
- package/lib/chunk-NNXVZIY2.js +0 -2
- package/lib/chunk-OH74GXG4.js +0 -570
- package/lib/chunk-OH74GXG4.js.map +0 -1
- package/lib/chunk-P25BHLH3.js +0 -3
- package/lib/chunk-P25BHLH3.js.map +0 -1
- package/lib/chunk-QACSRYJY.js +0 -147
- package/lib/chunk-QACSRYJY.js.map +0 -1
- package/lib/chunk-ST7VUWJ4.js +0 -2
- package/lib/chunk-ST7VUWJ4.js.map +0 -1
- package/lib/chunk-UPO7NB6O.js +0 -2
- package/lib/chunk-Z6PDWY44.js +0 -17
- package/lib/chunk-Z6PDWY44.js.map +0 -1
- package/lib/chunk-ZF7POJAA.js +0 -2
- package/lib/chunk-ZOHMJAAX.js +0 -120
- package/lib/chunk-ZOHMJAAX.js.map +0 -1
- package/lib/createMenuItem-CICLQWU6.js +0 -86
- package/lib/createMenuItem-CICLQWU6.js.map +0 -1
- package/lib/createMenuItem-SXFYDNCW.js +0 -2
- package/lib/createMenuItem-SXFYDNCW.js.map +0 -1
- package/lib/menuItemList-EHQSS4YZ.js +0 -132
- package/lib/menuItemList-EHQSS4YZ.js.map +0 -1
- package/lib/menuItemList-NIBRDRTA.js +0 -2
- package/lib/menuItemList-NIBRDRTA.js.map +0 -1
- package/lib/roleDetail-7HEBW7IS.js +0 -2
- package/lib/roleDetail-7HEBW7IS.js.map +0 -1
- package/lib/roleDetail-JCDOXKAM.js +0 -72
- package/lib/roleDetail-JCDOXKAM.js.map +0 -1
- package/lib/roleList-4C77ULPK.js +0 -161
- package/lib/roleList-4C77ULPK.js.map +0 -1
- package/lib/roleList-WGLD3HXB.js +0 -2
- package/lib/roleList-WGLD3HXB.js.map +0 -1
- package/lib/updateMenuItem-K62CKVXP.js +0 -109
- package/lib/updateMenuItem-K62CKVXP.js.map +0 -1
- package/lib/updateMenuItem-TECCUD6Z.js +0 -2
- package/lib/updateMenuItem-TECCUD6Z.js.map +0 -1
- package/lib/userDetail-WGQJ7IC5.js +0 -2
- package/lib/userDetail-WGQJ7IC5.js.map +0 -1
- package/lib/userDetail-WYN52ZJ2.js +0 -116
- package/lib/userDetail-WYN52ZJ2.js.map +0 -1
- package/lib/userList-2S2FRAG6.js +0 -2
- package/lib/userList-2S2FRAG6.js.map +0 -1
- package/lib/userList-AMVG7RCE.js +0 -195
- package/lib/userList-AMVG7RCE.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
# react-toolkits
|
|
2
2
|
|
|
3
|
-
## 2.
|
|
3
|
+
## 2.25.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 2766e20: chore: update dependencies and refactor components for improved performance
|
|
4
8
|
|
|
5
9
|
### Patch Changes
|
|
6
10
|
|
|
7
|
-
-
|
|
11
|
+
- 2766e20: chore: update dependencies and refactor components for improved functionality
|
|
8
12
|
|
|
9
13
|
## 2.24.18
|
|
10
14
|
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {k,l as l$1}from'./chunk-W3E3WPLB.js';import {useQueryClient,useMutation}from'@tanstack/react-query';function y(){let u=k(),t=useQueryClient();return useMutation({mutationKey:l$1.menus.create,mutationFn:n=>u.post("/api/usystem/menu/set",{...n,id:0,is_model:true}),onSuccess:()=>{t.invalidateQueries({queryKey:l$1.menus.all}),t.invalidateQueries({queryKey:l$1.menus.navbar()});}})}function l(){let u=k(),t=useQueryClient();return useMutation({mutationKey:l$1.menus.update,mutationFn:n=>u.post("/api/usystem/menu/set",{...n,is_model:true}),onSuccess:()=>{t.invalidateQueries({queryKey:l$1.menus.all}),t.invalidateQueries({queryKey:l$1.menus.navbar()});}})}function c(){let u=k(),t=useQueryClient();return useMutation({mutationKey:l$1.menus.delete,mutationFn:n=>u.post("/api/usystem/menu/delete",null,{searchParams:{id:n}}),onSuccess:()=>{t.invalidateQueries({queryKey:l$1.menus.all}),t.invalidateQueries({queryKey:l$1.menus.navbar()});}})}export{y as a,l as b,c};//# sourceMappingURL=chunk-742NAY4S.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-742NAY4S.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/modules/menu/services/index.ts"],"names":["useCreateMenu","ky","useKy","queryClient","useQueryClient","useMutation","queryKeys","arg","useUpdateMenu","useRemoveMenu","id"],"mappings":"4GAMO,SAASA,GAAgB,CAC9B,IAAMC,CAAAA,CAAKC,
|
|
1
|
+
{"version":3,"sources":["../src/modules/menu/services/index.ts"],"names":["useCreateMenu","ky","useKy","queryClient","useQueryClient","useMutation","queryKeys","arg","useUpdateMenu","useRemoveMenu","id"],"mappings":"4GAMO,SAASA,GAAgB,CAC9B,IAAMC,CAAAA,CAAKC,CAAAA,GACLC,CAAAA,CAAcC,cAAAA,GAEpB,OAAOC,WAAAA,CAAY,CACjB,WAAA,CAAaC,GAAAA,CAAU,KAAA,CAAM,MAAA,CAC7B,WAAaC,CAAAA,EAAkCN,CAAAA,CAAG,KAAK,uBAAA,CAAyB,CAAE,GAAGM,CAAAA,CAAK,EAAA,CAAI,CAAA,CAAG,QAAA,CAAU,IAAK,CAAC,CAAA,CACjH,UAAW,IAAM,CACfJ,EAAY,iBAAA,CAAkB,CAAE,QAAA,CAAUG,GAAAA,CAAU,MAAM,GAAI,CAAC,EAC/DH,CAAAA,CAAY,iBAAA,CAAkB,CAAE,QAAA,CAAUG,GAAAA,CAAU,KAAA,CAAM,MAAA,EAAS,CAAC,EACtE,CACF,CAAC,CACH,CAEO,SAASE,CAAAA,EAAgB,CAC9B,IAAMP,EAAKC,CAAAA,EAAM,CACXC,EAAcC,cAAAA,EAAe,CAEnC,OAAOC,WAAAA,CAAY,CACjB,WAAA,CAAaC,GAAAA,CAAU,MAAM,MAAA,CAC7B,UAAA,CAAaC,GAAsBN,CAAAA,CAAG,IAAA,CAAK,wBAAyB,CAAE,GAAGM,CAAAA,CAAK,QAAA,CAAU,IAAK,CAAC,CAAA,CAC9F,UAAW,IAAM,CACfJ,EAAY,iBAAA,CAAkB,CAAE,QAAA,CAAUG,GAAAA,CAAU,MAAM,GAAI,CAAC,EAC/DH,CAAAA,CAAY,iBAAA,CAAkB,CAAE,QAAA,CAAUG,GAAAA,CAAU,KAAA,CAAM,MAAA,EAAS,CAAC,EACtE,CACF,CAAC,CACH,CAEO,SAASG,CAAAA,EAAgB,CAC9B,IAAMR,EAAKC,CAAAA,EAAM,CACXC,EAAcC,cAAAA,EAAe,CAEnC,OAAOC,WAAAA,CAAY,CACjB,WAAA,CAAaC,GAAAA,CAAU,MAAM,MAAA,CAC7B,UAAA,CAAaI,GAAeT,CAAAA,CAAG,IAAA,CAAK,2BAA4B,IAAA,CAAM,CAAE,YAAA,CAAc,CAAE,GAAAS,CAAG,CAAE,CAAC,CAAA,CAC9F,SAAA,CAAW,IAAM,CACfP,CAAAA,CAAY,iBAAA,CAAkB,CAAE,SAAUG,GAAAA,CAAU,KAAA,CAAM,GAAI,CAAC,CAAA,CAC/DH,EAAY,iBAAA,CAAkB,CAAE,QAAA,CAAUG,GAAAA,CAAU,MAAM,MAAA,EAAS,CAAC,EACtE,CACF,CAAC,CACH","file":"chunk-742NAY4S.js","sourcesContent":["import { useMutation, useQueryClient } from '@tanstack/react-query'\n\nimport { useKy } from '@/libs'\nimport { queryKeys } from '@/queryKeys'\nimport type { MenuListItem } from '@/types'\n\nexport function useCreateMenu() {\n const ky = useKy()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationKey: queryKeys.menus.create,\n mutationFn: (arg: Omit<MenuListItem, 'id'>) => ky.post('/api/usystem/menu/set', { ...arg, id: 0, is_model: true }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.menus.all })\n queryClient.invalidateQueries({ queryKey: queryKeys.menus.navbar() })\n },\n })\n}\n\nexport function useUpdateMenu() {\n const ky = useKy()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationKey: queryKeys.menus.update,\n mutationFn: (arg: MenuListItem) => ky.post('/api/usystem/menu/set', { ...arg, is_model: true }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.menus.all })\n queryClient.invalidateQueries({ queryKey: queryKeys.menus.navbar() })\n },\n })\n}\n\nexport function useRemoveMenu() {\n const ky = useKy()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationKey: queryKeys.menus.delete,\n mutationFn: (id: number) => ky.post('/api/usystem/menu/delete', null, { searchParams: { id } }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.menus.all })\n queryClient.invalidateQueries({ queryKey: queryKeys.menus.navbar() })\n },\n })\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {k,i,l,e}from'./chunk-W3E3WPLB.js';import {useQuery}from'@tanstack/react-query';function K(e,s){let t=k(),{permissionVersion:n}=i(),r=typeof e<"u"?typeof e=="string"?[e]:e:[],y=n!=="v1"?"v2":"v1",{data:o,...c}=useQuery({queryKey:l.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}),u=true;return typeof e=="string"?u=o?.has_all?true:o?.[e]??false:Array.isArray(e)&&e.length>0&&(u=r.reduce((f,g)=>(f[g]=o?.has_all?true:o?.[g]??false,f),{})),{...c,data:u}}function A(){let{loginPath:e$1,appId:s}=i(),t=k();return useQuery({queryKey:l.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{useGameApiV2:e$1,permissionVersion:s}=i(),t=k();return useQuery({queryKey:l.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-EESZYCYA.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-EESZYCYA.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","useGameApiV2","requestConfig"],"mappings":"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","file":"chunk-EESZYCYA.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 { useGameApiV2, 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 (useGameApiV2) {\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-VFRB44XY.js';import {a as a$1}from'./chunk-EESZYCYA.js';import {a,b}from'./chunk-W3E3WPLB.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,c=n?Array.isArray(n)?n:[n]:[],{data:s,isLoading:d}=a$1(c,x),{t:e}=a$2(),V=s&&(typeof s=="boolean"||Object.values(s).some(Boolean)),p=a||!V||d&&!l,u=d&&l,m=p,f=jsx(Button,{disabled:p,loading:u,...o,children:r});return m?jsx(Tooltip,{defaultOpen:false,title:e("global.noEntitlement"),children:f}):f},j=N;var y=a();function w(h){let{content:r,onConfirm:n,afterOpen:l,afterClose:a,...x}=h,o=useMemo(()=>b(),[]);if(typeof y!="function")throw new Error(`useModalStore is not a function. This is likely a build or initialization issue. useModalStore type: ${typeof y}, value: ${String(y)}`);let{show:c,hide:s,isOpen:d,cleanup:e}=y();useEffect(()=>()=>{e(o);},[o,e]);let V=d(o),[p,u]=useState(false),m=typeof r=="function",f=useCallback(async()=>{c(o),await l?.();},[o,c,l]),i=useCallback(()=>{s(o);},[o,s]),t=useCallback(async()=>{i(),await a?.();},[i,a]),M=useCallback(async()=>{try{u(!0),await n?.(),i(),await a?.();}catch(b){throw console.error("Modal confirm error:",b),b}finally{u(false);}},[n,i,a]),P=jsx(Modal,{...x,open:V,confirmLoading:p,onOk:M,onCancel:t,children:m?jsx(Fragment,{children:r({hide:i})}):jsx(Fragment,{children:r})});return {id:o,show:f,hide:i,modal:P}}function z(h){let{content:r,form:n,formProps:l,onConfirm:a,onSuccess:x,afterClose:o,...c}=h,[s,d]=useState({}),[e]=Form.useForm(n),V=typeof r=="function",{id:p,show:u,hide:m,modal:f}=w({...c,content:t=>jsx(Form,{...l,form:e,children:V?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:M,extraValues:P}=t||{};P!==void 0&&d(P),M&&e.setFieldsValue(M),u();},[e,u]);return {id:p,show:i,hide:m,modal:f}}export{j as a,y as b,w as c,z as d};//# sourceMappingURL=chunk-GI5OS4VD.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-GI5OS4VD.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-GI5OS4VD.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\n // 防御性检查\n if (typeof useModalStore !== 'function') {\n throw new Error(\n 'useModalStore is not a function. This is likely a build or initialization issue. ' +\n `useModalStore type: ${typeof useModalStore}, value: ${String(useModalStore)}`,\n )\n }\n\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 {c,d,j,i as i$1}from'./chunk-LEVOCZUQ.js';import {d as d$1}from'./chunk-GI5OS4VD.js';import {a}from'./chunk-VFRB44XY.js';import {c as c$1}from'./chunk-EESZYCYA.js';import {i}from'./chunk-W3E3WPLB.js';import {Typography,Select,App,Form,Input,Divider,Skeleton,Card,Empty,Button,Space,Checkbox,Row,Col,Collapse}from'antd';import {useState,useEffect,useTransition,useCallback}from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';var oe=m=>{let{permissions:i,readonly:n,expand:r,value:l,onChange:f}=m,[c,g]=useState([]),[y,R]=useState({}),[a$1,d]=useState(l??[]),{t:P}=a(),[,v]=useTransition(),V=useCallback(e=>{g(e);},[]),p=(e,s)=>{let o=[];return e?o=[...new Set(a$1.concat(s))]:(o=a$1.slice(),s.forEach(u=>{let b=o.findIndex(X=>X===u);b>-1&&o.splice(b,1);})),o},L=(e,s)=>{let o=p(e.target.checked,s);d(o),f?.(o);};useEffect(()=>{d(l??[]);},[l]),useEffect(()=>{r&&v(()=>{g((i??[]).map(({category:e})=>e));});},[r,i]),useEffect(()=>{let e=(i??[]).reduce((s,o)=>(s[o.category]=o.permissions.every(u=>a$1?.includes(u.value)),s),{});R(e);},[a$1,i]);let I=(i??[]).map(e=>({key:e.category,label:e.category,extra:!n&&jsx(Checkbox,{checked:y[e.category],onChange:s=>{L(s,e.permissions?.map(o=>o.value));},children:P("global.selectAll")}),children:jsx(Checkbox.Group,{className:"w-full",value:a$1,disabled:n,children:jsx(Row,{gutter:[10,10],className:"w-full",children:e.permissions?.map(s=>jsx(Col,{span:6,children:jsx(Checkbox,{value:s.value,onChange:o=>{L(o,[s.value]);},children:s.label})},s.value))})})}));return jsx(Collapse,{className:"w-full",collapsible:"header",activeKey:c,items:I,onChange:V})},k=oe;var{Text:w}=Typography,{Option:le}=Select,pe=m=>{let{expand:i=true,value:n,readonly:r,onChange:l}=m,{data:f,isLoading:c,error:g}=j(),{data:y,isLoading:R}=c$1(),[a$1,d]=useState([]),P=f?.filter(e=>e.is_common),v=f?.filter(e=>!e.is_common),V=c||R,{t:p}=a();if(useEffect(()=>{let e=[];Object.keys(n??{}).forEach(s=>{s!=="global"&&e.push({gameId:s,permissions:n?.[s]??[]});}),d(e);},[n]),g)return jsx("div",{className:"flex justify-center",children:jsx(w,{type:"danger",children:p("PermissionList.failedDescription")})});let L=()=>{d(e=>[...e,{gameId:"",permissions:[]}]);},I=e=>{d(s=>s.filter((o,u)=>u!==e));};return jsxs("div",{className:"flex flex-col w-full",children:[jsx("div",{className:"mb-12",children:jsx(Divider,{dashed:true,children:p("PermissionList.baseSectionTitle")})}),jsx(Skeleton,{active:true,loading:V,children:jsx(k,{value:n?.global,readonly:r,permissions:P,expand:i,onChange:e=>{l?.({...n,global:e});}})}),jsx("div",{className:"my-12",children:jsx(Divider,{dashed:true,children:p("PermissionList.gameSectionTitle")})}),a$1.map((e,s)=>jsx(Card,{title:jsxs(Space,{children:[jsx(w,{children:p("global.game")}),r?jsx(w,{children:y?.find(o=>String(o.id)===e.gameId)?.name}):jsx(Select,{disabled:r,value:a$1[s].gameId||void 0,className:"w-40",placeholder:p("PermissionList.gameSelectPlaceholder"),onChange:o=>{d(u=>{let b=u.slice();return b[s].gameId=o,b});},children:y?.map(o=>jsx(le,{value:o.id,disabled:a$1.some(({gameId:u})=>u===String(o.id)),children:o.name},o.id))})]}),className:"mb-6",extra:!r&&jsx(Button,{type:"link",onClick:()=>{I(s);},children:p("PermissionList.removeText")}),children:a$1[s].gameId?jsx(Skeleton,{active:true,loading:V,children:jsx(k,{value:n?.[a$1[s].gameId],readonly:r,expand:i,permissions:v,onChange:o=>{l?.({...n,[a$1[s].gameId]:o});}})}):jsx(Empty,{description:p("PermissionList.gameSectionDescription")})},s)),!r&&jsx(Button,{block:true,type:"dashed",onClick:L,children:p("PermissionList.addText")})]})},U=pe;var{Text:ue}=Typography,fe=m=>{let{expand:i=true,value:n,readonly:r,onChange:l}=m,{data:f,isLoading:c,error:g}=i$1(),{t:y}=a();return g?jsx("div",{className:"flex justify-center",children:jsx(ue,{type:"danger",children:y("PermissionList.failedDescription")})}):jsx(Skeleton,{active:true,loading:c,children:jsx(k,{value:n,permissions:f,readonly:r,expand:i,onChange:l})})},$=fe;var ge=m=>{let{value:i$1}=m;console.log("value",typeof i$1,i$1===null,JSON.stringify(i$1));let{permissionVersion:n}=i();return n==="v2"?jsx(U,{...m,value:i$1}):jsx($,{...m,value:i$1})},H=ge;var Qe=({mode:m,onSuccess:i})=>{let{message:n}=App.useApp(),{t:r}=a(),l=c(),f=d(),c$1=m==="create",g=r(c$1?"Role.createTitle":"Role.updateTitle"),y=jsxs(Fragment,{children:[jsx(Form.Item,{label:r("global.name"),name:"name",rules:[{required:true}],children:jsx(Input,{disabled:!c$1})}),jsx(Form.Item,{name:"permissions",children:jsx(H,{})})]});return d$1({title:g,width:"1000px",formProps:{layout:"vertical"},content:y,onConfirm:async(a,d)=>{let P=`role_${a.name}`,v=a.permissions;c$1?(await l.mutateAsync({name:P,permissions:v}),n.success(r("Role.createSuccessfully"))):(await f.mutateAsync({id:d?.id,name:P,permissions:v}),n.success(r("Role.updateSuccessfully"))),i?.();}})};export{H as a,Qe as b};//# sourceMappingURL=chunk-K43HSNXS.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-K43HSNXS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/modules/permission/components/permissionCollapse/index.tsx","../src/modules/permission/components/permissionList/PermissionWithGame.tsx","../src/modules/permission/components/permissionList/PermissionWithoutGame.tsx","../src/modules/permission/components/permissionList/index.tsx","../src/modules/permission/hooks/role-hooks.tsx"],"names":["PermissionCollapse","props","permissions","readonly","expand","value","onChange","activeKey","setActiveKey","useState","checkedMap","setCheckedMap","internalValue","setInternalValue","t","useTranslation","startTransition","useTransition","onCollapseChange","useCallback","key","getCheckedValue","checkedValue","codes","tempValue","code","index","item","onCheckChange","useEffect","category","acc","curr","items","jsx","Checkbox","e","permission","Row","Col","Collapse","permissionCollapse_default","Text","Typography","Option","Select","PermissionWithGame","isPermissionLoading","error","useAllPermissionsV2","games","isGamesLoading","useGames","gameList","setGameList","globalPermissions","gamePermissions","isLoading","list","addGame","prev","removeGame","_","i","jsxs","Divider","Skeleton","newValue","Card","Space","game","selectedValue","pev","temp","gameId","Button","Empty","PermissionWithGame_default","PermissionWithoutGame","useAllPermissions","PermissionWithoutGame_default","PermissionList","permissionVersion","useToolkitsStore","permissionList_default","useRoleModal","mode","onSuccess","message","App","create","useCreateRole","update","useUpdateRole","isCreateMode","title","content","Fragment","Form","Input","useFormModal","values","extraValues","name"],"mappings":"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","file":"chunk-K43HSNXS.js","sourcesContent":["import { Checkbox, Col, Collapse, Row } from 'antd'\nimport type { CheckboxChangeEvent } from 'antd/es/checkbox'\nimport type { FC } from 'react'\nimport { useCallback, useEffect, useState, useTransition } from 'react'\n\nimport { useTranslation } from '@/locale'\n\nimport type { PermissionEnumItem } from '../../types'\n\ninterface PermissionCollapseProps {\n expand?: boolean\n permissions?: PermissionEnumItem[]\n readonly?: boolean\n value?: string[]\n onChange?: (value: string[]) => void\n}\n\nconst PermissionCollapse: FC<PermissionCollapseProps> = props => {\n const { permissions, readonly, expand, value, onChange } = props\n const [activeKey, setActiveKey] = useState<string[]>([])\n const [checkedMap, setCheckedMap] = useState<Record<string, boolean>>({})\n const [internalValue, setInternalValue] = useState<string[]>(value ?? [])\n const { t } = useTranslation()\n const [, startTransition] = useTransition()\n\n const onCollapseChange = useCallback((key: string | string[]) => {\n setActiveKey(key as string[])\n }, [])\n\n const getCheckedValue = (checkedValue: boolean, codes: string[]) => {\n let tempValue: string[] = []\n\n if (checkedValue) {\n tempValue = [...new Set(internalValue.concat(codes))]\n } else {\n tempValue = internalValue.slice()\n\n codes.forEach(code => {\n const index = tempValue.findIndex(item => item === code)\n if (index > -1) {\n tempValue.splice(index, 1)\n }\n })\n }\n\n return tempValue\n }\n\n const onCheckChange = (e: CheckboxChangeEvent, codes: string[]) => {\n const checkedValue = getCheckedValue(e.target.checked, codes)\n setInternalValue(checkedValue)\n onChange?.(checkedValue)\n }\n\n useEffect(() => {\n setInternalValue(value ?? [])\n }, [value])\n\n useEffect(() => {\n if (expand) {\n startTransition(() => {\n // 改变展开状态\n setActiveKey((permissions ?? []).map(({ category }) => category))\n })\n }\n }, [expand, permissions])\n\n useEffect(() => {\n const checkedValue = (permissions ?? []).reduce(\n (acc, curr) => {\n acc[curr.category] = curr.permissions.every(item => internalValue?.includes(item.value))\n return acc\n },\n {} as Record<string, boolean>,\n )\n\n setCheckedMap(checkedValue)\n }, [internalValue, permissions])\n\n const items = (permissions ?? []).map(item => ({\n key: item.category,\n label: item.category,\n extra: !readonly && (\n <Checkbox\n checked={checkedMap[item.category]}\n onChange={e => {\n onCheckChange(\n e,\n item.permissions?.map(permission => permission.value),\n )\n }}\n >\n {t('global.selectAll')}\n </Checkbox>\n ),\n children: (\n <Checkbox.Group className=\"w-full\" value={internalValue} disabled={readonly}>\n <Row gutter={[10, 10]} className=\"w-full\">\n {item.permissions?.map(permission => (\n <Col key={permission.value} span={6}>\n <Checkbox\n value={permission.value}\n onChange={e => {\n onCheckChange(e, [permission.value])\n }}\n >\n {permission.label}\n </Checkbox>\n </Col>\n ))}\n </Row>\n </Checkbox.Group>\n ),\n }))\n\n return (\n <Collapse className=\"w-full\" collapsible=\"header\" activeKey={activeKey} items={items} onChange={onCollapseChange} />\n )\n}\n\nexport default PermissionCollapse\n","import { Button, Card, Divider, Empty, Select, Skeleton, Space, Typography } from 'antd'\nimport type { FC } from 'react'\nimport { useEffect, useState } from 'react'\n\nimport { useTranslation } from '@/locale'\nimport { useGames } from '@/services'\n\nimport { useAllPermissionsV2 } from '../../services'\nimport type { RoleV2 } from '../../types'\nimport PermissionCollapse from '../permissionCollapse'\nimport type { PermissionListPropsBase } from './types'\n\nconst { Text } = Typography\nconst { Option } = Select\n\ninterface PermissionWithGameProps extends PermissionListPropsBase {\n value?: RoleV2['permissions']\n onChange?: (checkedValue: RoleV2['permissions']) => void\n}\n\nconst PermissionWithGame: FC<PermissionWithGameProps> = props => {\n const { expand = true, value, readonly, onChange } = props\n const { data: permission, isLoading: isPermissionLoading, error } = useAllPermissionsV2()\n const { data: games, isLoading: isGamesLoading } = useGames()\n const [gameList, setGameList] = useState<{ gameId: string; permissions: string[] }[]>([])\n const globalPermissions = permission?.filter(item => item.is_common)\n const gamePermissions = permission?.filter(item => !item.is_common)\n const isLoading = isPermissionLoading || isGamesLoading\n const { t } = useTranslation()\n\n useEffect(() => {\n const list: { gameId: string; permissions: string[] }[] = []\n\n Object.keys(value ?? {}).forEach(key => {\n if (key !== 'global') {\n list.push({ gameId: key, permissions: value?.[key] ?? [] })\n }\n })\n\n setGameList(list)\n }, [value])\n\n if (error) {\n return (\n <div className=\"flex justify-center\">\n <Text type=\"danger\">{t('PermissionList.failedDescription')}</Text>\n </div>\n )\n }\n\n const addGame = () => {\n setGameList(prev => [...prev, { gameId: '', permissions: [] }])\n }\n\n const removeGame = (index: number) => {\n setGameList(prev => prev.filter((_, i) => i !== index))\n }\n\n return (\n <div className=\"flex flex-col w-full\">\n <div className=\"mb-12\">\n <Divider dashed>{t('PermissionList.baseSectionTitle')}</Divider>\n </div>\n <Skeleton active loading={isLoading}>\n <PermissionCollapse\n value={value?.global}\n readonly={readonly}\n permissions={globalPermissions}\n expand={expand}\n onChange={newValue => {\n onChange?.({\n ...value,\n global: newValue,\n })\n }}\n />\n </Skeleton>\n <div className=\"my-12\">\n <Divider dashed>{t('PermissionList.gameSectionTitle')}</Divider>\n </div>\n {gameList.map((item, index) => (\n <Card\n title={\n <Space>\n <Text>{t('global.game')}</Text>\n {readonly ? (\n <Text>{games?.find(game => String(game.id) === item.gameId)?.name}</Text>\n ) : (\n <Select\n disabled={readonly}\n value={gameList[index].gameId || undefined}\n className=\"w-40\"\n placeholder={t('PermissionList.gameSelectPlaceholder')}\n onChange={selectedValue => {\n setGameList(pev => {\n const temp = pev.slice()\n temp[index].gameId = selectedValue\n return temp\n })\n }}\n >\n {games?.map(game => (\n <Option\n key={game.id}\n value={game.id}\n disabled={gameList.some(({ gameId }) => gameId === String(game.id))}\n >\n {game.name}\n </Option>\n ))}\n </Select>\n )}\n </Space>\n }\n key={index}\n className=\"mb-6\"\n extra={\n !readonly && (\n <Button\n type=\"link\"\n onClick={() => {\n removeGame(index)\n }}\n >\n {t('PermissionList.removeText')}\n </Button>\n )\n }\n >\n {gameList[index].gameId ? (\n <Skeleton active loading={isLoading}>\n <PermissionCollapse\n value={value?.[gameList[index].gameId]}\n readonly={readonly}\n expand={expand}\n permissions={gamePermissions}\n onChange={newValue => {\n onChange?.({\n ...value,\n [gameList[index].gameId]: newValue,\n })\n }}\n />\n </Skeleton>\n ) : (\n <Empty description={t('PermissionList.gameSectionDescription')} />\n )}\n </Card>\n ))}\n {!readonly && (\n <Button block type=\"dashed\" onClick={addGame}>\n {t('PermissionList.addText')}\n </Button>\n )}\n </div>\n )\n}\n\nexport default PermissionWithGame\n","import { Skeleton, Typography } from 'antd'\nimport type { FC } from 'react'\n\nimport { useTranslation } from '@/locale'\n\nimport { useAllPermissions } from '../../services'\nimport type { RoleV1 } from '../../types'\nimport PermissionCollapse from '../permissionCollapse'\nimport type { PermissionListPropsBase } from './types'\n\nconst { Text } = Typography\n\ninterface PermissionWithoutGameProps extends PermissionListPropsBase {\n value?: RoleV1['permissions']\n onChange?: (checkedValue: RoleV1['permissions']) => void\n}\n\nconst PermissionWithoutGame: FC<PermissionWithoutGameProps> = props => {\n const { expand = true, value, readonly, onChange } = props\n const { data: permissions, isLoading, error } = useAllPermissions()\n const { t } = useTranslation()\n\n if (error) {\n return (\n <div className=\"flex justify-center\">\n <Text type=\"danger\">{t('PermissionList.failedDescription')}</Text>\n </div>\n )\n }\n\n return (\n <Skeleton active loading={isLoading}>\n <PermissionCollapse\n value={value}\n permissions={permissions}\n readonly={readonly}\n expand={expand}\n onChange={onChange}\n />\n </Skeleton>\n )\n}\n\nexport default PermissionWithoutGame\n","import type { FC } from 'react'\n\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { PermissionVersion } from '@/constants'\n\nimport type { RoleV1, RoleV2 } from '../../types'\nimport PermissionWithGame from './PermissionWithGame'\nimport PermissionWithoutGame from './PermissionWithoutGame'\nimport type { PermissionListPropsBase } from './types'\n\ninterface PermissionListProps extends PermissionListPropsBase {\n value?: RoleV1['permissions'] | RoleV2['permissions']\n onChange?: (checkedValue: RoleV1['permissions'] | RoleV2['permissions']) => void\n}\n\nconst PermissionList: FC<PermissionListProps> = (props: PermissionListProps) => {\n const { value } = props\n console.log('value', typeof value, value === null, JSON.stringify(value))\n const { permissionVersion } = useToolkitsStore()\n\n if (permissionVersion === PermissionVersion.V2) {\n return <PermissionWithGame {...props} value={value as RoleV2['permissions']} />\n }\n\n return <PermissionWithoutGame {...props} value={value as RoleV1['permissions']} />\n}\n\nexport default PermissionList\n","import { App, Form, Input } from 'antd'\n\nimport { useFormModal } from '@/hooks/modal'\nimport { useTranslation } from '@/locale'\n\nimport PermissionList from '../components/permissionList'\nimport { useCreateRole, useUpdateRole } from '../services'\nimport type { RoleListItem, RoleV1, RoleV2 } from '../types'\n\nexport const useRoleModal = ({ mode, onSuccess }: { mode: 'create' | 'update'; onSuccess?: () => void }) => {\n const { message } = App.useApp()\n const { t } = useTranslation()\n const create = useCreateRole()\n const update = useUpdateRole()\n\n const isCreateMode = mode === 'create'\n\n const title = isCreateMode ? t('Role.createTitle') : t('Role.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 name=\"permissions\">\n <PermissionList />\n </Form.Item>\n </>\n )\n\n const onConfirm = async (\n values: { name: string; permissions: RoleListItem['permissions'] },\n extraValues: { id: number },\n ) => {\n const name = `role_${values.name}`\n const permissions = values.permissions\n\n if (isCreateMode) {\n await create.mutateAsync({ name, permissions })\n message.success(t('Role.createSuccessfully'))\n } else {\n await update.mutateAsync({ id: extraValues?.id, name, permissions })\n message.success(t('Role.updateSuccessfully'))\n }\n onSuccess?.()\n }\n\n return useFormModal<\n {\n name: string\n permissions: RoleV1['permissions'] | RoleV2['permissions']\n },\n { id: number }\n >({\n title,\n width: '1000px',\n formProps: {\n layout: 'vertical',\n },\n content,\n onConfirm,\n })\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {k as k$1,l,i}from'./chunk-W3E3WPLB.js';import {useQuery,useQueryClient,useMutation}from'@tanstack/react-query';function f(){let s=k$1();return useQuery({queryKey:l.roles.all,queryFn:()=>s.get("/api/usystem/role/all")})}function R(s){let i$1=i(o=>o.permissionVersion),t=k$1(),e=i$1==="v2"?"v2":"v1";return useQuery({queryKey:l.roles.detail(s,e),queryFn:()=>t.get(`/api/usystem/role/${e==="v2"?"infoV2":"info"}?name=${s}`)})}function q(){let{permissionVersion:s}=i(o=>o),i$1=k$1(),t=useQueryClient(),e=s==="v2"?"v2":"v1";return useMutation({mutationKey:l.roles.create(e),mutationFn:({name:o,permissions:u})=>i$1.post(e==="v2"?"/api/usystem/role/createV2":"/api/usystem/role/create",{name:o,permissions:u}),onSuccess:()=>{t.invalidateQueries({queryKey:l.roles.all});}})}function v(){let{permissionVersion:s}=i(o=>o),i$1=k$1(),t=useQueryClient(),e=s==="v2"?"v2":"v1";return useMutation({mutationKey:l.roles.update(e),mutationFn:({id:o,name:u,permissions:m})=>i$1.post(e==="v2"?"/api/usystem/role/updateV2":"/api/usystem/role/update",{id:o,name:u,permissions:m}),onSuccess:()=>{t.invalidateQueries({queryKey:l.roles.all});}})}function C(){let s=k$1(),i=useQueryClient();return useMutation({mutationKey:l.roles.delete,mutationFn:({id:t,name:e})=>s.post("/api/usystem/role/delete",{id:t,name:e}),onSuccess:()=>{i.invalidateQueries({queryKey:l.roles.all});}})}function K(){let s=k$1(),i$1=useQueryClient(),{permissionVersion:t}=i();return useMutation({mutationKey:l.users.create,mutationFn:e=>{let o=m=>"permissions"in m,u=e;if(o(e)&&t==="v4"){let m=e.permissions.map(y=>({game_group:["*"],game_ids:y.game_ids,role:y.role}));u={...e,permissions:m};}return s.post("/api/usystem/user/create",u)},onSuccess:()=>{i$1.invalidateQueries({queryKey:l.users.all});}})}function h(){let s=k$1(),i$1=useQueryClient(),{permissionVersion:t}=i();return useMutation({mutationKey:l.users.update,mutationFn:e=>{let o=m=>"permissions"in m,u=e;if(o(e)&&t==="v4"){let m=e.permissions.map(y=>({game_group:["*"],game_ids:y.game_ids,role:y.role}));u={...e,permissions:m};}return s.post("/api/usystem/user/update",u)},onSuccess:()=>{i$1.invalidateQueries({queryKey:l.users.all});}})}function W(){let s=k$1(),i=useQueryClient();return useMutation({mutationKey:l.users.delete,mutationFn:({id:t,name:e})=>s.post("/api/usystem/user/delete",{id:t,name:e}),onSuccess:()=>{i.invalidateQueries({queryKey:l.users.all});}})}function k(){let s=k$1();return useQuery({queryKey:l.permissions.allPermissions,queryFn:()=>s.get("/api/usystem/user/allPermssions")})}function x(){let s=k$1();return useQuery({queryKey:l.permissions.allPermissionsV2,queryFn:()=>s.get("/api/usystem/user/allPermssionsV2")})}export{f as a,R as b,q as c,v as d,C as e,K as f,h as g,W as h,k as i,x as j};//# sourceMappingURL=chunk-LEVOCZUQ.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-LEVOCZUQ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/modules/permission/services/index.ts"],"names":["useAllRoles","ky","useKy","useQuery","queryKeys","useRole","name","permissionVersion","useToolkitsStore","state","version","useCreateRole","s","queryClient","useQueryClient","useMutation","permissions","useUpdateRole","id","useRemoveRole","useCreateUser","arg","hasPermissions","obj","requestData","transformedPermissions","item","useUpdateUser","useRemoveUser","useAllPermissions","useAllPermissionsV2"],"mappings":"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","file":"chunk-H5Y4DYUL.js","sourcesContent":["import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'\n\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { PermissionVersion, WILDCARD } from '@/constants'\nimport { useKy } from '@/libs'\nimport { queryKeys } from '@/queryKeys'\n\nimport type { PermissionEnumItem, RoleEnumItem, RoleV1, RoleV2 } from '../types'\n\nexport function useAllRoles() {\n const ky = useKy()\n return useQuery({\n queryKey: queryKeys.roles.all,\n queryFn: () => ky.get<RoleEnumItem[]>('/api/usystem/role/all'),\n })\n}\n\nexport function useRole(name: string) {\n const permissionVersion = useToolkitsStore(state => state.permissionVersion)\n const ky = useKy()\n const version = permissionVersion === PermissionVersion.V2 ? 'v2' : 'v1'\n\n return useQuery({\n queryKey: queryKeys.roles.detail(name, version),\n queryFn: () => ky.get<RoleV1 | RoleV2>(`/api/usystem/role/${version === 'v2' ? 'infoV2' : 'info'}?name=${name}`),\n })\n}\n\nexport function useCreateRole() {\n const { permissionVersion } = useToolkitsStore(s => s)\n const ky = useKy()\n const queryClient = useQueryClient()\n const version = permissionVersion === PermissionVersion.V2 ? 'v2' : 'v1'\n\n return useMutation({\n mutationKey: queryKeys.roles.create(version),\n mutationFn: ({ name, permissions }: { name: string; permissions: RoleV1['permissions'] | RoleV2['permissions'] }) =>\n ky.post(version === 'v2' ? '/api/usystem/role/createV2' : '/api/usystem/role/create', { name, permissions }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.roles.all })\n },\n })\n}\n\nexport function useUpdateRole() {\n const { permissionVersion } = useToolkitsStore(s => s)\n const ky = useKy()\n const queryClient = useQueryClient()\n const version = permissionVersion === PermissionVersion.V2 ? 'v2' : 'v1'\n\n return useMutation({\n mutationKey: queryKeys.roles.update(version),\n mutationFn: ({\n id,\n name,\n permissions,\n }: {\n id: number\n name: string\n permissions: RoleV1['permissions'] | RoleV2['permissions']\n }) =>\n ky.post(version === 'v2' ? '/api/usystem/role/updateV2' : '/api/usystem/role/update', { id, name, permissions }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.roles.all })\n },\n })\n}\n\nexport function useRemoveRole() {\n const ky = useKy()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationKey: queryKeys.roles.delete,\n mutationFn: ({ id, name }: { id: number; name: string }) => ky.post('/api/usystem/role/delete', { id, name }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.roles.all })\n },\n })\n}\n\ntype CreateUserWithRoles = { name: string; roles: string[] }\n\ntype CreateUserPermission = {\n game_group?: string[]\n game_ids: string[]\n role: string\n}\n\ntype CreateUserWithPermissions = {\n name: string\n permissions: CreateUserPermission[]\n}\n\nexport function useCreateUser() {\n const ky = useKy()\n const queryClient = useQueryClient()\n const { permissionVersion } = useToolkitsStore()\n\n return useMutation({\n mutationKey: queryKeys.users.create,\n mutationFn: (arg: CreateUserWithRoles | CreateUserWithPermissions) => {\n // 使用类型守卫判断是否包含 permissions\n const hasPermissions = (obj: typeof arg): obj is CreateUserWithPermissions => 'permissions' in obj\n\n let requestData: CreateUserWithRoles | CreateUserWithPermissions = arg\n\n if (hasPermissions(arg) && permissionVersion === PermissionVersion.V4) {\n const transformedPermissions = arg.permissions.map(item => ({\n game_group: [WILDCARD],\n game_ids: item.game_ids,\n role: item.role,\n }))\n requestData = { ...arg, permissions: transformedPermissions }\n }\n\n return ky.post('/api/usystem/user/create', requestData)\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.users.all })\n },\n })\n}\n\ntype UpdateUserWithRoles = { id: string; name: string; roles: string[] }\n\ntype UpdateUserPermission = {\n game_group?: string[]\n game_ids: string[]\n role: string\n}\n\ntype UpdateUserWithPermissions = {\n id: string\n name: string\n permissions: UpdateUserPermission[]\n}\n\nexport function useUpdateUser() {\n const ky = useKy()\n const queryClient = useQueryClient()\n const { permissionVersion } = useToolkitsStore()\n\n return useMutation({\n mutationKey: queryKeys.users.update,\n mutationFn: (arg: UpdateUserWithRoles | UpdateUserWithPermissions) => {\n // 使用类型守卫判断是否包含 permissions\n const hasPermissions = (obj: typeof arg): obj is UpdateUserWithPermissions => 'permissions' in obj\n\n let requestData: UpdateUserWithRoles | UpdateUserWithPermissions = arg\n\n if (hasPermissions(arg) && permissionVersion === PermissionVersion.V4) {\n const transformedPermissions = arg.permissions.map(item => ({\n game_group: [WILDCARD],\n game_ids: item.game_ids,\n role: item.role,\n }))\n requestData = { ...arg, permissions: transformedPermissions }\n }\n\n return ky.post('/api/usystem/user/update', requestData)\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.users.all })\n },\n })\n}\n\nexport function useRemoveUser() {\n const ky = useKy()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationKey: queryKeys.users.delete,\n mutationFn: ({ id, name }: { id: string; name: string }) => ky.post('/api/usystem/user/delete', { id, name }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.users.all })\n },\n })\n}\n\nexport function useAllPermissions() {\n const ky = useKy()\n\n return useQuery({\n queryKey: queryKeys.permissions.allPermissions,\n queryFn: () => ky.get<PermissionEnumItem[]>('/api/usystem/user/allPermssions'),\n })\n}\n\nexport function useAllPermissionsV2() {\n const ky = useKy()\n\n return useQuery({\n queryKey: queryKeys.permissions.allPermissionsV2,\n queryFn: () => ky.get<PermissionEnumItem[]>('/api/usystem/user/allPermssionsV2'),\n })\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/modules/permission/services/index.ts"],"names":["useAllRoles","ky","useKy","useQuery","queryKeys","useRole","name","permissionVersion","useToolkitsStore","state","version","useCreateRole","s","queryClient","useQueryClient","useMutation","permissions","useUpdateRole","id","useRemoveRole","useCreateUser","arg","hasPermissions","obj","requestData","transformedPermissions","item","useUpdateUser","useRemoveUser","useAllPermissions","useAllPermissionsV2"],"mappings":"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","file":"chunk-LEVOCZUQ.js","sourcesContent":["import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'\n\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { PermissionVersion, WILDCARD } from '@/constants'\nimport { useKy } from '@/libs'\nimport { queryKeys } from '@/queryKeys'\n\nimport type { PermissionEnumItem, RoleEnumItem, RoleV1, RoleV2 } from '../types'\n\nexport function useAllRoles() {\n const ky = useKy()\n return useQuery({\n queryKey: queryKeys.roles.all,\n queryFn: () => ky.get<RoleEnumItem[]>('/api/usystem/role/all'),\n })\n}\n\nexport function useRole(name: string) {\n const permissionVersion = useToolkitsStore(state => state.permissionVersion)\n const ky = useKy()\n const version = permissionVersion === PermissionVersion.V2 ? 'v2' : 'v1'\n\n return useQuery({\n queryKey: queryKeys.roles.detail(name, version),\n queryFn: () => ky.get<RoleV1 | RoleV2>(`/api/usystem/role/${version === 'v2' ? 'infoV2' : 'info'}?name=${name}`),\n })\n}\n\nexport function useCreateRole() {\n const { permissionVersion } = useToolkitsStore(s => s)\n const ky = useKy()\n const queryClient = useQueryClient()\n const version = permissionVersion === PermissionVersion.V2 ? 'v2' : 'v1'\n\n return useMutation({\n mutationKey: queryKeys.roles.create(version),\n mutationFn: ({ name, permissions }: { name: string; permissions: RoleV1['permissions'] | RoleV2['permissions'] }) =>\n ky.post(version === 'v2' ? '/api/usystem/role/createV2' : '/api/usystem/role/create', { name, permissions }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.roles.all })\n },\n })\n}\n\nexport function useUpdateRole() {\n const { permissionVersion } = useToolkitsStore(s => s)\n const ky = useKy()\n const queryClient = useQueryClient()\n const version = permissionVersion === PermissionVersion.V2 ? 'v2' : 'v1'\n\n return useMutation({\n mutationKey: queryKeys.roles.update(version),\n mutationFn: ({\n id,\n name,\n permissions,\n }: {\n id: number\n name: string\n permissions: RoleV1['permissions'] | RoleV2['permissions']\n }) =>\n ky.post(version === 'v2' ? '/api/usystem/role/updateV2' : '/api/usystem/role/update', { id, name, permissions }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.roles.all })\n },\n })\n}\n\nexport function useRemoveRole() {\n const ky = useKy()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationKey: queryKeys.roles.delete,\n mutationFn: ({ id, name }: { id: number; name: string }) => ky.post('/api/usystem/role/delete', { id, name }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.roles.all })\n },\n })\n}\n\ntype CreateUserWithRoles = { name: string; roles: string[] }\n\ntype CreateUserPermission = {\n game_group?: string[]\n game_ids: string[]\n role: string\n}\n\ntype CreateUserWithPermissions = {\n name: string\n permissions: CreateUserPermission[]\n}\n\nexport function useCreateUser() {\n const ky = useKy()\n const queryClient = useQueryClient()\n const { permissionVersion } = useToolkitsStore()\n\n return useMutation({\n mutationKey: queryKeys.users.create,\n mutationFn: (arg: CreateUserWithRoles | CreateUserWithPermissions) => {\n // 使用类型守卫判断是否包含 permissions\n const hasPermissions = (obj: typeof arg): obj is CreateUserWithPermissions => 'permissions' in obj\n\n let requestData: CreateUserWithRoles | CreateUserWithPermissions = arg\n\n if (hasPermissions(arg) && permissionVersion === PermissionVersion.V4) {\n const transformedPermissions = arg.permissions.map(item => ({\n game_group: [WILDCARD],\n game_ids: item.game_ids,\n role: item.role,\n }))\n requestData = { ...arg, permissions: transformedPermissions }\n }\n\n return ky.post('/api/usystem/user/create', requestData)\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.users.all })\n },\n })\n}\n\ntype UpdateUserWithRoles = { id: string; name: string; roles: string[] }\n\ntype UpdateUserPermission = {\n game_group?: string[]\n game_ids: string[]\n role: string\n}\n\ntype UpdateUserWithPermissions = {\n id: string\n name: string\n permissions: UpdateUserPermission[]\n}\n\nexport function useUpdateUser() {\n const ky = useKy()\n const queryClient = useQueryClient()\n const { permissionVersion } = useToolkitsStore()\n\n return useMutation({\n mutationKey: queryKeys.users.update,\n mutationFn: (arg: UpdateUserWithRoles | UpdateUserWithPermissions) => {\n // 使用类型守卫判断是否包含 permissions\n const hasPermissions = (obj: typeof arg): obj is UpdateUserWithPermissions => 'permissions' in obj\n\n let requestData: UpdateUserWithRoles | UpdateUserWithPermissions = arg\n\n if (hasPermissions(arg) && permissionVersion === PermissionVersion.V4) {\n const transformedPermissions = arg.permissions.map(item => ({\n game_group: [WILDCARD],\n game_ids: item.game_ids,\n role: item.role,\n }))\n requestData = { ...arg, permissions: transformedPermissions }\n }\n\n return ky.post('/api/usystem/user/update', requestData)\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.users.all })\n },\n })\n}\n\nexport function useRemoveUser() {\n const ky = useKy()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationKey: queryKeys.users.delete,\n mutationFn: ({ id, name }: { id: string; name: string }) => ky.post('/api/usystem/user/delete', { id, name }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.users.all })\n },\n })\n}\n\nexport function useAllPermissions() {\n const ky = useKy()\n\n return useQuery({\n queryKey: queryKeys.permissions.allPermissions,\n queryFn: () => ky.get<PermissionEnumItem[]>('/api/usystem/user/allPermssions'),\n })\n}\n\nexport function useAllPermissionsV2() {\n const ky = useKy()\n\n return useQuery({\n queryKey: queryKeys.permissions.allPermissionsV2,\n queryFn: () => ky.get<PermissionEnumItem[]>('/api/usystem/user/allPermssionsV2'),\n })\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {a}from'./chunk-VFRB44XY.js';import {a as a$1}from'./chunk-EESZYCYA.js';import {k}from'./chunk-W3E3WPLB.js';import {Form,Spin,Table,Result,theme,Space,Button}from'antd';import {forwardRef,useMemo,useRef,useState,useEffect,useCallback,cloneElement,useImperativeHandle,Fragment}from'react';import {jsx,jsxs,Fragment as Fragment$1}from'react/jsx-runtime';import {flushSync}from'react-dom';import {createRoot}from'react-dom/client';import {isEqual}from'lodash-es';import {create}from'zustand';import {devtools,subscribeWithSelector}from'zustand/middleware';import {useQuery}from'@tanstack/react-query';var Oe=d=>{let{extras:i,isConfirming:e,onConfirm:s,onReset:t,children:o,buttonsAlign:r="left",showReset:l}=d,{t:u}=a(),{token:{colorFillAlter:I,lineWidth:x,lineType:y,colorBorder:T,borderRadiusLG:V}}=theme.useToken();return jsx("div",{className:"max-w-none p-6 mb-6 border",style:{background:I,borderWidth:x,borderStyle:y,borderColor:T,borderRadius:V},children:jsxs("div",{className:`flex ${r==="bottom"?"flex-col":"flex-row"}`,children:[jsx("div",{className:`${r==="left"?"grow-0":"flex-1"}`,children:o}),jsx("div",{className:`${r==="bottom"?"text-end":"text-start"} ml-4`,children:jsxs(Space,{children:[jsx(Button,{type:"primary",disabled:e,onClick:s,children:u("FilterFormWrapper.confirmText")}),i?.map(A=>jsx(Fragment,{children:A.children},A.key)),l&&jsx(Button,{onClick:t,children:u("FilterFormWrapper.resetText")})]})})]})})},N=Oe;var qe=d=>{let i=/(<[^>]*>)/;return d.split(i).filter(e=>e!=="")};function Me(d){let i=document.createElement("div"),e=createRoot(i);return new Promise(s=>{setTimeout(()=>{flushSync(()=>{e.render(d);}),s(i.innerHTML);});})}var We=d=>{let{texts:i,children:e}=d,[s,t]=useState("");return useEffect(()=>{Me(e).then(o=>{let r=qe(o);for(let l of i)for(let u=0;u<r.length;u++)r[u]=r[u].replace(String(l),`<span style='color: #DC143C;'>${l}</span>`);t(r.join(""));});},[e,i]),jsx("div",{dangerouslySetInnerHTML:{__html:s}})},je=We;var ue=Object.freeze({page:1,size:10,filters:Object.freeze({})}),Ke=()=>create()(devtools(subscribeWithSelector((d,i)=>({instances:new Map,registerInstance(e,s,t,o){d(r=>{let l=r.instances.get(e);if(l){if(l.refetch!==o){let x={...l,refetch:o},y=new Map(r.instances);return y.set(e,x),{instances:y}}return r}let u={id:e,url:s,queryKey:t,payload:ue,refetch:o},I=new Map(r.instances);return I.set(e,u),{instances:I}});},unregisterInstance(e){d(s=>{let t=new Map(s.instances);return t.delete(e)?{instances:t}:s});},updatePayload(e,s){d(t=>{let o=t.instances.get(e);if(!o)return t;let r={...o.payload,...s};if(!isEqual(o.payload,r)){let l={...o,payload:r},u=new Map(t.instances);return u.set(e,l),{instances:u}}return t});},getPayload(e){return i().instances.get(e)?.payload??ue},async refetch(e,s){let t=i().instances.get(e);if(!t){console.warn(`QueryList instance with id "${e}" not found`);return}let o=false;if(s){let r=t.payload,l={...r,...s};isEqual(r,l)||(i().updatePayload(e,s),o=true);}if(!o)try{await t.refetch();}catch(r){throw console.error(`Failed to refetch QueryList instance "${e}":`,r),r}},getInstance(e){return i().instances.get(e)},getAllInstances(){return Array.from(i().instances.values())}})),{name:"query-list-store"})),Ue=Ke(),m=Ue;var me=(t=>(t[t.Confirm=0]="Confirm",t[t.Reset=1]="Reset",t[t.Jump=2]="Jump",t[t.Init=3]="Init",t))(me||{}),rt=300*1e3,nt=30*1e3,pe=["GET","HEAD","OPTIONS"],at=["POST","PUT","PATCH","DELETE"],st=0,ot=()=>`queryList_${Date.now()}_${++st}`,it=(d,i)=>{let{t:e}=a(),{form:s,identifier:t,code:o,onePage:r,buttonsAlign:l,showReset:u,defaultSize:I=10,refreshInterval:x=0,tableExtra:y,renderForm:T,afterSuccess:V,afterError:A,footer:K,pageSizeOptions:U,request:H,dataAdapter:B,...ye}=d,[a$2]=Form.useForm(s),f=useMemo(()=>t||ot(),[t]),R=useRef(3),{data:E,isLoading:ge}=a$1(o),[he,L]=useState(false),q=useRef(false),M=useRef(false),be=m(n=>n.getPayload(f)),Ie=k(),{page:Q,size:S=I,filters:h}=be,Le=typeof H=="function"?H({page:Q,size:S,filters:h}):H,{url:v,method:$="GET",body:G,searchParams:W,headers:Pe,cacheTime:Fe=rt,staleTime:xe=nt}=Le,D=$.toUpperCase();[...pe,...at].includes(D)||console.warn(`QueryList: \u4E0D\u652F\u6301\u7684 HTTP \u8BF7\u6C42\u65B9\u6CD5 "${$}"\uFF0C\u5C06\u4F7F\u7528 GET \u65B9\u6CD5`);let J=pe.includes(D),Y={...h,...!r&&{page:Q,size:S}},p,P;G!==void 0?(p=G,P=W):W!==void 0?(P=W,p=void 0):J?(P=Y,p=void 0):(p=Y,P=void 0);let X=Pe,Z=useRef(false),ee=["queryList",v,f,D,Q,S,h,p,P,X],{data:g,isLoading:te,refetch:j}=useQuery({queryKey:ee,queryFn:async()=>{try{let n={method:D,searchParams:P,headers:X};p&&!J&&(p instanceof FormData||typeof p=="string"?n.body=p:n.json=p);let c=await Ie.request({url:v,...n});return Z.current=!0,V?.(R.current,a$2,c),c}catch(n){let c=n instanceof Error?n:new Error(String(n));throw A?.(c,R.current,a$2),c}},retry:(n,c)=>!(n>=3||c?.message?.includes("401")),retryDelay:n=>Math.min(1e3*2**n,3e4),refetchOnWindowFocus:false,refetchInterval:Z.current?x:0,gcTime:Fe,staleTime:xe,enabled:E&&he}),re=useMemo(()=>{let n=B,c={total:g?.total,items:g?.list};return typeof n=="function"?{...c,...n(g)}:{...c,...n}},[B,g]);useEffect(()=>(m.getState().registerInstance(f,v,ee,j),()=>{m.getState().unregisterInstance(f);}),[f,v]);let k$1=re.items,ne=re.total,Re=useMemo(()=>r?false:{pageSizeOptions:U,showSizeChanger:true,showQuickJumper:true,current:Q,pageSize:S,total:ne,onChange:async(n,c)=>{R.current=2,m.getState().refetch(f,{page:n,size:c});}},[r,U,Q,S,ne,f]),ae=useCallback(async()=>{R.current=0;try{await a$2.validateFields(),L(!0),m.getState().refetch(f,{page:1,filters:a$2.getFieldsValue()});}catch{L(false);}},[a$2,f]),Qe=useCallback(async()=>{R.current=1,a$2.resetFields();try{await a$2.validateFields({validateOnly:!0}),L(!0),m.getState().refetch(f,{page:1,filters:a$2.getFieldsValue()});}catch{L(false);}},[a$2,f]),Se=typeof T=="function"?jsx(N,{showReset:u,buttonsAlign:l,isConfirming:te,onReset:Qe,onConfirm:ae,children:cloneElement(T(a$2),{onKeyUp:n=>{n.key==="Enter"&&ae();}})}):jsx(Form,{form:a$2}),Te=typeof y=="function"?y(a$2,g):y,Ae=K?()=>jsx(Fragment$1,{children:K(g)}):void 0;return useEffect(()=>{if(!q.current||M.current)return;let n=a$2.getFieldsValue();h&&!isEqual(n,h)&&(M.current=true,a$2.setFieldsValue(h),setTimeout(()=>{M.current=false;},0));},[h,a$2]),useEffect(()=>{if(!E||q.current)return;let n=async()=>{console.log("QueryList init starting");try{a$2.resetFields();let O=await a$2.validateFields({validateOnly:!0});console.log("QueryList init validation success:",O),m.getState().updatePayload(f,{page:1,filters:O}),L(!0),console.log("QueryList init completed, isValid set to true");}catch(O){console.log("QueryList init validation failed:",O),L(false);}finally{q.current=true;}},c=requestAnimationFrame(()=>{Promise.resolve().then(n);});return ()=>{c&&cancelAnimationFrame(c);}},[E,f,a$2]),useImperativeHandle(i,()=>({data:g,dataSource:k$1,form:a$2,refetch:j}),[g,k$1,a$2,j]),ge?jsx("div",{className:"flex justify-center items-center h-[300px]",children:jsx(Spin,{})}):E?jsxs("div",{children:[Se,Te,jsx(Table,{...ye,dataSource:k$1,loading:te,pagination:Re,footer:Ae})]}):jsx(Result,{status:403,subTitle:e("global.noEntitlement")})},ct=forwardRef(it),lt=ct;export{N as a,je as b,m as c,me as d,lt as e};//# sourceMappingURL=chunk-PLJPZJ7T.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-PLJPZJ7T.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/filterFormWrapper/FilterFormWrapper.tsx","../src/components/highlight/Highlight.tsx","../src/components/queryList/stores.ts","../src/components/queryList/QueryList.tsx"],"names":["FilterFormWrapper","props","extras","isConfirming","onConfirm","onReset","children","buttonsAlign","showReset","t","useTranslation","colorFillAlter","lineWidth","lineType","colorBorder","borderRadiusLG","theme","jsx","jsxs","Space","Button","item","Fragment","FilterFormWrapper_default","splitByTags","str","regex","part","renderToString","node","container","root","createRoot","resolve","flushSync","Highlight","texts","htmlString","setHtmlString","useState","useEffect","result","text","index","Highlight_default","DEFAULT_PAYLOAD","createStore","create","devtools","subscribeWithSelector","set","get","id","url","queryKey","refetch","state","existingInstance","updatedInstance","newInstances","instance","payload","newPayload","isEqual","payloadChanged","currentPayload","error","store","useQueryListStore","QueryListAction","DEFAULT_CACHE_TIME","DEFAULT_STALE_TIME","BODYLESS_METHODS","BODY_SUPPORTED_METHODS","identifierCounter","generateUniqueIdentifier","InternalQueryList","ref","form","identifier","code","onePage","defaultSize","refreshInterval","tableExtra","renderForm","afterSuccess","afterError","footer","pageSizeOptions","request","dataAdapter","tableProps","formInstance","Form","finalIdentifier","useMemo","action","useRef","accessible","isChecking","useAuth","isValid","setIsValid","isInitialized","isUpdatingFromPayload","subscribedPayload","s","ky","useKy","page","size","filters","resolvedRequest","method","body","searchParams","headers","cacheTime","staleTime","normalizedMethod","isBodylessMethod","defaultRequestData","requestBody","requestSearchParams","requestHeaders","shouldPoll","data","isLoading","useQuery","kyOptions","response","err","errorObj","failureCount","retryError","attemptIndex","resolvedDataAdapter","adapter","defaultAdapter","dataSource","total","pagination","currentPage","currentSize","useCallback","formRenderer","cloneElement","e","tableExtraRenderer","renderFooter","currentFormValues","init","value","rafId","useImperativeHandle","Spin","Table","Result","QueryList","forwardRef","QueryList_default"],"mappings":"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","file":"chunk-PLJPZJ7T.js","sourcesContent":["import { Button, Space, theme } from 'antd'\nimport type { Key, PropsWithChildren, ReactNode } from 'react'\nimport { Fragment } from 'react'\n\nimport { useTranslation } from '@/locale'\n\nexport interface FilterFormWrapperProps extends PropsWithChildren {\n onConfirm?: () => void | Promise<void>\n onReset?: () => void\n extras?: { key: Key; children: ReactNode }[]\n isConfirming?: boolean\n buttonsAlign?: 'left' | 'right' | 'bottom'\n showReset?: boolean\n}\n\nconst FilterFormWrapper = (props: FilterFormWrapperProps) => {\n const { extras, isConfirming, onConfirm, onReset, children, buttonsAlign = 'left', showReset } = props\n const { t } = useTranslation()\n const {\n token: { colorFillAlter, lineWidth, lineType, colorBorder, borderRadiusLG },\n } = theme.useToken()\n\n return (\n <div\n className=\"max-w-none p-6 mb-6 border\"\n style={{\n background: colorFillAlter,\n borderWidth: lineWidth,\n borderStyle: lineType,\n borderColor: colorBorder,\n borderRadius: borderRadiusLG,\n }}\n >\n <div className={`flex ${buttonsAlign === 'bottom' ? 'flex-col' : 'flex-row'}`}>\n <div className={`${buttonsAlign === 'left' ? 'grow-0' : 'flex-1'}`}>{children}</div>\n <div className={`${buttonsAlign === 'bottom' ? 'text-end' : 'text-start'} ml-4`}>\n <Space>\n <Button type=\"primary\" disabled={isConfirming} onClick={onConfirm}>\n {t('FilterFormWrapper.confirmText')}\n </Button>\n {extras?.map(item => (\n <Fragment key={item.key}>{item.children}</Fragment>\n ))}\n {showReset && <Button onClick={onReset}>{t('FilterFormWrapper.resetText')}</Button>}\n </Space>\n </div>\n </div>\n </div>\n )\n}\n\nexport default FilterFormWrapper\n","import type { PropsWithChildren, ReactNode } from 'react'\nimport { useEffect, useState } from 'react'\nimport { flushSync } from 'react-dom'\nimport { createRoot } from 'react-dom/client'\n\nconst splitByTags = (str: string) => {\n const regex = /(<[^>]*>)/\n return str.split(regex).filter(part => part !== '')\n}\n\nfunction renderToString(node: ReactNode): Promise<string> {\n const container = document.createElement('div')\n const root = createRoot(container)\n\n return new Promise(resolve => {\n setTimeout(() => {\n flushSync(() => {\n root.render(node)\n })\n resolve(container.innerHTML)\n })\n })\n}\n\nexport interface HighlightProps extends PropsWithChildren {\n texts: Array<string | number>\n}\n\nconst Highlight = (props: HighlightProps) => {\n const { texts, children } = props\n const [htmlString, setHtmlString] = useState<string>('')\n\n useEffect(() => {\n renderToString(children).then(str => {\n const result = splitByTags(str)\n\n for (const text of texts) {\n for (let index = 0; index < result.length; index++) {\n // TODO: 忽略 HTML tag\n result[index] = result[index].replace(String(text), `<span style='color: #DC143C;'>${text}</span>`)\n }\n }\n\n setHtmlString(result.join(''))\n })\n }, [children, texts])\n\n return <div dangerouslySetInnerHTML={{ __html: htmlString }}></div>\n}\n\nexport default Highlight\n","import { isEqual } from 'lodash-es'\nimport { create } from 'zustand'\nimport { devtools, subscribeWithSelector } from 'zustand/middleware'\n\nimport type { QueryListPayload } from './QueryList'\n\n// Query 更新函数类型\ntype QueryRefetchFunction = () => void | Promise<unknown>\n\n// QueryList 实例信息\ninterface QueryListInstance {\n id: string\n url: string\n queryKey: readonly unknown[]\n payload: QueryListPayload\n refetch: QueryRefetchFunction\n}\n\n// 简化的状态接口\ninterface QueryListState {\n // 实例管理\n instances: Map<string, QueryListInstance>\n\n // 核心方法\n registerInstance(id: string, url: string, queryKey: readonly unknown[], refetch: QueryRefetchFunction): void\n unregisterInstance(id: string): void\n updatePayload(id: string, payload: QueryListPayload): void\n getPayload(id: string): QueryListPayload\n refetch(id: string, payload?: QueryListPayload): Promise<void>\n\n // 工具方法\n getInstance(id: string): QueryListInstance | undefined\n getAllInstances(): QueryListInstance[]\n}\n\n// 稳定的默认 payload 引用,避免未注册时每次返回新对象导致 getSnapshot 无限循环\nconst DEFAULT_PAYLOAD: QueryListPayload = Object.freeze({\n page: 1,\n size: 10,\n filters: Object.freeze({}),\n})\n\n// 创建简化的 store\nconst createStore = () =>\n create<QueryListState>()(\n devtools(\n subscribeWithSelector((set, get) => ({\n instances: new Map(),\n\n registerInstance(id, url, queryKey, refetch) {\n set(state => {\n const existingInstance = state.instances.get(id)\n\n // 如果实例已存在,只更新refetch函数\n if (existingInstance) {\n // 仅当 refetch 变更时才更新,避免无意义 setState\n if (existingInstance.refetch !== refetch) {\n const updatedInstance = {\n ...existingInstance,\n refetch,\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: QueryListInstance = {\n id,\n url,\n queryKey,\n payload: DEFAULT_PAYLOAD,\n refetch,\n }\n\n const newInstances = new Map(state.instances)\n newInstances.set(id, instance)\n\n return { instances: newInstances }\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 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 getPayload(id) {\n const instance = get().instances.get(id)\n return instance?.payload ?? DEFAULT_PAYLOAD\n },\n async refetch(id, payload) {\n const instance = get().instances.get(id)\n if (!instance) {\n console.warn(`QueryList 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 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 QueryList 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: 'query-list-store',\n },\n ),\n )\n\n// 创建 store 实例\nconst store = createStore()\n\nexport const useQueryListStore = store\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useQuery } from '@tanstack/react-query'\nimport type { FormInstance } from 'antd'\nimport { 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 { isEqual } from 'lodash-es'\nimport type { ReactElement, ReactNode, Ref } from 'react'\nimport { cloneElement, forwardRef, useCallback, 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 { useAuth } from '@/services'\n\nimport { useQueryListStore } from './stores'\n\nexport interface ListResponse<T = any> {\n list: T[]\n total: number\n}\n\nexport interface QueryListPayload<Values = any> {\n page?: number\n size?: number\n filters?: Values\n}\n\n// 缓存配置\nexport interface CacheConfig {\n cacheTime?: number // 缓存时间(毫秒)\n staleTime?: number // 数据新鲜时间(毫秒)\n}\n\n// 支持的 HTTP 请求方法类型\nexport type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS'\n\n// 简化的请求配置\nexport interface QueryListRequestConfig extends CacheConfig {\n url: string\n method?: HttpMethod\n body?: FormData | Record<string | number, any>\n searchParams?: Record<string | number, any>\n headers?: Record<string, string>\n}\n\nexport type QueryListRequestConfigType<Values = any> =\n | QueryListRequestConfig\n | ((payload: QueryListPayload<Values>) => QueryListRequestConfig)\n\nexport enum QueryListAction {\n Confirm,\n Reset,\n Jump,\n Init,\n}\n\nexport interface QueryListDataType<Item> {\n dataSource: Item[]\n total: number\n}\n\nexport interface QueryListRef<Item extends AnyObject = AnyObject, Values = AnyObject, Data = any> {\n data: Data | undefined\n dataSource: Item[] | undefined\n form: FormInstance<Values>\n}\n\nexport interface QueryListDataAdapter<Item extends AnyObject = AnyObject> {\n total?: number\n items?: Item[]\n}\n\nexport type QueryListDataAdapterConfig<Item extends AnyObject = AnyObject, Data = any> =\n | QueryListDataAdapter<Item>\n | ((data: Data) => QueryListDataAdapter<Item>)\n\nexport interface QueryListProps<Item extends AnyObject = AnyObject, Values = AnyObject, Data = any>\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 onePage?: boolean // 无分页\n defaultSize?: number\n pageSizeOptions?: number[]\n request: QueryListRequestConfigType<Values> // 必需的请求配置\n tableExtra?: ReactNode | ((form: FormInstance<Values>, data?: Data) => ReactNode)\n renderForm?: (form: FormInstance<Values>) => ReactElement\n afterSuccess?: (action: QueryListAction, form: FormInstance<Values>, data?: Data) => void\n afterError?: (error: Error, action: QueryListAction, form: FormInstance<Values>) => void\n dataAdapter?: QueryListDataAdapterConfig<Item, Data>\n footer?: (data: Data | undefined) => ReactNode\n}\n\n// 常量定义\nconst DEFAULT_CACHE_TIME = 5 * 60 * 1000 // 默认缓存5分钟\nconst DEFAULT_STALE_TIME = 30 * 1000 // 默认30秒内数据新鲜\n\n// 无请求体的 HTTP 方法\nconst BODYLESS_METHODS: HttpMethod[] = ['GET', 'HEAD', 'OPTIONS']\n\n// 支持请求体的 HTTP 方法\nconst BODY_SUPPORTED_METHODS: HttpMethod[] = ['POST', 'PUT', 'PATCH', 'DELETE']\n\n// 生成唯一 identifier 的计数器\nlet identifierCounter = 0\n\n// 生成唯一 identifier 的函数\nconst generateUniqueIdentifier = (): string => {\n return `queryList_${Date.now()}_${++identifierCounter}`\n}\n\nconst InternalQueryList = <Item extends AnyObject = AnyObject, Values extends AnyObject = any, Data = any>(\n props: QueryListProps<Item, Values, Data>,\n ref: Ref<QueryListRef<Item, Values, Data>>,\n) => {\n const { t } = useTranslation()\n\n const {\n form,\n identifier,\n code,\n onePage,\n buttonsAlign,\n showReset,\n defaultSize = 10,\n refreshInterval = 0,\n tableExtra,\n renderForm,\n afterSuccess,\n afterError,\n footer,\n pageSizeOptions,\n request,\n dataAdapter,\n ...tableProps\n } = props\n\n const [formInstance] = Form.useForm<Values>(form)\n\n // 生成或使用提供的 identifier\n const finalIdentifier = useMemo(() => {\n return identifier || generateUniqueIdentifier()\n }, [identifier])\n const action = useRef<QueryListAction>(QueryListAction.Init)\n const { data: accessible, isLoading: isChecking } = useAuth(code)\n const [isValid, setIsValid] = useState(false)\n const isInitialized = useRef(false)\n const isUpdatingFromPayload = useRef(false) // 防止循环更新的标志\n\n // 仅订阅当前 identifier 的 payload,避免因其它实例变化导致不必要重渲染\n const subscribedPayload = useQueryListStore(s => s.getPayload(finalIdentifier))\n const ky = useKy()\n\n const { page, size = defaultSize, filters } = subscribedPayload\n\n const payload = { page, size, filters }\n\n // 处理 request 配置(对象或函数)\n const resolvedRequest = typeof request === 'function' ? request(payload) : request\n\n const {\n url,\n method = 'GET',\n body,\n searchParams,\n headers,\n cacheTime = DEFAULT_CACHE_TIME,\n staleTime = DEFAULT_STALE_TIME,\n } = resolvedRequest\n\n // 验证请求方法\n const normalizedMethod = method.toUpperCase() as HttpMethod\n const allSupportedMethods: HttpMethod[] = [...BODYLESS_METHODS, ...BODY_SUPPORTED_METHODS]\n\n if (!allSupportedMethods.includes(normalizedMethod)) {\n console.warn(`QueryList: 不支持的 HTTP 请求方法 \"${method}\",将使用 GET 方法`)\n }\n\n // 根据请求方法决定参数传递方式\n const isBodylessMethod = BODYLESS_METHODS.includes(normalizedMethod)\n\n const defaultRequestData = { ...filters, ...(!onePage && { page, size }) }\n\n // 智能参数传递策略:\n // 1. 优先使用用户明确传入的 body 或 searchParams\n // 2. 若用户未指定,根据 HTTP 方法自动选择合适的传递方式\n // 3. 避免同时设置 body 和 searchParams(除非用户明确指定)\n let requestBody: any\n let requestSearchParams: any\n\n if (body !== undefined) {\n // 用户传入了 body,优先使用\n requestBody = body\n requestSearchParams = searchParams\n } else if (searchParams !== undefined) {\n // 用户只传入了 searchParams\n requestSearchParams = searchParams\n requestBody = undefined\n } else {\n // 都未传入,根据方法类型自动选择\n if (isBodylessMethod) {\n requestSearchParams = defaultRequestData\n requestBody = undefined\n } else {\n requestBody = defaultRequestData\n requestSearchParams = undefined\n }\n }\n\n const requestHeaders = headers\n\n const shouldPoll = useRef(false)\n\n // 构建更完整的 queryKey,包含所有影响请求结果的参数\n const queryKey = [\n 'queryList',\n url,\n finalIdentifier,\n normalizedMethod,\n page,\n size,\n filters,\n requestBody,\n requestSearchParams,\n requestHeaders,\n ] as const\n\n const { data, isLoading, refetch } = useQuery({\n queryKey,\n queryFn: async () => {\n try {\n const kyOptions: KyOptions = {\n method: normalizedMethod,\n searchParams: requestSearchParams,\n headers: requestHeaders,\n }\n\n // 只有非无请求体方法才允许有 body\n if (requestBody && !isBodylessMethod) {\n if (requestBody instanceof FormData) {\n // FormData 使用 body 方式传递\n kyOptions.body = requestBody\n } else if (typeof requestBody === 'string') {\n // 字符串直接作为 body\n kyOptions.body = requestBody\n } else {\n // 对象类型使用 .json 方式传递\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 retry: (failureCount, retryError) => {\n // 自定义重试逻辑\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 // 缓存配置\n gcTime: cacheTime,\n staleTime,\n enabled: accessible && isValid,\n })\n\n // 处理 dataAdapter 配置\n const resolvedDataAdapter = useMemo(() => {\n const adapter = dataAdapter\n const defaultAdapter: QueryListDataAdapter<Item> = {\n total: (data as ListResponse<Item>)?.total,\n items: (data as ListResponse<Item>)?.list,\n }\n\n if (typeof adapter === 'function') {\n return {\n ...defaultAdapter,\n ...adapter(data as Data),\n }\n }\n return {\n ...defaultAdapter,\n ...adapter,\n }\n }, [dataAdapter, data])\n\n // 在组件挂载时注册实例,避免因 queryKey/refetch 身份变化反复注册\n useEffect(() => {\n useQueryListStore.getState().registerInstance(finalIdentifier, url, queryKey, refetch)\n return () => {\n useQueryListStore.getState().unregisterInstance(finalIdentifier)\n }\n }, [finalIdentifier, url])\n\n const dataSource = resolvedDataAdapter.items\n const total = resolvedDataAdapter.total\n\n const pagination = useMemo(() => {\n if (onePage) return false\n\n return {\n pageSizeOptions,\n showSizeChanger: true,\n showQuickJumper: true,\n current: page,\n pageSize: size,\n total,\n onChange: async (currentPage: number, currentSize: number) => {\n action.current = QueryListAction.Jump\n useQueryListStore.getState().refetch(finalIdentifier, {\n page: currentPage,\n size: currentSize,\n })\n },\n }\n }, [onePage, pageSizeOptions, page, size, total, finalIdentifier])\n\n const onConfirm = useCallback(async () => {\n action.current = QueryListAction.Confirm\n try {\n await formInstance.validateFields()\n setIsValid(true)\n useQueryListStore.getState().refetch(finalIdentifier, {\n page: 1,\n filters: formInstance.getFieldsValue(),\n })\n } catch {\n setIsValid(false)\n }\n }, [formInstance, finalIdentifier])\n\n const onReset = useCallback(async () => {\n action.current = QueryListAction.Reset\n formInstance.resetFields()\n\n try {\n await formInstance.validateFields({ validateOnly: true })\n setIsValid(true)\n useQueryListStore.getState().refetch(finalIdentifier, {\n page: 1,\n filters: formInstance.getFieldsValue(),\n })\n } catch {\n setIsValid(false)\n }\n }, [formInstance, finalIdentifier])\n\n const formRenderer =\n typeof renderForm === 'function' ? (\n <FilterFormWrapper\n showReset={showReset}\n buttonsAlign={buttonsAlign}\n isConfirming={isLoading}\n onReset={onReset}\n onConfirm={onConfirm}\n >\n {cloneElement(renderForm(formInstance) as ReactElement<{ onKeyUp?: React.KeyboardEventHandler }>, {\n onKeyUp: (e: React.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={formInstance} />\n )\n\n const tableExtraRenderer = typeof tableExtra === 'function' ? tableExtra(formInstance, data) : tableExtra\n\n const renderFooter: TableProps<Item>['footer'] = footer ? () => <>{footer(data)}</> : undefined\n\n // 监听 payload.filters 变化并同步更新表单实例\n useEffect(() => {\n if (!isInitialized.current || isUpdatingFromPayload.current) {\n return\n }\n\n // 获取当前表单的值\n const currentFormValues = formInstance.getFieldsValue()\n\n // 如果 payload 中的 filters 与当前表单值不同,则更新表单\n if (filters && !isEqual(currentFormValues, filters)) {\n isUpdatingFromPayload.current = true\n formInstance.setFieldsValue(filters)\n // 使用 setTimeout 确保在下一个事件循环中重置标志\n setTimeout(() => {\n isUpdatingFromPayload.current = false\n }, 0)\n }\n }, [filters, formInstance])\n\n // 首次挂载时自动校验表单,校验通过则更新 payload 并允许请求\n useEffect(() => {\n if (!accessible || isInitialized.current) {\n return\n }\n\n const init = async () => {\n console.log('QueryList init starting')\n try {\n formInstance.resetFields()\n const value = await formInstance.validateFields({ validateOnly: true })\n console.log('QueryList init validation success:', value)\n useQueryListStore.getState().updatePayload(finalIdentifier, {\n page: 1,\n filters: value,\n })\n setIsValid(true)\n console.log('QueryList init completed, isValid set to true')\n } catch (error) {\n console.log('QueryList init validation failed:', error)\n setIsValid(false)\n } finally {\n isInitialized.current = true\n }\n }\n\n const rafId = requestAnimationFrame(() => {\n Promise.resolve().then(init)\n })\n\n return () => {\n if (rafId) {\n cancelAnimationFrame(rafId)\n }\n }\n }, [accessible, finalIdentifier, formInstance])\n\n useImperativeHandle(\n ref,\n () => ({\n data,\n dataSource,\n form: formInstance,\n refetch,\n }),\n [data, dataSource, formInstance, refetch],\n )\n\n if (isChecking) {\n return (\n <div className=\"flex justify-center items-center h-[300px]\">\n <Spin />\n </div>\n )\n }\n\n if (!accessible) {\n return <Result status={403} subTitle={t('global.noEntitlement')} />\n }\n\n return (\n <div>\n {formRenderer}\n {tableExtraRenderer}\n <Table\n {...tableProps}\n dataSource={dataSource}\n loading={isLoading}\n pagination={pagination}\n footer={renderFooter}\n />\n </div>\n )\n}\n\nconst QueryList = forwardRef(InternalQueryList) as <\n Item extends AnyObject = AnyObject,\n Values extends object | undefined = undefined,\n Data = any,\n>(\n props: QueryListProps<Item, Values, Data> & { ref?: Ref<QueryListRef<Item, Values, Data>> },\n) => ReactElement\n\nexport default QueryList\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {a as a$1,f,g}from'./chunk-LEVOCZUQ.js';import {d}from'./chunk-GI5OS4VD.js';import {a}from'./chunk-VFRB44XY.js';import {i,k as k$1,l}from'./chunk-W3E3WPLB.js';import {MinusCircleOutlined}from'@ant-design/icons';import {useQuery}from'@tanstack/react-query';import {Typography,App,Form,Input,Select,Row,Col,Empty,Button}from'antd';import {last,first}from'lodash-es';import {Fragment as Fragment$1}from'react';import {jsxs,Fragment,jsx}from'react/jsx-runtime';var {Text:A}=Typography,K=(r,t)=>{last(r)==="*"?t?.(["*"]):first(r)==="*"?t?.(r.slice(1)):t?.(r);},Y=r=>{let{onChange:t,...l$1}=r,s=k$1(),{data:g,isLoading:p}=useQuery({queryKey:l.enums.gameGroups,queryFn:()=>s.get("/api/enum/get?enum=game_group&type=all")}),d=[{label:"\u901A\u7528",value:"*"}].concat(g?.map(a=>({label:a,value:a}))??[]);return jsx(Select,{...l$1,allowClear:true,showSearch:true,mode:"tags",optionFilterProp:"label",loading:p,options:d,onChange:a=>K(a,t)})},k=r=>{let{groups:t,onChange:l$1,...s}=r,g=k$1(),{permissionVersion:p}=i(),d=p==="v3",a=p==="v4",{data:c,isLoading:h}=useQuery({queryKey:l.enums.gameIds(a?[]:t??[]),queryFn:()=>g.get(`/api/enum/game_group/get_game_ids${a?"":`?game_groups=${t?.join(",")}`}`).then(o=>o?.list),enabled:a||d&&!!t?.length}),y=c?.map(o=>({label:o.name,value:o.id}));return jsx(Select,{...s,allowClear:true,showSearch:true,optionFilterProp:"label",mode:"tags",loading:h,options:y,onChange:o=>K(o,l$1)})},ue=({mode:r,onSuccess:t})=>{let{message:l}=App.useApp(),{t:s}=a(),{data:g$1,isLoading:p}=a$1(),d$1=f(),a$2=g(),c=r==="create",h=s(c?"User.createTitle":"User.updateTitle"),y=jsxs(Fragment,{children:[jsx(Form.Item,{label:s("global.name"),name:"name",rules:[{required:true}],children:jsx(Input,{disabled:!c})}),jsx(Form.Item,{label:s("global.role"),name:"roles",children:jsx(Select,{allowClear:true,showSearch:true,mode:"multiple",loading:p,optionFilterProp:"label",options:g$1?.map(C=>({label:C.name,value:C.name}))})})]});return d({title:h,width:"600px",formProps:{autoComplete:"off",labelCol:{flex:"80px"}},content:y,onConfirm:async(C,L)=>{c?(await d$1.mutateAsync(C),l.success(s("User.createSuccessfully"))):(await a$2.mutateAsync({...C,id:L?.id}),l.success(s("User.updateSuccessfully"))),t?.();}})},ge=({mode:r,onSuccess:t})=>{let{message:l}=App.useApp(),{t:s}=a(),{data:g$1,isLoading:p}=a$1(),d$1=f(),a$2=g(),c=r==="create",h=s(c?"User.createTitle":"User.updateTitle"),{permissionVersion:y}=i(),o=y==="v3",C=jsxs(Fragment,{children:[jsx(Form.Item,{label:s("global.name"),name:"name",rules:[{required:true}],children:jsx(Input,{disabled:!c})}),jsx(Form.List,{name:"permissions",children:(F,{add:U,remove:B})=>jsxs(Row,{gutter:8,children:[o&&jsx(Col,{span:8,className:"text-center mb-4",children:jsx(A,{strong:true,children:s("global.projectGroup")})}),jsx(Col,{span:o?10:14,className:"text-center mb-4",children:jsx(A,{strong:true,children:s("global.game")})}),jsx(Col,{span:o?6:10,className:"text-center mb-4",children:jsx(A,{strong:true,children:s("global.role")})}),F.map(n=>jsxs(Fragment$1,{children:[o&&jsx(Col,{span:8,children:jsx(Form.Item,{noStyle:true,shouldUpdate:true,children:({setFieldValue:i})=>jsx(Form.Item,{name:[n.name,"game_group"],children:jsx(Y,{onChange:()=>{i(["permissions",n.name,"game_ids"],[]);}})})})}),jsx(Col,{span:o?10:14,children:o?jsx(Form.Item,{noStyle:true,shouldUpdate:(i,f)=>i.permissions[n.name]?.game_group!==f.permissions[n.name]?.game_group,children:({getFieldValue:i})=>{let f=i(["permissions",n.name,"game_group"]);return jsx(Form.Item,{name:[n.name,"game_ids"],dependencies:[["permissions",n.name,"game_group"]],rules:[{required:!!f?.length,message:"\u8BF7\u9009\u62E9\u6E38\u620F"}],children:jsx(k,{groups:f})})}}):jsx(Form.Item,{name:[n.name,"game_ids"],rules:[{required:true,message:"\u8BF7\u9009\u62E9\u6E38\u620F"}],children:jsx(k,{})})}),jsx(Col,{span:o?6:10,children:jsxs("div",{className:"flex",children:[jsx("div",{className:"flex-1",children:jsx(Form.Item,{name:[n.name,"role"],rules:[{required:true,message:"\u8BF7\u9009\u62E9\u89D2\u8272"},({getFieldValue:i})=>({validator(f,D){return i("permissions").filter((v,E)=>!!v&&E!==n.name).some(v=>v.role===D)?Promise.reject(new Error("\u8BF7\u52FF\u91CD\u590D\u9009\u62E9\u89D2\u8272")):Promise.resolve()}})],children:jsx(Select,{allowClear:true,showSearch:true,optionFilterProp:"label",loading:p,options:g$1?.map(i=>({label:i.name,value:i.name}))})})}),jsx("div",{className:"w-8 text-center",children:jsx(Form.Item,{children:jsx(MinusCircleOutlined,{onClick:()=>{B(n.name);}})})})]})})]},n.key)),F.length===0&&jsx(Col,{span:24,children:jsx(Empty,{className:"mb-6"})}),jsx(Col,{span:24,children:jsx(Button,{block:true,type:"dashed",onClick:()=>U(),children:s("global.add")})})]})})]});return d({title:h,width:"1000px",formProps:{autoComplete:"off",labelCol:{flex:"80px"}},content:C,onConfirm:async(F,U)=>{c?(await d$1.mutateAsync(F),l.success(s("User.createSuccessfully"))):(await a$2.mutateAsync({...F,id:U?.id}),l.success(s("User.updateSuccessfully"))),t?.();}})};export{ue as a,ge as b};//# sourceMappingURL=chunk-V3YBDED3.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-V3YBDED3.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/modules/permission/hooks/user-hooks.tsx"],"names":["Text","Typography","handleWildcardSelection","value","onChange","last","first","GroupSelect","props","rest","ky","useKy","data","isLoading","useQuery","queryKeys","options","group","jsx","Select","GameSelect","groups","permissionVersion","useToolkitsStore","isV3","isV4","response","useUserModal","mode","onSuccess","message","App","t","useTranslation","roles","isRolesLoading","useAllRoles","create","useCreateUser","update","useUpdateUser","isCreateMode","title","content","jsxs","Fragment","Form","Input","role","useFormModal","values","extraValues","useUserModalV2","fields","add","remove","Row","Col","field","setFieldValue","prevValues","nextValues","getFieldValue","_groups","_rule","item","index","MinusCircleOutlined","Empty","Button"],"mappings":"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","file":"chunk-ZF7POJAA.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"]}
|
|
1
|
+
{"version":3,"sources":["../src/modules/permission/hooks/user-hooks.tsx"],"names":["Text","Typography","handleWildcardSelection","value","onChange","last","first","GroupSelect","props","rest","ky","useKy","data","isLoading","useQuery","queryKeys","options","group","jsx","Select","GameSelect","groups","permissionVersion","useToolkitsStore","isV3","isV4","response","useUserModal","mode","onSuccess","message","App","t","useTranslation","roles","isRolesLoading","useAllRoles","create","useCreateUser","update","useUpdateUser","isCreateMode","title","content","jsxs","Fragment","Form","Input","role","useFormModal","values","extraValues","useUserModalV2","fields","add","remove","Row","Col","field","setFieldValue","prevValues","nextValues","getFieldValue","_groups","_rule","item","index","MinusCircleOutlined","Empty","Button"],"mappings":"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","file":"chunk-V3YBDED3.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"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {i}from'./chunk-W3E3WPLB.js';import {template,has,get}from'lodash-es';import {useMemo}from'react';function l(){let t=i(e=>e.locale);return {t:useMemo(()=>(e,r)=>has(t,e)?template(get(t,e))(r):e,[t])}}export{l as a};//# sourceMappingURL=chunk-VFRB44XY.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-VFRB44XY.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/locale/hooks.ts"],"names":["useTranslation","locale","useToolkitsStore","state","useMemo","key","data","has","template","get"],"mappings":"yGAmBO,SAASA,CAAAA,EAAiB,CAC/B,IAAMC,CAAAA,CAASC,EAAiBC,CAAAA,EAASA,CAAAA,CAAM,MAAM,CAAA,CAQrD,OAAO,CAAE,EANCC,OAAAA,CACR,IAAM,CAACC,CAAAA,CAAoBC,CAAAA,GACzBC,IAAIN,CAAAA,CAAQI,CAAG,EAAIG,QAAAA,CAASC,GAAAA,CAAIR,EAAQI,CAAa,CAAC,EAAEC,CAAI,CAAA,CAAID,EAClE,CAACJ,CAAM,CACT,CAEW,CACb","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/locale/hooks.ts"],"names":["useTranslation","locale","useToolkitsStore","state","useMemo","key","data","has","template","get"],"mappings":"yGAmBO,SAASA,CAAAA,EAAiB,CAC/B,IAAMC,CAAAA,CAASC,EAAiBC,CAAAA,EAASA,CAAAA,CAAM,MAAM,CAAA,CAQrD,OAAO,CAAE,EANCC,OAAAA,CACR,IAAM,CAACC,CAAAA,CAAoBC,CAAAA,GACzBC,IAAIN,CAAAA,CAAQI,CAAG,EAAIG,QAAAA,CAASC,GAAAA,CAAIR,EAAQI,CAAa,CAAC,EAAEC,CAAI,CAAA,CAAID,EAClE,CAACJ,CAAM,CACT,CAEW,CACb","file":"chunk-VFRB44XY.js","sourcesContent":["import { get, has, template } from 'lodash-es'\nimport { useMemo } from 'react'\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport type { Locale } from './index'\n\ntype Join<K, P> = K extends string | number\n ? P extends string | number\n ? `${K}${'' extends P ? '' : '.'}${P}`\n : never\n : never\n\ntype Paths<T, D extends number = 10> = [D] extends [never]\n ? never\n : T extends object\n ? {\n [K in keyof T]-?: K extends string | number ? `${K}` | Join<K, Paths<T[K]>> : never\n }[keyof T]\n : ''\n\nexport function useTranslation() {\n const locale = useToolkitsStore(state => state.locale)\n\n const t = useMemo(\n () => (key: Paths<Locale>, data?: Record<string, unknown>) =>\n has(locale, key) ? template(get(locale, key as string))(data) : key,\n [locale],\n )\n\n return { t }\n}\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import {create,useStore,createStore}from'zustand';import {App}from'antd';import {createContext,useContext,useRef,useMemo}from'react';import {persist,createJSONStorage}from'zustand/middleware';import {jwtDecode}from'jwt-decode';import {jsx,Fragment}from'react/jsx-runtime';import {useQueryClient}from'@tanstack/react-query';import le from'ky';import {useNavigate}from'react-router-dom';function j(){return create()((e,t)=>({open:new Map,usedIds:new Set,isOpen(s){return t().open.get(s)??false},show(s){e({open:new Map(t().open).set(s,true)});},hide(s){e({open:new Map(t().open).set(s,false)});},hideAll(){e({open:new Map});},checkUniqueness(s){return !t().usedIds.has(s)},registerIds(s){let{usedIds:i}=t();return i.has(s)?false:(e({usedIds:new Set(i).add(s)}),true)},cleanup(s){let{open:i,usedIds:n}=t(),a=new Map(i),d=new Set(n);a.delete(s),d.delete(s),e({open:a,usedIds:d});}}))}var H=0,z=()=>{let e=Date.now(),t=Math.floor(Math.random()*1e3),s=++H%1e3;return e*1e6+t*1e3+s};var b={getItem(e){return sessionStorage.getItem(e)??localStorage.getItem(e)},setItem(e,t){sessionStorage.setItem(e,t),localStorage.setItem(e,t);},removeItem(e){sessionStorage.removeItem(e),localStorage.removeItem(e);}};var Ae="https://idaas.ifunplus.cn/enduser/api/application/plugin_FunPlus/sso/v1",y="App-ID",qe="/console/",w=(n=>(n.V1="v1",n.V2="v2",n.V3="v3",n.V4="v4",n))(w||{}),De="*";var W={global:{noEntitlement:"\u65E0\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458",name:"\u540D\u79F0",creationTime:"\u521B\u5EFA\u65F6\u95F4",operation:"\u64CD\u4F5C",update:"\u66F4\u65B0",edit:"\u7F16\u8F91",delete:"\u5220\u9664",selectAll:"\u5168\u9009",game:"\u6E38\u620F",user:"\u7528\u6237",role:"\u89D2\u8272",username:"\u7528\u6237\u540D",password:"\u5BC6\u7801",label:"\u6807\u7B7E",method:"\u65B9\u6CD5",route:"\u8DEF\u7531",request:"\u8BF7\u6C42",response:"\u54CD\u5E94",add:"\u6DFB\u52A0",signIn:"\u767B\u5F55",projectGroup:"\u9879\u76EE\u7EC4",view:"\u67E5\u770B",back:"\u8FD4\u56DE"},SignIn:{title:"\u767B\u5F55\u65B9\u5F0F",signInWithIDass:"IDass \u767B\u5F55",unregistered:"\u60A8\u8FD8\u672A\u5728\u5E73\u53F0\u6CE8\u518C\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458",welcome:"\u6B22\u8FCE"},NotFound:{subTitle:"\u8BBF\u95EE\u7684\u9875\u9762\u4E0D\u5B58\u5728",buttonText:"\u8FD4\u56DE\u9996\u9875"},FilterFormWrapper:{confirmText:"\u67E5\u8BE2",resetText:"\u91CD\u7F6E"},FormModal:{confirmText:"\u786E\u8BA4",cancelText:"\u53D6\u6D88"},GameSelect:{label:"\u5F53\u524D\u6E38\u620F",placeholder:"\u8BF7\u9009\u62E9\u6E38\u620F"},RequireGame:{description:"\u8BF7\u9009\u62E9\u6E38\u620F"},UserDropdown:{signOutText:"\u767B\u51FA"},User:{createTitle:"\u521B\u5EFA\u7528\u6237",createSuccessfully:"\u7528\u6237\u521B\u5EFA\u6210\u529F",updateTitle:"\u66F4\u65B0\u7528\u6237",updateSuccessfully:"\u7528\u6237\u66F4\u65B0\u6210\u529F",deleteTitle:"\u5220\u9664\u7528\u6237",deleteContent:"\u786E\u5B9A\u8981\u5220\u9664\u7528\u6237 <%= user %> \u5417\uFF1F",deleteSuccessfully:"\u7528\u6237\u5220\u9664\u6210\u529F"},Role:{createTitle:"\u521B\u5EFA\u89D2\u8272",createSuccessfully:"\u89D2\u8272\u521B\u5EFA\u6210\u529F",updateTitle:"\u66F4\u65B0\u89D2\u8272",updateSuccessfully:"\u89D2\u8272\u66F4\u65B0\u6210\u529F",deleteTitle:"\u5220\u9664\u89D2\u8272",deleteContent:"\u786E\u5B9A\u8981\u5220\u9664\u89D2\u8272 <%= role %> \u5417\uFF1F",deleteSuccessfully:"\u89D2\u8272\u5220\u9664\u6210\u529F"},PermissionList:{failedDescription:"\u83B7\u53D6\u6743\u9650\u5217\u8868\u5931\u8D25",baseSectionTitle:"\u5E73\u53F0\u57FA\u7840\u6743\u9650",gameSectionTitle:"\u6E38\u620F\u6743\u9650",gameSectionDescription:"\u8BF7\u5148\u9009\u62E9\u6E38\u620F",gameSelectPlaceholder:"\u8BF7\u5148\u9009\u62E9\u6E38\u620F",removeText:"\u79FB\u9664",addText:"\u6DFB\u52A0\u6E38\u620F\u6743\u9650"},RoleDetail:{title:"\u89D2\u8272\u8BE6\u60C5"},InfiniteList:{loadingText:"\u52A0\u8F7D\u4E2D",reachEndText:"\u5DF2\u7ECF\u5230\u5E95\u4E86",loadMoreText:"\u52A0\u8F7D\u66F4\u591A"}},E=W;var U=()=>({locale:E,useGameApiV2:false,isGlobalMode:false,requireGameSelection:false,loginPath:"/sign_in",homePath:"/",permissionVersion:"v1"});var A=e=>({setAppId:t=>e({appId:t})});var q=e=>({collapsed:false,toggleCollapsed:()=>e(t=>({collapsed:!t.collapsed}))});var X=e=>{if(!e)return null;try{return jwtDecode(e)}catch{return null}},D=e=>({token:void 0,user:null,setToken:t=>e({token:t,user:X(t)}),clearToken:()=>e({token:void 0,user:null})});var G=e=>createStore()(persist((...t)=>{let[,s,i]=t;return {...D(...t),...A(...t),...U(...t),...q(...t),...e,clear:()=>{s().clearToken(),i.persist.clearStorage();}}},{name:"toolkits",storage:createJSONStorage(()=>b),partialize:({token:t,appId:s,user:i,collapsed:n})=>({token:t,appId:s,user:i,collapsed:n})}));var P=createContext(null);function C(e){let t=useContext(P);if(!t){let i=new Error().stack?.split(`
|
|
2
|
+
`)[2]?.trim()||"Unknown";throw new Error(`Missing ToolkitsProvider in the tree. Component "${i}" must be wrapped with <ToolkitsProvider>. Please ensure ToolkitsProvider is rendered above this component in the component tree.`)}return useStore(t,e??(s=>s))}var se=e=>{let{children:t,...s}=e,i=useRef(void 0),a=useContext(P)?.getState();if(!i.current){let d=a?{locale:a.locale,permissionVersion:a.permissionVersion,useGameApiV2:a.useGameApiV2,loginPath:a.loginPath,isGlobalMode:a.isGlobalMode,requireGameSelection:a.requireGameSelection,sidebarWidth:a.sidebarWidth,sidebarCollapsible:a.sidebarCollapsible,homePath:a.homePath,apiBaseUrl:a.apiBaseUrl}:{};i.current=G({...d,...s});}if(!i.current.getState().loginPath)throw new Error('ToolkitsProvider: \u8BF7\u914D\u7F6E "loginPath"');return jsx(P.Provider,{value:i.current,children:jsx(App,{children:jsx(Fragment,{children:t})})})},re=se;var v=[0,1,200],g={OK:200,UNAUTHORIZED:401,FORBIDDEN:403,UNREGISTERED:412},pe=3e4;var F=e=>!e||typeof e!="object"?"Unknown error":e.msg||e.message||e.error||"Unknown error",de=e=>{let{value:t,allowedCodes:s}=e;return t==null||typeof t!="number"?false:s.includes(t)},me=(e,t)=>{if(t<g.OK||t>=300)return false;if(!e||typeof e!="object")return true;let s=[{field:"code",value:e.code,allowedCodes:v},{field:"status",value:e.status,allowedCodes:v},{field:"errno",value:e.errno,allowedCodes:v}];return s.some(n=>n.value!==void 0&&n.value!==null)?s.every(n=>n.value===void 0||n.value===null||de(n)):true},Te=async(e,t)=>{switch(t){case "blob":return e.blob();case "text":return e.text();case "arrayBuffer":return e.arrayBuffer();case "formData":return e.formData();case "json":default:return e.json()}},fe=e=>{let{baseURL:t}=e||{},{notification:s}=App.useApp(),i=useNavigate(),n=useQueryClient(),{token:a,isGlobalMode:d,appId:h,permissionVersion:O,loginPath:S,clear:k,apiBaseUrl:I}=C(),L=()=>{k(),n.clear(),i(S);},N=()=>{if(k(),n.clear(),S){let o=new URL(S,window.location.origin);o.searchParams.set("unregistered","true"),i(o.toString());}},V=()=>{s.error({message:"\u8BBF\u95EE\u88AB\u7981\u6B62",description:"\u60A8\u6CA1\u6709\u6743\u9650\u8BBF\u95EE\u6B64\u8D44\u6E90\u3002"});},_=o=>async(r,l,c)=>{if(o==="blob"||o==="arrayBuffer"||o==="text"||o==="formData")return c;let u;try{u=await c.clone().json();}catch{return c}if(me(u,c.status)){let f=u.data!==void 0?u.data:u;return new Response(JSON.stringify(f),{status:c.status,statusText:c.statusText,headers:c.headers})}let m=F(u);s.error({message:"Request failed",description:m});let T=new Error(m);throw T.response=c,T.data=u,T},B=(o,r)=>{switch(o){case g.UNAUTHORIZED:L();break;case g.UNREGISTERED:N();break;case g.FORBIDDEN:V();break;default:{let l=F(r)||`HTTP ${o} Error`;s.error({message:"Request failed",description:l});break}}},R=useMemo(()=>le.create({prefixUrl:t??I,retry:0,timeout:pe,headers:{Accept:"application/json","Content-Type":"application/json"},hooks:{beforeRequest:[o=>{a&&o.headers.set("Authorization",`Bearer ${a}`),!o.headers.has(y)&&O!=="v1"&&(d||!h?o.headers.set(y,"global"):o.headers.set(y,encodeURIComponent(String(h))));}],beforeError:[async o=>{let{response:r}=o;if(r){let l=r.status,c;try{let u=r.headers.get("content-type")||"";(u.includes("application/json")||u.startsWith("text/"))&&(c=await r.clone().json());}catch{}B(l,c);}else s.error({message:"Network Error",description:o.message||"Network request failed"});return o}]}}),[t,a,d,h,O,s,S,k,n,I]),p=async(o,r,l,c)=>{let{responseType:u,...m}=c||{},T={...m,hooks:{...m.hooks,afterResponse:[...m.hooks?.afterResponse||[],_(u)]}},f;return l?f=await R(r,{method:o,json:l,...T}):f=await R(r,{method:o,...T}),Te(f,u)};return {get:(o,r)=>p("GET",o,void 0,r),post:(o,r,l)=>p("POST",o,r,l),put:(o,r,l)=>p("PUT",o,r,l),delete:(o,r)=>p("DELETE",o,void 0,r),patch:(o,r,l)=>p("PATCH",o,r,l),options:(o,r)=>p("OPTIONS",o,void 0,r),head:(o,r)=>p("HEAD",o,void 0,r),request:o=>{let{url:r,...l}=o;return p(l.method||"GET",r,void 0,l)},instance:R}};var ft={permissions:{check:(e,t)=>["permissions","check",e,t],allPermissions:["permissions","all"],allPermissionsV2:["permissions","allV2"]},users:{all:["users"],detail:e=>["users","detail",e],create:["users","create"],update:["users","update"],delete:["users","delete"]},roles:{all:["roles"],detail:(e,t)=>["roles","detail",e,t],create:e=>["roles","create",e],update:e=>["roles","update",e],delete:["roles","delete"]},menus:{all:["menus"],navbar:e=>["menus","navbar",e],detail:e=>["menus","detail",e],create:["menus","create"],update:["menus","update"],delete:["menus","delete"]},enums:{gameGroups:["enums","gameGroups"],gameIds:e=>["enums","gameIds",e]},games:{all:["games","all"]},auth:{ticketLogin:e=>["auth","ticket-login",e]}};export{j as a,z as b,b as c,Ae as d,y as e,qe as f,w as g,De as h,C as i,re as j,fe as k,ft as l};//# sourceMappingURL=chunk-W3E3WPLB.js.map
|
|
3
|
+
//# sourceMappingURL=chunk-W3E3WPLB.js.map
|