PageSourceSearch

https://hub.avibox.ru/assets/AdminSpaces-DKB2uXG1.js

js avibox.ru collected 2026-09-24 15:12:47 UTC 16,539 bytes, 1 lines download raw bytes

1import{dI as Y,ed as s,eE as ee,dw as R,e7 as n,dz as H,eG as g,dy as t,dB as r,dE as L,em as u,dA as k,dF as f,er as C,dc as Se,eH as N,eC as J,dp as ie,cX as Ce,aL as Te,ef as ze,eJ as G,_ as re,d0 as De,a as ue,ba as Me,dd as le,c as Oe,e3 as Ie,e5 as Ue,ei as Be,dZ as se,c9 as Re,ch as Le,d7 as Ee}from"./vendor-DUoYKxKf.js";import{T as We}from"./Table-BWHKNJiS.js";import{T as Ne}from"./Tabs--mizgJz6.js";import{E as Pe}from"./ErrorState-D7_jXPui.js";import{P as de,g as Z,d as ae,a as ne}from"./index-BcPf-nBI.js";import{S as Ke}from"./SpaceDetailDrawer-NVb4gMrN.js";import{u as Fe}from"./useAdminRealtime-Dz-WytJD.js";import"./CopyButton.vue_vue_type_script_setup_true_lang-DUqHItUu.js";import"./clipboard-Dw6gfW3R.js";import"./ProfileAvatar-B9TVcWCe.js";import"./avatar-placeholder-MmQ9fg6u.js";import"./usePersistentSetting-CkvRMRs-.js";import"./UnreadBadge-DVxpEG74.js";import"./vue-core-BW8FD41h.js";import"./Drawer-DL-jg68G.js";import"./StatusPill-BD38qi8e.js";const Xe={class:"aom-body"},He={key:0,class:"aom-info"},qe={class:"aom-info__value"},Qe={key:0,class:"aom-info__badge"},Ge={class:"aom-field"},Je={class:"aom-search-wrap"},Ze=["placeholder"],je={key:0,class:"aom-dropdown"},Ye={key:0,class:"aom-dropdown__loading"},ea=["onMousedown"],aa={class:"aom-dropdown__item-main"},ta={class:"aom-dropdown__item-sub"},la={key:1,class:"aom-dropdown__empty"},sa={class:"aom-field"},na={class:"aom-label",for:"aom-reason"},oa={key:1,class:"aom-error"},ia={class:"aom-footer"},ra=["disabled"],ua=Y({__name:"AdminAssignOwnerModal",props:{modelValue:{type:Boolean},space:{},currentOwner:{}},emits:["update:modelValue","assigned"],setup(q,{emit:P}){const $=q,d=P,c=s(""),p=s([]),h=s(!1),V=s(!1),b=s(null),x=s(""),o=s(!1),v=s(null);let y=null,A=0;ee(()=>$.modelValue,i=>{i&&D()});function D(){c.value="",p.value=[],b.value=null,x.value="",v.value=null,o.value=!1,V.value=!1}function M(){b.value=null,y&&clearTimeout(y);const i=c.value.trim();if(i.length<2){p.value=[];return}y=setTimeout(()=>S(i),250)}async function S(i){const _=++A;h.value=!0;try{const{data:m}=await Z.get("/admin/users",{q:i,size:10});if(_!==A)return;p.value=(m.users||[]).map(w=>({id:w.id,username:w.username,login:w.login,email:w.email,label:w.username||w.login||w.email||w.id.slice(0,8)}))}catch{_===A&&(p.value=[])}finally{_===A&&(h.value=!1)}}function O(i){b.value=i,c.value=i.label,V.value=!1}function I(){b.value=null,c.value="",p.value=[]}function U(){setTimeout(()=>{V.value=!1},150)}const T=R(()=>!(!b.value||x.value.trim().length<10||!$.space));async function K(){var i,_;if(!(!$.space||!b.value)){o.value=!0,v.value=null;try{const{data:m}=await Z.post(`/admin/spaces/${$.space.id}/assign-owner`,{new_owner_id:b.value.id,reason:x.value.trim()});d("assigned",m),d("update:modelValue",!1)}catch(m){const w=m;v.value=((_=(i=w==null?void 0:w.response)==null?void 0:i.data)==null?void 0:_.detail)??"Не удалось назначить владельца"}finally{o.value=!1}}}function Q(){d("update:modelValue",!1)}return(i,_)=>i.modelValue?(n(),H(de,{key:0,size:"sm",onClPopup:Q},{title:g(()=>{var m;return[L(" Назначить нового владельца space «"+u(((m=i.space)==null?void 0:m.name)||"—")+"» ",1)]}),default:g(()=>[t("div",Xe,[i.currentOwner?(n(),r("div",He,[_[3]||(_[3]=t("span",{class:"aom-info__label"},"Текущий владелец:",-1)),t("span",qe,[L(u(i.currentOwner.username||i.currentOwner.email||i.currentOwner.id)+" ",1),i.currentOwner.deleted_at?(n(),r("span",Qe,"удалён")):k("",!0)])])):k("",!0),t("div",Ge,[_[4]||(_[4]=t("label",{class:"aom-label",for:"aom-user-search"}," Новый владелец ",-1)),t("div",Je,[f(C(Se),{size:14,class:"aom-search-icon"}),N(t("input",{id:"aom-user-search","onUpdate:modelValue":_[0]||(_[0]=m=>c.value=m),type:"text",class:"aom-input aom-input--search",placeholder:b.value?b.value.label:"Введите email / username / id",autocomplete:"off",onInput:M,onFocus:_[1]||(_[1]=m=>V.value=!0),onBlur:U},null,40,Ze),[[J,c.value]]),b.value?(n(),r("button",{key:0,class:"aom-search-clear",onClick:I,"aria-label":"Сбросить"},[f(C(ie),{size:13})])):k("",!0)]),f(Ce,{name:"aom-dropdown"},{default:g(()=>[V.value&&(p.value.length||h.value)?(n(),r("div",je,[h.value?(n(),r("div",Ye,"Поиск...")):k("",!0),(n(!0),r(Te,null,ze(p.value,m=>(n(),r("button",{key:m.id,type:"button",class:"aom-dropdown__item",onMousedown:G(w=>O(m),["prevent"])},[t("div",aa,u(m.username||m.login||"—"),1),t("div",ta,u(m.email),1)],40,ea))),128)),!p.value.length&&!h.value&&c.value.trim().length>=2?(n(),r("div",la," Ничего не найдено ")):k("",!0)])):k("",!0)]),_:1})]),t("div",sa,[t("label",na," Причина (минимум 10 символов) — "+u(x.value.trim().length)+"/500 ",1),N(t("textarea",{id:"aom-reason","onUpdate:modelValue":_[2]||(_[2]=m=>x.value=m),class:"aom-input aom-textarea",rows:"3",maxlength:"500",placeholder:"Например: оригинальный владелец удалён, передаём активному члену пространства"},null,512),[[J,x.value]])]),v.value?(n(),r("div",oa,[f(C(re),{size:13}),L(" "+u(v.value),1)])):k("",!0)]),t("footer",ia,[t("button",{type:"button",class:"aom-btn aom-btn--cancel",onClick:Q}," Отмена "),t("button",{type:"button",class:"aom-btn aom-btn--primary",disabled:!T.value||o.value,onClick:K}
1,u(o.value?"Назначаю...":"Назначить"),9,ra)])]),_:1})):k("",!0)}}),da=ae(ua,[["__scopeId","data-v-dea3db83"]]),ca={class:"asm-body"},ma={class:"asm-warning"},va={class:"asm-field"},pa={class:"asm-label",for:"asm-reason"},_a={key:0,class:"asm-error"},fa={class:"asm-footer"},ha=["disabled"],ba=Y({__name:"AdminArchiveSpaceModal",props:{modelValue:{type:Boolean},space:{}},emits:["update:modelValue","archived"],setup(q,{emit:P}){const $=q,d=P,c=s(""),p=s(!1),h=s(null);ee(()=>$.modelValue,o=>{o&&(c.value="",h.value=null,p.value=!1)});const V=R(()=>$.space?c.value.trim().length>=10:!1);async function b(){var o,v;if($.space){p.value=!0,h.value=null;try{await Z.post(`/admin/spaces/${$.space.id}/archive`,{reason:c.value.trim()}),d("archived",$.space.id),d("update:modelValue",!1)}catch(y){const A=y;h.value=((v=(o=A==null?void 0:A.response)==null?void 0:o.data)==null?void 0:v.detail)??"Не удалось архивировать space"}finally{p.value=!1}}}function x(){d("update:modelValue",!1)}return(o,v)=>o.modelValue?(n(),H(de,{key:0,size:"sm",onClPopup:x},{title:g(()=>{var y;return[L(" Архивировать space «"+u(((y=o.space)==null?void 0:y.name)||"—")+"» ",1)]}),default:g(()=>[t("div",ca,[t("div",ma,[f(C(De),{size:16,class:"asm-warning__icon"}),v[1]||(v[1]=t("div",{class:"asm-warning__text"},[t("strong",null,"Действие необратимо."),L(" Все члены пространства будут отвязаны, привязанные Авито-профили — остановлены (paused billing, отключены воркеры). Восстановление доступно только через ручной запрос в БД. ")],-1))]),t("div",va,[t("label",pa," Причина (минимум 10 символов) — "+u(c.value.trim().length)+"/500 ",1),N(t("textarea",{id:"asm-reason","onUpdate:modelValue":v[0]||(v[0]=y=>c.value=y),class:"asm-input asm-textarea",rows:"3",maxlength:"500",placeholder:"Например: владелец удалён, никто не подхватил пространство 60+ дней"},null,512),[[J,c.value]])]),h.value?(n(),r("div",_a,[f(C(re),{size:13}),L(" "+u(h.value),1)])):k("",!0),t("footer",fa,[t("button",{type:"button",class:"asm-btn asm-btn--cancel",onClick:x}," Отмена "),t("button",{type:"button",class:"asm-btn asm-btn--danger",disabled:!V.value||p.value,onClick:b},[f(C(ue),{size:14}),L(" "+u(p.value?"Архивирую...":"Архивировать"),1)],8,ha)])])]),_:1})):k("",!0)}}
1),wa=ae(ba,[["__scopeId","data-v-88a9589d"]]),ya={class:"admin-page"},ga={class:"admin-page__header"},ka={class:"admin-page__header-left"},xa={class:"admin-page__subtitle"},$a=["disabled"],Va={class:"toolbar"},Aa={class:"search-wrap"},Sa={class:"space-cell"},Ca={class:"space-cell__name"},Ta={class:"space-cell__id"},za={key:0,class:"owner-cell"},Da={class:"owner-cell__name"},Ma={class:"owner-cell__email"},Oa={key:1,class:"owner-cell owner-cell--orphan"},Ia={key:0},Ua={key:1,class:"cell-muted"},Ba={key:0},Ra={key:1,class:"cell-muted"},La={class:"date-cell"},Ea={key:0,class:"cell-muted"},Wa={key:1,class:"cell-muted"},Na={key:2,class:"cell-muted"},Pa={key:3,class:"cell-muted"},oe=50,Ka=Y({__name:"AdminSpaces",setup(q){const P=[{key:"all",label:"Все",icon:Me},{key:"orphan",label:"Без владельца",icon:le},{key:"archived",label:"Архив",icon:Oe}],$=R(()=>P.map(e=>({id:e.key,label:e.label,icon:e.icon,count:e.key===o.value?x.value:void 0}))),d=s([]),c=s(!1),p=s(!1),h=s(!1),V=s(null);let b=0;const x=s(0),o=s("all"),v=s(""),y=s("created_at"),A=s("desc");let D=null;const M=s(!1),S=s(null),O=s(!1),I=s(null),U=s(!1),T=s(null),K=s(null),Q=R(()=>d.value.findIndex(l=>l.id===T.value)>0),i=R(()=>{const e=d.value.findIndex(l=>l.id===T.value);return e>=0&&e<d.value.length-1});function _(e){const l=e.id;l&&(T.value=l,U.value=!0)}function m(){const e=d.value.findIndex(l=>l.id===T.value);e>0&&(T.value=d.value[e-1].id)}function w(){const e=d.value.findIndex(l=>l.id===T.value);e>=0&&e<d.value.length-1&&(T.value=d.value[e+1].id)}function ce(e){S.value={id:e.id,name:e.name,owner_id:e.owner_id,owner_username:e.owner_username,owner_email:e.owner_email,owner_deleted_at:e.owner_deleted_at??null},M.value=!0}function me(e){I.value={id:e.id,name:e.name},O.value=!0}const ve=R(()=>o.value==="orphan"?"Пространства, чей владелец удалён или не задан":o.value==="archived"?"Архивированные пространства":"Все пространства платформы — управление владельцами и архивом"),pe=[{key:"space_name",header:"НаÐ
1·Ð²Ð°Ð½Ð¸Ðµ",width:"260px",minWidth:"200px",sortable:!0,sortKey:"name"},{key:"owner",header:"Владелец",width:"240px",minWidth:"200px"},{key:"members_count",header:"Members",width:"90px",minWidth:"80px",textAlign:"center"},{key:"profiles_count",header:"Профили",width:"90px",minWidth:"80px",textAlign:"center"},{key:"status",header:"Статус",width:"120px",minWidth:"100px",sortable:!0,sortKey:"status"},{key:"date_meta",header:"Дата",width:"200px",minWidth:"160px"},{key:"actions",header:"",width:"110px",minWidth:"110px",maxWidth:"110px"}],_e=R(()=>d.value.map(e=>({id:e.id,name:e.name,owner_id:e.owner_id,owner_username:e.owner_username,owner_email:e.owner_email,owner_deleted_at:e.owner_deleted_at,members_count:e.members_count,profiles_count:e.profiles_count,created_at:e.created_at??void 0,archived_at:e.archived_at})));async function E(e=!0){var l,X;if(e)c.value=!0,b=0,h.value=!1;else{if(c.value||p.value||h.value)return;p.value=!0}V.value=null;try{const z={limit:oe,offset:b,sort:`${y.value}_${A.value}`};o.value==="orphan"?z.orphan=!0:o.value==="archived"?z.archived=!0:z.archived=!1,v.value.trim()&&(z.q=v.value.trim());const{data:a}=await Z.get("/admin/spaces",z),B=a.spaces??[];d.value=e?B:[...d.value,...B],x.value=a.total??(e?B.length:d.value.length),h.value=B.length<oe,b+=B.length}catch(z){const a=z;V.value=((X=(l=a==null?void 0:a.response)==null?void 0:l.data)==null?void 0:X.detail)??"Не удалось загрузить пространства",e&&(d.value=[],x.value=0)}finally{c.value=!1,p.value=!1}}function fe(){return E(!1)}function W(){E(!0)}function he(e){y.value=e.key,A.value=e.dir,W()}ee(o,()=>{W()});function be(){D&&clearTimeout(D),D=setTimeout(()=>W(),400)}function we(){v.value="",W()}function ye(e){S.value=e,M.value=!0}function ge(e){I.value=e,O.value=!0}function ke(){var e;M.value=!1,E(),U.value&&((e=K.value)==null||e.refetch())}function xe(){var e;O.value=!1,E(),U.value&&((e=K.value)==null||e.refetch())}function te(e){return e.archived_at?!1:!e.owner_id||!!e.owner_deleted_at}function $e(e){return e.archived_at?"badge--neutral":te(e)?"badge--warning":"badge--success"}function Ve(e){return e.archived_at?"Архив":te(e)?"Без владельца":"Активен"}function Ae(e){return e.slice(0,8)}function j(e){return e?new Date(e).toLocaleDateString("ru-RU",{day:"2-digit",month:"2-digit",year:"2-digit"}):"—"}Ie(()=>{E()});let F=null;return Fe({"/admin/spaces/updated":()=>{F&&clearTimeout(F),F=setTimeout(()=>E(),500)}}),Ue(()=>{D&&clearTimeout(D),F&&clearTimeout(F)}),(e,l)=>{var z;const X=Be("tooltip");return n(),r("div",ya,[t("div",ga,[t("div",ka,[l[6]||(l[6]=t("h1",{class:"admin-
1page__title"},"Пространства",-1)),t("p",xa,u(ve.value),1)]),t("button",{class:"refresh-btn",disabled:c.value,onClick:W},[f(C(Re),{size:15,class:se({spin:c.value})},null,8,["class"])],8,$a)]),f(Ne,{modelValue:o.value,"onUpdate:modelValue":l[0]||(l[0]=a=>o.value=a),tabs:$.value,variant:"underline",size:"sm","aria-label":"Фильтр пространств",class:"filter-tabs-strip"},null,8,["modelValue","tabs"]),t("div",Va,[t("div",Aa,[f(C(Le),{size:15,class:"search-icon"}),N(t("input",{"onUpdate:modelValue":l[1]||(l[1]=a=>v.value=a),type:"text",class:"search-input",placeholder:"Поиск по названию или владельцу",onInput:be},null,544),[[J,v.value]]),v.value?(n(),r("button",{key:0,class:"search-clear",onClick:we,"aria-label":"Очистить поиск"},[f(C(ie),{size:13})])):k("",!0)])]),V.value?(n(),H(Pe,{key:0,description:V.value,inline:"",size:"sm","show-retry":"",class:"error-state-banner",onRetry:W},null,8,["description"])):k("",!0),f(We,{"aria-label":"Рабочие пространства",columns:pe,data:_e.value,isLoading:c.value||p.value,isEnd:h.value,loadMore:fe,sortKey:y.value,sortDir:A.value,onRowClick:_,onSort:he},{space_name:g(({row:a})=>[t("div",Sa,[t("div",Ca,u(a.name||"—"),1),t("div",Ta,[t("code",null,u(Ae(a.id)),1)])])]),owner:g(({row:a})=>[a.owner_email||a.owner_username?(n(),r("div",za,[t("div",Da,u(a.owner_username||"—"),1),t("div",Ma,u(a.owner_email),1)])):(n(),r("div",Oa,[f(C(le),{size:13}),l[7]||(l[7]=t("span",null,"Нет владельца",-1))]))]),members_count:g(({row:a})=>[a.members_count!=null?(n(),r("span",Ia,u(a.members_count),1)):(n(),r("span",Ua,"—"))]),profiles_count:g(({row:a})=>[a.profiles_count!=null?(n(),r("span",Ba,u(a.profiles_count),1)):(n(),r("span",Ra,"—"))]),status:g(({row:a})=>[t("span",{class:se(["badge",$e(a)])},u(Ve(a)),3)]),date_meta:g(({row:a})=>[t("div",La,[a.archived_at?(n(),r("span",Ea,"Архив: "+u(j(a.archived_at)),1)):a.owner_deleted_at?(n(),r("span",Wa,"Owner удалён: "+u(j(a.owner_deleted_at)),1)):a.created_at?(n(),r("span",Na,"Создан: "+u(j(a.created_at)),1)):(n(),r("span",Pa,"—"))])]),actions:g(({row:a})=>[t("div",{class:"row-actions",onClick:l[2]||(l[2]=G(()=>{},["stop"]))},[a.archived_at?k("",!0):N((n(),H(ne,{key:0,variant:"outline",color:"secondary",size:"sm","icon-only":"","aria-label":a.owner_email?"Сменить владельца":"Назначить владельца",onClick:G(B=>ye(a),["stop"])},{icon:g(()=>[f(C(Ee),{size:14})]),_:2},1032,["aria-label","onClick"])),[[X,a.owner_email?"Сменить владельца":"Назначить владельца"]]),a.archived_at?k("",!0):N((n(),H(ne,{key:1,variant:"outline",color:"danger",size:"sm","icon-only":"","aria-label":"Архивировать",onClick:G(B=>ge(a),["stop"])},{icon:g(()=>[f(C(ue),{size:14})]),_:2},1032,["onClick"])),[[X,"Архивировать"]])])]),_:1},8,["data","isLoading","isEnd","sortKey","sortDir"]),f(da,{modelValue:M.value,"onUpdate:modelValue":l[3]||(l[3]=a=>M.value=a),space:S.value?{id:S.value.id,name:S.value.name??""}:null,"current-owner":(z=S.value)!=null&&z.owner_id?{id:S.value.owner_id,username:S.value.owner_username,email:S.value.owner_email,deleted_at:S.value.owner_deleted_at??null}:null,onAssigned:ke},null,8,["modelValue","space","current-owner"]),f(wa,{modelValue:O.value,"onUpdate:modelValue":l[4]||(l[4]=a=>O.value=a),space:I.value?{id:I.value.id,name:I.value.name??""}:null,onArchived:xe},null,8,["modelValue","space"]),f(Ke,{ref_key:"detailDrawerRef",ref:K,modelValue:U.value,"onUpdate:modelValue":l[5]||(l[5]=a=>U.value=a),"space-id":T.value,"has-prev":Q.value,"has-next":i.value,onPrev:m,onNext:w,onAssignOwner:ce,onArchive:me},null,8,["modelValue","space-id","has-prev","has-next"])])}}}),ot=ae(Ka,[["__scopeId","data-v-83d2b555"]]);export{ot as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.