移动端收益记录页面设计:渐变色彩主题与搜索卡片布局

By 17749922376, 16 April, 2026
推理
用户需要设计一个移动端的收益记录页面,要求有搜索功能和卡片展示功能。主题颜色是橘红色、橙色为主,蓝色、绿色为辅。需要使用Font Awesome图标,路径是/static/icons。需要获取设计系统推荐来指导设计方向。首先调用设计系统工具。设计系统推荐了Minimalism风格,但用户要求高亮鲜艳的颜色。需要调整设计方向,使其更符合用户对鲜艳颜色的要求。接下来需要思考内部设计决策。

**内部思考阶段:**

1. **需求分析**:这是一个移动端收益记录页面,用户需要查看自己的收益来源。目标用户可能是普通用户,需要清晰的收益记录展示和搜索功能。隐含功能包括复制交易编号、筛选收益类型等。

2. **设计决策**:
- 美学方向:采用鲜艳的渐变色彩,以橘红色和橙色为主色调,蓝色和绿色作为辅助色。整体风格偏向现代、活力,符合移动端金融应用的特点。
- 布局:移动端单列布局,顶部搜索区域,下方滚动列表。
- 字体:选择Google Fonts中的现代字体,比如"Poppins"用于标题,"Inter"用于正文。
- 交互:搜索条件默认隐藏,点击"更多条件"展开。收益类型选择使用弹窗式picker组件。
- 卡片设计:收入和支出使用不同的渐变背景色,收入用橘红-橙色渐变,支出用蓝色-绿色渐变。

3. **资产调用**:可能需要一些装饰性图标或背景纹理。获取一些相关的资产。资产不太直接相关,但可以作为参考。现在开始编写代码。

需要构建完整的HTML页面,包括Tailwind CSS和自定义CSS。使用Google Fonts:Poppins和Inter。使用Font Awesome图标,路径为/static/icons。由于是移动端,设置viewport。

搜索区域:包含搜索框、搜索图标、查询按钮、更多条件按钮。点击更多按钮展开其他搜索条件:收益日期(日期选择器)、收支类型(点击触发picker)、收益分类(点击触发picker)。

收益记录卡片:每条记录一个卡片,收入和支出不同背景渐变。顶部栏左右布局:左侧金额,右侧收支类型。下划线分割。接着是收支编号(加粗,右侧复制按钮)。收益时间。来源说明。

颜色方案:
- 收入卡片渐变:从#FF6B35(橘红)到#FFA726(橙色)
- 支出卡片渐变:从#2196F3(蓝色)到#4CAF50(绿色)
- 主题色:橘红色为主

交互:使用JavaScript实现展开/收起搜索条件,以及模拟picker弹窗。考虑到用户说应用是手机移动端,不需要响应式,但需要适配移动端宽度。

现在开始编写代码。现在生成最终输出。需要按照指定的JSON格式输出。breakpoint应该是"xs",因为是移动端。next数组提供五个建议。现在生成完整HTML代码。现在输出最终结果。
角色
assistant
content

