diff --git a/lps-admin/src/pages/Crawl.tsx b/lps-admin/src/pages/Crawl.tsx index 597ce66..64036e7 100644 --- a/lps-admin/src/pages/Crawl.tsx +++ b/lps-admin/src/pages/Crawl.tsx @@ -66,11 +66,11 @@ export default function Crawl() { {ip.data && ( blockCount === 0 ? (

- ✓ 기간 내 차단된 IP 세션 0건 — 요청 예산(선제 회전)이 잘 작동하고 있습니다 + ✓ 기간 내 차단된 IP 세션 0건 — 요청 예산(선제 회전)이 잘 작동하고 있습니다

) : (

- ⚠ 예산 안에서도 차단된 세션 {blockCount}건 — 최소 {ip.data.block_min_requests}회 요청에서 차단됐습니다. + ⚠ 예산 안에서도 차단된 세션 {blockCount}건 — 최소 {ip.data.block_min_requests}회 요청에서 차단됐습니다. 요청 예산을 그보다 낮게 유지하세요(현재 서버 설정은 toml [DecodoConfig].ip_request_budget)

) @@ -139,7 +139,7 @@ export default function Crawl() { {bot.isPending && } {bot.isError && } - {bot.data && bot.data.hourly.length === 0 && 기간 내 차단 없음 🎉} + {bot.data && bot.data.hourly.length === 0 && 기간 내 차단 없음 🎉} {bot.data && bot.data.hourly.length > 0 && ( ({ ...h, x: dateShort(h.bucket) }))} margin={{ top: 6, right: 12, bottom: 0, left: -22 }}> diff --git a/lps-admin/src/pages/Dashboard.tsx b/lps-admin/src/pages/Dashboard.tsx index 09a6b74..2c1c279 100644 --- a/lps-admin/src/pages/Dashboard.tsx +++ b/lps-admin/src/pages/Dashboard.tsx @@ -51,12 +51,12 @@ export default function Dashboard() { {alerts.map((a) => (

- ⚠ {a.msg} + ⚠ {a.msg}

))} {d && alerts.length === 0 && (

- ✓ 모든 지표가 임계 안에 있습니다 + ✓ 모든 지표가 임계 안에 있습니다

)} diff --git a/lps-admin/src/pages/Jobs.tsx b/lps-admin/src/pages/Jobs.tsx index db3b48c..e80ab9f 100644 --- a/lps-admin/src/pages/Jobs.tsx +++ b/lps-admin/src/pages/Jobs.tsx @@ -51,7 +51,7 @@ export default function Jobs() { ))}
{ e.preventDefault(); setQ(qInput.trim()); setPage(0); }}> - setQInput(e.target.value)} placeholder="상품코드·상품명 검색" + setQInput(e.target.value)} placeholder="상품코드·상품명 검색" aria-label="상품코드·상품명 검색" className="w-56 rounded-lg border border-line-200 bg-surface px-3 py-1.5 text-[13px] outline-none focus:border-primary-600" />
@@ -77,8 +77,10 @@ export default function Jobs() { {list.data.items.map((j) => ( - setSelected(j)} - className={`cursor-pointer border-b border-line-100 hover:bg-surface-2 ${selected?.job_id === j.job_id ? "bg-primary-50/60" : ""}`}> + setSelected(j)} tabIndex={0} + onKeyDown={(e) => { if (e.key === "Enter" || e.key === " ") { e.preventDefault(); setSelected(j); } }} + aria-selected={selected?.job_id === j.job_id} + className={`cursor-pointer border-b border-line-100 hover:bg-surface-2 focus-visible:bg-primary-50/60 ${selected?.job_id === j.job_id ? "bg-primary-50/60" : ""}`}>
{j.product_name || "—"}
{j.product_code}
diff --git a/lps-admin/src/pages/Products.tsx b/lps-admin/src/pages/Products.tsx index 55491d3..6823183 100644 --- a/lps-admin/src/pages/Products.tsx +++ b/lps-admin/src/pages/Products.tsx @@ -32,7 +32,7 @@ export default function Products() {

상품·가격

{ e.preventDefault(); setQ(qInput.trim()); }}> - setQInput(e.target.value)} placeholder="상품코드 검색" + setQInput(e.target.value)} placeholder="상품코드 검색" aria-label="상품코드 검색" className="w-64 rounded-lg border border-line-200 bg-surface px-3 py-1.5 text-[13px] outline-none focus:border-primary-600" />