pet/http/api/common.js

233 lines
7.2 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 通用API接口模块
* 提供文件上传、系统配置、地区数据等通用功能的API接口
*/
import BaseRequest from '../utils/request-helper.js'
import { LOADING_TEXTS } from '../config/constants.js'
// ==================== API方法 ====================
// ==================== 文件上传相关API ====================
/**
* 上传单张图片
* @param {Object} imageData 图片上传数据对象
* @param {Object} config 自定义请求配置
* @returns {Promise} 返回上传结果
*/
export const uploadImage = (imageData, config = {}) => {
return BaseRequest.upload('/upload/image', imageData, LOADING_TEXTS.UPLOAD_IMAGE, config)
}
/**
* 批量上传多张图片
* @param {Array} imageList 图片列表数组
* @param {Object} config 自定义请求配置
* @returns {Promise} 返回所有图片的上传结果数组
*/
export const uploadImages = async (imageList, config = {}) => {
const { maxConcurrent = 3, showProgress = true } = config
// 显示整体进度loading
if (showProgress) {
uni.showLoading({
title: config.custom?.loadingText || COMMON_LOADING_TEXTS.UPLOAD_IMAGES
})
}
try {
// 分批并发上传
const results = []
for (let i = 0; i < imageList.length; i += maxConcurrent) {
const batch = imageList.slice(i, i + maxConcurrent)
const batchPromises = batch.map(imageData => {
return uploadImage(imageData, {
...config,
custom: {
loading: false, // 批量上传时不显示单个loading
...config.custom
}
})
})
const batchResults = await Promise.all(batchPromises)
results.push(...batchResults)
}
return results
} finally {
if (showProgress) {
uni.hideLoading()
}
}
}
/**
* 上传通用文件
* @param {Object} fileData 文件上传数据对象
* @param {Object} config 自定义请求配置
* @returns {Promise} 返回上传结果
*/
export const uploadFile = (fileData, config = {}) => {
return BaseRequest.upload('/upload/file', fileData, LOADING_TEXTS.UPLOAD_FILE, config)
}
/**
* 下载文件到本地
* @param {string} url 文件下载URL
* @param {Object} config 自定义请求配置
* @returns {Promise} 返回下载结果
*/
export const downloadFile = (url, config = {}) => {
return BaseRequest.download(url, config.savePath, LOADING_TEXTS.DOWNLOAD_FILE, config)
}
// ==================== 云存储相关API ====================
/**
* 获取七牛云上传凭证
* @param {Object} params 请求参数
* @param {Object} config 自定义请求配置
* @returns {Promise} 返回七牛云上传配置信息
*/
export const getQiniuToken = (params = {}, config = {}) => {
return BaseRequest.get('/upload/qiniu-token', params, 'SILENT_REQUEST', config)
}
/**
* 获取阿里云OSS上传签名
* @param {Object} params 请求参数
* @param {Object} config 自定义请求配置
* @returns {Promise} 返回OSS上传配置信息
*/
export const getOSSSignature = (params = {}, config = {}) => {
return BaseRequest.get('/upload/oss-signature', params, 'SILENT_REQUEST', config)
}
// ==================== 系统信息相关API ====================
/**
* 获取系统配置信息
* @param {Object} params 查询参数
* @param {Object} config 自定义请求配置
* @returns {Promise} 返回系统配置对象
*/
export const getSystemConfig = (params = {}, config = {}) => {
return BaseRequest.get('/system/config', params, 'SILENT_REQUEST', config)
}
/**
* 获取应用版本信息
* @description 获取当前应用的版本信息和更新历史
* @param {Object} [config={}] 自定义请求配置
* @returns {Promise<Object>} 返回版本信息对象
* @example
* // 获取版本信息
* const versionInfo = await getVersionInfo()
* // 返回格式:
* // {
* // currentVersion: '1.0.0',
* // latestVersion: '1.1.0',
* // updateAvailable: true,
* // updateLog: ['修复bug', '新增功能']
* // }
*/
export const getVersionInfo = (config = {}) => {
return BaseRequest.get('/system/version', {}, 'SILENT_REQUEST', config)
}
/**
* 检查应用更新
* @description 检查是否有新版本可用,并获取更新信息
* @param {Object} versionData 当前版本数据
* @param {string} versionData.currentVersion 当前版本号
* @param {string} versionData.platform 平台:'android' | 'ios' | 'h5' | 'mp-weixin'
* @param {string} [versionData.channel] 更新渠道
* @param {Object} [config={}] 自定义请求配置
* @returns {Promise<Object>} 返回更新检查结果
* @example
* // 检查更新
* const updateInfo = await checkUpdate({
* currentVersion: '1.0.0',
* platform: 'android'
* })
*
* // 指定更新渠道
* const updateInfo = await checkUpdate({
* currentVersion: '1.0.0',
* platform: 'android',
* channel: 'beta'
* })
*/
export const checkUpdate = (versionData, config = {}) => {
return BaseRequest.post('/system/check-update', versionData, 'PUBLIC_REQUEST', LOADING_TEXTS.CHECK_UPDATE, config)
}
// 短信验证码相关API已移至 http/api/auth.js 文件中
// ==================== 基础数据相关API ====================
/**
* 获取地区数据
* @description 获取省市区三级联动的地区数据
* @param {Object} [params={}] 查询参数
* @param {string} [params.level] 数据层级:'province' | 'city' | 'district' | 'all'
* @param {string} [params.parentCode] 父级地区代码
* @param {boolean} [params.includeCoordinates] 是否包含经纬度信息
* @param {Object} [config={}] 自定义请求配置
* @returns {Promise<Object[]>} 返回地区数据数组
* @example
* // 获取所有省份
* const provinces = await getRegionData({ level: 'province' })
*
* // 获取指定省份下的城市
* const cities = await getRegionData({
* level: 'city',
* parentCode: '110000'
* })
*
* // 获取完整的三级数据
* const allRegions = await getRegionData({ level: 'all' })
*/
export const getRegionData = (params = {}, config = {}) => {
return BaseRequest.get('/common/regions', params, 'SILENT_REQUEST', config)
}
/**
* 提交用户反馈
* @description 提交用户的意见反馈或问题报告
* @param {Object} feedbackData 反馈数据对象
* @param {string} feedbackData.type 反馈类型:'bug' | 'suggestion' | 'complaint' | 'other'
* @param {string} feedbackData.title 反馈标题
* @param {string} feedbackData.content 反馈内容
* @param {string} [feedbackData.contact] 联系方式
* @param {string[]} [feedbackData.images] 相关图片URL数组
* @param {Object} [feedbackData.deviceInfo] 设备信息
* @param {Object} [config={}] 自定义请求配置
* @returns {Promise<Object>} 返回提交结果包含反馈ID
* @example
* // 提交bug反馈
* const result = await submitFeedback({
* type: 'bug',
* title: '登录页面异常',
* content: '点击登录按钮后页面卡死',
* contact: 'user@example.com',
* images: ['https://example.com/screenshot.jpg']
* })
*
* // 提交功能建议
* const result = await submitFeedback({
* type: 'suggestion',
* title: '希望增加夜间模式',
* content: '建议应用支持夜间模式,保护用户视力'
* })
*/
export const submitFeedback = (feedbackData, config = {}) => {
return BaseRequest.post('/feedback', feedbackData, 'AUTHENTICATED_UPDATE', LOADING_TEXTS.SUBMIT_FEEDBACK, config)
}