master
lion 2 months ago
parent 71514cc938
commit c66663e707

@ -25,6 +25,8 @@ class ApplicationFile extends Model
public function publicUrl(): string
{
return Storage::disk($this->disk)->url($this->path);
$u = Storage::disk($this->disk)->url($this->path);
return preg_replace('#([^:])//+#', '$1/', $u) ?? $u;
}
}

@ -39,7 +39,7 @@ return [
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'url' => rtrim((string) env('APP_URL'), '/').'/storage',
'visibility' => 'public',
'throw' => false,
],

@ -1 +1 @@
import{C as e,D as t,Et as n,O as r,S as i,W as a,Y as o,Z as s,_t as c,b as l,ct as u,f as d,g as f,in as p,k as m,q as h,st as g,w as _,x as v}from"./vue.runtime.esm-bundler-6_koQ1g6.js";import{C as y,E as b,O as x,n as S,t as C,w}from"./index-BuWJwSk4.js";import{t as T}from"./_plugin-vue_export-helper-S3RvzygF.js";import{a as E}from"./competitions-Di3p92tF.js";import{t as D}from"./adminCompetition-CC0mSSmz.js";var O={key:0,class:`menu-section-label`},k=T(m({__name:`AdminMenuNest`,props:{nodes:{}},setup(n){return(a,c)=>{let l=s(`el-sub-menu`),u=s(`el-menu-item`);return h(!0),_(f,null,o(n.nodes,(n,a)=>(h(),_(f,{key:n.section||n.name||String(a)},[n.section&&!n.name?(h(),_(`div`,O,p(n.section),1)):n.children?.length&&n.name?(h(),i(l,{key:1,index:n.name},{title:g(()=>[v(`span`,null,p(n.title),1)]),default:g(()=>[r(k,{nodes:n.children},null,8,[`nodes`])]),_:2},1032,[`index`])):n.name?(h(),i(u,{key:2,index:n.name},{default:g(()=>[t(p(n.title),1)]),_:2},1032,[`index`])):e(``,!0)],64))),128)}}}),[[`__scopeId`,`data-v-346ecfd3`]]),A=T(m({__name:`AdminMenuTree`,props:{nodes:{}},setup(e){let t=y(),n=w(),a=l(()=>t.name==null?``:String(t.name));function o(e){n.push({name:e}).catch(()=>{})}return(t,n)=>{let c=s(`el-menu`);return h(),i(c,{"default-active":a.value,class:`admin-side-menu`,onSelect:o},{default:g(()=>[r(k,{nodes:e.nodes},null,8,[`nodes`])]),_:1},8,[`default-active`])}}}),[[`__scopeId`,`data-v-72ad4354`]]),j={class:`header-inner`},M={key:0,class:`muted`},N={class:`switcher-item`},P={class:`truncate`},F={class:`slug truncate`},I=T(m({__name:`AdminLayout`,setup(l){let m=w(),y=C(),T=S(),O=D(),{menus:k}=x(T),{competitions:I,selectedCompetitionId:L}=x(O),R=c(!1);async function z(){try{let e=await E({page:1,per_page:100});O.setCompetitionList(e.data)}catch(e){b.warning(e instanceof Error?e.message:`赛事列表加载失败,请检查网络与权限`)}}function B(){R.value=!R.value}function V(e){O.selectCompetition(e)}function H(){y.logout(m),m.replace(`/admin/login`)}return a(()=>{z()}),(a,c)=>{let l=s(`el-button`),m=s(`el-dropdown-item`),y=s(`el-dropdown-menu`),b=s(`el-dropdown`),x=s(`el-header`),S=s(`el-scrollbar`),C=s(`el-aside`),w=s(`router-view`),T=s(`el-main`),E=s(`el-container`);return h(),i(E,{class:`admin-shell`},{default:g(()=>[r(x,{class:`admin-header`,height:`56px`},{default:g(()=>[v(`div`,j,[r(l,{circle:``,plain:``,size:`small`,"aria-label":`收起或展开侧栏`,onClick:B},{default:g(()=>[t(p(R.value?``:``),1)]),_:1}),c[3]||=v(`span`,{class:`admin-brand`},`管理后台`,-1),c[4]||=v(`div`,{class:`header-spacer`},null,-1),r(b,{trigger:`click`,placement:`bottom-end`},{dropdown:g(()=>[r(y,{style:{"min-width":`220px`}},{default:g(()=>[n(I).length?(h(!0),_(f,{key:1},o(n(I),e=>(h(),i(m,{key:e.id,onClick:t=>V(e.id)},{default:g(()=>[v(`div`,N,[v(`span`,P,p(e.name),1),v(`span`,F,p(e.slug),1)])]),_:2},1032,[`onClick`]))),128)):(h(),i(m,{key:0,disabled:``},{default:g(()=>[...c[1]||=[t(`暂无赛事,请先在「赛事列表」创建`,-1)]]),_:1}))]),_:1})]),default:g(()=>[r(l,{type:`danger`,plain:``,size:`small`},{default:g(()=>[c[0]||=t(` 赛事切换 `,-1),n(L)?(h(),_(`span`,M,`#`+p(n(L))+``,1)):e(``,!0)]),_:1})]),_:1}),r(l,{size:`small`,onClick:H},{default:g(()=>[...c[2]||=[t(`退出`,-1)]]),_:1})])]),_:1}),r(E,{class:`admin-body`},{default:g(()=>[r(C,{class:`admin-aside`,width:R.value?`0px`:`230px`},{default:g(()=>[u(r(S,{class:`aside-scroll`},{default:g(()=>[c[5]||=v(`div`,{class:`aside-title`},`导航`,-1),r(A,{nodes:n(k)},null,8,[`nodes`])]),_:1},512),[[d,!R.value]])]),_:1},8,[`width`]),r(T,{class:`admin-main`},{default:g(()=>[r(w)]),_:1})]),_:1})]),_:1})}}}),[[`__scopeId`,`data-v-fe713c5c`]]);export{I as default};
import{C as e,D as t,Et as n,O as r,S as i,W as a,Y as o,Z as s,_t as c,b as l,ct as u,f as d,g as f,in as p,k as m,q as h,st as g,w as _,x as v}from"./vue.runtime.esm-bundler-6_koQ1g6.js";import{C as y,E as b,O as x,n as S,t as C,w}from"./index-Cvi7ILa8.js";import{t as T}from"./_plugin-vue_export-helper-S3RvzygF.js";import{a as E}from"./competitions-CCGQ26au.js";import{t as D}from"./adminCompetition-DrcuqmFO.js";var O={key:0,class:`menu-section-label`},k=T(m({__name:`AdminMenuNest`,props:{nodes:{}},setup(n){return(a,c)=>{let l=s(`el-sub-menu`),u=s(`el-menu-item`);return h(!0),_(f,null,o(n.nodes,(n,a)=>(h(),_(f,{key:n.section||n.name||String(a)},[n.section&&!n.name?(h(),_(`div`,O,p(n.section),1)):n.children?.length&&n.name?(h(),i(l,{key:1,index:n.name},{title:g(()=>[v(`span`,null,p(n.title),1)]),default:g(()=>[r(k,{nodes:n.children},null,8,[`nodes`])]),_:2},1032,[`index`])):n.name?(h(),i(u,{key:2,index:n.name},{default:g(()=>[t(p(n.title),1)]),_:2},1032,[`index`])):e(``,!0)],64))),128)}}}),[[`__scopeId`,`data-v-346ecfd3`]]),A=T(m({__name:`AdminMenuTree`,props:{nodes:{}},setup(e){let t=y(),n=w(),a=l(()=>t.name==null?``:String(t.name));function o(e){n.push({name:e}).catch(()=>{})}return(t,n)=>{let c=s(`el-menu`);return h(),i(c,{"default-active":a.value,class:`admin-side-menu`,onSelect:o},{default:g(()=>[r(k,{nodes:e.nodes},null,8,[`nodes`])]),_:1},8,[`default-active`])}}}),[[`__scopeId`,`data-v-72ad4354`]]),j={class:`header-inner`},M={key:0,class:`muted`},N={class:`switcher-item`},P={class:`truncate`},F={class:`slug truncate`},I=T(m({__name:`AdminLayout`,setup(l){let m=w(),y=C(),T=S(),O=D(),{menus:k}=x(T),{competitions:I,selectedCompetitionId:L}=x(O),R=c(!1);async function z(){try{let e=await E({page:1,per_page:100});O.setCompetitionList(e.data)}catch(e){b.warning(e instanceof Error?e.message:`赛事列表加载失败,请检查网络与权限`)}}function B(){R.value=!R.value}function V(e){O.selectCompetition(e)}function H(){y.logout(m),m.replace(`/admin/login`)}return a(()=>{z()}),(a,c)=>{let l=s(`el-button`),m=s(`el-dropdown-item`),y=s(`el-dropdown-menu`),b=s(`el-dropdown`),x=s(`el-header`),S=s(`el-scrollbar`),C=s(`el-aside`),w=s(`router-view`),T=s(`el-main`),E=s(`el-container`);return h(),i(E,{class:`admin-shell`},{default:g(()=>[r(x,{class:`admin-header`,height:`56px`},{default:g(()=>[v(`div`,j,[r(l,{circle:``,plain:``,size:`small`,"aria-label":`收起或展开侧栏`,onClick:B},{default:g(()=>[t(p(R.value?``:``),1)]),_:1}),c[3]||=v(`span`,{class:`admin-brand`},`管理后台`,-1),c[4]||=v(`div`,{class:`header-spacer`},null,-1),r(b,{trigger:`click`,placement:`bottom-end`},{dropdown:g(()=>[r(y,{style:{"min-width":`220px`}},{default:g(()=>[n(I).length?(h(!0),_(f,{key:1},o(n(I),e=>(h(),i(m,{key:e.id,onClick:t=>V(e.id)},{default:g(()=>[v(`div`,N,[v(`span`,P,p(e.name),1),v(`span`,F,p(e.slug),1)])]),_:2},1032,[`onClick`]))),128)):(h(),i(m,{key:0,disabled:``},{default:g(()=>[...c[1]||=[t(`暂无赛事,请先在「赛事列表」创建`,-1)]]),_:1}))]),_:1})]),default:g(()=>[r(l,{type:`danger`,plain:``,size:`small`},{default:g(()=>[c[0]||=t(` 赛事切换 `,-1),n(L)?(h(),_(`span`,M,`#`+p(n(L))+``,1)):e(``,!0)]),_:1})]),_:1}),r(l,{size:`small`,onClick:H},{default:g(()=>[...c[2]||=[t(`退出`,-1)]]),_:1})])]),_:1}),r(E,{class:`admin-body`},{default:g(()=>[r(C,{class:`admin-aside`,width:R.value?`0px`:`230px`},{default:g(()=>[u(r(S,{class:`aside-scroll`},{default:g(()=>[c[5]||=v(`div`,{class:`aside-title`},`导航`,-1),r(A,{nodes:n(k)},null,8,[`nodes`])]),_:1},512),[[d,!R.value]])]),_:1},8,[`width`]),r(T,{class:`admin-main`},{default:g(()=>[r(w)]),_:1})]),_:1})]),_:1})}}}),[[`__scopeId`,`data-v-fe713c5c`]]);export{I as default};

