# baodanppt 集成计划 > **目标**:在现有保险智能客服系统中集成 baodanppt(PPT 生成)功能 > **日期**:2026-07-23 --- ## 一、现状分析 ### 1.1 三个系统的技术栈 | 系统 | 技术栈 | 端口 | 入口 | |------|--------|------|------| | **Flask API** | Python Flask + SQLAlchemy | 5001 | `api/insurance/app.py` | | **Vue 前端** | Vue 3 + TypeScript + Element Plus + Vite | 9080 | `frontend/src/App.vue` | | **baodanppt** | Bun + TypeScript + 原生 HTML/JS | 3000 | `baodanppt/src/api/server.ts` | ### 1.2 baodanppt 前端特点 - **独立 SPA**:纯 HTML/JS,无框架依赖,运行在 `http://localhost:3000` - **4 步流程**:上传 → 解析 → 生成 → 结果 - **API 调用**:所有接口以 `/api/` 开头,调用自己的 Bun 后端 - **静态文件**:前端代码在 `baodanppt/public/` 目录 ### 1.3 现有前端结构 ``` frontend/src/ ├── App.vue # 布局 + 侧边栏导航 ├── router/index.ts # Vue Router 路由定义 ├── pages/ # 页面组件 ├── components/ # 公共组件 ├── composables/ # 组合式函数 └── utils/api.ts # Axios 实例 (baseURL: /insurance) ``` 侧边栏导航在 `App.vue` 中,分两个区域: - **功能菜单**:智能问答(/chat)、产品推荐(已注释) - **系统管理**:管理首页、用户管理、权限管理等(需 admin 权限) --- ## 二、集成方案 ### 推荐方案:iframe 嵌入 + API 代理 **理由**: 1. baodanppt 前端是独立的原生 JS SPA,**不适合重写为 Vue 组件**(工作量巨大且无收益) 2. iframe 嵌入是**最小改动方案**:只需创建一个 Vue 包装页面 + 代理 API 请求 3. 两个系统的 UI 风格差异大(Element Plus vs 原生 Tailwind),iframe 天然隔离样式冲突 ### 架构图 ``` 用户浏览器 │ ▼ ┌─ Vue 前端 (port 9080) ─────────────────────────┐ │ App.vue 侧边栏 │ │ ├── /chat → ChatPage.vue │ │ ├── /ppt → PptPage.vue (iframe) │ │ └── /admin/* → 管理页面 │ │ │ │ Vite 代理: │ │ /insurance/* → Flask API (5001) │ │ /ppt-api/* → baodanppt Bun (3000) │ └───────────────────────────────────────────────────┘ ``` --- ## 三、详细实施步骤 ### 步骤 1:启动 baodanppt 后端服务 baodanppt 的 Bun 后端需要作为常驻服务运行。 **文件**:`baodanppt/src/api/server.ts`(已有,不需修改) **启动命令**: ```bash cd baodanppt && bun run src/api/server.ts # 监听 port 3000 ``` **修改**:将 baodanppt 端口改为非冲突端口(如 3001),或通过环境变量控制: ```bash PORT=3001 bun run src/api/server.ts ``` ### 步骤 2:配置 Vite 代理 **文件**:`frontend/vite.config.ts` 新增一条代理规则,将 `/ppt-api/` 请求转发到 baodanppt 后端: ```typescript // 在现有 proxy 配置中新增 '/ppt-api': { target: 'http://localhost:3001', changeOrigin: true, rewrite: (path) => path.replace(/^\/ppt-api/, ''), } ``` 这样前端访问 `/ppt-api/upload` 会被代理到 `http://localhost:3001/upload`。 ### 步骤 3:创建 PptPage.vue 包装组件 **文件**:`frontend/src/pages/PptPage.vue`(新建) ```vue