| 12 |
- import{d as F,Z as w,$ as T,aE as H,a0 as f,n as s,T as a,M as z,a4 as R,a8 as S,a5 as O,a9 as A,bv as J,x as Y,f as Z,Y as Q,c as K,h as X,a1 as j,bt as ee,bn as te,a7 as G,ay as V,a6 as E,bu as ne,a$ as q,bm as B,bb as _,b8 as ae,C as se,e as le,aJ as oe,b3 as L,b9 as re}from"./index-8a67e3df.js";import"./dayjs-919e6097.js";import{u as ie}from"./usePromise-a958a05b.js";import{a as D,u as ce,C as de}from"./content-75a4ceb8.js";import{_ as ue,a as pe}from"./operate.vue_vue_type_script_setup_true_lang-797c1b4a.js";import{f as fe,h as me,i as he,j as xe,k as ye}from"./gb28181-a8ace5d9.js";import{u as ve}from"./index-c6560d80.js";import{D as ge}from"./index-1e695827.js";import"./canvas-2aaf4e1d.js";import"./index-f6e7ad63.js";import"./index-a5661619.js";import"./index-6c00bb26.js";import"./index-82d2c624.js";import"./index-66456a53.js";const be=F({__name:"menu",props:{handleMenuClick:{type:Function},item:{}},setup(x){return(h,e)=>(w(),T(a(Y),{trigger:"click",placement:"bottomRight",onClick:e[2]||(e[2]=c=>c.stopPropagation())},H({default:f(()=>[s(a(J))]),_:2},[h.item.pid===0?{name:"overlay",fn:f(()=>[s(a(z),{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]=O(" 创建分组 "))]),_:1})]),_:1})]),key:"0"}:{name:"overlay",fn:f(()=>[s(a(z),{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]=O(" 创建分组 "))]),_: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]=O(" 通道管理 "))]),_:1}),h.item.channels.length?(w(),T(a(R),{key:"screen"},{default:f(()=>[s(a(S),{icon:"mdi:play-box",class:"v-text-bottom"}),e[6]||(e[6]=O(" 分组上墙 "))]),_:1})):A("",!0),s(a(R),{key:"update"},{default:f(()=>[s(a(S),{icon:"ri:edit-box-fill",class:"v-text-bottom"}),e[7]||(e[7]=O(" 组名编辑 "))]),_:1}),s(a(R),{key:"delete"},{default:f(()=>[s(a(S),{icon:"material-symbols:delete-sharp",class:"v-text-bottom"}),e[8]||(e[8]=O(" 删除分组 "))]),_: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=Z(()=>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:$,status:N})=>[G("div",ke,[G("span",null,[l?(w(),T(a(S),{key:0,icon:"mdi:web-camera",class:V(["v-text-bottom",{"text-primary":!N||N==="ON"}])},null,8,["class"])):(w(),T(a(S),{key:1,icon:"uis:layer-group",class:"v-text-bottom"})),(t||I||$).indexOf(p.value)>-1?(w(),j("span",{key:2,class:V({"text-primary":l&&!N||N==="ON"})},[O(E((t||I||$).substr(0,(t||I||$).indexOf(p.value)))+" ",1),G("span",_e,E(p.value),1),O(" "+E((t||I||$).substr((t||I||$).indexOf(p.value)+p.value.length)),1)],2)):(w(),j("span",{key:3,class:V({"text-primary":l&&!N||N==="ON"})}," "+E(t||I||$),3))]),l?A("",!0):(w(),T(be,{key:0,item:{name:t,id:P,pid:M,channels:m},class:"float-right pt-1 pr-2",handleMenuClick:U=>i({name:t,key:U,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()});B({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}),B({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()}}})},$e=F({name:"Channel"}),Oe=F({...$e,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(),T(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)=>{B({content:s(Oe,{id:c},null),modalConfig:{appContext:x,width:"78%",title:`${e} 通道管理`,okText:"更新",cancelText:"关闭",maskClosable:!1,onOk:async()=>{await xe({groupId:c,channelIds:Ne()}),_.success("分组通道已更新"),h()}}})},Te={class:"flex",style:{height:"calc(100% - 8px)"}},Ge={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:$}=m;return m.status!=="ON"?(o++,null):{path:`${P}/${M}`,deviceItem:{parentId:P,deviceId:M,parentName:I,name:$}}}).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",Te,[s(a(L),{class:"w-342px m-r-8px flex-shrink-0",bordered:!1,bodyStyle:{height:"100%",padding:0}},{default:f(()=>[G("div",Ge,[r[0]||(r[0]=G("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}),G("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};
- //# sourceMappingURL=group-62da2a03.js.map
|