📌 보드 기능 자동 병합 도구

📌 대시보드 보드 기능 자동 병합 도구

원본 대시보드 HTML을 붙여넣고 버튼 하나만 누르면 보드 기능이 통합된 완성 파일이 다운로드됩니다.

1단계: 원본 대시보드 HTML 붙여넣기

dashboard_v16_final.html 파일을 메모장으로 열어서 전체 복사(Ctrl+A → Ctrl+C) 후 아래에 붙여넣기

2단계: 병합 실행

또는: 파일 선택으로 바로 병합

직전) var boardJS="\n// =============================================\n// 📌 보드 관리 JavaScript\n// =============================================\nvar currentBoardId='';var selectedBoardLayout='masonry';var BOARD_VIEWER_BASE='https://queran.or.kr/board';\nfunction selectBoardLayout(el,layout){selectedBoardLayout=layout;document.getElementById('board-layout-input').value=layout;['masonry','grid','timeline'].forEach(function(l){var opt=document.getElementById('layout-opt-'+l);if(opt){opt.style.borderColor=(l===layout)?'#e85d04':'var(--border)';opt.style.background=(l===layout)?'#fff7ed':'#fff';}});}\nfunction openCreateBoardModal(){document.getElementById('board-edit-id').value='';document.getElementById('board-name-input').value='';document.getElementById('board-schedule-input').value='weekly';document.getElementById('board-visibility-input').value='PUBLIC';selectBoardLayout(null,'masonry');document.getElementById('btn-save-board').innerText='📌 생성';document.getElementById('board-create-modal').classList.add('active');}\nfunction openEditBoardModal(bid,name,sch,lay,vis){document.getElementById('board-edit-id').value=bid;document.getElementById('board-name-input').value=name;document.getElementById('board-schedule-input').value=sch;document.getElementById('board-visibility-input').value=vis;selectBoardLayout(null,lay);document.getElementById('btn-save-board').innerText='💾 수정';document.getElementById('board-create-modal').classList.add('active');}\nfunction saveBoardData(){var eid=document.getElementById('board-edit-id').value;var bd={name:document.getElementById('board-name-input').value.trim(),schedule:document.getElementById('board-schedule-input').value,layout:document.getElementById('board-layout-input').value,visibility:document.getElementById('board-visibility-input').value};if(!bd.name)return alert('보드 이름을 입력해주세요.');var btn=document.getElementById('btn-save-board');btn.innerText='저장 중...';btn.disabled=true;var act=eid?'updateBoard':'createBoard';var pl=eid?{boardId:eid,boardData:bd,userId:currentUser.name}:{boardData:bd,userId:currentUser.name};api(act,pl).then(function(r){btn.innerText=eid?'💾 수정':'📌 생성';btn.disabled=false;if(r.success){showToast(r.message);document.getElementById('board-create-modal').classList.remove('active');loadBoardList();}else{alert(r.message);}});}\nfunction loadBoardList(){document.getElementById('board-list-container').innerHTML='

로딩 중...

';api('getBoards').then(function(r){if(!r.success||!r.boards||r.boards.length===0){document.getElementById('board-list-container').innerHTML='

보드 없음. 새 보드를 만들어보세요!

';return;}var h='';r.boards.forEach(function(b){var sl=b.schedule==='weekly'?'📆 매주':b.schedule==='monthly'?'📅 매월':'1️⃣ 1회성';var ll=b.layout==='masonry'?'🧱 벽돌형':b.layout==='grid'?'📐 그리드':'📜 타임라인';var vl=b.visibility==='PUBLIC'?'🌐 공개':'🔒 비공개';var ds=b.createdAt?new Date(b.createdAt).toLocaleDateString('ko-KR'):'';var vu=BOARD_VIEWER_BASE+'?pid='+currentProjectId+'&bid='+b.boardId;var sn=b.name.replace(/'/g,\"\\\\'\");h+='
📌 '+b.name+'
'+sl+' · '+ll+' · '+vl+'
📊 카드 '+b.cardCount+'개 · '+ds+'
';});document.getElementById('board-list-container').innerHTML=h;});}\nfunction deleteBoardDash(bid,bn){if(!confirm('['+bn+'] 삭제?'))return;api('deleteBoard',{boardId:bid,userId:currentUser.name}).then(function(r){showToast(r.message);loadBoardList();});}\nfunction openBoardDetail(bid,bn){currentBoardId=bid;document.getElementById('board-detail-title').innerText='📌 '+bn;document.getElementById('board-embed-area').style.display='none';switchPanel('view-board-detail');loadBoardDetailCards();}\nfunction loadBoardDetailCards(){var wf=document.getElementById('board-week-filter').value;document.getElementById('board-cards-table').innerHTML='

