react-toolkits 2.26.0 → 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.
Files changed (101) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/lib/chunk-56C2GQCB.js +2 -0
  3. package/lib/chunk-56C2GQCB.js.map +1 -0
  4. package/lib/chunk-6SMI25Y3.js +19 -0
  5. package/lib/chunk-6SMI25Y3.js.map +1 -0
  6. package/lib/{chunk-D5YXBSTI.js → chunk-7XR7V6IS.js} +2 -2
  7. package/lib/{chunk-D5YXBSTI.js.map → chunk-7XR7V6IS.js.map} +1 -1
  8. package/lib/chunk-AFURMXX2.js +2 -0
  9. package/lib/chunk-AFURMXX2.js.map +1 -0
  10. package/lib/{chunk-MVG7YFPB.js → chunk-COONHXCY.js} +2 -2
  11. package/lib/{chunk-MVG7YFPB.js.map → chunk-COONHXCY.js.map} +1 -1
  12. package/lib/chunk-DBYHBFI6.js +206 -0
  13. package/lib/chunk-DBYHBFI6.js.map +1 -0
  14. package/lib/chunk-JJR5NJTU.js +75 -0
  15. package/lib/chunk-JJR5NJTU.js.map +1 -0
  16. package/lib/chunk-LUVKLLW7.js +2 -0
  17. package/lib/chunk-LUVKLLW7.js.map +1 -0
  18. package/lib/chunk-M2C4DTSM.js +46 -0
  19. package/lib/chunk-M2C4DTSM.js.map +1 -0
  20. package/lib/{chunk-5QAEUAZE.js → chunk-NEOHLVWG.js} +2 -2
  21. package/lib/{chunk-5QAEUAZE.js.map → chunk-NEOHLVWG.js.map} +1 -1
  22. package/lib/chunk-O7INKFFW.js +161 -0
  23. package/lib/chunk-O7INKFFW.js.map +1 -0
  24. package/lib/chunk-Q6MAXVON.js +2 -0
  25. package/lib/chunk-Q6MAXVON.js.map +1 -0
  26. package/lib/chunk-QEUTBIBK.js +125 -0
  27. package/lib/chunk-QEUTBIBK.js.map +1 -0
  28. package/lib/chunk-R72QFX5M.js +495 -0
  29. package/lib/chunk-R72QFX5M.js.map +1 -0
  30. package/lib/chunk-TYMPX257.js +268 -0
  31. package/lib/chunk-TYMPX257.js.map +1 -0
  32. package/lib/chunk-UICHZXQP.js +3 -0
  33. package/lib/chunk-UICHZXQP.js.map +1 -0
  34. package/lib/chunk-WFRMJYD3.js +2 -0
  35. package/lib/chunk-WFRMJYD3.js.map +1 -0
  36. package/lib/chunk-Z7GW3RVV.js +658 -0
  37. package/lib/chunk-Z7GW3RVV.js.map +1 -0
  38. package/lib/createMenuItem-7R7QR4R6.js +83 -0
  39. package/lib/createMenuItem-7R7QR4R6.js.map +1 -0
  40. package/lib/{createMenuItem-Q5TJGFKZ.js → createMenuItem-A3ES4CDV.js} +2 -2
  41. package/lib/{createMenuItem-Q5TJGFKZ.js.map → createMenuItem-A3ES4CDV.js.map} +1 -1
  42. package/lib/index.css +1 -1
  43. package/lib/index.d.ts +26 -11
  44. package/lib/index.js +1446 -2
  45. package/lib/index.js.map +1 -1
  46. package/lib/menuItemList-BUUJMOU7.js +129 -0
  47. package/lib/menuItemList-BUUJMOU7.js.map +1 -0
  48. package/lib/{menuItemList-2QZXJVWZ.js → menuItemList-YFQB4BCS.js} +2 -2
  49. package/lib/{menuItemList-2QZXJVWZ.js.map → menuItemList-YFQB4BCS.js.map} +1 -1
  50. package/lib/{roleDetail-ODJVDVB4.js → roleDetail-H2X34J57.js} +2 -2
  51. package/lib/{roleDetail-ODJVDVB4.js.map → roleDetail-H2X34J57.js.map} +1 -1
  52. package/lib/roleDetail-IP654MAU.js +72 -0
  53. package/lib/roleDetail-IP654MAU.js.map +1 -0
  54. package/lib/roleList-QMAYO4MG.js +161 -0
  55. package/lib/roleList-QMAYO4MG.js.map +1 -0
  56. package/lib/roleList-UCMHN5NJ.js +2 -0
  57. package/lib/roleList-UCMHN5NJ.js.map +1 -0
  58. package/lib/updateMenuItem-NUYWRAV5.js +2 -0
  59. package/lib/updateMenuItem-NUYWRAV5.js.map +1 -0
  60. package/lib/updateMenuItem-SZVEK3TL.js +106 -0
  61. package/lib/updateMenuItem-SZVEK3TL.js.map +1 -0
  62. package/lib/userDetail-6XMOY3I4.js +2 -0
  63. package/lib/userDetail-6XMOY3I4.js.map +1 -0
  64. package/lib/userDetail-MPTJGRMY.js +118 -0
  65. package/lib/userDetail-MPTJGRMY.js.map +1 -0
  66. package/lib/{userList-QHQHRPSV.js → userList-3WABI7V4.js} +2 -2
  67. package/lib/{userList-QHQHRPSV.js.map → userList-3WABI7V4.js.map} +1 -1
  68. package/lib/userList-KXYDP7V5.js +166 -0
  69. package/lib/userList-KXYDP7V5.js.map +1 -0
  70. package/locale/context.js +7 -1
  71. package/locale/context.js.map +1 -1
  72. package/locale/en_GB.js +94 -1
  73. package/locale/en_GB.js.map +1 -1
  74. package/locale/hooks.js +20 -1
  75. package/locale/hooks.js.map +1 -1
  76. package/locale/index.js +2 -1
  77. package/locale/ja_JP.js +94 -1
  78. package/locale/ja_JP.js.map +1 -1
  79. package/locale/ko_KR.js +94 -1
  80. package/locale/ko_KR.js.map +1 -1
  81. package/locale/zh_CN.js +94 -1
  82. package/locale/zh_CN.js.map +1 -1
  83. package/package.json +22 -22
  84. package/lib/chunk-24U2EF5M.js +0 -2
  85. package/lib/chunk-24U2EF5M.js.map +0 -1
  86. package/lib/chunk-F2GDEOP4.js +0 -3
  87. package/lib/chunk-F2GDEOP4.js.map +0 -1
  88. package/lib/chunk-FIT6S4UM.js +0 -2
  89. package/lib/chunk-FIT6S4UM.js.map +0 -1
  90. package/lib/chunk-IKGXKB6T.js +0 -2
  91. package/lib/chunk-IKGXKB6T.js.map +0 -1
  92. package/lib/chunk-JDCSIJL7.js +0 -2
  93. package/lib/chunk-JDCSIJL7.js.map +0 -1
  94. package/lib/chunk-KZHYK554.js +0 -2
  95. package/lib/chunk-KZHYK554.js.map +0 -1
  96. package/lib/roleList-MQOFJ3LH.js +0 -2
  97. package/lib/roleList-MQOFJ3LH.js.map +0 -1
  98. package/lib/updateMenuItem-4HDRJAY7.js +0 -2
  99. package/lib/updateMenuItem-4HDRJAY7.js.map +0 -1
  100. package/lib/userDetail-B5H4A4X2.js +0 -2
  101. package/lib/userDetail-B5H4A4X2.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # react-toolkits
2
2
 
3
+ ## 2.27.0
4
+
5
+ ### Minor Changes
6
+
7
+ - c283168: chore: update dependencies and refactor components for improved functionality
8
+
9
+ ## 2.26.1
10
+
11
+ ### Patch Changes
12
+
13
+ - 68f200e: chore: update antd to version 6.0.0 and upgrade React dependencies
14
+
3
15
  ## 2.26.0
4
16
 
5
17
  ### Minor Changes
