Files
2026-10-20 16:52:05 +03:30

2 lines
8.7 KiB
JavaScript

import{_ as q}from"./button.vue_vue_type_style_index_0_lang-f90e25b2.js";import{d as G,u as V,i as b,j as L,x as D,o as a,c as l,b as o,t as i,e as y,w as S,f as g,k as m,l as _,F as p,q as U,H as v,n as H,A as K}from"./index-1ba0f9ec.js";import{u as Y,b as J,c as P,a as Q,s as W,e as X,d as Z,f as ee,G as te}from"./story-4-7db0592b.js";import{g as se,r as oe,a as ne}from"./userSegments-081d8da2.js";import{S as h}from"./index-4bff02a6.js";import{T as $}from"./isSymbol-355a1404.js";import"./Icon-29e38d16.js";import"./_plugin-vue_export-helper-31e07528.js";import"./index-8f2b7e91.js";import"./vnode-c4e67237.js";const ae={class:"m-2 md:m-5 bg-white p-2 md:p-3 rounded-xl"},re={class:"flex flex-wrap items-center justify-between gap-3 mb-4"},le=o("h2",{class:"text-xl font-bold m-0"},"سگمنت کاربران",-1),ie={class:"flex flex-wrap items-center gap-2"},ce={class:"text-sm text-gray-600"},de={class:"grid grid-cols-1 md:grid-cols-4 gap-3 mb-4"},ue={class:"rounded-lg border border-gray-100 bg-gray-50 p-3"},_e=o("div",{class:"text-xs text-gray-500"},"سگمنت‌های تعریف‌شده",-1),fe={class:"text-lg font-bold mt-1"},me={class:"rounded-lg border border-gray-100 bg-gray-50 p-3"},pe=o("div",{class:"text-xs text-gray-500"},"سگمنت‌های فعال",-1),ge={class:"text-lg font-bold mt-1"},ve={class:"rounded-lg border border-gray-100 bg-gray-50 p-3"},he=o("div",{class:"text-xs text-gray-500"},"کاربران یکتا در حداقل یک سگمنت",-1),xe={class:"text-lg font-bold mt-1"},be={class:"rounded-lg border border-gray-100 bg-gray-50 p-3"},ye=o("div",{class:"text-xs text-gray-500"},"عضو چند سگمنت",-1),Se={class:"text-lg font-bold mt-1"},Ce={class:"grid grid-cols-1 md:grid-cols-4 gap-3"},ke={class:"flex h-full"},Re=["onClick"],we=["src","alt"],Ae={class:"flex flex-col justify-between w-full mr-2 min-w-0"},Le=["onClick"],$e={class:"text-base font-bold block truncate"},Be={class:"text-[11px] text-gray-400"},Ie={class:"flex items-center justify-end gap-1 min-h-[28px]"},Me=["onClick"],Ne=["onClick"],He=G({__name:"index",setup(Oe){const R=[Y,J,P,Q,W,X,Z,ee],w=[{code:"raw_registration",title:"ثبت‌نام خام",description:"ثبت‌نام کرده و هیچ چالشی شروع نکرده"},{code:"warm_user",title:"کاربر گرم",description:"چالش رایگان شروع کرده و هنوز خرید نکرده"},{code:"new_customer",title:"مشتری جدید",description:"در ۷ روز اخیر برای اولین بار اشتراک گرفته"},{code:"lost_user",title:"کاربر از دست رفته",description:"بیش از ۳۰ روز وارد اپ نشده"},{code:"active_customer",title:"مشتری فعال",description:"اشتراک فعال و انجام چالش در ۷ روز اخیر"},{code:"inactive_customer",title:"مشتری غیرفعال",description:"اشتراک فعال و عدم چالش در ۷ روز؛ اگر در معرض ریزش باشد اینجا نیست"},{code:"churn_risk_customer",title:"در معرض ریزش",description:"اشتراک فعال و عدم انجام چالش در ۱۵ روز اخیر (اولویت نسبت به غیرفعال)"},{code:"expired_user",title:"منقضی‌شده",description:"اشتراک تمام شده و تمدید نکرده"},{code:"never_entered_challenges",title:"وارد چالش‌ها نشده‌اند",description:"کاربرانی که وارد بخش چالش‌ها نشده‌اند"},{code:"challenge1_completed_no_sub",title:"اتمام چالش 1 بدون اشتراک",description:"کسانی که چالش شماره ۱ را تمام کرده‌اند و تا به حال هیچ پرداخت اشتراکی نداشته‌اند"},{code:"subscription_intent_no_pay",title:"قصد اشتراک بدون پرداخت",description:"روی اشتراک کلیک کرده‌اند ولی خرید نهایی نکرده‌اند"},{code:"active_subscribers",title:"مشترکین فعال",description:"تمامی مشترکین فعال"}],B=Object.fromEntries(w.map(e=>[e.code,e])),I=V(),c=b(!0),C=b(!1),f=b({}),d=b({definedCount:0,activeCount:0,uniqueMembers:null,multiSegmentMembers:null,lastSuccessfulRunAt:null,lastRunStatus:"never_run",lastRunStartedAt:null,lastRunFinishedAt:null,lastRunError:null,segments:[]});function A(e){return e==null?"—":e.toLocaleString("fa-IR")}function M(e){return e==="never_run"?"هنوز محاسبه نشده":e==="running"?"در حال محاسبه — اعداد آخرین اجرای موفق":e==="failed"?"آخرین محاسبه ناموفق؛ اعداد آخرین اجرای موفق":""}const N=L(()=>{const e=d.value;return e.lastRunStatus==="running"?e.lastSuccessfulRunAt?"وضعیت: در حال محاسبه · نمایش آخرین اعداد موفق":"وضعیت: در حال اجرا":e.lastRunStatus==="never_run"?"وضعیت: هنوز اجرا نشده":e.lastRunStatus==="failed"?`وضعیت: ناموفق${e.lastSuccessfulRunAt?" · آخرین موفق موجود است":""}`:e.lastSuccessfulRunAt?`آخرین به‌روزرسانی موفق: ${new Date(e.lastSuccessfulRunAt).toLocaleString("fa-IR")}`:"وضعیت: موفق"}),O=L(()=>{const e=(d.value.segments||[]).filter(t=>t.source!=="live"&&t.isActive!==!1);return(e.length>0?[...e].sort((t,s)=>(t.sortOrder??0)-(s.sortOrder??0)):w.map((t,s)=>({...t,version:1,isActive:!0,sortOrder:(s+1)*10,memberCount:null,computationStatus:"never_run",lastComputedAt:null}))).map((t,s)=>{const n=B[t.code],u=(n==null?void 0:n.title)||t.title,T=(n==null?void 0:n.description)||t.description,z=t.memberCount==null?"—":Number(t.memberCount).toLocaleString("fa-IR"),F=M(t.computationStatus);return{code:t.code,title:u,value:z,image:R[s%R.length],tooltip:[T||u,F].filter(Boolean).join(" — ")}})});function x(e){I.push({name:"membersMain_users",query:{segment:e}})}async function k(e=!1){var r,t;e||(c.value=!0);try{const s=await se();s&&(d.value=s)}catch(s){v.error(((t=(r=s==null?void 0:s.response)==null?void 0:r.data)==null?void 0:t.error)||"خطا در دریافت آمار سگمنت‌ها")}finally{e||(c.value=!1)}}async function E(){var e,r;C.value=!0;try{const t=await oe();v.success(`محاسبه انجام شد · وارد: ${((t==null?void 0:t.enteredCount)||0).toLocaleString("fa-IR")} · خارج: ${((t==null?void 0:t.leftCount)||0).toLocaleString("fa-IR")}`),await k()}catch(t){v.error(((r=(e=t==null?void 0:t.response)==null?void 0:e.data)==null?void 0:r.error)||"اجرای محاسبه ممکن نشد")}finally{C.value=!1}}async function j(e,r){var t,s;if(!f.value[e]){f.value={...f.value,[e]:!0};try{const n=await ne(e);v.success(`${r} به‌روز شد · وارد: ${((n==null?void 0:n.enteredCount)||0).toLocaleString("fa-IR")} · خارج: ${((n==null?void 0:n.leftCount)||0).toLocaleString("fa-IR")}`),await k(!0)}catch(n){v.error(((s=(t=n==null?void 0:n.response)==null?void 0:t.data)==null?void 0:s.error)||`محاسبه «${r}» ممکن نشد`)}finally{const n={...f.value};delete n[e],f.value=n}}}return D(()=>{k()}),(e,r)=>{const t=q;return a(),l("div",ae,[o("div",re,[le,o("div",ie,[o("span",ce,i(N.value),1),y(t,{loading:C.value,onClick:E},{default:S(()=>[g("محاسبه مجدد")]),_:1},8,["loading"])])]),o("div",de,[o("div",ue,[_e,o("div",fe,[c.value?(a(),m(_(h),{key:0,size:"small"})):(a(),l(p,{key:1},[g(i(d.value.definedCount.toLocaleString("fa-IR")),1)],64))])]),o("div",me,[pe,o("div",ge,[c.value?(a(),m(_(h),{key:0,size:"small"})):(a(),l(p,{key:1},[g(i(d.value.activeCount.toLocaleString("fa-IR")),1)],64))])]),o("div",ve,[he,o("div",xe,[c.value?(a(),m(_(h),{key:0,size:"small"})):(a(),l(p,{key:1},[g(i(A(d.value.uniqueMembers)),1)],64))])]),o("div",be,[ye,o("div",Se,[c.value?(a(),m(_(h),{key:0,size:"small"})):(a(),l(p,{key:1},[g(i(A(d.value.multiSegmentMembers)),1)],64))])])]),o("div",Ce,[(a(!0),l(p,null,U(O.value,(s,n)=>(a(),m(te,{class:"h-[132px] p-5",key:s.code},{default:S(()=>[o("div",ke,[o("div",{class:"cursor-pointer shrink-0",onClick:u=>x(s.code)},[o("img",{class:"w-20 h-20",src:s.image,alt:s.code},null,8,we)],8,Re),o("div",Ae,[y(_($),{title:s.tooltip,placement:"top"},{default:S(()=>[o("div",{class:"cursor-pointer min-w-0",onClick:u=>x(s.code)},[o("span",$e,i(s.title),1),o("span",Be,i(s.code),1)],8,Le)]),_:2},1032,["title"]),o("div",Ie,[c.value?(a(),m(_(h),{key:0,size:"small"})):(a(),l(p,{key:1},[o("span",{class:"text-base font-bold cursor-pointer",onClick:u=>x(s.code)},i(s.value),9,Me),s.value!=="—"?(a(),l("span",{key:0,class:"mr-1 cursor-pointer",onClick:u=>x(s.code)},"نفر",8,Ne)):H("",!0),y(_($),{title:"فقط همین سگمنت را محاسبه کن"},{default:S(()=>[y(t,{size:"small",icon:"vuesax-linear:refresh",loading:!!f.value[s.code],onClick:K(u=>j(s.code,s.title),["stop"])},null,8,["loading","onClick"])]),_:2},1024)],64))])])])]),_:2},1024))),128))])])}}});export{He as default};