237 lines
5.0 KiB
JavaScript
237 lines
5.0 KiB
JavaScript
/**
|
||
* API 请求封装工具
|
||
* 统一处理 wx.request,支持 baseURL、错误处理、加载状态
|
||
*/
|
||
|
||
// API 基础地址配置
|
||
const API_BASE_URL = 'http://makepower.top:9333'
|
||
|
||
/**
|
||
* 发起 HTTP 请求
|
||
* @param {string} url - 请求路径
|
||
* @param {object} options - 请求配置
|
||
* @param {string} options.method - 请求方法 (GET/POST/PUT/DELETE)
|
||
* @param {object} options.data - 请求数据
|
||
* @param {boolean} options.showLoading - 是否显示加载提示
|
||
* @param {string} options.loadingText - 加载提示文字
|
||
* @returns {Promise} 返回 Promise 对象
|
||
*/
|
||
function request(url, options = {}) {
|
||
const {
|
||
method = 'GET',
|
||
data = {},
|
||
showLoading = true,
|
||
loadingText = '加载中...'
|
||
} = options
|
||
|
||
// 显示加载提示
|
||
if (showLoading) {
|
||
wx.showLoading({
|
||
title: loadingText,
|
||
mask: true
|
||
})
|
||
}
|
||
|
||
return new Promise((resolve, reject) => {
|
||
wx.request({
|
||
url: `${API_BASE_URL}${url}`,
|
||
method: method.toUpperCase(),
|
||
data: method.toUpperCase() === 'GET' ? data : JSON.stringify(data),
|
||
header: {
|
||
'content-type': 'application/json'
|
||
},
|
||
success: (res) => {
|
||
// 隐藏加载提示
|
||
if (showLoading) {
|
||
wx.hideLoading()
|
||
}
|
||
|
||
// 检查业务状态码
|
||
if (res.statusCode === 200) {
|
||
if (res.data.success !== false) {
|
||
resolve(res.data)
|
||
} else {
|
||
// 业务错误
|
||
showError(res.data.message || '请求失败')
|
||
reject(res.data)
|
||
}
|
||
} else {
|
||
// HTTP 错误
|
||
showError(`网络错误: ${res.statusCode}`)
|
||
reject({
|
||
success: false,
|
||
message: `网络错误: ${res.statusCode}`,
|
||
statusCode: res.statusCode
|
||
})
|
||
}
|
||
},
|
||
fail: (err) => {
|
||
// 隐藏加载提示
|
||
if (showLoading) {
|
||
wx.hideLoading()
|
||
}
|
||
|
||
// 网络请求失败
|
||
showError('网络连接失败,请检查网络设置')
|
||
reject({
|
||
success: false,
|
||
message: '网络连接失败',
|
||
error: err
|
||
})
|
||
}
|
||
})
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 显示错误提示
|
||
* @param {string} message - 错误信息
|
||
*/
|
||
function showError(message) {
|
||
wx.showToast({
|
||
title: message,
|
||
icon: 'none',
|
||
duration: 2000
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 显示成功提示
|
||
* @param {string} message - 成功信息
|
||
*/
|
||
function showSuccess(message) {
|
||
wx.showToast({
|
||
title: message,
|
||
icon: 'success',
|
||
duration: 2000
|
||
})
|
||
}
|
||
|
||
/**
|
||
* GET 请求
|
||
*/
|
||
function get(url, data = {}, options = {}) {
|
||
return request(url, {
|
||
...options,
|
||
method: 'GET',
|
||
data
|
||
})
|
||
}
|
||
|
||
/**
|
||
* POST 请求
|
||
*/
|
||
function post(url, data = {}, options = {}) {
|
||
return request(url, {
|
||
...options,
|
||
method: 'POST',
|
||
data
|
||
})
|
||
}
|
||
|
||
/**
|
||
* PUT 请求
|
||
*/
|
||
function put(url, data = {}, options = {}) {
|
||
return request(url, {
|
||
...options,
|
||
method: 'PUT',
|
||
data
|
||
})
|
||
}
|
||
|
||
/**
|
||
* DELETE 请求
|
||
*/
|
||
function del(url, data = {}, options = {}) {
|
||
return request(url, {
|
||
...options,
|
||
method: 'DELETE',
|
||
data
|
||
})
|
||
}
|
||
|
||
// ========== API 接口定义 ==========
|
||
|
||
/**
|
||
* 健康检查
|
||
*/
|
||
function checkHealth() {
|
||
return get('/api/health', {}, { showLoading: false })
|
||
}
|
||
|
||
/**
|
||
* 按地区查询价格
|
||
* @param {string} region - 地区名称
|
||
* @param {string} date - 价格日期 (可选)
|
||
*/
|
||
function getPricesByRegion(region, date = '') {
|
||
const params = { region }
|
||
if (date) params.date = date
|
||
return get('/api/prices/region', params)
|
||
}
|
||
|
||
/**
|
||
* 搜索价格数据
|
||
* @param {object} params - 搜索参数
|
||
* @param {string} params.material - 材质
|
||
* @param {string} params.specification - 规格型号
|
||
* @param {string} params.startDate - 开始日期
|
||
* @param {string} params.endDate - 结束日期
|
||
* @param {string} params.region - 地区
|
||
* @param {number} params.page - 页码
|
||
* @param {number} params.pageSize - 每页数量
|
||
*/
|
||
function searchPrices(params = {}) {
|
||
return get('/api/prices/search', params)
|
||
}
|
||
|
||
/**
|
||
* 获取价格统计
|
||
* @param {object} params - 统计参数
|
||
* @param {string} params.region - 地区
|
||
* @param {string} params.material - 材质
|
||
* @param {number} params.days - 统计天数
|
||
* @param {string} params.startDate - 开始日期
|
||
* @param {string} params.endDate - 结束日期
|
||
*/
|
||
function getPriceStats(params = {}) {
|
||
return get('/api/prices/stats', params)
|
||
}
|
||
|
||
/**
|
||
* 获取价格趋势
|
||
* @param {object} params - 查询参数
|
||
* @param {string} params.region - 地区
|
||
* @param {string} params.material - 材质
|
||
* @param {number} params.days - 统计天数 (默认30)
|
||
*/
|
||
function getPriceTrend(params = {}) {
|
||
return get('/api/prices/trend', params)
|
||
}
|
||
|
||
/**
|
||
* 导入价格数据
|
||
* @param {array} prices - 价格数据数组
|
||
*/
|
||
function importPrices(prices) {
|
||
return post('/api/prices/import', { prices })
|
||
}
|
||
|
||
module.exports = {
|
||
request,
|
||
get,
|
||
post,
|
||
put,
|
||
del,
|
||
showSuccess,
|
||
showError,
|
||
// API 接口
|
||
checkHealth,
|
||
getPricesByRegion,
|
||
searchPrices,
|
||
getPriceStats,
|
||
getPriceTrend,
|
||
importPrices
|
||
}
|