import{a8 as e,A as a,q as l,B as t,t as r,m as n,D as o,H as s,F as i,G as u,X as c,aj as d,al as g,r as p,c as m,w as v}from"./vue-vendor-GS00DpJy.js";import{_ as f,u as h}from"./index-XFdsC_4R.js";import{u as y,a as x}from"./EmptyState.vue_vue_type_style_index_0_scoped_fb24dc77_lang-CriKEGZ4.js";import{a0 as b,Q as S}from"./element-plus-CzySQqEG.js";/* empty css */import"./utils-UCiI1fAk.js";const P={class:"category-ranking"},_={class:"container mx-auto px-4 py-8"},C={class:"mb-6"},z={class:"flex flex-col md:flex-row justify-between items-start md:items-center mb-6 gap-4"},k={class:"text-2xl font-bold"},w={class:"flex flex-wrap gap-2"},V={class:"bg-white rounded-lg shadow-md p-4 mb-6"},j={class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4"},R={class:"lg:col-span-2"},F={class:"mt-4 pt-4 border-t border-gray-200"},U={class:"grid grid-cols-1 md:grid-cols-3 gap-4"},B={key:0,class:"loading-container"},T={key:3,class:"space-y-4"},D={class:"p-4"},I={class:"flex items-start"},E={class:"mr-3 pt-1"},Q={class:"mr-4 text-center min-w-[60px]"},q={class:"text-2xl font-bold text-blue-600"},L={class:"flex-1"},Y={class:"flex items-start"},A={class:"w-16 h-16 bg-gray-200 rounded mr-4 flex items-center justify-center"},G={class:"flex-1"},H={class:"text-lg font-semibold mb-1"},X={class:"text-sm text-gray-600 mb-2"},$={class:"flex flex-wrap gap-2 mb-2"},J={class:"text-right min-w-[120px]"},K={class:"text-2xl font-bold text-green-600"},M={class:"mt-3 flex justify-end"},N={key:4,class:"mt-8 flex justify-center"};const O=f({name:"CategoryRanking",components:{Picture:b},props:{id:{type:String,required:!0}},setup(e){d();const a=g(),l=h(),t=y(),r=x(),n=p(null),o=p([]),s=p(!1),i=p(null),u=p(""),c=p([0,1e4]),f=p("performanceScore_desc"),b=p({manufacturer:"",year:null}),S=p({currentPage:1,pageSize:20,total:0}),P=m(()=>r.selectedProducts),_=m(()=>{const e=o.value.map(e=>e.manufacturer).filter(Boolean);return[...new Set(e)].sort()}),C=m(()=>{const e=o.value.map(e=>e.releaseYear).filter(Boolean);return[...new Set(e)].sort((e,a)=>a-e)}),z=async()=>{s.value=!0,i.value=null;try{t.setFilters({categoryId:e.id,manufacturer:b.value.manufacturer,minScore:c.value[0],maxScore:c.value[1],year:b.value.year});const[a,l]=f.value.split("_");t.setSorting(a,l),t.setPage(S.value.currentPage),t.setPageSize(S.value.pageSize),await t.fetchProducts(),o.value=t.products,S.value.total=t.pagination.total,S.value.currentPage=t.pagination.currentPage}catch(a){i.value="获取产品列表失败"}finally{s.value=!1}},k=async e=>{s.value=!0,i.value=null;try{const a=await t.searchProducts(e);o.value=a,S.value.total=a.length}catch(a){i.value="搜索失败"}finally{s.value=!1}},w=e=>P.value.some(a=>a.id===e);let V=null;return v(()=>e.id,()=>{e.id&&((async()=>{try{n.value=await l.getCategoryById(e.id)}catch(a){i.value="获取类别信息失败"}})(),z())},{immediate:!0}),{category:n,products:o,loading:s,error:i,searchQuery:u,scoreRange:c,sorting:f,filters:b,pagination:S,selectedProducts:P,manufacturers:_,years:C,fetchProducts:z,handleSearch:e=>{V&&clearTimeout(V),V=setTimeout(()=>{e.trim()?k(e):z()},500)},handleFilterChange:()=>{S.value.currentPage=1,z()},handleSortingChange:()=>{S.value.currentPage=1,z()},handleScoreRangeChange:()=>{S.value.currentPage=1,z()},handlePageChange:e=>{S.value.currentPage=e,z()},handlePageSizeChange:e=>{S.value.pageSize=e,S.value.currentPage=1,z()},resetFilters:()=>{u.value="",c.value=[0,1e4],f.value="performanceScore_desc",b.value={manufacturer:"",year:null},S.value.currentPage=1,z()},isProductSelected:w,toggleProductSelection:e=>{w(e.id)?r.removeProduct(e.id):r.addProduct(e)},navigateToProductDetail:e=>{a.push(`/product/${e}`)},navigateToComparison:()=>{a.push("/compare")},formatScore:e=>e.toLocaleString()}}},[["render",function(d,g,p,m,v,f){const h=e("el-breadcrumb-item"),y=e("el-breadcrumb"),x=e("el-button"),b=e("el-input"),O=e("el-option"),W=e("el-select"),Z=e("el-slider"),ee=e("LoadingSkeleton"),ae=e("EmptyState"),le=e("el-checkbox"),te=e("Picture"),re=e("el-icon"),ne=e("el-tag"),oe=e("el-pagination"),se=e("ErrorBoundary");return l(),a(se,{onRetry:m.fetchProducts},{default:t(()=>{var e;return[r("div",P,[r("div",_,[r("div",C,[s(y,{separator:"/"},{default:t(()=>[s(h,{to:{path:"/"}},{default:t(()=>[...g[7]||(g[7]=[i("首页",-1)])]),_:1}),s(h,null,{default:t(()=>{var e;return[i(S((null==(e=m.category)?void 0:e.name)||"产品排名"),1)]}),_:1})]),_:1})]),r("div",z,[r("h1",k,S(null==(e=m.category)?void 0:e.name)+" 排名",1),r("div",w,[s(x,{type:"primary",size:"small",disabled:m.selectedProducts.length<2,onClick:m.navigateToComparison},{default:t(()=>[i(" 对比选中产品 ("+S(m.selectedProducts.length)+") ",1)]),_:1},8,["disabled","onClick"])])]),r("div",V,[r("div",j,[r("div",R,[s(b,{modelValue:m.searchQuery,"onUpdate:modelValue":g[0]||(g[0]=e=>m.searchQuery=e),placeholder:"搜索产品名称或型号","prefix-icon":"Search",clearable:"",onInput:m.handleSearch},null,8,["modelValue","onInput"])]),s(W,{modelValue:m.filters.manufacturer,"onUpdate:modelValue":g[1]||(g[1]=e=>m.filters.manufacturer=e),placeholder:"选择品牌",clearable:"",onChange:m.handleFilterChange},{default:t(()=>[(l(!0),n(u,null,c(m.manufacturers,e=>(l(),a(O,{key:e,label:e,value:e},null,8,["label","value"]))),128))]),_:1},8,["modelValue","onChange"]),s(W,{modelValue:m.sorting,"onUpdate:modelValue":g[2]||(g[2]=e=>m.sorting=e),placeholder:"排序方式",onChange:m.handleSortingChange},{default:t(()=>[s(O,{label:"性能分数 (高到低)",value:"performanceScore_desc"}),s(O,{label:"性能分数 (低到高)",value:"performanceScore_asc"}),s(O,{label:"发布日期 (新到旧)",value:"releaseDate_desc"}),s(O,{label:"发布日期 (旧到新)",value:"releaseDate_asc"})]),_:1},8,["modelValue","onChange"])]),r("div",F,[r("div",U,[r("div",null,[g[8]||(g[8]=r("div",{class:"text-sm text-gray-600 mb-1"},"性能分数范围",-1)),s(Z,{modelValue:m.scoreRange,"onUpdate:modelValue":g[3]||(g[3]=e=>m.scoreRange=e),range:"",min:0,max:1e4,step:100,"format-tooltip":m.formatScore,onChange:m.handleScoreRangeChange},null,8,["modelValue","format-tooltip","onChange"])]),s(W,{modelValue:m.filters.year,"onUpdate:modelValue":g[4]||(g[4]=e=>m.filters.year=e),placeholder:"发布年份",clearable:"",onChange:m.handleFilterChange},{default:t(()=>[(l(!0),n(u,null,c(m.years,e=>(l(),a(O,{key:e,label:e,value:e},null,8,["label","value"]))),128))]),_:1},8,["modelValue","onChange"]),s(x,{onClick:m.resetFilters},{default:t(()=>[...g[9]||(g[9]=[i("重置筛选",-1)])]),_:1},8,["onClick"])])])]),m.loading?(l(),n("div",B,[(l(),n(u,null,c(8,e=>r("div",{key:e,class:"skeleton-wrapper"},[s(ee,{type:"product-card"})])),64))])):m.error?(l(),a(ae,{key:1,title:"加载失败",description:m.error,onRetry:m.fetchProducts},null,8,["description","onRetry"])):0===m.products.length?(l(),a(ae,{key:2,title:"没有找到产品",description:"没有符合筛选条件的产品,请尝试调整筛选条件"})):(l(),n("div",T,[(l(!0),n(u,null,c(m.products,(e,a)=>(l(),n("div",{key:e.id,class:"product-card bg-white rounded-lg shadow-md hover:shadow-lg transition-shadow duration-300"},[r("div",D,[r("div",I,[r("div",E,[s(le,{"model-value":m.isProductSelected(e.id),onChange:a=>m.toggleProductSelection(e)},null,8,["model-value","onChange"])]),r("div",Q,[r("div",q,S(a+1+(m.pagination.currentPage-1)*m.pagination.pageSize),1),g[10]||(g[10]=r("div",{class:"text-xs text-gray-500"},"排名",-1))]),r("div",L,[r("div",Y,[r("div",A,[s(re,{size:"24"},{default:t(()=>[s(te)]),_:1})]),r("div",G,[r("h3",H,S(e.name),1),r("p",X,S(e.model),1),r("div",$,[s(ne,{size:"small"},{default:t(()=>[i(S(e.manufacturer),1)]),_:2},1024),s(ne,{size:"small",type:"info"},{default:t(()=>[i(S(e.releaseYear)+"年",1)]),_:2},1024)])]),r("div",J,[r("div",K,S(e.performanceScore),1),g[11]||(g[11]=r("div",{class:"text-xs text-gray-500"},"性能分数",-1))])]),r("div",M,[s(x,{type:"primary",size:"small",onClick:a=>m.navigateToProductDetail(e.id)},{default:t(()=>[...g[12]||(g[12]=[i(" 查看详情 ",-1)])]),_:1},8,["onClick"])])])])])]))),128))])),m.products.length>0?(l(),n("div",N,[s(oe,{"current-page":m.pagination.currentPage,"onUpdate:currentPage":g[5]||(g[5]=e=>m.pagination.currentPage=e),"page-size":m.pagination.pageSize,"onUpdate:pageSize":g[6]||(g[6]=e=>m.pagination.pageSize=e),"page-sizes":[10,20,50,100],total:m.pagination.total,layout:"total, sizes, prev, pager, next, jumper",onSizeChange:m.handlePageSizeChange,onCurrentChange:m.handlePageChange},null,8,["current-page","page-size","total","onSizeChange","onCurrentChange"])])):o("",!0)])])]}),_:1},8,["onRetry"])}],["__scopeId","data-v-9454c58d"]]);export{O as default};