2 lines
14 KiB
JavaScript
2 lines
14 KiB
JavaScript
import{_ as K}from"./BasicMainCard-f2a5ccca.js";import{_ as Q}from"./BasicModal.vue_vue_type_style_index_0_lang-5554ff78.js";import{_ as X}from"./BasicTextArea.vue_vue_type_style_index_0_lang-e67bad5a.js";import{_ as Z}from"./BasicInput.vue_vue_type_style_index_0_lang-50a9c47c.js";import{_ as ee}from"./BaseTable.vue_vue_type_style_index_0_lang-cf2448d3.js";import{_ as te}from"./button.vue_vue_type_style_index_0_lang-ceadaa26.js";import{a3 as se,a4 as V,d as ae,r as b,Y as ie,i as oe,o as I,c as S,b as l,w as g,a as s,e as le,a2 as ne,L as $,N as B,F as re,S as ce,a0 as w}from"./index-706ae190.js";import{t as ue}from"./useDataTime-c7ca02f3.js";import{I as L}from"./Icon-28ffeb1b.js";import{u as de}from"./useBaseTable-3aeb2499.js";import{M as pe}from"./index-abd2a61d.js";import{T as z}from"./index-d20bae83.js";import{S as me}from"./index-7841bb4d.js";import{U as A}from"./index-4b7d2b33.js";import"./_plugin-vue_export-helper-c27b6911.js";import"./index-ac535007.js";import"./index-8096f4ad.js";import"./raf-11ded367.js";import"./colors-28bdd148.js";import"./index-1e6892e5.js";import"./styleChecker-340ade5c.js";import"./useState-96fc4e3c.js";import"./Col-dfb51626.js";import"./index-dd47f070.js";import"./debounce-a561c15c.js";import"./usePrefix-ba531a41.js";import"./index-79523c96.js";import"./SearchOutlined-24a77ba1.js";import"./EyeOutlined-f4940de3.js";import"./usePrice-7afab779.js";import"./index-c4f252cc.js";import"./index-43605b9d.js";import"./pickAttrs-79e8d088.js";import"./CheckOutlined-de32f6ea.js";import"./objectDestructuringEmpty-24e23e90.js";import"./eagerComputed-0df24eaf.js";import"./index-9311771d.js";async function _e(r){console.log("API addChallenge payload:",r);const n={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:",n);const{data:_,error:p}=await V.from("challenge").insert([n]);if(p)throw console.error("Supabase insert error:",p),p;return console.log("Supabase insert success:",_),_}async function ve(r,n){const{data:_,error:p}=await V.from("challenge").update({title:n.title,description:n.description,owner_id:n.owner_id,minute:n.minute,score:n.score,image_url:n.image_url||null,clip_url:n.clip_url||null,steps:n.steps||[]}).eq("id",r).select();if(p)throw p;return _}async function fe(r){const{error:n}=await V.from("challenge").delete().eq("id",r);if(n)throw n}async function he(r){const{TableEngineRequest:n}=await se(()=>import("./buildSupabaseQuery-cf0a33eb.js"),["assets/buildSupabaseQuery-cf0a33eb.js","assets/index-706ae190.js","assets/index-6773a6bc.css"]),_={...r};!_.sort&&!_.order&&(_.order="-id");const p=await n(_,"challenge");try{if(Array.isArray(p==null?void 0:p.rows)){const x=_.page||1,h=_.limit||200,C=(x-1)*h,v=p.rows.map((U,E)=>({id:U.id,title:U.title??"",description:U.description??"",steps:U.steps??[],created_at:U.created_at??"",index:C+E,...U}));return{...p,rows:v}}}catch(x){console.log("[getChallengeTable] normalize error:",x)}return p}const ge=[{title:"ردیف",dataIndex:"id",key:"id",filterable:!1,width:70,align:"center",fixed:"left",customRender:r=>r.record.index+1},{title:"عنوان",dataIndex:"title",key:"title"},{title:"شرح",dataIndex:"description",key:"description"},{title:"مراحل",dataIndex:"steps",key:"steps",customRender:r=>{const n=r.record.steps||[];if(n.length===0)return"-";const _=n.reduce((x,h)=>x+(Number(h.minute)||0),0),p=n.reduce((x,h)=>x+(Number(h.score)||0),0);return`${n.length} مرحله / ${_} دقیقه / ${p} امتیاز`}},{title:"تاریخ ایجاد",dataIndex:"created_at",key:"created_at",customRender:r=>ue(r.record.created_at)},{title:"عملیات",dataIndex:"action",key:"action",slot:"action",filterable:!1,align:"center"}],xe={class:"flex justify-between items-center mb-4"},ye=s("h2",null,"چالش ها",-1),be={class:"gap-2 flex justify-center"},we=s("span",null,"حذف",-1),ke=s("span",null,"ویرایش",-1),Ce={class:"space-y-4 relative"},Ue={key:0,class:"absolute inset-0 bg-white/60 z-10 flex items-center justify-center"},Ie=s("div",{class:"mb-1 text-sm text-gray-600"},"عنوان چالش",-1),Se=s("div",{class:"mb-1 text-sm text-gray-600"},"شرح چالش",-1),$e={class:"flex justify-center gap-10 pb-4"},Le=s("div",{class:"mb-1 text-sm text-gray-600"},"آپلود تصویر",-1),De={key:0},Me=s("div",null,"آپلود تصویر",-1),Te=s("div",{class:"mb-1 text-sm text-gray-600"},"آپلود ویدئو",-1),Be={key:0},Ee=s("div",null,"آپلود ویدئو",-1),Ae=s("div",{class:"section-divider"},null,-1),Ve={class:"pt-4"},je=s("div",{class:"mb-1 text-sm text-gray-600"},"مراحل چالش",-1),ze={class:"space-y-3"},Fe={class:"grid grid-flow-col grid-rows-2 gap-4"},Ne={class:"col-span-2"},Pe=s("div",{class:"mb-1 text-xs text-gray-500"},"عنوان مرحله",-1),Re={class:"col-span-2 flex gap-4"},qe={class:"flex-1"},Oe=s("div",{class:"mb-1 text-xs text-gray-500"},"زمان (دقیقه)",-1),We={class:"flex-1"},Je=s("div",{class:"mb-1 text-xs text-gray-500"},"امتیاز",-1),Ye={class:"row-span-3 justify-self-center"},Ge=s("div",{class:"mb-1 text-xs text-gray-500"},"آپلود ویدئوی مرحله",-1),He={key:0},Ke=s("div",{class:"text-xs"},"آپلود ویدئو",-1),Qe={key:0,class:"text-xs text-gray-500 mt-1"},Xe=s("div",{class:"mb-1 text-xs text-gray-500"},"توضیحات مرحله",-1),Ze={class:"flex justify-end"},et=s("span",{class:"text-[#DC2626]"},"حذف مرحله",-1),tt=s("span",{class:"text-gray-500"},"+ افزودن مرحله",-1),Ft=ae({__name:"index",setup(r){b([]),b(!1);const n=b(null),[_,p]=de(),x=ie(),h=b([]),C=b([]),v=b(0);function U(t){return t.type.startsWith("video/")?t.size/1024/1024<100?!0:(w.error("حجم فایل باید کمتر از 100MB باشد!"),!1):(w.error("فقط فایلهای ویدئو قابل آپلود هستند!"),!1)}async function E(t){const{file:a,onSuccess:d,onError:k}=t;try{v.value++;const u=new FormData;u.append("file",a);const m=await fetch("https://node.machartaa.ir/upload/video",{method:"POST",body:u,headers:{Authorization:`Bearer ${localStorage.getItem("token")||""}`}});if(!m.ok)throw new Error("خطا در آپلود فایل");const i=await m.json(),c=i&&(i.full_src||i.url||i.src||i.path||i.data&&(i.data.full_src||i.data.url||i.data.src||i.data.path))||"",e=c.startsWith("http")?c:`https://node.machartaa.ir${c}`;console.log("Full video URL:",e),o.value.clip_url=e,h.value=e?[{uid:`${Date.now()}`,name:"video.mp4",status:"done",url:e,response:{path:e}}]:[],d(i),w.success("ویدئو با موفقیت آپلود شد!")}catch(u){console.error("خطا در آپلود ویدئو:",u),k(u),w.error("خطا در آپلود ویدئو!")}finally{v.value=Math.max(0,v.value-1)}}function F(t){return t.type.startsWith("image/")?t.size/1024/1024<5?!0:(w.error("حجم تصویر باید کمتر از 5MB باشد!"),!1):(w.error("فقط فایلهای تصویری قابل آپلود هستند!"),!1)}async function N(t){const{file:a,onSuccess:d,onError:k}=t;try{v.value++;const u=new FormData;u.append("file",a);const m=await fetch("https://node.machartaa.ir/upload/machartaa-img",{method:"POST",body:u,headers:{Authorization:`Bearer ${localStorage.getItem("token")||""}`}});if(!m.ok)throw new Error("خطا در آپلود تصویر");const i=await m.json(),c=i&&(i.full_src||i.url||i.src||i.path||i.data&&(i.data.full_src||i.data.url||i.data.src||i.data.path))||"",e=c.startsWith("http")?c:`https://node.machartaa.ir${c}`;console.log("Full image URL:",e),o.value.image_url=e,C.value=e?[{uid:`${Date.now()}`,name:"image.jpg",status:"done",url:e,response:{path:e}}]:[],d(i),w.success("تصویر با موفقیت آپلود شد!")}catch(u){console.error("خطا در آپلود تصویر:",u),k(u),w.error("خطا در آپلود تصویر!")}finally{v.value=Math.max(0,v.value-1)}}async function P(t,a){const{file:d,onSuccess:k,onError:u}=t;try{v.value++;const m=new FormData;m.append("file",d);const i=await fetch("https://node.machartaa.ir/upload/video",{method:"POST",body:m,headers:{Authorization:`Bearer ${localStorage.getItem("token")||""}`}});if(!i.ok)throw new Error("خطا در آپلود فایل");const c=await i.json(),e=c.full_src||c.src||c.path||c.url,y=e.startsWith("http")?e:`https://node.machartaa.ir${e}`;console.log("Full step video URL:",y);const f=o.value.steps[a];f&&(f.clip_url=y||"",f.fileList=[{uid:`${Date.now()}`,name:"video.mp4",status:"done",url:y,response:{path:y}}]),k(c),w.success("ویدئوی مرحله با موفقیت آپلود شد!")}catch(m){console.error("خطا در آپلود ویدئوی مرحله:",m),u(m),w.error("خطا در آپلود ویدئوی مرحله!")}finally{v.value=Math.max(0,v.value-1)}}const R=b({columns:ge,api:he,defaultPageLimit:20}),D=b(!1),M=b(!1),T=b(null),o=b({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 q(){}async function O(){var a;await x.getMyInfo();const t=((a=x.userInfo)==null?void 0:a.id)||"0";console.log("Current user info:",x.userInfo),console.log("Current user ID:",t),h.value=[],C.value=[],o.value={title:"",description:"",owner_id:t,minute:0,score:0,image_url:"",clip_url:"",steps:[{id:1,title:"",description:"",clip_url:"",minute:0,score:0}]},M.value=!1,T.value=null,D.value=!0}function j(){D.value=!1,M.value=!1,T.value=null}async function W(){var k,u,m,i;if(!((k=o.value.title)!=null&&k.trim()))return;const t=o.value.steps.reduce((c,e)=>c+(Number(e.minute)||0),0),a=o.value.steps.reduce((c,e)=>c+(Number(e.score)||0),0),d={title:o.value.title.trim(),description:((u=o.value.description)==null?void 0:u.trim())||"",owner_id:o.value.owner_id,minute:t,score:a,image_url:((m=o.value.image_url)==null?void 0:m.trim())||null,clip_url:((i=o.value.clip_url)==null?void 0:i.trim())||null,steps:o.value.steps.filter(c=>c.title.trim()||c.description.trim())};if(v.value>0){w.warning("لطفاً تا پایان آپلود ویدئوها صبر کنید.");return}console.log("Challenge payload:",d),M.value&&T.value?await ve(T.value,d):await _e(d),j(),await p()}function J(t){t.clip_url?h.value=[{uid:"-1",name:"video.mp4",status:"done",url:t.clip_url,response:{path:t.clip_url}}]:h.value=[],t.image_url?C.value=[{uid:"-2",name:"image.jpg",status:"done",url:t.image_url,response:{path:t.image_url}}]:C.value=[],o.value={title:t.title||"",description:t.description||"",owner_id:t.owner_id||"",minute:t.minute||0,score:t.score||0,image_url:t.image_url||"",clip_url:t.clip_url||"",steps:t.steps&&t.steps.length>0?t.steps.map((a,d)=>({id:d+1,title:a.title||"",description:a.description||"",clip_url:a.clip_url||"",minute:a.minute||0,score:a.score||0})):[{id:1,title:"",description:"",clip_url:"",minute:0,score:0}]},M.value=!0,T.value=t.id,D.value=!0}function Y(t){pe.confirm({title:"حذف چالش",content:`آیا مطمئن هستید که میخواهید چالش "${t.title}" را حذف کنید؟`,okText:"بله، حذف کن",cancelText:"انصراف",okType:"danger",centered:!0,onOk:async()=>{await fe(t.id),await p()}})}function G(){o.value.steps.push({id:o.value.steps.length+1,title:"",description:"",clip_url:"",minute:0,score:0})}function H(t){o.value.steps.length>1&&(o.value.steps.splice(t,1),o.value.steps.forEach((a,d)=>{a.id=d+1}))}return oe(q),(t,a)=>{const d=te,k=ee,u=Z,m=X,i=Q,c=K;return I(),S("div",null,[l(c,null,{default:g(()=>[s("div",xe,[ye,l(d,{type:"primary",onClick:O},{default:g(()=>[le("افزودن چالش")]),_:1})]),l(k,ne(R.value,{ref_key:"table",ref:n,onRegister:$(_)}),{action:g(({record:e})=>[s("div",be,[l($(z),{class:"cursor-pointer"},{title:g(()=>[we]),default:g(()=>[l(L,{icon:"vuesax-linear:trash",color:"#DC2626",onClick:y=>Y(e)},null,8,["onClick"])]),_:2},1024),l($(z),{class:"cursor-pointer"},{title:g(()=>[ke]),default:g(()=>[l(L,{icon:"vuesax-linear:edit",color:"#1D4ED8",onClick:y=>J(e)},null,8,["onClick"])]),_:2},1024)])]),_:1},16,["onRegister"]),l(i,{visible:D.value,"onUpdate:visible":a[4]||(a[4]=e=>D.value=e),title:M.value?"ویرایش چالش":"افزودن چالش",onOk:W,onCancel:j,width:"80%",confirmLoading:v.value>0},{default:g(()=>[s("div",Ce,[v.value>0?(I(),S("div",Ue,[l($(me),{size:"large"})])):B("",!0),s("div",null,[Ie,l(u,{value:o.value.title,"onUpdate:value":a[0]||(a[0]=e=>o.value.title=e),placeholder:"عنوان چالش"},null,8,["value"])]),s("div",null,[Se,l(m,{value:o.value.description,"onUpdate:value":a[1]||(a[1]=e=>o.value.description=e),placeholder:"شرح چالش"},null,8,["value"])]),s("div",$e,[s("div",null,[Le,l($(A),{"file-list":C.value,"onUpdate:fileList":a[2]||(a[2]=e=>C.value=e),"before-upload":F,"custom-request":N,accept:"image/*","max-count":1,"list-type":"picture-card"},{default:g(()=>[C.value.length<1?(I(),S("div",De,[l(L,{icon:"vuesax-linear:image",class:"text-2xl mb-2"}),Me])):B("",!0)]),_:1},8,["file-list"])]),s("div",null,[Te,l($(A),{"file-list":h.value,"onUpdate:fileList":a[3]||(a[3]=e=>h.value=e),"before-upload":U,"custom-request":E,accept:"video/*","max-count":1,"list-type":"picture-card"},{default:g(()=>[h.value.length<1?(I(),S("div",Be,[l(L,{icon:"vuesax-linear:video",class:"text-2xl mb-2"}),Ee])):B("",!0)]),_:1},8,["file-list"])])]),Ae,s("div",Ve,[je,s("div",ze,[(I(!0),S(re,null,ce(o.value.steps,(e,y)=>(I(),S("div",{key:y,class:"border rounded-lg p-3 space-y-3"},[s("div",Fe,[s("div",Ne,[Pe,l(u,{value:e.title,"onUpdate:value":f=>e.title=f,placeholder:`مرحله ${y+1}`},null,8,["value","onUpdate:value","placeholder"])]),s("div",Re,[s("div",qe,[Oe,l(u,{value:e.minute,"onUpdate:value":f=>e.minute=f,type:"number",placeholder:"0"},null,8,["value","onUpdate:value"])]),s("div",We,[Je,l(u,{value:e.score,"onUpdate:value":f=>e.score=f,type:"number",placeholder:"0"},null,8,["value","onUpdate:value"])])]),s("div",Ye,[Ge,l($(A),{"file-list":e.fileList||[],"before-upload":U,"custom-request":f=>P(f,y),accept:"video/*","max-count":1,"list-type":"picture-card"},{default:g(()=>[e.fileList&&e.fileList.length?B("",!0):(I(),S("div",He,[l(L,{icon:"vuesax-linear:video",class:"text-xl mb-1"}),Ke]))]),_:2},1032,["file-list","custom-request"]),v.value>0?(I(),S("div",Qe,"در حال آپلود ویدئو...")):B("",!0)])]),Xe,l(m,{value:e.description,"onUpdate:value":f=>e.description=f,placeholder:"توضیحات مرحله",rows:2},null,8,["value","onUpdate:value"]),s("div",Ze,[l(d,{type:"text",danger:"",onClick:f=>H(y),disabled:o.value.steps.length<=1},{default:g(()=>[l(L,{icon:"vuesax-linear:trash",color:"#DC2626"}),et]),_:2},1032,["onClick","disabled"])])]))),128)),l(d,{type:"dashed",onClick:G,class:"w-full"},{default:g(()=>[tt]),_:1})])])])]),_:1},8,["visible","title","confirmLoading"])]),_:1})])}}});export{Ft as default};
|