(services)
| 1484 | } |
| 1485 | |
| 1486 | function renderSub2ApiServices(services) { |
| 1487 | if (!elements.sub2ApiServicesTable) return; |
| 1488 | if (!services || services.length === 0) { |
| 1489 | elements.sub2ApiServicesTable.innerHTML = '<tr><td colspan="6" style="text-align:center;color:var(--text-muted);padding:20px;">暂无 Sub2API 服务,点击「添加服务」新增</td></tr>'; |
| 1490 | return; |
| 1491 | } |
| 1492 | elements.sub2ApiServicesTable.innerHTML = services.map(s => ` |
| 1493 | <tr> |
| 1494 | <td>${escapeHtml(s.name)}</td> |
| 1495 | <td style="font-size:0.85rem;color:var(--text-muted);">${escapeHtml(s.api_url)}</td> |
| 1496 | <td style="text-align:center;">${String(s.target_type || 'sub2api').toLowerCase() === 'newapi' ? 'newApi' : 'Sub2Api'}</td> |
| 1497 | <td style="text-align:center;" title="${s.enabled ? '已启用' : '已禁用'}">${s.enabled ? '✅' : '⭕'}</td> |
| 1498 | <td style="text-align:center;">${s.priority}</td> |
| 1499 | <td style="white-space:nowrap;"> |
| 1500 | <button class="btn btn-secondary btn-sm" onclick="editSub2ApiService(${s.id})">编辑</button> |
| 1501 | <button class="btn btn-secondary btn-sm" onclick="testSub2ApiServiceById(${s.id})">测试</button> |
| 1502 | <button class="btn btn-danger btn-sm" onclick="deleteSub2ApiService(${s.id}, '${escapeHtml(s.name)}')">删除</button> |
| 1503 | </td> |
| 1504 | </tr> |
| 1505 | `).join(''); |
| 1506 | } |
| 1507 | |
| 1508 | function openSub2ApiServiceModal(svc = null) { |
| 1509 | _sub2apiEditingId = svc ? svc.id : null; |
no test coverage detected