react-toolkits 2.24.17 → 2.24.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/lib/chunk-7X2LW6EY.js +73 -0
  3. package/lib/chunk-7X2LW6EY.js.map +1 -0
  4. package/lib/chunk-D75NVCYN.js +2 -0
  5. package/lib/chunk-D75NVCYN.js.map +1 -0
  6. package/lib/chunk-DLTAWT6S.js +2 -0
  7. package/lib/chunk-DLTAWT6S.js.map +1 -0
  8. package/lib/chunk-E6L6VKSV.js +227 -0
  9. package/lib/chunk-E6L6VKSV.js.map +1 -0
  10. package/lib/chunk-ESCBNFWD.js +498 -0
  11. package/lib/chunk-ESCBNFWD.js.map +1 -0
  12. package/lib/chunk-FSXYUF4U.js +276 -0
  13. package/lib/chunk-FSXYUF4U.js.map +1 -0
  14. package/lib/chunk-H5Y4DYUL.js +2 -0
  15. package/lib/chunk-H5Y4DYUL.js.map +1 -0
  16. package/lib/chunk-LXMQLSQY.js +46 -0
  17. package/lib/chunk-LXMQLSQY.js.map +1 -0
  18. package/lib/chunk-MTRFNFEM.js +2 -0
  19. package/lib/chunk-MTRFNFEM.js.map +1 -0
  20. package/lib/chunk-NNXVZIY2.js +2 -0
  21. package/lib/chunk-NNXVZIY2.js.map +1 -0
  22. package/lib/chunk-OH74GXG4.js +570 -0
  23. package/lib/chunk-OH74GXG4.js.map +1 -0
  24. package/lib/chunk-P25BHLH3.js +3 -0
  25. package/lib/chunk-P25BHLH3.js.map +1 -0
  26. package/lib/chunk-QACSRYJY.js +147 -0
  27. package/lib/chunk-QACSRYJY.js.map +1 -0
  28. package/lib/chunk-ST7VUWJ4.js +2 -0
  29. package/lib/chunk-ST7VUWJ4.js.map +1 -0
  30. package/lib/chunk-UPO7NB6O.js +2 -0
  31. package/lib/chunk-UPO7NB6O.js.map +1 -0
  32. package/lib/chunk-Z6PDWY44.js +17 -0
  33. package/lib/chunk-Z6PDWY44.js.map +1 -0
  34. package/lib/chunk-ZF7POJAA.js +2 -0
  35. package/lib/chunk-ZF7POJAA.js.map +1 -0
  36. package/lib/chunk-ZOHMJAAX.js +120 -0
  37. package/lib/chunk-ZOHMJAAX.js.map +1 -0
  38. package/lib/createMenuItem-CICLQWU6.js +86 -0
  39. package/lib/createMenuItem-CICLQWU6.js.map +1 -0
  40. package/lib/createMenuItem-SXFYDNCW.js +2 -0
  41. package/lib/createMenuItem-SXFYDNCW.js.map +1 -0
  42. package/lib/index.css +1 -1
  43. package/lib/index.d.ts +16 -11
  44. package/lib/index.js +2 -2
  45. package/lib/index.js.map +1 -1
  46. package/lib/menuItemList-EHQSS4YZ.js +132 -0
  47. package/lib/{menuItemList-VPYVIEYR.js.map → menuItemList-EHQSS4YZ.js.map} +1 -1
  48. package/lib/menuItemList-NIBRDRTA.js +2 -0
  49. package/lib/menuItemList-NIBRDRTA.js.map +1 -0
  50. package/lib/{roleDetail-EYQ2HREL.js → roleDetail-7HEBW7IS.js} +2 -2
  51. package/lib/roleDetail-7HEBW7IS.js.map +1 -0
  52. package/lib/roleDetail-JCDOXKAM.js +72 -0
  53. package/lib/roleDetail-JCDOXKAM.js.map +1 -0
  54. package/lib/roleList-4C77ULPK.js +161 -0
  55. package/lib/roleList-4C77ULPK.js.map +1 -0
  56. package/lib/roleList-WGLD3HXB.js +2 -0
  57. package/lib/roleList-WGLD3HXB.js.map +1 -0
  58. package/lib/updateMenuItem-K62CKVXP.js +109 -0
  59. package/lib/updateMenuItem-K62CKVXP.js.map +1 -0
  60. package/lib/updateMenuItem-TECCUD6Z.js +2 -0
  61. package/lib/updateMenuItem-TECCUD6Z.js.map +1 -0
  62. package/lib/userDetail-WGQJ7IC5.js +2 -0
  63. package/lib/userDetail-WGQJ7IC5.js.map +1 -0
  64. package/lib/userDetail-WYN52ZJ2.js +116 -0
  65. package/lib/userDetail-WYN52ZJ2.js.map +1 -0
  66. package/lib/{userList-AFTI4FQV.js → userList-2S2FRAG6.js} +2 -2
  67. package/lib/userList-2S2FRAG6.js.map +1 -0
  68. package/lib/userList-AMVG7RCE.js +195 -0
  69. package/lib/userList-AMVG7RCE.js.map +1 -0
  70. package/locale/context.js +7 -1
  71. package/locale/context.js.map +1 -1
  72. package/locale/en_GB.js +94 -1
  73. package/locale/en_GB.js.map +1 -1
  74. package/locale/hooks.js +18 -1
  75. package/locale/hooks.js.map +1 -1
  76. package/locale/index.d.ts +1 -1
  77. package/locale/index.js +2 -1
  78. package/locale/ja_JP.js +94 -1
  79. package/locale/ja_JP.js.map +1 -1
  80. package/locale/ko_KR.js +94 -1
  81. package/locale/ko_KR.js.map +1 -1
  82. package/locale/zh_CN.js +94 -1
  83. package/locale/zh_CN.js.map +1 -1
  84. package/package.json +10 -10
  85. package/lib/chunk-2OEQYX3O.js +0 -2
  86. package/lib/chunk-2OEQYX3O.js.map +0 -1
  87. package/lib/chunk-47QCX44D.js +0 -2
  88. package/lib/chunk-47QCX44D.js.map +0 -1
  89. package/lib/chunk-4EBAPE4B.js +0 -2
  90. package/lib/chunk-4EBAPE4B.js.map +0 -1
  91. package/lib/chunk-4XO7JAVX.js +0 -2
  92. package/lib/chunk-4XO7JAVX.js.map +0 -1
  93. package/lib/chunk-RMU775LC.js +0 -2
  94. package/lib/chunk-RMU775LC.js.map +0 -1
  95. package/lib/chunk-RPEFI7RP.js +0 -3
  96. package/lib/chunk-RPEFI7RP.js.map +0 -1
  97. package/lib/chunk-WOYFKIRH.js +0 -2
  98. package/lib/chunk-WOYFKIRH.js.map +0 -1
  99. package/lib/chunk-Y3RYS76E.js +0 -2
  100. package/lib/chunk-Y3RYS76E.js.map +0 -1
  101. package/lib/chunk-ZFIKMQD3.js +0 -2
  102. package/lib/chunk-ZFIKMQD3.js.map +0 -1
  103. package/lib/createMenuItem-SETFJ7U7.js +0 -2
  104. package/lib/createMenuItem-SETFJ7U7.js.map +0 -1
  105. package/lib/menuItemList-VPYVIEYR.js +0 -2
  106. package/lib/roleDetail-EYQ2HREL.js.map +0 -1
  107. package/lib/roleList-ZW4RLM25.js +0 -2
  108. package/lib/roleList-ZW4RLM25.js.map +0 -1
  109. package/lib/updateMenuItem-2ZS3SMYT.js +0 -2
  110. package/lib/updateMenuItem-2ZS3SMYT.js.map +0 -1
  111. package/lib/userDetail-5NE5PUBC.js +0 -2
  112. package/lib/userDetail-5NE5PUBC.js.map +0 -1
  113. package/lib/userList-AFTI4FQV.js.map +0 -1
