react-toolkits 2.22.13 → 2.22.16

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 (40) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/lib/{chunk-ES6EDPL4.js → chunk-267EULS6.js} +2 -2
  3. package/lib/{chunk-ES6EDPL4.js.map → chunk-267EULS6.js.map} +1 -1
  4. package/lib/chunk-7KC4QGFG.js +2 -0
  5. package/lib/chunk-7KC4QGFG.js.map +1 -0
  6. package/lib/{chunk-MS25PZ5J.js → chunk-BKF7C4LV.js} +2 -2
  7. package/lib/{chunk-MS25PZ5J.js.map → chunk-BKF7C4LV.js.map} +1 -1
  8. package/lib/chunk-EKBAANKX.js +3 -0
  9. package/lib/chunk-EKBAANKX.js.map +1 -0
  10. package/lib/{chunk-XBISTSFI.js → chunk-EQKZ3442.js} +2 -2
  11. package/lib/{chunk-XBISTSFI.js.map → chunk-EQKZ3442.js.map} +1 -1
  12. package/lib/{chunk-LKQSOMD5.js → chunk-K227EWOS.js} +2 -2
  13. package/lib/{chunk-LKQSOMD5.js.map → chunk-K227EWOS.js.map} +1 -1
  14. package/lib/{chunk-7W2ZX3CB.js → chunk-MFVQ4PJU.js} +2 -2
  15. package/lib/{chunk-7W2ZX3CB.js.map → chunk-MFVQ4PJU.js.map} +1 -1
  16. package/lib/{chunk-JUD7AMBZ.js → chunk-T2ZOW3WL.js} +2 -2
  17. package/lib/{chunk-JUD7AMBZ.js.map → chunk-T2ZOW3WL.js.map} +1 -1
  18. package/lib/chunk-TLXOBLJT.js +2 -0
  19. package/lib/{chunk-JAGE2XCG.js.map → chunk-TLXOBLJT.js.map} +1 -1
  20. package/lib/{createMenuItem-PS7ABPSF.js → createMenuItem-Z5SGFFW4.js} +2 -2
  21. package/lib/{createMenuItem-PS7ABPSF.js.map → createMenuItem-Z5SGFFW4.js.map} +1 -1
  22. package/lib/index.js +1 -1
  23. package/lib/{menuItemList-LXN2NUCP.js → menuItemList-BOXALHYO.js} +2 -2
  24. package/lib/{menuItemList-LXN2NUCP.js.map → menuItemList-BOXALHYO.js.map} +1 -1
  25. package/lib/{roleDetail-VH4X743G.js → roleDetail-NQS6CEVO.js} +2 -2
  26. package/lib/{roleDetail-VH4X743G.js.map → roleDetail-NQS6CEVO.js.map} +1 -1
  27. package/lib/{roleList-RHX3D2HP.js → roleList-CZJYZNRP.js} +2 -2
  28. package/lib/{roleList-RHX3D2HP.js.map → roleList-CZJYZNRP.js.map} +1 -1
  29. package/lib/{updateMenuItem-M5U4T3L7.js → updateMenuItem-YNY4BC67.js} +2 -2
  30. package/lib/{updateMenuItem-M5U4T3L7.js.map → updateMenuItem-YNY4BC67.js.map} +1 -1
  31. package/lib/{userDetail-ODAEQUYS.js → userDetail-53CJQES3.js} +2 -2
  32. package/lib/{userDetail-ODAEQUYS.js.map → userDetail-53CJQES3.js.map} +1 -1
  33. package/lib/{userList-TSYEABRN.js → userList-NQKY4SV2.js} +2 -2
  34. package/lib/{userList-TSYEABRN.js.map → userList-NQKY4SV2.js.map} +1 -1
  35. package/package.json +1 -1
  36. package/lib/chunk-AGGPFMZE.js +0 -3
  37. package/lib/chunk-AGGPFMZE.js.map +0 -1
  38. package/lib/chunk-JAGE2XCG.js +0 -2
  39. package/lib/chunk-Q4PXPBQR.js +0 -2
  40. package/lib/chunk-Q4PXPBQR.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # react-toolkits
2
2
 
3
+ ## 2.22.16
4
+
5
+ ### Patch Changes
6
+
7
+ - 8f01420: fix(release.sh): update git tag handling to push tags instead of creating them; enhance useKy hook in usePermission to suppress error notifications
8
+
9
+ ## 2.22.15
10
+
11
+ ### Patch Changes
12
+
13
+ - b29440d: feat(react-toolkits): add UseKyOptions interface to customize useKy hook behavior
14
+
15
+ ## 2.22.14
16
+
17
+ ### Patch Changes
18
+
19
+ - a44312c: feat(react-toolkits): add UseKyOptions interface to customize useKy hook behavior
20
+
3
21
  ## 2.22.13
4
22
 
5
23
  ### Patch Changes
