/** * 资料接口模块 * Requirements: 4.4, 4.5 */ import { get, post, del } from './request' import { getToken } from '../utils/storage' // API 基础地址 const BASE_URL = 'http://localhost:5000/api/app' /** * 提交/更新用户资料 * WHEN a user completes all required fields and submits, * THE XiangYi_MiniApp SHALL call endpoint to save the profile * Requirements: 4.5 * * @param {Object} data - 资料数据 * @param {number} data.relationship - 关系:1父亲 2母亲 3本人 * @param {string} data.surname - 姓氏 * @param {number} data.childGender - 子女性别:1男 2女 * @param {number} data.birthYear - 出生年份 * @param {number} data.education - 学历 * @param {string} data.workProvince - 工作省份 * @param {string} data.workCity - 工作城市 * @param {string} data.workDistrict - 工作区县 * @param {string} data.occupation - 职业 * @param {number} data.monthlyIncome - 月收入 * @param {number} data.height - 身高 * @param {number} data.weight - 体重 * @param {number} data.houseStatus - 房产状态 * @param {number} data.carStatus - 车辆状态 * @param {number} data.marriageStatus - 婚姻状态 * @param {number} data.expectMarryTime - 期望结婚时间 * @param {string} data.introduction - 自我介绍 * @param {boolean} data.isPhotoPublic - 照片是否公开 * @param {string} data.weChatNo - 微信号 * @param {Object} data.requirement - 择偶要求 * @returns {Promise} 资料ID */ export async function createOrUpdate(data) { const response = await post('/profile', data) return response } /** * 获取我的资料 * * @returns {Promise} 用户资料 */ export async function getMyProfile() { const response = await get('/profile') return response } /** * 上传照片 * WHEN a user uploads photos, THE XiangYi_MiniApp SHALL limit to maximum 5 photos * Requirements: 4.4 * * @param {Array} filePaths - 本地文件路径数组 * @returns {Promise} 上传结果 */ export async function uploadPhotos(filePaths) { return new Promise((resolve, reject) => { const token = getToken() // 使用 uni.uploadFile 上传文件 const uploadTasks = filePaths.map((filePath, index) => { return new Promise((res, rej) => { uni.uploadFile({ url: `${BASE_URL}/profile/photos`, filePath: filePath, name: 'files', header: { 'Authorization': `Bearer ${token}` }, success: (uploadRes) => { if (uploadRes.statusCode === 200) { try { const data = JSON.parse(uploadRes.data) res(data) } catch (e) { rej(new Error('解析响应失败')) } } else if (uploadRes.statusCode === 401) { rej(new Error('未授权,请重新登录')) } else { rej(new Error('上传失败')) } }, fail: (err) => { rej(new Error('网络连接失败')) } }) }) }) // 并行上传所有文件 Promise.all(uploadTasks) .then(results => { // 合并所有上传结果 const photos = results.flatMap(r => r.data?.photos || []) resolve({ success: true, data: { photos } }) }) .catch(err => { reject(err) }) }) } /** * 删除照片 * * @param {number} photoId - 照片ID * @returns {Promise} 删除结果 */ export async function deletePhoto(photoId) { const response = await del(`/profile/photos/${photoId}`) return response } export default { createOrUpdate, getMyProfile, uploadPhotos, deletePhoto }