From 6471f4365af9d6d1c6d96bf70cf65dd93e99d57f Mon Sep 17 00:00:00 2001 From: jcchoi Date: Sun, 11 Oct 2026 16:14:08 +0900 Subject: [PATCH] =?UTF-8?q?=EC=A0=91=EA=B7=BC=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/acntg-code-tab-panel.tsx | 14 ++--- .../pages/code-management/ui/acntg-se-row.tsx | 7 ++- .../ui/cnstp-code-tab-panel.tsx | 18 +++---- .../pages/code-management/ui/cnstp-se-row.tsx | 13 +++-- .../ui/fnrs-shar-code-tab-panel.tsx | 14 ++--- .../code-management/ui/fnrs-shar-se-row.tsx | 7 ++- .../common/components/src/ui/footer/index.tsx | 54 ++++++++++--------- 7 files changed, 75 insertions(+), 52 deletions(-) diff --git a/apps/as/src/pages/code-management/ui/acntg-code-tab-panel.tsx b/apps/as/src/pages/code-management/ui/acntg-code-tab-panel.tsx index 6441b2f83..b85fc43fe 100644 --- a/apps/as/src/pages/code-management/ui/acntg-code-tab-panel.tsx +++ b/apps/as/src/pages/code-management/ui/acntg-code-tab-panel.tsx @@ -115,13 +115,13 @@ function AcntgCodeTabPanel() { - 코드 - 코드명 - 설명 - 사용 여부 - 정렬순서 - 구분 - 관리 + 코드 + 코드명 + 설명 + 사용 여부 + 정렬순서 + 구분 + 관리 diff --git a/apps/as/src/pages/code-management/ui/acntg-se-row.tsx b/apps/as/src/pages/code-management/ui/acntg-se-row.tsx index 2ec5a7b16..18dc1e143 100644 --- a/apps/as/src/pages/code-management/ui/acntg-se-row.tsx +++ b/apps/as/src/pages/code-management/ui/acntg-se-row.tsx @@ -40,9 +40,10 @@ function AcntgSeRowComponent({ row, depth, onChange, onAddChild, onDelete }: Acn value={row.acntgSeCd} onChange={(e) => onChange({ acntgSeCd: e.target.value })} placeholder="코드" + title="코드" maxLength={10} disabled={!row.isNew} - className="flex-1" + className="flex-1 disabled:opacity-100" /> @@ -51,6 +52,7 @@ function AcntgSeRowComponent({ row, depth, onChange, onAddChild, onDelete }: Acn value={row.acntgSeCdNm ?? ""} onChange={(e) => onChange({ acntgSeCdNm: e.target.value })} placeholder="코드명" + title="코드명" maxLength={100} /> @@ -59,6 +61,7 @@ function AcntgSeRowComponent({ row, depth, onChange, onAddChild, onDelete }: Acn value={row.expln ?? ""} onChange={(e) => onChange({ expln: e.target.value })} placeholder="설명" + title="설명" maxLength={1000} /> @@ -66,6 +69,7 @@ function AcntgSeRowComponent({ row, depth, onChange, onAddChild, onDelete }: Acn onChange({ useYn: v })} + aria-label="사용 여부" className="flex justify-center gap-4" >
@@ -82,6 +86,7 @@ function AcntgSeRowComponent({ row, depth, onChange, onAddChild, onDelete }: Acn onChange({ sortSeq: e.target.value ? Number(e.target.value) : undefined }) diff --git a/apps/as/src/pages/code-management/ui/cnstp-code-tab-panel.tsx b/apps/as/src/pages/code-management/ui/cnstp-code-tab-panel.tsx index 7145f9316..ce662ab52 100644 --- a/apps/as/src/pages/code-management/ui/cnstp-code-tab-panel.tsx +++ b/apps/as/src/pages/code-management/ui/cnstp-code-tab-panel.tsx @@ -115,15 +115,15 @@ function CnstpCodeTabPanel() { - 코드 - 코드명 - 설명 - 숫자 여부 - 소숫점 단위 - 사용 여부 - 정렬순서 - 구분 - 관리 + 코드 + 코드명 + 설명 + 숫자 여부 + 소숫점 단위 + 사용 여부 + 정렬순서 + 구분 + 관리 diff --git a/apps/as/src/pages/code-management/ui/cnstp-se-row.tsx b/apps/as/src/pages/code-management/ui/cnstp-se-row.tsx index 85c69a3d1..de8f14147 100644 --- a/apps/as/src/pages/code-management/ui/cnstp-se-row.tsx +++ b/apps/as/src/pages/code-management/ui/cnstp-se-row.tsx @@ -40,9 +40,10 @@ function CnstpSeRowComponent({ row, depth, onChange, onAddChild, onDelete }: Cns value={row.cnstpSeCd} onChange={(e) => onChange({ cnstpSeCd: e.target.value })} placeholder="코드" + title="코드" maxLength={10} disabled={!row.isNew} - className="flex-1" + className="flex-1 disabled:opacity-100" />
@@ -51,6 +52,7 @@ function CnstpSeRowComponent({ row, depth, onChange, onAddChild, onDelete }: Cns value={row.cnstpSeCdNm ?? ""} onChange={(e) => onChange({ cnstpSeCdNm: e.target.value })} placeholder="코드명" + title="코드명" maxLength={100} /> @@ -59,6 +61,7 @@ function CnstpSeRowComponent({ row, depth, onChange, onAddChild, onDelete }: Cns value={row.expln ?? ""} onChange={(e) => onChange({ expln: e.target.value })} placeholder="설명" + title="설명" maxLength={1000} /> @@ -66,15 +69,16 @@ function CnstpSeRowComponent({ row, depth, onChange, onAddChild, onDelete }: Cns onChange({ numYn: v })} + aria-label="숫자 여부" className="flex justify-center gap-4" >
- +
- +
@@ -82,6 +86,7 @@ function CnstpSeRowComponent({ row, depth, onChange, onAddChild, onDelete }: Cns onChange({ dcptUnitCnt: e.target.value ? Number(e.target.value) : undefined }) @@ -93,6 +98,7 @@ function CnstpSeRowComponent({ row, depth, onChange, onAddChild, onDelete }: Cns onChange({ useYn: v })} + aria-label="사용 여부" className="flex justify-center gap-4" >
@@ -109,6 +115,7 @@ function CnstpSeRowComponent({ row, depth, onChange, onAddChild, onDelete }: Cns onChange({ sortSeq: e.target.value ? Number(e.target.value) : undefined }) diff --git a/apps/as/src/pages/code-management/ui/fnrs-shar-code-tab-panel.tsx b/apps/as/src/pages/code-management/ui/fnrs-shar-code-tab-panel.tsx index fa6089a27..b14c46fbd 100644 --- a/apps/as/src/pages/code-management/ui/fnrs-shar-code-tab-panel.tsx +++ b/apps/as/src/pages/code-management/ui/fnrs-shar-code-tab-panel.tsx @@ -115,13 +115,13 @@ function FnrsSharCodeTabPanel() { - 코드 - 코드명 - 설명 - 사용 여부 - 정렬순서 - 구분 - 관리 + 코드 + 코드명 + 설명 + 사용 여부 + 정렬순서 + 구분 + 관리 diff --git a/apps/as/src/pages/code-management/ui/fnrs-shar-se-row.tsx b/apps/as/src/pages/code-management/ui/fnrs-shar-se-row.tsx index 071ac16e2..e60134f33 100644 --- a/apps/as/src/pages/code-management/ui/fnrs-shar-se-row.tsx +++ b/apps/as/src/pages/code-management/ui/fnrs-shar-se-row.tsx @@ -40,9 +40,10 @@ function FnrsSharSeRowComponent({ row, depth, onChange, onAddChild, onDelete }: value={row.fnrsSharSeCd} onChange={(e) => onChange({ fnrsSharSeCd: e.target.value })} placeholder="코드" + title="코드" maxLength={10} disabled={!row.isNew} - className="flex-1" + className="flex-1 disabled:opacity-100" />
@@ -51,6 +52,7 @@ function FnrsSharSeRowComponent({ row, depth, onChange, onAddChild, onDelete }: value={row.fnrsSharSeCdNm ?? ""} onChange={(e) => onChange({ fnrsSharSeCdNm: e.target.value })} placeholder="코드명" + title="코드명" maxLength={100} /> @@ -59,6 +61,7 @@ function FnrsSharSeRowComponent({ row, depth, onChange, onAddChild, onDelete }: value={row.expln ?? ""} onChange={(e) => onChange({ expln: e.target.value })} placeholder="설명" + title="설명" maxLength={1000} /> @@ -66,6 +69,7 @@ function FnrsSharSeRowComponent({ row, depth, onChange, onAddChild, onDelete }: onChange({ useYn: v })} + aria-label="사용 여부" className="flex justify-center gap-4" >
@@ -82,6 +86,7 @@ function FnrsSharSeRowComponent({ row, depth, onChange, onAddChild, onDelete }: onChange({ sortSeq: e.target.value ? Number(e.target.value) : undefined }) diff --git a/packages/common/components/src/ui/footer/index.tsx b/packages/common/components/src/ui/footer/index.tsx index fe8a16c5d..63815c065 100644 --- a/packages/common/components/src/ui/footer/index.tsx +++ b/packages/common/components/src/ui/footer/index.tsx @@ -81,22 +81,27 @@ export function Footer() { const mainBanners = bannerList?.filter((banner) => banner.bnrTypeCd === "BNRFTER") ?? []; - const plugin = useRef(Autoplay({ delay: 2000, stopOnInteraction: true })); + // 기본은 정지 상태, 사용자가 시작 버튼을 눌러야 자동 넘김 + const plugin = useRef( + Autoplay({ delay: 2000, stopOnInteraction: true, playOnInit: false }), + ); const [carouselApi, setCarouselApi] = useState(); - const [isAutoplaying, setIsAutoplaying] = useState(true); + const [isAutoplaying, setIsAutoplaying] = useState(false); // 사용자 조작·초점 진입 등으로 자동 넘김이 멈추거나 재개될 때 버튼 상태를 동기화한다 + // (autoplay:play/stop 이벤트는 플러그인 내부 상태 변경 "전"에 발생하므로 isPlaying() 대신 이벤트 종류로 판단) useEffect(() => { if (!carouselApi) return; - const syncAutoplayState = () => setIsAutoplaying(plugin.current.isPlaying()); - syncAutoplayState(); - carouselApi.on("autoplay:play", syncAutoplayState); - carouselApi.on("autoplay:stop", syncAutoplayState); + const handleAutoplayPlay = () => setIsAutoplaying(true); + const handleAutoplayStop = () => setIsAutoplaying(false); + setIsAutoplaying(plugin.current.isPlaying()); + carouselApi.on("autoplay:play", handleAutoplayPlay); + carouselApi.on("autoplay:stop", handleAutoplayStop); return () => { - carouselApi.off("autoplay:play", syncAutoplayState); - carouselApi.off("autoplay:stop", syncAutoplayState); + carouselApi.off("autoplay:play", handleAutoplayPlay); + carouselApi.off("autoplay:stop", handleAutoplayStop); }; }, [carouselApi]); @@ -160,26 +165,11 @@ export function Footer() { >지원센타
-
- -
{mainBanners && mainBanners.length > 0 ? ( @@ -206,6 +196,22 @@ export function Footer() { )} + {/* 자동 넘김 정지/시작: 좌측 화살표 앞에 배치 (탭 순서도 화살표보다 먼저) */} +