2 lines
8.5 KiB
JavaScript
2 lines
8.5 KiB
JavaScript
|
|
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("e
|