react-toolkits 2.26.1 → 2.27.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 -0
- package/lib/chunk-56C2GQCB.js +2 -0
- package/lib/chunk-56C2GQCB.js.map +1 -0
- package/lib/chunk-6SMI25Y3.js +19 -0
- package/lib/chunk-6SMI25Y3.js.map +1 -0
- package/lib/{chunk-D5YXBSTI.js → chunk-7XR7V6IS.js} +2 -2
- package/lib/{chunk-D5YXBSTI.js.map → chunk-7XR7V6IS.js.map} +1 -1
- package/lib/chunk-AFURMXX2.js +2 -0
- package/lib/chunk-AFURMXX2.js.map +1 -0
- package/lib/{chunk-MVG7YFPB.js → chunk-COONHXCY.js} +2 -2
- package/lib/{chunk-MVG7YFPB.js.map → chunk-COONHXCY.js.map} +1 -1
- package/lib/chunk-DBYHBFI6.js +206 -0
- package/lib/chunk-DBYHBFI6.js.map +1 -0
- package/lib/chunk-JJR5NJTU.js +75 -0
- package/lib/chunk-JJR5NJTU.js.map +1 -0
- package/lib/chunk-LUVKLLW7.js +2 -0
- package/lib/chunk-LUVKLLW7.js.map +1 -0
- package/lib/chunk-M2C4DTSM.js +46 -0
- package/lib/chunk-M2C4DTSM.js.map +1 -0
- package/lib/{chunk-5QAEUAZE.js → chunk-NEOHLVWG.js} +2 -2
- package/lib/{chunk-5QAEUAZE.js.map → chunk-NEOHLVWG.js.map} +1 -1
- package/lib/chunk-O7INKFFW.js +161 -0
- package/lib/chunk-O7INKFFW.js.map +1 -0
- package/lib/chunk-Q6MAXVON.js +2 -0
- package/lib/chunk-Q6MAXVON.js.map +1 -0
- package/lib/chunk-QEUTBIBK.js +125 -0
- package/lib/chunk-QEUTBIBK.js.map +1 -0
- package/lib/chunk-R72QFX5M.js +495 -0
- package/lib/chunk-R72QFX5M.js.map +1 -0
- package/lib/chunk-TYMPX257.js +268 -0
- package/lib/chunk-TYMPX257.js.map +1 -0
- package/lib/chunk-UICHZXQP.js +3 -0
- package/lib/chunk-UICHZXQP.js.map +1 -0
- package/lib/{chunk-P5T74EXP.js → chunk-WFRMJYD3.js} +2 -2
- package/lib/chunk-WFRMJYD3.js.map +1 -0
- package/lib/chunk-Z7GW3RVV.js +658 -0
- package/lib/chunk-Z7GW3RVV.js.map +1 -0
- package/lib/createMenuItem-7R7QR4R6.js +83 -0
- package/lib/createMenuItem-7R7QR4R6.js.map +1 -0
- package/lib/{createMenuItem-Q5TJGFKZ.js → createMenuItem-A3ES4CDV.js} +2 -2
- package/lib/{createMenuItem-Q5TJGFKZ.js.map → createMenuItem-A3ES4CDV.js.map} +1 -1
- package/lib/index.css +1 -1
- package/lib/index.d.ts +21 -10
- package/lib/index.js +1446 -2
- package/lib/index.js.map +1 -1
- package/lib/menuItemList-BUUJMOU7.js +129 -0
- package/lib/menuItemList-BUUJMOU7.js.map +1 -0
- package/lib/{menuItemList-5QGQYB3N.js → menuItemList-YFQB4BCS.js} +2 -2
- package/lib/{menuItemList-5QGQYB3N.js.map → menuItemList-YFQB4BCS.js.map} +1 -1
- package/lib/{roleDetail-ODJVDVB4.js → roleDetail-H2X34J57.js} +2 -2
- package/lib/{roleDetail-ODJVDVB4.js.map → roleDetail-H2X34J57.js.map} +1 -1
- package/lib/roleDetail-IP654MAU.js +72 -0
- package/lib/roleDetail-IP654MAU.js.map +1 -0
- package/lib/roleList-QMAYO4MG.js +161 -0
- package/lib/roleList-QMAYO4MG.js.map +1 -0
- package/lib/roleList-UCMHN5NJ.js +2 -0
- package/lib/roleList-UCMHN5NJ.js.map +1 -0
- package/lib/updateMenuItem-NUYWRAV5.js +2 -0
- package/lib/updateMenuItem-NUYWRAV5.js.map +1 -0
- package/lib/updateMenuItem-SZVEK3TL.js +106 -0
- package/lib/updateMenuItem-SZVEK3TL.js.map +1 -0
- package/lib/userDetail-6XMOY3I4.js +2 -0
- package/lib/userDetail-6XMOY3I4.js.map +1 -0
- package/lib/userDetail-MPTJGRMY.js +118 -0
- package/lib/userDetail-MPTJGRMY.js.map +1 -0
- package/lib/{userList-7CQLR3HK.js → userList-3WABI7V4.js} +2 -2
- package/lib/{userList-7CQLR3HK.js.map → userList-3WABI7V4.js.map} +1 -1
- package/lib/userList-KXYDP7V5.js +166 -0
- package/lib/userList-KXYDP7V5.js.map +1 -0
- package/locale/context.js +7 -1
- package/locale/context.js.map +1 -1
- package/locale/en_GB.js +94 -1
- package/locale/en_GB.js.map +1 -1
- package/locale/hooks.js +20 -1
- package/locale/hooks.js.map +1 -1
- package/locale/index.js +2 -1
- package/locale/ja_JP.js +94 -1
- package/locale/ja_JP.js.map +1 -1
- package/locale/ko_KR.js +94 -1
- package/locale/ko_KR.js.map +1 -1
- package/locale/zh_CN.js +94 -1
- package/locale/zh_CN.js.map +1 -1
- package/package.json +21 -21
- package/lib/chunk-24U2EF5M.js +0 -2
- package/lib/chunk-24U2EF5M.js.map +0 -1
- package/lib/chunk-F2GDEOP4.js +0 -3
- package/lib/chunk-F2GDEOP4.js.map +0 -1
- package/lib/chunk-FIT6S4UM.js +0 -2
- package/lib/chunk-FIT6S4UM.js.map +0 -1
- package/lib/chunk-JDCSIJL7.js +0 -2
- package/lib/chunk-JDCSIJL7.js.map +0 -1
- package/lib/chunk-KZHYK554.js +0 -2
- package/lib/chunk-KZHYK554.js.map +0 -1
- package/lib/chunk-P5T74EXP.js.map +0 -1
- package/lib/roleList-ATJYWJ6Q.js +0 -2
- package/lib/roleList-ATJYWJ6Q.js.map +0 -1
- package/lib/updateMenuItem-4HDRJAY7.js +0 -2
- package/lib/updateMenuItem-4HDRJAY7.js.map +0 -1
- package/lib/userDetail-B5H4A4X2.js +0 -2
- package/lib/userDetail-B5H4A4X2.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-toolkits",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.27.0",
|
|
5
5
|
"sideEffects": [
|
|
6
6
|
"*.css"
|
|
7
7
|
],
|
|
@@ -35,39 +35,39 @@
|
|
|
35
35
|
"registry": "https://registry.npmjs.org/"
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@ant-design/icons": "^
|
|
39
|
-
"@monaco-editor/react": "^4.
|
|
40
|
-
"@tanstack/react-query": "^5.
|
|
41
|
-
"dayjs": "^1.11.
|
|
42
|
-
"immer": "^
|
|
38
|
+
"@ant-design/icons": "^6.1.0",
|
|
39
|
+
"@monaco-editor/react": "^4.7.0",
|
|
40
|
+
"@tanstack/react-query": "^5.90.10",
|
|
41
|
+
"dayjs": "^1.11.19",
|
|
42
|
+
"immer": "^11.0.0",
|
|
43
43
|
"jwt-decode": "^4.0.0",
|
|
44
|
-
"ky": "^1.
|
|
44
|
+
"ky": "^1.14.0",
|
|
45
45
|
"lodash-es": "^4.17.21",
|
|
46
|
-
"zustand": "^5.0.
|
|
46
|
+
"zustand": "^5.0.8"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
49
|
"@fullhuman/postcss-purgecss": "^7.0.2",
|
|
50
50
|
"@types/lodash-es": "^4.17.12",
|
|
51
|
-
"@types/node": "^
|
|
51
|
+
"@types/node": "^24.10.1",
|
|
52
52
|
"@types/react": "^19.2.6",
|
|
53
53
|
"@types/react-dom": "^19.2.3",
|
|
54
54
|
"antd": "^6.0.0",
|
|
55
|
-
"autoprefixer": "^10.4.
|
|
55
|
+
"autoprefixer": "^10.4.22",
|
|
56
56
|
"concurrently": "^9.2.1",
|
|
57
|
-
"cssnano": "^7.1.
|
|
58
|
-
"esbuild": "0.
|
|
59
|
-
"eslint": "^9.
|
|
60
|
-
"postcss": "^8.
|
|
61
|
-
"prettier": "^3.
|
|
57
|
+
"cssnano": "^7.1.2",
|
|
58
|
+
"esbuild": "0.27.0",
|
|
59
|
+
"eslint": "^9.39.1",
|
|
60
|
+
"postcss": "^8.5.6",
|
|
61
|
+
"prettier": "^3.6.2",
|
|
62
62
|
"purgecss": "^7.0.2",
|
|
63
63
|
"react": "^19.2.0",
|
|
64
64
|
"react-dom": "^19.2.0",
|
|
65
|
-
"react-router-dom": "^
|
|
66
|
-
"rimraf": "^6.
|
|
67
|
-
"tailwindcss": "^4.1.
|
|
68
|
-
"ts-essentials": "^10.
|
|
69
|
-
"tsup": "^8.
|
|
70
|
-
"typescript": "^5.
|
|
65
|
+
"react-router-dom": "^7.9.6",
|
|
66
|
+
"rimraf": "^6.1.2",
|
|
67
|
+
"tailwindcss": "^4.1.17",
|
|
68
|
+
"ts-essentials": "^10.1.1",
|
|
69
|
+
"tsup": "^8.5.1",
|
|
70
|
+
"typescript": "^5.9.3",
|
|
71
71
|
"@flow97/eslint-config-react": "1.1.2",
|
|
72
72
|
"tailwind-config": "0.1.3",
|
|
73
73
|
"tsconfig": "0.0.6"
|
package/lib/chunk-24U2EF5M.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import {a as a$1,f,g}from'./chunk-KZHYK554.js';import {d}from'./chunk-5QAEUAZE.js';import {a}from'./chunk-D5YXBSTI.js';import {i,k,l}from'./chunk-F2GDEOP4.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:M}=Typography,N=(m,a)=>{last(m)==="*"?a?.(["*"]):first(m)==="*"?a?.(m.slice(1)):a?.(m);},Z=m=>{let{onChange:a,...g}=m,o=k(),{data:u,isLoading:c}=useQuery({queryKey:l.enums.gameGroups,queryFn:()=>o.get("/api/enum/get?enum=game_group&type=all")}),C=[{label:"\u901A\u7528",value:"*"}].concat(u?.map(i=>({label:i,value:i}))??[]);return jsx(Select,{...g,allowClear:true,showSearch:true,mode:"tags",optionFilterProp:"label",loading:c,options:C,onChange:i=>N(i,a)})},E=m=>{let{groups:a,onChange:g,...o}=m,u=k(),{context:{permissionMode:c}}=i(),C=c==="group_based",i$1=c==="direct_game",{data:d,isLoading:G}=useQuery({queryKey:l.enums.gameIds(i$1?[]:a??[]),queryFn:()=>u.get(`/api/enum/game_group/get_game_ids${i$1?"":`?game_groups=${a?.join(",")}`}`).then(s=>s?.list),enabled:i$1||C&&!!a?.length}),y=d?.map(s=>({label:s.name,value:s.id}));return jsx(Select,{...o,allowClear:true,showSearch:true,optionFilterProp:"label",mode:"tags",loading:G,options:y,onChange:s=>N(s,g)})},ue=({mode:m,onSuccess:a$2})=>{let{message:g$1}=App.useApp(),{t:o}=a(),{data:u,isLoading:c}=a$1(),C=f(),i$1=g(),d$1=m==="create",G=o(d$1?"User.createTitle":"User.updateTitle"),{context:{permissionMode:y}}=i(),s=y==="group_based",I=y==="game_scoped",B=I?jsxs(Fragment,{children:[jsx(Form.Item,{label:o("global.name"),name:"name",rules:[{required:true}],children:jsx(Input,{disabled:!d$1})}),jsx(Form.Item,{label:o("global.role"),name:"roles",children:jsx(Select,{allowClear:true,showSearch:true,mode:"multiple",loading:c,optionFilterProp:"label",options:u?.map(t=>({label:t.name,value:t.name}))})})]}):jsxs(Fragment,{children:[jsx(Form.Item,{label:o("global.name"),name:"name",rules:[{required:true}],children:jsx(Input,{disabled:!d$1})}),jsx(Form.List,{name:"permissions",children:(t,{add:S,remove:b})=>jsxs(Row,{gutter:8,children:[s&&jsx(Col,{span:8,className:"text-center mb-4",children:jsx(M,{strong:true,children:o("global.projectGroup")})}),jsx(Col,{span:s?10:14,className:"text-center mb-4",children:jsx(M,{strong:true,children:o("global.game")})}),jsx(Col,{span:s?6:10,className:"text-center mb-4",children:jsx(M,{strong:true,children:o("global.role")})}),t.map(r=>jsxs(Fragment$1,{children:[s&&jsx(Col,{span:8,children:jsx(Form.Item,{noStyle:true,shouldUpdate:true,children:({setFieldValue:l})=>jsx(Form.Item,{name:[r.name,"game_group"],children:jsx(Z,{onChange:()=>{l(["permissions",r.name,"game_ids"],[]);}})})})}),jsx(Col,{span:s?10:14,children:s?jsx(Form.Item,{noStyle:true,shouldUpdate:(l,h)=>l.permissions[r.name]?.game_group!==h.permissions[r.name]?.game_group,children:({getFieldValue:l})=>{let h=l(["permissions",r.name,"game_group"]);return jsx(Form.Item,{name:[r.name,"game_ids"],dependencies:[["permissions",r.name,"game_group"]],rules:[{required:!!h?.length,message:"\u8BF7\u9009\u62E9\u6E38\u620F"}],children:jsx(E,{groups:h})})}}):jsx(Form.Item,{name:[r.name,"game_ids"],rules:[{required:true,message:"\u8BF7\u9009\u62E9\u6E38\u620F"}],children:jsx(E,{})})}),jsx(Col,{span:s?6:10,children:jsxs("div",{className:"flex",children:[jsx("div",{className:"flex-1",children:jsx(Form.Item,{name:[r.name,"role"],rules:[{required:true,message:"\u8BF7\u9009\u62E9\u89D2\u8272"},({getFieldValue:l})=>({validator(h,K){return (l("permissions")?.filter((U,O)=>!!U&&O!==r.name)??[]).some(U=>U.role===K)?Promise.reject(new Error("\u8BF7\u52FF\u91CD\u590D\u9009\u62E9\u89D2\u8272")):Promise.resolve()}})],children:jsx(Select,{allowClear:true,showSearch:true,optionFilterProp:"label",loading:c,options:u?.map(l=>({label:l.name,value:l.name}))})})}),jsx("div",{className:"w-8 text-center",children:jsx(Form.Item,{children:jsx(MinusCircleOutlined,{onClick:()=>{b(r.name);}})})})]})})]},r.key)),t.length===0&&jsx(Col,{span:24,children:jsx(Empty,{className:"mb-6"})}),jsx(Col,{span:24,children:jsx(Button,{block:true,type:"dashed",onClick:()=>S(),children:o("global.add")})})]})})]});return d({title:G,width:I?"600px":"1000px",formProps:{autoComplete:"off",labelCol:{flex:"80px"}},content:B,onConfirm:async(t,S)=>{if(d$1){let b=I?{name:t.name,roles:t.roles}:{name:t.name,permissions:t.permissions};await C.mutateAsync(b),g$1.success(o("User.createSuccessfully"));}else {let b=I?{id:S.id,name:t.name,roles:t.roles}:{id:S.id,name:t.name,permissions:t.permissions};await i$1.mutateAsync(b),g$1.success(o("User.updateSuccessfully"));}a$2?.();}})};export{ue as a};//# sourceMappingURL=chunk-24U2EF5M.js.map
|
|
2
|
-
//# sourceMappingURL=chunk-24U2EF5M.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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","permissionMode","useToolkitsStore","isGroupBased","isDirectGame","response","useUserModal","mode","onSuccess","message","App","t","useTranslation","roles","isRolesLoading","useAllRoles","create","useCreateUser","update","useUpdateUser","isCreateMode","title","isGameScoped","content","jsxs","Fragment","Form","Input","role","fields","add","remove","Row","Col","field","setFieldValue","prevValues","nextValues","getFieldValue","_groups","_rule","item","index","MinusCircleOutlined","Empty","Button","useFormModal","values","extraValues","submitData"],"mappings":"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","file":"chunk-24U2EF5M.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 { PermissionMode, 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 * - GROUP_BASED: 依赖 groups 参数,需要先选择项目组才能加载游戏列表\n * - DIRECT_GAME: 不依赖 groups,直接加载所有游戏列表\n */\nconst GameSelect: FC<GameSelectProps> = props => {\n const { groups, onChange, ...rest } = props\n const ky = useKy()\n const {\n context: { permissionMode },\n } = useToolkitsStore()\n const isGroupBased = permissionMode === PermissionMode.GROUP_BASED\n const isDirectGame = permissionMode === PermissionMode.DIRECT_GAME\n\n const { data, isLoading } = useQuery({\n queryKey: queryKeys.enums.gameIds(isDirectGame ? [] : (groups ?? [])),\n queryFn: () =>\n ky\n .get<{\n list: {\n id: string\n name: string\n }[]\n }>(`/api/enum/game_group/get_game_ids${isDirectGame ? '' : `?game_groups=${groups?.join(',')}`}`)\n .then(response => response?.list),\n enabled: isDirectGame || (isGroupBased && !!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 permissions?: {\n game_group: string[]\n game_ids: string[]\n role: string\n }[]\n}\n\n/**\n * 用户弹窗(根据权限模式自动选择表单结构)\n * - GAME_SCOPED: 使用简单的 roles 字段\n * - GROUP_BASED: 使用 permissions 数组,显示项目组选择\n * - DIRECT_GAME: 使用 permissions 数组,隐藏项目组选择\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 const isCreateMode = mode === 'create'\n const title = isCreateMode ? t('User.createTitle') : t('User.updateTitle')\n const {\n context: { permissionMode },\n } = useToolkitsStore()\n const isGroupBased = permissionMode === PermissionMode.GROUP_BASED\n const isGameScoped = permissionMode === PermissionMode.GAME_SCOPED\n\n const content = isGameScoped ? (\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 <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 {isGroupBased && (\n <Col span={8} className=\"text-center mb-4\">\n <Text strong>{t('global.projectGroup')}</Text>\n </Col>\n )}\n <Col span={isGroupBased ? 10 : 14} className=\"text-center mb-4\">\n <Text strong>{t('global.game')}</Text>\n </Col>\n <Col span={isGroupBased ? 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 {isGroupBased && (\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={isGroupBased ? 10 : 14}>\n {isGroupBased ? (\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={isGroupBased ? 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 UserModalFormSchema['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: UserModalFormSchema, extraValues: { id: string }) => {\n if (isCreateMode) {\n // 根据权限模式构造正确的提交数据\n const submitData = isGameScoped\n ? { name: values.name, roles: values.roles! }\n : { name: values.name, permissions: values.permissions! }\n await create.mutateAsync(submitData)\n message.success(t('User.createSuccessfully'))\n } else {\n // 根据权限模式构造正确的提交数据\n const submitData = isGameScoped\n ? { id: extraValues.id, name: values.name, roles: values.roles! }\n : { id: extraValues.id, name: values.name, permissions: values.permissions! }\n await update.mutateAsync(submitData)\n message.success(t('User.updateSuccessfully'))\n }\n onSuccess?.()\n }\n\n return useFormModal<UserModalFormSchema, { id: string }>({\n title,\n width: isGameScoped ? '600px' : '1000px',\n formProps: {\n autoComplete: 'off',\n labelCol: { flex: '80px' },\n },\n content,\n onConfirm,\n })\n}\n"]}
|
package/lib/chunk-F2GDEOP4.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
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 ce from'ky';import {useNavigate}from'react-router-dom';function B(){return create()((e,t)=>({open:new Map,usedIds:new Set,isOpen(o){return t().open.get(o)??false},show(o){e({open:new Map(t().open).set(o,true)});},hide(o){e({open:new Map(t().open).set(o,false)});},hideAll(){e({open:new Map});},checkUniqueness(o){return !t().usedIds.has(o)},registerIds(o){let{usedIds:n}=t();return n.has(o)?false:(e({usedIds:new Set(n).add(o)}),true)},cleanup(o){let{open:n,usedIds:a}=t(),i=new Map(n),d=new Set(a);i.delete(o),d.delete(o),e({open:i,usedIds:d});}}))}var j=0,z=()=>{let e=Date.now(),t=Math.floor(Math.random()*1e3),o=++j%1e3;return e*1e6+t*1e3+o};var R={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 qe="https://idaas.ifunplus.cn/enduser/api/application/plugin_FunPlus/sso/v1",h="App-ID",Ae="/console/",H=(n=>(n.GAME_SCOPED="game_scoped",n.GROUP_BASED="group_based",n.DIRECT_GAME="direct_game",n))(H||{}),Me="*";var V={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"}},v=V;var W={locale:v,useGameApiV2:false,isGlobalMode:false,gameScoped:false,loginPath:"/sign_in",homePath:"/",permissionMode:"game_scoped",sidebarWidth:250},U=()=>({...W});var D=e=>({setAppId:t=>e(()=>({appId:t}))});var q=e=>({collapsed:false,toggleCollapsed:()=>e(t=>({collapsed:!t.collapsed}))});var $=e=>{if(!e)return null;try{return jwtDecode(e)}catch{return null}},A=e=>({token:void 0,user:null,setToken:t=>e(()=>({token:t,user:$(t)})),clearToken:()=>e(()=>({token:void 0,user:null}))});function Y(e,t,o){return {set:(i,d)=>{if(d){let c=typeof i=="function"?i(t()[o]):i;e({...t(),[o]:c},true);}else e(typeof i=="function"?c=>{let S={...c[o],...i(c[o])};return {[o]:S}}:c=>{let S={...c[o],...i};return {[o]:S}});},get:()=>t()[o]}}var M=e=>createStore()(persist((t,o,n)=>{let a=(y,g)=>{let x=Y(t,o,y),b=n;return g(x.set,x.get,b)},i=a("token",A),d=a("game",D),c=a("layout",q);return {context:{...a("context",U),...e},token:i,game:d,layout:c,clear:()=>{o().token.clearToken(),n.persist.clearStorage();}}},{name:"ToolkitsStore",storage:createJSONStorage(()=>R),partialize:t=>({token:t.token.token,appId:t.game.appId,user:t.token.user,collapsed:t.layout.collapsed}),merge:(t,o)=>{let{token:n,user:a,appId:i,collapsed:d}=t;return {...o,token:{...o.token,token:n,user:a},game:{...o.game,appId:i},layout:{...o.layout,collapsed:d??o.layout.collapsed}}}}));var w=createContext(null);function O(e){let t=useContext(w);if(!t){let n=new Error().stack?.split(`
|
|
2
|
-
`)[2]?.trim()||"Unknown";throw new Error(`Missing ToolkitsProvider in the tree. Component "${n}" must be wrapped with <ToolkitsProvider>. Please ensure ToolkitsProvider is rendered above this component in the component tree.`)}return useStore(t,e??(o=>o))}var re=e=>{let{children:t,...o}=e,n=useRef(void 0),a=useContext(w);if(!n.current){let i=a?.getState().context??{};n.current=M({...i,...o});}if(!n.current.getState().context.loginPath)throw new Error('ToolkitsProvider: \u8BF7\u914D\u7F6E "loginPath"');return jsx(w.Provider,{value:n.current,children:jsx(App,{children:jsx(Fragment,{children:t})})})},ne=re;var E=[0,1,200],P={OK:200,UNAUTHORIZED:401,FORBIDDEN:403,UNREGISTERED:412},de=3e4,K=e=>!e||typeof e!="object"?"Unknown error":e.msg||e.message||e.error||"Unknown error",me=e=>{let{value:t,allowedCodes:o}=e;return t==null||typeof t!="number"?false:o.includes(t)},Se=(e,t)=>{if(t<P.OK||t>=300)return false;if(!e||typeof e!="object")return true;let o=[{field:"code",value:e.code,allowedCodes:E},{field:"status",value:e.status,allowedCodes:E},{field:"errno",value:e.errno,allowedCodes:E}];return o.some(a=>a.value!==void 0&&a.value!==null)?o.every(a=>a.value===void 0||a.value===null||me(a)):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:o}=App.useApp(),n=useNavigate(),a=useQueryClient(),{token:{token:i},context:{isGlobalMode:d,loginPath:c,apiBaseUrl:S},game:{appId:y},clear:g}=O(),x=()=>{g(),a.clear(),n(c);},b=()=>{if(g(),a.clear(),c){let s=new URL(c,window.location.origin);s.searchParams.set("unregistered","true"),n(s.toString());}},_=()=>{o.error({message:"\u8BBF\u95EE\u88AB\u7981\u6B62",description:"\u60A8\u6CA1\u6709\u6743\u9650\u8BBF\u95EE\u6B64\u8D44\u6E90\u3002"});},N=s=>async(r,l,u)=>{if(s==="blob"||s==="arrayBuffer"||s==="text"||s==="formData")return u;let p;try{p=await u.clone().json();}catch{return u}if(Se(p,u.status)){let k=p.data!==void 0?p.data:p;return new Response(JSON.stringify(k),{status:u.status,statusText:u.statusText,headers:u.headers})}let T=K(p);o.error({message:"Request failed",description:T});let f=new Error(T);throw f.response=u,f.data=p,f},L=(s,r)=>{switch(s){case P.UNAUTHORIZED:x();break;case P.UNREGISTERED:b();break;case P.FORBIDDEN:_();break;default:{let l=K(r)||`HTTP ${s} Error`;o.error({message:"Request failed",description:l});break}}},C=useMemo(()=>ce.create({prefixUrl:t??S,retry:0,timeout:de,headers:{Accept:"application/json","Content-Type":"application/json"},hooks:{beforeRequest:[s=>{i&&s.headers.set("Authorization",`Bearer ${i}`),s.headers.has(h)||(d||!y?s.headers.set(h,"global"):s.headers.set(h,encodeURIComponent(String(y))));}],beforeError:[async s=>{let{response:r}=s;if(r){let l=r.status,u;try{let p=r.headers.get("content-type")||"";(p.includes("application/json")||p.startsWith("text/"))&&(u=await r.clone().json());}catch{}L(l,u);}else o.error({message:"Network Error",description:s.message||"Network request failed"});return s}]}}),[t,i,d,y,o,c,g,a,S]),m=async(s,r,l,u)=>{let{responseType:p,...T}=u||{},f={...T,hooks:{...T.hooks,afterResponse:[...T.hooks?.afterResponse||[],N(p)]}},k;return l?k=await C(r,{method:s,json:l,...f}):k=await C(r,{method:s,...f}),Te(k,p)};return {get:(s,r)=>m("GET",s,void 0,r),post:(s,r,l)=>m("POST",s,r,l),put:(s,r,l)=>m("PUT",s,r,l),delete:(s,r)=>m("DELETE",s,void 0,r),patch:(s,r,l)=>m("PATCH",s,r,l),options:(s,r)=>m("OPTIONS",s,void 0,r),head:(s,r)=>m("HEAD",s,void 0,r),request:s=>{let{url:r,...l}=s;return m(l.method||"GET",r,void 0,l)},instance:C}};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{B as a,z as b,R as c,qe as d,h as e,Ae as f,H as g,Me as h,O as i,ne as j,fe as k,ft as l};//# sourceMappingURL=chunk-F2GDEOP4.js.map
|
|
3
|
-
//# sourceMappingURL=chunk-F2GDEOP4.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/createVisibilityStore.ts","../src/utils/generateId.ts","../src/utils/mixedStorage.ts","../src/constants/index.ts","../src/locale/zh_CN.ts","../src/stores/context.ts","../src/stores/game.ts","../src/stores/layout.ts","../src/stores/token.ts","../src/stores/index.ts","../src/components/toolkitsProvider/ToolkitsProvider.tsx","../src/libs/ky.ts","../src/queryKeys.ts"],"names":["createVisibilityStore","create","set","get","uuid","usedIds","open","newOpen","newUsedIds","globalCounter","generateId","timestamp","random","counter","mixedStorage","name","value","SSO_URL","APP_ID_HEADER","FRONTEND_ROUTE_PREFIX","PermissionMode","WILDCARD","locale","zh_CN_default","defaultContextSlice","createContextSlice","createGameSlice","id","createLayoutSlice","s","decodeToken","token","jwtDecode","createTokenSlice","createSliceAdapter","key","partial","replace","update","state","updated","createToolkitsStore","initProps","createStore","persist","store","createSlice","creator","adapter","sliceStore","tokenSlice","gameSlice","layoutSlice","createJSONStorage","persistedState","currentState","user","appId","collapsed","ToolkitsContext","createContext","useToolkitsStore","selector","useContext","componentName","useStore","ToolkitsProvider","props","children","restProps","storeRef","useRef","parentStore","parentContext","jsx","App","Fragment","ToolkitsProvider_default","SUCCESS_RESPONSE_CODES","HTTP_STATUS","REQUEST_TIMEOUT","extractErrorMessage","data","isStatusCodeSuccess","config","allowedCodes","isSuccessResponse","status","statusChecks","processResponseByType","response","responseType","useKy","baseURL","notification","navigate","useNavigate","queryClient","useQueryClient","isGlobalMode","loginPath","apiBaseUrl","clear","handleUnauthorized","handleUnregistered","url","handleForbidden","createResponseHandler","_request","_options","responseData","errorMessage","error","handleHttpStatusError","instance","useMemo","ky","request","contentType","makeRequest","method","requestOptions","kyOptions","finalOptions","options","requestOpts","queryKeys","permissions","mode","gameGroups","ticket"],"mappings":"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","file":"chunk-F2GDEOP4.js","sourcesContent":["import { create } from 'zustand'\n\nexport interface VisibilityState {\n open: Map<number, boolean>\n usedIds: Set<number>\n isOpen: (uuid: number) => boolean\n show: (uuid: number) => void\n hide: (uuid: number) => void\n hideAll: () => void\n checkUniqueness: (uuid: number) => boolean\n registerIds: (uuid: number) => boolean\n cleanup: (uuid: number) => void\n}\n\n/**\n * 创建一个可见性管理的 Zustand store\n * 用于管理 Modal、Drawer 等组件的显示/隐藏状态\n * 每次调用都会创建一个独立的 store 实例,确保不同组件间的状态隔离\n */\nexport function createVisibilityStore() {\n return create<VisibilityState>()((set, get) => ({\n open: new Map(),\n usedIds: new Set(),\n isOpen(uuid) {\n return get().open.get(uuid) ?? false\n },\n show(uuid) {\n set({ open: new Map(get().open).set(uuid, true) })\n },\n hide(uuid) {\n set({ open: new Map(get().open).set(uuid, false) })\n },\n hideAll() {\n set({ open: new Map() })\n },\n checkUniqueness(uuid) {\n return !get().usedIds.has(uuid)\n },\n registerIds(uuid) {\n const { usedIds } = get()\n if (usedIds.has(uuid)) return false\n\n set({ usedIds: new Set(usedIds).add(uuid) })\n return true\n },\n cleanup(uuid) {\n const { open, usedIds } = get()\n const newOpen = new Map(open)\n const newUsedIds = new Set(usedIds)\n newOpen.delete(uuid)\n newUsedIds.delete(uuid)\n set({ open: newOpen, usedIds: newUsedIds })\n },\n }))\n}\n","/**\n * 生成唯一 ID 的函数\n * 使用时间戳 + 随机数 + 计数器的组合来确保唯一性\n */\nlet globalCounter = 0\n\nexport const generateId = (): number => {\n const timestamp = Date.now()\n const random = Math.floor(Math.random() * 1000)\n const counter = ++globalCounter % 1000\n\n // 组合:时间戳(毫秒) * 1000000 + 随机数 * 1000 + 计数器\n // 这样可以确保即使在同一毫秒内生成多个ID也不会重复\n return timestamp * 1000000 + random * 1000 + counter\n}\n","import type { StateStorage } from 'zustand/middleware'\n\n/**\n * 混合存储策略\n * - 优先从 SessionStorage 读取数据,防止多开页面时的数据冲突\n * - 写入时同时更新 SessionStorage 和 LocalStorage\n * - SessionStorage 不存在时,fallback 到 LocalStorage\n */\nexport const mixedStorage: StateStorage = {\n getItem(name) {\n return sessionStorage.getItem(name) ?? localStorage.getItem(name)\n },\n setItem(name, value) {\n sessionStorage.setItem(name, value)\n localStorage.setItem(name, value)\n },\n removeItem(name) {\n sessionStorage.removeItem(name)\n localStorage.removeItem(name)\n },\n}\n","export const SSO_URL = 'https://idaas.ifunplus.cn/enduser/api/application/plugin_FunPlus/sso/v1'\n\nexport const APP_ID_HEADER = 'App-ID'\n\nexport const FRONTEND_ROUTE_PREFIX = '/console/'\n\n/**\n * 权限系统模式枚举\n * - GAME_SCOPED: 游戏范围权限(角色权限包含游戏信息)\n * - GROUP_BASED: 基于项目组的权限(需要先选择项目组才能选择游戏)\n * - DIRECT_GAME: 直接游戏权限(不需要项目组,直接选择游戏)\n */\nexport enum PermissionMode {\n /** 游戏范围权限:角色权限包含游戏范围信息 */\n GAME_SCOPED = 'game_scoped',\n /** 基于项目组的权限:权限依赖项目组,需要先选择项目组才能选择游戏 */\n GROUP_BASED = 'group_based',\n /** 直接游戏权限:权限直接选择游戏,不需要项目组作为中间层 */\n DIRECT_GAME = 'direct_game',\n}\n\nexport const WILDCARD = '*'\n","import type { Locale } from '.'\n\nconst locale: Locale = {\n global: {\n noEntitlement: '无权限,请联系管理员',\n name: '名称',\n creationTime: '创建时间',\n operation: '操作',\n update: '更新',\n edit: '编辑',\n delete: '删除',\n selectAll: '全选',\n game: '游戏',\n user: '用户',\n role: '角色',\n username: '用户名',\n password: '密码',\n label: '标签',\n method: '方法',\n route: '路由',\n request: '请求',\n response: '响应',\n add: '添加',\n signIn: '登录',\n projectGroup: '项目组',\n view: '查看',\n back: '返回',\n },\n SignIn: {\n title: '登录方式',\n signInWithIDass: 'IDass 登录',\n unregistered: '您还未在平台注册,请联系管理员',\n welcome: '欢迎',\n },\n NotFound: {\n subTitle: '访问的页面不存在',\n buttonText: '返回首页',\n },\n FilterFormWrapper: {\n confirmText: '查询',\n resetText: '重置',\n },\n FormModal: {\n confirmText: '确认',\n cancelText: '取消',\n },\n GameSelect: {\n label: '当前游戏',\n placeholder: '请选择游戏',\n },\n RequireGame: {\n description: '请选择游戏',\n },\n UserDropdown: {\n signOutText: '登出',\n },\n User: {\n createTitle: '创建用户',\n createSuccessfully: '用户创建成功',\n updateTitle: '更新用户',\n updateSuccessfully: '用户更新成功',\n deleteTitle: '删除用户',\n deleteContent: '确定要删除用户 <%= user %> 吗?',\n deleteSuccessfully: '用户删除成功',\n },\n Role: {\n createTitle: '创建角色',\n createSuccessfully: '角色创建成功',\n updateTitle: '更新角色',\n updateSuccessfully: '角色更新成功',\n deleteTitle: '删除角色',\n deleteContent: '确定要删除角色 <%= role %> 吗?',\n deleteSuccessfully: '角色删除成功',\n },\n PermissionList: {\n failedDescription: '获取权限列表失败',\n baseSectionTitle: '平台基础权限',\n gameSectionTitle: '游戏权限',\n gameSectionDescription: '请先选择游戏',\n gameSelectPlaceholder: '请先选择游戏',\n removeText: '移除',\n addText: '添加游戏权限',\n },\n RoleDetail: {\n title: '角色详情',\n },\n InfiniteList: {\n loadingText: '加载中',\n reachEndText: '已经到底了',\n loadMoreText: '加载更多',\n },\n}\n\nexport default locale\n","import type { StateCreator } from 'zustand'\n\nimport { PermissionMode } from '@/constants'\nimport type { Locale } from '@/locale'\nimport zhCN from '@/locale/zh_CN'\n\nexport interface ContextSlice {\n locale: Locale\n permissionMode: PermissionMode // 权限模式\n useGameApiV2: boolean // 是否使用游戏 API V2 版本\n loginPath: string // 登录页路径\n isGlobalMode: boolean // 为 true 时,APP-ID header 始终使用 'global',否则为当前游戏 id\n gameScoped?: boolean // 数据是否按游戏划分范围,默认为 false\n sidebarWidth?: number // 侧边栏宽度\n sidebarCollapsible?: boolean // 侧边栏是否可折叠\n homePath: string // 首页地址\n apiBaseUrl?: string // 接口基础路径\n}\n\n/** ContextSlice 的默认值 */\nconst defaultContextSlice = {\n locale: zhCN,\n useGameApiV2: false,\n isGlobalMode: false,\n gameScoped: false,\n loginPath: '/sign_in',\n homePath: '/',\n permissionMode: PermissionMode.GAME_SCOPED,\n sidebarWidth: 250,\n} as const\n\nexport const createContextSlice: StateCreator<ContextSlice, [], [], ContextSlice> = () => ({\n ...defaultContextSlice,\n})\n","import type { StateCreator } from 'zustand'\n\nexport interface GameSlice {\n appId?: string | number\n setAppId: (id?: string | number) => void\n}\n\nexport const createGameSlice: StateCreator<GameSlice, [], [], GameSlice> = set => ({\n setAppId: id => set(() => ({ appId: id })),\n})\n","import type { StateCreator } from 'zustand'\n\nexport interface LayoutSlice {\n collapsed: boolean // 侧边栏是否折叠\n toggleCollapsed: () => void\n}\n\nexport const createLayoutSlice: StateCreator<LayoutSlice, [], [], LayoutSlice> = set => ({\n collapsed: false,\n toggleCollapsed: () => set(s => ({ collapsed: !s.collapsed })),\n})\n","import { jwtDecode } from 'jwt-decode'\nimport type { StateCreator } from 'zustand'\n\n/**\n * JWT Token 解码后的用户信息\n */\nexport interface UserInfo {\n authorityId: string\n exp: number\n}\n\nexport interface TokenSlice {\n /** JWT Token */\n token?: string\n user: UserInfo | null\n setToken: (token: string) => void\n clearToken: () => void\n}\n\nconst decodeToken = (token?: string): UserInfo | null => {\n if (!token) return null\n\n try {\n return jwtDecode<UserInfo>(token)\n } catch {\n return null\n }\n}\n\nexport const createTokenSlice: StateCreator<TokenSlice, [], [], TokenSlice> = set => ({\n token: undefined,\n user: null,\n setToken: token => set(() => ({ token, user: decodeToken(token) })),\n clearToken: () => set(() => ({ token: undefined, user: null })),\n})\n","import type { StateCreator, StoreApi } from 'zustand'\nimport { createStore } from 'zustand'\nimport { createJSONStorage, persist } from 'zustand/middleware'\n\nimport { mixedStorage } from '@/utils'\n\nimport { type ContextSlice, createContextSlice } from './context'\nimport { createGameSlice, type GameSlice } from './game'\nimport { createLayoutSlice, type LayoutSlice } from './layout'\nimport { createTokenSlice, type TokenSlice, type UserInfo } from './token'\n\nexport type ToolkitsState = {\n context: ContextSlice\n token: TokenSlice\n game: GameSlice\n layout: LayoutSlice\n clear: () => void\n}\n\n/**\n * 为嵌套结构的 store 创建 slice 适配器\n *\n * 由于 zustand 的标准做法是扁平组合多个 slice,而我们需要嵌套结构(如 `state.token.setToken()`),\n * 因此需要创建适配器来将全局的 `set/get` 转换为针对特定 slice 的 `set/get`。\n *\n * @template K - ToolkitsState 的 key,用于指定要适配的 slice\n * @param set - Zustand store 的全局 set 函数,用于更新整个 state\n * @param get - Zustand store 的全局 get 函数,用于获取整个 state\n * @param key - 要适配的 slice 的 key(如 'token', 'game', 'layout' 等)\n * @returns 返回适配后的 set 和 get 函数,可以直接用于创建对应的 slice\n *\n * @example\n * ```typescript\n * const adapter = createSliceAdapter(set, get, 'token')\n * const tokenSlice = createTokenSlice(adapter.set, adapter.get, store)\n * ```\n */\nfunction createSliceAdapter<K extends keyof ToolkitsState>(\n set: Parameters<StateCreator<ToolkitsState, [], [], ToolkitsState>>[0],\n get: Parameters<StateCreator<ToolkitsState, [], [], ToolkitsState>>[1],\n key: K,\n) {\n type SliceType = ToolkitsState[K]\n\n /**\n * 适配后的 set 函数,用于更新指定的 slice\n *\n * 该函数将 slice 级别的更新转换为全局 state 的更新:\n * - 当 `replace` 为 true 时,完全替换整个 slice\n * - 当 `partial` 为函数时,使用函数式更新\n * - 当 `partial` 为对象时,进行浅合并更新\n */\n const sliceSet: Parameters<StateCreator<SliceType, [], [], SliceType>>[0] = (partial, replace?) => {\n if (replace) {\n // 完全替换模式:获取更新后的值,然后替换整个 slice\n const update = typeof partial === 'function' ? partial(get()[key]) : partial\n set({ ...get(), [key]: update } as ToolkitsState, true)\n } else if (typeof partial === 'function') {\n // 函数式更新:使用当前 slice 状态计算新状态\n set((state): Partial<ToolkitsState> => {\n const updated = { ...state[key], ...partial(state[key]) }\n return { [key]: updated } as unknown as Partial<ToolkitsState>\n })\n } else {\n // 对象式更新:浅合并到当前 slice 状态\n set((state): Partial<ToolkitsState> => {\n const updated = { ...state[key], ...partial }\n return { [key]: updated } as unknown as Partial<ToolkitsState>\n })\n }\n }\n\n /**\n * 适配后的 get 函数,用于获取指定的 slice\n */\n const sliceGet: Parameters<StateCreator<SliceType, [], [], SliceType>>[1] = () => get()[key]\n\n return { set: sliceSet, get: sliceGet }\n}\n\nexport const createToolkitsStore = (initProps?: Partial<ContextSlice>) => {\n return createStore<ToolkitsState>()(\n persist(\n (set, get, store) => {\n /**\n * 统一创建 slice 的辅助函数\n *\n * 该函数封装了 slice 创建的逻辑,包括:\n * 1. 创建适配器(将全局 set/get 转换为 slice 级别的 set/get)\n * 2. 适配 store 类型(将全局 store 转换为 slice 级别的 store)\n * 3. 调用 slice creator 创建 slice\n *\n * @template K - ToolkitsState 的 key\n * @param key - slice 的 key\n * @param creator - slice 的创建函数(StateCreator)\n * @returns 创建好的 slice 实例\n */\n const createSlice = <K extends keyof ToolkitsState>(\n key: K,\n creator: StateCreator<ToolkitsState[K], [], [], ToolkitsState[K]>,\n ) => {\n const adapter = createSliceAdapter(set, get, key)\n // 将全局 store 适配为对应 slice 的 StoreApi(类型转换是安全的,因为实际运行时结构兼容)\n const sliceStore = store as unknown as StoreApi<ToolkitsState[K]>\n return creator(adapter.set, adapter.get, sliceStore)\n }\n\n const tokenSlice = createSlice('token', createTokenSlice)\n const gameSlice = createSlice('game', createGameSlice)\n const layoutSlice = createSlice('layout', createLayoutSlice)\n const contextSlice = createSlice('context', createContextSlice)\n\n return {\n context: {\n ...contextSlice,\n ...initProps,\n },\n token: tokenSlice,\n game: gameSlice,\n layout: layoutSlice,\n clear: () => {\n get().token.clearToken()\n store.persist.clearStorage()\n },\n }\n },\n {\n name: 'ToolkitsStore',\n storage: createJSONStorage(() => mixedStorage),\n partialize: state => ({\n token: state.token.token,\n appId: state.game.appId,\n user: state.token.user,\n collapsed: state.layout.collapsed,\n }),\n merge: (persistedState, currentState) => {\n const { token, user, appId, collapsed } = persistedState as {\n token: string\n user: UserInfo\n appId: string\n collapsed: boolean\n }\n return {\n ...currentState,\n token: { ...currentState.token, token, user },\n game: { ...currentState.game, appId },\n layout: { ...currentState.layout, collapsed: collapsed ?? currentState.layout.collapsed },\n }\n },\n },\n ),\n )\n}\n","import { App } from 'antd'\nimport type { FC, PropsWithChildren } from 'react'\nimport { createContext, useContext, useRef } from 'react'\nimport { useStore } from 'zustand'\n\nimport type { ToolkitsState } from '@/stores'\nimport { createToolkitsStore } from '@/stores'\nimport type { ContextSlice } from '@/stores/context'\n\ntype ToolkitsStore = ReturnType<typeof createToolkitsStore>\n\nconst ToolkitsContext = createContext<ToolkitsStore | null>(null)\n\n// 重载函数签名:支持有 selector 和无 selector 两种调用方式\nexport function useToolkitsStore(): ToolkitsState\nexport function useToolkitsStore<T>(selector: (state: ToolkitsState) => T): T\nexport function useToolkitsStore<T>(selector?: (state: ToolkitsState) => T) {\n const store = useContext(ToolkitsContext)\n if (!store) {\n const componentStack = new Error().stack\n const componentName = componentStack?.split('\\n')[2]?.trim() || 'Unknown'\n throw new Error(\n `Missing ToolkitsProvider in the tree. Component \"${componentName}\" must be wrapped with <ToolkitsProvider>. Please ensure ToolkitsProvider is rendered above this component in the component tree.`,\n )\n }\n\n return useStore(store, selector ?? (state => state as T))\n}\n\nexport type ToolkitsProviderProps = PropsWithChildren<Partial<ContextSlice>>\n\nconst ToolkitsProvider: FC<ToolkitsProviderProps> = props => {\n const { children, ...restProps } = props\n const storeRef = useRef<ToolkitsStore | undefined>(undefined)\n const parentStore = useContext(ToolkitsContext)\n\n if (!storeRef.current) {\n // 从父级 store 中提取 ContextSlice 相关的属性\n const parentContext = parentStore?.getState().context ?? {}\n\n // restProps 会覆盖父级的对应属性\n storeRef.current = createToolkitsStore({ ...parentContext, ...restProps })\n }\n\n if (!storeRef.current.getState().context.loginPath) {\n throw new Error('ToolkitsProvider: 请配置 \"loginPath\"')\n }\n\n return (\n <ToolkitsContext.Provider value={storeRef.current}>\n <App>\n <>{children}</>\n </App>\n </ToolkitsContext.Provider>\n )\n}\n\nif (process.env.NODE_ENV !== 'production') {\n ToolkitsProvider.displayName = 'ToolkitsProvider'\n}\n\nexport default ToolkitsProvider\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useQueryClient } from '@tanstack/react-query'\nimport { App } from 'antd'\nimport ky, { type KyInstance, type Options as KyOptions } from 'ky'\nimport { useMemo } from 'react'\nimport { useNavigate } from 'react-router-dom'\n\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { APP_ID_HEADER } from '@/constants'\n\n// 响应成功状态码常量\nconst SUCCESS_RESPONSE_CODES = [0, 1, 200] as const\n\n// HTTP 状态码常量\nconst HTTP_STATUS = {\n OK: 200,\n UNAUTHORIZED: 401,\n FORBIDDEN: 403,\n UNREGISTERED: 412,\n} as const\n\n// 请求超时时间(毫秒)\nconst REQUEST_TIMEOUT = 30000\n\n// 成功响应状态码字段类型\ntype StatusField = 'code' | 'status' | 'errno'\n\n// 状态码检查配置\ninterface StatusCheckConfig {\n field: StatusField\n value: unknown\n allowedCodes: readonly number[]\n}\n\n// 响应类型\nexport type ResponseType = 'json' | 'blob' | 'text' | 'arrayBuffer' | 'formData'\n\n// 通用请求选项接口\ninterface RequestOptions extends KyOptions {\n responseType?: ResponseType\n}\n\n// useKy Hook 配置选项\nexport interface UseKyOptions {\n baseURL?: string\n}\n\n// HTTP客户端方法接口 - 支持泛型响应类型\ninterface KyMethods {\n get: <T = any>(url: string, options?: RequestOptions) => Promise<T>\n post: <T = any>(url: string, data?: any, options?: RequestOptions) => Promise<T>\n put: <T = any>(url: string, data?: any, options?: RequestOptions) => Promise<T>\n delete: <T = any>(url: string, options?: RequestOptions) => Promise<T>\n patch: <T = any>(url: string, data?: any, options?: RequestOptions) => Promise<T>\n options: <T = any>(url: string, options?: RequestOptions) => Promise<T>\n head: <T = any>(url: string, options?: RequestOptions) => Promise<T>\n request: <T = any>(options: RequestOptions & { url: string }) => Promise<T>\n instance: KyInstance\n}\n\n// 错误消息提取工具函数\nconst extractErrorMessage = (data: any): string => {\n if (!data || typeof data !== 'object') {\n return 'Unknown error'\n }\n\n return data.msg || data.message || data.error || 'Unknown error'\n}\n\n/**\n * 检查单个状态码字段是否成功\n * @param config 状态码检查配置\n * @returns 是否成功\n */\nconst isStatusCodeSuccess = (config: StatusCheckConfig): boolean => {\n const { value, allowedCodes } = config\n\n if (value === undefined || value === null) {\n return false\n }\n\n if (typeof value !== 'number') {\n return false\n }\n\n return allowedCodes.includes(value)\n}\n\n/**\n * 判断响应是否成功\n * @param data 响应数据\n * @param status HTTP状态码\n * @returns 是否成功\n */\nconst isSuccessResponse = (data: any, status: number): boolean => {\n // 如果HTTP状态码不在2xx范围,直接返回失败\n if (status < HTTP_STATUS.OK || status >= 300) {\n return false\n }\n\n // 如果没有响应数据或不是对象,认为成功(可能是空响应)\n if (!data || typeof data !== 'object') {\n return true\n }\n\n // 定义状态码检查配置\n const statusChecks: StatusCheckConfig[] = [\n { field: 'code', value: data.code, allowedCodes: SUCCESS_RESPONSE_CODES },\n { field: 'status', value: data.status, allowedCodes: SUCCESS_RESPONSE_CODES },\n { field: 'errno', value: data.errno, allowedCodes: SUCCESS_RESPONSE_CODES },\n ]\n\n // 检查是否有任何业务状态码字段存在且表示成功\n const hasBusinessStatusCode = statusChecks.some(config => config.value !== undefined && config.value !== null)\n\n // 如果存在业务状态码字段,则必须检查它们是否都表示成功\n if (hasBusinessStatusCode) {\n return statusChecks.every(\n config => config.value === undefined || config.value === null || isStatusCodeSuccess(config),\n )\n }\n\n // 如果没有业务状态码字段,HTTP 2xx 就认为成功\n return true\n}\n\n/**\n * 根据响应类型处理响应数据\n * @param response 响应对象\n * @param responseType 响应类型\n * @returns 处理后的响应数据\n */\nconst processResponseByType = async (response: Response, responseType?: ResponseType): Promise<any> => {\n switch (responseType) {\n case 'blob':\n return response.blob()\n case 'text':\n return response.text()\n case 'arrayBuffer':\n return response.arrayBuffer()\n case 'formData':\n return response.formData()\n case 'json':\n default:\n return response.json()\n }\n}\n\n/**\n * HTTP客户端Hook (基于 Ky) - 内部使用版本\n * @param config 配置选项\n * @returns HTTP客户端方法集合\n */\nexport const useKy = (config?: UseKyOptions): KyMethods => {\n const { baseURL } = config || {}\n const { notification } = App.useApp()\n\n const navigate = useNavigate()\n\n const queryClient = useQueryClient()\n\n const {\n token: { token },\n context: { isGlobalMode, loginPath, apiBaseUrl },\n game: { appId },\n clear,\n } = useToolkitsStore()\n\n // 处理未授权错误\n const handleUnauthorized = () => {\n clear()\n // 清除 React Query 缓存\n queryClient.clear()\n navigate(loginPath)\n }\n\n // 处理未注册错误\n const handleUnregistered = () => {\n clear()\n // 清除 React Query 缓存\n queryClient.clear()\n if (loginPath) {\n // 添加未注册参数到登录页 URL\n const url = new URL(loginPath, window.location.origin)\n url.searchParams.set('unregistered', 'true')\n navigate(url.toString())\n }\n }\n\n // 处理禁止访问错误\n const handleForbidden = () => {\n notification.error({\n message: '访问被禁止',\n description: '您没有权限访问此资源。',\n })\n }\n\n // 创建响应处理函数\n const createResponseHandler = (responseType?: ResponseType) => {\n return async (_request: any, _options: any, response: Response): Promise<Response> => {\n // 非 JSON 类型直接交由调用方按响应类型读取\n if (\n responseType === 'blob' ||\n responseType === 'arrayBuffer' ||\n responseType === 'text' ||\n responseType === 'formData'\n ) {\n return response\n }\n\n // 默认 JSON\n let data: any\n try {\n data = await response.clone().json()\n } catch {\n // 非 JSON 或空响应体,直接返回原响应\n return response\n }\n\n if (isSuccessResponse(data, response.status)) {\n const responseData = data.data !== undefined ? data.data : data\n return new Response(JSON.stringify(responseData), {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n })\n }\n\n const errorMessage = extractErrorMessage(data)\n\n notification.error({\n message: 'Request failed',\n description: errorMessage,\n })\n\n const error = new Error(errorMessage)\n ;(error as any).response = response\n ;(error as any).data = data\n throw error\n }\n }\n\n // 处理HTTP状态码错误\n const handleHttpStatusError = (status: number, data: any) => {\n switch (status) {\n case HTTP_STATUS.UNAUTHORIZED:\n handleUnauthorized()\n break\n\n case HTTP_STATUS.UNREGISTERED:\n handleUnregistered()\n break\n\n case HTTP_STATUS.FORBIDDEN:\n handleForbidden()\n break\n\n default: {\n // 安全地提取错误消息\n const errorMessage = extractErrorMessage(data) || `HTTP ${status} Error`\n notification.error({\n message: 'Request failed',\n description: errorMessage,\n })\n break\n }\n }\n }\n\n // 创建ky实例\n const instance = useMemo(() => {\n return ky.create({\n prefixUrl: baseURL ?? apiBaseUrl,\n retry: 0,\n timeout: REQUEST_TIMEOUT,\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n hooks: {\n beforeRequest: [\n request => {\n // 设置认证 headers\n if (token) {\n request.headers.set('Authorization', `Bearer ${token}`)\n }\n\n // 设置应用 ID headers\n if (!request.headers.has(APP_ID_HEADER)) {\n if (isGlobalMode || !appId) {\n request.headers.set(APP_ID_HEADER, 'global')\n } else {\n // 对 appId 进行 URL 编码以避免非 ASCII 字符导致的 XMLHttpRequest 错误\n request.headers.set(APP_ID_HEADER, encodeURIComponent(String(appId)))\n }\n }\n },\n ],\n beforeError: [\n async error => {\n const { response } = error\n\n if (response) {\n const status = response.status\n let data: any\n\n try {\n const contentType = response.headers.get('content-type') || ''\n if (contentType.includes('application/json') || contentType.startsWith('text/')) {\n data = await response.clone().json()\n }\n } catch {\n // 忽略 JSON 解析错误\n }\n\n handleHttpStatusError(status, data)\n } else {\n // 网络错误或请求超时等情况\n notification.error({\n message: 'Network Error',\n description: error.message || 'Network request failed',\n })\n }\n\n return error\n },\n ],\n },\n })\n }, [baseURL, token, isGlobalMode, appId, notification, loginPath, clear, queryClient, apiBaseUrl])\n\n // 通用请求处理函数\n const makeRequest = async <T = any>(\n method: string,\n url: string,\n data?: any,\n requestOptions?: RequestOptions,\n ): Promise<T> => {\n const { responseType, ...kyOptions } = requestOptions || {}\n\n // 创建带有响应类型处理器的请求选项\n const finalOptions: KyOptions = {\n ...kyOptions,\n hooks: {\n ...kyOptions.hooks,\n afterResponse: [...(kyOptions.hooks?.afterResponse || []), createResponseHandler(responseType)],\n },\n }\n\n let response: Response\n\n if (data) {\n response = await instance(url, { method, json: data, ...finalOptions })\n } else {\n response = await instance(url, { method, ...finalOptions })\n }\n\n // 根据响应类型返回相应数据\n return processResponseByType(response, responseType)\n }\n\n // HTTP方法\n const get = <T = any>(url: string, options?: RequestOptions): Promise<T> => {\n return makeRequest<T>('GET', url, undefined, options)\n }\n\n const post = <T = any>(url: string, data?: any, options?: RequestOptions): Promise<T> => {\n return makeRequest<T>('POST', url, data, options)\n }\n\n const put = <T = any>(url: string, data?: any, options?: RequestOptions): Promise<T> => {\n return makeRequest<T>('PUT', url, data, options)\n }\n\n const del = <T = any>(url: string, options?: RequestOptions): Promise<T> => {\n return makeRequest<T>('DELETE', url, undefined, options)\n }\n\n const patch = <T = any>(url: string, data?: any, options?: RequestOptions): Promise<T> => {\n return makeRequest<T>('PATCH', url, data, options)\n }\n\n const options = <T = any>(url: string, requestOptions?: RequestOptions): Promise<T> => {\n return makeRequest<T>('OPTIONS', url, undefined, requestOptions)\n }\n\n const head = <T = any>(url: string, requestOptions?: RequestOptions): Promise<T> => {\n return makeRequest<T>('HEAD', url, undefined, requestOptions)\n }\n\n const request = <T = any>(requestOptions: RequestOptions & { url: string }): Promise<T> => {\n const { url, ...requestOpts } = requestOptions\n return makeRequest<T>(requestOpts.method || 'GET', url, undefined, requestOpts)\n }\n\n return {\n get,\n post,\n put,\n delete: del,\n patch,\n options,\n head,\n request,\n instance,\n }\n}\n","import type { PermissionMode } from './constants'\n\n// 查询键工厂 - 使用简单的对象和函数来生成查询键\nexport const queryKeys = {\n // 权限相关\n permissions: {\n check: (permissions: string[], mode: PermissionMode) => ['permissions', 'check', permissions, mode] as const,\n allPermissions: ['permissions', 'all'] as const,\n allPermissionsV2: ['permissions', 'allV2'] as const,\n },\n // 用户相关\n users: {\n all: ['users'] as const,\n detail: (id: string) => ['users', 'detail', id] as const,\n create: ['users', 'create'] as const,\n update: ['users', 'update'] as const,\n delete: ['users', 'delete'] as const,\n },\n // 角色相关\n roles: {\n all: ['roles'] as const,\n detail: (name: string, mode: PermissionMode) => ['roles', 'detail', name, mode] as const,\n create: (mode: PermissionMode) => ['roles', 'create', mode] as const,\n update: (mode: PermissionMode) => ['roles', 'update', mode] as const,\n delete: ['roles', 'delete'] as const,\n },\n // 菜单相关\n menus: {\n all: ['menus'] as const,\n navbar: (appId?: string) => ['menus', 'navbar', appId] as const,\n detail: (id: number) => ['menus', 'detail', id] as const,\n create: ['menus', 'create'] as const,\n update: ['menus', 'update'] as const,\n delete: ['menus', 'delete'] as const,\n },\n // 枚举相关\n enums: {\n gameGroups: ['enums', 'gameGroups'] as const,\n gameIds: (gameGroups: string[]) => ['enums', 'gameIds', gameGroups] as const,\n },\n // 游戏相关\n games: {\n all: ['games', 'all'] as const,\n },\n // 认证相关\n auth: {\n ticketLogin: (ticket: string | null) => ['auth', 'ticket-login', ticket] as const,\n },\n}\n\nexport type QueryKeys = typeof queryKeys\n"]}
|
package/lib/chunk-FIT6S4UM.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import {k,l as l$1}from'./chunk-F2GDEOP4.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-FIT6S4UM.js.map
|
|
2
|
-
//# sourceMappingURL=chunk-FIT6S4UM.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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-FIT6S4UM.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"]}
|
package/lib/chunk-JDCSIJL7.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import {k as k$1,l,i,e}from'./chunk-F2GDEOP4.js';import {useQuery}from'@tanstack/react-query';function k(e,t){let s=k$1(),n=typeof e<"u"?typeof e=="string"?[e]:e:[],{data:r,...f}=useQuery({queryKey:l.permissions.check(n,"game_scoped"),queryFn:()=>s.post("/api/usystem/user/checkV2",{permissions:n},t),enabled:n.length>0,retry:false}),i=true;return typeof e=="string"?i=r?.has_all?true:r?.[e]??false:Array.isArray(e)&&e.length>0&&(i=n.reduce((l,y)=>(l[y]=r?.has_all?true:r?.[y]??false,l),{})),{...f,data:i}}function A(){let{context:{loginPath:e$1},game:{appId:t}}=i(),s=k$1();return useQuery({queryKey:l.menus.navbar(t?String(t):void 0),queryFn:()=>s.get("/api/usystem/menu/navbar",{headers:{[e]:t?encodeURIComponent(String(t)):"global"}}),enabled:window.location.pathname!==e$1})}var K=()=>{let{context:{useGameApiV2:e$1}}=i(),t=k$1();return useQuery({queryKey:l.games.all,queryFn:async()=>{let s={headers:{[e]:"global"}};return e$1?(await t.get("/api/game/list",s))?.list??[]:await t.get("/api/usystem/game/all",s)??[]},retry:false})};export{k as a,A as b,K as c};//# sourceMappingURL=chunk-JDCSIJL7.js.map
|
|
2
|
-
//# sourceMappingURL=chunk-JDCSIJL7.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/services/index.ts"],"names":["useAuth","code","config","ky","useKy","permissionCodes","data","rest","useQuery","queryKeys","newData","acc","curr","useMenuList","loginPath","appId","useToolkitsStore","APP_ID_HEADER","useGames","useGameApiV2","requestConfig"],"mappings":"8FAUO,SAASA,CAAAA,CAAQC,EAA0BC,CAAAA,CAAoB,CACpE,IAAMC,CAAAA,CAAKC,GAAAA,EAAM,CACXC,EAA4B,OAAOJ,CAAAA,CAAS,GAAA,CAAe,OAAOA,CAAAA,EAAS,QAAA,CAAW,CAACA,CAAI,CAAA,CAAIA,CAAAA,CAAQ,EAAC,CAExG,CAAE,IAAA,CAAAK,EAAM,GAAGC,CAAK,CAAA,CAAIC,QAAAA,CAAS,CACjC,QAAA,CAAUC,EAAU,WAAA,CAAY,KAAA,CAAMJ,CAAAA,CAAAA,aAA2C,CAAA,CACjF,OAAA,CAAS,IACPF,EAAG,IAAA,CACD,2BAAA,CACA,CACE,WAAA,CAAaE,CACf,CAAA,CACAH,CACF,CAAA,CACF,OAAA,CAASG,CAAAA,CAAgB,MAAA,CAAS,CAAA,CAClC,KAAA,CAAO,KACT,CAAC,CAAA,CAEGK,CAAAA,CAA6C,IAAA,CAEjD,OAAI,OAAOT,CAAAA,EAAS,SAClBS,CAAAA,CAAUJ,CAAAA,EAAM,OAAA,CAAU,IAAA,CAAQA,CAAAA,GAAOL,CAAI,GAAK,KAAA,CACzC,KAAA,CAAM,OAAA,CAAQA,CAAI,CAAA,EAAKA,CAAAA,CAAK,MAAA,CAAS,CAAA,GAC9CS,CAAAA,CAAUL,CAAAA,CAAgB,MAAA,CAAgC,CAACM,CAAAA,CAAKC,CAAAA,IAC9DD,EAAIC,CAAI,CAAA,CAAIN,CAAAA,EAAM,OAAA,CAAU,IAAA,CAAQA,CAAAA,GAAOM,CAAI,CAAA,EAAK,KAAA,CAC7CD,CAAAA,CAAAA,CACN,EAAE,CAAA,CAAA,CAGA,CACL,GAAGJ,CAAAA,CACH,IAAA,CAAMG,CACR,CACF,CAEO,SAASG,CAAAA,EAAc,CAC5B,GAAM,CACJ,OAAA,CAAS,CAAE,SAAA,CAAAC,GAAU,EACrB,IAAA,CAAM,CAAE,KAAA,CAAAC,CAAM,CAChB,CAAA,CAAIC,GAAiB,CACfb,CAAAA,CAAKC,GAAAA,EAAM,CAEjB,OAAOI,QAAAA,CAAS,CACd,QAAA,CAAUC,CAAAA,CAAU,KAAA,CAAM,MAAA,CAAOM,CAAAA,CAAQ,MAAA,CAAOA,CAAK,CAAA,CAAI,MAAS,CAAA,CAClE,OAAA,CAAS,IACPZ,CAAAA,CAAG,GAAA,CAAoB,2BAA4B,CACjD,OAAA,CAAS,CAAE,CAACc,CAAa,EAAGF,EAAQ,kBAAA,CAAmB,MAAA,CAAOA,CAAK,CAAC,CAAA,CAAI,QAAS,CACnF,CAAC,CAAA,CACH,OAAA,CAAS,MAAA,CAAO,QAAA,CAAS,QAAA,GAAaD,GACxC,CAAC,CACH,CAEO,IAAMI,CAAAA,CAAW,IAAM,CAC5B,GAAM,CACJ,OAAA,CAAS,CAAE,YAAA,CAAAC,GAAa,CAC1B,EAAIH,CAAAA,EAAiB,CACfb,CAAAA,CAAKC,GAAAA,EAAM,CAEjB,OAAOI,SAAS,CACd,QAAA,CAAUC,CAAAA,CAAU,KAAA,CAAM,GAAA,CAC1B,OAAA,CAAS,SAAY,CACnB,IAAMW,CAAAA,CAAgB,CACpB,OAAA,CAAS,CACP,CAACH,CAAa,EAAG,QACnB,CACF,CAAA,CAEA,OAAIE,GAAAA,CAAAA,CACe,MAAMhB,CAAAA,CAAG,GAAA,CAAsB,gBAAA,CAAkBiB,CAAa,CAAA,GAC9D,IAAA,EAAQ,GAGV,MAAMjB,CAAAA,CAAG,GAAA,CAAY,uBAAA,CAAyBiB,CAAa,CAAA,EACzD,EACrB,CAAA,CACA,KAAA,CAAO,KACT,CAAC,CACH","file":"chunk-JDCSIJL7.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, PermissionMode } 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 permissionCodes: string[] = typeof code !== 'undefined' ? (typeof code === 'string' ? [code] : code) : []\n\n const { data, ...rest } = useQuery({\n queryKey: queryKeys.permissions.check(permissionCodes, PermissionMode.GAME_SCOPED),\n queryFn: () =>\n ky.post<Record<string, boolean> & { has_all?: boolean }>(\n '/api/usystem/user/checkV2',\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 {\n context: { loginPath },\n game: { appId },\n } = 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 {\n context: { useGameApiV2 },\n } = 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 retry: false,\n })\n}\n"]}
|
package/lib/chunk-KZHYK554.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import {k,l,i}from'./chunk-F2GDEOP4.js';import {useQuery,useQueryClient,useMutation}from'@tanstack/react-query';function f(){let e=k();return useQuery({queryKey:l.roles.all,queryFn:()=>e.get("/api/usystem/role/all")})}function C(e){let i$1=k(),{context:{permissionMode:r}}=i();return useQuery({queryKey:l.roles.detail(e,r),queryFn:()=>i$1.get(`/api/usystem/role/${r==="game_scoped"?"info":"infoV2"}?name=${e}`)})}function q(){let e=k(),i$1=useQueryClient(),{context:{permissionMode:r}}=i();return useMutation({mutationKey:l.roles.create(r),mutationFn:({name:s,permissions:n})=>e.post(`/api/usystem/role/${r==="game_scoped"?"create":"createV2"}`,{name:s,permissions:n}),onSuccess:()=>{i$1.invalidateQueries({queryKey:l.roles.all});}})}function K(){let e=k(),i$1=useQueryClient(),{context:{permissionMode:r}}=i();return useMutation({mutationKey:l.roles.update(r),mutationFn:({id:s,name:n,permissions:u})=>e.post(`/api/usystem/role/${r==="game_scoped"?"update":"updateV2"}`,{id:s,name:n,permissions:u}),onSuccess:()=>{i$1.invalidateQueries({queryKey:l.roles.all});}})}function h(){let e=k(),i=useQueryClient();return useMutation({mutationKey:l.roles.delete,mutationFn:({id:r,name:s})=>e.post("/api/usystem/role/delete",{id:r,name:s}),onSuccess:()=>{i.invalidateQueries({queryKey:l.roles.all});}})}function x(){let e=k(),i$1=useQueryClient(),{context:{permissionMode:r}}=i();return useMutation({mutationKey:l.users.create,mutationFn:s=>{let n=m=>"permissions"in m,u=s;if(n(s)&&r==="direct_game"){let m=s.permissions?.map(y=>({game_group:["*"],game_ids:y.game_ids,role:y.role}));u={...s,permissions:m};}return e.post("/api/usystem/user/create",u)},onSuccess:()=>{i$1.invalidateQueries({queryKey:l.users.all});}})}function E(){let e=k(),i$1=useQueryClient(),r=i(s=>s.context.permissionMode);return useMutation({mutationKey:l.users.update,mutationFn:s=>{let n=m=>"permissions"in m,u=s;if(n(s)&&r==="direct_game"){let m=s.permissions?.map(y=>({game_group:["*"],game_ids:y.game_ids,role:y.role}));u={...s,permissions:m};}return e.post("/api/usystem/user/update",u)},onSuccess:()=>{i$1.invalidateQueries({queryKey:l.users.all});}})}function W(){let e=k(),i=useQueryClient();return useMutation({mutationKey:l.users.delete,mutationFn:({id:r,name:s})=>e.post("/api/usystem/user/delete",{id:r,name:s}),onSuccess:()=>{i.invalidateQueries({queryKey:l.users.all});}})}function _(){let e=k();return useQuery({queryKey:l.permissions.allPermissions,queryFn:()=>e.get("/api/usystem/user/allPermssions")})}function V(){let e=k();return useQuery({queryKey:l.permissions.allPermissionsV2,queryFn:()=>e.get("/api/usystem/user/allPermssionsV2")})}export{f as a,C as b,q as c,K as d,h as e,x as f,E as g,W as h,_ as i,V as j};//# sourceMappingURL=chunk-KZHYK554.js.map
|
|
2
|
-
//# sourceMappingURL=chunk-KZHYK554.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/modules/permission/services/index.ts"],"names":["useAllRoles","ky","useKy","useQuery","queryKeys","useRole","name","permissionMode","useToolkitsStore","useCreateRole","queryClient","useQueryClient","useMutation","permissions","useUpdateRole","id","useRemoveRole","useCreateUser","arg","hasPermissions","obj","requestData","transformedPermissions","item","useUpdateUser","state","useRemoveUser","useAllPermissions","useAllPermissionsV2"],"mappings":"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","file":"chunk-KZHYK554.js","sourcesContent":["import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'\n\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { PermissionMode, 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 ky = useKy()\n const {\n context: { permissionMode },\n } = useToolkitsStore()\n\n return useQuery({\n queryKey: queryKeys.roles.detail(name, permissionMode),\n queryFn: () =>\n ky.get<RoleV1 | RoleV2>(\n `/api/usystem/role/${permissionMode === PermissionMode.GAME_SCOPED ? 'info' : 'infoV2'}?name=${name}`,\n ),\n })\n}\n\nexport function useCreateRole() {\n const ky = useKy()\n const queryClient = useQueryClient()\n const {\n context: { permissionMode },\n } = useToolkitsStore()\n\n return useMutation({\n mutationKey: queryKeys.roles.create(permissionMode),\n mutationFn: ({ name, permissions }: { name: string; permissions: RoleV1['permissions'] | RoleV2['permissions'] }) =>\n ky.post(`/api/usystem/role/${permissionMode === PermissionMode.GAME_SCOPED ? 'create' : 'createV2'}`, {\n name,\n permissions,\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.roles.all })\n },\n })\n}\n\nexport function useUpdateRole() {\n const ky = useKy()\n const queryClient = useQueryClient()\n const {\n context: { permissionMode },\n } = useToolkitsStore()\n\n return useMutation({\n mutationKey: queryKeys.roles.update(permissionMode),\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(`/api/usystem/role/${permissionMode === PermissionMode.GAME_SCOPED ? 'update' : 'updateV2'}`, {\n id,\n name,\n permissions,\n }),\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 {\n context: { permissionMode },\n } = 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) && permissionMode === PermissionMode.DIRECT_GAME) {\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 permissionMode = useToolkitsStore(state => state.context.permissionMode)\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) && permissionMode === PermissionMode.DIRECT_GAME) {\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 +0,0 @@
|
|
|
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-P5T74EXP.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 QueryListRef<Item extends AnyObject = AnyObject, Values = AnyObject, Data = ListResponse<Item>> {\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 = ListResponse<Item>> =\n | QueryListDataAdapter<Item>\n | ((data: Data) => QueryListDataAdapter<Item>)\n\nexport interface QueryListProps<Item extends AnyObject = AnyObject, Values = AnyObject, Data = ListResponse<Item>>\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"]}
|
package/lib/roleList-ATJYWJ6Q.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import {c,b as b$1,e as e$1}from'./chunk-P5T74EXP.js';import {b}from'./chunk-MVG7YFPB.js';import {e}from'./chunk-KZHYK554.js';import {a as a$2}from'./chunk-5QAEUAZE.js';import {a as a$1}from'./chunk-D5YXBSTI.js';import {a}from'./chunk-JDCSIJL7.js';import {k,i}from'./chunk-F2GDEOP4.js';import {UsergroupAddOutlined}from'@ant-design/icons';import {App,Space,Card}from'antd';import {Link}from'react-router-dom';import {jsxs,jsx,Fragment}from'react/jsx-runtime';var O=()=>{let{modal:R,message:g}=App.useApp(),{data:k$1}=a("200005"),{t:e$2}=a$1(),{refetch:s}=c(),L=k(),{context:{permissionMode:T}}=i(),{show:A,modal:C}=b({mode:"create",onSuccess(){s("role-list",{page:1});}}),{show:b$2,modal:w}=b({mode:"update",onSuccess(){s("role-list");}}),I=e(),M=async t=>{let o=await L.get(`/api/usystem/role/${T==="game_scoped"?"info":"infoV2"}?name=${t.name}`);b$2({initialValues:{permissions:o.permissions,name:o.name.replace(/^role_/,"")},extraValues:{id:o?.id}});},S=[{title:e$2("global.name"),key:"name",render(t){return k$1?jsx(Link,{to:`${t.name}`,relative:"path",children:t.name}):jsx(Fragment,{children:t.name})}},{title:"ID",dataIndex:"id",key:"id"},{title:e$2("global.creationTime"),dataIndex:"ctime",key:"ctime"},{title:e$2("global.operation"),width:150,align:"center",render:(t,o)=>jsxs(Space,{size:"small",children:[jsx(a$2,{code:"200003",size:"small",type:"link",onClick:async()=>{M(o);},children:e$2("global.update")}),jsx(a$2,{danger:true,code:"200004",size:"small",type:"link",onClick:()=>{R.confirm({title:e$2("Role.deleteTitle"),content:jsx(b$1,{texts:[o.name],children:e$2("Role.deleteContent",{role:o.name})}),async onOk(){await I.mutateAsync({id:o.id,name:o.name}),s("role-list"),g.success(e$2("Role.deleteSuccessfully"));}});},children:e$2("global.delete")})]})}];return jsxs(Fragment,{children:[jsx(Card,{title:e$2("global.role"),extra:jsx(a$2,{type:"primary",code:"200002",icon:jsx(UsergroupAddOutlined,{}),onClick:()=>{A();},children:e$2("Role.createTitle")}),children:jsx(e$1,{identifier:"role-list",rowKey:"name",columns:S,code:"200001",request:{url:"/api/usystem/role/list",method:"GET"},dataAdapter:t=>({total:t?.Total,items:t?.List})})}),C,w]})},Q=O;export{Q as default};//# sourceMappingURL=roleList-ATJYWJ6Q.js.map
|
|
2
|
-
//# sourceMappingURL=roleList-ATJYWJ6Q.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/modules/permission/pages/roleList/index.tsx"],"names":["RoleList","modal","message","App","viewable","useAuth","t","useTranslation","refetch","useQueryListStore","ky","useKy","permissionMode","useToolkitsStore","showCreateModal","createModal","useRoleModal","showUpdateModal","updateModal","remove","useRemoveRole","handleUpdateBtnClick","record","data","columns","value","jsx","Link","Fragment","_","jsxs","Space","AuthButton_default","Highlight_default","Card","UsergroupAddOutlined","QueryList_default","roleList_default"],"mappings":"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","file":"roleList-ATJYWJ6Q.js","sourcesContent":["import { UsergroupAddOutlined } from '@ant-design/icons'\nimport type { TableColumnsType } from 'antd'\nimport { App, Card, Space } from 'antd'\nimport { Link } from 'react-router-dom'\n\nimport { AuthButton, Highlight, QueryList, useQueryListStore, useToolkitsStore } from '@/components'\nimport { PermissionMode } from '@/constants'\nimport { useKy } from '@/libs'\nimport { useTranslation } from '@/locale'\nimport { useAuth } from '@/services'\n\nimport { useRoleModal } from '../../hooks'\nimport { useRemoveRole } from '../../services'\nimport type { RoleListItem, RoleV1, RoleV2 } from '../../types'\n\nconst RoleList = () => {\n const { modal, message } = App.useApp()\n const { data: viewable } = useAuth('200005')\n const { t } = useTranslation()\n const { refetch } = useQueryListStore()\n const ky = useKy()\n const {\n context: { permissionMode },\n } = useToolkitsStore()\n\n const { show: showCreateModal, modal: createModal } = useRoleModal({\n mode: 'create',\n onSuccess() {\n refetch('role-list', { page: 1 })\n },\n })\n const { show: showUpdateModal, modal: updateModal } = useRoleModal({\n mode: 'update',\n onSuccess() {\n refetch('role-list')\n },\n })\n\n const remove = useRemoveRole()\n\n const handleUpdateBtnClick = async (record: RoleListItem) => {\n const data = await ky.get<RoleV1 | RoleV2>(\n `/api/usystem/role/${permissionMode === PermissionMode.GAME_SCOPED ? 'info' : 'infoV2'}?name=${record.name}`,\n )\n\n showUpdateModal({\n initialValues: {\n permissions: data.permissions,\n name: data.name.replace(/^role_/, ''),\n },\n extraValues: {\n id: data?.id,\n },\n })\n }\n\n const columns: TableColumnsType<RoleListItem> = [\n {\n title: t('global.name'),\n key: 'name',\n render(value: RoleListItem) {\n if (viewable) {\n return (\n <Link to={`${value.name}`} relative=\"path\">\n {value.name}\n </Link>\n )\n } else {\n return <>{value.name}</>\n }\n },\n },\n {\n title: 'ID',\n dataIndex: 'id',\n key: 'id',\n },\n {\n title: t('global.creationTime'),\n dataIndex: 'ctime',\n key: 'ctime',\n },\n {\n title: t('global.operation'),\n width: 150,\n align: 'center',\n render: (_, record) => {\n return (\n <Space size=\"small\">\n <AuthButton\n code=\"200003\"\n size=\"small\"\n type=\"link\"\n onClick={async () => {\n handleUpdateBtnClick(record)\n }}\n >\n {t('global.update')}\n </AuthButton>\n <AuthButton\n danger\n code=\"200004\"\n size=\"small\"\n type=\"link\"\n onClick={() => {\n modal.confirm({\n title: t('Role.deleteTitle'),\n content: (\n <Highlight texts={[record.name]}>{t('Role.deleteContent', { role: record.name })}</Highlight>\n ),\n async onOk() {\n await remove.mutateAsync({\n id: record.id,\n name: record.name,\n })\n\n refetch('role-list')\n\n message.success(t('Role.deleteSuccessfully'))\n },\n })\n }}\n >\n {t('global.delete')}\n </AuthButton>\n </Space>\n )\n },\n },\n ]\n\n return (\n <>\n <Card\n title={t('global.role')}\n extra={\n <AuthButton\n type=\"primary\"\n code=\"200002\"\n icon={<UsergroupAddOutlined />}\n onClick={() => {\n showCreateModal()\n }}\n >\n {t('Role.createTitle')}\n </AuthButton>\n }\n >\n <QueryList<RoleListItem, undefined, { List: RoleListItem[]; Total: number }>\n identifier=\"role-list\"\n rowKey=\"name\"\n columns={columns}\n code=\"200001\"\n request={{\n url: '/api/usystem/role/list',\n method: 'GET',\n }}\n dataAdapter={data => ({\n total: data?.Total,\n items: data?.List,\n })}\n />\n </Card>\n {createModal}\n {updateModal}\n </>\n )\n}\n\nexport default RoleList\n"]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import {b}from'./chunk-FIT6S4UM.js';import {b as b$1}from'./chunk-JDCSIJL7.js';import {k,l,f}from'./chunk-F2GDEOP4.js';import {Editor}from'@monaco-editor/react';import {useQuery}from'@tanstack/react-query';import {App,Form,Card,Input,Switch,InputNumber,Button}from'antd';import {useEffect}from'react';import {useNavigate,useParams}from'react-router-dom';import {jsx,jsxs}from'react/jsx-runtime';var w=()=>{let{message:g}=App.useApp(),[i]=Form.useForm(),l$1=useNavigate(),{mutateAsync:b$2}=b(),r=useParams(),{refetch:_}=b$1(),N=k(),{data:p,isLoading:v}=useQuery({queryKey:l.menus.detail(Number(r.id)),queryFn:()=>N.get(`/api/usystem/menu/info?id=${r.id}`),enabled:!!r.id}),x=async n=>{let{permissions:m,front_route:a,...u}=n;await b$2({...u,permissions:m?JSON.parse(m):void 0,front_route:f+a,id:+r.id}),_(),g.success("\u66F4\u65B0\u6210\u529F",.8,()=>l$1("../..",{relative:"route"}));};return useEffect(()=>{let{permissions:n,front_route:m,...a}=p??{},u=JSON.stringify(n||[],null,2),q=m?.replace(f,"");i.setFieldsValue({...a,permissions:u,front_route:q});},[p,i]),jsx(Card,{title:"\u66F4\u65B0\u83DC\u5355\u9879",loading:v,children:jsxs(Form,{scrollToFirstError:true,form:i,labelCol:{flex:"120px"},initialValues:{is_common:false,is_model:false,order:0},onFinish:x,children:[jsx(Form.Item,{label:"\u83DC\u5355\u9879\u540D\u79F0",name:"category",rules:[{required:true}],children:jsx(Input,{})}),jsx(Form.Item,{label:"\u524D\u7AEF\u8DEF\u7531",name:"front_route",rules:[{required:true}],children:jsx(Input,{prefix:f})}),jsx(Form.Item,{label:"\u6A21\u677F\u540D\u79F0",name:"model_name",rules:[{required:true}],children:jsx(Input,{})}),jsx(Form.Item,{label:"Is Common",name:"is_common",rules:[{required:true}],valuePropName:"checked",children:jsx(Switch,{})}),jsx(Form.Item,{label:"Order",name:"order",children:jsx(InputNumber,{className:"w-full"})}),jsx(Form.Item,{label:"\u63A5\u53E3\u89C4\u5219",name:"permissions",children:jsx(Editor,{theme:"vs-dark",height:"300px",language:"json",options:{minimap:{enabled:false}}})}),jsx(Form.Item,{label:"Schema",name:"scheme",rules:[{required:true}],children:jsx(Editor,{theme:"vs-dark",height:"600px",language:"json",options:{minimap:{enabled:false}}})}),jsx(Form.Item,{label:"Ext",name:"ext",children:jsx(Input.TextArea,{rows:5})}),jsx(Form.Item,{children:jsxs("div",{className:"flex justify-center gap-8",children:[jsx(Button,{type:"primary",htmlType:"submit",children:"\u63D0\u4EA4"}),jsx(Button,{onClick:()=>{l$1("../..",{relative:"path"});},children:"\u53D6\u6D88"})]})})]})})},Q=w;export{Q as default};//# sourceMappingURL=updateMenuItem-4HDRJAY7.js.map
|
|
2
|
-
//# sourceMappingURL=updateMenuItem-4HDRJAY7.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/modules/menu/pages/updateMenuItem/index.tsx"],"names":["EditMenuItem","message","App","form","Form","navigate","useNavigate","mutateAsync","useUpdateMenu","params","useParams","refetch","useMenuList","ky","useKy","data","isLoading","useQuery","queryKeys","onFinish","values","permissions","front_route","rest","FRONTEND_ROUTE_PREFIX","useEffect","permissionsString","frontRoute","jsx","Card","jsxs","Input","Switch","InputNumber","Editor","Button","updateMenuItem_default"],"mappings":"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","file":"updateMenuItem-4HDRJAY7.js","sourcesContent":["import { Editor } from '@monaco-editor/react'\nimport { useQuery } from '@tanstack/react-query'\nimport { App, Button, Card, Form, Input, InputNumber, Switch } from 'antd'\nimport { useEffect } from 'react'\nimport { useNavigate, useParams } from 'react-router-dom'\n\nimport { FRONTEND_ROUTE_PREFIX } from '@/constants'\nimport { useKy } from '@/libs'\nimport { queryKeys } from '@/queryKeys'\nimport { useMenuList } from '@/services'\nimport type { MenuListItem } from '@/types'\n\nimport { useUpdateMenu } from '../../services'\n\ntype FormSchema = Omit<MenuListItem, 'id' | 'permissions'> & { permissions: string }\n\nconst EditMenuItem = () => {\n const { message } = App.useApp()\n const [form] = Form.useForm<FormSchema>()\n const navigate = useNavigate()\n const { mutateAsync } = useUpdateMenu()\n const params = useParams<'id'>()\n const { refetch } = useMenuList()\n const ky = useKy()\n\n const { data, isLoading } = useQuery({\n queryKey: queryKeys.menus.detail(Number(params.id)),\n queryFn: () => ky.get<MenuListItem>(`/api/usystem/menu/info?id=${params.id}`),\n enabled: !!params.id,\n })\n\n const onFinish = async (values: FormSchema) => {\n const { permissions, front_route, ...rest } = values\n\n await mutateAsync({\n ...rest,\n permissions: permissions ? JSON.parse(permissions) : undefined,\n front_route: FRONTEND_ROUTE_PREFIX + front_route,\n id: +params.id!,\n })\n refetch()\n message.success('更新成功', 0.8, () => navigate('../..', { relative: 'route' }))\n }\n\n useEffect(() => {\n const { permissions, front_route, ...rest } = data ?? {}\n const permissionsString = JSON.stringify(permissions || [], null, 2)\n const frontRoute = front_route?.replace(FRONTEND_ROUTE_PREFIX, '')\n form.setFieldsValue({\n ...rest,\n permissions: permissionsString,\n front_route: frontRoute,\n })\n }, [data, form])\n\n return (\n <Card title=\"更新菜单项\" loading={isLoading}>\n <Form\n scrollToFirstError\n form={form}\n labelCol={{ flex: '120px' }}\n initialValues={{ is_common: false, is_model: false, order: 0 }}\n onFinish={onFinish}\n >\n <Form.Item label=\"菜单项名称\" name=\"category\" rules={[{ required: true }]}>\n <Input />\n </Form.Item>\n <Form.Item label=\"前端路由\" name=\"front_route\" rules={[{ required: true }]}>\n <Input prefix={FRONTEND_ROUTE_PREFIX} />\n </Form.Item>\n <Form.Item label=\"模板名称\" name=\"model_name\" rules={[{ required: true }]}>\n <Input />\n </Form.Item>\n <Form.Item label=\"Is Common\" name=\"is_common\" rules={[{ required: true }]} valuePropName=\"checked\">\n <Switch />\n </Form.Item>\n <Form.Item label=\"Order\" name=\"order\">\n <InputNumber className=\"w-full\" />\n </Form.Item>\n <Form.Item label=\"接口规则\" name=\"permissions\">\n <Editor\n theme=\"vs-dark\"\n height=\"300px\"\n language=\"json\"\n options={{\n minimap: {\n enabled: false,\n },\n }}\n />\n </Form.Item>\n <Form.Item label=\"Schema\" name=\"scheme\" rules={[{ required: true }]}>\n <Editor\n theme=\"vs-dark\"\n height=\"600px\"\n language=\"json\"\n options={{\n minimap: {\n enabled: false,\n },\n }}\n />\n </Form.Item>\n <Form.Item label=\"Ext\" name=\"ext\">\n <Input.TextArea rows={5} />\n </Form.Item>\n <Form.Item>\n <div className=\"flex justify-center gap-8\">\n <Button type=\"primary\" htmlType=\"submit\">\n 提交\n </Button>\n <Button\n onClick={() => {\n navigate('../..', { relative: 'path' })\n }}\n >\n 取消\n </Button>\n </div>\n </Form.Item>\n </Form>\n </Card>\n )\n}\n\nexport default EditMenuItem\n"]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import {a as a$2}from'./chunk-24U2EF5M.js';import'./chunk-KZHYK554.js';import {a as a$3}from'./chunk-5QAEUAZE.js';import {a}from'./chunk-D5YXBSTI.js';import {c,a as a$1}from'./chunk-JDCSIJL7.js';import {i,k,l}from'./chunk-F2GDEOP4.js';import {useQuery}from'@tanstack/react-query';import {Tag,Breadcrumb,Card,Descriptions,Table}from'antd';import {useParams,Link}from'react-router-dom';import {jsx,jsxs,Fragment}from'react/jsx-runtime';var P=()=>{let i$1=useParams(),{t:o}=a(),{context:{useGameApiV2:D,permissionMode:T}}=i(),h=T==="group_based",L=k(),{data:s,isLoading:x,refetch:A}=useQuery({queryKey:l.users.detail(i$1.id||""),queryFn:()=>L.get(`/api/usystem/user/info?id=${i$1.id}`),enabled:!!i$1.id}),{data:B}=c(),{data:C}=a$1("200005"),{show:G,modal:S}=a$2({mode:"update",onSuccess(){A();}}),U=[h&&{key:"group",title:o("global.projectGroup"),dataIndex:"game_group",render(r){return r.map(t=>jsx(Tag,{children:t==="*"?"\u901A\u7528":t},t))}},{key:"game",title:o("global.game"),dataIndex:"game_ids",render(r){return r.map(t=>{let K=B?.find(n=>String(D?n.game_id:n.id)===t);return jsx(Tag,{children:K?.name??(t==="*"?"\u901A\u7528":t)},t)})}},{key:"role",title:o("global.role"),dataIndex:"role",render(r){return C?jsx(Link,{to:`../../role/${r}`,relative:"path",children:r}):r}}].filter(Boolean);return jsxs(Fragment,{children:[jsx(Breadcrumb,{className:"mb-6",items:[{key:"1",title:jsx(Link,{to:"..",relative:"path",children:o("global.user")})},{key:"2",title:"\u7528\u6237\u8BE6\u60C5"}]}),jsx(Card,{title:"\u7528\u6237\u8BE6\u60C5",loading:x,extra:jsx(a$3,{code:"100003",onClick:()=>{G({initialValues:{name:s?.name,permissions:s?.permissions},extraValues:{id:s.id}});},children:o("global.update")}),children:jsxs(Descriptions,{bordered:true,column:1,children:[jsx(Descriptions.Item,{label:o("global.name"),children:s?.name}),jsx(Descriptions.Item,{label:"ID",children:s?.id}),jsx(Descriptions.Item,{label:o("global.role"),children:jsx(Table,{rowKey:"role",columns:U,dataSource:s?.permissions,pagination:false})})]})}),S]})},z=P;export{z as default};//# sourceMappingURL=userDetail-B5H4A4X2.js.map
|
|
2
|
-
//# sourceMappingURL=userDetail-B5H4A4X2.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/modules/permission/pages/userDetail/index.tsx"],"names":["UserDetail","params","useParams","t","useTranslation","useGameApiV2","permissionMode","useToolkitsStore","isGroupBased","ky","useKy","data","isLoading","refetch","useQuery","queryKeys","games","useGames","roleViewable","useAuth","show","modal","useUserModal","columns","value","item","jsx","Tag","matchedGame","game","Link","jsxs","Fragment","Breadcrumb","Card","AuthButton_default","Descriptions","Table","userDetail_default"],"mappings":"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","file":"userDetail-B5H4A4X2.js","sourcesContent":["import { useQuery } from '@tanstack/react-query'\nimport type { TableColumnsType } from 'antd'\nimport { Breadcrumb, Card, Descriptions, Table, Tag } from 'antd'\nimport { Link, useParams } from 'react-router-dom'\n\nimport { AuthButton, useToolkitsStore } from '@/components'\nimport { PermissionMode, WILDCARD } from '@/constants'\nimport { useKy } from '@/libs'\nimport { useTranslation } from '@/locale'\nimport { queryKeys } from '@/queryKeys'\nimport { useAuth, useGames } from '@/services'\n\nimport { useUserModal } from '../../hooks'\nimport type { UserListItem } from '../../types'\n\nconst UserDetail = () => {\n const params = useParams<'id'>()\n const { t } = useTranslation()\n const {\n context: { useGameApiV2, permissionMode },\n } = useToolkitsStore()\n const isGroupBased = permissionMode === PermissionMode.GROUP_BASED\n const ky = useKy()\n\n const { data, isLoading, refetch } = useQuery({\n queryKey: queryKeys.users.detail(params.id || ''),\n queryFn: () => ky.get<UserListItem>(`/api/usystem/user/info?id=${params.id}`),\n enabled: !!params.id,\n })\n const { data: games } = useGames()\n const { data: roleViewable } = useAuth('200005')\n\n const { show, modal } = useUserModal({\n mode: 'update',\n onSuccess() {\n refetch()\n },\n })\n\n const columns = [\n isGroupBased && {\n key: 'group',\n title: t('global.projectGroup'),\n dataIndex: 'game_group',\n render(value: string[]) {\n return value.map(item => {\n return <Tag key={item}>{item === WILDCARD ? '通用' : item}</Tag>\n })\n },\n },\n {\n key: 'game',\n title: t('global.game'),\n dataIndex: 'game_ids',\n render(value: string[]) {\n return value.map(item => {\n const matchedGame = games?.find(game => String(useGameApiV2 ? game.game_id : game.id) === item)\n return <Tag key={item}>{matchedGame?.name ?? (item === WILDCARD ? '通用' : item)}</Tag>\n })\n },\n },\n {\n key: 'role',\n title: t('global.role'),\n dataIndex: 'role',\n render(value: string) {\n return roleViewable ? (\n <Link to={`../../role/${value}`} relative=\"path\">\n {value}\n </Link>\n ) : (\n value\n )\n },\n },\n ].filter(Boolean) as TableColumnsType\n\n return (\n <>\n <Breadcrumb\n className=\"mb-6\"\n items={[\n {\n key: '1',\n title: (\n <Link to=\"..\" relative=\"path\">\n {t('global.user')}\n </Link>\n ),\n },\n {\n key: '2',\n title: '用户详情',\n },\n ]}\n />\n <Card\n title=\"用户详情\"\n loading={isLoading}\n extra={\n <AuthButton\n code=\"100003\"\n onClick={() => {\n show({\n initialValues: {\n name: data?.name,\n permissions: data?.permissions,\n },\n extraValues: {\n id: data!.id,\n },\n })\n }}\n >\n {t('global.update')}\n </AuthButton>\n }\n >\n <Descriptions bordered column={1}>\n <Descriptions.Item label={t('global.name')}>{data?.name}</Descriptions.Item>\n <Descriptions.Item label=\"ID\">{data?.id}</Descriptions.Item>\n <Descriptions.Item label={t('global.role')}>\n <Table rowKey=\"role\" columns={columns} dataSource={data?.permissions} pagination={false} />\n </Descriptions.Item>\n </Descriptions>\n </Card>\n {modal}\n </>\n )\n}\n\nexport default UserDetail\n"]}
|