사번 필드 및 상세 정보 반영

This commit is contained in:
hyunho
2026-03-25 17:34:37 +09:00
parent 485a581089
commit 8ac6aa6b72
3 changed files with 347 additions and 71 deletions

View File

@@ -36,6 +36,7 @@ function toLegacyMember(item) {
_id: String(item.id),
id: item.id,
이름: item.name || '',
사번: item.employee_id || '',
소속회사: item.company || '',
직급: item.rank || '',
직책: item.role || '',
@@ -57,6 +58,7 @@ function toLegacyMember(item) {
function toApiMember(member, sortOrder) {
return {
name: member['이름'] || '',
employee_id: member['사번'] || '',
company: member['소속회사'] || '',
rank: member['직급'] || '',
role: member['직책'] || '',
@@ -381,6 +383,12 @@ function updateStatsTable() {
const columns = Object.keys(rankGroups);
const stats = {};
const companyLabelHtml = (company) => `
<span class="stats-company-label">
<span class="stats-company-dot co-${company}"></span>
<span>${company}</span>
</span>
`;
companies.forEach((company) => {
stats[company] = {};
@@ -418,7 +426,7 @@ function updateStatsTable() {
let grandTotal = 0;
companies.forEach((company) => {
html += `<tr><td class="row-label">${company}</td>${columns.map((column) => {
html += `<tr><td class="row-label">${companyLabelHtml(company)}</td>${columns.map((column) => {
colSums[column] += stats[company][column];
return `<td>${stats[company][column] || '-'}</td>`;
}).join('')}<td class="total-cell">${stats[company]._total}</td></tr>`;
@@ -515,6 +523,7 @@ function updateFabMenu() {
let html = '<button class="fab-sub shadow-xl" data-label="리스트" onclick="openListViewModal(event)">📋</button>';
html += '<button class="fab-sub shadow-xl" data-label="조직도 인쇄(A3)" onclick="printA3()">🖨️</button>';
if (isAdmin) {
html += '<button class="fab-sub shadow-xl" data-label="자리배치도" onclick="openSeatMapView(event)">🪑</button>';
html += '<button class="fab-sub shadow-xl" data-label="조직현황 업로드" onclick="triggerUpload(event)">⬆️</button>';
html += '<button class="fab-sub shadow-xl" data-label="신규 구성원" onclick="openAddModal(event)">👤</button>';
html += '<button class="fab-sub shadow-xl" data-label="신규 팀/그룹/셀" onclick="openUnitAddModal(event)">🏢</button>';
@@ -522,6 +531,14 @@ function updateFabMenu() {
menu.innerHTML = html;
}
function openSeatMapView(event) {
event.stopPropagation();
document.getElementById('fab-container').classList.remove('active');
if (window.parent && window.parent !== window) {
window.parent.postMessage({ type: 'open-seatmap' }, '*');
}
}
function triggerUpload(event) {
if (event) {
event.stopPropagation();
@@ -796,6 +813,10 @@ function openModal(id) {
<p class="text-slate-400 text-xs mt-1 font-medium">${(member._path || []).map((path) => path.name).join(' > ')}</p>
</div>
<div class="w-full grid grid-cols-2 gap-3 mt-4">
<div class="bg-slate-50 p-4 rounded-2xl border border-slate-100 col-span-2">
<label class="text-[10px] text-slate-400 font-bold block mb-1">사번</label>
<span class="text-sm font-black text-slate-700">${member['사번'] || '정보 없음'}</span>
</div>
<div class="bg-indigo-50 p-4 rounded-2xl border border-indigo-100 col-span-2 flex items-center gap-4">
<div class="flex-1">
<label class="text-[10px] text-indigo-400 font-bold block mb-1">연락처</label>
@@ -872,6 +893,7 @@ function openModal(id) {
<div id="modal-sec-basic" class="grid grid-cols-2 gap-4">
<input type="hidden" id="m-id" value="${id || ''}">
<div class="col-span-2"><label class="text-[11px] font-black text-slate-600 block">이름 (필수)</label><input id="m-name" value="${member['이름'] || ''}" class="w-full bg-slate-50 p-3 rounded-xl border font-bold text-sm outline-none"></div>
<div class="col-span-2"><label class="text-[11px] font-black text-slate-600 block">사번</label><input id="m-employee-id" value="${member['사번'] || ''}" class="w-full bg-white p-3 rounded-xl border font-bold text-sm outline-none"></div>
<div class="col-span-1"><label class="text-[11px] font-black text-slate-600 block">전화번호</label><input id="m-phone" value="${member['전화번호'] || ''}" class="w-full bg-white p-3 rounded-xl border font-bold text-sm outline-none"></div>
<div class="col-span-1"><label class="text-[11px] font-black text-slate-600 block">이메일</label><input id="m-email" value="${member['이메일'] || ''}" class="w-full bg-white p-3 rounded-xl border font-bold text-sm outline-none"></div>
<div class="col-span-2"><label class="text-[11px] font-black text-slate-600 block">자리 위치</label><input id="m-seat" value="${member['자리위치'] || ''}" class="w-full bg-white p-3 rounded-xl border font-bold text-sm outline-none"></div>
@@ -912,6 +934,7 @@ async function saveMember() {
}
member['이름'] = name;
member['사번'] = document.getElementById('m-employee-id').value.trim();
dropdownFields.forEach((field) => {
const selectValue = document.getElementById(`sel-${field}`).value;
if (selectValue === '__NEW__') {