- src/data/site.json 신설(매체 이름·로고·홈 큐레이션), factSheet에 kind·areaLabel·transitShort·transitNote·reservationUrl·doctorsUrl·youtube.title 추가
- lib.ts: PENDING('확인 대기')·v()·has()·surface()·editor() 도입, 스키마는 빈 값을 빼고 생성
- 페이지·컴포넌트 15개에서 뷰성형외과 하드코딩 제거, 빈 데이터 empty-state (글 0편·영상 0건·뉴스 0건·이미지 없음)
- 검증: 28페이지 표시 텍스트·구조 지문 이전 빌드와 동일(홈 title 마침표 1건만 정정), JSON-LD 차이는 빈 sameAs 제거뿐
- scripts/export_template.mjs + scripts/template/data(빈 데이터 세트) → templates/supporters-astro (빈 데이터로 10페이지 0오류 빌드, 게이트 통과)
- 게이트 픽스처를 자체 authors로 분리해 템플릿에서도 테스트 통과, 구조 기준선의 글 상세 페이지는 사전순 첫 글로 동적 선택
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
20 lines
1.4 KiB
Plaintext
20 lines
1.4 KiB
Plaintext
---
|
|
import { supporter, physician } from '../lib';
|
|
interface Props { author: string; reviewer?: string; status: 'reviewed' | 'pending'; dateModified: string }
|
|
const { author, reviewer, status, dateModified } = Astro.props;
|
|
const a = supporter(author);
|
|
const p = reviewer ? physician(reviewer) : null;
|
|
---
|
|
<section class="review-box" aria-label="작성·감수 정보">
|
|
{p?.image ? <img src={p.image} alt={`${p.name} ${p.title}`} width="56" height="56" /> : <div class="avatar">{a.name.slice(0, 1)}</div>}
|
|
<div>
|
|
<div><strong>작성</strong> <a href={`/authors/${author}`}>{a.name}</a> · {a.role} {a.email ? <> · 정정 요청 <a href={`mailto:${a.email}`}>{a.email}</a></> : <> · 정정 요청은 <a href="/corrections">정정 기록</a> 페이지 안내를 따릅니다</>}</div>
|
|
{p && status === 'reviewed' ? (
|
|
<div><strong>의학 검토</strong> {p.name} {p.title} <span class="badge reviewed">검토 완료 {dateModified}</span></div>
|
|
) : (
|
|
<div><strong>의학 검토</strong> <span class="badge pending">검토 대기</span> <span style="color:var(--slate-500)">병원이 담당 원장과 검토일을 확정하면 표시합니다.</span></div>
|
|
)}
|
|
<div style="color:var(--slate-500);margin-top:0.3rem">서포터즈는 의학적 판단을 하지 않습니다. 시술 여부와 방법은 반드시 전문의 상담으로 결정하세요.</div>
|
|
</div>
|
|
</section>
|