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.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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 f,q as p,w as m,x as h}from"./vue.runtime.esm-bundler-6_koQ1g6.js";import{a as g,i as _,l as v,m as y,p as b}from"./api-CH6mod_b.js";import{C as x,w as S}from"./index-D8PaKRyd.js";/* empty css */import{i as C,r as w,t as ee}from"./competitionBranding-BQASm1w0.js";/* empty css */var te={class:`login-page-wls__wrap`},ne={class:`login-page-wls__inner`},re={class:`login-page-wls__brand`,"aria-label":`系统说明`},ie={class:`login-page-wls__logo`,"aria-hidden":`true`},ae=[`src`],oe={key:1,viewBox:`0 0 100 100`,width:`72`,height:`72`,xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`},se={key:0,class:`login-page-wls__mark`},ce=[`innerHTML`],le={key:1,class:`login-page-wls__title`},T=[`innerHTML`],ue={class:`login-page-wls__panel`},de={class:`login-page-wls__card`},fe={key:0,class:`login-page-wls__card-title`},pe={class:`login-page-wls__code-row`},me=[`disabled`],he=[`disabled`],ge={key:0,class:`login-page-wls__footer`},_e={class:`login-page-wls__copyright`},E=d({__name:`LoginView`,setup(d){let E=x(),D=S(),O=o(``),k=o(``),A=o(!1),j=o(!1),M=o(!1),N=o(`获取验证码`),P=o(!1),F=o(``),I=o(`neutral`),L=s(()=>String(E.params.slug??``).trim()),R=o(``),z=o(w()),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`),ye=s(()=>{let e=z.value.login.markLine;return C(e)?B(e):``}),be=s(()=>{let e=z.value.login.headline;return C(e)?B(e):``});function B(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}let V=s(()=>R.value?R.value:C(z.value.login.slogan)?z.value.login.slogan:``),xe=s(()=>!!R.value),Se=s(()=>C(z.value.login.cardWelcome)?z.value.login.cardWelcome:``),H=s(()=>Se.value.replace(/登陆/g,`登录`)),U=s(()=>C(z.value.login.footerCopyright)?z.value.login.footerCopyright:``),W=s(()=>C(z.value.login.logoUrl)?z.value.login.logoUrl:``),G=0;function K(){G&&=(window.clearInterval(G),0)}function Ce(){K();let e=y();M.value=!0,N.value=`重新获取(${e}s`,G=window.setInterval(()=>{if(--e,e<=0){K(),N.value=`获取验证码`,M.value=!1;return}N.value=`重新获取(${e}s`},1e3)}function q(){return b()}function J(e,t=`neutral`){F.value=e,I.value=t}function Y(){F.value=``,I.value=`neutral`}function X(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`请求失败`}let Z=null,Q=null,$=!1;async function we(){R.value=``,z.value=w();let e=L.value,t=typeof document<`u`?document.title:``;if(!e){R.value=`缺少赛事访问地址,请从正确入口进入`;return}try{let n=await fetch(`${q()}/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();z.value=ee(r.branding_json??r.branding??null);let i=z.value.documentTitle;typeof document<`u`&&(C(i)?document.title=i:document.title=t);let a=z.value.login.themePrimary;if(C(a)&&typeof document<`u`){Z===null&&(Z=document.body.style.getPropertyValue(`--primary`)||``),document.body.style.setProperty(`--primary`,a);let e=`${a}14`;document.body.style.setProperty(`--primary-soft`,e)}let o=z.value.login.faviconUrl;if(C(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{R.value=`网络错误,无法校验赛事链接`}}async function Te(){if(M.value)return;let e=O.value.trim();if(!/^1[3-9]\d{9}$/.test(e)){A.value=!0,j.value=!1,J(`请先填写正确手机号`,`error`);return}A.value=!1,j.value=!1,Y(),M.value=!0,N.value=`发送中...`;let t=`${q()}${g}`;try{let n=await fetch(t,{method:`POST`,headers:{"Content-Type":`application/json`,Accept:`application/json`,"X-Requested-With":`XMLHttpRequest`},body:JSON.stringify({mobile:e})}),r=await n.json().catch(()=>({}));if(!n.ok){J(X(r),`error`),N.value=`获取验证码`,M.value=!1,K();return}let i=r;i.debug_code?J(`本次验证码:${i.debug_code}`,`success`):Y(),Ce()}catch{J(`网络错误请确认后端已启动Vite 将 /api 代理至 php artisan serve 端口,见 vite.config`,`error`),N.value=`获取验证码`,M.value=!1,K()}}async function Ee(){let e=/^1[3-9]\d{9}$/.test(O.value.trim()),t=k.value.trim(),n=t.length>0;if(A.value=!e,j.value=e&&!n,!e){J(`请先填写正确手机号`,`error`);return}if(!n){J(`请输入验证码`,`error`);return}if(Y(),P.value=!0,J(`登录中...`,`neutral`),!L.value){J(`缺少赛事访问地址,请从正确入口进入`,`error`),P.value=!1;return}let r=`${q()}${_}`;try{let e=await fetch(r,{method:`POST`,headers:{"Content-Type":`application/json`,Accept:`application/json`,"X-Requested-With":`XMLHttpRequest`},body:JSON.stringify({mobile:O.value.trim(),code:t,competition_slug:L.value})}),n=await e.json().catch(()=>({}));if(!e.ok){J(X(n),`error`);return}Y(),localStorage.setItem(v,n.token),localStorage.setItem(`cxxfds_user`,JSON.stringify(n.user));let i=typeof E.query.redirect==`string`?E.query.redirect:``;if(i&&i.startsWith(`/`)){await D.replace(i);return}let a=L.value;a?await D.replace({name:`participant-apply`,params:{slug:a}}):await D.replace(`/c`)}catch{J(`网络错误,请确认后端已启动`,`error`)}finally{P.value=!1}}return a(()=>{typeof document<`u`&&(document.documentElement.classList.add(`cxxfds-login-page`),$=!0),document.body.classList.add(`login-page-wls`),we()}),i(()=>{if(typeof document<`u`&&$&&(document.documentElement.classList.remove(`cxxfds-login-page`),$=!1),document.body.classList.remove(`login-page-wls`),K(),typeof document<`u`&&(Z!==null&&(Z===``?(document.body.style.removeProperty(`--primary`),document.body.style.removeProperty(`--primary-soft`)):document.body.style.setProperty(`--primary`,Z),Z=null),Q!==null)){let e=document.querySelector(`link[rel~="icon"]`);e&&(Q===``?e.removeAttribute(`href`):e.href=Q),Q=null}}),(i,a)=>(p(),m(`div`,te,[h(`div`,ne,[h(`aside`,re,[h(`div`,ie,[W.value?(p(),m(`img`,{key:0,src:W.value,alt:``,class:`login-page-wls__logo-img`,width:`72`,height:`72`},null,8,ae)):(p(),m(`svg`,oe,[...a[4]||=[n(`<defs><linearGradient id="loginPetalGrad" 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="loginPetal" 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(#loginPetalGrad)" stroke="#8f000c" stroke-width="0.35" stroke-linejoin="round"><use href="#loginPetal"></use><use href="#loginPetal" transform="rotate(90 50 50)"></use><use href="#loginPetal" transform="rotate(180 50 50)"></use><use href="#loginPetal" 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(C)(z.value.login.markLine)?(p(),m(`div`,se,[h(`div`,{class:`login-page-wls__mark-cn`,innerHTML:ye.value},null,8,ce)])):t(``,!0),r(C)(z.value.login.headline)?(p(),m(`h1`,le,[h(`span`,{class:`login-page-wls__title-main`,innerHTML:be.value},null,8,T)])):t(``,!0),V.value?(p(),m(`p`,{key:2,class:e([`login-page-wls__slogan`,{"login-page-wls__slogan--error":xe.value}])},u(V.value),3)):t(``,!0)]),h(`section`,ue,[h(`div`,de,[H.value?(p(),m(`h2`,fe,u(H.value),1)):t(``,!0),h(`form`,{class:`login-page-wls__form`,onSubmit:f(Ee,[`prevent`]),novalidate:``},[c(h(`input`,{"onUpdate:modelValue":a[0]||=e=>O.value=e,type:`tel`,class:e([`login-page-wls__input`,{"login-page-wls__input--error":A.value}]),name:`mobile`,autocomplete:`tel`,inputmode:`numeric`,maxlength:`11`,placeholder:`手机号`,onInput:a[1]||=e=>A.value=!1},null,34),[[l,O.value,void 0,{trim:!0}]]),h(`div`,pe,[c(h(`input`,{"onUpdate:modelValue":a[2]||=e=>k.value=e,type:`text`,class:e([`login-page-wls__input login-page-wls__input-code`,{"login-page-wls__input--error":j.value}]),name:`captcha`,autocomplete:`one-time-code`,inputmode:`numeric`,placeholder:`验证码`,onInput:a[3]||=e=>j.value=!1},null,34),[[l,k.value,void 0,{trim:!0}]]),h(`button`,{type:`button`,class:`login-page-wls__code-btn`,disabled:M.value,onClick:Te},u(N.value),9,me)]),h(`button`,{type:`submit`,class:`login-page-wls__submit`,disabled:P.value},u(P.value?`登录中…`:`登录`),9,he),F.value?(p(),m(`p`,{key:0,class:e(ve.value),style:{"margin-top":`0.75rem`}},u(F.value),3)):t(``,!0)],32)])])]),U.value?(p(),m(`footer`,ge,[h(`p`,_e,u(U.value),1)])):t(``,!0)]))}});export{E as default};