2 lines
17 KiB
JavaScript
2 lines
17 KiB
JavaScript
import{_ as me}from"./BasicMainCard-33e38576.js";import{_ as _e}from"./BasicModal.vue_vue_type_style_index_0_lang-aed8f5e4.js";import{_ as pe}from"./BasicTextArea.vue_vue_type_style_index_0_lang-4fdd65e6.js";import{_ as ge}from"./BaseSwitch.vue_vue_type_script_setup_true_lang-36a1ea6e.js";import{_ as ve}from"./BasicInput.vue_vue_type_style_index_0_lang-e6a4e582.js";import{_ as he,u as fe}from"./useBaseTable-e7a67916.js";import{_ as xe}from"./button.vue_vue_type_style_index_0_lang-f90e25b2.js";import{_ as we,Z as ye,$ as N,O as z,P as ee,Q as V,d as be,i as k,o as $,c as D,e as i,w as f,b as e,f as ke,R as Ce,l as T,t as P,n as O,F as Ue,q as Ie,H as x,a0 as qe,S as Te}from"./index-1ba0f9ec.js";import{t as $e}from"./useDataTime-6e234adb.js";import{I as S}from"./Icon-29e38d16.js";import{e as L,g as F}from"./convert-2ad76038.js";import{M as Y}from"./index-ec322234.js";import{S as De}from"./index-4bff02a6.js";import{T as Q}from"./isSymbol-355a1404.js";import{U as Se}from"./index-f4084f09.js";import"./Grid-660f1a55.js";import"./index-f22a4554.js";import"./_plugin-vue_export-helper-31e07528.js";import"./shallowequal-e0d9eafb.js";import"./index-3f6d5caa.js";import"./vnode-c4e67237.js";import"./index-73cafb1e.js";import"./useState-dcd360f8.js";import"./useRefs-5e33302c.js";import"./_flatRest-7877cdf8.js";import"./isMobile-e2e89480.js";import"./omit-f5d28cd3.js";import"./index-c136a321.js";import"./Col-f8806a10.js";import"./styleChecker-19ce40ea.js";import"./isPlainObject-e945bc1f.js";import"./index-aafc0fe2.js";import"./SearchOutlined-95278fe5.js";import"./FormItemContext-33ef1221.js";import"./index-8f2b7e91.js";import"./usePrice-bc935b83.js";import"./updateLocale-a8654270.js";import"./useMemo-ee45fb46.js";import"./lodash-27f814e6.js";import"./index-c8127d4e.js";import"./Badge-8a8eeb58.js";import"./isNumeric-3f69e2aa.js";import"./index-a8579634.js";import"./index-e22339b6.js";import"./index-876da578.js";import"./LeftOutlined-93011b30.js";import"./css-aae66f86.js";import"./DialogWrap-394d7eb0.js";import"./pickAttrs-0ddf9a54.js";import"./index-e0664925.js";import"./toArray-41940180.js";import"./index-175b83cf.js";import"./index-83b891e2.js";import"./index-65e13d19.js";async function Ae(r){const{TableEngineRequest:g}=await we(()=>import("./buildSupabaseQuery-2323f568.js"),["assets/buildSupabaseQuery-2323f568.js","assets/index-1ba0f9ec.js","assets/index-cb402307.css"]),l={...r};!l.sort&&!l.order&&(l.order="sort_order");const d=await g(l,"iran_tourism_challenges");try{if(Array.isArray(d==null?void 0:d.rows)){const v=l.page||1,y=l.limit||200,C=(v-1)*y,A=d.rows.map((I,q)=>({...I,index:C+q}));return{...d,rows:A}}}catch(v){console.log("[getIranTourismChallengeTable] normalize error:",v)}return d}async function Be(r){const g=await ye("iran_tourism_challenges",r),l=await N("iran_tourism_challenge_questions",{challenge_id:r});return{...g,questions:Array.isArray(l)?l:[]}}async function Re(r){const g=await z("iran_tourism_challenges",{...r.challenge,updated_at:new Date().toISOString()});for(let l=0;l<r.questions.length;l++){const d=r.questions[l];await z("iran_tourism_challenge_questions",{challenge_id:g.id,question:d.question,options:d.options,correct_answer:d.correct_answer||null,sort_order:d.sort_order??l})}return g}async function Le(r,g){await ee("iran_tourism_challenges",r,{...g.challenge,updated_at:new Date().toISOString()});const l=await N("iran_tourism_challenge_questions",{challenge_id:r});for(const d of Array.isArray(l)?l:[])await V("iran_tourism_challenge_questions",d.id);for(let d=0;d<g.questions.length;d++){const v=g.questions[d];await z("iran_tourism_challenge_questions",{challenge_id:r,question:v.question,options:v.options,correct_answer:v.correct_answer||null,sort_order:v.sort_order??d})}return{id:r}}async function je(r,g){const l=await ee("iran_tourism_challenges",r,{...g,updated_at:new Date().toISOString()});return Array.isArray(l)?l:[l]}async function Me(r){const g=await N("iran_tourism_challenge_questions",{challenge_id:r});for(const l of Array.isArray(g)?g:[])await V("iran_tourism_challenge_questions",l.id);await V("iran_tourism_challenges",r)}const Pe=[{title:"ردیف",dataIndex:"id",key:"id",filterable:!1,width:70,align:"center",customRender:r=>r.record.index+1},{title:"عنوان",dataIndex:"title",key:"title"},{title:"ترتیب",dataIndex:"sort_order",key:"sort_order",width:80,align:"center"},{title:"وضعیت نمایش",dataIndex:"show",key:"show",type:"Boolean",filterable:!0,align:"center",customRender:r=>r.record.show?"نمایش":"مخفی"},{title:"زمان ایجاد",dataIndex:"created_at",key:"created_at",customRender:r=>$e(r.record.created_at)},{title:"عملیات",dataIndex:"action",key:"action",slot:"action",filterable:!1,align:"center"}],Oe={class:"flex justify-between items-center mb-4"},Fe=e("h2",null,"چالش ایرانگردی",-1),Qe={class:"gap-2 flex justify-center"},ze=e("span",null,"ویرایش",-1),Ve=e("span",null,"حذف",-1),Ne={class:"space-y-4 relative"},Ee={key:0,class:"absolute inset-0 bg-white/60 z-10 flex items-center justify-center"},We=e("div",{class:"mb-1 text-sm text-gray-600"},"عنوان چالش",-1),He={class:"grid grid-cols-1 sm:grid-cols-2 gap-4"},Je=e("div",{class:"mb-1 text-sm text-gray-600"},"ترتیب نمایش",-1),Ge=e("div",{class:"mb-1 text-sm text-gray-600"},"وضعیت نمایش",-1),Xe={class:"flex items-center gap-2 h-10"},Ze={class:"text-sm text-gray-600"},Ke={class:"flex flex-wrap justify-center gap-10 pb-2"},Ye=e("div",{class:"mb-1 text-sm text-gray-600 text-center"},"عکس چالش (صفحه لیست)",-1),et={key:0},tt=e("div",null,"آپلود تصویر",-1),at=e("div",{class:"mb-1 text-sm text-gray-600 text-center"},"عکس تبریک",-1),ot={key:0},st=e("div",null,"آپلود تصویر",-1),nt=e("div",{class:"mb-1 text-sm text-gray-600"},"متن تبریک",-1),it={class:"mt-2 flex flex-wrap items-center gap-2 text-xs text-gray-500"},rt=e("span",null,"متغیر قابل استفاده:",-1),lt=e("span",null,"تعداد افرادی که این چالش را کامل کردهاند",-1),ut=e("div",{class:"section-divider"},null,-1),ct={class:"pt-2"},dt=e("div",{class:"mb-2 text-sm text-gray-600 font-medium"},"سوالات چالش (چهارگزینهای)",-1),mt={class:"space-y-3"},_t={class:"mb-1 text-xs text-gray-500"},pt={class:"grid grid-cols-2 gap-3"},gt=e("div",{class:"mb-1 text-xs text-gray-500"},"گزینه ۱",-1),vt=e("div",{class:"mb-1 text-xs text-gray-500"},"گزینه ۲",-1),ht=e("div",{class:"mb-1 text-xs text-gray-500"},"گزینه ۳",-1),ft=e("div",{class:"mb-1 text-xs text-gray-500"},"گزینه ۴",-1),xt=e("div",{class:"mb-1 text-xs text-gray-500"},"جواب صحیح (اختیاری — همه کاربران برنده میشوند)",-1),wt={class:"flex justify-end"},yt=e("span",{class:"text-[#DC2626]"},"حذف سوال",-1),bt=e("span",{class:"text-gray-500"},"+ افزودن سوال",-1),ka=be({__name:"index",setup(r){const g=Se,[l,d]=fe(),v=k([]),y=k([]),C=k(0),A=k(!1),I=k(!1),q=k(!1),B=k(null),j=()=>({id:1,question:"",option1:"",option2:"",option3:"",option4:"",correct_answer:""}),s=k({title:"",image_url:null,congrats_image_url:null,congrats_text:"",show:!0,sort_order:0,questions:[j()]}),te=k({columns:Pe,api:Ae,defaultPageLimit:20});function E(c){return c.type.startsWith("image/")?c.size/1024/1024<5?!0:(x.error("حجم تصویر باید کمتر از 5MB باشد!"),!1):(x.error("فقط فایلهای تصویری قابل آپلود هستند!"),!1)}async function W(c,a){const{file:n,onSuccess:m,onError:u,onProgress:w}=c,p=new FormData;p.append("file",n);const U=`${Te}/upload/machartaa-img`;C.value++,await new Promise((R,t)=>{const _=new XMLHttpRequest;_.open("POST",U);const h=qe()||localStorage.getItem("tamin_token")||localStorage.getItem("token")||"";_.setRequestHeader("Authorization",`Bearer ${h}`),_.upload.onprogress=b=>{b.lengthComputable&&(w==null||w({percent:Math.round(b.loaded/b.total*100)}))},_.onload=()=>{var b,J,G,X;if(_.status>=200&&_.status<300)try{const o=JSON.parse(_.responseText||"{}"),de=(o==null?void 0:o.full_src)||(o==null?void 0:o.url)||(o==null?void 0:o.src)||(o==null?void 0:o.path)||((b=o==null?void 0:o.data)==null?void 0:b.full_src)||((J=o==null?void 0:o.data)==null?void 0:J.url)||((G=o==null?void 0:o.data)==null?void 0:G.src)||((X=o==null?void 0:o.data)==null?void 0:X.path)||"",M=L(de),Z=F(M),K=Z?[{uid:`${Date.now()}`,name:"image.jpg",status:"done",url:Z,response:{path:M}}]:[];a==="image"?(s.value.image_url=M||null,v.value=K):(s.value.congrats_image_url=M||null,y.value=K),m==null||m(o,_),x.success("تصویر با موفقیت آپلود شد!"),R()}catch(o){u==null||u(o,_),t(o)}else{const o=new Error("خطا در آپلود تصویر");u==null||u(o,_),t(o)}},_.onerror=()=>{const b=new Error("خطا در آپلود تصویر!");u==null||u(b,_),t(b)},_.onloadend=()=>{C.value=Math.max(0,C.value-1)},_.send(p)})}function ae(){s.value={title:"",image_url:null,congrats_image_url:null,congrats_text:"",show:!0,sort_order:0,questions:[j()]},v.value=[],y.value=[]}function oe(){ae(),q.value=!1,B.value=null,I.value=!0}function H(){I.value=!1,q.value=!1,B.value=null}function se(){s.value.questions.push({...j(),id:s.value.questions.length+1})}function ne(c){s.value.questions.length<=1||s.value.questions.splice(c,1)}function ie(c){const a=s.value.congrats_text||"",n=a&&!/\s$/.test(a)?" ":"";s.value.congrats_text=`${a}${n}${c}`}async function re(){var n,m,u,w;if(!((n=s.value.title)!=null&&n.trim())){x.warning("عنوان چالش را وارد کنید");return}if(C.value>0){x.warning("لطفاً تا پایان آپلود تصاویر صبر کنید.");return}const c=s.value.questions.map((p,U)=>({question:p.question.trim(),options:[p.option1,p.option2,p.option3,p.option4].map(R=>R.trim()).filter(Boolean),correct_answer:p.correct_answer?String(p.correct_answer).trim():"",sort_order:U})).filter(p=>p.question&&p.options.length>=2);if(!c.length){x.warning("حداقل یک سوال با دو گزینه وارد کنید");return}const a={challenge:{title:s.value.title.trim(),image_url:((m=s.value.image_url)==null?void 0:m.trim())||null,congrats_image_url:((u=s.value.congrats_image_url)==null?void 0:u.trim())||null,congrats_text:((w=s.value.congrats_text)==null?void 0:w.trim())||null,show:s.value.show??!0,sort_order:Number(s.value.sort_order)||0},questions:c};A.value=!0;try{q.value&&B.value?(await Le(B.value,a),x.success("چالش با موفقیت ویرایش شد!")):(await Re(a),x.success("چالش با موفقیت ایجاد شد!")),H(),await d()}catch(p){console.error(p),x.error("خطا در ذخیره چالش!")}finally{A.value=!1}}async function le(c){var a;try{const n=await Be(c.id);if(n.image_url){const m=L(n.image_url);v.value=[{uid:`image-${Date.now()}`,name:"image.jpg",status:"done",url:F(m),response:{path:m}}]}else v.value=[];if(n.congrats_image_url){const m=L(n.congrats_image_url);y.value=[{uid:`congrats-${Date.now()}`,name:"congrats.jpg",status:"done",url:F(m),response:{path:m}}]}else y.value=[];s.value={title:n.title||"",image_url:L(n.image_url)||null,congrats_image_url:L(n.congrats_image_url)||null,congrats_text:n.congrats_text||"",show:n.show??!0,sort_order:n.sort_order??0,questions:((a=n.questions)==null?void 0:a.length)>0?n.questions.map(m=>{var u,w,p,U;return{id:m.id,question:m.question||"",option1:((u=m.options)==null?void 0:u[0])||"",option2:((w=m.options)==null?void 0:w[1])||"",option3:((p=m.options)==null?void 0:p[2])||"",option4:((U=m.options)==null?void 0:U[3])||"",correct_answer:m.correct_answer||""}}):[j()]},q.value=!0,B.value=c.id,I.value=!0}catch(n){console.error(n),x.error("خطا در بارگذاری اطلاعات چالش!")}}function ue(c){const a=!c.show;Y.confirm({title:"تغییر وضعیت نمایش",content:a?`آیا مطمئن هستید که میخواهید چالش "${c.title}" را نمایش دهید؟`:`آیا مطمئن هستید که میخواهید چالش "${c.title}" را مخفی کنید؟`,okText:"بله",cancelText:"خیر",onOk:async()=>{try{await je(c.id,{show:a}),x.success(a?"چالش نمایش داده شد!":"چالش مخفی شد!"),await d()}catch(n){console.error(n),x.error("خطا در تغییر وضعیت نمایش!")}}})}function ce(c){Y.confirm({title:"حذف چالش",content:`آیا مطمئن هستید که میخواهید چالش "${c.title}" را حذف کنید؟`,okText:"بله، حذف کن",cancelText:"انصراف",okType:"danger",centered:!0,onOk:async()=>{try{await Me(c.id),x.success("چالش با موفقیت حذف شد!"),await d()}catch(a){console.error(a),x.error("خطا در حذف چالش!")}}})}return(c,a)=>{const n=xe,m=he,u=ve,w=ge,p=pe,U=_e,R=me;return $(),D("div",null,[i(R,null,{default:f(()=>[e("div",Oe,[Fe,i(n,{type:"primary",onClick:oe},{default:f(()=>[ke("افزودن چالش")]),_:1})]),i(m,Ce(te.value,{ref:"table",onRegister:T(l)}),{action:f(({record:t})=>[e("div",Qe,[i(T(Q),{class:"cursor-pointer"},{title:f(()=>[e("span",null,P(t.show?"مخفی کردن":"نمایش"),1)]),default:f(()=>[i(S,{icon:t.show?"vuesax-linear:eye-slash":"vuesax-linear:eye",color:t.show?"#F59E0B":"#16A34A",onClick:_=>ue(t)},null,8,["icon","color","onClick"])]),_:2},1024),i(T(Q),{class:"cursor-pointer"},{title:f(()=>[ze]),default:f(()=>[i(S,{icon:"vuesax-linear:edit",color:"#1D4ED8",onClick:_=>le(t)},null,8,["onClick"])]),_:2},1024),i(T(Q),{class:"cursor-pointer"},{title:f(()=>[Ve]),default:f(()=>[i(S,{icon:"vuesax-linear:trash",color:"#DC2626",onClick:_=>ce(t)},null,8,["onClick"])]),_:2},1024)])]),_:1},16,["onRegister"]),i(U,{visible:I.value,"onUpdate:visible":a[7]||(a[7]=t=>I.value=t),title:q.value?"ویرایش چالش":"افزودن چالش",onOk:re,onCancel:H,width:"80%",confirmLoading:A.value||C.value>0},{default:f(()=>[e("div",Ne,[C.value>0?($(),D("div",Ee,[i(T(De),{size:"large"})])):O("",!0),e("div",null,[We,i(u,{value:s.value.title,"onUpdate:value":a[0]||(a[0]=t=>s.value.title=t),placeholder:"عنوان چالش"},null,8,["value"])]),e("div",He,[e("div",null,[Je,i(u,{value:s.value.sort_order,"onUpdate:value":a[1]||(a[1]=t=>s.value.sort_order=t),type:"number",placeholder:"0"},null,8,["value"])]),e("div",null,[Ge,e("div",Xe,[i(w,{value:s.value.show,"onUpdate:value":a[2]||(a[2]=t=>s.value.show=t)},null,8,["value"]),e("span",Ze,P(s.value.show?"نمایش":"مخفی"),1)])])]),e("div",Ke,[e("div",null,[Ye,i(T(g),{"file-list":v.value,"onUpdate:fileList":a[3]||(a[3]=t=>v.value=t),"before-upload":E,"custom-request":t=>W(t,"image"),accept:"image/jpeg,image/png,image/webp,image/gif,image/heic,image/heif,.jpg,.jpeg,.png,.webp,.gif,.heic,.heif","max-count":1,"list-type":"picture-card"},{default:f(()=>[v.value.length<1?($(),D("div",et,[i(S,{icon:"vuesax-linear:image",class:"text-2xl mb-2"}),tt])):O("",!0)]),_:1},8,["file-list","custom-request"])]),e("div",null,[at,i(T(g),{"file-list":y.value,"onUpdate:fileList":a[4]||(a[4]=t=>y.value=t),"before-upload":E,"custom-request":t=>W(t,"congrats"),accept:"image/jpeg,image/png,image/webp,image/gif,image/heic,image/heif,.jpg,.jpeg,.png,.webp,.gif,.heic,.heif","max-count":1,"list-type":"picture-card"},{default:f(()=>[y.value.length<1?($(),D("div",ot,[i(S,{icon:"vuesax-linear:image",class:"text-2xl mb-2"}),st])):O("",!0)]),_:1},8,["file-list","custom-request"])])]),e("div",null,[nt,i(p,{value:s.value.congrats_text,"onUpdate:value":a[5]||(a[5]=t=>s.value.congrats_text=t),placeholder:"متن پیام تبریک این چالش — مثلاً: تا الان {completers_count} نفر این چالش را کامل کردهاند",rows:4},null,8,["value"]),e("div",it,[rt,e("button",{type:"button",class:"px-2 py-1 rounded border border-dashed border-gray-400 bg-gray-50 hover:bg-gray-100 font-mono text-[11px] text-gray-700",title:"کلیک برای درج در متن",onClick:a[6]||(a[6]=t=>ie("{completers_count}"))},P("{completers_count}")),lt])]),ut,e("div",ct,[dt,e("div",mt,[($(!0),D(Ue,null,Ie(s.value.questions,(t,_)=>($(),D("div",{key:_,class:"border rounded-lg p-3 space-y-3"},[e("div",null,[e("div",_t,"سوال "+P(_+1),1),i(u,{value:t.question,"onUpdate:value":h=>t.question=h,placeholder:`سوال ${_+1}`},null,8,["value","onUpdate:value","placeholder"])]),e("div",pt,[e("div",null,[gt,i(u,{value:t.option1,"onUpdate:value":h=>t.option1=h,placeholder:"گزینه ۱"},null,8,["value","onUpdate:value"])]),e("div",null,[vt,i(u,{value:t.option2,"onUpdate:value":h=>t.option2=h,placeholder:"گزینه ۲"},null,8,["value","onUpdate:value"])]),e("div",null,[ht,i(u,{value:t.option3,"onUpdate:value":h=>t.option3=h,placeholder:"گزینه ۳"},null,8,["value","onUpdate:value"])]),e("div",null,[ft,i(u,{value:t.option4,"onUpdate:value":h=>t.option4=h,placeholder:"گزینه ۴"},null,8,["value","onUpdate:value"])])]),e("div",null,[xt,i(u,{value:t.correct_answer,"onUpdate:value":h=>t.correct_answer=h,placeholder:"۱، ۲، ۳ یا ۴",type:"number",min:"1",max:"4"},null,8,["value","onUpdate:value"])]),e("div",wt,[i(n,{type:"text",danger:"",onClick:h=>ne(_),disabled:s.value.questions.length<=1},{default:f(()=>[i(S,{icon:"vuesax-linear:trash",color:"#DC2626"}),yt]),_:2},1032,["onClick","disabled"])])]))),128)),i(n,{type:"dashed",class:"w-full",onClick:se},{default:f(()=>[bt]),_:1})])])])]),_:1},8,["visible","title","confirmLoading"])]),_:1})])}}});export{ka as default};
|