8.9 KiB
DreamWeaver 前端 UI 重构任务列表
阶段一:基础设施(必须先完成)
TASK-001 [x]: 安装图标库
文件: frontend/package.json 操作: 安装 @heroicons/vue 图标库 命令: npm install @heroicons/vue 验收: 能在 Vue 组件中 import { SparklesIcon } from '@heroicons/vue/24/outline'
TASK-002 [x]: 扩展 Tailwind 配置
文件: frontend/tailwind.config.js 操作: 添加完整的设计系统配置 内容:
- 扩展 fontFamily 添加 sans: ['Noto Sans SC', ...]
- 扩展 borderRadius 添加 '2xl': '1rem', '3xl': '1.5rem'
- 扩展 boxShadow 添加 'glass': '0 8px 32px rgba(0,0,0,0.08)'
- 扩展 animation 添加 'float': 'float 3s ease-in-out infinite'
- 扩展 keyframes 添加 float 动画定义 验收: Tailwind 类 font-sans, rounded-3xl, shadow-glass, animate-float 可用
TASK-003 [x]: 精简全局样式
文件: frontend/src/style.css 操作:
- 删除 .animate-float (移至 Tailwind)
- 删除 .stars::before/after (移除 emoji 装饰)
- 保留 .glass, .btn-magic, .input-magic, .card-hover, .gradient-text
- 删除 --gradient-magic 变量(过于花哨) 验收: 文件行数减少约 30%,无 emoji 相关 CSS
阶段二:创建可复用组件
TASK-004 [x]: 创建 BaseButton 组件
文件: frontend/src/components/ui/BaseButton.vue 操作: 创建统一按钮组件 Props:
- variant: 'primary' | 'secondary' | 'danger' | 'ghost'
- size: 'sm' | 'md' | 'lg'
- loading: boolean
- disabled: boolean
- icon: Component (可选,Heroicon 组件) 样式规范:
- primary: 使用 .btn-magic 渐变
- secondary: bg-white border border-gray-200
- danger: bg-red-500 text-white
- ghost: bg-transparent hover:bg-gray-100 验收: 导出组件,支持 slot 内容和所有 props
TASK-005 [x]: 创建 BaseCard 组件
文件: frontend/src/components/ui/BaseCard.vue 操作: 创建统一卡片组件 Props:
- hover: boolean (是否启用悬浮效果)
- padding: 'none' | 'sm' | 'md' | 'lg' 样式: 使用 .glass + rounded-2xl + 可选 .card-hover 验收: 导出组件,支持默认 slot
TASK-006 [x]: 创建 BaseInput 组件
文件: frontend/src/components/ui/BaseInput.vue 操作: 创建统一输入框组件 Props:
- modelValue: string
- type: 'text' | 'password' | 'email' | 'number'
- placeholder: string
- label: string (可选)
- error: string (可选)
- disabled: boolean 样式: 使用 .input-magic + 错误状态红色边框 验收: 支持 v-model,显示 label 和 error
TASK-007 [x]: 创建 BaseSelect 组件
文件: frontend/src/components/ui/BaseSelect.vue 操作: 创建统一下拉选择组件 Props:
- modelValue: string | number
- options: Array<{ value: string | number, label: string }>
- label: string (可选)
- placeholder: string
- disabled: boolean 样式: 与 BaseInput 保持一致 验收: 支持 v-model,正确渲染 options
TASK-008 [x]: 创建 BaseTextarea 组件
文件: frontend/src/components/ui/BaseTextarea.vue 操作: 创建统一文本域组件 Props:
- modelValue: string
- placeholder: string
- rows: number
- maxLength: number (可选,显示字数统计)
- label: string (可选) 样式: 使用 .input-magic,右下角显示字数 验收: 支持 v-model,字数统计正确
TASK-009 [x]: 创建 LoadingSpinner 组件
文件: frontend/src/components/ui/LoadingSpinner.vue 操作: 创建统一加载动画组件 Props:
- size: 'sm' | 'md' | 'lg'
- text: string (可选,加载提示文字) 样式: 紫色渐变圆环旋转动画,无 emoji 验收: 三种尺寸正确渲染
TASK-010 [x]: 创建 EmptyState 组件
文件: frontend/src/components/ui/EmptyState.vue 操作: 创建统一空状态组件 Props:
- icon: Component (Heroicon)
- title: string
- description: string
- actionText: string (可选)
- actionTo: string (可选,路由路径) 样式: 居中布局,图标使用 Heroicon 而非 emoji 验收: 点击按钮正确跳转
TASK-011 [x]: 创建 ConfirmModal 组件
文件: frontend/src/components/ui/ConfirmModal.vue 操作: 创建统一确认弹窗组件 Props:
- show: boolean
- title: string
- message: string
- confirmText: string
- cancelText: string
- variant: 'danger' | 'warning' | 'info' Emits: confirm, cancel 样式: 使用 .glass 背景,Transition 动画 验收: 显示/隐藏动画流畅,事件正确触发
TASK-012 [x]: 创建组件导出索引
文件: frontend/src/components/ui/index.ts 操作: 统一导出所有 UI 组件 内容: export { default as BaseButton } from './BaseButton.vue' export { default as BaseCard } from './BaseCard.vue' // ... 其他组件 验收: 可以 import { BaseButton, BaseCard } from '@/components/ui'
阶段三:重构现有页面
TASK-013 [x]: 重构 NavBar 组件
文件: frontend/src/components/NavBar.vue 操作:
- 将 emoji ✨🌟📚🛠️🚪 替换为 Heroicons (SparklesIcon, StarIcon, BookOpenIcon, Cog6ToothIcon, ArrowRightOnRectangleIcon)
- 将 ?? 占位符替换为正确图标 (UserGroupIcon, GlobeAltIcon)
- 使用 BaseButton 替换登录按钮
- 移除 animate-float 和 animate-pulse 装饰动画 验收: 无 emoji,图标统一为 Heroicons,视觉更专业
TASK-014 [x]: 重构 Home.vue 页面
文件: frontend/src/views/Home.vue 操作:
- 删除 Hero 区域的浮动 emoji 装饰 (🌙⭐✨🌟)
- 将模式切换按钮的 emoji (✨📝) 替换为 Heroicons
- 将教育主题按钮的 emoji 替换为 Heroicons 或移除
- 使用 BaseButton 替换提交按钮
- 使用 BaseTextarea 替换文本输入区
- 使用 BaseSelect 替换档案/宇宙选择器
- 将 Features 区域的 emoji (🎨🔊📚) 替换为 Heroicons 验收: 页面无 emoji,使用统一组件,视觉简洁专业
TASK-015 [x]: 重构 MyStories.vue 页面
文件: frontend/src/views/MyStories.vue 操作:
- 使用 BaseButton 替换"创作新故事"按钮
- 使用 LoadingSpinner 替换自定义加载动画
- 使用 EmptyState 替换空状态区域(移除 📚✨🪄 emoji)
- 将错误状态的 😢 替换为 Heroicon ExclamationCircleIcon
- 将统计区域的 📖 替换为 Heroicon
- 使用 BaseCard 包装故事卡片 验收: 页面无 emoji,组件统一
TASK-016 [x]: 重构 StoryDetail.vue 页面
文件: frontend/src/views/StoryDetail.vue 操作:
- 使用 LoadingSpinner 替换加载动画
- 将 🎨 替换为 Heroicon PhotoIcon
- 将 🔊 替换为 Heroicon SpeakerWaveIcon
- 将 ✨ 替换为 Heroicon SparklesIcon
- 将 🗑️ 替换为 Heroicon TrashIcon
- 将 ⚠️ 替换为 Heroicon ExclamationTriangleIcon
- 使用 BaseButton 替换所有按钮
- 使用 ConfirmModal 替换删除确认弹窗 验收: 页面无 emoji,弹窗使用统一组件
TASK-017 [x]: 重构 AdminProviders.vue 页面
文件: frontend/src/views/AdminProviders.vue 操作:
- 移除 <style scoped> 中的所有自定义样式
- 登录表单使用 BaseCard + BaseInput + BaseButton
- Provider 表单使用 BaseCard + BaseInput + BaseSelect + BaseButton
- 表格使用 Tailwind 样式:divide-y divide-gray-200,hover:bg-gray-50
- 操作按钮使用 BaseButton variant="ghost"
- 整体布局使用 .glass 背景
- 添加页面标题使用 .gradient-text 验收: 与主应用风格一致,无原生 HTML 样式
TASK-018 [x]: 重构 ChildProfiles.vue 页面
文件: frontend/src/views/ChildProfiles.vue 操作:
- 检查并替换所有 emoji 为 Heroicons
- 使用 BaseButton, BaseCard, BaseInput 等统一组件
- 使用 EmptyState 处理空状态
- 使用 LoadingSpinner 处理加载状态 验收: 页面无 emoji,组件统一
TASK-019 [x]: 重构 ChildProfileDetail.vue 页面
文件: frontend/src/views/ChildProfileDetail.vue 操作: 同 TASK-018 验收: 页面无 emoji,组件统一
TASK-020 [x]: 重构 Universes.vue 页面
文件: frontend/src/views/Universes.vue 操作: 同 TASK-018 验收: 页面无 emoji,组件统一
TASK-021 [x]: 重构 UniverseDetail.vue 页面
文件: frontend/src/views/UniverseDetail.vue 操作: 同 TASK-018 验收: 页面无 emoji,组件统一
阶段四:优化与收尾
TASK-022 [x]: 添加深色模式支持(可选)
文件: frontend/tailwind.config.js, frontend/src/style.css 操作:
- 在 tailwind.config.js 添加 darkMode: 'class'
- 为 .glass, .btn-magic 等添加 dark: 变体
- 在 NavBar 添加主题切换按钮 验收: 点击切换按钮,整体配色切换
TASK-023 [x]: 添加 prefers-reduced-motion 支持
文件: frontend/src/style.css 操作: 为所有动画添加媒体查询 @media (prefers-reduced-motion: reduce) { .animate-float, .card-hover, .btn-magic { animation: none; transition: none; } } 验收: 系统设置"减少动态效果"时,动画停止
TASK-024 [x]: 性能优化 - 减少 backdrop-filter
文件: frontend/src/style.css 操作:
- 将 .glass 的 backdrop-filter: blur(20px) 改为 blur(10px)
- 移除嵌套 .glass 元素的 backdrop-filter 验收: 页面滚动更流畅,尤其在移动端
执行顺序建议
阶段一 (TASK-001 ~ 003) → 阶段二 (TASK-004 ~ 012) → 阶段三 (TASK-013 ~ 021) → 阶段四 (TASK-022 ~ 024)
每个任务完成后运行 npm run build 确保无类型错误。