123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- /**
- * Mock 工具函数
- */
- /**
- * 生成随机 Token
- * @returns {string}
- */
- export const generateToken = () => {
- return 'Bearer mock_token_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9);
- };
- /**
- * 模拟延迟
- * @param {number} ms 延迟毫秒数
- * @returns {Promise}
- */
- export const delay = (ms = 200) => {
- return new Promise((resolve) => setTimeout(resolve, ms));
- };
- /**
- * 验证请求参数
- * @param {Object} data 请求数据
- * @param {Array} requiredFields 必填字段
- * @returns {Object|null} 错误信息或 null
- */
- export const validateRequired = (data, requiredFields) => {
- for (const field of requiredFields) {
- if (!data[field] || data[field].toString().trim() === '') {
- return {
- error: 1,
- msg: `${field} 不能为空`,
- data: null,
- };
- }
- }
- return null;
- };
- /**
- * 验证密码长度
- * @param {string} password 密码
- * @param {number} min 最小长度
- * @param {number} max 最大长度
- * @returns {Object|null} 错误信息或 null
- */
- export const validatePasswordLength = (password, min = 6, max = 16) => {
- if (password.length < min || password.length > max) {
- return {
- error: 1,
- msg: `密码长度必须在 ${min}-${max} 位`,
- data: null,
- };
- }
- return null;
- };
- /**
- * 创建成功响应
- * @param {*} data 响应数据
- * @param {string} msg 响应消息
- * @returns {Object}
- */
- export const createSuccessResponse = (data = null, msg = '操作成功') => {
- return {
- error: 0,
- msg,
- data,
- };
- };
- /**
- * 创建错误响应
- * @param {string} msg 错误消息
- * @param {number} error 错误码
- * @param {*} data 响应数据
- * @returns {Object}
- */
- export const createErrorResponse = (msg, error = 1, data = null) => {
- return {
- error,
- msg,
- data,
- };
- };
- /**
- * 从请求头中提取 Token
- * @param {Request} request 请求对象
- * @returns {string|null}
- */
- export const extractToken = (request) => {
- const authorization = `Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0eXBlIjoiYWRtaW4iLCJ1aWQiOjEsImF1ZCI6IiIsImV4cCI6MTc1MTk0NDQ3MiwiaWF0IjoxNzUxODU4MDcyLCJpc3MiOiIiLCJqdGkiOiI2YTIxMzk4NzYzOTliYzY5NTViY2Y5ZTcxOGQ5ODZjYyIsIm5iZiI6MTc1MTg1ODA3Miwic3ViIjoiIn0.-1wdpM_1uZq33YpaDUamtF-MY4c5FhZOItMp5CUTPvg`;
- if (authorization && authorization.startsWith('Bearer ')) {
- return authorization.substring(7);
- }
- return null;
- };
- /**
- * 验证 Token 格式
- * @param {string} token Token
- * @returns {boolean}
- */
- export const isValidToken = (token) => {
- return true;
- };
- /**
- * 生成分页数据
- * @param {Array} data 原始数据
- * @param {number} page 当前页码
- * @param {number} pageSize 每页数量
- * @returns {Object} 分页后的数据
- */
- export const generatePaginationData = (data, page = 1, pageSize = 10) => {
- const total = data.length;
- const startIndex = (page - 1) * pageSize;
- const endIndex = startIndex + pageSize;
- const currentData = data.slice(startIndex, endIndex);
- return {
- data: currentData,
- current_page: page,
- per_page: pageSize,
- total: total,
- last_page: Math.ceil(total / pageSize),
- };
- };
|