diff --git a/src/types/index.ts b/src/types/index.ts index 54f38669..4c1540e9 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -53,3 +53,13 @@ export type { CommentAuthor, CreateCommentParams, } from './comment'; + +// 投资规划相关类型 +export type { + EventType, + EventSource, + EventStatus, + InvestmentEvent, + PlanFormData, + PlanningContextValue, +} from './investment'; diff --git a/src/types/investment.ts b/src/types/investment.ts new file mode 100644 index 00000000..643dc1ad --- /dev/null +++ b/src/types/investment.ts @@ -0,0 +1,148 @@ +/** + * 投资规划相关类型定义 + * 用于 InvestmentPlanningCenter 组件及其子组件 + */ + +import { UseToastOptions } from '@chakra-ui/react'; + +/** + * 事件类型枚举 + */ +export type EventType = 'plan' | 'review' | 'reminder' | 'analysis'; + +/** + * 事件来源 + */ +export type EventSource = 'user' | 'future' | 'system'; + +/** + * 事件状态 + */ +export type EventStatus = 'active' | 'completed' | 'cancelled'; + +/** + * 投资事件接口 + * 表示日历中的投资计划、复盘或其他事件 + */ +export interface InvestmentEvent { + /** 事件唯一标识符 */ + id: number; + + /** 事件标题 */ + title: string; + + /** 事件描述/详细内容 */ + description?: string; + + /** 事件日期 (YYYY-MM-DD 格式) */ + event_date: string; + + /** 事件类型 */ + type: EventType; + + /** 事件来源(用户创建/系统生成/未来事件) */ + source?: EventSource; + + /** 重要度 (1-5) */ + importance?: number; + + /** 相关股票代码列表 */ + stocks?: string[]; + + /** 标签列表 */ + tags?: string[]; + + /** 事件状态 */ + status?: EventStatus; + + /** 创建时间 */ + created_at?: string; + + /** 更新时间 */ + updated_at?: string; + + /** 事件内容(用于计划/复盘的详细内容) */ + content?: string; + + /** 日期字段(兼容旧数据) */ + date?: string; +} + +/** + * 表单数据类型 + * 用于创建/编辑投资计划或复盘 + */ +export interface PlanFormData { + /** 事件日期 (YYYY-MM-DD 格式) */ + date: string; + + /** 标题 */ + title: string; + + /** 内容/描述 */ + content: string; + + /** 事件类型 */ + type: EventType; + + /** 相关股票代码列表 */ + stocks: string[]; + + /** 标签列表 */ + tags: string[]; + + /** 事件状态 */ + status: EventStatus; +} + +/** + * Planning Context 值类型 + * 用于在 InvestmentPlanningCenter 的子组件间共享数据 + */ +export interface PlanningContextValue { + /** 所有事件列表 */ + allEvents: InvestmentEvent[]; + + /** 设置事件列表 */ + setAllEvents: React.Dispatch>; + + /** 重新加载所有数据 */ + loadAllData: () => Promise; + + /** 加载状态 */ + loading: boolean; + + /** 设置加载状态 */ + setLoading: React.Dispatch>; + + /** 当前激活的标签页索引 (0: 日历, 1: 计划, 2: 复盘) */ + activeTab: number; + + /** 设置激活的标签页 */ + setActiveTab: React.Dispatch>; + + /** Chakra UI Toast 实例 */ + toast: { + (options?: UseToastOptions): string | number | undefined; + close: (id: string | number) => void; + closeAll: (options?: { positions?: Array<'top' | 'top-right' | 'top-left' | 'bottom' | 'bottom-right' | 'bottom-left'> }) => void; + update: (id: string | number, options: Omit) => void; + isActive: (id: string | number) => boolean; + }; + + // 颜色主题变量(基于当前主题模式) + /** 背景色 */ + bgColor: string; + + /** 边框颜色 */ + borderColor: string; + + /** 主要文本颜色 */ + textColor: string; + + /** 次要文本颜色 */ + secondaryText: string; + + /** 卡片背景色 */ + cardBg: string; +}