refactor(auth): 优化审核人身份管理及登出功能
Showing
1 changed file
with
25 additions
and
20 deletions
| ... | @@ -565,7 +565,12 @@ | ... | @@ -565,7 +565,12 @@ |
| 565 | 565 | ||
| 566 | .sync-notice.show { display: block; } | 566 | .sync-notice.show { display: block; } |
| 567 | 567 | ||
| 568 | #reviewerInput { width: 130px; } | 568 | #reviewerDisplay { |
| 569 | font-weight: 600; | ||
| 570 | color: var(--accent); | ||
| 571 | padding: 0 6px; | ||
| 572 | } | ||
| 573 | #logoutBtn { margin-left: 4px; padding: 2px 10px; font-size: 12px; } | ||
| 569 | 574 | ||
| 570 | .login-overlay { | 575 | .login-overlay { |
| 571 | position: fixed; | 576 | position: fixed; |
| ... | @@ -650,8 +655,8 @@ | ... | @@ -650,8 +655,8 @@ |
| 650 | </select> | 655 | </select> |
| 651 | <button id="exportBtn">导出标注</button> | 656 | <button id="exportBtn">导出标注</button> |
| 652 | <button id="importReviewedBtn">入库审核通过</button> | 657 | <button id="importReviewedBtn">入库审核通过</button> |
| 653 | <label for="reviewerInput">审核人</label> | 658 | <span>审核人:</span><span id="reviewerDisplay"></span> |
| 654 | <input id="reviewerInput" maxlength="64" placeholder="昵称"> | 659 | <button id="logoutBtn" class="secondary">登出</button> |
| 655 | <button id="reloadBtn" class="secondary">刷新</button> | 660 | <button id="reloadBtn" class="secondary">刷新</button> |
| 656 | </div> | 661 | </div> |
| 657 | </header> | 662 | </header> |
| ... | @@ -727,7 +732,8 @@ | ... | @@ -727,7 +732,8 @@ |
| 727 | pageSizeSelect: document.getElementById('pageSizeSelect'), | 732 | pageSizeSelect: document.getElementById('pageSizeSelect'), |
| 728 | exportBtn: document.getElementById('exportBtn'), | 733 | exportBtn: document.getElementById('exportBtn'), |
| 729 | importReviewedBtn: document.getElementById('importReviewedBtn'), | 734 | importReviewedBtn: document.getElementById('importReviewedBtn'), |
| 730 | reviewerInput: document.getElementById('reviewerInput'), | 735 | reviewerDisplay: document.getElementById('reviewerDisplay'), |
| 736 | logoutBtn: document.getElementById('logoutBtn'), | ||
| 731 | reloadBtn: document.getElementById('reloadBtn'), | 737 | reloadBtn: document.getElementById('reloadBtn'), |
| 732 | prevPageBtn: document.getElementById('prevPageBtn'), | 738 | prevPageBtn: document.getElementById('prevPageBtn'), |
| 733 | nextPageBtn: document.getElementById('nextPageBtn'), | 739 | nextPageBtn: document.getElementById('nextPageBtn'), |
| ... | @@ -782,7 +788,12 @@ | ... | @@ -782,7 +788,12 @@ |
| 782 | } else { | 788 | } else { |
| 783 | localStorage.removeItem('l2AccessCode'); | 789 | localStorage.removeItem('l2AccessCode'); |
| 784 | } | 790 | } |
| 785 | els.reviewerInput.value = state.reviewer; | 791 | els.reviewerDisplay.textContent = state.reviewer; |
| 792 | // 恢复该审核人的 clientToken,保证未提交的领取记录可以继续操作 | ||
| 793 | const savedToken = localStorage.getItem(`l2ClientToken:${state.reviewer}`); | ||
| 794 | state.clientToken = savedToken || newClientToken(); | ||
| 795 | localStorage.setItem(`l2ClientToken:${state.reviewer}`, state.clientToken); | ||
| 796 | sessionStorage.setItem('l2ReviewClientToken', state.clientToken); | ||
| 786 | els.loginAccessCode.value = ''; | 797 | els.loginAccessCode.value = ''; |
| 787 | els.loginOverlay.classList.add('hidden'); | 798 | els.loginOverlay.classList.add('hidden'); |
| 788 | resolve(); | 799 | resolve(); |
| ... | @@ -797,7 +808,8 @@ | ... | @@ -797,7 +808,8 @@ |
| 797 | 808 | ||
| 798 | async function initReviewerIdentity() { | 809 | async function initReviewerIdentity() { |
| 799 | state.reviewer = (localStorage.getItem('l2ReviewerName') || '').trim(); | 810 | state.reviewer = (localStorage.getItem('l2ReviewerName') || '').trim(); |
| 800 | state.clientToken = sessionStorage.getItem('l2ReviewClientToken') || newClientToken(); | 811 | state.clientToken = localStorage.getItem(`l2ClientToken:${state.reviewer}`) || newClientToken(); |
| 812 | localStorage.setItem(`l2ClientToken:${state.reviewer}`, state.clientToken); | ||
| 801 | sessionStorage.setItem('l2ReviewClientToken', state.clientToken); | 813 | sessionStorage.setItem('l2ReviewClientToken', state.clientToken); |
| 802 | state.authToken = sessionStorage.getItem('l2ReviewAuthToken') || ''; | 814 | state.authToken = sessionStorage.getItem('l2ReviewAuthToken') || ''; |
| 803 | els.loginReviewer.value = state.reviewer; | 815 | els.loginReviewer.value = state.reviewer; |
| ... | @@ -814,7 +826,7 @@ | ... | @@ -814,7 +826,7 @@ |
| 814 | session_token: state.authToken | 826 | session_token: state.authToken |
| 815 | }); | 827 | }); |
| 816 | state.authToken = session.session_token; | 828 | state.authToken = session.session_token; |
| 817 | els.reviewerInput.value = state.reviewer; | 829 | els.reviewerDisplay.textContent = state.reviewer; |
| 818 | els.loginOverlay.classList.add('hidden'); | 830 | els.loginOverlay.classList.add('hidden'); |
| 819 | return; | 831 | return; |
| 820 | } catch { | 832 | } catch { |
| ... | @@ -1709,23 +1721,16 @@ | ... | @@ -1709,23 +1721,16 @@ |
| 1709 | } | 1721 | } |
| 1710 | 1722 | ||
| 1711 | els.runSelect.addEventListener('change', () => loadRun(els.runSelect.value)); | 1723 | els.runSelect.addEventListener('change', () => loadRun(els.runSelect.value)); |
| 1712 | els.reviewerInput.addEventListener('change', async () => { | 1724 | els.logoutBtn.addEventListener('click', async () => { |
| 1713 | const nextReviewer = els.reviewerInput.value.trim(); | ||
| 1714 | if (!nextReviewer) { | ||
| 1715 | els.reviewerInput.value = state.reviewer; | ||
| 1716 | return; | ||
| 1717 | } | ||
| 1718 | if (currentQuery()?.review_claimed_by === state.reviewer) { | 1725 | if (currentQuery()?.review_claimed_by === state.reviewer) { |
| 1719 | alert('请先完成当前审核,或等待领取过期后再切换审核人。'); | 1726 | if (!confirm('当前还有未提交的审核记录,确认登出?\n登出后领取将自然过期,其他人可重新领取。')) return; |
| 1720 | els.reviewerInput.value = state.reviewer; | ||
| 1721 | return; | ||
| 1722 | } | 1727 | } |
| 1723 | els.reviewerInput.value = state.reviewer; | ||
| 1724 | sessionStorage.removeItem('l2ReviewAuthToken'); | 1728 | sessionStorage.removeItem('l2ReviewAuthToken'); |
| 1725 | state.authToken = ''; | 1729 | state.authToken = ''; |
| 1726 | await showReviewLogin(nextReviewer); | 1730 | state.reviewer = ''; |
| 1727 | state.clientToken = newClientToken(); | 1731 | els.reviewerDisplay.textContent = ''; |
| 1728 | sessionStorage.setItem('l2ReviewClientToken', state.clientToken); | 1732 | await showReviewLogin(); |
| 1733 | // 不重置 clientToken,登出后同名称登录可继续操作已领取的记录 | ||
| 1729 | await loadGroups(); | 1734 | await loadGroups(); |
| 1730 | renderAll(); | 1735 | renderAll(); |
| 1731 | }); | 1736 | }); | ... | ... |
-
Please register or sign in to post a comment