- users 表添加 nickname、avatar_url 字段 - 用户信息 API(GET/PUT /me)+ 头像上传(multer) - 头像通过 API 路由获取(公开,不经过 auth) - 登录接口返回用户昵称和头像 - 用户信息 Store + 个人资料编辑页面 - 我的页面和首页显示真实用户信息 - 群组表(groups、group_members)+ transactions 添加 group_id - 群组 API(创建/加入/退出/解散) - 交易和统计 API 支持 group_id 视图切换 - 群组客户端 Store + 身份切换 - 群组管理页面 - App 初始化群组 Store - UPLOAD_DIR 配置化 - Node.js 备份替代 mysqldump - 统一前端 BASE_URL(config.ts) - uploads 加入 .gitignore - 修复 trust proxy 警告
47 lines
1.2 KiB
TypeScript
47 lines
1.2 KiB
TypeScript
import { request } from '@/utils/request'
|
||
import { API_BASE } from '@/config'
|
||
|
||
/** 用户信息 */
|
||
export interface UserInfo {
|
||
id: number
|
||
nickname: string
|
||
avatar_url: string
|
||
created_at: string
|
||
}
|
||
|
||
/** 获取当前用户信息 */
|
||
export function getUserInfo() {
|
||
return request<UserInfo>({ url: '/user/me' })
|
||
}
|
||
|
||
/** 更新昵称 */
|
||
export function updateNickname(nickname: string) {
|
||
return request({ url: '/user/me', method: 'PUT', data: { nickname } })
|
||
}
|
||
|
||
/** 上传头像(返回新 URL) */
|
||
export function uploadAvatar(filePath: string): Promise<{ avatar_url: string }> {
|
||
return new Promise((resolve, reject) => {
|
||
const token = uni.getStorageSync('xc:token')
|
||
uni.uploadFile({
|
||
url: `${API_BASE}/user/avatar`,
|
||
filePath,
|
||
name: 'file',
|
||
header: { Authorization: `Bearer ${token}` },
|
||
success: (res) => {
|
||
try {
|
||
const data = JSON.parse(res.data)
|
||
if (data.code === 0) {
|
||
resolve(data.data)
|
||
} else {
|
||
reject(new Error(data.message || '上传失败'))
|
||
}
|
||
} catch {
|
||
reject(new Error('上传响应解析失败'))
|
||
}
|
||
},
|
||
fail: () => reject(new Error('网络错误'))
|
||
})
|
||
})
|
||
}
|