Spaces:
Running
Running
Cập nhật giao diện: thêm filter thương hiệu, badge brand, hero stats cho Malloca + Eurogold
Browse files- index.html +32 -18
index.html
CHANGED
|
@@ -4,7 +4,7 @@
|
|
| 4 |
<meta charset="UTF-8">
|
| 5 |
<meta name="viewport" content="width=device-width,initial-scale=1">
|
| 6 |
<title>MALLOCA | Smart Kitchen - Smart Life</title>
|
| 7 |
-
<meta name="description" content="
|
| 8 |
<link rel="icon" href="https://bizweb.dktcdn.net/100/567/847/themes/1041000/assets/favicon.png">
|
| 9 |
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap" rel="stylesheet">
|
| 10 |
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
|
|
@@ -326,7 +326,7 @@ textarea.form-input{height:120px;resize:vertical}
|
|
| 326 |
|
| 327 |
<header class="header"><div class="container">
|
| 328 |
<div class="logo" onclick="goHome()"><div class="logo-box">M</div><div><div class="logo-name">MALL<span>OCA</span></div><div class="logo-sub">Smart Kitchen • Smart Life</div></div></div>
|
| 329 |
-
<div class="search-box"><i class="fas fa-search"></i><input type="text" id="q" placeholder="Tìm sản phẩm... (bếp từ,
|
| 330 |
<div class="nav-tabs">
|
| 331 |
<div class="nav-tab active" data-page="products" onclick="showPage('products')"><i class="fas fa-th-large"></i> Sản Phẩm</div>
|
| 332 |
<div class="nav-tab" data-page="catalogue" onclick="showPage('catalogue')"><i class="fas fa-book-open"></i> Catalogue</div>
|
|
@@ -339,11 +339,12 @@ textarea.form-input{height:120px;resize:vertical}
|
|
| 339 |
</div></header>
|
| 340 |
|
| 341 |
<section class="hero"><div class="container">
|
| 342 |
-
<h1>Thiết Bị Nhà Bếp <span>Malloca</span></h1>
|
| 343 |
-
<p>Dữ liệu trực tiếp từ malloca.com — Đầy đủ hình ảnh, thông số kỹ thuật, mô tả chi tiết
|
| 344 |
-
<div class="hero-stats">
|
| 345 |
-
<div class="hero-stat"><strong>
|
| 346 |
-
<div class="hero-stat"><strong>
|
|
|
|
| 347 |
<div class="hero-stat"><strong>100%</strong><span>Dữ liệu thật</span></div>
|
| 348 |
</div>
|
| 349 |
</div></section>
|
|
@@ -353,6 +354,7 @@ textarea.form-input{height:120px;resize:vertical}
|
|
| 353 |
<div id="page-products" class="page-section active"><div id="listView">
|
| 354 |
<div class="main">
|
| 355 |
<aside class="sidebar" id="sidebar">
|
|
|
|
| 356 |
<div class="sb-card"><h3><i class="fas fa-layer-group"></i> Danh Mục</h3><ul class="cat-list" id="cl"></ul></div>
|
| 357 |
<div class="sb-card"><h3><i class="fas fa-tag"></i> Khoảng Giá</h3><div class="pr" id="pr"></div></div>
|
| 358 |
</aside>
|
|
@@ -438,6 +440,7 @@ textarea.form-input{height:120px;resize:vertical}
|
|
| 438 |
<div style="padding:12px;border-radius:10px;font-weight:600;cursor:pointer;font-size:.9rem" onclick="closeMsb();showPage('contact')"><i class="fas fa-envelope" style="margin-right:8px;color:var(--a)"></i> Liên Hệ</div>
|
| 439 |
<div style="padding:12px;border-radius:10px;font-weight:600;cursor:pointer;font-size:.9rem" onclick="closeMsb();openCart()"><i class="fas fa-shopping-cart" style="margin-right:8px;color:var(--a)"></i> Giỏ Hàng</div>
|
| 440 |
</div>
|
|
|
|
| 441 |
<div class="sb-card"><h3><i class="fas fa-layer-group"></i> Danh Mục</h3><ul class="cat-list" id="clm"></ul></div>
|
| 442 |
<div class="sb-card"><h3><i class="fas fa-tag"></i> Khoảng Giá</h3><div class="pr" id="prm"></div></div>
|
| 443 |
</div>
|
|
@@ -464,24 +467,24 @@ textarea.form-input{height:120px;resize:vertical}
|
|
| 464 |
|
| 465 |
<footer class="footer"><div class="container">
|
| 466 |
<div class="footer-grid">
|
| 467 |
-
<div class="footer-brand"><div class="logo-name" style="color:#fff;font-size:1.1rem">MALL<span style="color:var(--a)">OCA</span></div><p>
|
| 468 |
<div class="social-links"><a href="https://www.facebook.com/CongTyMalloca" target="_blank"><i class="fab fa-facebook-f"></i></a><a href="https://www.youtube.com/@mallocakitchenware" target="_blank"><i class="fab fa-youtube"></i></a><a href="https://www.tiktok.com/@mallocavietnam" target="_blank"><i class="fab fa-tiktok"></i></a></div></div>
|
| 469 |
<div><h4>Thiết Bị Nhà Bếp</h4><ul class="footer-links"><li><a href="https://malloca.com/may-hut-khoi-khu-mui" target="_blank">Máy hút khói khử mùi</a></li><li><a href="https://malloca.com/bep-dien-tu-bep-gas" target="_blank">Bếp điện từ, bếp gas</a></li><li><a href="https://malloca.com/lo-nuong" target="_blank">Lò nướng, lò hấp</a></li><li><a href="https://malloca.com/chau-rua-chen" target="_blank">Chậu rửa chén</a></li><li><a href="https://malloca.com/voi-rua-chen" target="_blank">Vòi rửa chén</a></li></ul></div>
|
| 470 |
<div><h4>Thêm</h4><ul class="footer-links"><li><a href="https://malloca.com/tu-lanh-tu-ruou" target="_blank">Tủ lạnh, tủ rượu</a></li><li><a href="https://malloca.com/may-rua-chen-may-say-chen" target="_blank">Máy rửa chén</a></li><li><a href="https://malloca.com/thiet-bi-gia-dung-nho" target="_blank">Gia dụng nhỏ</a></li><li><a href="https://malloca.com/khuyen-mai" target="_blank">Khuyến mãi</a></li><li><a href="https://malloca.com/catalogue" target="_blank">Catalogue</a></li></ul></div>
|
| 471 |
<div><h4>Hỗ Trợ</h4><ul class="footer-links"><li><a href="https://malloca.com/ve-chung-toi" target="_blank">Về Malloca</a></li><li><a href="https://malloca.com/he-thong-showroom" target="_blank">Showroom</a></li><li><a href="https://malloca.com/tra-cuu-ttbh" target="_blank">Tra cứu bảo hành</a></li><li><a href="https://malloca.com/kich-hoat-bao-hanh" target="_blank">Kích hoạt bảo hành</a></li><li><a href="https://malloca.com/yeu-cau-bao-hanh" target="_blank">Yêu cầu bảo hành</a></li></ul></div>
|
| 472 |
</div>
|
| 473 |
-
<div class="footer-bottom"><p>© 2025 Malloca Việt Nam • Dữ liệu tích hợp từ malloca.com</p></div>
|
| 474 |
</div></footer>
|
| 475 |
|
| 476 |
<script>
|
| 477 |
-
let D=[],S={cat:'all',q:'',pmin:0,pmax:1e15,sort:'default',pg:1,view:'g'};
|
| 478 |
const PP=24;
|
| 479 |
const PRICES=[
|
| 480 |
{l:'Tất cả',min:0,max:1e15},{l:'Dưới 5 triệu',min:0,max:5e6},{l:'5-15 triệu',min:5e6,max:15e6},
|
| 481 |
{l:'15-30 triệu',min:15e6,max:3e7},{l:'30-50 triệu',min:3e7,max:5e7},{l:'Trên 50 triệu',min:5e7,max:1e15}
|
| 482 |
];
|
| 483 |
|
| 484 |
-
fetch('products.json').then(r=>r.json()).then(d=>{D=d.map(p=>{let o={name:p.n,link:p.l,image:p.i,price:p.p,priceNum:p.pn,cat:p.c,catSlug:p.cs,catIcon:p.ci,images:p.imgs||[],summary:p.sum||'',desc:p.desc||'',specs:p.specs||{},feats:p.feats||[],sku:p.sku||'',video:p.vid||'',model:p.mod||''};o._idx=buildSearchIndex(o);return o});init()});
|
| 485 |
|
| 486 |
function buildSearchIndex(p){
|
| 487 |
let parts=[p.name,p.cat,p.sku,p.model,'malloca',p.summary,p.desc,p.price];
|
|
@@ -490,7 +493,7 @@ if(p.specs){Object.entries(p.specs).forEach(([k,v])=>{parts.push(k);parts.push(v
|
|
| 490 |
return parts.join(' ').toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g,'');
|
| 491 |
}
|
| 492 |
|
| 493 |
-
function init(){buildCats();buildPrices();render()}
|
| 494 |
|
| 495 |
function buildCats(){
|
| 496 |
let cats={};D.forEach(p=>{if(!cats[p.catSlug])cats[p.catSlug]={n:p.cat,i:p.catIcon,c:0};cats[p.catSlug].c++});
|
|
@@ -503,9 +506,20 @@ function buildPrices(){
|
|
| 503 |
let h='';PRICES.forEach((p,i)=>{h+=`<div class="pr-item${i===0?' active':''}" data-i="${i}" onclick="setPrice(${p.min},${p.max},${i})"><span class="pr-dot"></span>${p.l}</div>`});
|
| 504 |
document.getElementById('pr').innerHTML=h;document.getElementById('prm').innerHTML=h;
|
| 505 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 506 |
|
| 507 |
function getF(){
|
| 508 |
let r=D;
|
|
|
|
| 509 |
if(S.cat!=='all')r=r.filter(p=>p.catSlug===S.cat);
|
| 510 |
if(S.q){let q=S.q.toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g,'');r=r.filter(p=>p._idx.includes(q))}
|
| 511 |
if(S.pmin>0||S.pmax<1e15)r=r.filter(p=>p.priceNum>=S.pmin&&p.priceNum<=S.pmax);
|
|
@@ -524,7 +538,7 @@ let g=document.getElementById('grid');
|
|
| 524 |
g.className='pg'+(S.view==='l'?' lv':'');
|
| 525 |
if(!items.length){g.innerHTML=`<div class="empty" style="grid-column:1/-1"><i class="fas fa-search"></i><h3>Không tìm thấy</h3><p>Thử thay đổi bộ lọc hoặc từ khóa</p><button class="reset-btn" onclick="resetAll()">Xóa bộ lọc</button></div>`;
|
| 526 |
}else{
|
| 527 |
-
g.innerHTML=items.map((p,i)=>{let idx=D.indexOf(p);return`<div class="pc fade" onclick="showDetail(${idx})" style="transition-delay:${Math.min(i*25,400)}ms"><div class="pi"><img src="${p.image}" alt="${p.name}" loading="lazy" onerror="this.style.display='none'"><span class="pi-badge"><i class="fas ${p.catIcon}"></i> ${p.cat}</span></div><div class="pb"><div style="font-size:.65rem;font-weight:700;color:
|
| 528 |
}
|
| 529 |
requestAnimationFrame(()=>document.querySelectorAll('.fade').forEach(e=>e.classList.add('vis')));
|
| 530 |
renderPag(tp);
|
|
@@ -602,17 +616,17 @@ ${allImgs.length>1?`<div class="gallery-thumbs">${thumbs}</div>`:''}
|
|
| 602 |
${p.sku?`<div class="detail-sku">SKU: ${p.sku} • Model: ${p.model}</div>`:''}
|
| 603 |
<div class="detail-cat"><i class="fas ${p.catIcon}"></i> ${p.cat}</div>
|
| 604 |
<h1 class="detail-name">${p.name}</h1>
|
| 605 |
-
<div style="font-size:.95rem;font-weight:800;color:var(--a);letter-spacing:1px;margin-bottom:12px">${p.model
|
| 606 |
<div class="detail-price">${p.price||'Liên hệ'}</div>
|
| 607 |
${p.summary?`<div class="detail-summary">${p.summary}</div>`:''}
|
| 608 |
<div class="detail-badges">
|
| 609 |
-
<div class="detail-badge"><i class="fas fa-check-circle"></i> Chính hãng
|
| 610 |
<div class="detail-badge"><i class="fas fa-shield-halved"></i> Bảo hành điện tử</div>
|
| 611 |
<div class="detail-badge"><i class="fas fa-truck-fast"></i> Miễn phí lắp đặt</div>
|
| 612 |
</div>
|
| 613 |
<div style="display:flex;gap:10px;flex-wrap:wrap">
|
| 614 |
<button class="add-cart-btn" onclick="event.stopPropagation();addToCart(${idx})"><i class="fas fa-cart-plus"></i> Thêm vào giỏ</button>
|
| 615 |
-
<a href="${p.link}" target="_blank" class="detail-btn detail-btn-outline"><i class="fas fa-external-link-alt"></i> malloca.com</a>
|
| 616 |
</div>
|
| 617 |
</div>
|
| 618 |
</div>
|
|
@@ -650,12 +664,12 @@ document.getElementById('tab-'+id).classList.add('active');
|
|
| 650 |
|
| 651 |
// ===== ACTIONS =====
|
| 652 |
function setCat(s){S.cat=s;S.pg=1;updActive('.cat-item','data-s',s);render();closeMsb()}
|
| 653 |
-
function setPrice(min,max,i){S.pmin=min;S.pmax=max;S.pg=1;document.querySelectorAll('.pr-item').forEach((e,j)=>e.classList.toggle('active',j===i));render();closeMsb()}
|
| 654 |
function doSearch(){S.q=document.getElementById('q').value.trim();S.pg=1;render();renderMainCatSearch()}
|
| 655 |
function doSort(){S.sort=document.getElementById('ss').value;S.pg=1;render()}
|
| 656 |
function setV(v){S.view=v;document.getElementById('gb').classList.toggle('active',v==='g');document.getElementById('lb').classList.toggle('active',v==='l');render()}
|
| 657 |
function goPg(p){let f=getF(),tp=Math.ceil(f.length/PP);if(p<1||p>tp)return;S.pg=p;render();document.querySelector('.toolbar').scrollIntoView({behavior:'smooth',block:'start'})}
|
| 658 |
-
function resetAll(){S={cat:'all',q:'',pmin:0,pmax:1e15,sort:'default',pg:1,view:S.view};document.getElementById('q').value='';document.getElementById('ss').value='default';updActive('.cat-item','data-s','all');document.querySelectorAll('.pr-item').forEach((e,i)=>e.classList.toggle('active',i===0));render();let csr=document.getElementById('catSearchResults');if(csr)csr.innerHTML='';}
|
| 659 |
function updActive(sel,attr,val){document.querySelectorAll(sel).forEach(e=>e.classList.toggle('active',e.getAttribute(attr)===val))}
|
| 660 |
function closeMsb(){document.getElementById('msb').classList.remove('open')}
|
| 661 |
document.addEventListener('keydown',e=>{if(e.key==='Escape')goBack();if(e.key==='/'&&document.activeElement.tagName!=='INPUT'){e.preventDefault();document.getElementById('q').focus()}});
|
|
|
|
| 4 |
<meta charset="UTF-8">
|
| 5 |
<meta name="viewport" content="width=device-width,initial-scale=1">
|
| 6 |
<title>MALLOCA | Smart Kitchen - Smart Life</title>
|
| 7 |
+
<meta name="description" content="1173 sản phẩm thiết bị nhà bếp Malloca & Eurogold chính hãng — đầy đủ thông số, hình ảnh, mô tả chi tiết.">
|
| 8 |
<link rel="icon" href="https://bizweb.dktcdn.net/100/567/847/themes/1041000/assets/favicon.png">
|
| 9 |
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap" rel="stylesheet">
|
| 10 |
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
|
|
|
|
| 326 |
|
| 327 |
<header class="header"><div class="container">
|
| 328 |
<div class="logo" onclick="goHome()"><div class="logo-box">M</div><div><div class="logo-name">MALL<span>OCA</span></div><div class="logo-sub">Smart Kitchen • Smart Life</div></div></div>
|
| 329 |
+
<div class="search-box"><i class="fas fa-search"></i><input type="text" id="q" placeholder="Tìm sản phẩm Malloca & Eurogold... (bếp từ, giá bát, khoá cửa...)" oninput="doSearch()"><span class="search-count" id="sc"></span></div>
|
| 330 |
<div class="nav-tabs">
|
| 331 |
<div class="nav-tab active" data-page="products" onclick="showPage('products')"><i class="fas fa-th-large"></i> Sản Phẩm</div>
|
| 332 |
<div class="nav-tab" data-page="catalogue" onclick="showPage('catalogue')"><i class="fas fa-book-open"></i> Catalogue</div>
|
|
|
|
| 339 |
</div></header>
|
| 340 |
|
| 341 |
<section class="hero"><div class="container">
|
| 342 |
+
<h1>Thiết Bị Nhà Bếp <span>Malloca</span> & <span>Eurogold</span></h1>
|
| 343 |
+
<p>Dữ liệu trực tiếp từ malloca.com & eurogold.vn — Đầy đủ hình ảnh, thông số kỹ thuật, mô tả chi tiết</p>
|
| 344 |
+
<div class="hero-stats" id="heroStats">
|
| 345 |
+
<div class="hero-stat"><strong id="statTotal">1173</strong><span>Sản phẩm</span></div>
|
| 346 |
+
<div class="hero-stat"><strong id="statCats">16</strong><span>Danh mục</span></div>
|
| 347 |
+
<div class="hero-stat"><strong>2</strong><span>Thương hiệu</span></div>
|
| 348 |
<div class="hero-stat"><strong>100%</strong><span>Dữ liệu thật</span></div>
|
| 349 |
</div>
|
| 350 |
</div></section>
|
|
|
|
| 354 |
<div id="page-products" class="page-section active"><div id="listView">
|
| 355 |
<div class="main">
|
| 356 |
<aside class="sidebar" id="sidebar">
|
| 357 |
+
<div class="sb-card"><h3><i class="fas fa-building"></i> Thương Hiệu</h3><div class="pr" id="br"></div></div>
|
| 358 |
<div class="sb-card"><h3><i class="fas fa-layer-group"></i> Danh Mục</h3><ul class="cat-list" id="cl"></ul></div>
|
| 359 |
<div class="sb-card"><h3><i class="fas fa-tag"></i> Khoảng Giá</h3><div class="pr" id="pr"></div></div>
|
| 360 |
</aside>
|
|
|
|
| 440 |
<div style="padding:12px;border-radius:10px;font-weight:600;cursor:pointer;font-size:.9rem" onclick="closeMsb();showPage('contact')"><i class="fas fa-envelope" style="margin-right:8px;color:var(--a)"></i> Liên Hệ</div>
|
| 441 |
<div style="padding:12px;border-radius:10px;font-weight:600;cursor:pointer;font-size:.9rem" onclick="closeMsb();openCart()"><i class="fas fa-shopping-cart" style="margin-right:8px;color:var(--a)"></i> Giỏ Hàng</div>
|
| 442 |
</div>
|
| 443 |
+
<div class="sb-card"><h3><i class="fas fa-building"></i> Thương Hiệu</h3><div class="pr" id="brm"></div></div>
|
| 444 |
<div class="sb-card"><h3><i class="fas fa-layer-group"></i> Danh Mục</h3><ul class="cat-list" id="clm"></ul></div>
|
| 445 |
<div class="sb-card"><h3><i class="fas fa-tag"></i> Khoảng Giá</h3><div class="pr" id="prm"></div></div>
|
| 446 |
</div>
|
|
|
|
| 467 |
|
| 468 |
<footer class="footer"><div class="container">
|
| 469 |
<div class="footer-grid">
|
| 470 |
+
<div class="footer-brand"><div class="logo-name" style="color:#fff;font-size:1.1rem">MALL<span style="color:var(--a)">OCA</span> & EURO<span style="color:var(--a)">GOLD</span></div><p>1173 s���n phẩm với dữ liệu chi tiết đầy đủ — hình ảnh, thông số kỹ thuật, mô tả, tính năng — tích hợp trực tiếp từ malloca.com & eurogold.vn.</p>
|
| 471 |
<div class="social-links"><a href="https://www.facebook.com/CongTyMalloca" target="_blank"><i class="fab fa-facebook-f"></i></a><a href="https://www.youtube.com/@mallocakitchenware" target="_blank"><i class="fab fa-youtube"></i></a><a href="https://www.tiktok.com/@mallocavietnam" target="_blank"><i class="fab fa-tiktok"></i></a></div></div>
|
| 472 |
<div><h4>Thiết Bị Nhà Bếp</h4><ul class="footer-links"><li><a href="https://malloca.com/may-hut-khoi-khu-mui" target="_blank">Máy hút khói khử mùi</a></li><li><a href="https://malloca.com/bep-dien-tu-bep-gas" target="_blank">Bếp điện từ, bếp gas</a></li><li><a href="https://malloca.com/lo-nuong" target="_blank">Lò nướng, lò hấp</a></li><li><a href="https://malloca.com/chau-rua-chen" target="_blank">Chậu rửa chén</a></li><li><a href="https://malloca.com/voi-rua-chen" target="_blank">Vòi rửa chén</a></li></ul></div>
|
| 473 |
<div><h4>Thêm</h4><ul class="footer-links"><li><a href="https://malloca.com/tu-lanh-tu-ruou" target="_blank">Tủ lạnh, tủ rượu</a></li><li><a href="https://malloca.com/may-rua-chen-may-say-chen" target="_blank">Máy rửa chén</a></li><li><a href="https://malloca.com/thiet-bi-gia-dung-nho" target="_blank">Gia dụng nhỏ</a></li><li><a href="https://malloca.com/khuyen-mai" target="_blank">Khuyến mãi</a></li><li><a href="https://malloca.com/catalogue" target="_blank">Catalogue</a></li></ul></div>
|
| 474 |
<div><h4>Hỗ Trợ</h4><ul class="footer-links"><li><a href="https://malloca.com/ve-chung-toi" target="_blank">Về Malloca</a></li><li><a href="https://malloca.com/he-thong-showroom" target="_blank">Showroom</a></li><li><a href="https://malloca.com/tra-cuu-ttbh" target="_blank">Tra cứu bảo hành</a></li><li><a href="https://malloca.com/kich-hoat-bao-hanh" target="_blank">Kích hoạt bảo hành</a></li><li><a href="https://malloca.com/yeu-cau-bao-hanh" target="_blank">Yêu cầu bảo hành</a></li></ul></div>
|
| 475 |
</div>
|
| 476 |
+
<div class="footer-bottom"><p>© 2025 Malloca & Eurogold Việt Nam • Dữ liệu tích hợp từ malloca.com & eurogold.vn</p></div>
|
| 477 |
</div></footer>
|
| 478 |
|
| 479 |
<script>
|
| 480 |
+
let D=[],S={cat:'all',q:'',pmin:0,pmax:1e15,sort:'default',pg:1,view:'g',brand:'all'};
|
| 481 |
const PP=24;
|
| 482 |
const PRICES=[
|
| 483 |
{l:'Tất cả',min:0,max:1e15},{l:'Dưới 5 triệu',min:0,max:5e6},{l:'5-15 triệu',min:5e6,max:15e6},
|
| 484 |
{l:'15-30 triệu',min:15e6,max:3e7},{l:'30-50 triệu',min:3e7,max:5e7},{l:'Trên 50 triệu',min:5e7,max:1e15}
|
| 485 |
];
|
| 486 |
|
| 487 |
+
fetch('products.json').then(r=>r.json()).then(d=>{D=d.map(p=>{let o={name:p.n,link:p.l,image:p.i,price:p.p,priceNum:p.pn,cat:p.c,catSlug:p.cs,catIcon:p.ci,images:p.imgs||[],summary:p.sum||'',desc:p.desc||'',specs:p.specs||{},feats:p.feats||[],sku:p.sku||'',video:p.vid||'',model:p.mod||'',brand:p.n.includes('| Eurogold |')||p.n.startsWith('Eurogold |')?'Eurogold':'Malloca'};o._idx=buildSearchIndex(o);return o});init()});
|
| 488 |
|
| 489 |
function buildSearchIndex(p){
|
| 490 |
let parts=[p.name,p.cat,p.sku,p.model,'malloca',p.summary,p.desc,p.price];
|
|
|
|
| 493 |
return parts.join(' ').toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g,'');
|
| 494 |
}
|
| 495 |
|
| 496 |
+
function init(){buildCats();buildPrices();buildBrands();render()}
|
| 497 |
|
| 498 |
function buildCats(){
|
| 499 |
let cats={};D.forEach(p=>{if(!cats[p.catSlug])cats[p.catSlug]={n:p.cat,i:p.catIcon,c:0};cats[p.catSlug].c++});
|
|
|
|
| 506 |
let h='';PRICES.forEach((p,i)=>{h+=`<div class="pr-item${i===0?' active':''}" data-i="${i}" onclick="setPrice(${p.min},${p.max},${i})"><span class="pr-dot"></span>${p.l}</div>`});
|
| 507 |
document.getElementById('pr').innerHTML=h;document.getElementById('prm').innerHTML=h;
|
| 508 |
}
|
| 509 |
+
function buildBrands(){
|
| 510 |
+
let brands={};D.forEach(p=>{brands[p.brand]=(brands[p.brand]||0)+1});
|
| 511 |
+
let h=`<div class="pr-item active" data-b="all" onclick="setBrand('all')"><span class="pr-dot"></span>Tất cả (${D.length})</div>`;
|
| 512 |
+
Object.entries(brands).sort((a,b)=>b[1]-a[1]).forEach(([b,c])=>{h+=`<div class="pr-item" data-b="${b}" onclick="setBrand('${b}')"><span class="pr-dot"></span>${b} (${c})</div>`});
|
| 513 |
+
document.getElementById('br').innerHTML=h;document.getElementById('brm').innerHTML=h;
|
| 514 |
+
document.getElementById('statTotal').textContent=D.length;
|
| 515 |
+
let cats={};D.forEach(p=>{cats[p.catSlug]=1});document.getElementById('statCats').textContent=Object.keys(cats).length;
|
| 516 |
+
}
|
| 517 |
+
|
| 518 |
+
|
| 519 |
|
| 520 |
function getF(){
|
| 521 |
let r=D;
|
| 522 |
+
if(S.brand!=='all')r=r.filter(p=>p.brand===S.brand);
|
| 523 |
if(S.cat!=='all')r=r.filter(p=>p.catSlug===S.cat);
|
| 524 |
if(S.q){let q=S.q.toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g,'');r=r.filter(p=>p._idx.includes(q))}
|
| 525 |
if(S.pmin>0||S.pmax<1e15)r=r.filter(p=>p.priceNum>=S.pmin&&p.priceNum<=S.pmax);
|
|
|
|
| 538 |
g.className='pg'+(S.view==='l'?' lv':'');
|
| 539 |
if(!items.length){g.innerHTML=`<div class="empty" style="grid-column:1/-1"><i class="fas fa-search"></i><h3>Không tìm thấy</h3><p>Thử thay đổi bộ lọc hoặc từ khóa</p><button class="reset-btn" onclick="resetAll()">Xóa bộ lọc</button></div>`;
|
| 540 |
}else{
|
| 541 |
+
g.innerHTML=items.map((p,i)=>{let idx=D.indexOf(p);let brandColor=p.brand==='Eurogold'?'#c8102e':'var(--p)';return`<div class="pc fade" onclick="showDetail(${idx})" style="transition-delay:${Math.min(i*25,400)}ms"><div class="pi"><img src="${p.image}" alt="${p.name}" loading="lazy" onerror="this.style.display='none'"><span class="pi-badge"><i class="fas ${p.catIcon}"></i> ${p.cat}</span><span style="position:absolute;top:8px;right:8px;background:${brandColor};color:#fff;padding:3px 8px;border-radius:5px;font-size:.58rem;font-weight:700">${p.brand}</span></div><div class="pb"><div style="font-size:.65rem;font-weight:700;color:${brandColor};letter-spacing:.5px;margin-bottom:4px">${p.model||p.brand}</div><div class="pn">${p.name}</div><div class="pf"><span class="pp">${p.price||'Liên hệ'}</span><i class="fas fa-chevron-right"></i></div></div></div>`}).join('');
|
| 542 |
}
|
| 543 |
requestAnimationFrame(()=>document.querySelectorAll('.fade').forEach(e=>e.classList.add('vis')));
|
| 544 |
renderPag(tp);
|
|
|
|
| 616 |
${p.sku?`<div class="detail-sku">SKU: ${p.sku} • Model: ${p.model}</div>`:''}
|
| 617 |
<div class="detail-cat"><i class="fas ${p.catIcon}"></i> ${p.cat}</div>
|
| 618 |
<h1 class="detail-name">${p.name}</h1>
|
| 619 |
+
<div style="font-size:.95rem;font-weight:800;color:${p.brand==='Eurogold'?'#c8102e':'var(--a)'};letter-spacing:1px;margin-bottom:12px">${p.model?p.model+' | ':''} ${p.brand}</div>
|
| 620 |
<div class="detail-price">${p.price||'Liên hệ'}</div>
|
| 621 |
${p.summary?`<div class="detail-summary">${p.summary}</div>`:''}
|
| 622 |
<div class="detail-badges">
|
| 623 |
+
<div class="detail-badge"><i class="fas fa-check-circle"></i> Chính hãng ${p.brand}</div>
|
| 624 |
<div class="detail-badge"><i class="fas fa-shield-halved"></i> Bảo hành điện tử</div>
|
| 625 |
<div class="detail-badge"><i class="fas fa-truck-fast"></i> Miễn phí lắp đặt</div>
|
| 626 |
</div>
|
| 627 |
<div style="display:flex;gap:10px;flex-wrap:wrap">
|
| 628 |
<button class="add-cart-btn" onclick="event.stopPropagation();addToCart(${idx})"><i class="fas fa-cart-plus"></i> Thêm vào giỏ</button>
|
| 629 |
+
<a href="${p.link}" target="_blank" class="detail-btn detail-btn-outline"><i class="fas fa-external-link-alt"></i> ${p.brand==='Eurogold'?'eurogold.vn':'malloca.com'}</a>
|
| 630 |
</div>
|
| 631 |
</div>
|
| 632 |
</div>
|
|
|
|
| 664 |
|
| 665 |
// ===== ACTIONS =====
|
| 666 |
function setCat(s){S.cat=s;S.pg=1;updActive('.cat-item','data-s',s);render();closeMsb()}
|
| 667 |
+
function setPrice(min,max,i){S.pmin=min;S.pmax=max;S.pg=1;document.querySelectorAll('.pr-item').forEach((e,j)=>e.classList.toggle('active',j===i));render();closeMsb()}function setBrand(b){S.brand=b;S.pg=1;document.querySelectorAll('[data-b]').forEach(e=>e.classList.toggle('active',e.getAttribute('data-b')===b));render();closeMsb()}
|
| 668 |
function doSearch(){S.q=document.getElementById('q').value.trim();S.pg=1;render();renderMainCatSearch()}
|
| 669 |
function doSort(){S.sort=document.getElementById('ss').value;S.pg=1;render()}
|
| 670 |
function setV(v){S.view=v;document.getElementById('gb').classList.toggle('active',v==='g');document.getElementById('lb').classList.toggle('active',v==='l');render()}
|
| 671 |
function goPg(p){let f=getF(),tp=Math.ceil(f.length/PP);if(p<1||p>tp)return;S.pg=p;render();document.querySelector('.toolbar').scrollIntoView({behavior:'smooth',block:'start'})}
|
| 672 |
+
function resetAll(){S={cat:'all',q:'',pmin:0,pmax:1e15,sort:'default',pg:1,view:S.view,brand:'all'};document.getElementById('q').value='';document.getElementById('ss').value='default';updActive('.cat-item','data-s','all');document.querySelectorAll('.pr-item[data-i]').forEach((e,i)=>e.classList.toggle('active',i===0));document.querySelectorAll('[data-b]').forEach(e=>e.classList.toggle('active',e.getAttribute('data-b')==='all'));render();let csr=document.getElementById('catSearchResults');if(csr)csr.innerHTML='';}
|
| 673 |
function updActive(sel,attr,val){document.querySelectorAll(sel).forEach(e=>e.classList.toggle('active',e.getAttribute(attr)===val))}
|
| 674 |
function closeMsb(){document.getElementById('msb').classList.remove('open')}
|
| 675 |
document.addEventListener('keydown',e=>{if(e.key==='Escape')goBack();if(e.key==='/'&&document.activeElement.tagName!=='INPUT'){e.preventDefault();document.getElementById('q').focus()}});
|