Files
machartaa_admin_dist/dist/assets/index-4ebab56a.js
T

2 lines
17 KiB
JavaScript

import{_ as ce}from"./BasicMainCard-e958eff9.js";import{_ as de}from"./BasicModal.vue_vue_type_style_index_0_lang-6969d1dc.js";import{_ as pe}from"./BasicTextArea.vue_vue_type_style_index_0_lang-1b5120f8.js";import{_ as me}from"./BasicInput.vue_vue_type_style_index_0_lang-1e71e6d8.js";import{_ as _e,u as ve}from"./useBaseTable-2f44456a.js";import{_ as fe}from"./button.vue_vue_type_style_index_0_lang-c84b0596.js";import{_ as ge,I as he,J as xe,K as ye,d as be,i as x,E as we,x as ke,o as $,c as I,e as c,w as y,b as t,f as Ce,L as Ue,l as B,n as R,C as j,t as J,F as Me,q as $e,H as P,M as X}from"./index-88b436a3.js";import{t as Ie}from"./useDataTime-c5fd0475.js";import{I as A}from"./Icon-e9d21126.js";import{e as T,g as N}from"./convert-2ad76038.js";import{_ as Le}from"./TextPreview.vue_vue_type_script_setup_true_lang-cf9861d3.js";import{M as De}from"./index-801e70c1.js";import{T as G}from"./isSymbol-5adcf314.js";import{S as Se}from"./index-77cb2497.js";import{U as W}from"./index-58f8102d.js";import"./Grid-3500d868.js";import"./index-3056cee8.js";import"./_plugin-vue_export-helper-0965689e.js";import"./shallowequal-a265b4c4.js";import"./index-70730f49.js";import"./vnode-4c3cf924.js";import"./index-608635af.js";import"./useState-89585daf.js";import"./useRefs-b589f2c4.js";import"./_flatRest-bfa472d2.js";import"./isMobile-e2e89480.js";import"./omit-c69ba12d.js";import"./index-ab792bfc.js";import"./Col-dbdf0e50.js";import"./styleChecker-e121d19f.js";import"./isPlainObject-6af67cf0.js";import"./index-5b1d7174.js";import"./SearchOutlined-a51da12b.js";import"./FormItemContext-0dc63d45.js";import"./index-371b21ab.js";import"./usePrice-bc935b83.js";import"./updateLocale-50b6b1dc.js";import"./useMemo-9783b0bd.js";import"./lodash-ff1cad4c.js";import"./BaseSwitch.vue_vue_type_script_setup_true_lang-8738a2db.js";import"./index-59dbbd66.js";import"./Badge-b5f795c2.js";import"./isNumeric-3f69e2aa.js";import"./index-e3b71aec.js";import"./index-6971af25.js";import"./index-4ad375f9.js";import"./DialogWrap-540d386d.js";import"./pickAttrs-fd92707c.js";import"./css-aae66f86.js";import"./index-7fdb0173.js";import"./toArray-20aa7010.js";import"./index-4c23d157.js";import"./textUtils-c37780ad.js";import"./index-ad76e424.js";import"./index-f6397275.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-073609fa.js"),["assets/buildSupabaseQuery-073609fa.js","assets/index-88b436a3.js","assets/index-ceed3b68.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,L=(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:L+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"}],qe={class:"flex justify-between items-center mb-4"},Ve=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),Ke={key:0},Ee=t("div",null,"آپلود تصویر",-1),Ge={key:0,class:"mt-1"},Qe={class:"h-2 rounded bg-gray-200 overflow-hidden"},Ye={class:"text-xs text-gray-700 font-semibold text-center mt-1"},Ze=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),Ls=be({__name:"index",setup(p){x([]),x(!1);const m=x(null),[_,k]=ve(),C=we(),b=x([]),L=x([]),g=x(0),v=x(0),M=x(0),D=x({});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 Q(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 Y(a){return a.type.startsWith("image/")?a.size/1024/1024<5?!0:(P.error("حجم تصویر باید کمتر از 5MB باشد!"),!1):(P.error("فقط فایل‌های تصویری قابل آپلود هستند!"),!1)}async function Z(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,L.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`;D.value={...D.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);D.value={...D.value,[l]:w},f==null||f({percent:w})}},e.onload=()=>{if(D.value={...D.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),D.value={...D.value,[l]:0}},e.send(U)})}const te=x({columns:Ae,api:Re,defaultPageLimit:20}),q=x(!1),V=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=[],L.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,q.value=!0}function E(){q.value=!1,V.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),V.value&&z.value?await Te(z.value,d):await Pe(d),E(),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);L.value=[{uid:"-2",name:"image.jpg",status:"done",url:N(l),response:{path:l}}]}else L.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}]},V.value=!0,z.value=a.id,q.value=!0}function oe(a){De.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",qe,[Ve,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(Le,{text:i.description},null,8,["text"])]),action:y(({record:i})=>[t("div",ze,[c(B(G),{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(G),{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:q.value,"onUpdate:visible":l[4]||(l[4]=i=>q.value=i),title:V.value?"ویرایش چالش":"افزودن چالش",onOk:le,onCancel:E,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":L.value,"onUpdate:fileList":l[2]||(l[2]=i=>L.value=i),"before-upload":Y,"custom-request":Z,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(()=>[L.value.length<1?($(),I("div",Ke,[c(A,{icon:"vuesax-linear:image",class:"text-2xl mb-2"}),Ee])):R("",!0)]),_:1},8,["file-list"]),v.value>0&&v.value<100?($(),I("div",Ge,[t("div",Qe,[t("div",{class:"h-2 bg-blue-500 transition-all",style:j(F(v.value))},null,4)]),t("div",Ye,J(v.value)+"%",1)])):R("",!0)]),t("div",null,[Ze,c(B(W),{"file-list":b.value,"onUpdate:fileList":l[3]||(l[3]=i=>b.value=i),"before-upload":K,"custom-request":Q,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":K,"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{Ls as default};