master
lion 1 month ago
parent a460db75a0
commit 539940fd43

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

@ -1 +1 @@
import{D as e,O as t,S as n,T as r,W as i,Z as a,_t as o,h as s,in as c,k as l,q as u,st as d}from"./vue.runtime.esm-bundler-CACvpnko.js";import{y as f}from"./api-Dpfxb1ca.js";import{a as p,f as m,h,p as g}from"./index-D5exsJys.js";import{t as _}from"./_plugin-vue_export-helper-CXTkFu_Z.js";import{t as v}from"./auth-Dp3MNaAu.js";import{a as y}from"./site-BxiJvB6v.js";var b={class:`login-wrap`},x=_(l({__name:`AdminLoginView`,setup(l){let _=m(),x=g(),S=p(),C=o(``),w=o(``),T=o(!1);i(()=>{y()});function E(e){return e instanceof Error&&e.message.trim()?e.message:typeof e==`string`&&e.trim()?e:`登录失败`}function D(){let e=f(typeof _.query.redirect==`string`?_.query.redirect:``);return e&&e.startsWith(`/admin`)&&!e.includes(`/login`)?{path:e,replace:!0}:{name:`admin-dashboard`,replace:!0}}async function O(){if(!C.value.trim()||!w.value.trim()){h.warning(`请输入账号和密码`);return}T.value=!0;try{let e=await v({username:C.value.trim(),password:w.value.trim()}),t=e.user&&typeof e.user.id==`number`?{id:e.user.id,username:e.user.username,name:e.user.name,kind:`platform`}:null;S.setSession(e.token,t),await x.replace(D()),h.success(`登录成功`)}catch(e){h.error(E(e))}finally{T.value=!1}}return(i,o)=>{let l=a(`el-input`),f=a(`el-form-item`),p=a(`el-button`),m=a(`el-form`),h=a(`el-card`);return u(),r(`div`,b,[t(h,{class:`login-card`,shadow:`hover`},{header:d(()=>[...o[2]||=[n(`div`,{class:`card-title`},`管理员登录`,-1)]]),default:d(()=>[t(m,{"label-position":`top`,onSubmit:s(O,[`prevent`])},{default:d(()=>[t(f,{label:`账号`},{default:d(()=>[t(l,{modelValue:C.value,"onUpdate:modelValue":o[0]||=e=>C.value=e,modelModifiers:{trim:!0},autocomplete:`username`,clearable:``},null,8,[`modelValue`])]),_:1}),t(f,{label:`密码`},{default:d(()=>[t(l,{modelValue:w.value,"onUpdate:modelValue":o[1]||=e=>w.value=e,type:`password`,autocomplete:`current-password`,"show-password":``},null,8,[`modelValue`])]),_:1}),t(p,{type:`primary`,class:`w-100`,"native-type":`submit`,loading:T.value},{default:d(()=>[e(c(T.value?`登录中…`:`登录`),1)]),_:1},8,[`loading`])]),_:1})]),_:1})])}}}),[[`__scopeId`,`data-v-0e142abe`]]);export{x as default};
import{D as e,O as t,S as n,T as r,W as i,Z as a,_t as o,h as s,in as c,k as l,q as u,st as d}from"./vue.runtime.esm-bundler-CACvpnko.js";import{y as f}from"./api-Dpfxb1ca.js";import{a as p,f as m,h,p as g}from"./index-iRzk6lDR.js";import{t as _}from"./_plugin-vue_export-helper-CXTkFu_Z.js";import{t as v}from"./auth-DzDegrJh.js";import{a as y}from"./site-BxiJvB6v.js";var b={class:`login-wrap`},x=_(l({__name:`AdminLoginView`,setup(l){let _=m(),x=g(),S=p(),C=o(``),w=o(``),T=o(!1);i(()=>{y()});function E(e){return e instanceof Error&&e.message.trim()?e.message:typeof e==`string`&&e.trim()?e:`登录失败`}function D(){let e=f(typeof _.query.redirect==`string`?_.query.redirect:``);return e&&e.startsWith(`/admin`)&&!e.includes(`/login`)?{path:e,replace:!0}:{name:`admin-dashboard`,replace:!0}}async function O(){if(!C.value.trim()||!w.value.trim()){h.warning(`请输入账号和密码`);return}T.value=!0;try{let e=await v({username:C.value.trim(),password:w.value.trim()}),t=e.user&&typeof e.user.id==`number`?{id:e.user.id,username:e.user.username,name:e.user.name,kind:`platform`}:null;S.setSession(e.token,t),await x.replace(D()),h.success(`登录成功`)}catch(e){h.error(E(e))}finally{T.value=!1}}return(i,o)=>{let l=a(`el-input`),f=a(`el-form-item`),p=a(`el-button`),m=a(`el-form`),h=a(`el-card`);return u(),r(`div`,b,[t(h,{class:`login-card`,shadow:`hover`},{header:d(()=>[...o[2]||=[n(`div`,{class:`card-title`},`管理员登录`,-1)]]),default:d(()=>[t(m,{"label-position":`top`,onSubmit:s(O,[`prevent`])},{default:d(()=>[t(f,{label:`账号`},{default:d(()=>[t(l,{modelValue:C.value,"onUpdate:modelValue":o[0]||=e=>C.value=e,modelModifiers:{trim:!0},autocomplete:`username`,clearable:``},null,8,[`modelValue`])]),_:1}),t(f,{label:`密码`},{default:d(()=>[t(l,{modelValue:w.value,"onUpdate:modelValue":o[1]||=e=>w.value=e,type:`password`,autocomplete:`current-password`,"show-password":``},null,8,[`modelValue`])]),_:1}),t(p,{type:`primary`,class:`w-100`,"native-type":`submit`,loading:T.value},{default:d(()=>[e(c(T.value?`登录中…`:`登录`),1)]),_:1},8,[`loading`])]),_:1})]),_:1})])}}}),[[`__scopeId`,`data-v-0e142abe`]]);export{x as default};

