You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

6 lines
8.5 KiB

import{$t as e,C as t,E as n,Et as r,G as i,W as a,_t as o,b as s,ct as c,d as l,in as u,k as d,m as ee,q as f,w as p,x as m}from"./vue.runtime.esm-bundler-OsdSFvn7.js";import{c as te,p as ne,w as re}from"./api-Cy3G2Clw.js";import{c as h,d as g,l as _,o as v,s as y,u as b}from"./index-DURGyk_5.js";/* empty css */import{i as x,r as S,t as C}from"./competitionBranding-DKFkcrfF.js";/* empty css */var ie={class:`login-page-wls__wrap`},ae={class:`login-page-wls__inner`},oe={class:`login-page-wls__brand`,"aria-label":`赛事说明`},se={class:`login-page-wls__logo`,"aria-hidden":`true`},ce=[`src`],le={key:1,viewBox:`0 0 100 100`,width:`72`,height:`72`,xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`},ue={key:0,class:`login-page-wls__mark`},de=[`innerHTML`],fe={key:1,class:`login-page-wls__title`},w=[`innerHTML`],T={class:`login-page-wls__panel`},E={class:`login-page-wls__card`},pe={class:`login-page-wls__card-title`},me=[`disabled`],he=[`disabled`],ge=[`disabled`],_e={key:0,class:`login-page-wls__footer`},D={class:`login-page-wls__copyright`},O=d({__name:`ReviewerLoginView`,setup(d){let O=_(),k=b(),A=o(``),j=o(``),M=o(!1),N=o(!1),P=o(!1),F=o(``),I=o(`neutral`),L=s(()=>String(O.params.slug??``).trim()),R=o(``),z=o(S()),B=o(!0),V=o(``),H=o(!1),ve=s(()=>I.value===`error`?`login-page-wls__hint login-page-wls__hint--error`:I.value===`success`?`login-page-wls__hint login-page-wls__hint--success`:`login-page-wls__hint`);function U(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}let ye=s(()=>{let e=z.value.login.markLine;return x(e)?U(e):``}),be=s(()=>{let e=z.value.login.headline;return x(e)?U(e):``}),W=s(()=>{if(R.value)return R.value;let e=z.value.login.slogan;return x(e)?e:``}),xe=s(()=>!!R.value),Se=s(()=>x(z.value.login.cardWelcome)?z.value.login.cardWelcome.replace(/登陆/g,`登录`):`评审员登录`),G=s(()=>x(z.value.login.footerCopyright)?z.value.login.footerCopyright:``),K=s(()=>x(z.value.login.logoUrl)?z.value.login.logoUrl:``),q=null,J=null,Y=!1;function X(){return ne()}function Z(e,t=`neutral`){F.value=e,I.value=t}function Q(){F.value=``,I.value=`neutral`}function Ce(e){if(typeof e!=`object`||!e)return`请求失败`;let t=e,n=t.message;if(typeof n==`string`&&n.trim())return n.trim();let r=t.errors;if(typeof r==`object`&&r&&!Array.isArray(r)){let e=Object.values(r).flatMap(e=>Array.isArray(e)?e.map(e=>String(e)):[]);if(e.length)return e.join(`
`)}return`请求失败`}async function $(e){if(H.value)return;H.value=!0;let t=U(v(e)).replace(/\r\n|\r|\n/g,`<br>`);try{await g.alert(t,`评审暂未开放`,{confirmButtonText:`知道了`,confirmButtonClass:`login-page-wls__msgbox-confirm`,customClass:`login-page-wls__msgbox`,closeOnClickModal:!1,closeOnPressEscape:!1,showClose:!1,autofocus:!1,dangerouslyUseHTMLString:!0})}catch{}finally{H.value=!1}}async function we(){R.value=``,z.value=S(),B.value=!0,V.value=``,H.value=!1;let e=L.value,t=typeof document<`u`?document.title:``;if(!e){R.value=`缺少赛事访问地址,请从正确入口进入`;return}try{y(e);let n=await fetch(`${X()}/api/v1/public/competitions/by-slug/${encodeURIComponent(e)}`,{headers:{Accept:`application/json`}});if(!n.ok){R.value=n.status===404?`赛事不存在或未发布,请核对访问地址`:`无法加载赛事信息`;return}let r=await n.json(),i=typeof r==`object`&&r&&`data`in r?r.data:r;z.value=C(i?.branding_json??i?.branding??null);let a=h(i);B.value=a.enabled,V.value=a.message,a.enabled||$(a.message);let o=z.value.documentTitle;typeof document<`u`&&(document.title=x(o)?`${Te(o)} · 评审登录`:t||`评审登录`);let s=z.value.login.themePrimary;x(s)&&typeof document<`u`&&(q===null&&(q=document.body.style.getPropertyValue(`--primary`)||``),document.body.style.setProperty(`--primary`,s),document.body.style.setProperty(`--primary-soft`,`${s}14`));let c=z.value.login.faviconUrl;if(x(c)&&typeof document<`u`){let e=document.querySelector(`link[rel~="icon"]`);e||(e=document.createElement(`link`),e.rel=`icon`,document.head.appendChild(e)),J===null&&(J=e.getAttribute(`href`)||``),e.href=c}}catch{R.value=`网络错误,无法校验赛事链接`}}function Te(e){return e.replace(/[\u200B-\u200D\uFEFF]/gu,``).trim()}async function Ee(){if(!B.value){$(V.value),Z(v(V.value),`error`);return}let e=A.value.trim(),t=j.value;if(M.value=!e,N.value=!t,!e){Z(`请填写账号`,`error`);return}if(!t){Z(`请填写密码`,`error`);return}if(!L.value){Z(`缺少赛事访问地址`,`error`);return}Q(),P.value=!0,Z(`登录中…`,`neutral`);try{let n=`${X()}${te}`,r=await fetch(n,{method:`POST`,headers:{"Content-Type":`application/json`,Accept:`application/json`,"X-Requested-With":`XMLHttpRequest`},body:JSON.stringify({username:e,password:t,competition_slug:L.value})}),i=await r.json().catch(()=>({}));if(!r.ok){Z(Ce(i),`error`);let e=i.errors?.competition_slug,t=Array.isArray(e)?String(e[0]??``):``;t&&!t.includes(`不存在`)&&!t.includes(`未发布`)&&(B.value=!1,V.value=t,$(t));return}Q();let a=i.token;if(typeof a!=`string`||!a){Z(`登录响应异常:缺少令牌`,`error`);return}re(a,L.value);let o=typeof O.query.redirect==`string`?O.query.redirect:``;if(o&&o.startsWith(`/`)){await k.replace(o);return}await k.replace({name:`reviewer-projects`,params:{slug:L.value}})}catch{Z(`网络错误,请确认后端已启动`,`error`)}finally{P.value=!1}}return a(()=>{typeof document<`u`&&(document.documentElement.classList.add(`cxxfds-login-page`),Y=!0),document.body.classList.add(`login-page-wls`),we()}),i(()=>{if(typeof document<`u`&&Y&&(document.documentElement.classList.remove(`cxxfds-login-page`),Y=!1),document.body.classList.remove(`login-page-wls`),typeof document<`u`&&(q!==null&&(q===``?(document.body.style.removeProperty(`--primary`),document.body.style.removeProperty(`--primary-soft`)):document.body.style.setProperty(`--primary`,q),q=null),J!==null)){let e=document.querySelector(`link[rel~="icon"]`);e&&(J===``?e.removeAttribute(`href`):e.href=J),J=null}}),(i,a)=>(f(),p(`div`,ie,[m(`div`,ae,[m(`aside`,oe,[m(`div`,se,[K.value?(f(),p(`img`,{key:0,src:K.value,alt:``,class:`login-page-wls__logo-img`,width:`72`,height:`72`},null,8,ce)):(f(),p(`svg`,le,[...a[4]||=[n(`<defs><linearGradient id="reviewerLoginPetalGrad" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" stop-color="#dc4a54"></stop><stop offset="45%" stop-color="#b40010"></stop><stop offset="100%" stop-color="#7d070c"></stop></linearGradient><path id="reviewerLoginPetal" d="M50 50
C46.2 44.2 44.2 34.5 46.2 27.2
C47.3 23.6 48.6 21.2 50 20.2
C51.4 21.2 52.7 23.6 53.8 27.2
C55.8 34.5 53.8 44.2 50 50Z"></path></defs><g fill="url(#reviewerLoginPetalGrad)" stroke="#8f000c" stroke-width="0.35" stroke-linejoin="round"><use href="#reviewerLoginPetal"></use><use href="#reviewerLoginPetal" transform="rotate(90 50 50)"></use><use href="#reviewerLoginPetal" transform="rotate(180 50 50)"></use><use href="#reviewerLoginPetal" transform="rotate(270 50 50)"></use></g><circle cx="50" cy="50" r="3.6" fill="#5c6068" stroke="#fdfcfc" stroke-width="0.65"></circle>`,3)]]))]),r(x)(z.value.login.markLine)?(f(),p(`div`,ue,[m(`div`,{class:`login-page-wls__mark-cn`,innerHTML:ye.value},null,8,de)])):t(``,!0),r(x)(z.value.login.headline)?(f(),p(`h1`,fe,[m(`span`,{class:`login-page-wls__title-main`,innerHTML:be.value},null,8,w)])):t(``,!0),W.value?(f(),p(`p`,{key:2,class:e([`login-page-wls__slogan`,{"login-page-wls__slogan--error":xe.value}])},u(W.value),3)):t(``,!0)]),m(`section`,T,[m(`div`,E,[m(`h2`,pe,u(Se.value),1),m(`form`,{class:`login-page-wls__form`,onSubmit:ee(Ee,[`prevent`]),novalidate:``},[c(m(`input`,{"onUpdate:modelValue":a[0]||=e=>A.value=e,type:`text`,class:e([`login-page-wls__input`,{"login-page-wls__input--error":M.value}]),name:`username`,autocomplete:`username`,maxlength:`64`,placeholder:`账号`,disabled:!B.value,onInput:a[1]||=e=>M.value=!1},null,42,me),[[l,A.value,void 0,{trim:!0}]]),c(m(`input`,{"onUpdate:modelValue":a[2]||=e=>j.value=e,type:`password`,class:e([`login-page-wls__input`,{"login-page-wls__input--error":N.value}]),name:`password`,autocomplete:`current-password`,placeholder:`密码`,maxlength:`255`,disabled:!B.value,onInput:a[3]||=e=>N.value=!1},null,42,he),[[l,j.value]]),m(`button`,{type:`submit`,class:`login-page-wls__submit`,disabled:P.value||!B.value},u(P.value?`登录中…`:B.value?`登录`:`评审暂未开放`),9,ge),F.value?(f(),p(`p`,{key:0,class:e(ve.value),style:{"margin-top":`0.75rem`}},u(F.value),3)):t(``,!0)],32)])])]),G.value?(f(),p(`footer`,_e,[m(`p`,D,u(G.value),1)])):t(``,!0)]))}});export{O as default};