2025-10-21
问题: 口令太长(64位hex),显示不美观
解决: 自动格式化长口令,显示前8位 + ... + 后8位
const formatCode = (fullCode: string) => {
if (fullCode.length <= 16) {
return fullCode; // 短口令直接显示
}
const start = fullCode.substring(0, 8);
const end = fullCode.substring(fullCode.length - 8);
return `${start}...${end}`; // 长口令显示前后部分
};完整口令: 01b36d2bc63a800e033b961662bb14376a0c458922b25542d72e36e1dd2d3821
格式化后: 01b36d2b...dd2d3821
新增功能: 点击"Copy"按钮复制完整口令
- ✅ 使用现代Clipboard API
- ✅ 自动降级到传统document.execCommand
- ✅ 复制成功后显示"已复制"提示(2秒)
- ✅ 带动画效果的状态切换
- ✅ 支持所有浏览器
const copyToClipboard = async (text: string) => {
try {
// 优先使用现代API
await navigator.clipboard.writeText(text);
setCopySuccess(true);
setTimeout(() => setCopySuccess(false), 2000);
} catch (err) {
// 降级方案:使用传统方法
const textArea = document.createElement("textarea");
textArea.value = text;
textArea.style.position = "fixed";
textArea.style.left = "-999999px";
document.body.appendChild(textArea);
textArea.select();
document.execCommand("copy");
document.body.removeChild(textArea);
setCopySuccess(true);
setTimeout(() => setCopySuccess(false), 2000);
}
};┌─────────────────────────────────────────┐
│ 口令: │
│ ┌───────────────────────────────────┐ │
│ │ 01b36d2b...dd2d3821 [Copy] │ │
│ └───────────────────────────────────┘ │
│ 请分享这个口令给朋友... │
└─────────────────────────────────────────┘
┌─────────────────────────────────────────┐
│ 0.01 Pi [Claim Back] │
│ 状态: ✅ 已领取 │
│ 过期时间: 2025/10/21 19:10:56 │
│ 领取者: 0xJeff │
│ ──────────────────────────────────── │
│ 口令: │
│ ┌───────────────────────────────────┐ │
│ │ 01b36d2b...dd2d3821 [Copy] │ │
│ └───────────────────────────────────┘ │
└─────────────────────────────────────────┘
- 主背景:
#131519- 深色卡片背景 - 口令容器:
#1e2126- 稍浅的背景突出口令 - 边框:
#32363e- 灰色边框分隔 - 文字颜色:
- 口令:
#ffffff(白色) - 最突出 - 标签:
#8d8f99(灰色) - 次要信息
- 口令:
- ✅ 悬停效果: Copy按钮hover时透明度变化
- ✅ 状态反馈: 复制成功显示绿色勾号和"已复制"
- ✅ 视觉一致性: 使用项目统一的渐变色
- ✅ Tooltip提示: 鼠标悬停显示完整口令
- ✅ 灵活布局(flex布局)
- ✅ Copy按钮不会换行(flex-shrink-0)
- ✅ 口令文本自动换行(break-all)
- ✅ 合适的间距和padding
- ✅ 最大宽度限制(max-w-md)
- ✅ 居中显示
- ✅ 清晰的视觉层次
background: linear-gradient(to right, #a625fc, #f89318);- 从紫色 (#a625fc) 到橙色 (#f89318)
- 符合项目整体设计风格
- 默认: 紫橙渐变
- 已复制: 同样渐变(保持一致性)
- 悬停: 90%透明度
- ✅
app/red-envelope/page.tsx
- formatCode(): 格式化长口令
- copyToClipboard(): 复制到剪贴板
- copySuccess state: 追踪复制状态
- 无(使用原生浏览器API)
口令显示:
- 完整64位字符串
- 占用大量空间
- 难以阅读
- 无法快速复制
口令显示:
- 格式化显示 (8...8)
- 紧凑美观
- 易于阅读
- 一键复制
- 完整口令tooltip
- 更整洁: 格式化后的口令不占用太多空间
- 更清晰: 深浅背景层次分明
- 更专业: 设计符合现代UI标准
- 更方便: 一键复制,无需手动选择
- 更快速: 点击即复制,2秒后自动恢复
- 更友好: 明确的状态反馈
- 鼠标悬停: 显示完整口令
- 复制反馈: 视觉和文字双重确认
- 兼容性: 支持所有浏览器
- 创建一个红包
- 查看口令显示(应为格式化)
- 鼠标悬停(应显示完整口令tooltip)
- 点击Copy按钮
- 验证:
- ✅ 按钮显示"已复制"和勾号
- ✅ 剪贴板包含完整口令
- ✅ 2秒后恢复"Copy"显示
- 进入"我的红包"
- 重复步骤3-5
复制图标:两个重叠的文档勾号图标:表示成功✅ ESLint: 通过
✅ TypeScript: 通过
✅ 功能测试: 正常
✅ 视觉检查: 美观
✅ 交互测试: 流畅- formatCode 函数: 6行
- copyToClipboard 函数: 23行
- UI组件更新: ~40行
- 总计: ~70行新代码
- 创建成功提示(口令显示)
- 我的红包列表(口令显示)
- ✅ 8位足够识别口令的独特性
- ✅ 保持合理的长度,不会太短也不会太长
- ✅ 16位总长度(包括省略号)易于阅读
- ✅ 让用户可以看到完整口令
- ✅ 不占用额外空间
- ✅ 符合用户习惯
- ✅ 符合项目整体设计
- ✅ 突出重要操作
- ✅ 视觉吸引力
本次UI改进在不影响功能的前提下,显著提升了口令红包的用户体验:
- ✅ 视觉更美观: 格式化显示,层次分明
- ✅ 操作更便捷: 一键复制,状态反馈
- ✅ 设计更专业: 符合现代UI标准
- ✅ 兼容性良好: 支持所有浏览器
- ✅ 响应式设计: 适配移动端和桌面端
现在口令红包的界面更加完善和专业了! 🎊
更新人员: AI Assistant
更新日期: 2025-10-21
影响范围: 口令显示UI
功能状态: ✅ 完全正常
部署状态: ✅ 可以部署