# HZHub-Web 用户前端审查报告 > 审查时间:2026-03-26 > 项目路径:/data/hzhub-ai/hzhub-portal/ --- ## 一、项目概述 ### 1.1 基本信息 | 属性 | 内容 | |------|------| | 项目名称 | HZHub-Web | | 定位 | 企业级AI助手平台 - 用户前端 | | 技术栈 | Vue 3 + TypeScript + Element Plus X | | 构建工具 | Vite 6.x | | 包管理 | pnpm | ### 1.2 核心功能 - **AI对话**:多模型聊天、流式响应 - **知识库问答**:RAG检索、文档对话 - **工作流执行**:可视化流程运行 - **智能体交互**:Agent工具调用 - **多模态**:文本、图片、文件上传 --- ## 二、项目结构分析 ### 2.1 整体架构 ``` hzhub-portal/ ├── src/ │ ├── api/ # API接口定义 │ ├── assets/ # 静态资源 │ ├── components/ # 业务组件 │ │ ├── ModelSelect/ # 模型选择器 │ │ ├── FilesSelect/ # 文件选择器 │ │ ├── DeepThinking/ # 深度思考组件 │ │ ├── LoginDialog/ # 登录弹窗 │ │ └── ... │ ├── config/ # 配置文件 │ ├── constants/ # 常量定义 │ ├── hooks/ # Vue组合式函数 │ ├── layouts/ # 布局组件 │ │ ├── LayoutVertical/ # 垂直布局 │ │ └── LayoutMobile/ # 移动端布局 │ ├── pages/ # 页面视图 │ │ └── chat/ # 聊天页面 │ │ ├── index.vue # 入口 │ │ └── layouts/ # 聊天布局 │ │ ├── chatDefaul/ # 默认聊天 │ │ └── chatWithId/ # 指定会话聊天 │ ├── routers/ # 路由配置 │ ├── stores/ # Pinia状态管理 │ │ ├── modules/ # 状态模块 │ │ │ ├── chat.ts # 聊天状态 │ │ │ ├── model.ts # 模型状态 │ │ │ ├── session.ts # 会话状态 │ │ │ └── files.ts # 文件状态 │ │ └── index.ts │ ├── styles/ # 样式文件 │ ├── utils/ # 工具函数 │ ├── App.vue │ └── main.ts ├── package.json ├── vite.config.mts ├── uno.config.ts # UnoCSS配置 └── ... ``` ### 2.2 与Admin的差异 | 方面 | hzhub-admin | hzhub-portal | |------|-------------|-----------| | 架构 | Monorepo (多包) | Single Repo (单包) | | UI库 | Ant Design Vue | Element Plus X | | 样式 | Tailwind CSS | UnoCSS | | 目标用户 | 管理员 | 普通用户 | | 功能侧重 | 配置管理 | AI交互体验 | --- ## 三、技术栈详解 ### 3.1 核心框架 | 技术 | 版本 | 用途 | |------|------|------| | Vue | 3.5.17 | 前端框架 | | TypeScript | 5.8.3 | 类型系统 | | Vite | 6.0.0 | 构建工具 | | pnpm | latest | 包管理 | ### 3.2 UI组件库 | 组件库 | 说明 | |--------|------| | Element Plus | 基础UI组件 | | vue-element-plus-x | Element Plus扩展组件(Sender等) | | @element-plus/icons-vue | 图标库 | ### 3.3 状态与请求 | 库 | 用途 | |----|------| | Pinia | 状态管理 | | pinia-plugin-persistedstate | 状态持久化 | | vue-router | 路由管理 | | hook-fetch | HTTP请求封装 | ### 3.4 样式方案 | 技术 | 说明 | |------|------| | UnoCSS | 原子化CSS引擎 | | sass-embedded | SCSS预处理器 | --- ## 四、核心功能实现分析 ### 4.1 聊天组件架构 **核心组件**:vue-element-plus-x 的 Sender 组件 ``` 聊天页面 (pages/chat/index.vue) ↓ ├── 默认聊天 (chatDefaul/index.vue) │ └── Sender组件 + 欢迎页 └── 会话聊天 (chatWithId/index.vue) └── Sender组件 + 消息列表 ``` **Sender组件功能**: - 多行文本输入 - 文件上传(图片、文档) - 快捷操作(知识库选择、工作流选择) - 发送按钮 ### 4.2 模型选择器 (ModelSelect) **功能**: - 下拉选择AI模型 - 模型列表动态加载 - 默认模型自动设置 **实现**: ```vue ``` ### 4.3 文件选择器 (FilesSelect) **功能**: - 支持多文件上传 - 文件类型限制 - 上传进度显示 - 文件预览 ### 4.4 深度思考组件 (DeepThinking) **功能**: - 显示AI思考过程 - 流式内容展示 - 可折叠/展开 ### 4.5 状态管理设计 **模块划分**: ```typescript // stores/modules/chat.ts export const useChatStore = defineStore('chat', { state: () => ({ messages: [], // 消息列表 isLoading: false, // 加载状态 error: null, // 错误信息 }), actions: { async sendMessage(content) { ... }, async streamResponse(sessionId) { ... }, }, }); // stores/modules/session.ts export const useSessionStore = defineStore('session', { state: () => ({ sessions: [], // 会话列表 currentSession: null, }), actions: { async createSession() { ... }, async loadHistory(sessionId) { ... }, }, }); ``` --- ## 五、AI交互设计 ### 5.1 流式响应处理 ```typescript // 使用EventSource接收SSE流 const eventSource = new EventSource(`/api/chat/stream?sessionId=${id}`); eventSource.onmessage = (event) => { const data = JSON.parse(event.data); // 处理流式内容 chatStore.appendMessage(data); }; ``` ### 5.2 工作流执行 **流程**: 1. 选择工作流 2. 输入参数 3. 执行工作流 4. 接收流式结果 **代码示例**: ```vue ``` ### 5.3 知识库选择 **功能**: - 弹窗选择知识库 - 多知识库支持 - 知识库搜索 --- ## 六、HZHub借鉴点 ### 6.1 架构设计借鉴 | 方面 | HZHub-Web实践 | HZHub应用 | |------|---------------|-----------| | 单包架构 | 简单清晰,适合用户端 | hzhub-portal采用同样结构 | | 组件封装 | ModelSelect、FilesSelect等 | 复用或参考实现ERP组件 | | 状态管理 | Pinia模块化 | 复用状态管理方案 | | 流式响应 | EventSource + SSE | 复用AI聊天流式处理 | ### 6.2 功能复用建议 **可直接复用**: - 模型选择器组件 - 文件上传组件 - 流式响应处理逻辑 - 登录弹窗组件 **需要改造**: - AI聊天 → ERP智能助手对话 - 知识库选择 → ERP文档选择 - 工作流执行 → ERP业务流程执行 ### 6.3 hzhub-portal推荐结构 ``` hzhub-portal-company/ # 公司门户 ├── src/ │ ├── components/ │ │ ├── ErpQueryBuilder/ # ERP查询构建器 │ │ ├── DocSelector/ # 文档选择器 │ │ └── AiChatEmbed/ # AI聊天嵌入组件 │ ├── pages/ │ │ ├── dashboard/ # 工作台 │ │ ├── approval/ # 审批流程 │ │ ├── crm/ # 销售CRM │ │ └── ai/ # AI助手 │ └── stores/ │ └── modules/ │ ├── erp.ts # ERP状态 │ └── ai.ts # AI状态 hzhub-portal-dealer/ # 经销商门户 ├── src/ │ ├── components/ │ │ ├── OrderForm/ # 开单表单 │ │ ├── InventoryQuery/ # 库存查询 │ │ └── AiMaterialGen/ # AI素材生成 │ └── pages/ │ ├── order/ # 自助开单 │ ├── inventory/ # 进销存 │ └── material/ # 营销素材 ``` --- ## 七、开发环境配置 ### 7.1 环境变量 ``` .env.development .env.production 关键配置: - VITE_API_BASE_URL:后端API地址 ``` ### 7.2 启动命令 ```bash # 安装依赖 pnpm install # 开发模式 pnpm dev # 生产构建 pnpm build # 代码检查 pnpm lint ``` --- ## 八、技术风险与建议 ### 8.1 已知风险 | 风险 | 说明 | 建议 | |------|------|------| | Element Plus X版本 | vue-element-plus-x 1.3.0较新 | 关注API稳定性 | | UnoCSS配置 | 与Tailwind CSS不同 | 团队需要学习成本 | | 单包架构 | 代码量大时维护困难 | 考虑后期拆分为monorepo | ### 8.2 集成建议 1. **复用组件**:直接复用ModelSelect、FilesSelect等组件 2. **改造聊天**:将AI聊天改为ERP智能助手对话 3. **统一风格**:保持与公司门户UI风格一致 4. **状态隔离**:公司门户和经销商门户状态独立 --- ## 九、总结 ### 9.1 核心收获 1. **架构简洁**:单包架构,适合用户端快速开发 2. **组件丰富**:vue-element-plus-x提供AI交互专用组件 3. **流式处理成熟**:SSE流式响应处理完善 4. **状态管理清晰**:Pinia模块化,易于维护 ### 9.2 下一步行动 1. 复用 `hzhub-portal` 的组件和模式 2. 改造AI聊天为ERP智能助手对话 3. 开发公司门户和经销商门户 4. 集成AI能力到业务流程中 --- **审查完成时间**:2026-03-26 09:00 UTC **审查人**:大壮