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();
});