account.api.ts 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import PharmacyHttpClient from '@request/pharmacy.request.ts';
  2. import SystemHttpClient from '@request/system.request.ts';
  3. import type { ResponseData } from 'alova';
  4. import { requestMethodFactory } from '@/platform/request.ts';
  5. import type { AccountModel } from '@model/account.model.ts';
  6. import { defaultMenus, type MenuPath, menus as menusMap } from '@/router/menu.ts';
  7. interface AccountData {
  8. token: string;
  9. account: AccountModel;
  10. }
  11. export function loginMethod(data: { username: string; password: string }) {
  12. return requestMethodFactory(
  13. PharmacyHttpClient.Post<string, ResponseData>(`/login/v2`, data, {
  14. transform(data) {
  15. return data?.token ?? '';
  16. },
  17. }),
  18. );
  19. }
  20. export function getAccountMethod(token: string) {
  21. return requestMethodFactory(
  22. SystemHttpClient.Get<AccountData, ResponseData>(`/user/getInfo`, {
  23. headers: { Authorization: token },
  24. transform(data) {
  25. const user = data?.user;
  26. return {
  27. token,
  28. account: {
  29. id: user?.userId?.toString(),
  30. name: user?.nickName ?? user?.userName ?? '',
  31. username: user?.userName,
  32. nickname: user?.nickName,
  33. },
  34. };
  35. },
  36. }),
  37. );
  38. }
  39. export function getMenusMethod({ token, ...account }: AccountData) {
  40. return requestMethodFactory(
  41. SystemHttpClient.Get<AccountData & { menus: typeof defaultMenus }, ResponseData[]>(`/menu/getPdaRouters`, {
  42. headers: { Authorization: token },
  43. transform(data) {
  44. let menus;
  45. if (Array.isArray(data)) {
  46. menus = data.map(({ path, meta }) => {
  47. const name = meta?.title || (menusMap[path as MenuPath]?.title ?? '');
  48. return { path, name };
  49. }).filter(Boolean);
  50. } else {
  51. menus = defaultMenus;
  52. }
  53. return Object.assign(account, { token, menus });
  54. },
  55. }),
  56. );
  57. }