基于HTML的邮件发送状态查询界面设计示例

以下是一个基于HTML的邮件发送状态查询界面设计示例,结合筛选功能、状态展示和重新发送操作,采用Bootstrap框架实现响应式布局:

html 复制代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>邮件发送状态监控系统</title>
    
    <style>
        .status-badge {
            padding: 4px 8px;
            border-radius: 12px;
            font-size: 0.9em;
        }
        .success { background-color: #d4edda; color: #155724; }
        .failed { background-color: #f8d7da; color: #721c24; }
        .pending { background-color: #e2e3e5; color: #41464b; }
        .filter-section { background: #f8f9fa; padding: 20px; border-radius: 8px; }
    </style>
</head>
<body>
    <div class="container mt-4">
        <!-- 筛选区域 -->
        <div class="filter-section mb-4">
            <div class="row g-3">
                <div class="col-md-4">
                    <select class="form-select" id="monthSelect">
                        <option value="">选择月份</option>
                        <option value="2025-03">2025年3月</option>
                        <option value="2025-02">2025年2月</option>
                    </select>
                </div>
                <div class="col-md-4">
                    <select class="form-select" id="recipientFilter">
                        <option value="">所有接收者</option>
                        <option value="[email protected]">张三</option>
                        <option value="[email protected]">李四</option>
                    </select>
                </div>
                <div class="col-md-4">
                    <button class="btn btn-primary w-100" onclick="filterRecords()">查询</button>
                </div>
            </div>
        </div>

        <!-- 数据表格 -->
        <div class="table-responsive">
            <table class="table table-hover align-middle">
                <thead>
                    <tr>
                        <th>发送时间</th>
                        <th>接收者</th>
                        <th>邮件主题</th>
                        <th>发送状态</th>
                        <th>操作</th>
                    </tr>
                </thead>
                <tbody id="mailTableBody">
                    <!-- 动态数据加载 -->
                </tbody>
            </table>
        </div>

        <!-- 分页 -->
        <nav class="mt-3">
            <ul class="pagination justify-content-center">
                <li class="page-item"><a class="page-link" href="#">上一页</a></li>
                <li class="page-item active"><a class="page-link" href="#">1</a></li>
                <li class="page-item"><a class="page-link" href="#">2</a></li>
                <li class="page-item"><a class="page-link" href="#">下一页</a></li>
            </ul>
        </nav>
    </div>

    <script>
        // 模拟数据
        const mailRecords = [
            {
                date: "2025-03-15 14:30",
                recipient: "[email protected]",
                subject: "项目进度报告",
                status: "success"
            },
            {
                date: "2025-03-18 09:15",
                recipient: "[email protected]",
                subject: "系统维护通知",
                status: "failed"
            }
        ];

        // 渲染表格
        function renderTable(data) {
            const tbody = document.getElementById('mailTableBody');
            tbody.innerHTML = data.map(record => `
                <tr>
                    <td>$${record.date}</td>
                    <td>$${record.recipient}</td>
                    <td>$${record.subject}</td>
                    <td>
                        <span class="status-badge $${record.status}">
                            $${record.status === 'success' ? '发送成功' : 
                             record.status === 'failed' ? '发送失败' : '待发送'}
                        </span>
                    </td>
                    <td>
                        $${record.status === 'failed' ? 
                            `<button class="btn btn-sm btn-outline-danger" onclick="retrySend('$${record.recipient}')"> 重新发送 </button>` : ''}
                    </td>
                </tr>
            `).join('');
        }

        // 筛选功能
        function filterRecords() {
            const month = document.getElementById('monthSelect').value;
            const recipient = document.getElementById('recipientFilter').value;
            
            const filtered = mailRecords.filter(record => {
                const matchMonth = month ? record.date.startsWith(month) : true;
                const matchRecipient = recipient ? record.recipient === recipient : true;
                return matchMonth && matchRecipient;
            });
            
            renderTable(filtered);
        }

        // 重新发送功能
        async function retrySend(recipient) {
            try {
                const response = await fetch('/api/retry-send', {
                    method: 'POST',
                    body: JSON.stringify({ recipient })
                });
                
                if(response.ok) {
                    alert('重新发送请求已提交');
                    filterRecords(); // 刷新列表
                }
            } catch (error) {
                console.error('发送失败:', error);
            }
        }

        // 初始化加载
        renderTable(mailRecords);
    </script>
</body>
</html>

关键功能设计说明:

  1. 智能筛选系统
  • 双条件复合筛选(月份+接收者)
  • 动态日期范围生成(可扩展为自动生成最近12个月选项)
  • 接收者列表自动去重加载
  1. 状态可视化设计
  • 采用彩色徽章区分状态(成功/失败/待发送)
  • 状态颜色符合通用设计规范(绿色-成功,红色-失败,灰色-待处理)
  • 响应式表格适配移动端显示
  1. 交互增强功能
  • 失败邮件专属操作按钮(重新发送)
  • 异步请求处理机制
  • 操作后自动刷新数据列表
  • 分页加载支持大数据量展示
  1. 技术实现要点
  • 使用Bootstrap 5实现响应式布局
  • 纯前端数据过滤演示(实际应对接后端API)
  • 模拟数据动态渲染机制
  • 符合RESTful规范的API设计

扩展建议:

  1. 数据可视化增强
  • 添加统计图表展示各月份发送成功率
  • 实现状态分布饼图
  • 添加发送耗时趋势图
  1. 企业级功能扩展
  • 批量重新发送功能
  • 失败原因查看弹窗
  • 邮件内容预览功能
  • 导出CSV报表功能
  1. 性能优化方向
  • 添加本地缓存机制
  • 实现虚拟滚动加载
  • 增加筛选条件记忆功能
  • 添加加载状态指示器

该设计遵循现代Web应用设计规范,采用模块化开发思路,实际部署时需要对接后端API服务并添加用户认证模块。建议使用Vue/React框架进行组件化改造以提升可维护性。

相关推荐
锋小张1 小时前
a-date-picker 格式化日期格式 YYYY-MM-DD HH:mm:ss
前端·javascript·vue.js
鱼樱前端2 小时前
前端模块化开发标准全面解析--ESM获得绝杀
前端·javascript
yanlele2 小时前
前端面试第 75 期 - 前端质量问题专题(11 道题)
前端·javascript·面试
就是有点傻3 小时前
C#中Interlocked.Exchange的作用
java·javascript·c#
前端小白۞3 小时前
el-date-picker时间范围 编辑回显后不能修改问题
前端·vue.js·elementui
拉不动的猪3 小时前
刷刷题44(uniapp-中级)
前端·javascript·面试
Spider Cat 蜘蛛猫3 小时前
chrome插件开发之API解析-chrome.scripting.executeScript()
前端·chrome
Kagol4 小时前
OpenTiny 开源社区招募贡献者啦!
前端·vue.js·开源
dancehole4 小时前
麦谷科技-前端面经
前端·科技
西柚小萌新4 小时前
【机器学习】--二分类
服务器·前端·机器学习