# 共享代码使用说明 ## 概述 本共享包提供了HTTP和IPC框架兼容的统一代码实现,包括数据模型、API适配器和共享组件。 ## 目录结构 ``` shared/ ├── models/ # 数据模型定义 │ └── bid-item.ts ├── api/ # API适配器层 │ ├── bid-api.ts # 统一API接口 │ ├── http-adapter.ts # HTTP适配器实现 │ ├── ipc-adapter.ts # IPC适配器实现 │ ├── api-factory.ts # API工厂(环境检测) │ └── index.ts # 导出文件 ├── components/ # 共享Vue组件 │ ├── BaseBidList.vue │ ├── BaseAiRecommendations.vue │ ├── BaseCrawlInfo.vue │ └── index.ts ├── package.json └── README.md ``` ## 快速开始 ### 1. 构建共享包 在项目根目录执行: ```bash npm run build:shared ``` 这将把shared目录的内容复制到两个前端项目中: - `frontend/src/shared/` - `widget/looker/frontend/src/shared/` ### 2. 在HTTP前端中使用 ```typescript import { getAPI } from './shared/api' const api = getAPI() // 使用API const bids = await api.getPinnedBids() ``` ### 3. 在IPC前端中使用 ```typescript import { getAPI } from './shared/api' const api = getAPI() // 使用API(自动检测到Wails环境) const bids = await api.getPinnedBids() ``` ### 4. 使用共享组件 ```vue ``` ## API接口 ### BidAPI接口 ```typescript interface BidAPI { // 投标相关 getPinnedBids(): Promise getRecentBids(limit?: number): Promise getBidsByDateRange(startDate: string, endDate: string): Promise getBidsByParams(params: BidQueryParams): Promise> updatePinStatus(title: string, pin: boolean): Promise getSources(): Promise // AI推荐相关 getAiRecommendations(): Promise saveAiRecommendations(recommendations: AiRecommendation[]): Promise getLatestRecommendations(): Promise // 关键词相关 getKeywords(): Promise addKeyword(word: string, weight?: number): Promise deleteKeyword(id: string): Promise // 爬虫相关 getCrawlStats(): Promise runCrawler(): Promise runCrawlerBySource(sourceName: string): Promise getCrawlerStatus(): Promise<{ status: string; lastRun: string }> } ``` ## 数据模型 ### BidItem ```typescript interface BidItem { id: string title: string url: string publishDate: string source: string pin: boolean createdAt: string updatedAt: string } ``` ### AiRecommendation ```typescript interface AiRecommendation { id: string title: string confidence: number createdAt: string } ``` ### CrawlInfoStat ```typescript interface CrawlInfoStat { source: string count: number latestUpdate: string latestPublishDate: string error: string } ``` ## 环境检测 API工厂会自动检测运行环境: - **HTTP环境**: 浏览器环境,使用HTTP适配器 - **IPC环境**: Wails桌面应用环境,使用IPC适配器 可以通过以下方式手动检测: ```typescript import { getEnvironment } from './shared/api' const env = getEnvironment() // 'http' | 'ipc' ``` ## 开发命令 ### 构建共享包 ```bash npm run build:shared ``` ### 开发HTTP前端 ```bash npm run dev:frontend ``` ### 开发IPC前端 ```bash npm run dev:widget ``` ### 构建所有 ```bash npm run build:all ``` ## 注意事项 1. **环境变量**: HTTP前端需要配置`VITE_API_BASE_URL`环境变量 2. **数据库配置**: IPC前端需要确保`.env`文件配置正确 3. **类型定义**: 确保TypeScript配置正确引用共享包 4. **组件导入**: 使用相对路径导入共享组件 ## 故障排除 ### 问题:API调用失败 **解决方案**: 1. 检查环境变量配置 2. 确认后端服务运行状态 3. 查看浏览器控制台错误信息 ### 问题:组件样式不生效 **解决方案**: 1. 确认组件作用域样式正确 2. 检查CSS导入顺序 3. 清除浏览器缓存 ### 问题:环境检测错误 **解决方案**: 1. 检查`window.go`对象是否存在 2. 确认Wails运行时环境 3. 使用`getEnvironment()`函数调试 ## 扩展指南 ### 添加新的API方法 1. 在`shared/api/bid-api.ts`中添加接口定义 2. 在`shared/api/http-adapter.ts`中实现HTTP版本 3. 在`shared/api/ipc-adapter.ts`中实现IPC版本 4. 在`widget/looker/app.go`中添加Go后端方法(如需要) ### 添加新的共享组件 1. 在`shared/components/`目录创建新组件 2. 使用`api` prop接收API实例 3. 在`shared/components/index.ts`中导出组件 4. 在前端项目中导入使用 ## 技术支持 如有问题,请参考: - 技术方案文档: [`../plans/http-ipc-compatibility-plan.md`](../plans/http-ipc-compatibility-plan.md) - 项目README: [`../README.md`](../README.md)