(services)
| 521 | |
| 522 | // 渲染邮箱服务 |
| 523 | function renderEmailServices(services) { |
| 524 | // 检查元素是否存在 |
| 525 | if (!elements.emailServicesTable) return; |
| 526 | |
| 527 | if (services.length === 0) { |
| 528 | elements.emailServicesTable.innerHTML = ` |
| 529 | <tr> |
| 530 | <td colspan="7"> |
| 531 | <div class="empty-state"> |
| 532 | <div class="empty-state-icon">📭</div> |
| 533 | <div class="empty-state-title">暂无配置</div> |
| 534 | <div class="empty-state-description">点击上方"添加服务"按钮添加邮箱服务</div> |
| 535 | </div> |
| 536 | </td> |
| 537 | </tr> |
| 538 | `; |
| 539 | return; |
| 540 | } |
| 541 | |
| 542 | elements.emailServicesTable.innerHTML = services.map(service => ` |
| 543 | <tr data-service-id="${service.id}"> |
| 544 | <td> |
| 545 | <input type="checkbox" class="service-checkbox" data-id="${service.id}" |
| 546 | onchange="updateSelectedServices()"> |
| 547 | </td> |
| 548 | <td>${escapeHtml(service.name)}</td> |
| 549 | <td>${getServiceTypeText(service.service_type)}</td> |
| 550 | <td title="${service.enabled ? '已启用' : '已禁用'}">${service.enabled ? '✅' : '⭕'}</td> |
| 551 | <td>${service.priority}</td> |
| 552 | <td>${format.date(service.last_used)}</td> |
| 553 | <td> |
| 554 | <div class="action-buttons"> |
| 555 | <button class="btn btn-ghost btn-sm" onclick="testService(${service.id})" title="测试"> |
| 556 | 🔌 |
| 557 | </button> |
| 558 | <button class="btn btn-ghost btn-sm" onclick="toggleService(${service.id}, ${!service.enabled})" title="${service.enabled ? '禁用' : '启用'}"> |
| 559 | ${service.enabled ? '🔒' : '🔓'} |
| 560 | </button> |
| 561 | <button class="btn btn-ghost btn-sm" onclick="deleteService(${service.id})" title="删除"> |
| 562 | 🗑️ |
| 563 | </button> |
| 564 | </div> |
| 565 | </td> |
| 566 | </tr> |
| 567 | `).join(''); |
| 568 | } |
| 569 | |
| 570 | // 加载数据库信息 |
| 571 | async function loadDatabaseInfo() { |
no test coverage detected