astro-admin/dist/assets/UserDetail-EgnW9fi-.js

1 line
11 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import{C as e,D as t,E as n,S as r,_ as ee,b as i,c as a,d as o,f as s,g as c,h as l,l as u,m as d,n as f,o as p,p as m,r as te,s as h,v as g,w as _,x as ne,y as v}from"./index-DzvFzRSs.js";import{t as y}from"./Section-CyoxMKA8.js";var b={class:`min-w-0`},x={class:`text-xs text-slate-400 truncate`},S={class:`font-medium text-slate-700 break-words`},C={__name:`Field`,props:{label:String,value:[String,Number,null]},setup(e){return(n,r)=>(g(),d(`div`,b,[o(`p`,x,t(e.label),1),o(`p`,S,t(e.value),1)]))}},w={class:`bg-white rounded-xl shadow-xl p-5 md:p-6 w-full max-w-md max-h-[90vh] overflow-auto`},T={class:`flex items-center justify-between mb-4`},E={class:`font-semibold text-lg`},D={__name:`Modal`,props:{title:String},emits:[`close`],setup(e){return(n,r)=>(g(),d(`div`,{class:`fixed inset-0 bg-black/50 flex items-center justify-center z-50 p-3 md:p-6`,onClick:r[1]||=a(e=>n.$emit(`close`),[`self`])},[o(`div`,w,[o(`div`,T,[o(`h3`,E,t(e.title),1),o(`button`,{onClick:r[0]||=e=>n.$emit(`close`),class:`text-slate-400 hover:text-slate-600 text-xl leading-none`},`✕`)]),i(n.$slots,`default`)])]))}},re={key:0,class:`text-slate-500`},ie={key:1},O={class:`flex flex-col gap-2 mb-4 md:mb-6`},k={class:`flex flex-wrap items-center gap-2 md:gap-4`},A={class:`text-xl md:text-2xl font-bold truncate`},j={class:`text-slate-500 text-sm`},M={class:`font-mono text-xs text-slate-400`},N={class:`grid grid-cols-2 md:grid-cols-3 gap-3 text-sm`},P={key:0,class:`space-y-2`},F={class:`flex items-center gap-2`},I={class:`font-medium`},L={key:0,class:`text-xs bg-yellow-100 text-yellow-700 px-2 rounded`},R={class:`text-slate-500 text-xs md:text-sm`},z={key:1,class:`text-slate-400 text-sm`},B={class:`mt-4 flex flex-col sm:flex-row gap-2`},V={key:2,class:`mt-3 text-sm bg-amber-50 rounded-lg p-3`},H={key:0,class:`space-y-2`},U={class:`flex items-center gap-2`},W={class:`font-medium`},G={class:`flex items-center gap-2 text-xs`},K={class:`text-slate-500`},q={class:`font-mono text-slate-400`},J={key:1,class:`text-slate-400 text-sm`},Y={key:0,class:`grid grid-cols-2 gap-2 text-sm`},ae={class:`font-medium`},oe={class:`text-xs text-slate-500`},se={key:0,class:`text-xs text-slate-400`},ce={key:1,class:`text-slate-400 text-sm`},le={key:0,class:`space-y-1 text-sm`},ue={class:`text-xs text-slate-400`},de={key:1,class:`text-slate-400 text-sm`},fe={class:`space-y-2 max-h-[60vh] md:max-h-96 overflow-auto text-sm`},pe={class:`text-xs text-slate-400 mb-1`},me={class:`font-medium`},he={class:`whitespace-pre-wrap`},ge={class:`grid grid-cols-1 sm:grid-cols-3 gap-3 text-sm`},_e={key:0,class:`space-y-1 text-xs`},ve={class:`text-slate-400`},ye={key:1,class:`text-slate-400 text-sm`},be={class:`space-y-1 text-xs`},xe={class:`space-y-3`},Se={key:0,class:`text-sm text-green-600`},Ce={class:`space-y-3`},X={key:0,class:`text-sm text-green-600`},Z={__name:`UserDetail`,setup(i){let a=te(),b=_(null),x=_(!0),S=_(!1),w=_(!1),T=_({plan_slug:`monthly`,days:null}),E=_({plan_slug:null,price_rub:null,reason:``}),Z=_(``),Q=_(``);ee(async()=>{try{let{data:e}=await f.get(`/admin/api/users/${a.params.id}`);b.value=e}finally{x.value=!1}});async function we(){Z.value=``;try{let e={user_id:Number(a.params.id),plan_slug:T.value.plan_slug};T.value.days&&(e.days=T.value.days),await f.post(`/admin/api/subscriptions/gift`,e),Z.value=`✅ Подписка подарована`;let{data:t}=await f.get(`/admin/api/users/${a.params.id}`);b.value=t}catch(e){Z.value=`❌ `+(e.response?.data?.detail||`Ошибка`)}}async function Te(){Q.value=``;try{await f.post(`/admin/api/price-overrides`,{user_id:Number(a.params.id),plan_slug:E.value.plan_slug,price_rub:E.value.price_rub,reason:E.value.reason||`manual`}),Q.value=`✅ Цена установлена`;let{data:e}=await f.get(`/admin/api/users/${a.params.id}`);b.value=e}catch(e){Q.value=`❌ `+(e.response?.data?.detail||`Ошибка`)}}function Ee(e){return{succeeded:`text-green-600`,pending:`text-amber-600`,failed:`text-red-600`,refunded:`text-purple-600`}[e]||`text-slate-600`}function $(e){return e?new Date(e).toLocaleString(`ru-RU`,{day:`2-digit`,month:`2-digit`,year:`2-digit`,hour:`2-digit`,minute:`2-digit`}):`—`}function De(e){return e>1e6?(e/1e6).toFixed(1)+`M`:e>1e3?(e/1e3).toFixed(0)+`K`:e}return(ee,i)=>{let a=ne(`router-link`);return x.value?(g(),d(`div`,re,`Загрузка...`)):b.value?(g(),d(`div`,ie,[o(`div`,O,[c(a,{to:`/users`,class:`text-slate-400 hover:text-slate-600 text-sm`},{default:r(()=>[...i[9]||=[l(`← Клиенты`,-1)]]),_:1}),o(`div`,k,[o(`h1`,A,t(b.value.profile.name||b.value.profile.username||b.value.profile.user_id),1),o(`span`,j,`@`+t(b.value.profile.username||`—`),1),o(`span`,M,`ID: `+t(b.value.profile.user_id),1)])]),c(y,{title:`👤 Профиль`,icon:``},{default:r(()=>[o(`div`,N,[c(C,{label:`Дата регистрации`,value:$(b.value.profile.registered_at)},null,8,[`value`]),c(C,{label:`Платформа`,value:b.value.profile.platform},null,8,[`value`]),c(C,{label:`Event mode`,value:b.value.profile.event_mode},null,8,[`value`]),c(C,{label:`Birth data`,value:b.value.profile.birth_data||`—`},null,8,[`value`]),c(C,{label:`Локация`,value:b.value.profile.current_location||`—`},null,8,[`value`]),c(C,{label:`TZ`,value:b.value.profile.tz??`—`},null,8,[`value`])])]),_:1}),c(y,{title:`📱 Подписки`},{default:r(()=>[b.value.subscriptions.length?(g(),d(`div`,P,[(g(!0),d(u,null,v(b.value.subscriptions,e=>(g(),d(`div`,{key:e.id,class:`flex flex-col md:flex-row md:items-center md:justify-between gap-1 bg-slate-50 rounded-lg px-3 py-2 text-sm`},[o(`div`,F,[o(`span`,I,t(e.status),1),e.is_trial?(g(),d(`span`,L,`trial`)):m(``,!0)]),o(`span`,R,`с `+t($(e.started_at))+` до `+t($(e.ends_at)),1)]))),128))])):(g(),d(`p`,z,`Нет подписок`)),o(`div`,B,[o(`button`,{onClick:i[0]||=e=>S.value=!0,class:`px-3 py-2 bg-indigo-600 text-white rounded-lg text-sm hover:bg-indigo-700 text-center`},` 🎁 Подарить подписку `),o(`button`,{onClick:i[1]||=e=>w.value=!0,class:`px-3 py-2 bg-amber-100 text-amber-700 rounded-lg text-sm hover:bg-amber-200 text-center`},` 💰 Своя цена `)]),b.value.price_overrides.length?(g(),d(`div`,V,[i[10]||=o(`p`,{class:`font-medium text-amber-800`},`Индивидуальная цена:`,-1),(g(!0),d(u,null,v(b.value.price_overrides,e=>(g(),d(`div`,{key:e.id},t(e.plan_slug||`все планы`)+`: `+t(e.price_rub)+`₽ (`+t(e.reason)+`) `,1))),128))])):m(``,!0)]),_:1}),c(y,{title:`💳 Платежи`},{default:r(()=>[b.value.payments.length?(g(),d(`div`,H,[(g(!0),d(u,null,v(b.value.payments,e=>(g(),d(`div`,{key:e.id,class:`flex flex-col md:flex-row md:items-center md:justify-between gap-1 bg-slate-50 rounded-lg px-3 py-2 text-sm`},[o(`div`,U,[o(`span`,W,t(e.amount_rub)+`₽`,1),o(`span`,{class:n(Ee(e.status))},t(e.status),3)]),o(`div`,G,[o(`span`,K,t($(e.paid_at||e.created_at)),1),o(`span`,q,t(e.yookassa_payment_id?.slice(0,12))+`...`,1)])]))),128))])):(g(),d(`p`,J,`Нет платежей`))]),_:1}),c(y,{title:`🧑‍🤝‍🧑 Родственники (люди)`},{default:r(()=>[b.value.people.length?(g(),d(`div`,Y,[(g(!0),d(u,null,v(b.value.people,e=>(g(),d(`div`,{key:e.id,class:`bg-slate-50 rounded-lg px-3 py-2`},[o(`p`,ae,t(e.name),1),o(`p`,oe,t(e.birth_data),1),e.relationship?(g(),d(`p`,se,t(e.relationship),1)):m(``,!0)]))),128))])):(g(),d(`p`,ce,`Нет добавленных людей`))]),_:1}),c(y,{title:`📐 Карты (последние)`},{default:r(()=>[b.value.charts.length?(g(),d(`div`,le,[(g(!0),d(u,null,v(b.value.charts.slice(0,10),e=>(g(),d(`div`,{key:e.id,class:`flex justify-between text-slate-600`},[o(`span`,null,t(e.chart_type),1),o(`span`,ue,t($(e.created_at)),1)]))),128))])):(g(),d(`p`,de,`Нет построенных карт`))]),_:1}),c(y,{title:`💬 Последние сообщения`},{default:r(()=>[o(`div`,fe,[(g(!0),d(u,null,v(b.value.conversations.slice(0,20).reverse(),e=>(g(),d(`div`,{key:e.id,class:n([`rounded-lg px-3 py-2 break-words`,e.role===`user`?`bg-blue-50`:`bg-slate-50`])},[o(`p`,pe,[o(`span`,me,t(e.role),1),l(` · `+t($(e.created_at)),1)]),o(`p`,he,t(e.content?.slice(0,500)),1)],2))),128))])]),_:1}),c(y,{title:`📊 Использование`},{default:r(()=>[o(`div`,ge,[c(C,{label:`Всего запросов`,value:b.value.usage_stats.total_requests},null,8,[`value`]),c(C,{label:`Токенов всего`,value:De(b.value.usage_stats.total_tokens)},null,8,[`value`]),c(C,{label:`Стоимость $`,value:`$`+b.value.usage_stats.total_cost_usd},null,8,[`value`])])]),_:1}),c(y,{title:`🔧 Последние вызовы инструментов`},{default:r(()=>[b.value.tool_calls.length?(g(),d(`div`,_e,[(g(!0),d(u,null,v(b.value.tool_calls.slice(0,10),e=>(g(),d(`div`,{key:e.id||e.created_at,class:`flex justify-between bg-slate-50 rounded px-2 py-1`},[o(`span`,null,t(e.tool_name)+` `+t(e.success?`✅`:`❌`),1),o(`span`,ve,t(e.duration_ms)+`ms · `+t($(e.created_at)),1)]))),128))])):(g(),d(`p`,ye,`Нет вызовов`))]),_:1}),b.value.errors?.length?(g(),s(y,{key:0,title:`⚠️ Ошибки`},{default:r(()=>[o(`div`,be,[(g(!0),d(u,null,v(b.value.errors,e=>(g(),d(`div`,{key:e.id||e.created_at,class:`bg-red-50 text-red-700 rounded px-2 py-1`},t(e.message||e.error)+` · `+t($(e.created_at)),1))),128))])]),_:1})):m(``,!0),S.value?(g(),s(D,{key:1,onClose:i[4]||=e=>S.value=!1,title:`Подарить подписку`},{default:r(()=>[o(`div`,xe,[e(o(`select`,{"onUpdate:modelValue":i[2]||=e=>T.value.plan_slug=e,class:`w-full px-3 py-2 border rounded-lg`},[...i[11]||=[o(`option`,{value:`monthly`},`Месяц (30д)`,-1),o(`option`,{value:`yearly`},`Год (365д)`,-1)]],512),[[p,T.value.plan_slug]]),e(o(`input`,{"onUpdate:modelValue":i[3]||=e=>T.value.days=e,type:`number`,placeholder:`Дней (опционально)`,class:`w-full px-3 py-2 border rounded-lg`},null,512),[[h,T.value.days,void 0,{number:!0}]]),o(`button`,{onClick:we,class:`w-full bg-indigo-600 text-white py-2 rounded-lg`},`Подарить`),Z.value?(g(),d(`div`,Se,t(Z.value),1)):m(``,!0)])]),_:1})):m(``,!0),w.value?(g(),s(D,{key:2,onClose:i[8]||=e=>w.value=!1,title:`Индивидуальная цена`},{default:r(()=>[o(`div`,Ce,[e(o(`select`,{"onUpdate:modelValue":i[5]||=e=>E.value.plan_slug=e,class:`w-full px-3 py-2 border rounded-lg`},[...i[12]||=[o(`option`,{value:null},`Все планы`,-1),o(`option`,{value:`monthly`},`Месяц`,-1),o(`option`,{value:`yearly`},`Год`,-1)]],512),[[p,E.value.plan_slug]]),e(o(`input`,{"onUpdate:modelValue":i[6]||=e=>E.value.price_rub=e,type:`number`,placeholder:`Цена ₽`,class:`w-full px-3 py-2 border rounded-lg`},null,512),[[h,E.value.price_rub,void 0,{number:!0}]]),e(o(`input`,{"onUpdate:modelValue":i[7]||=e=>E.value.reason=e,placeholder:`Причина (опционально)`,class:`w-full px-3 py-2 border rounded-lg`},null,512),[[h,E.value.reason]]),o(`button`,{onClick:Te,class:`w-full bg-amber-600 text-white py-2 rounded-lg`},`Установить`),Q.value?(g(),d(`div`,X,t(Q.value),1)):m(``,!0)])]),_:1})):m(``,!0)])):m(``,!0)}}};export{Z as default};