PageSourceSearch

https://hub.avibox.ru/assets/ReviewsAutoReply-BrRF4nLU.js

js avibox.ru collected 2026-09-24 15:12:31 UTC 38,625 bytes, 1 lines download raw bytes

1import{dI as ue,ed as f,dw as O,eE as X,e5 as Le,e3 as _e,e7 as o,dB as u,aL as E,dy as t,dz as x,dF as m,eG as S,em as p,dZ as q,dA as C,dE as I,ef as H,er as c,cH as te,d$ as De,eH as se,eA as $e,ei as ze,dY as Se,eC as Ue,R as xe,bH as Oe,cV as Be,cU as qe,cm as Ge,ap as ge,cg as Ce,eJ as ye,ej as We,cl as He,aO as Ze,cq as Qe,b1 as Ye}from"./vendor-DUoYKxKf.js";import{_ as je}from"./AiIcon.vue_vue_type_script_setup_true_lang-815rqO-m.js";import{A as Je,P as Ke}from"./ProfileNavigator-2ffHiiAZ.js";import{P as Xe}from"./ProfileAvatar-B9TVcWCe.js";import{A as et}from"./Accordion-I8OKUhyI.js";import{e as re,a as ie,T as Me,g as L,d as pe,ab as Ve,P as ve}from"./index-BcPf-nBI.js";import{N as be}from"./NoDataMessage-DJLo0zyQ.js";import{S as ce}from"./Switch-BnZPS_Tw.js";import{T as ne}from"./Tooltip-C2AfkjJp.js";import{E as tt}from"./ErrorState-D7_jXPui.js";import{N as st}from"./NoProfilesPlaceholder-C3zTMGVo.js";import{b as at}from"./profilesStatus-BWXj4f08.js";import{C as Ie}from"./Card-CNz1-7s7.js";import{A as lt}from"./AutoSaveStatus-CM3Wbv2m.js";import{S as ot}from"./Select-BKc08Xyh.js";import{u as fe}from"./useToast-DR0vBTf1.js";import{T as it}from"./Table-BWHKNJiS.js";import{L as nt}from"./LoadErrorState-CkL7iwp_.js";import{S as Ae}from"./StatusPill-BD38qi8e.js";import{S as rt}from"./SegmentedControl-Ca0HZE_7.js";import{u as ut}from"./useDateTimeFormat-CDqaTdTr.js";import{u as Fe}from"./useFocusTarget-CkMkyJfU.js";import{t as he}from"./profilePages-hR2EFAHB.js";import{u as dt}from"./useIntroPopup-joFO-7tM.js";import"./vue-core-BW8FD41h.js";import"./UnreadBadge-DVxpEG74.js";import"./requestGeneration-BS8fAcOb.js";import"./avatar-placeholder-MmQ9fg6u.js";import"./StatusAccent-ajQu-1gk.js";import"./EmptyState.vue_vue_type_script_setup_true_lang-DjSaEmUX.js";import"./CopyButton.vue_vue_type_script_setup_true_lang-DUqHItUu.js";import"./clipboard-Dw6gfW3R.js";import"./usePersistentSetting-CkvRMRs-.js";const ct=[{id:"company",name:"Компания"},{id:"male",name:"Мужчина"},{id:"female",name:"Женщина"}],vt=[{id:"professional",name:"Профессиональный"},{id:"friendly",name:"Дружелюбный"},{id:"formal",name:"Формальный"}],_t=[{id:0,name:"Без лимита"},{id:5,name:"5 ответов"},{id:10,name:"10 ответов"},{id:20,name:"20 ответов"},{id:50,name:"50 ответов"},{id:100,name:"100 ответов"}],Pe={pending:{label:"В очереди",color:"var(--color-text-muted)"},generating:{label:"Генерация",color:"var(--color-info)"},sending:{label:"Отправка",color:"var(--color-info)"},sent:{label:"Отправлен",color:"var(--color-success)"},failed:{label:"Ошибка",color:"var(--color-danger)"},skipped:{label:"Пропущен",color:"var(--color-text-muted)"}},pt={class:"settings-container"},ft={class:"analytics-row"},mt={class:"analytics-col analytics-col--left"},gt={class:"stats-grid"},yt={class:"stat-item"},bt={class:"stat-value"},ht={class:"stat-item"},wt={class:"stat-value"},kt={class:"stat-item"},$t={key:0,class:"stat-item"},St={class:"stat-value"},xt={key:0,class:"unanswered-breakdown"},Ct={class:"unanswered-tiles"},It={class:"unanswered-tile__star"},At={class:"unanswered-tile__count"},Pt={key:1,class:"backlog-compact"},Tt={class:"analytics-col analytics-col--right"},Et={class:"profile-card"},Nt=["src"],Rt={key:1,class:"profile-card__avatar profile-card__avatar--placeholder"},Lt={class:"profile-card__info"},zt={class:"profile-card__name"},Ut={class:"profile-card__rating"},Mt={class:"profile-card__score"},Vt={class:"profile-card__reviews"},Ft={class:"rating-overview"},Dt={class:"rating-overview__avg"},Ot={class:"rating-overview__score"},Bt={class:"rating-overview__stars"},qt={class:"rating-overview__total"},Gt={class:"rating-overview__bars"},Wt={class:"rating-bar__label"},Ht={class:"rating-bar__track"},Zt={class:"rating-bar__count"},Qt={key:0,class:"rating-overview__hint"},Yt={class:"settings-grid"},jt={class:"settings-grid__item"},Jt={class:"setting-info"},Kt={class:"radio-group"},Xt=["value"],es={class:"settings-grid__item"},ts={class:"setting-info"},ss={class:"radio-group"},as=["value"],ls={class:"settings-grid__item"},os={class:"setting-info"},is={class:"rating-checkboxes"},ns=["checked","onChange"],rs={class:"star-num"},us={class:"settings-grid__item"},ds={class:"setting-info"},cs={class:"autosave-status"},vs=ue({__name:"AutoReplySettings",props:{profileId:{},profileName:{},profileAvatar:{}},emits:["update:enabled"],setup(J,{expose:Y,emit:B}){function V(s){switch(s){case"male":case"female":case"company":return s;default:return"company"}}function W(s){switch(s){case"professional":case"friendly":case"formal":return s;default:return"professional"}}const N=J,_=B,{toast:A,showToast:v}=fe(),P=f(!0),h=f(""),T=f(!1);let $=null,z=null,U=!1;const d=f({is_enabled:!1,sender_gender:"company",response_tone:"professional",rating_filter:31,daily_limit:null}),b=f({sent_today:0,sent_total:0,in_queue:0,failed_count:0,daily_limit:null,daily_remaining:null,ratings:{star_1:0,star_2:0,star_3:0,star_4:0,star_5:0,total:0,unanswered:0,unanswered_1:0,unanswered_2:0,unanswered_3:0,unanswered_4:0,unanswered_5:0}}),n=_t.map(s=>({id:s.id,name:s.name})),a=f(n[0]),i=s=>(d.value.rating_filter&1<<s-1)!==0,w=s=>{d.value.rating_filter^=1<<s-1,d.value.rating_filter===0&&(d.value.rating_filter=1<<s-1)},y=s=>{const e=`star_${s}`;return b.value.ratings[e]??0},k=s=>{const e=b.value.ratings.total;return e?y(s)/e*100:0},M=s=>{const e=`unanswered_${s}`;return b.value.ratings[e]??0},R=O(()=>{const s=b.value.ratings;return s.total?((s.star_1*1+s.star_2*2+s.star_3*3+s.star_4*4+s.star_5*5)/s.total).toFixed(1):null});X(a,s=>{d.value.daily_limit=s.id===0?null:s.id});const Z=()=>{const s=n.find(e=>d.value.daily_limit===null?e.id===0:e.id===d.value.daily_limit);a.value=s||n[0]};X(()=>({sender_gender:d.value.sender_gender,response_tone:d.value.response_tone,rating_filter:d.value.rating_filter,daily_limit:d.value.daily_limit}),()=>{U&&(z&&clearTimeout(z),z=setTimeout(()=>
1oe(),500))},{deep:!0});let Q=null;const K=()=>{Q||(Q=setInterval(async()=>{try{const s=await L.get(`/profiles/${N.profileId}/reviews/auto-reply/stats`);b.value=s.data,s.data.in_queue===0&&G()}catch{G()}},5e3))},G=()=>{Q&&(clearInterval(Q),Q=null)};Le(()=>{z&&clearTimeout(z),$&&clearTimeout($),G()}),Y({toggleEnabled:async s=>{d.value.is_enabled=s,_("update:enabled",s),await oe()},syncEnabled:s=>{d.value.is_enabled=s}});const le=async()=>{P.value=!0;try{const[s,e]=await Promise.all([L.get(`/profiles/${N.profileId}/reviews/auto-reply/settings`),L.get(`/profiles/${N.profileId}/reviews/auto-reply/stats`)]),l=s.data;d.value={is_enabled:l.is_enabled,sender_gender:V(l.sender_gender),response_tone:W(l.response_tone),rating_filter:l.rating_filter,daily_limit:l.daily_limit},Z(),_("update:enabled",l.is_enabled),U=!0,b.value=e.data,e.data.in_queue>0&&K()}catch{}finally{P.value=!1}},oe=async()=>{h.value="saving";try{const s={is_enabled:d.value.is_enabled,sender_gender:d.value.sender_gender,response_tone:d.value.response_tone,rating_filter:d.value.rating_filter,daily_limit:d.value.daily_limit};await L.put(`/profiles/${N.profileId}/reviews/auto-reply/settings`,s),h.value="saved",$&&clearTimeout($),$=setTimeout(()=>{h.value=""},2e3);const e=await L.get(`/profiles/${N.profileId}/reviews/auto-reply/stats`);b.value=e.data,e.data.in_queue>0&&K()}catch{h.value="error",$&&clearTimeout($),$=setTimeout(()=>{h.value=""},3e3),v("Ошибка сохранения настроек")}},g=async()=>{T.value=!0;try{const s=await L.post(`/profiles/${N.profileId}/reviews/auto-reply/enqueue-backlog`);v(s.data.message||`${s.data.queued_count} отзывов в очереди`);const e=await L.get(`/profiles/${N.profileId}/reviews/auto-reply/stats`);b.value=e.data,e.data.in_queue>0&&K()}catch{v("Ошибка постановки в очередь")}finally{T.value=!1}};return _e(le),(s,e)=>(o(),u(E,null,[t("div",pt,[P.value?(o(),x(re,{key:0})):(o(),u(E,{key:1},[m(Ie,{class:"settings-section"},{default:S(()=>[t("div",ft,[t("div",mt,[e[11]||(e[11]=t("h5",{class:"subsection-title"},"Статистика автоответов",-1)),t("div",gt,[t("div",yt,[t("span",bt,p(b.value.sent_today),1),e[4]||(e[4]=t("span",{class:"stat-label"},"Сегодня",-1))]),t("div",ht,[t("span",wt,p(b.value.sent_total),1),e[5]||(e[5]=t("span",{class:"stat-label"},"Всего",-1))]),t("div",kt,[t("span",{class:q(["stat-value stat-value--queue",{"has-items":b.value.in_queue>0}])},p(b.value.in_queue),3),e[6]||(e[6]=t("span",{class:"stat-label"},"В очереди",-1))]),b.value.daily_limit?(o(),u("div",$t,[t("span",St,p(b.value.daily_remaining??"—"),1),e[7]||(e[7]=t("span",{class:"stat-label"},"Осталось",-1))])):C("",!0)]),b.value.ratings.unanswered>0?(o(),u("div",xt,[e[9]||(e[9]=t("h5",{class:"subsection-title"},[I("Без ответа "),t("span",{class:"subsection-hint"},"(отзывы, на которые ещё не отправлен ответ)")],-1)),t("div",Ct,[(o(),u(E,null,H([5,4,3,2,1],l=>t("div",{key:l,class:q(["unanswered-tile",[`unanswered-tile--${l}`,{"has-items":M(l)>0}]])},[t("span",It,[I(p(l)+" ",1),m(c(te),{size:12,class:"unanswered-tile__star-icon"})]),t("span",At,p(M(l)),1)],2)),64))]),m(ie,{isActive:T.value,color:"secondary",onClick:g},{text:S(()=>e[8]||(e[8]=[I("Обработать неотвеченные")])),_:1},8,["isActive"])])):(o(),u("div",Pt,e[10]||(e[10]=[t("span",{class:"status-badge status-badge--success"},"✓ Все отзывы отвечены",-1)])))]),t("div",Tt,[e[14]||(e[14]=t("h5",{class:"subsection-title"},"Профиль Авито",-1)),t("div",Et,[s.profileAvatar?(o(),u("img",{key:0,src:s.profileAvatar,alt:"Аватар",class:"profile-card__avatar"},null,8,Nt)):(o(),u("div",Rt,p((s.profileName||"?").charAt(0)),1)),t("div",Lt,[t("span",zt,p(s.profileName||"—"),1),t("div",Ut,[R.value?(o(),u(E,{key:0},[t("span",Mt,p(R.value),1),m(c(te),{size:14,class:"profile-card__star"})],64)):C("",!0),t("span",Vt,p(b.value.ratings.total)+" отзывов",1)])])]),t("div",Ft,[t("div",Dt,[R.value?(o(),u(E,{key:0},[t("span",Ot,p(R.value),1),t("div",Bt,[(o(),u(E,null,H(5,l=>m(c(te),{key:l,size:16,class:q(["rating-overview__star-icon",{filled:l<=Math.round(Number(R.value))}])},null,8,["class"])),64))])],64)):(o(),u(E,{key:1},[e[12]||(e[12]=t("span",{class:"rating-overview__score rating-overview__score--empty"},"—",-1)),e[13]||(e[13]=t("span",{class:"rating-overview__no-rating"},"Нет рейтинга",-1))],64)),t("span",qt,p(b.value.ratings.total)+" отзывов",1)]),t("div",Gt,[(o(),u(E,null,H([5,4,3,2,1],l=>t("div",{key:l,class:"rating-bar"},[t("span",Wt,p(l),1),t("div",Ht,[t("div",{class:q(["rating-bar__fill",`rating-bar__fill--${l}`]),style:De({width:`${k(l)}%`})},null,6)]),t("span",Zt,p(y(l)),1)])),64))])]),R.value?C("",!0):(o(),u("p",Qt," Чтобы рейтинг появился на Авито, получите не менее 10 отзывов "))])])]),_:1}),m(Ie,{class:"settings-section"},{default:S(()=>[e[23]||(e[23]=t("h4",{class:"section-title"},"Параметры ответов",-1)),t("div",Yt,[t("div",jt,[t("div",Jt,[e[16]||(e[16]=t("span",{class:"setting-label"},"От чьего лица",-1)),m(ne,{direction:"bottom",width:260},{default:S(()=>e[15]||(e[15]=[I(" Определяет стиль обращения в ответах: мужской, женский или от лица компании ")])),_:1})]),t("div",Kt,[(o(!0),u(E,null,H(c(ct),l=>(o(),u("label",{key:l.id,class:q(["radio-option",{active:d.value.sender_gender===l.id}])},[se(t("input",{type:"radio",value:l.id,"onUpdate:modelValue":e[0]||(e[0]=r=>d.value.sender_gender=r),class:"radio-input"},null,8,Xt),[[$e,d.value.sender_gender]]),I(" "+p(l.name),1)],2))),128))])]),t("div",es,[t("div",ts,[e[18]||(e[18]=t("span",{class:"setting-label"}
1,"Тон ответа",-1)),m(ne,{direction:"bottom",width:260},{default:S(()=>e[17]||(e[17]=[I(" Стиль общения: профессиональный, дружелюбный или формальный ")])),_:1})]),t("div",ss,[(o(!0),u(E,null,H(c(vt),l=>(o(),u("label",{key:l.id,class:q(["radio-option",{active:d.value.response_tone===l.id}])},[se(t("input",{type:"radio",value:l.id,"onUpdate:modelValue":e[1]||(e[1]=r=>d.value.response_tone=r),class:"radio-input"},null,8,as),[[$e,d.value.response_tone]]),I(" "+p(l.name),1)],2))),128))])]),t("div",ls,[t("div",os,[e[20]||(e[20]=t("span",{class:"setting-label"},"Рейтинги",-1)),m(ne,{direction:"bottom",width:320},{default:S(()=>e[19]||(e[19]=[I(" Выберите на какие оценки автоматически отвечать. Отзывы с оценкой 1-3★ обрабатываются с повышенным вниманием: AI анализирует текст отзыва и приложенные фотографии, чтобы понять конкретную проблему покупателя и дать персонализированный ответ ")])),_:1})]),t("div",is,[(o(),u(E,null,H(5,l=>t("label",{key:l,class:q(["rating-checkbox",{checked:i(l)}])},[t("input",{type:"checkbox",checked:i(l),onChange:r=>w(l),class:"checkbox-input"},null,40,ns),m(c(te),{size:16,class:"star-icon"}),t("span",rs,p(l),1)],2)),64))])]),t("div",us,[t("div",ds,[e[22]||(e[22]=t("span",{class:"setting-label"},"Лимит в день",-1)),m(ne,{direction:"bottom",width:260},{default:S(()=>e[21]||(e[21]=[I(" Максимальное количество автоответов в сутки. «Без лимита» — без ограничений ")])),_:1})]),m(ot,{modelValue:a.value,"onUpdate:modelValue":e[2]||(e[2]=l=>a.value=l),options:c(n),"aria-label":"Лимит автоответов в день",class:"limit-select"},null,8,["modelValue","options"])])]),t("div",cs,[m(lt,{status:h.value},null,8,["status"])])]),_:1})],64))]),m(Me,{visible:c(A).visible,text:c(A).text,duration:2500,"onUpdate:visible":e[3]||(e[3]=l=>c(A).visible=l)},null,8,["visible","text"])],64))}}),Te=pe(vs,[["__scopeId","data-v-c2d65003"]]),_s={class:"logs-container"},ps={class:"log-cards"},fs=["data-focus-id"],ms={class:"log-card__header"},gs={class:"log-card__date"},ys={class:"log-card__body"},bs={class:"log-card__text"},hs={class:"log-card__footer"},ws={key:0,class:"log-card__meta"},ks=["data-focus-id"],Ee=20,$s=ue({__name:"AutoReplyLogs",props:{profileId:{}},emits:["focus-not-found"],setup(J,{emit:Y}){const B=J,V=Y,{isMobile:W,isTablet:N}=Ve(),{formatFullDate:_}=ut(),A=O(()=>W.value||N.value),v=[{id:"all",name:"Все"},{id:"sent",name:"Отправленные"},{id:"pending",name:"В очереди"}],P={pending:"muted",generating:"info",sending:"info",sent:"success",failed:"danger",skipped:"muted"};function h(g){switch(g){case"pending":case"generating":case"sending":case"sent":case"failed":case"skipped":return g;default:return"pending"}}function T(g){return{...g,status:h(g.status)}}const $=f([]),z=f({all:0,sent:0,pending:0}),U=f(1),d=f("all"),b=f(!0),n=f(!1),a=f(!1),i=f(!1),w=f(null),{target:y,focusElement:k}=Fe(),M=O(()=>v.map(g=>({value:g.id,label:g.name,count:z.value[g.id]??0}))),R=O(()=>[{header:"Статус",key:"status",width:"100px",minWidth:"100px",maxWidth:"100px",textAlign:"center"},{header:"Ответ",key:"generated_text",minWidth:"300px"},{header:"Стоимость",key:"ai_cost_rub",width:"100px",minWidth:"100px",maxWidth:"100px",textAlign:"center"},{header:"Дата",key:"created_at",width:"140px",minWidth:"140px",maxWidth:"140px"}]),Z=async(g=!1)=>{g?(U.value=1,$.value=[],a.value=!1,b.value=!0):n.value=!0,i.value=!1;try{const s={page:U.value,page_size:Ee};d.value!=="all"&&(s.status=d.value);const l=(await L.get(`/profiles/${B.profileId}/reviews/auto-reply/logs`,s)).data;$.value.push(...l.items.map(T)),($.value.length>=l.total||l.items.length<Ee)&&(a.value=!0),U.value++}catch{i.value=!0}finally{b.value=!1,n.value=!1}},Q=async()=>{n.value||a.value||await Z()},K=async()=>{await Z($.value.length===0&&U.value===1)},G=async()=>{const g=y.value;if((g==null?void 0:g.type)==="review"){if($.value.some(s=>String(s.review_id)===g.id)){w.value=null,await k();return}if(!(b.value||n.value)&&!i.value){if(!a.value){await Z();return}w.value!==g.id&&(w.value=g.id,V("focus-not-found",g.id))}}};X([y,()=>$.value.length,b,n,a,i],()=>{G()},{immediate:!0,flush:"post"}),X(y,g=>{w.value=null,(g==null?void 0:g.type)==="review"&&d.value!=="all"&&(d.value="all")}),X(d,()=>Z(!0));const ae=f(null);let F=null;const le=()=>{F==null||F.disconnect(),ae.value&&(F=new IntersectionObserver(g=>{g[0].isIntersecting&&!n.value&&!a.value&&Q()},{rootMargin:"200px"}),F.observe(ae.value))};X(A,async g=>{g?(await Se(),le()):F==null||F.disconnect()}),X(()=>$.value.length,async()=>
1{A.value&&(await Se(),le())});const oe=async()=>{try{const s=(await L.get(`/profiles/${B.profileId}/reviews/auto-reply/stats`)).data;z.value={all:s.sent_total+s.in_queue,sent:s.sent_total,pending:s.in_queue}}catch{}};return _e(()=>{Z(!0),oe()}),Le(()=>{F==null||F.disconnect()}),(g,s)=>{const e=ze("tooltip");return o(),u("div",_s,[b.value?(o(),x(re,{key:0})):(o(),u(E,{key:1},[m(rt,{modelValue:d.value,"onUpdate:modelValue":s[0]||(s[0]=l=>d.value=l),options:M.value,variant:"pill","aria-label":"Фильтр по статусу"},null,8,["modelValue","options"]),i.value?(o(),x(nt,{key:0,inline:"",message:"Не удалось загрузить журнал автоответов",hint:"Проверьте подключение и попробуйте ещё раз",onRetry:K})):$.value.length===0&&!n.value?(o(),x(be,{key:1,"message-text":"Нет записей"})):C("",!0),A.value?(o(),u(E,{key:2},[t("div",ps,[(o(!0),u(E,null,H($.value,l=>(o(),u("div",{key:l.id,class:"log-card","data-focus-type":"review","data-focus-id":l.review_id},[t("div",ms,[m(Ae,{tone:P[l.status],size:"md",label:c(Pe)[l.status].label},null,8,["tone","label"]),t("span",gs,p(c(_)(l.created_at)),1)]),t("div",ys,[t("p",bs,p(l.generated_text||"—"),1)]),t("div",hs,[l.ai_cost_rub!==null?(o(),u("span",ws,p(l.ai_cost_rub.toFixed(2))+" ₽ ",1)):C("",!0)])],8,fs))),128))]),t("div",{ref_key:"sentinelRef",ref:ae,class:"sentinel"},null,512),n.value?(o(),x(re,{key:0})):C("",!0)],64)):(o(),x(it,{key:3,"aria-label":"Журнал автоответов на отзывы",columns:R.value,data:$.value,isLoading:n.value,isEnd:a.value,loadMore:Q,autoHeight:""},{status:S(({row:l})=>[m(Ae,{tone:P[l.status],size:"md",label:c(Pe)[l.status].label},null,8,["tone","label"])]),generated_text:S(({row:l})=>[se((o(),u("span",{class:"cell-text-truncate","data-focus-type":"review","data-focus-id":l.review_id},[I(p(l.generated_text||"—"),1)],8,ks)),[[e,String(l.generated_text||"")]])]),ai_cost_rub:S(({row:l})=>[I(p(l.ai_cost_rub!==null&&l.ai_cost_rub!==void 0?Number(l.ai_cost_rub).toFixed(2)+" ₽":"—"),1)]),created_at:S(({row:l})=>[I(p(c(_)(String(l.created_at||""))),1)]),_:1},8,["columns","data","isLoading","isEnd"]))],64))])}}}),Ss=pe($s,[["__scopeId","data-v-6e343620"]]),xs={class:"copy-settings"},Cs={class:"g-multiselect-check"},Is={class:"copy-settings__list"},As=["onClick"],Ps={class:"g-multiselect-check"},Ts=["src"],Es={key:1,class:"copy-settings__avatar copy-settings__avatar--placeholder"},Ns={class:"copy-settings__profile-info"},Rs={key:0,class:"copy-settings__title"},Ls={class:"copy-settings__name"},zs={key:0,class:"g-multiselect-empty"},Us=["disabled"],Ms=ue({__name:"CopySettingsPopup",props:{sourceProfileId:{}},emits:["close","copied"],setup(J,{emit:Y}){const B=J,V=Y,{showToast:W}=fe(),N=f(!0),_=f(!1),A=f([]),v=f(new Set),P=f(""),h=O(()=>{if(!P.value.trim())return A.value;const n=P.value.toLowerCase();return A.value.filter(a=>a.name.toLowerCase().includes(n)||a.title&&a.title.toLowerCase().includes(n))}),T=O(()=>h.value.length>0&&h.value.every(n=>v.value.has(n.id))),$=O(()=>!T.value&&h.value.some(n=>v.value.has(n.id))),z=n=>{const a=new Set(v.value);a.has(n)?a.delete(n):a.add(n),v.value=a},U=()=>{const n=h.value.map(a=>a.id);if(T.value){const a=new Set(v.value);for(const i of n)a.delete(i);v.value=a}else{const a=new Set(v.value);for(const i of n)a.add(i);v.value=a}},d=async()=>{N.value=!0;try{let n=1;const a=[];for(;;){const i=await L.get("/profiles",{page:n,size:50,profile_status:"active",detailed:!1});for(const w of i.data.profiles)w.id!==B.sourceProfileId&&a.push(he(w));if(n>=i.data.meta.pages)break;n++}a.sort((i,w)=>{const y=i.title||"",k=w.title||"";if(!y&&k)return 1;if(y&&!k)return-1;const M=parseFloat(y),R=parseFloat(k);return!isNaN(M)&&!isNaN(R)?M-R:y.localeCompare(k,"ru",{numeric:!0})}),A.value=a}finally{N.value=!1}},b=async()=>{if(v.value.size!==0){_.value=!0;try{const n={target_profile_ids:[...v.value]},a=await L.post(`/profiles/${B.sourceProfileId}/reviews/auto-reply/copy-settings`,n);V("copied",a.data.copied_count),V("close")}catch{W("Ошибка копирования настроек")}finally{_.value=!1}}};return _e(d),(n,a)=>(o(),x(ve,{onClPopup:a[1]||(a[1]=i=>V("close")),maxWidth:"480px",reveal:!N.value},{title:S(()=>a[2]||(a[2]=[I("Копировать настройки")])),default:S(()=>[t("div",xs,[a[3]||(a[3]=t("p",{class:"copy-settings__hint"},[I(" Выберите профили, на которые скопировать настройки автоответов "),t("span",{class:"copy-settings__hint-note"},"(статус включения не копируется)")],-1)),se(t("input",{"onUpdate:modelValue":a[0]||(a[0]=i=>P.value=i),type:"text",class:"copy-settings__search",placeholder:"Найти профиль..."},null,512),[[Ue,P.value]]),t("div",{class:q(["g-multiselect-item g-multiselect-select-all",{"g-multiselect-item--checked":T.value}]),onClick:U},[t("span",Cs,[T.value?(o(),x(c(xe),{key:0,size:12})):$.value?(o(),x(c(Oe),{key:1,size:12})):C("",!0)]),t("span",null,"Выбрать все ("+p(h.value.length)+")",1)],2),t("div",Is,[(o(!0),u(E,null,H(h.value,i=>(o(),u("div",{key:i.id,class:q(["g-multiselect-item",{"g-multiselect-item--checked":v.value.has(i.id)}]),onClick:w=>z(i.id)},[t("span",Ps,[v.value.has(i.id)?(o(),x(c(xe),{key:0,size:12})):C("",!0)]),i.avatar_url?(o(),u("img",{key:0,src:i.avatar_url,alt:"",class:"copy-settings__avatar"},null,8,Ts)):(o(),u("span",Es,p((i.name||"?").charAt(0)),1)),t("div",Ns,[i.title?(o(),u("span",Rs,p(i.title),1)):C("",!0),t("span",Ls,p(i.name),1)])],10,As))),128)),h.value.length===0?(o(),u("div",zs," Нет профилей ")):C("",!0)]),t("button",{class:"g-multiselect-action-btn",disabled:v.value.size===0||_.value,onClick:b},p(_.value?"Копирование...":`Скопировать${v.value.size>0?` (${v.value.size})`:""}`),9,Us)])]),_:1},8,["reveal"]))}}),Ne=pe(Ms,[["__scopeId","data-v-fa754b66"]]),Vs={class:"manage-autoreply"},Fs={class:"manage-autoreply__bulk-actions"},Ds=["disabled"],Os=["disabled"],Bs={class:"manage-autoreply__counter"},qs={class:"manage-autoreply__list"},Gs={class:"manage-autoreply__profile"}
1,Ws=["src"],Hs={key:1,class:"manage-autoreply__avatar manage-autoreply__avatar--placeholder"},Zs={class:"manage-autoreply__profile-info"},Qs={key:0,class:"manage-autoreply__title"},Ys={class:"manage-autoreply__name"},js={key:0,class:"g-multiselect-empty"},Js=ue({__name:"ManageAutoReplyPopup",props:{currentProfileId:{}},emits:["close","toggled"],setup(J,{emit:Y}){const B=J,V=Y,{showToast:W}=fe(),N=f(!0),_=f(!1),A=f([]),v=f(new Map),P=f(""),h=O(()=>{if(!P.value.trim())return A.value;const n=P.value.toLowerCase();return A.value.filter(a=>a.name.toLowerCase().includes(n)||a.title&&a.title.toLowerCase().includes(n))}),T=O(()=>h.value.filter(n=>v.value.get(n.id)).length),$=O(()=>h.value.length>0&&h.value.every(n=>v.value.get(n.id))),z=O(()=>h.value.length>0&&h.value.every(n=>!v.value.get(n.id))),U=async(n,a)=>{const i=v.value.get(n),w=new Map(v.value);w.set(n,a),v.value=w;try{const y={is_enabled:a};await L.put(`/profiles/${n}/reviews/auto-reply/settings`,y),n===B.currentProfileId&&V("toggled",n,a)}catch{const y=new Map(v.value);y.set(n,i??!1),v.value=y,W("Ошибка переключения")}},d=async n=>{const a=h.value.map(y=>y.id);if(a.length===0)return;_.value=!0;const i=new Map(v.value),w=new Map(v.value);for(const y of a)w.set(y,n);v.value=w;try{const y={profile_ids:a,is_enabled:n},k=await L.post("/reviews/auto-reply/bulk-toggle",y);W(k.data.message),a.includes(B.currentProfileId)&&V("toggled",B.currentProfileId,n)}catch{v.value=i,W("Ошибка массового переключения")}finally{_.value=!1}};return _e(async()=>{N.value=!0;try{let n=1;const a=[];for(;;){const i=await L.get("/profiles",{page:n,size:50,profile_status:"active",detailed:!1});for(const w of i.data.profiles)a.push(he(w));if(n>=i.data.meta.pages)break;n++}if(a.sort((i,w)=>{const y=i.title||"",k=w.title||"";if(!y&&k)return 1;if(y&&!k)return-1;const M=parseFloat(y),R=parseFloat(k);return!isNaN(M)&&!isNaN(R)?M-R:y.localeCompare(k,"ru",{numeric:!0})}),A.value=a,a.length>0){const i={profile_ids:a.map(k=>k.id)},w=await L.post("/reviews/auto-reply/statuses",i),y=new Map;for(const k of w.data.statuses)y.set(k.profile_id,k.is_enabled);v.value=y}}finally{N.value=!1}}),(n,a)=>(o(),x(ve,{onClPopup:a[3]||(a[3]=i=>V("close")),maxWidth:"480px",reveal:!N.value},{title:S(()=>a[4]||(a[4]=[I("Управление автоответами")])),default:S(()=>[t("div",Vs,[a[7]||(a[7]=t("p",{class:"manage-autoreply__hint"}," Включите или выключите автоответ на отзывы для каждого профиля ",-1)),se(t("input",{"onUpdate:modelValue":a[0]||(a[0]=i=>P.value=i),type:"text",class:"manage-autoreply__search",placeholder:"Найти профиль..."},null,512),[[Ue,P.value]]),t("div",Fs,[t("button",{class:q(["tab-btn tab-btn--success",{active:$.value}]),disabled:_.value,onClick:a[1]||(a[1]=i=>d(!0))},[m(c(Be),{size:16}),a[5]||(a[5]=I(" Включить все "))],10,Ds),t("button",{class:q(["tab-btn tab-btn--danger",{active:z.value}]),disabled:_.value,onClick:a[2]||(a[2]=i=>d(!1))},[m(c(qe),{size:16}),a[6]||(a[6]=I(" Выключить все "))],10,Os),t("span",Bs,p(T.value)+" из "+p(h.value.length)+" вкл. ",1)]),t("div",qs,[(o(!0),u(E,null,H(h.value,i=>(o(),u("div",{key:i.id,class:"manage-autoreply__item"},[t("div",Gs,[i.avatar_url?(o(),u("img",{key:0,src:i.avatar_url,alt:"",class:"manage-autoreply__avatar"},null,8,Ws)):(o(),u("span",Hs,p((i.name||"?").charAt(0)),1)),t("div",Zs,[i.title?(o(),u("span",Qs,p(i.title),1)):C("",!0),t("span",Ys,p(i.name),1)])]),m(ce,{"model-value":v.value.get(i.id)??!1,size:"sm","aria-label":`AI-ответы на отзывы профиля ${i.title||i.name||"Без имени"}, ID ${i.id}`,"onUpdate:modelValue":w=>U(i.id,w)},null,8,["model-value","aria-label","onUpdate:modelValue"])]))),128)),h.value.length===0?(o(),u("div",js," Нет профилей ")):C("",!0)])])]),_:1},8,["reveal"]))}}),Ks={key:1,class:"reviews-auto-reply-loading"},Xs={class:"header-wrapper"},ea={class:"header-content"},ta={class:"filter-container"},sa={key:0,class:"auto-reply-toggle"},aa={class:"auto-reply-toggle__label"},la={key:0,class:"tabs-nav"},oa={class:"settings-btn"},ia={class:"settings-btn"},na={key:0},ra={class:"settings-btn"},ua={key:0},da={key:0,class:"reviews-content"},ca={key:1,class:"reviews-content reviews-content--all"},va={key:0,class:"reviews-all__fetch-error"},_a={class:"reviews-group__head"},pa={key:0,class:"reviews-group__title"},fa={class:"reviews-group__name"},ma=["onClick"],ga={class:"intro-popup-title"},ya={class:"intro-popup-body"},ba={class:"intro-features"},ha={class:"feature-title"},wa={class:"feature-desc"}
1,ka={class:"intro-popup-footer"},$a=200,Re=200,Sa=ue({__name:"ReviewsAutoReply",setup(J){const{showIntro:Y,dontShowAgain:B,closeIntro:V,onDontShowToggle:W}=dt("reviewsAutoReply","intro_reviews_autoreply_hidden"),N=[{key:"ai",title:"AI-генерация ответов",desc:"Нейросеть анализирует текст отзыва и создаёт персонализированный ответ с учётом контекста",icon:je},{key:"ratings",title:"Фильтр по рейтингам",desc:"Выбирайте на какие оценки отвечать автоматически — от 1★ до 5★, гибко настраивайте",icon:te},{key:"tone",title:"Голос и тон",desc:"Тон речи и лицо отправителя: мужской, женский или компания — формально или по-дружески",icon:He},{key:"limits",title:"Лимиты ответов",desc:"Установите дневной лимит автоответов или работайте без ограничений",icon:Ze},{key:"copy",title:"Копирование настроек",desc:"Перенесите настройки на другие профили в один клик — не настраивайте каждый заново",icon:ge},{key:"logs",title:"Лог ответов",desc:"Отслеживайте все отправленные автоответы, проверяйте качество и корректируйте настройки",icon:Ce},{key:"manage",title:"Массовое управление",desc:"Включайте и выключайте автоответы для всех профилей из одного окна",icon:Qe},{key:"images",title:"Анализ фото",desc:"AI анализирует приложенные к отзыву фото, чтобы понять проблему и ответить точнее",icon:Ye}],_=f(null),A=f(!1),v=f(!1),P=f(!1),h=f(null),T=f(!1),$=f(null),{toast:z,showToast:U}=fe(),{isMobile:d}=Ve(),b=at();Fe(s=>{s.type==="review"&&(A.value=!0)});const n=()=>{U("Не нашли этот отзыв, возможно, он удалён.","warning")},a=O(()=>{var s;return((s=_.value)==null?void 0:s.id)===Je}),i=f(!1),w=f(!1),y=f([]),k=f({}),M=f(new Set),R=O(()=>a.value?y.value.map(s=>({profileId:String(s.id),meta:s,isEnabled:k.value[s.id]??!1})):[]),Z=O(()=>R.value.length<=2);function Q(s,e){if(!e||M.value.has(s))return;const l=new Set(M.value);l.add(s),M.value=l}async function K(){i.value=!0,w.value=!1,M.value=new Set;try{const s=[];let e=1,l=1;for(;e<=l;){const{data:j}=await L.get("/profiles",{profile_status:"active",detailed:!1,page:e,size:$a});s.push(...(j.profiles??[]).map(he)),l=j.meta.pages,e++}const r=s.sort((j,me)=>{const de=j.title||"",ee=me.title||"",we=parseFloat(de),ke=parseFloat(ee);return!isNaN(we)&&!isNaN(ke)?we-ke:de.localeCompare(ee,"ru",{numeric:!0})});y.value=r;const D={};for(let j=0;j<r.length;j+=Re){const me={profile_ids:r.slice(j,j+Re).map(ee=>ee.id)},de=await L.post("/reviews/auto-reply/statuses",me);for(const ee of de.data.statuses)D[ee.profile_id]=ee.is_enabled}k.value=D}catch{w.value=!0}finally{i.value=!1}}const G=f(new Set);async function ae(s,e){if(G.value.has(s))return;const l=Number(s),r=k.value[l]??!1;k.value={...k.value,[l]:e},G.value=new Set(G.value).add(s);try{const D={profile_ids:[l],is_enabled:e};await L.post("/reviews/auto-reply/bulk-toggle",D),U(e?"Автоответ включён":"Автоответ выключен")}catch{k.value={...k.value,[l]:r},U("Не удалось переключить автоответ")}finally{const D=new Set(G.value);D.delete(s),G.value=D}}function F(s,e){k.value={...k.value,[Number(s)]:e}}const le=s=>{var e;(e=$.value)==null||e.toggleEnabled(s)},oe=(s,e)=>{var l,r;s===((l=_.value)==null?void 0:l.id)&&(T.value=e,(r=$.value)==null||r.syncEnabled(e))},g=s=>{U(`Настройки скопированы на ${s} ${s===1?"профиль":s<5?"профиля":"профилей"}`)};return X(_,()=>{T.value=!1,a.value&&K()}),(s,e)=>{const l=ze("tooltip");return c(b).fetchError&&!c(b).hasProfiles?(o(),x(tt,{key:0,title:"Не удалось проверить наличие профилей",description:"Проверьте подключение и повторите загрузку.",onRetry:c(b).fetchCount},null,8,["onRetry"])):c(b).isReady?c(b).hasProfiles?(o(),u(E,{key:3},[t("header",Xs,[t("div",ea,[t("div",ta,[m(Ke,{modelValue:_.value,"onUpdate:modelValue":e[0]||(e[0]=r=>_.value=r),"allow-all":""},null,8,["modelValue"])]),_.value&&!a.value?(o(),u("label",sa,[m(ce,{"model-value":T.value,size:"sm","aria-label":`AI-ответы на отзывы профиля ${_.value.title||_.value.name||_.value.id}, ID ${_.value.id}`,"onUpdate:modelValue":le},null,8,["model-value","aria-label"]),t("span",aa,p(T.value?"Выключить автоответы":"Включить автоответы"),1),m(ne,{direction:"bottom",width:300},{default:S(()=>e[13]||(e[13]=[I(" При включении система автоматически отвечает на новые отзывы с помощью AI. Ответы генерируются с учётом выбранных настроек тона, рейтингов и лимитов ")])),_:1})])):C("",!0),_.value&&!a.value?(o(),u("span",{key:1,class:q(["status-indicator",T.value?"status-indicator--on":"status-indicator--off"])},p(T.value?"Автоответ включён":"Автоответ выключен"),3)):C("",!0)]),_.value&&!a.value?(o(),u("nav",la,[m(ie,{color:"secondary",onClick:e[1]||(e[1]=r=>P.value=!0)},{text:S(()=>[t("div",oa,[m(c(Ge),{size:16}),e[14]||(e[14]=t("span",null,"Управление",-1))])]),_:1}),m(ie,{color:"secondary",onClick:e[2]||(e[2]=r=>v.value=!0)},{text:S(()=>[t("div",ia,[m(c(ge),{size:16}),c(d)?C("",!0):(o(),u("span",na,"Копировать настройки"))])]),_:1}),m(ie,{color:"secondary",onClick:e[3]||(e[3]=r=>A.value=!0)},{text:S(()=>[t("div",ra,[m(c(Ce),{size:16}),c(d)?C("",!0):(o(),u("span",ua,"Логи"))])]),_:1})])):C("",!0)]),_.value&&!a.value?(o(),u("div",da,[(o(),x(Te,{ref_key:"settingsRef",ref:$,"profile-id":_.value.id,"profile-name":_.value.name,"profile-avatar":_.value.avatar_url??void 0,key:"settings-"+_.value.id,"onUpdate:enabled":e[4]||(e[4]=r=>T.value=r)},null,8,["profile-id","profile-name","profile-avatar"]))])):a.value?(o(),u("div",ca,[i.value?(o(),x(re,{key:0})):(o(),u(E,{key:1},[w.value?(o(),u("div",va,[e[16]||(e[16]=t("p",null,"Не удалось загрузить профили",-1)),m(ie,{color:"secondary",onClick:e[5]||(e[5]=r=>K())},{text:S(()=>e[15]||(e[15]=[I("Повторить")])),_:1}
1)])):R.value.length===0?(o(),x(be,{key:1,"message-text":"Нет активных профилей Авито"})):(o(!0),u(E,{key:2},H(R.value,r=>(o(),x(et,{key:r.profileId,"def-active":Z.value,tone:r.isEnabled?"success":"danger",onToggle:D=>Q(r.profileId,D)},{"accordion-title":S(()=>[t("div",_a,[m(Xe,{profile:r.meta,size:24},null,8,["profile"]),r.meta.title?(o(),u("span",pa,p(r.meta.title),1)):C("",!0),t("span",fa,p(r.meta.name),1),se((o(),u("span",{class:"reviews-group__toggle",onClick:e[6]||(e[6]=ye(()=>{},["stop"]))},[m(ce,{"model-value":r.isEnabled,size:"sm",disabled:G.value.has(r.profileId),"aria-label":`AI-ответы на отзывы профиля ${r.meta.title||r.meta.name||r.profileId}, ID ${r.profileId}`,"onUpdate:modelValue":D=>ae(r.profileId,D)},null,8,["model-value","disabled","aria-label","onUpdate:modelValue"])])),[[l,r.isEnabled?"Выключить автоответы для этого профиля":"Включить автоответы для этого профиля"]]),se((o(),u("span",{class:"reviews-group__copy-btn",onClick:ye(D=>h.value=Number(r.profileId),["stop"])},[m(c(ge),{size:16})],8,ma)),[[l,"Копировать настройки этого профиля на другие"]])])]),"accordion-list":S(()=>[Z.value||M.value.has(r.profileId)?(o(),x(Te,{key:0,"profile-id":Number(r.profileId),"profile-name":r.meta.name,"profile-avatar":r.meta.avatar_url??void 0,"onUpdate:enabled":D=>F(r.profileId,D)},null,8,["profile-id","profile-name","profile-avatar","onUpdate:enabled"])):C("",!0)]),_:2},1032,["def-active","tone","onToggle"]))),128))],64))])):C("",!0),A.value&&_.value&&!a.value?(o(),x(ve,{key:2,size:"xl",onClPopup:e[7]||(e[7]=r=>A.value=!1)},{title:S(()=>e[17]||(e[17]=[I("Логи автоответов")])),default:S(()=>[(o(),x(Ss,{"profile-id":_.value.id,key:"logs-"+_.value.id,onFocusNotFound:n},null,8,["profile-id"]))]),_:1})):C("",!0),v.value&&!a.value?(o(),x(Ne,{key:3,"source-profile-id":_.value.id,onClose:e[8]||(e[8]=r=>v.value=!1),onCopied:g},null,8,["source-profile-id"])):C("",!0),h.value!==null?(o(),x(Ne,{key:4,"source-profile-id":h.value,onClose:e[9]||(e[9]=r=>h.value=null),onCopied:g},null,8,["source-profile-id"])):C("",!0),P.value&&!a.value?(o(),x(Js,{key:5,"current-profile-id":_.value.id,onClose:e[10]||(e[10]=r=>P.value=!1),onToggled:oe},null,8,["current-profile-id"])):C("",!0),_.value?C("",!0):(o(),x(be,{key:6,"message-text":"Выберите профиль Авито для настройки автоответов на отзывы"})),c(Y)?(o(),x(ve,{key:7,maxWidth:"820px",onClPopup:c(V)},{title:S(()=>[t("div",ga,[m(c(te),{size:28}),e[18]||(e[18]=t("span",null,"Автоответы на отзывы",-1))])]),default:S(()=>[t("div",ya,[e[21]||(e[21]=t("p",{class:"intro-popup-subtitle"}," AI-система автоматически отвечает на отзывы покупателей — повышайте рейтинг, экономьте время и укрепляйте доверие клиентов ",-1)),t("div",ba,[(o(),u(E,null,H(N,r=>t("div",{class:"intro-feature-card",key:r.key},[t("div",{class:q(["feature-icon",`feature-icon--${r.key}`])},[(o(),x(We(r.icon)))],2),t("h3",ha,p(r.title),1),t("p",wa,p(r.desc),1)])),64))]),t("div",ka,[t("label",{class:"dont-show-label",onClick:e[11]||(e[11]=ye(()=>{},["stop"]))},[m(ce,{"model-value":c(B),size:"sm","aria-label":"Не показывать обзор автоответов на отзывы снова","onUpdate:modelValue":c(W)},null,8,["model-value","onUpdate:modelValue"]),e[19]||(e[19]=t("span",null,"Не показывать снова",-1))]),m(ie,{onClick:c(V)},{text:S(()=>e[20]||(e[20]=[I("Понятно")])),_:1},8,["onClick"])])])]),_:1},8,["onClPopup"])):C("",!0),m(Me,{visible:c(z).visible,"onUpdate:visible":e[12]||(e[12]=r=>c(z).visible=r),text:c(z).text,severity:c(z).severity},null,8,["visible","text","severity"])],64)):(o(),x(st,{key:2,icon:c(te),title:"Автоответы на отзывы недоступны",description:"Добавьте профиль Авито, чтобы AI-система автоматически отвечала на отзывы покупателей и поддерживала рейтинг."},null,8,["icon"])):(o(),u("div",Ks,[m(re)]))}}}),ll=pe(Sa,[["__scopeId","data-v-8ff42fa2"]]);export{ll 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.