accounts.ts 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. import request from './request';
  2. import type {
  3. PlatformAccount,
  4. AccountGroup,
  5. AddPlatformAccountRequest,
  6. UpdatePlatformAccountRequest,
  7. CreateAccountGroupRequest,
  8. QRCodeInfo,
  9. LoginStatusResult,
  10. } from '@media-manager/shared';
  11. export const accountsApi = {
  12. // 账号分组
  13. getGroups(): Promise<AccountGroup[]> {
  14. return request.get('/api/accounts/groups');
  15. },
  16. createGroup(data: CreateAccountGroupRequest): Promise<AccountGroup> {
  17. return request.post('/api/accounts/groups', data);
  18. },
  19. updateGroup(id: number, data: Partial<CreateAccountGroupRequest>): Promise<AccountGroup> {
  20. return request.put(`/api/accounts/groups/${id}`, data);
  21. },
  22. deleteGroup(id: number): Promise<void> {
  23. return request.delete(`/api/accounts/groups/${id}`);
  24. },
  25. // 平台账号
  26. getAccounts(params?: { platform?: string; groupId?: number; status?: string }): Promise<PlatformAccount[]> {
  27. return request.get('/api/accounts', { params });
  28. },
  29. getAccount(id: number): Promise<PlatformAccount> {
  30. return request.get(`/api/accounts/${id}`);
  31. },
  32. addAccount(data: AddPlatformAccountRequest & {
  33. accountInfo?: {
  34. accountId?: string;
  35. accountName?: string;
  36. avatarUrl?: string;
  37. fansCount?: number;
  38. worksCount?: number;
  39. };
  40. }): Promise<PlatformAccount> {
  41. return request.post('/api/accounts', data);
  42. },
  43. updateAccount(id: number, data: UpdatePlatformAccountRequest): Promise<PlatformAccount> {
  44. return request.put(`/api/accounts/${id}`, data);
  45. },
  46. deleteAccount(id: number): Promise<void> {
  47. return request.delete(`/api/accounts/${id}`);
  48. },
  49. refreshAccount(id: number): Promise<{ account: PlatformAccount; needReLogin: boolean }> {
  50. return request.post(`/api/accounts/${id}/refresh`).then((data: PlatformAccount & { needReLogin?: boolean }) => {
  51. const { needReLogin, ...account } = data as PlatformAccount & { needReLogin?: boolean };
  52. return { account: account as PlatformAccount, needReLogin: needReLogin || false };
  53. });
  54. },
  55. // 批量刷新所有账号状态
  56. refreshAllAccounts(): Promise<{ refreshed: number; failed: number }> {
  57. return request.post('/api/accounts/refresh-all');
  58. },
  59. // 检查账号 Cookie 是否有效
  60. checkAccountStatus(id: number): Promise<{ isValid: boolean; needReLogin: boolean }> {
  61. return request.get(`/api/accounts/${id}/check-status`);
  62. },
  63. // 扫码登录
  64. getQRCode(platform: string): Promise<QRCodeInfo> {
  65. return request.post('/api/accounts/qrcode', { platform });
  66. },
  67. checkQRCodeStatus(platform: string, qrcodeKey: string): Promise<LoginStatusResult> {
  68. return request.get('/api/accounts/qrcode/status', { params: { platform, qrcodeKey } });
  69. },
  70. // 浏览器登录
  71. startBrowserLogin(platform: string): Promise<{ sessionId: string; message: string }> {
  72. return request.post('/api/accounts/browser-login', { platform });
  73. },
  74. getBrowserLoginStatus(sessionId: string): Promise<{
  75. status: string;
  76. cookies?: string;
  77. error?: string;
  78. accountInfo?: {
  79. accountId: string;
  80. accountName: string;
  81. avatarUrl: string;
  82. fansCount: number;
  83. worksCount: number;
  84. };
  85. }> {
  86. return request.get(`/api/accounts/browser-login/${sessionId}`);
  87. },
  88. cancelBrowserLogin(sessionId: string): Promise<void> {
  89. return request.delete(`/api/accounts/browser-login/${sessionId}`);
  90. },
  91. confirmBrowserLogin(sessionId: string, platform: string, groupId?: number): Promise<PlatformAccount> {
  92. return request.post(`/api/accounts/browser-login/${sessionId}/confirm`, { platform, groupId });
  93. },
  94. // 验证 Cookie 登录状态(用于内嵌浏览器登录)
  95. verifyLoginCookie(platform: string, cookieData: string): Promise<{
  96. success: boolean;
  97. message?: string;
  98. accountInfo?: {
  99. accountId: string;
  100. accountName: string;
  101. avatarUrl: string;
  102. fansCount: number;
  103. worksCount: number;
  104. };
  105. }> {
  106. return request.post('/api/accounts/verify-cookie', { platform, cookieData });
  107. },
  108. // 获取账号 Cookie(用于打开后台)
  109. getAccountCookie(id: number): Promise<{ cookieData: string }> {
  110. return request.get(`/api/accounts/${id}/cookie`);
  111. },
  112. };