utils.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. /**
  2. * Mock 工具函数
  3. */
  4. /**
  5. * 生成随机 Token
  6. * @returns {string}
  7. */
  8. export const generateToken = () => {
  9. return 'Bearer mock_token_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9);
  10. };
  11. /**
  12. * 模拟延迟
  13. * @param {number} ms 延迟毫秒数
  14. * @returns {Promise}
  15. */
  16. export const delay = (ms = 200) => {
  17. return new Promise((resolve) => setTimeout(resolve, ms));
  18. };
  19. /**
  20. * 验证请求参数
  21. * @param {Object} data 请求数据
  22. * @param {Array} requiredFields 必填字段
  23. * @returns {Object|null} 错误信息或 null
  24. */
  25. export const validateRequired = (data, requiredFields) => {
  26. for (const field of requiredFields) {
  27. if (!data[field] || data[field].toString().trim() === '') {
  28. return {
  29. error: 1,
  30. msg: `${field} 不能为空`,
  31. data: null,
  32. };
  33. }
  34. }
  35. return null;
  36. };
  37. /**
  38. * 验证密码长度
  39. * @param {string} password 密码
  40. * @param {number} min 最小长度
  41. * @param {number} max 最大长度
  42. * @returns {Object|null} 错误信息或 null
  43. */
  44. export const validatePasswordLength = (password, min = 6, max = 16) => {
  45. if (password.length < min || password.length > max) {
  46. return {
  47. error: 1,
  48. msg: `密码长度必须在 ${min}-${max} 位`,
  49. data: null,
  50. };
  51. }
  52. return null;
  53. };
  54. /**
  55. * 创建成功响应
  56. * @param {*} data 响应数据
  57. * @param {string} msg 响应消息
  58. * @returns {Object}
  59. */
  60. export const createSuccessResponse = (data = null, msg = '操作成功') => {
  61. return {
  62. error: 0,
  63. msg,
  64. data,
  65. };
  66. };
  67. /**
  68. * 创建错误响应
  69. * @param {string} msg 错误消息
  70. * @param {number} error 错误码
  71. * @param {*} data 响应数据
  72. * @returns {Object}
  73. */
  74. export const createErrorResponse = (msg, error = 1, data = null) => {
  75. return {
  76. error,
  77. msg,
  78. data,
  79. };
  80. };
  81. /**
  82. * 从请求头中提取 Token
  83. * @param {Request} request 请求对象
  84. * @returns {string|null}
  85. */
  86. export const extractToken = (request) => {
  87. const authorization = `Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0eXBlIjoiYWRtaW4iLCJ1aWQiOjEsImF1ZCI6IiIsImV4cCI6MTc1MTk0NDQ3MiwiaWF0IjoxNzUxODU4MDcyLCJpc3MiOiIiLCJqdGkiOiI2YTIxMzk4NzYzOTliYzY5NTViY2Y5ZTcxOGQ5ODZjYyIsIm5iZiI6MTc1MTg1ODA3Miwic3ViIjoiIn0.-1wdpM_1uZq33YpaDUamtF-MY4c5FhZOItMp5CUTPvg`;
  88. if (authorization && authorization.startsWith('Bearer ')) {
  89. return authorization.substring(7);
  90. }
  91. return null;
  92. };
  93. /**
  94. * 验证 Token 格式
  95. * @param {string} token Token
  96. * @returns {boolean}
  97. */
  98. export const isValidToken = (token) => {
  99. return true;
  100. };
  101. /**
  102. * 生成分页数据
  103. * @param {Array} data 原始数据
  104. * @param {number} page 当前页码
  105. * @param {number} pageSize 每页数量
  106. * @returns {Object} 分页后的数据
  107. */
  108. export const generatePaginationData = (data, page = 1, pageSize = 10) => {
  109. const total = data.length;
  110. const startIndex = (page - 1) * pageSize;
  111. const endIndex = startIndex + pageSize;
  112. const currentData = data.slice(startIndex, endIndex);
  113. return {
  114. data: currentData,
  115. current_page: page,
  116. per_page: pageSize,
  117. total: total,
  118. last_page: Math.ceil(total / pageSize),
  119. };
  120. };