Commit d77eece8 d77eece83c58289ab1177458c3c0132f83e0d97c by 沈秋雨

refactor(auth): 优化审核人身份管理及登出功能

1 parent efb52e78
......@@ -565,7 +565,12 @@
.sync-notice.show { display: block; }
#reviewerInput { width: 130px; }
#reviewerDisplay {
font-weight: 600;
color: var(--accent);
padding: 0 6px;
}
#logoutBtn { margin-left: 4px; padding: 2px 10px; font-size: 12px; }
.login-overlay {
position: fixed;
......@@ -650,8 +655,8 @@
</select>
<button id="exportBtn">导出标注</button>
<button id="importReviewedBtn">入库审核通过</button>
<label for="reviewerInput">审核人</label>
<input id="reviewerInput" maxlength="64" placeholder="昵称">
<span>审核人:</span><span id="reviewerDisplay"></span>
<button id="logoutBtn" class="secondary">登出</button>
<button id="reloadBtn" class="secondary">刷新</button>
</div>
</header>
......@@ -727,7 +732,8 @@
pageSizeSelect: document.getElementById('pageSizeSelect'),
exportBtn: document.getElementById('exportBtn'),
importReviewedBtn: document.getElementById('importReviewedBtn'),
reviewerInput: document.getElementById('reviewerInput'),
reviewerDisplay: document.getElementById('reviewerDisplay'),
logoutBtn: document.getElementById('logoutBtn'),
reloadBtn: document.getElementById('reloadBtn'),
prevPageBtn: document.getElementById('prevPageBtn'),
nextPageBtn: document.getElementById('nextPageBtn'),
......@@ -782,7 +788,12 @@
} else {
localStorage.removeItem('l2AccessCode');
}
els.reviewerInput.value = state.reviewer;
els.reviewerDisplay.textContent = state.reviewer;
// 恢复该审核人的 clientToken,保证未提交的领取记录可以继续操作
const savedToken = localStorage.getItem(`l2ClientToken:${state.reviewer}`);
state.clientToken = savedToken || newClientToken();
localStorage.setItem(`l2ClientToken:${state.reviewer}`, state.clientToken);
sessionStorage.setItem('l2ReviewClientToken', state.clientToken);
els.loginAccessCode.value = '';
els.loginOverlay.classList.add('hidden');
resolve();
......@@ -797,7 +808,8 @@
async function initReviewerIdentity() {
state.reviewer = (localStorage.getItem('l2ReviewerName') || '').trim();
state.clientToken = sessionStorage.getItem('l2ReviewClientToken') || newClientToken();
state.clientToken = localStorage.getItem(`l2ClientToken:${state.reviewer}`) || newClientToken();
localStorage.setItem(`l2ClientToken:${state.reviewer}`, state.clientToken);
sessionStorage.setItem('l2ReviewClientToken', state.clientToken);
state.authToken = sessionStorage.getItem('l2ReviewAuthToken') || '';
els.loginReviewer.value = state.reviewer;
......@@ -814,7 +826,7 @@
session_token: state.authToken
});
state.authToken = session.session_token;
els.reviewerInput.value = state.reviewer;
els.reviewerDisplay.textContent = state.reviewer;
els.loginOverlay.classList.add('hidden');
return;
} catch {
......@@ -1709,23 +1721,16 @@
}
els.runSelect.addEventListener('change', () => loadRun(els.runSelect.value));
els.reviewerInput.addEventListener('change', async () => {
const nextReviewer = els.reviewerInput.value.trim();
if (!nextReviewer) {
els.reviewerInput.value = state.reviewer;
return;
}
els.logoutBtn.addEventListener('click', async () => {
if (currentQuery()?.review_claimed_by === state.reviewer) {
alert('请先完成当前审核,或等待领取过期后再切换审核人。');
els.reviewerInput.value = state.reviewer;
return;
if (!confirm('当前还有未提交的审核记录,确认登出?\n登出后领取将自然过期,其他人可重新领取。')) return;
}
els.reviewerInput.value = state.reviewer;
sessionStorage.removeItem('l2ReviewAuthToken');
state.authToken = '';
await showReviewLogin(nextReviewer);
state.clientToken = newClientToken();
sessionStorage.setItem('l2ReviewClientToken', state.clientToken);
state.reviewer = '';
els.reviewerDisplay.textContent = '';
await showReviewLogin();
// 不重置 clientToken,登出后同名称登录可继续操作已领取的记录
await loadGroups();
renderAll();
});
......