Files
roa2web-service-auto/deploy-package-20260223-151231/frontend/assets/OCRMetricsView.Bjt09CXb.js
Claude Agent 8bc567a9c5 fix telegram
2026-02-23 15:12:33 +00:00

3 lines
16 KiB
JavaScript

import{I as J,s as B,G as se,H as _}from"./vendor-primevue.BN-meDW0.js";import{_ as me,u as fe,f as ge,d as te}from"./index.B8XI8FQW.js";import{C as K,a as be,L as ye,B as he,b as xe,p as ke,c as Ce,d as we}from"./vendor-charts.DHYGKspN.js";import{u as Me}from"./ocrSettingsStore.B3n_bOhs.js";import{e as Re,a as Te}from"./exportUtils.BtGzMnqV.js";import{j as g,a as F,w as Se,o as ze,W as Ee,c as o,h as D,i as m,O as n,P as Fe,e as t,q as r,p as d,F as ae,B as ie,v as i,t as Oe,u as k,n as Ve,l as $e,d as l,y as w}from"./vendor-core.B6UiYhU_.js";import{M as Be}from"./MobileTopBar.BnL78WPy.js";import{M as De}from"./MobileBottomNav.Cp8OR33w.js";import"./vendor-utils.CO3CyGpV.js";import"./vendor-export.BWjBvx7Z.js";const Ae={key:1,class:"page-header"},Ie={key:2,class:"loading-container"},Pe={key:3,class:"empty-state"},Le={key:4,class:"metrics-content"},Ue={class:"section-card"},Ne={class:"section-header"},qe={class:"section-actions"},We={class:"engine-cell"},He={class:"success-value"},Je={key:1,class:"mobile-card-list"},Ke={class:"card-header"},Ge={class:"card-stats-grid"},Ze={class:"stat-item"},Qe={class:"stat-value"},Xe={class:"stat-item"},Ye={class:"stat-value success"},je={class:"stat-item"},es={class:"stat-value"},ss={class:"stat-item"},ts={class:"stat-value"},as={key:0,class:"charts-section"},is={class:"chart-card"},ls={class:"chart-container"},ns={class:"chart-card"},os={class:"chart-container"},rs={key:1,class:"stats-overview"},cs={class:"stats-grid"},ds={class:"stat-box"},us={class:"stat-info"},ps={class:"stat-number"},vs={class:"stat-box"},_s={class:"stat-info"},ms={class:"stat-number"},fs={class:"stat-box"},gs={class:"stat-info"},bs={class:"stat-number"},ys={class:"stat-box"},hs={class:"stat-info"},xs={class:"stat-number"},ks={class:"section-card"},Cs={class:"section-header"},ws={key:0,class:"history-filters-toolbar"},Ms={class:"filters-row"},Rs={class:"filter-item"},Ts={class:"filter-item"},Ss={class:"filter-actions"},zs={key:0,class:"filter-info"},Es=["title"],Fs={key:0},Os={key:1,class:"error-text"},Vs={key:0},$s={key:1,class:"error-text"},Bs={key:2,class:"mobile-card-list"},Ds={class:"card-header"},As={key:0,class:"card-row filename-row"},Is={class:"filename-text"},Ps={class:"card-row"},Ls={class:"card-meta"},Us={class:"card-value"},Ns={key:1,class:"card-row"},qs={class:"card-meta"},Ws={class:"card-value"},Hs={key:0,class:"mobile-empty"},Js={__name:"OCRMetricsView",setup(Ks){K.register(be,ye,he,xe,ke,Ce,we);const O=Me(),y=fe(),le=Fe(),ne=g(()=>[{icon:"pi pi-refresh",label:"Actualizează",tooltip:"Actualizează metricile"}]),oe=a=>{a.icon==="pi pi-refresh"&&U()},V=F(30),re=[{label:"Ultimele 7 zile",value:7},{label:"Ultimele 30 zile",value:30},{label:"Ultimele 90 zile",value:90}],u=F(window.innerWidth<768),A=F(!1),b=F({engine:null,status:null}),N=F(null),q=F(null);let M=null,R=null;const G=g(()=>O.metricsLoading),f=g(()=>O.metrics.summary||[]),$=g(()=>O.metrics.stats),I=g(()=>O.metrics.history||[]),Z=g(()=>f.value.length>0||I.value.length>0),ce=g(()=>{const a=new Set(I.value.map(e=>e.engine_used));return[{label:"Toate motoarele",value:null},...Array.from(a).map(e=>({label:h(e),value:e}))]}),de=g(()=>[{label:"Toate",value:null},{label:"Succes",value:!0},{label:"Eroare",value:!1}]),C=g(()=>{let a=[...I.value];return b.value.engine&&(a=a.filter(e=>e.engine_used===b.value.engine)),b.value.status!==null&&(a=a.filter(e=>e.success===b.value.status)),a}),W=g(()=>b.value.engine!==null||b.value.status!==null),Q=g(()=>{if(!f.value.length)return null;const a=f.value.filter(e=>e.successful_jobs>0);return a.length?a.reduce((e,c)=>(c.avg_processing_time_ms||1/0)<(e.avg_processing_time_ms||1/0)?c:e).engine:null}),X=g(()=>{if(!f.value.length)return null;const a=f.value.filter(e=>e.successful_jobs>0);return a.length?a.reduce((e,c)=>(c.avg_confidence||0)>(e.avg_confidence||0)?c:e).engine:null}),T=a=>{const e=S(a);return e===Q.value&&e===X.value?{text:"Cel mai bun",class:"best"}:e===Q.value?{text:"Cel mai rapid",class:"fastest"}:e===X.value?{text:"Cea mai buna calitate",class:"quality"}:null},H={auto:"Auto",doctr:"docTR",paddleocr:"PaddleOCR",tesseract:"Tesseract",hybrid:"Hybrid","hybrid-quality":"Hybrid Calitate"},S=a=>a?H[a]?a:Object.keys(H).find(c=>a.startsWith(c))||a:"auto",h=a=>{const e=S(a);return H[e]||a},Y=a=>a==null?"-":`${(a*100).toFixed(1)}%`,z=a=>a==null?"-":a<1e3?`${Math.round(a)}ms`:`${(a/1e3).toFixed(2)}s`,E=a=>a==null?"-":`${(a*100).toFixed(0)}%`,P=a=>a?new Date(a).toLocaleDateString("ro-RO",{day:"2-digit",month:"2-digit",year:"numeric",hour:"2-digit",minute:"2-digit"}):"-",L={doctr:"#667eea",paddleocr:"#22c55e",tesseract:"#f59e0b",auto:"#6b7280",hybrid:"#06b6d4","hybrid-quality":"#8b5cf6"},j=async()=>{if(u.value||(await Ve(),M&&(M.destroy(),M=null),R&&(R.destroy(),R=null),!f.value.length))return;const a=f.value.map(v=>h(v.engine)),e=f.value.map(v=>(v.avg_processing_time_ms||0)/1e3),c=f.value.map(v=>(v.success_rate||0)*100),s=v=>{if(L[v])return L[v];const x=Object.keys(L).find(_e=>v.startsWith(_e));return x?L[x]:"#6b7280"},p=f.value.map(v=>s(v.engine));if(N.value){const v=N.value.getContext("2d");M=new K(v,{type:"bar",data:{labels:a,datasets:[{label:"Timp mediu (secunde)",data:e,backgroundColor:p,borderRadius:6,barThickness:50}]},options:{responsive:!0,maintainAspectRatio:!1,plugins:{legend:{display:!1},tooltip:{callbacks:{label:x=>`${x.parsed.y.toFixed(2)}s`}}},scales:{x:{grid:{display:!1},ticks:{color:"#6b7280"}},y:{beginAtZero:!0,grid:{color:"rgba(0,0,0,0.05)"},ticks:{color:"#6b7280",callback:x=>`${x}s`}}}}})}if(q.value){const v=q.value.getContext("2d");R=new K(v,{type:"bar",data:{labels:a,datasets:[{label:"Rata succes (%)",data:c,backgroundColor:p,borderRadius:6,barThickness:50}]},options:{responsive:!0,maintainAspectRatio:!1,plugins:{legend:{display:!1},tooltip:{callbacks:{label:x=>`${x.parsed.y.toFixed(1)}%`}}},scales:{x:{grid:{display:!1},ticks:{color:"#6b7280"}},y:{beginAtZero:!0,max:100,grid:{color:"rgba(0,0,0,0.05)"},ticks:{color:"#6b7280",callback:x=>`${x}%`}}}}})}},U=async()=>{await O.loadAllMetrics(V.value),await j()},ue=()=>{b.value={engine:null,status:null}},ee=()=>{u.value=window.innerWidth<768,u.value||(A.value=!1,j())},pe=()=>{var c;const a=C.value.map(s=>({Data:P(s.created_at),Fisier:s.original_filename||"-","Motor Solicitat":h(s.engine_requested),"Motor Utilizat":h(s.engine_used),"Timp (ms)":s.processing_time_ms,Status:s.success?"Succes":"Eroare",Incredere:s.success?E(s.overall_confidence):"-","Campuri Extrase":s.success?s.fields_extracted||0:"-"})),e=Re(a,"metrici_ocr","Istoric OCR");(e==null?void 0:e.success)!==!1&&((c=y==null?void 0:y.add)==null||c.call(y,{severity:"success",summary:"Export reusit",detail:`${a.length} inregistrari exportate`,life:3e3}))},ve=()=>{var s;const a=[{field:"data",header:"Data",type:"text"},{field:"fisier",header:"Fisier",type:"text"},{field:"motor_utilizat",header:"Motor",type:"text"},{field:"timp",header:"Timp",type:"text"},{field:"status",header:"Status",type:"text"},{field:"incredere",header:"Incredere",type:"text"},{field:"campuri",header:"Campuri",type:"number"}],e=C.value.map(p=>({data:P(p.created_at),fisier:p.original_filename||"-",motor_utilizat:h(p.engine_used),timp:z(p.processing_time_ms),status:p.success?"Succes":"Eroare",incredere:p.success?E(p.overall_confidence):"-",campuri:p.success&&p.fields_extracted||0})),c=Te(e,a,"metrici-ocr",{title:"Metrici OCR",period:`Ultimele ${V.value} zile`});(c==null?void 0:c.success)!==!1&&((s=y==null?void 0:y.add)==null||s.call(y,{severity:"success",summary:"Export reusit",detail:`${e.length} inregistrari exportate`,life:3e3}))};return Se(V,async()=>{await U()}),ze(async()=>{window.addEventListener("resize",ee),await U()}),Ee(()=>{window.removeEventListener("resize",ee),M&&(M.destroy(),M=null),R&&(R.destroy(),R=null)}),(a,e)=>{const c=$e("tooltip");return l(),o("div",{class:k(["ocr-metrics-view",{"mobile-layout":u.value}])},[u.value?(l(),D(Be,{key:0,title:"Metrici OCR","show-back":!0,actions:ne.value,onBackClick:e[0]||(e[0]=s=>n(le).push("/settings")),onActionClick:oe},null,8,["actions"])):m("",!0),u.value?m("",!0):(l(),o("div",Ae,[...e[5]||(e[5]=[t("h1",null,"Metrici OCR",-1)])])),G.value&&!Z.value?(l(),o("div",Ie,[r(n(ge),{style:{width:"50px",height:"50px"},strokeWidth:"4"}),e[6]||(e[6]=t("p",null,"Se incarca metricile...",-1))])):Z.value?(l(),o("div",Le,[t("div",Ue,[t("div",Ne,[e[8]||(e[8]=t("h3",{class:"section-title"},"Performanta per Motor OCR",-1)),t("div",qe,[r(n(J),{modelValue:V.value,"onUpdate:modelValue":e[1]||(e[1]=s=>V.value=s),options:re,optionLabel:"label",optionValue:"value",placeholder:"Perioada",class:"days-selector dropdown-borderless"},null,8,["modelValue"]),r(n(B),{icon:"pi pi-refresh",label:u.value?"":"Actualizeaza",onClick:U,loading:G.value,severity:"secondary",size:"small"},null,8,["label","loading"])])]),u.value?(l(),o("div",Je,[(l(!0),o(ae,null,ie(f.value,s=>(l(),o("div",{key:s.engine,class:k(["mobile-data-card engine-mobile-card",{highlighted:T(s.engine)}])},[t("div",Ke,[t("span",{class:k(["engine-badge",S(s.engine)])},i(h(s.engine)),3),T(s.engine)?(l(),o("span",{key:0,class:k(["dynamic-badge",T(s.engine).class])},i(T(s.engine).text),3)):m("",!0)]),t("div",Ge,[t("div",Ze,[e[9]||(e[9]=t("span",{class:"stat-label"},"Joburi",-1)),t("span",Qe,i(s.total_jobs),1)]),t("div",Xe,[e[10]||(e[10]=t("span",{class:"stat-label"},"Succes",-1)),t("span",Ye,i(Y(s.success_rate)),1)]),t("div",je,[e[11]||(e[11]=t("span",{class:"stat-label"},"Timp",-1)),t("span",es,i(z(s.avg_processing_time_ms)),1)]),t("div",ss,[e[12]||(e[12]=t("span",{class:"stat-label"},"Incredere",-1)),t("span",ts,i(E(s.avg_confidence)),1)])])],2))),128))])):(l(),D(n(se),{key:0,value:f.value,stripedRows:"",responsiveLayout:"scroll",class:"engine-summary-table",sortField:"total_jobs",sortOrder:-1},{default:d(()=>[r(n(_),{field:"engine",header:"Motor OCR",sortable:!0},{body:d(({data:s})=>[t("div",We,[t("span",{class:k(["engine-badge",S(s.engine)])},i(h(s.engine)),3),T(s.engine)?(l(),o("span",{key:0,class:k(["dynamic-badge",T(s.engine).class])},i(T(s.engine).text),3)):m("",!0)])]),_:1}),r(n(_),{field:"total_jobs",header:"Total Joburi",sortable:!0,style:{"text-align":"right"}},{body:d(({data:s})=>[w(i(s.total_jobs),1)]),_:1}),r(n(_),{field:"success_rate",header:"Rata Succes",sortable:!0,style:{"text-align":"right"}},{body:d(({data:s})=>[t("span",He,i(Y(s.success_rate)),1)]),_:1}),r(n(_),{field:"avg_processing_time_ms",header:"Timp Mediu",sortable:!0,style:{"text-align":"right"}},{body:d(({data:s})=>[w(i(z(s.avg_processing_time_ms)),1)]),_:1}),r(n(_),{field:"avg_confidence",header:"Incredere Medie",sortable:!0,style:{"text-align":"right"}},{body:d(({data:s})=>[w(i(E(s.avg_confidence)),1)]),_:1}),r(n(_),{field:"avg_fields_extracted",header:"Campuri Medii",sortable:!0,style:{"text-align":"right"}},{body:d(({data:s})=>{var p;return[w(i(((p=s.avg_fields_extracted)==null?void 0:p.toFixed(1))||"-"),1)]}),_:1})]),_:1},8,["value"]))]),u.value?m("",!0):(l(),o("div",as,[t("div",is,[e[13]||(e[13]=t("h3",null,"Timp Procesare per Motor",-1)),t("div",ls,[t("canvas",{ref_key:"timeChartCanvas",ref:N},null,512)])]),t("div",ns,[e[14]||(e[14]=t("h3",null,"Rata Succes per Motor",-1)),t("div",os,[t("canvas",{ref_key:"successChartCanvas",ref:q},null,512)])])])),$.value?(l(),o("div",rs,[e[23]||(e[23]=t("h3",null,"Statistici Generale",-1)),t("div",cs,[t("div",ds,[e[16]||(e[16]=t("i",{class:"pi pi-file stat-icon stat-icon--primary"},null,-1)),t("div",us,[t("span",ps,i($.value.total_jobs||0),1),e[15]||(e[15]=t("span",{class:"stat-desc"},"Total joburi",-1))])]),t("div",vs,[e[18]||(e[18]=t("i",{class:"pi pi-check-circle stat-icon stat-icon--success"},null,-1)),t("div",_s,[t("span",ms,i($.value.successful_jobs||0),1),e[17]||(e[17]=t("span",{class:"stat-desc"},"Procesate cu succes",-1))])]),t("div",fs,[e[20]||(e[20]=t("i",{class:"pi pi-times-circle stat-icon stat-icon--error"},null,-1)),t("div",gs,[t("span",bs,i($.value.failed_jobs||0),1),e[19]||(e[19]=t("span",{class:"stat-desc"},"Esuate",-1))])]),t("div",ys,[e[22]||(e[22]=t("i",{class:"pi pi-clock stat-icon stat-icon--warning"},null,-1)),t("div",hs,[t("span",xs,i(z($.value.avg_processing_time_ms)),1),e[21]||(e[21]=t("span",{class:"stat-desc"},"Timp mediu total",-1))])])])])):m("",!0),t("div",ks,[t("div",Cs,[e[24]||(e[24]=t("h3",{class:"section-title"},"Istoric Joburi OCR",-1)),u.value?Oe((l(),D(n(B),{key:0,icon:"pi pi-filter",class:k([{"filter-active":W.value},"p-button-text"]),onClick:e[2]||(e[2]=s=>A.value=!A.value)},null,8,["class"])),[[c,"Filtre",void 0,{bottom:!0}]]):m("",!0)]),!u.value||A.value?(l(),o("div",ws,[t("div",Ms,[t("div",Rs,[e[25]||(e[25]=t("label",{class:"filter-label"},"Motor OCR",-1)),r(n(J),{modelValue:b.value.engine,"onUpdate:modelValue":e[3]||(e[3]=s=>b.value.engine=s),options:ce.value,optionLabel:"label",optionValue:"value",placeholder:"Toate motoarele",class:"filter-dropdown dropdown-borderless"},null,8,["modelValue","options"])]),t("div",Ts,[e[26]||(e[26]=t("label",{class:"filter-label"},"Status",-1)),r(n(J),{modelValue:b.value.status,"onUpdate:modelValue":e[4]||(e[4]=s=>b.value.status=s),options:de.value,optionLabel:"label",optionValue:"value",placeholder:"Toate",class:"filter-dropdown dropdown-borderless"},null,8,["modelValue","options"])]),t("div",Ss,[r(n(B),{icon:"pi pi-filter-slash",label:u.value?"":"Reseteaza",class:"p-button-outlined p-button-secondary",onClick:ue,disabled:!W.value,size:"small"},null,8,["label","disabled"]),r(n(B),{icon:"pi pi-file-excel",label:u.value?"":"Excel",class:"p-button-outlined p-button-success",onClick:pe,disabled:C.value.length===0,size:"small"},null,8,["label","disabled"]),r(n(B),{icon:"pi pi-file-pdf",label:u.value?"":"PDF",class:"p-button-outlined p-button-danger",onClick:ve,disabled:C.value.length===0,size:"small"},null,8,["label","disabled"])])]),W.value?(l(),o("div",zs,[e[27]||(e[27]=t("i",{class:"pi pi-info-circle"},null,-1)),t("span",null,i(C.value.length)+" din "+i(I.value.length)+" inregistrari",1)])):m("",!0)])):m("",!0),u.value?(l(),o("div",Bs,[(l(!0),o(ae,null,ie(C.value,s=>(l(),o("div",{key:s.job_id,class:"mobile-data-card history-mobile-card"},[t("div",Ds,[t("span",{class:k(["engine-badge",S(s.engine_used)])},i(h(s.engine_used)),3),r(n(te),{severity:s.success?"success":"danger",class:"status-tag"},{default:d(()=>[w(i(s.success?"Succes":"Eroare"),1)]),_:2},1032,["severity"])]),s.original_filename?(l(),o("div",As,[t("span",Is,i(s.original_filename),1)])):m("",!0),t("div",Ps,[t("span",Ls,i(P(s.created_at)),1),t("span",Us,i(z(s.processing_time_ms)),1)]),s.success?(l(),o("div",Ns,[t("span",qs,"Incredere: "+i(E(s.overall_confidence)),1),t("span",Ws,i(s.fields_extracted||0)+" campuri",1)])):m("",!0)]))),128)),C.value.length===0?(l(),o("div",Hs,[...e[28]||(e[28]=[t("i",{class:"pi pi-info-circle"},null,-1),t("p",null,"Nu exista inregistrari",-1)])])):m("",!0)])):(l(),D(n(se),{key:1,value:C.value,paginator:!0,rows:20,rowsPerPageOptions:[10,20,50],responsiveLayout:"scroll",stripedRows:"",class:"history-table",sortField:"created_at",sortOrder:-1},{default:d(()=>[r(n(_),{field:"created_at",header:"Data",sortable:!0},{body:d(({data:s})=>[w(i(P(s.created_at)),1)]),_:1}),r(n(_),{field:"original_filename",header:"Fisier",sortable:!0},{body:d(({data:s})=>[t("span",{class:"filename-text",title:s.original_filename},i(s.original_filename||"-"),9,Es)]),_:1}),r(n(_),{field:"engine_requested",header:"Motor Solicitat",sortable:!0},{body:d(({data:s})=>[t("span",{class:k(["engine-badge",S(s.engine_requested)])},i(h(s.engine_requested)),3)]),_:1}),r(n(_),{field:"engine_used",header:"Motor Utilizat",sortable:!0},{body:d(({data:s})=>[t("span",{class:k(["engine-badge",S(s.engine_used)])},i(h(s.engine_used)),3)]),_:1}),r(n(_),{field:"processing_time_ms",header:"Timp",sortable:!0,style:{"text-align":"right"}},{body:d(({data:s})=>[w(i(z(s.processing_time_ms)),1)]),_:1}),r(n(_),{field:"success",header:"Status",sortable:!0},{body:d(({data:s})=>[r(n(te),{severity:s.success?"success":"danger"},{default:d(()=>[w(i(s.success?"Succes":"Eroare"),1)]),_:2},1032,["severity"])]),_:1}),r(n(_),{field:"overall_confidence",header:"Incredere",sortable:!0,style:{"text-align":"right"}},{body:d(({data:s})=>[s.success?(l(),o("span",Fs,i(E(s.overall_confidence)),1)):(l(),o("span",Os,"-"))]),_:1}),r(n(_),{field:"fields_extracted",header:"Campuri",sortable:!0,style:{"text-align":"right"}},{body:d(({data:s})=>[s.success?(l(),o("span",Vs,i(s.fields_extracted||0),1)):(l(),o("span",$s,"-"))]),_:1})]),_:1},8,["value"]))])])):(l(),o("div",Pe,[...e[7]||(e[7]=[t("i",{class:"pi pi-chart-bar empty-state-icon"},null,-1),t("h3",null,"Nu exista date",-1),t("p",null,"Procesati imagini cu OCR pentru a vedea statisticile.",-1)])])),u.value?(l(),D(De,{key:5})):m("",!0)],2)}}},it=me(Js,[["__scopeId","data-v-3c951048"]]);export{it as default};
//# sourceMappingURL=OCRMetricsView.Bjt09CXb.js.map