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.

2 lines
6.3 KiB

import{$t as e,G as t,O as n,S as r,T as i,W as a,_t as o,ct as s,f as c,h as l,in as u,k as d,q as f,w as p,x as m}from"./vue.runtime.esm-bundler-CACvpnko.js";import{P as h,_ as g,d as ee}from"./api-Dpfxb1ca.js";import{d as _,f as v,l as y,m as b,p as x,u as S}from"./index-D5exsJys.js";import{a as C,t as w}from"./site-BxiJvB6v.js";import{n as T,t as E}from"./participantTheme-HEHn5JJn.js";import{c as D,r as O,s as k,u as te}from"./competitionBranding-CAjogVRl.js";import{t as ne}from"./login-page-overrides-BwirTgW8.js";var re={class:`login-page-wls__wrap`},ie={class:`login-page-wls__inner`},ae={class:`login-page-wls__panel`},oe={class:`login-page-wls__card`},se={class:`login-page-wls__card-title`},ce=[`disabled`],le=[`disabled`],ue=[`disabled`],de={key:0,class:`login-page-wls__footer`},fe={class:`login-page-wls__copyright`},A=d({__name:`ReviewerLoginView`,setup(d){let A=v(),j=x(),M=o(``),N=o(``),P=o(!1),F=o(!1),I=o(!1),L=o(``),R=o(`neutral`),z=m(()=>String(A.params.slug??``).trim()),B=o(``),V=o(``),H=o(k()),U=o(!0),W=o(``),G=o(!1),pe=m(()=>R.value===`error`?`login-page-wls__hint login-page-wls__hint--error`:R.value===`success`?`login-page-wls__hint login-page-wls__hint--success`:`login-page-wls__hint`);function me(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}let he=m(()=>te(H.value,V.value)),ge=m(()=>B.value?B.value:``),_e=m(()=>D(H.value.login.cardWelcome)?H.value.login.cardWelcome.replace(/登陆/g,`登录`):`评审员登录`),K=m(()=>D(H.value.login.footerCopyright)?H.value.login.footerCopyright:``),q=null,J=!1;function Y(){return g()}function X(e,t=`neutral`){L.value=e,R.value=t}function Z(){L.value=``,R.value=`neutral`}function Q(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(G.value)return;G.value=!0;let t=me(y(e)).replace(/\r\n|\r|\n/g,`<br>`);try{await b.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{G.value=!1}}async function ve(){B.value=``,H.value=k(),V.value=``,U.value=!0,W.value=``,G.value=!1;let e=z.value;if(C(`${w} · 评审登录`),!e){B.value=`缺少赛事访问地址,请从正确入口进入`;return}try{S(e);let t=await fetch(`${Y()}/api/v1/public/competitions/by-slug/${encodeURIComponent(e)}`,{headers:{Accept:`application/json`}});if(!t.ok){B.value=t.status===404?`赛事不存在或未发布,请核对访问地址`:`无法加载赛事信息`;return}let n=await t.json(),r=typeof n==`object`&&n&&`data`in n?n.data:n;V.value=String(r?.name??``),H.value=O(r?.branding_json??r?.branding??null);let i=_(r);U.value=i.enabled,W.value=i.message,i.enabled||$(i.message);let a=H.value.documentTitle;C(D(a)?`${ye(a)} · 评审登录`:`${w} · 评审登录`),E(H.value.login.themePrimary);let o=H.value.login.faviconUrl;if(D(o)&&typeof document<`u`){let e=document.querySelector(`link[rel~="icon"]`);e||(e=document.createElement(`link`),e.rel=`icon`,document.head.appendChild(e)),q===null&&(q=e.getAttribute(`href`)||``),e.href=o}}catch{B.value=`网络错误,无法校验赛事链接`}}function ye(e){return e.replace(/[\u200B-\u200D\uFEFF]/gu,``).trim()}async function be(){if(!U.value){$(W.value),X(y(W.value),`error`);return}let e=M.value.trim(),t=N.value;if(P.value=!e,F.value=!t,!e){X(`请填写账号`,`error`);return}if(!t){X(`请填写密码`,`error`);return}if(!z.value){X(`缺少赛事访问地址`,`error`);return}Z(),I.value=!0,X(`登录中…`,`neutral`);try{let n=`${Y()}${ee}`,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:z.value})}),i=await r.json().catch(()=>({}));if(!r.ok){X(Q(i),`error`);let e=i.errors?.competition_slug,t=Array.isArray(e)?String(e[0]??``):``;t&&!t.includes(`不存在`)&&!t.includes(`未发布`)&&(U.value=!1,W.value=t,$(t));return}Z();let a=i.token;if(typeof a!=`string`||!a){X(`登录响应异常:缺少令牌`,`error`);return}h(a,z.value);let o=typeof A.query.redirect==`string`?A.query.redirect:``;if(o&&o.startsWith(`/`)){await j.replace(o);return}await j.replace({name:`reviewer-projects`,params:{slug:z.value}})}catch{X(`网络错误,请确认后端已启动`,`error`)}finally{I.value=!1}}return a(()=>{typeof document<`u`&&(document.documentElement.classList.add(`cxxfds-login-page`),J=!0),document.body.classList.add(`login-page-wls`),ve()}),t(()=>{if(typeof document<`u`&&J&&(document.documentElement.classList.remove(`cxxfds-login-page`),J=!1),document.body.classList.remove(`login-page-wls`),typeof document<`u`&&(T(),q!==null)){let e=document.querySelector(`link[rel~="icon"]`);e&&(q===``?e.removeAttribute(`href`):e.href=q),q=null}}),(t,a)=>(f(),i(`div`,re,[r(`div`,ie,[n(ne,{"logo-url":H.value.login.logoUrl,title:he.value,"aria-label":`赛事说明`,"error-slogan":ge.value},null,8,[`logo-url`,`title`,`error-slogan`]),r(`section`,ae,[r(`div`,oe,[r(`h2`,se,u(_e.value),1),r(`form`,{class:`login-page-wls__form`,onSubmit:l(be,[`prevent`]),novalidate:``},[s(r(`input`,{"onUpdate:modelValue":a[0]||=e=>M.value=e,type:`text`,class:e([`login-page-wls__input`,{"login-page-wls__input--error":P.value}]),name:`username`,autocomplete:`username`,maxlength:`64`,placeholder:`账号`,disabled:!U.value,onInput:a[1]||=e=>P.value=!1},null,42,ce),[[c,M.value,void 0,{trim:!0}]]),s(r(`input`,{"onUpdate:modelValue":a[2]||=e=>N.value=e,type:`password`,class:e([`login-page-wls__input`,{"login-page-wls__input--error":F.value}]),name:`password`,autocomplete:`current-password`,placeholder:`密码`,maxlength:`255`,disabled:!U.value,onInput:a[3]||=e=>F.value=!1},null,42,le),[[c,N.value]]),r(`button`,{type:`submit`,class:`login-page-wls__submit`,disabled:I.value||!U.value},u(I.value?`登录中…`:U.value?`登录`:`评审暂未开放`),9,ue),L.value?(f(),i(`p`,{key:0,class:e(pe.value),style:{"margin-top":`0.75rem`}},u(L.value),3)):p(``,!0)],32)])])]),K.value?(f(),i(`footer`,de,[r(`p`,fe,u(K.value),1)])):p(``,!0)]))}});export{A as default};