feat(view): 교각 목록 and bulk line in the ③ left column (시안 ③)

The ③ screen had no pier list. The left column now has the 교각 목록 with
checkboxes and a 배근 status (계산됨 / 오류), the 선택 n기 line with 속성 복사…,
then 부재 · 배근 타입. The checks are shared with ① and ②.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
This commit is contained in:
ypshimandClaude Haiku 5.5 committed 2026-10-22 12:25:32 +09:00
1 parent 1074fdf428
commit e7f57f0a8a
2 files changed
+19 -3

No files matched your search

+10 -2
View File
@@ -135,8 +135,16 @@
</main>
<main class="grid rebar" id="view-rebar" hidden>
<aside class="panel piers" aria-labelledby="rebar-member-title">
<p id="rebar-member-title" class="lbl">부재</p>
<aside class="panel piers" aria-labelledby="rebar-pier-title">
<p id="rebar-pier-title" class="lbl">교각 목록</p>
<div class="phead" aria-hidden="true"><span></span><span>교각</span><span>배근</span></div>
<ul id="rebar-pier-items" class="pier-items"></ul>
<div class="bulk">
<b id="rebar-bulk-count">선택 0기</b>
<span class="grow"></span>
<button id="rebar-bulk-copy" class="btn-o" type="button" disabled>속성 복사…</button>
</div>
<p id="rebar-member-title" class="lbl members-title">부재 · 배근 타입</p>
<ul id="rebar-tabs" class="members"></ul>
<p class="pnote">형상은 ② 형상계획 기준입니다. 형상이 바뀌면 "형상 바뀜"으로 표시합니다.</p>
</aside>
+9 -1
View File
@@ -252,7 +252,7 @@ function renderPierList(): void {
}
/** Rows of the pier list. ① shows the type and warnings; ② shows the count of changes from the defaults. */
function renderPierRows(list: HTMLUListElement, mode: 'shape' | 'plan'): void {
function renderPierRows(list: HTMLUListElement, mode: 'shape' | 'plan' | 'rebar'): void {
list.replaceChildren();
const visible = state.piers.filter((p) => state.filter === 'all' || p.input.type === state.filter);
for (const pier of visible) {
@@ -276,6 +276,8 @@ function renderPierRows(list: HTMLUListElement, mode: 'shape' | 'plan'): void {
});
const badge = mode === 'plan'
? el('span', `변경 ${overrideKeys(pier).length}`, 'badge')
: mode === 'rebar'
? (pier.model ? el('span', '계산됨', 'badge') : el('span', '오류', 'badge error'))
: pier.model
? el('span', `${pier.input.type}${pier.issues.some((i) => i.level !== 'I') ? ' · 경고' : ''}`, 'badge')
: el('span', '오류', 'badge error');
@@ -701,6 +703,11 @@ const REBAR_MEMBERS: { id: RebarRow['member']; label: string }[] = [
function renderRebar(): void {
const pier = activePier();
// 교각 목록 with the 배근 status (시안 ③). The checks are the same as in ① and ②.
renderPierRows($<HTMLUListElement>('rebar-pier-items'), 'rebar');
const checked = state.piers.filter((p) => p.checked).length;
$('rebar-bulk-count').textContent = `선택 ${checked}기`;
$<HTMLButtonElement>('rebar-bulk-copy').disabled = !pier;
const tabs = $<HTMLUListElement>('rebar-tabs');
tabs.replaceChildren();
for (const m of REBAR_MEMBERS) {
@@ -1247,6 +1254,7 @@ $<HTMLButtonElement>('dlg-apply').addEventListener('click', applyImport);
$<HTMLButtonElement>('regen').addEventListener('click', regenerateChecked);
$<HTMLButtonElement>('bulk-regen').addEventListener('click', regenerateChecked);
$<HTMLButtonElement>('bulk-copy').addEventListener('click', openCopyDialog);
$<HTMLButtonElement>('rebar-bulk-copy').addEventListener('click', openCopyDialog);
$<HTMLButtonElement>('nav-shape').addEventListener('click', () => setStage('shape'));
$<HTMLButtonElement>('nav-plan').addEventListener('click', () => setStage('plan'));
$<HTMLButtonElement>('nav-rebar').addEventListener('click', () => setStage('rebar'));