/** * API服务模块 * 处理前后端通信 */ const API_BASE_URL = 'http://192.168.1.75:8080/api'; // API基础路径 const TOKEN_KEY = 'auth_token'; // Token存储键名 /** * 获取存储的Token * @returns {string|null} - 返回Token或null */ function getToken() { return localStorage.getItem(TOKEN_KEY); } /** * 设置Token * @param {string} token - Token字符串 */ function setToken(token) { localStorage.setItem(TOKEN_KEY, token); } /** * 清除Token */ function clearToken() { localStorage.removeItem(TOKEN_KEY); } /** * 基础请求函数 * @param {string} url - 请求路径 * @param {Object} options - 请求选项 * @returns {Promise} - 返回Promise对象 */ async function request(url, options = {}) { try { // 构建完整的请求URL const fullUrl = `${API_BASE_URL}${url}`; // 设置默认请求头 const headers = { 'Content-Type': 'application/json', ...options.headers }; // 获取Token并添加到请求头(登录接口除外) const token = getToken(); if (token && !url.includes('/auth/login')) { headers['Authorization'] = `Bearer ${token}`; console.log('使用Token发送请求:', url); console.log('Token:', token); } // 发送请求 const response = await fetch(fullUrl, { ...options, headers }); // 检查响应状态 if (!response.ok) { // 如果是401错误,清除Token并提示重新登录 if (response.status === 401) { clearToken(); throw new Error('登录已过期,请重新登录'); } const errorData = await response.json().catch(() => ({})); throw new Error(errorData.message || `请求失败: ${response.status}`); } // 解析响应数据 return await response.json(); } catch (error) { console.error('API请求错误:', error); throw error; } } /** * 认证相关API */ const authApi = { /** * 用户登录 * @param {Object} data - 登录数据 * @param {string} data.mobile - 手机号 * @param {string} data.password - 密码 * @returns {Promise} - 返回登录结果 */ login: async (data) => { return request('/auth/login', { method: 'POST', body: JSON.stringify(data) }); }, /** * 用户注册 * @param {Object} data - 注册数据 * @param {number} data.companyId - 公司ID * @param {number} data.deptId - 部门ID * @param {number} data.positionId - 职位ID * @param {string} data.empName - 姓名 * @param {string} data.mobile - 手机号 * @param {string} data.password - 密码 * @param {string} data.captcha - 验证码 * @returns {Promise} - 返回注册结果 */ register: async (data) => { return request('/auth/register', { method: 'POST', body: JSON.stringify(data) }); }, /** * 获取验证码 * @returns {Promise} - 返回验证码数据 */ getCaptcha: async () => { return request('/captcha', { method: 'GET' }); } }; /** * 数据模型相关API */ const modelApi = { /** * 获取模型列表 * @param {string} modelName - 模型名称 * @param {Object} params - 查询参数 * @returns {Promise} - 返回模型列表 */ getList: async (modelName, params = {}) => { // 构建查询字符串 const queryString = new URLSearchParams(params).toString(); const url = `/models/${modelName}${queryString ? `?${queryString}` : ''}`; return request(url); }, /** * 获取模型详情 * @param {string} modelName - 模型名称 * @param {number} id - 模型ID * @returns {Promise} - 返回模型详情 */ getDetail: async (modelName, id) => { return request(`/models/${modelName}/${id}`); }, /** * 创建模型 * @param {string} modelName - 模型名称 * @param {Object} data - 模型数据 * @returns {Promise} - 返回创建结果 */ create: async (modelName, data) => { return request(`/models/${modelName}`, { method: 'POST', body: JSON.stringify(data) }); }, /** * 更新模型 * @param {string} modelName - 模型名称 * @param {number} id - 模型ID * @param {Object} data - 模型数据 * @returns {Promise} - 返回更新结果 */ update: async (modelName, id, data) => { return request(`/models/${modelName}/${id}`, { method: 'PUT', body: JSON.stringify(data) }); }, /** * 删除模型 * @param {string} modelName - 模型名称 * @param {number} id - 模型ID * @returns {Promise} - 返回删除结果 */ delete: async (modelName, id) => { return request(`/models/${modelName}/${id}`, { method: 'DELETE' }); } }; // 导出API服务 const API = { auth: authApi, model: modelApi, request, // 导出基础请求函数,方便扩展 // Token管理方法 getToken, setToken, clearToken }; // 导出为全局变量 window.API = API;