(services)
| 1319 | } |
| 1320 | |
| 1321 | function renderCpaServicesTable(services) { |
| 1322 | if (!services || services.length === 0) { |
| 1323 | elements.cpaServicesTable.innerHTML = '<tr><td colspan="6" style="text-align:center;color:var(--text-muted);padding:20px;">暂无 CPA 服务,点击「添加服务」新增</td></tr>'; |
| 1324 | return; |
| 1325 | } |
| 1326 | elements.cpaServicesTable.innerHTML = services.map(s => ` |
| 1327 | <tr> |
| 1328 | <td>${escapeHtml(s.name)}</td> |
| 1329 | <td style="font-size:0.85rem;color:var(--text-muted);">${escapeHtml(s.api_url)}</td> |
| 1330 | <td style="font-size:0.85rem;color:var(--text-muted);">${escapeHtml(s.proxy_url || '-')}</td> |
| 1331 | <td style="text-align:center;" title="${s.enabled ? '已启用' : '已禁用'}">${s.enabled ? '✅' : '⭕'}</td> |
| 1332 | <td style="text-align:center;">${s.priority}</td> |
| 1333 | <td style="white-space:nowrap;"> |
| 1334 | <button class="btn btn-secondary btn-sm" onclick="editCpaService(${s.id})">编辑</button> |
| 1335 | <button class="btn btn-secondary btn-sm" onclick="testCpaServiceById(${s.id})">测试</button> |
| 1336 | <button class="btn btn-danger btn-sm" onclick="deleteCpaService(${s.id}, '${escapeHtml(s.name)}')">删除</button> |
| 1337 | </td> |
| 1338 | </tr> |
| 1339 | `).join(''); |
| 1340 | } |
| 1341 | |
| 1342 | function openCpaServiceModal(service = null) { |
| 1343 | document.getElementById('cpa-service-id').value = service ? service.id : ''; |
no test coverage detected