Files
it/frontend/dist/assets/ProductComparison-DaPfOM8r.js

2 lines
17 KiB
JavaScript
Raw Normal View History

2025-11-03 17:03:57 +08:00
import{a as e,u as a}from"./EmptyState.vue_vue_type_style_index_0_scoped_fb24dc77_lang-CriKEGZ4.js";import{a3 as t,Q as l,o as r,S as o,a6 as s,T as n,M as c}from"./element-plus-CzySQqEG.js";/* empty css */import{_ as i}from"./index-XFdsC_4R.js";import{a8 as d,m as u,q as p,v as m,t as f,H as v,B as y,A as b,D as h,F as g,r as _,c as k,G as x,X as w,u as C,d as S,n as j}from"./vue-vendor-GS00DpJy.js";import{u as V,H as E,i as I,h as M,b as O,c as P,d as D,e as F,f as $,g as R}from"./charts-DH_olTd-.js";import"./utils-UCiI1fAk.js";const U={name:"ErrorBoundary",components:{Warning:t},props:{title:{type:String,default:""},message:{type:String,default:""},retryable:{type:Boolean,default:!0}},setup(e,{emit:a}){const t=_(!1),l=_("");return{hasError:t,errorMessage:l,handleRetry:()=>{t.value=!1,l.value="",a("retry")},errorCaptured:(e,a,r)=>(t.value=!0,l.value=e.message,!1)}}},A={class:"error-boundary"},B={key:0,class:"error-content"},N={class:"error-icon"},z={class:"error-text"};const T=i(U,[["render",function(e,a,t,r,o,s){const n=d("Warning"),c=d("el-icon"),i=d("el-button");return p(),u("div",A,[r.hasError?(p(),u("div",B,[f("div",N,[v(c,{size:"64",color:"#F56C6C"},{default:y(()=>[v(n)]),_:1})]),f("div",z,[f("h3",null,l(t.title||"出现错误"),1),f("p",null,l(t.message||"应用程序遇到了意外错误"),1),t.retryable?(p(),b(i,{key:0,type:"primary",onClick:r.handleRetry},{default:y(()=>[...a[1]||(a[1]=[g(" 重试 ",-1)])]),_:1},8,["onClick"])):h("",!0),v(i,{onClick:a[0]||(a[0]=a=>e.$router.push("/"))},{default:y(()=>[...a[2]||(a[2]=[g(" 返回首页 ",-1)])]),_:1})])])):m(e.$slots,"default",{key:1},void 0,!0)])}],["__scopeId","data-v-8b59789b"]]),L={class:"comparison-table"},q={key:0,class:"bg-white rounded-lg shadow-md p-6 mb-6"},G={key:1,class:"bg-white rounded-lg shadow-md p-6 mb-6"},W={class:"flex items-center"},H={key:0,class:"flex-1"},Q={key:2,class:"bg-white rounded-lg shadow-md p-6"},X=i({__name:"ComparisonTable",props:{products:{type:Array,required:!0},comparisonData:{type:Object,default:()=>({})},type:{type:String,default:"all",validator:e=>["all","basic","performance","specifications"].includes(e)}},setup(e){const a=e,t=_([]),o=k(()=>"all"===a.type||"basic"===a.type),s=k(()=>"all"===a.type||"performance"===a.type),n=k(()=>"all"===a.type||"specifications"===a.type),c=k(()=>{if(!a.products.length)return[];return[{key:"name",label:"产品名称"},{key:"model",label:"型号"},{key:"manufacturer",label:"制造商"},{key:"releaseDate",label:"发布日期"},{key:"currentRank",label:"当前排名"}].map(e=>{const t={attribute:e.label},l={};a.products.forEach(a=>{let t=a[e.key];"releaseDate"===e.key&&t&&(t=new Date(t).toLocaleDateString()),"currentRank"===e.key&&t&&(t=`#${t}`),l[a.id]=t});const r=Object.values(l).filter(e=>!isNaN(parseFloat(e))&&isFinite(e));if(r.length>0)if("currentRank"===e.key){const e=Math.min(...r),a=Math.max(...r);Object.keys(l).forEach(r=>{const o=parseFloat(l[r]);o===e&&(t.best=parseInt(r)),o===a&&(t.worst=parseInt(r))})}else{const e=Math.max(...r),a=Math.min(...r);Object.keys(l).forEach(r=>{const o=parseFloat(l[r]);o===e&&(t.best=parseInt(r)),o===a&&(t.worst=parseInt(r))})}return{...t,...l}})}),i=k(()=>{if(!a.products.length)return[];const e=new Set;return a.products.forEach(a=>{a.performanceScores&&a.performanceScores.forEach(a=>{e.add(a.benchmarkName)})}),Array.from(e).map(e=>{const t={benchmark:e},l={};a.products.forEach(a=>{var t;const r=null==(t=a.performanceScores)?void 0:t.find(a=>a.benchmarkName===e);l[a.id]=r?r.score:null});const r=Object.values(l).filter(e=>null!==e);if(r.length>0){const e=Math.max(...r),a=Math.min(...r);Object.keys(l).forEach(r=>{l[r]===e&&(t.best=parseInt(r)),l[r]===a&&(t.worst=parseInt(r))})}return{...t,...l}})}),m=k(()=>{if(!a.products.length)return{};const e={};a.products.forEach(a=>{a.specifications&&a.specifications.forEach(t=>{const l=t.group||"其他";e[l]||(e[l]={}),e[l][t.name]=e[l][t.name]||{},e[l][t.name][a.id]=t.value})});const t={};return Object.keys(e).forEach(a=>{t[a]=Object.keys(e[a])