# YGChatCS Vue3 Web 技术栈改造计划
## 文档状态
- 状态:规划中
- 日期:2026-05-25
- 目标技术栈:Vue 3 + Pinia + TypeScript + Tailwind CSS + Vite
- 当前技术栈:uni-app 3 + Vue 3 + Pinia + SCSS + Vite
## 背景
当前项目是基于 uni-app 的多端应用,配置重点面向微信小程序,业务核心是酒店/文旅场景的 AI 聊天助手,并包含发现内容、商品/房型详情、订单、工单服务、快捷预订、WebView 桥接等模块。
本次改造目标是逐步抛弃 uni-app 技术栈,转向标准 Vue3 Web 技术栈。由于项目中大量能力依赖 `uni.*` 运行时 API、uni 页面生命周期、`pages.json` 路由配置、小程序专属能力和 uni 组件标签,不能采用一次性全量替换。推荐采用“新 Web 工程并行建设 + 功能分阶段迁移 + 旧项目作为回归基线”的方式,降低代码缺失和功能缺失风险。
## 改造原则
1. 旧项目先保持可运行,作为行为基线和回归对照。
2. 新 Vue3 Web 工程并行建设,优先迁移基础设施,再迁移业务页面。
3. 每个阶段都必须有可验证产物,避免长期处于不可运行状态。
4. 迁移按业务闭环纵向切片,不按“所有组件一次性搬完”的横向方式推进。
5. 先封装平台适配层,再逐步替换页面中的 `uni.*` 调用。
6. 微信小程序专属能力必须单独评估 Web/H5 替代方案,不能默认等价迁移。
7. TypeScript 类型补齐随迁移同步推进,不把 JS 全量机械改名为 TS 后再补类型。
## 当前项目关键依赖面
### 入口与配置
- `src/main.js`:创建 uni-app Vue 应用,注册 Pinia 和 `pinia-plugin-unistorage`。
- `src/App.vue`:应用生命周期,负责服务地址初始化、token 刷新、网络恢复重载。
- `src/pages.json`:uni-app 页面、分包和页面样式配置。
- `src/manifest.json`:小程序 appid、权限、插件和平台配置。
- `vite.config.js`:当前依赖 `@dcloudio/vite-plugin-uni`。
### 核心业务模块
- `src/pages/ChatMain/ChatMainList/index.vue`:聊天主流程,包含消息列表、WebSocket 初始化、消息发送、工具卡渲染和滚动控制。
- `src/request/api/AgentChatStream.js`:微信小程序分块/流式请求封装,依赖 `uni.request({ enableChunked: true })`。
- `src/utils/WebSocketManager.js`:跨端 WebSocket 管理器,当前优先使用 `uni.connectSocket`。
- `src/request/base/request.js`:统一请求封装,依赖 `uni.request`、token、客户端配置和位置请求头。
- `src/manager/LoginManager.js`、`src/hooks/useGoLogin.js`:登录、刷新 token、跳转登录、登录成功事件。
- `src/pages/goods/`、`src/pages-booking/`、`src/pages-order/`、`src/pages-service/`:商品、预订、订单和工单业务链路。
### 高风险 uni 能力
| 当前能力 | 使用场景 | Web 改造方向 | 风险 |
| -------------------------------------- | ------------------- | -------------------------------- | ---- |
| `uni.navigateTo/reLaunch/navigateBack` | 页面跳转 | Vue Router 服务封装 | 中 |
| `uni.request/uploadFile` | HTTP 请求、文件上传 | `fetch` 或 Axios + 上传封装 | 中 |
| `uni.$emit/$on/$off` | 跨组件事件 | `mitt` 或 typed event bus | 中 |
| `uni.showToast/showModal/showLoading` | 用户反馈 | UI 组件库或自研反馈服务 | 低 |
| `uni.connectSocket` | AI 聊天实时通信 | 浏览器原生 `WebSocket` | 高 |
| `uni.request enableChunked` | AI 流式回复 | `fetch + ReadableStream` 或 SSE | 高 |
| `uni.login` | 微信登录 | 微信 Web 授权或后端 H5 登录方案 | 高 |
| `uni.requestPayment` | 支付 | 微信 JS-SDK/H5 支付/后端支付跳转 | 高 |
| `uni.chooseImage` | 图片选择上传 | `` + 上传服务 | 中 |
| `uni.saveImageToPhotosAlbum` | 保存图片 | 浏览器下载能力,移动端受限 | 中 |
| `uni.getLocation/openLocation` | 定位和地图 | Geolocation API + 地图 URL/SDK | 中 |
| `uni.createSelectorQuery` | 尺寸测量 | DOM API、ResizeObserver | 中 |
| `uni.onKeyboardHeightChange` | 输入框键盘适配 | 视口监听、CSS env、安全区适配 | 高 |
| `///` | 页面模板 | HTML 标签或基础组件替换 | 中 |
| `` | 内嵌页面 | `iframe` + `postMessage` 协议 | 中 |
| `