@@ -1,2 +1,2 @@
1
- import {a as a$1,f,g}from'./chunk-MS25PZ5J.js';import {d}from'./chunk-XBISTSFI.js';import {a}from'./chunk-JAGE2XCG.js';import {l,m,h}from'./chunk-AGGPFMZE.js';import {MinusCircleOutlined}from'@ant-design/icons';import {useQuery}from'@tanstack/react-query';import {App,Form,Input,Select,Row,Col,Empty,Button,Typography}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:T}=Typography,$=u=>{let{onChange:a,...r}=u,o=l(),{data:g,isLoading:d}=useQuery({queryKey:m.enums.gameGroups,queryFn:()=>o.get("/api/enum/get?enum=game_group&type=all")}),C=[{label:"\u901A\u7528",value:h}].concat(g?.map(s=>({label:s,value:s}))??[]);return jsx(Select,{...r,allowClear:!0,showSearch:!0,mode:"tags",optionFilterProp:"label",loading:d,options:C,onChange:s=>{last(s)===h?a?.([h]):first(s)===h?a?.(s.slice(1)):a?.(s);}})},z=u=>{let{groups:a,onChange:r,...o}=u,g=l(),{data:d,isLoading:C}=useQuery({queryKey:m.enums.gameIds(a||[]),queryFn:()=>g.get(`/api/enum/game_group/get_game_ids?game_groups=${a?.join(",")}`).then(t=>t?.list),enabled:!!a?.length}),h$1=d?.map(t=>({label:t.name,value:t.id}));return jsx(Select,{...o,allowClear:!0,showSearch:!0,optionFilterProp:"label",mode:"tags",loading:C,options:h$1,onChange:t=>{last(t)===h?r?.([h]):first(t)===h?r?.(t.slice(1)):r?.(t);}})},le=({mode:u,onSuccess:a$2})=>{let{message:r}=App.useApp(),{t:o}=a(),{data:g$1,isLoading:d$1}=a$1(),C=f(),h=g(),s=u==="create",t=o(s?"User.createTitle":"User.updateTitle"),S=jsxs(Fragment,{children:[jsx(Form.Item,{label:o("global.name"),name:"name",rules:[{required:!0}],children:jsx(Input,{disabled:!s})}),jsx(Form.Item,{label:o("global.role"),name:"roles",children:jsx(Select,{allowClear:!0,showSearch:!0,mode:"multiple",loading:d$1,optionFilterProp:"label",options:g$1?.map(n=>({label:n.name,value:n.name}))})})]});return d({title:t,width:"600px",formProps:{autoComplete:"off",labelCol:{flex:"80px"}},content:S,onConfirm:async(n,f)=>{s?(await C.mutateAsync(n),r.success(o("User.createSuccessfully"))):(await h.mutateAsync({...n,id:f?.id}),r.success(o("User.updateSuccessfully"))),a$2?.();}})},ie=({mode:u,onSuccess:a$2})=>{let{message:r}=App.useApp(),{t:o}=a(),{data:g$1,isLoading:d$1}=a$1(),C=f(),h=g(),s=u==="create",t=o(s?"User.createTitle":"User.updateTitle"),S=jsxs(Fragment,{children:[jsx(Form.Item,{label:o("global.name"),name:"name",rules:[{required:!0}],children:jsx(Input,{disabled:!s})}),jsx(Form.List,{name:"permissions",children:(n,{add:f,remove:R})=>jsxs(Row,{gutter:8,children:[jsx(Col,{span:8,className:"text-center mb-4",children:jsx(T,{strong:!0,children:o("global.projectGroup")})}),jsx(Col,{span:10,className:"text-center mb-4",children:jsx(T,{strong:!0,children:o("global.game")})}),jsx(Col,{span:6,className:"text-center mb-4",children:jsx(T,{strong:!0,children:o("global.role")})}),n.map(m=>jsxs(Fragment$1,{children:[jsx(Col,{span:8,children:jsx(Form.Item,{noStyle:!0,shouldUpdate:!0,children:({setFieldValue:l})=>jsx(Form.Item,{name:[m.name,"game_group"],children:jsx($,{onChange:()=>{l(["permissions",m.name,"game_ids"],[]);}})})})}),jsx(Col,{span:10,children:jsx(Form.Item,{noStyle:!0,shouldUpdate:(l,y)=>l.permissions[m.name]?.game_group!==y.permissions[m.name]?.game_group,children:({getFieldValue:l})=>{let y=l(["permissions",m.name,"game_group"]);return jsx(Form.Item,{name:[m.name,"game_ids"],dependencies:[["permissions",m.name,"game_group"]],rules:[{required:y?.length,message:"\u8BF7\u9009\u62E9\u6E38\u620F"}],children:jsx(z,{groups:y})})}})}),jsx(Col,{span:6,children:jsxs("div",{className:"flex",children:[jsx("div",{className:"flex-1",children:jsx(Form.Item,{name:[m.name,"role"],rules:[{required:!0,message:"\u8BF7\u9009\u62E9\u89D2\u8272"},({getFieldValue:l})=>({validator(y,K){return l("permissions").filter((I,j)=>!!I&&j!==m.name).some(I=>I.role===K)?Promise.reject(new Error("\u8BF7\u52FF\u91CD\u590D\u9009\u62E9\u89D2\u8272")):Promise.resolve()}})],children:jsx(Select,{allowClear:!0,showSearch:!0,optionFilterProp:"label",loading:d$1,options:g$1?.map(l=>({label:l.name,value:l.name}))})})}),jsx("div",{className:"w-8 text-center",children:jsx(Form.Item,{children:jsx(MinusCircleOutlined,{onClick:()=>{R(m.name);}})})})]})})]},m.key)),n.length===0&&jsx(Col,{span:24,children:jsx(Empty,{className:"mb-6"})}),jsx(Col,{span:24,children:jsx(Button,{block:!0,type:"dashed",onClick:()=>f(),children:o("global.add")})})]})})]});return d({title:t,width:"1000px",formProps:{autoComplete:"off",labelCol:{flex:"80px"}},content:S,onConfirm:async(n,f)=>{s?(await C.mutateAsync(n),r.success(o("User.createSuccessfully"))):(await h.mutateAsync({...n,id:f?.id}),r.success(o("User.updateSuccessfully"))),a$2?.();}})};export{le as a,ie as b};//# sourceMappingURL=chunk-ES6EDPL4.js.map
2
- //# sourceMappingURL=chunk-ES6EDPL4.js.map
1
+ import {a as a$1,f,g}from'./chunk-BKF7C4LV.js';import {d}from'./chunk-EQKZ3442.js';import {a}from'./chunk-TLXOBLJT.js';import {l,m,h}from'./chunk-EKBAANKX.js';import {MinusCircleOutlined}from'@ant-design/icons';import {useQuery}from'@tanstack/react-query';import {App,Form,Input,Select,Row,Col,Empty,Button,Typography}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:T}=Typography,$=u=>{let{onChange:a,...r}=u,o=l(),{data:g,isLoading:d}=useQuery({queryKey:m.enums.gameGroups,queryFn:()=>o.get("/api/enum/get?enum=game_group&type=all")}),C=[{label:"\u901A\u7528",value:h}].concat(g?.map(s=>({label:s,value:s}))??[]);return jsx(Select,{...r,allowClear:!0,showSearch:!0,mode:"tags",optionFilterProp:"label",loading:d,options:C,onChange:s=>{last(s)===h?a?.([h]):first(s)===h?a?.(s.slice(1)):a?.(s);}})},z=u=>{let{groups:a,onChange:r,...o}=u,g=l(),{data:d,isLoading:C}=useQuery({queryKey:m.enums.gameIds(a||[]),queryFn:()=>g.get(`/api/enum/game_group/get_game_ids?game_groups=${a?.join(",")}`).then(t=>t?.list),enabled:!!a?.length}),h$1=d?.map(t=>({label:t.name,value:t.id}));return jsx(Select,{...o,allowClear:!0,showSearch:!0,optionFilterProp:"label",mode:"tags",loading:C,options:h$1,onChange:t=>{last(t)===h?r?.([h]):first(t)===h?r?.(t.slice(1)):r?.(t);}})},le=({mode:u,onSuccess:a$2})=>{let{message:r}=App.useApp(),{t:o}=a(),{data:g$1,isLoading:d$1}=a$1(),C=f(),h=g(),s=u==="create",t=o(s?"User.createTitle":"User.updateTitle"),S=jsxs(Fragment,{children:[jsx(Form.Item,{label:o("global.name"),name:"name",rules:[{required:!0}],children:jsx(Input,{disabled:!s})}),jsx(Form.Item,{label:o("global.role"),name:"roles",children:jsx(Select,{allowClear:!0,showSearch:!0,mode:"multiple",loading:d$1,optionFilterProp:"label",options:g$1?.map(n=>({label:n.name,value:n.name}))})})]});return d({title:t,width:"600px",formProps:{autoComplete:"off",labelCol:{flex:"80px"}},content:S,onConfirm:async(n,f)=>{s?(await C.mutateAsync(n),r.success(o("User.createSuccessfully"))):(await h.mutateAsync({...n,id:f?.id}),r.success(o("User.updateSuccessfully"))),a$2?.();}})},ie=({mode:u,onSuccess:a$2})=>{let{message:r}=App.useApp(),{t:o}=a(),{data:g$1,isLoading:d$1}=a$1(),C=f(),h=g(),s=u==="create",t=o(s?"User.createTitle":"User.updateTitle"),S=jsxs(Fragment,{children:[jsx(Form.Item,{label:o("global.name"),name:"name",rules:[{required:!0}],children:jsx(Input,{disabled:!s})}),jsx(Form.List,{name:"permissions",children:(n,{add:f,remove:R})=>jsxs(Row,{gutter:8,children:[jsx(Col,{span:8,className:"text-center mb-4",children:jsx(T,{strong:!0,children:o("global.projectGroup")})}),jsx(Col,{span:10,className:"text-center mb-4",children:jsx(T,{strong:!0,children:o("global.game")})}),jsx(Col,{span:6,className:"text-center mb-4",children:jsx(T,{strong:!0,children:o("global.role")})}),n.map(m=>jsxs(Fragment$1,{children:[jsx(Col,{span:8,children:jsx(Form.Item,{noStyle:!0,shouldUpdate:!0,children:({setFieldValue:l})=>jsx(Form.Item,{name:[m.name,"game_group"],children:jsx($,{onChange:()=>{l(["permissions",m.name,"game_ids"],[]);}})})})}),jsx(Col,{span:10,children:jsx(Form.Item,{noStyle:!0,shouldUpdate:(l,y)=>l.permissions[m.name]?.game_group!==y.permissions[m.name]?.game_group,children:({getFieldValue:l})=>{let y=l(["permissions",m.name,"game_group"]);return jsx(Form.Item,{name:[m.name,"game_ids"],dependencies:[["permissions",m.name,"game_group"]],rules:[{required:y?.length,message:"\u8BF7\u9009\u62E9\u6E38\u620F"}],children:jsx(z,{groups:y})})}})}),jsx(Col,{span:6,children:jsxs("div",{className:"flex",children:[jsx("div",{className:"flex-1",children:jsx(Form.Item,{name:[m.name,"role"],rules:[{required:!0,message:"\u8BF7\u9009\u62E9\u89D2\u8272"},({getFieldValue:l})=>({validator(y,K){return l("permissions").filter((I,j)=>!!I&&j!==m.name).some(I=>I.role===K)?Promise.reject(new Error("\u8BF7\u52FF\u91CD\u590D\u9009\u62E9\u89D2\u8272")):Promise.resolve()}})],children:jsx(Select,{allowClear:!0,showSearch:!0,optionFilterProp:"label",loading:d$1,options:g$1?.map(l=>({label:l.name,value:l.name}))})})}),jsx("div",{className:"w-8 text-center",children:jsx(Form.Item,{children:jsx(MinusCircleOutlined,{onClick:()=>{R(m.name);}})})})]})})]},m.key)),n.length===0&&jsx(Col,{span:24,children:jsx(Empty,{className:"mb-6"})}),jsx(Col,{span:24,children:jsx(Button,{block:!0,type:"dashed",onClick:()=>f(),children:o("global.add")})})]})})]});return d({title:t,width:"1000px",formProps:{autoComplete:"off",labelCol:{flex:"80px"}},content:S,onConfirm:async(n,f)=>{s?(await C.mutateAsync(n),r.success(o("User.createSuccessfully"))):(await h.mutateAsync({...n,id:f?.id}),r.success(o("User.updateSuccessfully"))),a$2?.();}})};export{le as a,ie as b};//# sourceMappingURL=chunk-267EULS6.js.map
2
+ //# sourceMappingURL=chunk-267EULS6.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/modules/permission/hooks/user-hooks.tsx"],"names":["Text","Typography","GroupSelect","props","onChange","rest","ky","useKy","data","isLoading","useQuery","queryKeys","options","WILDCARD","group","jsx","Select","value","last","first","GameSelect","groups","response","useUserModal","mode","onSuccess","message","App","t","useTranslation","roles","isRolesLoading","useAllRoles","create","useCreateUser","update","useUpdateUser","isCreateMode","title","content","jsxs","Fragment","Form","Input","role","useFormModal","values","extraValues","useUserModalV2","fields","add","remove","Row","Col","field","setFieldValue","prevValues","nextValues","getFieldValue","_groups","_rule","item","index","MinusCircleOutlined","Empty","Button"],"mappings":"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","file":"chunk-ES6EDPL4.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 { WILDCARD } from '@/constants'\nimport { useFormModal } from '@/hooks/modal'\nimport { useKy } from '@/libs'\nimport { useTranslation } from '@/locale'\nimport { queryKeys } from '@/queryKeys'\n\nimport { useAllRoles, useCreateUser, useUpdateUser } from '../services'\n\nconst { Text } = Typography\n\ninterface GroupSelectProps {\n value?: string[]\n onChange?: (value: string[]) => void\n}\n\nconst GroupSelect: FC<GroupSelectProps> = props => {\n const { onChange, ...rest } = props\n const ky = useKy()\n\n const { data, isLoading } = useQuery({\n queryKey: queryKeys.enums.gameGroups,\n queryFn: () => ky.get<string[]>('/api/enum/get?enum=game_group&type=all'),\n })\n\n const options = [{ label: '通用', value: WILDCARD }].concat(\n data?.map(group => ({ label: group, value: group })) ?? [],\n )\n\n const onValueChange = (value: string[]) => {\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\n return (\n <Select\n {...rest}\n allowClear\n showSearch\n mode=\"tags\"\n optionFilterProp=\"label\"\n loading={isLoading}\n options={options}\n onChange={onValueChange}\n />\n )\n}\n\ninterface GameSelectProps {\n groups?: string[]\n value?: string[]\n onChange?: (value: string[]) => void\n}\n\nconst GameSelect: FC<GameSelectProps> = props => {\n const { groups, onChange, ...rest } = props\n const ky = useKy()\n\n const { data, isLoading } = useQuery({\n queryKey: queryKeys.enums.gameIds(groups || []),\n queryFn: () =>\n ky\n .get<{\n list: {\n id: string\n name: string\n }[]\n }>(`/api/enum/game_group/get_game_ids?game_groups=${groups?.join(',')}`)\n .then(response => response?.list),\n enabled: !!groups?.length,\n })\n\n const options = data?.map((group: { id: string; name: string }) => ({ label: group.name, value: group.id }))\n\n const onValueChange = (value: string[]) => {\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\n return (\n <Select\n {...rest}\n allowClear\n showSearch\n optionFilterProp=\"label\"\n mode=\"tags\"\n loading={isLoading}\n options={options}\n onChange={onValueChange}\n />\n )\n}\n\ninterface UserModalFormSchema {\n name: string\n roles: string[]\n}\n\nexport const useUserModal = ({ mode, onSuccess }: { mode: 'create' | 'update'; onSuccess?: () => void }) => {\n const { message } = App.useApp()\n const { t } = useTranslation()\n const { data: roles, isLoading: isRolesLoading } = useAllRoles()\n const create = useCreateUser()\n const update = useUpdateUser()\n\n const isCreateMode = mode === 'create'\n\n const title = isCreateMode ? t('User.createTitle') : t('User.updateTitle')\n\n const content = (\n <>\n <Form.Item label={t('global.name')} name=\"name\" rules={[{ required: true }]}>\n <Input disabled={!isCreateMode} />\n </Form.Item>\n <Form.Item label={t('global.role')} name=\"roles\">\n <Select\n allowClear\n showSearch\n mode=\"multiple\"\n loading={isRolesLoading}\n optionFilterProp=\"label\"\n options={roles?.map(role => ({ label: role.name, value: role.name }))}\n />\n </Form.Item>\n </>\n )\n\n const onConfirm = async (values: UserModalFormSchema, extraValues: { id: string }) => {\n if (isCreateMode) {\n await create.mutateAsync(values)\n message.success(t('User.createSuccessfully'))\n } else {\n await update.mutateAsync({ ...values, id: extraValues?.id })\n message.success(t('User.updateSuccessfully'))\n }\n onSuccess?.()\n }\n\n return useFormModal<UserModalFormSchema, { id: string }>({\n title,\n width: '600px',\n formProps: {\n autoComplete: 'off',\n labelCol: { flex: '80px' },\n },\n content,\n onConfirm,\n })\n}\n\ninterface UserModalV2FormSchema {\n name: string\n permissions: {\n game_group: string[]\n game_ids: string[]\n role: string\n }[]\n}\n\nexport const useUserModalV2 = ({ mode, onSuccess }: { mode: 'create' | 'update'; onSuccess?: () => void }) => {\n const { message } = App.useApp()\n const { t } = useTranslation()\n const { data: roles, isLoading: isRolesLoading } = useAllRoles()\n const create = useCreateUser()\n const update = useUpdateUser()\n\n const isCreateMode = mode === 'create'\n\n const title = isCreateMode ? t('User.createTitle') : t('User.updateTitle')\n\n const content = (\n <>\n <Form.Item label={t('global.name')} name=\"name\" rules={[{ required: true }]}>\n <Input disabled={!isCreateMode} />\n </Form.Item>\n <Form.List name=\"permissions\">\n {(fields, { add, remove }) => (\n <Row gutter={8}>\n <Col span={8} className=\"text-center mb-4\">\n <Text strong>{t('global.projectGroup')}</Text>\n </Col>\n <Col span={10} className=\"text-center mb-4\">\n <Text strong>{t('global.game')}</Text>\n </Col>\n <Col span={6} className=\"text-center mb-4\">\n <Text strong>{t('global.role')}</Text>\n </Col>\n {fields.map(field => (\n <Fragment key={field.key}>\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 <Col span={10}>\n <Form.Item\n noStyle\n shouldUpdate={(prevValues, nextValues) =>\n prevValues.permissions[field.name]?.game_group !== 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 </Col>\n <Col span={6}>\n <div className=\"flex\">\n <div className=\"flex-1\">\n <Form.Item\n name={[field.name, 'role']}\n rules={[\n { required: true, message: '请选择角色' },\n ({ getFieldValue }) => ({\n validator(_rule, value) {\n const items = getFieldValue('permissions') as UserModalV2FormSchema['permissions']\n const otherItems = items.filter((item, index) => !!item && index !== field.name)\n if (otherItems.some(item => item.role === value)) {\n return Promise.reject(new Error('请勿重复选择角色'))\n }\n return Promise.resolve()\n },\n }),\n ]}\n >\n <Select\n allowClear\n showSearch\n optionFilterProp=\"label\"\n loading={isRolesLoading}\n options={roles?.map(role => ({ label: role.name, value: role.name }))}\n />\n </Form.Item>\n </div>\n <div className=\"w-8 text-center\">\n <Form.Item>\n <MinusCircleOutlined\n onClick={() => {\n remove(field.name)\n }}\n />\n </Form.Item>\n </div>\n </div>\n </Col>\n </Fragment>\n ))}\n {fields.length === 0 && (\n <Col span={24}>\n <Empty className=\"mb-6\" />\n </Col>\n )}\n <Col span={24}>\n <Button block type=\"dashed\" onClick={() => add()}>\n {t('global.add')}\n </Button>\n </Col>\n </Row>\n )}\n </Form.List>\n </>\n )\n\n const onConfirm = async (values: UserModalV2FormSchema, extraValues: { id: string }) => {\n if (isCreateMode) {\n await create.mutateAsync(values)\n message.success(t('User.createSuccessfully'))\n } else {\n await update.mutateAsync({ ...values, id: extraValues?.id })\n message.success(t('User.updateSuccessfully'))\n }\n onSuccess?.()\n }\n\n return useFormModal<UserModalV2FormSchema, { id: string }>({\n title,\n width: '1000px',\n formProps: {\n autoComplete: 'off',\n labelCol: { flex: '80px' },\n },\n content,\n onConfirm,\n })\n}\n"]}
1
+ {"version":3,"sources":["../src/modules/permission/hooks/user-hooks.tsx"],"names":["Text","Typography","GroupSelect","props","onChange","rest","ky","useKy","data","isLoading","useQuery","queryKeys","options","WILDCARD","group","jsx","Select","value","last","first","GameSelect","groups","response","useUserModal","mode","onSuccess","message","App","t","useTranslation","roles","isRolesLoading","useAllRoles","create","useCreateUser","update","useUpdateUser","isCreateMode","title","content","jsxs","Fragment","Form","Input","role","useFormModal","values","extraValues","useUserModalV2","fields","add","remove","Row","Col","field","setFieldValue","prevValues","nextValues","getFieldValue","_groups","_rule","item","index","MinusCircleOutlined","Empty","Button"],"mappings":"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","file":"chunk-267EULS6.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 { WILDCARD } from '@/constants'\nimport { useFormModal } from '@/hooks/modal'\nimport { useKy } from '@/libs'\nimport { useTranslation } from '@/locale'\nimport { queryKeys } from '@/queryKeys'\n\nimport { useAllRoles, useCreateUser, useUpdateUser } from '../services'\n\nconst { Text } = Typography\n\ninterface GroupSelectProps {\n value?: string[]\n onChange?: (value: string[]) => void\n}\n\nconst GroupSelect: FC<GroupSelectProps> = props => {\n const { onChange, ...rest } = props\n const ky = useKy()\n\n const { data, isLoading } = useQuery({\n queryKey: queryKeys.enums.gameGroups,\n queryFn: () => ky.get<string[]>('/api/enum/get?enum=game_group&type=all'),\n })\n\n const options = [{ label: '通用', value: WILDCARD }].concat(\n data?.map(group => ({ label: group, value: group })) ?? [],\n )\n\n const onValueChange = (value: string[]) => {\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\n return (\n <Select\n {...rest}\n allowClear\n showSearch\n mode=\"tags\"\n optionFilterProp=\"label\"\n loading={isLoading}\n options={options}\n onChange={onValueChange}\n />\n )\n}\n\ninterface GameSelectProps {\n groups?: string[]\n value?: string[]\n onChange?: (value: string[]) => void\n}\n\nconst GameSelect: FC<GameSelectProps> = props => {\n const { groups, onChange, ...rest } = props\n const ky = useKy()\n\n const { data, isLoading } = useQuery({\n queryKey: queryKeys.enums.gameIds(groups || []),\n queryFn: () =>\n ky\n .get<{\n list: {\n id: string\n name: string\n }[]\n }>(`/api/enum/game_group/get_game_ids?game_groups=${groups?.join(',')}`)\n .then(response => response?.list),\n enabled: !!groups?.length,\n })\n\n const options = data?.map((group: { id: string; name: string }) => ({ label: group.name, value: group.id }))\n\n const onValueChange = (value: string[]) => {\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\n return (\n <Select\n {...rest}\n allowClear\n showSearch\n optionFilterProp=\"label\"\n mode=\"tags\"\n loading={isLoading}\n options={options}\n onChange={onValueChange}\n />\n )\n}\n\ninterface UserModalFormSchema {\n name: string\n roles: string[]\n}\n\nexport const useUserModal = ({ mode, onSuccess }: { mode: 'create' | 'update'; onSuccess?: () => void }) => {\n const { message } = App.useApp()\n const { t } = useTranslation()\n const { data: roles, isLoading: isRolesLoading } = useAllRoles()\n const create = useCreateUser()\n const update = useUpdateUser()\n\n const isCreateMode = mode === 'create'\n\n const title = isCreateMode ? t('User.createTitle') : t('User.updateTitle')\n\n const content = (\n <>\n <Form.Item label={t('global.name')} name=\"name\" rules={[{ required: true }]}>\n <Input disabled={!isCreateMode} />\n </Form.Item>\n <Form.Item label={t('global.role')} name=\"roles\">\n <Select\n allowClear\n showSearch\n mode=\"multiple\"\n loading={isRolesLoading}\n optionFilterProp=\"label\"\n options={roles?.map(role => ({ label: role.name, value: role.name }))}\n />\n </Form.Item>\n </>\n )\n\n const onConfirm = async (values: UserModalFormSchema, extraValues: { id: string }) => {\n if (isCreateMode) {\n await create.mutateAsync(values)\n message.success(t('User.createSuccessfully'))\n } else {\n await update.mutateAsync({ ...values, id: extraValues?.id })\n message.success(t('User.updateSuccessfully'))\n }\n onSuccess?.()\n }\n\n return useFormModal<UserModalFormSchema, { id: string }>({\n title,\n width: '600px',\n formProps: {\n autoComplete: 'off',\n labelCol: { flex: '80px' },\n },\n content,\n onConfirm,\n })\n}\n\ninterface UserModalV2FormSchema {\n name: string\n permissions: {\n game_group: string[]\n game_ids: string[]\n role: string\n }[]\n}\n\nexport const useUserModalV2 = ({ mode, onSuccess }: { mode: 'create' | 'update'; onSuccess?: () => void }) => {\n const { message } = App.useApp()\n const { t } = useTranslation()\n const { data: roles, isLoading: isRolesLoading } = useAllRoles()\n const create = useCreateUser()\n const update = useUpdateUser()\n\n const isCreateMode = mode === 'create'\n\n const title = isCreateMode ? t('User.createTitle') : t('User.updateTitle')\n\n const content = (\n <>\n <Form.Item label={t('global.name')} name=\"name\" rules={[{ required: true }]}>\n <Input disabled={!isCreateMode} />\n </Form.Item>\n <Form.List name=\"permissions\">\n {(fields, { add, remove }) => (\n <Row gutter={8}>\n <Col span={8} className=\"text-center mb-4\">\n <Text strong>{t('global.projectGroup')}</Text>\n </Col>\n <Col span={10} className=\"text-center mb-4\">\n <Text strong>{t('global.game')}</Text>\n </Col>\n <Col span={6} className=\"text-center mb-4\">\n <Text strong>{t('global.role')}</Text>\n </Col>\n {fields.map(field => (\n <Fragment key={field.key}>\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 <Col span={10}>\n <Form.Item\n noStyle\n shouldUpdate={(prevValues, nextValues) =>\n prevValues.permissions[field.name]?.game_group !== 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 </Col>\n <Col span={6}>\n <div className=\"flex\">\n <div className=\"flex-1\">\n <Form.Item\n name={[field.name, 'role']}\n rules={[\n { required: true, message: '请选择角色' },\n ({ getFieldValue }) => ({\n validator(_rule, value) {\n const items = getFieldValue('permissions') as UserModalV2FormSchema['permissions']\n const otherItems = items.filter((item, index) => !!item && index !== field.name)\n if (otherItems.some(item => item.role === value)) {\n return Promise.reject(new Error('请勿重复选择角色'))\n }\n return Promise.resolve()\n },\n }),\n ]}\n >\n <Select\n allowClear\n showSearch\n optionFilterProp=\"label\"\n loading={isRolesLoading}\n options={roles?.map(role => ({ label: role.name, value: role.name }))}\n />\n </Form.Item>\n </div>\n <div className=\"w-8 text-center\">\n <Form.Item>\n <MinusCircleOutlined\n onClick={() => {\n remove(field.name)\n }}\n />\n </Form.Item>\n </div>\n </div>\n </Col>\n </Fragment>\n ))}\n {fields.length === 0 && (\n <Col span={24}>\n <Empty className=\"mb-6\" />\n </Col>\n )}\n <Col span={24}>\n <Button block type=\"dashed\" onClick={() => add()}>\n {t('global.add')}\n </Button>\n </Col>\n </Row>\n )}\n </Form.List>\n </>\n )\n\n const onConfirm = async (values: UserModalV2FormSchema, extraValues: { id: string }) => {\n if (isCreateMode) {\n await create.mutateAsync(values)\n message.success(t('User.createSuccessfully'))\n } else {\n await update.mutateAsync({ ...values, id: extraValues?.id })\n message.success(t('User.updateSuccessfully'))\n }\n onSuccess?.()\n }\n\n return useFormModal<UserModalV2FormSchema, { id: string }>({\n title,\n width: '1000px',\n formProps: {\n autoComplete: 'off',\n labelCol: { flex: '80px' },\n },\n content,\n onConfirm,\n })\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import {l,i,m,e}from'./chunk-EKBAANKX.js';import {useQuery}from'@tanstack/react-query';function I(e,s){let t=l({suppressErrorNotification:!0}),{permissionVersion:r}=i(),n=typeof e<"u"?typeof e=="string"?[e]:e:[],l$1=r!=="v1"?"v2":"v1",{data:o,...c}=useQuery({queryKey:m.permissions.check(n,l$1),queryFn:()=>t.post(r!=="v1"?"/api/usystem/user/checkV2":"/api/usystem/user/check",{permissions:n},s),enabled:n.length>0}),u=!0;return typeof e=="string"?u=o?.has_all?!0:o?.[e]??!1:Array.isArray(e)&&e.length>0&&(u=n.reduce((f,g)=>(f[g]=o?.has_all?!0:o?.[g]??!1,f),{})),{...c,data:u}}function K(){let{signInPath:e$1,gameId:s}=i(),t=l();return useQuery({queryKey:m.menus.navbar(s?String(s):void 0),queryFn:()=>t.get("/api/usystem/menu/navbar",{headers:{[e]:s?encodeURIComponent(String(s)):"global"}}),enabled:window.location.pathname!==e$1})}var v=()=>{let{gameApiV2:e$1,permissionVersion:s}=i(),t=l({suppressErrorNotification:!0});return useQuery({queryKey:m.enums.gameGroups,queryFn:async()=>{let r={headers:{[e]:"global"}};return e$1?(await t.get("/api/game/list",r))?.list??[]:await t.get("/api/usystem/game/all",r)??[]},enabled:s!=="v1",staleTime:1/0,retry:!1})};export{I as a,K as b,v as c};//# sourceMappingURL=chunk-7KC4QGFG.js.map
2
+ //# sourceMappingURL=chunk-7KC4QGFG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/services/index.ts"],"names":["usePermission","code","config","ky","useKy","permissionVersion","useToolkitsStore","permissionCodes","version","data","rest","useQuery","queryKeys","newData","acc","curr","useMenuList","signInPath","gameId","APP_ID_HEADER","useGames","gameApiV2","requestConfig"],"mappings":"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","file":"chunk-7KC4QGFG.js","sourcesContent":["import { useQuery } from '@tanstack/react-query'\nimport type { Options as KyOptions } from 'ky'\n\nimport type { Game } from '@/components/layout/types'\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { APP_ID_HEADER, PermissionVersion } from '@/constants'\nimport { useKy } from '@/libs'\nimport { queryKeys } from '@/queryKeys'\nimport type { MenuListItem } from '@/types'\n\nexport function usePermission(code?: string | string[], config?: KyOptions) {\n const ky = useKy({ suppressErrorNotification: true })\n const { permissionVersion } = useToolkitsStore()\n const permissionCodes: string[] = typeof code !== 'undefined' ? (typeof code === 'string' ? [code] : code) : []\n const version = permissionVersion !== PermissionVersion.V1 ? 'v2' : 'v1'\n\n const { data, ...rest } = useQuery({\n queryKey: queryKeys.permissions.check(permissionCodes, version),\n queryFn: () =>\n ky.post<Record<string, boolean> & { has_all?: boolean }>(\n permissionVersion !== PermissionVersion.V1 ? '/api/usystem/user/checkV2' : '/api/usystem/user/check',\n {\n permissions: permissionCodes,\n },\n config,\n ),\n enabled: permissionCodes.length > 0,\n })\n\n let newData: boolean | Record<string, boolean> = true\n\n if (typeof code === 'string') {\n newData = data?.has_all ? true : (data?.[code] ?? false)\n } else if (Array.isArray(code) && code.length > 0) {\n newData = permissionCodes.reduce<Record<string, boolean>>((acc, curr) => {\n acc[curr] = data?.has_all ? true : (data?.[curr] ?? false)\n return acc\n }, {})\n }\n\n return {\n ...rest,\n data: newData,\n }\n}\n\nexport function useMenuList() {\n const { signInPath, gameId } = useToolkitsStore()\n const ky = useKy()\n\n return useQuery({\n queryKey: queryKeys.menus.navbar(gameId ? String(gameId) : undefined),\n queryFn: () =>\n ky.get<MenuListItem[]>('/api/usystem/menu/navbar', {\n headers: { [APP_ID_HEADER]: gameId ? encodeURIComponent(String(gameId)) : 'global' },\n }),\n enabled: window.location.pathname !== signInPath,\n })\n}\n\nexport const useGames = () => {\n const { gameApiV2, permissionVersion } = useToolkitsStore()\n const ky = useKy({ suppressErrorNotification: true })\n\n return useQuery({\n queryKey: queryKeys.enums.gameGroups, // 复用现有的 key,或者可以创建专门的 games key\n queryFn: async () => {\n const requestConfig = {\n headers: {\n [APP_ID_HEADER]: 'global',\n },\n }\n\n if (gameApiV2) {\n const response = await ky.get<{ list: Game[] }>('/api/game/list', requestConfig)\n return response?.list ?? []\n }\n\n const response = await ky.get<Game[]>('/api/usystem/game/all', requestConfig)\n return response ?? []\n },\n enabled: permissionVersion !== PermissionVersion.V1,\n staleTime: Infinity,\n retry: false,\n })\n}\n"]}
@@ -1,2 +1,2 @@
1
- import {l,m,i}from'./chunk-AGGPFMZE.js';import {useQuery,useQueryClient,useMutation}from'@tanstack/react-query';function q(){let e=l();return useQuery({queryKey:m.roles.all,queryFn:()=>e.get("/api/usystem/role/all")})}function f(e){let t=i(o=>o.permissionVersion),r=l(),n=t==="v2"?"v2":"v1";return useQuery({queryKey:m.roles.detail(e,n),queryFn:()=>r.get(`/api/usystem/role/${n==="v2"?"infoV2":"info"}?name=${e}`)})}function v(){let{permissionVersion:e}=i(o=>o),t=l(),r=useQueryClient(),n=e==="v2"?"v2":"v1";return useMutation({mutationKey:m.roles.create(n),mutationFn:({name:o,permissions:y})=>t.post(n==="v2"?"/api/usystem/role/createV2":"/api/usystem/role/create",{name:o,permissions:y}),onSuccess:()=>{r.invalidateQueries({queryKey:m.roles.all});}})}function K(){let{permissionVersion:e}=i(o=>o),t=l(),r=useQueryClient(),n=e==="v2"?"v2":"v1";return useMutation({mutationKey:m.roles.update(n),mutationFn:({id:o,name:y,permissions:p})=>t.post(n==="v2"?"/api/usystem/role/updateV2":"/api/usystem/role/update",{id:o,name:y,permissions:p}),onSuccess:()=>{r.invalidateQueries({queryKey:m.roles.all});}})}function R(){let e=l(),t=useQueryClient();return useMutation({mutationKey:m.roles.delete,mutationFn:({id:r,name:n})=>e.post("/api/usystem/role/delete",{id:r,name:n}),onSuccess:()=>{t.invalidateQueries({queryKey:m.roles.all});}})}function k(){let e=l(),t=useQueryClient();return useMutation({mutationKey:m.users.create,mutationFn:r=>e.post("/api/usystem/user/create",r),onSuccess:()=>{t.invalidateQueries({queryKey:m.users.all});}})}function x(){let e=l(),t=useQueryClient();return useMutation({mutationKey:m.users.update,mutationFn:r=>e.post("/api/usystem/user/update",r),onSuccess:()=>{t.invalidateQueries({queryKey:m.users.all});}})}function F(){let e=l(),t=useQueryClient();return useMutation({mutationKey:m.users.delete,mutationFn:({id:r,name:n})=>e.post("/api/usystem/user/delete",{id:r,name:n}),onSuccess:()=>{t.invalidateQueries({queryKey:m.users.all});}})}function P(){let e=l();return useQuery({queryKey:m.permissions.allPermissions,queryFn:()=>e.get("/api/usystem/user/allPermssions"),staleTime:1/0})}function C(){let e=l();return useQuery({queryKey:m.permissions.allPermissionsV2,queryFn:()=>e.get("/api/usystem/user/allPermssionsV2"),staleTime:1/0})}export{q as a,f as b,v as c,K as d,R as e,k as f,x as g,F as h,P as i,C as j};//# sourceMappingURL=chunk-MS25PZ5J.js.map
2
- //# sourceMappingURL=chunk-MS25PZ5J.js.map
1
+ import {l,m,i}from'./chunk-EKBAANKX.js';import {useQuery,useQueryClient,useMutation}from'@tanstack/react-query';function q(){let e=l();return useQuery({queryKey:m.roles.all,queryFn:()=>e.get("/api/usystem/role/all")})}function f(e){let t=i(o=>o.permissionVersion),r=l(),n=t==="v2"?"v2":"v1";return useQuery({queryKey:m.roles.detail(e,n),queryFn:()=>r.get(`/api/usystem/role/${n==="v2"?"infoV2":"info"}?name=${e}`)})}function v(){let{permissionVersion:e}=i(o=>o),t=l(),r=useQueryClient(),n=e==="v2"?"v2":"v1";return useMutation({mutationKey:m.roles.create(n),mutationFn:({name:o,permissions:y})=>t.post(n==="v2"?"/api/usystem/role/createV2":"/api/usystem/role/create",{name:o,permissions:y}),onSuccess:()=>{r.invalidateQueries({queryKey:m.roles.all});}})}function K(){let{permissionVersion:e}=i(o=>o),t=l(),r=useQueryClient(),n=e==="v2"?"v2":"v1";return useMutation({mutationKey:m.roles.update(n),mutationFn:({id:o,name:y,permissions:p})=>t.post(n==="v2"?"/api/usystem/role/updateV2":"/api/usystem/role/update",{id:o,name:y,permissions:p}),onSuccess:()=>{r.invalidateQueries({queryKey:m.roles.all});}})}function R(){let e=l(),t=useQueryClient();return useMutation({mutationKey:m.roles.delete,mutationFn:({id:r,name:n})=>e.post("/api/usystem/role/delete",{id:r,name:n}),onSuccess:()=>{t.invalidateQueries({queryKey:m.roles.all});}})}function k(){let e=l(),t=useQueryClient();return useMutation({mutationKey:m.users.create,mutationFn:r=>e.post("/api/usystem/user/create",r),onSuccess:()=>{t.invalidateQueries({queryKey:m.users.all});}})}function x(){let e=l(),t=useQueryClient();return useMutation({mutationKey:m.users.update,mutationFn:r=>e.post("/api/usystem/user/update",r),onSuccess:()=>{t.invalidateQueries({queryKey:m.users.all});}})}function F(){let e=l(),t=useQueryClient();return useMutation({mutationKey:m.users.delete,mutationFn:({id:r,name:n})=>e.post("/api/usystem/user/delete",{id:r,name:n}),onSuccess:()=>{t.invalidateQueries({queryKey:m.users.all});}})}function P(){let e=l();return useQuery({queryKey:m.permissions.allPermissions,queryFn:()=>e.get("/api/usystem/user/allPermssions"),staleTime:1/0})}function C(){let e=l();return useQuery({queryKey:m.permissions.allPermissionsV2,queryFn:()=>e.get("/api/usystem/user/allPermssionsV2"),staleTime:1/0})}export{q as a,f as b,v as c,K as d,R as e,k as f,x as g,F as h,P as i,C as j};//# sourceMappingURL=chunk-BKF7C4LV.js.map
2
+ //# sourceMappingURL=chunk-BKF7C4LV.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/modules/permission/services/index.ts"],"names":["useAllRoles","ky","useKy","useQuery","queryKeys","useRole","name","permissionVersion","useToolkitsStore","state","version","useCreateRole","s","queryClient","useQueryClient","useMutation","permissions","useUpdateRole","id","useRemoveRole","useCreateUser","arg","useUpdateUser","useRemoveUser","useAllPermissions","useAllPermissionsV2"],"mappings":"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","file":"chunk-MS25PZ5J.js","sourcesContent":["import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'\n\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { PermissionVersion } from '@/constants'\nimport { useKy } from '@/libs'\nimport { queryKeys } from '@/queryKeys'\n\nimport type { PermissionEnumItem, RoleEnumItem, RoleV1, RoleV2 } from '../types'\n\nexport function useAllRoles() {\n const ky = useKy()\n return useQuery({\n queryKey: queryKeys.roles.all,\n queryFn: () => ky.get<RoleEnumItem[]>('/api/usystem/role/all'),\n })\n}\n\nexport function useRole(name: string) {\n const permissionVersion = useToolkitsStore(state => state.permissionVersion)\n const ky = useKy()\n const version = permissionVersion === PermissionVersion.V2 ? 'v2' : 'v1'\n\n return useQuery({\n queryKey: queryKeys.roles.detail(name, version),\n queryFn: () => ky.get<RoleV1 | RoleV2>(`/api/usystem/role/${version === 'v2' ? 'infoV2' : 'info'}?name=${name}`),\n })\n}\n\nexport function useCreateRole() {\n const { permissionVersion } = useToolkitsStore(s => s)\n const ky = useKy()\n const queryClient = useQueryClient()\n const version = permissionVersion === PermissionVersion.V2 ? 'v2' : 'v1'\n\n return useMutation({\n mutationKey: queryKeys.roles.create(version),\n mutationFn: ({ name, permissions }: { name: string; permissions: RoleV1['permissions'] | RoleV2['permissions'] }) =>\n ky.post(version === 'v2' ? '/api/usystem/role/createV2' : '/api/usystem/role/create', { name, permissions }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.roles.all })\n },\n })\n}\n\nexport function useUpdateRole() {\n const { permissionVersion } = useToolkitsStore(s => s)\n const ky = useKy()\n const queryClient = useQueryClient()\n const version = permissionVersion === PermissionVersion.V2 ? 'v2' : 'v1'\n\n return useMutation({\n mutationKey: queryKeys.roles.update(version),\n mutationFn: ({\n id,\n name,\n permissions,\n }: {\n id: number\n name: string\n permissions: RoleV1['permissions'] | RoleV2['permissions']\n }) =>\n ky.post(version === 'v2' ? '/api/usystem/role/updateV2' : '/api/usystem/role/update', { id, name, permissions }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.roles.all })\n },\n })\n}\n\nexport function useRemoveRole() {\n const ky = useKy()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationKey: queryKeys.roles.delete,\n mutationFn: ({ id, name }: { id: number; name: string }) => ky.post('/api/usystem/role/delete', { id, name }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.roles.all })\n },\n })\n}\n\nexport function useCreateUser() {\n const ky = useKy()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationKey: queryKeys.users.create,\n mutationFn: (\n arg:\n | { name: string; roles: string[] }\n | {\n name: string\n permissions: {\n game_group: string[]\n game_ids: string[]\n role: string\n }[]\n },\n ) => ky.post('/api/usystem/user/create', arg),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.users.all })\n },\n })\n}\n\nexport function useUpdateUser() {\n const ky = useKy()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationKey: queryKeys.users.update,\n mutationFn: (\n arg:\n | { id: string; name: string; roles: string[] }\n | {\n id: string\n name: string\n permissions: {\n game_group: string[]\n game_ids: string[]\n role: string\n }[]\n },\n ) => ky.post('/api/usystem/user/update', arg),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.users.all })\n },\n })\n}\n\nexport function useRemoveUser() {\n const ky = useKy()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationKey: queryKeys.users.delete,\n mutationFn: ({ id, name }: { id: string; name: string }) => ky.post('/api/usystem/user/delete', { id, name }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.users.all })\n },\n })\n}\n\nexport function useAllPermissions() {\n const ky = useKy()\n\n return useQuery({\n queryKey: queryKeys.permissions.allPermissions,\n queryFn: () => ky.get<PermissionEnumItem[]>('/api/usystem/user/allPermssions'),\n staleTime: Infinity,\n })\n}\n\nexport function useAllPermissionsV2() {\n const ky = useKy()\n\n return useQuery({\n queryKey: queryKeys.permissions.allPermissionsV2,\n queryFn: () => ky.get<PermissionEnumItem[]>('/api/usystem/user/allPermssionsV2'),\n staleTime: Infinity,\n })\n}\n"]}
1
+ {"version":3,"sources":["../src/modules/permission/services/index.ts"],"names":["useAllRoles","ky","useKy","useQuery","queryKeys","useRole","name","permissionVersion","useToolkitsStore","state","version","useCreateRole","s","queryClient","useQueryClient","useMutation","permissions","useUpdateRole","id","useRemoveRole","useCreateUser","arg","useUpdateUser","useRemoveUser","useAllPermissions","useAllPermissionsV2"],"mappings":"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","file":"chunk-BKF7C4LV.js","sourcesContent":["import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'\n\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { PermissionVersion } from '@/constants'\nimport { useKy } from '@/libs'\nimport { queryKeys } from '@/queryKeys'\n\nimport type { PermissionEnumItem, RoleEnumItem, RoleV1, RoleV2 } from '../types'\n\nexport function useAllRoles() {\n const ky = useKy()\n return useQuery({\n queryKey: queryKeys.roles.all,\n queryFn: () => ky.get<RoleEnumItem[]>('/api/usystem/role/all'),\n })\n}\n\nexport function useRole(name: string) {\n const permissionVersion = useToolkitsStore(state => state.permissionVersion)\n const ky = useKy()\n const version = permissionVersion === PermissionVersion.V2 ? 'v2' : 'v1'\n\n return useQuery({\n queryKey: queryKeys.roles.detail(name, version),\n queryFn: () => ky.get<RoleV1 | RoleV2>(`/api/usystem/role/${version === 'v2' ? 'infoV2' : 'info'}?name=${name}`),\n })\n}\n\nexport function useCreateRole() {\n const { permissionVersion } = useToolkitsStore(s => s)\n const ky = useKy()\n const queryClient = useQueryClient()\n const version = permissionVersion === PermissionVersion.V2 ? 'v2' : 'v1'\n\n return useMutation({\n mutationKey: queryKeys.roles.create(version),\n mutationFn: ({ name, permissions }: { name: string; permissions: RoleV1['permissions'] | RoleV2['permissions'] }) =>\n ky.post(version === 'v2' ? '/api/usystem/role/createV2' : '/api/usystem/role/create', { name, permissions }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.roles.all })\n },\n })\n}\n\nexport function useUpdateRole() {\n const { permissionVersion } = useToolkitsStore(s => s)\n const ky = useKy()\n const queryClient = useQueryClient()\n const version = permissionVersion === PermissionVersion.V2 ? 'v2' : 'v1'\n\n return useMutation({\n mutationKey: queryKeys.roles.update(version),\n mutationFn: ({\n id,\n name,\n permissions,\n }: {\n id: number\n name: string\n permissions: RoleV1['permissions'] | RoleV2['permissions']\n }) =>\n ky.post(version === 'v2' ? '/api/usystem/role/updateV2' : '/api/usystem/role/update', { id, name, permissions }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.roles.all })\n },\n })\n}\n\nexport function useRemoveRole() {\n const ky = useKy()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationKey: queryKeys.roles.delete,\n mutationFn: ({ id, name }: { id: number; name: string }) => ky.post('/api/usystem/role/delete', { id, name }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.roles.all })\n },\n })\n}\n\nexport function useCreateUser() {\n const ky = useKy()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationKey: queryKeys.users.create,\n mutationFn: (\n arg:\n | { name: string; roles: string[] }\n | {\n name: string\n permissions: {\n game_group: string[]\n game_ids: string[]\n role: string\n }[]\n },\n ) => ky.post('/api/usystem/user/create', arg),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.users.all })\n },\n })\n}\n\nexport function useUpdateUser() {\n const ky = useKy()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationKey: queryKeys.users.update,\n mutationFn: (\n arg:\n | { id: string; name: string; roles: string[] }\n | {\n id: string\n name: string\n permissions: {\n game_group: string[]\n game_ids: string[]\n role: string\n }[]\n },\n ) => ky.post('/api/usystem/user/update', arg),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.users.all })\n },\n })\n}\n\nexport function useRemoveUser() {\n const ky = useKy()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationKey: queryKeys.users.delete,\n mutationFn: ({ id, name }: { id: string; name: string }) => ky.post('/api/usystem/user/delete', { id, name }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.users.all })\n },\n })\n}\n\nexport function useAllPermissions() {\n const ky = useKy()\n\n return useQuery({\n queryKey: queryKeys.permissions.allPermissions,\n queryFn: () => ky.get<PermissionEnumItem[]>('/api/usystem/user/allPermssions'),\n staleTime: Infinity,\n })\n}\n\nexport function useAllPermissionsV2() {\n const ky = useKy()\n\n return useQuery({\n queryKey: queryKeys.permissions.allPermissionsV2,\n queryFn: () => ky.get<PermissionEnumItem[]>('/api/usystem/user/allPermssionsV2'),\n staleTime: Infinity,\n })\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import {create,useStore,createStore}from'zustand';import {App}from'antd';import {createContext,useContext,useMemo,useRef}from'react';import {persist,createJSONStorage}from'zustand/middleware';import {jwtDecode}from'jwt-decode';import {jsx}from'react/jsx-runtime';import re from'ky';function K(){return create((e,t)=>({open:new Map,usedIds:new Set,isOpen:o=>t().open.get(o)??!1,show(o){e({open:new Map(t().open).set(o,!0)});},hide(o){e({open:new Map(t().open).set(o,!1)});},hideAll(){e({open:new Map});},checkUniqueness(o){let{usedIds:n}=t();return !n.has(o)},registerIds(o){let{usedIds:n}=t();return n.has(o)?!1:(e({usedIds:new Set(n).add(o)}),!0)},cleanup(o){let{open:n,usedIds:a}=t(),d=new Map(n),T=new Set(a);d.delete(o),T.delete(o),e({open:d,usedIds:T});}}))}var j=0,H=()=>{let e=Date.now(),t=Math.floor(Math.random()*1e3),o=++j%1e3;return e*1e6+t*1e3+o};var P={getItem:e=>sessionStorage.getItem(e)||localStorage.getItem(e),setItem:(e,t)=>{sessionStorage.setItem(e,t),localStorage.setItem(e,t);},removeItem(e){sessionStorage.removeItem(e),localStorage.removeItem(e);}};var Oe="https://idaas.ifunplus.cn/enduser/api/application/plugin_FunPlus/sso/v1",S="App-ID",ve="/console/",v=(n=>(n.V1="v1",n.V2="v2",n.V3="v3",n))(v||{}),we="*";var W={global:{noEntitlement:"No permission, please contact the administrator.",name:"Name",creationTime:"Creation Time",operation:"Operation",update:"Update",edit:"Edit",delete:"Delete",selectAll:"Select All",game:"Game",user:"User",role:"Role",username:"Username",password:"Password",label:"Label",method:"Method",route:"Route",request:"Request",response:"Response",add:"Add",signIn:"Sign In",projectGroup:"Project Group",view:"View"},SignIn:{title:"Sign In Method",thirdParty:"Third party sign in",signInWithIDass:"Sign in with IDass",unregistered:"You are not yet registered on the platform, please contact the administrator",welcome:"Welcome"},NotFound:{subTitle:"The page you visited does not exist",buttonText:"Return to homepage"},FilterFormWrapper:{confirmText:"Search",resetText:"Reset"},FormModal:{confirmText:"Confirm",cancelText:"Cancel"},GameSelect:{label:"Current Game",placeholder:"Please select a game"},RequireGame:{description:"Please select a game"},UserWidget:{signOutText:"Sign Out"},User:{createTitle:"Create User",createSuccessfully:"User created successfully",updateTitle:"Update User",updateSuccessfully:"User updated successfully",deleteTitle:"Delete User",deleteContent:"Are you sure you want to delete user <%= user %>?",deleteSuccessfully:"User deleted successfully"},Role:{createTitle:"Create Role",createSuccessfully:"Role created successfully",updateTitle:"Update Role",updateSuccessfully:"Role updated successfully",deleteTitle:"Delete Role",deleteContent:"Are you sure you want to delete role <%= role %>?",deleteSuccessfully:"Role deleted successfully"},PermissionList:{failedDescription:"Failed to get permission list",baseSectionTitle:"Platform Basic Permissions",gameSectionTitle:"Game Permissions",gameSectionDescription:"Please select a game first",gameSelectPlaceholder:"Please select a game first",removeText:"Remove",addText:"Add Game Permissions"},RoleDetail:{title:"Role Details"},InfiniteList:{loadingText:"Loading...",reachEndText:"You've reached the end",loadMoreText:"Load more"}},w=W;var E=e=>({locale:w,gameApiV2:!1,isGlobal:!1,signInPath:"/sign_in",mainPagePath:"/",permissionVersion:"v1",setContext(t){e(o=>({...o,...t}));}});var U=e=>({setGameId:t=>{e({gameId:t});}});var A=(e,t)=>({getUser:()=>{let o=t().token;if(o)try{return jwtDecode(o)}catch{return null}return null},setToken:o=>e({token:o})});var D=e=>createStore()(persist((...t)=>{let[,o,n]=t,a=()=>{o().setToken(""),n.persist.clearStorage();};return {...A(...t),...U(...t),...E(...t),clearToken:a,...e}},{name:"toolkits",storage:createJSONStorage(()=>P),partialize:t=>({token:t.token,gameId:t.gameId,collapsed:t.collapsed})}));var b=createContext(null);function C(e){let t=useContext(b);if(!t)throw new Error("Missing ToolkitsProvider in the tree");return useStore(t,e||(o=>o))}var G=e=>{let{children:t,...o}=e,n=useRef(),a=useContext(b)?.getState();if(n.current||(n.current=D({...a,...o})),!n.current.getState().signInPath)throw new Error('ToolkitsProvider: \u8BF7\u914D\u7F6E "signInPath"');return jsx(b.Provider,{value:n.current,children:jsx(App,{children:t})})},te=(e,t)=>{let o=n=>jsx(G,{...t,children:jsx(e,{...n})});return o.displayName=`withContext(${e.displayName||e.name||"Component"})`,o},oe=G;var I=[0,1,200],h={OK:200,UNAUTHORIZED:401,FORBIDDEN:403,UNREGISTERED:412},ie=3e4;var N=e=>!e||typeof e!="object"?"Unknown error":e.msg||e.message||e.error||"Unknown error",ae=e=>{let{value:t,allowedCodes:o}=e;return t==null||typeof t!="number"?!1:o.includes(t)},le=(e,t)=>{if(t<h.OK||t>=300)return !1;if(!e||typeof e!="object")return !0;let o=[{field:"code",value:e.code,allowedCodes:I},{field:"status",value:e.status,allowedCodes:I},{field:"errno",value:e.errno,allowedCodes:I}];return o.some(a=>a.value!==void 0&&a.value!==null)?o.every(a=>a.value===void 0||a.value===null||ae(a)):!0},ce=async(e,t)=>{switch(t){case"blob":return e.blob();case"text":return e.text();case"arrayBuffer":return e.arrayBuffer();case"formData":return e.formData();case"json":default:return e.json()}},ue=e=>{let{baseURL:t,suppressErrorNotification:o=!1}=e||{},{notification:n}=App.useApp(),a=C(),{token:d,isGlobal:T,gameId:R,permissionVersion:O,signInPath:f,clearToken:k}=a,F=()=>{k(),f&&(window.location.href=f);},M=()=>{if(k(),f){let s=new URL(f,window.location.origin);s.searchParams.set("unregistered","true"),window.location.href=s.toString();}},_=()=>{n.error({message:"\u8BBF\u95EE\u88AB\u7981\u6B62",description:"\u60A8\u6CA1\u6709\u6743\u9650\u8BBF\u95EE\u6B64\u8D44\u6E90\u3002"});},V=s=>async(r,i,c)=>{if(s==="blob"||s==="arrayBuffer"||s==="text"||s==="formData")return c;let l;try{l=await c.clone().json();}catch{return c}if(le(l,c.status)){let y=l.data!==void 0?l.data:l;return new Response(JSON.stringify(y),{status:c.status,statusText:c.statusText,headers:c.headers})}let u=N(l);o||n.error({message:"Request failed",description:u});let m=new Error(u);throw m.response=c,m.data=l,m},B=(s,r)=>{switch(s){case h.UNAUTHORIZED:F();break;case h.UNREGISTERED:M();break;case h.FORBIDDEN:_();break;default:{if(!o){let i=N(r)||`HTTP ${s} Error`;n.error({message:"Request failed",description:i});}break}}},x=useMemo(()=>re.create({prefixUrl:t,retry:0,timeout:ie,headers:{Accept:"application/json","Content-Type":"application/json"},hooks:{beforeRequest:[r=>{d&&r.headers.set("Authorization",`Bearer ${d}`),!r.headers.has(S)&&O!=="v1"&&(T||!R?r.headers.set(S,"global"):r.headers.set(S,encodeURIComponent(String(R))));}],beforeError:[async r=>{let{response:i}=r;if(i){let c=i.status,l;try{let u=i.headers.get("content-type")||"";(u.includes("application/json")||u.startsWith("text/"))&&(l=await i.clone().json());}catch{}B(c,l);}else o||n.error({message:"Network Error",description:r.message||"Network request failed"});return r}]}}),[t,d,T,R,O,n,f,k,o]),p=async(s,r,i,c)=>{let{responseType:l,...u}=c||{},m={...u,hooks:{...u.hooks,afterResponse:[...u.hooks?.afterResponse||[],V(l)]}},y;return i?y=await x(r,{method:s,json:i,...m}):y=await x(r,{method:s,...m}),ce(y,l)};return {get:(s,r)=>p("GET",s,void 0,r),post:(s,r,i)=>p("POST",s,r,i),put:(s,r,i)=>p("PUT",s,r,i),delete:(s,r)=>p("DELETE",s,void 0,r),patch:(s,r,i)=>p("PATCH",s,r,i),options:(s,r)=>p("OPTIONS",s,void 0,r),head:(s,r)=>p("HEAD",s,void 0,r),request:s=>{let{url:r,...i}=s;return p(i.method||"GET",r,void 0,i)},instance:x}};var it={permissions:{check:(e,t)=>["permissions","check",e,t],allPermissions:["permissions","all"],allPermissionsV2:["permissions","allV2"]},users:{all:["users"],detail:e=>["users","detail",e],create:["users","create"],update:["users","update"],delete:["users","delete"]},roles:{all:["roles"],detail:(e,t)=>["roles","detail",e,t],create:e=>["roles","create",e],update:e=>["roles","update",e],delete:["roles","delete"]},menus:{all:["menus"],navbar:e=>["menus","navbar",e],detail:e=>["menus","detail",e],create:["menus","create"],update:["menus","update"],delete:["menus","delete"]},enums:{gameGroups:["enums","gameGroups"],gameIds:e=>["enums","gameIds",e]}};
2
+ export{K as a,H as b,P as c,Oe as d,S as e,ve as f,v as g,we as h,C as i,te as j,oe as k,ue as l,it as m};//# sourceMappingURL=chunk-EKBAANKX.js.map
3
+ //# sourceMappingURL=chunk-EKBAANKX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/createVisibilityStore.ts","../src/utils/generateId.ts","../src/utils/mixedStorage.ts","../src/constants/index.ts","../src/locale/en_GB.ts","../src/stores/context.ts","../src/stores/game.ts","../src/stores/token.ts","../src/stores/index.ts","../src/components/toolkitsProvider/ToolkitsProvider.tsx","../src/libs/ky.ts","../src/queryKeys.ts"],"names":["createVisibilityStore","create","set","get","uuid","usedIds","open","newOpen","newUsedIds","globalCounter","generateId","timestamp","random","counter","mixedStorage","name","value","SSO_URL","APP_ID_HEADER","FRONTEND_ROUTE_PREFIX","PermissionVersion","WILDCARD","locale","en_GB_default","createContextSlice","state","prev","createGameSlice","id","createTokenSlice","token","jwtDecode","createToolkitsStore","initProps","createStore","persist","args","store","clearToken","createJSONStorage","ToolkitsContext","createContext","useToolkitsStore","selector","useContext","useStore","ToolkitsProvider","props","children","restProps","storeRef","useRef","parentState","jsx","App","withContext","Component","providerProps","WrappedComponent","ToolkitsProvider_default","SUCCESS_RESPONSE_CODES","HTTP_STATUS","REQUEST_TIMEOUT","extractErrorMessage","data","isStatusCodeSuccess","config","allowedCodes","isSuccessResponse","status","statusChecks","processResponseByType","response","responseType","useKy","baseURL","suppressErrorNotification","notification","toolkitsStore","isGlobal","gameId","permissionVersion","signInPath","handleUnauthorized","handleUnregistered","url","handleForbidden","createResponseHandler","_request","_options","responseData","errorMessage","error","handleHttpStatusError","instance","useMemo","ky","request","contentType","makeRequest","method","requestOptions","kyOptions","finalOptions","options","requestOpts","queryKeys","permissions","version","gameGroups"],"mappings":"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","file":"chunk-EKBAANKX.js","sourcesContent":["import { create } from 'zustand'\n\nexport interface VisibilityState {\n open: Map<number, boolean>\n usedIds: Set<number>\n isOpen: (uuid: number) => boolean\n show: (uuid: number) => void\n hide: (uuid: number) => void\n hideAll: () => void\n checkUniqueness: (uuid: number) => boolean\n registerIds: (uuid: number) => boolean\n cleanup: (uuid: number) => void\n}\n\n/**\n * 创建一个可见性管理的 Zustand store\n * 用于管理 Modal、Drawer 等组件的显示/隐藏状态\n * 每次调用都会创建一个独立的 store 实例,确保不同组件间的状态隔离\n */\nexport function createVisibilityStore() {\n return create<VisibilityState>((set, get) => ({\n open: new Map(),\n usedIds: new Set(),\n isOpen: uuid => get().open.get(uuid) ?? false,\n show(uuid) {\n set({\n open: new Map(get().open).set(uuid, true),\n })\n },\n hide(uuid) {\n set({ open: new Map(get().open).set(uuid, false) })\n },\n hideAll() {\n set({ open: new Map() })\n },\n checkUniqueness(uuid) {\n const { usedIds } = get()\n return !usedIds.has(uuid)\n },\n registerIds(uuid) {\n const { usedIds } = get()\n if (usedIds.has(uuid)) {\n return false // ID 已被使用\n }\n set({ usedIds: new Set(usedIds).add(uuid) })\n return true // 注册成功\n },\n cleanup(uuid) {\n const { open, usedIds } = get()\n const newOpen = new Map(open)\n const newUsedIds = new Set(usedIds)\n newOpen.delete(uuid)\n newUsedIds.delete(uuid)\n set({ open: newOpen, usedIds: newUsedIds })\n },\n }))\n}\n","/**\n * 生成唯一 ID 的函数\n * 使用时间戳 + 随机数 + 计数器的组合来确保唯一性\n */\nlet globalCounter = 0\n\nexport const generateId = (): number => {\n const timestamp = Date.now()\n const random = Math.floor(Math.random() * 1000)\n const counter = ++globalCounter % 1000\n\n // 组合:时间戳(毫秒) * 1000000 + 随机数 * 1000 + 计数器\n // 这样可以确保即使在同一毫秒内生成多个ID也不会重复\n return timestamp * 1000000 + random * 1000 + counter\n}\n","import type { StateStorage } from 'zustand/middleware'\n\n// 通过 SessionStorage 隔离数据,防止多开页面时的数据冲突。\n// 当 SessionStorage 不存在时,使用 LocalStorage。\nexport const mixedStorage: StateStorage = {\n getItem: (name: string): string | null => {\n return sessionStorage.getItem(name) || localStorage.getItem(name)\n },\n setItem: (name: string, value: string) => {\n sessionStorage.setItem(name, value)\n localStorage.setItem(name, value)\n },\n removeItem(name: string) {\n sessionStorage.removeItem(name)\n localStorage.removeItem(name)\n },\n}\n","export const SSO_URL = 'https://idaas.ifunplus.cn/enduser/api/application/plugin_FunPlus/sso/v1'\n\nexport const APP_ID_HEADER = 'App-ID'\n\nexport const FRONTEND_ROUTE_PREFIX = '/console/'\n\nexport enum PermissionVersion {\n V1 = 'v1',\n V2 = 'v2',\n V3 = 'v3',\n}\n\nexport const WILDCARD = '*'\n","import type { Locale } from '.'\n\nconst locale: Locale = {\n global: {\n noEntitlement: 'No permission, please contact the administrator.',\n name: 'Name',\n creationTime: 'Creation Time',\n operation: 'Operation',\n update: 'Update',\n edit: 'Edit',\n delete: 'Delete',\n selectAll: 'Select All',\n game: 'Game',\n user: 'User',\n role: 'Role',\n username: 'Username',\n password: 'Password',\n label: 'Label',\n method: 'Method',\n route: 'Route',\n request: 'Request',\n response: 'Response',\n add: 'Add',\n signIn: 'Sign In',\n projectGroup: 'Project Group',\n view: 'View',\n },\n SignIn: {\n title: 'Sign In Method',\n thirdParty: 'Third party sign in',\n signInWithIDass: 'Sign in with IDass',\n unregistered: 'You are not yet registered on the platform, please contact the administrator',\n welcome: 'Welcome',\n },\n NotFound: {\n subTitle: 'The page you visited does not exist',\n buttonText: 'Return to homepage',\n },\n FilterFormWrapper: {\n confirmText: 'Search',\n resetText: 'Reset',\n },\n FormModal: {\n confirmText: 'Confirm',\n cancelText: 'Cancel',\n },\n GameSelect: {\n label: 'Current Game',\n placeholder: 'Please select a game',\n },\n RequireGame: {\n description: 'Please select a game',\n },\n UserWidget: {\n signOutText: 'Sign Out',\n },\n User: {\n createTitle: 'Create User',\n createSuccessfully: 'User created successfully',\n updateTitle: 'Update User',\n updateSuccessfully: 'User updated successfully',\n deleteTitle: 'Delete User',\n deleteContent: 'Are you sure you want to delete user <%= user %>?',\n deleteSuccessfully: 'User deleted successfully',\n },\n Role: {\n createTitle: 'Create Role',\n createSuccessfully: 'Role created successfully',\n updateTitle: 'Update Role',\n updateSuccessfully: 'Role updated successfully',\n deleteTitle: 'Delete Role',\n deleteContent: 'Are you sure you want to delete role <%= role %>?',\n deleteSuccessfully: 'Role deleted successfully',\n },\n PermissionList: {\n failedDescription: 'Failed to get permission list',\n baseSectionTitle: 'Platform Basic Permissions',\n gameSectionTitle: 'Game Permissions',\n gameSectionDescription: 'Please select a game first',\n gameSelectPlaceholder: 'Please select a game first',\n removeText: 'Remove',\n addText: 'Add Game Permissions',\n },\n RoleDetail: {\n title: 'Role Details',\n },\n InfiniteList: {\n loadingText: 'Loading...',\n reachEndText: \"You've reached the end\",\n loadMoreText: 'Load more',\n },\n}\n\nexport default locale\n","// import type { AxiosInterceptorManager, AxiosResponse, InternalAxiosRequestConfig } from 'axios'\nimport type { StateCreator } from 'zustand'\n\nimport { PermissionVersion } from '@/constants'\nimport type { Locale } from '@/locale'\nimport enGb from '@/locale/en_GB'\n\nexport interface ContextSlice {\n locale: Locale\n permissionVersion: PermissionVersion // 权限版本\n gameApiV2: boolean\n signInPath: string // 登录页前端路由地址\n isGlobal: boolean // 为 true 时,APP-ID header 为 'global',否则为当前的游戏的 id。\n navWidth?: number // 侧边栏宽度\n collapsed?: boolean\n collapsible?: boolean // 菜单是否可折叠\n mainPagePath: string // 首页地址\n setContext(state: Partial<Omit<ContextSlice, 'setContext'>>): void\n}\n\nexport const createContextSlice: StateCreator<ContextSlice, [], [], ContextSlice> = set => ({\n locale: enGb,\n gameApiV2: false,\n isGlobal: false,\n signInPath: '/sign_in',\n mainPagePath: '/',\n permissionVersion: PermissionVersion.V1,\n setContext(state) {\n set(prev => ({ ...prev, ...state }))\n },\n})\n","import type { StateCreator } from 'zustand'\n\nexport interface GameSlice {\n gameId?: string | number\n setGameId: (id?: string | number) => void\n}\n\nexport const createGameSlice: StateCreator<GameSlice, [], [], GameSlice> = set => ({\n setGameId: id => {\n set({ gameId: id })\n },\n})\n","import { jwtDecode } from 'jwt-decode'\nimport type { StateCreator } from 'zustand'\n\ninterface UserInfo {\n authorityId: string\n exp: number\n}\n\nexport interface TokenSlice {\n token?: string\n getUser: () => UserInfo | null\n setToken: (token: string) => void\n}\n\nexport const createTokenSlice: StateCreator<TokenSlice, [], []> = (set, get) => ({\n getUser: () => {\n const token = get().token\n if (token) {\n try {\n return jwtDecode(token)\n } catch {\n return null\n }\n }\n return null\n },\n setToken: token => set({ token }),\n})\n","import { createStore } from 'zustand'\nimport { createJSONStorage, persist } from 'zustand/middleware'\n\nimport { mixedStorage } from '@/utils'\n\nimport { type ContextSlice, createContextSlice } from './context'\nimport type { GameSlice } from './game'\nimport { createGameSlice } from './game'\nimport type { TokenSlice } from './token'\nimport { createTokenSlice } from './token'\n\nexport type ToolkitsState = TokenSlice &\n GameSlice &\n ContextSlice & {\n clearToken: () => void\n }\n\nexport const createToolkitsStore = (initProps?: Partial<ContextSlice>) => {\n return createStore<ToolkitsState>()(\n persist(\n (...args) => {\n const [, get, store] = args\n\n const clearToken = () => {\n get().setToken('')\n store.persist.clearStorage()\n }\n\n return {\n ...createTokenSlice(...args),\n ...createGameSlice(...args),\n ...createContextSlice(...args),\n clearToken,\n ...initProps,\n }\n },\n {\n name: 'toolkits',\n storage: createJSONStorage(() => mixedStorage),\n partialize: state => ({\n token: state.token,\n gameId: state.gameId,\n collapsed: state.collapsed,\n }),\n },\n ),\n )\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { App } from 'antd'\nimport type { ComponentType, FC, PropsWithChildren } from 'react'\nimport { createContext, useContext, useRef } from 'react'\nimport { useStore } from 'zustand'\n\nimport type { ToolkitsState } from '@/stores'\nimport { createToolkitsStore } from '@/stores'\nimport type { ContextSlice } from '@/stores/context'\n\ntype ToolkitsStore = ReturnType<typeof createToolkitsStore>\n\nconst ToolkitsContext = createContext<ToolkitsStore | null>(null)\n\n// 重载函数签名:支持有 selector 和无 selector 两种调用方式\nexport function useToolkitsStore(): ToolkitsState\nexport function useToolkitsStore<T>(selector: (state: ToolkitsState) => T): T\nexport function useToolkitsStore<T>(selector?: (state: ToolkitsState) => T): T | ToolkitsState {\n const store = useContext(ToolkitsContext)\n if (!store) throw new Error('Missing ToolkitsProvider in the tree')\n\n // 总是调用 useStore,根据是否有 selector 决定使用什么选择器\n return useStore(store, selector || ((state: ToolkitsState) => state as T))\n}\n\nexport type ToolkitsProviderProps = PropsWithChildren<Partial<Omit<ContextSlice, 'setContext'>>>\n\nconst ToolkitsProvider: FC<ToolkitsProviderProps> = props => {\n const { children, ...restProps } = props\n const storeRef = useRef<ToolkitsStore>()\n const parentState = useContext(ToolkitsContext)?.getState()\n\n if (!storeRef.current) {\n storeRef.current = createToolkitsStore({ ...parentState, ...restProps })\n }\n\n if (!storeRef.current.getState().signInPath) {\n throw new Error('ToolkitsProvider: 请配置 \"signInPath\"')\n }\n\n return (\n <ToolkitsContext.Provider value={storeRef.current}>\n <App>{children}</App>\n </ToolkitsContext.Provider>\n )\n}\n\nexport const withContext = (Component: ComponentType, providerProps: Omit<ToolkitsProviderProps, 'children'>) => {\n const WrappedComponent = (props: any) => {\n return (\n <ToolkitsProvider {...providerProps}>\n <Component {...props} />\n </ToolkitsProvider>\n )\n }\n\n WrappedComponent.displayName = `withContext(${Component.displayName || Component.name || 'Component'})`\n\n return WrappedComponent\n}\n\nif (process.env.NODE_ENV !== 'production') {\n ToolkitsProvider.displayName = 'ToolkitsProvider'\n}\n\nexport default ToolkitsProvider\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { App } from 'antd'\nimport ky, { type KyInstance, type Options as KyOptions } from 'ky'\nimport { useMemo } from 'react'\n\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { APP_ID_HEADER, PermissionVersion } from '@/constants'\n\n// 响应成功状态码常量\nconst SUCCESS_RESPONSE_CODES = [0, 1, 200] as const\n\n// HTTP 状态码常量\nconst HTTP_STATUS = {\n OK: 200,\n UNAUTHORIZED: 401,\n FORBIDDEN: 403,\n UNREGISTERED: 412,\n} as const\n\n// 请求超时时间(毫秒)\nconst REQUEST_TIMEOUT = 30000\n\n// 成功响应状态码字段类型\ntype StatusField = 'code' | 'status' | 'errno'\n\n// 状态码检查配置\ninterface StatusCheckConfig {\n field: StatusField\n value: unknown\n allowedCodes: readonly number[]\n}\n\n// 响应类型枚举\nexport enum ResponseType {\n JSON = 'json',\n BLOB = 'blob',\n TEXT = 'text',\n ARRAY_BUFFER = 'arrayBuffer',\n FORM_DATA = 'formData',\n}\n\n// 通用请求选项接口\ninterface RequestOptions extends KyOptions {\n responseType?: ResponseType\n}\n\n// useKy Hook 配置选项\nexport interface UseKyOptions {\n baseURL?: string\n // 是否禁止在错误时显示 notification(默认为 false,即默认显示错误通知)\n suppressErrorNotification?: boolean\n}\n\n// HTTP客户端方法接口 - 支持泛型响应类型\ninterface KyMethods {\n get: <T = any>(url: string, options?: RequestOptions) => Promise<T>\n post: <T = any>(url: string, data?: any, options?: RequestOptions) => Promise<T>\n put: <T = any>(url: string, data?: any, options?: RequestOptions) => Promise<T>\n delete: <T = any>(url: string, options?: RequestOptions) => Promise<T>\n patch: <T = any>(url: string, data?: any, options?: RequestOptions) => Promise<T>\n options: <T = any>(url: string, options?: RequestOptions) => Promise<T>\n head: <T = any>(url: string, options?: RequestOptions) => Promise<T>\n request: <T = any>(options: RequestOptions & { url: string }) => Promise<T>\n instance: KyInstance\n}\n\n// 错误消息提取工具函数\nconst extractErrorMessage = (data: any): string => {\n if (!data || typeof data !== 'object') {\n return 'Unknown error'\n }\n\n return data.msg || data.message || data.error || 'Unknown error'\n}\n\n/**\n * 检查单个状态码字段是否成功\n * @param config 状态码检查配置\n * @returns 是否成功\n */\nconst isStatusCodeSuccess = (config: StatusCheckConfig): boolean => {\n const { value, allowedCodes } = config\n\n if (value === undefined || value === null) {\n return false\n }\n\n if (typeof value !== 'number') {\n return false\n }\n\n return allowedCodes.includes(value)\n}\n\n/**\n * 判断响应是否成功\n * @param data 响应数据\n * @param status HTTP状态码\n * @returns 是否成功\n */\nconst isSuccessResponse = (data: any, status: number): boolean => {\n // 如果HTTP状态码不在2xx范围,直接返回失败\n if (status < HTTP_STATUS.OK || status >= 300) {\n return false\n }\n\n // 如果没有响应数据或不是对象,认为成功(可能是空响应)\n if (!data || typeof data !== 'object') {\n return true\n }\n\n // 定义状态码检查配置\n const statusChecks: StatusCheckConfig[] = [\n { field: 'code', value: data.code, allowedCodes: SUCCESS_RESPONSE_CODES },\n { field: 'status', value: data.status, allowedCodes: SUCCESS_RESPONSE_CODES },\n { field: 'errno', value: data.errno, allowedCodes: SUCCESS_RESPONSE_CODES },\n ]\n\n // 检查是否有任何业务状态码字段存在且表示成功\n const hasBusinessStatusCode = statusChecks.some(config => config.value !== undefined && config.value !== null)\n\n // 如果存在业务状态码字段,则必须检查它们是否都表示成功\n if (hasBusinessStatusCode) {\n return statusChecks.every(\n config => config.value === undefined || config.value === null || isStatusCodeSuccess(config),\n )\n }\n\n // 如果没有业务状态码字段,HTTP 2xx 就认为成功\n return true\n}\n\n/**\n * 根据响应类型处理响应数据\n * @param response 响应对象\n * @param responseType 响应类型\n * @returns 处理后的响应数据\n */\nconst processResponseByType = async (response: Response, responseType?: ResponseType): Promise<any> => {\n switch (responseType) {\n case ResponseType.BLOB:\n return response.blob()\n case ResponseType.TEXT:\n return response.text()\n case ResponseType.ARRAY_BUFFER:\n return response.arrayBuffer()\n case ResponseType.FORM_DATA:\n return response.formData()\n case ResponseType.JSON:\n default:\n return response.json()\n }\n}\n\n/**\n * HTTP客户端Hook (基于 Ky) - 内部使用版本\n * @param config 配置选项\n * @returns HTTP客户端方法集合\n */\nexport const useKy = (config?: UseKyOptions): KyMethods => {\n const { baseURL, suppressErrorNotification = false } = config || {}\n // 获取 App 实例\n const { notification } = App.useApp()\n\n // 获取工具包状态\n const toolkitsStore = useToolkitsStore()\n const { token, isGlobal, gameId, permissionVersion, signInPath, clearToken } = toolkitsStore\n\n // 处理未授权错误\n const handleUnauthorized = () => {\n clearToken()\n if (signInPath) {\n window.location.href = signInPath\n }\n }\n\n // 处理未注册错误\n const handleUnregistered = () => {\n clearToken()\n if (signInPath) {\n // 添加未注册参数到登录页 URL\n const url = new URL(signInPath, window.location.origin)\n url.searchParams.set('unregistered', 'true')\n window.location.href = url.toString()\n }\n }\n\n // 处理禁止访问错误\n const handleForbidden = () => {\n notification.error({\n message: '访问被禁止',\n description: '您没有权限访问此资源。',\n })\n }\n\n // 创建响应处理函数\n const createResponseHandler = (responseType?: ResponseType) => {\n return async (_request: any, _options: any, response: Response): Promise<Response> => {\n // 非 JSON 类型直接交由调用方按响应类型读取\n if (\n responseType === ResponseType.BLOB ||\n responseType === ResponseType.ARRAY_BUFFER ||\n responseType === ResponseType.TEXT ||\n responseType === ResponseType.FORM_DATA\n ) {\n return response\n }\n\n // 默认 JSON\n let data: any\n try {\n data = await response.clone().json()\n } catch {\n // 非 JSON 或空响应体,直接返回原响应\n return response\n }\n\n if (isSuccessResponse(data, response.status)) {\n const responseData = data.data !== undefined ? data.data : data\n return new Response(JSON.stringify(responseData), {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n })\n }\n\n const errorMessage = extractErrorMessage(data)\n\n // 只在未禁止时显示错误通知\n if (!suppressErrorNotification) {\n notification.error({\n message: 'Request failed',\n description: errorMessage,\n })\n }\n\n const error = new Error(errorMessage)\n ;(error as any).response = response\n ;(error as any).data = data\n throw error\n }\n }\n\n // 处理HTTP状态码错误\n const handleHttpStatusError = (status: number, data: any) => {\n switch (status) {\n case HTTP_STATUS.UNAUTHORIZED:\n handleUnauthorized()\n break\n\n case HTTP_STATUS.UNREGISTERED:\n handleUnregistered()\n break\n\n case HTTP_STATUS.FORBIDDEN:\n handleForbidden()\n break\n\n default: {\n // 只在未禁止时显示错误通知\n if (!suppressErrorNotification) {\n // 安全地提取错误消息\n const errorMessage = extractErrorMessage(data) || `HTTP ${status} Error`\n notification.error({\n message: 'Request failed',\n description: errorMessage,\n })\n }\n break\n }\n }\n }\n\n // 创建ky实例\n const instance = useMemo(() => {\n const kyInstance = ky.create({\n prefixUrl: baseURL,\n retry: 0,\n timeout: REQUEST_TIMEOUT,\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n hooks: {\n beforeRequest: [\n request => {\n // 设置认证 headers\n if (token) {\n request.headers.set('Authorization', `Bearer ${token}`)\n }\n\n // 设置应用 ID headers\n if (!request.headers.has(APP_ID_HEADER) && permissionVersion !== PermissionVersion.V1) {\n if (isGlobal || !gameId) {\n request.headers.set(APP_ID_HEADER, 'global')\n } else {\n // 对 gameId 进行 URL 编码以避免非 ASCII 字符导致的 XMLHttpRequest 错误\n request.headers.set(APP_ID_HEADER, encodeURIComponent(String(gameId)))\n }\n }\n },\n ],\n beforeError: [\n async error => {\n const { response } = error\n\n if (response) {\n const status = response.status\n let data: any\n\n try {\n const contentType = response.headers.get('content-type') || ''\n if (contentType.includes('application/json') || contentType.startsWith('text/')) {\n data = await response.clone().json()\n }\n } catch {\n // 忽略 JSON 解析错误\n }\n\n handleHttpStatusError(status, data)\n } else {\n // 网络错误或请求超时等情况,只在未禁止时显示通知\n if (!suppressErrorNotification) {\n notification.error({\n message: 'Network Error',\n description: error.message || 'Network request failed',\n })\n }\n }\n\n return error\n },\n ],\n },\n })\n\n return kyInstance\n }, [\n baseURL,\n token,\n isGlobal,\n gameId,\n permissionVersion,\n notification,\n signInPath,\n clearToken,\n suppressErrorNotification,\n ])\n\n // 通用请求处理函数\n const makeRequest = async <T = any>(\n method: string,\n url: string,\n data?: any,\n requestOptions?: RequestOptions,\n ): Promise<T> => {\n const { responseType, ...kyOptions } = requestOptions || {}\n\n // 创建带有响应类型处理器的请求选项\n const finalOptions: KyOptions = {\n ...kyOptions,\n hooks: {\n ...kyOptions.hooks,\n afterResponse: [...(kyOptions.hooks?.afterResponse || []), createResponseHandler(responseType)],\n },\n }\n\n let response: Response\n\n if (data) {\n response = await instance(url, { method, json: data, ...finalOptions })\n } else {\n response = await instance(url, { method, ...finalOptions })\n }\n\n // 根据响应类型返回相应数据\n return processResponseByType(response, responseType)\n }\n\n // HTTP方法\n const get = <T = any>(url: string, options?: RequestOptions): Promise<T> => {\n return makeRequest<T>('GET', url, undefined, options)\n }\n\n const post = <T = any>(url: string, data?: any, options?: RequestOptions): Promise<T> => {\n return makeRequest<T>('POST', url, data, options)\n }\n\n const put = <T = any>(url: string, data?: any, options?: RequestOptions): Promise<T> => {\n return makeRequest<T>('PUT', url, data, options)\n }\n\n const del = <T = any>(url: string, options?: RequestOptions): Promise<T> => {\n return makeRequest<T>('DELETE', url, undefined, options)\n }\n\n const patch = <T = any>(url: string, data?: any, options?: RequestOptions): Promise<T> => {\n return makeRequest<T>('PATCH', url, data, options)\n }\n\n const options = <T = any>(url: string, requestOptions?: RequestOptions): Promise<T> => {\n return makeRequest<T>('OPTIONS', url, undefined, requestOptions)\n }\n\n const head = <T = any>(url: string, requestOptions?: RequestOptions): Promise<T> => {\n return makeRequest<T>('HEAD', url, undefined, requestOptions)\n }\n\n const request = <T = any>(requestOptions: RequestOptions & { url: string }): Promise<T> => {\n const { url, ...requestOpts } = requestOptions\n return makeRequest<T>(requestOpts.method || 'GET', url, undefined, requestOpts)\n }\n\n return {\n get,\n post,\n put,\n delete: del,\n patch,\n options,\n head,\n request,\n instance,\n }\n}\n","// 查询键工厂 - 使用简单的对象和函数来生成查询键\nexport const queryKeys = {\n // 权限相关\n permissions: {\n check: (permissions: string[], version: 'v1' | 'v2') => ['permissions', 'check', permissions, version] as const,\n allPermissions: ['permissions', 'all'] as const,\n allPermissionsV2: ['permissions', 'allV2'] as const,\n },\n // 用户相关\n users: {\n all: ['users'] as const,\n detail: (id: string) => ['users', 'detail', id] as const,\n create: ['users', 'create'] as const,\n update: ['users', 'update'] as const,\n delete: ['users', 'delete'] as const,\n },\n // 角色相关\n roles: {\n all: ['roles'] as const,\n detail: (name: string, version: 'v1' | 'v2') => ['roles', 'detail', name, version] as const,\n create: (version: 'v1' | 'v2') => ['roles', 'create', version] as const,\n update: (version: 'v1' | 'v2') => ['roles', 'update', version] as const,\n delete: ['roles', 'delete'] as const,\n },\n // 菜单相关\n menus: {\n all: ['menus'] as const,\n navbar: (gameId?: string) => ['menus', 'navbar', gameId] as const,\n detail: (id: number) => ['menus', 'detail', id] as const,\n create: ['menus', 'create'] as const,\n update: ['menus', 'update'] as const,\n delete: ['menus', 'delete'] as const,\n },\n // 枚举相关\n enums: {\n gameGroups: ['enums', 'gameGroups'] as const,\n gameIds: (gameGroups: string[]) => ['enums', 'gameIds', gameGroups] as const,\n },\n}\n\nexport type QueryKeys = typeof queryKeys\n"]}
@@ -1,2 +1,2 @@
1
- import {a as a$2}from'./chunk-JAGE2XCG.js';import {a as a$1}from'./chunk-Q4PXPBQR.js';import {a,b}from'./chunk-AGGPFMZE.js';import {Modal,Form,Button,Tooltip}from'antd';import {jsx}from'react/jsx-runtime';import {useMemo,useEffect,useState,useCallback}from'react';var S=p=>{let{children:e,code:r,showLoading:l,disabled:a,config:c,...o}=p,d=r?Array.isArray(r)?r:[r]:[],{data:n,isLoading:m}=a$1(d,c),{t}=a$2();return m?jsx(Button,{loading:l,disabled:!l,...o,children:e}):typeof n=="boolean"||n&&Object.values(n).some(Boolean)?jsx(Button,{disabled:a,...o,children:e}):jsx(Tooltip,{defaultOpen:!1,title:t("global.noEntitlement"),children:jsx(Button,{disabled:!0,...o,children:e})})},A=S;var w=a();function C(p){let{content:e,onConfirm:r,afterOpen:l,afterClose:a,...c}=p,o=useMemo(()=>b(),[]),{show:d,hide:n,isOpen:m,cleanup:t}=w();useEffect(()=>()=>{t(o);},[o,t]);let h=m(o),[M,u]=useState(!1),f=typeof e=="function",O=useCallback(async()=>{d(o),await l?.();},[o,d,l]),i=useCallback(()=>{n(o);},[o,n]),s=useCallback(async()=>{i(),await a?.();},[i,a]),x=useCallback(async()=>{try{u(!0),await r?.(),i(),await a?.();}catch(B){throw B}finally{u(!1);}},[r,i,a]),y=jsx(Modal,{...c,open:h,confirmLoading:M,onOk:x,onCancel:s,children:f?e({hide:i}):e});return {id:o,show:O,hide:i,modal:y}}function K(p){let{content:e,form:r,formProps:l,onConfirm:a,onSuccess:c,afterClose:o,...d}=p,[n,m]=useState({}),[t]=Form.useForm(r),h=typeof e=="function",{id:M,show:u,hide:f,modal:O}=C({...d,content:s=>jsx(Form,{...l,form:t,children:h?e(n,s):e}),onConfirm:async()=>{try{let s=await t.validateFields();await a?.(s,n),c?.(),f();}catch(s){throw s}},afterClose:()=>{m({}),o?.(t);}}),i=useCallback(s=>{let{initialValues:x,extraValues:y}=s||{};y!==void 0&&m(y),x&&t.setFieldsValue(x),u();},[t,u]);return {id:M,show:i,hide:f,modal:O}}export{A as a,w as b,C as c,K as d};//# sourceMappingURL=chunk-XBISTSFI.js.map
2
- //# sourceMappingURL=chunk-XBISTSFI.js.map
1
+ import {a as a$2}from'./chunk-TLXOBLJT.js';import {a as a$1}from'./chunk-7KC4QGFG.js';import {a,b}from'./chunk-EKBAANKX.js';import {Modal,Form,Button,Tooltip}from'antd';import {jsx}from'react/jsx-runtime';import {useMemo,useEffect,useState,useCallback}from'react';var S=p=>{let{children:e,code:r,showLoading:l,disabled:a,config:c,...o}=p,d=r?Array.isArray(r)?r:[r]:[],{data:n,isLoading:m}=a$1(d,c),{t}=a$2();return m?jsx(Button,{loading:l,disabled:!l,...o,children:e}):typeof n=="boolean"||n&&Object.values(n).some(Boolean)?jsx(Button,{disabled:a,...o,children:e}):jsx(Tooltip,{defaultOpen:!1,title:t("global.noEntitlement"),children:jsx(Button,{disabled:!0,...o,children:e})})},A=S;var w=a();function C(p){let{content:e,onConfirm:r,afterOpen:l,afterClose:a,...c}=p,o=useMemo(()=>b(),[]),{show:d,hide:n,isOpen:m,cleanup:t}=w();useEffect(()=>()=>{t(o);},[o,t]);let h=m(o),[M,u]=useState(!1),f=typeof e=="function",O=useCallback(async()=>{d(o),await l?.();},[o,d,l]),i=useCallback(()=>{n(o);},[o,n]),s=useCallback(async()=>{i(),await a?.();},[i,a]),x=useCallback(async()=>{try{u(!0),await r?.(),i(),await a?.();}catch(B){throw B}finally{u(!1);}},[r,i,a]),y=jsx(Modal,{...c,open:h,confirmLoading:M,onOk:x,onCancel:s,children:f?e({hide:i}):e});return {id:o,show:O,hide:i,modal:y}}function K(p){let{content:e,form:r,formProps:l,onConfirm:a,onSuccess:c,afterClose:o,...d}=p,[n,m]=useState({}),[t]=Form.useForm(r),h=typeof e=="function",{id:M,show:u,hide:f,modal:O}=C({...d,content:s=>jsx(Form,{...l,form:t,children:h?e(n,s):e}),onConfirm:async()=>{try{let s=await t.validateFields();await a?.(s,n),c?.(),f();}catch(s){throw s}},afterClose:()=>{m({}),o?.(t);}}),i=useCallback(s=>{let{initialValues:x,extraValues:y}=s||{};y!==void 0&&m(y),x&&t.setFieldsValue(x),u();},[t,u]);return {id:M,show:i,hide:f,modal:O}}export{A as a,w as b,C as c,K as d};//# sourceMappingURL=chunk-EQKZ3442.js.map
2
+ //# sourceMappingURL=chunk-EQKZ3442.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/permissionButton/PermissionButton.tsx","../src/hooks/modal/stores.ts","../src/hooks/modal/modal.tsx","../src/hooks/modal/formModal.tsx"],"names":["PermissionButton","props","children","code","showLoading","disabled","config","restProps","codes","data","isLoading","usePermission","useTranslation","jsx","Button","Tooltip","PermissionButton_default","useModalStore","createVisibilityStore","useModal","content","onConfirm","afterOpen","afterClose","modalProps","_id","useMemo","generateId","show","hide","isOpen","cleanup","useEffect","open","confirmLoading","setConfirmLoading","useState","isRenderFunction","_show","useCallback","_hide","onCancel","onOk","error","internalModal","Modal","useFormModal","form","formProps","onSuccess","internalExtraValues","setInternalExtraValues","internalForm","Form","id","modal","operation","values","showForm","options","initialValues","extraValues"],"mappings":"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","file":"chunk-XBISTSFI.js","sourcesContent":["import type { ButtonProps } from 'antd'\nimport { Button, Tooltip } from 'antd'\nimport type { Options as KyOptions } from 'ky'\nimport type { FC, PropsWithChildren } from 'react'\n\nimport { useTranslation } from '@/locale'\nimport { usePermission } from '@/services'\n\nexport interface PermissionButtonProps extends ButtonProps {\n code?: string | string[]\n showLoading?: boolean\n config?: KyOptions\n}\n\nconst PermissionButton: FC<PropsWithChildren<PermissionButtonProps>> = props => {\n const { children, code, showLoading, disabled, config, ...restProps } = props\n const codes = code ? (Array.isArray(code) ? code : [code]) : []\n const { data, isLoading } = usePermission(codes, config)\n const { t } = useTranslation()\n\n if (isLoading) {\n return (\n <Button loading={showLoading} disabled={!showLoading} {...restProps}>\n {children}\n </Button>\n )\n }\n\n // 只要有一个权限即可\n if (typeof data === 'boolean' || (data && Object.values(data).some(Boolean))) {\n return (\n <Button disabled={disabled} {...restProps}>\n {children}\n </Button>\n )\n }\n\n return (\n <Tooltip defaultOpen={false} title={t('global.noEntitlement')}>\n <Button disabled {...restProps}>\n {children}\n </Button>\n </Tooltip>\n )\n}\n\nexport default PermissionButton\n","import { createVisibilityStore } from '@/utils'\n\nexport const useModalStore = createVisibilityStore()\n","import type { ModalProps } from 'antd'\nimport { Modal } from 'antd'\nimport { type ReactNode, useCallback, useEffect, useMemo, useState } from 'react'\n\nimport { generateId } from '@/utils'\n\nimport { useModalStore } from './stores'\n\nexport interface UseModalOperation {\n hide: () => void\n}\n\nexport interface UseModalProps extends Omit<ModalProps, 'open' | 'confirmLoading' | 'onOk' | 'onCancel'> {\n content?: ReactNode | ((operation: UseModalOperation) => ReactNode)\n onConfirm?: () => void | Promise<void>\n afterOpen?: () => void | Promise<void>\n afterClose?: () => void | Promise<void>\n}\n\nexport function useModal(props: UseModalProps) {\n const { content, onConfirm, afterOpen, afterClose, ...modalProps } = props\n\n const _id = useMemo(() => generateId(), [])\n const { show, hide, isOpen, cleanup } = useModalStore()\n\n // 组件销毁时清理 ID\n useEffect(() => {\n return () => {\n cleanup(_id)\n }\n }, [_id, cleanup])\n\n const open = isOpen(_id)\n const [confirmLoading, setConfirmLoading] = useState(false)\n const isRenderFunction = typeof content === 'function'\n\n const _show = useCallback(async () => {\n show(_id)\n await afterOpen?.()\n }, [_id, show, afterOpen])\n\n const _hide = useCallback(() => {\n hide(_id)\n }, [_id, hide])\n\n const onCancel: ModalProps['onCancel'] = useCallback(async () => {\n _hide()\n await afterClose?.()\n }, [_hide, afterClose])\n\n const onOk = useCallback(async () => {\n try {\n setConfirmLoading(true)\n await onConfirm?.()\n _hide()\n await afterClose?.()\n } catch (error) {\n console.error('Modal confirm error:', error)\n throw error\n } finally {\n setConfirmLoading(false)\n }\n }, [onConfirm, _hide, afterClose])\n\n const internalModal = (\n <Modal {...modalProps} open={open} confirmLoading={confirmLoading} onOk={onOk} onCancel={onCancel}>\n {isRenderFunction ? content({ hide: _hide }) : content}\n </Modal>\n )\n\n return {\n id: _id,\n show: _show,\n hide: _hide,\n modal: internalModal,\n }\n}\n","import type { FormInstance, FormProps } from 'antd'\nimport { Form } from 'antd'\nimport type { AnyObject } from 'antd/es/_util/type'\nimport type { ReactNode } from 'react'\nimport { useCallback, useState } from 'react'\n\nimport type { RecursivePartial } from '@/types'\n\nimport { useModal, type UseModalOperation, type UseModalProps } from './modal'\n\nexport interface ShowFormOptions<Values extends AnyObject, ExtraValues> {\n initialValues?: RecursivePartial<Values>\n extraValues?: ExtraValues\n}\n\nexport interface UseFormModalProps<Values extends AnyObject = AnyObject, ExtraValues = Record<string, unknown>>\n extends Omit<UseModalProps, 'onConfirm' | 'content' | 'onShow' | 'afterClose'> {\n formProps?: Omit<FormProps, 'form'>\n form?: FormInstance<Values>\n content?: ReactNode | ((extraValues: ExtraValues, operation: UseModalOperation) => ReactNode)\n onConfirm?: (values: Values, extraValues: ExtraValues) => void | Promise<void>\n onSuccess?: () => void\n afterClose?: (form: FormInstance<Values>) => void\n}\n\nexport interface UseFormModalReturn<Values extends AnyObject, ExtraValues> {\n id: number\n show: (options?: ShowFormOptions<Values, ExtraValues>) => void\n hide: () => void\n modal: ReactNode\n}\n\nexport function useFormModal<Values extends AnyObject = AnyObject, ExtraValues = Record<string, unknown>>(\n props: UseFormModalProps<Values, ExtraValues>,\n): UseFormModalReturn<Values, ExtraValues> {\n const { content, form, formProps, onConfirm, onSuccess, afterClose, ...modalProps } = props\n const [internalExtraValues, setInternalExtraValues] = useState<ExtraValues>({} as ExtraValues)\n const [internalForm] = Form.useForm<Values>(form)\n\n const isRenderFunction = typeof content === 'function'\n\n const { id, show, hide, modal } = useModal({\n ...modalProps,\n content: operation => (\n <Form {...formProps} form={internalForm}>\n {isRenderFunction ? content(internalExtraValues, operation) : content}\n </Form>\n ),\n onConfirm: async () => {\n try {\n const values = await internalForm.validateFields()\n await onConfirm?.(values, internalExtraValues)\n onSuccess?.()\n hide()\n } catch (error) {\n console.error('Form validation or submission error:', error)\n throw error\n }\n },\n afterClose: () => {\n setInternalExtraValues({} as ExtraValues)\n afterClose?.(internalForm)\n },\n })\n\n const showForm = useCallback(\n (options?: ShowFormOptions<Values, ExtraValues>) => {\n const { initialValues, extraValues } = options || {}\n\n if (extraValues !== undefined) {\n setInternalExtraValues(extraValues)\n }\n\n if (initialValues) {\n internalForm.setFieldsValue(initialValues)\n }\n\n show()\n },\n [internalForm, show],\n )\n\n return {\n id,\n show: showForm,\n hide,\n modal,\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/components/permissionButton/PermissionButton.tsx","../src/hooks/modal/stores.ts","../src/hooks/modal/modal.tsx","../src/hooks/modal/formModal.tsx"],"names":["PermissionButton","props","children","code","showLoading","disabled","config","restProps","codes","data","isLoading","usePermission","useTranslation","jsx","Button","Tooltip","PermissionButton_default","useModalStore","createVisibilityStore","useModal","content","onConfirm","afterOpen","afterClose","modalProps","_id","useMemo","generateId","show","hide","isOpen","cleanup","useEffect","open","confirmLoading","setConfirmLoading","useState","isRenderFunction","_show","useCallback","_hide","onCancel","onOk","error","internalModal","Modal","useFormModal","form","formProps","onSuccess","internalExtraValues","setInternalExtraValues","internalForm","Form","id","modal","operation","values","showForm","options","initialValues","extraValues"],"mappings":"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","file":"chunk-EQKZ3442.js","sourcesContent":["import type { ButtonProps } from 'antd'\nimport { Button, Tooltip } from 'antd'\nimport type { Options as KyOptions } from 'ky'\nimport type { FC, PropsWithChildren } from 'react'\n\nimport { useTranslation } from '@/locale'\nimport { usePermission } from '@/services'\n\nexport interface PermissionButtonProps extends ButtonProps {\n code?: string | string[]\n showLoading?: boolean\n config?: KyOptions\n}\n\nconst PermissionButton: FC<PropsWithChildren<PermissionButtonProps>> = props => {\n const { children, code, showLoading, disabled, config, ...restProps } = props\n const codes = code ? (Array.isArray(code) ? code : [code]) : []\n const { data, isLoading } = usePermission(codes, config)\n const { t } = useTranslation()\n\n if (isLoading) {\n return (\n <Button loading={showLoading} disabled={!showLoading} {...restProps}>\n {children}\n </Button>\n )\n }\n\n // 只要有一个权限即可\n if (typeof data === 'boolean' || (data && Object.values(data).some(Boolean))) {\n return (\n <Button disabled={disabled} {...restProps}>\n {children}\n </Button>\n )\n }\n\n return (\n <Tooltip defaultOpen={false} title={t('global.noEntitlement')}>\n <Button disabled {...restProps}>\n {children}\n </Button>\n </Tooltip>\n )\n}\n\nexport default PermissionButton\n","import { createVisibilityStore } from '@/utils'\n\nexport const useModalStore = createVisibilityStore()\n","import type { ModalProps } from 'antd'\nimport { Modal } from 'antd'\nimport { type ReactNode, useCallback, useEffect, useMemo, useState } from 'react'\n\nimport { generateId } from '@/utils'\n\nimport { useModalStore } from './stores'\n\nexport interface UseModalOperation {\n hide: () => void\n}\n\nexport interface UseModalProps extends Omit<ModalProps, 'open' | 'confirmLoading' | 'onOk' | 'onCancel'> {\n content?: ReactNode | ((operation: UseModalOperation) => ReactNode)\n onConfirm?: () => void | Promise<void>\n afterOpen?: () => void | Promise<void>\n afterClose?: () => void | Promise<void>\n}\n\nexport function useModal(props: UseModalProps) {\n const { content, onConfirm, afterOpen, afterClose, ...modalProps } = props\n\n const _id = useMemo(() => generateId(), [])\n const { show, hide, isOpen, cleanup } = useModalStore()\n\n // 组件销毁时清理 ID\n useEffect(() => {\n return () => {\n cleanup(_id)\n }\n }, [_id, cleanup])\n\n const open = isOpen(_id)\n const [confirmLoading, setConfirmLoading] = useState(false)\n const isRenderFunction = typeof content === 'function'\n\n const _show = useCallback(async () => {\n show(_id)\n await afterOpen?.()\n }, [_id, show, afterOpen])\n\n const _hide = useCallback(() => {\n hide(_id)\n }, [_id, hide])\n\n const onCancel: ModalProps['onCancel'] = useCallback(async () => {\n _hide()\n await afterClose?.()\n }, [_hide, afterClose])\n\n const onOk = useCallback(async () => {\n try {\n setConfirmLoading(true)\n await onConfirm?.()\n _hide()\n await afterClose?.()\n } catch (error) {\n console.error('Modal confirm error:', error)\n throw error\n } finally {\n setConfirmLoading(false)\n }\n }, [onConfirm, _hide, afterClose])\n\n const internalModal = (\n <Modal {...modalProps} open={open} confirmLoading={confirmLoading} onOk={onOk} onCancel={onCancel}>\n {isRenderFunction ? content({ hide: _hide }) : content}\n </Modal>\n )\n\n return {\n id: _id,\n show: _show,\n hide: _hide,\n modal: internalModal,\n }\n}\n","import type { FormInstance, FormProps } from 'antd'\nimport { Form } from 'antd'\nimport type { AnyObject } from 'antd/es/_util/type'\nimport type { ReactNode } from 'react'\nimport { useCallback, useState } from 'react'\n\nimport type { RecursivePartial } from '@/types'\n\nimport { useModal, type UseModalOperation, type UseModalProps } from './modal'\n\nexport interface ShowFormOptions<Values extends AnyObject, ExtraValues> {\n initialValues?: RecursivePartial<Values>\n extraValues?: ExtraValues\n}\n\nexport interface UseFormModalProps<Values extends AnyObject = AnyObject, ExtraValues = Record<string, unknown>>\n extends Omit<UseModalProps, 'onConfirm' | 'content' | 'onShow' | 'afterClose'> {\n formProps?: Omit<FormProps, 'form'>\n form?: FormInstance<Values>\n content?: ReactNode | ((extraValues: ExtraValues, operation: UseModalOperation) => ReactNode)\n onConfirm?: (values: Values, extraValues: ExtraValues) => void | Promise<void>\n onSuccess?: () => void\n afterClose?: (form: FormInstance<Values>) => void\n}\n\nexport interface UseFormModalReturn<Values extends AnyObject, ExtraValues> {\n id: number\n show: (options?: ShowFormOptions<Values, ExtraValues>) => void\n hide: () => void\n modal: ReactNode\n}\n\nexport function useFormModal<Values extends AnyObject = AnyObject, ExtraValues = Record<string, unknown>>(\n props: UseFormModalProps<Values, ExtraValues>,\n): UseFormModalReturn<Values, ExtraValues> {\n const { content, form, formProps, onConfirm, onSuccess, afterClose, ...modalProps } = props\n const [internalExtraValues, setInternalExtraValues] = useState<ExtraValues>({} as ExtraValues)\n const [internalForm] = Form.useForm<Values>(form)\n\n const isRenderFunction = typeof content === 'function'\n\n const { id, show, hide, modal } = useModal({\n ...modalProps,\n content: operation => (\n <Form {...formProps} form={internalForm}>\n {isRenderFunction ? content(internalExtraValues, operation) : content}\n </Form>\n ),\n onConfirm: async () => {\n try {\n const values = await internalForm.validateFields()\n await onConfirm?.(values, internalExtraValues)\n onSuccess?.()\n hide()\n } catch (error) {\n console.error('Form validation or submission error:', error)\n throw error\n }\n },\n afterClose: () => {\n setInternalExtraValues({} as ExtraValues)\n afterClose?.(internalForm)\n },\n })\n\n const showForm = useCallback(\n (options?: ShowFormOptions<Values, ExtraValues>) => {\n const { initialValues, extraValues } = options || {}\n\n if (extraValues !== undefined) {\n setInternalExtraValues(extraValues)\n }\n\n if (initialValues) {\n internalForm.setFieldsValue(initialValues)\n }\n\n show()\n },\n [internalForm, show],\n )\n\n return {\n id,\n show: showForm,\n hide,\n modal,\n }\n}\n"]}
@@ -1,2 +1,2 @@
1
- import {c,d,j,i as i$1}from'./chunk-MS25PZ5J.js';import {d as d$1}from'./chunk-XBISTSFI.js';import {a}from'./chunk-JAGE2XCG.js';import {c as c$1}from'./chunk-Q4PXPBQR.js';import {i}from'./chunk-AGGPFMZE.js';import {App,Form,Input,Divider,Skeleton,Card,Space,Select,Button,Empty,Typography,Checkbox,Row,Col,Collapse}from'antd';import {useState,useEffect,useTransition,useCallback}from'react';import {jsxs,Fragment,jsx}from'react/jsx-runtime';var oe=m=>{let{permissions:r,readonly:t,expand:n,value:l,onChange:g}=m,[c,f]=useState([]),[y,R]=useState({}),[a$1,d]=useState(l??[]),{t:P}=a(),[,v]=useTransition(),V=useCallback(e=>{f(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},x=(e,s)=>{let o=p(e.target.checked,s);d(o),g?.(o);};useEffect(()=>{d(l??[]);},[l]),useEffect(()=>{n&&v(()=>{f((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:y[e.category],onChange:s=>{x(s,e.permissions?.map(o=>o.value));},children:P("global.selectAll")}),children:jsx(Checkbox.Group,{style:{width:"100%"},value:a$1,disabled:t,children:jsx(Row,{gutter:[10,10],style:{width:"100%"},children:e.permissions?.map(s=>jsx(Col,{span:6,children:jsx(Checkbox,{value:s.value,onChange:o=>{x(o,[s.value]);},children:s.label})},s.value))})})}));return jsx(Collapse,{style:{width:"100%"},collapsible:"header",activeKey:c,items:I,onChange:V})},k=oe;var{Text:w}=Typography,{Option:le}=Select,pe=m=>{let{expand:r=!0,value:t,readonly:n,onChange:l}=m,{data:g,isLoading:c,error:f}=j(),{data:y,isLoading:R}=c$1(),[a$1,d]=useState([]),P=g?.filter(e=>e.is_common),v=g?.filter(e=>!e.is_common),V=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]),f)return jsx("div",{className:"flex justify-center",children:jsx(w,{type:"danger",children:p("PermissionList.failedDescription")})});let x=()=>{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:!0,children:p("PermissionList.baseSectionTitle")})}),jsx(Skeleton,{active:!0,loading:V,children:jsx(k,{value:t?.global,readonly:n,permissions:P,expand:r,onChange:e=>{l?.({...t,global:e});}})}),jsx("div",{className:"my-12",children:jsx(Divider,{dashed:!0,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:y?.find(o=>String(o.id)===e.gameId)?.name}):jsx(Select,{disabled:n,value:a$1[s].gameId||void 0,style:{width:"160px"},placeholder:p("PermissionList.gameSelectPlaceholder"),onChange:o=>{d(u=>{let b=u.slice();return b[s].gameId=o,b});},children:y?.map(o=>jsx(le,{value:o.id,disabled:a$1.some(({gameId:u})=>u===String(o.id)),children:o.name},o.id))})]}),className:"mb-6",extra:!n&&jsx(Button,{type:"link",onClick:()=>{I(s);},children:p("PermissionList.removeText")}),children:a$1[s].gameId?jsx(Skeleton,{active:!0,loading:V,children:jsx(k,{value:t?.[a$1[s].gameId],readonly:n,expand:r,permissions:v,onChange:o=>{l?.({...t,[a$1[s].gameId]:o});}})}):jsx(Empty,{description:p("PermissionList.gameSectionDescription")})},s)),!n&&jsx(Button,{block:!0,type:"dashed",onClick:x,children:p("PermissionList.addText")})]})},U=pe;var{Text:ue}=Typography,ge=m=>{let{expand:r=!0,value:t,readonly:n,onChange:l}=m,{data:g,isLoading:c,error:f}=i$1(),{t:y}=a();return f?jsx("div",{className:"flex justify-center",children:jsx(ue,{type:"danger",children:y("PermissionList.failedDescription")})}):jsx(Skeleton,{active:!0,loading:c,children:jsx(k,{value:t,permissions:g,readonly:n,expand:r,onChange:l})})},$=ge;var fe=m=>{let{value:r}=m,{permissionVersion:t}=i();return t==="v2"?jsx(U,{...m,value:r}):jsx($,{...m,value:r})},H=fe;var Qe=({mode:m,onSuccess:r})=>{let{message:t}=App.useApp(),{t:n}=a(),l=c(),g=d(),c$1=m==="create",f=n(c$1?"Role.createTitle":"Role.updateTitle"),y=jsxs(Fragment,{children:[jsx(Form.Item,{label:n("global.name"),name:"name",rules:[{required:!0}],children:jsx(Input,{disabled:!c$1})}),jsx(Form.Item,{name:"permissions",children:jsx(H,{})})]});return d$1({title:f,width:"1000px",formProps:{layout:"vertical"},content:y,onConfirm:async(a,d)=>{let P=`role_${a.name}`,v=a.permissions;c$1?(await l.mutateAsync({name:P,permissions:v}),t.success(n("Role.createSuccessfully"))):(await g.mutateAsync({id:d?.id,name:P,permissions:v}),t.success(n("Role.updateSuccessfully"))),r?.();}})};export{H as a,Qe as b};//# sourceMappingURL=chunk-LKQSOMD5.js.map
2
- //# sourceMappingURL=chunk-LKQSOMD5.js.map
1
+ import {c,d,j,i as i$1}from'./chunk-BKF7C4LV.js';import {d as d$1}from'./chunk-EQKZ3442.js';import {a}from'./chunk-TLXOBLJT.js';import {c as c$1}from'./chunk-7KC4QGFG.js';import {i}from'./chunk-EKBAANKX.js';import {App,Form,Input,Divider,Skeleton,Card,Space,Select,Button,Empty,Typography,Checkbox,Row,Col,Collapse}from'antd';import {useState,useEffect,useTransition,useCallback}from'react';import {jsxs,Fragment,jsx}from'react/jsx-runtime';var oe=m=>{let{permissions:r,readonly:t,expand:n,value:l,onChange:g}=m,[c,f]=useState([]),[y,R]=useState({}),[a$1,d]=useState(l??[]),{t:P}=a(),[,v]=useTransition(),V=useCallback(e=>{f(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},x=(e,s)=>{let o=p(e.target.checked,s);d(o),g?.(o);};useEffect(()=>{d(l??[]);},[l]),useEffect(()=>{n&&v(()=>{f((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:y[e.category],onChange:s=>{x(s,e.permissions?.map(o=>o.value));},children:P("global.selectAll")}),children:jsx(Checkbox.Group,{style:{width:"100%"},value:a$1,disabled:t,children:jsx(Row,{gutter:[10,10],style:{width:"100%"},children:e.permissions?.map(s=>jsx(Col,{span:6,children:jsx(Checkbox,{value:s.value,onChange:o=>{x(o,[s.value]);},children:s.label})},s.value))})})}));return jsx(Collapse,{style:{width:"100%"},collapsible:"header",activeKey:c,items:I,onChange:V})},k=oe;var{Text:w}=Typography,{Option:le}=Select,pe=m=>{let{expand:r=!0,value:t,readonly:n,onChange:l}=m,{data:g,isLoading:c,error:f}=j(),{data:y,isLoading:R}=c$1(),[a$1,d]=useState([]),P=g?.filter(e=>e.is_common),v=g?.filter(e=>!e.is_common),V=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]),f)return jsx("div",{className:"flex justify-center",children:jsx(w,{type:"danger",children:p("PermissionList.failedDescription")})});let x=()=>{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:!0,children:p("PermissionList.baseSectionTitle")})}),jsx(Skeleton,{active:!0,loading:V,children:jsx(k,{value:t?.global,readonly:n,permissions:P,expand:r,onChange:e=>{l?.({...t,global:e});}})}),jsx("div",{className:"my-12",children:jsx(Divider,{dashed:!0,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:y?.find(o=>String(o.id)===e.gameId)?.name}):jsx(Select,{disabled:n,value:a$1[s].gameId||void 0,style:{width:"160px"},placeholder:p("PermissionList.gameSelectPlaceholder"),onChange:o=>{d(u=>{let b=u.slice();return b[s].gameId=o,b});},children:y?.map(o=>jsx(le,{value:o.id,disabled:a$1.some(({gameId:u})=>u===String(o.id)),children:o.name},o.id))})]}),className:"mb-6",extra:!n&&jsx(Button,{type:"link",onClick:()=>{I(s);},children:p("PermissionList.removeText")}),children:a$1[s].gameId?jsx(Skeleton,{active:!0,loading:V,children:jsx(k,{value:t?.[a$1[s].gameId],readonly:n,expand:r,permissions:v,onChange:o=>{l?.({...t,[a$1[s].gameId]:o});}})}):jsx(Empty,{description:p("PermissionList.gameSectionDescription")})},s)),!n&&jsx(Button,{block:!0,type:"dashed",onClick:x,children:p("PermissionList.addText")})]})},U=pe;var{Text:ue}=Typography,ge=m=>{let{expand:r=!0,value:t,readonly:n,onChange:l}=m,{data:g,isLoading:c,error:f}=i$1(),{t:y}=a();return f?jsx("div",{className:"flex justify-center",children:jsx(ue,{type:"danger",children:y("PermissionList.failedDescription")})}):jsx(Skeleton,{active:!0,loading:c,children:jsx(k,{value:t,permissions:g,readonly:n,expand:r,onChange:l})})},$=ge;var fe=m=>{let{value:r}=m,{permissionVersion:t}=i();return t==="v2"?jsx(U,{...m,value:r}):jsx($,{...m,value:r})},H=fe;var Qe=({mode:m,onSuccess:r})=>{let{message:t}=App.useApp(),{t:n}=a(),l=c(),g=d(),c$1=m==="create",f=n(c$1?"Role.createTitle":"Role.updateTitle"),y=jsxs(Fragment,{children:[jsx(Form.Item,{label:n("global.name"),name:"name",rules:[{required:!0}],children:jsx(Input,{disabled:!c$1})}),jsx(Form.Item,{name:"permissions",children:jsx(H,{})})]});return d$1({title:f,width:"1000px",formProps:{layout:"vertical"},content:y,onConfirm:async(a,d)=>{let P=`role_${a.name}`,v=a.permissions;c$1?(await l.mutateAsync({name:P,permissions:v}),t.success(n("Role.createSuccessfully"))):(await g.mutateAsync({id:d?.id,name:P,permissions:v}),t.success(n("Role.updateSuccessfully"))),r?.();}})};export{H as a,Qe as b};//# sourceMappingURL=chunk-K227EWOS.js.map
2
+ //# sourceMappingURL=chunk-K227EWOS.js.map