2 lines
14 KiB
JavaScript
2 lines
14 KiB
JavaScript
import{_ as Q}from"./BasicMainCard-bd323dbb.js";import{_ as X}from"./BasicModal.vue_vue_type_style_index_0_lang-fc68b6f7.js";import{u as Z}from"./usePrefix-59ffbd1f.js";import{T as ee}from"./index-ab4bfd10.js";import{d as V,g as te,o as S,c as T,a as t,O as se,b as n,L as U,W as ae,T as le,a2 as oe,a3 as j,r as w,Y as ie,i as ne,w as g,e as re,a4 as ce,N as L,F as ue,S as de,a0 as b}from"./index-a8433551.js";import{_ as pe}from"./BasicInput.vue_vue_type_style_index_0_lang-fff7ede0.js";import{_ as me}from"./BaseTable.vue_vue_type_style_index_0_lang-882f1017.js";import{_ as _e}from"./button.vue_vue_type_style_index_0_lang-33000dc3.js";import{t as ve}from"./useDataTime-8719acff.js";import{I as D}from"./Icon-4420454e.js";import{u as fe}from"./useBaseTable-3aeb2499.js";import{M as he}from"./index-3386ab22.js";import{T as P}from"./index-1c2b64f4.js";import{S as ge}from"./index-bcdceab6.js";import{U as E}from"./index-2ef5192d.js";import"./_plugin-vue_export-helper-c27b6911.js";import"./index-ead9b4ae.js";import"./index-4dee99dd.js";import"./raf-ca407421.js";import"./colors-338a38fb.js";import"./index-4a4899f5.js";import"./styleChecker-4074517c.js";import"./useState-ea5d1f15.js";import"./Col-6a6e9347.js";import"./index-cd5dab0a.js";import"./debounce-12f80d64.js";import"./SearchOutlined-14c653fb.js";import"./EyeOutlined-a79acaa2.js";import"./usePrice-7afab779.js";import"./index-47f6ee7f.js";import"./index-b96224b7.js";import"./pickAttrs-cd8d934f.js";import"./CheckOutlined-fe3ce043.js";import"./objectDestructuringEmpty-24e23e90.js";import"./eagerComputed-9b88cc2c.js";import"./index-9790e4ab.js";const xe=V({__name:"BasicTextArea",props:{title:{},value:{},showCount:{type:Boolean},maxlength:{},placeHolder:{}},emits:["update:value"],setup(r,{emit:o}){const d=r,u=te({get(){return d.value},set(f){o("update:value",f)}}),{prefixCls:h}=Z("input-area");return(f,x)=>{const _=ee;return S(),T("div",{class:le([U(h)])},[t("div",null,se(d.title),1),n(_,{value:U(u),"onUpdate:value":x[0]||(x[0]=y=>ae(u)?u.value=y:null),class:"",type:d.type,"show-count":d.showCount,placeHolder:d.placeHolder},null,8,["value","type","show-count","placeHolder"])],2)}}});async function ye(r){console.log("API addChallenge payload:",r);const o={title:r.title,description:r.description,owner_id:r.owner_id,minute:r.minute,score:r.score,image_url:r.image_url||null,clip_url:r.clip_url||null,steps:r.steps||[]};console.log("Supabase insert data:",o);const{data:d,error:u}=await j.from("challenge").insert([o]);if(u)throw console.error("Supabase insert error:",u),u;return console.log("Supabase insert success:",d),d}async function we(r,o){const{data:d,error:u}=await j.from("challenge").update({title:o.title,description:o.description,owner_id:o.owner_id,minute:o.minute,score:o.score,image_url:o.image_url||null,clip_url:o.clip_url||null,steps:o.steps||[]}).eq("id",r).select();if(u)throw u;return d}async function be(r){const{error:o}=await j.from("challenge").delete().eq("id",r);if(o)throw o}async function ke(r){const{TableEngineRequest:o}=await oe(()=>import("./buildSupabaseQuery-944c77f8.js"),["assets/buildSupabaseQuery-944c77f8.js","assets/index-a8433551.js","assets/index-d933e911.css"]),d={...r};!d.sort&&!d.order&&(d.order="-id");const u=await o(d,"challenge");try{if(Array.isArray(u==null?void 0:u.rows)){const h=d.page||1,f=d.limit||200,x=(h-1)*f,_=u.rows.map((y,A)=>({id:y.id,title:y.title??"",description:y.description??"",steps:y.steps??[],created_at:y.created_at??"",index:x+A,...y}));return{...u,rows:_}}}catch(h){console.log("[getChallengeTable] normalize error:",h)}return u}const Ce=[{title:"ردیف",dataIndex:"id",key:"id",filterable:!1,customRender:r=>r.record.index+1},{title:"عنوان",dataIndex:"title",key:"title"},{title:"شرح",dataIndex:"description",key:"description"},{title:"مراحل",dataIndex:"steps",key:"steps",customRender:r=>{const o=r.record.steps||[];if(o.length===0)return"-";const d=o.reduce((h,f)=>h+(Number(f.minute)||0),0),u=o.reduce((h,f)=>h+(Number(f.score)||0),0);return`${o.length} مرحله / ${d} دقیقه / ${u} امتیاز`}},{title:"تاریخ ایجاد",dataIndex:"created_at",key:"created_at",customRender:r=>ve(r.record.created_at)},{title:"عملیات",dataIndex:"action",key:"action",slot:"action",filterable:!1,align:"center"}],Ie={class:"flex justify-between items-center mb-4"},Se=t("h2",null,"چالش ها",-1),Te={class:"gap-2 flex justify-center"},Ue=t("span",null,"حذف",-1),De=t("span",null,"ویرایش",-1),Be={class:"space-y-4 relative"},Me={key:0,class:"absolute inset-0 bg-white/60 z-10 flex items-center justify-center"},$e=t("div",{class:"mb-1 text-sm text-gray-600"},"عنوان چالش",-1),Le=t("div",{class:"mb-1 text-sm text-gray-600"},"شرح چالش",-1),Ae={class:"flex justify-center gap-10 pb-4"},Ee=t("div",{class:"mb-1 text-sm text-gray-600"},"آپلود تصویر",-1),je={key:0},ze=t("div",null,"آپلود تصویر",-1),Pe=t("div",{class:"mb-1 text-sm text-gray-600"},"آپلود ویدئو",-1),Ve={key:0},Ne=t("div",null,"آپلود ویدئو",-1),Re=t("div",{class:"section-divider"},null,-1),qe={class:"pt-4"},Fe=t("div",{class:"mb-1 text-sm text-gray-600"},"مراحل چالش",-1),Oe={class:"space-y-3"},He={class:"grid grid-flow-col grid-rows-2 gap-4"},We={class:"col-span-2"},Je=t("div",{class:"mb-1 text-xs text-gray-500"},"عنوان مرحله",-1),Ye={class:"col-span-2 flex gap-4"},Ge={class:"flex-1"},Ke=t("div",{class:"mb-1 text-xs text-gray-500"},"زمان (دقیقه)",-1),Qe={class:"flex-1"},Xe=t("div",{class:"mb-1 text-xs text-gray-500"},"امتیاز",-1),Ze={class:"row-span-3 justify-self-center"},et=t("div",{class:"mb-1 text-xs text-gray-500"},"آپلود ویدئوی مرحله",-1),tt={key:0},st=t("div",{class:"text-xs"},"آپلود ویدئو",-1),at={key:0,class:"text-xs text-gray-500 mt-1"},lt=t("div",{class:"mb-1 text-xs text-gray-500"},"توضیحات مرحله",-1),ot={class:"flex justify-end"},it=t("span",{class:"text-[#DC2626]"},"حذف مرحله",-1),nt=t("span",{class:"text-gray-500"},"+ افزودن مرحله",-1),Ot=V({__name:"index",setup(r){w([]),w(!1);const o=w(null),[d,u]=fe(),h=ie(),f=w([]),x=w([]),_=w(0);function y(e){return e.type.startsWith("video/")?e.size/1024/1024<100?!0:(b.error("حجم فایل باید کمتر از 100MB باشد!"),!1):(b.error("فقط فایلهای ویدئو قابل آپلود هستند!"),!1)}async function A(e){const{file:l,onSuccess:m,onError:k}=e;try{_.value++;const p=new FormData;p.append("file",l);const v=await fetch("https://node.machartaa.ir/upload/video",{method:"POST",body:p,headers:{Authorization:`Bearer ${localStorage.getItem("token")||""}`}});if(!v.ok)throw new Error("خطا در آپلود فایل");const s=await v.json(),c=s&&(s.full_src||s.url||s.src||s.path||s.data&&(s.data.full_src||s.data.url||s.data.src||s.data.path))||"";i.value.clip_url=c,f.value=c?[{uid:`${Date.now()}`,name:"video.mp4",status:"done",url:c,response:{path:c}}]:[],m(s),b.success("ویدئو با موفقیت آپلود شد!")}catch(p){console.error("خطا در آپلود ویدئو:",p),k(p),b.error("خطا در آپلود ویدئو!")}finally{_.value=Math.max(0,_.value-1)}}function N(e){return e.type.startsWith("image/")?e.size/1024/1024<5?!0:(b.error("حجم تصویر باید کمتر از 5MB باشد!"),!1):(b.error("فقط فایلهای تصویری قابل آپلود هستند!"),!1)}async function R(e){const{file:l,onSuccess:m,onError:k}=e;try{_.value++;const p=new FormData;p.append("file",l);const v=await fetch("https://node.machartaa.ir/upload/machartaa-img",{method:"POST",body:p,headers:{Authorization:`Bearer ${localStorage.getItem("token")||""}`}});if(!v.ok)throw new Error("خطا در آپلود تصویر");const s=await v.json(),c=s&&(s.full_src||s.url||s.src||s.path||s.data&&(s.data.full_src||s.data.url||s.data.src||s.data.path))||"";i.value.image_url=c,x.value=c?[{uid:`${Date.now()}`,name:"image.jpg",status:"done",url:c,response:{path:c}}]:[],m(s),b.success("تصویر با موفقیت آپلود شد!")}catch(p){console.error("خطا در آپلود تصویر:",p),k(p),b.error("خطا در آپلود تصویر!")}finally{_.value=Math.max(0,_.value-1)}}async function q(e,l){const{file:m,onSuccess:k,onError:p}=e;try{_.value++;const v=new FormData;v.append("file",m);const s=await fetch("https://node.machartaa.ir/upload/video",{method:"POST",body:v,headers:{Authorization:`Bearer ${localStorage.getItem("token")||""}`}});if(!s.ok)throw new Error("خطا در آپلود فایل");const c=await s.json(),a=c.full_src||c.src||c.path||c.url,C=i.value.steps[l];C&&(C.clip_url=a||"",C.fileList=[{uid:`${Date.now()}`,name:"video.mp4",status:"done",url:a,response:{path:a}}]),k(c),b.success("ویدئوی مرحله با موفقیت آپلود شد!")}catch(v){console.error("خطا در آپلود ویدئوی مرحله:",v),p(v),b.error("خطا در آپلود ویدئوی مرحله!")}finally{_.value=Math.max(0,_.value-1)}}const F=w({columns:Ce,api:ke,defaultPageLimit:20}),B=w(!1),M=w(!1),$=w(null),i=w({title:"",description:"",owner_id:"",minute:0,score:0,image_url:"",clip_url:"",steps:[{id:1,title:"",description:"",clip_url:"",minute:0,score:0}]});async function O(){}async function H(){var l;await h.getMyInfo();const e=((l=h.userInfo)==null?void 0:l.id)||"0";console.log("Current user info:",h.userInfo),console.log("Current user ID:",e),f.value=[],x.value=[],i.value={title:"",description:"",owner_id:e,minute:0,score:0,image_url:"",clip_url:"",steps:[{id:1,title:"",description:"",clip_url:"",minute:0,score:0}]},M.value=!1,$.value=null,B.value=!0}function z(){B.value=!1,M.value=!1,$.value=null}async function W(){var k,p,v,s;if(!((k=i.value.title)!=null&&k.trim()))return;const e=i.value.steps.reduce((c,a)=>c+(Number(a.minute)||0),0),l=i.value.steps.reduce((c,a)=>c+(Number(a.score)||0),0),m={title:i.value.title.trim(),description:((p=i.value.description)==null?void 0:p.trim())||"",owner_id:i.value.owner_id,minute:e,score:l,image_url:((v=i.value.image_url)==null?void 0:v.trim())||null,clip_url:((s=i.value.clip_url)==null?void 0:s.trim())||null,steps:i.value.steps.filter(c=>c.title.trim()||c.description.trim())};if(_.value>0){b.warning("لطفاً تا پایان آپلود ویدئوها صبر کنید.");return}console.log("Challenge payload:",m),M.value&&$.value?await we($.value,m):await ye(m),z(),await u()}function J(e){e.clip_url?f.value=[{uid:"-1",name:"video.mp4",status:"done",url:e.clip_url,response:{path:e.clip_url}}]:f.value=[],e.image_url?x.value=[{uid:"-2",name:"image.jpg",status:"done",url:e.image_url,response:{path:e.image_url}}]:x.value=[],i.value={title:e.title||"",description:e.description||"",owner_id:e.owner_id||"",minute:e.minute||0,score:e.score||0,image_url:e.image_url||"",clip_url:e.clip_url||"",steps:e.steps&&e.steps.length>0?e.steps.map((l,m)=>({id:m+1,title:l.title||"",description:l.description||"",clip_url:l.clip_url||"",minute:l.minute||0,score:l.score||0})):[{id:1,title:"",description:"",clip_url:"",minute:0,score:0}]},M.value=!0,$.value=e.id,B.value=!0}function Y(e){he.confirm({title:"حذف چالش",content:`آیا مطمئن هستید که میخواهید چالش "${e.title}" را حذف کنید؟`,okText:"بله، حذف کن",cancelText:"انصراف",okType:"danger",centered:!0,onOk:async()=>{await be(e.id),await u()}})}function G(){i.value.steps.push({id:i.value.steps.length+1,title:"",description:"",clip_url:"",minute:0,score:0})}function K(e){i.value.steps.length>1&&(i.value.steps.splice(e,1),i.value.steps.forEach((l,m)=>{l.id=m+1}))}return ne(O),(e,l)=>{const m=_e,k=me,p=pe,v=xe,s=X,c=Q;return S(),T("div",null,[n(c,null,{default:g(()=>[t("div",Ie,[Se,n(m,{type:"primary",onClick:H},{default:g(()=>[re("افزودن چالش")]),_:1})]),n(k,ce(F.value,{ref_key:"table",ref:o,onRegister:U(d)}),{action:g(({record:a})=>[t("div",Te,[n(U(P),{class:"cursor-pointer"},{title:g(()=>[Ue]),default:g(()=>[n(D,{icon:"vuesax-linear:trash",color:"#DC2626",onClick:C=>Y(a)},null,8,["onClick"])]),_:2},1024),n(U(P),{class:"cursor-pointer"},{title:g(()=>[De]),default:g(()=>[n(D,{icon:"vuesax-linear:edit",color:"#1D4ED8",onClick:C=>J(a)},null,8,["onClick"])]),_:2},1024)])]),_:1},16,["onRegister"]),n(s,{visible:B.value,"onUpdate:visible":l[2]||(l[2]=a=>B.value=a),title:M.value?"ویرایش چالش":"افزودن چالش",onOk:W,onCancel:z,width:"80%",confirmLoading:_.value>0},{default:g(()=>[t("div",Be,[_.value>0?(S(),T("div",Me,[n(U(ge),{size:"large"})])):L("",!0),t("div",null,[$e,n(p,{value:i.value.title,"onUpdate:value":l[0]||(l[0]=a=>i.value.title=a),placeholder:"عنوان چالش"},null,8,["value"])]),t("div",null,[Le,n(v,{value:i.value.description,"onUpdate:value":l[1]||(l[1]=a=>i.value.description=a),placeholder:"شرح چالش"},null,8,["value"])]),t("div",Ae,[t("div",null,[Ee,n(U(E),{"file-list":x.value,"before-upload":N,"custom-request":R,accept:"image/*","max-count":1,"list-type":"picture-card"},{default:g(()=>[x.value.length<1?(S(),T("div",je,[n(D,{icon:"vuesax-linear:image",class:"text-2xl mb-2"}),ze])):L("",!0)]),_:1},8,["file-list"])]),t("div",null,[Pe,n(U(E),{"file-list":f.value,"before-upload":y,"custom-request":A,accept:"video/*","max-count":1,"list-type":"picture-card"},{default:g(()=>[f.value.length<1?(S(),T("div",Ve,[n(D,{icon:"vuesax-linear:video",class:"text-2xl mb-2"}),Ne])):L("",!0)]),_:1},8,["file-list"])])]),Re,t("div",qe,[Fe,t("div",Oe,[(S(!0),T(ue,null,de(i.value.steps,(a,C)=>(S(),T("div",{key:C,class:"border rounded-lg p-3 space-y-3"},[t("div",He,[t("div",We,[Je,n(p,{value:a.title,"onUpdate:value":I=>a.title=I,placeholder:`مرحله ${C+1}`},null,8,["value","onUpdate:value","placeholder"])]),t("div",Ye,[t("div",Ge,[Ke,n(p,{value:a.minute,"onUpdate:value":I=>a.minute=I,type:"number",placeholder:"0"},null,8,["value","onUpdate:value"])]),t("div",Qe,[Xe,n(p,{value:a.score,"onUpdate:value":I=>a.score=I,type:"number",placeholder:"0"},null,8,["value","onUpdate:value"])])]),t("div",Ze,[et,n(U(E),{"file-list":a.fileList||[],"before-upload":y,"custom-request":I=>q(I,C),accept:"video/*","max-count":1,"list-type":"picture-card"},{default:g(()=>[a.fileList&&a.fileList.length?L("",!0):(S(),T("div",tt,[n(D,{icon:"vuesax-linear:video",class:"text-xl mb-1"}),st]))]),_:2},1032,["file-list","custom-request"]),_.value>0?(S(),T("div",at,"در حال آپلود ویدئو...")):L("",!0)])]),lt,n(v,{value:a.description,"onUpdate:value":I=>a.description=I,placeholder:"توضیحات مرحله",rows:2},null,8,["value","onUpdate:value"]),t("div",ot,[n(m,{type:"text",danger:"",onClick:I=>K(C),disabled:i.value.steps.length<=1},{default:g(()=>[n(D,{icon:"vuesax-linear:trash",color:"#DC2626"}),it]),_:2},1032,["onClick","disabled"])])]))),128)),n(m,{type:"dashed",onClick:G,class:"w-full"},{default:g(()=>[nt]),_:1})])])])]),_:1},8,["visible","title","confirmLoading"])]),_:1})])}}});export{Ot as default};
|