import PharmacyHttpClient from '@request/pharmacy.request.ts'; import SystemHttpClient from '@request/system.request.ts'; import type { ResponseData } from 'alova'; import { requestMethodFactory } from '@/platform/request.ts'; import type { AccountModel } from '@model/account.model.ts'; import { defaultMenus, type MenuPath, menus as menusMap } from '@/router/menu.ts'; interface AccountData { token: string; account: AccountModel; } export function loginMethod(data: { username: string; password: string }) { return requestMethodFactory( PharmacyHttpClient.Post(`/login/v2`, data, { transform(data) { return data?.token ?? ''; }, }), ); } export function getAccountMethod(token: string) { return requestMethodFactory( SystemHttpClient.Get(`/user/getInfo`, { headers: { Authorization: token }, transform(data) { const user = data?.user; return { token, account: { id: user?.userId?.toString(), name: user?.nickName ?? user?.userName ?? '', username: user?.userName, nickname: user?.nickName, }, }; }, }), ); } export function getMenusMethod({ token, ...account }: AccountData) { return requestMethodFactory( SystemHttpClient.Get(`/menu/getPdaRouters`, { headers: { Authorization: token }, transform(data) { let menus; if (Array.isArray(data)) { menus = data.map(({ path, meta }) => { const name = meta?.title || (menusMap[path as MenuPath]?.title ?? ''); return { path, name }; }).filter(Boolean); } else { menus = defaultMenus; } return Object.assign(account, { token, menus }); }, }), ); }