document.addEventListener('DOMContentLoaded', () => { const addBtn = document.getElementById('add-btn'); const addForm = document.getElementById('add-form'); const cancelBtn = document.getElementById('cancel-btn'); const saveBtn = document.getElementById('save-btn'); const envSelect = document.getElementById('env-select'); const clientInput = document.getElementById('client-input'); const usernameInput = document.getElementById('username-input'); const passwordInput = document.getElementById('password-input'); const rulesList = document.getElementById('rules-list'); const ENV_CONFIG = { PP: { domain: 'app135148.dingtalkoxm.com', url: 'https://app135148.dingtalkoxm.com/user/login' }, ATS: { domain: 'app135149.dingtalkoxm.com', url: 'https://app135149.dingtalkoxm.com/login' } }; let rules = []; let dragStartIndex = -1; // Load rules from chrome.storage function loadRules() { if (typeof chrome !== 'undefined' && chrome.storage) { chrome.storage.local.get(['quickPurgeAccounts'], (result) => { rules = result.quickPurgeAccounts || []; renderRules(); }); } else { renderRules(); } } function saveRules() { if (typeof chrome !== 'undefined' && chrome.storage) { chrome.storage.local.set({ quickPurgeAccounts: rules }, () => { renderRules(); }); } else { renderRules(); } } function toggleAddForm() { addForm.classList.toggle('hidden'); if (!addForm.classList.contains('hidden')) { clientInput.focus(); } } addBtn.addEventListener('click', toggleAddForm); cancelBtn.addEventListener('click', () => { addForm.classList.add('hidden'); resetForm(); }); function resetForm() { envSelect.value = 'PP'; clientInput.value = ''; usernameInput.value = ''; passwordInput.value = ''; } saveBtn.addEventListener('click', () => { const env = envSelect.value; const clientName = clientInput.value.trim(); const username = usernameInput.value.trim(); const password = passwordInput.value; if (!clientName || !username || !password) { alert('请填写完整的客户名称、账号和密码!'); return; } rules.push({ id: Date.now().toString(), env: env, clientName: clientName, username: username, password: password }); saveRules(); addForm.classList.add('hidden'); resetForm(); }); function renderRules() { rulesList.innerHTML = ''; if (rules.length === 0) { rulesList.innerHTML = `
暂无账号配置,点击上方 "+" 添加
`; return; } rules.forEach((rule, index) => { const li = document.createElement('li'); li.className = 'rule-item'; li.setAttribute('draggable', 'true'); li.setAttribute('data-index', index.toString()); li.innerHTML = `
${rule.clientName} ${rule.env}
帐号: ${rule.username}
`; addDragEvents(li); rulesList.appendChild(li); }); document.querySelectorAll('.btn-delete').forEach(btn => { btn.addEventListener('click', (e) => { const id = e.currentTarget.getAttribute('data-id'); rules = rules.filter(r => r.id !== id); saveRules(); }); }); document.querySelectorAll('.btn-execute').forEach(btn => { btn.addEventListener('click', (e) => { const button = e.currentTarget; const id = button.getAttribute('data-id'); const rule = rules.find(r => r.id === id); if (rule) { executePurgeAndLogin(rule, button); } }); }); } // --- Drag and Drop functionality --- function addDragEvents(item) { item.addEventListener('dragstart', (e) => { dragStartIndex = parseInt(e.currentTarget.getAttribute('data-index')); e.currentTarget.classList.add('dragging'); // Set empty ghost image if (e.dataTransfer) { e.dataTransfer.effectAllowed = 'move'; // Need to set data to allow dragging in Firefox e.dataTransfer.setData('text/plain', dragStartIndex); } }); item.addEventListener('dragend', (e) => { e.currentTarget.classList.remove('dragging'); }); item.addEventListener('dragover', (e) => { e.preventDefault(); // Allow drop return false; }); item.addEventListener('dragenter', (e) => { e.preventDefault(); }); item.addEventListener('drop', (e) => { e.stopPropagation(); const dragEndIndex = parseInt(e.currentTarget.closest('.rule-item').getAttribute('data-index')); if (dragStartIndex !== dragEndIndex) { swapItems(dragStartIndex, dragEndIndex); } return false; }); } function swapItems(fromIndex, toIndex) { // Array manipulation for drag sorting const itemOne = rules[fromIndex]; rules.splice(fromIndex, 1); rules.splice(toIndex, 0, itemOne); saveRules(); } function executePurgeAndLogin(rule, buttonElement) { const svg = buttonElement.querySelector('svg'); const originalSvg = svg.outerHTML; buttonElement.innerHTML = ``; if (typeof chrome !== 'undefined' && chrome.runtime) { const config = ENV_CONFIG[rule.env]; chrome.runtime.sendMessage({ action: "purgeAndRedirect", domain: config.domain, targetUrl: config.url, username: rule.username, password: rule.password }, (response) => { // Will visually reset only if popup is somehow still open after redirect (unlikely as active tab changes) buttonElement.innerHTML = originalSvg; }); } else { setTimeout(() => { console.log(`Mock: Purging ${rule.env} and filling ${rule.username}`); buttonElement.innerHTML = originalSvg; }, 1000); } } loadRules(); });