@ -1 +0,0 @@
.application-status-panel[data-v-df3a9d33]{color:#17324d;background:#f7f9fc;border:1px solid #d8e2ef;border-radius:8px;align-items:flex-start;gap:.75rem;margin-bottom:1rem;padding:.875rem 1rem;display:flex}.application-status-panel--submitted[data-v-df3a9d33]{color:#1f5132;background:#f3faf5;border-color:#bdd7c8}.application-status-mark[data-v-df3a9d33]{flex:none;justify-content:center;align-items:center;width:1.75rem;height:1.75rem;margin-top:.05rem;display:inline-flex}.application-status-copy[data-v-df3a9d33]{gap:.2rem;min-width:0;display:grid}.application-status-copy strong[data-v-df3a9d33]{font-size:.98rem;line-height:1.35}.application-status-copy span[data-v-df3a9d33]{color:#4d5f73;font-size:.9rem;line-height:1.5}.application-status-panel--submitted .application-status-copy span[data-v-df3a9d33]{color:#42664f}.apply-contact-panel[data-v-df3a9d33]{color:#425466;background:#fbfcfe;border:1px solid #e4e9ef;border-radius:8px;flex-wrap:wrap;align-items:center;gap:.45rem 1rem;margin-bottom:1rem;padding:.72rem .9rem;font-size:.9rem;line-height:1.4;display:flex}.apply-contact-panel a[data-v-df3a9d33]{color:inherit;text-decoration:none}.apply-contact-label[data-v-df3a9d33]{color:#5a6b7a}.apply-contact-line[data-v-df3a9d33]{flex-wrap:wrap;align-items:center;gap:.15rem;display:inline-flex}.apply-contact-sep[data-v-df3a9d33]{color:#8a96a3}.track-pick-inline[data-v-df3a9d33]{white-space:normal;flex-direction:column;gap:.2rem;width:100%;display:flex}.track-pick-inline .text-body[data-v-df3a9d33]{white-space:nowrap;font-weight:400;color:#1f1f1f!important}.track-custom-note[data-v-df3a9d33]{color:#7d8896;font-size:.88em;line-height:1.45}@media (width<=575.98px){.application-status-panel[data-v-df3a9d33]{padding:.8rem .85rem}.track-custom-menu[data-v-df3a9d33]{overscroll-behavior:contain;max-height:min(62vh,28rem);overflow-y:auto}.track-pick[data-v-df3a9d33]{padding:.85rem .9rem}.track-custom-note[data-v-df3a9d33]{font-size:.82rem;line-height:1.5}}.promise-doc-body--rich[data-v-df3a9d33]{color:#221b1c;text-align:justify;text-justify:inter-ideograph;font-family:SimSun,Songti SC,STSong,serif;font-size:12pt;line-height:26px}.promise-doc-body--rich[data-v-df3a9d33] p{text-indent:2em;margin:0 0 .62rem}.promise-doc-body--rich[data-v-df3a9d33] p:last-child{margin-bottom:0}.promise-doc-body--rich[data-v-df3a9d33] ul,.promise-doc-body--rich[data-v-df3a9d33] ol{margin-bottom:.75rem;padding-left:1.25rem}.promise-doc-body--rich[data-v-df3a9d33] h1,.promise-doc-body--rich[data-v-df3a9d33] h2,.promise-doc-body--rich[data-v-df3a9d33] h3{color:var(--primary-dark,#087db4);text-indent:0;margin:1.2rem 0 .45rem;font-size:1rem;font-weight:700}

@ -0,0 +1 @@
.application-status-panel[data-v-e62a6a08]{color:#17324d;background:#f7f9fc;border:1px solid #d8e2ef;border-radius:8px;align-items:flex-start;gap:.75rem;margin-bottom:1rem;padding:.875rem 1rem;display:flex}.application-status-panel--submitted[data-v-e62a6a08]{color:#1f5132;background:#f3faf5;border-color:#bdd7c8}.application-status-mark[data-v-e62a6a08]{flex:none;justify-content:center;align-items:center;width:1.75rem;height:1.75rem;margin-top:.05rem;display:inline-flex}.application-status-copy[data-v-e62a6a08]{gap:.2rem;min-width:0;display:grid}.application-status-copy strong[data-v-e62a6a08]{font-size:.98rem;line-height:1.35}.application-status-copy span[data-v-e62a6a08]{color:#4d5f73;font-size:.9rem;line-height:1.5}.application-status-panel--submitted .application-status-copy span[data-v-e62a6a08]{color:#42664f}.apply-contact-panel[data-v-e62a6a08]{color:#425466;background:#fbfcfe;border:1px solid #e4e9ef;border-radius:8px;flex-wrap:wrap;align-items:center;gap:.45rem 1rem;margin-bottom:1rem;padding:.72rem .9rem;font-size:.9rem;line-height:1.4;display:flex}.apply-contact-panel a[data-v-e62a6a08]{color:inherit;text-decoration:none}.apply-contact-label[data-v-e62a6a08]{color:#5a6b7a}.apply-contact-line[data-v-e62a6a08]{flex-wrap:wrap;align-items:center;gap:.15rem;display:inline-flex}.apply-contact-sep[data-v-e62a6a08]{color:#8a96a3}.track-pick-inline[data-v-e62a6a08]{white-space:normal;flex-direction:column;gap:.2rem;width:100%;display:flex}.track-pick-inline .text-body[data-v-e62a6a08]{white-space:nowrap;font-weight:400;color:#1f1f1f!important}.track-custom-note[data-v-e62a6a08]{color:#7d8896;font-size:.88em;line-height:1.45}@media (width<=575.98px){.application-status-panel[data-v-e62a6a08]{padding:.8rem .85rem}.track-custom-menu[data-v-e62a6a08]{overscroll-behavior:contain;max-height:min(62vh,28rem);overflow-y:auto}.track-pick[data-v-e62a6a08]{padding:.85rem .9rem}.track-custom-note[data-v-e62a6a08]{font-size:.82rem;line-height:1.5}}.promise-doc-body--rich[data-v-e62a6a08]{color:#221b1c;text-align:justify;text-justify:inter-ideograph;font-family:SimSun,Songti SC,STSong,serif;font-size:12pt;line-height:26px}.promise-doc-body--rich[data-v-e62a6a08] p{text-indent:2em;margin:0 0 .62rem}.promise-doc-body--rich[data-v-e62a6a08] p:last-child{margin-bottom:0}.promise-doc-body--rich[data-v-e62a6a08] ul,.promise-doc-body--rich[data-v-e62a6a08] ol{margin-bottom:.75rem;padding-left:1.25rem}.promise-doc-body--rich[data-v-e62a6a08] h1,.promise-doc-body--rich[data-v-e62a6a08] h2,.promise-doc-body--rich[data-v-e62a6a08] h3{color:var(--primary-dark,#087db4);text-indent:0;margin:1.2rem 0 .45rem;font-size:1rem;font-weight:700}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1 +1 @@
import{C as e,Et as t,P as n,k as r,q as i,w as a}from"./vue.runtime.esm-bundler-CACvpnko.js";import{t as o}from"./AudienceRegistrationsPane-DhkJO1qV.js";var s=r({__name:`AudienceManageRegistrationsView`,setup(r){let s=n(`audienceManageCompetitionId`);return(n,r)=>t(s)?(i(),e(o,{key:0,"competition-id":t(s)},null,8,[`competition-id`])):a(``,!0)}});export{s as default};
import{C as e,Et as t,P as n,k as r,q as i,w as a}from"./vue.runtime.esm-bundler-CACvpnko.js";import{t as o}from"./AudienceRegistrationsPane-BkxzuJ3T.js";var s=r({__name:`AudienceManageRegistrationsView`,setup(r){let s=n(`audienceManageCompetitionId`);return(n,r)=>t(s)?(i(),e(o,{key:0,"competition-id":t(s)},null,8,[`competition-id`])):a(``,!0)}});export{s as default};

@ -1 +1 @@
import{C as e,Et as t,P as n,k as r,q as i,w as a}from"./vue.runtime.esm-bundler-CACvpnko.js";import{t as o}from"./AudienceSessionsPane-CevhlB4D.js";var s=r({__name:`AudienceManageSessionsView`,setup(r){let s=n(`audienceManageCompetitionId`);return(n,r)=>t(s)?(i(),e(o,{key:0,"competition-id":t(s)},null,8,[`competition-id`])):a(``,!0)}});export{s as default};
import{C as e,Et as t,P as n,k as r,q as i,w as a}from"./vue.runtime.esm-bundler-CACvpnko.js";import{t as o}from"./AudienceSessionsPane-Dxq_W51f.js";var s=r({__name:`AudienceManageSessionsView`,setup(r){let s=n(`audienceManageCompetitionId`);return(n,r)=>t(s)?(i(),e(o,{key:0,"competition-id":t(s)},null,8,[`competition-id`])):a(``,!0)}});export{s as default};

@ -1 +1 @@
import{$t as e,Et as t,O as n,S as r,T as i,_ as a,in as o,k as s,q as c,w as l,x as u}from"./vue.runtime.esm-bundler-CACvpnko.js";import{i as d}from"./portalLocale-vgPGVHT0.js";import{_ as f,m as p,o as m}from"./api-Dpfxb1ca.js";import{c as h,f as g,i as _}from"./index-D5exsJys.js";import{t as v}from"./_plugin-vue_export-helper-CXTkFu_Z.js";import{t as y}from"./AudienceTicketQr-BOKIIgU4.js";var b=h.create({baseURL:`${f()}/api/v1/audience`,headers:{Accept:`application/json`,"Content-Type":`application/json`}});b.interceptors.request.use(e=>{let t=localStorage.getItem(m);return t&&(e.headers.Authorization=`Bearer ${t}`),typeof window<`u`&&new URLSearchParams(window.location.search).get(`lang`)===`en`&&(e.params={...e.params&&typeof e.params==`object`&&!Array.isArray(e.params)?{...e.params}:{},lang:`en`}),e}),b.interceptors.response.use(e=>e,e=>{if(h.isAxiosError(e)&&e.response?.status===401){p();let e=window.location.pathname.match(/^\/c\/([^/]+)\/audience(?!\/login)/);if(e?.[1]){let t=new URLSearchParams(window.location.search).get(`lang`)===`en`?`?lang=en`:``;window.location.assign(`/c/${encodeURIComponent(e[1])}/audience/login${t}`)}}return Promise.reject(e)});function x(e,t){if(h.isAxiosError(e)){let t=e.response?.data;if(t?.errors&&typeof t.errors==`object`){let e=Object.values(t.errors).flat()[0];if(e)return String(e)}if(typeof t?.message==`string`&&t.message.trim())return t.message.trim()}return e instanceof Error?e.message:t}async function S(e){let{data:t}=await b.get(`/me`,{params:e?{competition_slug:e}:void 0});return t}async function C(e){let{data:t}=await b.get(`/sessions`,{params:{competition_slug:e}});return Array.isArray(t.data)?t.data:[]}async function w(e){let{data:t}=await b.get(`/registrations`,{params:{competition_slug:e}});return Array.isArray(t.data)?t.data:[]}async function T(e,t){try{let{data:n}=await b.post(`/registrations`,{competition_slug:e,...t});return n}catch(e){throw Error(x(e,``))}}var E=[`aria-labelledby`],D={class:`modal-dialog modal-dialog-centered modal-dialog-scrollable`},O={class:`modal-content audience-ticket-card`},k={class:`modal-header border-0`},A=[`id`],j=[`aria-label`],M={class:`modal-body text-center pt-0`},N={class:`alert alert-warning audience-qr-save-alert`,role:`status`},P={class:`audience-ticket-lead`},F={class:`ticket-event-badge`},I={class:`mt-3 mb-1`},L={class:`text-secondary small mb-0`},R={class:`mt-3 mb-1`},z={class:`text-secondary small`},B=[`aria-label`],V={class:`ticket-code`},H={key:3,class:`small text-secondary mt-2 mb-3`},U={key:4,class:`small text-secondary mt-2 mb-0`},W=v(s({__name:`AudienceTicketModal`,props:{open:{type:Boolean},mode:{},slug:{},eventBadge:{},registration:{}},emits:[`close`],setup(s,{emit:f}){let p=f,{t:m}=_(),h=g(),v=u(()=>d(h.query));function b(e){return`${e.name} · ${e.phone}`}function x(e){return v.value===`en`&&e.session_name_en?.trim()?e.session_name_en.trim():e.session_name||m(`ticket.sessionFallback`)}return(u,d)=>s.open&&s.registration?(c(),i(a,{key:0},[r(`div`,{class:`modal-backdrop fade show audience-ticket-backdrop`,onClick:d[0]||=e=>p(`close`)}),r(`div`,{class:`modal fade show audience-ticket-dialog`,style:{display:`block`},tabindex:`-1`,"aria-labelledby":s.mode===`success`?`audienceTicketTitle`:`myTicketModalTitle`,"aria-modal":`true`,role:`dialog`},[r(`div`,D,[r(`div`,O,[r(`div`,k,[r(`h5`,{id:s.mode===`success`?`audienceTicketTitle`:`myTicketModalTitle`,class:`modal-title`},o(s.mode===`success`?t(m)(`ticket.successTitle`):t(m)(`ticket.myTicket`)),9,A),r(`button`,{type:`button`,class:`btn-close`,"aria-label":t(m)(`ticket.close`),onClick:d[1]||=e=>p(`close`)},null,8,j)]),r(`div`,M,[r(`div`,N,o(t(m)(`ticket.saveQr`)),1),s.mode===`success`?(c(),i(a,{key:0},[d[3]||=r(`div`,{class:`audience-ticket-success-mark`},`✓`,-1),r(`p`,P,o(t(m)(`ticket.lead`)),1),r(`span`,F,o(s.eventBadge),1),r(`h6`,I,o(x(s.registration)),1),r(`p`,L,o(b(s.registration)),1)],64)):(c(),i(a,{key:1},[r(`span`,{class:e([`my-ticket-status`,s.registration.checked_in_at?`is-checked`:`is-pending`])},o(s.registration.checked_in_at?t(m)(`ticket.checkedIn`):t(m)(`ticket.pending`)),3),r(`h6`,R,o(x(s.registration)),1),r(`p`,z,o(b(s.registration)),1)],64)),s.slug&&s.registration.ticket_code?(c(),i(`div`,{key:2,class:`ticket-qr ticket-qr-canvas`,"aria-label":t(m)(`ticket.qrAria`)},[n(y,{slug:s.slug,"ticket-code":s.registration.ticket_code,size:150},null,8,[`slug`,`ticket-code`])],8,B)):l(``,!0),r(`code`,V,o(s.registration.ticket_code),1),s.mode===`success`?(c(),i(`p`,H,o(t(m)(`ticket.showCode`)),1)):(c(),i(`p`,U,o(t(m)(`ticket.showAtGate`)),1)),s.mode===`success`?(c(),i(`button`,{key:5,class:`btn btn-primary w-100`,type:`button`,onClick:d[2]||=e=>p(`close`)},o(t(m)(`ticket.done`)),1)):l(``,!0)])])])],8,E)],64)):l(``,!0)}}),[[`__scopeId`,`data-v-908dee93`]]);export{T as a,C as i,S as n,w as r,W as t};
import{$t as e,Et as t,O as n,S as r,T as i,_ as a,in as o,k as s,q as c,w as l,x as u}from"./vue.runtime.esm-bundler-CACvpnko.js";import{i as d}from"./portalLocale-vgPGVHT0.js";import{_ as f,m as p,o as m}from"./api-Dpfxb1ca.js";import{c as h,f as g,i as _}from"./index-iRzk6lDR.js";import{t as v}from"./_plugin-vue_export-helper-CXTkFu_Z.js";import{t as y}from"./AudienceTicketQr-BOKIIgU4.js";var b=h.create({baseURL:`${f()}/api/v1/audience`,headers:{Accept:`application/json`,"Content-Type":`application/json`}});b.interceptors.request.use(e=>{let t=localStorage.getItem(m);return t&&(e.headers.Authorization=`Bearer ${t}`),typeof window<`u`&&new URLSearchParams(window.location.search).get(`lang`)===`en`&&(e.params={...e.params&&typeof e.params==`object`&&!Array.isArray(e.params)?{...e.params}:{},lang:`en`}),e}),b.interceptors.response.use(e=>e,e=>{if(h.isAxiosError(e)&&e.response?.status===401){p();let e=window.location.pathname.match(/^\/c\/([^/]+)\/audience(?!\/login)/);if(e?.[1]){let t=new URLSearchParams(window.location.search).get(`lang`)===`en`?`?lang=en`:``;window.location.assign(`/c/${encodeURIComponent(e[1])}/audience/login${t}`)}}return Promise.reject(e)});function x(e,t){if(h.isAxiosError(e)){let t=e.response?.data;if(t?.errors&&typeof t.errors==`object`){let e=Object.values(t.errors).flat()[0];if(e)return String(e)}if(typeof t?.message==`string`&&t.message.trim())return t.message.trim()}return e instanceof Error?e.message:t}async function S(e){let{data:t}=await b.get(`/me`,{params:e?{competition_slug:e}:void 0});return t}async function C(e){let{data:t}=await b.get(`/sessions`,{params:{competition_slug:e}});return Array.isArray(t.data)?t.data:[]}async function w(e){let{data:t}=await b.get(`/registrations`,{params:{competition_slug:e}});return Array.isArray(t.data)?t.data:[]}async function T(e,t){try{let{data:n}=await b.post(`/registrations`,{competition_slug:e,...t});return n}catch(e){throw Error(x(e,``))}}var E=[`aria-labelledby`],D={class:`modal-dialog modal-dialog-centered modal-dialog-scrollable`},O={class:`modal-content audience-ticket-card`},k={class:`modal-header border-0`},A=[`id`],j=[`aria-label`],M={class:`modal-body text-center pt-0`},N={class:`alert alert-warning audience-qr-save-alert`,role:`status`},P={class:`audience-ticket-lead`},F={class:`ticket-event-badge`},I={class:`mt-3 mb-1`},L={class:`text-secondary small mb-0`},R={class:`mt-3 mb-1`},z={class:`text-secondary small`},B=[`aria-label`],V={class:`ticket-code`},H={key:3,class:`small text-secondary mt-2 mb-3`},U={key:4,class:`small text-secondary mt-2 mb-0`},W=v(s({__name:`AudienceTicketModal`,props:{open:{type:Boolean},mode:{},slug:{},eventBadge:{},registration:{}},emits:[`close`],setup(s,{emit:f}){let p=f,{t:m}=_(),h=g(),v=u(()=>d(h.query));function b(e){return`${e.name} · ${e.phone}`}function x(e){return v.value===`en`&&e.session_name_en?.trim()?e.session_name_en.trim():e.session_name||m(`ticket.sessionFallback`)}return(u,d)=>s.open&&s.registration?(c(),i(a,{key:0},[r(`div`,{class:`modal-backdrop fade show audience-ticket-backdrop`,onClick:d[0]||=e=>p(`close`)}),r(`div`,{class:`modal fade show audience-ticket-dialog`,style:{display:`block`},tabindex:`-1`,"aria-labelledby":s.mode===`success`?`audienceTicketTitle`:`myTicketModalTitle`,"aria-modal":`true`,role:`dialog`},[r(`div`,D,[r(`div`,O,[r(`div`,k,[r(`h5`,{id:s.mode===`success`?`audienceTicketTitle`:`myTicketModalTitle`,class:`modal-title`},o(s.mode===`success`?t(m)(`ticket.successTitle`):t(m)(`ticket.myTicket`)),9,A),r(`button`,{type:`button`,class:`btn-close`,"aria-label":t(m)(`ticket.close`),onClick:d[1]||=e=>p(`close`)},null,8,j)]),r(`div`,M,[r(`div`,N,o(t(m)(`ticket.saveQr`)),1),s.mode===`success`?(c(),i(a,{key:0},[d[3]||=r(`div`,{class:`audience-ticket-success-mark`},`✓`,-1),r(`p`,P,o(t(m)(`ticket.lead`)),1),r(`span`,F,o(s.eventBadge),1),r(`h6`,I,o(x(s.registration)),1),r(`p`,L,o(b(s.registration)),1)],64)):(c(),i(a,{key:1},[r(`span`,{class:e([`my-ticket-status`,s.registration.checked_in_at?`is-checked`:`is-pending`])},o(s.registration.checked_in_at?t(m)(`ticket.checkedIn`):t(m)(`ticket.pending`)),3),r(`h6`,R,o(x(s.registration)),1),r(`p`,z,o(b(s.registration)),1)],64)),s.slug&&s.registration.ticket_code?(c(),i(`div`,{key:2,class:`ticket-qr ticket-qr-canvas`,"aria-label":t(m)(`ticket.qrAria`)},[n(y,{slug:s.slug,"ticket-code":s.registration.ticket_code,size:150},null,8,[`slug`,`ticket-code`])],8,B)):l(``,!0),r(`code`,V,o(s.registration.ticket_code),1),s.mode===`success`?(c(),i(`p`,H,o(t(m)(`ticket.showCode`)),1)):(c(),i(`p`,U,o(t(m)(`ticket.showAtGate`)),1)),s.mode===`success`?(c(),i(`button`,{key:5,class:`btn btn-primary w-100`,type:`button`,onClick:d[2]||=e=>p(`close`)},o(t(m)(`ticket.done`)),1)):l(``,!0)])])])],8,E)],64)):l(``,!0)}}),[[`__scopeId`,`data-v-908dee93`]]);export{T as a,C as i,S as n,w as r,W as t};

@ -1 +1 @@
import{Et as e,G as t,O as n,S as r,T as i,W as a,_t as o,in as s,k as c,q as l,x as u}from"./vue.runtime.esm-bundler-CACvpnko.js";import{i as d}from"./portalLocale-vgPGVHT0.js";import{_ as f}from"./api-Dpfxb1ca.js";import{f as p}from"./index-D5exsJys.js";import{a as m,i as h}from"./site-BxiJvB6v.js";/* empty css */import{n as g,t as _}from"./participantTheme-HEHn5JJn.js";import{c as v,l as y,r as b,s as x}from"./competitionBranding-CAjogVRl.js";import{i as S}from"./audienceTicket-ByROqmS7.js";import{t as C}from"./AudienceTicketQr-BOKIIgU4.js";var w={class:`audience-ticket-public-page`},T={class:`audience-ticket-public-card`},E={key:0,class:`audience-ticket-public-qr`},D={class:`audience-ticket-code-suffix`},O={key:1,class:`text-muted`},k={class:`audience-ticket-public-footer`},A=c({__name:`AudienceTicketView`,setup(c){let A=p(),j=u(()=>String(A.params.slug??``).trim()),M=u(()=>String(A.params.ticketCode??``).trim()),N=u(()=>d(A.query)),P=o(x()),F=o(``),I=u(()=>y(P.value,F.value,N.value)),L=u(()=>v(P.value.login.footerCopyright)?P.value.login.footerCopyright:h);async function R(){if(j.value)try{let e=await fetch(`${f()}/api/v1/public/competitions/by-slug/${encodeURIComponent(j.value)}`,{headers:{Accept:`application/json`}});if(!e.ok)return;let t=await e.json(),n=t.data!=null&&typeof t.data==`object`&&!Array.isArray(t.data)?t.data:t;F.value=String(n.name??``),P.value=b(n.branding_json??null,N.value),m(P.value.documentTitle),_(P.value.login.themePrimary)}catch{}}return a(()=>{document.body.classList.add(`prototype-page`,`audience-page`,`audience-ticket-public`),R()}),t(()=>{document.body.classList.remove(`prototype-page`,`audience-page`,`audience-ticket-public`),g()}),(t,a)=>(l(),i(`div`,w,[r(`main`,T,[a[0]||=r(`p`,{class:`audience-ticket-public-kicker`},`电子入场码`,-1),r(`h1`,null,s(I.value),1),a[1]||=r(`p`,{class:`audience-ticket-public-hint`},`请向工作人员出示此码,由工作人员扫码核销。本页不能自助入场。`,-1),a[2]||=r(`div`,{class:`alert alert-warning audience-ticket-public-save`,role:`status`},` 请截图保存报名二维码以便现场扫码后核销入场。 `,-1),j.value&&M.value?(l(),i(`div`,E,[n(C,{slug:j.value,"ticket-code":M.value,size:220},null,8,[`slug`,`ticket-code`]),r(`p`,D,`券码后四位 `+s(e(S)(M.value)),1)])):(l(),i(`p`,O,`入场码无效`))]),r(`p`,k,s(L.value),1)]))}});export{A as default};
import{Et as e,G as t,O as n,S as r,T as i,W as a,_t as o,in as s,k as c,q as l,x as u}from"./vue.runtime.esm-bundler-CACvpnko.js";import{i as d}from"./portalLocale-vgPGVHT0.js";import{_ as f}from"./api-Dpfxb1ca.js";import{f as p}from"./index-iRzk6lDR.js";import{a as m,i as h}from"./site-BxiJvB6v.js";/* empty css */import{n as g,t as _}from"./participantTheme-HEHn5JJn.js";import{c as v,l as y,r as b,s as x}from"./competitionBranding-CAjogVRl.js";import{i as S}from"./audienceTicket-ByROqmS7.js";import{t as C}from"./AudienceTicketQr-BOKIIgU4.js";var w={class:`audience-ticket-public-page`},T={class:`audience-ticket-public-card`},E={key:0,class:`audience-ticket-public-qr`},D={class:`audience-ticket-code-suffix`},O={key:1,class:`text-muted`},k={class:`audience-ticket-public-footer`},A=c({__name:`AudienceTicketView`,setup(c){let A=p(),j=u(()=>String(A.params.slug??``).trim()),M=u(()=>String(A.params.ticketCode??``).trim()),N=u(()=>d(A.query)),P=o(x()),F=o(``),I=u(()=>y(P.value,F.value,N.value)),L=u(()=>v(P.value.login.footerCopyright)?P.value.login.footerCopyright:h);async function R(){if(j.value)try{let e=await fetch(`${f()}/api/v1/public/competitions/by-slug/${encodeURIComponent(j.value)}`,{headers:{Accept:`application/json`}});if(!e.ok)return;let t=await e.json(),n=t.data!=null&&typeof t.data==`object`&&!Array.isArray(t.data)?t.data:t;F.value=String(n.name??``),P.value=b(n.branding_json??null,N.value),m(P.value.documentTitle),_(P.value.login.themePrimary)}catch{}}return a(()=>{document.body.classList.add(`prototype-page`,`audience-page`,`audience-ticket-public`),R()}),t(()=>{document.body.classList.remove(`prototype-page`,`audience-page`,`audience-ticket-public`),g()}),(t,a)=>(l(),i(`div`,w,[r(`main`,T,[a[0]||=r(`p`,{class:`audience-ticket-public-kicker`},`电子入场码`,-1),r(`h1`,null,s(I.value),1),a[1]||=r(`p`,{class:`audience-ticket-public-hint`},`请向工作人员出示此码,由工作人员扫码核销。本页不能自助入场。`,-1),a[2]||=r(`div`,{class:`alert alert-warning audience-ticket-public-save`,role:`status`},` 请截图保存报名二维码以便现场扫码后核销入场。 `,-1),j.value&&M.value?(l(),i(`div`,E,[n(C,{slug:j.value,"ticket-code":M.value,size:220},null,8,[`slug`,`ticket-code`]),r(`p`,D,`券码后四位 `+s(e(S)(M.value)),1)])):(l(),i(`p`,O,`入场码无效`))]),r(`p`,k,s(L.value),1)]))}});export{A as default};

@ -1 +1 @@
import{C as e,D as t,Et as n,O as r,Q as i,S as a,T as o,W as s,Z as c,_t as l,ct as u,in as d,k as f,q as p,st as m,w as h}from"./vue.runtime.esm-bundler-CACvpnko.js";import{h as g}from"./index-D5exsJys.js";import{t as _}from"./_plugin-vue_export-helper-CXTkFu_Z.js";import{o as v}from"./competitions-Cv_Vb4Fy.js";import{t as y}from"./adminCompetition-D_kJwSx5.js";import{t as b}from"./datetimeShanghai-F85iiY-2.js";import{t as x}from"./competitionAdminLabels-D3a4EIIe.js";var S={class:`page-header`},C={key:0,class:`pager`},w={class:`total`},T=_(f({__name:`CompetitionListView`,setup(f){let _=l([]),T=y(),E=l(!1),D=l(1),O=l(1),k=l(0),A=l(15);async function j(){E.value=!0;try{let e=await v({page:D.value,per_page:A.value});_.value=e.data,O.value=e.meta.last_page,k.value=e.meta.total,A.value=e.meta.per_page}catch(e){_.value=[],g.error(e instanceof Error?e.message:`加载失败`)}finally{E.value=!1}}function M(e){e<1||e>O.value||(D.value=e,j())}function N(e){return b(e)}return s(()=>{j()}),(s,l)=>{let f=c(`el-button`),g=c(`RouterLink`),v=c(`el-table-column`),y=c(`el-tag`),b=c(`el-table`),j=c(`el-pagination`),P=c(`el-card`),F=i(`loading`);return p(),o(`div`,null,[a(`div`,S,[l[1]||=a(`h2`,{class:`page-title`},`赛事列表`,-1),r(g,{to:{name:`admin-competition-new`}},{default:m(()=>[r(f,{type:`danger`},{default:m(()=>[...l[0]||=[t(`新建赛事`,-1)]]),_:1})]),_:1})]),r(P,{shadow:`never`},{default:m(()=>[u((p(),e(b,{data:_.value,stripe:``,style:{width:`100%`}},{empty:m(()=>[...l[3]||=[a(`span`,{class:`text-muted`},`暂无数据`,-1)]]),default:m(()=>[r(v,{prop:`name`,label:`名称`,"min-width":`140`,"show-overflow-tooltip":``}),r(v,{prop:`slug`,label:`访问地址`,"min-width":`120`,"show-overflow-tooltip":``}),r(v,{label:`状态`,width:`120`},{default:m(({row:e})=>[t(d(n(x)(e.status)),1)]),_:1}),r(v,{label:`对外可见`,width:`100`},{default:m(({row:e})=>[r(y,{type:e.published?`success`:`info`,size:`small`},{default:m(()=>[t(d(e.published?`是`:`否`),1)]),_:2},1032,[`type`])]),_:1}),r(v,{label:`报名开始`,"min-width":`160`},{default:m(({row:e})=>[t(d(N(e.signup_open_at??null)),1)]),_:1}),r(v,{label:`报名截止`,"min-width":`160`},{default:m(({row:e})=>[t(d(N(e.signup_close_at??null)),1)]),_:1}),r(v,{label:`操作`,width:`140`,fixed:`right`},{default:m(({row:e})=>[r(g,{to:{name:`admin-competition-workspace`},onClick:t=>n(T).selectCompetition(e.id)},{default:m(()=>[r(f,{type:`danger`,link:``},{default:m(()=>[...l[2]||=[t(`进入赛事中心`,-1)]]),_:1})]),_:1},8,[`onClick`])]),_:1})]),_:1},8,[`data`])),[[F,E.value]]),O.value>1?(p(),o(`div`,C,[a(`span`,w,`共 `+d(k.value)+` 条`,1),r(j,{background:``,layout:`prev, pager, next`,"current-page":D.value,"page-size":A.value,total:k.value,onCurrentChange:M},null,8,[`current-page`,`page-size`,`total`])])):h(``,!0)]),_:1})])}}}),[[`__scopeId`,`data-v-0694ed3e`]]);export{T as default};
import{C as e,D as t,Et as n,O as r,Q as i,S as a,T as o,W as s,Z as c,_t as l,ct as u,in as d,k as f,q as p,st as m,w as h}from"./vue.runtime.esm-bundler-CACvpnko.js";import{h as g}from"./index-iRzk6lDR.js";import{t as _}from"./_plugin-vue_export-helper-CXTkFu_Z.js";import{o as v}from"./competitions-CfkwFL0G.js";import{t as y}from"./adminCompetition-ChmsIX7c.js";import{t as b}from"./datetimeShanghai-F85iiY-2.js";import{t as x}from"./competitionAdminLabels-D3a4EIIe.js";var S={class:`page-header`},C={key:0,class:`pager`},w={class:`total`},T=_(f({__name:`CompetitionListView`,setup(f){let _=l([]),T=y(),E=l(!1),D=l(1),O=l(1),k=l(0),A=l(15);async function j(){E.value=!0;try{let e=await v({page:D.value,per_page:A.value});_.value=e.data,O.value=e.meta.last_page,k.value=e.meta.total,A.value=e.meta.per_page}catch(e){_.value=[],g.error(e instanceof Error?e.message:`加载失败`)}finally{E.value=!1}}function M(e){e<1||e>O.value||(D.value=e,j())}function N(e){return b(e)}return s(()=>{j()}),(s,l)=>{let f=c(`el-button`),g=c(`RouterLink`),v=c(`el-table-column`),y=c(`el-tag`),b=c(`el-table`),j=c(`el-pagination`),P=c(`el-card`),F=i(`loading`);return p(),o(`div`,null,[a(`div`,S,[l[1]||=a(`h2`,{class:`page-title`},`赛事列表`,-1),r(g,{to:{name:`admin-competition-new`}},{default:m(()=>[r(f,{type:`danger`},{default:m(()=>[...l[0]||=[t(`新建赛事`,-1)]]),_:1})]),_:1})]),r(P,{shadow:`never`},{default:m(()=>[u((p(),e(b,{data:_.value,stripe:``,style:{width:`100%`}},{empty:m(()=>[...l[3]||=[a(`span`,{class:`text-muted`},`暂无数据`,-1)]]),default:m(()=>[r(v,{prop:`name`,label:`名称`,"min-width":`140`,"show-overflow-tooltip":``}),r(v,{prop:`slug`,label:`访问地址`,"min-width":`120`,"show-overflow-tooltip":``}),r(v,{label:`状态`,width:`120`},{default:m(({row:e})=>[t(d(n(x)(e.status)),1)]),_:1}),r(v,{label:`对外可见`,width:`100`},{default:m(({row:e})=>[r(y,{type:e.published?`success`:`info`,size:`small`},{default:m(()=>[t(d(e.published?`是`:`否`),1)]),_:2},1032,[`type`])]),_:1}),r(v,{label:`报名开始`,"min-width":`160`},{default:m(({row:e})=>[t(d(N(e.signup_open_at??null)),1)]),_:1}),r(v,{label:`报名截止`,"min-width":`160`},{default:m(({row:e})=>[t(d(N(e.signup_close_at??null)),1)]),_:1}),r(v,{label:`操作`,width:`140`,fixed:`right`},{default:m(({row:e})=>[r(g,{to:{name:`admin-competition-workspace`},onClick:t=>n(T).selectCompetition(e.id)},{default:m(()=>[r(f,{type:`danger`,link:``},{default:m(()=>[...l[2]||=[t(`进入赛事中心`,-1)]]),_:1})]),_:1},8,[`onClick`])]),_:1})]),_:1},8,[`data`])),[[F,E.value]]),O.value>1?(p(),o(`div`,C,[a(`span`,w,`共 `+d(k.value)+` 条`,1),r(j,{background:``,layout:`prev, pager, next`,"current-page":D.value,"page-size":A.value,total:k.value,onCurrentChange:M},null,8,[`current-page`,`page-size`,`total`])])):h(``,!0)]),_:1})])}}}),[[`__scopeId`,`data-v-0694ed3e`]]);export{T as default};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1 +1 @@
import{T as e,W as t,_t as n,in as r,k as i,q as a}from"./vue.runtime.esm-bundler-CACvpnko.js";import{n as o,p as s,s as c}from"./api-Dpfxb1ca.js";import{f as l,p as u}from"./index-D5exsJys.js";var d={class:`container py-5 text-center`},f={key:0,class:`text-danger`},p={key:1,class:`text-secondary`},m=i({__name:`ParticipantImpersonateEntryView`,setup(i){let m=l(),h=u(),g=n(``);return t(()=>{let e=String(m.params.slug??``).trim(),t=String(m.query.token??``).trim();if(!e||!t){g.value=`代登参数无效`;return}localStorage.setItem(s,t),localStorage.setItem(c,e),sessionStorage.setItem(o,`1`),h.replace({name:`participant-apply`,params:{slug:e}})}),(t,n)=>(a(),e(`div`,d,[g.value?(a(),e(`p`,f,r(g.value),1)):(a(),e(`p`,p,`正在进入选手端…`))]))}});export{m as default};
import{T as e,W as t,_t as n,in as r,k as i,q as a}from"./vue.runtime.esm-bundler-CACvpnko.js";import{n as o,p as s,s as c}from"./api-Dpfxb1ca.js";import{f as l,p as u}from"./index-iRzk6lDR.js";var d={class:`container py-5 text-center`},f={key:0,class:`text-danger`},p={key:1,class:`text-secondary`},m=i({__name:`ParticipantImpersonateEntryView`,setup(i){let m=l(),h=u(),g=n(``);return t(()=>{let e=String(m.params.slug??``).trim(),t=String(m.query.token??``).trim();if(!e||!t){g.value=`代登参数无效`;return}localStorage.setItem(s,t),localStorage.setItem(c,e),sessionStorage.setItem(o,`1`),h.replace({name:`participant-apply`,params:{slug:e}})}),(t,n)=>(a(),e(`div`,d,[g.value?(a(),e(`p`,f,r(g.value),1)):(a(),e(`p`,p,`正在进入选手端…`))]))}});export{m as default};

@ -1 +1 @@
import{D as e,S as t,T as n,_t as r,ct as i,f as a,in as o,k as s,m as c,q as l,w as u}from"./vue.runtime.esm-bundler-CACvpnko.js";import{p as d}from"./index-D5exsJys.js";/* empty css */var f={class:`min-vh-100 d-flex flex-column bg-light`},p={class:`container py-5 flex-grow-1`},m={class:`mx-auto card shadow-sm`,style:{"max-width":`420px`}},h={class:`card-body p-4`},g={key:0,class:`text-danger small mb-2`},_=s({__name:`ParticipantLandingView`,setup(s){let _=d(),v=r(``),y=r(``);function b(){let e=v.value.trim();if(y.value=``,!e){y.value=`请填写访问地址`;return}_.push({name:`participant-login`,params:{slug:e}})}return(r,s)=>(l(),n(`div`,f,[t(`div`,p,[t(`div`,m,[t(`div`,h,[s[1]||=t(`h1`,{class:`h5 mb-2`},`赛事报名入口`,-1),s[2]||=t(`p`,{class:`text-muted small mb-3`},[e(` 请输入主办方提供的`),t(`strong`,null,`访问地址`),e(`(与后台赛事「访问地址」一致,可为中文);也可直接使用完整链接 `),t(`code`,{class:`small`},`/c/您的访问地址/login`),e(`。 `)],-1),s[3]||=t(`label`,{class:`form-label small`},`访问地址(slug)`,-1),i(t(`input`,{"onUpdate:modelValue":s[0]||=e=>v.value=e,type:`text`,class:`form-control mb-2`,autocomplete:`off`,placeholder:`例如:新消费大赛-2026`,onKeyup:c(b,[`enter`])},null,544),[[a,v.value,void 0,{trim:!0}]]),y.value?(l(),n(`p`,g,o(y.value),1)):u(``,!0),t(`button`,{type:`button`,class:`btn btn-danger w-100`,onClick:b},`前往登录`)])])])]))}});export{_ as default};
import{D as e,S as t,T as n,_t as r,ct as i,f as a,in as o,k as s,m as c,q as l,w as u}from"./vue.runtime.esm-bundler-CACvpnko.js";import{p as d}from"./index-iRzk6lDR.js";/* empty css */var f={class:`min-vh-100 d-flex flex-column bg-light`},p={class:`container py-5 flex-grow-1`},m={class:`mx-auto card shadow-sm`,style:{"max-width":`420px`}},h={class:`card-body p-4`},g={key:0,class:`text-danger small mb-2`},_=s({__name:`ParticipantLandingView`,setup(s){let _=d(),v=r(``),y=r(``);function b(){let e=v.value.trim();if(y.value=``,!e){y.value=`请填写访问地址`;return}_.push({name:`participant-login`,params:{slug:e}})}return(r,s)=>(l(),n(`div`,f,[t(`div`,p,[t(`div`,m,[t(`div`,h,[s[1]||=t(`h1`,{class:`h5 mb-2`},`赛事报名入口`,-1),s[2]||=t(`p`,{class:`text-muted small mb-3`},[e(` 请输入主办方提供的`),t(`strong`,null,`访问地址`),e(`(与后台赛事「访问地址」一致,可为中文);也可直接使用完整链接 `),t(`code`,{class:`small`},`/c/您的访问地址/login`),e(`。 `)],-1),s[3]||=t(`label`,{class:`form-label small`},`访问地址(slug)`,-1),i(t(`input`,{"onUpdate:modelValue":s[0]||=e=>v.value=e,type:`text`,class:`form-control mb-2`,autocomplete:`off`,placeholder:`例如:新消费大赛-2026`,onKeyup:c(b,[`enter`])},null,544),[[a,v.value,void 0,{trim:!0}]]),y.value?(l(),n(`p`,g,o(y.value),1)):u(``,!0),t(`button`,{type:`button`,class:`btn btn-danger w-100`,onClick:b},`前往登录`)])])])]))}});export{_ as default};

@ -1 +1 @@
import{C as e,D as t,Et as n,O as r,S as i,T as a,Z as o,in as s,k as c,q as l,st as u,x as d}from"./vue.runtime.esm-bundler-CACvpnko.js";import{C as f,h as p}from"./index-D5exsJys.js";import{t as m}from"./_plugin-vue_export-helper-CXTkFu_Z.js";import{t as h}from"./adminCompetition-D_kJwSx5.js";var g={class:`url`},_={class:`url`},v=m(c({__name:`ReviewPortalView`,setup(c){let{selectedCompetitionId:m,selectedCompetition:v}=f(h()),y=d(()=>(void 0)?.trim()?(void 0).trim().replace(/\/$/,``):window.location.origin),b=d(()=>`/admin/`.endsWith(`/`)?`/admin/`.slice(0,-1):`/admin/`),x=d(()=>{let e=v.value?.slug;return e?`${b.value}/c/${encodeURIComponent(e)}/review`:``}),S=d(()=>`${y.value}${x.value}`);async function C(e){try{await navigator.clipboard.writeText(e),p.success(`已复制`)}catch{p.error(`复制失败,请手动选择文本`)}}return(c,d)=>{let f=o(`el-alert`),p=o(`el-descriptions-item`),h=o(`el-button`),y=o(`el-descriptions`),b=o(`el-card`);return l(),a(`div`,null,[d[5]||=i(`h2`,{class:`page-title`},`评审端入口说明`,-1),d[6]||=i(`p`,{class:`lead`},[t(` 评审员`),i(`strong`,null,`不使用本管理后台`),t(`登录;请在赛事前台域名下访问评审工作台(见《需求规格说明书》FR-R-03、FR-V 系列)。以下链接按当前「赛事切换器」中选中的场次生成。 `)],-1),n(m)?(l(),e(y,{key:1,border:``,column:1,title:`本场评审访问地址`},{default:u(()=>[r(p,{label:`赛事名称`},{default:u(()=>[t(s(n(v)?.name),1)]),_:1}),r(p,{label:`slug`},{default:u(()=>[t(s(n(v)?.slug),1)]),_:1}),r(p,{label:`建议完整 URL`},{default:u(()=>[i(`code`,g,s(S.value),1),r(h,{type:`primary`,link:``,onClick:d[0]||=e=>C(S.value)},{default:u(()=>[...d[2]||=[t(`复制`,-1)]]),_:1})]),_:1}),r(p,{label:`同源相对路径`},{default:u(()=>[i(`code`,_,s(x.value),1),r(h,{type:`primary`,link:``,onClick:d[1]||=e=>C(x.value)},{default:u(()=>[...d[3]||=[t(`复制`,-1)]]),_:1})]),_:1})]),_:1})):(l(),e(f,{key:0,type:`warning`,"show-icon":``,closable:!1,title:`请先在顶栏选择一个赛事。`,style:{"margin-bottom":`16px`}})),r(b,{shadow:`never`,class:`hints`,header:`接入说明`},{default:u(()=>[...d[4]||=[i(`ul`,{class:`bullet`},[i(`li`,null,[t(` 若评审端与选手端部署在同一前端工程,路径一般为 `),i(`code`,null,`/c/{slug}/review`),t(`;品牌化文案读取当前赛事 `),i(`code`,null,`branding.review`),t(`。 `)]),i(`li`,null,[t(` 若域名与后台不同,可在环境变量 `),i(`code`,null,`VITE_PARTICIPANT_PUBLIC_ORIGIN`),t(` 中配置选手端/评审端的公开站点域名,便于后台展示可复制的完整 URL。 `)]),i(`li`,null,[t(`评审列表数据须按后台配置的 `),i(`code`,null,`reviewer_scopes`),t(`(赛事 × track_code)由后端过滤。`)])],-1)]]),_:1})])}}}),[[`__scopeId`,`data-v-0e77d9b5`]]);export{v as default};
import{C as e,D as t,Et as n,O as r,S as i,T as a,Z as o,in as s,k as c,q as l,st as u,x as d}from"./vue.runtime.esm-bundler-CACvpnko.js";import{C as f,h as p}from"./index-iRzk6lDR.js";import{t as m}from"./_plugin-vue_export-helper-CXTkFu_Z.js";import{t as h}from"./adminCompetition-ChmsIX7c.js";var g={class:`url`},_={class:`url`},v=m(c({__name:`ReviewPortalView`,setup(c){let{selectedCompetitionId:m,selectedCompetition:v}=f(h()),y=d(()=>(void 0)?.trim()?(void 0).trim().replace(/\/$/,``):window.location.origin),b=d(()=>`/admin/`.endsWith(`/`)?`/admin/`.slice(0,-1):`/admin/`),x=d(()=>{let e=v.value?.slug;return e?`${b.value}/c/${encodeURIComponent(e)}/review`:``}),S=d(()=>`${y.value}${x.value}`);async function C(e){try{await navigator.clipboard.writeText(e),p.success(`已复制`)}catch{p.error(`复制失败,请手动选择文本`)}}return(c,d)=>{let f=o(`el-alert`),p=o(`el-descriptions-item`),h=o(`el-button`),y=o(`el-descriptions`),b=o(`el-card`);return l(),a(`div`,null,[d[5]||=i(`h2`,{class:`page-title`},`评审端入口说明`,-1),d[6]||=i(`p`,{class:`lead`},[t(` 评审员`),i(`strong`,null,`不使用本管理后台`),t(`登录;请在赛事前台域名下访问评审工作台(见《需求规格说明书》FR-R-03、FR-V 系列)。以下链接按当前「赛事切换器」中选中的场次生成。 `)],-1),n(m)?(l(),e(y,{key:1,border:``,column:1,title:`本场评审访问地址`},{default:u(()=>[r(p,{label:`赛事名称`},{default:u(()=>[t(s(n(v)?.name),1)]),_:1}),r(p,{label:`slug`},{default:u(()=>[t(s(n(v)?.slug),1)]),_:1}),r(p,{label:`建议完整 URL`},{default:u(()=>[i(`code`,g,s(S.value),1),r(h,{type:`primary`,link:``,onClick:d[0]||=e=>C(S.value)},{default:u(()=>[...d[2]||=[t(`复制`,-1)]]),_:1})]),_:1}),r(p,{label:`同源相对路径`},{default:u(()=>[i(`code`,_,s(x.value),1),r(h,{type:`primary`,link:``,onClick:d[1]||=e=>C(x.value)},{default:u(()=>[...d[3]||=[t(`复制`,-1)]]),_:1})]),_:1})]),_:1})):(l(),e(f,{key:0,type:`warning`,"show-icon":``,closable:!1,title:`请先在顶栏选择一个赛事。`,style:{"margin-bottom":`16px`}})),r(b,{shadow:`never`,class:`hints`,header:`接入说明`},{default:u(()=>[...d[4]||=[i(`ul`,{class:`bullet`},[i(`li`,null,[t(` 若评审端与选手端部署在同一前端工程,路径一般为 `),i(`code`,null,`/c/{slug}/review`),t(`;品牌化文案读取当前赛事 `),i(`code`,null,`branding.review`),t(`。 `)]),i(`li`,null,[t(` 若域名与后台不同,可在环境变量 `),i(`code`,null,`VITE_PARTICIPANT_PUBLIC_ORIGIN`),t(` 中配置选手端/评审端的公开站点域名,便于后台展示可复制的完整 URL。 `)]),i(`li`,null,[t(`评审列表数据须按后台配置的 `),i(`code`,null,`reviewer_scopes`),t(`(赛事 × track_code)由后端过滤。`)])],-1)]]),_:1})])}}}),[[`__scopeId`,`data-v-0e77d9b5`]]);export{v as default};

@ -1,2 +0,0 @@
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};

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

@ -1 +1 @@
import{_t as e,x as t}from"./vue.runtime.esm-bundler-CACvpnko.js";import{t as n}from"./api-Dpfxb1ca.js";import{S as r}from"./index-D5exsJys.js";function i(){let e=localStorage.getItem(n);if(!e)return null;let t=Number(e);return Number.isFinite(t)&&t>0?t:null}var a=r(`adminCompetitionContext`,()=>{let r=e([]),a=e(i()),o=t(()=>r.value.find(e=>e.id===a.value)??null);function s(e){r.value=e,a.value&&!e.some(e=>e.id===a.value)&&(a.value=e[0]?.id??null,l()),!a.value&&e[0]&&(a.value=e[0].id,l())}function c(e){a.value=e,l()}function l(){let e=a.value;e?localStorage.setItem(n,String(e)):localStorage.removeItem(n)}return{competitions:r,selectedCompetitionId:a,selectedCompetition:o,setCompetitionList:s,selectCompetition:c}});export{a as t};
import{_t as e,x as t}from"./vue.runtime.esm-bundler-CACvpnko.js";import{t as n}from"./api-Dpfxb1ca.js";import{S as r}from"./index-iRzk6lDR.js";function i(){let e=localStorage.getItem(n);if(!e)return null;let t=Number(e);return Number.isFinite(t)&&t>0?t:null}var a=r(`adminCompetitionContext`,()=>{let r=e([]),a=e(i()),o=t(()=>r.value.find(e=>e.id===a.value)??null);function s(e){r.value=e,a.value&&!e.some(e=>e.id===a.value)&&(a.value=e[0]?.id??null,l()),!a.value&&e[0]&&(a.value=e[0].id,l())}function c(e){a.value=e,l()}function l(){let e=a.value;e?localStorage.setItem(n,String(e)):localStorage.removeItem(n)}return{competitions:r,selectedCompetitionId:a,selectedCompetition:o,setCompetitionList:s,selectCompetition:c}});export{a as t};

@ -1 +1 @@
import{c as e,s as t}from"./index-D5exsJys.js";import{r as n,t as r}from"./downloadFeedback-HV11t-9m.js";function i(e){if(!e||typeof e!=`object`)throw Error(`列表响应格式无效`);let t=e;if(Array.isArray(t.data)&&typeof t.current_page==`number`){let e=t.data;return{data:e,meta:{current_page:t.current_page,last_page:typeof t.last_page==`number`?t.last_page:1,per_page:typeof t.per_page==`number`?t.per_page:e.length||15,total:typeof t.total==`number`?t.total:e.length},schema_list_fields:Array.isArray(t.schema_list_fields)?t.schema_list_fields:void 0,schema_filter_fields:Array.isArray(t.schema_filter_fields)?t.schema_filter_fields:void 0}}throw Error(`列表响应格式无效`)}async function a(e,n){let{data:r}=await t.get(`/competitions/${e}/applications`,{params:n});return i(r)}async function o(e,n){let{data:r}=await t.get(`/competitions/${e}/applications/${n}`);if(!r||typeof r!=`object`)throw Error(`报名详情无效`);return r}async function s(e,n,r){let{data:i}=await t.patch(`/competitions/${e}/applications/${n}/review-eligible`,{review_eligible:r});return i}async function c(n,r){try{let{data:e}=await t.post(`/competitions/${n}/applications/${r}/impersonate`);if(!e||typeof e!=`object`)throw Error(`代登响应无效`);let i=e;if(typeof i.token!=`string`||!i.token.trim())throw Error(`代登 Token 无效`);if(typeof i.competition_slug!=`string`||!i.competition_slug.trim())throw Error(`赛事标识无效`);return{token:i.token,competition_slug:i.competition_slug,expires_in:typeof i.expires_in==`number`?i.expires_in:1800,participant:i.participant&&typeof i.participant==`object`?i.participant:void 0}}catch(t){if(e.isAxiosError(t)){let e=t.response?.data;if(e&&typeof e==`object`){let t=e.message;if(typeof t==`string`&&t.trim())throw Error(t.trim())}}throw t instanceof Error?t:Error(`进入选手端失败`)}}async function l(e,i,a,o,s){let c=o?.trim()||`附件`,l=r(c,s?.size);if(l)try{let r=await t.get(`/competitions/${e}/applications/${i}/files/${a}/download`,{responseType:`blob`,timeout:0});l.setText(`正在保存「${c}」…`),u(r.data,c),n()}catch(e){throw await f(e,`下载附件失败`)}finally{l.close()}}function u(e,t){let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,document.body.appendChild(r),r.click(),r.remove(),URL.revokeObjectURL(n)}function d(e,t){if(!e)return t;let n=/filename\*=UTF-8''([^;]+)/i.exec(e);if(n?.[1])return decodeURIComponent(n[1]);let r=/filename="?([^";]+)"?/i.exec(e);return r?.[1]?r[1]:t}async function f(t,n){if(e.isAxiosError(t)){let e=t.response?.data;if(e instanceof Blob){let t=await e.text();try{let e=JSON.parse(t);return Error(e.errors?.export?.[0]||e.errors?.application_ids?.[0]||e.errors?.part?.[0]||e.errors?.file?.[0]||e.message||n)}catch{}}if(e&&typeof e==`object`){let t=e;return Error(t.errors?.export?.[0]||t.errors?.application_ids?.[0]||t.errors?.part?.[0]||t.errors?.file?.[0]||t.message||n)}}return t instanceof Error?t:Error(n)}async function p(e){return f(e,`导出失败`)}function m(e){return new Promise(t=>{window.setTimeout(t,e)})}function h(e){let{mode:t,application_ids:n,part:r,...i}=e,a={mode:t,...i};return n?.length&&(a.application_ids=n),r!=null&&(a.part=r),a}async function g(e,n){try{let{data:r}=await t.get(`/competitions/${e}/applications/export/meta`,{params:h(n)});if(!r||typeof r!=`object`)throw Error(`导出信息无效`);return r}catch(e){throw await p(e)}}async function _(e,n,r){let i;try{i=await t.get(`/competitions/${e}/applications/export`,{params:h({...n,part:r}),responseType:`blob`,timeout:0})}catch(e){throw await p(e)}let a=n.mode===`xlsx`?`报名信息.xlsx`:`报名信息导出_第${r}部分.zip`,o=d(i.headers[`content-disposition`],a);u(i.data,o)}async function v(e,t,n){let r=await g(e,t);if(t.mode===`xlsx`)return n?.(1,1),await _(e,t,1),r;for(let i=1;i<=r.part_count;i+=1)n?.(i,r.part_count),await _(e,t,i),i<r.part_count&&await m(500);return r}export{c as a,g as i,v as n,a as o,o as r,s,l as t};
import{c as e,s as t}from"./index-iRzk6lDR.js";import{r as n,t as r}from"./downloadFeedback-TMasTLon.js";function i(e){if(!e||typeof e!=`object`)throw Error(`列表响应格式无效`);let t=e;if(Array.isArray(t.data)&&typeof t.current_page==`number`){let e=t.data;return{data:e,meta:{current_page:t.current_page,last_page:typeof t.last_page==`number`?t.last_page:1,per_page:typeof t.per_page==`number`?t.per_page:e.length||15,total:typeof t.total==`number`?t.total:e.length},schema_list_fields:Array.isArray(t.schema_list_fields)?t.schema_list_fields:void 0,schema_filter_fields:Array.isArray(t.schema_filter_fields)?t.schema_filter_fields:void 0}}throw Error(`列表响应格式无效`)}async function a(e,n){let{data:r}=await t.get(`/competitions/${e}/applications`,{params:n});return i(r)}async function o(e,n){let{data:r}=await t.get(`/competitions/${e}/applications/${n}`);if(!r||typeof r!=`object`)throw Error(`报名详情无效`);return r}async function s(e,n,r){let{data:i}=await t.patch(`/competitions/${e}/applications/${n}/review-eligible`,{review_eligible:r});return i}async function c(n,r){try{let{data:e}=await t.post(`/competitions/${n}/applications/${r}/impersonate`);if(!e||typeof e!=`object`)throw Error(`代登响应无效`);let i=e;if(typeof i.token!=`string`||!i.token.trim())throw Error(`代登 Token 无效`);if(typeof i.competition_slug!=`string`||!i.competition_slug.trim())throw Error(`赛事标识无效`);return{token:i.token,competition_slug:i.competition_slug,expires_in:typeof i.expires_in==`number`?i.expires_in:1800,participant:i.participant&&typeof i.participant==`object`?i.participant:void 0}}catch(t){if(e.isAxiosError(t)){let e=t.response?.data;if(e&&typeof e==`object`){let t=e.message;if(typeof t==`string`&&t.trim())throw Error(t.trim())}}throw t instanceof Error?t:Error(`进入选手端失败`)}}async function l(e,i,a,o,s){let c=o?.trim()||`附件`,l=r(c,s?.size);if(l)try{let r=await t.get(`/competitions/${e}/applications/${i}/files/${a}/download`,{responseType:`blob`,timeout:0});l.setText(`正在保存「${c}」…`),u(r.data,c),n()}catch(e){throw await f(e,`下载附件失败`)}finally{l.close()}}function u(e,t){let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,document.body.appendChild(r),r.click(),r.remove(),URL.revokeObjectURL(n)}function d(e,t){if(!e)return t;let n=/filename\*=UTF-8''([^;]+)/i.exec(e);if(n?.[1])return decodeURIComponent(n[1]);let r=/filename="?([^";]+)"?/i.exec(e);return r?.[1]?r[1]:t}async function f(t,n){if(e.isAxiosError(t)){let e=t.response?.data;if(e instanceof Blob){let t=await e.text();try{let e=JSON.parse(t);return Error(e.errors?.export?.[0]||e.errors?.application_ids?.[0]||e.errors?.part?.[0]||e.errors?.file?.[0]||e.message||n)}catch{}}if(e&&typeof e==`object`){let t=e;return Error(t.errors?.export?.[0]||t.errors?.application_ids?.[0]||t.errors?.part?.[0]||t.errors?.file?.[0]||t.message||n)}}return t instanceof Error?t:Error(n)}async function p(e){return f(e,`导出失败`)}function m(e){return new Promise(t=>{window.setTimeout(t,e)})}function h(e){let{mode:t,application_ids:n,part:r,...i}=e,a={mode:t,...i};return n?.length&&(a.application_ids=n),r!=null&&(a.part=r),a}async function g(e,n){try{let{data:r}=await t.get(`/competitions/${e}/applications/export/meta`,{params:h(n)});if(!r||typeof r!=`object`)throw Error(`导出信息无效`);return r}catch(e){throw await p(e)}}async function _(e,n,r){let i;try{i=await t.get(`/competitions/${e}/applications/export`,{params:h({...n,part:r}),responseType:`blob`,timeout:0})}catch(e){throw await p(e)}let a=n.mode===`xlsx`?`报名信息.xlsx`:`报名信息导出_第${r}部分.zip`,o=d(i.headers[`content-disposition`],a);u(i.data,o)}async function v(e,t,n){let r=await g(e,t);if(t.mode===`xlsx`)return n?.(1,1),await _(e,t,1),r;for(let i=1;i<=r.part_count;i+=1)n?.(i,r.part_count),await _(e,t,i),i<r.part_count&&await m(500);return r}export{c as a,g as i,v as n,a as o,o as r,s,l as t};

