You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

246 lines
6.4 KiB

1 year ago
1 year ago
8 months ago
8 months ago
1 year ago
  1. import { appAtom, setToken } from "@/store/system.ts";
  2. import { atom } from "jotai";
  3. import { IApiResult, IAuth, IPage, IPageResult, MenuItem } from "@/global";
  4. import { atomWithMutation, atomWithQuery, queryClientAtom } from "jotai-tanstack-query";
  5. import systemServ from "@/service/system.ts";
  6. import { formatMenuData, isDev } from "@/utils";
  7. import { message } from "antd";
  8. import { t } from "i18next";
  9. import { System } from "@/types";
  10. import { atomWithStorage } from "jotai/utils";
  11. import { IUserInfo } from "@/types/system/user";
  12. export interface UPLoginRequest {
  13. mfa_status: boolean;
  14. account: string;
  15. username: string;
  16. password: string;
  17. code: string;
  18. }
  19. export interface LoginResponse {}
  20. export const authAtom = atom<IAuth>({
  21. isLogin: false,
  22. authKey: [],
  23. });
  24. const devLogin = {
  25. username: "SupperAdmin",
  26. password: "kk123456",
  27. code: "123456",
  28. };
  29. export const upLoginFormAtom = atom<UPLoginRequest>({
  30. ...(isDev ? devLogin : {}),
  31. } as UPLoginRequest);
  32. //============================================================================================================登录 登出
  33. export const upLoginAtom = atomWithMutation<any, UPLoginRequest>((get) => ({
  34. mutationKey: ["uplogin"],
  35. mutationFn: async (params: UPLoginRequest) => {
  36. return await systemServ.uplogin(params);
  37. },
  38. onSuccess: (res) => {
  39. message.success(t("login.success"));
  40. // setToken(res.data.token);
  41. // get(userMenuDataAtom).refetch().then();
  42. return res.data;
  43. },
  44. retry: false,
  45. }));
  46. export const emailCodeAtom = (params) =>atomWithQuery(() => {
  47. return {
  48. queryKey: ["emailCode",params],
  49. queryFn: async () => {
  50. return await systemServ.emailCode(params);
  51. },
  52. select: (data) => {
  53. return data.data;
  54. },
  55. };
  56. });
  57. export const emailLoginAtom = atomWithMutation<any, any>((get) => ({
  58. mutationKey: ["emailLogin"],
  59. mutationFn: async (params) => {
  60. return await systemServ.emailLogin(params);
  61. },
  62. onSuccess: (res) => {
  63. message.success(t("login.success"));
  64. return res.data;
  65. },
  66. retry: false,
  67. }));
  68. export const emailRegisterAtom = atomWithMutation<any, any>((get) => ({
  69. mutationKey: ["emailRegister"],
  70. mutationFn: async (params) => {
  71. return await systemServ.emailRegister(params);
  72. },
  73. onSuccess: (res) => {
  74. // setToken(res.data.token);
  75. // window.location.href = "/";
  76. return res.data;
  77. },
  78. retry: false,
  79. }));
  80. export const telegramCodeAtom = atomWithMutation<any, any>((get) => ({
  81. mutationKey: ["telegramCode"],
  82. mutationFn: async (params) => {
  83. return await systemServ.telegramCode(params);
  84. },
  85. onSuccess: (res) => {
  86. return res.data;
  87. },
  88. retry: false,
  89. }));
  90. export const telegramLoginAtom = atomWithMutation<any, any>((get) => ({
  91. mutationKey: ["telegramLogin"],
  92. mutationFn: async (params) => {
  93. return await systemServ.telegramLogin(params);
  94. },
  95. onSuccess: (res) => {
  96. message.success(t("login.success"));
  97. return res.data;
  98. },
  99. retry: false,
  100. }));
  101. export const logoutAtom = atomWithMutation(() => ({
  102. mutationKey: ["logout"],
  103. mutationFn: async () => {
  104. setToken("");
  105. return true;
  106. },
  107. }));
  108. //============================================================================================================
  109. export const currentStaticUserAtom = atomWithStorage<IUserInfo | null>("user", null);
  110. export const currentUserAtom = atomWithQuery<IApiResult<System.IUserInfo>, any, System.IUserInfo>((get) => {
  111. return {
  112. queryKey: ["user_info", get(appAtom).token],
  113. queryFn: async () => {
  114. return await systemServ.user.current();
  115. },
  116. select: (data) => {
  117. // store.set(currentStaticUserAtom, data.data)
  118. return data.data;
  119. },
  120. };
  121. });
  122. export const userMenuDataAtom = atomWithQuery<IApiResult<IPageResult<System.IMenu[]>>, any, MenuItem[]>((get) => ({
  123. enabled: false,
  124. queryKey: ["user_menus", get(appAtom).token],
  125. queryFn: async () => {
  126. return await systemServ.user.menus();
  127. },
  128. select: (data) => {
  129. return formatMenuData((data.data.rows as any) ?? [], []);
  130. },
  131. retry: false,
  132. }));
  133. export type UserSearch = {
  134. dept_id?: any;
  135. key?: string;
  136. };
  137. export const userSearchAtom = atom<UserSearch>({} as UserSearch);
  138. //=======user page store======
  139. export const userPageAtom = atom<IPage>({
  140. pageSize: 10,
  141. page: 1,
  142. });
  143. // user list
  144. export const userListAtom = atomWithQuery((get) => {
  145. return {
  146. queryKey: ["user_list", get(userSearchAtom), get(userPageAtom)],
  147. queryFn: async ({ queryKey: [, params, page] }) => {
  148. return await systemServ.user.list({
  149. ...(params as any),
  150. ...(page as any),
  151. });
  152. },
  153. select: (data) => {
  154. return data.data;
  155. },
  156. };
  157. });
  158. // user selected
  159. export const userSelectedAtom = atom<System.IUser>({} as System.IUser);
  160. export const defaultUserData = {
  161. id: 0,
  162. dept_id: 0,
  163. role_id: 0,
  164. } as System.IUser;
  165. //save or update user
  166. export const saveOrUpdateUserAtom = atomWithMutation<IApiResult, System.IUser>((get) => ({
  167. mutationKey: ["save_user"],
  168. mutationFn: async (params) => {
  169. params.status = params.status ? "1" : "0";
  170. const isAdd = 0 === params.id;
  171. if (isAdd) {
  172. return await systemServ.user.add(params);
  173. }
  174. return await systemServ.user.update(params);
  175. },
  176. onSuccess: (res) => {
  177. const isAdd = !!res.data?.id;
  178. message.success(t(isAdd ? "message.saveSuccess" : "message.editSuccess", "保存成功"));
  179. //刷新userList
  180. get(queryClientAtom).invalidateQueries({ queryKey: ["user_list"] });
  181. return res;
  182. },
  183. }));
  184. //delete user
  185. export const batchUserIdsAtom = atom<number[]>([]);
  186. export const deleteUserAtom = atomWithMutation<IApiResult, number[]>((get) => ({
  187. mutationKey: ["delete_user"],
  188. mutationFn: async (params) => {
  189. return await systemServ.user.batchDelete(params);
  190. },
  191. onSuccess: () => {
  192. message.success(t("message.deleteSuccess", "删除成功"));
  193. //刷新userList
  194. get(queryClientAtom).invalidateQueries({ queryKey: ["user_list"] });
  195. return true;
  196. },
  197. }));
  198. //reset password
  199. export const resetPasswordAtom = atomWithMutation<IApiResult, number>(() => ({
  200. mutationKey: ["reset_password"],
  201. mutationFn: async (id) => {
  202. return await systemServ.user.resetPassword(id);
  203. },
  204. onSuccess: () => {
  205. message.success(t("message.resetSuccess", "重置成功"));
  206. //刷新userList
  207. // get(queryClientAtom).invalidateQueries({ queryKey: [ 'user_list' ] })
  208. return true;
  209. },
  210. onError: () => {
  211. message.error(t("message.resetError", "重置失败"));
  212. },
  213. }));