로딩 중...

';api('getBoardCards',{boardId:currentBoardId,weekLabel:wf||''}).then(function(r){if(!r.success)return;var sel=document.getElementById('board-week-filter');var cv=sel.value;sel.innerHTML='';(r.weeks||[]).forEach(function(w){sel.innerHTML+='';});sel.value=cv;if(!r.cards||r.cards.length===0){document.getElementById('board-cards-table').innerHTML='

카드 없음

';return;}var h='';r.cards.forEach(function(c,i){var ds=c.createdAt?new Date(c.createdAt).toLocaleString('ko-KR',{month:'short',day:'numeric',hour:'2-digit',minute:'2-digit'}):'-';var tp=(c.text||'').substring(0,60);var img=c.imageUrl?'📷':'-';var best=c.isBest?'⭐ YES':'-';var tr=0;for(var k in c.reactions)tr+=c.reactions[k].length;h+='';});document.getElementById('board-cards-table').innerHTML=h+'
#작성자본문이미지주차베스트리액션댓글작성일관리
'+(i+1)+''+c.author+''+tp+''+img+''+c.weekLabel+''+best+''+tr+''+(c.commentCount||0)+''+ds+'
';});}\nfunction adminToggleBest(cid){api('toggleBestCard',{boardId:currentBoardId,cardId:cid,userId:currentUser.name}).then(function(r){showToast(r.message);loadBoardDetailCards();});}\nfunction adminDeleteCard(cid){if(!confirm('삭제?'))return;api('deleteBoardCard',{boardId:currentBoardId,cardId:cid,userId:currentUser.name}).then(function(r){showToast(r.message);loadBoardDetailCards();});}\nfunction showBoardEmbed(){var a=document.getElementById('board-embed-area');a.style.display=a.style.display==='none'?'block':'none';var u=BOARD_VIEWER_BASE+'?pid='+currentProjectId+'&bid='+currentBoardId;document.getElementById('board-share-url').value=u;document.getElementById('board-embed-code').value='';}\nfunction exportBoardCsvDash(){showToast('CSV 생성 중...');api('exportBoardCsv',{boardId:currentBoardId}).then(function(r){if(!r.success)return alert(r.message);var b=new Blob([r.csvData],{type:'text/csv;charset=utf-8;'});var u=URL.createObjectURL(b);var a=document.createElement('a');a.href=u;a.download=r.filename||'board.csv';document.body.appendChild(a);a.click();document.body.removeChild(a);URL.revokeObjectURL(u);showToast('📥 완료!');});}\n"; var lastScript=html.lastIndexOf('<\/script>'); if(lastScript>-1){html=html.substring(0,lastScript)+boardJS+'\n'+html.substring(lastScript);changes++;} if(changes>=5){ st.innerHTML='
✅ 병합 성공! ('+changes+'곳 수정) — 파일 다운로드 중...
'; var blob=new Blob([html],{type:'text/html;charset=utf-8'}); var url=URL.createObjectURL(blob); var a=document.createElement('a'); a.href=url;a.download='dashboard_v17_board.html'; document.body.appendChild(a);a.click();document.body.removeChild(a); URL.revokeObjectURL(url); } else { st.innerHTML='
⚠️ 일부 앵커를 찾지 못했습니다 ('+changes+'/6). 원본 파일이 맞는지 확인해주세요.
'; } }