// API 基础配置 // const baseURL = 'http://101.132.250.62:8080' // const baseURL = 'http://192.168.110.60:8080' const baseURL = 'http://localhost:8080' // 是否使用模拟数据(开发调试时设为 true,后端API准备好后改为 false) const USE_MOCK_API = false // 模拟网络延迟 function mockDelay(ms = 800) { return new Promise(resolve => setTimeout(resolve, ms)) } // 请求封装 export function request(options) { return new Promise((resolve, reject) => { // 构建请求头 const headers = { 'Content-Type': 'application/json', ...options.header } // 判断是否为登录或注册接口 const isAuthRequest = options.url.includes('/api/v1/auth/login') || options.url.includes( '/api/v1/auth/register') // 如果不是登录/注册接口,则自动添加JWT token if (!isAuthRequest) { const token = uni.getStorageSync('access_token') if (token) { headers['Authorization'] = `Bearer ${token}` } } uni.request({ url: baseURL + options.url, method: options.method || 'GET', data: options.data || {}, header: headers, timeout: 60000, success: (res) => { // 处理token过期(HTTP 401未授权) if (res.statusCode === 401) { // 清除本地存储的token和用户信息 uni.removeStorageSync('access_token') uni.removeStorageSync('user') // 跳转到登录页 uni.reLaunch({ url: '/pages/login/login' }) reject(new Error('登录已过期,请重新登录')) return } // 可以在这里统一处理响应 if (res.statusCode === 200 || res.statusCode === 202) { // 检查业务状态码 if (res.data && res.data.code !== undefined) { if (res.data.code === 200) { resolve(res.data) } else if (res.data.code === 401 || res.data.code === 400 || res.data .code === 403) { // 业务状态码401(未授权),清除缓存并跳转到登录页 uni.removeStorageSync('access_token') uni.removeStorageSync('user') uni.reLaunch({ url: '/pages/login/login' }) reject(new Error('登录已过期,请重新登录')) return } else { // 其他业务错误,返回包含 message 的错误 reject(new Error(res.data.message || '请求失败')) } } else { resolve(res.data) } } else { // HTTP 错误,尝试从响应中获取 message const errorMessage = res.data?.message || `请求失败 (${res.statusCode})` reject(new Error(errorMessage)) } }, fail: (err) => { reject(err) } }) }) } // 登录接口 export function loginApi(mobile, password) { return request({ url: '/api/v1/auth/login', method: 'POST', data: { mobile, password } }) } // 检查昵称是否已被注册 export function checkNicknameApi(nickname) { return request({ url: '/api/v1/auth/check-nickname', method: 'POST', data: { nickname } }) } // 检查手机号是否已被注册 export function checkmobileApi(mobile) { return request({ url: '/api/v1/auth/check-mobile', method: 'POST', data: { mobile } }) } // 注册接口 export function registerApi(mobile, password, star_id, nickname) { return request({ url: '/api/v1/auth/register', method: 'POST', data: { mobile, password, star_id, nickname } }) } // 更新用户信息接口 export function updateUserInfoApi(nickname) { return request({ url: '/api/user/update', method: 'POST', data: { nickname } }) } // 获取随机用户列表(广场页面使用) export function getRandomUsersApi(page = 1, pageSize) { return request({ url: `/api/v1/social/users?page=${page}&page_size=${pageSize}`, method: 'GET' }) } // 好友列表接口 export function friendListApi(page = 1, pageSize = 10) { return request({ url: `/api/v1/social/friends?page=${page}&page_size=${pageSize}`, method: 'GET' }) } // 获取用户信息接口(从缓存或API) export function getUserProfileApi() { return request({ url: '/api/v1/auth/me', method: 'GET' }) } // 修改昵称接口 export function updateNicknameApi(nickname) { return request({ url: '/api/v1/me/nickname', method: 'PUT', data: { nickname } }) } // 模拟注销账号接口 async function mockDeleteAccountApi() { await mockDelay(600) // 模拟网络延迟 return { code: 200, message: '账号注销成功', data: null } } // 注销账号接口 export function deleteAccountApi() { if (USE_MOCK_API) { return mockDeleteAccountApi() } return request({ url: '/api/user/delete-account', method: 'POST' }) } // 修改密码接口 export function updatePasswordApi(oldPassword, newPassword) { return request({ url: '/api/v1/account/password', method: 'POST', data: { old_password: oldPassword, new_password: newPassword } }) } // 搜索用户 export function searchUserApi(friendUserId) { return request({ url: `/api/v1/social/search-user?friend_fan_profile_id=${friendUserId}`, method: 'GET' }) } // 获取已发送的好友请求 export function getSentFriendRequestsApi(page = 1, pageSize = 10) { return request({ url: `/api/v1/social/friend-requests?type=sent&status=pending&page=${page}&page_size=${pageSize}`, method: 'GET' }) } // 发送好友请求(添加好友) export function sendFriendRequestApi(friendUserId) { return request({ url: '/api/v1/social/friend-requests', method: 'POST', data: { friend_user_id: friendUserId } }) } // 获取收到的好友请求 export function getReceivedFriendRequestsApi(page = 1, pageSize = 10) { return request({ url: `/api/v1/social/friend-requests?type=received&status=pending&page=${page}&page_size=${pageSize}`, method: 'GET' }) } // 处理好友请求(接受/拒绝) export function handleFriendRequestApi(requestId, action) { return request({ url: '/api/v1/social/friend-requests/handle', method: 'POST', data: { request_id: requestId, action: action } }) } // 删除好友 export function deleteFriendApi(friendUserId) { return request({ url: '/api/v1/social/friends', method: 'DELETE', data: { friend_user_id: friendUserId } }) } // 获取可选的粉丝身份列表 export function getFanIdentitiesApi() { return request({ url: '/api/v1/fan-identities', method: 'GET' }) } // 添加新的粉丝身份 export function addFanIdentityApi(starId, nickname) { return request({ url: '/api/v1/my/fan-identities', method: 'POST', data: { star_id: starId, nickname: nickname } }) } // 获取用户当前拥有的所有粉丝身份 export function getMyFanIdentitiesApi() { return request({ url: '/api/v1/my/fan-identities', method: 'GET' }) } // 切换粉丝身份 export function switchFanIdentityApi(newStarId) { return request({ url: '/api/v1/my/fan-identities/switch', method: 'POST', data: { new_star_id: newStarId } }) } // 获取用户藏品列表 export function getMyAssetsApi(page = 1, pageSize = 20) { return request({ url: `/api/v1/assets/me/items?page=${page}&page_size=${pageSize}`, method: 'GET' }) } // 获取藏品详情 export function getAssetDetailApi(assetId) { return request({ url: `/api/v1/assets/${assetId}`, method: 'GET' }) } // 点赞藏品 export function likeAssetApi(assetId) { return request({ url: `/api/v1/social/assets/${assetId}/like`, method: 'POST' }) } // 取消点赞藏品 export function unlikeAssetApi(assetId) { return request({ url: `/api/v1/social/assets/${assetId}/like`, method: 'DELETE' }) } // 获取我的展馆槽位信息 export function getMyGalleriesApi() { return request({ url: '/api/v1/mygalleries', method: 'GET' }) } // 获取指定用户的展馆槽位信息 export function getUserGalleriesApi(targetUid) { return request({ url: `/api/v1/galleries/${targetUid}`, method: 'GET' }) } // 获取随机用户的展馆槽位信息 export function getRandomGalleryApi() { return request({ url: '/api/v1/galleries/random', method: 'GET' }) } // 放置藏品到展馆 export function placeAssetToGalleryApi(assetId, galleryOwnerId, slotId) { return request({ url: '/api/v1/galleries/place', method: 'POST', data: { asset_id: assetId, gallery_owner_id: galleryOwnerId, slot_id: slotId } }) } // 下架藏品 export function removeAssetFromGalleryApi(slotId) { return request({ url: `/api/v1/galleries/slots/${slotId}/asset`, method: 'DELETE' }) } // 获取OSS上传签名 export function getOssSignatureApi(type) { return request({ url: `/api/v1/assets/oss/signature?type=${type}`, method: 'GET' }) } // 获取OSS预签名URL(用于读取图片) export function getOssPresignedUrlApi(fileName, expires = 3600, type = 'avatar') { return request({ url: `/api/v1/assets/oss/presigned-url?file_name=${encodeURIComponent(fileName)}&expires=${expires}&type=${type}`, method: 'GET' }) } // 更新用户头像 export function updateAvatarApi(avatarUrl) { return request({ url: '/api/v1/me/avatar', method: 'PUT', data: { avatar_url: avatarUrl } }) } // 创建铸造订单 export function createMintOrderApi(orderData) { return request({ url: '/api/v1/assets/mints', method: 'POST', data: orderData }) } // 删除铸造订单 export function deleteMintOrderApi(orderId) { return request({ url: `/api/v1/assets/mints/${orderId}`, method: 'DELETE' }) } // 获取铸造订单详情 export function getMintOrderDetailApi(orderId) { return request({ url: `/api/v1/assets/mints/${orderId}`, method: 'GET' }) } // 图生图 export function imageGenerationApi(params) { return request({ url: '/api/v1/assets/mints/image/generation', method: 'POST', data: params }) } // 获取热度排行榜 export function getHotRankingApi(dimension = 'total', starId = null, page = 1, pageSize = 10) { let url = `/api/v1/rankings/hot?dimension=${dimension}&page=${page}&page_size=${pageSize}` if (starId) { url += `&star_id=${starId}` } return request({ url: url, method: 'GET' }) } // 获取自制排行榜 export function getOriginalRankingApi(dimension = 'total', starId = null, page = 1, pageSize = 10) { let url = `/api/v1/rankings/original?dimension=${dimension}&page=${page}&page_size=${pageSize}` if (starId) { url += `&star_id=${starId}` } return request({ url: url, method: 'GET' }) } // ==================== 活动相关接口 ==================== // 获取活动列表 export function getActivityListApi(starId, page = 1, pageSize = 10) { let url = `/api/v1/activities?star_id=${starId}&page=${page}&page_size=${pageSize}` // if (status) { // url += `&status=${status}` // } return request({ url: url, method: 'GET' }) } // 获取活动详情 export function getActivityDetailApi(activityId) { return request({ url: `/api/v1/activities/${activityId}`, method: 'GET' }) } // 获取活动道具列表 export function getActivityItemsApi(activityId) { return request({ url: `/api/v1/activities/${activityId}/items`, method: 'GET' }) } // 获取活动进度 export function getActivityProgressApi(activityId) { return request({ url: `/api/v1/activities/${activityId}/progress`, method: 'GET' }) } // 购买活动道具 export function purchaseActivityItemApi(activityId, itemType, quantity = 1) { return request({ url: `/api/v1/activities/${activityId}/purchase`, method: 'POST', data: { item_type: itemType, quantity: quantity } }) } // 获取活动贡献点排名 export function getActivityRankingApi(activityId, starId = null, page = 1, pageSize = 10) { let url = `/api/v1/activities/${activityId}/ranking?page=${page}&page_size=${pageSize}` if (starId) { url += `&star_id=${starId}` } return request({ url: url, method: 'GET' }) }