88 lines
2.1 KiB
TypeScript
88 lines
2.1 KiB
TypeScript
export type Role = 'user' | 'assistant';
|
||
|
||
// 附件类型枚举
|
||
export type AttachmentType = 'image' | 'video' | 'file';
|
||
|
||
// 附件数据结构
|
||
export type MessageAttachment = {
|
||
id: string;
|
||
type: AttachmentType;
|
||
url: string;
|
||
localUri?: string; // 本地URI,用于上传中的显示
|
||
filename?: string;
|
||
size?: number;
|
||
duration?: number; // 视频时长(秒)
|
||
thumbnail?: string; // 视频缩略图
|
||
width?: number;
|
||
height?: number;
|
||
uploadProgress?: number; // 上传进度 0-1
|
||
uploadError?: string; // 上传错误信息
|
||
};
|
||
|
||
// AI选择选项数据结构
|
||
export type AiChoiceOption = {
|
||
id: string;
|
||
label: string;
|
||
value: any;
|
||
recommended?: boolean;
|
||
emoji?: string;
|
||
};
|
||
|
||
// AI响应数据结构
|
||
export type AiResponseData = {
|
||
content: string;
|
||
choices?: AiChoiceOption[];
|
||
interactionType?: 'text' | 'food_confirmation' | 'selection';
|
||
pendingData?: any;
|
||
context?: any;
|
||
};
|
||
|
||
// 重构后的消息数据结构
|
||
export type ChatMessage = {
|
||
id: string;
|
||
role: Role;
|
||
content: string; // 文本内容
|
||
attachments?: MessageAttachment[]; // 附件列表
|
||
choices?: AiChoiceOption[]; // 选择选项(仅用于assistant消息)
|
||
interactionType?: string; // 交互类型
|
||
pendingData?: any; // 待确认数据
|
||
context?: any; // 上下文信息
|
||
};
|
||
|
||
// 卡片类型常量定义
|
||
export const CardType = {
|
||
WEIGHT_INPUT: '__WEIGHT_INPUT_CARD__',
|
||
DIET_INPUT: '__DIET_INPUT_CARD__',
|
||
DIET_TEXT_INPUT: '__DIET_TEXT_INPUT__',
|
||
DIET_PLAN: '__DIET_PLAN_CARD__',
|
||
} as const;
|
||
|
||
export type CardType = typeof CardType[keyof typeof CardType];
|
||
|
||
// 定义路由参数类型
|
||
export type CoachScreenParams = {
|
||
name?: string;
|
||
action?: 'diet' | 'weight' | 'mood' | 'workout';
|
||
subAction?: 'record' | 'photo' | 'text' | 'card';
|
||
meal?: 'breakfast' | 'lunch' | 'dinner' | 'snack';
|
||
message?: string;
|
||
};
|
||
|
||
// 快捷操作按钮类型
|
||
export type QuickChip = {
|
||
key: string;
|
||
label: string;
|
||
action: () => void;
|
||
};
|
||
|
||
// 选中的图片类型
|
||
export type SelectedImage = {
|
||
id: string;
|
||
localUri: string;
|
||
width?: number;
|
||
height?: number;
|
||
progress: number;
|
||
uploadedKey?: string;
|
||
uploadedUrl?: string;
|
||
error?: string;
|
||
}; |