@ -1 +1 @@
import{c as e,s as t}from"./index-D5exsJys.js";function n(t,n){if(e.isAxiosError(t)){let e=t.response?.data;if(e?.errors&&typeof e.errors==`object`){let t=Object.values(e.errors).flat()[0];if(t)throw Error(String(t))}if(typeof e?.message==`string`&&e.message.trim())throw Error(e.message.trim())}throw t instanceof Error?t:Error(n)}function r(e){let t=e?.data??e;if(!Array.isArray(t))throw Error(`列表响应无效`);return t}function i(e,t){let n=e?.data??e;if(!n||typeof n!=`object`)throw Error(t);return n}function a(e){if(!e||typeof e!=`object`)throw Error(`列表响应格式无效`);let t=e;if(Array.isArray(t.data)&&typeof t.current_page==`number`){let e=t.data;return{data:e,meta:{current_page:t.current_page,last_page:typeof t.last_page==`number`?t.last_page:1,per_page:typeof t.per_page==`number`?t.per_page:e.length||15,total:typeof t.total==`number`?t.total:e.length},schema_list_fields:Array.isArray(t.schema_list_fields)?t.schema_list_fields:void 0,schema_filter_fields:Array.isArray(t.schema_filter_fields)?t.schema_filter_fields:void 0}}throw Error(`列表响应格式无效`)}function o(e,t){if(!e)return t;let n=/filename\*=UTF-8''([^;]+)/i.exec(e);if(n?.[1])return decodeURIComponent(n[1]);let r=/filename="?([^";]+)"?/i.exec(e);return r?.[1]?r[1]:t}function s(e,t){let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,document.body.appendChild(r),r.click(),r.remove(),URL.revokeObjectURL(n)}async function c(e){try{let{data:n}=await t.get(`/competitions/${e}/audience-sessions`);return r(n)}catch(e){n(e,`加载观众场次失败`)}}async function l(e,r){try{let{data:n}=await t.post(`/competitions/${e}/audience-sessions`,r);return i(n,`创建场次无效`)}catch(e){n(e,`创建场次失败`)}}async function u(e,r,a){try{let{data:n}=await t.patch(`/competitions/${e}/audience-sessions/${r}`,a);return i(n,`更新场次无效`)}catch(e){n(e,`更新场次失败`)}}async function d(e,t,n){return u(e,t,n)}async function f(r,i){try{await t.delete(`/competitions/${r}/audience-sessions/${i}`)}catch(a){e.isAxiosError(a)&&a.response?.status===422&&n(a,`删除失败`);try{await t.post(`/competitions/${r}/audience-sessions/${i}/delete`)}catch(e){n(e,`删除失败`)}}}async function p(e,r){try{let{data:n}=await t.get(`/competitions/${e}/audience-registrations`,{params:r});return a(n)}catch(e){n(e,`加载观众报名失败`)}}async function m(e,n){let r=await t.get(`/competitions/${e}/audience-registrations/export`,{params:n,responseType:`blob`});if(r.data.type===`application/json`){let e=await r.data.text();try{let t=JSON.parse(e);throw Error(t.message||`导出失败`)}catch(e){throw e instanceof Error&&e.message!==`导出失败`?e:Error(`导出失败`)}}let i=o(r.headers[`content-disposition`],`观众报名.xlsx`);s(r.data,i)}async function h(e,r){try{let{data:n}=await t.get(`/competitions/${e}/audience-checkin-stats`,{params:r?{audience_session_id:r}:void 0});return n}catch(e){n(e,`加载到场统计失败`)}}async function g(e,r){try{let{data:n}=await t.post(`/competitions/${e}/audience-checkin`,r);return n}catch(e){n(e,`核销失败`)}}async function _(e,r){try{let{data:n}=await t.post(`/competitions/${e}/audience-registrations/${r}/checkin`);return n}catch(e){n(e,`核销失败`)}}export{m as a,c,f as i,u as l,_ as n,h as o,l as r,p as s,g as t,d as u};
import{c as e,s as t}from"./index-iRzk6lDR.js";function n(t,n){if(e.isAxiosError(t)){let e=t.response?.data;if(e?.errors&&typeof e.errors==`object`){let t=Object.values(e.errors).flat()[0];if(t)throw Error(String(t))}if(typeof e?.message==`string`&&e.message.trim())throw Error(e.message.trim())}throw t instanceof Error?t:Error(n)}function r(e){let t=e?.data??e;if(!Array.isArray(t))throw Error(`列表响应无效`);return t}function i(e,t){let n=e?.data??e;if(!n||typeof n!=`object`)throw Error(t);return n}function a(e){if(!e||typeof e!=`object`)throw Error(`列表响应格式无效`);let t=e;if(Array.isArray(t.data)&&typeof t.current_page==`number`){let e=t.data;return{data:e,meta:{current_page:t.current_page,last_page:typeof t.last_page==`number`?t.last_page:1,per_page:typeof t.per_page==`number`?t.per_page:e.length||15,total:typeof t.total==`number`?t.total:e.length},schema_list_fields:Array.isArray(t.schema_list_fields)?t.schema_list_fields:void 0,schema_filter_fields:Array.isArray(t.schema_filter_fields)?t.schema_filter_fields:void 0}}throw Error(`列表响应格式无效`)}function o(e,t){if(!e)return t;let n=/filename\*=UTF-8''([^;]+)/i.exec(e);if(n?.[1])return decodeURIComponent(n[1]);let r=/filename="?([^";]+)"?/i.exec(e);return r?.[1]?r[1]:t}function s(e,t){let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,document.body.appendChild(r),r.click(),r.remove(),URL.revokeObjectURL(n)}async function c(e){try{let{data:n}=await t.get(`/competitions/${e}/audience-sessions`);return r(n)}catch(e){n(e,`加载观众场次失败`)}}async function l(e,r){try{let{data:n}=await t.post(`/competitions/${e}/audience-sessions`,r);return i(n,`创建场次无效`)}catch(e){n(e,`创建场次失败`)}}async function u(e,r,a){try{let{data:n}=await t.patch(`/competitions/${e}/audience-sessions/${r}`,a);return i(n,`更新场次无效`)}catch(e){n(e,`更新场次失败`)}}async function d(e,t,n){return u(e,t,n)}async function f(r,i){try{await t.delete(`/competitions/${r}/audience-sessions/${i}`)}catch(a){e.isAxiosError(a)&&a.response?.status===422&&n(a,`删除失败`);try{await t.post(`/competitions/${r}/audience-sessions/${i}/delete`)}catch(e){n(e,`删除失败`)}}}async function p(e,r){try{let{data:n}=await t.get(`/competitions/${e}/audience-registrations`,{params:r});return a(n)}catch(e){n(e,`加载观众报名失败`)}}async function m(e,n){let r=await t.get(`/competitions/${e}/audience-registrations/export`,{params:n,responseType:`blob`});if(r.data.type===`application/json`){let e=await r.data.text();try{let t=JSON.parse(e);throw Error(t.message||`导出失败`)}catch(e){throw e instanceof Error&&e.message!==`导出失败`?e:Error(`导出失败`)}}let i=o(r.headers[`content-disposition`],`观众报名.xlsx`);s(r.data,i)}async function h(e,r){try{let{data:n}=await t.get(`/competitions/${e}/audience-checkin-stats`,{params:r?{audience_session_id:r}:void 0});return n}catch(e){n(e,`加载到场统计失败`)}}async function g(e,r){try{let{data:n}=await t.post(`/competitions/${e}/audience-checkin`,r);return n}catch(e){n(e,`核销失败`)}}async function _(e,r){try{let{data:n}=await t.post(`/competitions/${e}/audience-registrations/${r}/checkin`);return n}catch(e){n(e,`核销失败`)}}export{m as a,c,f as i,u as l,_ as n,h as o,l as r,p as s,g as t,d as u};

