2 lines
11 KiB
JavaScript
2 lines
11 KiB
JavaScript
import{_ as C}from"./BaseTable.vue_vue_type_style_index_0_lang-f9e383e0.js";import{_ as D}from"./button.vue_vue_type_style_index_0_lang-5b65d3cd.js";import{I as q}from"./Icon-ff3adddf.js";import{_ as M}from"./Modal.vue_vue_type_style_index_0_lang-743b5887.js";import{_ as P}from"./BasicInput.vue_vue_type_style_index_0_lang-75f50aa0.js";import{a3 as R,a4 as _,d as T,t as F,h as A,a0 as p,o as $,K as S,w as c,a as y,b as u,L as v,r as E,c as V,a2 as z}from"./index-c822befc.js";import{b as O,F as x}from"./index-1491d479.js";import{u as L}from"./useBaseTable-3aeb2499.js";import{M as N}from"./index-71609388.js";import{T as B}from"./index-81ddbbad.js";import"./usePrefix-93de78a0.js";import"./index-69ae13da.js";import"./raf-e9e40ecb.js";import"./index-d11abaf6.js";import"./colors-b3e52159.js";import"./styleChecker-cf4483ca.js";import"./useState-3b1f4886.js";import"./index-976673f9.js";import"./debounce-89f3cd70.js";import"./SearchOutlined-8e71a0af.js";import"./pickAttrs-6fdf7ff0.js";import"./CheckOutlined-af96a0f7.js";import"./objectDestructuringEmpty-24e23e90.js";import"./eagerComputed-7892359b.js";import"./index-16f734d6.js";import"./BasicModal.vue_vue_type_style_index_0_lang-fa4544ee.js";import"./index-1f56a36b.js";import"./index-b00d1c6a.js";import"./EyeOutlined-b57fa33c.js";import"./_plugin-vue_export-helper-c27b6911.js";import"./usePrice-7afab779.js";import"./Col-25b75183.js";const j=async a=>{const{TableEngineRequest:s}=await R(()=>import("./buildSupabaseQuery-623c69c8.js"),["assets/buildSupabaseQuery-623c69c8.js","assets/index-c822befc.js","assets/index-158f9d8b.css"]),t=await s(a,"users");try{if(Array.isArray(t==null?void 0:t.rows)){const e=t.rows.map(r=>({id:r.id??null,first_name:r.first_name||"",last_name:r.last_name||"",phone:r.phone||"",fname:r.first_name||"",lname:r.last_name||"",mobile:r.phone||"",...r}));return{...t,rows:e}}}catch(e){console.log("[getMembersTable] normalize error:",e)}return t},I=async a=>{const{data:s,error:t}=await _.from("users").select("*").eq("id",a).single();if(t)throw t;return{id:s.id??null,first_name:s.first_name||"",last_name:s.last_name||"",phone:s.phone||"",fname:s.first_name||"",lname:s.last_name||"",mobile:s.phone||"",...s}},G=async a=>{const s={};a.first_name&&a.first_name.trim()!==""&&(s.first_name=a.first_name.trim()),a.last_name&&a.last_name.trim()!==""&&(s.last_name=a.last_name.trim()),a.phone&&a.phone.trim()!==""&&(s.phone=a.phone.trim());const{data:t,error:e}=await _.from("users").select("id, user_id").order("created_at",{ascending:!1}).limit(100);if(e||!t||t.length===0)throw new Error("برای ایجاد کاربر جدید، حداقل یک کاربر باید در سیستم وجود داشته باشد");let r=null;const w=t.find(d=>d.id===d.user_id);w?r=w.id:r=t[0].id,s.user_id=r;let l=null,f=null,i=0;const o=10,m=new Set;for(m.add(r);i<o;){const d=await _.from("users").insert([s]).select().single();if(f=d.error,l=d.data,!f)break;if(f.code==="23505"&&f.message.includes("user_id")){if(i++,i>=o)throw new Error("خطا در ایجاد کاربر: user_id باید منحصر به فرد باشد. لطفاً چند لحظه صبر کنید و دوباره تلاش کنید.");await new Promise(b=>setTimeout(b,300*i));const{data:n,error:U}=await _.from("users").select("id, user_id").order("created_at",{ascending:!1}).limit(100);if(!U&&n&&n.length>0){const b=n.find(h=>!m.has(h.id));if(b){r=b.id,m.add(r),s.user_id=r;continue}const g=n.find(h=>h.id===h.user_id&&!m.has(h.id));if(g){r=g.id,m.add(r),s.user_id=r;continue}const k=n.find(h=>h.id!==r);if(k){r=k.id,s.user_id=r;continue}}throw new Error("خطا در ایجاد کاربر: لطفاً چند لحظه صبر کنید و دوباره تلاش کنید.")}else throw f}if(f)throw f;if(l&&l.id&&l.user_id!==l.id){const{data:d,error:n}=await _.from("users").update({user_id:l.id}).eq("id",l.id).select().single();if(!n&&d)return d;if(n)throw n}return l},H=async(a,s)=>{const t={};s.first_name!==void 0&&(t.first_name=s.first_name.trim()||null),s.last_name!==void 0&&(t.last_name=s.last_name.trim()||null),s.phone!==void 0&&(t.phone=s.phone.trim()||null);const{data:e,error:r}=await _.from("users").update(t).eq("id",a).select().single();if(r)throw r;return e},J=async a=>{const{error:s}=await _.from("users").delete().eq("id",a);if(s)throw s;return{success:!0}},Q=async a=>{const{data:s,error:t}=await _.from("user_doc_value").select("doc_value").eq("user_id",a).eq("doc_key","password").single();if(t&&t.code!=="PGRST116")throw t;return(s==null?void 0:s.doc_value)||null},W=async a=>{const{data:s,error:t}=await _.from("user_doc_value").insert([a]).select();if(t)throw t;return s},X=async(a,s,t="password")=>{const{data:e,error:r}=await _.from("user_doc_value").select("*").eq("user_id",a).eq("doc_key",t);if(r)throw r;if(e&&e.length>0){const{data:w,error:l}=await _.from("user_doc_value").update({doc_value:s}).eq("user_id",a).eq("doc_key",t).select();if(l)throw l;return w}else{const{data:w,error:l}=await _.from("user_doc_value").insert([{user_id:a,doc_key:t,doc_value:s}]).select();if(l)throw l;return w}},Y={class:"max-h-[500px] overflow-y-auto p-3"},Z={class:"grid grid-cols-1 md:grid-cols-2 md:gap-4"},K=T({__name:"AddEditForm",props:{visible:{type:Boolean,default:!1},isEdit:{type:Boolean,default:!1},data:{}},emits:["update:visible","update:isEdit","success"],setup(a,{emit:s}){const t=a,e=F({first_name:"",last_name:"",phone:"",password:"",repeat_password:""}),r=()=>{e.first_name="",e.last_name="",e.phone="",e.password="",e.repeat_password=""};A(()=>t.visible,i=>{i&&(t.isEdit&&t.data?w():r())});const w=async()=>{try{r();const i=await I(t.data.id);e.first_name=i.first_name||"",e.last_name=i.last_name||"",e.phone=i.phone||"";try{const o=await Q(i.id);e.password="",e.repeat_password=""}catch{e.password="",e.repeat_password=""}}catch(i){console.error("Error loading data:",i),p.error("خطا در بارگذاری اطلاعات")}},l=()=>{r(),s("update:visible",!1),s("update:isEdit",!1)},f=async()=>{try{if(!e.first_name||e.first_name.trim()===""){p.warning("نام الزامی است");return}if(!e.last_name||e.last_name.trim()===""){p.warning("نام خانوادگی الزامی است");return}if(!e.phone||e.phone.trim()===""){p.warning("تلفن همراه الزامی است");return}if(t.isEdit){if(e.password&&e.password.trim()!==""){if(!e.repeat_password||e.repeat_password.trim()===""){p.warning("تکرار کلمه عبور الزامی است");return}if(e.password!==e.repeat_password){p.warning("کلمه عبور و تکرار آن باید یکسان باشند");return}}}else{if(!e.password||e.password.trim()===""){p.warning("کلمه عبور الزامی است");return}if(e.password!==e.repeat_password){p.warning("کلمه عبور و تکرار آن باید یکسان باشند");return}}const i={first_name:e.first_name.trim(),last_name:e.last_name.trim(),phone:e.phone.trim()};if(t.isEdit&&t.data){const o=await H(t.data.id,i);e.password&&e.password.trim()!==""&&await X(o.id,e.password,"password"),p.success("کاربر با موفقیت ویرایش شد"),s("update:isEdit",!1)}else{const o=await G(i);e.password&&e.password.trim()!==""&&await W({user_id:o.id,doc_key:"password",doc_value:e.password}),p.success("کاربر با موفقیت ایجاد شد")}r(),s("update:visible",!1),s("success")}catch(i){console.error("Error:",i),p.error((i==null?void 0:i.message)||"خطا در ثبت اطلاعات")}};return(i,o)=>{const m=P,d=M;return $(),S(d,{visible:t.visible,width:"50rem",title:`${t.isEdit?"ویرایش":"افزودن"} کاربر`,okText:"ثبت",onCancel:l,onOk:f},{default:c(()=>[y("div",Y,[u(v(O),{model:e},{default:c(()=>[y("div",Z,[u(v(x),{label:"نام",key:"first_name",rules:[{required:!0,message:"نام الزامی است"}]},{default:c(()=>[u(m,{"place-holder":"نام",value:e.first_name,"onUpdate:value":o[0]||(o[0]=n=>e.first_name=n)},null,8,["value"])]),_:1}),u(v(x),{label:"نام خانوادگی",key:"last_name",rules:[{required:!0,message:"نام خانوادگی الزامی است"}]},{default:c(()=>[u(m,{"place-holder":"نام خانوادگی",value:e.last_name,"onUpdate:value":o[1]||(o[1]=n=>e.last_name=n)},null,8,["value"])]),_:1}),u(v(x),{label:"تلفن همراه",key:"phone",rules:[{required:!0,message:"تلفن همراه الزامی است"}]},{default:c(()=>[u(m,{"place-holder":"تلفن همراه",value:e.phone,"onUpdate:value":o[2]||(o[2]=n=>e.phone=n)},null,8,["value"])]),_:1}),u(v(x),{label:"کلمه عبور",key:"password",rules:t.isEdit?[]:[{required:!0,message:"کلمه عبور الزامی است"}]},{default:c(()=>[u(m,{type:"password","place-holder":"کلمه عبور",value:e.password,"onUpdate:value":o[3]||(o[3]=n=>e.password=n)},null,8,["value"])]),_:1},8,["rules"]),u(v(x),{label:"تکرار کلمه عبور",key:"repeat_password",rules:t.isEdit?[]:[{required:!0,message:"تکرار کلمه عبور الزامی است"}]},{default:c(()=>[u(m,{type:"password","place-holder":"تکرار کلمه عبور",value:e.repeat_password,"onUpdate:value":o[4]||(o[4]=n=>e.repeat_password=n)},null,8,["value"])]),_:1},8,["rules"])])]),_:1},8,["model"])])]),_:1},8,["visible","title"])}}}),ee=[{title:"ردیف",dataIndex:"id",key:"id",filterable:!1,customRender:a=>a.index+1},{title:"نام",dataIndex:"first_name",key:"first_name"},{title:"نام خانوادگی",dataIndex:"last_name",key:"last_name"},{title:"شماره همراه",dataIndex:"phone",key:"phone"},{title:"عملیات",dataIndex:"action",key:"action",slot:"action",filterable:!1}],se={class:"h-full"},te=y("span",null,"افزودن کاربر",-1),re={class:"gap-2 flex justify-center"},ae=y("span",null,"ویرایش",-1),ie=y("span",null,"حذف",-1),Se=T({__name:"index",setup(a){const s=E(!1),t=E(!1),e=E(null),r=E(null),[w,l]=L(),f=E({columns:ee,api:j}),i=async m=>{e.value=await I(m.id),t.value=!0,s.value=!0},o=async m=>{N.confirm({title:"حذف کاربر",content:`آیا مطمئن هستید که میخواهید کاربر "${m.first_name||""} ${m.last_name||""}" را حذف کنید؟`,okText:"بله، حذف کن",cancelText:"انصراف",okType:"danger",centered:!0,onOk:async()=>{try{await J(m.id),p.success("کاربر با موفقیت حذف شد"),await l()}catch(d){console.error("Error deleting user:",d),p.error("خطا در حذف کاربر")}}})};return(m,d)=>{const n=q,U=D,b=C;return $(),V("div",se,[u(b,z(f.value,{ref_key:"table",ref:r,onRegister:v(w)}),{extraHeader:c(()=>[u(U,{type:"primary",onClick:d[0]||(d[0]=g=>s.value=!0)},{default:c(()=>[te,u(n,{icon:"vuesax-linear:user",size:"17"})]),_:1})]),action:c(({column:g,record:k})=>[y("div",re,[u(v(B),{class:"cursor-pointer"},{title:c(()=>[ae]),default:c(()=>[u(q,{icon:"vuesax-linear:edit",color:"#1D4ED8",onClick:h=>i(k)},null,8,["onClick"])]),_:2},1024),u(v(B),{class:"cursor-pointer"},{title:c(()=>[ie]),default:c(()=>[u(q,{icon:"vuesax-linear:trash",color:"#DC2626",onClick:h=>o(k)},null,8,["onClick"])]),_:2},1024)])]),_:1},16,["onRegister"]),u(K,{visible:s.value,"onUpdate:visible":d[1]||(d[1]=g=>s.value=g),"is-edit":t.value,"onUpdate:isEdit":d[2]||(d[2]=g=>t.value=g),data:e.value,onSuccess:v(l)},null,8,["visible","is-edit","data","onSuccess"])])}}});export{Se as default};
|