@@ -0,0 +1,276 @@
1
+ import { useCreateRole, useUpdateRole, useAllPermissionsV2, useAllPermissions } from './chunk-QACSRYJY.js';
2
+ import { useFormModal } from './chunk-ZOHMJAAX.js';
3
+ import { useTranslation } from './chunk-Z6PDWY44.js';
4
+ import { useGames } from './chunk-7X2LW6EY.js';
5
+ import { __name, useToolkitsStore } from './chunk-OH74GXG4.js';
6
+ import { Typography, Select, App, Form, Input, Divider, Skeleton, Card, Empty, Button, Space, Checkbox, Row, Col, Collapse } from 'antd';
7
+ import { useState, useEffect, useTransition, useCallback } from 'react';
8
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
9
+
10
+ var PermissionCollapse = /* @__PURE__ */ __name((props) => {
11
+ const { permissions, readonly, expand, value, onChange } = props;
12
+ const [activeKey, setActiveKey] = useState([]);
13
+ const [checkedMap, setCheckedMap] = useState({});
14
+ const [internalValue, setInternalValue] = useState(value ?? []);
15
+ const { t } = useTranslation();
16
+ const [, startTransition] = useTransition();
17
+ const onCollapseChange = useCallback((key) => {
18
+ setActiveKey(key);
19
+ }, []);
20
+ const getCheckedValue = /* @__PURE__ */ __name((checkedValue, codes) => {
21
+ let tempValue = [];
22
+ if (checkedValue) {
23
+ tempValue = [...new Set(internalValue.concat(codes))];
24
+ } else {
25
+ tempValue = internalValue.slice();
26
+ codes.forEach((code) => {
27
+ const index = tempValue.findIndex((item) => item === code);
28
+ if (index > -1) {
29
+ tempValue.splice(index, 1);
30
+ }
31
+ });
32
+ }
33
+ return tempValue;
34
+ }, "getCheckedValue");
35
+ const onCheckChange = /* @__PURE__ */ __name((e, codes) => {
36
+ const checkedValue = getCheckedValue(e.target.checked, codes);
37
+ setInternalValue(checkedValue);
38
+ onChange?.(checkedValue);
39
+ }, "onCheckChange");
40
+ useEffect(() => {
41
+ setInternalValue(value ?? []);
42
+ }, [value]);
43
+ useEffect(() => {
44
+ if (expand) {
45
+ startTransition(() => {
46
+ setActiveKey((permissions ?? []).map(({ category }) => category));
47
+ });
48
+ }
49
+ }, [expand, permissions]);
50
+ useEffect(() => {
51
+ const checkedValue = (permissions ?? []).reduce(
52
+ (acc, curr) => {
53
+ acc[curr.category] = curr.permissions.every((item) => internalValue?.includes(item.value));
54
+ return acc;
55
+ },
56
+ {}
57
+ );
58
+ setCheckedMap(checkedValue);
59
+ }, [internalValue, permissions]);
60
+ const items = (permissions ?? []).map((item) => ({
61
+ key: item.category,
62
+ label: item.category,
63
+ extra: !readonly && /* @__PURE__ */ jsx(
64
+ Checkbox,
65
+ {
66
+ checked: checkedMap[item.category],
67
+ onChange: (e) => {
68
+ onCheckChange(
69
+ e,
70
+ item.permissions?.map((permission) => permission.value)
71
+ );
72
+ },
73
+ children: t("global.selectAll")
74
+ }
75
+ ),
76
+ children: /* @__PURE__ */ jsx(Checkbox.Group, { style: { width: "100%" }, value: internalValue, disabled: readonly, children: /* @__PURE__ */ jsx(Row, { gutter: [10, 10], style: { width: "100%" }, children: item.permissions?.map((permission) => /* @__PURE__ */ jsx(Col, { span: 6, children: /* @__PURE__ */ jsx(
77
+ Checkbox,
78
+ {
79
+ value: permission.value,
80
+ onChange: (e) => {
81
+ onCheckChange(e, [permission.value]);
82
+ },
83
+ children: permission.label
84
+ }
85
+ ) }, permission.value)) }) })
86
+ }));
87
+ return /* @__PURE__ */ jsx(
88
+ Collapse,
89
+ {
90
+ style: { width: "100%" },
91
+ collapsible: "header",
92
+ activeKey,
93
+ items,
94
+ onChange: onCollapseChange
95
+ }
96
+ );
97
+ }, "PermissionCollapse");
98
+ var permissionCollapse_default = PermissionCollapse;
99
+ var { Text } = Typography;
100
+ var { Option } = Select;
101
+ var PermissionWithGame = /* @__PURE__ */ __name((props) => {
102
+ const { expand = true, value, readonly, onChange } = props;
103
+ const { data: permission, isLoading: isPermissionLoading, error } = useAllPermissionsV2();
104
+ const { data: games, isLoading: isGamesLoading } = useGames();
105
+ const [gameList, setGameList] = useState([]);
106
+ const globalPermissions = permission?.filter((item) => item.is_common);
107
+ const gamePermissions = permission?.filter((item) => !item.is_common);
108
+ const isLoading = isPermissionLoading || isGamesLoading;
109
+ const { t } = useTranslation();
110
+ useEffect(() => {
111
+ const list = [];
112
+ Object.keys(value ?? {}).forEach((key) => {
113
+ if (key !== "global") {
114
+ list.push({ gameId: key, permissions: value?.[key] ?? [] });
115
+ }
116
+ });
117
+ setGameList(list);
118
+ }, [value]);
119
+ if (error) {
120
+ return /* @__PURE__ */ jsx("div", { className: "flex justify-center", children: /* @__PURE__ */ jsx(Text, { type: "danger", children: t("PermissionList.failedDescription") }) });
121
+ }
122
+ const addGame = /* @__PURE__ */ __name(() => {
123
+ setGameList((prev) => [...prev, { gameId: "", permissions: [] }]);
124
+ }, "addGame");
125
+ const removeGame = /* @__PURE__ */ __name((index) => {
126
+ setGameList((prev) => prev.filter((_, i) => i !== index));
127
+ }, "removeGame");
128
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col w-full", children: [
129
+ /* @__PURE__ */ jsx("div", { className: "mb-12", children: /* @__PURE__ */ jsx(Divider, { dashed: true, children: t("PermissionList.baseSectionTitle") }) }),
130
+ /* @__PURE__ */ jsx(Skeleton, { active: true, loading: isLoading, children: /* @__PURE__ */ jsx(
131
+ permissionCollapse_default,
132
+ {
133
+ value: value?.global,
134
+ readonly,
135
+ permissions: globalPermissions,
136
+ expand,
137
+ onChange: (newValue) => {
138
+ onChange?.({
139
+ ...value,
140
+ global: newValue
141
+ });
142
+ }
143
+ }
144
+ ) }),
145
+ /* @__PURE__ */ jsx("div", { className: "my-12", children: /* @__PURE__ */ jsx(Divider, { dashed: true, children: t("PermissionList.gameSectionTitle") }) }),
146
+ gameList.map((item, index) => /* @__PURE__ */ jsx(
147
+ Card,
148
+ {
149
+ title: /* @__PURE__ */ jsxs(Space, { children: [
150
+ /* @__PURE__ */ jsx(Text, { children: t("global.game") }),
151
+ readonly ? /* @__PURE__ */ jsx(Text, { children: games?.find((game) => String(game.id) === item.gameId)?.name }) : /* @__PURE__ */ jsx(
152
+ Select,
153
+ {
154
+ disabled: readonly,
155
+ value: gameList[index].gameId || void 0,
156
+ style: { width: "160px" },
157
+ placeholder: t("PermissionList.gameSelectPlaceholder"),
158
+ onChange: (selectedValue) => {
159
+ setGameList((pev) => {
160
+ const temp = pev.slice();
161
+ temp[index].gameId = selectedValue;
162
+ return temp;
163
+ });
164
+ },
165
+ children: games?.map((game) => /* @__PURE__ */ jsx(
166
+ Option,
167
+ {
168
+ value: game.id,
169
+ disabled: gameList.some(({ gameId }) => gameId === String(game.id)),
170
+ children: game.name
171
+ },
172
+ game.id
173
+ ))
174
+ }
175
+ )
176
+ ] }),
177
+ className: "mb-6",
178
+ extra: !readonly && /* @__PURE__ */ jsx(
179
+ Button,
180
+ {
181
+ type: "link",
182
+ onClick: () => {
183
+ removeGame(index);
184
+ },
185
+ children: t("PermissionList.removeText")
186
+ }
187
+ ),
188
+ children: gameList[index].gameId ? /* @__PURE__ */ jsx(Skeleton, { active: true, loading: isLoading, children: /* @__PURE__ */ jsx(
189
+ permissionCollapse_default,
190
+ {
191
+ value: value?.[gameList[index].gameId],
192
+ readonly,
193
+ expand,
194
+ permissions: gamePermissions,
195
+ onChange: (newValue) => {
196
+ onChange?.({
197
+ ...value,
198
+ [gameList[index].gameId]: newValue
199
+ });
200
+ }
201
+ }
202
+ ) }) : /* @__PURE__ */ jsx(Empty, { description: t("PermissionList.gameSectionDescription") })
203
+ },
204
+ index
205
+ )),
206
+ !readonly && /* @__PURE__ */ jsx(Button, { block: true, type: "dashed", onClick: addGame, children: t("PermissionList.addText") })
207
+ ] });
208
+ }, "PermissionWithGame");
209
+ var PermissionWithGame_default = PermissionWithGame;
210
+ var { Text: Text2 } = Typography;
211
+ var PermissionWithoutGame = /* @__PURE__ */ __name((props) => {
212
+ const { expand = true, value, readonly, onChange } = props;
213
+ const { data: permissions, isLoading, error } = useAllPermissions();
214
+ const { t } = useTranslation();
215
+ if (error) {
216
+ return /* @__PURE__ */ jsx("div", { className: "flex justify-center", children: /* @__PURE__ */ jsx(Text2, { type: "danger", children: t("PermissionList.failedDescription") }) });
217
+ }
218
+ return /* @__PURE__ */ jsx(Skeleton, { active: true, loading: isLoading, children: /* @__PURE__ */ jsx(
219
+ permissionCollapse_default,
220
+ {
221
+ value,
222
+ permissions,
223
+ readonly,
224
+ expand,
225
+ onChange
226
+ }
227
+ ) });
228
+ }, "PermissionWithoutGame");
229
+ var PermissionWithoutGame_default = PermissionWithoutGame;
230
+ var PermissionList = /* @__PURE__ */ __name((props) => {
231
+ const { value } = props;
232
+ console.log("value", typeof value, value === null, JSON.stringify(value));
233
+ const { permissionVersion } = useToolkitsStore();
234
+ if (permissionVersion === "v2" /* V2 */) {
235
+ return /* @__PURE__ */ jsx(PermissionWithGame_default, { ...props, value });
236
+ }
237
+ return /* @__PURE__ */ jsx(PermissionWithoutGame_default, { ...props, value });
238
+ }, "PermissionList");
239
+ var permissionList_default = PermissionList;
240
+ var useRoleModal = /* @__PURE__ */ __name(({ mode, onSuccess }) => {
241
+ const { message } = App.useApp();
242
+ const { t } = useTranslation();
243
+ const create = useCreateRole();
244
+ const update = useUpdateRole();
245
+ const isCreateMode = mode === "create";
246
+ const title = isCreateMode ? t("Role.createTitle") : t("Role.updateTitle");
247
+ const content = /* @__PURE__ */ jsxs(Fragment, { children: [
248
+ /* @__PURE__ */ jsx(Form.Item, { label: t("global.name"), name: "name", rules: [{ required: true }], children: /* @__PURE__ */ jsx(Input, { disabled: !isCreateMode }) }),
249
+ /* @__PURE__ */ jsx(Form.Item, { name: "permissions", children: /* @__PURE__ */ jsx(permissionList_default, {}) })
250
+ ] });
251
+ const onConfirm = /* @__PURE__ */ __name(async (values, extraValues) => {
252
+ const name = `role_${values.name}`;
253
+ const permissions = values.permissions;
254
+ if (isCreateMode) {
255
+ await create.mutateAsync({ name, permissions });
256
+ message.success(t("Role.createSuccessfully"));
257
+ } else {
258
+ await update.mutateAsync({ id: extraValues?.id, name, permissions });
259
+ message.success(t("Role.updateSuccessfully"));
260
+ }
261
+ onSuccess?.();
262
+ }, "onConfirm");
263
+ return useFormModal({
264
+ title,
265
+ width: "1000px",
266
+ formProps: {
267
+ layout: "vertical"
268
+ },
269
+ content,
270
+ onConfirm
271
+ });
272
+ }, "useRoleModal");
273
+
274
+ export { permissionList_default, useRoleModal };
275
+ //# sourceMappingURL=chunk-FSXYUF4U.js.map
276
+ //# sourceMappingURL=chunk-FSXYUF4U.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/modules/permission/components/permissionCollapse/index.tsx","../src/modules/permission/components/permissionList/PermissionWithGame.tsx","../src/modules/permission/components/permissionList/PermissionWithoutGame.tsx","../src/modules/permission/components/permissionList/index.tsx","../src/modules/permission/hooks/role-hooks.tsx"],"names":["useState","useEffect","jsx","Text","Typography","Skeleton","jsxs"],"mappings":"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","file":"chunk-FSXYUF4U.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,2 @@
1
+ import {l,m,i}from'./chunk-P25BHLH3.js';import {useQuery,useQueryClient,useMutation}from'@tanstack/react-query';function f(){let s=l();return useQuery({queryKey:m.roles.all,queryFn:()=>s.get("/api/usystem/role/all")})}function R(s){let i$1=i(o=>o.permissionVersion),t=l(),e=i$1==="v2"?"v2":"v1";return useQuery({queryKey:m.roles.detail(s,e),queryFn:()=>t.get(`/api/usystem/role/${e==="v2"?"infoV2":"info"}?name=${s}`)})}function q(){let{permissionVersion:s}=i(o=>o),i$1=l(),t=useQueryClient(),e=s==="v2"?"v2":"v1";return useMutation({mutationKey:m.roles.create(e),mutationFn:({name:o,permissions:u})=>i$1.post(e==="v2"?"/api/usystem/role/createV2":"/api/usystem/role/create",{name:o,permissions:u}),onSuccess:()=>{t.invalidateQueries({queryKey:m.roles.all});}})}function v(){let{permissionVersion:s}=i(o=>o),i$1=l(),t=useQueryClient(),e=s==="v2"?"v2":"v1";return useMutation({mutationKey:m.roles.update(e),mutationFn:({id:o,name:u,permissions:m})=>i$1.post(e==="v2"?"/api/usystem/role/updateV2":"/api/usystem/role/update",{id:o,name:u,permissions:m}),onSuccess:()=>{t.invalidateQueries({queryKey:m.roles.all});}})}function C(){let s=l(),i=useQueryClient();return useMutation({mutationKey:m.roles.delete,mutationFn:({id:t,name:e})=>s.post("/api/usystem/role/delete",{id:t,name:e}),onSuccess:()=>{i.invalidateQueries({queryKey:m.roles.all});}})}function K(){let s=l(),i$1=useQueryClient(),{permissionVersion:t}=i();return useMutation({mutationKey:m.users.create,mutationFn:e=>{let o=m=>"permissions"in m,u=e;if(o(e)&&t==="v4"){let m=e.permissions.map(y=>({game_group:["*"],game_ids:y.game_ids,role:y.role}));u={...e,permissions:m};}return s.post("/api/usystem/user/create",u)},onSuccess:()=>{i$1.invalidateQueries({queryKey:m.users.all});}})}function h(){let s=l(),i$1=useQueryClient(),{permissionVersion:t}=i();return useMutation({mutationKey:m.users.update,mutationFn:e=>{let o=m=>"permissions"in m,u=e;if(o(e)&&t==="v4"){let m=e.permissions.map(y=>({game_group:["*"],game_ids:y.game_ids,role:y.role}));u={...e,permissions:m};}return s.post("/api/usystem/user/update",u)},onSuccess:()=>{i$1.invalidateQueries({queryKey:m.users.all});}})}function W(){let s=l(),i=useQueryClient();return useMutation({mutationKey:m.users.delete,mutationFn:({id:t,name:e})=>s.post("/api/usystem/user/delete",{id:t,name:e}),onSuccess:()=>{i.invalidateQueries({queryKey:m.users.all});}})}function k(){let s=l();return useQuery({queryKey:m.permissions.allPermissions,queryFn:()=>s.get("/api/usystem/user/allPermssions")})}function x(){let s=l();return useQuery({queryKey:m.permissions.allPermissionsV2,queryFn:()=>s.get("/api/usystem/user/allPermssionsV2")})}export{f as a,R as b,q as c,v as d,C as e,K as f,h as g,W as h,k as i,x as j};//# sourceMappingURL=chunk-H5Y4DYUL.js.map
2
+ //# sourceMappingURL=chunk-H5Y4DYUL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/modules/permission/services/index.ts"],"names":["useAllRoles","ky","useKy","useQuery","queryKeys","useRole","name","permissionVersion","useToolkitsStore","state","version","useCreateRole","s","queryClient","useQueryClient","useMutation","permissions","useUpdateRole","id","useRemoveRole","useCreateUser","arg","hasPermissions","obj","requestData","transformedPermissions","item","useUpdateUser","useRemoveUser","useAllPermissions","useAllPermissionsV2"],"mappings":"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","file":"chunk-H5Y4DYUL.js","sourcesContent":["import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'\n\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { PermissionVersion, WILDCARD } from '@/constants'\nimport { useKy } from '@/libs'\nimport { queryKeys } from '@/queryKeys'\n\nimport type { PermissionEnumItem, RoleEnumItem, RoleV1, RoleV2 } from '../types'\n\nexport function useAllRoles() {\n const ky = useKy()\n return useQuery({\n queryKey: queryKeys.roles.all,\n queryFn: () => ky.get<RoleEnumItem[]>('/api/usystem/role/all'),\n })\n}\n\nexport function useRole(name: string) {\n const permissionVersion = useToolkitsStore(state => state.permissionVersion)\n const ky = useKy()\n const version = permissionVersion === PermissionVersion.V2 ? 'v2' : 'v1'\n\n return useQuery({\n queryKey: queryKeys.roles.detail(name, version),\n queryFn: () => ky.get<RoleV1 | RoleV2>(`/api/usystem/role/${version === 'v2' ? 'infoV2' : 'info'}?name=${name}`),\n })\n}\n\nexport function useCreateRole() {\n const { permissionVersion } = useToolkitsStore(s => s)\n const ky = useKy()\n const queryClient = useQueryClient()\n const version = permissionVersion === PermissionVersion.V2 ? 'v2' : 'v1'\n\n return useMutation({\n mutationKey: queryKeys.roles.create(version),\n mutationFn: ({ name, permissions }: { name: string; permissions: RoleV1['permissions'] | RoleV2['permissions'] }) =>\n ky.post(version === 'v2' ? '/api/usystem/role/createV2' : '/api/usystem/role/create', { name, permissions }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.roles.all })\n },\n })\n}\n\nexport function useUpdateRole() {\n const { permissionVersion } = useToolkitsStore(s => s)\n const ky = useKy()\n const queryClient = useQueryClient()\n const version = permissionVersion === PermissionVersion.V2 ? 'v2' : 'v1'\n\n return useMutation({\n mutationKey: queryKeys.roles.update(version),\n mutationFn: ({\n id,\n name,\n permissions,\n }: {\n id: number\n name: string\n permissions: RoleV1['permissions'] | RoleV2['permissions']\n }) =>\n ky.post(version === 'v2' ? '/api/usystem/role/updateV2' : '/api/usystem/role/update', { id, name, permissions }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.roles.all })\n },\n })\n}\n\nexport function useRemoveRole() {\n const ky = useKy()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationKey: queryKeys.roles.delete,\n mutationFn: ({ id, name }: { id: number; name: string }) => ky.post('/api/usystem/role/delete', { id, name }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.roles.all })\n },\n })\n}\n\ntype CreateUserWithRoles = { name: string; roles: string[] }\n\ntype CreateUserPermission = {\n game_group?: string[]\n game_ids: string[]\n role: string\n}\n\ntype CreateUserWithPermissions = {\n name: string\n permissions: CreateUserPermission[]\n}\n\nexport function useCreateUser() {\n const ky = useKy()\n const queryClient = useQueryClient()\n const { permissionVersion } = useToolkitsStore()\n\n return useMutation({\n mutationKey: queryKeys.users.create,\n mutationFn: (arg: CreateUserWithRoles | CreateUserWithPermissions) => {\n // 使用类型守卫判断是否包含 permissions\n const hasPermissions = (obj: typeof arg): obj is CreateUserWithPermissions => 'permissions' in obj\n\n let requestData: CreateUserWithRoles | CreateUserWithPermissions = arg\n\n if (hasPermissions(arg) && permissionVersion === PermissionVersion.V4) {\n const transformedPermissions = arg.permissions.map(item => ({\n game_group: [WILDCARD],\n game_ids: item.game_ids,\n role: item.role,\n }))\n requestData = { ...arg, permissions: transformedPermissions }\n }\n\n return ky.post('/api/usystem/user/create', requestData)\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.users.all })\n },\n })\n}\n\ntype UpdateUserWithRoles = { id: string; name: string; roles: string[] }\n\ntype UpdateUserPermission = {\n game_group?: string[]\n game_ids: string[]\n role: string\n}\n\ntype UpdateUserWithPermissions = {\n id: string\n name: string\n permissions: UpdateUserPermission[]\n}\n\nexport function useUpdateUser() {\n const ky = useKy()\n const queryClient = useQueryClient()\n const { permissionVersion } = useToolkitsStore()\n\n return useMutation({\n mutationKey: queryKeys.users.update,\n mutationFn: (arg: UpdateUserWithRoles | UpdateUserWithPermissions) => {\n // 使用类型守卫判断是否包含 permissions\n const hasPermissions = (obj: typeof arg): obj is UpdateUserWithPermissions => 'permissions' in obj\n\n let requestData: UpdateUserWithRoles | UpdateUserWithPermissions = arg\n\n if (hasPermissions(arg) && permissionVersion === PermissionVersion.V4) {\n const transformedPermissions = arg.permissions.map(item => ({\n game_group: [WILDCARD],\n game_ids: item.game_ids,\n role: item.role,\n }))\n requestData = { ...arg, permissions: transformedPermissions }\n }\n\n return ky.post('/api/usystem/user/update', requestData)\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.users.all })\n },\n })\n}\n\nexport function useRemoveUser() {\n const ky = useKy()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationKey: queryKeys.users.delete,\n mutationFn: ({ id, name }: { id: string; name: string }) => ky.post('/api/usystem/user/delete', { id, name }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.users.all })\n },\n })\n}\n\nexport function useAllPermissions() {\n const ky = useKy()\n\n return useQuery({\n queryKey: queryKeys.permissions.allPermissions,\n queryFn: () => ky.get<PermissionEnumItem[]>('/api/usystem/user/allPermssions'),\n })\n}\n\nexport function useAllPermissionsV2() {\n const ky = useKy()\n\n return useQuery({\n queryKey: queryKeys.permissions.allPermissionsV2,\n queryFn: () => ky.get<PermissionEnumItem[]>('/api/usystem/user/allPermssionsV2'),\n })\n}\n"]}
@@ -0,0 +1,46 @@
1
+ import { __name, useKy, queryKeys } from './chunk-OH74GXG4.js';
2
+ import { useQueryClient, useMutation } from '@tanstack/react-query';
3
+
4
+ function useCreateMenu() {
5
+ const ky = useKy();
6
+ const queryClient = useQueryClient();
7
+ return useMutation({
8
+ mutationKey: queryKeys.menus.create,
9
+ mutationFn: /* @__PURE__ */ __name((arg) => ky.post("/api/usystem/menu/set", { ...arg, id: 0, is_model: true }), "mutationFn"),
10
+ onSuccess: /* @__PURE__ */ __name(() => {
11
+ queryClient.invalidateQueries({ queryKey: queryKeys.menus.all });
12
+ queryClient.invalidateQueries({ queryKey: queryKeys.menus.navbar() });
13
+ }, "onSuccess")
14
+ });
15
+ }
16
+ __name(useCreateMenu, "useCreateMenu");
17
+ function useUpdateMenu() {
18
+ const ky = useKy();
19
+ const queryClient = useQueryClient();
20
+ return useMutation({
21
+ mutationKey: queryKeys.menus.update,
22
+ mutationFn: /* @__PURE__ */ __name((arg) => ky.post("/api/usystem/menu/set", { ...arg, is_model: true }), "mutationFn"),
23
+ onSuccess: /* @__PURE__ */ __name(() => {
24
+ queryClient.invalidateQueries({ queryKey: queryKeys.menus.all });
25
+ queryClient.invalidateQueries({ queryKey: queryKeys.menus.navbar() });
26
+ }, "onSuccess")
27
+ });
28
+ }
29
+ __name(useUpdateMenu, "useUpdateMenu");
30
+ function useRemoveMenu() {
31
+ const ky = useKy();
32
+ const queryClient = useQueryClient();
33
+ return useMutation({
34
+ mutationKey: queryKeys.menus.delete,
35
+ mutationFn: /* @__PURE__ */ __name((id) => ky.post("/api/usystem/menu/delete", null, { searchParams: { id } }), "mutationFn"),
36
+ onSuccess: /* @__PURE__ */ __name(() => {
37
+ queryClient.invalidateQueries({ queryKey: queryKeys.menus.all });
38
+ queryClient.invalidateQueries({ queryKey: queryKeys.menus.navbar() });
39
+ }, "onSuccess")
40
+ });
41
+ }
42
+ __name(useRemoveMenu, "useRemoveMenu");
43
+
44
+ export { useCreateMenu, useRemoveMenu, useUpdateMenu };
45
+ //# sourceMappingURL=chunk-LXMQLSQY.js.map
46
+ //# sourceMappingURL=chunk-LXMQLSQY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/modules/menu/services/index.ts"],"names":[],"mappings":";;;AAMO,SAAS,aAAA,GAAgB;AAC9B,EAAA,MAAM,KAAK,KAAA,EAAM;AACjB,EAAA,MAAM,cAAc,cAAA,EAAe;AAEnC,EAAA,OAAO,WAAA,CAAY;AAAA,IACjB,WAAA,EAAa,UAAU,KAAA,CAAM,MAAA;AAAA,IAC7B,UAAA,kBAAY,MAAA,CAAA,CAAC,GAAA,KAAkC,EAAA,CAAG,KAAK,uBAAA,EAAyB,EAAE,GAAG,GAAA,EAAK,EAAA,EAAI,CAAA,EAAG,QAAA,EAAU,IAAA,EAAM,CAAA,EAArG,YAAA,CAAA;AAAA,IACZ,2BAAW,MAAA,CAAA,MAAM;AACf,MAAA,WAAA,CAAY,kBAAkB,EAAE,QAAA,EAAU,SAAA,CAAU,KAAA,CAAM,KAAK,CAAA;AAC/D,MAAA,WAAA,CAAY,kBAAkB,EAAE,QAAA,EAAU,UAAU,KAAA,CAAM,MAAA,IAAU,CAAA;AAAA,IACtE,CAAA,EAHW,WAAA;AAAA,GAIZ,CAAA;AACH;AAZgB,MAAA,CAAA,aAAA,EAAA,eAAA,CAAA;AAcT,SAAS,aAAA,GAAgB;AAC9B,EAAA,MAAM,KAAK,KAAA,EAAM;AACjB,EAAA,MAAM,cAAc,cAAA,EAAe;AAEnC,EAAA,OAAO,WAAA,CAAY;AAAA,IACjB,WAAA,EAAa,UAAU,KAAA,CAAM,MAAA;AAAA,IAC7B,UAAA,kBAAY,MAAA,CAAA,CAAC,GAAA,KAAsB,EAAA,CAAG,IAAA,CAAK,uBAAA,EAAyB,EAAE,GAAG,GAAA,EAAK,QAAA,EAAU,IAAA,EAAM,CAAA,EAAlF,YAAA,CAAA;AAAA,IACZ,2BAAW,MAAA,CAAA,MAAM;AACf,MAAA,WAAA,CAAY,kBAAkB,EAAE,QAAA,EAAU,SAAA,CAAU,KAAA,CAAM,KAAK,CAAA;AAC/D,MAAA,WAAA,CAAY,kBAAkB,EAAE,QAAA,EAAU,UAAU,KAAA,CAAM,MAAA,IAAU,CAAA;AAAA,IACtE,CAAA,EAHW,WAAA;AAAA,GAIZ,CAAA;AACH;AAZgB,MAAA,CAAA,aAAA,EAAA,eAAA,CAAA;AAcT,SAAS,aAAA,GAAgB;AAC9B,EAAA,MAAM,KAAK,KAAA,EAAM;AACjB,EAAA,MAAM,cAAc,cAAA,EAAe;AAEnC,EAAA,OAAO,WAAA,CAAY;AAAA,IACjB,WAAA,EAAa,UAAU,KAAA,CAAM,MAAA;AAAA,IAC7B,UAAA,kBAAY,MAAA,CAAA,CAAC,EAAA,KAAe,EAAA,CAAG,IAAA,CAAK,0BAAA,EAA4B,IAAA,EAAM,EAAE,YAAA,EAAc,EAAE,EAAA,EAAG,EAAG,CAAA,EAAlF,YAAA,CAAA;AAAA,IACZ,2BAAW,MAAA,CAAA,MAAM;AACf,MAAA,WAAA,CAAY,kBAAkB,EAAE,QAAA,EAAU,SAAA,CAAU,KAAA,CAAM,KAAK,CAAA;AAC/D,MAAA,WAAA,CAAY,kBAAkB,EAAE,QAAA,EAAU,UAAU,KAAA,CAAM,MAAA,IAAU,CAAA;AAAA,IACtE,CAAA,EAHW,WAAA;AAAA,GAIZ,CAAA;AACH;AAZgB,MAAA,CAAA,aAAA,EAAA,eAAA,CAAA","file":"chunk-LXMQLSQY.js","sourcesContent":["import { useMutation, useQueryClient } from '@tanstack/react-query'\n\nimport { useKy } from '@/libs'\nimport { queryKeys } from '@/queryKeys'\nimport type { MenuListItem } from '@/types'\n\nexport function useCreateMenu() {\n const ky = useKy()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationKey: queryKeys.menus.create,\n mutationFn: (arg: Omit<MenuListItem, 'id'>) => ky.post('/api/usystem/menu/set', { ...arg, id: 0, is_model: true }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.menus.all })\n queryClient.invalidateQueries({ queryKey: queryKeys.menus.navbar() })\n },\n })\n}\n\nexport function useUpdateMenu() {\n const ky = useKy()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationKey: queryKeys.menus.update,\n mutationFn: (arg: MenuListItem) => ky.post('/api/usystem/menu/set', { ...arg, is_model: true }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.menus.all })\n queryClient.invalidateQueries({ queryKey: queryKeys.menus.navbar() })\n },\n })\n}\n\nexport function useRemoveMenu() {\n const ky = useKy()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationKey: queryKeys.menus.delete,\n mutationFn: (id: number) => ky.post('/api/usystem/menu/delete', null, { searchParams: { id } }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.menus.all })\n queryClient.invalidateQueries({ queryKey: queryKeys.menus.navbar() })\n },\n })\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import {c,d,j,i as i$1}from'./chunk-H5Y4DYUL.js';import {d as d$1}from'./chunk-D75NVCYN.js';import {a}from'./chunk-NNXVZIY2.js';import {c as c$1}from'./chunk-DLTAWT6S.js';import {i}from'./chunk-P25BHLH3.js';import {Typography,Select,App,Form,Input,Divider,Skeleton,Card,Empty,Button,Space,Checkbox,Row,Col,Collapse}from'antd';import {useState,useEffect,useTransition,useCallback}from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';var oe=m=>{let{permissions:i,readonly:n,expand:r,value:l,onChange: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=true,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:true,children:p("PermissionList.baseSectionTitle")})}),jsx(Skeleton,{active:true,loading:V,children:jsx(k,{value:n?.global,readonly:r,permissions:P,expand:i,onChange:e=>{l?.({...n,global:e});}})}),jsx("div",{className:"my-12",children:jsx(Divider,{dashed:true,children:p("PermissionList.gameSectionTitle")})}),a$1.map((e,s)=>jsx(Card,{title:jsxs(Space,{children:[jsx(w,{children:p("global.game")}),r?jsx(w,{children:y?.find(o=>String(o.id)===e.gameId)?.name}):jsx(Select,{disabled:r,value:a$1[s].gameId||void 0,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:true,loading:V,children:jsx(k,{value:n?.[a$1[s].gameId],readonly:r,expand:i,permissions:v,onChange:o=>{l?.({...n,[a$1[s].gameId]:o});}})}):jsx(Empty,{description:p("PermissionList.gameSectionDescription")})},s)),!r&&jsx(Button,{block:true,type:"dashed",onClick:x,children:p("PermissionList.addText")})]})},U=pe;var{Text:ue}=Typography,ge=m=>{let{expand:i=true,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:true,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:true}],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-MTRFNFEM.js.map
2
+ //# sourceMappingURL=chunk-MTRFNFEM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/modules/permission/components/permissionCollapse/index.tsx","../src/modules/permission/components/permissionList/PermissionWithGame.tsx","../src/modules/permission/components/permissionList/PermissionWithoutGame.tsx","../src/modules/permission/components/permissionList/index.tsx","../src/modules/permission/hooks/role-hooks.tsx"],"names":["PermissionCollapse","props","permissions","readonly","expand","value","onChange","activeKey","setActiveKey","useState","checkedMap","setCheckedMap","internalValue","setInternalValue","t","useTranslation","startTransition","useTransition","onCollapseChange","useCallback","key","getCheckedValue","checkedValue","codes","tempValue","code","index","item","onCheckChange","useEffect","category","acc","curr","items","jsx","Checkbox","e","permission","Row","Col","Collapse","permissionCollapse_default","Text","Typography","Option","Select","PermissionWithGame","isPermissionLoading","error","useAllPermissionsV2","games","isGamesLoading","useGames","gameList","setGameList","globalPermissions","gamePermissions","isLoading","list","addGame","prev","removeGame","_","i","jsxs","Divider","Skeleton","newValue","Card","Space","game","selectedValue","pev","temp","gameId","Button","Empty","PermissionWithGame_default","PermissionWithoutGame","useAllPermissions","PermissionWithoutGame_default","PermissionList","permissionVersion","useToolkitsStore","permissionList_default","useRoleModal","mode","onSuccess","message","App","create","useCreateRole","update","useUpdateRole","isCreateMode","title","content","Fragment","Form","Input","useFormModal","values","extraValues","name"],"mappings":"ybAiBA,IAAMA,EAAAA,CAAkDC,CAAAA,EAAS,CAC/D,GAAM,CAAE,WAAA,CAAAC,CAAAA,CAAa,QAAA,CAAAC,CAAAA,CAAU,MAAA,CAAAC,CAAAA,CAAQ,MAAAC,CAAAA,CAAO,QAAA,CAAAC,CAAS,CAAA,CAAIL,EACrD,CAACM,CAAAA,CAAWC,CAAY,CAAA,CAAIC,SAAmB,EAAE,CAAA,CACjD,CAACC,CAAAA,CAAYC,CAAa,CAAA,CAAIF,QAAAA,CAAkC,EAAE,CAAA,CAClE,CAACG,GAAAA,CAAeC,CAAgB,CAAA,CAAIJ,QAAAA,CAAmBJ,CAAAA,EAAS,EAAE,CAAA,CAClE,CAAE,CAAA,CAAAS,CAAE,CAAA,CAAIC,CAAAA,EAAe,CACvB,EAAGC,CAAe,CAAA,CAAIC,aAAAA,EAAc,CAEpCC,CAAAA,CAAmBC,WAAAA,CAAaC,CAAAA,EAA2B,CAC/DZ,CAAAA,CAAaY,CAAe,EAC9B,CAAA,CAAG,EAAE,CAAA,CAECC,CAAAA,CAAkB,CAACC,CAAAA,CAAuBC,CAAAA,GAAoB,CAClE,IAAIC,CAAAA,CAAsB,EAAC,CAE3B,OAAIF,EACFE,CAAAA,CAAY,CAAC,GAAG,IAAI,GAAA,CAAIZ,GAAAA,CAAc,MAAA,CAAOW,CAAK,CAAC,CAAC,CAAA,EAEpDC,CAAAA,CAAYZ,GAAAA,CAAc,OAAM,CAEhCW,CAAAA,CAAM,OAAA,CAAQE,CAAAA,EAAQ,CACpB,IAAMC,CAAAA,CAAQF,CAAAA,CAAU,SAAA,CAAUG,CAAAA,EAAQA,CAAAA,GAASF,CAAI,CAAA,CACnDC,EAAQ,EAAA,EACVF,CAAAA,CAAU,MAAA,CAAOE,CAAAA,CAAO,CAAC,EAE7B,CAAC,CAAA,CAAA,CAGIF,CACT,CAAA,CAEMI,CAAAA,CAAgB,CAAC,CAAA,CAAwBL,CAAAA,GAAoB,CACjE,IAAMD,CAAAA,CAAeD,EAAgB,CAAA,CAAE,MAAA,CAAO,OAAA,CAASE,CAAK,CAAA,CAC5DV,CAAAA,CAAiBS,CAAY,CAAA,CAC7BhB,IAAWgB,CAAY,EACzB,CAAA,CAEAO,SAAAA,CAAU,IAAM,CACdhB,CAAAA,CAAiBR,CAAAA,EAAS,EAAE,EAC9B,CAAA,CAAG,CAACA,CAAK,CAAC,CAAA,CAEVwB,SAAAA,CAAU,IAAM,CACVzB,CAAAA,EACFY,CAAAA,CAAgB,IAAM,CAEpBR,CAAAA,CAAAA,CAAcN,CAAAA,EAAe,IAAI,GAAA,CAAI,CAAC,CAAE,QAAA,CAAA4B,CAAS,CAAA,GAAMA,CAAQ,CAAC,EAClE,CAAC,EAEL,CAAA,CAAG,CAAC1B,CAAAA,CAAQF,CAAW,CAAC,CAAA,CAExB2B,SAAAA,CAAU,IAAM,CACd,IAAMP,CAAAA,CAAAA,CAAgBpB,CAAAA,EAAe,EAAC,EAAG,MAAA,CACvC,CAAC6B,EAAKC,CAAAA,IACJD,CAAAA,CAAIC,CAAAA,CAAK,QAAQ,CAAA,CAAIA,CAAAA,CAAK,WAAA,CAAY,KAAA,CAAML,GAAQf,GAAAA,EAAe,QAAA,CAASe,CAAAA,CAAK,KAAK,CAAC,CAAA,CAChFI,CAAAA,CAAAA,CAET,EACF,CAAA,CAEApB,CAAAA,CAAcW,CAAY,EAC5B,CAAA,CAAG,CAACV,GAAAA,CAAeV,CAAW,CAAC,CAAA,CAE/B,IAAM+B,CAAAA,CAAAA,CAAS/B,CAAAA,EAAe,EAAC,EAAG,GAAA,CAAIyB,CAAAA,GAAS,CAC7C,GAAA,CAAKA,CAAAA,CAAK,QAAA,CACV,KAAA,CAAOA,CAAAA,CAAK,QAAA,CACZ,KAAA,CAAO,CAACxB,GACN+B,GAAAA,CAACC,QAAAA,CAAA,CACC,OAAA,CAASzB,EAAWiB,CAAAA,CAAK,QAAQ,CAAA,CACjC,QAAA,CAAUS,GAAK,CACbR,CAAAA,CACEQ,CAAAA,CACAT,CAAAA,CAAK,WAAA,EAAa,GAAA,CAAIU,CAAAA,EAAcA,CAAAA,CAAW,KAAK,CACtD,EACF,CAAA,CAEC,QAAA,CAAAvB,CAAAA,CAAE,kBAAkB,CAAA,CACvB,CAAA,CAEF,SACEoB,GAAAA,CAACC,QAAAA,CAAS,KAAA,CAAT,CAAe,KAAA,CAAO,CAAE,KAAA,CAAO,MAAO,EAAG,KAAA,CAAOvB,GAAAA,CAAe,QAAA,CAAUT,CAAAA,CACxE,QAAA,CAAA+B,GAAAA,CAACI,GAAAA,CAAA,CAAI,OAAQ,CAAC,EAAA,CAAI,EAAE,CAAA,CAAG,KAAA,CAAO,CAAE,KAAA,CAAO,MAAO,EAC3C,QAAA,CAAAX,CAAAA,CAAK,WAAA,EAAa,GAAA,CAAIU,CAAAA,EACrBH,GAAAA,CAACK,GAAAA,CAAA,CAA2B,KAAM,CAAA,CAChC,QAAA,CAAAL,GAAAA,CAACC,QAAAA,CAAA,CACC,KAAA,CAAOE,CAAAA,CAAW,KAAA,CAClB,SAAUD,CAAAA,EAAK,CACbR,CAAAA,CAAcQ,CAAAA,CAAG,CAACC,CAAAA,CAAW,KAAK,CAAC,EACrC,EAEC,QAAA,CAAAA,CAAAA,CAAW,KAAA,CACd,CAAA,CAAA,CARQA,CAAAA,CAAW,KASrB,CACD,CAAA,CACH,EACF,CAEJ,CAAA,CAAE,CAAA,CAEF,OACEH,GAAAA,CAACM,QAAAA,CAAA,CACC,KAAA,CAAO,CAAE,KAAA,CAAO,MAAO,CAAA,CACvB,WAAA,CAAY,QAAA,CACZ,SAAA,CAAWjC,CAAAA,CACX,KAAA,CAAO0B,EACP,QAAA,CAAUf,CAAAA,CACZ,CAEJ,CAAA,CAEOuB,CAAAA,CAAQzC,EAAAA,CClHf,GAAM,CAAE,IAAA,CAAA0C,CAAK,CAAA,CAAIC,UAAAA,CACX,CAAE,MAAA,CAAAC,EAAO,CAAA,CAAIC,MAAAA,CAObC,EAAAA,CAAkD7C,CAAAA,EAAS,CAC/D,GAAM,CAAE,MAAA,CAAAG,CAAAA,CAAS,IAAA,CAAM,KAAA,CAAAC,CAAAA,CAAO,QAAA,CAAAF,CAAAA,CAAU,QAAA,CAAAG,CAAS,CAAA,CAAIL,CAAAA,CAC/C,CAAE,IAAA,CAAMoC,EAAY,SAAA,CAAWU,CAAAA,CAAqB,KAAA,CAAAC,CAAM,EAAIC,CAAAA,EAAoB,CAClF,CAAE,IAAA,CAAMC,CAAAA,CAAO,SAAA,CAAWC,CAAe,CAAA,CAAIC,KAAS,CACtD,CAACC,GAAAA,CAAUC,CAAW,CAAA,CAAI7C,QAAAA,CAAsD,EAAE,EAClF8C,CAAAA,CAAoBlB,CAAAA,EAAY,MAAA,CAAOV,CAAAA,EAAQA,CAAAA,CAAK,SAAS,CAAA,CAC7D6B,CAAAA,CAAkBnB,GAAY,MAAA,CAAOV,CAAAA,EAAQ,CAACA,CAAAA,CAAK,SAAS,CAAA,CAC5D8B,CAAAA,CAAYV,CAAAA,EAAuBI,EACnC,CAAE,CAAA,CAAArC,CAAE,CAAA,CAAIC,CAAAA,EAAe,CAc7B,GAZAc,SAAAA,CAAU,IAAM,CACd,IAAM6B,CAAAA,CAAoD,EAAC,CAE3D,MAAA,CAAO,IAAA,CAAKrD,CAAAA,EAAS,EAAE,CAAA,CAAE,OAAA,CAAQe,CAAAA,EAAO,CAClCA,CAAAA,GAAQ,QAAA,EACVsC,CAAAA,CAAK,KAAK,CAAE,MAAA,CAAQtC,CAAAA,CAAK,WAAA,CAAaf,IAAQe,CAAG,CAAA,EAAK,EAAG,CAAC,EAE9D,CAAC,CAAA,CAEDkC,CAAAA,CAAYI,CAAI,EAClB,CAAA,CAAG,CAACrD,CAAK,CAAC,CAAA,CAEN2C,CAAAA,CACF,OACEd,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qBAAA,CACb,SAAAA,GAAAA,CAACQ,CAAAA,CAAA,CAAK,IAAA,CAAK,QAAA,CAAU,QAAA,CAAA5B,CAAAA,CAAE,kCAAkC,EAAE,CAAA,CAC7D,CAAA,CAIJ,IAAM6C,CAAAA,CAAU,IAAM,CACpBL,CAAAA,CAAYM,CAAAA,EAAQ,CAAC,GAAGA,CAAAA,CAAM,CAAE,MAAA,CAAQ,EAAA,CAAI,WAAA,CAAa,EAAG,CAAC,CAAC,EAChE,CAAA,CAEMC,CAAAA,CAAcnC,CAAAA,EAAkB,CACpC4B,CAAAA,CAAYM,CAAAA,EAAQA,CAAAA,CAAK,OAAO,CAACE,CAAAA,CAAGC,CAAAA,GAAMA,CAAAA,GAAMrC,CAAK,CAAC,EACxD,CAAA,CAEA,OACEsC,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sBAAA,CACb,UAAA9B,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,OAAA,CACb,SAAAA,GAAAA,CAAC+B,OAAAA,CAAA,CAAQ,MAAA,CAAM,IAAA,CAAE,QAAA,CAAAnD,CAAAA,CAAE,iCAAiC,EAAE,CAAA,CACxD,CAAA,CACAoB,GAAAA,CAACgC,QAAAA,CAAA,CAAS,MAAA,CAAM,IAAA,CAAC,OAAA,CAAST,EACxB,QAAA,CAAAvB,GAAAA,CAACO,CAAAA,CAAA,CACC,KAAA,CAAOpC,CAAAA,EAAO,MAAA,CACd,QAAA,CAAUF,EACV,WAAA,CAAaoD,CAAAA,CACb,MAAA,CAAQnD,CAAAA,CACR,QAAA,CAAU+D,CAAAA,EAAY,CACpB7D,CAAAA,GAAW,CACT,GAAGD,CAAAA,CACH,MAAA,CAAQ8D,CACV,CAAC,EACH,CAAA,CACF,CAAA,CACF,EACAjC,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,OAAA,CACb,QAAA,CAAAA,GAAAA,CAAC+B,OAAAA,CAAA,CAAQ,OAAM,IAAA,CAAE,QAAA,CAAAnD,CAAAA,CAAE,iCAAiC,CAAA,CAAE,CAAA,CACxD,CAAA,CACCuC,GAAAA,CAAS,IAAI,CAAC1B,CAAAA,CAAMD,CAAAA,GACnBQ,GAAAA,CAACkC,KAAA,CACC,KAAA,CACEJ,IAAAA,CAACK,KAAAA,CAAA,CACC,QAAA,CAAA,CAAAnC,GAAAA,CAACQ,CAAAA,CAAA,CAAM,QAAA,CAAA5B,CAAAA,CAAE,aAAa,CAAA,CAAE,EACvBX,CAAAA,CACC+B,GAAAA,CAACQ,CAAAA,CAAA,CAAM,QAAA,CAAAQ,CAAAA,EAAO,IAAA,CAAKoB,CAAAA,EAAQ,OAAOA,CAAAA,CAAK,EAAE,CAAA,GAAM3C,CAAAA,CAAK,MAAM,CAAA,EAAG,IAAA,CAAK,CAAA,CAElEO,IAACW,MAAAA,CAAA,CACC,QAAA,CAAU1C,CAAAA,CACV,KAAA,CAAOkD,GAAAA,CAAS3B,CAAK,CAAA,CAAE,QAAU,MAAA,CACjC,KAAA,CAAO,CAAE,KAAA,CAAO,OAAQ,CAAA,CACxB,WAAA,CAAaZ,CAAAA,CAAE,sCAAsC,CAAA,CACrD,QAAA,CAAUyD,CAAAA,EAAiB,CACzBjB,CAAAA,CAAYkB,CAAAA,EAAO,CACjB,IAAMC,EAAOD,CAAAA,CAAI,KAAA,EAAM,CACvB,OAAAC,CAAAA,CAAK/C,CAAK,CAAA,CAAE,MAAA,CAAS6C,EACdE,CACT,CAAC,EACH,CAAA,CAEC,SAAAvB,CAAAA,EAAO,GAAA,CAAIoB,CAAAA,EACVpC,GAAAA,CAACU,GAAA,CAEC,KAAA,CAAO0B,CAAAA,CAAK,EAAA,CACZ,QAAA,CAAUjB,GAAAA,CAAS,IAAA,CAAK,CAAC,CAAE,MAAA,CAAAqB,CAAO,CAAA,GAAMA,CAAAA,GAAW,MAAA,CAAOJ,CAAAA,CAAK,EAAE,CAAC,EAEjE,QAAA,CAAAA,CAAAA,CAAK,IAAA,CAAA,CAJDA,CAAAA,CAAK,EAKZ,CACD,CAAA,CACH,CAAA,CAAA,CAEJ,EAGF,SAAA,CAAU,MAAA,CACV,KAAA,CACE,CAACnE,CAAAA,EACC+B,GAAAA,CAACyC,MAAAA,CAAA,CACC,KAAK,MAAA,CACL,OAAA,CAAS,IAAM,CACbd,CAAAA,CAAWnC,CAAK,EAClB,CAAA,CAEC,SAAAZ,CAAAA,CAAE,2BAA2B,CAAA,CAChC,CAAA,CAIH,QAAA,CAAAuC,GAAAA,CAAS3B,CAAK,CAAA,CAAE,OACfQ,GAAAA,CAACgC,QAAAA,CAAA,CAAS,MAAA,CAAM,IAAA,CAAC,OAAA,CAAST,CAAAA,CACxB,QAAA,CAAAvB,IAACO,CAAAA,CAAA,CACC,KAAA,CAAOpC,CAAAA,GAAQgD,IAAS3B,CAAK,CAAA,CAAE,MAAM,CAAA,CACrC,SAAUvB,CAAAA,CACV,MAAA,CAAQC,CAAAA,CACR,WAAA,CAAaoD,CAAAA,CACb,QAAA,CAAUW,CAAAA,EAAY,CACpB7D,IAAW,CACT,GAAGD,CAAAA,CACH,CAACgD,GAAAA,CAAS3B,CAAK,CAAA,CAAE,MAAM,EAAGyC,CAC5B,CAAC,EACH,CAAA,CACF,CAAA,CACF,CAAA,CAEAjC,GAAAA,CAAC0C,KAAAA,CAAA,CAAM,WAAA,CAAa9D,CAAAA,CAAE,uCAAuC,CAAA,CAAG,CAAA,CAAA,CA/B7DY,CAiCP,CACD,CAAA,CACA,CAACvB,CAAAA,EACA+B,GAAAA,CAACyC,MAAAA,CAAA,CAAO,KAAA,CAAK,IAAA,CAAC,IAAA,CAAK,QAAA,CAAS,QAAShB,CAAAA,CAClC,QAAA,CAAA7C,CAAAA,CAAE,wBAAwB,CAAA,CAC7B,CAAA,CAAA,CAEJ,CAEJ,CAAA,CAEO+D,EAAQ/B,EAAAA,CCpJf,GAAM,CAAE,IAAA,CAAAJ,EAAK,CAAA,CAAIC,UAAAA,CAOXmC,EAAAA,CAAwD7E,CAAAA,EAAS,CACrE,GAAM,CAAE,MAAA,CAAAG,CAAAA,CAAS,IAAA,CAAM,KAAA,CAAAC,CAAAA,CAAO,QAAA,CAAAF,EAAU,QAAA,CAAAG,CAAS,CAAA,CAAIL,CAAAA,CAC/C,CAAE,IAAA,CAAMC,CAAAA,CAAa,SAAA,CAAAuD,EAAW,KAAA,CAAAT,CAAM,CAAA,CAAI+B,GAAAA,EAAkB,CAC5D,CAAE,CAAA,CAAAjE,CAAE,EAAIC,CAAAA,EAAe,CAE7B,OAAIiC,CAAAA,CAEAd,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qBAAA,CACb,SAAAA,GAAAA,CAACQ,EAAAA,CAAA,CAAK,IAAA,CAAK,QAAA,CAAU,QAAA,CAAA5B,CAAAA,CAAE,kCAAkC,EAAE,CAAA,CAC7D,CAAA,CAKFoB,GAAAA,CAACgC,QAAAA,CAAA,CAAS,MAAA,CAAM,IAAA,CAAC,OAAA,CAAST,EACxB,QAAA,CAAAvB,GAAAA,CAACO,CAAAA,CAAA,CACC,KAAA,CAAOpC,CAAAA,CACP,WAAA,CAAaH,CAAAA,CACb,SAAUC,CAAAA,CACV,MAAA,CAAQC,CAAAA,CACR,QAAA,CAAUE,EACZ,CAAA,CACF,CAEJ,CAAA,CAEO0E,CAAAA,CAAQF,GC5Bf,IAAMG,EAAAA,CAA2ChF,CAAAA,EAA+B,CAC9E,GAAM,CAAE,KAAA,CAAAI,GAAM,CAAA,CAAIJ,CAAAA,CAClB,OAAA,CAAQ,GAAA,CAAI,OAAA,CAAS,OAAOI,IAAOA,GAAAA,GAAU,IAAA,CAAM,IAAA,CAAK,SAAA,CAAUA,GAAK,CAAC,CAAA,CACxE,GAAM,CAAE,iBAAA,CAAA6E,CAAkB,CAAA,CAAIC,CAAAA,EAAiB,CAE/C,OAAID,CAAAA,GAAsB,IAAA,CACjBhD,IAAC2C,CAAAA,CAAA,CAAoB,GAAG5E,CAAAA,CAAO,KAAA,CAAOI,GAAAA,CAAgC,CAAA,CAGxE6B,GAAAA,CAAC8C,EAAA,CAAuB,GAAG/E,CAAAA,CAAO,KAAA,CAAOI,GAAAA,CAAgC,CAClF,CAAA,CAEO+E,CAAAA,CAAQH,GClBR,IAAMI,EAAAA,CAAe,CAAC,CAAE,IAAA,CAAAC,CAAAA,CAAM,SAAA,CAAAC,CAAU,CAAA,GAA6D,CAC1G,GAAM,CAAE,QAAAC,CAAQ,CAAA,CAAIC,GAAAA,CAAI,MAAA,EAAO,CACzB,CAAE,CAAA,CAAA3E,CAAE,EAAIC,CAAAA,EAAe,CACvB2E,CAAAA,CAASC,CAAAA,EAAc,CACvBC,CAAAA,CAASC,CAAAA,EAAc,CAEvBC,IAAeR,CAAAA,GAAS,QAAA,CAExBS,CAAAA,CAAuBjF,CAAAA,CAAfgF,GAAAA,CAAiB,kBAAA,CAAwB,kBAAN,CAAA,CAE3CE,EACJhC,IAAAA,CAAAiC,QAAAA,CAAA,CACE,QAAA,CAAA,CAAA/D,GAAAA,CAACgE,IAAAA,CAAK,IAAA,CAAL,CAAU,MAAOpF,CAAAA,CAAE,aAAa,CAAA,CAAG,IAAA,CAAK,MAAA,CAAO,KAAA,CAAO,CAAC,CAAE,SAAU,IAAK,CAAC,CAAA,CACxE,QAAA,CAAAoB,GAAAA,CAACiE,KAAAA,CAAA,CAAM,QAAA,CAAU,CAACL,GAAAA,CAAc,CAAA,CAClC,CAAA,CACA5D,GAAAA,CAACgE,KAAK,IAAA,CAAL,CAAU,IAAA,CAAK,aAAA,CACd,SAAAhE,GAAAA,CAACkD,CAAAA,CAAA,EAAe,CAAA,CAClB,CAAA,CAAA,CACF,CAAA,CAoBF,OAAOgB,GAAAA,CAML,CACA,KAAA,CAAAL,CAAAA,CACA,KAAA,CAAO,QAAA,CACP,SAAA,CAAW,CACT,MAAA,CAAQ,UACV,EACA,OAAA,CAAAC,CAAAA,CACA,SAAA,CA9BgB,MAChBK,CAAAA,CACAC,CAAAA,GACG,CACH,IAAMC,EAAO,CAAA,KAAA,EAAQF,CAAAA,CAAO,IAAI,CAAA,CAAA,CAC1BnG,EAAcmG,CAAAA,CAAO,WAAA,CAEvBP,GAAAA,EACF,MAAMJ,EAAO,WAAA,CAAY,CAAE,IAAA,CAAAa,CAAAA,CAAM,WAAA,CAAArG,CAAY,CAAC,CAAA,CAC9CsF,EAAQ,OAAA,CAAQ1E,CAAAA,CAAE,yBAAyB,CAAC,CAAA,GAE5C,MAAM8E,CAAAA,CAAO,WAAA,CAAY,CAAE,EAAA,CAAIU,CAAAA,EAAa,EAAA,CAAI,IAAA,CAAAC,CAAAA,CAAM,WAAA,CAAArG,CAAY,CAAC,EACnEsF,CAAAA,CAAQ,OAAA,CAAQ1E,CAAAA,CAAE,yBAAyB,CAAC,CAAA,CAAA,CAE9CyE,CAAAA,KACF,CAgBA,CAAC,CACH","file":"chunk-MTRFNFEM.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,2 @@
1
+ import {i}from'./chunk-P25BHLH3.js';import {template,has,get}from'lodash-es';import {useMemo}from'react';function l(){let t=i(e=>e.locale);return {t:useMemo(()=>(e,r)=>has(t,e)?template(get(t,e))(r):e,[t])}}export{l as a};//# sourceMappingURL=chunk-NNXVZIY2.js.map
2
+ //# sourceMappingURL=chunk-NNXVZIY2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/locale/hooks.ts"],"names":["useTranslation","locale","useToolkitsStore","state","useMemo","key","data","has","template","get"],"mappings":"yGAmBO,SAASA,CAAAA,EAAiB,CAC/B,IAAMC,CAAAA,CAASC,EAAiBC,CAAAA,EAASA,CAAAA,CAAM,MAAM,CAAA,CAQrD,OAAO,CAAE,EANCC,OAAAA,CACR,IAAM,CAACC,CAAAA,CAAoBC,CAAAA,GACzBC,IAAIN,CAAAA,CAAQI,CAAG,EAAIG,QAAAA,CAASC,GAAAA,CAAIR,EAAQI,CAAa,CAAC,EAAEC,CAAI,CAAA,CAAID,EAClE,CAACJ,CAAM,CACT,CAEW,CACb","file":"chunk-NNXVZIY2.js","sourcesContent":["import { get, has, template } from 'lodash-es'\nimport { useMemo } from 'react'\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport type { Locale } from './index'\n\ntype Join<K, P> = K extends string | number\n ? P extends string | number\n ? `${K}${'' extends P ? '' : '.'}${P}`\n : never\n : never\n\ntype Paths<T, D extends number = 10> = [D] extends [never]\n ? never\n : T extends object\n ? {\n [K in keyof T]-?: K extends string | number ? `${K}` | Join<K, Paths<T[K]>> : never\n }[keyof T]\n : ''\n\nexport function useTranslation() {\n const locale = useToolkitsStore(state => state.locale)\n\n const t = useMemo(\n () => (key: Paths<Locale>, data?: Record<string, unknown>) =>\n has(locale, key) ? template(get(locale, key as string))(data) : key,\n [locale],\n )\n\n return { t }\n}\n"]}