2 lines
16 KiB
JavaScript
2 lines
16 KiB
JavaScript
import{_ as de}from"./BasicMainCard-3d648ab2.js";import{_ as pe}from"./BasicModal.vue_vue_type_style_index_0_lang-24a8261d.js";import{_ as me}from"./BasicTextArea.vue_vue_type_style_index_0_lang-a640908b.js";import{_ as _e}from"./BasicInput.vue_vue_type_style_index_0_lang-e307cbf1.js";import{_ as ve,u as fe}from"./useBaseTable-bc56de40.js";import{_ as ge}from"./button.vue_vue_type_style_index_0_lang-269c10bc.js";import{_ as he,I as G,d as xe,g as y,A as ye,v as be,o as I,c as S,b as c,w as b,a as t,e as we,G as ke,j as B,k as R,y as J,t as j,F as Ce,n as Ue,D as P,H as X}from"./index-04b55c40.js";import{t as Me}from"./useDataTime-019cb3de.js";import{I as q}from"./Icon-5ac7beab.js";import{e as T,g as N}from"./convert-67c23be8.js";import{_ as Ie}from"./TextPreview.vue_vue_type_script_setup_true_lang-313a557c.js";import{M as Se}from"./index-17a7fb53.js";import{S as $e}from"./index-2eb63a34.js";import{T as Y}from"./shallowequal-a10dc291.js";import{U as W}from"./index-fc7d0edb.js";import"./index-8ea69df4.js";import"./index-33f9e9e9.js";import"./_plugin-vue_export-helper-d788f94f.js";import"./Col-2c8be909.js";import"./vnode-eb3fa2ea.js";import"./useState-5006a98d.js";import"./useRefs-69caa28d.js";import"./index-dc39c1d3.js";import"./isPlainObject-3ea83e08.js";import"./index-29f614ac.js";import"./FormItemContext-b8bdc53c.js";import"./usePrice-bc935b83.js";import"./fa_IR-c20f3d35.js";import"./toArray-20a77219.js";import"./pickAttrs-09c7999b.js";import"./lodash-dbb8cc00.js";import"./index-e7b6e87e.js";import"./index-eba6ba57.js";async function De(m){console.log("API addChallenge payload:",m);const d={title:m.title,description:m.description,owner_id:m.owner_id,minute:m.minute,score:m.score,image_url:m.image_url||null,clip_url:m.clip_url||null,steps:m.steps||[]};console.log("Supabase insert data:",d);const{data:v,error:_}=await G.from("challenge").insert([d]);if(_)throw console.error("Supabase insert error:",_),_;return console.log("Supabase insert success:",v),v}async function Le(m,d){const{data:v,error:_}=await G.from("challenge").update({title:d.title,description:d.description,owner_id:d.owner_id,minute:d.minute,score:d.score,image_url:d.image_url||null,clip_url:d.clip_url||null,steps:d.steps||[]}).eq("id",m).select();if(_)throw _;return v}async function Pe(m){const{error:d}=await G.from("challenge").delete().eq("id",m);if(d)throw d}async function Te(m){const{TableEngineRequest:d}=await he(()=>import("./buildSupabaseQuery-7081d990.js"),["assets/buildSupabaseQuery-7081d990.js","assets/index-04b55c40.js","assets/index-457f5e42.css","assets/supabaseTableQuery-be932edd.js"]),v={...m};!v.sort&&!v.order&&(v.order="-id");const _=await d(v,"challenge");try{if(Array.isArray(_==null?void 0:_.rows)){const C=v.page||1,w=v.limit||200,$=(C-1)*w,h=_.rows.map((f,M)=>({id:f.id,title:f.title??"",description:f.description??"",steps:f.steps??[],created_at:f.created_at??"",index:$+M,...f}));return{..._,rows:h}}}catch(C){console.log("[getChallengeTable] normalize error:",C)}return _}const Be=[{title:"ردیف",dataIndex:"id",key:"id",filterable:!1,width:70,align:"center",customRender:m=>m.record.index+1},{title:"عنوان",dataIndex:"title",key:"title"},{title:"شرح",dataIndex:"description",key:"description",slot:"description"},{title:"مراحل",dataIndex:"steps",key:"steps",customRender:m=>{const d=m.record.steps||[];if(d.length===0)return"-";const v=d.reduce((C,w)=>C+(Number(w.minute)||0),0),_=d.reduce((C,w)=>C+(Number(w.score)||0),0);return`${d.length} مرحله / ${v} دقیقه / ${_} امتیاز`}},{title:"زمان ایجاد",dataIndex:"created_at",key:"created_at",customRender:m=>Me(m.record.created_at)},{title:"عملیات",dataIndex:"action",key:"action",slot:"action",filterable:!1,align:"center"}],Re={class:"flex justify-between items-center mb-4"},qe=t("h2",null,"چالش ها",-1),Ae={class:"gap-2 flex justify-center"},Ve=t("span",null,"حذف",-1),ze=t("span",null,"ویرایش",-1),Ne={class:"space-y-4 relative"},Oe={key:0,class:"absolute inset-0 bg-white/60 z-10 flex items-center justify-center"},Fe=t("div",{class:"mb-1 text-sm text-gray-600"},"عنوان چالش",-1),He=t("div",{class:"mb-1 text-sm text-gray-600"},"شرح چالش",-1),Je={class:"flex justify-center gap-10 pb-4"},je=t("div",{class:"mb-1 text-sm text-gray-600"},"آپلود تصویر",-1),Xe={key:0},We=t("div",null,"آپلود تصویر",-1),Ge={key:0,class:"mt-1"},Ke={class:"h-2 rounded bg-gray-200 overflow-hidden"},Qe={class:"text-xs text-gray-700 font-semibold text-center mt-1"},Ye=t("div",{class:"mb-1 text-sm text-gray-600"},"آپلود ویدئو",-1),Ze={key:0},Ee=t("div",null,"آپلود ویدئو",-1),et={key:0,class:"mt-1"},tt={class:"h-2 rounded bg-gray-200 overflow-hidden"},st={class:"text-xs text-gray-700 font-semibold text-center mt-1"},at=t("div",{class:"section-divider"},null,-1),lt={class:"pt-4"},it=t("div",{class:"mb-1 text-sm text-gray-600"},"مراحل چالش",-1),ot={class:"space-y-3"},nt={class:"grid grid-flow-col grid-rows-2 gap-4"},rt={class:"col-span-2"},ut=t("div",{class:"mb-1 text-xs text-gray-500"},"عنوان مرحله",-1),ct={class:"col-span-2 flex gap-4"},dt={class:"flex-1"},pt=t("div",{class:"mb-1 text-xs text-gray-500"},"زمان (دقیقه)",-1),mt={class:"flex-1"},_t=t("div",{class:"mb-1 text-xs text-gray-500"},"امتیاز",-1),vt={class:"row-span-3 justify-self-center"},ft=t("div",{class:"mb-1 text-xs text-gray-500"},"آپلود ویدئوی مرحله",-1),gt={key:0},ht=t("div",{class:"text-xs"},"آپلود ویدئو",-1),xt={key:0,class:"text-xs text-gray-500 mt-1"},yt={class:"h-2 rounded bg-gray-200 overflow-hidden"},bt={class:"text-xs text-gray-700 font-semibold text-center mt-1"},wt=t("div",{class:"mb-1 text-xs text-gray-500"},"توضیحات مرحله",-1),kt={class:"flex justify-end"},Ct=t("span",{class:"text-[#DC2626]"},"حذف مرحله",-1),Ut=t("span",{class:"text-gray-500"},"+ افزودن مرحله",-1),is=xe({__name:"index",setup(m){y([]),y(!1);const d=y(null),[v,_]=fe(),C=ye(),w=y([]),$=y([]),h=y(0),f=y(0),M=y(0),D=y({});function O(a){return D.value[a]??0}function F(a){return{width:`${Math.max(0,Math.min(100,a))}%`}}function K(a){return a.type.startsWith("video/")?a.size/1024/1024<60?!0:(P.error("حجم فایل باید کمتر از 60MB باشد!"),!1):(P.error("فقط فایلهای ویدئو قابل آپلود هستند!"),!1)}async function Z(a){const{file:l,onSuccess:p,onError:o,onProgress:u}=a,g=new FormData;g.append("file",l);const U=`${X}/upload/video`;M.value=0,h.value++,await new Promise((x,i)=>{const s=new XMLHttpRequest;s.open("POST",U),s.setRequestHeader("Authorization",`Bearer ${localStorage.getItem("token")||""}`),s.upload.onprogress=e=>{if(e.lengthComputable){const n=Math.round(e.loaded/e.total*100);M.value=n,u==null||u({percent:n})}},s.onload=()=>{if(M.value=100,s.status>=200&&s.status<300)try{const e=JSON.parse(s.responseText||"{}"),n=e&&(e.full_src||e.url||e.src||e.path||e.data&&(e.data.full_src||e.data.url||e.data.src||e.data.path))||"",k=T(n),L=N(k);r.value.clip_url=k,w.value=L?[{uid:`${Date.now()}`,name:"video.mp4",status:"done",url:L,response:{path:k}}]:[],p==null||p(e,s),P.success("ویدئو با موفقیت آپلود شد!"),x()}catch(e){o==null||o(e,s),i(e)}else{const e=new Error("خطا در آپلود فایل");o==null||o(e,s),i(e)}},s.onerror=()=>{const e=new Error("خطا در آپلود ویدئو!");o==null||o(e,s),i(e)},s.onloadend=()=>{h.value=Math.max(0,h.value-1),M.value=0},s.send(g)})}function E(a){return a.type.startsWith("image/")?a.size/1024/1024<5?!0:(P.error("حجم تصویر باید کمتر از 5MB باشد!"),!1):(P.error("فقط فایلهای تصویری قابل آپلود هستند!"),!1)}async function ee(a){const{file:l,onSuccess:p,onError:o,onProgress:u}=a,g=new FormData;g.append("file",l);const U=`${X}/upload/machartaa-img`;f.value=0,h.value++,await new Promise((x,i)=>{const s=new XMLHttpRequest;s.open("POST",U),s.setRequestHeader("Authorization",`Bearer ${localStorage.getItem("token")||""}`),s.upload.onprogress=e=>{if(e.lengthComputable){const n=Math.round(e.loaded/e.total*100);f.value=n,u==null||u({percent:n})}},s.onload=()=>{if(f.value=100,s.status>=200&&s.status<300)try{const e=JSON.parse(s.responseText||"{}"),n=e&&(e.full_src||e.url||e.src||e.path||e.data&&(e.data.full_src||e.data.url||e.data.src||e.data.path))||"",k=T(n),L=N(k);r.value.image_url=k,$.value=L?[{uid:`${Date.now()}`,name:"image.jpg",status:"done",url:L,response:{path:k}}]:[],p==null||p(e,s),P.success("تصویر با موفقیت آپلود شد!"),x()}catch(e){o==null||o(e,s),i(e)}else{const e=new Error("خطا در آپلود تصویر");o==null||o(e,s),i(e)}},s.onerror=()=>{const e=new Error("خطا در آپلود تصویر!");o==null||o(e,s),i(e)},s.onloadend=()=>{h.value=Math.max(0,h.value-1),f.value=0},s.send(g)})}async function te(a,l){const{file:p,onSuccess:o,onError:u,onProgress:g}=a,U=new FormData;U.append("file",p);const x=`${X}/upload/video`;D.value={...D.value,[l]:0},h.value++,await new Promise((i,s)=>{const e=new XMLHttpRequest;e.open("POST",x),e.setRequestHeader("Authorization",`Bearer ${localStorage.getItem("token")||""}`),e.upload.onprogress=n=>{if(n.lengthComputable){const k=Math.round(n.loaded/n.total*100);D.value={...D.value,[l]:k},g==null||g({percent:k})}},e.onload=()=>{if(D.value={...D.value,[l]:100},e.status>=200&&e.status<300)try{const n=JSON.parse(e.responseText||"{}"),k=n.full_src||n.src||n.path||n.url,L=T(k),ce=N(L),H=r.value.steps[l];H&&(H.clip_url=L||"",H.fileList=[{uid:`${Date.now()}`,name:"video.mp4",status:"done",url:ce,response:{path:L}}]),o==null||o(n,e),P.success("ویدئوی مرحله با موفقیت آپلود شد!"),i()}catch(n){u==null||u(n,e),s(n)}else{const n=new Error("خطا در آپلود فایل");u==null||u(n,e),s(n)}},e.onerror=()=>{const n=new Error("خطا در آپلود ویدئوی مرحله!");u==null||u(n,e),s(n)},e.onloadend=()=>{h.value=Math.max(0,h.value-1),D.value={...D.value,[l]:0}},e.send(U)})}const se=y({columns:Be,api:Te,defaultPageLimit:20}),A=y(!1),V=y(!1),z=y(null),r=y({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 ae(){}async function le(){var l;await C.getMyInfo();const a=((l=C.userInfo)==null?void 0:l.id)||"0";console.log("Current user info:",C.userInfo),console.log("Current user ID:",a),w.value=[],$.value=[],r.value={title:"",description:"",owner_id:a,minute:0,score:0,image_url:"",clip_url:"",steps:[{id:1,title:"",description:"",clip_url:"",minute:0,score:0}]},V.value=!1,z.value=null,A.value=!0}function Q(){A.value=!1,V.value=!1,z.value=null}async function ie(){var o,u,g,U;if(!((o=r.value.title)!=null&&o.trim()))return;const a=r.value.steps.reduce((x,i)=>x+(Number(i.minute)||0),0),l=r.value.steps.reduce((x,i)=>x+(Number(i.score)||0),0),p={title:r.value.title.trim(),description:((u=r.value.description)==null?void 0:u.trim())||"",owner_id:r.value.owner_id,minute:a,score:l,image_url:((g=r.value.image_url)==null?void 0:g.trim())||null,clip_url:((U=r.value.clip_url)==null?void 0:U.trim())||null,steps:r.value.steps.filter(x=>x.title.trim()||x.description.trim())};if(h.value>0){P.warning("لطفاً تا پایان آپلود ویدئوها صبر کنید.");return}console.log("Challenge payload:",p),V.value&&z.value?await Le(z.value,p):await De(p),Q(),await _()}function oe(a){if(a.clip_url){const l=T(a.clip_url);w.value=[{uid:"-1",name:"video.mp4",status:"done",url:N(l),response:{path:l}}]}else w.value=[];if(a.image_url){const l=T(a.image_url);$.value=[{uid:"-2",name:"image.jpg",status:"done",url:N(l),response:{path:l}}]}else $.value=[];r.value={title:a.title||"",description:a.description||"",owner_id:a.owner_id||"",minute:a.minute||0,score:a.score||0,image_url:T(a.image_url)||"",clip_url:T(a.clip_url)||"",steps:a.steps&&a.steps.length>0?a.steps.map((l,p)=>({id:p+1,title:l.title||"",description:l.description||"",clip_url:T(l.clip_url)||"",minute:l.minute||0,score:l.score||0})):[{id:1,title:"",description:"",clip_url:"",minute:0,score:0}]},V.value=!0,z.value=a.id,A.value=!0}function ne(a){Se.confirm({title:"حذف چالش",content:`آیا مطمئن هستید که میخواهید چالش "${a.title}" را حذف کنید؟`,okText:"بله، حذف کن",cancelText:"انصراف",okType:"danger",centered:!0,onOk:async()=>{await Pe(a.id),await _()}})}function re(){r.value.steps.push({id:r.value.steps.length+1,title:"",description:"",clip_url:"",minute:0,score:0})}function ue(a){r.value.steps.length>1&&(r.value.steps.splice(a,1),r.value.steps.forEach((l,p)=>{l.id=p+1}))}return be(ae),(a,l)=>{const p=ge,o=ve,u=_e,g=me,U=pe,x=de;return I(),S("div",null,[c(x,null,{default:b(()=>[t("div",Re,[qe,c(p,{type:"primary",onClick:le},{default:b(()=>[we("افزودن چالش")]),_:1})]),c(o,ke(se.value,{ref_key:"table",ref:d,onRegister:B(v)}),{description:b(({record:i})=>[c(Ie,{text:i.description},null,8,["text"])]),action:b(({record:i})=>[t("div",Ae,[c(B(Y),{class:"cursor-pointer"},{title:b(()=>[Ve]),default:b(()=>[c(q,{icon:"vuesax-linear:trash",color:"#DC2626",onClick:s=>ne(i)},null,8,["onClick"])]),_:2},1024),c(B(Y),{class:"cursor-pointer"},{title:b(()=>[ze]),default:b(()=>[c(q,{icon:"vuesax-linear:edit",color:"#1D4ED8",onClick:s=>oe(i)},null,8,["onClick"])]),_:2},1024)])]),_:1},16,["onRegister"]),c(U,{visible:A.value,"onUpdate:visible":l[4]||(l[4]=i=>A.value=i),title:V.value?"ویرایش چالش":"افزودن چالش",onOk:ie,onCancel:Q,width:"80%",confirmLoading:h.value>0},{default:b(()=>[t("div",Ne,[h.value>0?(I(),S("div",Oe,[c(B($e),{size:"large"})])):R("",!0),t("div",null,[Fe,c(u,{value:r.value.title,"onUpdate:value":l[0]||(l[0]=i=>r.value.title=i),placeholder:"عنوان چالش"},null,8,["value"])]),t("div",null,[He,c(g,{value:r.value.description,"onUpdate:value":l[1]||(l[1]=i=>r.value.description=i),placeholder:"شرح چالش"},null,8,["value"])]),t("div",Je,[t("div",null,[je,c(B(W),{"file-list":$.value,"onUpdate:fileList":l[2]||(l[2]=i=>$.value=i),"before-upload":E,"custom-request":ee,accept:"image/*","max-count":1,"list-type":"picture-card"},{default:b(()=>[$.value.length<1?(I(),S("div",Xe,[c(q,{icon:"vuesax-linear:image",class:"text-2xl mb-2"}),We])):R("",!0)]),_:1},8,["file-list"]),f.value>0&&f.value<100?(I(),S("div",Ge,[t("div",Ke,[t("div",{class:"h-2 bg-blue-500 transition-all",style:J(F(f.value))},null,4)]),t("div",Qe,j(f.value)+"%",1)])):R("",!0)]),t("div",null,[Ye,c(B(W),{"file-list":w.value,"onUpdate:fileList":l[3]||(l[3]=i=>w.value=i),"before-upload":K,"custom-request":Z,accept:"video/*","max-count":1,"list-type":"picture-card"},{default:b(()=>[w.value.length<1?(I(),S("div",Ze,[c(q,{icon:"vuesax-linear:video",class:"text-2xl mb-2"}),Ee])):R("",!0)]),_:1},8,["file-list"]),M.value>0&&M.value<100?(I(),S("div",et,[t("div",tt,[t("div",{class:"h-2 bg-blue-500 transition-all",style:J(F(M.value))},null,4)]),t("div",st,j(M.value)+"%",1)])):R("",!0)])]),at,t("div",lt,[it,t("div",ot,[(I(!0),S(Ce,null,Ue(r.value.steps,(i,s)=>(I(),S("div",{key:s,class:"border rounded-lg p-3 space-y-3"},[t("div",nt,[t("div",rt,[ut,c(u,{value:i.title,"onUpdate:value":e=>i.title=e,placeholder:`مرحله ${s+1}`},null,8,["value","onUpdate:value","placeholder"])]),t("div",ct,[t("div",dt,[pt,c(u,{value:i.minute,"onUpdate:value":e=>i.minute=e,type:"number",placeholder:"0"},null,8,["value","onUpdate:value"])]),t("div",mt,[_t,c(u,{value:i.score,"onUpdate:value":e=>i.score=e,type:"number",placeholder:"0"},null,8,["value","onUpdate:value"])])]),t("div",vt,[ft,c(B(W),{"file-list":i.fileList||[],"before-upload":K,"custom-request":e=>te(e,s),accept:"video/*","max-count":1,"list-type":"picture-card"},{default:b(()=>[i.fileList&&i.fileList.length?R("",!0):(I(),S("div",gt,[c(q,{icon:"vuesax-linear:video",class:"text-xl mb-1"}),ht]))]),_:2},1032,["file-list","custom-request"]),O(s)>0&&O(s)<100?(I(),S("div",xt,[t("div",yt,[t("div",{class:"h-2 bg-blue-500 transition-all",style:J(F(O(s)))},null,4)]),t("div",bt,"در حال آپلود ویدئو... "+j(O(s))+"%",1)])):R("",!0)])]),wt,c(g,{value:i.description,"onUpdate:value":e=>i.description=e,placeholder:"توضیحات مرحله",rows:2},null,8,["value","onUpdate:value"]),t("div",kt,[c(p,{type:"text",danger:"",onClick:e=>ue(s),disabled:r.value.steps.length<=1},{default:b(()=>[c(q,{icon:"vuesax-linear:trash",color:"#DC2626"}),Ct]),_:2},1032,["onClick","disabled"])])]))),128)),c(p,{type:"dashed",onClick:re,class:"w-full"},{default:b(()=>[Ut]),_:1})])])])]),_:1},8,["visible","title","confirmLoading"])]),_:1})])}}});export{is as default};
|