Files
machartaa_admin_dist/dist/assets/index-6d6f3510.js
T
2025-10-06 15:42:41 +03:30

2 lines
14 KiB
JavaScript

import{_ as X}from"./BasicMainCard-2872cf6d.js";import{_ as Z}from"./BasicModal.vue_vue_type_style_index_0_lang-a6c32906.js";import{u as ee}from"./usePrefix-9735fafc.js";import{T as te}from"./index-ca849dfb.js";import{d as j,g as se,o as S,c as T,a as t,O as ae,b as u,L as U,W as le,T as oe,a2 as ie,a3 as P,r as w,Y as ne,i as re,w as g,e as E,a4 as ue,N as D,F as ce,S as de,a0 as b}from"./index-be457ac4.js";import{_ as pe}from"./BasicInput.vue_vue_type_style_index_0_lang-121919a6.js";import{_ as me}from"./BaseTable.vue_vue_type_style_index_0_lang-5df22075.js";import{_ as _e}from"./button.vue_vue_type_style_index_0_lang-c48dbf89.js";import{t as ve}from"./useDataTime-b0a2f2c0.js";import{I as L}from"./Icon-7090f2a8.js";import{u as fe}from"./useBaseTable-3aeb2499.js";import{M as he}from"./index-3ad9cba1.js";import{T as N}from"./index-36614f01.js";import{S as ge}from"./index-76934fac.js";import{U as z}from"./index-05d6a702.js";import"./_plugin-vue_export-helper-c27b6911.js";import"./index-2af0d7dc.js";import"./index-3bcb781a.js";import"./raf-cdd2e009.js";import"./colors-a7645274.js";import"./index-387f54bb.js";import"./styleChecker-7765134f.js";import"./useState-508903a0.js";import"./Col-078b7ef2.js";import"./index-253edd80.js";import"./debounce-664d0daa.js";import"./SearchOutlined-68880632.js";import"./EyeOutlined-602323d3.js";import"./usePrice-7afab779.js";import"./index-e8280205.js";import"./index-35ace63f.js";import"./pickAttrs-933e866c.js";import"./CheckOutlined-8f2c289c.js";import"./objectDestructuringEmpty-24e23e90.js";import"./eagerComputed-bf11e1b5.js";import"./index-4a3b7888.js";const xe=j({__name:"BasicTextArea",props:{title:{},value:{},showCount:{type:Boolean},maxlength:{},placeHolder:{}},emits:["update:value"],setup(n,{emit:o}){const d=n,c=se({get(){return d.value},set(f){o("update:value",f)}}),{prefixCls:h}=ee("input-area");return(f,y)=>{const _=te;return S(),T("div",{class:oe([U(h)])},[t("div",null,ae(d.title),1),u(_,{value:U(c),"onUpdate:value":y[0]||(y[0]=x=>le(c)?c.value=x:null),class:"",type:d.type,"show-count":d.showCount,placeHolder:d.placeHolder},null,8,["value","type","show-count","placeHolder"])],2)}}});async function ye(n){console.log("API addChallenge payload:",n);const o={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||[]};console.log("Supabase insert data:",o);const{data:d,error:c}=await P.from("challenge").insert([o]);if(c)throw console.error("Supabase insert error:",c),c;return console.log("Supabase insert success:",d),d}async function we(n,o){const{data:d,error:c}=await P.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",n).select();if(c)throw c;return d}async function be(n){const{error:o}=await P.from("challenge").delete().eq("id",n);if(o)throw o}async function ke(n){const{TableEngineRequest:o}=await ie(()=>import("./buildSupabaseQuery-874444c8.js"),["assets/buildSupabaseQuery-874444c8.js","assets/index-be457ac4.js","assets/index-f708971c.css"]),d={...n};!d.sort&&!d.order&&(d.order="-id");const c=await o(d,"challenge");try{if(Array.isArray(c==null?void 0:c.rows)){const h=d.page||1,f=d.limit||200,y=(h-1)*f,_=c.rows.map((x,A)=>(console.log("[getChallengeTable] sample row with steps:",x),{id:x.id,title:x.title??"",description:x.description??"",steps:x.steps??[],created_at:x.created_at??"",index:y+A,...x}));return{...c,rows:_}}}catch(h){console.log("[getChallengeTable] normalize error:",h)}return c}const Ce=[{title:"ردیف",dataIndex:"id",key:"id",filterable:!1,customRender:n=>n.record.index+1},{title:"عنوان",dataIndex:"title",key:"title"},{title:"شرح",dataIndex:"description",key:"description"},{title:"مراحل",dataIndex:"steps",key:"steps",customRender:n=>{const o=n.record.steps||[];if(o.length===0)return"-";const d=o.reduce((h,f)=>h+(Number(f.minute)||0),0),c=o.reduce((h,f)=>h+(Number(f.score)||0),0);return`${o.length} مرحله / ${d} دقیقه / ${c} امتیاز`}},{title:"تاریخ ایجاد",dataIndex:"created_at",key:"created_at",customRender:n=>ve(n.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),Be=t("span",null,"ویرایش",-1),Me={class:"space-y-4 relative"},$e={key:0,class:"absolute inset-0 bg-white/60 z-10 flex items-center justify-center"},De=t("div",{class:"mb-1 text-sm text-gray-600"},"عنوان چالش",-1),Le=t("div",{class:"mb-1 text-sm text-gray-600"},"شرح چالش",-1),Ae=t("div",{class:"mb-1 text-sm text-gray-600"},"آپلود تصویر",-1),Ee={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),je=t("div",{class:"mb-1 text-sm text-gray-600"},"مراحل چالش",-1),Re={class:"space-y-3"},qe={class:"flex gap-2 items-center"},Fe={class:"flex-1"},Oe=t("div",{class:"mb-1 text-xs text-gray-500"},"عنوان مرحله",-1),He={class:"flex-1"},We=t("div",{class:"mb-1 text-xs text-gray-500"},"آپلود ویدئوی مرحله",-1),Je={key:0},Ye=t("div",{class:"text-xs"},"آپلود ویدئو",-1),Ge={key:0,class:"text-xs text-gray-500 mt-1"},Ke={class:"flex gap-2 items-center"},Qe={class:"flex-1"},Xe=t("div",{class:"mb-1 text-xs text-gray-500"},"زمان (دقیقه)",-1),Ze={class:"flex-1"},et=t("div",{class:"mb-1 text-xs text-gray-500"},"امتیاز",-1),tt=t("div",{class:"mb-1 text-xs text-gray-500"},"توضیحات مرحله",-1),st={class:"flex justify-end"},Nt=j({__name:"index",setup(n){w([]),w(!1);const o=w(null),[d,c]=fe(),h=ne(),f=w([]),y=w([]),_=w(0);function x(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(),r=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=r,f.value=r?[{uid:`${Date.now()}`,name:"video.mp4",status:"done",url:r,response:{path:r}}]:[],m(s),b.success("ویدئو با موفقیت آپلود شد!")}catch(p){console.error("خطا در آپلود ویدئو:",p),k(p),b.error("خطا در آپلود ویدئو!")}finally{_.value=Math.max(0,_.value-1)}}function R(e){return e.type.startsWith("image/")?e.size/1024/1024<5?!0:(b.error("حجم تصویر باید کمتر از 5MB باشد!"),!1):(b.error("فقط فایل‌های تصویری قابل آپلود هستند!"),!1)}async function q(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(),r=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=r,y.value=r?[{uid:`${Date.now()}`,name:"image.jpg",status:"done",url:r,response:{path:r}}]:[],m(s),b.success("تصویر با موفقیت آپلود شد!")}catch(p){console.error("خطا در آپلود تصویر:",p),k(p),b.error("خطا در آپلود تصویر!")}finally{_.value=Math.max(0,_.value-1)}}async function F(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 r=await s.json(),a=r.full_src||r.src||r.path||r.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(r),b.success("ویدئوی مرحله با موفقیت آپلود شد!")}catch(v){console.error("خطا در آپلود ویدئوی مرحله:",v),p(v),b.error("خطا در آپلود ویدئوی مرحله!")}finally{_.value=Math.max(0,_.value-1)}}const O=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 H(){}async function W(){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=[],y.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 V(){B.value=!1,M.value=!1,$.value=null}async function J(){var k,p,v,s;if(!((k=i.value.title)!=null&&k.trim()))return;const e=i.value.steps.reduce((r,a)=>r+(Number(a.minute)||0),0),l=i.value.steps.reduce((r,a)=>r+(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(r=>r.title.trim()||r.description.trim())};if(_.value>0){b.warning("لطفاً تا پایان آپلود ویدئوها صبر کنید.");return}console.log("Challenge payload:",m),M.value&&$.value?await we($.value,m):await ye(m),V(),await c()}function Y(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?y.value=[{uid:"-2",name:"image.jpg",status:"done",url:e.image_url,response:{path:e.image_url}}]:y.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 G(e){he.confirm({title:"حذف چالش",content:`آیا مطمئن هستید که می‌خواهید چالش "${e.title}" را حذف کنید؟`,okText:"بله، حذف کن",cancelText:"انصراف",okType:"danger",centered:!0,onOk:async()=>{await be(e.id),await c()}})}function K(){i.value.steps.push({id:i.value.steps.length+1,title:"",description:"",clip_url:"",minute:0,score:0})}function Q(e){i.value.steps.length>1&&(i.value.steps.splice(e,1),i.value.steps.forEach((l,m)=>{l.id=m+1}))}return re(H),(e,l)=>{const m=_e,k=me,p=pe,v=xe,s=Z,r=X;return S(),T("div",null,[u(r,null,{default:g(()=>[t("div",Ie,[Se,u(m,{type:"primary",onClick:W},{default:g(()=>[E("افزودن چالش")]),_:1})]),u(k,ue(O.value,{ref_key:"table",ref:o,onRegister:U(d)}),{action:g(({record:a})=>[t("div",Te,[u(U(N),{class:"cursor-pointer"},{title:g(()=>[Ue]),default:g(()=>[u(L,{icon:"vuesax-linear:trash",color:"#DC2626",onClick:C=>G(a)},null,8,["onClick"])]),_:2},1024),u(U(N),{class:"cursor-pointer"},{title:g(()=>[Be]),default:g(()=>[u(L,{icon:"vuesax-linear:edit",color:"#1D4ED8",onClick:C=>Y(a)},null,8,["onClick"])]),_:2},1024)])]),_:1},16,["onRegister"]),u(s,{visible:B.value,"onUpdate:visible":l[2]||(l[2]=a=>B.value=a),title:M.value?"ویرایش چالش":"افزودن چالش",onOk:J,onCancel:V,width:"80%",confirmLoading:_.value>0},{default:g(()=>[t("div",Me,[_.value>0?(S(),T("div",$e,[u(U(ge),{size:"large"})])):D("",!0),t("div",null,[De,u(p,{value:i.value.title,"onUpdate:value":l[0]||(l[0]=a=>i.value.title=a),placeholder:"عنوان چالش"},null,8,["value"])]),t("div",null,[Le,u(v,{value:i.value.description,"onUpdate:value":l[1]||(l[1]=a=>i.value.description=a),placeholder:"شرح چالش"},null,8,["value"])]),t("div",null,[Ae,u(U(z),{"file-list":y.value,"before-upload":R,"custom-request":q,accept:"image/*","max-count":1,"list-type":"picture-card"},{default:g(()=>[y.value.length<1?(S(),T("div",Ee,[u(L,{icon:"vuesax-linear:image",class:"text-2xl mb-2"}),ze])):D("",!0)]),_:1},8,["file-list"])]),t("div",null,[Pe,u(U(z),{"file-list":f.value,"before-upload":x,"custom-request":A,accept:"video/*","max-count":1,"list-type":"picture-card"},{default:g(()=>[f.value.length<1?(S(),T("div",Ve,[u(L,{icon:"vuesax-linear:video",class:"text-2xl mb-2"}),Ne])):D("",!0)]),_:1},8,["file-list"])]),t("div",null,[je,t("div",Re,[(S(!0),T(ce,null,de(i.value.steps,(a,C)=>(S(),T("div",{key:C,class:"border rounded-lg p-3 space-y-3"},[t("div",qe,[t("div",Fe,[Oe,u(p,{value:a.title,"onUpdate:value":I=>a.title=I,placeholder:`مرحله ${C+1}`},null,8,["value","onUpdate:value","placeholder"])]),t("div",He,[We,u(U(z),{"file-list":a.fileList||[],"before-upload":x,"custom-request":I=>F(I,C),accept:"video/*","max-count":1,"list-type":"picture-card"},{default:g(()=>[a.fileList&&a.fileList.length?D("",!0):(S(),T("div",Je,[u(L,{icon:"vuesax-linear:video",class:"text-xl mb-1"}),Ye]))]),_:2},1032,["file-list","custom-request"]),_.value>0?(S(),T("div",Ge,"در حال آپلود ویدئو...")):D("",!0)])]),t("div",Ke,[t("div",Qe,[Xe,u(p,{value:a.minute,"onUpdate:value":I=>a.minute=I,type:"number",placeholder:"0"},null,8,["value","onUpdate:value"])]),t("div",Ze,[et,u(p,{value:a.score,"onUpdate:value":I=>a.score=I,type:"number",placeholder:"0"},null,8,["value","onUpdate:value"])])]),t("div",null,[tt,u(v,{value:a.description,"onUpdate:value":I=>a.description=I,placeholder:"توضیحات مرحله",rows:2},null,8,["value","onUpdate:value"])]),t("div",st,[u(m,{type:"text",danger:"",onClick:I=>Q(C),disabled:i.value.steps.length<=1},{default:g(()=>[E(" حذف مرحله ")]),_:2},1032,["onClick","disabled"])])]))),128)),u(m,{type:"dashed",onClick:K,class:"w-full"},{default:g(()=>[E(" + افزودن مرحله ")]),_:1})])])])]),_:1},8,["visible","title","confirmLoading"])]),_:1})])}}});export{Nt as default};