Files
machartaa_admin_dist/dist/assets/index-769acd0f.js
T
2026-08-22 14:52:19 +03:30

2 lines
17 KiB
JavaScript

import{_ as ce}from"./BasicMainCard-aaaa8dc3.js";import{_ as de}from"./BasicModal.vue_vue_type_style_index_0_lang-20cc468f.js";import{_ as pe}from"./BasicTextArea.vue_vue_type_style_index_0_lang-69c0f21d.js";import{_ as me}from"./BasicInput.vue_vue_type_style_index_0_lang-4f908c47.js";import{_ as _e,u as ve}from"./useBaseTable-1184a002.js";import{_ as fe}from"./button.vue_vue_type_style_index_0_lang-cbfd9667.js";import{_ as ge,G as he,H as xe,I as ye,d as be,g as x,A as we,v as ke,o as $,c as I,b as c,w as y,a as t,e as Ce,J as Ue,j as B,k as R,y as j,t as J,F as Me,n as $e,D as P,K as X}from"./index-35c19078.js";import{t as Ie}from"./useDataTime-35d3ce8c.js";import{I as A}from"./Icon-0c226cc8.js";import{e as T,g as N}from"./convert-2ad76038.js";import{_ as De}from"./TextPreview.vue_vue_type_script_setup_true_lang-8b46377d.js";import{M as Le}from"./index-d1bea9c9.js";import{T as Q}from"./isSymbol-76912a30.js";import{S as Se}from"./index-c135e3cd.js";import{U as W}from"./index-b998e211.js";import"./Grid-5df717b4.js";import"./index-0b82077f.js";import"./_plugin-vue_export-helper-b8aa26f1.js";import"./shallowequal-336924ae.js";import"./index-e39a0c4e.js";import"./vnode-bd016db8.js";import"./index-81c6c557.js";import"./useState-0b0c0b26.js";import"./useRefs-d20fccdf.js";import"./_flatRest-ce9c6e5e.js";import"./isMobile-e2e89480.js";import"./omit-fea2187f.js";import"./index-5e048154.js";import"./Col-93e193e7.js";import"./styleChecker-5378d544.js";import"./isPlainObject-9fc066ac.js";import"./index-e2b66426.js";import"./SearchOutlined-fd97bf7f.js";import"./FormItemContext-c59740e7.js";import"./index-317dfb98.js";import"./usePrice-bc935b83.js";import"./updateLocale-674603f1.js";import"./useMemo-141475be.js";import"./lodash-e3d7e6b8.js";import"./BaseSwitch.vue_vue_type_script_setup_true_lang-aa5cbf20.js";import"./index-9c958bd1.js";import"./Badge-5aec0f5b.js";import"./isNumeric-3f69e2aa.js";import"./index-597067d3.js";import"./index-3e7c49ac.js";import"./index-53a07be2.js";import"./DialogWrap-7ea92471.js";import"./pickAttrs-2a6a34d0.js";import"./css-aae66f86.js";import"./index-0cfe3fb2.js";import"./toArray-f7bbf4fe.js";import"./index-70f42a71.js";import"./textUtils-c37780ad.js";import"./index-727899c3.js";import"./index-1016d40d.js";async function Pe(p){const m={title:p.title,description:p.description,owner_id:p.owner_id,minute:p.minute,score:p.score,image_url:p.image_url||null,clip_url:p.clip_url||null,steps:p.steps||[]},_=await he("challenge",m);return Array.isArray(_)?_:[_]}async function Te(p,m){const _=await xe("challenge",p,{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||[]});return Array.isArray(_)?_:[_]}async function Be(p){await ye("challenge",p)}async function Re(p){const{TableEngineRequest:m}=await ge(()=>import("./buildSupabaseQuery-d68eb591.js"),["assets/buildSupabaseQuery-d68eb591.js","assets/index-35c19078.js","assets/index-a54d32f7.css"]),_={...p};!_.sort&&!_.order&&(_.order="-id");const k=await m(_,"challenge");try{if(Array.isArray(k==null?void 0:k.rows)){const C=_.page||1,b=_.limit||200,D=(C-1)*b,g=k.rows.map((v,M)=>({id:v.id,title:v.title??"",description:v.description??"",steps:v.steps??[],created_at:v.created_at??"",index:D+M,...v}));return{...k,rows:g}}}catch(C){console.log("[getChallengeTable] normalize error:",C)}return k}const Ae=[{title:"ردیف",dataIndex:"id",key:"id",filterable:!1,width:70,align:"center",customRender:p=>p.record.index+1},{title:"عنوان",dataIndex:"title",key:"title"},{title:"شرح",dataIndex:"description",key:"description",slot:"description"},{title:"مراحل",dataIndex:"steps",key:"steps",customRender:p=>{const m=p.record.steps||[];if(m.length===0)return"-";const _=m.reduce((C,b)=>C+(Number(b.minute)||0),0),k=m.reduce((C,b)=>C+(Number(b.score)||0),0);return`${m.length} مرحله / ${_} دقیقه / ${k} امتیاز`}},{title:"زمان ایجاد",dataIndex:"created_at",key:"created_at",customRender:p=>Ie(p.record.created_at)},{title:"عملیات",dataIndex:"action",key:"action",slot:"action",filterable:!1,align:"center"}],Ve={class:"flex justify-between items-center mb-4"},qe=t("h2",null,"چالش ها",-1),ze={class:"gap-2 flex justify-center"},Ne=t("span",null,"حذف",-1),Oe=t("span",null,"ویرایش",-1),Fe={class:"space-y-4 relative"},He={key:0,class:"absolute inset-0 bg-white/60 z-10 flex items-center justify-center"},je=t("div",{class:"mb-1 text-sm text-gray-600"},"عنوان چالش",-1),Je=t("div",{class:"mb-1 text-sm text-gray-600"},"شرح چالش",-1),Xe={class:"flex justify-center gap-10 pb-4"},We=t("div",{class:"mb-1 text-sm text-gray-600"},"آپلود تصویر",-1),Ge={key:0},Ke=t("div",null,"آپلود تصویر",-1),Qe={key:0,class:"mt-1"},Ye={class:"h-2 rounded bg-gray-200 overflow-hidden"},Ze={class:"text-xs text-gray-700 font-semibold text-center mt-1"},Ee=t("div",{class:"mb-1 text-sm text-gray-600"},"آپلود ویدئو",-1),et={key:0},tt=t("div",null,"آپلود ویدئو",-1),st={key:0,class:"mt-1"},at={class:"h-2 rounded bg-gray-200 overflow-hidden"},lt={class:"text-xs text-gray-700 font-semibold text-center mt-1"},it=t("div",{class:"section-divider"},null,-1),ot={class:"pt-4"},nt=t("div",{class:"mb-1 text-sm text-gray-600"},"مراحل چالش",-1),rt={class:"space-y-3"},ut={class:"grid grid-flow-col grid-rows-2 gap-4"},ct={class:"col-span-2"},dt=t("div",{class:"mb-1 text-xs text-gray-500"},"عنوان مرحله",-1),pt={class:"col-span-2 flex gap-4"},mt={class:"flex-1"},_t=t("div",{class:"mb-1 text-xs text-gray-500"},"زمان (دقیقه)",-1),vt={class:"flex-1"},ft=t("div",{class:"mb-1 text-xs text-gray-500"},"امتیاز",-1),gt={class:"row-span-3 justify-self-center"},ht=t("div",{class:"mb-1 text-xs text-gray-500"},"آپلود ویدئوی مرحله",-1),xt={key:0},yt=t("div",{class:"text-xs"},"آپلود ویدئو",-1),bt={key:0,class:"text-xs text-gray-500 mt-1"},wt={class:"h-2 rounded bg-gray-200 overflow-hidden"},kt={class:"text-xs text-gray-700 font-semibold text-center mt-1"},Ct=t("div",{class:"mb-1 text-xs text-gray-500"},"توضیحات مرحله",-1),Ut={class:"flex justify-end"},Mt=t("span",{class:"text-[#DC2626]"},"حذف مرحله",-1),$t=t("span",{class:"text-gray-500"},"+ افزودن مرحله",-1),Ds=be({__name:"index",setup(p){x([]),x(!1);const m=x(null),[_,k]=ve(),C=we(),b=x([]),D=x([]),g=x(0),v=x(0),M=x(0),L=x({});function O(a){return L.value[a]??0}function F(a){return{width:`${Math.max(0,Math.min(100,a))}%`}}function G(a){return a.type.startsWith("video/")?a.size/1024/1024<60?!0:(P.error("حجم فایل باید کمتر از 60MB باشد!"),!1):(P.error("فقط فایل‌های ویدئو قابل آپلود هستند!"),!1)}async function Y(a){const{file:l,onSuccess:d,onError:o,onProgress:u}=a,f=new FormData;f.append("file",l);const U=`${X}/upload/video`;M.value=0,g.value++,await new Promise((h,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))||"",w=T(n),S=N(w);r.value.clip_url=w,b.value=S?[{uid:`${Date.now()}`,name:"video.mp4",status:"done",url:S,response:{path:w}}]:[],d==null||d(e,s),P.success("ویدئو با موفقیت آپلود شد!"),h()}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=()=>{g.value=Math.max(0,g.value-1),M.value=0},s.send(f)})}function Z(a){return a.type.startsWith("image/")?a.size/1024/1024<5?!0:(P.error("حجم تصویر باید کمتر از 5MB باشد!"),!1):(P.error("فقط فایل‌های تصویری قابل آپلود هستند!"),!1)}async function E(a){const{file:l,onSuccess:d,onError:o,onProgress:u}=a,f=new FormData;f.append("file",l);const U=`${X}/upload/machartaa-img`;v.value=0,g.value++,await new Promise((h,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);v.value=n,u==null||u({percent:n})}},s.onload=()=>{if(v.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))||"",w=T(n),S=N(w);r.value.image_url=w,D.value=S?[{uid:`${Date.now()}`,name:"image.jpg",status:"done",url:S,response:{path:w}}]:[],d==null||d(e,s),P.success("تصویر با موفقیت آپلود شد!"),h()}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=()=>{g.value=Math.max(0,g.value-1),v.value=0},s.send(f)})}async function ee(a,l){const{file:d,onSuccess:o,onError:u,onProgress:f}=a,U=new FormData;U.append("file",d);const h=`${X}/upload/video`;L.value={...L.value,[l]:0},g.value++,await new Promise((i,s)=>{const e=new XMLHttpRequest;e.open("POST",h),e.setRequestHeader("Authorization",`Bearer ${localStorage.getItem("token")||""}`),e.upload.onprogress=n=>{if(n.lengthComputable){const w=Math.round(n.loaded/n.total*100);L.value={...L.value,[l]:w},f==null||f({percent:w})}},e.onload=()=>{if(L.value={...L.value,[l]:100},e.status>=200&&e.status<300)try{const n=JSON.parse(e.responseText||"{}"),w=n.full_src||n.src||n.path||n.url,S=T(w),ue=N(S),H=r.value.steps[l];H&&(H.clip_url=S||"",H.fileList=[{uid:`${Date.now()}`,name:"video.mp4",status:"done",url:ue,response:{path:S}}]),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=()=>{g.value=Math.max(0,g.value-1),L.value={...L.value,[l]:0}},e.send(U)})}const te=x({columns:Ae,api:Re,defaultPageLimit:20}),V=x(!1),q=x(!1),z=x(null),r=x({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 se(){}async function ae(){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),b.value=[],D.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}]},q.value=!1,z.value=null,V.value=!0}function K(){V.value=!1,q.value=!1,z.value=null}async function le(){var o,u,f,U;if(!((o=r.value.title)!=null&&o.trim()))return;const a=r.value.steps.reduce((h,i)=>h+(Number(i.minute)||0),0),l=r.value.steps.reduce((h,i)=>h+(Number(i.score)||0),0),d={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:((f=r.value.image_url)==null?void 0:f.trim())||null,clip_url:((U=r.value.clip_url)==null?void 0:U.trim())||null,steps:r.value.steps.filter(h=>h.title.trim()||h.description.trim())};if(g.value>0){P.warning("لطفاً تا پایان آپلود ویدئوها صبر کنید.");return}console.log("Challenge payload:",d),q.value&&z.value?await Te(z.value,d):await Pe(d),K(),await k()}function ie(a){if(a.clip_url){const l=T(a.clip_url);b.value=[{uid:"-1",name:"video.mp4",status:"done",url:N(l),response:{path:l}}]}else b.value=[];if(a.image_url){const l=T(a.image_url);D.value=[{uid:"-2",name:"image.jpg",status:"done",url:N(l),response:{path:l}}]}else D.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,d)=>({id:d+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}]},q.value=!0,z.value=a.id,V.value=!0}function oe(a){Le.confirm({title:"حذف چالش",content:`آیا مطمئن هستید که می‌خواهید چالش "${a.title}" را حذف کنید؟`,okText:"بله، حذف کن",cancelText:"انصراف",okType:"danger",centered:!0,onOk:async()=>{await Be(a.id),await k()}})}function ne(){r.value.steps.push({id:r.value.steps.length+1,title:"",description:"",clip_url:"",minute:0,score:0})}function re(a){r.value.steps.length>1&&(r.value.steps.splice(a,1),r.value.steps.forEach((l,d)=>{l.id=d+1}))}return ke(se),(a,l)=>{const d=fe,o=_e,u=me,f=pe,U=de,h=ce;return $(),I("div",null,[c(h,null,{default:y(()=>[t("div",Ve,[qe,c(d,{type:"primary",onClick:ae},{default:y(()=>[Ce("افزودن چالش")]),_:1})]),c(o,Ue(te.value,{ref_key:"table",ref:m,onRegister:B(_)}),{description:y(({record:i})=>[c(De,{text:i.description},null,8,["text"])]),action:y(({record:i})=>[t("div",ze,[c(B(Q),{class:"cursor-pointer"},{title:y(()=>[Ne]),default:y(()=>[c(A,{icon:"vuesax-linear:trash",color:"#DC2626",onClick:s=>oe(i)},null,8,["onClick"])]),_:2},1024),c(B(Q),{class:"cursor-pointer"},{title:y(()=>[Oe]),default:y(()=>[c(A,{icon:"vuesax-linear:edit",color:"#1D4ED8",onClick:s=>ie(i)},null,8,["onClick"])]),_:2},1024)])]),_:1},16,["onRegister"]),c(U,{visible:V.value,"onUpdate:visible":l[4]||(l[4]=i=>V.value=i),title:q.value?"ویرایش چالش":"افزودن چالش",onOk:le,onCancel:K,width:"80%",confirmLoading:g.value>0},{default:y(()=>[t("div",Fe,[g.value>0?($(),I("div",He,[c(B(Se),{size:"large"})])):R("",!0),t("div",null,[je,c(u,{value:r.value.title,"onUpdate:value":l[0]||(l[0]=i=>r.value.title=i),placeholder:"عنوان چالش"},null,8,["value"])]),t("div",null,[Je,c(f,{value:r.value.description,"onUpdate:value":l[1]||(l[1]=i=>r.value.description=i),placeholder:"شرح چالش"},null,8,["value"])]),t("div",Xe,[t("div",null,[We,c(B(W),{"file-list":D.value,"onUpdate:fileList":l[2]||(l[2]=i=>D.value=i),"before-upload":Z,"custom-request":E,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:y(()=>[D.value.length<1?($(),I("div",Ge,[c(A,{icon:"vuesax-linear:image",class:"text-2xl mb-2"}),Ke])):R("",!0)]),_:1},8,["file-list"]),v.value>0&&v.value<100?($(),I("div",Qe,[t("div",Ye,[t("div",{class:"h-2 bg-blue-500 transition-all",style:j(F(v.value))},null,4)]),t("div",Ze,J(v.value)+"%",1)])):R("",!0)]),t("div",null,[Ee,c(B(W),{"file-list":b.value,"onUpdate:fileList":l[3]||(l[3]=i=>b.value=i),"before-upload":G,"custom-request":Y,accept:"video/*","max-count":1,"list-type":"picture-card"},{default:y(()=>[b.value.length<1?($(),I("div",et,[c(A,{icon:"vuesax-linear:video",class:"text-2xl mb-2"}),tt])):R("",!0)]),_:1},8,["file-list"]),M.value>0&&M.value<100?($(),I("div",st,[t("div",at,[t("div",{class:"h-2 bg-blue-500 transition-all",style:j(F(M.value))},null,4)]),t("div",lt,J(M.value)+"%",1)])):R("",!0)])]),it,t("div",ot,[nt,t("div",rt,[($(!0),I(Me,null,$e(r.value.steps,(i,s)=>($(),I("div",{key:s,class:"border rounded-lg p-3 space-y-3"},[t("div",ut,[t("div",ct,[dt,c(u,{value:i.title,"onUpdate:value":e=>i.title=e,placeholder:`مرحله ${s+1}`},null,8,["value","onUpdate:value","placeholder"])]),t("div",pt,[t("div",mt,[_t,c(u,{value:i.minute,"onUpdate:value":e=>i.minute=e,type:"number",placeholder:"0"},null,8,["value","onUpdate:value"])]),t("div",vt,[ft,c(u,{value:i.score,"onUpdate:value":e=>i.score=e,type:"number",placeholder:"0"},null,8,["value","onUpdate:value"])])]),t("div",gt,[ht,c(B(W),{"file-list":i.fileList||[],"before-upload":G,"custom-request":e=>ee(e,s),accept:"video/*","max-count":1,"list-type":"picture-card"},{default:y(()=>[i.fileList&&i.fileList.length?R("",!0):($(),I("div",xt,[c(A,{icon:"vuesax-linear:video",class:"text-xl mb-1"}),yt]))]),_:2},1032,["file-list","custom-request"]),O(s)>0&&O(s)<100?($(),I("div",bt,[t("div",wt,[t("div",{class:"h-2 bg-blue-500 transition-all",style:j(F(O(s)))},null,4)]),t("div",kt,"در حال آپلود ویدئو... "+J(O(s))+"%",1)])):R("",!0)])]),Ct,c(f,{value:i.description,"onUpdate:value":e=>i.description=e,placeholder:"توضیحات مرحله",rows:2},null,8,["value","onUpdate:value"]),t("div",Ut,[c(d,{type:"text",danger:"",onClick:e=>re(s),disabled:r.value.steps.length<=1},{default:y(()=>[c(A,{icon:"vuesax-linear:trash",color:"#DC2626"}),Mt]),_:2},1032,["onClick","disabled"])])]))),128)),c(d,{type:"dashed",onClick:ne,class:"w-full"},{default:y(()=>[$t]),_:1})])])])]),_:1},8,["visible","title","confirmLoading"])]),_:1})])}}});export{Ds as default};