authApi.ts 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. // ==================== 认证与用户信息 Mock 数据 ====================
  2. // 模拟用户数据
  3. const mockUsers = [
  4. {
  5. id: 'current_user',
  6. username: 'zhangsan',
  7. realName: '张三',
  8. email: 'zhangsan@jianke.com',
  9. phone: '13800138000',
  10. department: '技术研发部',
  11. position: '高级开发工程师',
  12. avatar: '',
  13. roles: ['user', 'developer'],
  14. },
  15. {
  16. id: 'user_001',
  17. username: 'lisi',
  18. realName: '李四',
  19. email: 'lisi@jianke.com',
  20. phone: '13800138001',
  21. department: '人力资源部',
  22. position: '人力资源经理',
  23. avatar: '',
  24. roles: ['user'],
  25. },
  26. {
  27. id: 'user_002',
  28. username: 'wangwu',
  29. realName: '王五',
  30. email: 'wangwu@jianke.com',
  31. phone: '13800138002',
  32. department: '项目管理部',
  33. position: '项目总监',
  34. avatar: '',
  35. roles: ['user', 'manager'],
  36. },
  37. ];
  38. // 模拟验证码(实际场景应该发送到手机/邮箱)
  39. let verificationCodes: Record<string, { code: string; expiresAt: number }> = {};
  40. /**
  41. * 生成随机验证码
  42. */
  43. function generateVerificationCode(): string {
  44. return String(Math.floor(Math.random() * 9000) + 1000);
  45. }
  46. /**
  47. * 模拟登录请求
  48. * POST /auth/login
  49. */
  50. export const mockLogin = async (request: { data?: { username?: string; password?: string; code?: string } }) => {
  51. const { username, password, code } = request.data || {};
  52. console.log('[Mock] 登录请求', { username, code });
  53. // 验证验证码(可选,简化流程)
  54. if (code && verificationCodes[username || 'default']) {
  55. const savedCode = verificationCodes[username || 'default'];
  56. if (savedCode.code !== code) {
  57. return {
  58. code: 400,
  59. message: '验证码错误',
  60. data: null,
  61. };
  62. }
  63. // 验证码使用后失效
  64. delete verificationCodes[username || 'default'];
  65. }
  66. // 简化验证:只要用户名密码不为空即可
  67. if (!username || !password) {
  68. return {
  69. code: 400,
  70. message: '用户名或密码不能为空',
  71. data: null,
  72. };
  73. }
  74. // 查找用户
  75. const user = mockUsers.find(u => u.username === username);
  76. // 返回模拟 Token
  77. const mockToken = `mock_token_${username}_${Date.now()}`;
  78. const mockRefreshToken = `mock_refresh_token_${username}_${Date.now()}`;
  79. return {
  80. code: 200,
  81. message: '登录成功',
  82. data: {
  83. token: mockToken,
  84. refreshToken: mockRefreshToken,
  85. expiresAt: Date.now() + 7 * 24 * 60 * 60 * 1000, // 7 天有效期
  86. user: user || mockUsers[0], // 返回用户信息
  87. },
  88. };
  89. };
  90. /**
  91. * 获取验证码
  92. * GET /auth/code
  93. */
  94. export const mockGetVerificationCode = async (request: { params?: { phone?: string; email?: string } }) => {
  95. const { phone, email } = request.params || {};
  96. console.log('[Mock] 获取验证码', { phone, email });
  97. // 生成验证码
  98. const code = generateVerificationCode();
  99. const key = phone || email || 'default';
  100. // 存储验证码(5 分钟有效期)
  101. verificationCodes[key] = {
  102. code,
  103. expiresAt: Date.now() + 5 * 60 * 1000,
  104. };
  105. console.log('[Mock] 验证码(仅供调试):', code);
  106. return {
  107. code: 200,
  108. message: '验证码已发送',
  109. data: {
  110. // 开发环境返回验证码,生产环境应隐藏
  111. debugCode: code,
  112. expiresInSeconds: 300,
  113. },
  114. };
  115. };
  116. /**
  117. * 获取当前用户信息
  118. * GET /system/user/getInfo
  119. */
  120. export const mockGetUserInfo = async (request: { headers?: { Authorization?: string } }) => {
  121. const token = request.headers?.Authorization || '';
  122. console.log('[Mock] 获取用户信息', { token });
  123. // 从 Token 中提取用户名(简化处理)
  124. const username = token.replace('mock_token_', '').split('_')[0] || 'zhangsan';
  125. const user = mockUsers.find(u => u.username === username) || mockUsers[0];
  126. return {
  127. code: 200,
  128. message: 'success',
  129. data: {
  130. ...user,
  131. permissions: ['app:create', 'app:edit', 'app:delete', 'knowledge:manage'],
  132. },
  133. };
  134. };
  135. /**
  136. * 退出登录
  137. * POST /auth/logout
  138. */
  139. export const mockLogout = async () => {
  140. console.log('[Mock] 退出登录');
  141. return {
  142. code: 200,
  143. message: '退出成功',
  144. data: null,
  145. };
  146. };
  147. /**
  148. * 刷新 Token
  149. * POST /auth/refresh
  150. */
  151. export const mockRefreshToken = async (request: { data?: { refreshToken?: string } }) => {
  152. const { refreshToken } = request.data || {};
  153. console.log('[Mock] 刷新 Token', { refreshToken });
  154. const mockToken = `mock_token_refreshed_${Date.now()}`;
  155. return {
  156. code: 200,
  157. message: 'success',
  158. data: {
  159. token: mockToken,
  160. refreshToken: refreshToken || `mock_refresh_token_${Date.now()}`,
  161. expiresAt: Date.now() + 7 * 24 * 60 * 60 * 1000,
  162. },
  163. };
  164. };
  165. // ==================== 导出所有 Mock 处理函数 ====================
  166. export const authMockHandlers = {
  167. 'POST /auth/login': mockLogin,
  168. 'GET /auth/code': mockGetVerificationCode,
  169. 'GET /system/user/getInfo': mockGetUserInfo,
  170. 'POST /auth/logout': mockLogout,
  171. 'POST /auth/refresh': mockRefreshToken,
  172. };