You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
209 lines
5.3 KiB
209 lines
5.3 KiB
/**
|
|
* 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;
|