PageSourceSearch

https://kooai.top/assets/ReviewIntel-DHx7NEw0.js

js kooai.top collected 2026-10-02 02:09:45 UTC 13,367 bytes, 1 lines download raw bytes

1import{o as me,x as a,y as u,z as e,C as n,L as d,H as o,u as $,J as z,B as g,G as m,I as c,N as v,O as p,W as be,P as ge,c as x,b as S,D as M}from"./vendor-CGUashZo.js";import{ac as se}from"./index-CvxDUdwh.js";import{_ as fe}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{Z as ke,a9 as he,T as Ce,ba as $e,g as xe,e as De,f as Se,P as ue}from"./icons-B5R-B_eA.js";import"./vue-DF2iH-iO.js";const ze={class:"page review-intel-page"},Te={class:"page-header"},Ie={class:"page-header-actions"},Me={class:"metric-grid compact"},Ne={class:"intel-meta-row"},Be={key:1,class:"intel-loading-grid"},Ve={class:"intel-tabs"},we=["onClick"],Le={class:"panel-title"},Fe={class:"intel-table"},Oe=["onClick"],je={class:"cell-product"},Ae={key:0,class:"intel-empty"},Ge={class:"panel-title"},Pe={class:"intel-table"},Re=["onClick"],Ee={class:"cell-product"},Ue={class:"panel-title"},qe={class:"intel-table"},He=["onClick"],Je={class:"cell-product"},Ke={key:3,class:"intel-gaps"},We={class:"panel-title"},Ze={class:"intent-bars"},Qe={class:"intent-label"},Xe={class:"intent-bar-track"},Ye={class:"intent-count"},et={class:"keyword-cloud"},tt={class:"panel-title"},lt={class:"intel-table"},nt=["onClick"],at={class:"cell-product"},st={key:4},ut={class:"panel-title"},it={class:"deepdive-meta"},rt={key:0},ot={key:1},dt={key:2},ct={class:"deepdive-grid"},vt={class:"keyword-cloud"},pt={key:0},_t={__name:"ReviewIntel",setup(yt){const ie=[{key:"alerts",label:"高销量低口碑预警"},{key:"overrated",label:"评分虚高榜"},{key:"fraud",label:"刷评嫌疑榜"},{key:"gaps",label:"需求缺口"},{key:"deepdive",label:"单品深挖"}],T=S(!1),N=S(""),I=S(null),D=S("alerts"),B=S(""),V=S(!1),F=S(""),s=S(null),f=x(()=>{var i;return((i=I.value)==null?void 0:i.data)||{}}),k=x(()=>f.value.summary||{}),re=x(()=>{var i;return((i=I.value)==null?void 0:i.meta)||{}}),P=x(()=>Object.entries(f.value.intent_distribution||{})),oe=x(()=>Object.entries(f.value.sentiment_distribution||{})),de=x(()=>f.value.top_keywords||[]),ce=x(()=>Object.entries(f.value.demand_gaps||{})),ve=x(()=>{const i=re.value.target_date||f.value.target_date;return i?`T-1 数据截止:${i} · 生成于 ${_e(f.value.generated_at)}`:"T-1 数据截止:加载中"}),pe=x(()=>[{label:"覆盖商品",value:r(k.value.product_count),note:`${r(k.value.total_reviews)} 条评论`},{label:"已分析评论",value:r(k.value.tagged_reviews),note:`紧急差评 ${r(k.value.urgent_high_reviews)} 条`},{label:"平均评分",value:`${_(k.value.avg_rating)} → ${_(k.value.avg_real_score)}`,note:`平台分 → 真实分,偏差 ${_(k.value.avg_rating_bias)}`},{label:"评分虚高商品",value:r(k.value.overrated_products),note:"真实分低于平台分 0.5 以上"},{label:"刷评嫌疑商品",value:r(k.value.fraud_suspect_products),note:`无文字评论 ${r(k.value.no_text_reviews)} 条`},{label:"高销量低口碑预警",value:r(k.value.alert_products),note:"近28天有销量且真实分 < 3.5"}]);function O(i){const t=Number(i);return Number.isFinite(t)?t:null}function r(i){const t=O(i);return t===null?"-":t.toLocaleString(void 0,{maximumFractionDigits:0})}function _(i){const t=O(i);return t===null?"-":t.toFixed(2)}function _e(i){const t=String(i||"").trim();return t?t.replace("T"," ").slice(0,16):"-"}function R(i){const t=O(i);return t===null?"":t>.5?"bias-high":t<0?"bias-low":""}function A(i){const t=O(i);return t===null?"":t>=.5?"fraud-high":t>=.25?"fraud-mid":""}async function E(){T.value=!0,N.value="";try{I.value=await se.dataset("review-intel")}catch(i){N.value=i.message||"口碑情报数据加载失败"}finally{T.value=!1}}async function w(i){const t=String(i||B.value||"").trim();if(t){D.value="deepdive",B.value=t,V.value=!0,F.value="";try{s.value=await se.reviewIntelDeepDive({product_id:t})}catch(j){s.value=null,F.value=j.message||"单品深挖失败"}finally{V.value=!1}}}return me(E),(i,t)=>{const j=M("Button"),U=M("Message"),C=M("Card"),L=M("Tag"),q=M("Skeleton"),ye=M("InputText");return a(),u("div",ze,[e("header",Te,[e("div",null,[t[2]||(t[2]=e("h1",null,"口碑情报",-1)),e("p",null,n(ve.value),1)]),e("div",Ie,[d(j,{severity:"secondary",outlined:"",disabled:T.value,onClick:E},{default:o(()=>[d($(ke),{size:17,class:z({"spin-icon":T.value})},null,8,["class"]),t[3]||(t[3]=g(" 刷新 ",-1))]),_:1},8,["disabled"])])]),N.value?(a(),m(U,{key:0,severity:"error",closable:!1},{default:o(()=>[g(n(N.value),1)]),_:1})):c("",!0),e("div",Me,[(a(!0),u(v,null,p(pe.value,l=>(a(),m(C,{key:l.label,class:"metric-card"},{content:o(()=>[e("span",null,n(l.label),1),e("strong",null,n(l.value),1),e("small",null,n(l.note),1)]),_:2},1024))),128))]),e("div",Ne,[d(L,{severity:"info",value:"刷评降权真实分"}),d(L,{severity:"secondary",value:"官方体验团评论已单独计数"}),(a(!0),u(v,null,p(oe.value,([l,y])=>(a(),m(L,{key:l,severity:"secondary",value:`${l} ${r(y)}`},null,8,["value"]))),128))]),T.value&&!I.value?(a(),u("div",Be,[(a(),u(v,null,p(3,l=>d(q,{key:l,height:"12rem","border-radius":"8px"})),64))])):I.value?(a(),u(v,{key:2},[e("div",Ve,[(a(),u(v,null,p(ie,l=>e("button",{key:l.key,type:"button",class:z(["intel-tab",{active:D.value===l.key}]),onClick:y=>D.value=l.key},n(l.label),11,we)),64))]),D.value==="alerts"?(a(),m(C,{key:0,class:"intel-panel"},{title:o(()=>[e("div",Le,[d($(he),{size:18}),t[4]||(t[4]=g(" 高销量低口碑预警",-1))])]),content:o(()=>[t[6]||(t[6]=e("p",{class:"panel-note"},"近 28 天有销量但真实口碑分低于 3.5,点击行进入单品深挖。",-1)),e("div",Fe,[t[5]||(t[5]=e("div",{class:"intel-table-row head"},[e("span",null,"商品"),e("span",null,"销售(28天)"),e("span",null,"平台分→真实分"),e("span",null,"主导意图"),e("span",null,"刷评占比")],-1)),(a(!0),u(v,null,p(f.value.alerts||[],l=>(a(),u("button",{key:l.product_id,type:"button",class:"intel-table-row",onClick:y=>w(l.product_id)},[e("span",je,[e("strong",null,n(l.product_name),1),e("small",null,n(l.product_id),1)]),e("span",null,n(r(l.sales_28d)),1),e("span",{class:z(R(l.rating_bias))},n(_(l.avg_rating))+" → "+n(_(l.real_score)),3),e("span",null,n(l.dominant_intent||"-"),1),e("span",{class:z(A(l.fraud_ratio))},n(Math.round((l.fraud_ratio||0)*100))+"%",3)],8,Oe))),128)),(f.value.alerts||[]).length?c("",!0):(a(),u("div",Ae,"暂无预警商品"))])]),_:1})):c("",!0),D.value==="overrated"?(a(),m(C,{key:1,class:"intel-panel"},{title:o(()=>[e("div",Ge,[d($(Ce),{size:18}
1),t[7]||(t[7]=g(" 评分虚高榜",-1))])]),content:o(()=>[t[9]||(t[9]=e("p",{class:"panel-note"},"平台评分显著高于刷评降权后的真实分,偏差越大水分越多。",-1)),e("div",Pe,[t[8]||(t[8]=e("div",{class:"intel-table-row head"},[e("span",null,"商品"),e("span",null,"平台分→真实分"),e("span",null,"偏差"),e("span",null,"刷评(高/占比)"),e("span",null,"赞助评论")],-1)),(a(!0),u(v,null,p(f.value.overrated||[],l=>(a(),u("button",{key:l.product_id,type:"button",class:"intel-table-row",onClick:y=>w(l.product_id)},[e("span",Ee,[e("strong",null,n(l.product_name),1),e("small",null,n(l.product_id),1)]),e("span",null,n(_(l.avg_rating))+" → "+n(_(l.real_score)),1),e("span",{class:z(R(l.rating_bias))},"+"+n(_(l.rating_bias)),3),e("span",{class:z(A(l.fraud_ratio))},n(r(l.fraud_high))+" / "+n(Math.round((l.fraud_ratio||0)*100))+"% ",3),e("span",null,n(r(l.sponsored)),1)],8,Re))),128))])]),_:1})):c("",!0),D.value==="fraud"?(a(),m(C,{key:2,class:"intel-panel"},{title:o(()=>[e("div",Ue,[d($($e),{size:18}),t[10]||(t[10]=g(" 刷评嫌疑榜",-1))])]),content:o(()=>[t[12]||(t[12]=e("p",{class:"panel-note"},"按高嫌疑评论数排序。쿠팡체험단(官方体验团)合法但评分有偏,已单独计数。",-1)),e("div",qe,[t[11]||(t[11]=e("div",{class:"intel-table-row head"},[e("span",null,"商品"),e("span",null,"高嫌疑"),e("span",null,"刷评占比"),e("span",null,"无文字评论"),e("span",null,"真实分")],-1)),(a(!0),u(v,null,p(f.value.fraud_suspects||[],l=>(a(),u("button",{key:l.product_id,type:"button",class:"intel-table-row",onClick:y=>w(l.product_id)},[e("span",Je,[e("strong",null,n(l.product_name),1),e("small",null,n(l.product_id),1)]),e("span",null,n(r(l.fraud_high)),1),e("span",{class:z(A(l.fraud_ratio))},n(Math.round((l.fraud_ratio||0)*100))+"%",3),e("span",null,n(r(l.no_text))+"(5星 "+n(r(l.no_text_5star||0))+")",1),e("span",null,n(_(l.real_score)),1)],8,He))),128))])]),_:1})):c("",!0),D.value==="gaps"?(a(),u("div",Ke,[d(C,{class:"intel-panel"},{title:o(()=>[e("div",We,[d($(xe),{size:18}),t[13]||(t[13]=g(" 差评意图分布",-1))])]),content:o(()=>[e("div",Ze,[(a(!0),u(v,null,p(P.value,([l,y])=>{var b;return a(),u("div",{key:l,class:"intent-bar-row"},[e("span",Qe,n(l),1),e("div",Xe,[e("div",{class:"intent-bar-fill",style:be({width:`${Math.min(100,y/(((b=P.value[0])==null?void 0:b[1])||1)*100)}%`})},null,4)]),e("span",Ye,n(r(y)),1)])}),128))]),e("div",et,[(a(!0),u(v,null,p(de.value,l=>(a(),m(L,{key:l.keyword,severity:"secondary",value:`${l.keyword} ${r(l.count)}`},null,8,["value"]))),128))])]),_:1}),(a(!0),u(v,null,p(ce.value,([l,y])=>(a(),m(C,{key:l,class:"intel-panel"},{title:o(()=>[e("div",tt,[d($(De),{size:18}),g(" "+n(l)+" · 改进空间",1)])]),content:o(()=>[e("div",lt,[(a(!0),u(v,null,p(y,b=>(a(),u("button",{key:b.product_id,type:"button",class:"intel-table-row two-col",onClick:G=>w(b.product_id)},[e("span",at,[e("strong",null,n(b.product_name),1),e("small",null,n(b.product_id),1)]),e("span",null,"紧急差评 "+n(r(b.urgent_reviews))+" · 真实分 "+n(_(b.real_score)),1)],8,nt))),128))])]),_:2},1024))),128))])):c("",!0),D.value==="deepdive"?(a(),u("div",st,[d(C,{class:"intel-panel"},{content:o(()=>[e("form",{class:"deepdive-form",onSubmit:t[1]||(t[1]=ge(l=>w(),["prevent"]))},[d(ye,{modelValue:B.value,"onUpdate:modelValue":t[0]||(t[0]=l=>B.value=l),placeholder:"输入商品 ID,如 9615063584"},null,8,["modelValue"]),d(j,{type:"submit",disabled:V.value||!B.value.trim()},{default:o(()=>[d($(Se),{size:16}),t[14]||(t[14]=g(" 深挖 ",-1))]),_:1},8,["disabled"])],32)]),_:1}),F.value?(a(),m(U,{key:0,severity:"warn",closable:!1},{default:o(()=>[g(n(F.value),1)]),_:1})):c("",!0),V.value?(a(),m(q,{key:1,height:"16rem","border-radius":"8px"})):c("",!0),s.value&&!V.value?(a(),m(C,{key:2,class:"intel-panel"},{title:o(()=>[e("div",ut,[d($(ue),{size:18}),g(" "+n(s.value.product_name),1)])]),content:o(()=>{var l,y,b,G,H,J,K,W,Z,Q,X,Y,ee,te,le,ne,ae;return[e("div",it,[e("span",null,"ID "+n(s.value.product_id),1),s.value.brand?(a(),u("span",rt,"品牌 "+n(s.value.brand),1)):c("",!0),s.value.price?(a(),u("span",ot,"价格 ₩"+n(r(s.value.price)),1)):c("",!0),s.value.sales_28d!==null?(a(),u("span",dt,"销售(28天) "+n(r(s.value.sales_28d)),1)):c("",!0),e("span",null,"抓取评论 "+n(r(s.value.crawled_reviews))+" 条",1)]),e("div",ct,[e("section",null,[t[15]||(t[15]=e("h3",null,"① 口碑健康度",-1)),e("p",null,[g(" 平台均分 "+n(_((l=s.value.health)==null?void 0:l.avg_rating))+" → 真实分 ",1),e("strong",null,n(_((y=s.value.health)==null?void 0:y.real_score)),1
1),g(" (偏差 "+n(_((b=s.value.health)==null?void 0:b.rating_bias))+") ",1)]),e("p",null,"无文字评论占比 "+n((G=s.value.health)==null?void 0:G.no_text_ratio)+"% · 已分析 "+n((H=s.value.health)==null?void 0:H.llm_analyzed)+" 条",1)]),e("section",null,[e("h3",null,"② 差评解剖("+n(((J=s.value.negative)==null?void 0:J.negative_count)||0)+" 条)",1),(a(!0),u(v,null,p((((K=s.value.negative)==null?void 0:K.top_issues)||[]).slice(0,5),h=>(a(),u("p",{key:h.issue}," · "+n(h.issue)+"("+n(h.count)+") ",1))),128)),(a(!0),u(v,null,p((((W=s.value.negative)==null?void 0:W.urgent_details)||[]).slice(0,3),h=>(a(),u("p",{key:h.content,class:"urgent-item"}," ⚠️ "+n(h.summary||h.sub_intent),1))),128))]),e("section",null,[t[16]||(t[16]=e("h3",null,"③ 卖点验证",-1)),e("div",vt,[(a(!0),u(v,null,p(((Z=s.value.selling_points)==null?void 0:Z.top_keywords)||[],h=>(a(),m(L,{key:h.keyword,severity:"success",value:`${h.keyword} ${h.count}`},null,8,["value"]))),128))])]),e("section",null,[t[17]||(t[17]=e("h3",null,"⑤ 评论可信度",-1)),e("p",null," 无文字 "+n((Q=s.value.credibility)==null?void 0:Q.no_text)+" · 模板化 "+n((X=s.value.credibility)==null?void 0:X.template)+" · 赞助 "+n((Y=s.value.credibility)==null?void 0:Y.sponsored)+" · 重复 "+n((ee=s.value.credibility)==null?void 0:ee.duplicate),1),e("p",null,"刷评嫌疑 高 "+n((te=s.value.credibility)==null?void 0:te.fraud_high)+" / 中 "+n((le=s.value.credibility)==null?void 0:le.fraud_medium)+" ("+n(Math.round((((ne=s.value.credibility)==null?void 0:ne.fraud_ratio)||0)*100))+"%)",1)]),(ae=s.value.trend)!=null&&ae.sales_trend?(a(),u("section",pt,[t[18]||(t[18]=e("h3",null,"⑥ 销量趋势",-1)),e("p",null," 近7天 "+n(r(s.value.trend.sales_trend.recent_7d))+" · 前7天 "+n(r(s.value.trend.sales_trend.prev_7d))+" · 变化 "+n(s.value.trend.sales_trend.delta_pct>0?"+":"")+n(s.value.trend.sales_trend.delta_pct)+"% ",1)])):c("",!0)])]}),_:1})):c("",!0)])):c("",!0)],64)):c("",!0),!T.value&&!N.value&&!I.value?(a(),m(C,{key:3,class:"empty-panel"},{content:o(()=>[d($(ue),{size:28}),t[19]||(t[19]=e("strong",null,"口碑情报数据尚未生成",-1)),t[20]||(t[20]=e("span",null,"请运行 ./refresh_data.sh review-intel 生成数据集。",-1))]),_:1})):c("",!0)])}}},ht=fe(_t,[["__scopeId","data-v-2f311af3"]]);export{ht 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.