2 lines
14 KiB
JavaScript
2 lines
14 KiB
JavaScript
import{_ as Q,u as W}from"./useBaseTable-6972e018.js";import{_ as X}from"./button.vue_vue_type_style_index_0_lang-9d5d26a1.js";import{I as A}from"./Icon-10f11b08.js";import{_ as R,g as Y,p as Z,a as K}from"./adminUser-8bde5e84.js";import{_ as O}from"./BasicInput.vue_vue_type_style_index_0_lang-fac93654.js";import{_ as ee,H as k,d as P,r as V,K as z,C as f,o as $,i as D,w as c,a as E,b as o,j as w,g as x,e as F,c as N,n as se,F as te,t as j,z as ae,v as re,p as ne,k as ie,E as oe}from"./index-96107119.js";import{F as H,_ as B}from"./index-c0db17f3.js";import{C as le}from"./index-96d195aa.js";import{a as de,M as ue}from"./index-bda114dd.js";import{t as me}from"./useDataTime-5817feb9.js";import{T as M}from"./shallowequal-7fda91ae.js";import"./fa_IR-c1033d89.js";import"./toArray-b1390e28.js";import"./vnode-e147c015.js";import"./FormItemContext-dc7be399.js";import"./pickAttrs-a0853987.js";import"./useState-00a24a9a.js";import"./_plugin-vue_export-helper-081dcfd4.js";import"./lodash-2d5bb56c.js";import"./BasicModal.vue_vue_type_style_index_0_lang-4e57697d.js";import"./index-3de84383.js";import"./Col-5c28624e.js";import"./index-6f043c51.js";import"./isPlainObject-4f3f1958.js";import"./usePrice-7afab779.js";const ce=async r=>{const{TableEngineRequest:a}=await ee(()=>import("./buildSupabaseQuery-76b96e09.js"),["assets/buildSupabaseQuery-76b96e09.js","assets/index-96107119.js","assets/index-5d811526.css"]),s={...r};!s.sort&&!s.order&&(s.order="-created_at");const e=await a(s,"users");try{if(Array.isArray(e==null?void 0:e.rows)){const t=e.rows.map(u=>({id:u.id??null,first_name:u.first_name||"",last_name:u.last_name||"",phone:u.phone||"",fname:u.first_name||"",lname:u.last_name||"",mobile:u.phone||"",...u}));return{...e,rows:t}}}catch(t){console.log("[getMembersTable] normalize error:",t)}return e},L=async r=>{const{data:a,error:s}=await k.from("users").select("*").eq("id",r).single();if(s)throw s;return{id:a.id??null,first_name:a.first_name||"",last_name:a.last_name||"",phone:a.phone||"",fname:a.first_name||"",lname:a.last_name||"",mobile:a.phone||"",...a}},pe=async r=>{const a={};r.first_name&&r.first_name.trim()!==""&&(a.first_name=r.first_name.trim()),r.last_name&&r.last_name.trim()!==""&&(a.last_name=r.last_name.trim()),r.phone&&r.phone.trim()!==""&&(a.phone=r.phone.trim());const{data:s,error:e}=await k.from("users").select("id, user_id").order("created_at",{ascending:!1}).limit(100);if(e||!s||s.length===0)throw new Error("برای ایجاد کاربر جدید، حداقل یک کاربر باید در سیستم وجود داشته باشد");let t=null;const u=s.find(l=>l.id===l.user_id);u?t=u.id:t=s[0].id,a.user_id=t;let p=null,h=null,i=0;const d=10,v=new Set;for(v.add(t);i<d;){const l=await k.from("users").insert([a]).select().single();if(h=l.error,p=l.data,!h)break;if(h.code==="23505"&&h.message.includes("user_id")){if(i++,i>=d)throw new Error("خطا در ایجاد کاربر: user_id باید منحصر به فرد باشد. لطفاً چند لحظه صبر کنید و دوباره تلاش کنید.");await new Promise(y=>setTimeout(y,300*i));const{data:n,error:g}=await k.from("users").select("id, user_id").order("created_at",{ascending:!1}).limit(100);if(!g&&n&&n.length>0){const y=n.find(U=>!v.has(U.id));if(y){t=y.id,v.add(t),a.user_id=t;continue}const b=n.find(U=>U.id===U.user_id&&!v.has(U.id));if(b){t=b.id,v.add(t),a.user_id=t;continue}const S=n.find(U=>U.id!==t);if(S){t=S.id,a.user_id=t;continue}}throw new Error("خطا در ایجاد کاربر: لطفاً چند لحظه صبر کنید و دوباره تلاش کنید.")}else throw h}if(h)throw h;if(p&&p.id&&p.user_id!==p.id){const{data:l,error:n}=await k.from("users").update({user_id:p.id}).eq("id",p.id).select().single();if(!n&&l)return l;if(n)throw n}return p},_e=async(r,a)=>{const s={};a.first_name!==void 0&&(s.first_name=a.first_name.trim()||null),a.last_name!==void 0&&(s.last_name=a.last_name.trim()||null),a.phone!==void 0&&(s.phone=a.phone.trim()||null);const{data:e,error:t}=await k.from("users").update(s).eq("id",r).select().single();if(t)throw t;return e},fe=async r=>{const{error:a}=await k.from("users").delete().eq("id",r);if(a)throw a;return{success:!0}},we=async r=>{const{data:a,error:s}=await k.from("user_doc_value").select("doc_value").eq("user_id",r).eq("doc_key","password").single();if(s&&s.code!=="PGRST116")throw s;return(a==null?void 0:a.doc_value)||null},ve=async r=>{const{data:a,error:s}=await k.from("user_doc_value").insert([r]).select();if(s)throw s;return a},he=async(r,a,s="password")=>{const{data:e,error:t}=await k.from("user_doc_value").select("*").eq("user_id",r).eq("doc_key",s);if(t)throw t;if(e&&e.length>0){const{data:u,error:p}=await k.from("user_doc_value").update({doc_value:a}).eq("user_id",r).eq("doc_key",s).select();if(p)throw p;return u}else{const{data:u,error:p}=await k.from("user_doc_value").insert([{user_id:r,doc_key:s,doc_value:a}]).select();if(p)throw p;return u}},ge={class:"max-h-[500px] overflow-y-auto p-3"},be={class:"grid grid-cols-1 md:grid-cols-2 md:gap-4"},ye=P({__name:"AddEditForm",props:{visible:{type:Boolean,default:!1},isEdit:{type:Boolean,default:!1},data:{}},emits:["update:visible","update:isEdit","success"],setup(r,{emit:a}){const s=r,e=V({first_name:"",last_name:"",phone:"",password:"",repeat_password:""}),t=()=>{e.first_name="",e.last_name="",e.phone="",e.password="",e.repeat_password=""};z(()=>s.visible,i=>{i&&(s.isEdit&&s.data?u():t())});const u=async()=>{try{t();const i=await L(s.data.id);e.first_name=i.first_name||"",e.last_name=i.last_name||"",e.phone=i.phone||"";try{const d=await we(i.id);e.password="",e.repeat_password=""}catch{e.password="",e.repeat_password=""}}catch(i){console.error("Error loading data:",i),f.error("خطا در بارگذاری اطلاعات")}},p=()=>{t(),a("update:visible",!1),a("update:isEdit",!1)},h=async()=>{try{if(!e.first_name||e.first_name.trim()===""){f.warning("نام الزامی است");return}if(!e.last_name||e.last_name.trim()===""){f.warning("نام خانوادگی الزامی است");return}if(!e.phone||e.phone.trim()===""){f.warning("تلفن همراه الزامی است");return}if(s.isEdit){if(e.password&&e.password.trim()!==""){if(!e.repeat_password||e.repeat_password.trim()===""){f.warning("تکرار کلمه عبور الزامی است");return}if(e.password!==e.repeat_password){f.warning("کلمه عبور و تکرار آن باید یکسان باشند");return}}}else{if(!e.password||e.password.trim()===""){f.warning("کلمه عبور الزامی است");return}if(e.password!==e.repeat_password){f.warning("کلمه عبور و تکرار آن باید یکسان باشند");return}}const i={first_name:e.first_name.trim(),last_name:e.last_name.trim(),phone:e.phone.trim()};if(s.isEdit&&s.data){const d=await _e(s.data.id,i);e.password&&e.password.trim()!==""&&await he(d.id,e.password,"password"),f.success("کاربر با موفقیت ویرایش شد"),a("update:isEdit",!1)}else{const d=await pe(i);e.password&&e.password.trim()!==""&&await ve({user_id:d.id,doc_key:"password",doc_value:e.password}),f.success("کاربر با موفقیت ایجاد شد")}t(),a("update:visible",!1),a("success")}catch(i){console.error("Error:",i),f.error((i==null?void 0:i.message)||"خطا در ثبت اطلاعات")}};return(i,d)=>{const v=O,l=R;return $(),D(l,{visible:s.visible,width:"50rem",title:`${s.isEdit?"ویرایش":"افزودن"} کاربر`,okText:"ثبت",onCancel:p,onOk:h},{default:c(()=>[E("div",ge,[o(w(H),{model:e},{default:c(()=>[E("div",be,[o(w(B),{label:"نام",key:"first_name",rules:[{required:!0,message:"نام الزامی است"}]},{default:c(()=>[o(v,{"place-holder":"نام",value:e.first_name,"onUpdate:value":d[0]||(d[0]=n=>e.first_name=n)},null,8,["value"])]),_:1}),o(w(B),{label:"نام خانوادگی",key:"last_name",rules:[{required:!0,message:"نام خانوادگی الزامی است"}]},{default:c(()=>[o(v,{"place-holder":"نام خانوادگی",value:e.last_name,"onUpdate:value":d[1]||(d[1]=n=>e.last_name=n)},null,8,["value"])]),_:1}),o(w(B),{label:"تلفن همراه",key:"phone",rules:[{required:!0,message:"تلفن همراه الزامی است"}]},{default:c(()=>[o(v,{"place-holder":"تلفن همراه",value:e.phone,"onUpdate:value":d[2]||(d[2]=n=>e.phone=n)},null,8,["value"])]),_:1}),o(w(B),{label:"کلمه عبور",key:"password",rules:s.isEdit?[]:[{required:!0,message:"کلمه عبور الزامی است"}]},{default:c(()=>[o(v,{type:"password","place-holder":"کلمه عبور",value:e.password,"onUpdate:value":d[3]||(d[3]=n=>e.password=n)},null,8,["value"])]),_:1},8,["rules"]),o(w(B),{label:"تکرار کلمه عبور",key:"repeat_password",rules:s.isEdit?[]:[{required:!0,message:"تکرار کلمه عبور الزامی است"}]},{default:c(()=>[o(v,{type:"password","place-holder":"تکرار کلمه عبور",value:e.repeat_password,"onUpdate:value":d[4]||(d[4]=n=>e.repeat_password=n)},null,8,["value"])]),_:1},8,["rules"])])]),_:1},8,["model"])])]),_:1},8,["visible","title"])}}}),ke={class:"max-h-[560px] overflow-y-auto p-3"},xe={class:"grid grid-cols-1 md:grid-cols-2 md:gap-4 mb-4"},Ee={class:"grid grid-cols-1 md:grid-cols-2 gap-3"},Ue=P({__name:"PromoteToAdminForm",props:{visible:{type:Boolean,default:!1},data:{default:null}},emits:["update:visible","success"],setup(r,{emit:a}){const s=r,e=x([]),t=V({name:"",phone:"",permissions:[]}),u=()=>{t.name="",t.phone="",t.permissions=[]},p=async()=>{e.value.length||(e.value=await Y())},h=()=>{if(!s.data)return;const l=[s.data.first_name,s.data.last_name].filter(Boolean).join(" ").trim();t.name=l||s.data.phone||"",t.phone=s.data.phone||"",t.permissions=[]};z(()=>s.visible,async l=>{l&&(await p(),s.data?h():u())});const i=(l,n)=>{if(n){t.permissions.includes(l)||t.permissions.push(l);return}t.permissions=t.permissions.filter(g=>g!==l)},d=()=>{a("update:visible",!1)},v=async()=>{var l,n,g;if(!((l=s.data)!=null&&l.id)){f.error("کاربر انتخاب نشده است");return}if(!t.name.trim()){f.error("نام الزامی است");return}if(!t.phone.trim()){f.error("کاربر شماره تلفن ندارد");return}try{await Z(s.data.id,{name:t.name.trim(),permissions:t.permissions}),f.success("کاربر با موفقیت به مدیران اضافه شد"),a("success"),d()}catch(y){f.error(((g=(n=y==null?void 0:y.response)==null?void 0:n.data)==null?void 0:g.error)||"خطا در افزودن به مدیران")}};return(l,n)=>{const g=O,y=R;return $(),D(y,{visible:s.visible,width:"52rem",title:"افزودن به مدیران",okText:"ثبت",onCancel:d,onOk:v},{default:c(()=>[E("div",ke,[o(w(H),{model:t},{default:c(()=>[E("div",xe,[o(w(B),{label:"نام"},{default:c(()=>[o(g,{"place-holder":"نام",value:t.name,"onUpdate:value":n[0]||(n[0]=b=>t.name=b)},null,8,["value"])]),_:1}),o(w(B),{label:"شماره تلفن"},{default:c(()=>[o(g,{"place-holder":"شماره تلفن",value:t.phone,"onUpdate:value":n[1]||(n[1]=b=>t.phone=b),disabled:""},null,8,["value"])]),_:1})]),o(w(de),null,{default:c(()=>[F("دسترسی به صفحات")]),_:1}),E("div",Ee,[($(!0),N(te,null,se(e.value,b=>($(),D(w(le),{key:b.key,checked:t.permissions.includes(b.key),onChange:S=>i(b.key,S.target.checked)},{default:c(()=>[F(j(b.label),1)]),_:2},1032,["checked","onChange"]))),128))])]),_:1},8,["model"])])]),_:1},8,["visible"])}}}),Ce=[{title:"ردیف",dataIndex:"id",key:"id",filterable:!1,customRender:r=>r.index+1},{title:"نام",dataIndex:"first_name",key:"first_name"},{title:"نام خانوادگی",dataIndex:"last_name",key:"last_name"},{title:"شماره همراه",dataIndex:"phone",key:"phone"},{title:" زمان ثبت نام",dataIndex:"created_at",key:"created_at",customRender:r=>r.record.created_at?me(r.record.created_at):"-"},{title:"عملیات",dataIndex:"action",key:"action",slot:"action",filterable:!1,align:"center"}],Be={class:"h-full"},Se=E("span",null,"افزودن کاربر",-1),Te={class:"gap-2 flex justify-center"},$e=E("span",null,"ویرایش",-1),qe=E("span",null,"حذف",-1),as=P({__name:"index",setup(r){const a=ae(),s=x(!1),e=x(!1),t=x(null),u=x(!1),p=x(null),h=x(new Set),i=x(new Set),d=x(null),[v,l]=W(),n=async()=>{if(a.isSuperAdmin)try{const m=await K();h.value=new Set(m.map(_=>_.auth_user_id).filter(_=>!!_).map(String)),i.value=new Set(m.map(_=>{var q;return _.phone||_.username||((q=_.email)==null?void 0:q.split("@")[0])||""}).filter(Boolean))}catch(m){console.error(m)}},g=m=>{if(m!=null&&m.id&&h.value.has(String(m.id)))return!0;const _=(m==null?void 0:m.phone)||"";return!!_&&i.value.has(_)},y=m=>{g(m)||(p.value=m,u.value=!0)},b=x({columns:Ce,api:ce}),S=async m=>{t.value=await L(m.id),e.value=!0,s.value=!0},U=async m=>{ue.confirm({title:"حذف کاربر",content:`آیا مطمئن هستید که میخواهید کاربر "${m.first_name||""} ${m.last_name||""}" را حذف کنید؟`,okText:"بله، حذف کن",cancelText:"انصراف",okType:"danger",centered:!0,onOk:async()=>{try{await fe(m.id),f.success("کاربر با موفقیت حذف شد"),await l()}catch(_){console.error("Error deleting user:",_),f.error("خطا در حذف کاربر")}}})};return re(()=>{n()}),(m,_)=>{const q=A,G=X,J=Q;return $(),N("div",Be,[o(J,oe(b.value,{ref_key:"table",ref:d,onRegister:w(v)}),{extraHeader:c(()=>[o(G,{type:"primary",onClick:_[0]||(_[0]=C=>s.value=!0)},{default:c(()=>[Se,o(q,{icon:"vuesax-linear:user",size:"17"})]),_:1})]),action:c(({column:C,record:T})=>[E("div",Te,[w(a).isSuperAdmin?($(),D(w(M),{key:0,class:"cursor-pointer"},{title:c(()=>[E("span",null,j(g(T)?"قبلاً مدیر است":"افزودن به مدیران"),1)]),default:c(()=>[o(A,{icon:"vuesax-linear:user-tick",color:g(T)?"#9CA3AF":"#059669",class:ne({"opacity-40 cursor-not-allowed":g(T)}),onClick:I=>y(T)},null,8,["color","class","onClick"])]),_:2},1024)):ie("",!0),o(w(M),{class:"cursor-pointer"},{title:c(()=>[$e]),default:c(()=>[o(A,{icon:"vuesax-linear:edit",color:"#1D4ED8",onClick:I=>S(T)},null,8,["onClick"])]),_:2},1024),o(w(M),{class:"cursor-pointer"},{title:c(()=>[qe]),default:c(()=>[o(A,{icon:"vuesax-linear:trash",color:"#DC2626",onClick:I=>U(T)},null,8,["onClick"])]),_:2},1024)])]),_:1},16,["onRegister"]),o(ye,{visible:s.value,"onUpdate:visible":_[1]||(_[1]=C=>s.value=C),"is-edit":e.value,"onUpdate:isEdit":_[2]||(_[2]=C=>e.value=C),data:t.value,onSuccess:w(l)},null,8,["visible","is-edit","data","onSuccess"]),o(Ue,{visible:u.value,"onUpdate:visible":_[3]||(_[3]=C=>u.value=C),data:p.value,onSuccess:n},null,8,["visible","data"])])}}});export{as as default};
|