@ -1,2 +1,2 @@
import{D as e,O as t,Z as n,_t as r,in as i,k as a,m as o,q as s,st as c,w as l,x as u}from"./vue.runtime.esm-bundler-6_koQ1g6.js";import{u as d}from"./api-CH6mod_b.js";import{C as f,E as p,i as m,r as h,t as g,w as _}from"./index-BuWJwSk4.js";import{t as v}from"./_plugin-vue_export-helper-S3RvzygF.js";async function y(e){if(d()){if(!e.username.trim()||!e.password.trim())throw Error(`请输入账号和密码`);return{token:`mock_admin_${Date.now()}`,user:{id:1,name:`Mock 管理员`,username:e.username.trim()}}}try{let{data:t}=await h.post(`/auth/login`,e);return b(t)}catch(e){if(m.isAxiosError(e)){let t=e.response?.data,n=t&&typeof t==`object`?t:{},r=(typeof n.message==`string`?n.message:``)||(n.errors&&typeof n.errors==`object`?Object.values(n.errors).flat().join(`
import{D as e,O as t,Z as n,_t as r,in as i,k as a,m as o,q as s,st as c,w as l,x as u}from"./vue.runtime.esm-bundler-6_koQ1g6.js";import{u as d}from"./api-DouN6RcT.js";import{C as f,E as p,i as m,r as h,t as g,w as _}from"./index-Cvi7ILa8.js";import{t as v}from"./_plugin-vue_export-helper-S3RvzygF.js";async function y(e){if(d()){if(!e.username.trim()||!e.password.trim())throw Error(`请输入账号和密码`);return{token:`mock_admin_${Date.now()}`,user:{id:1,name:`Mock 管理员`,username:e.username.trim()}}}try{let{data:t}=await h.post(`/auth/login`,e);return b(t)}catch(e){if(m.isAxiosError(e)){let t=e.response?.data,n=t&&typeof t==`object`?t:{},r=(typeof n.message==`string`?n.message:``)||(n.errors&&typeof n.errors==`object`?Object.values(n.errors).flat().join(`
`):``)||e.message;throw Error(r||`登录失败`)}throw e}}function b(e){if(e&&typeof e==`object`){let t=e,n=t.data,r=(typeof t.token==`string`?t.token:void 0)??(typeof t.access_token==`string`?t.access_token:void 0)??(n&&typeof n.token==`string`?n.token:void 0);if(typeof r==`string`)return{token:r,user:t.user??t.admin??n?.user}}throw Error(`登录响应无效`)}var x={class:`login-wrap`},S=v(a({__name:`AdminLoginView`,setup(a){let d=f(),m=_(),h=g(),v=r(``),b=r(``),S=r(!1);async function C(){if(!v.value.trim()||!b.value.trim()){p.warning(`请输入账号和密码`);return}S.value=!0;try{let e=await y({username:v.value.trim(),password:b.value.trim()});h.setToken(e.token);let t=typeof d.query.redirect==`string`?d.query.redirect:``;t&&t.startsWith(`/admin`)?await m.replace(t):await m.replace({name:`admin-competitions-list`}),p.success(`登录成功`)}catch(e){p.error(e instanceof Error?e.message:`登录失败`)}finally{S.value=!1}}return(r,a)=>{let d=n(`el-input`),f=n(`el-form-item`),p=n(`el-button`),m=n(`el-form`),h=n(`el-card`);return s(),l(`div`,x,[t(h,{class:`login-card`,shadow:`hover`},{header:c(()=>[...a[2]||=[u(`div`,{class:`card-title`},`管理员登录`,-1)]]),default:c(()=>[t(m,{"label-position":`top`,onSubmit:o(C,[`prevent`])},{default:c(()=>[t(f,{label:`账号`},{default:c(()=>[t(d,{modelValue:v.value,"onUpdate:modelValue":a[0]||=e=>v.value=e,modelModifiers:{trim:!0},autocomplete:`username`,clearable:``},null,8,[`modelValue`])]),_:1}),t(f,{label:`密码`},{default:c(()=>[t(d,{modelValue:b.value,"onUpdate:modelValue":a[1]||=e=>b.value=e,type:`password`,autocomplete:`current-password`,"show-password":``},null,8,[`modelValue`])]),_:1}),t(p,{type:`danger`,class:`w-100`,"native-type":`submit`,loading:S.value},{default:c(()=>[e(i(S.value?`登录中`:`登录`),1)]),_:1},8,[`loading`])]),_:1}),a[3]||=u(`p`,{class:`hint`},[e(` 连接真实后端时请将 `),u(`code`,null,`VITE_ADMIN_USE_MOCK`),e(` 设为 `),u(`code`,null,`false`),e(` 并重启前端默认管理员账号由 Laravel `),u(`code`,null,`php artisan db:seed --class=AdminUserSeeder`),e(` 写入 `)],-1)]),_:1})])}}}),[[`__scopeId`,`data-v-1132d8e3`]]);export{S as default};

@ -1 +0,0 @@
.promise-doc-body--rich[data-v-62a7f11e]{color:var(--bs-body-color,#212529);text-align:justify;font-size:.95rem;line-height:1.65}.promise-doc-body--rich[data-v-62a7f11e] p{margin-bottom:.75rem}.promise-doc-body--rich[data-v-62a7f11e] p:last-child{margin-bottom:0}.promise-doc-body--rich[data-v-62a7f11e] ul,.promise-doc-body--rich[data-v-62a7f11e] ol{margin-bottom:.75rem;padding-left:1.25rem}.promise-doc-body--rich[data-v-62a7f11e] h1,.promise-doc-body--rich[data-v-62a7f11e] h2,.promise-doc-body--rich[data-v-62a7f11e] h3{margin:.75rem 0 .5rem;font-size:1rem;font-weight:600}

@ -0,0 +1 @@
.promise-doc-body--rich[data-v-8b75cc84]{color:var(--bs-body-color,#212529);text-align:justify;font-size:.95rem;line-height:1.65}.promise-doc-body--rich[data-v-8b75cc84] p{margin-bottom:.75rem}.promise-doc-body--rich[data-v-8b75cc84] p:last-child{margin-bottom:0}.promise-doc-body--rich[data-v-8b75cc84] ul,.promise-doc-body--rich[data-v-8b75cc84] ol{margin-bottom:.75rem;padding-left:1.25rem}.promise-doc-body--rich[data-v-8b75cc84] h1,.promise-doc-body--rich[data-v-8b75cc84] h2,.promise-doc-body--rich[data-v-8b75cc84] h3{margin:.75rem 0 .5rem;font-size:1rem;font-weight:600}

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,D as t,Et as n,O as r,Q as i,S as a,W as o,Z as s,_t as c,ct as l,in as u,k as d,q as f,st as p,w as m,x as h}from"./vue.runtime.esm-bundler-6_koQ1g6.js";import{E as g}from"./index-BuWJwSk4.js";import{t as _}from"./_plugin-vue_export-helper-S3RvzygF.js";import{a as v}from"./competitions-Di3p92tF.js";import{t as y}from"./adminCompetition-CC0mSSmz.js";var b={draft:`草稿`,published:`已发布`,signup_open:`报名进行中`,signup_closed:`报名已截止`,reviewing:`评审中`,ended:`已结束`};function x(e){return b[e]??e}var S={class:`page-header`},C={key:0,class:`pager`},w={class:`total`},T=_(d({__name:`CompetitionListView`,setup(d){let _=c([]),b=y(),T=c(!1),E=c(1),D=c(1),O=c(0),k=c(15);async function A(){T.value=!0;try{let e=await v({page:E.value,per_page:k.value});_.value=e.data,D.value=e.meta.last_page,O.value=e.meta.total,k.value=e.meta.per_page}catch(e){_.value=[],g.error(e instanceof Error?e.message:`加载失败`)}finally{T.value=!1}}function j(e){e<1||e>D.value||(E.value=e,A())}function M(e){if(!e)return``;let t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleString()}return o(()=>{A()}),(o,c)=>{let d=s(`el-button`),g=s(`RouterLink`),v=s(`el-table-column`),y=s(`el-tag`),A=s(`el-table`),N=s(`el-pagination`),P=s(`el-card`),F=i(`loading`);return f(),m(`div`,null,[h(`div`,S,[c[1]||=h(`h2`,{class:`page-title`},`赛事列表`,-1),r(g,{to:{name:`admin-competition-new`}},{default:p(()=>[r(d,{type:`danger`},{default:p(()=>[...c[0]||=[t(`新建赛事`,-1)]]),_:1})]),_:1})]),r(P,{shadow:`never`},{default:p(()=>[l((f(),a(A,{data:_.value,stripe:``,style:{width:`100%`}},{empty:p(()=>[...c[3]||=[h(`span`,{class:`text-muted`},`暂无数据`,-1)]]),default:p(()=>[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:p(({row:e})=>[t(u(n(x)(e.status)),1)]),_:1}),r(v,{label:`对外可见`,width:`100`},{default:p(({row:e})=>[r(y,{type:e.published?`success`:`info`,size:`small`},{default:p(()=>[t(u(e.published?``:``),1)]),_:2},1032,[`type`])]),_:1}),r(v,{label:`报名开始`,"min-width":`160`},{default:p(({row:e})=>[t(u(M(e.signup_open_at??null)),1)]),_:1}),r(v,{label:`报名截止`,"min-width":`160`},{default:p(({row:e})=>[t(u(M(e.signup_close_at??null)),1)]),_:1}),r(v,{label:`操作`,width:`140`,fixed:`right`},{default:p(({row:e})=>[r(g,{to:{name:`admin-competition-workspace`},onClick:t=>n(b).selectCompetition(e.id)},{default:p(()=>[r(d,{type:`danger`,link:``},{default:p(()=>[...c[2]||=[t(`进入赛事中心`,-1)]]),_:1})]),_:1},8,[`onClick`])]),_:1})]),_:1},8,[`data`])),[[F,T.value]]),D.value>1?(f(),m(`div`,C,[h(`span`,w,``+u(O.value)+``,1),r(N,{background:``,layout:`prev, pager, next`,"current-page":E.value,"page-size":k.value,total:O.value,onCurrentChange:j},null,8,[`current-page`,`page-size`,`total`])])):e(``,!0)]),_:1})])}}}),[[`__scopeId`,`data-v-bee3a1d5`]]);export{T as default};
import{C as e,D as t,Et as n,O as r,Q as i,S as a,W as o,Z as s,_t as c,ct as l,in as u,k as d,q as f,st as p,w as m,x as h}from"./vue.runtime.esm-bundler-6_koQ1g6.js";import{E as g}from"./index-Cvi7ILa8.js";import{t as _}from"./_plugin-vue_export-helper-S3RvzygF.js";import{a as v}from"./competitions-CCGQ26au.js";import{t as y}from"./adminCompetition-DrcuqmFO.js";var b={draft:`草稿`,published:`已发布`,signup_open:`报名进行中`,signup_closed:`报名已截止`,reviewing:`评审中`,ended:`已结束`};function x(e){return b[e]??e}var S={class:`page-header`},C={key:0,class:`pager`},w={class:`total`},T=_(d({__name:`CompetitionListView`,setup(d){let _=c([]),b=y(),T=c(!1),E=c(1),D=c(1),O=c(0),k=c(15);async function A(){T.value=!0;try{let e=await v({page:E.value,per_page:k.value});_.value=e.data,D.value=e.meta.last_page,O.value=e.meta.total,k.value=e.meta.per_page}catch(e){_.value=[],g.error(e instanceof Error?e.message:`加载失败`)}finally{T.value=!1}}function j(e){e<1||e>D.value||(E.value=e,A())}function M(e){if(!e)return``;let t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleString()}return o(()=>{A()}),(o,c)=>{let d=s(`el-button`),g=s(`RouterLink`),v=s(`el-table-column`),y=s(`el-tag`),A=s(`el-table`),N=s(`el-pagination`),P=s(`el-card`),F=i(`loading`);return f(),m(`div`,null,[h(`div`,S,[c[1]||=h(`h2`,{class:`page-title`},`赛事列表`,-1),r(g,{to:{name:`admin-competition-new`}},{default:p(()=>[r(d,{type:`danger`},{default:p(()=>[...c[0]||=[t(`新建赛事`,-1)]]),_:1})]),_:1})]),r(P,{shadow:`never`},{default:p(()=>[l((f(),a(A,{data:_.value,stripe:``,style:{width:`100%`}},{empty:p(()=>[...c[3]||=[h(`span`,{class:`text-muted`},`暂无数据`,-1)]]),default:p(()=>[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:p(({row:e})=>[t(u(n(x)(e.status)),1)]),_:1}),r(v,{label:`对外可见`,width:`100`},{default:p(({row:e})=>[r(y,{type:e.published?`success`:`info`,size:`small`},{default:p(()=>[t(u(e.published?``:``),1)]),_:2},1032,[`type`])]),_:1}),r(v,{label:`报名开始`,"min-width":`160`},{default:p(({row:e})=>[t(u(M(e.signup_open_at??null)),1)]),_:1}),r(v,{label:`报名截止`,"min-width":`160`},{default:p(({row:e})=>[t(u(M(e.signup_close_at??null)),1)]),_:1}),r(v,{label:`操作`,width:`140`,fixed:`right`},{default:p(({row:e})=>[r(g,{to:{name:`admin-competition-workspace`},onClick:t=>n(b).selectCompetition(e.id)},{default:p(()=>[r(d,{type:`danger`,link:``},{default:p(()=>[...c[2]||=[t(`进入赛事中心`,-1)]]),_:1})]),_:1},8,[`onClick`])]),_:1})]),_:1},8,[`data`])),[[F,T.value]]),D.value>1?(f(),m(`div`,C,[h(`span`,w,``+u(O.value)+``,1),r(N,{background:``,layout:`prev, pager, next`,"current-page":E.value,"page-size":k.value,total:O.value,onCurrentChange:j},null,8,[`current-page`,`page-size`,`total`])])):e(``,!0)]),_:1})])}}}),[[`__scopeId`,`data-v-bee3a1d5`]]);export{T as default};

@ -1,4 +1,4 @@
import{$t as e,C as t,E as n,Et as r,G as i,W as a,_t as o,b as s,ct as c,d as l,in as u,k as d,m as f,q as p,w as m,x as h}from"./vue.runtime.esm-bundler-6_koQ1g6.js";import{a as g,i as _,l as v,m as y,p as b}from"./api-CH6mod_b.js";import{C as x,w as S}from"./index-BuWJwSk4.js";/* empty css */import{i as C,r as w,t as ee}from"./competitionBranding-BQASm1w0.js";/* empty css */var te={class:`login-page-wls__wrap`},ne={class:`login-page-wls__inner`},re={class:`login-page-wls__brand`,"aria-label":`系统说明`},ie={class:`login-page-wls__logo`,"aria-hidden":`true`},ae=[`src`],oe={key:1,viewBox:`0 0 100 100`,width:`72`,height:`72`,xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`},se={key:0,class:`login-page-wls__mark`},ce=[`innerHTML`],le={key:1,class:`login-page-wls__title`},T=[`innerHTML`],ue={class:`login-page-wls__panel`},de={class:`login-page-wls__card`},fe={key:0,class:`login-page-wls__card-title`},pe={class:`login-page-wls__code-row`},me=[`disabled`],he=[`disabled`],ge={key:0,class:`login-page-wls__footer`},_e={class:`login-page-wls__copyright`},E=d({__name:`LoginView`,setup(d){let E=x(),D=S(),O=o(``),k=o(``),A=o(!1),j=o(!1),M=o(!1),N=o(`获取验证码`),P=o(!1),F=o(``),I=o(`neutral`),L=s(()=>String(E.params.slug??``).trim()),R=o(``),z=o(w()),ve=s(()=>I.value===`error`?`login-page-wls__hint login-page-wls__hint--error`:I.value===`success`?`login-page-wls__hint login-page-wls__hint--success`:`login-page-wls__hint`),ye=s(()=>{let e=z.value.login.markLine;return C(e)?B(e):``}),be=s(()=>{let e=z.value.login.headline;return C(e)?B(e):``});function B(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}let V=s(()=>R.value?R.value:C(z.value.login.slogan)?z.value.login.slogan:``),xe=s(()=>!!R.value),Se=s(()=>C(z.value.login.cardWelcome)?z.value.login.cardWelcome:``),H=s(()=>Se.value.replace(/登陆/g,`登录`)),U=s(()=>C(z.value.login.footerCopyright)?z.value.login.footerCopyright:``),W=s(()=>C(z.value.login.logoUrl)?z.value.login.logoUrl:``),G=0;function K(){G&&=(window.clearInterval(G),0)}function Ce(){K();let e=y();M.value=!0,N.value=`重新获取(${e}s`,G=window.setInterval(()=>{if(--e,e<=0){K(),N.value=`获取验证码`,M.value=!1;return}N.value=`重新获取(${e}s`},1e3)}function q(){return b()}function J(e,t=`neutral`){F.value=e,I.value=t}function Y(){F.value=``,I.value=`neutral`}function X(e){if(typeof e!=`object`||!e)return`请求失败`;let t=e,n=t.message;if(typeof n==`string`&&n.trim())return n.trim();let r=t.errors;if(typeof r==`object`&&r&&!Array.isArray(r)){let e=Object.values(r).flatMap(e=>Array.isArray(e)?e.map(e=>String(e)):[]);if(e.length)return e.join(`
import{$t as e,C as t,E as n,Et as r,G as i,W as a,_t as o,b as s,ct as c,d as l,in as u,k as d,m as f,q as p,w as m,x as h}from"./vue.runtime.esm-bundler-6_koQ1g6.js";import{a as g,i as _,l as v,m as y,p as b}from"./api-DouN6RcT.js";import{C as x,w as S}from"./index-Cvi7ILa8.js";/* empty css */import{i as C,r as w,t as ee}from"./competitionBranding-BQASm1w0.js";/* empty css */var te={class:`login-page-wls__wrap`},ne={class:`login-page-wls__inner`},re={class:`login-page-wls__brand`,"aria-label":`系统说明`},ie={class:`login-page-wls__logo`,"aria-hidden":`true`},ae=[`src`],oe={key:1,viewBox:`0 0 100 100`,width:`72`,height:`72`,xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`},se={key:0,class:`login-page-wls__mark`},ce=[`innerHTML`],le={key:1,class:`login-page-wls__title`},T=[`innerHTML`],ue={class:`login-page-wls__panel`},de={class:`login-page-wls__card`},fe={key:0,class:`login-page-wls__card-title`},pe={class:`login-page-wls__code-row`},me=[`disabled`],he=[`disabled`],ge={key:0,class:`login-page-wls__footer`},_e={class:`login-page-wls__copyright`},E=d({__name:`LoginView`,setup(d){let E=x(),D=S(),O=o(``),k=o(``),A=o(!1),j=o(!1),M=o(!1),N=o(`获取验证码`),P=o(!1),F=o(``),I=o(`neutral`),L=s(()=>String(E.params.slug??``).trim()),R=o(``),z=o(w()),ve=s(()=>I.value===`error`?`login-page-wls__hint login-page-wls__hint--error`:I.value===`success`?`login-page-wls__hint login-page-wls__hint--success`:`login-page-wls__hint`),ye=s(()=>{let e=z.value.login.markLine;return C(e)?B(e):``}),be=s(()=>{let e=z.value.login.headline;return C(e)?B(e):``});function B(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}let V=s(()=>R.value?R.value:C(z.value.login.slogan)?z.value.login.slogan:``),xe=s(()=>!!R.value),Se=s(()=>C(z.value.login.cardWelcome)?z.value.login.cardWelcome:``),H=s(()=>Se.value.replace(/登陆/g,`登录`)),U=s(()=>C(z.value.login.footerCopyright)?z.value.login.footerCopyright:``),W=s(()=>C(z.value.login.logoUrl)?z.value.login.logoUrl:``),G=0;function K(){G&&=(window.clearInterval(G),0)}function Ce(){K();let e=y();M.value=!0,N.value=`重新获取(${e}s`,G=window.setInterval(()=>{if(--e,e<=0){K(),N.value=`获取验证码`,M.value=!1;return}N.value=`重新获取(${e}s`},1e3)}function q(){return b()}function J(e,t=`neutral`){F.value=e,I.value=t}function Y(){F.value=``,I.value=`neutral`}function X(e){if(typeof e!=`object`||!e)return`请求失败`;let t=e,n=t.message;if(typeof n==`string`&&n.trim())return n.trim();let r=t.errors;if(typeof r==`object`&&r&&!Array.isArray(r)){let e=Object.values(r).flatMap(e=>Array.isArray(e)?e.map(e=>String(e)):[]);if(e.length)return e.join(`
`)}return`请求失败`}let Z=null,Q=null,$=!1;async function we(){R.value=``,z.value=w();let e=L.value,t=typeof document<`u`?document.title:``;if(!e){R.value=`缺少赛事访问地址请从正确入口进入`;return}try{let n=await fetch(`${q()}/api/v1/public/competitions/by-slug/${encodeURIComponent(e)}`,{headers:{Accept:`application/json`}});if(!n.ok){R.value=n.status===404?`赛事不存在或未发布请核对访问地址`:`无法加载赛事信息`;return}let r=await n.json();z.value=ee(r.branding_json??r.branding??null);let i=z.value.documentTitle;typeof document<`u`&&(C(i)?document.title=i:document.title=t);let a=z.value.login.themePrimary;if(C(a)&&typeof document<`u`){Z===null&&(Z=document.body.style.getPropertyValue(`--primary`)||``),document.body.style.setProperty(`--primary`,a);let e=`${a}14`;document.body.style.setProperty(`--primary-soft`,e)}let o=z.value.login.faviconUrl;if(C(o)&&typeof document<`u`){let e=document.querySelector(`link[rel~="icon"]`);e||(e=document.createElement(`link`),e.rel=`icon`,document.head.appendChild(e)),Q===null&&(Q=e.getAttribute(`href`)||``),e.href=o}}catch{R.value=`网络错误无法校验赛事链接`}}async function Te(){if(M.value)return;let e=O.value.trim();if(!/^1[3-9]\d{9}$/.test(e)){A.value=!0,j.value=!1,J(`请先填写正确手机号`,`error`);return}A.value=!1,j.value=!1,Y(),M.value=!0,N.value=`发送中...`;let t=`${q()}${g}`;try{let n=await fetch(t,{method:`POST`,headers:{"Content-Type":`application/json`,Accept:`application/json`,"X-Requested-With":`XMLHttpRequest`},body:JSON.stringify({mobile:e})}),r=await n.json().catch(()=>({}));if(!n.ok){J(X(r),`error`),N.value=`获取验证码`,M.value=!1,K();return}let i=r;i.debug_code?J(`本次验证码${i.debug_code}`,`success`):Y(),Ce()}catch{J(`网络错误请确认后端已启动Vite /api 代理至 php artisan serve 端口 vite.config`,`error`),N.value=`获取验证码`,M.value=!1,K()}}async function Ee(){let e=/^1[3-9]\d{9}$/.test(O.value.trim()),t=k.value.trim(),n=t.length>0;if(A.value=!e,j.value=e&&!n,!e){J(`请先填写正确手机号`,`error`);return}if(!n){J(`请输入验证码`,`error`);return}if(Y(),P.value=!0,J(`登录中...`,`neutral`),!L.value){J(`缺少赛事访问地址请从正确入口进入`,`error`),P.value=!1;return}let r=`${q()}${_}`;try{let e=await fetch(r,{method:`POST`,headers:{"Content-Type":`application/json`,Accept:`application/json`,"X-Requested-With":`XMLHttpRequest`},body:JSON.stringify({mobile:O.value.trim(),code:t,competition_slug:L.value})}),n=await e.json().catch(()=>({}));if(!e.ok){J(X(n),`error`);return}Y(),localStorage.setItem(v,n.token),localStorage.setItem(`cxxfds_user`,JSON.stringify(n.user));let i=typeof E.query.redirect==`string`?E.query.redirect:``;if(i&&i.startsWith(`/`)){await D.replace(i);return}let a=L.value;a?await D.replace({name:`participant-apply`,params:{slug:a}}):await D.replace(`/c`)}catch{J(`网络错误请确认后端已启动`,`error`)}finally{P.value=!1}}return a(()=>{typeof document<`u`&&(document.documentElement.classList.add(`cxxfds-login-page`),$=!0),document.body.classList.add(`login-page-wls`),we()}),i(()=>{if(typeof document<`u`&&$&&(document.documentElement.classList.remove(`cxxfds-login-page`),$=!1),document.body.classList.remove(`login-page-wls`),K(),typeof document<`u`&&(Z!==null&&(Z===``?(document.body.style.removeProperty(`--primary`),document.body.style.removeProperty(`--primary-soft`)):document.body.style.setProperty(`--primary`,Z),Z=null),Q!==null)){let e=document.querySelector(`link[rel~="icon"]`);e&&(Q===``?e.removeAttribute(`href`):e.href=Q),Q=null}}),(i,a)=>(p(),m(`div`,te,[h(`div`,ne,[h(`aside`,re,[h(`div`,ie,[W.value?(p(),m(`img`,{key:0,src:W.value,alt:``,class:`login-page-wls__logo-img`,width:`72`,height:`72`},null,8,ae)):(p(),m(`svg`,oe,[...a[4]||=[n(`<defs><linearGradient id="loginPetalGrad" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" stop-color="#dc4a54"></stop><stop offset="45%" stop-color="#b40010"></stop><stop offset="100%" stop-color="#7d070c"></stop></linearGradient><path id="loginPetal" d="M50 50
C46.2 44.2 44.2 34.5 46.2 27.2
C47.3 23.6 48.6 21.2 50 20.2

@ -0,0 +1 @@
import{D as e,G as t,O as n,W as r,Z as i,_t as a,at as o,b as s,in as c,k as l,m as u,q as d,st as f,w as p,x as m}from"./vue.runtime.esm-bundler-6_koQ1g6.js";import{l as h,p as g}from"./api-DouN6RcT.js";import{C as _,w as v}from"./index-Cvi7ILa8.js";import{t as y}from"./_plugin-vue_export-helper-S3RvzygF.js";/* empty css *//* empty css */import{a as b,i as x,r as S,t as C}from"./competitionBranding-BQASm1w0.js";var w={class:`participant-layout`},T={class:`navbar navbar-expand-lg layout-header`},E={class:`container-fluid px-3 px-lg-4`},D={class:`navbar-brand mb-0 prototype-title`},O={class:`dropdown`},k={class:`header-user dropdown-toggle`,type:`button`,"data-bs-toggle":`dropdown`,"aria-expanded":`false`},A={class:`header-user-name`},j={class:`dropdown-menu dropdown-menu-end header-user-menu`},M={class:`container-fluid px-3 px-lg-4 py-3 layout-main`},N={class:`row layout-main-row g-3`},P={class:`col-12 col-md-2 col-lg-2 layout-sider`},F={class:`card h-100`},I={class:`card-body`},L={class:`nav flex-column gap-2`},R={class:`col-12 col-md-10 col-lg-10 participant-main-col`},z={id:`layoutFooter`,class:`border-top bg-white text-center py-2 small text-secondary prototype-subtitle`},B=`#052d62`,V=y(l({__name:`MainLayout`,setup(l){let y=v(),V=_(),H=s(()=>String(V.params.slug??``).trim()),U=a(S()),W=a(``),G=s(()=>b(U.value,W.value)),K=s(()=>{if(x(U.value.login.footerCopyright))return U.value.login.footerCopyright;let e=W.value.trim();return e?`版权所有:${e}`:`版权所有`});async function q(){let e=H.value;if(!e){U.value=S(),W.value=``;return}try{let t=await fetch(`${g()}/api/v1/public/competitions/by-slug/${encodeURIComponent(e)}`,{headers:{Accept:`application/json`}});if(!t.ok){U.value=S(),W.value=``;return}let n=await t.json(),r=n.data!=null&&typeof n.data==`object`&&!Array.isArray(n.data)?n.data:n;W.value=String(r.name??``),U.value=C(r.branding_json??null)}catch{U.value=S(),W.value=``}}o(H,()=>{q()},{immediate:!0});function J(e){let t=e.trim().replace(`#`,``);return/^[0-9a-f]{6}$/i.test(t)?`${parseInt(t.slice(0,2),16)}, ${parseInt(t.slice(2,4),16)}, ${parseInt(t.slice(4,6),16)}`:null}function Y(){if(typeof document>`u`)return;let e=U.value.login.themePrimary?.trim()??``,t=x(e)?/^(?:#|rgb|hsl)/i.test(e)?e:`#${e.replace(/^#/,``)}`:B;if(document.body.style.setProperty(`--primary`,t),document.body.style.setProperty(`--bs-primary`,t),t.startsWith(`#`)){document.body.style.setProperty(`--primary-soft`,`${t}14`);let e=J(t);e&&document.body.style.setProperty(`--bs-primary-rgb`,e)}else document.body.style.removeProperty(`--primary-soft`),document.body.style.removeProperty(`--bs-primary-rgb`)}o(U,()=>Y(),{deep:!0,immediate:!0});let X=a(``),Z=s(()=>X.value||`用户`);async function Q(){let e=localStorage.getItem(h),t=g();if(e)try{let n=await fetch(`${t}/api/me`,{headers:{Authorization:`Bearer ${e}`,Accept:`application/json`}});if(!n.ok)return;let r=await n.json();X.value=r.name||r.mobile||``}catch{}}function $(){localStorage.removeItem(h),localStorage.removeItem(`cxxfds_user`);let e=H.value;e?y.push({name:`participant-login`,params:{slug:e}}):y.push(`/c`)}return r(()=>{document.body.classList.add(`prototype-page`,`user-mobile-no-menu`),Q()}),t(()=>{document.body.classList.remove(`prototype-page`,`user-mobile-no-menu`),document.body.style.removeProperty(`--primary`),document.body.style.removeProperty(`--primary-soft`),document.body.style.removeProperty(`--bs-primary`),document.body.style.removeProperty(`--bs-primary-rgb`)}),(t,r)=>{let a=i(`router-link`),o=i(`router-view`);return d(),p(`div`,w,[m(`header`,T,[m(`div`,E,[m(`span`,D,c(G.value),1),m(`div`,O,[m(`button`,k,[r[0]||=m(`svg`,{width:`22`,height:`22`,viewBox:`0 0 24 24`,fill:`none`,"aria-hidden":`true`},[m(`circle`,{cx:`12`,cy:`12`,r:`9.5`,stroke:`currentColor`,"stroke-width":`2`}),m(`circle`,{cx:`12`,cy:`9`,r:`3.2`,fill:`currentColor`}),m(`path`,{d:`M6.8 18.2c1.1-2.4 3-3.6 5.2-3.6s4.1 1.2 5.2 3.6`,fill:`currentColor`})],-1),m(`span`,A,c(Z.value),1)]),m(`ul`,j,[m(`li`,null,[m(`a`,{class:`dropdown-item text-danger`,href:`javascript:void(0)`,onClick:u($,[`prevent`])},[...r[1]||=[m(`span`,{class:`menu-icon`},``,-1),e(`退出登录 `,-1)]])])])])])]),m(`div`,M,[m(`div`,N,[m(`aside`,P,[m(`div`,F,[m(`div`,I,[m(`nav`,L,[n(a,{class:`nav-link text-start`,"active-class":`active`,to:{name:`participant-apply`,params:{slug:H.value}}},{default:f(()=>[...r[2]||=[e(` 赛事报名 `,-1)]]),_:1},8,[`to`])])])])]),m(`main`,R,[n(o)])])]),m(`footer`,z,c(K.value),1)])}}}),[[`__scopeId`,`data-v-87706cd0`]]);export{V as default};

@ -1 +0,0 @@
[data-v-4f23f878] a.router-link-active.nav-link{color:#8f000c;background:#f3e7e9;font-weight:600}#app .participant-layout{flex-direction:column;flex:auto;width:100%;min-height:100svh;display:flex}body.prototype-page.user-mobile-no-menu .participant-layout .layout-header>.container-fluid,body.prototype-page.user-mobile-no-menu .participant-layout .layout-main.container-fluid{width:100%;margin-left:0;margin-right:0;max-width:none!important}.participant-layout .layout-main{flex:auto;min-height:0;overflow:visible}.participant-layout .layout-main>.layout-main-row{min-height:0;overflow:visible}.participant-layout .layout-main>.layout-main-row>main{min-width:0}.participant-layout #layoutFooter{flex-shrink:0;margin-top:auto}@media (width>=768px){html:has(body.prototype-page.user-mobile-no-menu){height:100%;max-height:100dvh;overflow:hidden}body.prototype-page.user-mobile-no-menu{height:100%;max-height:100dvh;margin:0;overflow:hidden}body.prototype-page.user-mobile-no-menu #app{height:100%;max-height:100dvh;overflow:hidden;min-height:0!important}#app .participant-layout{height:100%;max-height:100%;overflow:hidden;min-height:0!important}.participant-layout .layout-main{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.participant-layout .layout-main>.layout-main-row{flex-wrap:nowrap;flex:1;align-items:stretch;min-height:0;max-height:100%;overflow:visible}}.participant-layout .track-custom-select .dropdown-menu{z-index:1085}.participant-layout main .card{overflow:visible}

@ -1 +0,0 @@
import{D as e,G as t,O as n,W as r,Z as i,_t as a,at as o,b as s,in as c,k as l,m as u,q as d,st as f,w as p,x as m}from"./vue.runtime.esm-bundler-6_koQ1g6.js";import{l as h,p as g}from"./api-CH6mod_b.js";import{C as _,w as v}from"./index-BuWJwSk4.js";import{t as y}from"./_plugin-vue_export-helper-S3RvzygF.js";/* empty css *//* empty css */import{a as b,i as x,r as S,t as C}from"./competitionBranding-BQASm1w0.js";var w={class:`participant-layout`},T={class:`navbar navbar-expand-lg layout-header`},E={class:`container-fluid px-3 px-lg-4`},D={class:`navbar-brand mb-0 prototype-title`},O={class:`dropdown`},k={class:`header-user dropdown-toggle`,type:`button`,"data-bs-toggle":`dropdown`,"aria-expanded":`false`},A={class:`header-user-name`},j={class:`dropdown-menu dropdown-menu-end header-user-menu`},M={class:`container-fluid px-3 px-lg-4 py-3 layout-main`},N={class:`row layout-main-row g-3`},P={class:`col-12 col-md-2 col-lg-2 layout-sider`},F={class:`card h-100`},I={class:`card-body`},L={class:`nav flex-column gap-2`},R={class:`col-12 col-md-10 col-lg-10 participant-main-col`},z={id:`layoutFooter`,class:`border-top bg-white text-center py-2 small text-secondary prototype-subtitle`},B=y(l({__name:`MainLayout`,setup(l){let y=v(),B=_(),V=s(()=>String(B.params.slug??``).trim()),H=a(S()),U=a(``),W=s(()=>b(H.value,U.value)),G=s(()=>{if(x(H.value.login.footerCopyright))return H.value.login.footerCopyright;let e=U.value.trim();return e?`版权所有:${e}`:`版权所有`});async function K(){let e=V.value;if(!e){H.value=S(),U.value=``;return}try{let t=await fetch(`${g()}/api/v1/public/competitions/by-slug/${encodeURIComponent(e)}`,{headers:{Accept:`application/json`}});if(!t.ok){H.value=S(),U.value=``;return}let n=await t.json(),r=n.data!=null&&typeof n.data==`object`&&!Array.isArray(n.data)?n.data:n;U.value=String(r.name??``),H.value=C(r.branding_json??null)}catch{H.value=S(),U.value=``}}o(V,()=>{K()},{immediate:!0});function q(){if(typeof document>`u`)return;let e=H.value.login.themePrimary?.trim()??``;x(e)?(document.body.style.setProperty(`--primary`,e),document.body.style.setProperty(`--primary-soft`,`${e}14`)):(document.body.style.removeProperty(`--primary`),document.body.style.removeProperty(`--primary-soft`))}o(H,()=>q(),{deep:!0});let J=a(``),Y=s(()=>J.value||`用户`);async function X(){let e=localStorage.getItem(h),t=g();if(e)try{let n=await fetch(`${t}/api/me`,{headers:{Authorization:`Bearer ${e}`,Accept:`application/json`}});if(!n.ok)return;let r=await n.json();J.value=r.name||r.mobile||``}catch{}}function Z(){localStorage.removeItem(h),localStorage.removeItem(`cxxfds_user`);let e=V.value;e?y.push({name:`participant-login`,params:{slug:e}}):y.push(`/c`)}return r(()=>{document.body.classList.add(`prototype-page`,`user-mobile-no-menu`),X()}),t(()=>{document.body.classList.remove(`prototype-page`,`user-mobile-no-menu`),document.body.style.removeProperty(`--primary`),document.body.style.removeProperty(`--primary-soft`)}),(t,r)=>{let a=i(`router-link`),o=i(`router-view`);return d(),p(`div`,w,[m(`header`,T,[m(`div`,E,[m(`span`,D,c(W.value),1),m(`div`,O,[m(`button`,k,[r[0]||=m(`svg`,{width:`22`,height:`22`,viewBox:`0 0 24 24`,fill:`none`,"aria-hidden":`true`},[m(`circle`,{cx:`12`,cy:`12`,r:`9.5`,stroke:`currentColor`,"stroke-width":`2`}),m(`circle`,{cx:`12`,cy:`9`,r:`3.2`,fill:`currentColor`}),m(`path`,{d:`M6.8 18.2c1.1-2.4 3-3.6 5.2-3.6s4.1 1.2 5.2 3.6`,fill:`currentColor`})],-1),m(`span`,A,c(Y.value),1)]),m(`ul`,j,[m(`li`,null,[m(`a`,{class:`dropdown-item text-danger`,href:`javascript:void(0)`,onClick:u(Z,[`prevent`])},[...r[1]||=[m(`span`,{class:`menu-icon`},``,-1),e(`退出登录 `,-1)]])])])])])]),m(`div`,M,[m(`div`,N,[m(`aside`,P,[m(`div`,F,[m(`div`,I,[m(`nav`,L,[n(a,{class:`nav-link text-start`,"active-class":`active`,to:{name:`participant-apply`,params:{slug:V.value}}},{default:f(()=>[...r[2]||=[e(` 赛事报名 `,-1)]]),_:1},8,[`to`])])])])]),m(`main`,R,[n(o)])])]),m(`footer`,z,c(G.value),1)])}}}),[[`__scopeId`,`data-v-4f23f878`]]);export{B as default};

@ -0,0 +1 @@
[data-v-87706cd0] a.router-link-active.nav-link{color:#052d62;background:#eef7fc;font-weight:600}[data-v-87706cd0] .layout-sider .nav-link:not(.router-link-active){color:#3a4a5c}#app .participant-layout{flex-direction:column;flex:auto;width:100%;min-height:100svh;display:flex}body.prototype-page.user-mobile-no-menu .participant-layout .layout-header>.container-fluid,body.prototype-page.user-mobile-no-menu .participant-layout .layout-main.container-fluid{width:100%;margin-left:0;margin-right:0;max-width:none!important}.participant-layout .layout-main{flex:auto;min-height:0;overflow:visible}.participant-layout .layout-main>.layout-main-row{min-height:0;overflow:visible}.participant-layout .layout-main>.layout-main-row>main{min-width:0}.participant-layout #layoutFooter{flex-shrink:0;margin-top:auto}@media (width>=768px){html:has(body.prototype-page.user-mobile-no-menu){height:100%;max-height:100dvh;overflow:hidden}body.prototype-page.user-mobile-no-menu{height:100%;max-height:100dvh;margin:0;overflow:hidden}body.prototype-page.user-mobile-no-menu #app{height:100%;max-height:100dvh;overflow:hidden;min-height:0!important}#app .participant-layout{height:100%;max-height:100%;overflow:hidden;min-height:0!important}.participant-layout .layout-main{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.participant-layout .layout-main>.layout-main-row{flex-wrap:nowrap;flex:1;align-items:stretch;min-height:0;max-height:100%;overflow:visible}}.participant-layout .track-custom-select .dropdown-menu{z-index:1085}.participant-layout main .card{overflow:visible}

@ -1 +1 @@
import{C as e,D as t,_t as n,ct as r,d as i,in as a,k as o,p as s,q as c,w as l,x as u}from"./vue.runtime.esm-bundler-6_koQ1g6.js";import{w as d}from"./index-BuWJwSk4.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`},_=o({__name:`ParticipantLandingView`,setup(o){let _=d(),v=n(``),y=n(``);function b(){let e=v.value.trim();if(y.value=``,!e){y.value=`请填写访问地址`;return}_.push({name:`participant-login`,params:{slug:e}})}return(n,o)=>(c(),l(`div`,f,[u(`div`,p,[u(`div`,m,[u(`div`,h,[o[1]||=u(`h1`,{class:`h5 mb-2`},`赛事报名入口`,-1),o[2]||=u(`p`,{class:`text-muted small mb-3`},[t(` 请输入主办方提供的`),u(`strong`,null,`访问地址`),t(`(与后台赛事「访问地址」一致,可为中文);也可直接使用完整链接 `),u(`code`,{class:`small`},`/c/您的访问地址/login`),t(``)],-1),o[3]||=u(`label`,{class:`form-label small`},`访问地址slug`,-1),r(u(`input`,{"onUpdate:modelValue":o[0]||=e=>v.value=e,type:`text`,class:`form-control mb-2`,autocomplete:`off`,placeholder:`例如:新消费大赛-2026`,onKeyup:s(b,[`enter`])},null,544),[[i,v.value,void 0,{trim:!0}]]),y.value?(c(),l(`p`,g,a(y.value),1)):e(``,!0),u(`button`,{type:`button`,class:`btn btn-danger w-100`,onClick:b},`前往登录`)])])])]))}});export{_ as default};
import{C as e,D as t,_t as n,ct as r,d as i,in as a,k as o,p as s,q as c,w as l,x as u}from"./vue.runtime.esm-bundler-6_koQ1g6.js";import{w as d}from"./index-Cvi7ILa8.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`},_=o({__name:`ParticipantLandingView`,setup(o){let _=d(),v=n(``),y=n(``);function b(){let e=v.value.trim();if(y.value=``,!e){y.value=`请填写访问地址`;return}_.push({name:`participant-login`,params:{slug:e}})}return(n,o)=>(c(),l(`div`,f,[u(`div`,p,[u(`div`,m,[u(`div`,h,[o[1]||=u(`h1`,{class:`h5 mb-2`},`赛事报名入口`,-1),o[2]||=u(`p`,{class:`text-muted small mb-3`},[t(` 请输入主办方提供的`),u(`strong`,null,`访问地址`),t(`(与后台赛事「访问地址」一致,可为中文);也可直接使用完整链接 `),u(`code`,{class:`small`},`/c/您的访问地址/login`),t(``)],-1),o[3]||=u(`label`,{class:`form-label small`},`访问地址slug`,-1),r(u(`input`,{"onUpdate:modelValue":o[0]||=e=>v.value=e,type:`text`,class:`form-control mb-2`,autocomplete:`off`,placeholder:`例如:新消费大赛-2026`,onKeyup:s(b,[`enter`])},null,544),[[i,v.value,void 0,{trim:!0}]]),y.value?(c(),l(`p`,g,a(y.value),1)):e(``,!0),u(`button`,{type:`button`,class:`btn btn-danger w-100`,onClick:b},`前往登录`)])])])]))}});export{_ as default};

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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1,5 +1,5 @@
import{$t as e,C as t,E as n,Et as r,G as i,W as a,_t as o,b as s,ct as c,d as l,in as u,k as d,m as f,q as p,w as m,x as h}from"./vue.runtime.esm-bundler-6_koQ1g6.js";import{p as g,s as _,x as v}from"./api-CH6mod_b.js";import{C as y,w as b}from"./index-BuWJwSk4.js";/* empty css */import{i as x,r as S,t as C}from"./competitionBranding-BQASm1w0.js";/* empty css */var ee={class:`login-page-wls__wrap`},te={class:`login-page-wls__inner`},ne={class:`login-page-wls__brand`,"aria-label":`赛事说明`},re={class:`login-page-wls__logo`,"aria-hidden":`true`},ie=[`src`],w={key:1,viewBox:`0 0 100 100`,width:`72`,height:`72`,xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`},T={key:0,class:`login-page-wls__mark`},E=[`innerHTML`],D={key:1,class:`login-page-wls__title`},O=[`innerHTML`],k={class:`login-page-wls__panel`},A={class:`login-page-wls__card`},ae={class:`login-page-wls__card-title`},oe=[`disabled`],se={key:0,class:`login-page-wls__footer`},ce={class:`login-page-wls__copyright`},j=d({__name:`ReviewerLoginView`,setup(d){let j=y(),M=b(),N=o(``),P=o(``),F=o(!1),I=o(!1),L=o(!1),R=o(``),z=o(`neutral`),B=s(()=>String(j.params.slug??``).trim()),V=o(``),H=o(S()),U=s(()=>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 W(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}let le=s(()=>{let e=H.value.login.markLine;return x(e)?W(e):``}),ue=s(()=>{let e=H.value.login.headline;return x(e)?W(e):``}),G=s(()=>{if(V.value)return V.value;let e=H.value.login.slogan;return x(e)?e:``}),de=s(()=>!!V.value),fe=s(()=>x(H.value.login.cardWelcome)?H.value.login.cardWelcome.replace(/登陆/g,`登录`):`评审员登录`),K=s(()=>x(H.value.login.footerCopyright)?H.value.login.footerCopyright:``),q=s(()=>x(H.value.login.logoUrl)?H.value.login.logoUrl:``),J=null,Y=null,X=!1;function Z(){return g()}function Q(e,t=`neutral`){R.value=e,z.value=t}function $(){R.value=``,z.value=`neutral`}function pe(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 me(){V.value=``,H.value=S();let e=B.value,t=typeof document<`u`?document.title:``;if(!e){V.value=`缺少赛事访问地址请从正确入口进入`;return}try{let n=await fetch(`${Z()}/api/v1/public/competitions/by-slug/${encodeURIComponent(e)}`,{headers:{Accept:`application/json`}});if(!n.ok){V.value=n.status===404?`赛事不存在或未发布请核对访问地址`:`无法加载赛事信息`;return}let r=await n.json(),i=typeof r==`object`&&r&&`data`in r?r.data:r;H.value=C(i?.branding_json??i?.branding??null);let a=H.value.documentTitle;typeof document<`u`&&(document.title=x(a)?`${he(a)} · 评审登录`:t||`评审登录`);let o=H.value.login.themePrimary;x(o)&&typeof document<`u`&&(J===null&&(J=document.body.style.getPropertyValue(`--primary`)||``),document.body.style.setProperty(`--primary`,o),document.body.style.setProperty(`--primary-soft`,`${o}14`));let s=H.value.login.faviconUrl;if(x(s)&&typeof document<`u`){let e=document.querySelector(`link[rel~="icon"]`);e||(e=document.createElement(`link`),e.rel=`icon`,document.head.appendChild(e)),Y===null&&(Y=e.getAttribute(`href`)||``),e.href=s}}catch{V.value=`网络错误无法校验赛事链接`}}function he(e){return e.replace(/[\u200B-\u200D\uFEFF]/gu,``).trim()}async function ge(){let e=N.value.trim(),t=P.value;if(F.value=!e,I.value=!t,!e){Q(`请填写账号`,`error`);return}if(!t){Q(`请填写密码`,`error`);return}if(!B.value){Q(`缺少赛事访问地址`,`error`);return}$(),L.value=!0,Q(`登录中`,`neutral`);try{let n=`${Z()}${_}`,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){Q(pe(i),`error`);return}$();let a=i.token;if(typeof a!=`string`||!a){Q(`登录响应异常缺少令牌`,`error`);return}v(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{Q(`网络错误请确认后端已启动`,`error`)}finally{L.value=!1}}return a(()=>{typeof document<`u`&&(document.documentElement.classList.add(`cxxfds-login-page`),X=!0),document.body.classList.add(`login-page-wls`),me()}),i(()=>{if(typeof document<`u`&&X&&(document.documentElement.classList.remove(`cxxfds-login-page`),X=!1),document.body.classList.remove(`login-page-wls`),typeof document<`u`&&(J!==null&&(J===``?(document.body.style.removeProperty(`--primary`),document.body.style.removeProperty(`--primary-soft`)):document.body.style.setProperty(`--primary`,J),J=null),Y!==null)){let e=document.querySelector(`link[rel~="icon"]`);e&&(Y===``?e.removeAttribute(`href`):e.href=Y),Y=null}}),(i,a)=>(p(),m(`div`,ee,[h(`div`,te,[h(`aside`,ne,[h(`div`,re,[q.value?(p(),m(`img`,{key:0,src:q.value,alt:``,class:`login-page-wls__logo-img`,width:`72`,height:`72`},null,8,ie)):(p(),m(`svg`,w,[...a[4]||=[n(`<defs><linearGradient id="reviewerLoginPetalGrad" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" stop-color="#dc4a54"></stop><stop offset="45%" stop-color="#b40010"></stop><stop offset="100%" stop-color="#7d070c"></stop></linearGradient><path id="reviewerLoginPetal" d="M50 50
import{$t as e,C as t,E as n,Et as r,G as i,W as a,_t as o,b as s,ct as c,d as l,in as u,k as d,m as f,q as p,w as m,x as h}from"./vue.runtime.esm-bundler-6_koQ1g6.js";import{S as g,p as _,s as v}from"./api-DouN6RcT.js";import{C as y,w as b}from"./index-Cvi7ILa8.js";/* empty css */import{i as x,r as S,t as C}from"./competitionBranding-BQASm1w0.js";/* empty css */var ee={class:`login-page-wls__wrap`},te={class:`login-page-wls__inner`},ne={class:`login-page-wls__brand`,"aria-label":`赛事说明`},re={class:`login-page-wls__logo`,"aria-hidden":`true`},ie=[`src`],w={key:1,viewBox:`0 0 100 100`,width:`72`,height:`72`,xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`},T={key:0,class:`login-page-wls__mark`},E=[`innerHTML`],D={key:1,class:`login-page-wls__title`},O=[`innerHTML`],k={class:`login-page-wls__panel`},A={class:`login-page-wls__card`},ae={class:`login-page-wls__card-title`},oe=[`disabled`],se={key:0,class:`login-page-wls__footer`},ce={class:`login-page-wls__copyright`},j=d({__name:`ReviewerLoginView`,setup(d){let j=y(),M=b(),N=o(``),P=o(``),F=o(!1),I=o(!1),L=o(!1),R=o(``),z=o(`neutral`),B=s(()=>String(j.params.slug??``).trim()),V=o(``),H=o(S()),U=s(()=>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 W(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}let le=s(()=>{let e=H.value.login.markLine;return x(e)?W(e):``}),ue=s(()=>{let e=H.value.login.headline;return x(e)?W(e):``}),G=s(()=>{if(V.value)return V.value;let e=H.value.login.slogan;return x(e)?e:``}),de=s(()=>!!V.value),fe=s(()=>x(H.value.login.cardWelcome)?H.value.login.cardWelcome.replace(/登陆/g,`登录`):`评审员登录`),K=s(()=>x(H.value.login.footerCopyright)?H.value.login.footerCopyright:``),q=s(()=>x(H.value.login.logoUrl)?H.value.login.logoUrl:``),J=null,Y=null,X=!1;function Z(){return _()}function Q(e,t=`neutral`){R.value=e,z.value=t}function $(){R.value=``,z.value=`neutral`}function pe(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 me(){V.value=``,H.value=S();let e=B.value,t=typeof document<`u`?document.title:``;if(!e){V.value=`缺少赛事访问地址请从正确入口进入`;return}try{let n=await fetch(`${Z()}/api/v1/public/competitions/by-slug/${encodeURIComponent(e)}`,{headers:{Accept:`application/json`}});if(!n.ok){V.value=n.status===404?`赛事不存在或未发布请核对访问地址`:`无法加载赛事信息`;return}let r=await n.json(),i=typeof r==`object`&&r&&`data`in r?r.data:r;H.value=C(i?.branding_json??i?.branding??null);let a=H.value.documentTitle;typeof document<`u`&&(document.title=x(a)?`${he(a)} · 评审登录`:t||`评审登录`);let o=H.value.login.themePrimary;x(o)&&typeof document<`u`&&(J===null&&(J=document.body.style.getPropertyValue(`--primary`)||``),document.body.style.setProperty(`--primary`,o),document.body.style.setProperty(`--primary-soft`,`${o}14`));let s=H.value.login.faviconUrl;if(x(s)&&typeof document<`u`){let e=document.querySelector(`link[rel~="icon"]`);e||(e=document.createElement(`link`),e.rel=`icon`,document.head.appendChild(e)),Y===null&&(Y=e.getAttribute(`href`)||``),e.href=s}}catch{V.value=`网络错误无法校验赛事链接`}}function he(e){return e.replace(/[\u200B-\u200D\uFEFF]/gu,``).trim()}async function ge(){let e=N.value.trim(),t=P.value;if(F.value=!e,I.value=!t,!e){Q(`请填写账号`,`error`);return}if(!t){Q(`请填写密码`,`error`);return}if(!B.value){Q(`缺少赛事访问地址`,`error`);return}$(),L.value=!0,Q(`登录中`,`neutral`);try{let n=`${Z()}${v}`,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){Q(pe(i),`error`);return}$();let a=i.token;if(typeof a!=`string`||!a){Q(`登录响应异常缺少令牌`,`error`);return}g(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{Q(`网络错误请确认后端已启动`,`error`)}finally{L.value=!1}}return a(()=>{typeof document<`u`&&(document.documentElement.classList.add(`cxxfds-login-page`),X=!0),document.body.classList.add(`login-page-wls`),me()}),i(()=>{if(typeof document<`u`&&X&&(document.documentElement.classList.remove(`cxxfds-login-page`),X=!1),document.body.classList.remove(`login-page-wls`),typeof document<`u`&&(J!==null&&(J===``?(document.body.style.removeProperty(`--primary`),document.body.style.removeProperty(`--primary-soft`)):document.body.style.setProperty(`--primary`,J),J=null),Y!==null)){let e=document.querySelector(`link[rel~="icon"]`);e&&(Y===``?e.removeAttribute(`href`):e.href=Y),Y=null}}),(i,a)=>(p(),m(`div`,ee,[h(`div`,te,[h(`aside`,ne,[h(`div`,re,[q.value?(p(),m(`img`,{key:0,src:q.value,alt:``,class:`login-page-wls__logo-img`,width:`72`,height:`72`},null,8,ie)):(p(),m(`svg`,w,[...a[4]||=[n(`<defs><linearGradient id="reviewerLoginPetalGrad" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" stop-color="#dc4a54"></stop><stop offset="45%" stop-color="#b40010"></stop><stop offset="100%" stop-color="#7d070c"></stop></linearGradient><path id="reviewerLoginPetal" d="M50 50
C46.2 44.2 44.2 34.5 46.2 27.2
C47.3 23.6 48.6 21.2 50 20.2
C51.4 21.2 52.7 23.6 53.8 27.2

@ -0,0 +1 @@
import{$t as e,C as t,D as n,O as r,W as i,Y as a,Z as o,_t as s,at as c,b as l,g as u,in as d,k as f,q as p,st as m,w as h,x as g}from"./vue.runtime.esm-bundler-6_koQ1g6.js";import{o as _,p as v,v as y}from"./api-DouN6RcT.js";import{C as b}from"./index-Cvi7ILa8.js";import{t as x}from"./_plugin-vue_export-helper-S3RvzygF.js";var S={class:`reviewer-projects-page d-flex flex-column flex-grow-1 h-100 min-h-0`},C={class:`container-fluid p-3 p-md-4`},w={key:0,class:`alert alert-warning py-2 small mb-3`,role:`alert`},T={key:1,class:`small text-secondary mb-3`},E={key:2,class:`small text-secondary mb-2`,"aria-live":`polite`},D={class:`table-responsive table-panel mb-0`},O={class:`table table-hover align-middle mb-0 admin-list-table`},k={key:0},A={class:`text-secondary text-nowrap`},j={class:`reviewer-only-col`},M={class:`reviewer-only-col`},N={class:`reviewer-only-col text-nowrap`},P={class:`admin-actions-cell`},F={key:3,class:`d-flex align-items-center justify-content-between flex-wrap gap-2 mt-3`,"aria-label":`分页`},I=[`disabled`],L={class:`small text-secondary`},R=[`disabled`],z=x(f({__name:`ReviewerProjectsView`,setup(f){let x=b(),z=l(()=>String(x.params.slug??``).trim()),B=s([]),V=s(!1),H=s(``),U=s({current_page:1,last_page:1,per_page:20,total:0}),W=s(1);async function G(){let e=z.value,{token:t}=y();if(!e||!t){H.value=`未登录或缺少赛事信息`;return}V.value=!0,H.value=``;try{let n=new URLSearchParams;n.set(`competition_slug`,e),n.set(`page`,String(W.value)),n.set(`per_page`,`20`);let r=`${v()}${_}?${n.toString()}`,i=await fetch(r,{headers:{Authorization:`Bearer ${t}`,Accept:`application/json`}});if(!i.ok){let e=await i.json().catch(()=>({}));H.value=(typeof e==`object`&&e&&`message`in e?String(e.message??``):``)||`加载失败(${i.status}`,B.value=[];return}let a=await i.json();B.value=Array.isArray(a.data)?a.data:[];let o=a.meta;o&&(U.value={current_page:o.current_page??1,last_page:o.last_page??1,per_page:o.per_page??20,total:o.total??0})}catch{H.value=`网络错误,请稍后重试`,B.value=[]}finally{V.value=!1}}c([z,W],()=>void G()),i(()=>void G());let K=l(()=>{let e=U.value.total;return e<=0?`暂无报名数据`:`${e} 条,第 ${U.value.current_page} / ${U.value.last_page}`});function q(){W.value>1&&--W.value}function J(){W.value<U.value.last_page&&(W.value+=1)}function Y(e){return(U.value.current_page-1)*U.value.per_page+e+1}function X(e){return e===0?`评审`:`查看`}return(i,s)=>{let c=o(`router-link`);return p(),h(`div`,S,[g(`div`,C,[s[2]||=g(`div`,{class:`d-flex justify-content-between align-items-center flex-wrap gap-2 mb-3`},[g(`h5`,{class:`mb-0 section-title`},`项目评审`)],-1),H.value?(p(),h(`p`,w,d(H.value),1)):V.value?(p(),h(`p`,T,`加载中…`)):(p(),h(`p`,E,d(K.value),1)),g(`div`,D,[g(`table`,O,[s[1]||=g(`thead`,{class:`table-light`},[g(`tr`,null,[g(`th`,{class:`text-nowrap`,style:{width:`3.5rem`}},`序号`),g(`th`,null,`项目编号`),g(`th`,null,`项目名称`),g(`th`,null,`姓名`),g(`th`,null,`项目所在地`),g(`th`,{class:`reviewer-only-col`},`毕业院校`),g(`th`,{class:`reviewer-only-col`},`最高学历`),g(`th`,null,`赛道`),g(`th`,null,`评分`),g(`th`,{class:`reviewer-only-col`},`提交时间`),g(`th`,{class:`admin-actions-head`},`操作`)])],-1),g(`tbody`,null,[!V.value&&B.value.length===0&&!H.value?(p(),h(`tr`,k,[...s[0]||=[g(`td`,{colspan:`11`,class:`text-center text-secondary py-4`},`暂无符合条件的数据`,-1)]])):t(``,!0),(p(!0),h(u,null,a(B.value,(t,i)=>(p(),h(`tr`,{key:t.id,"data-list-row":``},[g(`td`,A,d(Y(i)),1),g(`td`,null,d(t.project_code),1),g(`td`,null,d(t.project_name||``),1),g(`td`,null,d(t.player_name||``),1),g(`td`,null,d(t.location_label),1),g(`td`,j,d(t.school||``),1),g(`td`,M,d(t.degree||``),1),g(`td`,null,d(t.track_title||t.track_code||``),1),g(`td`,{class:e({"admin-total-pending-text":t.score_is_pending})},d(t.score_display),3),g(`td`,N,d(t.submitted_at||``),1),g(`td`,P,[r(c,{class:`btn btn-sm btn-outline-primary`,to:{name:`reviewer-application-detail`,params:{slug:z.value,id:String(t.id)}}},{default:m(()=>[n(d(X(i)),1)]),_:2},1032,[`to`])])]))),128))])])]),U.value.last_page>1?(p(),h(`nav`,F,[g(`button`,{type:`button`,class:`btn btn-sm btn-light border`,disabled:W.value<=1||V.value,onClick:q},` 上一页 `,8,I),g(`span`,L,d(U.value.current_page)+` / `+d(U.value.last_page),1),g(`button`,{type:`button`,class:`btn btn-sm btn-light border`,disabled:W.value>=U.value.last_page||V.value,onClick:J},` 下一页 `,8,R)])):t(``,!0)])])}}}),[[`__scopeId`,`data-v-631ee0e2`]]);export{z as default};

@ -1 +0,0 @@
import{$t as e,C as t,D as n,O as r,W as i,Y as a,Z as o,_t as s,at as c,b as l,g as u,in as d,k as f,q as p,st as m,w as h,x as g}from"./vue.runtime.esm-bundler-6_koQ1g6.js";import{_,o as v,p as y}from"./api-CH6mod_b.js";import{C as b}from"./index-BuWJwSk4.js";import{t as x}from"./_plugin-vue_export-helper-S3RvzygF.js";var S={class:`reviewer-projects-page d-flex flex-column flex-grow-1 h-100 min-h-0`},C={class:`container-fluid p-3 p-md-4`},w={key:0,class:`alert alert-warning py-2 small mb-3`,role:`alert`},T={key:1,class:`small text-secondary mb-3`},E={key:2,class:`small text-secondary mb-2`,"aria-live":`polite`},D={class:`table-responsive table-panel mb-0`},O={class:`table table-hover align-middle mb-0 admin-list-table`},k={key:0},A={class:`text-secondary text-nowrap`},j={class:`reviewer-only-col`},M={class:`reviewer-only-col`},N={class:`reviewer-only-col text-nowrap`},P={class:`admin-actions-cell`},F={key:3,class:`d-flex align-items-center justify-content-between flex-wrap gap-2 mt-3`,"aria-label":`分页`},I=[`disabled`],L={class:`small text-secondary`},R=[`disabled`],z=x(f({__name:`ReviewerProjectsView`,setup(f){let x=b(),z=l(()=>String(x.params.slug??``).trim()),B=s([]),V=s(!1),H=s(``),U=s({current_page:1,last_page:1,per_page:20,total:0}),W=s(1);async function G(){let e=z.value,{token:t}=_();if(!e||!t){H.value=`未登录或缺少赛事信息`;return}V.value=!0,H.value=``;try{let n=new URLSearchParams;n.set(`competition_slug`,e),n.set(`page`,String(W.value)),n.set(`per_page`,`20`);let r=`${y()}${v}?${n.toString()}`,i=await fetch(r,{headers:{Authorization:`Bearer ${t}`,Accept:`application/json`}});if(!i.ok){let e=await i.json().catch(()=>({}));H.value=(typeof e==`object`&&e&&`message`in e?String(e.message??``):``)||`加载失败(${i.status}`,B.value=[];return}let a=await i.json();B.value=Array.isArray(a.data)?a.data:[];let o=a.meta;o&&(U.value={current_page:o.current_page??1,last_page:o.last_page??1,per_page:o.per_page??20,total:o.total??0})}catch{H.value=`网络错误,请稍后重试`,B.value=[]}finally{V.value=!1}}c([z,W],()=>void G()),i(()=>void G());let K=l(()=>{let e=U.value.total;return e<=0?`暂无报名数据`:`${e} 条,第 ${U.value.current_page} / ${U.value.last_page}`});function q(){W.value>1&&--W.value}function J(){W.value<U.value.last_page&&(W.value+=1)}function Y(e){return(U.value.current_page-1)*U.value.per_page+e+1}function X(e){return e===0?`评审`:`查看`}return(i,s)=>{let c=o(`router-link`);return p(),h(`div`,S,[g(`div`,C,[s[2]||=g(`div`,{class:`d-flex justify-content-between align-items-center flex-wrap gap-2 mb-3`},[g(`h5`,{class:`mb-0 section-title`},`项目评审`)],-1),H.value?(p(),h(`p`,w,d(H.value),1)):V.value?(p(),h(`p`,T,`加载中…`)):(p(),h(`p`,E,d(K.value),1)),g(`div`,D,[g(`table`,O,[s[1]||=g(`thead`,{class:`table-light`},[g(`tr`,null,[g(`th`,{class:`text-nowrap`,style:{width:`3.5rem`}},`序号`),g(`th`,null,`项目编号`),g(`th`,null,`项目名称`),g(`th`,null,`姓名`),g(`th`,null,`项目所在地`),g(`th`,{class:`reviewer-only-col`},`毕业院校`),g(`th`,{class:`reviewer-only-col`},`最高学历`),g(`th`,null,`赛道`),g(`th`,null,`评分`),g(`th`,{class:`reviewer-only-col`},`提交时间`),g(`th`,{class:`admin-actions-head`},`操作`)])],-1),g(`tbody`,null,[!V.value&&B.value.length===0&&!H.value?(p(),h(`tr`,k,[...s[0]||=[g(`td`,{colspan:`11`,class:`text-center text-secondary py-4`},`暂无符合条件的数据`,-1)]])):t(``,!0),(p(!0),h(u,null,a(B.value,(t,i)=>(p(),h(`tr`,{key:t.id,"data-list-row":``},[g(`td`,A,d(Y(i)),1),g(`td`,null,d(t.project_code),1),g(`td`,null,d(t.project_name||``),1),g(`td`,null,d(t.player_name||``),1),g(`td`,null,d(t.location_label),1),g(`td`,j,d(t.school||``),1),g(`td`,M,d(t.degree||``),1),g(`td`,null,d(t.track_title||t.track_code||``),1),g(`td`,{class:e({"admin-total-pending-text":t.score_is_pending})},d(t.score_display),3),g(`td`,N,d(t.submitted_at||``),1),g(`td`,P,[r(c,{class:`btn btn-sm btn-outline-primary`,to:{name:`reviewer-application-detail`,params:{slug:z.value,id:String(t.id)}}},{default:m(()=>[n(d(X(i)),1)]),_:2},1032,[`to`])])]))),128))])])]),U.value.last_page>1?(p(),h(`nav`,F,[g(`button`,{type:`button`,class:`btn btn-sm btn-light border`,disabled:W.value<=1||V.value,onClick:q},` 上一页 `,8,I),g(`span`,L,d(U.value.current_page)+` / `+d(U.value.last_page),1),g(`button`,{type:`button`,class:`btn btn-sm btn-light border`,disabled:W.value>=U.value.last_page||V.value,onClick:J},` 下一页 `,8,R)])):t(``,!0)])])}}}),[[`__scopeId`,`data-v-631ee0e2`]]);export{z as default};

@ -1 +1 @@
import{_t as e,b as t}from"./vue.runtime.esm-bundler-6_koQ1g6.js";import{t as n}from"./api-CH6mod_b.js";import{D as r}from"./index-BuWJwSk4.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,b as t}from"./vue.runtime.esm-bundler-6_koQ1g6.js";import{t as n}from"./api-DouN6RcT.js";import{D as r}from"./index-Cvi7ILa8.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 +0,0 @@
function e(){return 60}var t=`/api/auth/sms/send`,n=`/api/auth/sms/login`,r=`cxxfds_token`,i=`cxxfds_participant_competition_slug`,a=`cxxfds_admin_token`,o=`cxxfds_admin_competition_id`,s=`cxxfds_reviewer_token`,c=`cxxfds_reviewer_competition_slug`,l=`/api/v1/review/auth/login`,u=`/api/v1/review/me`,d=`/api/v1/review/applications`;function f(e,t){let n=new URLSearchParams({competition_slug:t});return`${_()}/api/v1/review/applications/${e}?${n.toString()}`}function p(e){return`${_()}/api/v1/review/applications/${e}/score`}var m=`/v1/admin`;function h(){let e=`/admin/`;return e===`/`?`/admin/login`:`${e.endsWith(`/`)?e.slice(0,-1):e}/admin/login`}function g(){let e=`false`.replace(/^['"]|['"]$/g,``);return e===`true`||e===`1`||e===`yes`||e===`on`}function _(){return(void 0)?.trim()?(void 0).trim().replace(/\/$/,``):(window.location.hostname,``)}function v(e,t,n){let r=new URLSearchParams({competition_slug:n});return`${_()}/api/v1/review/applications/${e}/files/${t}/download?${r.toString()}`}function y(){let e=(void 0)?.trim();return e?e.replace(/\/$/,``):`${_()}/api${m}`}function b(){return{token:localStorage.getItem(`cxxfds_reviewer_token`)??``,competitionSlug:localStorage.getItem(`cxxfds_reviewer_competition_slug`)??``}}function x(e,t){localStorage.setItem(s,e),localStorage.setItem(c,t)}function S(){localStorage.removeItem(s),localStorage.removeItem(c)}function C(e){return/^\/c\/[^/]+\/review(?:\/|$)/.test(e)}export{b as _,t as a,p as b,u as c,S as d,y as f,h as g,C as h,n as i,r as l,e as m,a as n,d as o,_ as p,i as r,l as s,o as t,g as u,f as v,x,v as y};

@ -0,0 +1 @@
function e(){return 60}var t=`/api/auth/sms/send`,n=`/api/auth/sms/login`,r=`cxxfds_token`,i=`cxxfds_participant_competition_slug`,a=`cxxfds_admin_token`,o=`cxxfds_admin_competition_id`,s=`cxxfds_reviewer_token`,c=`cxxfds_reviewer_competition_slug`,l=`/api/v1/review/auth/login`,u=`/api/v1/review/me`,d=`/api/v1/review/applications`;function f(e,t){let n=new URLSearchParams({competition_slug:t});return`${_()}/api/v1/review/applications/${e}?${n.toString()}`}function p(e){return`${_()}/api/v1/review/applications/${e}/score`}var m=`/v1/admin`;function h(){let e=`/admin/`;return e===`/`?`/admin/login`:`${e.endsWith(`/`)?e.slice(0,-1):e}/admin/login`}function g(){let e=`false`.replace(/^['"]|['"]$/g,``);return e===`true`||e===`1`||e===`yes`||e===`on`}function _(){return(void 0)?.trim()?(void 0).trim().replace(/\/$/,``):(window.location.hostname,``)}function v(e){let t=String(e??``).trim();if(!t)return t;if(/^https?:\/\//i.test(t))try{let e=new URL(t),n=e.pathname.replace(/\/{2,}/g,`/`);return e.pathname=n.startsWith(`/`)?n:`/${n}`,e.toString()}catch{return t.replace(/([^:])\/\/+/g,`$1/`)}return t.replace(/\/{2,}/g,`/`)}function y(e,t,n){let r=new URLSearchParams({competition_slug:n});return`${_()}/api/v1/review/applications/${e}/files/${t}/download?${r.toString()}`}function b(){let e=(void 0)?.trim();return e?e.replace(/\/$/,``):`${_()}/api${m}`}function x(){return{token:localStorage.getItem(`cxxfds_reviewer_token`)??``,competitionSlug:localStorage.getItem(`cxxfds_reviewer_competition_slug`)??``}}function S(e,t){localStorage.setItem(s,e),localStorage.setItem(c,t)}function C(){localStorage.removeItem(s),localStorage.removeItem(c)}function w(e){return/^\/c\/[^/]+\/review(?:\/|$)/.test(e)}export{S,h as _,t as a,y as b,u as c,C as d,b as f,w as g,v as h,n as i,r as l,e as m,a as n,d as o,_ as p,i as r,l as s,o as t,g as u,x as v,p as x,f as y};

@ -1 +1 @@
import{u as e}from"./api-CH6mod_b.js";import{S as t,_ as n,d as r,f as i,m as a,r as o,x as s}from"./index-BuWJwSk4.js";function c(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 l(t){if(e()){let e=a(),n=t.page??1,r=t.per_page??15,i=(n-1)*r;return{data:e.slice(i,i+r),meta:{current_page:n,last_page:Math.max(1,Math.ceil(e.length/r)),per_page:r,total:e.length}}}let{data:n}=await o.get(`/competitions`,{params:t});return c(n)}async function u(t){if(e()){let e=i(t);if(!e)throw Error(`赛事不存在`);return e}let{data:n}=await o.get(`/competitions/${t}`),r=n?.data??n;if(!r||typeof r!=`object`)throw Error(`赛事详情无效`);return r}async function d(t){if(e())return s(t);let{data:n}=await o.post(`/competitions`,t),r=n?.data??n;if(!r||typeof r!=`object`)throw Error(`创建响应无效`);return r}async function f(t,n){if(e()){let e=i(t);if(!e)throw Error(`赛事不存在`);return s({...e,...n,id:t})}let{data:r}=await o.put(`/competitions/${t}`,n),a=r?.data??r;if(!a||typeof a!=`object`)throw Error(`更新响应无效`);return a}async function p(t,n){if(e()){let e=i(t);if(!e)throw Error(`赛事不存在`);return s({...e,...n,id:t})}let{data:r}=await o.patch(`/competitions/${t}`,n),a=r?.data??r;if(!a||typeof a!=`object`)throw Error(`更新响应无效`);return a}async function m(t){if(e())return n(t);let{data:r}=await o.get(`/competitions/${t}/tracks`),i=r?.data??r;if(!Array.isArray(i))throw Error(`赛道列表无效`);return i}async function h(n,r){if(e())return t(n,{...r});let{data:i}=await o.post(`/competitions/${n}/tracks`,r),a=i?.data??i;if(!a||typeof a!=`object`)throw Error(`创建赛道无效`);return a}async function g(n,r,i){if(e())return t(n,{...i,id:r});let{data:a}=await o.put(`/competitions/${n}/tracks/${r}`,i),s=a?.data??a;if(!s||typeof s!=`object`)throw Error(`更新赛道无效`);return s}async function _(t,n){if(e()){r(t,n);return}await o.delete(`/competitions/${t}/tracks/${n}`)}export{l as a,f as c,u as i,g as l,h as n,m as o,_ as r,p as s,d as t};
import{u as e}from"./api-DouN6RcT.js";import{S as t,_ as n,d as r,f as i,m as a,r as o,x as s}from"./index-Cvi7ILa8.js";function c(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 l(t){if(e()){let e=a(),n=t.page??1,r=t.per_page??15,i=(n-1)*r;return{data:e.slice(i,i+r),meta:{current_page:n,last_page:Math.max(1,Math.ceil(e.length/r)),per_page:r,total:e.length}}}let{data:n}=await o.get(`/competitions`,{params:t});return c(n)}async function u(t){if(e()){let e=i(t);if(!e)throw Error(`赛事不存在`);return e}let{data:n}=await o.get(`/competitions/${t}`),r=n?.data??n;if(!r||typeof r!=`object`)throw Error(`赛事详情无效`);return r}async function d(t){if(e())return s(t);let{data:n}=await o.post(`/competitions`,t),r=n?.data??n;if(!r||typeof r!=`object`)throw Error(`创建响应无效`);return r}async function f(t,n){if(e()){let e=i(t);if(!e)throw Error(`赛事不存在`);return s({...e,...n,id:t})}let{data:r}=await o.put(`/competitions/${t}`,n),a=r?.data??r;if(!a||typeof a!=`object`)throw Error(`更新响应无效`);return a}async function p(t,n){if(e()){let e=i(t);if(!e)throw Error(`赛事不存在`);return s({...e,...n,id:t})}let{data:r}=await o.patch(`/competitions/${t}`,n),a=r?.data??r;if(!a||typeof a!=`object`)throw Error(`更新响应无效`);return a}async function m(t){if(e())return n(t);let{data:r}=await o.get(`/competitions/${t}/tracks`),i=r?.data??r;if(!Array.isArray(i))throw Error(`赛道列表无效`);return i}async function h(n,r){if(e())return t(n,{...r});let{data:i}=await o.post(`/competitions/${n}/tracks`,r),a=i?.data??i;if(!a||typeof a!=`object`)throw Error(`创建赛道无效`);return a}async function g(n,r,i){if(e())return t(n,{...i,id:r});let{data:a}=await o.put(`/competitions/${n}/tracks/${r}`,i),s=a?.data??a;if(!s||typeof s!=`object`)throw Error(`更新赛道无效`);return s}async function _(t,n){if(e()){r(t,n);return}await o.delete(`/competitions/${t}/tracks/${n}`)}export{l as a,f as c,u as i,g as l,h as n,m as o,_ as r,p as s,d as t};

File diff suppressed because one or more lines are too long

@ -1 +1 @@
html.cxxfds-login-page{-webkit-text-size-adjust:100%;font-size:15px!important}html.cxxfds-login-page body.login-page-wls{font-size:15px;line-height:normal}body.login-page-wls #app{flex-direction:column;flex:auto;width:100%;min-height:0;display:flex}body.login-page-wls #app>.login-page-wls__wrap{flex:auto;min-height:0}body.login-page-wls h1.login-page-wls__title{font-family:inherit;font-size:inherit;letter-spacing:inherit;font-weight:700;line-height:inherit;margin:0 0 .75rem}body.login-page-wls h2.login-page-wls__card-title{font-family:inherit}body.login-page-wls .login-page-wls__title-main{font-weight:700}body.login-page-wls .login-page-wls__logo-img{object-fit:contain;width:72px;height:72px;display:block}body.login-page-wls .login-page-wls__hint--error{color:#c62828}body.login-page-wls .login-page-wls__hint--success{color:#2e7d32}body.login-page-wls .login-page-wls__input.login-page-wls__input--error{border-color:#e57373}body.login-page-wls .login-page-wls__input.login-page-wls__input--error:focus{border-color:#e57373;box-shadow:0 0 0 3px #e5737333}body.login-page-wls .login-page-wls__slogan.login-page-wls__slogan--error{color:#e65100}
html.cxxfds-login-page{-webkit-text-size-adjust:100%;font-size:15px!important}html.cxxfds-login-page body.login-page-wls{font-size:15px;line-height:normal}body.login-page-wls #app{flex-direction:column;flex:auto;width:100%;min-height:0;display:flex}body.login-page-wls #app>.login-page-wls__wrap{flex:auto;min-height:0}body.login-page-wls h1.login-page-wls__title{font-family:inherit;font-size:inherit;letter-spacing:inherit;font-weight:700;line-height:inherit;margin:0 0 .75rem}body.login-page-wls h2.login-page-wls__card-title{font-family:inherit}body.login-page-wls .login-page-wls__title-main{font-weight:700}body.login-page-wls .login-page-wls__logo-img{object-fit:contain;width:72px;height:72px;display:block}body.login-page-wls .login-page-wls__hint--error{color:#052d62}body.login-page-wls .login-page-wls__hint--success{box-sizing:border-box;color:#052d62!important;background:#eef7fc!important;border:1px solid #052d6224!important;border-radius:8px!important;margin-top:.75rem!important;padding:.5rem .75rem!important}body.login-page-wls .login-page-wls__input.login-page-wls__input--error{border-color:#052d62;box-shadow:0 0 0 2px #052d6238}body.login-page-wls .login-page-wls__input.login-page-wls__input--error:focus{border-color:#052d62;box-shadow:0 0 0 3px #052d6240}body.login-page-wls .login-page-wls__slogan.login-page-wls__slogan--error{color:#052d62}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1183,8 +1183,10 @@ a[target="_blank"]:focus {
text-decoration: none;
}
/* 登录页:内部系统布局 + 元禾主色(:root --primary */
/* 登录页:浅蓝整体背景;按钮仍用 --login-page-wls-btn-surface */
body.login-page-wls {
--login-page-wls-surface: linear-gradient(135deg, #f4f9fd 0%, #e8f3fa 38%, #eef7fc 100%);
--login-page-wls-btn-surface: radial-gradient(ellipse at 78% 22%, rgba(255, 211, 106, 0.14), transparent 42%), radial-gradient(ellipse at 24% 72%, rgba(255, 211, 106, 0.08), transparent 46%), radial-gradient(ellipse at 50% 50%, rgba(13, 84, 162, 0.24), transparent 58%), linear-gradient(128deg, #073b74 0%, #052d62 34%, #071f50 68%, #041433 100%);
margin: 0;
min-height: 100vh;
min-height: 100dvh;
@ -1192,7 +1194,8 @@ body.login-page-wls {
flex-direction: column;
font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Arial, sans-serif;
color: #333;
background: linear-gradient(135deg, #fefcfc 0%, #fbe9eb 36%, #f7f5f6 88%);
background: var(--login-page-wls-surface);
background-color: #eef7fc;
-webkit-font-smoothing: antialiased;
}
@ -1229,6 +1232,20 @@ body.login-page-wls *::after {
max-width: 520px;
padding: 0;
text-align: left;
color: #222;
}
.login-page-wls__brand .login-page-wls__title,
.login-page-wls__brand .login-page-wls__title-main,
.login-page-wls__brand .login-page-wls__title-sub,
.login-page-wls__brand .login-page-wls__mark-en {
color: inherit;
}
.login-page-wls__brand .login-page-wls__mark,
.login-page-wls__brand .login-page-wls__mark-cn,
.login-page-wls__brand .login-page-wls__slogan {
color: #6b6f76;
}
.login-page-wls__logo {
@ -1353,8 +1370,8 @@ body.login-page-wls *::after {
}
.login-page-wls__input:focus {
border-color: var(--primary);
box-shadow: 0 0 0 3px rgba(180, 0, 16, 0.12);
border-color: #052d62;
box-shadow: 0 0 0 3px rgba(5, 45, 98, 0.22);
}
.login-page-wls__code-row {
@ -1372,21 +1389,23 @@ body.login-page-wls *::after {
.login-page-wls__code-btn {
min-width: 6.3rem;
padding: 0 0.7rem;
border: 1px solid #dfc4c7;
border: 1px solid rgba(255, 211, 106, 0.38);
border-radius: 8px;
background: #fff7f8;
color: #9f0f1c;
background: var(--login-page-wls-btn-surface);
background-color: #052d62;
color: #fff;
font-size: 0.82rem;
font-weight: 500;
text-shadow: none;
-webkit-text-stroke: 0;
cursor: pointer;
transition: all 0.15s ease;
transition: filter 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease;
}
.login-page-wls__code-btn:hover {
background: #feeef0;
border-color: #d9a6ac;
.login-page-wls__code-btn:hover:not(:disabled) {
filter: brightness(1.12);
border-color: rgba(255, 244, 204, 0.55);
box-shadow: 0 0 0 1px rgba(143, 232, 255, 0.12);
}
.login-page-wls__code-btn:disabled {
@ -1422,7 +1441,8 @@ body.login-page-wls *::after {
}
.login-page-wls__role-select:focus {
border-color: var(--primary);
border-color: #052d62;
box-shadow: 0 0 0 3px rgba(5, 45, 98, 0.18);
}
.login-page-wls__submit {
@ -1432,17 +1452,19 @@ body.login-page-wls *::after {
font-size: 1rem;
font-weight: 600;
color: #fff;
border: none;
border: 1px solid rgba(255, 211, 106, 0.38);
border-radius: 8px;
cursor: pointer;
background: linear-gradient(180deg, #cf2c3a 0%, #ba1424 55%, #a90a1a 100%);
box-shadow: 0 2px 8px rgba(180, 0, 16, 0.16);
transition: filter 0.15s ease, transform 0.1s ease, box-shadow 0.15s ease;
background: var(--login-page-wls-btn-surface);
background-color: #052d62;
box-shadow: 0 2px 14px rgba(0, 0, 0, 0.28);
transition: filter 0.15s ease, transform 0.1s ease, box-shadow 0.15s ease, border-color 0.15s ease;
}
.login-page-wls__submit:hover {
filter: brightness(1.03);
box-shadow: 0 2px 10px rgba(180, 0, 16, 0.2);
filter: brightness(1.1);
border-color: rgba(255, 244, 204, 0.5);
box-shadow: 0 4px 18px rgba(0, 0, 0, 0.32);
}
.login-page-wls__submit:active {
@ -1482,7 +1504,8 @@ body.login-page-wls *::after {
}
.login-page-wls__form--invalid .login-page-wls__input:invalid {
border-color: #e57373;
border-color: #052d62;
box-shadow: 0 0 0 2px rgba(5, 45, 98, 0.2);
}
.login-page-wls__footer {
@ -1493,7 +1516,7 @@ body.login-page-wls *::after {
.login-page-wls__copyright {
margin: 0;
font-size: 0.75rem;
color: #aaa;
color: #8b8e94;
}
.notice-modal-dialog {

@ -5,9 +5,9 @@
<link rel="icon" type="image/svg+xml" href="/admin/favicon.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
<title>江苏创青春新消费大赛报名系统 - cxxfds-web</title>
<script type="module" crossorigin src="/admin/assets/index-BuWJwSk4.js"></script>
<script type="module" crossorigin src="/admin/assets/index-Cvi7ILa8.js"></script>
<link rel="modulepreload" crossorigin href="/admin/assets/vue.runtime.esm-bundler-6_koQ1g6.js">
<link rel="modulepreload" crossorigin href="/admin/assets/api-CH6mod_b.js">
<link rel="modulepreload" crossorigin href="/admin/assets/api-DouN6RcT.js">
<link rel="stylesheet" crossorigin href="/admin/assets/index-D-Fnc-kX.css">
</head>
<body>

@ -1177,8 +1177,10 @@ a[target="_blank"]:focus {
text-decoration: none;
}
/* 登录页:内部系统布局 + 元禾主色(:root --primary */
/* 登录页:浅蓝整体背景;按钮仍用 --login-page-wls-btn-surface */
body.login-page-wls {
--login-page-wls-surface: linear-gradient(135deg, #f4f9fd 0%, #e8f3fa 38%, #eef7fc 100%);
--login-page-wls-btn-surface: radial-gradient(ellipse at 78% 22%, rgba(255, 211, 106, 0.14), transparent 42%), radial-gradient(ellipse at 24% 72%, rgba(255, 211, 106, 0.08), transparent 46%), radial-gradient(ellipse at 50% 50%, rgba(13, 84, 162, 0.24), transparent 58%), linear-gradient(128deg, #073b74 0%, #052d62 34%, #071f50 68%, #041433 100%);
margin: 0;
min-height: 100vh;
min-height: 100dvh;
@ -1186,7 +1188,8 @@ body.login-page-wls {
flex-direction: column;
font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Arial, sans-serif;
color: #333;
background: linear-gradient(135deg, #fefcfc 0%, #fbe9eb 36%, #f7f5f6 88%);
background: var(--login-page-wls-surface);
background-color: #eef7fc;
-webkit-font-smoothing: antialiased;
}
@ -1223,6 +1226,20 @@ body.login-page-wls *::after {
max-width: 520px;
padding: 0;
text-align: left;
color: #222;
}
.login-page-wls__brand .login-page-wls__title,
.login-page-wls__brand .login-page-wls__title-main,
.login-page-wls__brand .login-page-wls__title-sub,
.login-page-wls__brand .login-page-wls__mark-en {
color: inherit;
}
.login-page-wls__brand .login-page-wls__mark,
.login-page-wls__brand .login-page-wls__mark-cn,
.login-page-wls__brand .login-page-wls__slogan {
color: #6b6f76;
}
.login-page-wls__logo {
@ -1347,8 +1364,8 @@ body.login-page-wls *::after {
}
.login-page-wls__input:focus {
border-color: var(--primary);
box-shadow: 0 0 0 3px rgba(180, 0, 16, 0.12);
border-color: #052d62;
box-shadow: 0 0 0 3px rgba(5, 45, 98, 0.22);
}
.login-page-wls__code-row {
@ -1366,21 +1383,23 @@ body.login-page-wls *::after {
.login-page-wls__code-btn {
min-width: 6.3rem;
padding: 0 0.7rem;
border: 1px solid #dfc4c7;
border: 1px solid rgba(255, 211, 106, 0.38);
border-radius: 8px;
background: #fff7f8;
color: #9f0f1c;
background: var(--login-page-wls-btn-surface);
background-color: #052d62;
color: #fff;
font-size: 0.82rem;
font-weight: 500;
text-shadow: none;
-webkit-text-stroke: 0;
cursor: pointer;
transition: all 0.15s ease;
transition: filter 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease;
}
.login-page-wls__code-btn:hover {
background: #feeef0;
border-color: #d9a6ac;
.login-page-wls__code-btn:hover:not(:disabled) {
filter: brightness(1.12);
border-color: rgba(255, 244, 204, 0.55);
box-shadow: 0 0 0 1px rgba(143, 232, 255, 0.12);
}
.login-page-wls__code-btn:disabled {
@ -1416,7 +1435,8 @@ body.login-page-wls *::after {
}
.login-page-wls__role-select:focus {
border-color: var(--primary);
border-color: #052d62;
box-shadow: 0 0 0 3px rgba(5, 45, 98, 0.18);
}
.login-page-wls__submit {
@ -1426,17 +1446,19 @@ body.login-page-wls *::after {
font-size: 1rem;
font-weight: 600;
color: #fff;
border: none;
border: 1px solid rgba(255, 211, 106, 0.38);
border-radius: 8px;
cursor: pointer;
background: linear-gradient(180deg, #cf2c3a 0%, #ba1424 55%, #a90a1a 100%);
box-shadow: 0 2px 8px rgba(180, 0, 16, 0.16);
transition: filter 0.15s ease, transform 0.1s ease, box-shadow 0.15s ease;
background: var(--login-page-wls-btn-surface);
background-color: #052d62;
box-shadow: 0 2px 14px rgba(0, 0, 0, 0.28);
transition: filter 0.15s ease, transform 0.1s ease, box-shadow 0.15s ease, border-color 0.15s ease;
}
.login-page-wls__submit:hover {
filter: brightness(1.03);
box-shadow: 0 2px 10px rgba(180, 0, 16, 0.2);
filter: brightness(1.1);
border-color: rgba(255, 244, 204, 0.5);
box-shadow: 0 4px 18px rgba(0, 0, 0, 0.32);
}
.login-page-wls__submit:active {
@ -1476,7 +1498,8 @@ body.login-page-wls *::after {
}
.login-page-wls__form--invalid .login-page-wls__input:invalid {
border-color: #e57373;
border-color: #052d62;
box-shadow: 0 0 0 2px rgba(5, 45, 98, 0.2);
}
.login-page-wls__footer {
@ -1487,7 +1510,7 @@ body.login-page-wls *::after {
.login-page-wls__copyright {
margin: 0;
font-size: 0.75rem;
color: #aaa;
color: #8b8e94;
}
.notice-modal-dialog {

@ -934,6 +934,7 @@
background: linear-gradient(90deg, rgba(255,211,106,0.62), rgba(101,216,255,0.36), rgba(255,255,255,0.08));
opacity: 0.72;
pointer-events: none;
z-index: 0;
}
.timeline-step {
@ -944,14 +945,17 @@
background: transparent;
border: 0;
min-height: 132px;
overflow: hidden;
overflow: visible;
z-index: 1;
}
.timeline-step::after {
content: none;
}
.timeline-step span {
.timeline-step > span {
position: relative;
z-index: 1;
display: inline-grid;
place-items: center;
width: 34px;
@ -1416,25 +1420,114 @@
grid-template-columns: 1fr;
}
.timeline {
overflow: visible;
}
/* 参赛指南卡片勿裁切时间轴数字光晕/左侧露头 */
.section[id="guide"] .section-card {
overflow: visible;
}
.timeline::before {
content: "";
position: absolute;
left: 16px;
right: auto;
top: 34px;
bottom: 28px;
width: 1px;
height: auto;
z-index: 0;
background: linear-gradient(180deg, rgba(255,211,106,0.62), rgba(101,216,255,0.3), transparent);
}
.timeline-step {
padding-left: 48px;
overflow: visible;
padding-left: clamp(52px, 15vw, 58px);
min-height: 112px;
}
.timeline-step span {
/* 只作用于步骤序号(直连 span勿影响 .city-list 内城市标签 */
.timeline-step > span {
position: absolute;
left: 0;
left: 16px;
top: 18px;
transform: translateX(-50%);
z-index: 2;
margin-bottom: 0;
}
/* 纵向时间轴:城市横向一行排列;宽屏 PC 仍为原时间轴 + 叠放样式 */
.timeline-step .city-list {
display: flex;
flex-direction: row;
flex-wrap: nowrap;
align-items: center;
gap: 0;
width: 100%;
max-width: 100%;
justify-content: flex-start;
margin-top: 14px;
padding: 6px 0 4px;
}
.timeline-step .city-list::before {
display: none;
}
.timeline-step .city-pill {
box-sizing: border-box;
width: 40px;
height: 40px;
min-width: 40px;
min-height: 40px;
max-width: 40px;
max-height: 40px;
padding: 0;
margin: 0 !important;
flex: 0 0 40px;
border-radius: 50%;
font-size: 11px;
font-weight: 600;
letter-spacing: -0.02em;
line-height: 1.1;
white-space: nowrap;
overflow: hidden;
}
.timeline-step .city-pill + .city-pill {
margin-left: -5px;
}
.timeline-step .city-pill:nth-child(2),
.timeline-step .city-pill:nth-child(3),
.timeline-step .city-pill:nth-child(4) {
transform: none;
}
.timeline-step:has(.city-list) {
min-height: 0;
padding-bottom: clamp(8px, 2vw, 14px);
}
/* 赛程与奖项区块之间留白;奖项窄屏居中更易读 */
.timeline + .award-grid {
margin-top: 6px;
padding-top: clamp(20px, 5vw, 28px);
}
.award {
text-align: center;
padding: clamp(20px, 4vw, 26px) clamp(16px, 4vw, 22px);
}
.award h3,
.award strong,
.award p {
max-width: 22rem;
margin-left: auto;
margin-right: auto;
}
.track-list {
@ -1755,12 +1848,17 @@
}
.timeline-step {
padding-left: 42px;
padding-left: clamp(48px, 14vw, 54px);
overflow: visible;
}
.timeline-step > span {
left: 16px;
transform: translateX(-50%);
}
.award {
padding-left: 0;
padding-right: 0;
padding: 18px 12px;
}
.requirement-box {
@ -1977,7 +2075,7 @@
<a class="btn btn-primary" href="#about" aria-label="查看主题赛道">
<span class="action-label">主题赛道</span>
</a>
<a class="btn btn-signup" href="/admin/c/xxf/login" aria-label="报名参赛">
<a target="_blank" class="btn btn-signup" href="/admin/c/xxf/login" aria-label="报名参赛">
<span class="action-label">报名参赛</span>
</a>
<a class="btn btn-ghost" href="#guide" aria-label="查看参赛指南">

Loading…
Cancel
Save