- 新增 sys_config 表,存储应用版本号、标语、描述 - 关于小菜弹窗版本号改为从数据库动态获取 - 用户表新增 slogan 字段(个性签名) - 编辑资料页面支持修改签名 - 管理后台新增系统配置管理页面 - 更新 CLAUDE.md 文档
51 lines
1.3 KiB
TypeScript
51 lines
1.3 KiB
TypeScript
import { request } from '@/utils/request'
|
||
import { API_BASE } from '@/config'
|
||
|
||
/** 用户信息 */
|
||
export interface UserInfo {
|
||
id: number
|
||
nickname: string
|
||
avatar_url: string
|
||
slogan: string
|
||
role: 'user' | 'admin'
|
||
created_at: string
|
||
}
|
||
|
||
/** 获取当前用户信息 */
|
||
export function getUserInfo() {
|
||
return request<UserInfo>({ url: '/user/me' })
|
||
}
|
||
|
||
/** 更新昵称/签名 */
|
||
export function updateNickname(nickname: string, slogan?: string) {
|
||
const data: any = { nickname }
|
||
if (slogan !== undefined) data.slogan = slogan
|
||
return request({ url: '/user/me', method: 'PUT', data })
|
||
}
|
||
|
||
/** 上传头像(返回新 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('网络错误'))
|
||
})
|
||
})
|
||
}
|