@@ -0,0 +1,2 @@
1
+ import {a as a$1,f,g}from'./chunk-AFURMXX2.js';import {d}from'./chunk-NEOHLVWG.js';import {a}from'./chunk-7XR7V6IS.js';import {i,l,n}from'./chunk-UICHZXQP.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,k=(m,a)=>{last(m)==="*"?a?.(["*"]):first(m)==="*"?a?.(m.slice(1)):a?.(m);},Z=m=>{let{onChange:a,...g}=m,o=l(),{data:u,isLoading:c}=useQuery({queryKey:n.enums.gameGroups,queryFn:()=>o("/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=>k(i,a)})},R=m=>{let{groups:a,onChange:g,...o}=m,u=l(),{context:{permissionMode:c}}=i(),C=c==="group_based",i$1=c==="direct_game",{data:d,isLoading:G}=useQuery({queryKey:n.enums.gameIds(i$1?[]:a??[]),queryFn:()=>u(`/api/enum/game_group/get_game_ids${i$1?"":`?game_groups=${a?.join(",")}`}`).then(s=>s?.list),enabled:i$1||C&&!!a?.length}),I=d?.map(s=>({label:s.name,value:s.id}));return jsx(Select,{...o,allowClear:true,showSearch:true,optionFilterProp:"label",mode:"tags",loading:G,options:I,onChange:s=>k(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:I}}=i(),s=I==="group_based",S=I==="game_scoped",B=S?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:y,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(R,{groups:h})})}}):jsx(Form.Item,{name:[r.name,"game_ids"],rules:[{required:true,message:"\u8BF7\u9009\u62E9\u6E38\u620F"}],children:jsx(R,{})})}),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,O){return (l("permissions")?.filter((U,K)=>!!U&&K!==r.name)??[]).some(U=>U.role===O)?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:()=>y(),children:o("global.add")})})]})})]});return d({title:G,width:S?"600px":"1000px",formProps:{autoComplete:"off",labelCol:{flex:"80px"}},content:B,onConfirm:async(t,y)=>{if(d$1){let b=S?{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=S?{id:y.id,name:t.name,roles:t.roles}:{id:y.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-56C2GQCB.js.map
2
+ //# sourceMappingURL=chunk-56C2GQCB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/modules/permission/hooks/user-hooks.tsx"],"names":["Text","Typography","handleWildcardSelection","value","onChange","last","first","GroupSelect","props","rest","get","useHttpGet","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-56C2GQCB.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 { useHttpGet } 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 get = useHttpGet()\n\n const { data, isLoading } = useQuery({\n queryKey: queryKeys.enums.gameGroups,\n queryFn: () => 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 get = useHttpGet()\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 get<{\n list: {\n id: string\n name: string\n }[]\n }>(`/api/enum/game_group/get_game_ids${isDirectGame ? '' : `?game_groups=${groups?.join(',')}`}`).then(\n response => response?.list,\n ),\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"]}
@@ -0,0 +1,19 @@
1
+ import { __name, useToolkitsStore } from './chunk-Z7GW3RVV.js';
2
+ import { template, has, get } from 'lodash-es';
3
+ import { useMemo } from 'react';
4
+
5
+ function useTranslation() {
6
+ const {
7
+ context: { locale }
8
+ } = useToolkitsStore();
9
+ const t = useMemo(
10
+ () => (key, data) => has(locale, key) ? template(get(locale, key))(data) : key,
11
+ [locale]
12
+ );
13
+ return { t };
14
+ }
15
+ __name(useTranslation, "useTranslation");
16
+
17
+ export { useTranslation };
18
+ //# sourceMappingURL=chunk-6SMI25Y3.js.map
19
+ //# sourceMappingURL=chunk-6SMI25Y3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/locale/hooks.ts"],"names":[],"mappings":";;;;AAmBO,SAAS,cAAA,GAAiB;AAC/B,EAAA,MAAM;AAAA,IACJ,OAAA,EAAS,EAAE,MAAA;AAAO,MAChB,gBAAA,EAAiB;AAErB,EAAA,MAAM,CAAA,GAAI,OAAA;AAAA,IACR,MAAM,CAAC,GAAA,EAAoB,IAAA,KACzB,IAAI,MAAA,EAAQ,GAAG,CAAA,GAAI,QAAA,CAAS,IAAI,MAAA,EAAQ,GAAa,CAAC,CAAA,CAAE,IAAI,CAAA,GAAI,GAAA;AAAA,IAClE,CAAC,MAAM;AAAA,GACT;AAEA,EAAA,OAAO,EAAE,CAAA,EAAE;AACb;AAZgB,MAAA,CAAA,cAAA,EAAA,gBAAA,CAAA","file":"chunk-6SMI25Y3.js","sourcesContent":["import { get, has, template } from 'lodash-es'\nimport { useMemo } from 'react'\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport type { Locale } from './index'\n\ntype Join<K, P> = K extends string | number\n ? P extends string | number\n ? `${K}${'' extends P ? '' : '.'}${P}`\n : never\n : never\n\ntype Paths<T, D extends number = 10> = [D] extends [never]\n ? never\n : T extends object\n ? {\n [K in keyof T]-?: K extends string | number ? `${K}` | Join<K, Paths<T[K]>> : never\n }[keyof T]\n : ''\n\nexport function useTranslation() {\n const {\n context: { locale },\n } = useToolkitsStore()\n\n const t = useMemo(\n () => (key: Paths<Locale>, data?: Record<string, unknown>) =>\n has(locale, key) ? template(get(locale, key as string))(data) : key,\n [locale],\n )\n\n return { t }\n}\n"]}
@@ -1,2 +1,2 @@
1
- import {i}from'./chunk-F2GDEOP4.js';import {template,has,get}from'lodash-es';import {useMemo}from'react';function l(){let{context:{locale:e}}=i();return {t:useMemo(()=>(t,r)=>has(e,t)?template(get(e,t))(r):t,[e])}}export{l as a};//# sourceMappingURL=chunk-D5YXBSTI.js.map
2
- //# sourceMappingURL=chunk-D5YXBSTI.js.map
1
+ import {i}from'./chunk-UICHZXQP.js';import {template,has,get}from'lodash-es';import {useMemo}from'react';function l(){let{context:{locale:e}}=i();return {t:useMemo(()=>(t,r)=>has(e,t)?template(get(e,t))(r):t,[e])}}export{l as a};//# sourceMappingURL=chunk-7XR7V6IS.js.map
2
+ //# sourceMappingURL=chunk-7XR7V6IS.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/locale/hooks.ts"],"names":["useTranslation","locale","useToolkitsStore","useMemo","key","data","has","template","get"],"mappings":"yGAmBO,SAASA,CAAAA,EAAiB,CAC/B,GAAM,CACJ,OAAA,CAAS,CAAE,MAAA,CAAAC,CAAO,CACpB,CAAA,CAAIC,CAAAA,EAAiB,CAQrB,OAAO,CAAE,CAAA,CANCC,QACR,IAAM,CAACC,EAAoBC,CAAAA,GACzBC,GAAAA,CAAIL,CAAAA,CAAQG,CAAG,CAAA,CAAIG,QAAAA,CAASC,IAAIP,CAAAA,CAAQG,CAAa,CAAC,CAAA,CAAEC,CAAI,CAAA,CAAID,EAClE,CAACH,CAAM,CACT,CAEW,CACb","file":"chunk-D5YXBSTI.js","sourcesContent":["import { get, has, template } from 'lodash-es'\nimport { useMemo } from 'react'\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport type { Locale } from './index'\n\ntype Join<K, P> = K extends string | number\n ? P extends string | number\n ? `${K}${'' extends P ? '' : '.'}${P}`\n : never\n : never\n\ntype Paths<T, D extends number = 10> = [D] extends [never]\n ? never\n : T extends object\n ? {\n [K in keyof T]-?: K extends string | number ? `${K}` | Join<K, Paths<T[K]>> : never\n }[keyof T]\n : ''\n\nexport function useTranslation() {\n const {\n context: { locale },\n } = useToolkitsStore()\n\n const t = useMemo(\n () => (key: Paths<Locale>, data?: Record<string, unknown>) =>\n has(locale, key) ? template(get(locale, key as string))(data) : key,\n [locale],\n )\n\n return { t }\n}\n"]}
1
+ {"version":3,"sources":["../src/locale/hooks.ts"],"names":["useTranslation","locale","useToolkitsStore","useMemo","key","data","has","template","get"],"mappings":"yGAmBO,SAASA,CAAAA,EAAiB,CAC/B,GAAM,CACJ,OAAA,CAAS,CAAE,MAAA,CAAAC,CAAO,CACpB,CAAA,CAAIC,CAAAA,EAAiB,CAQrB,OAAO,CAAE,CAAA,CANCC,QACR,IAAM,CAACC,EAAoBC,CAAAA,GACzBC,GAAAA,CAAIL,CAAAA,CAAQG,CAAG,CAAA,CAAIG,QAAAA,CAASC,IAAIP,CAAAA,CAAQG,CAAa,CAAC,CAAA,CAAEC,CAAI,CAAA,CAAID,EAClE,CAACH,CAAM,CACT,CAEW,CACb","file":"chunk-7XR7V6IS.js","sourcesContent":["import { get, has, template } from 'lodash-es'\nimport { useMemo } from 'react'\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport type { Locale } from './index'\n\ntype Join<K, P> = K extends string | number\n ? P extends string | number\n ? `${K}${'' extends P ? '' : '.'}${P}`\n : never\n : never\n\ntype Paths<T, D extends number = 10> = [D] extends [never]\n ? never\n : T extends object\n ? {\n [K in keyof T]-?: K extends string | number ? `${K}` | Join<K, Paths<T[K]>> : never\n }[keyof T]\n : ''\n\nexport function useTranslation() {\n const {\n context: { locale },\n } = useToolkitsStore()\n\n const t = useMemo(\n () => (key: Paths<Locale>, data?: Record<string, unknown>) =>\n has(locale, key) ? template(get(locale, key as string))(data) : key,\n [locale],\n )\n\n return { t }\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import {l,n,i,m}from'./chunk-UICHZXQP.js';import {useQuery,useQueryClient,useMutation}from'@tanstack/react-query';function C(){let e=l();return useQuery({queryKey:n.roles.all,queryFn:()=>e("/api/usystem/role/all")})}function q(e){let i$1=l(),{context:{permissionMode:r}}=i();return useQuery({queryKey:n.roles.detail(e,r),queryFn:()=>i$1(`/api/usystem/role/${r==="game_scoped"?"info":"infoV2"}?name=${e}`)})}function K(){let e=m(),i$1=useQueryClient(),{context:{permissionMode:r}}=i();return useMutation({mutationKey:n.roles.create(r),mutationFn:({name:s,permissions:o})=>e(`/api/usystem/role/${r==="game_scoped"?"create":"createV2"}`,{name:s,permissions:o}),onSuccess:()=>{i$1.invalidateQueries({queryKey:n.roles.all});}})}function h(){let e=m(),i$1=useQueryClient(),{context:{permissionMode:r}}=i();return useMutation({mutationKey:n.roles.update(r),mutationFn:({id:s,name:o,permissions:n})=>e(`/api/usystem/role/${r==="game_scoped"?"update":"updateV2"}`,{id:s,name:o,permissions:n}),onSuccess:()=>{i$1.invalidateQueries({queryKey:n.roles.all});}})}function x(){let e=m(),i=useQueryClient();return useMutation({mutationKey:n.roles.delete,mutationFn:({id:r,name:s})=>e("/api/usystem/role/delete",{id:r,name:s}),onSuccess:()=>{i.invalidateQueries({queryKey:n.roles.all});}})}function E(){let e=m(),i$1=useQueryClient(),{context:{permissionMode:r}}=i();return useMutation({mutationKey:n.users.create,mutationFn:s=>{let o=u=>"permissions"in u,n=s;if(o(s)&&r==="direct_game"){let u=s.permissions?.map(y=>({game_group:["*"],game_ids:y.game_ids,role:y.role}));n={...s,permissions:u};}return e("/api/usystem/user/create",n)},onSuccess:()=>{i$1.invalidateQueries({queryKey:n.users.all});}})}function W(){let e=m(),i$1=useQueryClient(),r=i(s=>s.context.permissionMode);return useMutation({mutationKey:n.users.update,mutationFn:s=>{let o=u=>"permissions"in u,n=s;if(o(s)&&r==="direct_game"){let u=s.permissions?.map(y=>({game_group:["*"],game_ids:y.game_ids,role:y.role}));n={...s,permissions:u};}return e("/api/usystem/user/update",n)},onSuccess:()=>{i$1.invalidateQueries({queryKey:n.users.all});}})}function _(){let e=m(),i=useQueryClient();return useMutation({mutationKey:n.users.delete,mutationFn:({id:r,name:s})=>e("/api/usystem/user/delete",{id:r,name:s}),onSuccess:()=>{i.invalidateQueries({queryKey:n.users.all});}})}function V(){let e=l();return useQuery({queryKey:n.permissions.allPermissions,queryFn:()=>e("/api/usystem/user/allPermssions")})}function M(){let e=l();return useQuery({queryKey:n.permissions.allPermissionsV2,queryFn:()=>e("/api/usystem/user/allPermssionsV2")})}export{C as a,q as b,K as c,h as d,x as e,E as f,W as g,_ as h,V as i,M as j};//# sourceMappingURL=chunk-AFURMXX2.js.map
2
+ //# sourceMappingURL=chunk-AFURMXX2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/modules/permission/services/index.ts"],"names":["useAllRoles","get","useHttpGet","useQuery","queryKeys","useRole","name","permissionMode","useToolkitsStore","useCreateRole","post","useHttpPost","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-AFURMXX2.js","sourcesContent":["import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'\n\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { PermissionMode, WILDCARD } from '@/constants'\nimport { useHttpGet, useHttpPost } from '@/libs'\nimport { queryKeys } from '@/queryKeys'\n\nimport type { PermissionEnumItem, RoleEnumItem, RoleV1, RoleV2 } from '../types'\n\nexport function useAllRoles() {\n const get = useHttpGet()\n return useQuery({\n queryKey: queryKeys.roles.all,\n queryFn: () => get<RoleEnumItem[]>('/api/usystem/role/all'),\n })\n}\n\nexport function useRole(name: string) {\n const get = useHttpGet()\n const {\n context: { permissionMode },\n } = useToolkitsStore()\n\n return useQuery({\n queryKey: queryKeys.roles.detail(name, permissionMode),\n queryFn: () =>\n get<RoleV1 | RoleV2>(\n `/api/usystem/role/${permissionMode === PermissionMode.GAME_SCOPED ? 'info' : 'infoV2'}?name=${name}`,\n ),\n })\n}\n\nexport function useCreateRole() {\n const post = useHttpPost()\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 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 post = useHttpPost()\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 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 post = useHttpPost()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationKey: queryKeys.roles.delete,\n mutationFn: ({ id, name }: { id: number; name: string }) => 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 post = useHttpPost()\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 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 post = useHttpPost()\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 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 post = useHttpPost()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationKey: queryKeys.users.delete,\n mutationFn: ({ id, name }: { id: string; name: string }) => 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 get = useHttpGet()\n\n return useQuery({\n queryKey: queryKeys.permissions.allPermissions,\n queryFn: () => get<PermissionEnumItem[]>('/api/usystem/user/allPermssions'),\n })\n}\n\nexport function useAllPermissionsV2() {\n const get = useHttpGet()\n\n return useQuery({\n queryKey: queryKeys.permissions.allPermissionsV2,\n queryFn: () => get<PermissionEnumItem[]>('/api/usystem/user/allPermssionsV2'),\n })\n}\n"]}
@@ -1,2 +1,2 @@
1
- import {c,d,i as i$1,j}from'./chunk-KZHYK554.js';import {d as d$1}from'./chunk-5QAEUAZE.js';import {a}from'./chunk-D5YXBSTI.js';import {c as c$1}from'./chunk-JDCSIJL7.js';import {i}from'./chunk-F2GDEOP4.js';import {Typography,Select,App,Form,Input,Skeleton,Divider,Card,Empty,Button,Space,Checkbox,Row,Col,Collapse}from'antd';import {useState,useEffect,useTransition,useCallback}from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';var oe=m=>{let{permissions:r,readonly:t,expand:n,value:l,onChange:f}=m,[c,g]=useState([]),[P,R]=useState({}),[a$1,d]=useState(l??[]),{t:y}=a(),[,C]=useTransition(),x=useCallback(e=>{g(e);},[]),p=(e,s)=>{let o=[];return e?o=[...new Set(a$1.concat(s))]:(o=a$1.slice(),s.forEach(u=>{let b=o.findIndex(X=>X===u);b>-1&&o.splice(b,1);})),o},L=(e,s)=>{let o=p(e.target.checked,s);d(o),f?.(o);};useEffect(()=>{d(l??[]);},[l]),useEffect(()=>{n&&C(()=>{g((r??[]).map(({category:e})=>e));});},[n,r]),useEffect(()=>{let e=(r??[]).reduce((s,o)=>(s[o.category]=o.permissions.every(u=>a$1?.includes(u.value)),s),{});R(e);},[a$1,r]);let I=(r??[]).map(e=>({key:e.category,label:e.category,extra:!t&&jsx(Checkbox,{checked:P[e.category],onChange:s=>{L(s,e.permissions?.map(o=>o.value));},children:y("global.selectAll")}),children:jsx(Checkbox.Group,{className:"w-full",value:a$1,disabled:t,children:jsx(Row,{gutter:[10,10],className:"w-full",children:e.permissions?.map(s=>jsx(Col,{span:6,children:jsx(Checkbox,{value:s.value,onChange:o=>{L(o,[s.value]);},children:s.label})},s.value))})})}));return jsx(Collapse,{className:"w-full",collapsible:"header",activeKey:c,items:I,onChange:x})},k=oe;var{Text:w}=Typography,{Option:le}=Select,pe=m=>{let{expand:r=true,value:t,readonly:n,onChange:l}=m,{data:f,isLoading:c,error:g}=j(),{data:P,isLoading:R}=c$1(),[a$1,d]=useState([]),y=f?.filter(e=>e.is_common),C=f?.filter(e=>!e.is_common),x=c||R,{t:p}=a();if(useEffect(()=>{let e=[];Object.keys(t??{}).forEach(s=>{s!=="global"&&e.push({gameId:s,permissions:t?.[s]??[]});}),d(e);},[t]),g)return jsx("div",{className:"flex justify-center",children:jsx(w,{type:"danger",children:p("PermissionList.failedDescription")})});let L=()=>{d(e=>[...e,{gameId:"",permissions:[]}]);},I=e=>{d(s=>s.filter((o,u)=>u!==e));};return jsxs("div",{className:"flex flex-col w-full",children:[jsx("div",{className:"mb-12",children:jsx(Divider,{dashed:true,children:p("PermissionList.baseSectionTitle")})}),jsx(Skeleton,{active:true,loading:x,children:jsx(k,{value:t?.global,readonly:n,permissions:y,expand:r,onChange:e=>{l?.({...t,global:e});}})}),jsx("div",{className:"my-12",children:jsx(Divider,{dashed:true,children:p("PermissionList.gameSectionTitle")})}),a$1.map((e,s)=>jsx(Card,{title:jsxs(Space,{children:[jsx(w,{children:p("global.game")}),n?jsx(w,{children:P?.find(o=>String(o.id)===e.gameId)?.name}):jsx(Select,{disabled:n,value:a$1[s].gameId||void 0,className:"w-40",placeholder:p("PermissionList.gameSelectPlaceholder"),onChange:o=>{d(u=>{let b=u.slice();return b[s].gameId=o,b});},children:P?.map(o=>jsx(le,{value:o.id,disabled:a$1.some(({gameId:u})=>u===String(o.id)),children:o.name},o.id))})]}),className:"mb-6",extra:!n&&jsx(Button,{type:"link",onClick:()=>{I(s);},children:p("PermissionList.removeText")}),children:a$1[s].gameId?jsx(Skeleton,{active:true,loading:x,children:jsx(k,{value:t?.[a$1[s].gameId],readonly:n,expand:r,permissions:C,onChange:o=>{l?.({...t,[a$1[s].gameId]:o});}})}):jsx(Empty,{description:p("PermissionList.gameSectionDescription")})},s)),!n&&jsx(Button,{block:true,type:"dashed",onClick:L,children:p("PermissionList.addText")})]})},$=pe;var{Text:ue}=Typography,fe=m=>{let{expand:r=true,value:t,readonly:n,onChange:l}=m,{data:f,isLoading:c,error:g}=i$1(),{t:P}=a();return g?jsx("div",{className:"flex justify-center",children:jsx(ue,{type:"danger",children:P("PermissionList.failedDescription")})}):jsx(Skeleton,{active:true,loading:c,children:jsx(k,{value:t,permissions:f,readonly:n,expand:r,onChange:l})})},z=fe;var ge=m=>{let{value:r}=m,{context:{permissionMode:t}}=i();return t==="game_scoped"?jsx(z,{...m,value:r}):jsx($,{...m,value:r})},J=ge;var Qe=({mode:m,onSuccess:r})=>{let{message:t}=App.useApp(),{t:n}=a(),l=c(),f=d(),c$1=m==="create",g=n(c$1?"Role.createTitle":"Role.updateTitle"),P=jsxs(Fragment,{children:[jsx(Form.Item,{label:n("global.name"),name:"name",rules:[{required:true}],children:jsx(Input,{disabled:!c$1})}),jsx(Form.Item,{name:"permissions",children:jsx(J,{})})]});return d$1({title:g,width:"1000px",formProps:{layout:"vertical"},content:P,onConfirm:async(a,d)=>{let y=`role_${a.name}`,C=a.permissions;c$1?(await l.mutateAsync({name:y,permissions:C}),t.success(n("Role.createSuccessfully"))):(await f.mutateAsync({id:d?.id,name:y,permissions:C}),t.success(n("Role.updateSuccessfully"))),r?.();}})};export{J as a,Qe as b};//# sourceMappingURL=chunk-MVG7YFPB.js.map
2
- //# sourceMappingURL=chunk-MVG7YFPB.js.map
1
+ import {c,d,i as i$1,j}from'./chunk-AFURMXX2.js';import {d as d$1}from'./chunk-NEOHLVWG.js';import {a}from'./chunk-7XR7V6IS.js';import {c as c$1}from'./chunk-LUVKLLW7.js';import {i}from'./chunk-UICHZXQP.js';import {Typography,Select,App,Form,Input,Skeleton,Divider,Card,Empty,Button,Space,Checkbox,Row,Col,Collapse}from'antd';import {useState,useEffect,useTransition,useCallback}from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';var oe=m=>{let{permissions:r,readonly:t,expand:n,value:l,onChange:f}=m,[c,g]=useState([]),[P,R]=useState({}),[a$1,d]=useState(l??[]),{t:y}=a(),[,C]=useTransition(),x=useCallback(e=>{g(e);},[]),p=(e,s)=>{let o=[];return e?o=[...new Set(a$1.concat(s))]:(o=a$1.slice(),s.forEach(u=>{let b=o.findIndex(X=>X===u);b>-1&&o.splice(b,1);})),o},L=(e,s)=>{let o=p(e.target.checked,s);d(o),f?.(o);};useEffect(()=>{d(l??[]);},[l]),useEffect(()=>{n&&C(()=>{g((r??[]).map(({category:e})=>e));});},[n,r]),useEffect(()=>{let e=(r??[]).reduce((s,o)=>(s[o.category]=o.permissions.every(u=>a$1?.includes(u.value)),s),{});R(e);},[a$1,r]);let I=(r??[]).map(e=>({key:e.category,label:e.category,extra:!t&&jsx(Checkbox,{checked:P[e.category],onChange:s=>{L(s,e.permissions?.map(o=>o.value));},children:y("global.selectAll")}),children:jsx(Checkbox.Group,{className:"w-full",value:a$1,disabled:t,children:jsx(Row,{gutter:[10,10],className:"w-full",children:e.permissions?.map(s=>jsx(Col,{span:6,children:jsx(Checkbox,{value:s.value,onChange:o=>{L(o,[s.value]);},children:s.label})},s.value))})})}));return jsx(Collapse,{className:"w-full",collapsible:"header",activeKey:c,items:I,onChange:x})},k=oe;var{Text:w}=Typography,{Option:le}=Select,pe=m=>{let{expand:r=true,value:t,readonly:n,onChange:l}=m,{data:f,isLoading:c,error:g}=j(),{data:P,isLoading:R}=c$1(),[a$1,d]=useState([]),y=f?.filter(e=>e.is_common),C=f?.filter(e=>!e.is_common),x=c||R,{t:p}=a();if(useEffect(()=>{let e=[];Object.keys(t??{}).forEach(s=>{s!=="global"&&e.push({gameId:s,permissions:t?.[s]??[]});}),d(e);},[t]),g)return jsx("div",{className:"flex justify-center",children:jsx(w,{type:"danger",children:p("PermissionList.failedDescription")})});let L=()=>{d(e=>[...e,{gameId:"",permissions:[]}]);},I=e=>{d(s=>s.filter((o,u)=>u!==e));};return jsxs("div",{className:"flex flex-col w-full",children:[jsx("div",{className:"mb-12",children:jsx(Divider,{dashed:true,children:p("PermissionList.baseSectionTitle")})}),jsx(Skeleton,{active:true,loading:x,children:jsx(k,{value:t?.global,readonly:n,permissions:y,expand:r,onChange:e=>{l?.({...t,global:e});}})}),jsx("div",{className:"my-12",children:jsx(Divider,{dashed:true,children:p("PermissionList.gameSectionTitle")})}),a$1.map((e,s)=>jsx(Card,{title:jsxs(Space,{children:[jsx(w,{children:p("global.game")}),n?jsx(w,{children:P?.find(o=>String(o.id)===e.gameId)?.name}):jsx(Select,{disabled:n,value:a$1[s].gameId||void 0,className:"w-40",placeholder:p("PermissionList.gameSelectPlaceholder"),onChange:o=>{d(u=>{let b=u.slice();return b[s].gameId=o,b});},children:P?.map(o=>jsx(le,{value:o.id,disabled:a$1.some(({gameId:u})=>u===String(o.id)),children:o.name},o.id))})]}),className:"mb-6",extra:!n&&jsx(Button,{type:"link",onClick:()=>{I(s);},children:p("PermissionList.removeText")}),children:a$1[s].gameId?jsx(Skeleton,{active:true,loading:x,children:jsx(k,{value:t?.[a$1[s].gameId],readonly:n,expand:r,permissions:C,onChange:o=>{l?.({...t,[a$1[s].gameId]:o});}})}):jsx(Empty,{description:p("PermissionList.gameSectionDescription")})},s)),!n&&jsx(Button,{block:true,type:"dashed",onClick:L,children:p("PermissionList.addText")})]})},$=pe;var{Text:ue}=Typography,fe=m=>{let{expand:r=true,value:t,readonly:n,onChange:l}=m,{data:f,isLoading:c,error:g}=i$1(),{t:P}=a();return g?jsx("div",{className:"flex justify-center",children:jsx(ue,{type:"danger",children:P("PermissionList.failedDescription")})}):jsx(Skeleton,{active:true,loading:c,children:jsx(k,{value:t,permissions:f,readonly:n,expand:r,onChange:l})})},z=fe;var ge=m=>{let{value:r}=m,{context:{permissionMode:t}}=i();return t==="game_scoped"?jsx(z,{...m,value:r}):jsx($,{...m,value:r})},J=ge;var Qe=({mode:m,onSuccess:r})=>{let{message:t}=App.useApp(),{t:n}=a(),l=c(),f=d(),c$1=m==="create",g=n(c$1?"Role.createTitle":"Role.updateTitle"),P=jsxs(Fragment,{children:[jsx(Form.Item,{label:n("global.name"),name:"name",rules:[{required:true}],children:jsx(Input,{disabled:!c$1})}),jsx(Form.Item,{name:"permissions",children:jsx(J,{})})]});return d$1({title:g,width:"1000px",formProps:{layout:"vertical"},content:P,onConfirm:async(a,d)=>{let y=`role_${a.name}`,C=a.permissions;c$1?(await l.mutateAsync({name:y,permissions:C}),t.success(n("Role.createSuccessfully"))):(await f.mutateAsync({id:d?.id,name:y,permissions:C}),t.success(n("Role.updateSuccessfully"))),r?.();}})};export{J as a,Qe as b};//# sourceMappingURL=chunk-COONHXCY.js.map
2
+ //# sourceMappingURL=chunk-COONHXCY.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/modules/permission/components/permissionCollapse/index.tsx","../src/modules/permission/components/permissionList/PermissionWithGame.tsx","../src/modules/permission/components/permissionList/PermissionWithoutGame.tsx","../src/modules/permission/components/permissionList/index.tsx","../src/modules/permission/hooks/role-hooks.tsx"],"names":["PermissionCollapse","props","permissions","readonly","expand","value","onChange","activeKey","setActiveKey","useState","checkedMap","setCheckedMap","internalValue","setInternalValue","t","useTranslation","startTransition","useTransition","onCollapseChange","useCallback","key","getCheckedValue","checkedValue","codes","tempValue","code","index","item","onCheckChange","useEffect","category","acc","curr","items","jsx","Checkbox","e","permission","Row","Col","Collapse","permissionCollapse_default","Text","Typography","Option","Select","PermissionWithGame","isPermissionLoading","error","useAllPermissionsV2","games","isGamesLoading","useGames","gameList","setGameList","globalPermissions","gamePermissions","isLoading","list","addGame","prev","removeGame","_","i","jsxs","Divider","Skeleton","newValue","Card","Space","game","selectedValue","pev","temp","gameId","Button","Empty","PermissionWithGame_default","PermissionWithoutGame","useAllPermissions","PermissionWithoutGame_default","PermissionList","permissionMode","useToolkitsStore","permissionList_default","useRoleModal","mode","onSuccess","message","App","create","useCreateRole","update","useUpdateRole","isCreateMode","title","content","Fragment","Form","Input","useFormModal","values","extraValues","name"],"mappings":"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","file":"chunk-MVG7YFPB.js","sourcesContent":["import { Checkbox, Col, Collapse, Row } from 'antd'\nimport type { CheckboxChangeEvent } from 'antd/es/checkbox'\nimport type { FC } from 'react'\nimport { useCallback, useEffect, useState, useTransition } from 'react'\n\nimport { useTranslation } from '@/locale'\n\nimport type { PermissionEnumItem } from '../../types'\n\ninterface PermissionCollapseProps {\n expand?: boolean\n permissions?: PermissionEnumItem[]\n readonly?: boolean\n value?: string[]\n onChange?: (value: string[]) => void\n}\n\nconst PermissionCollapse: FC<PermissionCollapseProps> = props => {\n const { permissions, readonly, expand, value, onChange } = props\n const [activeKey, setActiveKey] = useState<string[]>([])\n const [checkedMap, setCheckedMap] = useState<Record<string, boolean>>({})\n const [internalValue, setInternalValue] = useState<string[]>(value ?? [])\n const { t } = useTranslation()\n const [, startTransition] = useTransition()\n\n const onCollapseChange = useCallback((key: string | string[]) => {\n setActiveKey(key as string[])\n }, [])\n\n const getCheckedValue = (checkedValue: boolean, codes: string[]) => {\n let tempValue: string[] = []\n\n if (checkedValue) {\n tempValue = [...new Set(internalValue.concat(codes))]\n } else {\n tempValue = internalValue.slice()\n\n codes.forEach(code => {\n const index = tempValue.findIndex(item => item === code)\n if (index > -1) {\n tempValue.splice(index, 1)\n }\n })\n }\n\n return tempValue\n }\n\n const onCheckChange = (e: CheckboxChangeEvent, codes: string[]) => {\n const checkedValue = getCheckedValue(e.target.checked, codes)\n setInternalValue(checkedValue)\n onChange?.(checkedValue)\n }\n\n useEffect(() => {\n setInternalValue(value ?? [])\n }, [value])\n\n useEffect(() => {\n if (expand) {\n startTransition(() => {\n // 改变展开状态\n setActiveKey((permissions ?? []).map(({ category }) => category))\n })\n }\n }, [expand, permissions])\n\n useEffect(() => {\n const checkedValue = (permissions ?? []).reduce(\n (acc, curr) => {\n acc[curr.category] = curr.permissions.every(item => internalValue?.includes(item.value))\n return acc\n },\n {} as Record<string, boolean>,\n )\n\n setCheckedMap(checkedValue)\n }, [internalValue, permissions])\n\n const items = (permissions ?? []).map(item => ({\n key: item.category,\n label: item.category,\n extra: !readonly && (\n <Checkbox\n checked={checkedMap[item.category]}\n onChange={e => {\n onCheckChange(\n e,\n item.permissions?.map(permission => permission.value),\n )\n }}\n >\n {t('global.selectAll')}\n </Checkbox>\n ),\n children: (\n <Checkbox.Group className=\"w-full\" value={internalValue} disabled={readonly}>\n <Row gutter={[10, 10]} className=\"w-full\">\n {item.permissions?.map(permission => (\n <Col key={permission.value} span={6}>\n <Checkbox\n value={permission.value}\n onChange={e => {\n onCheckChange(e, [permission.value])\n }}\n >\n {permission.label}\n </Checkbox>\n </Col>\n ))}\n </Row>\n </Checkbox.Group>\n ),\n }))\n\n return (\n <Collapse className=\"w-full\" collapsible=\"header\" activeKey={activeKey} items={items} onChange={onCollapseChange} />\n )\n}\n\nexport default PermissionCollapse\n","import { Button, Card, Divider, Empty, Select, Skeleton, Space, Typography } from 'antd'\nimport type { FC } from 'react'\nimport { useEffect, useState } from 'react'\n\nimport { useTranslation } from '@/locale'\nimport { useGames } from '@/services'\n\nimport { useAllPermissionsV2 } from '../../services'\nimport type { RoleV2 } from '../../types'\nimport PermissionCollapse from '../permissionCollapse'\nimport type { PermissionListPropsBase } from './types'\n\nconst { Text } = Typography\nconst { Option } = Select\n\ninterface PermissionWithGameProps extends PermissionListPropsBase {\n value?: RoleV2['permissions']\n onChange?: (checkedValue: RoleV2['permissions']) => void\n}\n\nconst PermissionWithGame: FC<PermissionWithGameProps> = props => {\n const { expand = true, value, readonly, onChange } = props\n const { data: permission, isLoading: isPermissionLoading, error } = useAllPermissionsV2()\n const { data: games, isLoading: isGamesLoading } = useGames()\n const [gameList, setGameList] = useState<{ gameId: string; permissions: string[] }[]>([])\n const globalPermissions = permission?.filter(item => item.is_common)\n const gamePermissions = permission?.filter(item => !item.is_common)\n const isLoading = isPermissionLoading || isGamesLoading\n const { t } = useTranslation()\n\n useEffect(() => {\n const list: { gameId: string; permissions: string[] }[] = []\n\n Object.keys(value ?? {}).forEach(key => {\n if (key !== 'global') {\n list.push({ gameId: key, permissions: value?.[key] ?? [] })\n }\n })\n\n setGameList(list)\n }, [value])\n\n if (error) {\n return (\n <div className=\"flex justify-center\">\n <Text type=\"danger\">{t('PermissionList.failedDescription')}</Text>\n </div>\n )\n }\n\n const addGame = () => {\n setGameList(prev => [...prev, { gameId: '', permissions: [] }])\n }\n\n const removeGame = (index: number) => {\n setGameList(prev => prev.filter((_, i) => i !== index))\n }\n\n return (\n <div className=\"flex flex-col w-full\">\n <div className=\"mb-12\">\n <Divider dashed>{t('PermissionList.baseSectionTitle')}</Divider>\n </div>\n <Skeleton active loading={isLoading}>\n <PermissionCollapse\n value={value?.global}\n readonly={readonly}\n permissions={globalPermissions}\n expand={expand}\n onChange={newValue => {\n onChange?.({\n ...value,\n global: newValue,\n })\n }}\n />\n </Skeleton>\n <div className=\"my-12\">\n <Divider dashed>{t('PermissionList.gameSectionTitle')}</Divider>\n </div>\n {gameList.map((item, index) => (\n <Card\n title={\n <Space>\n <Text>{t('global.game')}</Text>\n {readonly ? (\n <Text>{games?.find(game => String(game.id) === item.gameId)?.name}</Text>\n ) : (\n <Select\n disabled={readonly}\n value={gameList[index].gameId || undefined}\n className=\"w-40\"\n placeholder={t('PermissionList.gameSelectPlaceholder')}\n onChange={selectedValue => {\n setGameList(pev => {\n const temp = pev.slice()\n temp[index].gameId = selectedValue\n return temp\n })\n }}\n >\n {games?.map(game => (\n <Option\n key={game.id}\n value={game.id}\n disabled={gameList.some(({ gameId }) => gameId === String(game.id))}\n >\n {game.name}\n </Option>\n ))}\n </Select>\n )}\n </Space>\n }\n key={index}\n className=\"mb-6\"\n extra={\n !readonly && (\n <Button\n type=\"link\"\n onClick={() => {\n removeGame(index)\n }}\n >\n {t('PermissionList.removeText')}\n </Button>\n )\n }\n >\n {gameList[index].gameId ? (\n <Skeleton active loading={isLoading}>\n <PermissionCollapse\n value={value?.[gameList[index].gameId]}\n readonly={readonly}\n expand={expand}\n permissions={gamePermissions}\n onChange={newValue => {\n onChange?.({\n ...value,\n [gameList[index].gameId]: newValue,\n })\n }}\n />\n </Skeleton>\n ) : (\n <Empty description={t('PermissionList.gameSectionDescription')} />\n )}\n </Card>\n ))}\n {!readonly && (\n <Button block type=\"dashed\" onClick={addGame}>\n {t('PermissionList.addText')}\n </Button>\n )}\n </div>\n )\n}\n\nexport default PermissionWithGame\n","import { Skeleton, Typography } from 'antd'\nimport type { FC } from 'react'\n\nimport { useTranslation } from '@/locale'\n\nimport { useAllPermissions } from '../../services'\nimport type { RoleV1 } from '../../types'\nimport PermissionCollapse from '../permissionCollapse'\nimport type { PermissionListPropsBase } from './types'\n\nconst { Text } = Typography\n\ninterface PermissionWithoutGameProps extends PermissionListPropsBase {\n value?: RoleV1['permissions']\n onChange?: (checkedValue: RoleV1['permissions']) => void\n}\n\nconst PermissionWithoutGame: FC<PermissionWithoutGameProps> = props => {\n const { expand = true, value, readonly, onChange } = props\n const { data: permissions, isLoading, error } = useAllPermissions()\n const { t } = useTranslation()\n\n if (error) {\n return (\n <div className=\"flex justify-center\">\n <Text type=\"danger\">{t('PermissionList.failedDescription')}</Text>\n </div>\n )\n }\n\n return (\n <Skeleton active loading={isLoading}>\n <PermissionCollapse\n value={value}\n permissions={permissions}\n readonly={readonly}\n expand={expand}\n onChange={onChange}\n />\n </Skeleton>\n )\n}\n\nexport default PermissionWithoutGame\n","import type { FC } from 'react'\n\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { PermissionMode } from '@/constants'\n\nimport type { RoleV1, RoleV2 } from '../../types'\nimport PermissionWithGame from './PermissionWithGame'\nimport PermissionWithoutGame from './PermissionWithoutGame'\nimport type { PermissionListPropsBase } from './types'\n\ninterface PermissionListProps extends PermissionListPropsBase {\n value?: RoleV1['permissions'] | RoleV2['permissions']\n onChange?: (checkedValue: RoleV1['permissions'] | RoleV2['permissions']) => void\n}\n\nconst PermissionList: FC<PermissionListProps> = (props: PermissionListProps) => {\n const { value } = props\n const {\n context: { permissionMode },\n } = useToolkitsStore()\n\n if (permissionMode === PermissionMode.GAME_SCOPED) {\n return <PermissionWithoutGame {...props} value={value as RoleV1['permissions']} />\n }\n\n return <PermissionWithGame {...props} value={value as RoleV2['permissions']} />\n}\n\nexport default PermissionList\n","import { App, Form, Input } from 'antd'\n\nimport { useFormModal } from '@/hooks/modal'\nimport { useTranslation } from '@/locale'\n\nimport PermissionList from '../components/permissionList'\nimport { useCreateRole, useUpdateRole } from '../services'\nimport type { RoleListItem, RoleV1, RoleV2 } from '../types'\n\nexport const useRoleModal = ({ mode, onSuccess }: { mode: 'create' | 'update'; onSuccess?: () => void }) => {\n const { message } = App.useApp()\n const { t } = useTranslation()\n const create = useCreateRole()\n const update = useUpdateRole()\n\n const isCreateMode = mode === 'create'\n\n const title = isCreateMode ? t('Role.createTitle') : t('Role.updateTitle')\n\n const content = (\n <>\n <Form.Item label={t('global.name')} name=\"name\" rules={[{ required: true }]}>\n <Input disabled={!isCreateMode} />\n </Form.Item>\n <Form.Item name=\"permissions\">\n <PermissionList />\n </Form.Item>\n </>\n )\n\n const onConfirm = async (\n values: { name: string; permissions: RoleListItem['permissions'] },\n extraValues: { id: number },\n ) => {\n const name = `role_${values.name}`\n const permissions = values.permissions\n\n if (isCreateMode) {\n await create.mutateAsync({ name, permissions })\n message.success(t('Role.createSuccessfully'))\n } else {\n await update.mutateAsync({ id: extraValues?.id, name, permissions })\n message.success(t('Role.updateSuccessfully'))\n }\n onSuccess?.()\n }\n\n return useFormModal<\n {\n name: string\n permissions: RoleV1['permissions'] | RoleV2['permissions']\n },\n { id: number }\n >({\n title,\n width: '1000px',\n formProps: {\n layout: 'vertical',\n },\n content,\n onConfirm,\n })\n}\n"]}
1
+ {"version":3,"sources":["../src/modules/permission/components/permissionCollapse/index.tsx","../src/modules/permission/components/permissionList/PermissionWithGame.tsx","../src/modules/permission/components/permissionList/PermissionWithoutGame.tsx","../src/modules/permission/components/permissionList/index.tsx","../src/modules/permission/hooks/role-hooks.tsx"],"names":["PermissionCollapse","props","permissions","readonly","expand","value","onChange","activeKey","setActiveKey","useState","checkedMap","setCheckedMap","internalValue","setInternalValue","t","useTranslation","startTransition","useTransition","onCollapseChange","useCallback","key","getCheckedValue","checkedValue","codes","tempValue","code","index","item","onCheckChange","useEffect","category","acc","curr","items","jsx","Checkbox","e","permission","Row","Col","Collapse","permissionCollapse_default","Text","Typography","Option","Select","PermissionWithGame","isPermissionLoading","error","useAllPermissionsV2","games","isGamesLoading","useGames","gameList","setGameList","globalPermissions","gamePermissions","isLoading","list","addGame","prev","removeGame","_","i","jsxs","Divider","Skeleton","newValue","Card","Space","game","selectedValue","pev","temp","gameId","Button","Empty","PermissionWithGame_default","PermissionWithoutGame","useAllPermissions","PermissionWithoutGame_default","PermissionList","permissionMode","useToolkitsStore","permissionList_default","useRoleModal","mode","onSuccess","message","App","create","useCreateRole","update","useUpdateRole","isCreateMode","title","content","Fragment","Form","Input","useFormModal","values","extraValues","name"],"mappings":"ybAiBA,IAAMA,EAAAA,CAAkDC,GAAS,CAC/D,GAAM,CAAE,WAAA,CAAAC,CAAAA,CAAa,QAAA,CAAAC,CAAAA,CAAU,MAAA,CAAAC,EAAQ,KAAA,CAAAC,CAAAA,CAAO,QAAA,CAAAC,CAAS,CAAA,CAAIL,CAAAA,CACrD,CAACM,CAAAA,CAAWC,CAAY,CAAA,CAAIC,QAAAA,CAAmB,EAAE,CAAA,CACjD,CAACC,CAAAA,CAAYC,CAAa,EAAIF,QAAAA,CAAkC,EAAE,CAAA,CAClE,CAACG,GAAAA,CAAeC,CAAgB,CAAA,CAAIJ,SAAmBJ,CAAAA,EAAS,EAAE,CAAA,CAClE,CAAE,CAAA,CAAAS,CAAE,CAAA,CAAIC,GAAe,CACvB,EAAGC,CAAe,CAAA,CAAIC,aAAAA,EAAc,CAEpCC,CAAAA,CAAmBC,YAAaC,CAAAA,EAA2B,CAC/DZ,CAAAA,CAAaY,CAAe,EAC9B,CAAA,CAAG,EAAE,EAECC,CAAAA,CAAkB,CAACC,CAAAA,CAAuBC,CAAAA,GAAoB,CAClE,IAAIC,CAAAA,CAAsB,GAE1B,OAAIF,CAAAA,CACFE,CAAAA,CAAY,CAAC,GAAG,IAAI,GAAA,CAAIZ,GAAAA,CAAc,OAAOW,CAAK,CAAC,CAAC,CAAA,EAEpDC,CAAAA,CAAYZ,GAAAA,CAAc,KAAA,EAAM,CAEhCW,EAAM,OAAA,CAAQE,CAAAA,EAAQ,CACpB,IAAMC,CAAAA,CAAQF,CAAAA,CAAU,SAAA,CAAUG,CAAAA,EAAQA,IAASF,CAAI,CAAA,CACnDC,CAAAA,CAAQ,EAAA,EACVF,CAAAA,CAAU,MAAA,CAAOE,CAAAA,CAAO,CAAC,EAE7B,CAAC,CAAA,CAAA,CAGIF,CACT,CAAA,CAEMI,CAAAA,CAAgB,CAAC,CAAA,CAAwBL,CAAAA,GAAoB,CACjE,IAAMD,CAAAA,CAAeD,CAAAA,CAAgB,CAAA,CAAE,MAAA,CAAO,OAAA,CAASE,CAAK,CAAA,CAC5DV,EAAiBS,CAAY,CAAA,CAC7BhB,CAAAA,GAAWgB,CAAY,EACzB,CAAA,CAEAO,SAAAA,CAAU,IAAM,CACdhB,CAAAA,CAAiBR,CAAAA,EAAS,EAAE,EAC9B,CAAA,CAAG,CAACA,CAAK,CAAC,CAAA,CAEVwB,SAAAA,CAAU,IAAM,CACVzB,CAAAA,EACFY,CAAAA,CAAgB,IAAM,CAEpBR,GAAcN,CAAAA,EAAe,EAAC,EAAG,GAAA,CAAI,CAAC,CAAE,QAAA,CAAA4B,CAAS,IAAMA,CAAQ,CAAC,EAClE,CAAC,EAEL,CAAA,CAAG,CAAC1B,CAAAA,CAAQF,CAAW,CAAC,CAAA,CAExB2B,SAAAA,CAAU,IAAM,CACd,IAAMP,CAAAA,CAAAA,CAAgBpB,CAAAA,EAAe,EAAC,EAAG,MAAA,CACvC,CAAC6B,CAAAA,CAAKC,CAAAA,IACJD,CAAAA,CAAIC,CAAAA,CAAK,QAAQ,EAAIA,CAAAA,CAAK,WAAA,CAAY,KAAA,CAAML,CAAAA,EAAQf,GAAAA,EAAe,QAAA,CAASe,CAAAA,CAAK,KAAK,CAAC,CAAA,CAChFI,CAAAA,CAAAA,CAET,EACF,CAAA,CAEApB,CAAAA,CAAcW,CAAY,EAC5B,EAAG,CAACV,GAAAA,CAAeV,CAAW,CAAC,CAAA,CAE/B,IAAM+B,CAAAA,CAAAA,CAAS/B,CAAAA,EAAe,EAAC,EAAG,GAAA,CAAIyB,CAAAA,GAAS,CAC7C,GAAA,CAAKA,CAAAA,CAAK,QAAA,CACV,KAAA,CAAOA,EAAK,QAAA,CACZ,KAAA,CAAO,CAACxB,CAAAA,EACN+B,GAAAA,CAACC,QAAAA,CAAA,CACC,OAAA,CAASzB,EAAWiB,CAAAA,CAAK,QAAQ,CAAA,CACjC,QAAA,CAAUS,CAAAA,EAAK,CACbR,CAAAA,CACEQ,CAAAA,CACAT,CAAAA,CAAK,WAAA,EAAa,GAAA,CAAIU,CAAAA,EAAcA,CAAAA,CAAW,KAAK,CACtD,EACF,EAEC,QAAA,CAAAvB,CAAAA,CAAE,kBAAkB,CAAA,CACvB,CAAA,CAEF,QAAA,CACEoB,GAAAA,CAACC,QAAAA,CAAS,MAAT,CAAe,SAAA,CAAU,QAAA,CAAS,KAAA,CAAOvB,GAAAA,CAAe,QAAA,CAAUT,CAAAA,CACjE,QAAA,CAAA+B,IAACI,GAAAA,CAAA,CAAI,MAAA,CAAQ,CAAC,EAAA,CAAI,EAAE,CAAA,CAAG,SAAA,CAAU,SAC9B,QAAA,CAAAX,CAAAA,CAAK,WAAA,EAAa,GAAA,CAAIU,CAAAA,EACrBH,GAAAA,CAACK,GAAAA,CAAA,CAA2B,KAAM,CAAA,CAChC,QAAA,CAAAL,GAAAA,CAACC,QAAAA,CAAA,CACC,KAAA,CAAOE,CAAAA,CAAW,KAAA,CAClB,SAAUD,CAAAA,EAAK,CACbR,CAAAA,CAAcQ,CAAAA,CAAG,CAACC,CAAAA,CAAW,KAAK,CAAC,EACrC,CAAA,CAEC,QAAA,CAAAA,CAAAA,CAAW,KAAA,CACd,CAAA,CAAA,CARQA,CAAAA,CAAW,KASrB,CACD,EACH,CAAA,CACF,CAEJ,CAAA,CAAE,CAAA,CAEF,OACEH,GAAAA,CAACM,QAAAA,CAAA,CAAS,UAAU,QAAA,CAAS,WAAA,CAAY,QAAA,CAAS,SAAA,CAAWjC,CAAAA,CAAW,KAAA,CAAO0B,CAAAA,CAAO,QAAA,CAAUf,EAAkB,CAEtH,CAAA,CAEOuB,CAAAA,CAAQzC,EAAAA,CC5Gf,GAAM,CAAE,IAAA,CAAA0C,CAAK,CAAA,CAAIC,UAAAA,CACX,CAAE,MAAA,CAAAC,EAAO,CAAA,CAAIC,MAAAA,CAObC,EAAAA,CAAkD7C,CAAAA,EAAS,CAC/D,GAAM,CAAE,MAAA,CAAAG,EAAS,IAAA,CAAM,KAAA,CAAAC,CAAAA,CAAO,QAAA,CAAAF,CAAAA,CAAU,QAAA,CAAAG,CAAS,CAAA,CAAIL,EAC/C,CAAE,IAAA,CAAMoC,CAAAA,CAAY,SAAA,CAAWU,CAAAA,CAAqB,KAAA,CAAAC,CAAM,CAAA,CAAIC,GAAoB,CAClF,CAAE,IAAA,CAAMC,CAAAA,CAAO,SAAA,CAAWC,CAAe,CAAA,CAAIC,GAAAA,GAC7C,CAACC,GAAAA,CAAUC,CAAW,CAAA,CAAI7C,QAAAA,CAAsD,EAAE,CAAA,CAClF8C,EAAoBlB,CAAAA,EAAY,MAAA,CAAOV,CAAAA,EAAQA,CAAAA,CAAK,SAAS,CAAA,CAC7D6B,CAAAA,CAAkBnB,CAAAA,EAAY,OAAOV,CAAAA,EAAQ,CAACA,CAAAA,CAAK,SAAS,CAAA,CAC5D8B,CAAAA,CAAYV,CAAAA,EAAuBI,CAAAA,CACnC,CAAE,CAAA,CAAArC,CAAE,CAAA,CAAIC,CAAAA,EAAe,CAc7B,GAZAc,SAAAA,CAAU,IAAM,CACd,IAAM6B,CAAAA,CAAoD,EAAC,CAE3D,MAAA,CAAO,IAAA,CAAKrD,CAAAA,EAAS,EAAE,CAAA,CAAE,OAAA,CAAQe,CAAAA,EAAO,CAClCA,CAAAA,GAAQ,QAAA,EACVsC,CAAAA,CAAK,IAAA,CAAK,CAAE,MAAA,CAAQtC,CAAAA,CAAK,WAAA,CAAaf,CAAAA,GAAQe,CAAG,CAAA,EAAK,EAAG,CAAC,EAE9D,CAAC,CAAA,CAEDkC,CAAAA,CAAYI,CAAI,EAClB,CAAA,CAAG,CAACrD,CAAK,CAAC,CAAA,CAEN2C,CAAAA,CACF,OACEd,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qBAAA,CACb,SAAAA,GAAAA,CAACQ,CAAAA,CAAA,CAAK,IAAA,CAAK,QAAA,CAAU,QAAA,CAAA5B,CAAAA,CAAE,kCAAkC,EAAE,CAAA,CAC7D,CAAA,CAIJ,IAAM6C,CAAAA,CAAU,IAAM,CACpBL,CAAAA,CAAYM,CAAAA,EAAQ,CAAC,GAAGA,CAAAA,CAAM,CAAE,MAAA,CAAQ,EAAA,CAAI,WAAA,CAAa,EAAG,CAAC,CAAC,EAChE,CAAA,CAEMC,CAAAA,CAAcnC,CAAAA,EAAkB,CACpC4B,CAAAA,CAAYM,CAAAA,EAAQA,EAAK,MAAA,CAAO,CAACE,CAAAA,CAAGC,CAAAA,GAAMA,CAAAA,GAAMrC,CAAK,CAAC,EACxD,EAEA,OACEsC,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sBAAA,CACb,QAAA,CAAA,CAAA9B,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,OAAA,CACb,QAAA,CAAAA,GAAAA,CAAC+B,OAAAA,CAAA,CAAQ,MAAA,CAAM,IAAA,CAAE,QAAA,CAAAnD,CAAAA,CAAE,iCAAiC,CAAA,CAAE,CAAA,CACxD,CAAA,CACAoB,GAAAA,CAACgC,QAAAA,CAAA,CAAS,OAAM,IAAA,CAAC,OAAA,CAAST,CAAAA,CACxB,QAAA,CAAAvB,GAAAA,CAACO,CAAAA,CAAA,CACC,KAAA,CAAOpC,GAAO,MAAA,CACd,QAAA,CAAUF,CAAAA,CACV,WAAA,CAAaoD,CAAAA,CACb,MAAA,CAAQnD,CAAAA,CACR,QAAA,CAAU+D,GAAY,CACpB7D,CAAAA,GAAW,CACT,GAAGD,CAAAA,CACH,MAAA,CAAQ8D,CACV,CAAC,EACH,CAAA,CACF,CAAA,CACF,CAAA,CACAjC,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,OAAA,CACb,QAAA,CAAAA,IAAC+B,OAAAA,CAAA,CAAQ,MAAA,CAAM,IAAA,CAAE,QAAA,CAAAnD,CAAAA,CAAE,iCAAiC,CAAA,CAAE,EACxD,CAAA,CACCuC,GAAAA,CAAS,GAAA,CAAI,CAAC1B,CAAAA,CAAMD,CAAAA,GACnBQ,GAAAA,CAACkC,IAAAA,CAAA,CACC,KAAA,CACEJ,IAAAA,CAACK,KAAAA,CAAA,CACC,QAAA,CAAA,CAAAnC,GAAAA,CAACQ,CAAAA,CAAA,CAAM,SAAA5B,CAAAA,CAAE,aAAa,CAAA,CAAE,CAAA,CACvBX,CAAAA,CACC+B,GAAAA,CAACQ,CAAAA,CAAA,CAAM,SAAAQ,CAAAA,EAAO,IAAA,CAAKoB,CAAAA,EAAQ,MAAA,CAAOA,CAAAA,CAAK,EAAE,CAAA,GAAM3C,CAAAA,CAAK,MAAM,CAAA,EAAG,IAAA,CAAK,CAAA,CAElEO,GAAAA,CAACW,MAAAA,CAAA,CACC,QAAA,CAAU1C,CAAAA,CACV,MAAOkD,GAAAA,CAAS3B,CAAK,CAAA,CAAE,MAAA,EAAU,MAAA,CACjC,SAAA,CAAU,MAAA,CACV,WAAA,CAAaZ,EAAE,sCAAsC,CAAA,CACrD,QAAA,CAAUyD,CAAAA,EAAiB,CACzBjB,CAAAA,CAAYkB,CAAAA,EAAO,CACjB,IAAMC,CAAAA,CAAOD,CAAAA,CAAI,KAAA,EAAM,CACvB,OAAAC,CAAAA,CAAK/C,CAAK,CAAA,CAAE,OAAS6C,CAAAA,CACdE,CACT,CAAC,EACH,CAAA,CAEC,QAAA,CAAAvB,CAAAA,EAAO,GAAA,CAAIoB,GACVpC,GAAAA,CAACU,EAAAA,CAAA,CAEC,KAAA,CAAO0B,CAAAA,CAAK,EAAA,CACZ,QAAA,CAAUjB,GAAAA,CAAS,KAAK,CAAC,CAAE,MAAA,CAAAqB,CAAO,CAAA,GAAMA,CAAAA,GAAW,MAAA,CAAOJ,CAAAA,CAAK,EAAE,CAAC,CAAA,CAEjE,QAAA,CAAAA,CAAAA,CAAK,IAAA,CAAA,CAJDA,CAAAA,CAAK,EAKZ,CACD,EACH,CAAA,CAAA,CAEJ,CAAA,CAGF,SAAA,CAAU,MAAA,CACV,KAAA,CACE,CAACnE,CAAAA,EACC+B,GAAAA,CAACyC,OAAA,CACC,IAAA,CAAK,MAAA,CACL,OAAA,CAAS,IAAM,CACbd,CAAAA,CAAWnC,CAAK,EAClB,CAAA,CAEC,QAAA,CAAAZ,CAAAA,CAAE,2BAA2B,CAAA,CAChC,CAAA,CAIH,QAAA,CAAAuC,GAAAA,CAAS3B,CAAK,CAAA,CAAE,MAAA,CACfQ,GAAAA,CAACgC,QAAAA,CAAA,CAAS,MAAA,CAAM,IAAA,CAAC,OAAA,CAAST,EACxB,QAAA,CAAAvB,GAAAA,CAACO,CAAAA,CAAA,CACC,KAAA,CAAOpC,CAAAA,GAAQgD,GAAAA,CAAS3B,CAAK,EAAE,MAAM,CAAA,CACrC,QAAA,CAAUvB,CAAAA,CACV,MAAA,CAAQC,CAAAA,CACR,WAAA,CAAaoD,CAAAA,CACb,SAAUW,CAAAA,EAAY,CACpB7D,CAAAA,GAAW,CACT,GAAGD,CAAAA,CACH,CAACgD,GAAAA,CAAS3B,CAAK,CAAA,CAAE,MAAM,EAAGyC,CAC5B,CAAC,EACH,CAAA,CACF,CAAA,CACF,EAEAjC,GAAAA,CAAC0C,KAAAA,CAAA,CAAM,WAAA,CAAa9D,CAAAA,CAAE,uCAAuC,CAAA,CAAG,CAAA,CAAA,CA/B7DY,CAiCP,CACD,CAAA,CACA,CAACvB,CAAAA,EACA+B,GAAAA,CAACyC,MAAAA,CAAA,CAAO,KAAA,CAAK,KAAC,IAAA,CAAK,QAAA,CAAS,OAAA,CAAShB,CAAAA,CAClC,QAAA,CAAA7C,CAAAA,CAAE,wBAAwB,CAAA,CAC7B,GAEJ,CAEJ,CAAA,CAEO+D,CAAAA,CAAQ/B,EAAAA,CCpJf,GAAM,CAAE,IAAA,CAAAJ,EAAK,EAAIC,UAAAA,CAOXmC,EAAAA,CAAwD7E,CAAAA,EAAS,CACrE,GAAM,CAAE,MAAA,CAAAG,CAAAA,CAAS,IAAA,CAAM,KAAA,CAAAC,CAAAA,CAAO,QAAA,CAAAF,CAAAA,CAAU,QAAA,CAAAG,CAAS,CAAA,CAAIL,EAC/C,CAAE,IAAA,CAAMC,CAAAA,CAAa,SAAA,CAAAuD,CAAAA,CAAW,KAAA,CAAAT,CAAM,CAAA,CAAI+B,KAAkB,CAC5D,CAAE,CAAA,CAAAjE,CAAE,CAAA,CAAIC,CAAAA,EAAe,CAE7B,OAAIiC,EAEAd,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qBAAA,CACb,QAAA,CAAAA,GAAAA,CAACQ,EAAAA,CAAA,CAAK,KAAK,QAAA,CAAU,QAAA,CAAA5B,CAAAA,CAAE,kCAAkC,CAAA,CAAE,CAAA,CAC7D,CAAA,CAKFoB,GAAAA,CAACgC,SAAA,CAAS,MAAA,CAAM,IAAA,CAAC,OAAA,CAAST,CAAAA,CACxB,QAAA,CAAAvB,GAAAA,CAACO,CAAAA,CAAA,CACC,KAAA,CAAOpC,CAAAA,CACP,WAAA,CAAaH,CAAAA,CACb,QAAA,CAAUC,CAAAA,CACV,MAAA,CAAQC,CAAAA,CACR,SAAUE,CAAAA,CACZ,CAAA,CACF,CAEJ,CAAA,CAEO0E,CAAAA,CAAQF,EAAAA,CC5Bf,IAAMG,EAAAA,CAA2ChF,CAAAA,EAA+B,CAC9E,GAAM,CAAE,KAAA,CAAAI,CAAM,EAAIJ,CAAAA,CACZ,CACJ,OAAA,CAAS,CAAE,cAAA,CAAAiF,CAAe,CAC5B,CAAA,CAAIC,GAAiB,CAErB,OAAID,CAAAA,GAAmB,aAAA,CACdhD,GAAAA,CAAC8C,CAAAA,CAAA,CAAuB,GAAG/E,EAAO,KAAA,CAAOI,CAAAA,CAAgC,CAAA,CAG3E6B,GAAAA,CAAC2C,CAAAA,CAAA,CAAoB,GAAG5E,CAAAA,CAAO,MAAOI,CAAAA,CAAgC,CAC/E,CAAA,CAEO+E,CAAAA,CAAQH,GCnBR,IAAMI,EAAAA,CAAe,CAAC,CAAE,IAAA,CAAAC,CAAAA,CAAM,UAAAC,CAAU,CAAA,GAA6D,CAC1G,GAAM,CAAE,OAAA,CAAAC,CAAQ,CAAA,CAAIC,IAAI,MAAA,EAAO,CACzB,CAAE,CAAA,CAAA3E,CAAE,CAAA,CAAIC,CAAAA,EAAe,CACvB2E,EAASC,CAAAA,EAAc,CACvBC,CAAAA,CAASC,CAAAA,EAAc,CAEvBC,GAAAA,CAAeR,CAAAA,GAAS,QAAA,CAExBS,EAAuBjF,CAAAA,CAAfgF,GAAAA,CAAiB,kBAAA,CAAwB,kBAAN,CAAA,CAE3CE,CAAAA,CACJhC,IAAAA,CAAAiC,QAAAA,CAAA,CACE,QAAA,CAAA,CAAA/D,GAAAA,CAACgE,IAAAA,CAAK,IAAA,CAAL,CAAU,KAAA,CAAOpF,CAAAA,CAAE,aAAa,EAAG,IAAA,CAAK,MAAA,CAAO,KAAA,CAAO,CAAC,CAAE,QAAA,CAAU,IAAK,CAAC,EACxE,QAAA,CAAAoB,GAAAA,CAACiE,KAAAA,CAAA,CAAM,QAAA,CAAU,CAACL,GAAAA,CAAc,CAAA,CAClC,EACA5D,GAAAA,CAACgE,IAAAA,CAAK,IAAA,CAAL,CAAU,IAAA,CAAK,aAAA,CACd,QAAA,CAAAhE,GAAAA,CAACkD,EAAA,EAAe,CAAA,CAClB,CAAA,CAAA,CACF,CAAA,CAoBF,OAAOgB,GAAAA,CAML,CACA,KAAA,CAAAL,EACA,KAAA,CAAO,QAAA,CACP,SAAA,CAAW,CACT,MAAA,CAAQ,UACV,CAAA,CACA,OAAA,CAAAC,EACA,SAAA,CA9BgB,MAChBK,CAAAA,CACAC,CAAAA,GACG,CACH,IAAMC,CAAAA,CAAO,CAAA,KAAA,EAAQF,EAAO,IAAI,CAAA,CAAA,CAC1BnG,CAAAA,CAAcmG,CAAAA,CAAO,WAAA,CAEvBP,GAAAA,EACF,MAAMJ,CAAAA,CAAO,YAAY,CAAE,IAAA,CAAAa,CAAAA,CAAM,WAAA,CAAArG,CAAY,CAAC,CAAA,CAC9CsF,CAAAA,CAAQ,QAAQ1E,CAAAA,CAAE,yBAAyB,CAAC,CAAA,GAE5C,MAAM8E,CAAAA,CAAO,WAAA,CAAY,CAAE,GAAIU,CAAAA,EAAa,EAAA,CAAI,IAAA,CAAAC,CAAAA,CAAM,WAAA,CAAArG,CAAY,CAAC,CAAA,CACnEsF,EAAQ,OAAA,CAAQ1E,CAAAA,CAAE,yBAAyB,CAAC,CAAA,CAAA,CAE9CyE,CAAAA,KACF,CAgBA,CAAC,CACH","file":"chunk-COONHXCY.js","sourcesContent":["import { Checkbox, Col, Collapse, Row } from 'antd'\nimport type { CheckboxChangeEvent } from 'antd/es/checkbox'\nimport type { FC } from 'react'\nimport { useCallback, useEffect, useState, useTransition } from 'react'\n\nimport { useTranslation } from '@/locale'\n\nimport type { PermissionEnumItem } from '../../types'\n\ninterface PermissionCollapseProps {\n expand?: boolean\n permissions?: PermissionEnumItem[]\n readonly?: boolean\n value?: string[]\n onChange?: (value: string[]) => void\n}\n\nconst PermissionCollapse: FC<PermissionCollapseProps> = props => {\n const { permissions, readonly, expand, value, onChange } = props\n const [activeKey, setActiveKey] = useState<string[]>([])\n const [checkedMap, setCheckedMap] = useState<Record<string, boolean>>({})\n const [internalValue, setInternalValue] = useState<string[]>(value ?? [])\n const { t } = useTranslation()\n const [, startTransition] = useTransition()\n\n const onCollapseChange = useCallback((key: string | string[]) => {\n setActiveKey(key as string[])\n }, [])\n\n const getCheckedValue = (checkedValue: boolean, codes: string[]) => {\n let tempValue: string[] = []\n\n if (checkedValue) {\n tempValue = [...new Set(internalValue.concat(codes))]\n } else {\n tempValue = internalValue.slice()\n\n codes.forEach(code => {\n const index = tempValue.findIndex(item => item === code)\n if (index > -1) {\n tempValue.splice(index, 1)\n }\n })\n }\n\n return tempValue\n }\n\n const onCheckChange = (e: CheckboxChangeEvent, codes: string[]) => {\n const checkedValue = getCheckedValue(e.target.checked, codes)\n setInternalValue(checkedValue)\n onChange?.(checkedValue)\n }\n\n useEffect(() => {\n setInternalValue(value ?? [])\n }, [value])\n\n useEffect(() => {\n if (expand) {\n startTransition(() => {\n // 改变展开状态\n setActiveKey((permissions ?? []).map(({ category }) => category))\n })\n }\n }, [expand, permissions])\n\n useEffect(() => {\n const checkedValue = (permissions ?? []).reduce(\n (acc, curr) => {\n acc[curr.category] = curr.permissions.every(item => internalValue?.includes(item.value))\n return acc\n },\n {} as Record<string, boolean>,\n )\n\n setCheckedMap(checkedValue)\n }, [internalValue, permissions])\n\n const items = (permissions ?? []).map(item => ({\n key: item.category,\n label: item.category,\n extra: !readonly && (\n <Checkbox\n checked={checkedMap[item.category]}\n onChange={e => {\n onCheckChange(\n e,\n item.permissions?.map(permission => permission.value),\n )\n }}\n >\n {t('global.selectAll')}\n </Checkbox>\n ),\n children: (\n <Checkbox.Group className=\"w-full\" value={internalValue} disabled={readonly}>\n <Row gutter={[10, 10]} className=\"w-full\">\n {item.permissions?.map(permission => (\n <Col key={permission.value} span={6}>\n <Checkbox\n value={permission.value}\n onChange={e => {\n onCheckChange(e, [permission.value])\n }}\n >\n {permission.label}\n </Checkbox>\n </Col>\n ))}\n </Row>\n </Checkbox.Group>\n ),\n }))\n\n return (\n <Collapse className=\"w-full\" collapsible=\"header\" activeKey={activeKey} items={items} onChange={onCollapseChange} />\n )\n}\n\nexport default PermissionCollapse\n","import { Button, Card, Divider, Empty, Select, Skeleton, Space, Typography } from 'antd'\nimport type { FC } from 'react'\nimport { useEffect, useState } from 'react'\n\nimport { useTranslation } from '@/locale'\nimport { useGames } from '@/services'\n\nimport { useAllPermissionsV2 } from '../../services'\nimport type { RoleV2 } from '../../types'\nimport PermissionCollapse from '../permissionCollapse'\nimport type { PermissionListPropsBase } from './types'\n\nconst { Text } = Typography\nconst { Option } = Select\n\ninterface PermissionWithGameProps extends PermissionListPropsBase {\n value?: RoleV2['permissions']\n onChange?: (checkedValue: RoleV2['permissions']) => void\n}\n\nconst PermissionWithGame: FC<PermissionWithGameProps> = props => {\n const { expand = true, value, readonly, onChange } = props\n const { data: permission, isLoading: isPermissionLoading, error } = useAllPermissionsV2()\n const { data: games, isLoading: isGamesLoading } = useGames()\n const [gameList, setGameList] = useState<{ gameId: string; permissions: string[] }[]>([])\n const globalPermissions = permission?.filter(item => item.is_common)\n const gamePermissions = permission?.filter(item => !item.is_common)\n const isLoading = isPermissionLoading || isGamesLoading\n const { t } = useTranslation()\n\n useEffect(() => {\n const list: { gameId: string; permissions: string[] }[] = []\n\n Object.keys(value ?? {}).forEach(key => {\n if (key !== 'global') {\n list.push({ gameId: key, permissions: value?.[key] ?? [] })\n }\n })\n\n setGameList(list)\n }, [value])\n\n if (error) {\n return (\n <div className=\"flex justify-center\">\n <Text type=\"danger\">{t('PermissionList.failedDescription')}</Text>\n </div>\n )\n }\n\n const addGame = () => {\n setGameList(prev => [...prev, { gameId: '', permissions: [] }])\n }\n\n const removeGame = (index: number) => {\n setGameList(prev => prev.filter((_, i) => i !== index))\n }\n\n return (\n <div className=\"flex flex-col w-full\">\n <div className=\"mb-12\">\n <Divider dashed>{t('PermissionList.baseSectionTitle')}</Divider>\n </div>\n <Skeleton active loading={isLoading}>\n <PermissionCollapse\n value={value?.global}\n readonly={readonly}\n permissions={globalPermissions}\n expand={expand}\n onChange={newValue => {\n onChange?.({\n ...value,\n global: newValue,\n })\n }}\n />\n </Skeleton>\n <div className=\"my-12\">\n <Divider dashed>{t('PermissionList.gameSectionTitle')}</Divider>\n </div>\n {gameList.map((item, index) => (\n <Card\n title={\n <Space>\n <Text>{t('global.game')}</Text>\n {readonly ? (\n <Text>{games?.find(game => String(game.id) === item.gameId)?.name}</Text>\n ) : (\n <Select\n disabled={readonly}\n value={gameList[index].gameId || undefined}\n className=\"w-40\"\n placeholder={t('PermissionList.gameSelectPlaceholder')}\n onChange={selectedValue => {\n setGameList(pev => {\n const temp = pev.slice()\n temp[index].gameId = selectedValue\n return temp\n })\n }}\n >\n {games?.map(game => (\n <Option\n key={game.id}\n value={game.id}\n disabled={gameList.some(({ gameId }) => gameId === String(game.id))}\n >\n {game.name}\n </Option>\n ))}\n </Select>\n )}\n </Space>\n }\n key={index}\n className=\"mb-6\"\n extra={\n !readonly && (\n <Button\n type=\"link\"\n onClick={() => {\n removeGame(index)\n }}\n >\n {t('PermissionList.removeText')}\n </Button>\n )\n }\n >\n {gameList[index].gameId ? (\n <Skeleton active loading={isLoading}>\n <PermissionCollapse\n value={value?.[gameList[index].gameId]}\n readonly={readonly}\n expand={expand}\n permissions={gamePermissions}\n onChange={newValue => {\n onChange?.({\n ...value,\n [gameList[index].gameId]: newValue,\n })\n }}\n />\n </Skeleton>\n ) : (\n <Empty description={t('PermissionList.gameSectionDescription')} />\n )}\n </Card>\n ))}\n {!readonly && (\n <Button block type=\"dashed\" onClick={addGame}>\n {t('PermissionList.addText')}\n </Button>\n )}\n </div>\n )\n}\n\nexport default PermissionWithGame\n","import { Skeleton, Typography } from 'antd'\nimport type { FC } from 'react'\n\nimport { useTranslation } from '@/locale'\n\nimport { useAllPermissions } from '../../services'\nimport type { RoleV1 } from '../../types'\nimport PermissionCollapse from '../permissionCollapse'\nimport type { PermissionListPropsBase } from './types'\n\nconst { Text } = Typography\n\ninterface PermissionWithoutGameProps extends PermissionListPropsBase {\n value?: RoleV1['permissions']\n onChange?: (checkedValue: RoleV1['permissions']) => void\n}\n\nconst PermissionWithoutGame: FC<PermissionWithoutGameProps> = props => {\n const { expand = true, value, readonly, onChange } = props\n const { data: permissions, isLoading, error } = useAllPermissions()\n const { t } = useTranslation()\n\n if (error) {\n return (\n <div className=\"flex justify-center\">\n <Text type=\"danger\">{t('PermissionList.failedDescription')}</Text>\n </div>\n )\n }\n\n return (\n <Skeleton active loading={isLoading}>\n <PermissionCollapse\n value={value}\n permissions={permissions}\n readonly={readonly}\n expand={expand}\n onChange={onChange}\n />\n </Skeleton>\n )\n}\n\nexport default PermissionWithoutGame\n","import type { FC } from 'react'\n\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { PermissionMode } from '@/constants'\n\nimport type { RoleV1, RoleV2 } from '../../types'\nimport PermissionWithGame from './PermissionWithGame'\nimport PermissionWithoutGame from './PermissionWithoutGame'\nimport type { PermissionListPropsBase } from './types'\n\ninterface PermissionListProps extends PermissionListPropsBase {\n value?: RoleV1['permissions'] | RoleV2['permissions']\n onChange?: (checkedValue: RoleV1['permissions'] | RoleV2['permissions']) => void\n}\n\nconst PermissionList: FC<PermissionListProps> = (props: PermissionListProps) => {\n const { value } = props\n const {\n context: { permissionMode },\n } = useToolkitsStore()\n\n if (permissionMode === PermissionMode.GAME_SCOPED) {\n return <PermissionWithoutGame {...props} value={value as RoleV1['permissions']} />\n }\n\n return <PermissionWithGame {...props} value={value as RoleV2['permissions']} />\n}\n\nexport default PermissionList\n","import { App, Form, Input } from 'antd'\n\nimport { useFormModal } from '@/hooks/modal'\nimport { useTranslation } from '@/locale'\n\nimport PermissionList from '../components/permissionList'\nimport { useCreateRole, useUpdateRole } from '../services'\nimport type { RoleListItem, RoleV1, RoleV2 } from '../types'\n\nexport const useRoleModal = ({ mode, onSuccess }: { mode: 'create' | 'update'; onSuccess?: () => void }) => {\n const { message } = App.useApp()\n const { t } = useTranslation()\n const create = useCreateRole()\n const update = useUpdateRole()\n\n const isCreateMode = mode === 'create'\n\n const title = isCreateMode ? t('Role.createTitle') : t('Role.updateTitle')\n\n const content = (\n <>\n <Form.Item label={t('global.name')} name=\"name\" rules={[{ required: true }]}>\n <Input disabled={!isCreateMode} />\n </Form.Item>\n <Form.Item name=\"permissions\">\n <PermissionList />\n </Form.Item>\n </>\n )\n\n const onConfirm = async (\n values: { name: string; permissions: RoleListItem['permissions'] },\n extraValues: { id: number },\n ) => {\n const name = `role_${values.name}`\n const permissions = values.permissions\n\n if (isCreateMode) {\n await create.mutateAsync({ name, permissions })\n message.success(t('Role.createSuccessfully'))\n } else {\n await update.mutateAsync({ id: extraValues?.id, name, permissions })\n message.success(t('Role.updateSuccessfully'))\n }\n onSuccess?.()\n }\n\n return useFormModal<\n {\n name: string\n permissions: RoleV1['permissions'] | RoleV2['permissions']\n },\n { id: number }\n >({\n title,\n width: '1000px',\n formProps: {\n layout: 'vertical',\n },\n content,\n onConfirm,\n })\n}\n"]}
@@ -0,0 +1,206 @@
1
+ import { useAllRoles, useCreateUser, useUpdateUser } from './chunk-O7INKFFW.js';
2
+ import { useFormModal } from './chunk-QEUTBIBK.js';
3
+ import { useTranslation } from './chunk-6SMI25Y3.js';
4
+ import { __name, useToolkitsStore, useHttpGet, queryKeys, WILDCARD } from './chunk-Z7GW3RVV.js';
5
+ import { MinusCircleOutlined } from '@ant-design/icons';
6
+ import { useQuery } from '@tanstack/react-query';
7
+ import { Typography, App, Form, Input, Select, Row, Col, Empty, Button } from 'antd';
8
+ import { last, first } from 'lodash-es';
9
+ import { Fragment as Fragment$1 } from 'react';
10
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
11
+
12
+ var { Text } = Typography;
13
+ var handleWildcardSelection = /* @__PURE__ */ __name((value, onChange) => {
14
+ if (last(value) === WILDCARD) {
15
+ onChange?.([WILDCARD]);
16
+ } else if (first(value) === WILDCARD) {
17
+ onChange?.(value.slice(1));
18
+ } else {
19
+ onChange?.(value);
20
+ }
21
+ }, "handleWildcardSelection");
22
+ var GroupSelect = /* @__PURE__ */ __name((props) => {
23
+ const { onChange, ...rest } = props;
24
+ const get = useHttpGet();
25
+ const { data, isLoading } = useQuery({
26
+ queryKey: queryKeys.enums.gameGroups,
27
+ queryFn: /* @__PURE__ */ __name(() => get("/api/enum/get?enum=game_group&type=all"), "queryFn")
28
+ });
29
+ const options = [{ label: "\u901A\u7528", value: WILDCARD }].concat(
30
+ data?.map((group) => ({ label: group, value: group })) ?? []
31
+ );
32
+ return /* @__PURE__ */ jsx(
33
+ Select,
34
+ {
35
+ ...rest,
36
+ allowClear: true,
37
+ showSearch: true,
38
+ mode: "tags",
39
+ optionFilterProp: "label",
40
+ loading: isLoading,
41
+ options,
42
+ onChange: (value) => handleWildcardSelection(value, onChange)
43
+ }
44
+ );
45
+ }, "GroupSelect");
46
+ var GameSelect = /* @__PURE__ */ __name((props) => {
47
+ const { groups, onChange, ...rest } = props;
48
+ const get = useHttpGet();
49
+ const {
50
+ context: { permissionMode }
51
+ } = useToolkitsStore();
52
+ const isGroupBased = permissionMode === "group_based" /* GROUP_BASED */;
53
+ const isDirectGame = permissionMode === "direct_game" /* DIRECT_GAME */;
54
+ const { data, isLoading } = useQuery({
55
+ queryKey: queryKeys.enums.gameIds(isDirectGame ? [] : groups ?? []),
56
+ queryFn: /* @__PURE__ */ __name(() => get(`/api/enum/game_group/get_game_ids${isDirectGame ? "" : `?game_groups=${groups?.join(",")}`}`).then(
57
+ (response) => response?.list
58
+ ), "queryFn"),
59
+ enabled: isDirectGame || isGroupBased && !!groups?.length
60
+ });
61
+ const options = data?.map((group) => ({ label: group.name, value: group.id }));
62
+ return /* @__PURE__ */ jsx(
63
+ Select,
64
+ {
65
+ ...rest,
66
+ allowClear: true,
67
+ showSearch: true,
68
+ optionFilterProp: "label",
69
+ mode: "tags",
70
+ loading: isLoading,
71
+ options,
72
+ onChange: (value) => handleWildcardSelection(value, onChange)
73
+ }
74
+ );
75
+ }, "GameSelect");
76
+ var useUserModal = /* @__PURE__ */ __name(({ mode, onSuccess }) => {
77
+ const { message } = App.useApp();
78
+ const { t } = useTranslation();
79
+ const { data: roles, isLoading: isRolesLoading } = useAllRoles();
80
+ const create = useCreateUser();
81
+ const update = useUpdateUser();
82
+ const isCreateMode = mode === "create";
83
+ const title = isCreateMode ? t("User.createTitle") : t("User.updateTitle");
84
+ const {
85
+ context: { permissionMode }
86
+ } = useToolkitsStore();
87
+ const isGroupBased = permissionMode === "group_based" /* GROUP_BASED */;
88
+ const isGameScoped = permissionMode === "game_scoped" /* GAME_SCOPED */;
89
+ const content = isGameScoped ? /* @__PURE__ */ jsxs(Fragment, { children: [
90
+ /* @__PURE__ */ jsx(Form.Item, { label: t("global.name"), name: "name", rules: [{ required: true }], children: /* @__PURE__ */ jsx(Input, { disabled: !isCreateMode }) }),
91
+ /* @__PURE__ */ jsx(Form.Item, { label: t("global.role"), name: "roles", children: /* @__PURE__ */ jsx(
92
+ Select,
93
+ {
94
+ allowClear: true,
95
+ showSearch: true,
96
+ mode: "multiple",
97
+ loading: isRolesLoading,
98
+ optionFilterProp: "label",
99
+ options: roles?.map((role) => ({ label: role.name, value: role.name }))
100
+ }
101
+ ) })
102
+ ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
103
+ /* @__PURE__ */ jsx(Form.Item, { label: t("global.name"), name: "name", rules: [{ required: true }], children: /* @__PURE__ */ jsx(Input, { disabled: !isCreateMode }) }),
104
+ /* @__PURE__ */ jsx(Form.List, { name: "permissions", children: (fields, { add, remove }) => /* @__PURE__ */ jsxs(Row, { gutter: 8, children: [
105
+ isGroupBased && /* @__PURE__ */ jsx(Col, { span: 8, className: "text-center mb-4", children: /* @__PURE__ */ jsx(Text, { strong: true, children: t("global.projectGroup") }) }),
106
+ /* @__PURE__ */ jsx(Col, { span: isGroupBased ? 10 : 14, className: "text-center mb-4", children: /* @__PURE__ */ jsx(Text, { strong: true, children: t("global.game") }) }),
107
+ /* @__PURE__ */ jsx(Col, { span: isGroupBased ? 6 : 10, className: "text-center mb-4", children: /* @__PURE__ */ jsx(Text, { strong: true, children: t("global.role") }) }),
108
+ fields.map((field) => /* @__PURE__ */ jsxs(Fragment$1, { children: [
109
+ isGroupBased && /* @__PURE__ */ jsx(Col, { span: 8, children: /* @__PURE__ */ jsx(Form.Item, { noStyle: true, shouldUpdate: true, children: ({ setFieldValue }) => /* @__PURE__ */ jsx(Form.Item, { name: [field.name, "game_group"], children: /* @__PURE__ */ jsx(
110
+ GroupSelect,
111
+ {
112
+ onChange: () => {
113
+ setFieldValue(["permissions", field.name, "game_ids"], []);
114
+ }
115
+ }
116
+ ) }) }) }),
117
+ /* @__PURE__ */ jsx(Col, { span: isGroupBased ? 10 : 14, children: isGroupBased ? /* @__PURE__ */ jsx(
118
+ Form.Item,
119
+ {
120
+ noStyle: true,
121
+ shouldUpdate: (prevValues, nextValues) => prevValues.permissions[field.name]?.game_group !== nextValues.permissions[field.name]?.game_group,
122
+ children: ({ getFieldValue }) => {
123
+ const _groups = getFieldValue(["permissions", field.name, "game_group"]);
124
+ return /* @__PURE__ */ jsx(
125
+ Form.Item,
126
+ {
127
+ name: [field.name, "game_ids"],
128
+ dependencies: [["permissions", field.name, "game_group"]],
129
+ rules: [{ required: !!_groups?.length, message: "\u8BF7\u9009\u62E9\u6E38\u620F" }],
130
+ children: /* @__PURE__ */ jsx(GameSelect, { groups: _groups })
131
+ }
132
+ );
133
+ }
134
+ }
135
+ ) : /* @__PURE__ */ jsx(Form.Item, { name: [field.name, "game_ids"], rules: [{ required: true, message: "\u8BF7\u9009\u62E9\u6E38\u620F" }], children: /* @__PURE__ */ jsx(GameSelect, {}) }) }),
136
+ /* @__PURE__ */ jsx(Col, { span: isGroupBased ? 6 : 10, children: /* @__PURE__ */ jsxs("div", { className: "flex", children: [
137
+ /* @__PURE__ */ jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsx(
138
+ Form.Item,
139
+ {
140
+ name: [field.name, "role"],
141
+ rules: [
142
+ { required: true, message: "\u8BF7\u9009\u62E9\u89D2\u8272" },
143
+ ({ getFieldValue }) => ({
144
+ validator(_rule, value) {
145
+ const items = getFieldValue("permissions");
146
+ const otherItems = items?.filter((item, index) => !!item && index !== field.name) ?? [];
147
+ if (otherItems.some((item) => item.role === value)) {
148
+ return Promise.reject(new Error("\u8BF7\u52FF\u91CD\u590D\u9009\u62E9\u89D2\u8272"));
149
+ }
150
+ return Promise.resolve();
151
+ }
152
+ })
153
+ ],
154
+ children: /* @__PURE__ */ jsx(
155
+ Select,
156
+ {
157
+ allowClear: true,
158
+ showSearch: true,
159
+ optionFilterProp: "label",
160
+ loading: isRolesLoading,
161
+ options: roles?.map((role) => ({ label: role.name, value: role.name }))
162
+ }
163
+ )
164
+ }
165
+ ) }),
166
+ /* @__PURE__ */ jsx("div", { className: "w-8 text-center", children: /* @__PURE__ */ jsx(Form.Item, { children: /* @__PURE__ */ jsx(
167
+ MinusCircleOutlined,
168
+ {
169
+ onClick: () => {
170
+ remove(field.name);
171
+ }
172
+ }
173
+ ) }) })
174
+ ] }) })
175
+ ] }, field.key)),
176
+ fields.length === 0 && /* @__PURE__ */ jsx(Col, { span: 24, children: /* @__PURE__ */ jsx(Empty, { className: "mb-6" }) }),
177
+ /* @__PURE__ */ jsx(Col, { span: 24, children: /* @__PURE__ */ jsx(Button, { block: true, type: "dashed", onClick: () => add(), children: t("global.add") }) })
178
+ ] }) })
179
+ ] });
180
+ const onConfirm = /* @__PURE__ */ __name(async (values, extraValues) => {
181
+ if (isCreateMode) {
182
+ const submitData = isGameScoped ? { name: values.name, roles: values.roles } : { name: values.name, permissions: values.permissions };
183
+ await create.mutateAsync(submitData);
184
+ message.success(t("User.createSuccessfully"));
185
+ } else {
186
+ const submitData = isGameScoped ? { id: extraValues.id, name: values.name, roles: values.roles } : { id: extraValues.id, name: values.name, permissions: values.permissions };
187
+ await update.mutateAsync(submitData);
188
+ message.success(t("User.updateSuccessfully"));
189
+ }
190
+ onSuccess?.();
191
+ }, "onConfirm");
192
+ return useFormModal({
193
+ title,
194
+ width: isGameScoped ? "600px" : "1000px",
195
+ formProps: {
196
+ autoComplete: "off",
197
+ labelCol: { flex: "80px" }
198
+ },
199
+ content,
200
+ onConfirm
201
+ });
202
+ }, "useUserModal");
203
+
204
+ export { useUserModal };
205
+ //# sourceMappingURL=chunk-DBYHBFI6.js.map
206
+ //# sourceMappingURL=chunk-DBYHBFI6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/modules/permission/hooks/user-hooks.tsx"],"names":["Fragment"],"mappings":"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","file":"chunk-DBYHBFI6.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 { useHttpGet } 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 get = useHttpGet()\n\n const { data, isLoading } = useQuery({\n queryKey: queryKeys.enums.gameGroups,\n queryFn: () => 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 get = useHttpGet()\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 get<{\n list: {\n id: string\n name: string\n }[]\n }>(`/api/enum/game_group/get_game_ids${isDirectGame ? '' : `?game_groups=${groups?.join(',')}`}`).then(\n response => response?.list,\n ),\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"]}