一、整体布局与视觉设计
这个前端页面采用了清晰的三层结构设计:
顶部功能区:包含品牌标识和关键数据统计
中部操作区:提供生成/扩写双标签切换功能
底部结果区:展示AI生成的内容和操作选项
<div class="article-container">
<!-- Header -->
<div class="header">...</div>
<!-- 功能切换标签 -->
<div class="function-tabs">...</div>
<!-- 文章生成功能 -->
<transition name="fade" mode="out-in">...</transition>
<!-- 文章扩写功能 -->
<transition name="fade" mode="out-in">...</transition>
<!-- 生成结果显示 -->
<transition name="slide-up">...</transition>
<!-- 扩写结果显示 -->
<transition name="slide-up">...</transition>
</div>
视觉上采用了卡片式设计,每个功能模块都有明确的边界和阴影效果,营造出层次感。SVG图标的使用增强了界面的专业性和现代感。
二、核心功能实现
1. 双模式切换设计
通过标签页切换实现生成与扩写两种模式的分离:
data() {
return {
activeTab: 'generate', // 默认激活生成标签
// 其他数据...
}
}
这种设计既保持了功能的独立性,又避免了页面跳转带来的体验中断。Vue的transition
组件为切换过程添加了平滑的淡入淡出效果。
2. 文章生成功能
生成表单包含多个维度配置:
generateForm: {
title: '', // 文章标题
articleType: 'GENERAL', // 文章类型
articleStyle: 'GENERAL', // 文章风格
wordCount: 'MEDIUM', // 字数要求
conversationId: 1 // 对话ID
}
实现亮点在于流式响应处理,通过fetch API
和TextDecoder
实现实时内容更新:
const reader = response.body.getReader();
const decoder = new TextDecoder();
while (true) {
const { done, value } = await reader.read();
if (done) break;
const chunk = decoder.decode(value);
// 处理流式数据...
}
3. 文章扩写功能
扩写功能特别设计了内容对比视图,用户可以直观看到扩写前后的差异:
<div v-if="showComparison" class="comparison-container">
<div class="comparison-item">
<h4>原始内容</h4>
<div v-html="formatContent(expandForm.originalContent)"></div>
</div>
<div class="comparison-item">
<h4>扩写后内容</h4>
<div v-html="formatContent(expandedArticle)"></div>
</div>
</div>
三、交互细节设计
1. 状态反馈系统
设计了多层次的用户反馈机制:
加载状态:按钮显示旋转图标和"生成中..."文本
成功提示:绿色浮层带√图标,3秒后自动消失
错误提示:红色浮层带!图标,5秒后自动消失
showSuccess(message) {
this.successMessage = message;
setTimeout(() => {
this.successMessage = '';
}, 3000);
}
showError(message) {
this.errorMessage = message;
setTimeout(() => {
this.errorMessage = '';
}, 5000);
}
2. 内容格式处理
智能识别Markdown语法并转换为HTML:
formatContent(content) {
return content
.replace(/^## (.+)$/gm, '<h2>$1</h2>')
.replace(/^### (.+)$/gm, '<h3>$1</h3>')
.replace(/\n\n/g, '</p><p>')
// 更多替换规则...
}
3. 功能联动设计
实现了生成内容一键转入扩写的便捷操作:
useForExpand() {
this.expandForm.originalContent = this.generatedArticle;
this.activeTab = 'expand';
}
四、数据统计与持久化
使用localStorage实现了基础数据统计:
loadStats() {
this.generatedCount = parseInt(localStorage.getItem('generatedCount') || '0');
this.expandedCount = parseInt(localStorage.getItem('expandedCount') || '0');
}
// 在生成完成后
this.generatedCount++;
localStorage.setItem('generatedCount', this.generatedCount.toString());
五、设计思考与用户体验
渐进式披露:复杂选项默认隐藏,按需展示
即时反馈:按钮状态、加载指示器、完成提示形成完整反馈链
无障碍设计:所有交互元素都有明确的视觉状态
移动优先:响应式布局适应不同设备