注册码管理页面的功能完善
This commit is contained in:
@@ -19,6 +19,10 @@
|
||||
.btn { padding:8px 12px; border:none; border-radius:8px; cursor:pointer; margin:0 4px; }
|
||||
.btn-primary { background:#4f46e5; color:#fff; }
|
||||
.btn-secondary { background:#64748b; color:#fff; }
|
||||
.btn-danger { background:#ff4d4f; color:#fff; }
|
||||
.btn-danger:hover { background:#ff7875 !important; }
|
||||
.btn-primary:hover { background:#6366f1 !important; }
|
||||
.btn-secondary:hover { background:#94a3b8 !important; }
|
||||
.notice { padding:10px; border-radius:6px; margin-top:10px; display:none; }
|
||||
.notice.success { background:#d4edda; color:#155724; border:1px solid #c3e6cb; }
|
||||
.notice.error { background:#f8d7da; color:#721c24; border:1px solid #f5c6cb; }
|
||||
@@ -57,6 +61,43 @@
|
||||
if(resp.ok && data.status==='success'){msg.textContent='新增key成功'; msg.className='notice success'; msg.style.display='block'; document.getElementById('newKey').value=''; loadKeys();}
|
||||
else{msg.textContent=data.message||'新增失败'; msg.className='notice error'; msg.style.display='block';}
|
||||
}
|
||||
async function deleteSelectedKey(){
|
||||
const keySel = document.getElementById('keys');
|
||||
const mkeySel = document.getElementById('manageKeys');
|
||||
|
||||
// 优先获取左侧选中的,如果没有则获取右侧选中的
|
||||
const selectedKey = keySel.value || mkeySel.value;
|
||||
|
||||
if(!selectedKey){
|
||||
alert('请先在下方列表中选择一个要删除的Key');
|
||||
return;
|
||||
}
|
||||
|
||||
if(!confirm(`确定要全局删除Key \"${selectedKey}\" 吗?\n该操作将:\n1. 从全局可选Key列表中移除\n2. 从所有包含此Key的注册码中同步清除\n此操作不可恢复!`)) return;
|
||||
|
||||
const ov=document.getElementById('overlay'); ov.style.display='flex';
|
||||
const csrftoken=getCookie('csrftoken');
|
||||
const resp=await fetch('/elastic/registration-codes/keys/remove/',{
|
||||
method:'POST',
|
||||
credentials:'same-origin',
|
||||
headers:{'Content-Type':'application/json','X-CSRFToken':csrftoken||''},
|
||||
body:JSON.stringify({key:selectedKey})
|
||||
});
|
||||
const data=await resp.json();
|
||||
const msg=document.getElementById('msg');
|
||||
if(resp.ok && data.status==='success'){
|
||||
msg.textContent = data.message || '删除成功';
|
||||
msg.className='notice success';
|
||||
msg.style.display='block';
|
||||
loadKeys(); // 重新加载keys列表
|
||||
loadCodes(); // 重新加载注册码列表
|
||||
} else {
|
||||
msg.textContent=data.message||'删除失败';
|
||||
msg.className='notice error';
|
||||
msg.style.display='block';
|
||||
}
|
||||
ov.style.display='none';
|
||||
}
|
||||
function selectedValues(sel){return Array.from(sel.selectedOptions).map(o=>o.value);}
|
||||
function enableToggleSelect(sel){ sel.addEventListener('mousedown',function(e){ if(e.target && e.target.tagName==='OPTION'){ e.preventDefault(); const op=e.target; op.selected=!op.selected; this.dispatchEvent(new Event('change',{bubbles:true})); } }); }
|
||||
function clearSelection(id){ const sel=document.getElementById(id); Array.from(sel.options).forEach(o=>o.selected=false); }
|
||||
@@ -116,21 +157,26 @@
|
||||
<h2>管理注册码</h2>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<label>新增key</label>
|
||||
<input id="newKey" type="text" placeholder="输入新的key" />
|
||||
<button class="btn btn-secondary" onclick="addKey()">新增</button>
|
||||
<label>管理 Key</label>
|
||||
<div style="display:flex; gap:8px;">
|
||||
<input id="newKey" type="text" placeholder="输入新的key进行新增,或在下方选择后删除" style="flex: 1;" />
|
||||
<button class="btn btn-secondary" onclick="addKey()">新增 Key</button>
|
||||
<button class="btn btn-danger" onclick="deleteSelectedKey()">删除选中 Key</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" style="margin-top:12px;">
|
||||
<div class="col">
|
||||
<label>选择keys</label>
|
||||
<label>选择 keys</label>
|
||||
<select id="keys" multiple size="10"></select>
|
||||
<div style="margin-top:8px;"><button class="btn btn-secondary" onclick="clearSelection('keys')">清空选择</button></div>
|
||||
<div style="margin-top:8px;"><button class="btn btn-secondary" style="width: 100%;" onclick="clearSelection('keys')">清空 keys 选择</button></div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<label>选择manage_keys</label>
|
||||
<label>选择 manage_keys</label>
|
||||
<select id="manageKeys" multiple size="10"></select>
|
||||
<div style="margin-top:8px;"><button class="btn btn-secondary" onclick="clearSelection('manageKeys')">清空选择</button></div>
|
||||
<div style="margin-top:8px;">
|
||||
<button class="btn btn-secondary" style="width: 100%;" onclick="clearSelection('manageKeys')">清空 manage_keys 选择</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" style="margin-top:12px;">
|
||||
|
||||
Reference in New Issue
Block a user