feat: 添加大锅饭修改密钥名称功能

- 在密钥管理界面添加编辑按钮,支持修改密钥名称
- 新增修改名称模态框,包含输入验证和保存功能
- 更新前端API调用以支持名称修改操作
This commit is contained in:
hex2077 2026-03-12 11:45:43 +08:00
parent 27ac8c9eaf
commit 80102989e1
2 changed files with 37 additions and 2 deletions

View file

@ -1 +1 @@
2.11.2
2.11.3

View file

@ -732,6 +732,26 @@
</div>
</div>
<!-- 修改名称模态框 -->
<div id="editNameModal" class="modal-overlay">
<div class="modal">
<div class="modal-header">
<h3><i class="fas fa-edit"></i> 修改 Key 名称</h3>
<button class="modal-close" onclick="closeModal('editNameModal')">&times;</button>
</div>
<div class="modal-body">
<div class="form-group">
<label>新的名称</label>
<input type="text" id="newName" placeholder="例如:测试用户 1">
</div>
<input type="hidden" id="editNameKeyId">
<button class="btn btn-primary btn-block" onclick="updateName()">
<i class="fas fa-save"></i> 保存
</button>
</div>
</div>
</div>
<!-- 批量应用限额模态框 -->
<div id="applyLimitModal" class="modal-overlay">
<div class="modal">
@ -981,7 +1001,7 @@
return `<div class="key-card ${key.enabled ? '' : 'disabled'}">
<div class="key-info">
<div class="key-name">${escapeHtml(key.name)}</div>
<div class="key-name">${escapeHtml(key.name)} <button class="btn-copy" style="margin-left: 4px; padding: 2px 6px;" onclick="openEditName('${key.id}', '${escapeHtml(key.name).replace(/'/g, "\\'")}')" title="修改名称"><i class="fas fa-edit"></i></button></div>
<div class="key-id">${key.maskedKey} <button class="btn-copy" onclick="copyToClipboard('${key.id}')" title="复制完整 Key"><i class="fas fa-copy"></i></button></div>
${providerBadges ? `<div class="key-dist-mini">${providerBadges}</div>` : ''}
</div>
@ -1088,6 +1108,21 @@
else { showToast(result?.error?.message || '操作失败', 'error'); }
}
function openEditName(keyId, currentName) {
document.getElementById('editNameKeyId').value = keyId;
document.getElementById('newName').value = currentName;
openModal('editNameModal');
}
async function updateName() {
const keyId = document.getElementById('editNameKeyId').value;
const name = document.getElementById('newName').value;
if (!name) { showToast('请输入有效的名称', 'error'); return; }
const result = await apiRequest(`${API_BASE}/keys/${encodeURIComponent(keyId)}/name`, { method: 'PUT', body: JSON.stringify({ name }) });
if (result && result.success) { showToast('名称已更新', 'success'); closeModal('editNameModal'); loadData(); }
else { showToast(result?.error?.message || '操作失败', 'error'); }
}
async function toggleKey(keyId) {
const result = await apiRequest(`${API_BASE}/keys/${encodeURIComponent(keyId)}/toggle`, { method: 'POST' });
if (result && result.success) { showToast(result.message, 'success'); loadData(); }