PageSourceSearch

https://bngts.com/_nuxt/DALWuMtZ.js

js bngts.com collected 2026-10-02 01:25:50 UTC 13,191 bytes, 1 lines download raw bytes

1import{c as Z,d as ne,A as i,T as re,a as de,b as U,f as o,e,k as A,w as H,i as l,M as q,g as B,h as f,t as n,I as W,D as T,E as D,G as L,U as ue,V as me,S as F,R as ce,_ as pe,o as m,O as ve,j as fe,W as J,p as be}from"./DrlufBBD.js";import{u as ge}from"./XAl1oJda.js";import{U as X,L as ye}from"./BVYeCegL.js";import{U as he}from"./Otm7Gi5C.js";import{E as ke}from"./IKHjXg6d.js";import{S as Y}from"./tnS9CuL2.js";import{T as _e}from"./yH6OnAzg.js";import{E as Ue}from"./B7xoGB0s.js";import{L as we}from"./BVIvVPma.js";import{X as Ee}from"./BMBNO0uF.js";const xe=Z("badge-check",[["path",{d:"M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z",key:"3c2336"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);const Ie=Z("image-up",[["path",{d:"M10.3 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v10l-3.1-3.1a2 2 0 0 0-2.814.014L6 21",key:"9csbqa"}],["path",{d:"m14 19.5 3-3 3 3",key:"9vmjn0"}],["path",{d:"M17 22v-5.5",key:"1aa6fl"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}]]),Ce={class:"account-page"},ze={class:"account-heading"},Te={class:"profile-avatar"},De=["src","alt"],Le={class:"account-layout"},Me=["aria-busy"],Ne={class:"panel-heading"},Pe={class:"public-disclosure"},Ve={class:"image-editor"},Ae={class:"image-preview"},Be=["src","alt"],Se={class:"image-editor-copy"},$e={class:"image-actions"},Oe={class:"image-select"},Re=["disabled"],je=["disabled","aria-busy"],Ke=["disabled","aria-busy"],Ge=["role"],He=["disabled"],qe=["disabled"],We={id:"bio-help"},Fe=["disabled"],Je=["disabled"],Xe={class:"public-preview"},Ye=["role"],Ze={class:"profile-actions"},Qe=["disabled","aria-busy"],el={class:"discord-panel"},ll={class:"panel-heading"},al=["disabled","aria-busy"],tl={class:"danger-panel"},sl=["disabled"],il={class:"danger-icon"},ol=["disabled"],nl={id:"delete-message",class:"message error",role:"alert","aria-live":"assertive"},rl={class:"modal-actions"},dl=["disabled"],ul=["disabled","aria-busy"],ml=ne({__name:"index",setup(cl){const s=ge(),y=i(s.displayName),w=i(s.user?.publicEmail||""),E=i(s.user?.homepageUrl||""),h=i(s.user?.bio||""),S=i(null),x=i(null),k=i(""),c=i(!1),p=i(!1),v=i(""),b=i(!1),d=i(!1),M=i(""),N=i(!1),_=i(!1),I=i(!1),g=i(""),u=i(!1),P=i(""),$=i(null),O=i(null),j=i(null);let K=null,R="";const Q=fe(()=>{const t=s.user?.discordId||"";return t.length>6?`${t.slice(0,3)}••••${t.slice(-3)}`:t}),C=()=>{k.value&&URL.revokeObjectURL(k.value),x.value=null,k.value="",S.value&&(S.value.value="")},ee=t=>{v.value="",b.value=!1;const a=t.target.files?.[0]||null;if(a){if(!["image/jpeg","image/png","image/webp"].includes(a.type)||a.size>5*1024*1024){C(),b.value=!0,v.value="JPG, PNG, WebP 형식의 5MB 이하 이미지를 선택해 주세요.";return}C(),x.value=a,k.value=URL.createObjectURL(a)}},le=async()=>{if(!(!x.value||c.value||p.value)){c.value=!0,v.value="",b.value=!1;try{const t=new FormData;t.append("image",x.value);const a=await $fetch("/api/account/profile-image",{method:"PUT",body:t});s.user&&(s.user.profileImageUrl=a.profileImageUrl),C(),v.value="프로필 사진을 저장했습니다."}catch(t){b.value=!0,v.value=t.data?.message||"프로필 사진을 저장하지 못했습니다."}finally{c.value=!1}}},ae=async()=>{if(!(p.value||c.value)){p.value=!0,v.value="",b.value=!1;try{await $fetch("/api/account/profile-image",{method:"DELETE"}),s.user&&(s.user.profileImageUrl=""),C(),v.value="등록한 프로필 사진을 삭제했습니다."}catch(t){b.value=!0,v.value=t.data?.message||"프로필 사진을 삭제하지 못했습니다."}finally{p.value=!1}}},te=async()=>{if(!d.value){d.value=!0,M.value="",N.value=!1;try{const t=await $fetch("/api/account/profile",{method:"PATCH",body:{nickname:y.value,publicEmail:w.value,homepageUrl:E.value,bio:h.value}});s.user=t.user,y.value=t.user.displayName,w.value=t.user.publicEmail||"",E.value=t.user.homepageUrl||"",h.value=t.user.bio||"",M.value="공개 프로필을 저장했습니다. 관리자 소개 페이지에 바로 반영됩니다."}catch(t){N.value=!0,M.value=t.data?.message||"닉네임을 변경하지 못했습니다."}finally{d.value=!1}}},se=async()=>
1{if(!_.value){_.value=!0;try{await s.logout()}finally{_.value=!1}}},ie=async()=>{I.value||(K=document.activeElement instanceof HTMLElement?document.activeElement:$.value,R=document.body.style.overflow,document.body.style.overflow="hidden",I.value=!0,await F(),j.value?.focus())},V=()=>{u.value||(I.value=!1,g.value="",P.value="",document.body.style.overflow=R,F(()=>(K||$.value)?.focus()))},oe=t=>{if(t.key==="Escape"){t.preventDefault(),V();return}if(t.key!=="Tab"||!O.value)return;const a=Array.from(O.value.querySelectorAll('button:not(:disabled), input:not(:disabled), [href], [tabindex]:not([tabindex="-1"])'));if(!a.length)return;const z=a[0],r=a[a.length-1];t.shiftKey&&document.activeElement===z?(t.preventDefault(),r?.focus()):!t.shiftKey&&document.activeElement===r&&(t.preventDefault(),z?.focus())},G=async()=>{if(!(g.value!=="회원탈퇴"||u.value)){u.value=!0,P.value="";try{await $fetch("/api/account",{method:"DELETE",body:{confirmation:g.value}}),s.user=null,await ce("/")}catch(t){P.value=t.data?.message||"회원 탈퇴를 처리하지 못했습니다."}finally{u.value=!1}}};return re(()=>{C(),I.value&&(document.body.style.overflow=R)}),de({title:"회원 정보 | 방통실",meta:[{name:"robots",content:"noindex, nofollow"}]}),(t,a)=>{const z=pe;return m(),U("div",Ce,[o(z,{to:"/studio",class:"back-link"},{default:H(()=>[o(l(ve),{size:16,"aria-hidden":"true"}),a[5]||(a[5]=f(" 지통실 안내",-1))]),_:1}),e("header",ze,[e("div",Te,[l(s).avatarUrl?(m(),U("img",{key:0,src:l(s).avatarUrl,width:"62",height:"62",alt:`${l(s).displayName} 프로필 사진`,decoding:"async",fetchpriority:"high"},null,8,De)):(m(),A(l(X),{key:1,size:28,"aria-hidden":"true"}))]),a[6]||(a[6]=e("div",null,[e("span",null,"MY ACCOUNT"),e("h1",null,"회원 정보"),e("p",null,"콘텐츠 관리자 공개 프로필과 방통실 계정을 관리합니다.")],-1))]),e("div",Le,[e("form",{class:"profile-panel","aria-busy":l(d),onSubmit:q(te,["prevent"])},[e("div",Ne,[o(l(he),{size:21}),a[7]||(a[7]=e("div",null,[e("h2",null,"공개 프로필 수정"),e("p",null,"아래 정보는 관리자 소개 페이지와 유저 콘텐츠에 공개됩니다.")],-1))]),e("div",Pe,[o(l(ke),{size:18,"aria-hidden":"true"}),a[8]||(a[8]=e("div",null,[e("strong",null,"입력한 정보는 공개 정보입니다."),e("span",null,"프로필 사진, 닉네임, 소개, 홈페이지와 연락용 이메일은 누구나 볼 수 있습니다. 이메일 원문은 사람 확인을 통과한 방문자에게만 표시됩니다.")],-1))]),e("div",Ve,[e("div",Ae,[l(k)||l(s).avatarUrl?(m(),U("img",{key:0,src:l(k)||l(s).avatarUrl||"",width:"86",height:"86",alt:`${l(s).displayName} 프로필 사진 미리보기`,decoding:"async"},null,8,Be)):(m(),A(l(X),{key:1,size:32,"aria-hidden":"true"}))]),e("div",Se,[a[9]||(a[9]=e("strong",null,"공개 프로필 사진",-1)),a[10]||(a[10]=e("p",{id:"profile-image-help"},"공개 관리자 소개 페이지에 표시됩니다. JPG, PNG, WebP · 최대 5MB",-1)),e("div",$e,[e("label",Oe,[o(l(Ie),{size:16,"aria-hidden":"true"}),f(" "+n(l(s).user?.profileImageUrl?"사진 변경":"사진 등록")+" ",1),e("input",{ref_key:"imageInput",ref:S,type:"file",name:"profileImage",accept:"image/jpeg,image/png,image/webp","aria-describedby":"profile-image-help image-message",disabled:l(c)||l(p),onChange:ee},null,40,Re)]),l(x)?(m(),U("button",{key:0,type:"button",disabled:l(c)||l(p),"aria-busy":l(c),onClick:le},[o(l(Y),{size:16,"aria-hidden":"true"}
1),f(" "+n(l(c)?"저장 중...":"사진 저장"),1)],8,je)):B("",!0),l(s).user?.profileImageUrl?(m(),U("button",{key:1,type:"button",class:"image-delete",disabled:l(p)||l(c),"aria-busy":l(p),onClick:ae},[o(l(_e),{size:16,"aria-hidden":"true"}),f(" "+n(l(p)?"삭제 중...":"사진 삭제"),1)],8,Ke)):B("",!0)]),e("span",{id:"image-message",class:W(["image-message",{error:l(b)}]),role:l(b)?"alert":"status","aria-live":"polite"},n(l(v)),11,Ge)])]),e("label",null,[a[11]||(a[11]=e("span",null,"관리자 닉네임",-1)),T(e("input",{"onUpdate:modelValue":a[0]||(a[0]=r=>L(y)?y.value=r:null),name:"nickname",required:"",minlength:"2",maxlength:"20",autocomplete:"nickname",disabled:l(d),"aria-describedby":"nickname-help",placeholder:"공개할 닉네임"},null,8,He),[[D,l(y),void 0,{trim:!0}]]),a[12]||(a[12]=e("small",{id:"nickname-help"},"2~20자 · 한글, 영문, 숫자, 공백, 밑줄, 하이픈 사용 가능",-1))]),e("label",null,[a[13]||(a[13]=e("span",null,"내 소개",-1)),T(e("textarea",{"onUpdate:modelValue":a[1]||(a[1]=r=>L(h)?h.value=r:null),name:"bio",maxlength:"500",rows:"5",disabled:l(d),"aria-describedby":"bio-help",placeholder:"어떤 콘텐츠를 운영하는지 소개해 주세요."},null,8,qe),[[D,l(h),void 0,{trim:!0}]]),e("small",We,"공개 프로필에 표시됩니다. "+n(l(h).length)+"/500자",1)]),e("label",null,[a[14]||(a[14]=e("span",null,"공개 연락용 이메일",-1)),T(e("input",{"onUpdate:modelValue":a[2]||(a[2]=r=>L(w)?w.value=r:null),name:"publicEmail",type:"email",maxlength:"254",autocomplete:"email",disabled:l(d),"aria-describedby":"public-email-help",placeholder:"[email protected]"},null,8,Fe),[[D,l(w),void 0,{trim:!0}]]),a[15]||(a[15]=e("small",{id:"public-email-help"},"공개 프로필에서 블라인드 처리되며, 방문자가 캡차를 통과한 뒤에만 원문을 ë³¼ 수 있습니다.",-1))]),e("label",null,[a[16]||(a[16]=e("span",null,"홈페이지 주소",-1)),T(e("input",{"onUpdate:modelValue":a[3]||(a[3]=r=>L(E)?E.value=r:null),name:"homepageUrl",type:"url",maxlength:"300",inputmode:"url",autocomplete:"url",disabled:l(d),"aria-describedby":"homepage-help",placeholder:"https://example.com"},null,8,Je),[[D,l(E),void 0,{trim:!0}]]),a[17]||(a[17]=e("small",{id:"homepage-help"},"공개 프로필에 링크로 표시되며 새 창에서 열립니다.",-1))]),e("div",Xe,[o(l(xe),{size:18}),e("div",null,[a[18]||(a[18]=e("small",null,"콘텐츠 공개 표시 예시",-1)),e("strong",null,n(l(y)||l(s).displayName)+" 관리자 운영 · 비공식 콘텐츠",1)])]),e("div",{id:"profile-message",class:W(["message",{error:l(N)}]),role:l(N)?"alert":"status","aria-live":"polite"},n(l(M)),11,Ye),e("div",Ze,[e("button",{type:"submit",disabled:l(d),"aria-busy":l(d),"aria-describedby":"profile-message"},[o(l(Y),{size:17,"aria-hidden":"true"}),f(n(l(d)?"저장 중...":"공개 프로필 저장"),1)],8,Qe),l(s).user?.id?(m(),A(z,{key:0,to:`/managers/${l(s).user.id}`,target:"_blank",rel:"noopener"},{default:H(()=>[a[19]||(a[19]=f("내 공개 프로필 보기 ",-1)),o(l(Ue),{size:15,"aria-hidden":"true"})]),_:1},8,["to"])):B("",!0)])],40,Me),e("section",el,[e("div",ll,[o(l(we),{size:21}),a[20]||(a[20]=e("div",null,[e("h2",null,"연결된 계정"),e("p",null,"로그인과 본인 확인에 사용됩니다.")],-1))]),e("dl",null,[e("div",null,[a[21]||(a[21]=e("dt",null,"Discord 사용자명",-1)),e("dd",null,n(l(s).user?.username),1)]),e("div",null,[a[22]||(a[22]=e("dt",null,"계정 ID",-1)),e("dd",null,n(l(Q)),1)])]),e("button",{type:"button",class:"logout-button",disabled:l(_),"aria-busy":l(_),onClick:se},[o(l(ye),{size:16,"aria-hidden":"true"}),f(" "+n(l(_)?"로그아웃 중...":"로그아웃"),1)],8,al)])]),e("section",tl,[e("div",null,[e("span",null,[o(l(J),{size:20})]),a[23]||(a[23]=e("div",null,[e("h2",null,"회원 탈퇴"),e("p",null,"탈퇴하면 내가 등록한 유저 콘텐츠와 연결된 스트리머·공유 권한이 함께 삭제되며 복구할 수 없습니다.")],-1))]),e("button",{ref_key:"deleteTrigger",ref:$,type:"button",onClick:ie},"회원 탈퇴",512)]),(m(),A(me,{to:"body"},[l(I)?(m(),U("div",{key:0,class:"modal-backdrop",onClick:q(V,["self"])},[e("section",{ref_key:"deleteModal",ref:O,class:"delete-modal",role:"dialog","aria-modal":"true","aria-labelledby":"delete-title","aria-describedby":"delete-description",onKeydown:oe},[e("button",{class:"modal-close",type:"button","aria-label":"탈퇴 ì°½ 닫기",disabled:l(u),onClick:V},[o(l(Ee),{size:19,"aria-hidden":"true"})],8,sl),e("span",il,[o(l(J),{size:24})]),a[24]||(a[24]=e("h2",{id:"delete-title"},"정말 탈퇴하시겠어요?",-1)),a[25]||(a[25]=e("p",{id:"delete-description"},[f("보유한 유저 콘텐츠가 모두 삭제됩니다. 계속하려면 아래에 "),e("strong",null,"회원탈퇴"),f("를 입력해 주세요.")],-1)),a[26]||(a[26]=e("label",{class:"sr-only",for:"delete-confirmation"},"탈퇴 확인 문구",-1)),T(e("input",{id:"delete-confirmation",ref_key:"deleteConfirmationInput",ref:j,"onUpdate:modelValue":a[4]||(a[4]=r=>L(g)?g.value=r:null),autocomplete:"off",disabled:l(u),"aria-describedby":"delete-description delete-message",placeholder:"회원탈퇴",onKeyup:ue(G,["enter"])},null,40,ol),[[D,l(g)]]),e("div",nl,n(l(P)),1),e("div",rl,[e("button",{type:"button",disabled:l(u),onClick:V},"취소",8,dl),e("button",{type:"button",disabled:l(g)!=="회원탈퇴"||l(u),"aria-busy":l(u),onClick:G},n(l(u)?"처리 중...":"영구 탈퇴"),9,ul)])],544)])):B("",!0)]))])}}}),wl=be(ml,[["__scopeId","data-v-bddc1902"]]);export{wl 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.