🎉 限时特惠活动公告、获取优惠码、最高立减3200元
| 技术 | 版本 | 说明 |
|---|---|---|
| 框架 | Nuxt 3 | ^3.5.1 |
| UI 库 | Element Plus | ^2.3.6 |
| 样式 | Tailwind CSS + SCSS | ^6.7.0 |
| 状态管理 | Pinia | ^2.0.23 |
| 语言 | TypeScript | ^4.8.4 |
| 包管理 | pnpm | 9.15.4 |
| Markdown | markdown-it | ^13.0.1 |
| 代码高亮 | highlight.js | ^11.8.0 |
| 思维导图 | markmap | ^0.15.x |
default.vue (默认布局)
├── LayoutAside (左侧边栏)
│ ├── Sidebar (导航菜单)
│ └── Panel (可扩展面板)
├── LayoutHeader (顶部栏)
│ ├── 公告通知
│ └── User (用户信息)
├── LayoutMain (主内容区)
│ ├── mainLeft 插槽 (会话列表)
│ ├── 默认插槽 (页面内容)
│ └── mainRight 插槽 (右侧面板)
└── LayoutAccount (登录弹窗)layouts/default.vue<el-container class="layout-default">
<el-aside width="auto">
<LayoutAside>
<Sidebar />
</LayoutAside>
</el-aside>
<el-container>
<el-header height="auto">
<LayoutHeader />
</el-header>
<el-main class="scrollbar">
<LayoutMain>
<slot name="mainLeft" />
<slot />
<slot name="mainRight" />
</LayoutMain>
</el-main>
</el-container>
<LayoutAccount v-if="userStore.showLogin" />
</el-container>layouts/
├── default.vue # 默认布局 (带底部)
├── app.vue # 应用布局 (无底部)
├── blank.vue # 空白布局
├── up_down.vue # 上下布局
└── components/
├── aside/ # 侧边栏组件
├── header/ # 顶部栏组件
├── main/ # 主内容区组件
├── footer/ # 底部组件
├── account/ # 登录账号组件
├── notice/ # 通知组件
├── menu/ # 菜单组件
└── navbar/ # 导航栏组件pages/
├── chat/ # 聊天模块
│ ├── index.vue # 主聊天页面
│ └── _components/ # 聊天子组件
├── app/ # 应用中心
│ ├── index.vue # 应用首页
│ ├── drawing/ # AI 绘画
│ ├── mind_map/ # 思维导图
│ ├── qrcode/ # 二维码生成
│ └── square/ # 应用广场
├── create/ # AI 创作
│ ├── index.vue
│ └── produce.vue
├── skill/ # 技能广场
│ └── index.vue
├── user/ # 用户中心
│ ├── info.vue # 个人信息
│ ├── collection.vue # 我的收藏
│ └── opinion.vue # 意见反馈
├── recharge/ # 充值中心
├── openvip/ # 开通会员
├── promotion/ # 推广中心
├── redeem_code/ # 兑换码
├── policy/ # 协议政策
├── news/ # 新闻资讯
├── introduce/ # 介绍页面
└── index/ # 首页相关| 路由路径 | 页面文件 | 功能说明 |
|---|---|---|
/ | pages/chat/index.vue | 主聊天页面 |
/create | pages/create/index.vue | AI 创作 |
/skill | pages/skill/index.vue | 技能广场 |
/app | pages/app/index.vue | 应用中心 |
/app/drawing | pages/app/drawing/index.vue | AI 绘画 |
/app/mind_map | pages/app/mind_map/index.vue | 思维导图 |
/app/qrcode | pages/app/qrcode/index.vue | 二维码生成 |
/app/square | pages/app/square/index.vue | 应用广场 |
/user/info | pages/user/info.vue | 个人信息 |
/user/collection | pages/user/collection.vue | 我的收藏 |
/user/opinion | pages/user/opinion.vue | 意见反馈 |
/recharge | pages/recharge/index.vue | 充值中心 |
/openvip | pages/openvip/index.vue | 开通会员 |
/promotion | pages/promotion/index.vue | 推广中心 |
/redeem_code | pages/redeem_code/index.vue | 兑换码 |
pages/chat/index.vue
├── NuxtLayout (default 布局)
│ ├── TheSession (会话列表) [mainLeft 插槽]
│ │ ├── Item (会话项)
│ │ │ ├── 会话名称
│ │ │ ├── 编辑按钮
│ │ │ └── 删除按钮
│ │ └── ElScrollbar (滚动容器)
│ ├── Chatting (聊天输入区)
│ │ ├── ChatMsgItem (消息项) × N
│ │ │ ├── ChatContent (内容渲染)
│ │ │ ├── 头像
│ │ │ ├── 时间戳
│ │ │ ├── 操作按钮 (复制/收藏/海报)
│ │ │ └── 加载状态指示器
│ │ ├── ModelPicker (模型选择器)
│ │ ├── Plugins (插件选择)
│ │ └── 输入框组件
│ ├── ProblemExample (问题示例)
│ └── TheGuidedPopup (引导弹窗)components/
├── ali-pay-code/ # 支付宝支付码
├── apply-distribution/ # 申请分销
├── chat-content/ # 聊天内容渲染
├── chat-msg-item/ # 聊天消息项
├── chatting/ # 聊天输入核心组件
│ ├── chatting.vue # 主组件
│ ├── dialog-poster.vue # 对话海报
│ ├── model-picker.vue # 模型选择器
│ └── plugins.vue # 插件选择
├── cropper-upload/ # 裁剪上传
├── daterange-picker/ # 日期范围选择
├── drop-down/ # 下拉菜单
├── dropdown-more/ # 更多下拉
├── empty-com/ # 空状态组件
├── form-designer/ # 表单设计器
├── icon/ # 图标组件
├── image-contain/ # 图片容器
├── income-detail/ # 收入详情
├── information/ # 信息展示
├── l-textarea/ # 文本域组件
├── markdown/ # Markdown 渲染器
├── network-switch/ # 联网切换
├── overflow-tooltip/ # 溢出提示
├── pagination/ # 分页组件
├── payment/ # 支付组件
├── popover-input/ # 弹出输入框
├── popup/ # 弹窗组件
├── price/ # 价格显示
├── sidebar/ # 侧边导航
├── the-create/ # 创作组件
├── the-guided-popup/ # 引导弹窗
├── the-session/ # 会话管理
├── upload/ # 上传组件
├── upload-file/ # 文件上传
├── verification-code/ # 验证码
├── waterfall/ # 瀑布流
├── withdrawalDetail/ # 提现详情
└── wx-pay-code/ # 微信支付码rounded-[15px] (聊天容器)rounded-[8px] (按钮/卡片)rounded-[4px] (输入框)px-[16px] / px-[30px]gap-[12px] / gap-[20px]py-[20px] / px-[40px]<!-- 典型布局结构 -->
<div class="flex flex-1 min-h-0">
<div class="flex-none">左侧固定</div>
<div class="flex-1 min-w-0">中间自适应</div>
<div class="flex-none">右侧固定</div>
</div>ElScrollbar 自定义滚动条padding-bottom: env(safe-area-inset-bottom)用户输入
↓
contentPost(userInput)
↓
1. 检查登录状态
2. 检查会话是否存在,不存在则创建
3. 添加用户消息到 contentList
4. 添加空白的 AI 回复占位 (loading 状态)
↓
chatSendText() - SSE 流式请求
↓
onstart: 获取 ReadableStream 阅读器
onmessage: 解析增量数据 (incremental)
- event === 'error': 错误处理
- event === 'reasoning': 深度思考内容
- event === 'finish': 流结束
↓
onclose:
- 更新聊天记录 getChatList(true)
- 滚动到底部 scrollToBottom()
- 更新用户信息 userStore.getUser()TheSession 组 件
├── sessionAdd() - 新建会话
├── sessionEdit(id, name) - 重命名会话
├── sessionDelete(id) - 删除会话
├── sessionClear() - 清空所有会话
└── handleTop() - 上拉加载历史记录stores/
├── app.ts # 应用配置、公告配置
├── setting.ts # 用户设置
├── theme.ts # 主题配置
└── user.ts # 用户信息、Token、登录状态api/
├── account.ts # 账户相关 (登录/注册)
├── chat.ts # 聊天相关
├── drawing.ts # 绘画相关
├── user.ts # 用户相关
├── pay.ts # 支付相关
├── skill.ts # 技能相关
├── upload.ts # 上传相关
└── ...api/chat.ts)| 接口 | 方法 | 说明 |
|---|---|---|
getchatLog(params) | GET | 获取聊天记录 |
getChat(params) | POST | 聊天接口 (非流式) |
chatSendText(params, config) | POST | 发送消息 (SSE 流式) |
samplesLists(params) | GET | 问题示例列表 |
cleanChat(params) | POST | 清除会话 |
cleanContext(params) | POST | 清除上下文 |
collectRecords(params) | POST | 收藏会话 |
getChatModelApi() | GET | 获取模型列表 |
api/drawing.ts)| 接口 | 方法 | 说明 |
|---|---|---|
drawing(params) | POST |