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.

1 line
5.0 KiB

import{C as e,G as t,O as n,W as r,Z as i,_t as a,at as o,b as s,in as c,k as l,m as u,q as d,w as f,x as p}from"./vue.runtime.esm-bundler-OsdSFvn7.js";import{_ as m,n as h,p as g}from"./api-Dpfxb1ca.js";import{l as ee,u as _}from"./index-CpTiFmNV.js";import{t as v}from"./_plugin-vue_export-helper-CXTkFu_Z.js";import{i as y,r as b}from"./site-j0hHE9UV.js";/* empty css */import{n as x,t as S}from"./participantTheme-BMONOrEx.js";import{i as te,o as ne,r as C,t as re}from"./competitionBranding-BjQScvy4.js";var ie={class:`participant-layout`},ae={key:0,class:`admin-impersonation-banner text-center small py-2 px-3`,role:`status`},w={class:`navbar navbar-expand-lg layout-header`},T={class:`container-fluid px-3 px-lg-4 layout-header-inner`},E={class:`header-brand`},D={class:`navbar-brand mb-0 prototype-title`},O={class:`header-meta`},k={key:0,class:`header-status`},A={key:1,class:`header-deadline`,"aria-label":`报名截止时间`},j={class:`dropdown header-user-dropdown`},M={id:`headerUserToggle`,class:`header-user dropdown-toggle`,type:`button`,"data-bs-toggle":`dropdown`,"data-bs-auto-close":`true`,"aria-expanded":`false`,"aria-label":`打开用户菜单`},N={class:`header-user-name`},P={class:`dropdown-menu dropdown-menu-end header-user-menu`,"aria-labelledby":`headerUserToggle`},F={class:`header-user-menu-separator`},I={class:`container-fluid px-3 px-lg-4 py-3 layout-main`},L={class:`row layout-main-row g-3`},R={class:`col-12 participant-main-col`},z={id:`layoutFooter`,class:`layout-footer`},oe={class:`layout-footer-inner`},B={class:`layout-footer-brand`},V={class:`layout-footer-meta`},H=v(l({__name:`MainLayout`,setup(l){let v=_(),H=ee(),U=s(()=>String(H.params.slug??``).trim()),W=a(C()),G=a(``),K=a(``),q=a(``),J=a(``),se=s(()=>ne(W.value)),Y=s(()=>{let e=Date.now(),t=q.value.trim(),n=J.value.trim(),r=t?Date.parse(t):NaN,i=n?Date.parse(n):NaN;if(Number.isFinite(i)&&e>i)return`报名已截止`;if(Number.isFinite(r)&&e<r)return`即将开始`;if(Number.isFinite(r)||Number.isFinite(i))return`报名进行中`;let a=K.value;return a===`signup_closed`||a===`ended`?`报名已截止`:a===`signup_open`||a===`published`||a===`reviewing`?`报名进行中`:a===`draft`?`即将开始`:`报名进行中`}),X=s(()=>{let e=J.value.trim();if(!e)return``;let t=new Date(e);if(Number.isNaN(t.getTime()))return e.replace(`T`,` `).slice(0,16);let n=e=>String(e).padStart(2,`0`);return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())} ${n(t.getHours())}:${n(t.getMinutes())}`}),ce=s(()=>G.value.trim()||`沪苏协同新兴产业科创大赛`),Z=s(()=>te(W.value.login.footerCopyright)?W.value.login.footerCopyright:b);async function le(){let e=U.value;if(!e){W.value=C(),G.value=``,K.value=``,q.value=``,J.value=``,y();return}try{let t=await fetch(`${m()}/api/v1/public/competitions/by-slug/${encodeURIComponent(e)}`,{headers:{Accept:`application/json`}});if(!t.ok){W.value=C(),G.value=``,K.value=``,q.value=``,J.value=``,y();return}let n=await t.json(),r=n.data!=null&&typeof n.data==`object`&&!Array.isArray(n.data)?n.data:n;G.value=String(r.name??``),K.value=String(r.status??``),q.value=String(r.signup_open_at??``),J.value=String(r.signup_close_at??``),W.value=re(r.branding_json??null),y(W.value.documentTitle)}catch{W.value=C(),G.value=``,K.value=``,q.value=``,J.value=``,y()}}o(U,()=>{le()},{immediate:!0}),o(W,()=>S(W.value.login.themePrimary),{deep:!0,immediate:!0});let Q=a(``),$=a(sessionStorage.getItem(h)===`1`),ue=s(()=>{if($.value){let e=Q.value.trim();return e?`管理员代登 · ${e}`:`管理员代登中`}return Q.value||`用户`});async function de(){let e=localStorage.getItem(g),t=m();if(e)try{let n=await fetch(`${t}/api/me`,{headers:{Authorization:`Bearer ${e}`,Accept:`application/json`}});if(!n.ok)return;let r=await n.json();Q.value=r.name||r.mobile||``}catch{}}function fe(){localStorage.removeItem(g),localStorage.removeItem(`cxxfds_user`),sessionStorage.removeItem(h),$.value=!1;let e=U.value;e?v.push({name:`participant-login`,params:{slug:e}}):v.push(`/c`)}return r(()=>{document.body.classList.add(`prototype-page`,`user-mobile-no-menu`),$.value=sessionStorage.getItem(h)===`1`,de()}),t(()=>{document.body.classList.remove(`prototype-page`,`user-mobile-no-menu`),x()}),(t,r)=>{let a=i(`router-view`);return d(),f(`div`,ie,[$.value?(d(),f(`div`,ae,` 当前为管理员代登选手端,操作将以该选手身份生效。请用完后点击右上角「退出登录」。 `)):e(``,!0),p(`header`,w,[p(`div`,T,[p(`div`,E,[p(`span`,D,c(se.value),1)]),p(`div`,O,[Y.value?(d(),f(`span`,k,c(Y.value),1)):e(``,!0),X.value?(d(),f(`div`,A,[r[0]||=p(`span`,null,`截至`,-1),p(`time`,null,c(X.value),1)])):e(``,!0),p(`div`,j,[p(`button`,M,[p(`span`,N,c(ue.value),1)]),p(`ul`,P,[p(`li`,F,[p(`a`,{class:`dropdown-item dropdown-item-danger`,href:`javascript:void(0)`,onClick:u(fe,[`prevent`])},[...r[1]||=[p(`span`,null,`退出登录`,-1)]])])])])])])]),p(`div`,I,[p(`div`,L,[p(`main`,R,[n(a)])])]),p(`footer`,z,[p(`div`,oe,[p(`div`,B,c(ce.value),1),p(`div`,V,[p(`span`,null,c(Z.value),1)])])])])}}}),[[`__scopeId`,`data-v-23a8a376`]]);export{H as default};