PageSourceSearch

https://faptap.net/assets/ManagePerformers.4747bd90.js

js faptap.net collected 2026-09-25 22:11:32 UTC 11,997 bytes, 1 lines download raw bytes

1import{d as ee,aa as te,u as se,G as ae,b as u,r as le,ag as oe,ah as ne,c as ie,w as ue,L as re,e as de,C as me,f as r,i as s,m as v,j as o,z as M,n as p,_ as b,g as N,O as ce,h as E,P as ve,Q as fe,F as I,N as R,l as z,t as m,k as xe,ac as pe,ad as ge,p as T,aT as we,a as _,v as i,x as j,R as ye,ab as be}from"./index.16ba4ea0.js";import{_ as B}from"./Avatar.vue_vue_type_script_setup_true_lang.87e6bbe3.js";import{_ as _e}from"./Notfound.vue_vue_type_script_setup_true_lang.b9e0406b.js";import{_ as he}from"./ExtraInput.vue_vue_type_style_index_0_lang.6d02d9ec.js";import{_ as Pe}from"./Pagination.vue_vue_type_script_setup_true_lang.8b7ec3c5.js";import"./vendor-highcharts.9b480a8e.js";import"https://cdn.jsdelivr.net/npm/[email protected]/dist/buttplug-wasm.mjs";const ke={class:"mx-auto max-w-4xl px-4 py-6"},Ce={class:"mb-6 flex flex-col sm:flex-row items-stretch sm:items-center gap-3"},ze={class:"flex flex-wrap sm:flex-nowrap gap-2"},Ve={key:0,class:"py-12 flex justify-center items-center"},Ae={key:1,class:"bg-zinc-800 rounded-lg divide-y divide-zinc-700 shadow-lg"},$e={class:"sm:col-span-4 space-y-1 text-center sm:text-left"},De={class:"font-medium text-zinc-100 truncate text-lg flex items-center justify-center sm:justify-start gap-2"},Fe=["href"],Me={class:"text-xs text-zinc-500"},je={key:0,class:"text-xs text-zinc-500"},Se={class:"font-semibold text-zinc-500"},Ue={class:"text-xs text-zinc-500"},Ne={class:"sm:col-span-4 flex flex-col md:flex-row items-center justify-center sm:justify-start gap-6 text-sm text-zinc-400 mt-2 md:mt-0"},Ie={class:"flex flex-col items-center sm:items-start"},Te={class:"flex flex-col items-center sm:items-start"},Le={class:"font-semibold text-zinc-100"},Ee={key:0,class:"flex flex-col items-center sm:items-start"},Re={class:"font-semibold text-zinc-100"},Be={class:"sm:col-span-4 flex flex-wrap justify-center sm:justify-end space-x-0 sm:space-x-2 space-y-2 sm:space-y-0 mt-2 md:mt-0"},qe={key:2,class:"mt-12"},Oe={key:0,class:"fixed inset-0 flex items-center justify-center z-50"},He={class:"relative bg-zinc-900 p-6 md:p-8 rounded-lg shadow-lg overflow-y-auto max-h-[90vh] w-full max-w-md text-white mx-4 sm:mx-0"},Qe={class:"flex items-center justify-between mb-4"},Ge={class:"text-xl md:text-2xl font-semibold text-center flex-1"},Je={class:"flex flex-col sm:flex-row items-start sm:items-center gap-4"},Ke={class:"flex-1 w-full"},We=["disabled"],Xe={key:0,class:"flex flex-col items-center mt-3 sm:mt-0"},Ye={key:1,class:"flex flex-col items-center mt-3 sm:mt-0"},Ze={key:0,class:"text-center"},et={class:"flex justify-end mt-4"},S=10,rt=ee({__name:"ManagePerformers",setup(tt){const q=te(()=>be(()=>import("./index.16ba4ea0.js").then(t=>t.d0),["/assets/index.16ba4ea0.js","/assets/index.817905f0.css"],import.meta.url));se();const{isMobile:O}=ae(),f=u([]),V=u(!1),h=u(1),A=u(0),P=u(""),F=u(!1),x=u(!1),$=u(!1),n=u({name:"",slug:"",status:!0}),c=u(null),g=u(!1),w=le({status:!0,statusFilters:{Active:!0,Inactive:!1}}),y=async(t=1,e)=>{V.value=!0;try{const l=e||P.value,a=await _.performers.getPerformers({page:t,limit:S,query:l,status:w.status,contextPage:"manage"});f.value=a.performers||a.data||[],A.value=a.total||0,h.value=t}catch(l){console.error(l),f.value=[],A.value=0}finally{V.value=!1}};let d=null;const k=u(null),U=u(!1),H=t=>{const e=t.target;if(d=e.files&&e.files[0]?e.files[0]:null,d){const l=new FileReader;l.onload=()=>{k.value=l.result},U.value=!0,l.readAsDataURL(d)}else k.value=null,U.value=!1},Q=async t=>{try{const e=await _.performers.createPerformer(t.name,t.slug,t.status,t.description,t.category);if(d){const l=new FormData;l.append("file",d),await _.performers.createPerformerAvatar(e.id,l),d=null}c.value="Performer created successfully!",g.value=!0,C(),await L(1)}catch(e){console.error(e),c.value=e,g.value=!1}finally{setTimeout(()=>c.value=null,3e3)}},G=async t=>{if(!!t.id)try{const e=await _.performers.updatePerformer(t.id,t.name,t.status,t.slug,t.description,t.category);if(c.value="Performer updated successfully!",g.value=!0,d){const l=new FormData;l.append("file",d),await _.performers.createPerformerAvatar(t.id,l),d=null}await y(h.value),C()}catch(e){console.error(e),c.value=e,g.value=!1}finally{setTimeout(()=>c.value=null,3e3)}},J=async t=>
1{if(!!t.id)try{await _.performers.updatePerformer(t.id,t.name,!0,t.slug,t.description,t.category),c.value="Performer approved!",g.value=!0;const e=f.value.findIndex(l=>l.id===t.id);e!==-1&&(f.value[e].status=!0),w.status===!1&&(f.value=f.value.filter(l=>l.id!==t.id))}catch(e){console.error("Failed to approve performer:",e),c.value="Failed to approve performer",g.value=!1}finally{setTimeout(()=>c.value=null,3e3)}},K=async t=>{if(!!t)try{const e=f.value.find(l=>l.id===t);await _.performers.updatePerformer(t,(e==null?void 0:e.name)||"",!1),await y(h.value)}catch(e){console.error("Failed to soft-delete performer:",e)}},W=()=>{n.value={name:"",slug:"",description:"",status:!0},k.value=null,d=null,x.value=!0,F.value=!0},X=t=>{n.value={...t},k.value=t.avatar_url||null,d=null,x.value=!1,F.value=!0},C=()=>{F.value=!1,d=null,k.value=null};oe(async()=>{C(),P.value=""}),ne(()=>{C(),P.value=""});const Y=ie(()=>Math.ceil(A.value/S)>1&&!V.value),L=async t=>{const e=Math.ceil(A.value/S);t<1||t>e||(h.value=t,await y(t),window.scrollTo({top:0,behavior:"smooth"}))};ue(()=>w.status,()=>y(1));const Z=t=>t?new Date(t).toLocaleDateString():"N/A";return re(async()=>{const e=new URLSearchParams(window.location.search).get("page"),l=e?Number(e):1;h.value=l,await y(l)}),de(me("manage-performers",{title:"Performer Manager \u2013 FapTap",description:"Admin panel for managing performers"})),(t,e)=>{var l;return i(),r(I,null,[s("div",ke,[e[18]||(e[18]=s("h1",{class:"text-3xl font-semibold text-center text-white mb-6"},[v(" Manage All Performers "),s("small",{class:"block text-sm text-zinc-400 font-normal mt-1"},"Admin access only")],-1)),s("div",Ce,[o(M,{autofocus:"",placeholder:"Search performer by name",type:"text",class:"flex-1 w-full",modelValue:P.value,"onUpdate:modelValue":e[0]||(e[0]=a=>P.value=a),onInput:e[1]||(e[1]=()=>y(1,P.value.value))},null,8,["modelValue"]),s("div",ze,[o(b,{theme:"blue",class:"px-4 flex-1 sm:flex-none",disabled:"",onClick:W},{default:p(()=>[...e[10]||(e[10]=[v(" Create Performer ",-1)])]),_:1}),o(b,{ref:"statusFilter",onClick:e[2]||(e[2]=a=>$.value=!$.value),theme:w.status===!0?"blue":"red",class:"flex items-center justify-center gap-1 flex-1 sm:flex-none"},{default:p(()=>[o(j,{name:"sort-ascending",class:"h-5 w-5"}),v(" "+m(w.status===!0?"Active":"Inactive"),1)]),_:1},8,["theme"])])]),(i(),N(ce(E(O)?ve:fe),{modelValue:$.value,"onUpdate:modelValue":e[3]||(e[3]=a=>$.value=a),placement:"bottom",target:(l=t.$refs.statusFilter)==null?void 0:l.$el,class:"text-white text-sm py-1 w-32",offset:8},{default:p(()=>[(i(!0),r(I,null,R(w.statusFilters,(a,D)=>(i(),N(ye,{key:D,active:a===w.status,onClick:()=>{w.status=a,$.value=!1,y(1)}},{default:p(()=>[v(m(D),1)]),_:2},1032,["active","onClick"]))),128))]),_:1},8,["modelValue","target"])),V.value?(i(),r("div",Ve,[o(j,{name:"loading",class:"h-10 w-10 text-blue-500 animate-spin"})])):f.value.length?(i(),r("div",Ae,[(i(!0),r(I,null,R(f.value,a=>(i(),r("div",{key:a.id,class:"p-4 grid grid-cols-1 sm:grid-cols-12 gap-4 sm:gap-3 hover:bg-zinc-700 transition-colors rounded-md"},[s("div",$e,[s("div",De,[o(B,{icon:"woman-face-shimmer",image:a.avatar_url,name:a.name,class:"w-10 aspect-square"},null,8,["image","name"]),s("a",{target:"_blank",href:`/p/${a.slug}`,class:"text-zinc-100 font-medium line-clamp-2 leading-tight"},[v(m(a.name)+" ",1),o(j,{name:"open-in-new",class:"h-3 w-3 inline-block text-zinc-400 relative -top-1"})],8,Fe)]),s("div",Me,"Slug: "+m(a.slug),1),a.id?(i(),r("div",je,[e[11]||(e[11]=v(" Performer Id: ",-1)),s("span",Se,m(a.id),1)])):z("",!0),s("div",Ue,"Created at: "+m(Z(a.created_at)),1)]),s("div",Ne,[s("div",Ie,[e[12]||(e[12]=s("span",null,"Status:",-1)),s("span",{class:T(a.status===!0?"text-green-400 font-semibold":"text-red-400 font-semibold")},m(a.status?"Active":"Inactive"),3)]),s("div",Te,[e[13]||(e[13]=s("span",null,"Videos:",-1)),s("span",Le,m(a.videos||0),1)]),a.category?(i(),r("div",Ee,[e[14]||(e[14]=s("span",null,"Category:",-1)),s("span",Re,m(a.category),1)])):z("",!0)]),s("div",Be,[o(b,{theme:"blue",size:"sm",class:"px-3 py-1 w-full h-10 sm:w-auto",onClick:D=>X(a)},{default:p(()=>[...e[15]||(e[15]=[v(" Edit ",-1)])]),_:1},8,["onClick"]),o(b,{theme:"green",size:"sm",class:T(["px-3 py-1 w-full h-10 sm:w-auto",a.status===!0?"hidden":""]),disabled:a.status===!0,onClick:D=>J(a)},{default:p(()=>[...e[16]||(e[16]=[v(" Approve ",-1)])]),_:1},8,["class","disabled","onClick"]),o(b,{theme:"red",size:"sm",class:"px-3 py-1 w-full h-10 sm:w-auto",onClick:D=>K(a.id)},{default:p(()=>[...e[17]||(e[17]=[v(" Delete ",-1)])]),_:1},8,["onClick"])])]))),128))])):V.value?z("",!0):(i(),r("div",qe,[o(_e,{title:"No Performers Found",message:"No performers match your current search query."})])),o(Pe,{currentPage:h.value,total:A.value,limit:S,show:Y.value,"onUpdate:currentPage":L},null,8,["currentPage","total","show"])]),(i(),N(we,{to:"body"},[F.value?(i(),r("div",Oe,[s("div",{class:"fixed inset-0 bg-black/80",onClick:C}),s("div",He,[s("div",Qe,[s("div",Ge,m(x.value?"Create New Performer":"Edit Performer"),1),o(b,{theme:"transparent",onClick:C},{default:p(()=>[o(j,{name:"close",class:"h-6 w-6 text-zinc-400"})]),_:1})]),s("form",{onSubmit:e[9]||(e[9]=xe(a=>x.value?Q(n.value):G(n.value),["prevent"])),class:"flex flex-col gap-5"},[s("div",null,[e[19]||(e[19]=s("label",{class:"block mb-2 text-sm font-medium text-white"},"Name",-1)),o(M,{required:"",modelValue:n.value.name,"onUpdate:modelValue":e[4]||(e[4]=a=>n.value.name=a),placeholder:"Performer Name",disabled:!x.value},null,8,["modelValue","disabled"])]),s("div",null,[e[20]||(e[20]=s("label",{class:"block mb-2 text-sm font-medium text-white"},"Slug",-1)),o(M,{modelValue:n.value.slug,"onUpdate:modelValue":e[5]||(e[5]=a=>n.value.slug=a),placeholder:"Performer Slug",disabled:!x.value},null,8,["modelValue","disabled"])]),s("div",null,[e[22]||(e[22]=s("label",{class:"block mb-2 text-sm font-medium text-white"},"Status",-1)),pe(s("select",{"onUpdate:modelValue":e[6]||(e[6]=a=>n.value.status=a),class:"w-full bg-zinc-800 text-white rounded px-3 py-2"},[...e[21]||(e[21]=[s("option",{value:!0},"Active",-1),s("option",{value:!1},"Inactive",-1)])],512),[[ge,n.value.status]])]),s("div",null,[e[23]||(e[23]=s("label",{class:"block mb-2 text-sm font-medium text-white"},"Category",-1)),o(M,{modelValue:n.value.category,"onUpdate:modelValue":e[7]||
1(e[7]=a=>n.value.category=a),placeholder:"Performer Category"},null,8,["modelValue"])]),s("div",null,[e[24]||(e[24]=s("label",{class:"block mb-2 text-sm font-medium text-white"},"Description",-1)),o(he,{modelValue:n.value.description,"onUpdate:modelValue":e[8]||(e[8]=a=>n.value.description=a),placeholder:"Description",disabled:!x.value},null,8,["modelValue","disabled"])]),s("div",Je,[s("div",Ke,[e[25]||(e[25]=s("label",{class:"block mb-2 text-sm font-medium text-white"},"Upload Avatar",-1)),s("input",{type:"file",onChange:H,disabled:!x.value,class:"block w-full text-sm text-white disabled:opacity-50 disabled:cursor-not-allowed"},null,40,We)]),U.value?(i(),r("div",Xe,[e[26]||(e[26]=s("label",{class:"block mb-1 text-sm font-medium text-white"},"Avatar",-1)),o(E(q),{src:k.value,alt:"Avatar Preview",class:"w-16 h-16 rounded-full border border-zinc-700 object-cover"},null,8,["src"])])):n.value.avatar_url?(i(),r("div",Ye,[o(B,{icon:"woman-face-shimmer",image:n.value.avatar_url,name:n.value.name,class:"w-16 h-16 rounded-full border border-zinc-700 object-cover"},null,8,["image","name"])])):z("",!0)]),c.value?(i(),r("div",Ze,[s("p",{class:T(["text-sm font-medium",{"text-green-500":g.value,"text-red-500":!g.value}])},m(c.value),3)])):z("",!0),s("div",et,[o(b,{type:"submit",theme:"blue",class:"px-6 py-2"},{default:p(()=>[v(m(x.value?"Create":"Save"),1)]),_:1})])],32)])])):z("",!0)]))],64)}}});export{rt as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.