PageSourceSearch

https://www.ego886.com/js/FeaturedShops-kH3jfxm6.js

js ego886.com collected 2026-10-07 21:55:53 UTC 11,468 bytes, 1 lines download raw bytes

1var V=(B,T,p)=>new Promise((R,N)=>{var y=c=>{try{v(p.next(c))}catch(w){N(w)}},C=c=>{try{v(p.throw(c))}catch(w){N(w)}},v=c=>c.done?R(c.value):Promise.resolve(c.value).then(y,C);v((p=p.apply(B,T)).next())});import{r as m,c as z,m as os,p as ls,e as r,h as A,j as s,f as M,D as g,t as f,F as _,E as x,w as is,d as ns,l as rs,g as d,k as F,O as ds,B as cs}from"./vue-vendor-BqEqlBN8.js";import{_ as us,l as I,P as $,A as fs}from"./index-zKxGK1P5.js";import vs from"./Footer-o4LL8TG7.js";import{g as gs,d as J}from"./pageContentService-DzKO0LSI.js";import"./vendor-CgfLlPlq.js";import"./parse-hlf3C9cV.js";import"./query-mEIUYlNa.js";const ps={class:"featured-shops-page"},hs={class:"page-container"},ms={class:"page-header"},_s={class:"subtitle"},ks={class:"filter-tabs"},ys=["onClick"],Cs={class:"shops-container"},ws={key:0,class:"skeleton-container"},bs={class:"shops-grid"},Ss={key:1,class:"shops-grid"},Ps=["onClick"],Ms={class:"shop-cover"},xs={key:0,class:"image-loading-placeholder"},Fs=["src","alt","onLoad","onError"],Ts={key:1,class:"shop-badge"},Ns={class:"shop-category-badge"},js={class:"shop-content"},Is={class:"shop-header"},$s={class:"shop-avatar"},Rs={key:0,class:"avatar-loading-placeholder"},Es=["src","alt","onLoad","onError"],Ls={class:"shop-info"},Vs={class:"shop-name"},zs={key:0,class:"fas fa-check-circle verified-icon"},As={class:"shop-rating"},Bs={class:"stars"},Qs={class:"rating-value"},Os={class:"rating-count"},qs={class:"shop-description"},Us={class:"shop-stats"},Hs={class:"stat-item"},Gs={class:"stat-item"},Js={class:"stat-item"},Ks={key:0,class:"hot-products"},Ws={class:"products-preview"},Xs=["onClick"],Ys=["src","alt"],Zs={class:"product-price"},Ds={class:"shop-tags"},se={key:2,class:"empty-state"},ee={key:0,class:"load-more"},te=["disabled"],ae={class:"ad-info-section"},oe={class:"ad-info-card"},le={class:"info-content"},ie={__name:"FeaturedShops",setup(B){const T=rs(),p=m(null),R=z(()=>{var o;return((o=p.value)==null?void 0:o.title)||J["featured-shops"].title}),N=z(()=>{var o;return((o=p.value)==null?void 0:o.subtitle)||J["featured-shops"].subtitle}),y=m(!0),C=m(!1),v=m("all"),c=m([]),w=m(1),j=m(!0),k=m({}),Q=o=>{k.value[o]=!0},O=(o,e,n)=>{o.target.src=n,k.value[e]=!0},K=[{id:"all",name:"全部推薦",icon:"fas fa-th-large"},{id:"fashion",name:"流行時尚",icon:"fas fa-tshirt"},{id:"beauty",name:"美妝保養",icon:"fas fa-spa"},{id:"food",name:"美食特產",icon:"fas fa-utensils"},{id:"home",name:"居家生活",icon:"fas fa-home"},{id:"digital",name:"3C 數位",icon:"fas fa-laptop"}],q=z(()=>v.value==="all"?c.value:c.value.filter(o=>o.categoryType===v.value)),W=o=>o>=1e4?(o/1e4).toFixed(1)+"萬":o>=1e3?(o/1e3).toFixed(1)+"k":o.toString(),X={女生衣著:"fashion",男生衣著:"fashion",流行女裝:"fashion",流行男裝:"fashion",美妝保養:"beauty",美容保健:"beauty",美食:"food","美食、伴手禮":"food",食品:"food",居家生活:"home",傢俱:"home",家電:"home",手機平板與周邊:"digital","3C":"digital",電腦:"digital",影音:"digital"},U=(o=!1)=>V(null,null,function*(){o?C.value=!0:(y.value=!0,k.value={});try{const e=$.Object.extend("tk_Product"),n=new $.Query(e);n.equalTo("status","active"),n.include("seller"),n.descending("sold"),n.limit(500);const t=yield n.find(),l=new Map;for(const u of t){const i=u.get("seller");if(!i)continue;const h=i.id;l.has(h)||l.set(h,{seller:i,products:[],totalSold:0,categories:new Set});const a=l.get(h);a.products.push(u),a.totalSold+=u.get("sold")||0;const S=u.get("category");if(S){const E=S.split(/\s*[>\/\-]\s*/)[0].trim();a.categories.add(E)}}const H=$.Object.extend("tk_MemberData"),b=[];for(const[u,i]of l)try{const h=new $.Query(H);h.equalTo("user",{__type:"Pointer",className:"_User",objectId:u});const a=yield h.first(),S=Array.from(i.categories)[0]||"綜合",E=X[S]||"all",ts=i.products.slice(0,3).map(P=>{const L=P.get("images")||[];return{id:P.id,name:P.get("name"),price:P.get("price")||0,image:L[0]||"/img/default-product.jpg"}}),G=(a==null?void 0:a.get("sellerRating"))||(a==null?void 0:a.get("rating"))||0,as=(a==null?void 0:a.get("reviewCount"))||i.products.reduce((P,L)=>P+(L.get("reviewCount")||0),0);b.push({id:u,name:(a==null?void 0:a.get("storeName"))||(a==null?void 0:a.get("realName"))||(i.seller.get("username")&&!/^user_\d+_/i.test(i.seller.get("username"))?i.seller.get("username"):null)||"未命名商店",avatar:(a==null?void 0:a.get("storeImage"))||i.seller.get("avatar")||"/img/default-avatar.png",coverImage:(a==null?void 0:a.get("storeCoverUrl"))||"/img/default-shop-cover.jpg",description:(a==null?void 0:a.get("storeDesc"))||"歡迎光臨本店,我們提供優質商品與服務。",mainCategory:S,categoryType:E,rating:G>0?G:4.5+Math.random()*.5,reviewCount:as||Math.floor(Math.random()*500),productC
1ount:i.products.length,followerCount:i.seller.get("followerCount")||Math.floor(Math.random()*5e3),responseRate:a!=null&&a.get("chatResponseRate")?Math.round(a.get("chatResponseRate")*100):90+Math.floor(Math.random()*10),isPremium:i.totalSold>100||i.products.length>20,verified:(a==null?void 0:a.get("isVerified"))||i.totalSold>50,tags:Y(S,i.totalSold),hotProducts:ts})}catch(h){I.warn("FeaturedShops",`獲取賣家 ${u} 資料失敗:`,h)}if(b.sort((u,i)=>u.isPremium&&!i.isPremium?-1:!u.isPremium&&i.isPremium?1:i.followerCount-u.followerCount),o){const u=c.value.length,i=b.slice(u,u+6);c.value=[...c.value,...i],w.value++,c.value.length>=b.length&&(j.value=!1)}else c.value=b.slice(0,12),j.value=b.length>12;I.log("FeaturedShops","[FeaturedShops] 載入完成:",c.value.length,"間店舖")}catch(e){I.error("FeaturedShops","載入店舖失敗:",e)}finally{y.value=!1,C.value=!1}});function Y(o,e){const n=[];switch(e>100&&n.push("熱銷店家"),e>50&&n.push("快速出貨"),o){case"女生衣著":case"流行女裝":n.push("韓系女裝");break;case"男生衣著":case"流行男裝":n.push("商務休閒");break;case"美妝保養":n.push("原廠正品");break;case"美食":case"美食、伴手禮":n.push("伴手禮首選");break;case"居家生活":n.push("品質保證");break;case"手機平板與周邊":case"3C":n.push("保固服務");break}return n.length<3&&n.push("7天鑑賞期"),n.slice(0,3)}const Z=()=>{U(!0)},D=o=>{T.push(`/shop/${o}`)},ss=o=>{T.push(`/product/${o}`)};os(v,()=>{w.value=1,j.value=!0});const es=()=>V(null,null,function*(){try{const o=yield gs("featured-shops");o&&(p.value=o)}catch(o){I.error("FeaturedShops","載入頁面內容失敗:",o)}});return ls(()=>{document.title="精選店舖 - 星星電商",es(),U()}),(o,e)=>{const n=ns("router-link");return d(),r("div",ps,[A(fs),s("div",hs,[s("div",ms,[s("h1",null,[e[0]||(e[0]=s("i",{class:"fas fa-crown"},null,-1)),g(" "+f(R.value),1)]),s("p",_s,f(N.value),1)]),s("div",ks,[(d(),r(_,null,x(K,t=>s("button",{key:t.id,class:F(["filter-tab",{active:v.value===t.id}]),onClick:l=>v.value=t.id},[s("i",{class:F(t.icon)},null,2),g(" "+f(t.name),1)],10,ys)),64))]),s("div",Cs,[y.value?(d(),r("div",ws,[s("div",bs,[(d(),r(_,null,x(6,t=>s("div",{key:"skeleton-"+t,class:"shop-card skeleton-card"},[...e[1]||(e[1]=[ds('<div class="shop-cover skeleton-cover" data-v-9ffbfcd3><div class="skeleton-shimmer" data-v-9ffbfcd3></div></div><div class="shop-content" data-v-9ffbfcd3><div class="shop-header" data-v-9ffbfcd3><div class="shop-avatar skeleton-avatar" data-v-9ffbfcd3><div class="skeleton-shimmer" data-v-9ffbfcd3></div></div><div class="shop-info" data-v-9ffbfcd3><div class="skeleton-text skeleton-shop-name" data-v-9ffbfcd3></div><div class="skeleton-text skeleton-rating" data-v-9ffbfcd3></div></div></div><div class="skeleton-text skeleton-desc" data-v-9ffbfcd3></div><div class="skeleton-text skeleton-stats" data-v-9ffbfcd3></div><div class="skeleton-text skeleton-products" data-v-9ffbfcd3></div></div><div class="shop-action" data-v-9ffbfcd3><div class="skeleton-text skeleton-btn" data-v-9ffbfcd3></div></div>',3)])])),64))])])):q.value.length>0?(d(),r("div",Ss,[(d(!0),r(_,null,x(q.value,t=>(d(),r("div",{key:t.id,class:"shop-card",onClick:l=>D(t.id)},[s("div",Ms,[k.value["cover-"+t.id]?M("",!0):(d(),r("div",xs,[...e[2]||(e[2]=[s("div",{class:"skeleton-shimmer"},null,-1)])])),s("img",{src:t.coverImage||"/img/default-shop-cover.jpg",alt:t.name,loading:"lazy",onLoad:l=>Q("cover-"+t.id),onError:l=>O(l,"cover-"+t.id,"/img/default-shop-cover.jpg"),class:F({"image-loaded":k.value["cover-"+t.id]})},null,42,Fs),t.isPremium?(d(),r("div",Ts,[...e[3]||(e[3]=[s("i",{class:"fas fa-crown"}
1,null,-1),g(" 金牌店家 ",-1)])])):M("",!0),s("div",Ns,f(t.mainCategory),1)]),s("div",js,[s("div",Is,[s("div",$s,[k.value["avatar-"+t.id]?M("",!0):(d(),r("div",Rs,[...e[4]||(e[4]=[s("div",{class:"skeleton-shimmer"},null,-1)])])),s("img",{src:t.avatar||"/img/default-avatar.png",alt:t.name,loading:"lazy",onLoad:l=>Q("avatar-"+t.id),onError:l=>O(l,"avatar-"+t.id,"/img/default-avatar.png"),class:F({"image-loaded":k.value["avatar-"+t.id]})},null,42,Es)]),s("div",Ls,[s("h3",Vs,[g(f(t.name)+" ",1),t.verified?(d(),r("i",zs)):M("",!0)]),s("div",As,[s("div",Bs,[(d(),r(_,null,x(5,l=>s("i",{key:l,class:F(["fas fa-star",{filled:l<=Math.round(t.rating)}])},null,2)),64))]),s("span",Qs,f(t.rating.toFixed(1)),1),s("span",Os,"("+f(t.reviewCount)+" 評價)",1)])])]),s("p",qs,f(t.description),1),s("div",Us,[s("div",Hs,[e[5]||(e[5]=s("i",{class:"fas fa-box"},null,-1)),s("span",null,f(t.productCount)+" 件商品",1)]),s("div",Gs,[e[6]||(e[6]=s("i",{class:"fas fa-users"},null,-1)),s("span",null,f(W(t.followerCount))+" 粉絲",1)]),s("div",Js,[e[7]||(e[7]=s("i",{class:"fas fa-shipping-fast"},null,-1)),s("span",null,f(t.responseRate)+"% 回覆率",1)])]),t.hotProducts&&t.hotProducts.length>0?(d(),r("div",Ks,[e[8]||(e[8]=s("div",{class:"hot-products-header"},[s("span",null,[s("i",{class:"fas fa-fire"}),g(" 熱賣商品")])],-1)),s("div",Ws,[(d(!0),r(_,null,x(t.hotProducts.slice(0,3),l=>(d(),r("div",{key:l.id,class:"product-preview",onClick:cs(H=>ss(l.id),["stop"])},[s("img",{src:l.image||"/img/default-product.jpg",alt:l.name,loading:"lazy"},null,8,Ys),s("span",Zs,"NT$ "+f(l.price),1)],8,Xs))),128))])])):M("",!0),s("div",Ds,[(d(!0),r(_,null,x(t.tags,l=>(d(),r("span",{key:l,class:"tag"},f(l),1))),128))])]),e[9]||(e[9]=s("div",{class:"shop-action"},[s("button",{class:"visit-btn"},[s("i",{class:"fas fa-store"}),g(" 進入店舖 ")])],-1))],8,Ps))),128))])):(d(),r("div",se,[...e[10]||(e[10]=[s("i",{class:"fas fa-store-slash"},null,-1),s("h3",null,"此分類暫無推薦店舖",-1),s("p",null,"請嘗試其他分類,或稍後再來看看!",-1)])]))]),j.value&&!y.value?(d(),r("div",ee,[s("button",{class:"load-more-btn",onClick:Z,disabled:C.value},[C.value?(d(),r(_,{key:0},[e[11]||(e[11]=s("div",{class:"spinner small"},null,-1)),e[12]||(e[12]=g(" 載入中... ",-1))],64)):(d(),r(_,{key:1},[e[13]||(e[13]=s("i",{class:"fas fa-plus"},null,-1)),e[14]||(e[14]=g(" 載入更多店舖 ",-1))],64))],8,te)])):M("",!0),s("section",ae,[s("div",oe,[e[18]||(e[18]=s("div",{class:"info-icon"},[s("i",{class:"fas fa-bullhorn"})],-1)),s("div",le,[e[16]||(e[16]=s("h3",null,"想讓您的店舖出現在這裡?",-1)),e[17]||(e[17]=s("p",null,"購買店長推薦廣告,讓更多消費者發現您的優質商品!每間店舖每種分類只會顯示一次,確保公平曝光。",-1)),A(n,{to:"/seller/ads",class:"learn-more"},{default:is(()=>[...e[15]||(e[15]=[g(" 了解廣告方案 ",-1),s("i",{class:"fas fa-arrow-right"},null,-1)])]),_:1})])])])]),A(vs)])}}},pe=us(ie,[["__scopeId","data-v-9ffbfcd3"]]);export{pe as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.