v1.4.1: 修复系统错误邮件被退信(补Date头, amavisd强制) + 数据源状态列一键启动/停用开关(点击即生效)
This commit is contained in:
+27
-3
@@ -20,13 +20,19 @@
|
||||
<td>{{ s.type }}</td>
|
||||
<td>{% if s.kind == 'custom' %}<span class="muted small">—</span>{% else %}{{ s.weight }}{% endif %}</td>
|
||||
<td>{% if s.scan_interval_min %}{{ s.scan_interval_min }}分{% else %}<span class="muted small">默认</span>{% endif %}</td>
|
||||
<td>{% if s.enabled %}<span class="tag ok">启用</span>{% else %}<span class="tag">停用</span>{% endif %}</td>
|
||||
<td>
|
||||
<label class="switch" title="一键启动/停用">
|
||||
<input type="checkbox" onchange="toggleSource({{ s.id }}, this)" {{ 'checked' if s.enabled }}>
|
||||
<span class="slider"></span>
|
||||
</label>
|
||||
<span id="st-{{ s.id }}" class="tag {{ 'ok' if s.enabled }}">{{ '启用' if s.enabled else '停用' }}</span>
|
||||
</td>
|
||||
<td>{{ s.last_fetch or '—' }}</td>
|
||||
<td>{{ s.last_count }}</td>
|
||||
<td>
|
||||
<button class="btn mini" onclick="openModal({{ s.id }})">✏️ 编辑</button>
|
||||
<button class="btn mini" onclick="openHistory({{ s.id }})">📜 历史采样</button>
|
||||
<button class="btn mini" onclick="toggleSource({{ s.id }})">{{ '停用' if s.enabled else '启用' }}</button>
|
||||
<button class="btn mini" onclick="toggleFromButton({{ s.id }})">{{ '停用' if s.enabled else '启用' }}</button>
|
||||
<button class="btn mini danger" onclick="delSource({{ s.id }})">删除</button>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -291,7 +297,25 @@ async function openHistArticles(){
|
||||
).join('') + '</div>';
|
||||
}
|
||||
|
||||
async function toggleSource(id){ await API.json('/api/sources', {action:'toggle', id}); location.reload(); }
|
||||
async function toggleSource(id, cb){
|
||||
cb = cb || document.querySelector(`tr[data-sid="${id}"] .switch input`);
|
||||
if (!cb) return;
|
||||
const orig = cb.checked;
|
||||
const r = await API.json('/api/sources', {action:'toggle', id});
|
||||
if (!r.ok){ toast('操作失败', false); cb.checked = orig; return; }
|
||||
const on = cb.checked;
|
||||
const tag = document.getElementById('st-'+id);
|
||||
if (tag){ tag.textContent = on ? '启用' : '停用'; tag.className = 'tag ' + (on ? 'ok' : ''); }
|
||||
const nameEl = document.querySelector(`tr[data-sid="${id}"] b`);
|
||||
const name = nameEl ? nameEl.textContent : '';
|
||||
toast((on ? '✅ 已启用「' : '⏸ 已停用「') + name + '」', true);
|
||||
}
|
||||
function toggleFromButton(id){
|
||||
const cb = document.querySelector(`tr[data-sid="${id}"] .switch input`);
|
||||
if (!cb) return;
|
||||
cb.checked = !cb.checked;
|
||||
toggleSource(id, cb);
|
||||
}
|
||||
async function delSource(id){
|
||||
if (!confirm('确认删除该数据源?')) return;
|
||||
await API.json('/api/sources', {action:'delete', id}); toast('✅ 已删除'); setTimeout(()=>location.reload(), 400);
|
||||
|
||||
Reference in New Issue
Block a user