2 lines
8.2 KiB
JavaScript
2 lines
8.2 KiB
JavaScript
import{_ as M}from"./BasicMainCard-958ba44a.js";import{u as g,_ as j}from"./useBaseTable-27f8c4c5.js";import{t as v,a as b}from"./useDataTime-0b1c250c.js";import{H as _,d as q,g as F,h as H,E as J,L as G,D as Y,v as z,o as L,c as $,b as c,w as u,a as I,t as Q,k as X,G as h,j as x}from"./index-88dc4dc5.js";import{f as C,a as E,c as R,d as T,e as ee,b as P}from"./supabaseTableQuery-95762ff3.js";import{_ as te,T as ae}from"./index-b34fee57.js";import"./index-f92d386a.js";import"./index-e9421516.js";import"./Col-683db425.js";import"./shallowequal-3634d17f.js";import"./vnode-0ac755a4.js";import"./_plugin-vue_export-helper-45085cdd.js";import"./styleChecker-8c0172bf.js";import"./isPlainObject-d53023a8.js";import"./button.vue_vue_type_style_index_0_lang-77af712b.js";import"./Icon-a2802ec2.js";import"./fa_IR-540ac607.js";import"./toArray-dc7976f8.js";import"./FormItemContext-911b3f35.js";import"./pickAttrs-219ceae4.js";import"./useState-bcda3993.js";import"./lodash-d215e71f.js";import"./index-47f374b2.js";import"./BasicModal.vue_vue_type_style_index_0_lang-dbdcf7a8.js";import"./index-0b4b8a23.js";import"./index-f45c1209.js";import"./index-89fd85e2.js";import"./useRefs-1597afba.js";const ne=[{title:"ردیف",dataIndex:"index",key:"index",filterable:!1,width:70,align:"center",customRender:e=>e.record.index+1},{title:"رتبه",dataIndex:"rank",key:"rank",filterable:!1,width:80,align:"center"},{title:"نام کاربر",dataIndex:"display_name",key:"display_name",filterField:"display_name"},{title:"شماره همراه",dataIndex:"phone",key:"phone",filterField:"phone",width:130},{title:"امتیاز",dataIndex:"total_points",key:"total_points",filterField:"total_points",align:"center",width:100,customRender:e=>(e.record.total_points??0).toLocaleString("fa-IR")},{title:"آخرین بروزرسانی",dataIndex:"updated_at",key:"updated_at",type:"DateTime",filterField:"updated_at",width:150,customRender:e=>v(e.record.updated_at)}],ie=[{title:"ردیف",dataIndex:"index",key:"index",filterable:!1,width:70,align:"center",customRender:e=>e.record.index+1},{title:"رتبه",dataIndex:"rank",key:"rank",filterable:!1,width:80,align:"center"},{title:"نام کاربر",dataIndex:"display_name",key:"display_name",filterField:"display_name"},{title:"شماره همراه",dataIndex:"phone",key:"phone",filterField:"phone",width:130},{title:"امتیاز هفته",dataIndex:"total_points",key:"total_points",filterField:"total_points",align:"center",width:110,customRender:e=>(e.record.total_points??0).toLocaleString("fa-IR")},{title:"آخرین بروزرسانی",dataIndex:"updated_at",key:"updated_at",type:"DateTime",filterField:"updated_at",width:150,customRender:e=>v(e.record.updated_at)}],oe=[{title:"ردیف",dataIndex:"index",key:"index",filterable:!1,width:70,align:"center",customRender:e=>e.record.index+1},{title:"بازه هفته",dataIndex:"week_period",key:"week_period",filterField:"week_start",width:180,customRender:e=>{const a=e.record;return`${D(a.week_start)} تا ${D(a.week_end)}`}},{title:"رتبه",dataIndex:"rank",key:"rank",filterField:"rank",align:"center",width:80},{title:"نام کاربر",dataIndex:"display_name",key:"display_name",filterField:"display_name"},{title:"امتیاز",dataIndex:"total_points",key:"total_points",filterField:"total_points",align:"center",width:100,customRender:e=>(e.record.total_points??0).toLocaleString("fa-IR")},{title:"زمان آرشیو",dataIndex:"created_at",key:"created_at",type:"DateTime",filterField:"created_at",width:150,customRender:e=>v(e.record.created_at)}];function D(e){return e?b(`${e}T00:00:00Z`):"—"}function re(e){var n;if(!e)return"نامشخص";if((n=e.name)!=null&&n.trim())return e.name.trim();const a=`${e.first_name||""} ${e.last_name||""}`.trim();return a||e.phone||"نامشخص"}function le(e){return Array.isArray(e.users)?e.users[0]:e.users}function W(e,a){const n=le(e);return{user_id:e.user_id,total_points:e.total_points,updated_at:e.updated_at,week_start:e.week_start,rank:a,display_name:re(n),phone:(n==null?void 0:n.phone)||""}}async function A(){const{data:e,error:a}=await _.rpc("get_daily_question_weekly_leaderboard",{p_page:1,p_limit:1});if(a)throw a;return e==null?void 0:e.week_start}const se=new Set(["total_points","updated_at"]),de=new Set(["total_points","updated_at","week_start"]),ce=new Set(["week_start","week_end","rank","total_points","display_name","created_at"]);function U(e,a,n){var i;if(!((i=a.filters)!=null&&i.length))return e;for(const t of a.filters)t.hidden||!t.field||t.field==="display_name"||t.field==="phone"||n.has(t.field)&&(e=P(e,t));return e}function _e(e,a,n){var i;if(!((i=a.filters)!=null&&i.length))return e;for(const t of a.filters)if(!(t.hidden||!t.field)){if(t.field==="display_name"&&["eq","has","like"].includes(t.op)){e=e.ilike("display_name",`%${String(t.value).trim()}%`);continue}n.has(t.field)&&(e=P(e,t))}return e}function B(e,a,n,i,t={}){const o=n.page||1,r=n.limit||20,l=(o-1)*r,s=l;return{rows:(e||[]).map((k,f)=>({...i(k,l+f+1),index:s+f})),total:a??0,query:{...n,page:o,limit:r,total:a??0},...t}}async function pe(e){const{limit:a=20,page:n=1,search:i}=e;let t=_.from("daily_question_user_points").select("user_id, total_points, updated_at, users(name, first_name, last_name, phone)",{count:"exact"}).gt("total_points",0);if(i!=null&&i.trim()){const s=await C(_,i);t=E(t,i,[],s)}t=U(t,e,se),t=R(t,e,"-total_points",["total_points","updated_at"]),t=T(t,n,a);const{data:o,error:r,count:l}=await t;if(r)throw r;return B(o,l,e,W)}async function ue(e){const a=await A(),{limit:n=20,page:i=1,search:t}=e;let o=_.from("daily_question_user_weekly_points").select("user_id, total_points, updated_at, week_start, users(name, first_name, last_name, phone)",{count:"exact"}).eq("week_start",a).gt("total_points",0);if(t!=null&&t.trim()){const p=await C(_,t);o=E(o,t,[],p)}o=U(o,e,de),o=R(o,e,"-total_points",["total_points","updated_at"]),o=T(o,i,n);const{data:r,error:l,count:s}=await o;if(l)throw l;return B(r,s,e,W,{week_start:a,week_end:N(a,6)})}async function fe(e){const{limit:a=20,page:n=1,search:i}=e;let t=_.from("daily_question_weekly_top10").select("*",{count:"exact"});i!=null&&i.trim()&&(t=t.ilike("display_name",`%${i.trim()}%`)),t=_e(t,e,ce),t=R(t,e,"-week_start",["week_start","rank","total_points","created_at"]),t=T(t,n,a);const{data:o,error:r,count:l}=await t;if(r)throw r;return ee(o,l,e,s=>({...s,week_period:`${s.week_start}..${s.week_end}`}))}async function me(){const e=await A();return{week_start:e,week_end:N(e,6)}}function N(e,a){const n=new Date(`${e}T12:00:00Z`);return n.setUTCDate(n.getUTCDate()+a),n.toISOString().slice(0,10)}const ke={class:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3 mb-4"},ye=I("h2",null,"جدول امتیازات سوال روز",-1),we={key:0,class:"text-sm text-gray-600 bg-gray-50 border rounded-lg px-3 py-2"},ge=I("p",{class:"text-sm text-gray-500 mb-3"}," ۱۰ نفر برتر هر هفته پس از پایان هفته در این بخش ذخیره میشوند. ",-1),Je=q({__name:"index",setup(e){const a=F("overall"),n=F(null),[i,t]=g(),[o,r]=g(),[l,s]=g(),p=H(()=>{if(!n.value)return"";const d=b(`${n.value.week_start}T00:00:00Z`),m=b(`${n.value.week_end}T00:00:00Z`);return`${d} تا ${m}`}),k={columns:ne,api:pe,defaultPageLimit:20},f={columns:ie,api:ue,defaultPageLimit:20},O={columns:oe,api:fe,defaultPageLimit:20};J(a,async d=>{await G(),d==="overall"?t():d==="weekly"?(await S(),r()):d==="archive"&&s()});async function S(){try{n.value=await me()}catch(d){Y.error((d==null?void 0:d.message)||"خطا در دریافت بازه هفته")}}return z(S),(d,m)=>{const y=j,w=te,V=ae,K=M;return L(),$("div",null,[c(K,null,{default:u(()=>[I("div",ke,[ye,a.value==="weekly"&&p.value?(L(),$("div",we," هفته جاری: "+Q(p.value),1)):X("",!0)]),c(V,{activeKey:a.value,"onUpdate:activeKey":m[0]||(m[0]=Z=>a.value=Z)},{default:u(()=>[c(w,{key:"overall",tab:"امتیازات کلی"},{default:u(()=>[c(y,h(k,{onRegister:x(i)}),null,16,["onRegister"])]),_:1}),c(w,{key:"weekly",tab:"امتیازات هفتگی"},{default:u(()=>[c(y,h(f,{onRegister:x(o)}),null,16,["onRegister"])]),_:1}),c(w,{key:"archive",tab:"بایگانی هفتگی"},{default:u(()=>[ge,c(y,h(O,{onRegister:x(l)}),null,16,["onRegister"])]),_:1})]),_:1},8,["activeKey"])]),_:1})])}}});export{Je as default};
|