Test Page

Dasbor Tim DISC
v3 · PDF per orang

Asesmen kepribadian karyawan

Dasbor tim DISC

Sumber data

Belum pasang Apps Script? Tarik satu atau beberapa file JSON hasil tes ke area ini, atau .

`; const nama = daftar.length===1 ? `DISC_${daftar[0].nama.replace(/\s+/g,"_")}` : `DISC_${daftar.length}_laporan`; const a=document.createElement("a"); a.href=URL.createObjectURL(new Blob([html],{type:"text/html;charset=utf-8"})); a.download=nama+".html"; a.click(); } function tutupLaporan(){ document.body.classList.remove("lapor"); $("laporan").innerHTML=""; } addEventListener("keydown",e=>{ if(e.key==="Escape"&&document.body.classList.contains("lapor")) tutupLaporan(); }); const PALET=["#2C4C93","#A32E3A","#2E7A5E","#B87E17","#6C4F9E","#1E7C8C","#96562B","#4A5560"]; const palet=n=>PALET[n%PALET.length]; /* ── render ───────────────────────────────────────────────── */ function gambar(){ if(!orang.length){ $("isi").innerHTML=""; return; } const divisi=[...new Set(orang.map(o=>o.posisi))].sort(); let baris=orang.filter(o=>{ const q=filter.toLowerCase(); return !q || (o.nama+" "+o.posisi+" "+o.mirror.profil).toLowerCase().includes(q); }); baris.sort((a,b)=>{ const f=o=>({Waktu:o.waktu,Nama:o.nama,Divisi:o.posisi,Profil:o.mirror.profil,Kode:o.mirror.kode}[urut.kol]??""); return (f(a)>f(b)?1:f(a)[k,orang.filter(o=>dominan(o)===k).length])); const maks=Math.max(...Object.values(hitung),1); const dipilih=baris.filter(o=>pilihan.has(o.nama+o.waktu)); const tampil=dipilih.length?dipilih:baris.slice(0,6); $("cap").textContent=`${orang.length} peserta`; $("isi").innerHTML=`
${orang.length}Peserta
${KEYS.map(k=>`
${hitung[k]}Dominan ${k}
`).join("")}

Komposisi tim

Sebaran tipe dominan

${KEYS.map(k=>`
${k}
${hitung[k]} · ${orang.length?Math.round(hitung[k]/orang.length*100):0}%
`).join("")}

Dihitung dari huruf tertinggi pada grafik Mirror tiap peserta.

Perbandingan

Grafik Mirror bertumpuk

${grafikBanding(tampil)}
${tampil.map((o,n)=>`${esc(o.nama)}`).join("")} ${tampil.length>1?`Rata-rata tim`:""}

${dipilih.length?"Menampilkan peserta yang dicentang.":"Belum ada yang dicentang — menampilkan 6 teratas."}

Daftar

Hasil per peserta

${dipilih.length?dipilih.length+" dicentang":"Centang untuk memilih siapa yang dicetak"} · di dialog cetak pilih Save as PDF dan centang Background graphics
${["Nama","Divisi","Kode","Profil"].map(k=>``).join("")} ${KEYS.map(k=>``).join("")} ${baris.map(o=>{const id=o.nama+o.waktu;return ` ${o.mirror.seg.map(v=>``).join("")} `}).join("")}
${k}${urut.kol===k?(urut.naik?" ↑":" ↓"):""}PDF${k}Tanggal${urut.kol==="Waktu"?(urut.naik?" ↑":" ↓"):""}
${esc(o.nama)} ${esc(o.posisi)} ${warnaKode(o.mirror.kode)} ${esc(o.mirror.profil)} ${v}${o.waktu?new Date(o.waktu).toLocaleDateString("id-ID",{day:"2-digit",month:"short",year:"2-digit"}):"—"}
${baris.length?"":`

Tidak ada yang cocok dengan pencarian.

`}

DISC menggambarkan kecenderungan perilaku, bukan kemampuan atau nilai seseorang. Gunakan dasbor ini untuk memahami komposisi tim dan merancang cara kerja bersama — bukan sebagai dasar tunggal untuk keputusan seleksi, promosi, atau penilaian kinerja.

`; $("cari").oninput=e=>{ filter=e.target.value; const p=e.target.selectionStart; gambar(); const c=$("cari"); c.focus(); c.setSelectionRange(p,p); }; $("bersih").onclick=()=>{ pilihan.clear(); gambar(); }; $("csv").onclick=unduhCSV; $("pdfAll").onclick=()=>{ const pilih=dipilih.length?dipilih:baris; if(pilih.length>25 && !confirm(`Akan mencetak ${pilih.length} laporan sekaligus. Lanjutkan?`)) return; bukaLaporan(pilih,false); }; document.querySelectorAll("button[data-pdf]").forEach(b=>b.onclick=()=>{ const o=orang.find(x=>x.nama+x.waktu===b.dataset.pdf); if(o) bukaLaporan([o],true); }); document.querySelectorAll("th[data-k]").forEach(th=>th.onclick=()=>{ const k=th.dataset.k; urut = urut.kol===k ? {kol:k,naik:!urut.naik} : {kol:k,naik:true}; gambar(); }); document.querySelectorAll('tbody input[type=checkbox]').forEach(cb=>cb.onchange=()=>{ cb.checked ? pilihan.add(cb.dataset.id) : pilihan.delete(cb.dataset.id); gambar(); }); } function unduhCSV(){ const head=["Nama","Divisi","Usia","Jenis Kelamin","Email","Kode Mirror","Profil Mirror", ...KEYS.map(k=>"Mirror "+k),"Kode Mask","Profil Mask","Kode Core","Profil Core","Tanggal"]; const q=v=>`"${String(v??"").replace(/"/g,'""')}"`; const rows=orang.map(o=>[o.nama,o.posisi,o.usia,o.jk,o.email,o.mirror.kode,o.mirror.profil, ...o.mirror.seg,o.mask.kode,o.mask.profil,o.core.kode,o.core.profil,o.waktu].map(q).join(",")); const blob=new Blob(["\uFEFF"+[head.map(q).join(","),...rows].join("\n")],{type:"text/csv;charset=utf-8"}); const a=document.createElement("a"); a.href=URL.createObjectURL(blob); a.download="DISC_tim.csv"; a.click(); } if(CONFIG.appsScriptURL) $("muat").click();