feat: 添加会话历史管理功能

- 在 AI 教练聊天界面中新增会话历史查看和选择功能,用户可以查看和选择之前的会话记录
- 实现会话删除功能,用户可以删除不需要的会话记录
- 优化历史会话的加载和展示,提升用户体验
- 更新相关样式以适应新功能的展示和交互
This commit is contained in:
richarjiang
2025-08-14 10:15:02 +08:00
parent e3e2f1b8c6
commit 532cf251e2
3 changed files with 254 additions and 4 deletions

View File

@@ -18,7 +18,7 @@ export function useCosUpload(defaultOptions?: UseCosUploadOptions) {
}, []);
const upload = useCallback(
async (file: { uri?: string; name?: string; type?: string; buffer?: any; blob?: Blob } | Blob | any, options?: UseCosUploadOptions) => {
async (file: { uri?: string; name?: string; type?: string; buffer?: any; blob?: Blob } | Blob | string | any, options?: UseCosUploadOptions) => {
const finalOptions = { ...(defaultOptions || {}), ...(options || {}) };
const extGuess = (() => {
const name = (file && (file.name || (file as any).filename)) || '';
@@ -31,11 +31,29 @@ export function useCosUpload(defaultOptions?: UseCosUploadOptions) {
setProgress(0);
setUploading(true);
try {
let body = (file as any)?.blob || (file as any)?.buffer || file;
// Expo ImagePicker 返回 { uri } 时,转换为 Blob
if (!body && (file as any)?.uri) {
let body: any = null;
// 1) 直接可用类型Blob 或 string
if (typeof file === 'string') {
body = file;
} else if (typeof Blob !== 'undefined' && file instanceof Blob) {
body = file;
} else if ((file as any)?.blob && (typeof Blob === 'undefined' || (file as any).blob instanceof Blob || (file as any).blob?._data)) {
// 2) 已提供 blob 字段
body = (file as any).blob;
} else if ((file as any)?.buffer) {
// 3) ArrayBuffer/TypedArray -> Blob
const buffer = (file as any).buffer;
body = new Blob([buffer], { type: (file as any)?.type || finalOptions.contentType || 'application/octet-stream' });
} else if ((file as any)?.uri) {
// 4) Expo ImagePicker/文件:必须先转 Blob
const resp = await fetch((file as any).uri);
body = await resp.blob();
} else {
// 兜底:尝试直接作为字符串,否则抛错
if (file && (typeof file === 'object')) {
throw new Error('无效的上传体:请提供 Blob/String或包含 uri 的对象');
}
body = file;
}
const res = await uploadWithRetry({
key,