Files
Document_Translator/frontend/dist/js/HistoryView-5a55cb78.js
2025-09-02 10:31:35 +08:00

3 lines
12 KiB
JavaScript

import{_ as ct}from"./_plugin-vue_export-helper-af00840d.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{r as M,A as D,af as ut,o as _t,w as pt,c as u,d as a,e as l,f as n,m as h,t as i,F as O,B as I,h as y,i as vt,R as ft,E as gt,z as mt,am as ht,ae as yt,v as wt,an as kt,ao as Dt,ag as Ct,l as d,aj as Et,s as v,a9 as Mt,ah as xt,Z as Tt,$ as bt,ap as zt,_ as Vt,n as $t,C as W,K as $,a2 as Lt,ad as Pt,a4 as Ft,aq as St,ar as Bt,V as Ot}from"./index-cb898b04.js";import{u as It}from"./jobs-6be64b92.js";const Rt={class:"history-view"},Ut={class:"page-header"},At={class:"page-actions"},Jt={class:"content-card"},Yt={class:"filters-section"},Nt={class:"filters-row"},Ht={class:"filter-group"},Wt={class:"filter-group"},Gt={class:"filter-group"},Kt={class:"filter-actions"},qt={class:"search-row"},Zt={class:"stats-section"},Qt={class:"stats-grid"},Xt={class:"stat-card"},jt={class:"stat-icon primary"},te={class:"stat-value"},ee={class:"stat-card"},ae={class:"stat-icon success"},se={class:"stat-value"},le={class:"stat-card"},oe={class:"stat-icon warning"},ne={class:"stat-value"},ie={class:"stat-card"},de={class:"stat-icon info"},re={class:"stat-value"},ce={class:"content-card"},ue={class:"card-body"},_e={key:0,class:"loading-state"},pe={key:1,class:"empty-state"},ve={key:2},fe={class:"view-toggle"},ge={key:0,class:"table-view"},me={class:"file-info"},he={class:"file-name"},ye={class:"language-tags"},we={class:"table-actions"},ke={key:1,class:"card-view"},De={class:"history-cards"},Ce=["onClick"],Ee={class:"card-header"},Me={class:"file-info"},xe={class:"file-details"},Te={class:"file-name"},be={class:"file-meta"},ze={class:"card-status"},Ve={class:"card-content"},$e={class:"languages-section"},Le={class:"language-tags"},Pe={class:"stats-section"},Fe={key:0,class:"stat-item"},Se={class:"stat-value"},Be={key:1,class:"stat-item"},Oe={class:"stat-value"},Ie={key:0,class:"card-footer"},Re={class:"time-info"},Ue={key:0},Ae={key:1},Je={key:2,class:"pagination-section"},Ye={__name:"HistoryView",setup(Ne){const G=vt(),T=It(),L=M(!1),b=M("table"),C=M([]),f=M(1),z=M(20),p=M({status:"all",fileType:"all",search:""}),K={"zh-TW":"繁中","zh-CN":"簡中",en:"英文",ja:"日文",ko:"韓文",vi:"越文"},q=D(()=>T.jobs.filter(e=>e.status==="COMPLETED"||e.status==="FAILED")),g=D(()=>{let e=q.value;if(p.value.status!=="all"&&(e=e.filter(t=>t.status===p.value.status)),p.value.fileType!=="all"&&(e=e.filter(t=>{const o=E(t.original_filename);switch(p.value.fileType){case"doc":return["docx","doc"].includes(o);case"ppt":return["pptx","ppt"].includes(o);case"xls":return["xlsx","xls"].includes(o);case"pdf":return o==="pdf";default:return!0}})),C.value&&C.value.length===2){const[t,o]=C.value;e=e.filter(r=>{const c=new Date(r.created_at).toDateString();return c>=new Date(t).toDateString()&&c<=new Date(o).toDateString()})}if(p.value.search.trim()){const t=p.value.search.toLowerCase().trim();e=e.filter(o=>o.original_filename.toLowerCase().includes(t))}return e.sort((t,o)=>new Date(o.created_at)-new Date(t.created_at))}),R=D(()=>{const e=(f.value-1)*z.value;return g.value.slice(e,e+z.value)}),Z=D(()=>Math.ceil(g.value.length/z.value)),Q=D(()=>g.value.filter(e=>e.status==="COMPLETED").length),X=D(()=>g.value.reduce((e,t)=>e+(t.total_cost||0),0)),j=D(()=>{const e=g.value.filter(_=>_.status==="COMPLETED"&&_.processing_started_at&&_.completed_at);if(e.length===0)return"無資料";const o=e.reduce((_,k)=>{const S=new Date(k.processing_started_at),B=new Date(k.completed_at);return _+(B-S)},0)/e.length,r=Math.floor(o/6e4),c=Math.floor(o%6e4/1e3);return`${r}${c}`}),U=()=>{f.value=1},tt=ut(()=>{f.value=1},300),et=()=>{f.value=1},at=e=>{f.value=e},st=()=>{p.value.status="all",p.value.fileType="all",p.value.search="",C.value=[],f.value=1},A=e=>{G.push(`/job/${e}`)},J=async e=>{try{if(e.target_languages.length===1){const t=E(e.original_filename),o=`${e.original_filename.replace(/\.[^/.]+$/,"")}_${e.target_languages[0]}_translated.${t}`;await T.downloadFile(e.job_uuid,e.target_languages[0],o)}else{const t=`${e.original_filename.replace(/\.[^/.]+$/,"")}_translated.zip`;await T.downloadAllFiles(e.job_uuid,t)}}catch(t){console.error("下載失敗:",t)}},lt=()=>{const e=[["檔案名稱","檔案大小","目標語言","狀態","成本","建立時間","完成時間"].join(","),...g.value.map(c=>[`"${c.original_filename}"`,P(c.file_size),`"${c.target_languages.join(", ")}"`,F(c.status),(c.total_cost||0).toFixed(4),x(c.created_at),c.completed_at?x(c.completed_at):""].join(","))].join(`
`),t=new Blob([e],{type:"text/csv;charset=utf-8"}),o=document.createElement("a"),r=URL.createObjectURL(t);o.setAttribute("href",r),o.setAttribute("download",`翻譯歷史記錄_${new Date().toISOString().slice(0,10)}.csv`),o.click(),ft.success("歷史記錄已匯出")},E=e=>e.split(".").pop().toLowerCase(),P=e=>{if(e===0)return"0 B";const t=1024,o=["B","KB","MB","GB"],r=Math.floor(Math.log(e)/Math.log(t));return parseFloat((e/Math.pow(t,r)).toFixed(1))+" "+o[r]},x=e=>new Date(e).toLocaleDateString("zh-TW",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}),ot=e=>{const t=new Date,o=new Date(e),r=t-o;return r<864e5?"今天":r<1728e5?"昨天":r<2592e6?`${Math.floor(r/864e5)}天前`:o.toLocaleDateString("zh-TW")},nt=(e,t)=>{const o=new Date(e),c=new Date(t)-o,_=Math.floor(c/6e4),k=Math.floor(c%6e4/1e3);return`${_}${k}`},Y=e=>K[e]||e,F=e=>({COMPLETED:"已完成",FAILED:"失敗"})[e]||e,N=e=>({COMPLETED:"success",FAILED:"danger"})[e]||"info";return _t(async()=>{L.value=!0;try{await T.fetchJobs({per_page:100})}catch(e){console.error("載入歷史記錄失敗:",e)}finally{L.value=!1}}),pt(b,()=>{f.value=1}),(e,t)=>{const o=gt,r=mt,c=ht,_=Pt,k=yt,S=wt,B=Ft,H=St,it=kt,w=Bt,V=Ot,dt=Dt,rt=Ct;return d(),u("div",Rt,[a("div",Ut,[t[8]||(t[8]=a("h1",{class:"page-title"},"歷史記錄",-1)),a("div",At,[l(r,{onClick:lt},{default:n(()=>[l(o,null,{default:n(()=>[l(h(Et))]),_:1}),t[7]||(t[7]=v(" 匯出記錄 ",-1))]),_:1})])]),a("div",Jt,[a("div",Yt,[a("div",Nt,[a("div",Ht,[t[9]||(t[9]=a("label",null,"時間範圍:",-1)),l(c,{modelValue:C.value,"onUpdate:modelValue":t[0]||(t[0]=s=>C.value=s),type:"daterange","start-placeholder":"開始日期","end-placeholder":"結束日期",format:"YYYY/MM/DD","value-format":"YYYY-MM-DD",onChange:et},null,8,["modelValue"])]),a("div",Wt,[t[10]||(t[10]=a("label",null,"狀態:",-1)),l(k,{modelValue:p.value.status,"onUpdate:modelValue":t[1]||(t[1]=s=>p.value.status=s),onChange:U},{default:n(()=>[l(_,{label:"全部",value:"all"}),l(_,{label:"已完成",value:"COMPLETED"}),l(_,{label:"失敗",value:"FAILED"})]),_:1},8,["modelValue"])]),a("div",Gt,[t[11]||(t[11]=a("label",null,"檔案類型:",-1)),l(k,{modelValue:p.value.fileType,"onUpdate:modelValue":t[2]||(t[2]=s=>p.value.fileType=s),onChange:U},{default:n(()=>[l(_,{label:"全部",value:"all"}),l(_,{label:"Word",value:"doc"}),l(_,{label:"PowerPoint",value:"ppt"}),l(_,{label:"Excel",value:"xls"}),l(_,{label:"PDF",value:"pdf"})]),_:1},8,["modelValue"])]),a("div",Kt,[l(r,{onClick:st},{default:n(()=>[l(o,null,{default:n(()=>[l(h(Mt))]),_:1}),t[12]||(t[12]=v(" 清除篩選 ",-1))]),_:1})])]),a("div",qt,[l(S,{modelValue:p.value.search,"onUpdate:modelValue":t[3]||(t[3]=s=>p.value.search=s),placeholder:"搜尋檔案名稱...",style:{width:"300px"},clearable:"",onInput:h(tt)},{prefix:n(()=>[l(o,null,{default:n(()=>[l(h(xt))]),_:1})]),_:1},8,["modelValue","onInput"])])])]),a("div",Zt,[a("div",Qt,[a("div",Xt,[a("div",jt,[l(o,null,{default:n(()=>[l(h(Tt))]),_:1})]),a("div",te,i(g.value.length),1),t[13]||(t[13]=a("div",{class:"stat-label"},"總記錄數",-1))]),a("div",ee,[a("div",ae,[l(o,null,{default:n(()=>[l(h(bt))]),_:1})]),a("div",se,i(Q.value),1),t[14]||(t[14]=a("div",{class:"stat-label"},"成功完成",-1))]),a("div",le,[a("div",oe,[l(o,null,{default:n(()=>[l(h(zt))]),_:1})]),a("div",ne,"$"+i(X.value.toFixed(4)),1),t[15]||(t[15]=a("div",{class:"stat-label"},"總成本",-1))]),a("div",ie,[a("div",de,[l(o,null,{default:n(()=>[l(h(Vt))]),_:1})]),a("div",re,i(j.value),1),t[16]||(t[16]=a("div",{class:"stat-label"},"平均處理時間",-1))])])]),a("div",ce,[a("div",ue,[L.value?(d(),u("div",_e,[l(B,{rows:5,animated:""})])):g.value.length===0?(d(),u("div",pe,[l(o,{class:"empty-icon"},{default:n(()=>[l(h($t))]),_:1}),t[17]||(t[17]=a("div",{class:"empty-title"},"無歷史記錄",-1)),t[18]||(t[18]=a("div",{class:"empty-description"}," 在所選時間範圍內沒有找到符合條件的記錄 ",-1))])):(d(),u("div",ve,[a("div",fe,[l(it,{modelValue:b.value,"onUpdate:modelValue":t[4]||(t[4]=s=>b.value=s)},{default:n(()=>[l(H,{label:"table"},{default:n(()=>[...t[19]||(t[19]=[v("表格檢視",-1)])]),_:1}),l(H,{label:"card"},{default:n(()=>[...t[20]||(t[20]=[v("卡片檢視",-1)])]),_:1})]),_:1},8,["modelValue"])]),b.value==="table"?(d(),u("div",ge,[l(dt,{data:R.value,style:{width:"100%"}},{default:n(()=>[l(w,{prop:"original_filename",label:"檔案名稱","min-width":"200"},{default:n(({row:s})=>[a("div",me,[a("div",{class:W(["file-icon",E(s.original_filename)])},i(E(s.original_filename).toUpperCase()),3),a("span",he,i(s.original_filename),1)])]),_:1}),l(w,{prop:"file_size",label:"檔案大小",width:"100"},{default:n(({row:s})=>[v(i(P(s.file_size)),1)]),_:1}),l(w,{prop:"target_languages",label:"翻譯語言",width:"150"},{default:n(({row:s})=>[a("div",ye,[(d(!0),u(O,null,I(s.target_languages.slice(0,2),m=>(d(),$(V,{key:m,size:"small",type:"primary"},{default:n(()=>[v(i(Y(m)),1)]),_:2},1024))),128)),s.target_languages.length>2?(d(),$(V,{key:0,size:"small",type:"info"},{default:n(()=>[v(" +"+i(s.target_languages.length-2),1)]),_:2},1024)):y("",!0)])]),_:1}),l(w,{prop:"status",label:"狀態",width:"100"},{default:n(({row:s})=>[l(V,{type:N(s.status),size:"small"},{default:n(()=>[v(i(F(s.status)),1)]),_:2},1032,["type"])]),_:1}),l(w,{prop:"total_cost",label:"成本",width:"100"},{default:n(({row:s})=>[v(" $"+i((s.total_cost||0).toFixed(4)),1)]),_:1}),l(w,{prop:"created_at",label:"建立時間",width:"130"},{default:n(({row:s})=>[v(i(x(s.created_at)),1)]),_:1}),l(w,{prop:"completed_at",label:"完成時間",width:"130"},{default:n(({row:s})=>[v(i(s.completed_at?x(s.completed_at):"-"),1)]),_:1}),l(w,{label:"操作",width:"120",fixed:"right"},{default:n(({row:s})=>[a("div",we,[l(r,{type:"text",size:"small",onClick:m=>A(s.job_uuid)},{default:n(()=>[...t[21]||(t[21]=[v(" 查看 ",-1)])]),_:2},1032,["onClick"]),s.status==="COMPLETED"?(d(),$(r,{key:0,type:"text",size:"small",onClick:m=>J(s)},{default:n(()=>[...t[22]||(t[22]=[v(" 下載 ",-1)])]),_:2},1032,["onClick"])):y("",!0)])]),_:1})]),_:1},8,["data"])])):(d(),u("div",ke,[a("div",De,[(d(!0),u(O,null,I(R.value,s=>(d(),u("div",{key:s.job_uuid,class:"history-card",onClick:m=>A(s.job_uuid)},[a("div",Ee,[a("div",Me,[a("div",{class:W(["file-icon",E(s.original_filename)])},i(E(s.original_filename).toUpperCase()),3),a("div",xe,[a("div",Te,i(s.original_filename),1),a("div",be,i(P(s.file_size))+" • "+i(x(s.created_at)),1)])]),a("div",ze,[l(V,{type:N(s.status),size:"small"},{default:n(()=>[v(i(F(s.status)),1)]),_:2},1032,["type"])])]),a("div",Ve,[a("div",$e,[t[23]||(t[23]=a("div",{class:"language-label"},"翻譯語言:",-1)),a("div",Le,[(d(!0),u(O,null,I(s.target_languages,m=>(d(),u("span",{key:m,class:"language-tag"},i(Y(m)),1))),128))])]),a("div",Pe,[s.total_cost>0?(d(),u("div",Fe,[t[24]||(t[24]=a("span",{class:"stat-label"},"成本:",-1)),a("span",Se,"$"+i(s.total_cost.toFixed(4)),1)])):y("",!0),s.total_tokens>0?(d(),u("div",Be,[t[25]||(t[25]=a("span",{class:"stat-label"},"Token:",-1)),a("span",Oe,i(s.total_tokens.toLocaleString()),1)])):y("",!0)])]),s.completed_at||s.processing_started_at?(d(),u("div",Ie,[a("div",Re,[s.processing_started_at&&s.completed_at?(d(),u("div",Ue," 處理時間: "+i(nt(s.processing_started_at,s.completed_at)),1)):y("",!0),s.completed_at?(d(),u("div",Ae," 完成時間: "+i(ot(s.completed_at)),1)):y("",!0)]),a("div",{class:"card-actions",onClick:t[5]||(t[5]=Lt(()=>{},["stop"]))},[s.status==="COMPLETED"?(d(),$(r,{key:0,type:"primary",size:"small",onClick:m=>J(s)},{default:n(()=>[...t[26]||(t[26]=[v(" 下載 ",-1)])]),_:2},1032,["onClick"])):y("",!0)])])):y("",!0)],8,Ce))),128))])])),Z.value>1?(d(),u("div",Je,[l(rt,{"current-page":f.value,"onUpdate:currentPage":t[6]||(t[6]=s=>f.value=s),"page-size":z.value,total:g.value.length,layout:"total, prev, pager, next",onCurrentChange:at},null,8,["current-page","page-size","total"])])):y("",!0)]))])])])}}},aa=ct(Ye,[["__scopeId","data-v-5d079b59"]]);export{aa as default};