AI.Demo/.codebuddy/plans/ai-essay-correction_fbf012f...

7.0 KiB
Raw Permalink Blame History

name overview design todos
ai-essay-correction 新增 AI 作文原图批改页面EssayCorrection.vue用户上传英语作文图片调用批改 API将返回的批改结果图片渲染到页面上并在首页卡片中接入路由。
architecture styleKeywords fontSystem colorSystem
framework
vue
Glassmorphism
深色背景
粉色渐变主题
卡片式布局
微动画
对比展示
fontFamily heading subheading body
PingFang SC
size weight
1.5rem 600
size weight
1rem 500
size weight
0.95rem 400
primary background text functional
#ec4899
#db2777
rgba(255,255,255,0.03)
rgba(255,255,255,0.06)
#f8fafc
#94a3b8
#ef4444
#22c55e
rgba(236,72,153,0.3)
id content status
create-essay-correction-page 新建 src/views/EssayCorrection.vue实现图片上传、Base64转换、API调用、结果对比展示及状态管理 completed
id content status dependencies
wire-router-and-homepage 修改 src/router/index.js 新增路由,并更新 HomePage.vue 中 card-3 的 route 为 '/essay-correction' completed
create-essay-correction-page

用户需求

新增一个"AI作文原图批改"功能页面,用户上传英语作文图片后,系统调用指定 API 对图片进行智能批改,并将批改后的结果图片展示在页面上。

产品概述

在现有 AI 英语学习辅助平台中,新增作文批改页面(路由 /essay-correction),与首页卡片联动。用户上传手写英语作文图片,系统将图片转为 Base64 后调用批改 API等待返回批改后的图片 URL最终在页面上对比展示原图与批改结果图。

核心功能

  • 图片上传支持点击选择或拖拽上传图片文件JPG/PNG上传后预览原图
  • API 调用:将图片转为 Base64携带固定提示词调用 POST https://grsai.dakka.com.cn/v1/draw/nano-banana 接口
  • 批改结果展示:接口返回后,将批改结果图片渲染到页面,支持与原图对比查看
  • 状态反馈:上传中、批改中、批改完成、批改失败等状态的加载动画与提示
  • 重新批改:支持清空结果、重新上传图片进行新一轮批改
  • 返回首页:顶部导航栏提供返回按钮,风格与 Speaking.vue 保持一致

技术栈

  • 框架Vue 3 (Composition API <script setup>) + Vite与现有项目完全一致
  • 路由Vue Router新增 /essay-correction 路由
  • 样式Scoped CSS复用现有 CSS 变量(--card-bg--card-border--accent-1--text-primary--text-secondary)和深色玻璃拟态风格
  • HTTP 请求:原生 fetch API与现有项目保持一致无额外依赖

实现方案

核心流程

  1. 用户选择/拖拽图片 → FileReader 读取为 Base64 字符串 → 预览原图
  2. 点击"开始批改" → 构造请求体Base64 放入 urls 数组)→ fetch POST 请求
  3. 接收响应 → 解析返回的图片 URL → <img> 标签渲染批改结果
  4. 错误处理网络异常、API 错误码、图片加载失败均给出友好提示

API 请求参数设计

prompt: "请对这篇英语作文进行批改,标注语法错误、拼写错误和表达不当之处,并给出修改建议"
model: "nano-banana-pro"
aspectRatio: "auto"
imageSize: "1K"
shutProgress: true
webHook: ""

关键技术决策

  • Base64 转换:使用 FileReader.readAsDataURL() 读取图片,截取 base64, 后的纯 Base64 字符串传入 urls 数组
  • 图片大小限制:前端限制上传图片不超过 10MB避免 Base64 字符串过大导致请求失败
  • 响应结构处理API 返回结构待运行时确认,优先尝试 response.dataresponse.urlresponse.imageUrl 等常见字段,并做防御性处理
  • 加载状态:批改期间禁用上传和提交按钮,显示旋转动画,防止重复提交

架构设计

graph TD
    A[HomePage.vue card-3] -->|router.push| B[/essay-correction]
    B --> C[EssayCorrection.vue]
    C --> D[图片上传区域]
    C --> E[批改控制区]
    C --> F[结果展示区]
    D -->|FileReader| G[Base64转换]
    G --> E
    E -->|fetch POST| H[nano-banana API]
    H -->|返回图片URL| F

目录结构

src/
├── views/
│   └── EssayCorrection.vue   # [NEW] AI作文批改页面主组件
│                               # 包含:图片上传(拖拽/点击)、原图预览、
│                               # API调用逻辑、批改结果图片展示、
│                               # 状态管理idle/uploading/processing/done/error、
│                               # 返回导航栏风格与Speaking.vue保持一致
└── router/
    └── index.js              # [MODIFY] 新增 /essay-correction 路由,
                              # import EssayCorrection 并添加到 routes 数组

src/views/HomePage.vue        # [MODIFY] 将 features 数组中 id:3 的 card-3
                              # route 字段从 null 改为 '/essay-correction'

实现注意事项

  • CSS 变量复用Speaking.vue 中使用了 var(--card-bg)var(--accent-1) 等全局 CSS 变量EssayCorrection.vue 同样直接使用,无需重复定义
  • 图片展示布局:批改完成后采用左右对比布局(原图 / 批改结果),移动端降级为上下堆叠
  • 文件类型校验accept 限制为 image/jpeg,image/png,image/jpg,并在 JS 层二次校验 MIME 类型
  • Authorization 配置API Key 以常量形式定义在组件顶部,与现有项目中 API Key 的管理方式保持一致

设计风格

延续现有项目的深色玻璃拟态Glassmorphism风格与 Speaking.vue 保持视觉一致性。

页面布局(从上到下)

顶部导航栏 左侧返回按钮(箭头图标 + "返回"文字),中间标题"AI 作文原图批改",风格与 Speaking.vue 的 .nav-bar 完全一致。

上传区域 居中大卡片,虚线边框(rgba(236,72,153,0.3),对应 card-3 的粉色主题),内含上传图标、"点击或拖拽上传作文图片"提示文字、支持格式说明。拖拽悬停时边框高亮为粉色渐变,背景微亮。上传后区域缩小为原图预览缩略图,右上角显示"重新上传"按钮。

操作区 "开始批改"主按钮,使用 card-3 的粉色渐变(#ec4899 → #db2777),宽度自适应,批改中显示旋转加载动画 + "批改中..."文字,禁用状态半透明。

结果展示区 批改完成后以左右对比卡片展示:左侧"原图"、右侧"批改结果",每张图片下方有标签说明。图片以 object-fit: contain 填充,支持点击放大查看(简单 overlay 实现)。移动端改为上下排列。

错误提示 红色半透明提示条,显示错误信息,可手动关闭。