Files
kefu/deploy/knowledge-v2-20260916/payload/admin-web/apps/web-antd/dist/js/call-stats-BfEi90FU.js
T
2026-09-21 10:34:06 +08:00

1 line
17 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import{D as e,E as t,Ht as n,On as r,_ as i,b as a,bt as o,g as s,it as c,k as l,mt as u,o as d,qt as f,tr as p,tt as m,v as h,vn as g,xn as _,y as v}from"./runtime-core.esm-bundler-DkysjgTd.js";import{t as y}from"./runtime-dom.esm-bundler-CirRHyjC.js";import{t as b}from"./objectSpread2-BmonrgTA.js";import{n as x}from"./objectWithoutProperties-BjoYlK0I.js";import{r as S}from"./en_US-Cv9hrLhb.js";import{$ as C,G as w,Tt as T,U as E,W as D,X as O,Y as k,a as A,g as j,l as M,m as N,q as P,t as F,u as I,vt as L}from"./useConfigInject-z_xeO0pP.js";import{t as R}from"./initDefaultProps-D8Mki4gM.js";import{t as z}from"./table--97p0aBW.js";import{M as B,c as ee,l as te}from"./console-BEstjdZV.js";import{n as V,r as H}from"./collapseMotion-BfalGvoQ.js";import{t as ne}from"./alert-CkUknOsQ.js";import{n as U,r as W,t as G}from"./row-B32lsdNE.js";import{t as K}from"./tag-BFecLZmQ.js";import{t as re}from"./input-DgEff0DC.js";import{t as ie}from"./modal-Ju-U4s3Q.js";import{t as q}from"./progress-Br8rQILc.js";import{t as ae}from"./archive-account-selector-Bd0_0sw5.js";function J(e,t){return{[`${e}, ${e}:hover, ${e}:focus`]:{color:t.colorTextDisabled,cursor:`not-allowed`}}}function Y(e){return{backgroundColor:e.bgColorSelected,boxShadow:e.boxShadow}}var oe=S({overflow:`hidden`},j),se=e=>{let{componentCls:t}=e;return{[t]:S(S(S(S(S({},N(e)),{display:`inline-block`,padding:e.segmentedContainerPadding,color:e.labelColor,backgroundColor:e.bgColor,borderRadius:e.borderRadius,transition:`all ${e.motionDurationMid} ${e.motionEaseInOut}`,[`${t}-group`]:{position:`relative`,display:`flex`,alignItems:`stretch`,justifyItems:`flex-start`,width:`100%`},[`&${t}-rtl`]:{direction:`rtl`},[`&${t}-block`]:{display:`flex`},[`&${t}-block ${t}-item`]:{flex:1,minWidth:0},[`${t}-item`]:{position:`relative`,textAlign:`center`,cursor:`pointer`,transition:`color ${e.motionDurationMid} ${e.motionEaseInOut}`,borderRadius:e.borderRadiusSM,"&-selected":S(S({},Y(e)),{color:e.labelColorHover}),"&::after":{content:`""`,position:`absolute`,width:`100%`,height:`100%`,top:0,insetInlineStart:0,borderRadius:`inherit`,transition:`background-color ${e.motionDurationMid}`,pointerEvents:`none`},[`&:hover:not(${t}-item-selected):not(${t}-item-disabled)`]:{color:e.labelColorHover,"&::after":{backgroundColor:e.bgColorHover}},"&-label":S({minHeight:e.controlHeight-e.segmentedContainerPadding*2,lineHeight:`${e.controlHeight-e.segmentedContainerPadding*2}px`,padding:`0 ${e.segmentedPaddingHorizontal}px`},oe),"&-icon + *":{marginInlineStart:e.marginSM/2},"&-input":{position:`absolute`,insetBlockStart:0,insetInlineStart:0,width:0,height:0,opacity:0,pointerEvents:`none`}},[`${t}-thumb`]:S(S({},Y(e)),{position:`absolute`,insetBlockStart:0,insetInlineStart:0,width:0,height:`100%`,padding:`${e.paddingXXS}px 0`,borderRadius:e.borderRadiusSM,[`& ~ ${t}-item:not(${t}-item-selected):not(${t}-item-disabled)::after`]:{backgroundColor:`transparent`}}),[`&${t}-lg`]:{borderRadius:e.borderRadiusLG,[`${t}-item-label`]:{minHeight:e.controlHeightLG-e.segmentedContainerPadding*2,lineHeight:`${e.controlHeightLG-e.segmentedContainerPadding*2}px`,padding:`0 ${e.segmentedPaddingHorizontal}px`,fontSize:e.fontSizeLG},[`${t}-item, ${t}-thumb`]:{borderRadius:e.borderRadius}},[`&${t}-sm`]:{borderRadius:e.borderRadiusSM,[`${t}-item-label`]:{minHeight:e.controlHeightSM-e.segmentedContainerPadding*2,lineHeight:`${e.controlHeightSM-e.segmentedContainerPadding*2}px`,padding:`0 ${e.segmentedPaddingHorizontalSM}px`},[`${t}-item, ${t}-thumb`]:{borderRadius:e.borderRadiusXS}}}),J(`&-disabled ${t}-item`,e)),J(`${t}-item-disabled`,e)),{[`${t}-thumb-motion-appear-active`]:{transition:`transform ${e.motionDurationSlow} ${e.motionEaseInOut}, width ${e.motionDurationSlow} ${e.motionEaseInOut}`,willChange:`transform, width`}})}},ce=I(`Segmented`,e=>{let{lineWidthBold:t,lineWidth:n,colorTextLabel:r,colorText:i,colorFillSecondary:a,colorBgLayout:o,colorBgElevated:s}=e;return[se(M(e,{segmentedPaddingHorizontal:e.controlPaddingHorizontal-n,segmentedPaddingHorizontalSM:e.controlPaddingHorizontalSM-n,segmentedContainerPadding:t,labelColor:r,labelColorHover:i,bgColor:o,bgColorHover:a,bgColorSelected:s}))]}),X=e=>e?{left:e.offsetLeft,right:e.parentElement.clientWidth-e.clientWidth-e.offsetLeft,width:e.clientWidth}:null,Z=e=>e===void 0?void 0:`${e}px`,le=l({props:{value:E(),getValueIndex:E(),prefixCls:E(),motionName:E(),onMotionStart:E(),onMotionEnd:E(),direction:E(),containerRef:E()},emits:[`motionStart`,`motionEnd`],setup(t,r){let{emit:i}=r,a=g(),o=e=>{var n;let r=t.getValueIndex(e),i=(n=t.containerRef.value)==null?void 0:n.querySelectorAll(`.${t.prefixCls}-item`)[r];return(i==null?void 0:i.offsetParent)&&i},l=g(null),u=g(null);n(()=>t.value,(e,t)=>{let n=o(t),r=o(e),a=X(n),s=X(r);l.value=a,u.value=s,i(n&&r?`motionStart`:`motionEnd`)},{flush:`post`});let d=s(()=>{var e,n;return t.direction===`rtl`?Z(-((e=l.value)==null?void 0:e.right)):Z((n=l.value)==null?void 0:n.left)}),f=s(()=>{var e,n;return t.direction===`rtl`?Z(-((e=u.value)==null?void 0:e.right)):Z((n=u.value)==null?void 0:n.left)}),p,h=e=>{clearTimeout(p),m(()=>{e&&(e.style.transform=`translateX(var(--thumb-start-left))`,e.style.width=`var(--thumb-start-width)`)})},_=e=>{p=setTimeout(()=>{e&&(V(e,`${t.motionName}-appear-active`),e.style.transform=`translateX(var(--thumb-active-left))`,e.style.width=`var(--thumb-active-width)`)})},v=e=>{l.value=null,u.value=null,e&&(e.style.transform=null,e.style.width=null,H(e,`${t.motionName}-appear-active`)),i(`motionEnd`)},b=s(()=>{var e,t;return{"--thumb-start-left":d.value,"--thumb-start-width":Z((e=l.value)==null?void 0:e.width),"--thumb-active-left":f.value,"--thumb-active-width":Z((t=u.value)==null?void 0:t.width)}});return c(()=>{clearTimeout(p)}),()=>{let n={ref:a,style:b.value,class:[`${t.prefixCls}-thumb`]};return e(y,{appear:!0,onBeforeEnter:h,onEnter:_,onAfterEnter:v},{default:()=>[!l.value||!u.value?null:e(`div`,n,null)]})}}});function ue(e){return e.map(e=>typeof e==`object`&&e?e:{label:e==null?void 0:e.toString(),title:e==null?void 0:e.toString(),value:e})}var de=()=>({prefixCls:String,options:D(),block:w(),disabled:w(),size:O(),value:S(S({},k([String,Number])),{required:!0}),motionName:String,onChange:P(),"onUpdate:value":P()}),Q=(t,n)=>{let{slots:r,emit:i}=n,{value:a,disabled:o,payload:s,title:c,prefixCls:l,label:u=r.label,checked:d,className:f}=t,p=e=>{o||i(`change`,e,a)};return e(`label`,{class:L({[`${l}-item-disabled`]:o},f)},[e(`input`,{class:`${l}-item-input`,type:`radio`,disabled:o,checked:d,onChange:p},null),e(`div`,{class:`${l}-item-label`,title:typeof c==`string`?c:``},[typeof u==`function`?u({value:a,disabled:o,payload:s,title:c}):u==null?a:u])])};Q.inheritAttrs=!1;var fe=l({name:`ASegmented`,inheritAttrs:!1,props:R(de(),{options:[],motionName:`thumb-motion`}),slots:Object,setup(t,n){let{emit:r,slots:i,attrs:a}=n,{prefixCls:o,direction:c,size:l}=F(`segmented`,t),[u,d]=ce(o),f=_(),p=_(!1),m=s(()=>ue(t.options)),h=(e,n)=>{t.disabled||(r(`update:value`,n),r(`change`,n))};return()=>{let n=o.value;return u(e(`div`,T(T({},a),{},{class:L(n,{[d.value]:!0,[`${n}-block`]:t.block,[`${n}-disabled`]:t.disabled,[`${n}-lg`]:l.value==`large`,[`${n}-sm`]:l.value==`small`,[`${n}-rtl`]:c.value===`rtl`},a.class),ref:f}),[e(`div`,{class:`${n}-group`},[e(le,{containerRef:f,prefixCls:n,value:t.value,motionName:`${n}-${t.motionName}`,direction:c.value,getValueIndex:e=>m.value.findIndex(t=>t.value===e),onMotionStart:()=>{p.value=!0},onMotionEnd:()=>{p.value=!1}},null),m.value.map(r=>e(Q,T(T({key:r.value,prefixCls:n,checked:r.value===t.value,onChange:h},r),{},{className:L(r.className,`${n}-item`,{[`${n}-item-selected`]:r.value===t.value&&!p.value}),disabled:!!t.disabled||!!r.disabled}),i))])]))}}}),$=C(fe),pe={class:`p-5`},me={class:`mb-4 flex items-center gap-3`},he={class:`mb-1 flex justify-between text-xs`},ge={class:`w-16 text-right text-xs`},_e={class:`mt-3 text-xs text-gray-500`},ve={class:`mb-3`},ye=[`title`],be=[`title`],xe=[`title`],Se={key:1},Ce={key:1,class:`text-gray-400`},we=[`onClick`],Te={class:`mb-3`},Ee={class:`whitespace-pre-wrap rounded bg-gray-50 p-2 text-sm dark:bg-gray-800`},De={class:`mb-3`},Oe={class:`whitespace-pre-wrap rounded bg-gray-50 p-2 text-sm dark:bg-gray-800`},ke={key:0,class:`mb-3`},Ae={key:1,class:`mb-3`},je={class:`mb-1 flex items-center justify-between`},Me={class:`text-xs text-gray-400`},Ne={class:`whitespace-pre-wrap`},Pe={class:`text-xs text-gray-400`},Fe=l({__name:`call-stats`,setup(c){let l=g(7),m=g(-1),_=g(!1),y=g(null);function S(){return C.apply(this,arguments)}function C(){return C=x(function*(){_.value=!0;try{y.value=yield te(l.value,m.value)}finally{_.value=!1}}),C.apply(this,arguments)}let w=g(``),T=g(!1),E=g([]),D=g(0),O=g(1),k=g(20),j=g(null),M=g(`chat`);function N(){return P.apply(this,arguments)}function P(){return P=x(function*(){T.value=!0;try{let e=yield ee({accountId:m.value,days:l.value,limit:k.value,offset:(O.value-1)*k.value,q:w.value.trim(),purpose:M.value});E.value=e.items,D.value=e.total}finally{T.value=!1}}),P.apply(this,arguments)}function F(){O.value=1,N()}function I(e){let t=String(e||``).trim();if(!t)return`—`;let n=new Date(t.includes(`T`)?t:t.replace(` `,`T`));if(Number.isNaN(n.getTime()))return t;let r=e=>String(e).padStart(2,`0`);return`${r(n.getMonth()+1)}-${r(n.getDate())} ${r(n.getHours())}:${r(n.getMinutes())}:${r(n.getSeconds())}`}n(M,()=>{O.value=1,N()});function L(e){var t,n;O.value=(t=e.current)==null?1:t,k.value=(n=e.pageSize)==null?20:n,N()}n(l,()=>{S(),O.value=1,N()});function R(){O.value=1,S(),N()}let V=s(()=>{var e,t,n,r;let i=(e=(t=y.value)==null?void 0:t.chosen.reduce((e,t)=>e+t.count,0))==null?0:e;return((n=(r=y.value)==null?void 0:r.chosen)==null?[]:n).map(e=>b(b({},e),{},{percent:i?Math.round(e.count/i*100):0}))}),H=s(()=>{var e,t;let n=(e=(t=y.value)==null?void 0:t.risk)==null?{}:e,r=Object.values(n).reduce((e,t)=>e+t,0);return Object.entries(n).map(([e,t])=>({level:e,count:t,percent:r?Math.round(t/r*100):0}))}),J=s(()=>{var e,t;return Math.max(1,...((e=(t=y.value)==null?void 0:t.score_buckets)==null?[]:e).map(e=>e.count))}),Y={low:`green`,medium:`orange`,high:`red`,unknown:`default`};return(n,s)=>(u(),a(`div`,pe,[e(r(ne),{class:`mb-4`,type:`info`,"show-icon":``,message:`这张表是决定要不要上双模型的唯一依据`,description:`分数分布告诉你现有回复的真实水平——如果大部分本来就是高分,并发问两个模型就是纯浪费;如果低分集中在某一类消息上,针对性换个模型比全量双跑划算得多。`}),i(`div`,me,[e(ae,{modelValue:m.value,"onUpdate:modelValue":s[0]||(s[0]=e=>m.value=e),onChange:R},null,8,[`modelValue`]),e(r($),{value:l.value,"onUpdate:value":s[1]||(s[1]=e=>l.value=e),options:[{value:1,label:`今天`},{value:7,label:`近 7 天`},{value:30,label:`近 30 天`}]},null,8,[`value`])]),e(r(G),{gutter:16,class:`mb-4`},{default:f(()=>[e(r(W),{span:6},{default:f(()=>[e(r(B),{size:`small`},{default:f(()=>{var t,n;return[e(r(U),{title:`总调用`,value:(t=(n=y.value)==null?void 0:n.total)==null?0:t},null,8,[`value`])]}),_:1})]),_:1}),e(r(W),{span:6},{default:f(()=>[e(r(B),{size:`small`},{default:f(()=>{var t,n;return[e(r(U),{title:`已评审`,value:(t=(n=y.value)==null?void 0:n.judged)==null?0:t},null,8,[`value`])]}),_:1})]),_:1}),e(r(W),{span:6},{default:f(()=>[e(r(B),{size:`small`},{default:f(()=>{var t,n;return[e(r(U),{title:`平均分`,value:(t=(n=y.value)==null?void 0:n.avg_score)==null?0:t,precision:3},null,8,[`value`])]}),_:1})]),_:1}),e(r(W),{span:6},{default:f(()=>[e(r(B),{size:`small`},{default:f(()=>{var t,n;return[e(r(U),{title:`平均耗时`,value:(t=(n=y.value)==null?void 0:n.avg_ms)==null?0:t,suffix:`ms`},null,8,[`value`])]}),_:1})]),_:1})]),_:1}),e(r(G),{gutter:16},{default:f(()=>[e(r(W),{span:12},{default:f(()=>[e(r(B),{title:`裁判分数分布`,size:`small`,loading:_.value,class:`mb-4`},{default:f(()=>{var t,n,s;return[(t=y.value)!=null&&(t=t.score_buckets)!=null&&t.length?v(``,!0):(u(),h(r(A),{key:0,description:`还没有评审数据`})),(u(!0),a(d,null,o((n=(s=y.value)==null?void 0:s.score_buckets)==null?[]:n,t=>(u(),a(`div`,{key:t.range,class:`mb-2`},[i(`div`,he,[i(`span`,null,p(t.range),1),i(`span`,null,p(t.count)+` 条`,1)]),e(r(q),{percent:Math.round(t.count/J.value*100),"show-info":!1,size:`small`},null,8,[`percent`])]))),128))]}),_:1},8,[`loading`])]),_:1}),e(r(W),{span:12},{default:f(()=>[e(r(B),{title:`风险等级`,size:`small`,loading:_.value,class:`mb-4`},{default:f(()=>[H.value.length?v(``,!0):(u(),h(r(A),{key:0,description:`还没有评审数据`})),(u(!0),a(d,null,o(H.value,n=>(u(),a(`div`,{key:n.level,class:`mb-2 flex items-center gap-3`},[e(r(K),{color:Y[n.level],class:`w-16 text-center`},{default:f(()=>[t(p(n.level),1)]),_:2},1032,[`color`]),e(r(q),{percent:n.percent,size:`small`,class:`flex-1`},null,8,[`percent`]),i(`span`,ge,p(n.count)+` 条`,1)]))),128))]),_:1},8,[`loading`])]),_:1})]),_:1}),e(r(B),{title:`各模型被选中的比例`,size:`small`,loading:_.value},{default:f(()=>{var t,n,a;return[e(r(z),{"data-source":V.value,"row-key":`provider`,size:`small`,pagination:!1,columns:[{title:`模型`,dataIndex:`provider`,key:`provider`},{title:`被选中`,dataIndex:`count`,key:`count`,width:100},{title:`占比`,key:`percent`,width:240}]},{bodyCell:f(({column:e,record:t})=>[e.key===`percent`?(u(),h(r(q),{key:0,percent:t.percent,size:`small`},null,8,[`percent`])):v(``,!0)]),_:1},8,[`data-source`]),i(`p`,_e,` 统计区间自 `+p(((t=y.value)==null?void 0:t.since)||`—`)+` 起。最慢一次 `+p((n=(a=y.value)==null?void 0:a.max_ms)==null?0:n)+`ms。 `,1)]}),_:1},8,[`loading`]),e(r(B),{title:`调用记录`,size:`small`,class:`mt-4`},{extra:f(()=>[e(r(re).Search,{value:w.value,"onUpdate:value":s[2]||(s[2]=e=>w.value=e),placeholder:`搜客户消息或模型回复里的关键词`,style:{width:`280px`},"allow-clear":``,onSearch:F},null,8,[`value`])]),default:f(()=>[s[7]||(s[7]=i(`p`,{class:`mb-3 text-xs text-gray-500`},` 按时间倒序,一条一次调用:客户说了什么、模型候选都答了什么、最终选中的是哪个、有没有被审核规则拦下——出问题时按这张表往回查。 `,-1)),i(`div`,ve,[e(r($),{value:M.value,"onUpdate:value":s[3]||(s[3]=e=>M.value=e),options:[{value:`chat`,label:`客服对话`},{value:`guard`,label:`界面识别`},{value:``,label:`全部`}]},null,8,[`value`]),s[5]||(s[5]=i(`span`,{class:`ml-3 text-xs text-gray-500`},` 「界面识别」是机器人自己看企业微信窗口用的,不是发给客户的话;它每轮轮询都要问一次模型,条数远多于真实对话,所以默认不混在一起。 `,-1))]),e(r(z),{"data-source":E.value,"row-key":`id`,size:`small`,loading:T.value,pagination:{current:O.value,pageSize:k.value,total:D.value,showTotal:e=>`共 ${e} 条`},onChange:L,columns:[{title:`时间`,key:`created_at`,width:130},{title:`客户消息`,key:`customer_text`,width:200,ellipsis:!0},{title:`模型回复`,key:`reply_text`,width:200,ellipsis:!0},{title:`选中`,dataIndex:`chosen`,key:`chosen`,width:110,ellipsis:!0},{title:`裁判分`,dataIndex:`judge_score`,key:`judge_score`,width:80},{title:`风险`,dataIndex:`judge_risk`,key:`judge_risk`,width:80},{title:`审核`,key:`review_reason`,width:90},{title:`耗时`,dataIndex:`total_ms`,key:`total_ms`,width:80},{title:``,key:`action`,width:70}]},{bodyCell:f(({column:e,record:n})=>[e.key===`created_at`?(u(),a(`span`,{key:0,title:n.created_at},p(I(n.created_at)),9,ye)):e.key===`customer_text`?(u(),a(`span`,{key:1,title:n.customer_text},p(n.customer_text||`—`),9,be)):e.key===`reply_text`?(u(),a(`span`,{key:2,title:n.reply_text},p(n.reply_text||`—`),9,xe)):e.key===`judge_risk`?(u(),a(d,{key:3},[n.judge_risk?(u(),h(r(K),{key:0,color:Y[n.judge_risk]},{default:f(()=>[t(p(n.judge_risk),1)]),_:2},1032,[`color`])):(u(),a(`span`,Se,`—`))],64)):e.key===`review_reason`?(u(),a(d,{key:4},[n.review_reason?(u(),h(r(K),{key:0,color:`orange`},{default:f(()=>[...s[6]||(s[6]=[t(`已拦`,-1)])]),_:1})):(u(),a(`span`,Ce,`—`))],64)):e.key===`total_ms`?(u(),a(d,{key:5},[t(p(n.total_ms)+`ms `,1)],64)):e.key===`action`?(u(),a(`a`,{key:6,onClick:e=>j.value=n},`详情`,8,we)):v(``,!0)]),_:1},8,[`data-source`,`loading`,`pagination`])]),_:1}),e(r(ie),{open:!!j.value,title:`调用详情`,footer:null,width:`640px`,onCancel:s[4]||(s[4]=e=>j.value=null)},{default:f(()=>{var n;return[j.value?(u(),a(d,{key:0},[i(`div`,Te,[s[8]||(s[8]=i(`div`,{class:`mb-1 text-xs text-gray-500`},`客户消息`,-1)),i(`div`,Ee,p(j.value.customer_text||`(空)`),1)]),i(`div`,De,[s[9]||(s[9]=i(`div`,{class:`mb-1 text-xs text-gray-500`},`模型回复(最终选中)`,-1)),i(`div`,Oe,p(j.value.reply_text||`(空)`),1)]),j.value.review_reason?(u(),a(`div`,ke,[e(r(ne),{type:`warning`,"show-icon":``,message:`已停发送审核:${j.value.review_reason}`},null,8,[`message`])])):v(``,!0),(n=j.value.candidates)!=null&&n.length?(u(),a(`div`,Ae,[s[10]||(s[10]=i(`div`,{class:`mb-1 text-xs text-gray-500`},`全部候选`,-1)),(u(!0),a(d,null,o(j.value.candidates,(n,o)=>{var s;return u(),a(`div`,{key:o,class:`mb-2 rounded border border-gray-200 p-2 text-sm dark:border-gray-700`},[i(`div`,je,[e(r(K),{color:n.provider===j.value.chosen?`green`:`default`},{default:f(()=>[t(p(n.provider)+p(n.provider===j.value.chosen?`(选中)`:``),1)]),_:2},1032,[`color`]),i(`span`,Me,p((s=n.latency_ms)==null?0:s)+`ms`,1)]),i(`div`,Ne,p(n.text||n.error||`(空)`),1)])}),128))])):v(``,!0),i(`p`,Pe,` 裁判 `+p(j.value.judge_winner||`—`)+`/`+p(j.value.judge_score)+`分,共 `+p(j.value.total_ms)+`ms,`+p(I(j.value.created_at)),1)],64)):v(``,!0)]}),_:1},8,[`open`])]))}});export{Fe as default};