index-003b3a8c.js 8.5 KB

12
  1. import{bm as G,n as e,a2 as K,a5 as p,aP as R,bb as T,d as P,aC as E,f as g,c as D,j as q,h as O,Z as S,$ as N,a0 as h,a6 as $,T as o,b8 as J,at as Z,a1 as L,a7 as b,bq as Q,br as V,a8 as U,bs as X,a9 as j,aJ as ee,b3 as z}from"./index-8a67e3df.js";import{u as te,_ as ae}from"./index.vue_vue_type_script_setup_true_lang-8cf1e85f.js";import{d as I}from"./dayjs-919e6097.js";import{u as se}from"./usePromise-a958a05b.js";import{u as oe}from"./index-c6560d80.js";import{s as le,c as ne,e as re}from"./gb28181-a8ace5d9.js";import{u as H,a as de,d as M,V as ie}from"./usePlay-6965d852.js";import{D as ue}from"./DownloadOutlined-3b5dda91.js";import{P as ce}from"./index-6a257713.js";import{D as pe}from"./index-1e695827.js";import"./jb4-5138f1a1.js";import"./canvas-2aaf4e1d.js";const me=(d,n,i,m,c,s)=>{const l=()=>{const a=d.value.downloadId.split("_");if(a.length>=4){const u=new Date(parseInt(a[0])*1e3).toLocaleString("zh-CN"),k=new Date(parseInt(a[1])*1e3).toLocaleString("zh-CN"),w=a[2],y=a[3];return{startTime:u,endTime:k,deviceId:w,channelId:y}}return null},f=()=>{const a=d.value.downloadUrl,u=document.createElement("a");u.href=a,u.download=d.value.fileName,u.target="_blank",document.body.appendChild(u),u.click(),document.body.removeChild(u),T.success("开始下载文件")};return()=>{const a=l();G({content:()=>e("div",{class:"download-progress-container"},[e("div",{class:"progress-info"},[a&&e(K,null,[e("div",{class:"info-item"},[e("span",{class:"label"},[p("设备ID:")]),e("span",{class:"value"},[a.deviceId])]),e("div",{class:"info-item"},[e("span",{class:"label"},[p("通道ID:")]),e("span",{class:"value"},[a.channelId])]),e("div",{class:"info-item"},[e("span",{class:"label"},[p("开始时间:")]),e("span",{class:"value"},[a.startTime])]),e("div",{class:"info-item"},[e("span",{class:"label"},[p("结束时间:")]),e("span",{class:"value"},[a.endTime])])]),e("div",{class:"info-item"},[e("span",{class:"label"},[p("状态:")]),e("span",{class:["value",i.value]},[n.value])]),e("div",{class:"info-item"},[e("span",{class:"label"},[p("进度:")]),e("span",{class:"value"},[d.value.progress,p("%")])])]),e(ce,{percent:d.value.progress,status:m.value,strokeColor:c.value},null),e("div",{class:"download-actions"},[e(R,{type:"primary",disabled:d.value.progress<100||d.value.status==="failed",onClick:f},{default:()=>[e(ue,null,null),p("下载文件")]})]),d.value.error&&e("div",{class:"error-message"},[d.value.error])]),modalConfig:{width:"500px",title:"录像下载",footer:null,maskClosable:!1,onCancel:()=>s()}})}},fe=P({__name:"list",props:{data:{type:Array,default:[]}},setup(d){const{t:n}=E(),i=d,m=H(),c=g(()=>m.getCurrentChannel),s=D({downloadId:"",fileName:"",progress:0,status:"pending",error:"",downloadUrl:""});let l=null;const f=g(()=>({pending:"准备中",downloading:"下载中",completed:"已完成",failed:"失败"})[s.value.status]||"未知"),a=g(()=>({"status-pending":s.value.status==="pending","status-downloading":s.value.status==="downloading","status-completed":s.value.status==="completed","status-failed":s.value.status==="failed"})),u=g(()=>s.value.status==="failed"?"exception":s.value.status==="completed"?"success":"active"),k=g(()=>s.value.status==="failed"?"#ff4d4f":s.value.status==="completed"?"#52c41a":"#1890ff"),w=()=>{l&&(clearInterval(l),l=null)},y=me(s,f,a,u,k,w),B=async t=>{try{const{deviceId:_,startTime:C,endTime:W}=t,F=await le({deviceId:c.value.parentId,channelId:_,start:I(C).format("YYYY-MM-DDTHH:mm:ss"),end:I(W).format("YYYY-MM-DDTHH:mm:ss"),downloadSpeed:4});if(F&&F.data){const Y=F.data,A=Y.downloadUrl.split("/").pop()||"download.mp4";s.value={downloadId:Y.downloadId,fileName:A,progress:0,status:Y.status,error:"",downloadUrl:Y.downloadUrl},x(),y(),T.success("下载任务已创建")}else T.error("创建下载任务失败")}catch(_){console.error("下载失败:",_),T.error("创建下载任务失败")}},x=()=>{l&&clearInterval(l),l=setInterval(async()=>{try{const t=await ne(s.value.downloadId);t&&t.data&&(s.value.progress=t.data.progress,s.value.status=t.data.status,s.value.error=t.data.error,t.data.downloadUrl&&(s.value.downloadUrl=t.data.downloadUrl),(t.data.status==="completed"||t.data.status==="failed")&&w())}catch(t){console.error("获取进度失败:",t)}},1e3)};q(()=>{w()});const r=oe(),v={height:"auto",rowConfig:{keyField:"StartTime",useKey:!0},columnConfig:{useKey:!0},columns:[{field:"deviceId",get title(){return n("routes.record.通道编号")},minWidth:"120px",showOverflow:"tooltip"},{field:"name",get title(){return n("routes.record.名称")},minWidth:"120px"},{field:"address",get title(){return n("routes.record.地址")},minWidth:"120px",showOverflow:"tooltip"},{field:"startTime",get title(){return n("routes.record.录像开始时间")},width:"200px",formatter:({cellValue:t})=>I(t).format("YYYY-MM-DD HH:mm:ss")},{field:"endTime",get title(){return n("routes.record.录像结束时间")},width:"200px",formatter:({cellValue:t})=>I(t).format("YYYY-MM-DD HH:mm:ss")},{field:"any",get title(){return n("routes.record.录像时长")},minWidth:"120px",formatter:({row:t})=>{const{startTime:_,endTime:C}=t;return`${I(C).diff(I(_),"minutes")} ${n("routes.record.分钟")}`}},{field:"operate",get title(){return n("routes.record.操作")},width:"140px",slots:{default:"operate"},align:"center",fixed:"right"}],data:i.data};return O(()=>i.data,()=>{i.data?.length?r?.tableRef?.loadData(i.data):r?.tableRef?.loadData([])}),(t,_)=>(S(),N(o(J),{uid:o(r).uid,gridOptions:v},{operate:h(({row:C})=>[e(o(R),{size:"small",type:"link",onClick:()=>o(de)({row:C,channel:c.value})},{default:h(()=>[p($(o(n)("routes.record.播放")),1)]),_:2},1032,["onClick"]),e(o(R),{size:"small",type:"link",onClick:()=>B(C)},{default:h(()=>_[0]||(_[0]=[p(" 下载 ")])),_:2},1032,["onClick"])]),_:1},8,["uid"]))}});const ve=Z(fe,[["__scopeId","data-v-f3a70a53"]]),ge={class:"h-full"},he={class:"flex justify-between mb-16px"},_e={class:"w-full",style:{height:"calc(100% - 32px)"}},we=P({__name:"content",setup(d){const{t:n}=E(),i=H(),m=g(()=>i.getCurrentChannel),c=g(()=>i.getTimeRange),s=D("video"),l=D(),f=D(),a=r=>{if(!l.value||l.value.length===0)return!1;const v=l.value[0]&&r.diff(l.value[0],"days")>2;return l.value[1]&&l.value[1].diff(r,"days")>2||v},u=r=>{r?(l.value=[],f.value=[]):f.value=void 0},k=r=>{l.value=r},w=r=>{i.setTimeRange(r)},y=g(()=>`${m.value.parentId}/${m.value.deviceId}`),B=g(()=>`${M(c.value[1])}`),x=D([]);return O([()=>i.getCurrentChannel?.key,()=>c.value],()=>{const{parentId:r,deviceId:v}=m.value;r&&v&&re({deviceId:r,channelId:v,start:`${M(c.value[0])}`,end:`${M(c.value[1])}`}).then(t=>{t.data?.length?x.value=t.data:(T.warn(n("routes.record.当前无可播放的录像")),x.value=[])}).catch(t=>{console.error(`getRecords-error: ${t}`)})}),(r,v)=>(S(),L("div",ge,[b("div",he,[e(o(Q),{value:f.value||c.value,disabledDate:a,onOpenChange:u,onChange:w,onCalendarChange:k,allowClear:!1},null,8,["value"]),e(o(X),{value:s.value,"onUpdate:value":v[0]||(v[0]=t=>s.value=t)},{default:h(()=>[e(o(V),{value:"video"},{default:h(()=>[e(o(U),{icon:"mdi:timeline-clock-outline",class:"v-text-bottom"}),b("span",null,$(o(n)("routes.record.时间轴视图")),1)]),_:1}),e(o(V),{value:"list"},{default:h(()=>[e(o(U),{icon:"pixelarticons:list-box",class:"v-text-bottom"}),b("span",null,$(o(n)("routes.record.列表视图")),1)]),_:1})]),_:1},8,["value"])]),b("div",_e,[s.value==="video"?(S(),N(ie,{data:x.value,streamPath:y.value,endTime:B.value,key:y.value},null,8,["data","streamPath","endTime"])):j("",!0),s.value==="list"?(S(),N(ve,{key:1,data:x.value},null,8,["data"])):j("",!0)])]))}}),ye={class:"flex",style:{height:"calc(100% - 8px)"}},xe={class:"flex items-center justify-between p-8px"},Ce={class:"text-14px"},Ie=P({name:"Record"}),Ne=P({...Ie,setup(d){const{t:n}=E(),i=te();function m(){return new Promise(async a=>{await i.fetchdeviceTree(),setTimeout(()=>{a({})},1200)})}const{loading:c,handleFn:s}=se(m,{immediate:!1}),l=H(),f=a=>{l.setCurrentChannel({key:a.key,parentId:a.parentId,deviceId:a.deviceId,name:a.deviceId,parentName:a.parentName})};return(a,u)=>(S(),L("div",ye,[e(o(z),{class:"w-342px m-r-8px flex-shrink-0",bordered:!1,bodyStyle:{height:"100%",padding:0}},{default:h(()=>[b("div",xe,[b("span",Ce,$(o(n)("routes.record.录像设备树")),1),e(o(ee),{placement:"left",title:o(n)("routes.record.更新设备树")},{default:h(()=>[e(o(U),{icon:"ant-design:redo-outlined",class:"v-text-bottom cursor-pointer",size:"18",infinite:o(c),onClick:o(s)},null,8,["infinite","onClick"])]),_:1},8,["title"])]),e(o(pe),{class:"m-0"}),e(ae,{onSelect:f})]),_:1}),e(o(z),{class:"flex-1",bordered:!1,bodyStyle:{height:"100%",padding:"16px"}},{default:h(()=>[e(we)]),_:1})]))}});export{Ne as default};
  2. //# sourceMappingURL=index-003b3a8c.js.map