Multi-Seller Marketplace Security Verifier

Multi-Seller Marketplace Security Verifier

Analyze seller profiles to generate a comprehensive Trust Score.

Overall Trust Score

0 out of 100

Trust Factor Breakdown

Seller Metrics

Seller Verification Report

Verification Date:

Seller:

Overall Trust Score

Performance Metrics

MetricValueWeight

Trust Factor Breakdown

Trust Factor Breakdown Chart

${s.name}

Score: ${score.toFixed(0)}/100

`); }); } function renderSellerSelect() { sellerSelect.innerHTML = sellers.map(s => ``).join(''); } // --- EVENT HANDLERS & FORMS --- sellerSelect.addEventListener('change', renderDashboard); weightsForm.addEventListener('input', (e) => { if (e.target.classList.contains('weight-input')) { const key = e.target.dataset.key; scoreWeights[key] = parseFloat(e.target.value) || 0; updateTotalWeight(); renderAll(); } }); sellerForm.addEventListener('submit', (e) => { e.preventDefault(); const data = {}; Object.keys(metricKeys).forEach(key => data[key] = parseFloat(document.getElementById(`seller-${key}`).value)); data.name = document.getElementById('seller-name').value; if (editingSellerId) { Object.assign(sellers.find(s => s.id === editingSellerId), data); } else { data.id = Date.now(); sellers.push(data); } resetSellerForm(); renderAll(); }); document.getElementById('seller-list').addEventListener('click', (e) => { if (e.target.classList.contains('seller-edit')) setupEditForm(parseInt(e.target.dataset.id)); if (e.target.classList.contains('seller-delete')) deleteSeller(parseInt(e.target.dataset.id)); }); document.getElementById('seller-form').addEventListener('click', (e) => { if (e.target.id === 'cancel-edit-btn') resetSellerForm(); }); function resetSellerForm() { sellerForm.reset(); editingSellerId = null; document.getElementById('seller-form-title').textContent = 'Add New Seller'; document.getElementById('cancel-edit-btn').style.display = 'none'; } function setupEditForm(id) { const s=sellers.find(s=>s.id===id); if(!s)return; document.getElementById('seller-id').value=s.id; document.getElementById('seller-name').value=s.name; Object.keys(metricKeys).forEach(k=>document.getElementById(`seller-${k}`).value=s[k]); editingSellerId=id; document.getElementById('seller-form-title').textContent='Edit Seller'; document.getElementById('cancel-edit-btn').style.display='inline-block';} function deleteSeller(id) { if (confirm('Delete seller?')) { sellers = sellers.filter(s => s.id !== id); renderAll(); } } function updateTotalWeight() { const total = Object.values(scoreWeights).reduce((a, b) => a + b, 0); const el = document.getElementById('total-weight'); el.textContent = `${total}%`; el.style.color = total !== 100 ? '#ef4444' : '#16a34a'; } downloadPdfBtn.addEventListener('click', generatePdf); // --- TABS & NAVIGATION --- window.switchTab = (tabName) => { currentTab = tabName; Object.values(tabBtns).forEach(b=>b.classList.replace('tab-active', 'tab-inactive')); Object.values(tabContents).forEach(c=>c.style.display='none'); tabBtns[tabName].classList.replace('tab-inactive', 'tab-active'); tabContents[tabName].style.display = 'block'; }; window.navigateTabs = (dir) => { if (dir==='next' && currentTab==='verifier') switchTab('config'); else if (dir==='prev' && currentTab==='config') switchTab('verifier'); }; // --- PDF GENERATION --- async function generatePdf() { const { jsPDF } = window.jspdf; const pdfReportElement = document.getElementById('pdf-report'); const seller = sellers.find(s => s.id === parseInt(sellerSelect.value)); if (!seller) return alert('Please select a seller.'); const { score } = calculateScore(seller); document.getElementById('pdf-date').textContent = new Date().toLocaleDateString('en-US'); document.getElementById('pdf-seller-name').textContent = seller.name; document.getElementById('pdf-score').textContent = score.toFixed(0); document.getElementById('pdf-assessment').textContent = document.getElementById('trust-assessment').textContent; document.getElementById('pdf-score-card').style.backgroundColor = {Verified: '#f0fdf4', 'Review Manually': '#fefce8', 'High Risk': '#fee2e2'}[document.getElementById('trust-assessment').textContent]; document.querySelector('#pdf-score-card p').style.color = document.getElementById('score-circle').style.borderColor; const pdfTableBody = document.getElementById('pdf-table-body'); pdfTableBody.innerHTML = ''; Object.keys(metricKeys).forEach(key => { const value = key === 'identity' ? (seller[key] ? 'Verified' : 'Unverified') : seller[key].toLocaleString(); pdfTableBody.insertAdjacentHTML('beforeend', `${metricKeys[key].label}${value}${scoreWeights[key]}%`); }); document.getElementById('pdf-chart-image').src = scoreChart.toBase64Image(); const canvas = await html2canvas(pdfReportElement, { scale: 2 }); const imgData = canvas.toDataURL('image/jpeg', 0.85); const pdf = new jsPDF('p', 'mm', 'a4'); const pdfWidth = pdf.internal.pageSize.getWidth(); const pdfHeight = (canvas.height * pdfWidth) / canvas.width; pdf.addImage(imgData, 'JPEG', 0, 0, pdfWidth, pdfHeight); pdf.save(`Seller-Verification-${seller.name}.pdf`); } // --- INITIALIZATION --- function init() { scoreWeights = { age: 15, sales: 25, reviews: 30, chargebacks: 20, identity: 10 }; sellers = [ { id: 1, name: 'Premium Tech Outlet', age: 800, sales: 6200, reviews: 4.8, chargebacks: 0.5, identity: 1 }, { id: 2, name: 'QuickShip Goods', age: 120, sales: 850, reviews: 4.5, chargebacks: 1.2, identity: 1 }, { id: 3, name: 'Bargain Bin', age: 30, sales: 200, reviews: 3.8, chargebacks: 2.5, identity: 0 }, { id: 4, name: 'Global Exports Inc.', age: 1500, sales: 10000, reviews: 4.2, chargebacks: 1.8, identity: 1 } ]; renderAll(); } init(); });
Scroll to Top