@ -1,2 +1,2 @@
import{_ as e}from"./api-Dpfxb1ca.js";import{c as t,s as n}from"./index-D5exsJys.js";function r(e,n){if(t.isAxiosError(e)){let t=e.response?.data,r=t&&typeof t==`object`?t:{};return(typeof r.message==`string`?r.message:``)||(r.errors&&typeof r.errors==`object`?Object.values(r.errors).flat().join(`
import{_ as e}from"./api-Dpfxb1ca.js";import{c as t,s as n}from"./index-iRzk6lDR.js";function r(e,n){if(t.isAxiosError(e)){let t=e.response?.data,r=t&&typeof t==`object`?t:{};return(typeof r.message==`string`?r.message:``)||(r.errors&&typeof r.errors==`object`?Object.values(r.errors).flat().join(`
`):``)||e.message||n}return e instanceof Error?e.message:n}async function i(e){try{let{data:t}=await n.post(`/auth/login`,e);return o(t,`platform`)}catch(e){throw Error(r(e,`登录失败`))}}async function a(n){try{let{data:r}=await t.post(`${e()}/api/v1/manage/auth/login`,n,{headers:{Accept:`application/json`,"Content-Type":`application/json`}});return o(r)}catch(e){throw Error(r(e,`登录失败`))}}function o(e,t){if(e&&typeof e==`object`){let n=e,r=n.data,i=(typeof n.token==`string`?n.token:void 0)??(typeof n.access_token==`string`?n.access_token:void 0)??(r&&typeof r.token==`string`?r.token:void 0);if(typeof i==`string`){let e=n.user??n.admin??r?.user,a=n.kind??r?.kind??t,o=n.competition??r?.competition;return{token:i,kind:a===`competition`?`competition`:`platform`,user:e,competition:o&&typeof o==`object`?o:void 0}}}throw Error(`登录响应无效`)}async function s(e){try{await n.patch(`/auth/password`,e)}catch(e){throw Error(r(e,`修改密码失败`))}}async function c(n){try{let r=localStorage.getItem(`cxxfds_admin_token`)??``;await t.patch(`${e()}/api/v1/manage/auth/password`,n,{headers:{Accept:`application/json`,"Content-Type":`application/json`,...r?{Authorization:`Bearer ${r}`}:{}}})}catch(e){throw Error(r(e,`修改密码失败`))}}export{a as i,s as n,c as r,i as t};

@ -1 +1 @@
import{c as e,s as t}from"./index-D5exsJys.js";function n(t,n){if(e.isAxiosError(t)){let e=t.response?.data;if(e?.errors&&typeof e.errors==`object`){let t=Object.values(e.errors).flat()[0];if(t)throw Error(String(t))}if(typeof e?.message==`string`&&e.message.trim())throw Error(e.message.trim())}throw t instanceof Error?t:Error(n)}function r(e){if(!e||typeof e!=`object`)throw Error(`列表响应格式无效`);let t=e;if(Array.isArray(t.data)&&typeof t.current_page==`number`){let e=t.data;return{data:e,meta:{current_page:t.current_page,last_page:typeof t.last_page==`number`?t.last_page:1,per_page:typeof t.per_page==`number`?t.per_page:e.length||15,total:typeof t.total==`number`?t.total:e.length}}}throw Error(`列表响应格式无效`)}async function i(e,i){try{let{data:n}=await t.get(`/competitions/${e}/admins`,{params:i});return r(n)}catch(e){n(e,`加载赛事管理员失败`)}}async function a(e,r){try{let{data:n}=await t.post(`/competitions/${e}/admins`,r);return n}catch(e){n(e,`创建赛事管理员失败`)}}async function o(e,r,i){try{let{data:n}=await t.patch(`/competitions/${e}/admins/${r}`,i);return n}catch(e){n(e,`更新赛事管理员失败`)}}async function s(e,r){try{await t.delete(`/competitions/${e}/admins/${r}`)}catch{try{await t.post(`/competitions/${e}/admins/${r}/delete`)}catch(e){n(e,`删除失败`)}}}export{o as i,s as n,i as r,a as t};
import{c as e,s as t}from"./index-iRzk6lDR.js";function n(t,n){if(e.isAxiosError(t)){let e=t.response?.data;if(e?.errors&&typeof e.errors==`object`){let t=Object.values(e.errors).flat()[0];if(t)throw Error(String(t))}if(typeof e?.message==`string`&&e.message.trim())throw Error(e.message.trim())}throw t instanceof Error?t:Error(n)}function r(e){if(!e||typeof e!=`object`)throw Error(`列表响应格式无效`);let t=e;if(Array.isArray(t.data)&&typeof t.current_page==`number`){let e=t.data;return{data:e,meta:{current_page:t.current_page,last_page:typeof t.last_page==`number`?t.last_page:1,per_page:typeof t.per_page==`number`?t.per_page:e.length||15,total:typeof t.total==`number`?t.total:e.length}}}throw Error(`列表响应格式无效`)}async function i(e,i){try{let{data:n}=await t.get(`/competitions/${e}/admins`,{params:i});return r(n)}catch(e){n(e,`加载赛事管理员失败`)}}async function a(e,r){try{let{data:n}=await t.post(`/competitions/${e}/admins`,r);return n}catch(e){n(e,`创建赛事管理员失败`)}}async function o(e,r,i){try{let{data:n}=await t.patch(`/competitions/${e}/admins/${r}`,i);return n}catch(e){n(e,`更新赛事管理员失败`)}}async function s(e,r){try{await t.delete(`/competitions/${e}/admins/${r}`)}catch{try{await t.post(`/competitions/${e}/admins/${r}/delete`)}catch(e){n(e,`删除失败`)}}}export{o as i,s as n,i as r,a as t};

@ -1 +1 @@
import{g as e,r as t}from"./api-Dpfxb1ca.js";import{s as n}from"./index-D5exsJys.js";function r(e){if(!e||typeof e!=`object`)throw Error(`列表响应格式无效`);let t=e;if(Array.isArray(t.data)&&typeof t.current_page==`number`){let e=t.data;return{data:e,meta:{current_page:t.current_page,last_page:typeof t.last_page==`number`?t.last_page:1,per_page:typeof t.per_page==`number`?t.per_page:e.length||15,total:typeof t.total==`number`?t.total:e.length}}}let n=t.data??t,r=n.data,i=n.meta;if(Array.isArray(r)&&i&&typeof i==`object`)return{data:r,meta:i};if(Array.isArray(t.data)){let e=t.data;return{data:e,meta:{current_page:1,last_page:1,per_page:e.length,total:e.length}}}throw Error(`列表响应格式无效`)}async function i(e){let{data:t}=await n.get(`/competitions`,{params:e});return r(t)}async function a(e){let{data:t}=await n.get(`/competitions/${e}`),r=t?.data??t;if(!r||typeof r!=`object`)throw Error(`赛事详情无效`);return r}async function o(e){let{data:t}=await n.post(`/competitions`,e),r=t?.data??t;if(!r||typeof r!=`object`)throw Error(`创建响应无效`);return r}async function s(e,t){let{data:r}=await n.patch(`/competitions/${e}`,t),i=r?.data??r;if(!i||typeof i!=`object`)throw Error(`更新响应无效`);return i}async function c(e,t){let{data:r}=await n.patch(`/competitions/${e}`,t),i=r?.data??r;if(!i||typeof i!=`object`)throw Error(`更新响应无效`);return i}async function l(e){let{data:t}=await n.get(`/competitions/${e}/tracks`),r=t?.data??t;if(!Array.isArray(r))throw Error(`赛道列表无效`);return r}async function u(e,t){let{data:r}=await n.post(`/competitions/${e}/tracks`,t),i=r?.data??r;if(!i||typeof i!=`object`)throw Error(`创建赛道无效`);return i}async function d(e,t,r){let{data:i}=await n.put(`/competitions/${e}/tracks/${t}`,r),a=i?.data??i;if(!a||typeof a!=`object`)throw Error(`更新赛道无效`);return a}async function f(e,t){await n.delete(`/competitions/${e}/tracks/${t}`)}function p(e){if(!e||typeof e!=`object`)return``;let t=e,n=t.data!=null&&typeof t.data==`object`&&!Array.isArray(t.data)?t.data:t,r=n.url??n.logoUrl;return typeof r==`string`?r:``}function m(e,t){if(!e||typeof e!=`object`)return t;let n=e;if(typeof n.message==`string`&&n.message.trim())return n.message.trim();let r=n.errors;if(r&&typeof r==`object`&&!Array.isArray(r)){let e=Object.values(r)[0];if(Array.isArray(e)&&e.length)return String(e[0])}return t}async function h(n,r){let i=new FormData;i.append(`file`,r);let a=localStorage.getItem(t),o=await fetch(`${e()}/competitions/${n}/logo`,{method:`POST`,headers:{Accept:`application/json`,...a?{Authorization:`Bearer ${a}`}:{}},body:i}),s=await o.json().catch(()=>({}));if(!o.ok)throw Error(m(s,`Logo 上传失败`));let c=p(s);if(!c)throw Error(`Logo 上传响应无效`);return c}async function g(e){await n.delete(`/competitions/${e}/logo`)}export{a,c,h as d,f as i,s as l,u as n,i as o,g as r,l as s,o as t,d as u};
import{g as e,r as t}from"./api-Dpfxb1ca.js";import{s as n}from"./index-iRzk6lDR.js";function r(e){if(!e||typeof e!=`object`)throw Error(`列表响应格式无效`);let t=e;if(Array.isArray(t.data)&&typeof t.current_page==`number`){let e=t.data;return{data:e,meta:{current_page:t.current_page,last_page:typeof t.last_page==`number`?t.last_page:1,per_page:typeof t.per_page==`number`?t.per_page:e.length||15,total:typeof t.total==`number`?t.total:e.length}}}let n=t.data??t,r=n.data,i=n.meta;if(Array.isArray(r)&&i&&typeof i==`object`)return{data:r,meta:i};if(Array.isArray(t.data)){let e=t.data;return{data:e,meta:{current_page:1,last_page:1,per_page:e.length,total:e.length}}}throw Error(`列表响应格式无效`)}async function i(e){let{data:t}=await n.get(`/competitions`,{params:e});return r(t)}async function a(e){let{data:t}=await n.get(`/competitions/${e}`),r=t?.data??t;if(!r||typeof r!=`object`)throw Error(`赛事详情无效`);return r}async function o(e){let{data:t}=await n.post(`/competitions`,e),r=t?.data??t;if(!r||typeof r!=`object`)throw Error(`创建响应无效`);return r}async function s(e,t){let{data:r}=await n.patch(`/competitions/${e}`,t),i=r?.data??r;if(!i||typeof i!=`object`)throw Error(`更新响应无效`);return i}async function c(e,t){let{data:r}=await n.patch(`/competitions/${e}`,t),i=r?.data??r;if(!i||typeof i!=`object`)throw Error(`更新响应无效`);return i}async function l(e){let{data:t}=await n.get(`/competitions/${e}/tracks`),r=t?.data??t;if(!Array.isArray(r))throw Error(`赛道列表无效`);return r}async function u(e,t){let{data:r}=await n.post(`/competitions/${e}/tracks`,t),i=r?.data??r;if(!i||typeof i!=`object`)throw Error(`创建赛道无效`);return i}async function d(e,t,r){let{data:i}=await n.put(`/competitions/${e}/tracks/${t}`,r),a=i?.data??i;if(!a||typeof a!=`object`)throw Error(`更新赛道无效`);return a}async function f(e,t){await n.delete(`/competitions/${e}/tracks/${t}`)}function p(e){if(!e||typeof e!=`object`)return``;let t=e,n=t.data!=null&&typeof t.data==`object`&&!Array.isArray(t.data)?t.data:t,r=n.url??n.logoUrl;return typeof r==`string`?r:``}function m(e,t){if(!e||typeof e!=`object`)return t;let n=e;if(typeof n.message==`string`&&n.message.trim())return n.message.trim();let r=n.errors;if(r&&typeof r==`object`&&!Array.isArray(r)){let e=Object.values(r)[0];if(Array.isArray(e)&&e.length)return String(e[0])}return t}async function h(n,r){let i=new FormData;i.append(`file`,r);let a=localStorage.getItem(t),o=await fetch(`${e()}/competitions/${n}/logo`,{method:`POST`,headers:{Accept:`application/json`,...a?{Authorization:`Bearer ${a}`}:{}},body:i}),s=await o.json().catch(()=>({}));if(!o.ok)throw Error(m(s,`Logo 上传失败`));let c=p(s);if(!c)throw Error(`Logo 上传响应无效`);return c}async function g(e){await n.delete(`/competitions/${e}/logo`)}export{a,c,h as d,f as i,s as l,u as n,i as o,g as r,l as s,o as t,d as u};

@ -1 +1 @@
import{h as e}from"./index-D5exsJys.js";var t=!1;function n(){return t}function r(e){return e==null||!Number.isFinite(e)||e<=0?``:e<1024*1024?`约 ${Math.max(1,Math.round(e/1024))} KB`:`约 ${(e/(1024*1024)).toFixed(1)} MB`}function i(n,i,a=`下载`){if(t)return e.warning(`附件正在${a}中,请勿重复点击`),null;t=!0;let o=n.trim()||`附件`,s=r(i),c=e({type:`info`,message:s?`正在准备${a}「${o}」(${s}),文件较大时请耐心等待…`:`正在准备${a}「${o}」,请稍候…`,duration:0,showClose:!0});return{setText:t=>{c.close(),c=e({type:`info`,message:t,duration:0,showClose:!0})},close:()=>{c.close(),t=!1}}}function a(){e.success(`下载已开始,请查看浏览器下载进度`)}export{n,a as r,i as t};
import{h as e}from"./index-iRzk6lDR.js";var t=!1;function n(){return t}function r(e){return e==null||!Number.isFinite(e)||e<=0?``:e<1024*1024?`约 ${Math.max(1,Math.round(e/1024))} KB`:`约 ${(e/(1024*1024)).toFixed(1)} MB`}function i(n,i,a=`下载`){if(t)return e.warning(`附件正在${a}中,请勿重复点击`),null;t=!0;let o=n.trim()||`附件`,s=r(i),c=e({type:`info`,message:s?`正在准备${a}「${o}」(${s}),文件较大时请耐心等待…`:`正在准备${a}「${o}」,请稍候…`,duration:0,showClose:!0});return{setText:t=>{c.close(),c=e({type:`info`,message:t,duration:0,showClose:!0})},close:()=>{c.close(),t=!1}}}function a(){e.success(`下载已开始,请查看浏览器下载进度`)}export{n,a as r,i as t};

File diff suppressed because one or more lines are too long

@ -1 +1 @@
import{s as e}from"./index-D5exsJys.js";function t(e){let t=e?.data??e;if(!t||typeof t!=`object`||!(`id`in t))throw Error(`公开来源渠道响应格式无效`);return t}async function n(){let{data:t}=await e.get(`/public-source-channels`),n=t?.data??t;if(!Array.isArray(n))throw Error(`公开来源渠道列表响应格式无效`);return n}async function r(n){let{data:r}=await e.post(`/public-source-channels`,n);return t(r)}async function i(n,r){let{data:i}=await e.put(`/public-source-channels/${n}`,r);return t(i)}export{n,i as r,r as t};
import{s as e}from"./index-iRzk6lDR.js";function t(e){let t=e?.data??e;if(!t||typeof t!=`object`||!(`id`in t))throw Error(`公开来源渠道响应格式无效`);return t}async function n(){let{data:t}=await e.get(`/public-source-channels`),n=t?.data??t;if(!Array.isArray(n))throw Error(`公开来源渠道列表响应格式无效`);return n}async function r(n){let{data:r}=await e.post(`/public-source-channels`,n);return t(r)}async function i(n,r){let{data:i}=await e.put(`/public-source-channels/${n}`,r);return t(i)}export{n,i as r,r as t};

@ -1 +1 @@
import{s as e}from"./index-D5exsJys.js";async function t(t){let{data:n}=await e.post(`/reviewers`,t),r=n?.data??n;if(!r||typeof r!=`object`)throw Error(`创建响应无效`);return r}async function n(t,n){let{data:r}=await e.patch(`/reviewers/${t}`,n),i=r?.data??r;if(!i||typeof i!=`object`)throw Error(`更新响应无效`);return i}async function r(t){await e.post(`/reviewers/${t}/delete`)}function i(e){if(!e||typeof e!=`object`)throw Error(`列表响应格式无效`);let t=e;if(Array.isArray(t.data)&&typeof t.current_page==`number`){let e=t.data;return{data:e,meta:{current_page:t.current_page,last_page:typeof t.last_page==`number`?t.last_page:1,per_page:typeof t.per_page==`number`?t.per_page:e.length||15,total:typeof t.total==`number`?t.total:e.length}}}throw Error(`列表响应格式无效`)}async function a(t){let{data:n}=await e.get(`/reviewer-scopes`,{params:t});return i(n)}async function o(t){let{data:n}=await e.get(`/competitions/${t}/reviewer-scope-track-counts`),r=n?.data??n;return!r||typeof r!=`object`?{}:r}async function s(t){let{data:n}=await e.get(`/competitions/${t}/reviewer-scope-region-counts`),r=n?.data??n;return!r||typeof r!=`object`?{}:r}async function c(t){let{data:n}=await e.post(`/reviewer-scopes`,t),r=n?.data??n;if(!r||typeof r!=`object`)throw Error(`创建响应无效`);return r}async function l(t){await e.post(`/reviewer-scopes/${t}/delete`)}export{a,n as c,o as i,l as n,t as o,s as r,r as s,c as t};
import{s as e}from"./index-iRzk6lDR.js";async function t(t){let{data:n}=await e.post(`/reviewers`,t),r=n?.data??n;if(!r||typeof r!=`object`)throw Error(`创建响应无效`);return r}async function n(t,n){let{data:r}=await e.patch(`/reviewers/${t}`,n),i=r?.data??r;if(!i||typeof i!=`object`)throw Error(`更新响应无效`);return i}async function r(t){await e.post(`/reviewers/${t}/delete`)}function i(e){if(!e||typeof e!=`object`)throw Error(`列表响应格式无效`);let t=e;if(Array.isArray(t.data)&&typeof t.current_page==`number`){let e=t.data;return{data:e,meta:{current_page:t.current_page,last_page:typeof t.last_page==`number`?t.last_page:1,per_page:typeof t.per_page==`number`?t.per_page:e.length||15,total:typeof t.total==`number`?t.total:e.length}}}throw Error(`列表响应格式无效`)}async function a(t){let{data:n}=await e.get(`/reviewer-scopes`,{params:t});return i(n)}async function o(t){let{data:n}=await e.get(`/competitions/${t}/reviewer-scope-track-counts`),r=n?.data??n;return!r||typeof r!=`object`?{}:r}async function s(t){let{data:n}=await e.get(`/competitions/${t}/reviewer-scope-region-counts`),r=n?.data??n;return!r||typeof r!=`object`?{}:r}async function c(t){let{data:n}=await e.post(`/reviewer-scopes`,t),r=n?.data??n;if(!r||typeof r!=`object`)throw Error(`创建响应无效`);return r}async function l(t){await e.post(`/reviewer-scopes/${t}/delete`)}export{a,n as c,o as i,l as n,t as o,s as r,r as s,c as t};

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

@ -4,6 +4,7 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>沪苏协同新兴产业科创大赛</title>
<link rel="icon" type="image/png" href="/favicon.png?v=20260829c">
<style>
:root {
--blue-950: #061a42;

@ -4,6 +4,7 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>沪苏协同新兴产业科创大赛报名系统</title>
<link rel="icon" type="image/png" href="/favicon.png?v=20260829c">
<link rel="stylesheet" href="./assets/bootstrap.min.css" />
<link rel="stylesheet" href="./assets/prototype.css" />
</head>

@ -4,6 +4,7 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Shanghai–Suzhou Collaborative Emerging Industries Sci-Tech Innovation Competition Registration System</title>
<link rel="icon" type="image/png" href="/favicon.png?v=20260829c">
<link rel="stylesheet" href="/frontend/assets/prototype.css" />
<script src="/frontend/assets/prototype-scale.js"></script>
</head>

@ -4,6 +4,7 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>沪苏协同新兴产业科创大赛报名系统</title>
<link rel="icon" type="image/png" href="/favicon.png?v=20260829c">
<link rel="stylesheet" href="./assets/prototype.css" />
</head>
<body class="login-page-wls">

@ -4,6 +4,7 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>沪苏协同新兴产业科创大赛报名系统</title>
<link rel="icon" type="image/png" href="/favicon.png?v=20260829c">
<link rel="stylesheet" href="../assets/bootstrap.min.css" />
<link rel="stylesheet" href="../assets/prototype.css" />
</head>

@ -4,6 +4,7 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>沪苏协同新兴产业科创大赛报名系统</title>
<link rel="icon" type="image/png" href="/favicon.png?v=20260829c">
<link rel="stylesheet" href="../assets/bootstrap.min.css" />
<link rel="stylesheet" href="../assets/prototype.css" />
</head>

@ -4,6 +4,7 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>沪苏协同新兴产业科创大赛报名系统</title>
<link rel="icon" type="image/png" href="/favicon.png?v=20260829c">
<link rel="stylesheet" href="../assets/bootstrap.min.css" />
<link rel="stylesheet" href="../assets/prototype.css" />
</head>

@ -4,6 +4,7 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>沪苏协同新兴产业科创大赛报名系统</title>
<link rel="icon" type="image/png" href="/favicon.png?v=20260829c">
<link rel="stylesheet" href="../assets/bootstrap.min.css" />
<link rel="stylesheet" href="../assets/prototype.css" />
</head>

@ -4,6 +4,7 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>沪苏协同新兴产业科创大赛报名系统</title>
<link rel="icon" type="image/png" href="/favicon.png?v=20260829c">
<link rel="stylesheet" href="../assets/bootstrap.min.css" />
<link rel="stylesheet" href="../assets/prototype.css" />
</head>

@ -4,6 +4,7 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>沪苏协同新兴产业科创大赛报名系统</title>
<link rel="icon" type="image/png" href="/favicon.png?v=20260829c">
<link rel="stylesheet" href="../assets/bootstrap.min.css" />
<link rel="stylesheet" href="../assets/prototype.css" />
</head>

@ -4,6 +4,7 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>“光联万物 创芯未来”首届沪苏协同新兴产业青年科创大赛报名系统</title>
<link rel="icon" type="image/png" href="/favicon.png?v=20260829c">
<link rel="stylesheet" href="../assets/bootstrap.min.css" />
<link rel="stylesheet" href="../assets/prototype.css" />
</head>

@ -2,10 +2,11 @@
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/admin/favicon.svg" />
<link rel="icon" type="image/png" href="/admin/favicon.png?v=20260829c" />
<link rel="apple-touch-icon" href="/admin/apple-touch-icon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
<title>沪苏协同新兴产业科创大赛报名系统</title>
<script type="module" crossorigin src="/admin/assets/index-D5exsJys.js"></script>
<script type="module" crossorigin src="/admin/assets/index-iRzk6lDR.js"></script>
<link rel="modulepreload" crossorigin href="/admin/assets/vue.runtime.esm-bundler-CACvpnko.js">
<link rel="modulepreload" crossorigin href="/admin/assets/api-Dpfxb1ca.js">
<link rel="modulepreload" crossorigin href="/admin/assets/portalLocale-vgPGVHT0.js">

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

@ -5,6 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Official website of the Inaugural Shanghai–Suzhou Collaborative Emerging Industries Science &amp; Technology Innovation Competition, focused on innovation across the photonics value chain.">
<title>Inaugural Shanghai–Suzhou Collaborative Emerging Industries Science &amp; Technology Innovation Competition</title>
<link rel="icon" type="image/png" href="/favicon.png?v=20260829c">
<script src="/frontend/assets/prototype-scale.js?v=20260819-hero"></script>
<style>
:root {

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9.3 KiB

@ -6,9 +6,8 @@
<script src="assets/prototype-scale.js?v=20260825-home"></script>
<meta name="description" content="Official website of the Inaugural Shanghai–Suzhou Collaborative Emerging Industries Youth Science &amp; Technology Innovation Competition, focused on innovation across the optical communications value chain.">
<title>Inaugural Shanghai–Suzhou Collaborative Emerging Industries Youth Science &amp; Technology Innovation Competition</title>
<link rel="icon" type="image/png" sizes="32x32" href="assets/favicon-32.png?v=20260828">
<link rel="icon" type="image/png" sizes="192x192" href="assets/favicon-192.png?v=20260828">
<link rel="apple-touch-icon" href="assets/apple-touch-icon.png?v=20260828">
<link rel="icon" type="image/png" href="/favicon.png?v=20260829c">
<link rel="apple-touch-icon" href="/apple-touch-icon.png?v=20260829c">
<link rel="stylesheet" href="assets/event-site-songti.css?v=20260828">
<style>
@font-face {

@ -6,9 +6,8 @@
<script src="assets/prototype-scale.js?v=20260825-home"></script>
<meta name="description" content="首届沪苏协同新兴产业青年科创大赛官方网站,聚焦光通信全产业链创新。">
<title>首届沪苏协同新兴产业青年科创大赛</title>
<link rel="icon" type="image/png" sizes="32x32" href="assets/favicon-32.png?v=20260828">
<link rel="icon" type="image/png" sizes="192x192" href="assets/favicon-192.png?v=20260828">
<link rel="apple-touch-icon" href="assets/apple-touch-icon.png?v=20260828">
<link rel="icon" type="image/png" href="/favicon.png?v=20260829c">
<link rel="apple-touch-icon" href="/apple-touch-icon.png?v=20260829c">
<link rel="stylesheet" href="assets/event-site-songti.css?v=20260828">
<style>
@font-face {

@ -4,6 +4,7 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>“光联万物 创芯未来”首届沪苏协同新兴产业科创大赛报名系统</title>
<link rel="icon" type="image/png" href="/favicon.png?v=20260829c">
<link rel="stylesheet" href="./assets/bootstrap.min.css" />
<link rel="stylesheet" href="./assets/prototype.css" />
<script src="./assets/prototype-scale.js?v=20260819-hero"></script>

@ -4,6 +4,7 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>“光联万物 创芯未来”首届沪苏协同新兴产业科创大赛报名系统</title>
<link rel="icon" type="image/png" href="/favicon.png?v=20260829c">
<link rel="stylesheet" href="./assets/prototype.css" />
<script src="./assets/prototype-scale.js?v=20260819-hero"></script>
</head>

@ -4,6 +4,7 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>观众与核销</title>
<link rel="icon" type="image/png" href="/favicon.png?v=20260829c">
<link rel="stylesheet" href="../assets/bootstrap.min.css" />
<link rel="stylesheet" href="../assets/prototype.css" />
<script src="../assets/prototype-scale.js?v=20260819-hero"></script>

@ -4,6 +4,7 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
<title>手机扫码核销</title>
<link rel="icon" type="image/png" href="/favicon.png?v=20260829c">
<link rel="stylesheet" href="../assets/bootstrap.min.css" />
<link rel="stylesheet" href="../assets/prototype.css" />
</head>

@ -4,6 +4,7 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>“光联万物 创芯未来”首届沪苏协同新兴产业科创大赛报名系统</title>
<link rel="icon" type="image/png" href="/favicon.png?v=20260829c">
<link rel="stylesheet" href="../assets/bootstrap.min.css" />
<link rel="stylesheet" href="../assets/prototype.css?v=20260808-2" />
<script src="../assets/prototype-scale.js?v=20260819-hero"></script>

@ -4,6 +4,7 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>“光联万物 创芯未来”首届沪苏协同新兴产业科创大赛报名系统</title>
<link rel="icon" type="image/png" href="/favicon.png?v=20260829c">
<link rel="stylesheet" href="../assets/bootstrap.min.css" />
<link rel="stylesheet" href="../assets/prototype.css" />
<script src="../assets/prototype-scale.js?v=20260819-hero"></script>

@ -4,6 +4,7 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>“光联万物 创芯未来”首届沪苏协同新兴产业科创大赛报名系统</title>
<link rel="icon" type="image/png" href="/favicon.png?v=20260829c">
<link rel="stylesheet" href="../assets/bootstrap.min.css" />
<link rel="stylesheet" href="../assets/prototype.css" />
<script src="../assets/prototype-scale.js?v=20260819-hero"></script>

@ -4,6 +4,7 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>“光联万物 创芯未来”首届沪苏协同新兴产业科创大赛报名系统</title>
<link rel="icon" type="image/png" href="/favicon.png?v=20260829c">
<link rel="stylesheet" href="../assets/bootstrap.min.css" />
<link rel="stylesheet" href="../assets/prototype.css" />
<script src="../assets/prototype-scale.js?v=20260819-hero"></script>

@ -4,6 +4,7 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>“光联万物 创芯未来”首届沪苏协同新兴产业科创大赛报名系统</title>
<link rel="icon" type="image/png" href="/favicon.png?v=20260829c">
<link rel="stylesheet" href="../assets/bootstrap.min.css" />
<link rel="stylesheet" href="../assets/prototype.css" />
<script src="../assets/prototype-scale.js?v=20260819-hero"></script>

@ -5,6 +5,7 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>“光联万物 创芯未来”首届沪苏协同新兴产业科创大赛报名系统</title>
<link rel="icon" type="image/png" href="/favicon.png?v=20260829c">
<link rel="stylesheet" href="../assets/bootstrap.min.css" />
<link rel="stylesheet" href="../assets/prototype.css" />
<script src="../assets/prototype-scale.js?v=20260819-hero"></script>

@ -4,6 +4,7 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>“光联万物 创芯未来”首届沪苏协同新兴产业科创大赛报名系统</title>
<link rel="icon" type="image/png" href="/favicon.png?v=20260829c">
<link rel="stylesheet" href="../assets/bootstrap.min.css" />
<link rel="stylesheet" href="../assets/prototype.css" />
<script src="../assets/prototype-scale.js?v=20260819-hero"></script>

@ -4,6 +4,7 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>“光联万物 创芯未来”首届沪苏协同新兴产业科创大赛报名系统</title>
<link rel="icon" type="image/png" href="/favicon.png?v=20260829c">
<link rel="stylesheet" href="../assets/bootstrap.min.css" />
<link rel="stylesheet" href="../assets/prototype.css" />
<script src="../assets/prototype-scale.js?v=20260819-hero"></script>

@ -4,6 +4,7 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Shanghai–Suzhou Collaborative Emerging Industries Sci-Tech Innovation Competition Registration System</title>
<link rel="icon" type="image/png" href="/favicon.png?v=20260829c">
<link rel="stylesheet" href="/frontend/assets/prototype.css" />
<script src="/frontend/assets/prototype-scale.js?v=20260819-hero"></script>
</head>

@ -4,6 +4,7 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>沪苏协同新兴产业科创大赛报名系统</title>
<link rel="icon" type="image/png" href="/favicon.png?v=20260829c">
<style>
:root {
--blue-950: #061a42;

Loading…
Cancel
Save