group-5952644a.js 11 KB

12
  1. import{d as F,Z as w,$ as G,aE as U,a0 as f,n as s,T as a,M as B,a4 as R,a8 as S,a5 as $,a9 as z,bH as Y,x as Z,f as J,Y as Q,c as K,h as X,a1 as j,bF as ee,bA as te,a7 as T,ay as V,a6 as E,bG as ne,b0 as q,bo as A,bc as _,b9 as ae,C as se,e as le,aK as oe,b4 as L,ba as re}from"./index-a8341fa1.js";import"./dayjs-919e6097.js";import{u as ie}from"./usePromise-9066227b.js";import{a as D,u as ce,C as de}from"./content-0eaaa543.js";import{_ as ue,a as pe}from"./operate.vue_vue_type_script_setup_true_lang-d4e72e0b.js";import{f as fe,h as me,i as he,j as xe,k as ye}from"./gb28181-0e98f3aa.js";import{u as ve}from"./index-7b240cde.js";import{D as ge}from"./index-d1462287.js";import"./canvas-b3f2b616.js";import"./index-56cacbd2.js";import"./index-44447dae.js";import"./index-cb44e888.js";import"./index-a35c88a6.js";const be=F({__name:"menu",props:{handleMenuClick:{type:Function},item:{}},setup(x){return(h,e)=>(w(),G(a(Z),{trigger:"click",placement:"bottomRight",onClick:e[2]||(e[2]=c=>c.stopPropagation())},U({default:f(()=>[s(a(Y))]),_:2},[h.item.pid===0?{name:"overlay",fn:f(()=>[s(a(B),{onClick:e[0]||(e[0]=c=>h.handleMenuClick(c.key))},{default:f(()=>[s(a(R),{key:"add"},{default:f(()=>[s(a(S),{icon:"basil:add-solid",class:"v-text-bottom"}),e[3]||(e[3]=$(" 创建分组 "))]),_:1})]),_:1})]),key:"0"}:{name:"overlay",fn:f(()=>[s(a(B),{onClick:e[1]||(e[1]=c=>h.handleMenuClick(c.key))},{default:f(()=>[s(a(R),{key:"add"},{default:f(()=>[s(a(S),{icon:"basil:add-solid",class:"v-text-bottom"}),e[4]||(e[4]=$(" 创建分组 "))]),_:1}),s(a(R),{key:"channel"},{default:f(()=>[s(a(S),{icon:"material-symbols:camera-video-rounded",class:"v-text-bottom"}),e[5]||(e[5]=$(" 通道管理 "))]),_:1}),h.item.channels.length?(w(),G(a(R),{key:"screen"},{default:f(()=>[s(a(S),{icon:"mdi:play-box",class:"v-text-bottom"}),e[6]||(e[6]=$(" 分组上墙 "))]),_:1})):z("",!0),s(a(R),{key:"update"},{default:f(()=>[s(a(S),{icon:"ri:edit-box-fill",class:"v-text-bottom"}),e[7]||(e[7]=$(" 组名编辑 "))]),_:1}),s(a(R),{key:"delete"},{default:f(()=>[s(a(S),{icon:"material-symbols:delete-sharp",class:"v-text-bottom"}),e[8]||(e[8]=$(" 删除分组 "))]),_:1})]),_:1})]),key:"1"}]),1024))}}),Ce={class:"m-16px overscroll-contain overflow-y-auto overflow-x-hidden",style:{height:"100%"}},ke={class:"flex justify-between"},_e={style:{color:"#f00"}},we=F({__name:"index",emits:["menu","select"],setup(x,{emit:h}){const e=h,c=D();c.fetchGroupTree();const k=[],C=n=>{for(let o=0;o<n.length;o++){const t=n[o],l=t.key;k.push({key:l,title:t.name||t.channelName||t.channelId}),t.children&&C(t.children)}},g=(n,o)=>{let t;for(let l=0;l<o.length;l++){const m=o[l];m.children&&(m.children.some(P=>P.key===n)?t=m.key:g(n,m.children)&&(t=g(n,m.children)))}return t},y=J(()=>c.groupTree);Q(()=>{C(y.value)});const p=K(""),v=K([]),b=K([]),u=K(!0);X(p,n=>{const o=k.map(t=>t.title.indexOf(n)>-1?g(t.key,y.value):null).filter((t,l,m)=>t&&m.indexOf(t)===l);b.value=o,p.value=n,u.value=!0});const i=n=>{e("menu",n)},r=n=>{b.value=n,u.value=!1},d=(n,{node:o})=>{const t=b.value.filter(l=>l!==n[0]);t.length<b.value.length?b.value=t:b.value=b.value.concat(n),v.value=n,o?.isChannel&&e("select",o)};return(n,o)=>(w(),j("div",Ce,[s(a(te),{class:"mb-10px",value:p.value,"onUpdate:value":o[0]||(o[0]=t=>p.value=t),placeholder:"搜索设备","allow-clear":""},{prefix:f(()=>[s(a(ee))]),_:1},8,["value"]),s(a(ne),{showIcon:"","tree-data":y.value,defaultExpandAll:"","expanded-keys":b.value,"auto-expand-parent":u.value,onExpand:r,selectedKeys:v.value,onSelect:d,blockNode:"",fieldNames:{title:"name"}},{title:f(({name:t,isChannel:l,channels:m,id:P,pid:M,channelName:I,channelId:O,status:N})=>[T("div",ke,[T("span",null,[l?(w(),G(a(S),{key:0,icon:"mdi:web-camera",class:V(["v-text-bottom",{"text-primary":!N||N==="ON"}])},null,8,["class"])):(w(),G(a(S),{key:1,icon:"uis:layer-group",class:"v-text-bottom"})),(t||I||O).indexOf(p.value)>-1?(w(),j("span",{key:2,class:V({"text-primary":l&&!N||N==="ON"})},[$(E((t||I||O).substr(0,(t||I||O).indexOf(p.value)))+" ",1),T("span",_e,E(p.value),1),$(" "+E((t||I||O).substr((t||I||O).indexOf(p.value)+p.value.length)),1)],2)):(w(),j("span",{key:3,class:V({"text-primary":l&&!N||N==="ON"})}," "+E(t||I||O),3))]),l?z("",!0):(w(),G(be,{key:0,item:{name:t,id:P,pid:M,channels:m},class:"float-right pt-1 pr-2",handleMenuClick:H=>i({name:t,key:H,id:P,pid:M,channels:m})},null,8,["item","handleMenuClick"]))])]),_:1},8,["tree-data","expanded-keys","auto-expand-parent","selectedKeys"])]))}}),W=()=>({type:"object",properties:{layout:{type:"void","x-component":"FormLayout","x-component-props":{layout:"horizontal",labelCol:6,wrapperCol:14},properties:{name:{type:"string",title:"设备名称","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"请输入组名称",allowClear:!0},required:!0}}}}}),Se=(x,h,e)=>{const{FormilyForm:c,form:k,submit:C}=q({schema:W()});A({content:()=>s(c,null,null),modalConfig:{title:`在「${e}」下添加组`,maskClosable:!1,width:700,onOk:async()=>{const g=await C();if(g){const{name:y}=g;return await fe({name:y,pid:h}),_.success("分组添加成功"),x(),Promise.resolve(!0)}return Promise.reject(!1)},onClose:()=>{k.reset()}}})},Ie=(x,h,e,c)=>{const{FormilyForm:k,form:C,submit:g}=q({schema:W()});C.setValues({name:e}),A({content:()=>s(k,null,null),modalConfig:{title:`更新「${e}」组名称`,maskClosable:!1,width:700,onOk:async()=>{const y=await g();if(y){const{name:p}=y;return await me({name:p,pid:c,id:h}),_.success("组名更新成功"),x(),Promise.resolve(!0)}return Promise.reject(!1)},onClose:()=>{C.reset()}}})},Oe=F({name:"Channel"}),$e=F({...Oe,props:{id:{}},setup(x){const h=x,e=D(),c=(u,i)=>{const r=new Set;return u.filter(d=>{let n=d[i];return r.has(n)?!1:(r.add(n),!0)})},k=(u,i,r)=>{const d=new Set(i.map(n=>n[r]));return u.filter(n=>{const o=n[r];return!d.has(o)})},C=({checked:u,row:i})=>{if(v?.tableRef)if(u){const r=v.tableRef.getCheckboxReserveRecords(),d=[...c([...e.selectedChannel,i,...r],"id")];e.setSelChannel(d)}else{const r=e.selectedChannel.filter(d=>d.id!==i.id);e.setSelChannel(r)}},g=({checked:u})=>{if(v?.tableRef){const i=v.tableRef.getCheckboxReserveRecords();if(u){const r=v.tableRef.getCheckboxRecords(),d=[...c([...e.selectedChannel,...r,...i],"id")];e.setSelChannel(d)}else{const r=v?.tableRef.getData(),d=e.selectedChannel;e.setSelChannel(k(d,r,"id"))}}},y=K(!1),p=(u,i)=>new Promise(async r=>{const{data:d,total:n}=await he(h.id,{page:u,count:i}),{channels:o,list:t}=d;y.value||(y.value=!0,e.setSelChannel(o.map(l=>({...l,id:`${l.channelId}_${l.deviceId}`})))),r({total:n,data:t.map(l=>({...l,id:`${l.channelId}_${l.deviceId}`}))}),await se(),v?.tableRef?.setCheckboxRow(e.selectedChannel,!0)}),v=ve(),b={maxHeight:"530px",rowConfig:{keyField:"id",useKey:!0},checkboxConfig:{reserve:!0},columnConfig:{useKey:!0},pagerConfig:{pageSize:5},proxyConfig:{seq:!0,props:{result:"data",total:"total"},ajax:{query:({page:u})=>p(u.currentPage,u.pageSize)}},columns:[{type:"checkbox",width:50,fixed:"left"},{field:"channelId",title:"通道编号",showOverflow:"tooltip",width:"200px",fixed:"left"},{field:"channelName",title:"通道名称",showOverflow:"tooltip",width:"120px",fixed:"left"},{field:"deviceId",title:"设备编号",showOverflow:"tooltip",width:"200px",fixed:"left"},{field:"deviceName",title:"设备名称",showOverflow:"tooltip",minWidth:"120px",fixed:"left"},{field:"streamMode",title:"流传输模式",minWidth:"100px"},{field:"status",title:"状态",minWidth:"80px"}]};return(u,i)=>(w(),G(a(ae),{uid:a(v).uid,gridOptions:b,onCheckboxAll:g,onCheckboxChange:C},null,8,["uid"]))}}),Pe=D(),Ne=()=>Pe.selectedChannel.map(x=>({channelId:x.channelId,deviceId:x.deviceId})),Re=(x,h,e,c)=>{A({content:s($e,{id:c},null),modalConfig:{appContext:x,width:"78%",title:`${e} 通道管理`,okText:"更新",cancelText:"关闭",maskClosable:!1,onOk:async()=>{await xe({groupId:c,channelIds:Ne()}),_.success("分组通道已更新"),h()}}})},Ge={class:"flex",style:{height:"calc(100% - 8px)"}},Te={class:"flex items-center justify-between p-8px"},Fe={class:"w-300px m-l-8px h-full flex-shrink-0"},Me=F({name:"Screen"}),Ye=F({...Me,setup(x){const h=le()?.appContext,e=D(),c=()=>{e.fetchGroupTree()};function k(){return new Promise(async i=>{await e.fetchGroupTree(),setTimeout(()=>{i({})},1200)})}const{loading:C,handleFn:g}=ie(k,{immediate:!1}),y=i=>{re.confirm({title:"确定删除分组?",cancelText:"取消",okText:"确定",content:"删除后分组及其子分组都将无法使用!",onOk:()=>{ye(i).then(()=>{_.success("分组已删除!"),c()})}})},p=ce(),v=(i,r)=>{if(e.curPlayGroupId===r)return _.warning("当前分组有设备正在播放,无法上墙!");const{streamList:d,resetStreamList:n}=p.multiPlayRef;let o=0;const t=i.map(m=>{const{deviceId:P,channelId:M,deviceName:I,channelName:O}=m;return m.status!=="ON"?(o++,null):{path:`${P}/${M}`,deviceItem:{parentId:P,deviceId:M,parentName:I,name:O}}}).filter(m=>m!==null);o&&(t.length?_.info(`已过滤 ${o} 个不在线的设备!!!`):_.info("所有设备皆不在线!"),o=0);let l;if(t.length>p.curScreenNum)l=t.slice(0,p.curScreenNum);else{const m=new Array(d.length).fill({}).map(()=>({path:"",deviceItem:{},stream:void 0}));l=t.concat(m.slice(t.length))}n(l)},b=i=>{const{deviceId:r,channelId:d,deviceName:n,channelName:o,status:t,groupId:l}=i;if(e.setCurPlayGroupId(l),t!=="ON")return _.error("设备不在线");p.setActiveInfo({parentId:r,deviceId:d,parentName:n,name:o})},u=i=>{const{key:r,name:d,id:n,pid:o,channels:t}=i;switch(r){case"add":Se(c,n,d);break;case"channel":if(n===e.curPlayGroupId)return _.warning("当前分组有设备正在播放,无法管理通道!");Re(h,c,d,n);break;case"screen":v(t,n),e.setCurPlayGroupId(n);break;case"update":Ie(c,n,d,o);break;case"delete":if(n===e.curPlayGroupId)return _.warning("当前分组有设备正在播放,无法删除!");y(n);break}};return(i,r)=>(w(),j("div",Ge,[s(a(L),{class:"w-342px m-r-8px flex-shrink-0",bordered:!1,bodyStyle:{height:"100%",padding:0}},{default:f(()=>[T("div",Te,[r[0]||(r[0]=T("span",{class:"text-14px"},"设备分组",-1)),s(a(oe),{placement:"left",title:"更新设备分组"},{default:f(()=>[s(a(S),{icon:"ant-design:redo-outlined",class:"v-text-bottom cursor-pointer",size:"18",infinite:a(C),onClick:a(g)},null,8,["infinite","onClick"])]),_:1})]),s(a(ge),{class:"m-0"}),s(we,{onMenu:u,onSelect:b})]),_:1}),s(a(L),{class:"flex-1",bordered:!1,bodyStyle:{height:"100%",padding:"16px"}},{default:f(()=>[s(de)]),_:1}),T("div",Fe,[s(a(L),{class:"m-b-8px",bordered:!1,bodyStyle:{height:"230px",padding:0}},{default:f(()=>[s(ue)]),_:1}),s(a(L),{style:{height:"calc(100% - 238px)"},bordered:!1,bodyStyle:{height:"100%",padding:0}},{default:f(()=>[s(pe)]),_:1})])]))}});export{Ye as default};
  2. //# sourceMappingURL=group-5952644a.js.map