-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathweb_module.js
More file actions
1 lines (1 loc) · 5.52 KB
/
Copy pathweb_module.js
File metadata and controls
1 lines (1 loc) · 5.52 KB
1
import{createRoot as k}from"react-dom/client";import{jsx as n,jsxs as a}from"react/jsx-runtime";var o=null;async function c(e,t){if(!o)throw new Error("主动反馈工作台面板未激活");let r=await o(e,t),i=await r.json();if(!r.ok)throw new Error(String(i.detail??i.message??`HTTP ${r.status}`));return i}function m(e){return typeof e=="number"?e.toFixed(3):"-"}function x(e){let t=String(e||"");if(!t)return"-";let r=new Date(t);return Number.isNaN(r.getTime())?t:`${r.getMonth()+1}-${String(r.getDate()).padStart(2,"0")} ${String(r.getHours()).padStart(2,"0")}:${String(r.getMinutes()).padStart(2,"0")}`}function f(e){return typeof e!="number"?"-":e<60?`${e}s`:e<3600?`${Math.round(e/60)}m`:`${(e/3600).toFixed(1)}h`}function h(e){return e==="explicit_quote"?"accent":e==="topic_follow"?"success":e==="unscored"?"warning":"muted"}function g(e){let t=String(e||"");return t==="explicit_quote"?"明确引用":t==="topic_follow"?"话题延续":t==="no_topic_follow"?"未延续话题":t==="unscored"?"待评分":t||"-"}function b(e){let t=String(e||"");return t==="gold"?"金标":t==="high"?"高":t==="medium"?"中":t==="low"?"低":t||"-"}function d(e){return String(e??"").replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function u(e){let t=String(e||"").trim();return d(t||"-")}function v(e){let t=String(e||"");return`<span class="ak-chip ak-chip--${t==="explicit_quote"?"accent":t==="topic_follow"?"success":t==="unscored"?"warning":"muted"} inline-flex items-center gap-1.5 px-2.5 py-1 font-sans text-[11px] tabular-nums">${d(g(t))}</span>`}function w(e){let t=String(e||"");return t==="gold"||t==="high"?"success":t==="medium"?"warning":"muted"}function y(e){let t=String(e||"-");return`<span class="ak-chip ak-chip--${w(t)} inline-flex items-center gap-1.5 px-2.5 py-1 font-sans text-[11px] tabular-nums">${d(b(t))}</span>`}function _(e){let t=e.item,r=e.ui.Chip;if(!t)return a("div",{className:"feedback-empty",children:[n("div",{className:"feedback-empty__title",children:"反馈详情"}),n("div",{className:"feedback-empty__text",children:"点开一条记录后,这里会显示用户回复、命中的 proactive 和助手后续回复。"})]});let i=String(t.feedback_type||"");return a("main",{className:"feedback-detail","aria-labelledby":"feedback-detail-title",children:[a("header",{className:"feedback-detail__header",children:[a("div",{children:[n("p",{children:"主动消息效果"}),n("h2",{id:"feedback-detail-title",children:"用户如何回应这次主动触达"}),n("span",{children:String(t.session_key||"未关联会话")})]}),n(r,{tone:h(i),children:g(i)})]}),a("section",{className:"feedback-summary","aria-label":"反馈判断摘要",children:[n(l,{label:"置信度",value:b(t.confidence)}),n(l,{label:"响应延迟",value:f(t.lag_seconds)}),n(l,{label:"PUA 分数",value:m(t.pua_score)})]}),a("section",{className:"feedback-timeline","aria-labelledby":"feedback-timeline-title",children:[n("h3",{id:"feedback-timeline-title",children:"对话链路"}),n(s,{index:"1",title:"主动消息",text:String(t.proactive_preview||t.quoted_preview||"")}),n(s,{index:"2",title:"用户反馈",text:String(t.user_reply_preview||t.user_preview||""),emphasis:!0}),n(s,{index:"3",title:"助手后续",text:String(t.assistant_preview||"")})]}),a("details",{className:"feedback-technical",children:[n("summary",{children:"查看匹配依据与消息标识"}),a("dl",{children:[a("div",{children:[n("dt",{children:"匹配方式"}),n("dd",{children:String(t.matched_by||"-")})]}),a("div",{children:[n("dt",{children:"用户消息 ID"}),n("dd",{children:String(t.user_message_id||"-")})]}),a("div",{children:[n("dt",{children:"主动消息 ID"}),n("dd",{children:String(t.proactive_message_id||"-")})]})]})]})]})}function l(e){return a("div",{children:[n("span",{children:e.label}),n("strong",{children:e.value})]})}function s(e){return a("div",{className:`feedback-step${e.emphasis?" is-emphasis":""}`,children:[n("span",{className:"feedback-step__index",children:e.index}),a("div",{children:[n("h4",{children:e.title}),n("p",{children:e.text||"没有可展示的内容"})]})]})}var S={id:"proactive-feedback",label:"主动反馈",viewLabel:"主动反馈",order:70,pageSize:50,rowKey:"id",countTitle(e){return`共 ${e} 条反馈`},columns:[{key:"created_at",label:"时间",width:96,fmt:"mono-time",cellClass:"mono cell-time",rawTitle:!0},{key:"feedback_type",label:"类型",width:126,renderCell:v},{key:"confidence",label:"置信度",width:84,renderCell:y},{key:"lag_seconds",label:"延迟",width:68,fmt:"lag",cellClass:"mono cell-metric",align:"right"},{key:"user_reply_preview",label:"用户回复",flex:!0,renderCell:u,cellClass:"content-preview",rawTitle:!0},{key:"proactive_preview",label:"命中内容",flex:!0,renderCell:u,cellClass:"content-preview",rawTitle:!0}],async getCount({signal:e}){try{return(await c("/api/dashboard/proactive-feedback/overview",{signal:e})).total||0}catch(t){if(e.aborted)throw t;return null}},async fetchPage({page:e,pageSize:t,signal:r}){let i=new URLSearchParams;i.set("page",String(e)),i.set("page_size",String(t));let p=await c(`/api/dashboard/proactive-feedback/events?${i.toString()}`,{signal:r});return{items:p.items||[],total:p.total||0}},async fetchDetail(e,{signal:t}){return c(`/api/dashboard/proactive-feedback/events/${e.id}`,{signal:t})},renderDetail(e,t,r){let i=k(t);return i.render(n(_,{item:e,ui:r.ui})),()=>i.unmount()},formatters:{score:e=>m(e),lag:e=>f(e),"mono-time":e=>x(e)}};function N(e){o=e.http.request;let t=e.ui.inject("workbench.panels.v2",r=>r.register(S));return()=>{t(),o=null}}export{N as activate};