From 7e5814b0e5ab65b234db79ad279ae8acf1a5f78a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=AF=BC=ED=97=8C?= Date: Thu, 9 Jul 2026 14:47:31 +0900 Subject: [PATCH] =?UTF-8?q?chore(lps):=20=EC=9E=84=EC=8B=9C=20FE=20?= =?UTF-8?q?=E2=80=94=20=EC=98=A4=ED=94=88=EB=A7=88=EC=BC=93=20=ED=81=AC?= =?UTF-8?q?=EB=A1=A4=20=EC=86=8C=EC=8A=A4=20=ED=91=9C=EA=B8=B0(=EC=83=89?= =?UTF-8?q?=EC=83=81=C2=B7=ED=81=AC=EB=A1=A4=20=EB=B1=83=EC=A7=80=C2=B7?= =?UTF-8?q?=EB=AA=B0=EB=B3=84=20=EC=83=89)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit by_mall/top 에 등장하는 gmarket·auction·st11 을 소스 색상 태그(+‘크롤’ 뱃지)로 표기. 몰별 최저가 막대도 소스별 색. 폴백으로 크롤된 몰임을 UI에서 구분. Co-Authored-By: Claude Fable 5 --- lps-temp-fe/index.html | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/lps-temp-fe/index.html b/lps-temp-fe/index.html index 6c1de65..7bf6592 100644 --- a/lps-temp-fe/index.html +++ b/lps-temp-fe/index.html @@ -93,8 +93,11 @@ .outcome-hero.nf{background:linear-gradient(135deg,#fbfbfc,#f4f5f7)} .price-big{font-size:32px;font-weight:800;letter-spacing:-.02em;line-height:1;font-variant-numeric:tabular-nums} .price-big .won{font-size:18px;font-weight:700;color:var(--text-500);margin-left:2px} - .src-tag{font-size:11px;font-weight:700;padding:3px 8px;border-radius:6px;color:#fff;text-transform:uppercase;letter-spacing:.03em} + .src-tag{font-size:11px;font-weight:700;padding:3px 8px;border-radius:6px;color:#fff;letter-spacing:.02em;white-space:nowrap} .src-tag.naver{background:var(--naver)} .src-tag.coupang{background:var(--coupang)} + .src-tag.gmarket{background:#00b25a} .src-tag.auction{background:#e60012} .src-tag.st11{background:#ff0038} + .src-tag.fallback{position:relative} + .src-tag.fallback::after{content:"크롤";position:absolute;top:-6px;right:-6px;font-size:8px;background:#1a1d24;color:#fff;padding:1px 3px;border-radius:4px;letter-spacing:0} .ship-tag{display:inline-flex;align-items:center;gap:4px;font-size:10.5px;font-weight:700;padding:2px 7px;border-radius:5px;border:1px solid transparent;white-space:nowrap} .ship-tag.rocket{background:#eef4ff;color:#2f6fed;border-color:#d5e3ff} .ship-tag.rocket_merchant{background:#f3eeff;color:#7a4fe0;border-color:#e3d8ff} @@ -315,10 +318,23 @@ function shipBadge(p){ /* 실구매가(상품가+확정 배송비). 미확인이면 null. */ function totalPrice(p){ return (typeof p.shipping_fee==="number") ? p.price+p.shipping_fee : null; } +/* 소스 메타: 표시명·색상. gmarket/auction/st11 은 네이버 폴백 크롤 소스. */ +const SRC = { + naver: {label:"NAVER", color:"#03c75a", crawl:false}, + coupang:{label:"COUPANG",color:"#f0455b", crawl:false}, + gmarket:{label:"G마켓", color:"#00b25a", crawl:true}, + auction:{label:"옥션", color:"#e60012", crawl:true}, + st11: {label:"11번가", color:"#ff0038", crawl:true}, +}; +function srcColor(s){ return (SRC[s]||{}).color || "#6b7280"; } +function srcTag(p){ + const m=SRC[p.source]||{label:p.source}; + return `${esc(m.label)}`; +} /* 판매몰 표시명: 네이버 가격비교(mall='네이버')는 '여러 판매자 최저가 롤업'임을 명시. */ function mallLabel(p){ if(p.source==="coupang") return "쿠팡"; - const m=p.mall_name||"기타"; + const m=p.mall_name||(SRC[p.source]||{}).label||"기타"; return (m==="네이버") ? "네이버 가격비교" : m; } function isCatalog(p){ return p.source==="naver" && (p.mall_name==="네이버"); } @@ -443,7 +459,7 @@ function renderJob(d, submitted){
${found?'최저가 발견':(o.cached?'네거티브 캐시 (최근 없음)':'같은 상품 없음 · not_found')}
${ found && low ? `
${won(low.price)}원
- ${low.source} + ${srcTag(low)} ${shipBadge(low)}
판매몰 ${esc(mallLabel(low))}${ isCatalog(low)?` · 여러 판매자 최저가`:``}
@@ -487,10 +503,10 @@ function renderJob(d, submitted){ const byMall=o.by_mall||[]; if(byMall.length>1){ const maxP=Math.max(...byMall.map(m=>m.price)); - html += `
몰별 최저가 네이버 결과에 포함된 판매몰 · 추가 조회 없음
`; + html += `
몰별 최저가 네이버 포함 몰 + 미커버 몰은 직접 크롤(크롤 뱃지)
`; byMall.forEach((m,i)=>{ const w=Math.max(8,Math.round(m.price/maxP*100)); - const color=m.source==="coupang"?"var(--coupang)":"var(--naver)"; + const color=srcColor(m.source); html += `
${esc(mallLabel(m))}
@@ -510,7 +526,7 @@ function renderJob(d, submitted){ const tot=totalPrice(p); html += ` ${i+1} - ${p.source}
${esc(mallLabel(p))}
+ ${srcTag(p)}
${esc(mallLabel(p))}
${p.detail_url?`${esc(p.name)}`:esc(p.name)} ${shipBadge(p)} ${won(p.price)}원${ tot!=null&&p.shipping_fee>0?`
+배송 ${won(tot)}
`:``}