2 lines
17 KiB
JavaScript
2 lines
17 KiB
JavaScript
import{_ as me}from"./BasicMainCard-e8fae2e0.js";import{_ as _e}from"./BasicModal.vue_vue_type_style_index_0_lang-f76fec1b.js";import{_ as pe}from"./BasicTextArea.vue_vue_type_style_index_0_lang-6d7ecc0e.js";import{_ as ge}from"./BaseSwitch.vue_vue_type_script_setup_true_lang-6e462f47.js";import{_ as ve}from"./BasicInput.vue_vue_type_style_index_0_lang-644caa39.js";import{_ as he,u as fe}from"./useBaseTable-45427402.js";import{_ as xe}from"./button.vue_vue_type_style_index_0_lang-e7cef717.js";import{_ as we,Y as ye,Z as N,I as Q,J as ee,K 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,L as Ce,l as T,t as P,n as F,F as Ie,q as Ue,H as x,$ as qe,M as Te}from"./index-166b4ef1.js";import{t as $e}from"./useDataTime-7db5a46b.js";import{I as S}from"./Icon-b8613529.js";import{e as R,g as O}from"./convert-2ad76038.js";import{M as Z}from"./index-58b86fb2.js";import{S as De}from"./index-de862045.js";import{T as z}from"./isSymbol-c953ccc2.js";import{U as Se}from"./index-6c7cbb7d.js";import"./Grid-47180f92.js";import"./index-366f722a.js";import"./_plugin-vue_export-helper-e5be29c6.js";import"./shallowequal-78a96afc.js";import"./index-7f046693.js";import"./vnode-c85f1a09.js";import"./index-011e0893.js";import"./useState-43a565ec.js";import"./useRefs-ca4d56b6.js";import"./_flatRest-ae97161b.js";import"./isMobile-e2e89480.js";import"./omit-55909a9d.js";import"./index-b6f0378e.js";import"./Col-6dc2da7a.js";import"./styleChecker-2eddf97d.js";import"./isPlainObject-ed4c9976.js";import"./index-7005b758.js";import"./SearchOutlined-3d6399d7.js";import"./FormItemContext-0e89b3aa.js";import"./index-08810a1f.js";import"./usePrice-bc935b83.js";import"./updateLocale-6eb93789.js";import"./useMemo-99a24173.js";import"./lodash-593efeb6.js";import"./index-8bcb6210.js";import"./Badge-a3c7a3a7.js";import"./isNumeric-3f69e2aa.js";import"./index-ad625a72.js";import"./index-1465c5c8.js";import"./index-75be736e.js";import"./DialogWrap-88ddfe3e.js";import"./pickAttrs-5cd7ef1f.js";import"./css-aae66f86.js";import"./index-3ad11dd3.js";import"./toArray-cf38ce67.js";import"./index-991e4e35.js";import"./index-f98d2511.js";import"./index-dfddf43f.js";async function Ae(r){const{TableEngineRequest:g}=await we(()=>import("./buildSupabaseQuery-ef077dbd.js"),["assets/buildSupabaseQuery-ef077dbd.js","assets/index-166b4ef1.js","assets/index-0643191e.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((U,q)=>({...U,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 Le(r){const g=await Q("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 Q("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 Re(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 Q("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 Me(r,g){const l=await ee("iran_tourism_challenges",r,{...g,updated_at:new Date().toISOString()});return Array.isArray(l)?l:[l]}async function je(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"}],Fe={class:"flex justify-between items-center mb-4"},Oe=e("h2",null,"چالش ایرانگردی",-1),ze={class:"gap-2 flex justify-center"},Qe=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),Ke={class:"flex items-center gap-2 h-10"},Xe={class:"text-sm text-gray-600"},Ye={class:"flex flex-wrap justify-center gap-10 pb-2"},Ze=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),ba=be({__name:"index",setup(r){const g=Se,[l,d]=fe(),v=k([]),y=k([]),C=k(0),A=k(!1),U=k(!1),q=k(!1),B=k(null),M=()=>({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:[M()]}),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 I=`${Te}/upload/machartaa-img`;C.value++,await new Promise((L,t)=>{const _=new XMLHttpRequest;_.open("POST",I);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,K;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)||((K=o==null?void 0:o.data)==null?void 0:K.path)||"",j=R(de),X=O(j),Y=X?[{uid:`${Date.now()}`,name:"image.jpg",status:"done",url:X,response:{path:j}}]:[];a==="image"?(s.value.image_url=j||null,v.value=Y):(s.value.congrats_image_url=j||null,y.value=Y),m==null||m(o,_),x.success("تصویر با موفقیت آپلود شد!"),L()}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:[M()]},v.value=[],y.value=[]}function oe(){ae(),q.value=!1,B.value=null,U.value=!0}function H(){U.value=!1,q.value=!1,B.value=null}function se(){s.value.questions.push({...M(),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,I)=>({question:p.question.trim(),options:[p.option1,p.option2,p.option3,p.option4].map(L=>L.trim()).filter(Boolean),correct_answer:p.correct_answer?String(p.correct_answer).trim():"",sort_order:I})).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 Re(B.value,a),x.success("چالش با موفقیت ویرایش شد!")):(await Le(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=R(n.image_url);v.value=[{uid:`image-${Date.now()}`,name:"image.jpg",status:"done",url:O(m),response:{path:m}}]}else v.value=[];if(n.congrats_image_url){const m=R(n.congrats_image_url);y.value=[{uid:`congrats-${Date.now()}`,name:"congrats.jpg",status:"done",url:O(m),response:{path:m}}]}else y.value=[];s.value={title:n.title||"",image_url:R(n.image_url)||null,congrats_image_url:R(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,I;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:((I=m.options)==null?void 0:I[3])||"",correct_answer:m.correct_answer||""}}):[M()]},q.value=!0,B.value=c.id,U.value=!0}catch(n){console.error(n),x.error("خطا در بارگذاری اطلاعات چالش!")}}function ue(c){const a=!c.show;Z.confirm({title:"تغییر وضعیت نمایش",content:a?`آیا مطمئن هستید که میخواهید چالش "${c.title}" را نمایش دهید؟`:`آیا مطمئن هستید که میخواهید چالش "${c.title}" را مخفی کنید؟`,okText:"بله",cancelText:"خیر",onOk:async()=>{try{await Me(c.id,{show:a}),x.success(a?"چالش نمایش داده شد!":"چالش مخفی شد!"),await d()}catch(n){console.error(n),x.error("خطا در تغییر وضعیت نمایش!")}}})}function ce(c){Z.confirm({title:"حذف چالش",content:`آیا مطمئن هستید که میخواهید چالش "${c.title}" را حذف کنید؟`,okText:"بله، حذف کن",cancelText:"انصراف",okType:"danger",centered:!0,onOk:async()=>{try{await je(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,I=_e,L=me;return $(),D("div",null,[i(L,null,{default:f(()=>[e("div",Fe,[Oe,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",ze,[i(T(z),{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(z),{class:"cursor-pointer"},{title:f(()=>[Qe]),default:f(()=>[i(S,{icon:"vuesax-linear:edit",color:"#1D4ED8",onClick:_=>le(t)},null,8,["onClick"])]),_:2},1024),i(T(z),{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(I,{visible:U.value,"onUpdate:visible":a[7]||(a[7]=t=>U.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"})])):F("",!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",Ke,[i(w,{value:s.value.show,"onUpdate:value":a[2]||(a[2]=t=>s.value.show=t)},null,8,["value"]),e("span",Xe,P(s.value.show?"نمایش":"مخفی"),1)])])]),e("div",Ye,[e("div",null,[Ze,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])):F("",!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])):F("",!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(Ie,null,Ue(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{ba as default};
|