You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1 line
7.3 KiB

import{$t as e,C as t,D as n,Et as r,O as ee,P as te,W as i,Y as a,_t as o,b as s,ct as c,d as l,g as u,in as d,k as ne,m as f,p,q as m,u as re,w as h,x as g}from"./vue.runtime.esm-bundler-OsdSFvn7.js";import{O as ie}from"./api-Dpfxb1ca.js";import{l as ae,u as oe}from"./index-CpTiFmNV.js";import{a as se,i as ce,n as le,t as ue}from"./AudienceTicketModal-CYHLODs5.js";import{t as de}from"./types-Nhm4NtmZ.js";var fe={class:`container-fluid audience-page-shell`},pe={class:`audience-session-section`,"aria-label":`赛事场次`},me={key:0,class:`text-muted small py-3`},he={key:1,class:`row g-3`},ge=[`aria-checked`,`aria-disabled`,`onClick`,`onKeydown`],_e={class:`audience-session-card-head`},ve={class:`audience-session-name-wrap`},ye={class:`audience-quota`},be={class:`audience-session-meta`},_={class:`audience-form-panel`},v={class:`audience-form-body`},y={class:`col-12 col-md-6 audience-form-fifth`},b=[`placeholder`,`disabled`],x={class:`col-12 col-md-6 audience-form-fifth`},S=[`value`,`placeholder`],C={class:`col-12 col-md-6 audience-form-fifth`},w=[`placeholder`,`disabled`],T={class:`col-12 col-md-6 audience-form-fifth`},E=[`placeholder`,`disabled`],D={class:`col-12 col-md-6 audience-form-fifth`},O=[`disabled`],k={value:``},A=[`value`],j={class:`col-12 audience-form-actions`},M=[`disabled`],N={key:0,class:`alert alert-danger audience-success`,role:`alert`},P={key:1,class:`alert alert-success audience-success`,role:`status`},F=ne({__name:`AudienceFormView`,setup(ne){let F=ae(),xe=oe(),I=s(()=>String(F.params.slug??``).trim()),L=o([]),R=o(!1),z=o(!1),B=o(null),V=o(``),H=o(null),U=o(!1),W=o(``),G=o(!1),Se=te(`audienceEventBadge`,s(()=>`沪苏科创大赛`)),K=o({name:``,phone:``,company:``,job:``,purpose:``}),q=s(()=>L.value.find(e=>e.id===B.value)??null),J=s(()=>q.value?.is_available===!0),Y=s(()=>J.value?{name:`请输入姓名`,phone:`登录手机号`,company:`请输入单位名称`,job:`请输入职务`,purpose:`请选择观赛目的`}:{name:`请先选择赛事`,phone:`登录手机号`,company:`请先选择赛事`,job:`请先选择赛事`,purpose:`请先选择赛事`});function Ce(e){return e.is_registered?`is-registered`:e.status===`open`?`is-open`:e.status===`full`?`is-full`:``}async function X(){if(I.value){R.value=!0;try{L.value=await ce(I.value),B.value!=null&&(L.value.find(e=>e.id===B.value)?.is_available||(B.value=null))}catch{L.value=[]}finally{R.value=!1}}}function Z(e){e.is_registered||!e.is_available||(B.value=e.id,V.value=``,H.value=null,U.value=!1,W.value=``,G.value=!1)}function Q(e){return G.value?e===`name`?!K.value.name.trim():e===`phone`?!/^1[3-9]\d{9}$/.test(K.value.phone.trim()):!K.value.purpose:!1}async function we(){if(G.value=!0,W.value=``,V.value=``,H.value=null,U.value=!1,!(!q.value||!J.value)&&!(Q(`name`)||Q(`phone`)||Q(`purpose`))){z.value=!0;try{let e=await se(I.value,{audience_session_id:q.value.id,name:K.value.name.trim(),phone:Ee.value,company:K.value.company.trim()||void 0,job:K.value.job.trim()||void 0,purpose:K.value.purpose});H.value=e,V.value=`报名成功!“${e.session_name||q.value.name}”的场次信息将通过手机号发送。`,U.value=!0,B.value=null,G.value=!1,await X()}catch(e){W.value=e instanceof Error?e.message:`报名失败`,await X()}finally{z.value=!1}}}function $(e){let t=e.trim();t&&(K.value.phone=t)}function Te(){try{let e=localStorage.getItem(`cxxfds_audience_user`),t=e?JSON.parse(e):null;return String(t?.mobile??``).trim()}catch{return``}}let Ee=s(()=>K.value.phone.trim());return i(()=>{let{token:e,competitionSlug:t}=ie();if(!e||t!==I.value){xe.replace({name:`audience-login`,params:{slug:I.value}});return}$(Te()),(async()=>{try{$((await le()).mobile??``)}catch{}})(),X()}),(te,i)=>(m(),h(`div`,fe,[i[16]||=g(`div`,{class:`mb-3 form-page-header`},[g(`h5`,{class:`mb-0 form-page-title`},`观众报名`)],-1),g(`section`,pe,[R.value?(m(),h(`div`,me,`场次加载中…`)):(m(),h(`div`,he,[(m(!0),h(u,null,a(L.value,t=>(m(),h(`div`,{key:t.id,class:`col-12 col-md-6 col-xl-3`},[g(`article`,{class:e([`audience-session-card`,{"is-final":t.is_final,"is-registered":t.is_registered}]),role:`radio`,tabindex:`0`,"aria-checked":B.value===t.id,"aria-disabled":t.is_registered||!t.is_available,onClick:e=>Z(t),onKeydown:[p(f(e=>Z(t),[`prevent`]),[`enter`]),p(f(e=>Z(t),[`prevent`]),[`space`])]},[g(`div`,_e,[g(`div`,ve,[g(`h6`,null,d(t.name),1)]),g(`span`,{class:e([`audience-status-badge`,Ce(t)])},d(t.status_label),3)]),g(`div`,ye,[g(`strong`,null,d(t.remaining),1),i[5]||=g(`span`,null,`人`,-1),i[6]||=g(`small`,null,`剩余可报名`,-1)]),g(`div`,be,[g(`span`,null,d(t.event_date_text),1),g(`span`,null,d(t.address),1)]),i[7]||=g(`div`,{class:`audience-session-selected`},`✓ 已选择`,-1)],42,ge)]))),128))]))]),g(`div`,_,[g(`div`,v,[g(`form`,{class:e([`row g-3`,{"was-validated":G.value}]),novalidate:``,onSubmit:f(we,[`prevent`])},[g(`div`,y,[i[8]||=g(`label`,{class:`form-label`,for:`audienceName`},[n(`个人姓名 `),g(`span`,{class:`text-danger`},`*`)],-1),c(g(`input`,{id:`audienceName`,"onUpdate:modelValue":i[0]||=e=>K.value.name=e,class:e([`form-control audience-entry-field`,{"is-invalid":Q(`name`)}]),autocomplete:`name`,placeholder:Y.value.name,disabled:!J.value,required:``},null,10,b),[[l,K.value.name]]),i[9]||=g(`div`,{class:`invalid-feedback`},`请输入个人姓名`,-1)]),g(`div`,x,[i[10]||=g(`label`,{class:`form-label`,for:`audiencePhone`},[n(`联系电话 `),g(`span`,{class:`text-danger`},`*`)],-1),g(`input`,{id:`audiencePhone`,value:K.value.phone,class:e([`form-control audience-entry-field`,{"is-invalid":Q(`phone`)}]),type:`tel`,inputmode:`numeric`,autocomplete:`tel`,placeholder:Y.value.phone,readonly:``,disabled:``,required:``,title:`联系电话与登录手机号一致,不可修改`},null,10,S),i[11]||=g(`div`,{class:`invalid-feedback`},`请输入正确的11位手机号`,-1)]),g(`div`,C,[i[12]||=g(`label`,{class:`form-label`,for:`audienceCompany`},`所属单位`,-1),c(g(`input`,{id:`audienceCompany`,"onUpdate:modelValue":i[1]||=e=>K.value.company=e,class:`form-control audience-entry-field`,autocomplete:`organization`,placeholder:Y.value.company,disabled:!J.value},null,8,w),[[l,K.value.company]])]),g(`div`,T,[i[13]||=g(`label`,{class:`form-label`,for:`audienceJob`},`个人职务`,-1),c(g(`input`,{id:`audienceJob`,"onUpdate:modelValue":i[2]||=e=>K.value.job=e,class:`form-control audience-entry-field`,autocomplete:`organization-title`,placeholder:Y.value.job,disabled:!J.value},null,8,E),[[l,K.value.job]])]),g(`div`,D,[i[14]||=g(`label`,{class:`form-label`,for:`audiencePurpose`},[n(`观赛目的 `),g(`span`,{class:`text-danger`},`*`)],-1),c(g(`select`,{id:`audiencePurpose`,"onUpdate:modelValue":i[3]||=e=>K.value.purpose=e,class:e([`form-select audience-entry-field`,{"is-invalid":Q(`purpose`)}]),disabled:!J.value,required:``},[g(`option`,k,d(Y.value.purpose),1),(m(!0),h(u,null,a(r(de),e=>(m(),h(`option`,{key:e,value:e},d(e),9,A))),128))],10,O),[[re,K.value.purpose]]),i[15]||=g(`div`,{class:`invalid-feedback`},`请选择观赛目的`,-1)]),g(`div`,j,[g(`button`,{class:`btn btn-primary audience-submit-btn`,type:`submit`,disabled:!J.value||z.value},d(J.value?z.value?`提交中…`:`提交观众报名`:`请先选择赛事`),9,M)])],34),W.value?(m(),h(`div`,N,d(W.value),1)):t(``,!0),V.value?(m(),h(`div`,P,d(V.value),1)):t(``,!0)])]),ee(ue,{open:U.value,mode:`success`,slug:I.value,"event-badge":r(Se),registration:H.value,onClose:i[4]||=e=>U.value=!1},null,8,[`open`,`slug`,`event-badge`,`registration`])]))}});export{F as default};