```json{
"summary": "设计了一个移动端收益记录页面,采用鲜艳渐变色彩主题,橘红色和橙色为主色调,蓝色和绿色为辅色。实现了搜索卡片布局,包含可展开的筛选条件;收益记录卡片区分收入和支出,采用不同的渐变背景,包含复制功能、时间显示和来源说明。",
"widget": {"type":"full-html","html":"<!DOCTYPE html>\n<html lang=\"zh-CN\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\n <title>收益记录</title>\n <script src=\"https://cdn.tailwindcss.com\"></script>\n <link href=\"https://fonts.googleapis.com/css2?family=Poppins:wght@600;700&family=In…\" rel=\"stylesheet\">\n <style>\n :root {\n --primary-orange: #FF6B35;\n --secondary-orange: #FFA726;\n --primary-blue: #2196F3;\n --primary-green: #4CAF50;\n --income-gradient: linear-gradient(135deg, #FF6B35 0%, #FFA726 100%);\n --expense-gradient: linear-gradient(135deg, #2196F3 0%, #4CAF50 100%);\n --card-shadow: 0 10px 30px rgba(255, 107, 53, 0.15);\n --card-shadow-hover: 0 15px 40px rgba(255, 107, 53, 0.25);\n }\n body {\n font-family: 'Inter', sans-serif;\n background: #f8fafc;\n color: #334155;\n margin: 0;\n padding: 0;\n overflow-x: hidden;\n }\n .header-bg {\n background: linear-gradient(135deg, #FF6B35 0%, #FFA726 100%);\n border-radius: 0 0 24px 24px;\n }\n .search-card {\n background: white;\n border-radius: 20px;\n box-shadow: 0 8px 25px rgba(255, 107, 53, 0.12);\n transition: all 0.3s ease;\n }\n .search-card:hover {\n box-shadow: 0 12px 30px rgba(255, 107, 53, 0.2);\n }\n .income-card {\n background: var(--income-gradient);\n color: white;\n border-radius: 18px;\n box-shadow: var(--card-shadow);\n transition: transform 0.3s ease, box-shadow 0.3s ease;\n }\n .income-card:hover {\n transform: translateY(-5px);\n box-shadow: var(--card-shadow-hover);\n }\n .expense-card {\n background: var(--expense-gradient);\n color: white;\n border-radius: 18px;\n box-shadow: 0 10px 30px rgba(33, 150, 243, 0.15);\n transition: transform 0.3s ease, box-shadow 0.3s ease;\n }\n .expense-card:hover {\n transform: translateY(-5px);\n box-shadow: 0 15px 40px rgba(33, 150, 243, 0.25);\n }\n .picker-overlay {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: rgba(0, 0, 0, 0.5);\n z-index: 999;\n display: none;\n align-items: flex-end;\n justify-content: center;\n }\n .picker-container {\n background: white;\n width: 100%;\n max-width: 500px;\n border-radius: 24px 24px 0 0;\n padding: 24px;\n animation: slideUp 0.3s ease;\n }\n @keyframes slideUp {\n from { transform: translateY(100%); }\n to { transform: translateY(0); }\n }\n .picker-item {\n padding: 16px;\n border-bottom: 1px solid #e5e7eb;\n font-size: 16px;\n cursor: pointer;\n transition: background 0.2s;\n }\n .picker-item:hover {\n background: #f3f4f6;\n }\n .picker-item.active {\n color: var(--primary-orange);\n font-weight: 600;\n }\n .copy-btn {\n background: rgba(255, 255, 255, 0.2);\n backdrop-filter: blur(10px);\n border-radius: 10px;\n padding: 6px 12px;\n transition: all 0.2s;\n }\n .copy-btn:hover {\n background: rgba(255, 255, 255, 0.3);\n transform: scale(1.05);\n }\n .divider {\n height: 1px;\n background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.5), transparent);\n margin: 12px 0;\n }\n .search-input {\n border: 2px solid #e5e7eb;\n border-radius: 12px;\n transition: border 0.3s;\n }\n .search-input:focus {\n border-color: var(--primary-orange);\n outline: none;\n }\n .btn-primary {\n background: linear-gradient(135deg, #FF6B35 0%, #FFA726 100%);\n color: white;\n border-radius: 12px;\n font-weight: 600;\n transition: all 0.3s;\n }\n .btn-primary:hover {\n transform: translateY(-2px);\n box-shadow: 0 8px 20px rgba(255, 107, 53, 0.3);\n }\n .btn-secondary {\n background: rgba(255, 107, 53, 0.1);\n color: var(--primary-orange);\n border-radius: 12px;\n border: 1px solid rgba(255, 107, 53, 0.3);\n transition: all 0.3s;\n }\n .btn-secondary:hover {\n background: rgba(255, 107, 53, 0.2);\n }\n .more-conditions {\n overflow: hidden;\n transition: max-height 0.5s ease;\n }\n .icon {\n width: 20px;\n height: 20px;\n display: inline-block;\n fill: currentColor;\n }\n </style>\n</head>\n<body class=\"min-h-screen pb-20\">\n <!-- Header -->\n <div class=\"header-bg text-white p-6 pb-8\">\n <div class=\"flex items-center justify-between mb-6\">\n <div>\n <h1 class=\"text-2xl font-bold font-['Poppins']\">收益记录</h1>\n <p class=\"text-white/80 text-sm mt-1\">查看您的所有收益来源与明细</p>\n </div>\n <div class=\"relative\">\n <div class=\"w-10 h-10 rounded-full bg-white/20 flex items-center justify-center\">\n <img src=\"/static/icons/user.svg\" alt=\"用户\" class=\"w-6 h-6\">\n </div>\n </div>\n </div>\n </div>\n\n <!-- Search Card -->\n <div class=\"px-4 -mt-6 relative z-10\">\n <div class=\"search-card p-5\">\n <div class=\"flex items-center gap-2 mb-4\">\n <div class=\"relative flex-1\">\n <div class=\"absolute left-4 top-1/2 transform -translate-y-1/2 text-gray-400\">\n <img src=\"/static/icons/search.svg\" alt=\"搜索\" class=\"w-5 h-5\">\n </div>\n <input type=\"text\" placeholder=\"搜索收益记录...\" class=\"search-input w-full pl-12 pr-4 py-3 text-gray-800\">\n </div>\n <button class=\"btn-primary px-5 py-3 flex items-center gap-2\" onclick=\"handleSearch()\">\n <img src=\"/static/icons/search.svg\" alt=\"查询\" class=\"w-4 h-4\">\n 查询\n </button>\n </div>\n\n <button id=\"moreBtn\" class=\"btn-secondary w-full py-3 flex items-center justify-center gap-2 mb-0\" onclick=\"toggleConditions()\">\n <span>更多筛选条件</span>\n <img src=\"/static/icons/chevron-down.svg\" alt=\"展开\" class=\"w-4 h-4 transition-transform duration-300\" id=\"chevronIcon\">\n </button>\n\n <div class=\"more-conditions max-h-0\" id=\"conditionsContainer\">\n <div class=\"pt-6 space-y-5\">\n <!-- 收益日期 -->\n <div>\n <label class=\"block text-sm font-medium text-gray-700 mb-2\">收益日期</label>\n <div class=\"relative\">\n <div class=\"absolute left-4 top-1/2 transform -translate-y-1/2 text-gray-400\">\n <img src=\"/static/icons/calendar.svg\" alt=\"日历\" class=\"w-5 h-5\">\n </div>\n <input type=\"date\" id=\"dateInput\" class=\"search-input w-full pl-12 pr-4 py-3 text-gray-800\">\n </div>\n </div>\n\n <!-- 收支类型 -->\n <div>\n <label class=\"block text-sm font-medium text-gray-700 mb-2\">收支类型</label>\n <button onclick=\"showPicker('incomeTypePicker')\" class=\"search-input w-full text-left px-4 py-3 flex items-center justify-between\" id=\"incomeTypeBtn\">\n <span class=\"text-gray-800\">请选择收支类型</span>\n <img src=\"/static/icons/chevron-right.svg\" alt=\"选择\" class=\"w-5 h-5 text-gray-400\">\n </button>\n </div>\n\n <!-- 收益分类 -->\n <div>\n <label class=\"block text-sm font-medium text-gray-700 mb-2\">收益分类</label>\n <button onclick=\"showPicker('incomeCategoryPicker')\" class=\"search-input w-full text-left px-4 py-3 flex items-center justify-between\" id=\"incomeCategoryBtn\">\n <span class=\"text-gray-800\">请选择收益分类</span>\n <img src=\"/static/icons/chevron-right.svg\" alt=\"选择\" class=\"w-5 h-5 text-gray-400\">\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Picker Overlays -->\n <div id=\"incomeTypePicker\" class=\"picker-overlay\">\n <div class=\"picker-container\">\n <div class=\"flex justify-between items-center mb-6\">\n <h3 class=\"text-xl font-bold font-['Poppins'] text-gray-800\">选择收支类型</h3>\n <button onclick=\"hidePicker('incomeTypePicker')\" class=\"text-gray-500 p-2\">\n <img src=\"/static/icons/xmark.svg\" alt=\"关闭\" class=\"w-6 h-6\">\n </button>\n </div>\n <div class=\"picker-list\">\n <div class=\"picker-item\" onclick=\"selectOption('incomeType', '分润收益', 'incomeTypeBtn')\">分润收益</div>\n <div class=\"picker-item\" onclick=\"selectOption('incomeType', '设备激活奖励', 'incomeTypeBtn')\">设备激活奖励</div>\n <div class=\"picker-item\" onclick=\"selectOption('incomeType', '达标退还押金', 'incomeTypeBtn')\">达标退还押金</div>\n <div class=\"picker-item\" onclick=\"selectOption('incomeType', '押金反佣', 'incomeTypeBtn')\">押金反佣</div>\n </div>\n </div>\n </div>\n\n <div id=\"incomeCategoryPicker\" class=\"picker-overlay\">\n <div class=\"picker-container\">\n <div class=\"flex justify-between items-center mb-6\">\n <h3 class=\"text-xl font-bold font-['Poppins'] text-gray-800\">选择收益分类</h3>\n <button onclick=\"hidePicker('incomeCategoryPicker')\" class=\"text-gray-500 p-2\">\n <img src=\"/static/icons/xmark.svg\" alt=\"关闭\" class=\"w-6 h-6\">\n </button>\n </div>\n <div class=\"picker-list\">\n <div class=\"picker-item\" onclick=\"selectOption('incomeCategory', '个人_收益', 'incomeCategoryBtn')\">个人_收益</div>\n <div class=\"picker-item\" onclick=\"selectOption('incomeCategory', '团队_收益', 'incomeCategoryBtn')\">团队_收益</div>\n <div class=\"picker-item\" onclick=\"selectOption('incomeCategory', '个人_消费', 'incomeCategoryBtn')\">个人_消费</div>\n <div class=\"picker-item\" onclick=\"selectOption('incomeCategory', '个人_退还', 'incomeCategoryBtn')\">个人_退还</div>\n </div>\n </div>\n </div>\n\n <!-- Earnings List -->\n <div class=\"px-4 mt-8\">\n <div class=\"flex justify-between items-center mb-5\">\n <h2 class=\"text-xl font-bold font-['Poppins'] text-gray-800\">收益记录</h2>\n <div class=\"text-sm text-gray-500\">\n 共 <span class=\"font-bold text-orange-500\">8</span> 条记录\n </div>\n </div>\n\n <div class=\"space-y-4\" id=\"earningsList\">\n <!-- 收入卡片示例 -->\n <div class=\"income-card p-5\">\n <div class=\"flex justify-between items-center mb-3 pb-3 border-b border-white/30\">\n <div>\n <div class=\"text-2xl font-bold font-['Poppins']\">+ ¥1,280.50</div>\n <div class=\"text-sm opacity-90\">收入</div>\n </div>\n <div class=\"text-right\">\n <div class=\"font-semibold text-lg\">分润收益</div>\n <div class=\"text-sm opacity-90\">团队业绩提成</div>\n </div>\n </div>\n <div class=\"flex justify-between items-center mb-3\">\n <div class=\"font-bold text-lg\">TX20260416001</div>\n <button class=\"copy-btn flex items-center gap-2 text-sm\" onclick=\"copyToClipboard('TX20260416001')\">\n <img src=\"/static/icons/copy.svg\" alt=\"复制\" class=\"w-4 h-4\">\n 复制\n </button>\n </div>\n <div class=\"divider\"></div>\n <div class=\"flex justify-between items-center text-sm mb-2\">\n <div class=\"flex items-center gap-2\">\n <img src=\"/static/icons/clock.svg\" alt=\"时间\" class=\"w-4 h-4\">\n <span>2026-04-16 09:45:22</span>\n </div>\n </div>\n <div class=\"text-sm opacity-90\">\n <div class=\"flex items-start gap-2\">\n <img src=\"/static/icons/info-circle.svg\" alt=\"说明\" class=\"w-4 h-4 mt-0.5\">\n <span>来自团队代理商的销售分润,团队总业绩达到¥50,000,提成比例2.5%</span>\n </div>\n </div>\n </div>\n\n <!-- 支出卡片示例 -->\n <div class=\"expense-card p-5\">\n <div class=\"flex justify-between items-center mb-3 pb-3 border-b border-white/30\">\n <div>\n <div class=\"text-2xl font-bold font-['Poppins']\">- ¥399.00</div>\n <div class=\"text-sm opacity-90\">支出</div>\n </div>\n <div class=\"text-right\">\n <div class=\"font-semibold text-lg\">个人_消费</div>\n <div class=\"text-sm opacity-90\">设备押金</div>\n </div>\n </div>\n <div class=\"flex justify-between items-center mb-3\">\n <div class=\"font-bold text-lg\">TX20260415005</div>\n <button class=\"copy-btn flex items-center gap-2 text-sm\" onclick=\"copyToClipboard('TX20260415005')\">\n <img src=\"/static/icons/copy.svg\" alt=\"复制\" class=\"w-4 h-4\">\n 复制\n </button>\n </div>\n <div class=\"divider\"></div>\n <div class=\"flex justify-between items-center text-sm mb-2\">\n <div class=\"flex items-center gap-2\">\n <img src=\"/static/icons/clock.svg\" alt=\"时间\" class=\"w-4 h-4\">\n <span>2026-04-15 14:30:18</span>\n </div>\n </div>\n <div class=\"text-sm opacity-90\">\n <div class=\"flex items-start gap-2\">\n <img src=\"/static/icons/info-circle.svg\" alt=\"说明\" class=\"w-4 h-4 mt-0.5\">\n <span>购买新设备押金支付,设备型号:POS-2024 Pro,可退还</span>\n </div>\n </div>\n </div>\n\n <!-- 更多示例卡片 -->\n <div class=\"income-card p-5\">\n <div class=\"flex justify-between items-center mb-3 pb-3 border-b border-white/30\">\n <div>\n <div class=\"text-2xl font-bold font-['Poppins']\">+ ¥2,500.00</div>\n <div class=\"text-sm opacity-90\">收入</div>\n </div>\n <div class=\"text-right\">\n <div class=\"font-semibold text-lg\">设备激活奖励</div>\n <div class=\"text-sm opacity-90\">新设备激活</div>\n </div>\n </div>\n <div class=\"flex justify-between items-center mb-3\">\n <div class=\"font-bold text-lg\">TX20260414012</div>\n <button class=\"copy-btn flex items-center gap-2 text-sm\" onclick=\"copyToClipboard('TX20260414012')\">\n <img src=\"/static/icons/copy.svg\" alt=\"复制\" class=\"w-4 h-4\">\n 复制\n </button>\n </div>\n <div class=\"divider\"></div>\n <div class=\"flex justify-between items-center text-sm mb-2\">\n <div class=\"flex items-center gap-2\">\n <img src=\"/static/icons/clock.svg\" alt=\"时间\" class=\"w-4 h-4\">\n <span>2026-04-14 11:20:05</span>\n </div>\n </div>\n <div class=\"text-sm opacity-90\">\n <div class=\"flex items-start gap-2\">\n <img src=\"/static/icons/info-circle.svg\" alt=\"说明\" class=\"w-4 h-4 mt-0.5\">\n <span>成功激活10台新设备,获得平台激活奖励金</span>\n </div>\n </div>\n </div>\n\n <div class=\"expense-card p-5\">\n <div class=\"flex justify-between items-center mb-3 pb-3 border-b border-white/30\">\n <div>\n <div class=\"text-2xl font-bold font-['Poppins']\">- ¥150.00</div>\n <div class=\"text-sm opacity-90\">支出</div>\n </div>\n <div class=\"text-right\">\n <div class=\"font-semibold text-lg\">个人_退还</div>\n <div class=\"text-sm opacity-90\">部分退款</div>\n </div>\n </div>\n <div class=\"flex justify-between items-center mb-3\">\n <div class=\"font-bold text-lg\">TX20260413008</div>\n <button class=\"copy-btn flex items-center gap-2 text-sm\" onclick=\"copyToClipboard('TX20260413008')\">\n <img src=\"/static/icons/copy.svg\" alt=\"复制\" class=\"w-4 h-4\">\n 复制\n </button>\n </div>\n <div class=\"divider\"></div>\n <div class=\"flex justify-between items-center text-sm mb-2\">\n <div class=\"flex items-center gap-2\">\n <img src=\"/static/icons/clock.svg\" alt=\"时间\" class=\"w-4 h-4\">\n <span>2026-04-13 16:45:33</span>\n </div>\n </div>\n <div class=\"text-sm opacity-90\">\n <div class=\"flex items-start gap-2\">\n <img src=\"/static/icons/info-circle.svg\" alt=\"说明\" class=\"w-4 h-4 mt-0.5\">\n <span>服务费部分退款,因服务未完全使用</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- JavaScript -->\n <script>\n // 切换更多筛选条件\n function toggleConditions() {\n const container = document.getElementById('conditionsContainer');\n const chevron = document.getElementById('chevronIcon');\n const isExpanded = container.style.maxHeight && container.style.maxHeight !== '0px';\n \n if (isExpanded) {\n container.style.maxHeight = '0px';\n chevron.style.transform = 'rotate(0deg)';\n } else {\n container.style.maxHeight = container.scrollHeight + 'px';\n chevron.style.transform = 'rotate(180deg)';\n }\n }\n\n // 显示选择器\n function showPicker(pickerId) {\n document.getElementById(pickerId).style.display = 'flex';\n }\n\n // 隐藏选择器\n function hidePicker(pickerId) {\n document.getElementById(pickerId).style.display = 'none';\n }\n\n // 选择选项\n function selectOption(type, value, buttonId) {\n const button = document.getElementById(buttonId);\n button.querySelector('span').textContent = value;\n button.querySelector('span').classList.remove('text-gray-800');\n button.querySelector('span').classList.add('text-orange-500', 'font-semibold');\n hidePicker(type === 'incomeType' ? 'incomeTypePicker' : 'incomeCategoryPicker');\n }\n\n // 复制到剪贴板\n function copyToClipboard(text) {\n navigator.clipboard.writeText(text).then(() => {\n alert('已复制到剪贴板: ' + text);\n }).catch(err => {\n console.error('复制失败:', err);\n });\n }\n\n // 处理搜索\n function handleSearch() {\n const searchInput = document.querySelector('.search-input[type=\"text\"]');\n const dateInput = document.getElementById('dateInput');\n const incomeType = document.getElementById('incomeTypeBtn').querySelector('span').textContent;\n const incomeCategory = document.getElementById('incomeCategoryBtn').querySelector('span').textContent;\n \n alert(`搜索参数:\\n关键词: ${searchInput.value}\\n日期: ${dateInput.value}\\n收支类型: ${incomeType}\\n收益分类: ${incomeCategory}`);\n }\n\n // 初始化日期为今天\n document.getElementById('dateInput').valueAsDate = new Date();\n </script>\n</body>\n</html>"},
"next": ["添加收益趋势图表", "支持导出Excel", "添加筛选标签", "收益类型统计", "收支对比分析"],
"breakpoint": "xs"
}
```

total_tokens
12063
summary
设计了一个移动端收益记录页面,采用鲜艳渐变色彩主题,橘红色和橙色为主色调,蓝色和绿色为辅色。实现了搜索卡片布局,包含可展开的筛选条件;收益记录卡片区分收入和支出,采用不同的渐变背景,包含复制功能、时间显示和来源说明。
uiParsing
关闭