react-toolkits 2.22.30 → 2.22.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/lib/{chunk-R5ANLDNN.js → chunk-5ZN662QX.js} +2 -2
- package/lib/{chunk-R5ANLDNN.js.map → chunk-5ZN662QX.js.map} +1 -1
- package/lib/{chunk-SR4EZHHH.js → chunk-7GCU2U2F.js} +2 -2
- package/lib/{chunk-SR4EZHHH.js.map → chunk-7GCU2U2F.js.map} +1 -1
- package/lib/chunk-EH4BHJAY.js +2 -0
- package/lib/{chunk-UCD6QQ6P.js.map → chunk-EH4BHJAY.js.map} +1 -1
- package/lib/chunk-GE7DPAVK.js +2 -0
- package/lib/chunk-GE7DPAVK.js.map +1 -0
- package/lib/{chunk-TPXP7CV6.js → chunk-ILWM5LDQ.js} +2 -2
- package/lib/{chunk-TPXP7CV6.js.map → chunk-ILWM5LDQ.js.map} +1 -1
- package/lib/{chunk-2MBSA3L6.js → chunk-MHSZPPYJ.js} +2 -2
- package/lib/{chunk-2MBSA3L6.js.map → chunk-MHSZPPYJ.js.map} +1 -1
- package/lib/{chunk-WWIVKJIE.js → chunk-OCJ47MBS.js} +2 -2
- package/lib/{chunk-WWIVKJIE.js.map → chunk-OCJ47MBS.js.map} +1 -1
- package/lib/{chunk-AI22344O.js → chunk-UVF6R735.js} +2 -2
- package/lib/{chunk-AI22344O.js.map → chunk-UVF6R735.js.map} +1 -1
- package/lib/chunk-WBSTOYBM.js +3 -0
- package/lib/chunk-WBSTOYBM.js.map +1 -0
- package/lib/{createMenuItem-4NN325FZ.js → createMenuItem-GITYBEWA.js} +2 -2
- package/lib/{createMenuItem-4NN325FZ.js.map → createMenuItem-GITYBEWA.js.map} +1 -1
- package/lib/index.d.ts +18 -9
- package/lib/index.js +2 -2
- package/lib/index.js.map +1 -1
- package/lib/{menuItemList-YQ7GEN7E.js → menuItemList-ITPYOEBV.js} +2 -2
- package/lib/{menuItemList-YQ7GEN7E.js.map → menuItemList-ITPYOEBV.js.map} +1 -1
- package/lib/{roleDetail-BW66VCG4.js → roleDetail-VJ6QBW4Z.js} +2 -2
- package/lib/{roleDetail-BW66VCG4.js.map → roleDetail-VJ6QBW4Z.js.map} +1 -1
- package/lib/{roleList-OM6JZGIT.js → roleList-D7ITOPLW.js} +2 -2
- package/lib/{roleList-OM6JZGIT.js.map → roleList-D7ITOPLW.js.map} +1 -1
- package/lib/{updateMenuItem-CZWG6ZF3.js → updateMenuItem-ZFIETATW.js} +2 -2
- package/lib/{updateMenuItem-CZWG6ZF3.js.map → updateMenuItem-ZFIETATW.js.map} +1 -1
- package/lib/{userDetail-6DT2W7AU.js → userDetail-V5772FTH.js} +2 -2
- package/lib/{userDetail-6DT2W7AU.js.map → userDetail-V5772FTH.js.map} +1 -1
- package/lib/{userList-UOOCXCFE.js → userList-TQAILD4E.js} +2 -2
- package/lib/{userList-UOOCXCFE.js.map → userList-TQAILD4E.js.map} +1 -1
- package/package.json +3 -3
- package/lib/chunk-CZVEA2JJ.js +0 -2
- package/lib/chunk-CZVEA2JJ.js.map +0 -1
- package/lib/chunk-OLBC35WM.js +0 -3
- package/lib/chunk-OLBC35WM.js.map +0 -1
- package/lib/chunk-UCD6QQ6P.js +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/modules/permission/hooks/user-hooks.tsx"],"names":["Text","Typography","handleWildcardSelection","value","onChange","last","WILDCARD","first","GroupSelect","props","rest","ky","useKy","data","isLoading","useQuery","queryKeys","options","group","jsx","Select","GameSelect","groups","permissionVersion","useToolkitsStore","isV3","isV4","response","useUserModal","mode","onSuccess","message","App","t","useTranslation","roles","isRolesLoading","useAllRoles","create","useCreateUser","update","useUpdateUser","isCreateMode","title","content","jsxs","Fragment","Form","Input","role","useFormModal","values","extraValues","useUserModalV2","fields","add","remove","Row","Col","field","setFieldValue","prevValues","nextValues","getFieldValue","_groups","_rule","item","index","MinusCircleOutlined","Empty","Button"],"mappings":"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","file":"chunk-WWIVKJIE.js","sourcesContent":["import { MinusCircleOutlined } from '@ant-design/icons'\nimport { useQuery } from '@tanstack/react-query'\nimport { App, Button, Col, Empty, Form, Input, Row, Select, Typography } from 'antd'\nimport { first, last } from 'lodash-es'\nimport { Fragment } from 'react'\nimport { type FC } from 'react'\n\nimport { useToolkitsStore } from '@/components'\nimport { PermissionVersion, WILDCARD } from '@/constants'\nimport { useFormModal } from '@/hooks/modal'\nimport { useKy } from '@/libs'\nimport { useTranslation } from '@/locale'\nimport { queryKeys } from '@/queryKeys'\n\nimport { useAllRoles, useCreateUser, useUpdateUser } from '../services'\n\nconst { Text } = Typography\n\n/**\n * 处理通配符选择逻辑\n * - 如果最后选择的是通配符,则只保留通配符\n * - 如果第一个是通配符但又选择了其他项,则移除通配符\n */\nconst handleWildcardSelection = (value: string[], onChange?: (value: string[]) => void) => {\n if (last(value) === WILDCARD) {\n onChange?.([WILDCARD])\n } else if (first(value) === WILDCARD) {\n onChange?.(value.slice(1))\n } else {\n onChange?.(value)\n }\n}\n\ninterface GroupSelectProps {\n value?: string[]\n onChange?: (value: string[]) => void\n}\n\nconst GroupSelect: FC<GroupSelectProps> = props => {\n const { onChange, ...rest } = props\n const ky = useKy()\n\n const { data, isLoading } = useQuery({\n queryKey: queryKeys.enums.gameGroups,\n queryFn: () => ky.get<string[]>('/api/enum/get?enum=game_group&type=all'),\n })\n\n const options = [{ label: '通用', value: WILDCARD }].concat(\n data?.map(group => ({ label: group, value: group })) ?? [],\n )\n\n return (\n <Select\n {...rest}\n allowClear\n showSearch\n mode=\"tags\"\n optionFilterProp=\"label\"\n loading={isLoading}\n options={options}\n onChange={value => handleWildcardSelection(value, onChange)}\n />\n )\n}\n\ninterface GameSelectProps {\n groups?: string[]\n value?: string[]\n onChange?: (value: string[]) => void\n}\n\n/**\n * 游戏选择组件\n * - V3: 依赖 groups 参数,需要先选择项目组才能加载游戏列表\n * - V4: 不依赖 groups,直接加载所有游戏列表\n */\nconst GameSelect: FC<GameSelectProps> = props => {\n const { groups, onChange, ...rest } = props\n const ky = useKy()\n const { permissionVersion } = useToolkitsStore()\n const isV3 = permissionVersion === PermissionVersion.V3\n const isV4 = permissionVersion === PermissionVersion.V4\n\n const { data, isLoading } = useQuery({\n queryKey: queryKeys.enums.gameIds(isV4 ? [] : (groups ?? [])),\n queryFn: () =>\n ky\n .get<{\n list: {\n id: string\n name: string\n }[]\n }>(`/api/enum/game_group/get_game_ids${isV4 ? '' : `?game_groups=${groups?.join(',')}`}`)\n .then(response => response?.list),\n enabled: isV4 || (isV3 && !!groups?.length),\n })\n\n const options = data?.map((group: { id: string; name: string }) => ({ label: group.name, value: group.id }))\n\n return (\n <Select\n {...rest}\n allowClear\n showSearch\n optionFilterProp=\"label\"\n mode=\"tags\"\n loading={isLoading}\n options={options}\n onChange={value => handleWildcardSelection(value, onChange)}\n />\n )\n}\n\ninterface UserModalFormSchema {\n name: string\n roles: string[]\n}\n\nexport const useUserModal = ({ mode, onSuccess }: { mode: 'create' | 'update'; onSuccess?: () => void }) => {\n const { message } = App.useApp()\n const { t } = useTranslation()\n const { data: roles, isLoading: isRolesLoading } = useAllRoles()\n const create = useCreateUser()\n const update = useUpdateUser()\n\n const isCreateMode = mode === 'create'\n\n const title = isCreateMode ? t('User.createTitle') : t('User.updateTitle')\n\n const content = (\n <>\n <Form.Item label={t('global.name')} name=\"name\" rules={[{ required: true }]}>\n <Input disabled={!isCreateMode} />\n </Form.Item>\n <Form.Item label={t('global.role')} name=\"roles\">\n <Select\n allowClear\n showSearch\n mode=\"multiple\"\n loading={isRolesLoading}\n optionFilterProp=\"label\"\n options={roles?.map(role => ({ label: role.name, value: role.name }))}\n />\n </Form.Item>\n </>\n )\n\n const onConfirm = async (values: UserModalFormSchema, extraValues: { id: string }) => {\n if (isCreateMode) {\n await create.mutateAsync(values)\n message.success(t('User.createSuccessfully'))\n } else {\n await update.mutateAsync({ ...values, id: extraValues?.id })\n message.success(t('User.updateSuccessfully'))\n }\n onSuccess?.()\n }\n\n return useFormModal<UserModalFormSchema, { id: string }>({\n title,\n width: '600px',\n formProps: {\n autoComplete: 'off',\n labelCol: { flex: '80px' },\n },\n content,\n onConfirm,\n })\n}\n\ninterface UserModalV2FormSchema {\n name: string\n permissions: {\n game_group: string[]\n game_ids: string[]\n role: string\n }[]\n}\n\n/**\n * 用户弹窗 V2 版本(用于 V3 和 V4 权限系统)\n * - V3: 显示项目组选择,游戏列表依赖项目组\n * - V4: 隐藏项目组选择,游戏列表独立加载\n */\nexport const useUserModalV2 = ({ mode, onSuccess }: { mode: 'create' | 'update'; onSuccess?: () => void }) => {\n const { message } = App.useApp()\n const { t } = useTranslation()\n const { data: roles, isLoading: isRolesLoading } = useAllRoles()\n const create = useCreateUser()\n const update = useUpdateUser()\n const isCreateMode = mode === 'create'\n const title = isCreateMode ? t('User.createTitle') : t('User.updateTitle')\n const { permissionVersion } = useToolkitsStore()\n const isV3 = permissionVersion === PermissionVersion.V3\n\n const content = (\n <>\n <Form.Item label={t('global.name')} name=\"name\" rules={[{ required: true }]}>\n <Input disabled={!isCreateMode} />\n </Form.Item>\n <Form.List name=\"permissions\">\n {(fields, { add, remove }) => (\n <Row gutter={8}>\n {isV3 && (\n <Col span={8} className=\"text-center mb-4\">\n <Text strong>{t('global.projectGroup')}</Text>\n </Col>\n )}\n <Col span={isV3 ? 10 : 14} className=\"text-center mb-4\">\n <Text strong>{t('global.game')}</Text>\n </Col>\n <Col span={isV3 ? 6 : 10} className=\"text-center mb-4\">\n <Text strong>{t('global.role')}</Text>\n </Col>\n {fields.map(field => (\n <Fragment key={field.key}>\n {isV3 && (\n <Col span={8}>\n <Form.Item noStyle shouldUpdate>\n {({ setFieldValue }) => (\n <Form.Item name={[field.name, 'game_group']}>\n <GroupSelect\n onChange={() => {\n setFieldValue(['permissions', field.name, 'game_ids'], [])\n }}\n />\n </Form.Item>\n )}\n </Form.Item>\n </Col>\n )}\n <Col span={isV3 ? 10 : 14}>\n {isV3 ? (\n <Form.Item\n noStyle\n shouldUpdate={(prevValues, nextValues) =>\n prevValues.permissions[field.name]?.game_group !==\n nextValues.permissions[field.name]?.game_group\n }\n >\n {({ getFieldValue }) => {\n const _groups = getFieldValue(['permissions', field.name, 'game_group'])\n\n return (\n <Form.Item\n name={[field.name, 'game_ids']}\n dependencies={[['permissions', field.name, 'game_group']]}\n rules={[{ required: !!_groups?.length, message: '请选择游戏' }]}\n >\n <GameSelect groups={_groups} />\n </Form.Item>\n )\n }}\n </Form.Item>\n ) : (\n <Form.Item name={[field.name, 'game_ids']} rules={[{ required: true, message: '请选择游戏' }]}>\n <GameSelect />\n </Form.Item>\n )}\n </Col>\n <Col span={isV3 ? 6 : 10}>\n <div className=\"flex\">\n <div className=\"flex-1\">\n <Form.Item\n name={[field.name, 'role']}\n rules={[\n { required: true, message: '请选择角色' },\n ({ getFieldValue }) => ({\n validator(_rule, value) {\n const items = getFieldValue('permissions') as UserModalV2FormSchema['permissions']\n const otherItems = items.filter((item, index) => !!item && index !== field.name)\n if (otherItems.some(item => item.role === value)) {\n return Promise.reject(new Error('请勿重复选择角色'))\n }\n return Promise.resolve()\n },\n }),\n ]}\n >\n <Select\n allowClear\n showSearch\n optionFilterProp=\"label\"\n loading={isRolesLoading}\n options={roles?.map(role => ({ label: role.name, value: role.name }))}\n />\n </Form.Item>\n </div>\n <div className=\"w-8 text-center\">\n <Form.Item>\n <MinusCircleOutlined\n onClick={() => {\n remove(field.name)\n }}\n />\n </Form.Item>\n </div>\n </div>\n </Col>\n </Fragment>\n ))}\n {fields.length === 0 && (\n <Col span={24}>\n <Empty className=\"mb-6\" />\n </Col>\n )}\n <Col span={24}>\n <Button block type=\"dashed\" onClick={() => add()}>\n {t('global.add')}\n </Button>\n </Col>\n </Row>\n )}\n </Form.List>\n </>\n )\n\n const onConfirm = async (values: UserModalV2FormSchema, extraValues: { id: string }) => {\n if (isCreateMode) {\n await create.mutateAsync(values)\n message.success(t('User.createSuccessfully'))\n } else {\n await update.mutateAsync({ ...values, id: extraValues?.id })\n message.success(t('User.updateSuccessfully'))\n }\n onSuccess?.()\n }\n\n return useFormModal<UserModalV2FormSchema, { id: string }>({\n title,\n width: '1000px',\n formProps: {\n autoComplete: 'off',\n labelCol: { flex: '80px' },\n },\n content,\n onConfirm,\n })\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/modules/permission/hooks/user-hooks.tsx"],"names":["Text","Typography","handleWildcardSelection","value","onChange","last","WILDCARD","first","GroupSelect","props","rest","ky","useKy","data","isLoading","useQuery","queryKeys","options","group","jsx","Select","GameSelect","groups","permissionVersion","useToolkitsStore","isV3","isV4","response","useUserModal","mode","onSuccess","message","App","t","useTranslation","roles","isRolesLoading","useAllRoles","create","useCreateUser","update","useUpdateUser","isCreateMode","title","content","jsxs","Fragment","Form","Input","role","useFormModal","values","extraValues","useUserModalV2","fields","add","remove","Row","Col","field","setFieldValue","prevValues","nextValues","getFieldValue","_groups","_rule","item","index","MinusCircleOutlined","Empty","Button"],"mappings":"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","file":"chunk-OCJ47MBS.js","sourcesContent":["import { MinusCircleOutlined } from '@ant-design/icons'\nimport { useQuery } from '@tanstack/react-query'\nimport { App, Button, Col, Empty, Form, Input, Row, Select, Typography } from 'antd'\nimport { first, last } from 'lodash-es'\nimport { Fragment } from 'react'\nimport { type FC } from 'react'\n\nimport { useToolkitsStore } from '@/components'\nimport { PermissionVersion, WILDCARD } from '@/constants'\nimport { useFormModal } from '@/hooks/modal'\nimport { useKy } from '@/libs'\nimport { useTranslation } from '@/locale'\nimport { queryKeys } from '@/queryKeys'\n\nimport { useAllRoles, useCreateUser, useUpdateUser } from '../services'\n\nconst { Text } = Typography\n\n/**\n * 处理通配符选择逻辑\n * - 如果最后选择的是通配符,则只保留通配符\n * - 如果第一个是通配符但又选择了其他项,则移除通配符\n */\nconst handleWildcardSelection = (value: string[], onChange?: (value: string[]) => void) => {\n if (last(value) === WILDCARD) {\n onChange?.([WILDCARD])\n } else if (first(value) === WILDCARD) {\n onChange?.(value.slice(1))\n } else {\n onChange?.(value)\n }\n}\n\ninterface GroupSelectProps {\n value?: string[]\n onChange?: (value: string[]) => void\n}\n\nconst GroupSelect: FC<GroupSelectProps> = props => {\n const { onChange, ...rest } = props\n const ky = useKy()\n\n const { data, isLoading } = useQuery({\n queryKey: queryKeys.enums.gameGroups,\n queryFn: () => ky.get<string[]>('/api/enum/get?enum=game_group&type=all'),\n })\n\n const options = [{ label: '通用', value: WILDCARD }].concat(\n data?.map(group => ({ label: group, value: group })) ?? [],\n )\n\n return (\n <Select\n {...rest}\n allowClear\n showSearch\n mode=\"tags\"\n optionFilterProp=\"label\"\n loading={isLoading}\n options={options}\n onChange={value => handleWildcardSelection(value, onChange)}\n />\n )\n}\n\ninterface GameSelectProps {\n groups?: string[]\n value?: string[]\n onChange?: (value: string[]) => void\n}\n\n/**\n * 游戏选择组件\n * - V3: 依赖 groups 参数,需要先选择项目组才能加载游戏列表\n * - V4: 不依赖 groups,直接加载所有游戏列表\n */\nconst GameSelect: FC<GameSelectProps> = props => {\n const { groups, onChange, ...rest } = props\n const ky = useKy()\n const { permissionVersion } = useToolkitsStore()\n const isV3 = permissionVersion === PermissionVersion.V3\n const isV4 = permissionVersion === PermissionVersion.V4\n\n const { data, isLoading } = useQuery({\n queryKey: queryKeys.enums.gameIds(isV4 ? [] : (groups ?? [])),\n queryFn: () =>\n ky\n .get<{\n list: {\n id: string\n name: string\n }[]\n }>(`/api/enum/game_group/get_game_ids${isV4 ? '' : `?game_groups=${groups?.join(',')}`}`)\n .then(response => response?.list),\n enabled: isV4 || (isV3 && !!groups?.length),\n })\n\n const options = data?.map((group: { id: string; name: string }) => ({ label: group.name, value: group.id }))\n\n return (\n <Select\n {...rest}\n allowClear\n showSearch\n optionFilterProp=\"label\"\n mode=\"tags\"\n loading={isLoading}\n options={options}\n onChange={value => handleWildcardSelection(value, onChange)}\n />\n )\n}\n\ninterface UserModalFormSchema {\n name: string\n roles: string[]\n}\n\nexport const useUserModal = ({ mode, onSuccess }: { mode: 'create' | 'update'; onSuccess?: () => void }) => {\n const { message } = App.useApp()\n const { t } = useTranslation()\n const { data: roles, isLoading: isRolesLoading } = useAllRoles()\n const create = useCreateUser()\n const update = useUpdateUser()\n\n const isCreateMode = mode === 'create'\n\n const title = isCreateMode ? t('User.createTitle') : t('User.updateTitle')\n\n const content = (\n <>\n <Form.Item label={t('global.name')} name=\"name\" rules={[{ required: true }]}>\n <Input disabled={!isCreateMode} />\n </Form.Item>\n <Form.Item label={t('global.role')} name=\"roles\">\n <Select\n allowClear\n showSearch\n mode=\"multiple\"\n loading={isRolesLoading}\n optionFilterProp=\"label\"\n options={roles?.map(role => ({ label: role.name, value: role.name }))}\n />\n </Form.Item>\n </>\n )\n\n const onConfirm = async (values: UserModalFormSchema, extraValues: { id: string }) => {\n if (isCreateMode) {\n await create.mutateAsync(values)\n message.success(t('User.createSuccessfully'))\n } else {\n await update.mutateAsync({ ...values, id: extraValues?.id })\n message.success(t('User.updateSuccessfully'))\n }\n onSuccess?.()\n }\n\n return useFormModal<UserModalFormSchema, { id: string }>({\n title,\n width: '600px',\n formProps: {\n autoComplete: 'off',\n labelCol: { flex: '80px' },\n },\n content,\n onConfirm,\n })\n}\n\ninterface UserModalV2FormSchema {\n name: string\n permissions: {\n game_group: string[]\n game_ids: string[]\n role: string\n }[]\n}\n\n/**\n * 用户弹窗 V2 版本(用于 V3 和 V4 权限系统)\n * - V3: 显示项目组选择,游戏列表依赖项目组\n * - V4: 隐藏项目组选择,游戏列表独立加载\n */\nexport const useUserModalV2 = ({ mode, onSuccess }: { mode: 'create' | 'update'; onSuccess?: () => void }) => {\n const { message } = App.useApp()\n const { t } = useTranslation()\n const { data: roles, isLoading: isRolesLoading } = useAllRoles()\n const create = useCreateUser()\n const update = useUpdateUser()\n const isCreateMode = mode === 'create'\n const title = isCreateMode ? t('User.createTitle') : t('User.updateTitle')\n const { permissionVersion } = useToolkitsStore()\n const isV3 = permissionVersion === PermissionVersion.V3\n\n const content = (\n <>\n <Form.Item label={t('global.name')} name=\"name\" rules={[{ required: true }]}>\n <Input disabled={!isCreateMode} />\n </Form.Item>\n <Form.List name=\"permissions\">\n {(fields, { add, remove }) => (\n <Row gutter={8}>\n {isV3 && (\n <Col span={8} className=\"text-center mb-4\">\n <Text strong>{t('global.projectGroup')}</Text>\n </Col>\n )}\n <Col span={isV3 ? 10 : 14} className=\"text-center mb-4\">\n <Text strong>{t('global.game')}</Text>\n </Col>\n <Col span={isV3 ? 6 : 10} className=\"text-center mb-4\">\n <Text strong>{t('global.role')}</Text>\n </Col>\n {fields.map(field => (\n <Fragment key={field.key}>\n {isV3 && (\n <Col span={8}>\n <Form.Item noStyle shouldUpdate>\n {({ setFieldValue }) => (\n <Form.Item name={[field.name, 'game_group']}>\n <GroupSelect\n onChange={() => {\n setFieldValue(['permissions', field.name, 'game_ids'], [])\n }}\n />\n </Form.Item>\n )}\n </Form.Item>\n </Col>\n )}\n <Col span={isV3 ? 10 : 14}>\n {isV3 ? (\n <Form.Item\n noStyle\n shouldUpdate={(prevValues, nextValues) =>\n prevValues.permissions[field.name]?.game_group !==\n nextValues.permissions[field.name]?.game_group\n }\n >\n {({ getFieldValue }) => {\n const _groups = getFieldValue(['permissions', field.name, 'game_group'])\n\n return (\n <Form.Item\n name={[field.name, 'game_ids']}\n dependencies={[['permissions', field.name, 'game_group']]}\n rules={[{ required: !!_groups?.length, message: '请选择游戏' }]}\n >\n <GameSelect groups={_groups} />\n </Form.Item>\n )\n }}\n </Form.Item>\n ) : (\n <Form.Item name={[field.name, 'game_ids']} rules={[{ required: true, message: '请选择游戏' }]}>\n <GameSelect />\n </Form.Item>\n )}\n </Col>\n <Col span={isV3 ? 6 : 10}>\n <div className=\"flex\">\n <div className=\"flex-1\">\n <Form.Item\n name={[field.name, 'role']}\n rules={[\n { required: true, message: '请选择角色' },\n ({ getFieldValue }) => ({\n validator(_rule, value) {\n const items = getFieldValue('permissions') as UserModalV2FormSchema['permissions']\n const otherItems = items.filter((item, index) => !!item && index !== field.name)\n if (otherItems.some(item => item.role === value)) {\n return Promise.reject(new Error('请勿重复选择角色'))\n }\n return Promise.resolve()\n },\n }),\n ]}\n >\n <Select\n allowClear\n showSearch\n optionFilterProp=\"label\"\n loading={isRolesLoading}\n options={roles?.map(role => ({ label: role.name, value: role.name }))}\n />\n </Form.Item>\n </div>\n <div className=\"w-8 text-center\">\n <Form.Item>\n <MinusCircleOutlined\n onClick={() => {\n remove(field.name)\n }}\n />\n </Form.Item>\n </div>\n </div>\n </Col>\n </Fragment>\n ))}\n {fields.length === 0 && (\n <Col span={24}>\n <Empty className=\"mb-6\" />\n </Col>\n )}\n <Col span={24}>\n <Button block type=\"dashed\" onClick={() => add()}>\n {t('global.add')}\n </Button>\n </Col>\n </Row>\n )}\n </Form.List>\n </>\n )\n\n const onConfirm = async (values: UserModalV2FormSchema, extraValues: { id: string }) => {\n if (isCreateMode) {\n await create.mutateAsync(values)\n message.success(t('User.createSuccessfully'))\n } else {\n await update.mutateAsync({ ...values, id: extraValues?.id })\n message.success(t('User.updateSuccessfully'))\n }\n onSuccess?.()\n }\n\n return useFormModal<UserModalV2FormSchema, { id: string }>({\n title,\n width: '1000px',\n formProps: {\n autoComplete: 'off',\n labelCol: { flex: '80px' },\n },\n content,\n onConfirm,\n })\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {c,d,j,i as i$1}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {c,d,j,i as i$1}from'./chunk-7GCU2U2F.js';import {d as d$1}from'./chunk-5ZN662QX.js';import {a}from'./chunk-EH4BHJAY.js';import {c as c$1}from'./chunk-GE7DPAVK.js';import {i}from'./chunk-WBSTOYBM.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:i,readonly:n,expand:r,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(()=>{r&&v(()=>{f((i??[]).map(({category:e})=>e));});},[r,i]),useEffect(()=>{let e=(i??[]).reduce((s,o)=>(s[o.category]=o.permissions.every(u=>a$1?.includes(u.value)),s),{});R(e);},[a$1,i]);let I=(i??[]).map(e=>({key:e.category,label:e.category,extra:!n&&jsx(Checkbox,{checked:y[e.category],onChange:s=>{x(s,e.permissions?.map(o=>o.value));},children:P("global.selectAll")}),children:jsx(Checkbox.Group,{style:{width:"100%"},value:a$1,disabled:n,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:i=!0,value:n,readonly:r,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(n??{}).forEach(s=>{s!=="global"&&e.push({gameId:s,permissions:n?.[s]??[]});}),d(e);},[n]),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:n?.global,readonly:r,permissions:P,expand:i,onChange:e=>{l?.({...n,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")}),r?jsx(w,{children:y?.find(o=>String(o.id)===e.gameId)?.name}):jsx(Select,{disabled:r,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:!r&&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:n?.[a$1[s].gameId],readonly:r,expand:i,permissions:v,onChange:o=>{l?.({...n,[a$1[s].gameId]:o});}})}):jsx(Empty,{description:p("PermissionList.gameSectionDescription")})},s)),!r&&jsx(Button,{block:!0,type:"dashed",onClick:x,children:p("PermissionList.addText")})]})},U=pe;var{Text:ue}=Typography,ge=m=>{let{expand:i=!0,value:n,readonly:r,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:n,permissions:g,readonly:r,expand:i,onChange:l})})},$=ge;var fe=m=>{let{value:i$1}=m;console.log("value",typeof i$1,i$1===null,JSON.stringify(i$1));let{permissionVersion:n}=i();return n==="v2"?jsx(U,{...m,value:i$1}):jsx($,{...m,value:i$1})},H=fe;var Qe=({mode:m,onSuccess:i})=>{let{message:n}=App.useApp(),{t:r}=a(),l=c(),g=d(),c$1=m==="create",f=r(c$1?"Role.createTitle":"Role.updateTitle"),y=jsxs(Fragment,{children:[jsx(Form.Item,{label:r("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}),n.success(r("Role.createSuccessfully"))):(await g.mutateAsync({id:d?.id,name:P,permissions:v}),n.success(r("Role.updateSuccessfully"))),i?.();}})};export{H as a,Qe as b};//# sourceMappingURL=chunk-UVF6R735.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-UVF6R735.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/modules/permission/components/permissionCollapse/index.tsx","../src/modules/permission/components/permissionList/PermissionWithGame.tsx","../src/modules/permission/components/permissionList/PermissionWithoutGame.tsx","../src/modules/permission/components/permissionList/index.tsx","../src/modules/permission/hooks/role-hooks.tsx"],"names":["PermissionCollapse","props","permissions","readonly","expand","value","onChange","activeKey","setActiveKey","useState","checkedMap","setCheckedMap","internalValue","setInternalValue","t","useTranslation","startTransition","useTransition","onCollapseChange","useCallback","key","getCheckedValue","checkedValue","codes","tempValue","code","index","item","onCheckChange","useEffect","category","acc","curr","items","jsx","Checkbox","e","permission","Row","Col","Collapse","permissionCollapse_default","Text","Typography","Option","Select","PermissionWithGame","isPermissionLoading","error","useAllPermissionsV2","games","isGamesLoading","useGames","gameList","setGameList","globalPermissions","gamePermissions","isLoading","list","addGame","prev","removeGame","_","i","jsxs","Divider","Skeleton","newValue","Card","Space","game","selectedValue","pev","temp","gameId","Button","Empty","PermissionWithGame_default","PermissionWithoutGame","useAllPermissions","PermissionWithoutGame_default","PermissionList","permissionVersion","useToolkitsStore","permissionList_default","useRoleModal","mode","onSuccess","message","App","create","useCreateRole","update","useUpdateRole","isCreateMode","title","content","Fragment","Form","Input","useFormModal","values","extraValues","name"],"mappings":"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","file":"chunk-AI22344O.js","sourcesContent":["import { Checkbox, Col, Collapse, Row } from 'antd'\nimport type { CheckboxChangeEvent } from 'antd/es/checkbox'\nimport type { FC } from 'react'\nimport { useCallback, useEffect, useState, useTransition } from 'react'\n\nimport { useTranslation } from '@/locale'\n\nimport type { PermissionEnumItem } from '../../types'\n\ninterface PermissionCollapseProps {\n expand?: boolean\n permissions?: PermissionEnumItem[]\n readonly?: boolean\n value?: string[]\n onChange?: (value: string[]) => void\n}\n\nconst PermissionCollapse: FC<PermissionCollapseProps> = props => {\n const { permissions, readonly, expand, value, onChange } = props\n const [activeKey, setActiveKey] = useState<string[]>([])\n const [checkedMap, setCheckedMap] = useState<Record<string, boolean>>({})\n const [internalValue, setInternalValue] = useState<string[]>(value ?? [])\n const { t } = useTranslation()\n const [, startTransition] = useTransition()\n\n const onCollapseChange = useCallback((key: string | string[]) => {\n setActiveKey(key as string[])\n }, [])\n\n const getCheckedValue = (checkedValue: boolean, codes: string[]) => {\n let tempValue: string[] = []\n\n if (checkedValue) {\n tempValue = [...new Set(internalValue.concat(codes))]\n } else {\n tempValue = internalValue.slice()\n\n codes.forEach(code => {\n const index = tempValue.findIndex(item => item === code)\n if (index > -1) {\n tempValue.splice(index, 1)\n }\n })\n }\n\n return tempValue\n }\n\n const onCheckChange = (e: CheckboxChangeEvent, codes: string[]) => {\n const checkedValue = getCheckedValue(e.target.checked, codes)\n setInternalValue(checkedValue)\n onChange?.(checkedValue)\n }\n\n useEffect(() => {\n setInternalValue(value ?? [])\n }, [value])\n\n useEffect(() => {\n if (expand) {\n startTransition(() => {\n // 改变展开状态\n setActiveKey((permissions ?? []).map(({ category }) => category))\n })\n }\n }, [expand, permissions])\n\n useEffect(() => {\n const checkedValue = (permissions ?? []).reduce(\n (acc, curr) => {\n acc[curr.category] = curr.permissions.every(item => internalValue?.includes(item.value))\n return acc\n },\n {} as Record<string, boolean>,\n )\n\n setCheckedMap(checkedValue)\n }, [internalValue, permissions])\n\n const items = (permissions ?? []).map(item => ({\n key: item.category,\n label: item.category,\n extra: !readonly && (\n <Checkbox\n checked={checkedMap[item.category]}\n onChange={e => {\n onCheckChange(\n e,\n item.permissions?.map(permission => permission.value),\n )\n }}\n >\n {t('global.selectAll')}\n </Checkbox>\n ),\n children: (\n <Checkbox.Group style={{ width: '100%' }} value={internalValue} disabled={readonly}>\n <Row gutter={[10, 10]} style={{ width: '100%' }}>\n {item.permissions?.map(permission => (\n <Col key={permission.value} span={6}>\n <Checkbox\n value={permission.value}\n onChange={e => {\n onCheckChange(e, [permission.value])\n }}\n >\n {permission.label}\n </Checkbox>\n </Col>\n ))}\n </Row>\n </Checkbox.Group>\n ),\n }))\n\n return (\n <Collapse\n style={{ width: '100%' }}\n collapsible=\"header\"\n activeKey={activeKey}\n items={items}\n onChange={onCollapseChange}\n />\n )\n}\n\nexport default PermissionCollapse\n","import { Button, Card, Divider, Empty, Select, Skeleton, Space, Typography } from 'antd'\nimport type { FC } from 'react'\nimport { useEffect, useState } from 'react'\n\nimport { useTranslation } from '@/locale'\nimport { useGames } from '@/services'\n\nimport { useAllPermissionsV2 } from '../../services'\nimport type { RoleV2 } from '../../types'\nimport PermissionCollapse from '../permissionCollapse'\nimport type { PermissionListPropsBase } from './types'\n\nconst { Text } = Typography\nconst { Option } = Select\n\ninterface PermissionWithGameProps extends PermissionListPropsBase {\n value?: RoleV2['permissions']\n onChange?: (checkedValue: RoleV2['permissions']) => void\n}\n\nconst PermissionWithGame: FC<PermissionWithGameProps> = props => {\n const { expand = true, value, readonly, onChange } = props\n const { data: permission, isLoading: isPermissionLoading, error } = useAllPermissionsV2()\n const { data: games, isLoading: isGamesLoading } = useGames()\n const [gameList, setGameList] = useState<{ gameId: string; permissions: string[] }[]>([])\n const globalPermissions = permission?.filter(item => item.is_common)\n const gamePermissions = permission?.filter(item => !item.is_common)\n const isLoading = isPermissionLoading || isGamesLoading\n const { t } = useTranslation()\n\n useEffect(() => {\n const list: { gameId: string; permissions: string[] }[] = []\n\n Object.keys(value ?? {}).forEach(key => {\n if (key !== 'global') {\n list.push({ gameId: key, permissions: value?.[key] ?? [] })\n }\n })\n\n setGameList(list)\n }, [value])\n\n if (error) {\n return (\n <div className=\"flex justify-center\">\n <Text type=\"danger\">{t('PermissionList.failedDescription')}</Text>\n </div>\n )\n }\n\n const addGame = () => {\n setGameList(prev => [...prev, { gameId: '', permissions: [] }])\n }\n\n const removeGame = (index: number) => {\n setGameList(prev => prev.filter((_, i) => i !== index))\n }\n\n return (\n <div className=\"flex flex-col w-full\">\n <div className=\"mb-12\">\n <Divider dashed>{t('PermissionList.baseSectionTitle')}</Divider>\n </div>\n <Skeleton active loading={isLoading}>\n <PermissionCollapse\n value={value?.global}\n readonly={readonly}\n permissions={globalPermissions}\n expand={expand}\n onChange={newValue => {\n onChange?.({\n ...value,\n global: newValue,\n })\n }}\n />\n </Skeleton>\n <div className=\"my-12\">\n <Divider dashed>{t('PermissionList.gameSectionTitle')}</Divider>\n </div>\n {gameList.map((item, index) => (\n <Card\n title={\n <Space>\n <Text>{t('global.game')}</Text>\n {readonly ? (\n <Text>{games?.find(game => String(game.id) === item.gameId)?.name}</Text>\n ) : (\n <Select\n disabled={readonly}\n value={gameList[index].gameId || undefined}\n style={{ width: '160px' }}\n placeholder={t('PermissionList.gameSelectPlaceholder')}\n onChange={selectedValue => {\n setGameList(pev => {\n const temp = pev.slice()\n temp[index].gameId = selectedValue\n return temp\n })\n }}\n >\n {games?.map(game => (\n <Option\n key={game.id}\n value={game.id}\n disabled={gameList.some(({ gameId }) => gameId === String(game.id))}\n >\n {game.name}\n </Option>\n ))}\n </Select>\n )}\n </Space>\n }\n key={index}\n className=\"mb-6\"\n extra={\n !readonly && (\n <Button\n type=\"link\"\n onClick={() => {\n removeGame(index)\n }}\n >\n {t('PermissionList.removeText')}\n </Button>\n )\n }\n >\n {gameList[index].gameId ? (\n <Skeleton active loading={isLoading}>\n <PermissionCollapse\n value={value?.[gameList[index].gameId]}\n readonly={readonly}\n expand={expand}\n permissions={gamePermissions}\n onChange={newValue => {\n onChange?.({\n ...value,\n [gameList[index].gameId]: newValue,\n })\n }}\n />\n </Skeleton>\n ) : (\n <Empty description={t('PermissionList.gameSectionDescription')} />\n )}\n </Card>\n ))}\n {!readonly && (\n <Button block type=\"dashed\" onClick={addGame}>\n {t('PermissionList.addText')}\n </Button>\n )}\n </div>\n )\n}\n\nexport default PermissionWithGame\n","import { Skeleton, Typography } from 'antd'\nimport type { FC } from 'react'\n\nimport { useTranslation } from '@/locale'\n\nimport { useAllPermissions } from '../../services'\nimport type { RoleV1 } from '../../types'\nimport PermissionCollapse from '../permissionCollapse'\nimport type { PermissionListPropsBase } from './types'\n\nconst { Text } = Typography\n\ninterface PermissionWithoutGameProps extends PermissionListPropsBase {\n value?: RoleV1['permissions']\n onChange?: (checkedValue: RoleV1['permissions']) => void\n}\n\nconst PermissionWithoutGame: FC<PermissionWithoutGameProps> = props => {\n const { expand = true, value, readonly, onChange } = props\n const { data: permissions, isLoading, error } = useAllPermissions()\n const { t } = useTranslation()\n\n if (error) {\n return (\n <div className=\"flex justify-center\">\n <Text type=\"danger\">{t('PermissionList.failedDescription')}</Text>\n </div>\n )\n }\n\n return (\n <Skeleton active loading={isLoading}>\n <PermissionCollapse\n value={value}\n permissions={permissions}\n readonly={readonly}\n expand={expand}\n onChange={onChange}\n />\n </Skeleton>\n )\n}\n\nexport default PermissionWithoutGame\n","import type { FC } from 'react'\n\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { PermissionVersion } from '@/constants'\n\nimport type { RoleV1, RoleV2 } from '../../types'\nimport PermissionWithGame from './PermissionWithGame'\nimport PermissionWithoutGame from './PermissionWithoutGame'\nimport type { PermissionListPropsBase } from './types'\n\ninterface PermissionListProps extends PermissionListPropsBase {\n value?: RoleV1['permissions'] | RoleV2['permissions']\n onChange?: (checkedValue: RoleV1['permissions'] | RoleV2['permissions']) => void\n}\n\nconst PermissionList: FC<PermissionListProps> = (props: PermissionListProps) => {\n const { value } = props\n console.log('value', typeof value, value === null, JSON.stringify(value))\n const { permissionVersion } = useToolkitsStore()\n\n if (permissionVersion === PermissionVersion.V2) {\n return <PermissionWithGame {...props} value={value as RoleV2['permissions']} />\n }\n\n return <PermissionWithoutGame {...props} value={value as RoleV1['permissions']} />\n}\n\nexport default PermissionList\n","import { App, Form, Input } from 'antd'\n\nimport { useFormModal } from '@/hooks/modal'\nimport { useTranslation } from '@/locale'\n\nimport PermissionList from '../components/permissionList'\nimport { useCreateRole, useUpdateRole } from '../services'\nimport type { RoleListItem, RoleV1, RoleV2 } from '../types'\n\nexport const useRoleModal = ({ mode, onSuccess }: { mode: 'create' | 'update'; onSuccess?: () => void }) => {\n const { message } = App.useApp()\n const { t } = useTranslation()\n const create = useCreateRole()\n const update = useUpdateRole()\n\n const isCreateMode = mode === 'create'\n\n const title = isCreateMode ? t('Role.createTitle') : t('Role.updateTitle')\n\n const content = (\n <>\n <Form.Item label={t('global.name')} name=\"name\" rules={[{ required: true }]}>\n <Input disabled={!isCreateMode} />\n </Form.Item>\n <Form.Item name=\"permissions\">\n <PermissionList />\n </Form.Item>\n </>\n )\n\n const onConfirm = async (\n values: { name: string; permissions: RoleListItem['permissions'] },\n extraValues: { id: number },\n ) => {\n const name = `role_${values.name}`\n const permissions = values.permissions\n\n if (isCreateMode) {\n await create.mutateAsync({ name, permissions })\n message.success(t('Role.createSuccessfully'))\n } else {\n await update.mutateAsync({ id: extraValues?.id, name, permissions })\n message.success(t('Role.updateSuccessfully'))\n }\n onSuccess?.()\n }\n\n return useFormModal<\n {\n name: string\n permissions: RoleV1['permissions'] | RoleV2['permissions']\n },\n { id: number }\n >({\n title,\n width: '1000px',\n formProps: {\n layout: 'vertical',\n },\n content,\n onConfirm,\n })\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/modules/permission/components/permissionCollapse/index.tsx","../src/modules/permission/components/permissionList/PermissionWithGame.tsx","../src/modules/permission/components/permissionList/PermissionWithoutGame.tsx","../src/modules/permission/components/permissionList/index.tsx","../src/modules/permission/hooks/role-hooks.tsx"],"names":["PermissionCollapse","props","permissions","readonly","expand","value","onChange","activeKey","setActiveKey","useState","checkedMap","setCheckedMap","internalValue","setInternalValue","t","useTranslation","startTransition","useTransition","onCollapseChange","useCallback","key","getCheckedValue","checkedValue","codes","tempValue","code","index","item","onCheckChange","useEffect","category","acc","curr","items","jsx","Checkbox","e","permission","Row","Col","Collapse","permissionCollapse_default","Text","Typography","Option","Select","PermissionWithGame","isPermissionLoading","error","useAllPermissionsV2","games","isGamesLoading","useGames","gameList","setGameList","globalPermissions","gamePermissions","isLoading","list","addGame","prev","removeGame","_","i","jsxs","Divider","Skeleton","newValue","Card","Space","game","selectedValue","pev","temp","gameId","Button","Empty","PermissionWithGame_default","PermissionWithoutGame","useAllPermissions","PermissionWithoutGame_default","PermissionList","permissionVersion","useToolkitsStore","permissionList_default","useRoleModal","mode","onSuccess","message","App","create","useCreateRole","update","useUpdateRole","isCreateMode","title","content","Fragment","Form","Input","useFormModal","values","extraValues","name"],"mappings":"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","file":"chunk-UVF6R735.js","sourcesContent":["import { Checkbox, Col, Collapse, Row } from 'antd'\nimport type { CheckboxChangeEvent } from 'antd/es/checkbox'\nimport type { FC } from 'react'\nimport { useCallback, useEffect, useState, useTransition } from 'react'\n\nimport { useTranslation } from '@/locale'\n\nimport type { PermissionEnumItem } from '../../types'\n\ninterface PermissionCollapseProps {\n expand?: boolean\n permissions?: PermissionEnumItem[]\n readonly?: boolean\n value?: string[]\n onChange?: (value: string[]) => void\n}\n\nconst PermissionCollapse: FC<PermissionCollapseProps> = props => {\n const { permissions, readonly, expand, value, onChange } = props\n const [activeKey, setActiveKey] = useState<string[]>([])\n const [checkedMap, setCheckedMap] = useState<Record<string, boolean>>({})\n const [internalValue, setInternalValue] = useState<string[]>(value ?? [])\n const { t } = useTranslation()\n const [, startTransition] = useTransition()\n\n const onCollapseChange = useCallback((key: string | string[]) => {\n setActiveKey(key as string[])\n }, [])\n\n const getCheckedValue = (checkedValue: boolean, codes: string[]) => {\n let tempValue: string[] = []\n\n if (checkedValue) {\n tempValue = [...new Set(internalValue.concat(codes))]\n } else {\n tempValue = internalValue.slice()\n\n codes.forEach(code => {\n const index = tempValue.findIndex(item => item === code)\n if (index > -1) {\n tempValue.splice(index, 1)\n }\n })\n }\n\n return tempValue\n }\n\n const onCheckChange = (e: CheckboxChangeEvent, codes: string[]) => {\n const checkedValue = getCheckedValue(e.target.checked, codes)\n setInternalValue(checkedValue)\n onChange?.(checkedValue)\n }\n\n useEffect(() => {\n setInternalValue(value ?? [])\n }, [value])\n\n useEffect(() => {\n if (expand) {\n startTransition(() => {\n // 改变展开状态\n setActiveKey((permissions ?? []).map(({ category }) => category))\n })\n }\n }, [expand, permissions])\n\n useEffect(() => {\n const checkedValue = (permissions ?? []).reduce(\n (acc, curr) => {\n acc[curr.category] = curr.permissions.every(item => internalValue?.includes(item.value))\n return acc\n },\n {} as Record<string, boolean>,\n )\n\n setCheckedMap(checkedValue)\n }, [internalValue, permissions])\n\n const items = (permissions ?? []).map(item => ({\n key: item.category,\n label: item.category,\n extra: !readonly && (\n <Checkbox\n checked={checkedMap[item.category]}\n onChange={e => {\n onCheckChange(\n e,\n item.permissions?.map(permission => permission.value),\n )\n }}\n >\n {t('global.selectAll')}\n </Checkbox>\n ),\n children: (\n <Checkbox.Group style={{ width: '100%' }} value={internalValue} disabled={readonly}>\n <Row gutter={[10, 10]} style={{ width: '100%' }}>\n {item.permissions?.map(permission => (\n <Col key={permission.value} span={6}>\n <Checkbox\n value={permission.value}\n onChange={e => {\n onCheckChange(e, [permission.value])\n }}\n >\n {permission.label}\n </Checkbox>\n </Col>\n ))}\n </Row>\n </Checkbox.Group>\n ),\n }))\n\n return (\n <Collapse\n style={{ width: '100%' }}\n collapsible=\"header\"\n activeKey={activeKey}\n items={items}\n onChange={onCollapseChange}\n />\n )\n}\n\nexport default PermissionCollapse\n","import { Button, Card, Divider, Empty, Select, Skeleton, Space, Typography } from 'antd'\nimport type { FC } from 'react'\nimport { useEffect, useState } from 'react'\n\nimport { useTranslation } from '@/locale'\nimport { useGames } from '@/services'\n\nimport { useAllPermissionsV2 } from '../../services'\nimport type { RoleV2 } from '../../types'\nimport PermissionCollapse from '../permissionCollapse'\nimport type { PermissionListPropsBase } from './types'\n\nconst { Text } = Typography\nconst { Option } = Select\n\ninterface PermissionWithGameProps extends PermissionListPropsBase {\n value?: RoleV2['permissions']\n onChange?: (checkedValue: RoleV2['permissions']) => void\n}\n\nconst PermissionWithGame: FC<PermissionWithGameProps> = props => {\n const { expand = true, value, readonly, onChange } = props\n const { data: permission, isLoading: isPermissionLoading, error } = useAllPermissionsV2()\n const { data: games, isLoading: isGamesLoading } = useGames()\n const [gameList, setGameList] = useState<{ gameId: string; permissions: string[] }[]>([])\n const globalPermissions = permission?.filter(item => item.is_common)\n const gamePermissions = permission?.filter(item => !item.is_common)\n const isLoading = isPermissionLoading || isGamesLoading\n const { t } = useTranslation()\n\n useEffect(() => {\n const list: { gameId: string; permissions: string[] }[] = []\n\n Object.keys(value ?? {}).forEach(key => {\n if (key !== 'global') {\n list.push({ gameId: key, permissions: value?.[key] ?? [] })\n }\n })\n\n setGameList(list)\n }, [value])\n\n if (error) {\n return (\n <div className=\"flex justify-center\">\n <Text type=\"danger\">{t('PermissionList.failedDescription')}</Text>\n </div>\n )\n }\n\n const addGame = () => {\n setGameList(prev => [...prev, { gameId: '', permissions: [] }])\n }\n\n const removeGame = (index: number) => {\n setGameList(prev => prev.filter((_, i) => i !== index))\n }\n\n return (\n <div className=\"flex flex-col w-full\">\n <div className=\"mb-12\">\n <Divider dashed>{t('PermissionList.baseSectionTitle')}</Divider>\n </div>\n <Skeleton active loading={isLoading}>\n <PermissionCollapse\n value={value?.global}\n readonly={readonly}\n permissions={globalPermissions}\n expand={expand}\n onChange={newValue => {\n onChange?.({\n ...value,\n global: newValue,\n })\n }}\n />\n </Skeleton>\n <div className=\"my-12\">\n <Divider dashed>{t('PermissionList.gameSectionTitle')}</Divider>\n </div>\n {gameList.map((item, index) => (\n <Card\n title={\n <Space>\n <Text>{t('global.game')}</Text>\n {readonly ? (\n <Text>{games?.find(game => String(game.id) === item.gameId)?.name}</Text>\n ) : (\n <Select\n disabled={readonly}\n value={gameList[index].gameId || undefined}\n style={{ width: '160px' }}\n placeholder={t('PermissionList.gameSelectPlaceholder')}\n onChange={selectedValue => {\n setGameList(pev => {\n const temp = pev.slice()\n temp[index].gameId = selectedValue\n return temp\n })\n }}\n >\n {games?.map(game => (\n <Option\n key={game.id}\n value={game.id}\n disabled={gameList.some(({ gameId }) => gameId === String(game.id))}\n >\n {game.name}\n </Option>\n ))}\n </Select>\n )}\n </Space>\n }\n key={index}\n className=\"mb-6\"\n extra={\n !readonly && (\n <Button\n type=\"link\"\n onClick={() => {\n removeGame(index)\n }}\n >\n {t('PermissionList.removeText')}\n </Button>\n )\n }\n >\n {gameList[index].gameId ? (\n <Skeleton active loading={isLoading}>\n <PermissionCollapse\n value={value?.[gameList[index].gameId]}\n readonly={readonly}\n expand={expand}\n permissions={gamePermissions}\n onChange={newValue => {\n onChange?.({\n ...value,\n [gameList[index].gameId]: newValue,\n })\n }}\n />\n </Skeleton>\n ) : (\n <Empty description={t('PermissionList.gameSectionDescription')} />\n )}\n </Card>\n ))}\n {!readonly && (\n <Button block type=\"dashed\" onClick={addGame}>\n {t('PermissionList.addText')}\n </Button>\n )}\n </div>\n )\n}\n\nexport default PermissionWithGame\n","import { Skeleton, Typography } from 'antd'\nimport type { FC } from 'react'\n\nimport { useTranslation } from '@/locale'\n\nimport { useAllPermissions } from '../../services'\nimport type { RoleV1 } from '../../types'\nimport PermissionCollapse from '../permissionCollapse'\nimport type { PermissionListPropsBase } from './types'\n\nconst { Text } = Typography\n\ninterface PermissionWithoutGameProps extends PermissionListPropsBase {\n value?: RoleV1['permissions']\n onChange?: (checkedValue: RoleV1['permissions']) => void\n}\n\nconst PermissionWithoutGame: FC<PermissionWithoutGameProps> = props => {\n const { expand = true, value, readonly, onChange } = props\n const { data: permissions, isLoading, error } = useAllPermissions()\n const { t } = useTranslation()\n\n if (error) {\n return (\n <div className=\"flex justify-center\">\n <Text type=\"danger\">{t('PermissionList.failedDescription')}</Text>\n </div>\n )\n }\n\n return (\n <Skeleton active loading={isLoading}>\n <PermissionCollapse\n value={value}\n permissions={permissions}\n readonly={readonly}\n expand={expand}\n onChange={onChange}\n />\n </Skeleton>\n )\n}\n\nexport default PermissionWithoutGame\n","import type { FC } from 'react'\n\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { PermissionVersion } from '@/constants'\n\nimport type { RoleV1, RoleV2 } from '../../types'\nimport PermissionWithGame from './PermissionWithGame'\nimport PermissionWithoutGame from './PermissionWithoutGame'\nimport type { PermissionListPropsBase } from './types'\n\ninterface PermissionListProps extends PermissionListPropsBase {\n value?: RoleV1['permissions'] | RoleV2['permissions']\n onChange?: (checkedValue: RoleV1['permissions'] | RoleV2['permissions']) => void\n}\n\nconst PermissionList: FC<PermissionListProps> = (props: PermissionListProps) => {\n const { value } = props\n console.log('value', typeof value, value === null, JSON.stringify(value))\n const { permissionVersion } = useToolkitsStore()\n\n if (permissionVersion === PermissionVersion.V2) {\n return <PermissionWithGame {...props} value={value as RoleV2['permissions']} />\n }\n\n return <PermissionWithoutGame {...props} value={value as RoleV1['permissions']} />\n}\n\nexport default PermissionList\n","import { App, Form, Input } from 'antd'\n\nimport { useFormModal } from '@/hooks/modal'\nimport { useTranslation } from '@/locale'\n\nimport PermissionList from '../components/permissionList'\nimport { useCreateRole, useUpdateRole } from '../services'\nimport type { RoleListItem, RoleV1, RoleV2 } from '../types'\n\nexport const useRoleModal = ({ mode, onSuccess }: { mode: 'create' | 'update'; onSuccess?: () => void }) => {\n const { message } = App.useApp()\n const { t } = useTranslation()\n const create = useCreateRole()\n const update = useUpdateRole()\n\n const isCreateMode = mode === 'create'\n\n const title = isCreateMode ? t('Role.createTitle') : t('Role.updateTitle')\n\n const content = (\n <>\n <Form.Item label={t('global.name')} name=\"name\" rules={[{ required: true }]}>\n <Input disabled={!isCreateMode} />\n </Form.Item>\n <Form.Item name=\"permissions\">\n <PermissionList />\n </Form.Item>\n </>\n )\n\n const onConfirm = async (\n values: { name: string; permissions: RoleListItem['permissions'] },\n extraValues: { id: number },\n ) => {\n const name = `role_${values.name}`\n const permissions = values.permissions\n\n if (isCreateMode) {\n await create.mutateAsync({ name, permissions })\n message.success(t('Role.createSuccessfully'))\n } else {\n await update.mutateAsync({ id: extraValues?.id, name, permissions })\n message.success(t('Role.updateSuccessfully'))\n }\n onSuccess?.()\n }\n\n return useFormModal<\n {\n name: string\n permissions: RoleV1['permissions'] | RoleV2['permissions']\n },\n { id: number }\n >({\n title,\n width: '1000px',\n formProps: {\n layout: 'vertical',\n },\n content,\n onConfirm,\n })\n}\n"]}
|
|
@@ -0,0 +1,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 ie from'ky';import {useNavigate}from'react-router-dom';function j(){return create((e,t)=>({open:new Map,usedIds:new Set,isOpen(o){return 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){return !t().usedIds.has(o)},registerIds(o){let{usedIds:i}=t();return i.has(o)?!1:(e({usedIds:new Set(i).add(o)}),!0)},cleanup(o){let{open:i,usedIds:n}=t(),T=new Map(i),p=new Set(n);T.delete(o),p.delete(o),e({open:T,usedIds:p});}}))}var H=0,z=()=>{let e=Date.now(),t=Math.floor(Math.random()*1e3),o=++H%1e3;return e*1e6+t*1e3+o};var k={getItem(e){return sessionStorage.getItem(e)??localStorage.getItem(e)},setItem(e,t){sessionStorage.setItem(e,t),localStorage.setItem(e,t);},removeItem(e){sessionStorage.removeItem(e),localStorage.removeItem(e);}};var we="https://idaas.ifunplus.cn/enduser/api/application/plugin_FunPlus/sso/v1",S="App-ID",Ae="/console/",v=(n=>(n.V1="v1",n.V2="v2",n.V3="v3",n.V4="v4",n))(v||{}),Ue="*";var W={global:{noEntitlement:"\u65E0\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458",name:"\u540D\u79F0",creationTime:"\u521B\u5EFA\u65F6\u95F4",operation:"\u64CD\u4F5C",update:"\u66F4\u65B0",edit:"\u7F16\u8F91",delete:"\u5220\u9664",selectAll:"\u5168\u9009",game:"\u6E38\u620F",user:"\u7528\u6237",role:"\u89D2\u8272",username:"\u7528\u6237\u540D",password:"\u5BC6\u7801",label:"\u6807\u7B7E",method:"\u65B9\u6CD5",route:"\u8DEF\u7531",request:"\u8BF7\u6C42",response:"\u54CD\u5E94",add:"\u6DFB\u52A0",signIn:"\u767B\u5F55",projectGroup:"\u9879\u76EE\u7EC4",view:"\u67E5\u770B",back:"\u8FD4\u56DE"},SignIn:{title:"\u767B\u5F55\u65B9\u5F0F",signInWithIDass:"IDass \u767B\u5F55",unregistered:"\u60A8\u8FD8\u672A\u5728\u5E73\u53F0\u6CE8\u518C\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458",welcome:"\u6B22\u8FCE"},NotFound:{subTitle:"\u8BBF\u95EE\u7684\u9875\u9762\u4E0D\u5B58\u5728",buttonText:"\u8FD4\u56DE\u9996\u9875"},FilterFormWrapper:{confirmText:"\u67E5\u8BE2",resetText:"\u91CD\u7F6E"},FormModal:{confirmText:"\u786E\u8BA4",cancelText:"\u53D6\u6D88"},GameSelect:{label:"\u5F53\u524D\u6E38\u620F",placeholder:"\u8BF7\u9009\u62E9\u6E38\u620F"},RequireGame:{description:"\u8BF7\u9009\u62E9\u6E38\u620F"},UserWidget:{signOutText:"\u767B\u51FA"},User:{createTitle:"\u521B\u5EFA\u7528\u6237",createSuccessfully:"\u7528\u6237\u521B\u5EFA\u6210\u529F",updateTitle:"\u66F4\u65B0\u7528\u6237",updateSuccessfully:"\u7528\u6237\u66F4\u65B0\u6210\u529F",deleteTitle:"\u5220\u9664\u7528\u6237",deleteContent:"\u786E\u5B9A\u8981\u5220\u9664\u7528\u6237 <%= user %> \u5417\uFF1F",deleteSuccessfully:"\u7528\u6237\u5220\u9664\u6210\u529F"},Role:{createTitle:"\u521B\u5EFA\u89D2\u8272",createSuccessfully:"\u89D2\u8272\u521B\u5EFA\u6210\u529F",updateTitle:"\u66F4\u65B0\u89D2\u8272",updateSuccessfully:"\u89D2\u8272\u66F4\u65B0\u6210\u529F",deleteTitle:"\u5220\u9664\u89D2\u8272",deleteContent:"\u786E\u5B9A\u8981\u5220\u9664\u89D2\u8272 <%= role %> \u5417\uFF1F",deleteSuccessfully:"\u89D2\u8272\u5220\u9664\u6210\u529F"},PermissionList:{failedDescription:"\u83B7\u53D6\u6743\u9650\u5217\u8868\u5931\u8D25",baseSectionTitle:"\u5E73\u53F0\u57FA\u7840\u6743\u9650",gameSectionTitle:"\u6E38\u620F\u6743\u9650",gameSectionDescription:"\u8BF7\u5148\u9009\u62E9\u6E38\u620F",gameSelectPlaceholder:"\u8BF7\u5148\u9009\u62E9\u6E38\u620F",removeText:"\u79FB\u9664",addText:"\u6DFB\u52A0\u6E38\u620F\u6743\u9650"},RoleDetail:{title:"\u89D2\u8272\u8BE6\u60C5"},InfiniteList:{loadingText:"\u52A0\u8F7D\u4E2D",reachEndText:"\u5DF2\u7ECF\u5230\u5E95\u4E86",loadMoreText:"\u52A0\u8F7D\u66F4\u591A"}},I=W;var E=e=>({locale:I,gameApiV2:!1,isGlobal:!1,loginPath:"/sign_in",mainPagePath:"/",permissionVersion:"v1",setContext(t){e(o=>({...o,...t}));}});var w=e=>({setAppId:t=>e({appId:t})});var A=e=>({collapsed:!1,toggleCollapsed:()=>e(t=>({collapsed:!t.collapsed}))});var X=e=>{if(!e)return null;try{return jwtDecode(e)}catch{return null}},U=e=>({token:void 0,user:null,setToken:t=>e({token:t,user:X(t)})});var D=e=>createStore()(persist((...t)=>{let[o,,i]=t;return {...U(...t),...w(...t),...E(...t),...A(...t),...e,clear:()=>{o(i.getInitialState()),i.persist.clearStorage();}}},{name:"toolkits",storage:createJSONStorage(()=>k),partialize:({token:t,appId:o,user:i,collapsed:n})=>({token:t,appId:o,user:i,collapsed:n})}));var P=createContext(null);function C(e){let t=useContext(P);if(!t)throw new Error("Missing ToolkitsProvider in the tree");return useStore(t,e??(o=>o))}var N=e=>{let{children:t,...o}=e,i=useRef(),n=useContext(P)?.getState();if(i.current||(i.current=D({...n,...o})),!i.current.getState().loginPath)throw new Error('ToolkitsProvider: \u8BF7\u914D\u7F6E "loginPath"');return jsx(P.Provider,{value:i.current,children:jsx(App,{children:t})})},se=(e,t)=>{let o=i=>jsx(N,{...t,children:jsx(e,{...i})});return o.displayName=`withContext(${e.displayName||e.name||"Component"})`,o},re=N;var b=[0,1,200],h={OK:200,UNAUTHORIZED:401,FORBIDDEN:403,UNREGISTERED:412},ce=3e4;var F=e=>!e||typeof e!="object"?"Unknown error":e.msg||e.message||e.error||"Unknown error",ue=e=>{let{value:t,allowedCodes:o}=e;return t==null||typeof t!="number"?!1:o.includes(t)},pe=(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:b},{field:"status",value:e.status,allowedCodes:b},{field:"errno",value:e.errno,allowedCodes:b}];return o.some(n=>n.value!==void 0&&n.value!==null)?o.every(n=>n.value===void 0||n.value===null||ue(n)):!0},de=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()}},me=e=>{let{baseURL:t}=e||{},{notification:o}=App.useApp(),i=useNavigate(),{token:n,isGlobal:T,appId:p,permissionVersion:O,loginPath:y,clear:x,apiBase:L}=C(),_=()=>{x(),i(y);},M=()=>{if(x(),y){let s=new URL(y,window.location.origin);s.searchParams.set("unregistered","true"),i(s.toString());}},B=()=>{o.error({message:"\u8BBF\u95EE\u88AB\u7981\u6B62",description:"\u60A8\u6CA1\u6709\u6743\u9650\u8BBF\u95EE\u6B64\u8D44\u6E90\u3002"});},G=s=>async(r,a,l)=>{if(s==="blob"||s==="arrayBuffer"||s==="text"||s==="formData")return l;let c;try{c=await l.clone().json();}catch{return l}if(pe(c,l.status)){let f=c.data!==void 0?c.data:c;return new Response(JSON.stringify(f),{status:l.status,statusText:l.statusText,headers:l.headers})}let d=F(c);o.error({message:"Request failed",description:d});let m=new Error(d);throw m.response=l,m.data=c,m},V=(s,r)=>{switch(s){case h.UNAUTHORIZED:_();break;case h.UNREGISTERED:M();break;case h.FORBIDDEN:B();break;default:{let a=F(r)||`HTTP ${s} Error`;o.error({message:"Request failed",description:a});break}}},R=useMemo(()=>ie.create({prefixUrl:t??L,retry:0,timeout:ce,headers:{Accept:"application/json","Content-Type":"application/json"},hooks:{beforeRequest:[s=>{n&&s.headers.set("Authorization",`Bearer ${n}`),!s.headers.has(S)&&O!=="v1"&&(T||!p?s.headers.set(S,"global"):s.headers.set(S,encodeURIComponent(String(p))));}],beforeError:[async s=>{let{response:r}=s;if(r){let a=r.status,l;try{let c=r.headers.get("content-type")||"";(c.includes("application/json")||c.startsWith("text/"))&&(l=await r.clone().json());}catch{}V(a,l);}else o.error({message:"Network Error",description:s.message||"Network request failed"});return s}]}}),[t,n,T,p,O,o,y,x]),u=async(s,r,a,l)=>{let{responseType:c,...d}=l||{},m={...d,hooks:{...d.hooks,afterResponse:[...d.hooks?.afterResponse||[],G(c)]}},f;return a?f=await R(r,{method:s,json:a,...m}):f=await R(r,{method:s,...m}),de(f,c)};return {get:(s,r)=>u("GET",s,void 0,r),post:(s,r,a)=>u("POST",s,r,a),put:(s,r,a)=>u("PUT",s,r,a),delete:(s,r)=>u("DELETE",s,void 0,r),patch:(s,r,a)=>u("PATCH",s,r,a),options:(s,r)=>u("OPTIONS",s,void 0,r),head:(s,r)=>u("HEAD",s,void 0,r),request:s=>{let{url:r,...a}=s;return u(a.method||"GET",r,void 0,a)},instance:R}};var dt={permissions:{check:(e,t)=>["permissions","check",e,t],allPermissions:["permissions","all"],allPermissionsV2:["permissions","allV2"]},users:{all:["users"],detail:e=>["users","detail",e],create:["users","create"],update:["users","update"],delete:["users","delete"]},roles:{all:["roles"],detail:(e,t)=>["roles","detail",e,t],create:e=>["roles","create",e],update:e=>["roles","update",e],delete:["roles","delete"]},menus:{all:["menus"],navbar:e=>["menus","navbar",e],detail:e=>["menus","detail",e],create:["menus","create"],update:["menus","update"],delete:["menus","delete"]},enums:{gameGroups:["enums","gameGroups"],gameIds:e=>["enums","gameIds",e]},games:{all:["games","all"]}};
|
|
2
|
+
export{j as a,z as b,k as c,we as d,S as e,Ae as f,v as g,Ue as h,C as i,se as j,re as k,me as l,dt as m};//# sourceMappingURL=chunk-WBSTOYBM.js.map
|
|
3
|
+
//# sourceMappingURL=chunk-WBSTOYBM.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/zh_CN.ts","../src/stores/context.ts","../src/stores/game.ts","../src/stores/layout.ts","../src/stores/token.ts","../src/stores/index.ts","../src/components/toolkitsProvider/ToolkitsProvider.tsx","../src/libs/ky.ts","../src/queryKeys.ts"],"names":["createVisibilityStore","create","set","get","uuid","usedIds","open","newOpen","newUsedIds","globalCounter","generateId","timestamp","random","counter","mixedStorage","name","value","SSO_URL","APP_ID_HEADER","FRONTEND_ROUTE_PREFIX","PermissionVersion","WILDCARD","locale","zh_CN_default","createContextSlice","state","prev","createGameSlice","id","createLayoutSlice","decodeToken","token","jwtDecode","createTokenSlice","createToolkitsStore","initProps","createStore","persist","args","store","createJSONStorage","appId","user","collapsed","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","notification","navigate","useNavigate","isGlobal","permissionVersion","loginPath","clear","apiBase","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-WBSTOYBM.js","sourcesContent":["import { create } from 'zustand'\n\nexport interface VisibilityState {\n open: Map<number, boolean>\n usedIds: Set<number>\n isOpen: (uuid: number) => boolean\n show: (uuid: number) => void\n hide: (uuid: number) => void\n hideAll: () => void\n checkUniqueness: (uuid: number) => boolean\n registerIds: (uuid: number) => boolean\n cleanup: (uuid: number) => void\n}\n\n/**\n * 创建一个可见性管理的 Zustand store\n * 用于管理 Modal、Drawer 等组件的显示/隐藏状态\n * 每次调用都会创建一个独立的 store 实例,确保不同组件间的状态隔离\n */\nexport function createVisibilityStore() {\n return create<VisibilityState>((set, get) => ({\n open: new Map(),\n usedIds: new Set(),\n isOpen(uuid) {\n return get().open.get(uuid) ?? false\n },\n show(uuid) {\n set({ open: new Map(get().open).set(uuid, true) })\n },\n hide(uuid) {\n set({ open: new Map(get().open).set(uuid, false) })\n },\n hideAll() {\n set({ open: new Map() })\n },\n checkUniqueness(uuid) {\n return !get().usedIds.has(uuid)\n },\n registerIds(uuid) {\n const { usedIds } = get()\n if (usedIds.has(uuid)) return false\n\n set({ usedIds: new Set(usedIds).add(uuid) })\n return true\n },\n cleanup(uuid) {\n const { open, usedIds } = get()\n const newOpen = new Map(open)\n const newUsedIds = new Set(usedIds)\n newOpen.delete(uuid)\n newUsedIds.delete(uuid)\n set({ open: newOpen, usedIds: newUsedIds })\n },\n }))\n}\n","/**\n * 生成唯一 ID 的函数\n * 使用时间戳 + 随机数 + 计数器的组合来确保唯一性\n */\nlet globalCounter = 0\n\nexport const generateId = (): number => {\n const timestamp = Date.now()\n const random = Math.floor(Math.random() * 1000)\n const counter = ++globalCounter % 1000\n\n // 组合:时间戳(毫秒) * 1000000 + 随机数 * 1000 + 计数器\n // 这样可以确保即使在同一毫秒内生成多个ID也不会重复\n return timestamp * 1000000 + random * 1000 + counter\n}\n","import type { StateStorage } from 'zustand/middleware'\n\n/**\n * 混合存储策略\n * - 优先从 SessionStorage 读取数据,防止多开页面时的数据冲突\n * - 写入时同时更新 SessionStorage 和 LocalStorage\n * - SessionStorage 不存在时,fallback 到 LocalStorage\n */\nexport const mixedStorage: StateStorage = {\n getItem(name) {\n return sessionStorage.getItem(name) ?? localStorage.getItem(name)\n },\n setItem(name, value) {\n sessionStorage.setItem(name, value)\n localStorage.setItem(name, value)\n },\n removeItem(name) {\n sessionStorage.removeItem(name)\n localStorage.removeItem(name)\n },\n}\n","export const SSO_URL = 'https://idaas.ifunplus.cn/enduser/api/application/plugin_FunPlus/sso/v1'\n\nexport const APP_ID_HEADER = 'App-ID'\n\nexport const FRONTEND_ROUTE_PREFIX = '/console/'\n\nexport enum PermissionVersion {\n V1 = 'v1',\n V2 = 'v2',\n V3 = 'v3',\n V4 = 'v4',\n}\n\nexport const WILDCARD = '*'\n","import type { Locale } from '.'\n\nconst locale: Locale = {\n global: {\n noEntitlement: '无权限,请联系管理员',\n name: '名称',\n creationTime: '创建时间',\n operation: '操作',\n update: '更新',\n edit: '编辑',\n delete: '删除',\n selectAll: '全选',\n game: '游戏',\n user: '用户',\n role: '角色',\n username: '用户名',\n password: '密码',\n label: '标签',\n method: '方法',\n route: '路由',\n request: '请求',\n response: '响应',\n add: '添加',\n signIn: '登录',\n projectGroup: '项目组',\n view: '查看',\n back: '返回',\n },\n SignIn: {\n title: '登录方式',\n signInWithIDass: 'IDass 登录',\n unregistered: '您还未在平台注册,请联系管理员',\n welcome: '欢迎',\n },\n NotFound: {\n subTitle: '访问的页面不存在',\n buttonText: '返回首页',\n },\n FilterFormWrapper: {\n confirmText: '查询',\n resetText: '重置',\n },\n FormModal: {\n confirmText: '确认',\n cancelText: '取消',\n },\n GameSelect: {\n label: '当前游戏',\n placeholder: '请选择游戏',\n },\n RequireGame: {\n description: '请选择游戏',\n },\n UserWidget: {\n signOutText: '登出',\n },\n User: {\n createTitle: '创建用户',\n createSuccessfully: '用户创建成功',\n updateTitle: '更新用户',\n updateSuccessfully: '用户更新成功',\n deleteTitle: '删除用户',\n deleteContent: '确定要删除用户 <%= user %> 吗?',\n deleteSuccessfully: '用户删除成功',\n },\n Role: {\n createTitle: '创建角色',\n createSuccessfully: '角色创建成功',\n updateTitle: '更新角色',\n updateSuccessfully: '角色更新成功',\n deleteTitle: '删除角色',\n deleteContent: '确定要删除角色 <%= role %> 吗?',\n deleteSuccessfully: '角色删除成功',\n },\n PermissionList: {\n failedDescription: '获取权限列表失败',\n baseSectionTitle: '平台基础权限',\n gameSectionTitle: '游戏权限',\n gameSectionDescription: '请先选择游戏',\n gameSelectPlaceholder: '请先选择游戏',\n removeText: '移除',\n addText: '添加游戏权限',\n },\n RoleDetail: {\n title: '角色详情',\n },\n InfiniteList: {\n loadingText: '加载中',\n reachEndText: '已经到底了',\n loadMoreText: '加载更多',\n },\n}\n\nexport default locale\n","import type { StateCreator } from 'zustand'\n\nimport { PermissionVersion } from '@/constants'\nimport type { Locale } from '@/locale'\nimport zhCN from '@/locale/zh_CN'\n\nexport interface ContextSlice {\n locale: Locale\n permissionVersion: PermissionVersion // 权限版本\n gameApiV2: boolean\n loginPath: string // 登录页路径\n isGlobal: boolean // 为 true 时,APP-ID header 始终使用 'global',否则为当前游戏 id。\n navWidth?: number // 侧边栏宽度\n collapsible?: boolean // 侧边栏是否可折叠\n mainPagePath: string // 首页地址\n apiBase?: string // 接口基础路径\n setContext(state: Partial<Omit<ContextSlice, 'setContext'>>): void\n}\n\nexport const createContextSlice: StateCreator<ContextSlice, [], [], ContextSlice> = set => ({\n locale: zhCN,\n gameApiV2: false,\n isGlobal: false,\n loginPath: '/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 appId?: string | number\n setAppId: (id?: string | number) => void\n}\n\nexport const createGameSlice: StateCreator<GameSlice, [], [], GameSlice> = set => ({\n setAppId: id => set({ appId: id }),\n})\n","import type { StateCreator } from 'zustand'\n\nexport interface LayoutSlice {\n collapsed: boolean // 侧边栏是否折叠\n toggleCollapsed: () => void\n}\n\nexport const createLayoutSlice: StateCreator<LayoutSlice, [], [], LayoutSlice> = set => ({\n collapsed: false,\n toggleCollapsed: () => set(state => ({ collapsed: !state.collapsed })),\n})\n","import { jwtDecode } from 'jwt-decode'\nimport type { StateCreator } from 'zustand'\n\n/**\n * JWT Token 解码后的用户信息\n */\nexport interface UserInfo {\n authorityId: string\n exp: number\n}\n\nexport interface TokenSlice {\n /** JWT Token */\n token?: string\n user: UserInfo | null\n setToken: (token: string) => void\n}\n\nconst decodeToken = (token?: string): UserInfo | null => {\n if (!token) return null\n\n try {\n return jwtDecode<UserInfo>(token)\n } catch {\n return null\n }\n}\n\nexport const createTokenSlice: StateCreator<TokenSlice, [], [], TokenSlice> = set => ({\n token: undefined,\n user: null,\n setToken: token => set({ token, user: decodeToken(token) }),\n})\n","import { createStore } from 'zustand'\nimport { createJSONStorage, persist } from 'zustand/middleware'\n\nimport { mixedStorage } from '@/utils'\n\nimport { type ContextSlice, createContextSlice } from './context'\nimport { createGameSlice, type GameSlice } from './game'\nimport { createLayoutSlice, type LayoutSlice } from './layout'\nimport { createTokenSlice, type TokenSlice } from './token'\n\nexport type ToolkitsState = TokenSlice &\n GameSlice &\n ContextSlice &\n LayoutSlice & {\n clear: () => void\n }\n\nexport const createToolkitsStore = (initProps?: Partial<ContextSlice>) => {\n return createStore<ToolkitsState>()(\n persist(\n (...args) => {\n const [set, , store] = args\n return {\n ...createTokenSlice(...args),\n ...createGameSlice(...args),\n ...createContextSlice(...args),\n ...createLayoutSlice(...args),\n ...initProps,\n clear: () => {\n set(store.getInitialState())\n store.persist.clearStorage()\n },\n }\n },\n {\n name: 'toolkits',\n storage: createJSONStorage(() => mixedStorage),\n partialize: ({ token, appId, user, collapsed }) => ({\n token,\n appId,\n user,\n 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) {\n const store = useContext(ToolkitsContext)\n if (!store) throw new Error('Missing ToolkitsProvider in the tree')\n\n return useStore(store, selector ?? (state => 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().loginPath) {\n throw new Error('ToolkitsProvider: 请配置 \"loginPath\"')\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'\nimport { useNavigate } from 'react-router-dom'\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}\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 } = config || {}\n const { notification } = App.useApp()\n const navigate = useNavigate()\n\n // 获取工具包状态\n const { token, isGlobal, appId, permissionVersion, loginPath, clear, apiBase } = useToolkitsStore()\n\n // 处理未授权错误\n const handleUnauthorized = () => {\n clear()\n navigate(loginPath)\n }\n\n // 处理未注册错误\n const handleUnregistered = () => {\n clear()\n if (loginPath) {\n // 添加未注册参数到登录页 URL\n const url = new URL(loginPath, window.location.origin)\n url.searchParams.set('unregistered', 'true')\n navigate(url.toString())\n }\n }\n\n // 处理禁止访问错误\n const handleForbidden = () => {\n notification.error({\n message: '访问被禁止',\n description: '您没有权限访问此资源。',\n })\n }\n\n // 创建响应处理函数\n const createResponseHandler = (responseType?: ResponseType) => {\n return async (_request: any, _options: any, response: Response): Promise<Response> => {\n // 非 JSON 类型直接交由调用方按响应类型读取\n if (\n responseType === 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 notification.error({\n message: 'Request failed',\n description: errorMessage,\n })\n\n const error = new Error(errorMessage)\n ;(error as any).response = response\n ;(error as any).data = data\n throw error\n }\n }\n\n // 处理HTTP状态码错误\n const handleHttpStatusError = (status: number, data: any) => {\n switch (status) {\n case HTTP_STATUS.UNAUTHORIZED:\n handleUnauthorized()\n break\n\n case HTTP_STATUS.UNREGISTERED:\n handleUnregistered()\n break\n\n case HTTP_STATUS.FORBIDDEN:\n handleForbidden()\n break\n\n default: {\n // 安全地提取错误消息\n const errorMessage = extractErrorMessage(data) || `HTTP ${status} Error`\n notification.error({\n message: 'Request failed',\n description: errorMessage,\n })\n break\n }\n }\n }\n\n // 创建ky实例\n const instance = useMemo(() => {\n return ky.create({\n prefixUrl: baseURL ?? apiBase,\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 || !appId) {\n request.headers.set(APP_ID_HEADER, 'global')\n } else {\n // 对 appId 进行 URL 编码以避免非 ASCII 字符导致的 XMLHttpRequest 错误\n request.headers.set(APP_ID_HEADER, encodeURIComponent(String(appId)))\n }\n }\n },\n ],\n beforeError: [\n async error => {\n const { response } = error\n\n if (response) {\n const status = response.status\n let data: any\n\n try {\n const contentType = response.headers.get('content-type') || ''\n if (contentType.includes('application/json') || contentType.startsWith('text/')) {\n data = await response.clone().json()\n }\n } catch {\n // 忽略 JSON 解析错误\n }\n\n handleHttpStatusError(status, data)\n } else {\n // 网络错误或请求超时等情况\n notification.error({\n message: 'Network Error',\n description: error.message || 'Network request failed',\n })\n }\n\n return error\n },\n ],\n },\n })\n }, [baseURL, token, isGlobal, appId, permissionVersion, notification, loginPath, clear])\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: (appId?: string) => ['menus', 'navbar', appId] as const,\n detail: (id: number) => ['menus', 'detail', id] as const,\n create: ['menus', 'create'] as const,\n update: ['menus', 'update'] as const,\n delete: ['menus', 'delete'] as const,\n },\n // 枚举相关\n enums: {\n gameGroups: ['enums', 'gameGroups'] as const,\n gameIds: (gameGroups: string[]) => ['enums', 'gameIds', gameGroups] as const,\n },\n // 游戏相关\n games: {\n all: ['games', 'all'] as const,\n },\n}\n\nexport type QueryKeys = typeof queryKeys\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {a}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=createMenuItem-
|
|
1
|
+
import {a}from'./chunk-MHSZPPYJ.js';import {j,f}from'./chunk-WBSTOYBM.js';import {Editor}from'@monaco-editor/react';import {App,Form,Card,Input,Switch,InputNumber,Button}from'antd';import {useNavigate}from'react-router-dom';import {jsx,jsxs}from'react/jsx-runtime';var y=j(()=>{let{message:p}=App.useApp(),[c]=Form.useForm(),o=useNavigate(),{mutate:I}=a();return jsx(Card,{title:"\u521B\u5EFA\u83DC\u5355\u9879",children:jsxs(Form,{scrollToFirstError:!0,form:c,labelCol:{flex:"120px"},initialValues:{is_common:!1,is_model:!1,order:0},onFinish:async d=>{let{permissions:s,front_route:f$1,...F}=d;await I({...F,front_route:f+f$1,permissions:s?JSON.parse(s):void 0}),p.success("\u521B\u5EFA\u6210\u529F",.8,()=>o("..",{relative:"route"}));},children:[jsx(Form.Item,{label:"\u83DC\u5355\u9879\u540D\u79F0",name:"category",rules:[{required:!0}],children:jsx(Input,{})}),jsx(Form.Item,{label:"\u524D\u7AEF\u8DEF\u7531",name:"front_route",rules:[{required:!0}],children:jsx(Input,{prefix:f})}),jsx(Form.Item,{label:"\u6A21\u677F\u540D\u79F0",name:"model_name",rules:[{required:!0}],children:jsx(Input,{})}),jsx(Form.Item,{label:"Is Common",name:"is_common",rules:[{required:!0}],valuePropName:"checked",children:jsx(Switch,{})}),jsx(Form.Item,{label:"Order",name:"order",children:jsx(InputNumber,{className:"w-full"})}),jsx(Form.Item,{label:"\u63A5\u53E3\u89C4\u5219",name:"permissions",children:jsx(Editor,{theme:"vs-dark",height:"300px",language:"json",options:{minimap:{enabled:!1}}})}),jsx(Form.Item,{label:"Schema",name:"scheme",rules:[{required:!0}],children:jsx(Editor,{theme:"vs-dark",height:"600px",language:"json",options:{minimap:{enabled:!1}}})}),jsx(Form.Item,{label:"Ext",name:"ext",children:jsx(Input.TextArea,{rows:5})}),jsx(Form.Item,{children:jsxs("div",{className:"flex justify-center gap-8",children:[jsx(Button,{type:"primary",htmlType:"submit",children:"\u63D0\u4EA4"}),jsx(Button,{onClick:()=>{o("..",{relative:"path"});},children:"\u53D6\u6D88"})]})})]})})},{isGlobal:!0}),M=y;export{M as default};//# sourceMappingURL=createMenuItem-GITYBEWA.js.map
|
|
2
|
+
//# sourceMappingURL=createMenuItem-GITYBEWA.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/modules/menu/pages/createMenuItem/index.tsx"],"names":["CreateMenuItem","withContext","message","App","form","Form","navigate","useNavigate","createMenu","useCreateMenu","jsx","Card","jsxs","values","permissions","front_route","rest","FRONTEND_ROUTE_PREFIX","Input","Switch","InputNumber","Editor","Button","createMenuItem_default"],"mappings":"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","file":"createMenuItem-
|
|
1
|
+
{"version":3,"sources":["../src/modules/menu/pages/createMenuItem/index.tsx"],"names":["CreateMenuItem","withContext","message","App","form","Form","navigate","useNavigate","createMenu","useCreateMenu","jsx","Card","jsxs","values","permissions","front_route","rest","FRONTEND_ROUTE_PREFIX","Input","Switch","InputNumber","Editor","Button","createMenuItem_default"],"mappings":"6QAYMA,CAAiBC,CAAAA,CAAAA,CACrB,IAAM,CACJ,GAAM,CAAE,OAAAC,CAAAA,CAAQ,EAAIC,GAAI,CAAA,MAAA,GAClB,CAACC,CAAI,CAAIC,CAAAA,IAAAA,CAAK,SACdC,CAAAA,CAAAA,CAAWC,aACX,CAAA,CAAE,OAAQC,CAAW,CAAA,CAAIC,CAAc,EAAA,CAY7C,OACEC,GAACC,CAAAA,IAAAA,CAAA,CAAK,KAAM,CAAA,gCAAA,CACV,SAAAC,IAACP,CAAAA,IAAAA,CAAA,CACC,kBAAA,CAAkB,GAClB,IAAMD,CAAAA,CAAAA,CACN,SAAU,CAAE,IAAA,CAAM,OAAQ,CAC1B,CAAA,aAAA,CAAe,CAAE,SAAW,CAAA,CAAA,CAAA,CAAO,SAAU,CAAO,CAAA,CAAA,KAAA,CAAO,CAAE,CAC7D,CAAA,QAAA,CAjBW,MAAOS,CAAuB,EAAA,CAC7C,GAAM,CAAE,YAAAC,CAAa,CAAA,WAAA,CAAAC,IAAa,GAAGC,CAAK,EAAIH,CAC9C,CAAA,MAAML,CAAW,CAAA,CACf,GAAGQ,CACH,CAAA,WAAA,CAAaC,EAAwBF,GACrC,CAAA,WAAA,CAAaD,EAAc,IAAK,CAAA,KAAA,CAAMA,CAAW,CAAA,CAAI,MACvD,CAAC,CAAA,CACDZ,EAAQ,OAAQ,CAAA,0BAAA,CAAQ,GAAK,IAAMI,CAAAA,CAAS,KAAM,CAAE,QAAA,CAAU,OAAQ,CAAC,CAAC,EAC1E,CAWM,CAAA,QAAA,CAAA,CAAAI,IAACL,IAAK,CAAA,IAAA,CAAL,CAAU,KAAA,CAAM,iCAAQ,IAAK,CAAA,UAAA,CAAW,MAAO,CAAC,CAAE,SAAU,CAAK,CAAA,CAAC,EACjE,QAAAK,CAAAA,GAAAA,CAACQ,MAAA,EAAM,CAAA,CACT,EACAR,GAACL,CAAAA,IAAAA,CAAK,KAAL,CAAU,KAAA,CAAM,0BAAO,CAAA,IAAA,CAAK,cAAc,KAAO,CAAA,CAAC,CAAE,QAAU,CAAA,CAAA,CAAK,CAAC,CACnE,CAAA,QAAA,CAAAK,IAACQ,KAAA,CAAA,CAAM,OAAQD,CAAuB,CAAA,CAAA,CACxC,EACAP,GAACL,CAAAA,IAAAA,CAAK,KAAL,CAAU,KAAA,CAAM,0BAAO,CAAA,IAAA,CAAK,aAAa,KAAO,CAAA,CAAC,CAAE,QAAU,CAAA,CAAA,CAAK,CAAC,CAClE,CAAA,QAAA,CAAAK,GAACQ,CAAAA,KAAAA,CAAA,EAAM,CACT,CAAA,CAAA,CACAR,IAACL,IAAK,CAAA,IAAA,CAAL,CAAU,KAAM,CAAA,WAAA,CAAY,IAAK,CAAA,WAAA,CAAY,MAAO,CAAC,CAAE,SAAU,CAAK,CAAA,CAAC,EAAG,aAAc,CAAA,SAAA,CACvF,SAAAK,GAACS,CAAAA,MAAAA,CAAA,EAAO,CACV,CAAA,CAAA,CACAT,IAACL,IAAK,CAAA,IAAA,CAAL,CAAU,KAAM,CAAA,OAAA,CAAQ,IAAK,CAAA,OAAA,CAC5B,SAAAK,GAACU,CAAAA,WAAAA,CAAA,CAAY,SAAU,CAAA,QAAA,CAAS,EAClC,CACAV,CAAAA,GAAAA,CAACL,KAAK,IAAL,CAAA,CAAU,MAAM,0BAAO,CAAA,IAAA,CAAK,cAC3B,QAAAK,CAAAA,GAAAA,CAACW,OAAA,CACC,KAAA,CAAM,SACN,CAAA,MAAA,CAAO,QACP,QAAS,CAAA,MAAA,CACT,QAAS,CACP,OAAA,CAAS,CACP,OAAS,CAAA,CAAA,CACX,CACF,CACF,CAAA,CAAA,CACF,EACAX,GAACL,CAAAA,IAAAA,CAAK,KAAL,CAAU,KAAA,CAAM,SAAS,IAAK,CAAA,QAAA,CAAS,KAAO,CAAA,CAAC,CAAE,QAAU,CAAA,CAAA,CAAK,CAAC,CAChE,CAAA,QAAA,CAAAK,IAACW,MAAA,CAAA,CACC,KAAM,CAAA,SAAA,CACN,OAAO,OACP,CAAA,QAAA,CAAS,OACT,OAAS,CAAA,CACP,QAAS,CACP,OAAA,CAAS,CACX,CAAA,CACF,EACF,CACF,CAAA,CAAA,CACAX,IAACL,IAAK,CAAA,IAAA,CAAL,CAAU,KAAM,CAAA,KAAA,CAAM,KAAK,KAC1B,CAAA,QAAA,CAAAK,IAACQ,KAAM,CAAA,QAAA,CAAN,CAAe,IAAM,CAAA,CAAA,CAAG,EAC3B,CACAR,CAAAA,GAAAA,CAACL,IAAK,CAAA,IAAA,CAAL,CACC,QAAAO,CAAAA,IAAAA,CAAC,OAAI,SAAU,CAAA,2BAAA,CACb,UAAAF,GAACY,CAAAA,MAAAA,CAAA,CAAO,IAAK,CAAA,SAAA,CAAU,SAAS,QAAS,CAAA,QAAA,CAAA,cAAA,CAEzC,EACAZ,GAACY,CAAAA,MAAAA,CAAA,CACC,OAAS,CAAA,IAAM,CACbhB,CAAAA,CAAS,KAAM,CAAE,QAAA,CAAU,MAAO,CAAC,EACrC,EACD,QAED,CAAA,cAAA,CAAA,CAAA,CAAA,CACF,EACF,CACF,CAAA,CAAA,CAAA,CACF,CAEJ,CACA,CAAA,CAAE,SAAU,CAAK,CAAA,CACnB,EAEOiB,CAAQvB,CAAAA","file":"createMenuItem-GITYBEWA.js","sourcesContent":["import { Editor } from '@monaco-editor/react'\nimport { App, Button, Card, Form, Input, InputNumber, Switch } from 'antd'\nimport { useNavigate } from 'react-router-dom'\n\nimport { withContext } from '@/components/toolkitsProvider'\nimport { FRONTEND_ROUTE_PREFIX } from '@/constants'\nimport type { MenuListItem } from '@/types'\n\nimport { useCreateMenu } from '../../services'\n\ntype FormSchema = Omit<MenuListItem, 'id' | 'permissions'> & { permissions: string }\n\nconst CreateMenuItem = withContext(\n () => {\n const { message } = App.useApp()\n const [form] = Form.useForm<FormSchema>()\n const navigate = useNavigate()\n const { mutate: createMenu } = useCreateMenu()\n\n const onFinish = async (values: FormSchema) => {\n const { permissions, front_route, ...rest } = values\n await createMenu({\n ...rest,\n front_route: FRONTEND_ROUTE_PREFIX + front_route,\n permissions: permissions ? JSON.parse(permissions) : undefined,\n })\n message.success('创建成功', 0.8, () => navigate('..', { relative: 'route' }))\n }\n\n return (\n <Card title=\"创建菜单项\">\n <Form\n scrollToFirstError\n form={form}\n labelCol={{ flex: '120px' }}\n initialValues={{ is_common: false, is_model: false, order: 0 }}\n onFinish={onFinish}\n >\n <Form.Item label=\"菜单项名称\" name=\"category\" rules={[{ required: true }]}>\n <Input />\n </Form.Item>\n <Form.Item label=\"前端路由\" name=\"front_route\" rules={[{ required: true }]}>\n <Input prefix={FRONTEND_ROUTE_PREFIX} />\n </Form.Item>\n <Form.Item label=\"模板名称\" name=\"model_name\" rules={[{ required: true }]}>\n <Input />\n </Form.Item>\n <Form.Item label=\"Is Common\" name=\"is_common\" rules={[{ required: true }]} valuePropName=\"checked\">\n <Switch />\n </Form.Item>\n <Form.Item label=\"Order\" name=\"order\">\n <InputNumber className=\"w-full\" />\n </Form.Item>\n <Form.Item label=\"接口规则\" name=\"permissions\">\n <Editor\n theme=\"vs-dark\"\n height=\"300px\"\n language=\"json\"\n options={{\n minimap: {\n enabled: false,\n },\n }}\n />\n </Form.Item>\n <Form.Item label=\"Schema\" name=\"scheme\" rules={[{ required: true }]}>\n <Editor\n theme=\"vs-dark\"\n height=\"600px\"\n language=\"json\"\n options={{\n minimap: {\n enabled: false,\n },\n }}\n />\n </Form.Item>\n <Form.Item label=\"Ext\" name=\"ext\">\n <Input.TextArea rows={5} />\n </Form.Item>\n <Form.Item>\n <div className=\"flex justify-center gap-8\">\n <Button type=\"primary\" htmlType=\"submit\">\n 提交\n </Button>\n <Button\n onClick={() => {\n navigate('..', { relative: 'path' })\n }}\n >\n 取消\n </Button>\n </div>\n </Form.Item>\n </Form>\n </Card>\n )\n },\n { isGlobal: true },\n)\n\nexport default CreateMenuItem\n"]}
|
package/lib/index.d.ts
CHANGED
|
@@ -200,17 +200,16 @@ type HeaderExtra = {
|
|
|
200
200
|
children: ReactNode;
|
|
201
201
|
};
|
|
202
202
|
interface LayoutProps extends Pick<GameSelectProps, 'filter'> {
|
|
203
|
-
|
|
203
|
+
title?: string;
|
|
204
|
+
subtitle?: string;
|
|
204
205
|
isMenuLoading?: boolean;
|
|
205
206
|
items?: NavMenuItem[];
|
|
206
|
-
navWidth?: string | number;
|
|
207
207
|
gameSelectOptions?: GameSelectProps['options'];
|
|
208
|
+
showGameSelect?: boolean;
|
|
208
209
|
headerExtra?: {
|
|
209
210
|
left?: HeaderExtra[];
|
|
210
211
|
right?: HeaderExtra[];
|
|
211
212
|
};
|
|
212
|
-
title?: string;
|
|
213
|
-
subtitle?: string;
|
|
214
213
|
}
|
|
215
214
|
declare const Layout: FC<PropsWithChildren<LayoutProps>>;
|
|
216
215
|
|
|
@@ -440,16 +439,20 @@ interface ContextSlice {
|
|
|
440
439
|
loginPath: string;
|
|
441
440
|
isGlobal: boolean;
|
|
442
441
|
navWidth?: number;
|
|
443
|
-
collapsed?: boolean;
|
|
444
442
|
collapsible?: boolean;
|
|
445
443
|
mainPagePath: string;
|
|
446
|
-
setContext(state: Partial<Omit<ContextSlice, 'setContext'>>): void;
|
|
447
444
|
apiBase?: string;
|
|
445
|
+
setContext(state: Partial<Omit<ContextSlice, 'setContext'>>): void;
|
|
448
446
|
}
|
|
449
447
|
|
|
450
448
|
interface GameSlice {
|
|
451
|
-
|
|
452
|
-
|
|
449
|
+
appId?: string | number;
|
|
450
|
+
setAppId: (id?: string | number) => void;
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
interface LayoutSlice {
|
|
454
|
+
collapsed: boolean;
|
|
455
|
+
toggleCollapsed: () => void;
|
|
453
456
|
}
|
|
454
457
|
|
|
455
458
|
/**
|
|
@@ -466,7 +469,7 @@ interface TokenSlice {
|
|
|
466
469
|
setToken: (token: string) => void;
|
|
467
470
|
}
|
|
468
471
|
|
|
469
|
-
type ToolkitsState = TokenSlice & GameSlice & ContextSlice & {
|
|
472
|
+
type ToolkitsState = TokenSlice & GameSlice & ContextSlice & LayoutSlice & {
|
|
470
473
|
clear: () => void;
|
|
471
474
|
};
|
|
472
475
|
|
|
@@ -565,6 +568,12 @@ declare function createVisibilityStore(): zustand.UseBoundStore<zustand.StoreApi
|
|
|
565
568
|
|
|
566
569
|
declare const generateId: () => number;
|
|
567
570
|
|
|
571
|
+
/**
|
|
572
|
+
* 混合存储策略
|
|
573
|
+
* - 优先从 SessionStorage 读取数据,防止多开页面时的数据冲突
|
|
574
|
+
* - 写入时同时更新 SessionStorage 和 LocalStorage
|
|
575
|
+
* - SessionStorage 不存在时,fallback 到 LocalStorage
|
|
576
|
+
*/
|
|
568
577
|
declare const mixedStorage: StateStorage;
|
|
569
578
|
|
|
570
579
|
declare const useDrawerStore: zustand.UseBoundStore<zustand.StoreApi<VisibilityState>>;
|