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
10 KiB
1 line
10 KiB
import{A as e,Dt as t,F as n,G as r,J as i,O as a,S as o,T as s,X as c,_ as l,an as u,d as ee,en as d,f as te,gt as ne,h as f,k as re,l as ie,lt as p,m,vt as h,w as g,x as _}from"./vue.runtime.esm-bundler-Dt_AyShc.js";import{a as v,i as ae}from"./portalLocale-vgPGVHT0.js";import{O as oe,_ as se}from"./api-Dpfxb1ca.js";import{f as ce,i as le,n as ue,p as de,r as fe}from"./index-DDrON-pi.js";import{r as pe}from"./site-BxiJvB6v.js";import{a as me,i as he,n as ge,t as _e}from"./AudienceTicketModal-D8Uyp9AQ.js";import{t as y}from"./signupOptionCodes-DKd6kBUW.js";import{n as ve,t as b}from"./localizedSchema-DMb7ZTHA.js";var x=[{key:`name`,type:`text`,label:`个人姓名`,label_i18n:{en:`Full Name`},required:!0,list:!0,placeholder:`请输入姓名`,placeholder_i18n:{en:`Enter your full name`}},{key:`phone`,type:`tel`,label:`联系电话`,label_i18n:{en:`Phone Number`},required:!0,list:!0,placeholder:`请输入11位手机号`,placeholder_i18n:{en:`Enter an 11-digit mobile number`}},{key:`company`,type:`text`,label:`所属单位`,label_i18n:{en:`Organization`},required:!0,list:!0,placeholder:`请输入单位名称`,placeholder_i18n:{en:`Enter your organization`}},{key:`job`,type:`text`,label:`个人职务`,label_i18n:{en:`Job Title`},required:!1,list:!0,placeholder:`请输入职务`,placeholder_i18n:{en:`Enter your job title`}},{key:`purpose`,type:`select`,label:`观赛目的`,label_i18n:{en:`Purpose of Attendance`},required:!0,list:!0,filter:!0,placeholder:`请选择观赛目的`,placeholder_i18n:{en:`Please select a purpose`},options:y.map(e=>({...e}))}];function S(e){if(typeof e!=`object`||!e||Array.isArray(e))return;let t=String(e.en??``).trim();return t?{en:t}:void 0}function C(e){return Array.isArray(e)?e.map(e=>{if(typeof e==`string`)return{label:e,value:e};if(typeof e!=`object`||!e)return null;let t=e,n=String(t.label??t.value??``).trim(),r=String(t.value??t.label??``).trim();if(!n&&!r)return null;let i=S(t.label_i18n);return{label:n||r,value:r||n,...i?{label_i18n:i}:{}}}).filter(e=>e!=null):[]}function w(e){if(!Array.isArray(e)||e.length===0)return x.map(e=>({...e,options:e.options?[...e.options]:void 0}));let t=[];for(let n of e){if(typeof n!=`object`||!n)continue;let e=n,r=String(e.key??``).trim(),i=String(e.type??`text`);if(!r||i===`file`||i===`commitment`)continue;let a=i===`select`?C(e.options):void 0;t.push({key:r,type:i,label:String(e.label??r),required:!!e.required,placeholder:e.placeholder==null?void 0:String(e.placeholder),help:e.help==null?void 0:String(e.help),options:i===`select`&&r===`purpose`&&(!a||a.length===0)?y.map(e=>({...e})):a,label_i18n:S(e.label_i18n),placeholder_i18n:S(e.placeholder_i18n),help_i18n:S(e.help_i18n),list:e.list===!0,filter:e.filter===!0})}return t.length?t:x.map(e=>({...e,options:e.options?[...e.options]:void 0}))}var ye={class:`container-fluid audience-page-shell`},be={class:`mb-3 form-page-header`},xe={class:`mb-0 form-page-title`},Se=[`aria-label`],Ce={key:0,class:`text-muted small py-3`},we={key:1,class:`row g-3`},Te=[`aria-checked`,`aria-disabled`,`onClick`,`onKeydown`],T={class:`audience-session-card-head`},E={class:`audience-session-name-wrap`},D={class:`audience-quota`},O={class:`audience-session-meta`},Ee={class:`audience-session-selected`},De={class:`audience-form-panel`},Oe={class:`audience-form-body`},ke=[`for`],Ae={key:0,class:`text-danger`},je=[`id`,`onUpdate:modelValue`,`disabled`,`required`],Me={value:``},Ne=[`value`],Pe=[`id`,`onUpdate:modelValue`,`placeholder`,`disabled`,`required`],Fe=[`id`,`onUpdate:modelValue`,`type`,`inputmode`,`placeholder`,`disabled`,`readonly`,`required`,`title`],Ie={class:`invalid-feedback`},Le={class:`col-12 audience-form-actions`},Re=[`disabled`],k={key:0,class:`alert alert-danger audience-success`,role:`alert`},ze={key:1,class:`alert alert-success audience-success`,role:`status`},A=e({__name:`AudienceFormView`,setup(e){let{t:y}=le(),x=ce(),S=de(),C=_(()=>String(x.params.slug??``).trim()),A=_(()=>ae(x.query)),j=h([]),M=h(w([])),N=h(!1),P=h(!1),F=h(null),I=h(``),L=h(null),R=h(!1),z=h(``),B=h(!1),V=ne({}),Be=n(`audienceEventBadge`,_(()=>pe)),H=_(()=>j.value.find(e=>e.id===F.value)??null),U=_(()=>H.value?.is_available===!0);function W(e){for(let t of e)V[t.key]??(V[t.key]=``)}function G(e){return b(e,A.value,`label`)||e.label}function K(e){return U.value?b(e,A.value,`placeholder`)||y(`audience.pleaseFill`,{label:G(e)}):y(`audience.selectSessionFirst`)}function q(e){return A.value===`en`&&e.name_en?.trim()?e.name_en.trim():e.name}function Ve(e){return A.value===`en`&&e.event_date_text_en?.trim()?e.event_date_text_en.trim():e.event_date_text}function He(e){return A.value===`en`&&e.address_en?.trim()?e.address_en.trim():e.address}function Ue(e){return e.is_registered?y(`audience.statusRegistered`):e.status===`open`?y(`audience.statusOpen`):e.status===`full`?y(`audience.statusFull`):e.status===`not_started`?y(`audience.statusNotStarted`):e.status===`expired`?y(`audience.statusExpired`):e.status_label}function We(e){return e.is_registered?`is-registered`:e.status===`open`?`is-open`:e.status===`full`?`is-full`:``}async function Ge(){if(C.value)try{let e=await fetch(`${se()}/api/v1/public/competitions/by-slug/${encodeURIComponent(C.value)}`,{headers:{Accept:`application/json`}});if(!e.ok)return;let t=await e.json();M.value=w((t.data!=null&&typeof t.data==`object`&&!Array.isArray(t.data)?t.data:t).audience_form_schema),W(M.value)}catch{M.value=w([]),W(M.value)}}async function J(){if(C.value){N.value=!0;try{j.value=await he(C.value),F.value!=null&&(j.value.find(e=>e.id===F.value)?.is_available||(F.value=null))}catch{j.value=[]}finally{N.value=!1}}}function Y(e){e.is_registered||!e.is_available||(F.value=e.id,I.value=``,L.value=null,R.value=!1,z.value=``,B.value=!1)}function X(e){return e.key===`phone`||e.type===`tel`}function Z(e){if(!B.value)return!1;let t=String(V[e.key]??``).trim();return X(e)?!/^1[3-9]\d{9}$/.test(t):e.type===`email`&&t&&!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t)?!0:e.required?!t:!1}function Ke(e){return X(e)?y(`audience.phoneRequired`):e.type===`email`?y(`apply.invalidEmail`):y(`audience.pleaseFill`,{label:G(e)})}async function qe(){if(B.value=!0,z.value=``,I.value=``,L.value=null,R.value=!1,!(!H.value||!U.value)&&!M.value.some(e=>Z(e))){P.value=!0;try{let e={audience_session_id:H.value.id,name:String(V.name??``).trim(),phone:$.value,purpose:String(V.purpose??``).trim()};for(let t of M.value){if(t.key===`phone`||t.key===`audience_session_id`)continue;let n=String(V[t.key]??``).trim();e[t.key]=n}e.phone=$.value;let t=await me(C.value,e);L.value=t,fe(C.value,`audience`,A.value),I.value=y(`audience.success`,{name:A.value===`en`?t.session_name_en||q(H.value)||t.session_name:t.session_name||q(H.value)}),R.value=!0,F.value=null,B.value=!1,await J()}catch(e){z.value=(e instanceof Error?e.message.trim():``)||y(`audience.failed`),await J()}finally{P.value=!1}}}function Q(e){let t=e.trim();t&&(V.phone=t)}function Je(){try{let e=localStorage.getItem(`cxxfds_audience_user`),t=e?JSON.parse(e):null;return String(t?.mobile??``).trim()}catch{return``}}let $=_(()=>String(V.phone??``).trim());return r(()=>{let{token:e,competitionSlug:t}=oe();if(!e||t!==C.value){S.replace({name:`audience-login`,params:{slug:C.value},query:v(A.value)});return}Q(Je()),W(M.value),(async()=>{try{let e=await ge(C.value);Q(e.mobile??``);let t=ue(C.value,`audience`,e.signup_locale,e.signup_locale_locked);t&&t!==A.value&&await S.replace({name:`audience-form`,params:{slug:C.value},query:v(t)})}catch{}})(),Ge(),J()}),(e,n)=>(i(),s(`div`,ye,[o(`div`,be,[o(`h5`,xe,u(t(y)(`audience.title`)),1)]),o(`section`,{class:`audience-session-section`,"aria-label":t(y)(`audience.sessionsAria`)},[N.value?(i(),s(`div`,Ce,u(t(y)(`audience.loading`)),1)):(i(),s(`div`,we,[(i(!0),s(l,null,c(j.value,e=>(i(),s(`div`,{key:e.id,class:`col-12 col-md-6 col-xl-3`},[o(`article`,{class:d([`audience-session-card`,{"is-final":e.is_final,"is-registered":e.is_registered}]),role:`radio`,tabindex:`0`,"aria-checked":F.value===e.id,"aria-disabled":e.is_registered||!e.is_available,onClick:t=>Y(e),onKeydown:[m(f(t=>Y(e),[`prevent`]),[`enter`]),m(f(t=>Y(e),[`prevent`]),[`space`])]},[o(`div`,T,[o(`div`,E,[o(`h6`,null,u(q(e)),1)]),o(`span`,{class:d([`audience-status-badge`,We(e)])},u(Ue(e)),3)]),o(`div`,D,[o(`strong`,null,u(e.remaining),1),o(`span`,null,u(t(y)(`audience.remainingUnit`)),1),o(`small`,null,u(t(y)(`audience.remaining`)),1)]),o(`div`,O,[o(`span`,null,u(Ve(e)),1),o(`span`,null,u(He(e)),1)]),o(`div`,Ee,`✓ `+u(t(y)(`audience.selected`)),1)],42,Te)]))),128))]))],8,Se),o(`div`,De,[o(`div`,Oe,[o(`form`,{class:d([`row g-3`,{"was-validated":B.value}]),novalidate:``,onSubmit:f(qe,[`prevent`])},[(i(!0),s(l,null,c(M.value,e=>(i(),s(`div`,{key:e.key,class:`col-12 col-md-6 audience-form-fifth`},[o(`label`,{class:`form-label`,for:`audience-`+e.key},[a(u(G(e))+` `,1),e.required?(i(),s(`span`,Ae,`*`)):g(``,!0)],8,ke),e.type===`select`?p((i(),s(`select`,{key:0,id:`audience-`+e.key,"onUpdate:modelValue":t=>V[e.key]=t,class:d([`form-select audience-entry-field`,{"is-invalid":Z(e)}]),disabled:!U.value,required:e.required},[o(`option`,Me,u(K(e)),1),(i(!0),s(l,null,c(e.options??[],e=>(i(),s(`option`,{key:e.value,value:e.value},u(t(ve)(e,A.value)),9,Ne))),128))],10,je)),[[ee,V[e.key]]]):e.type===`textarea`?p((i(),s(`textarea`,{key:1,id:`audience-`+e.key,"onUpdate:modelValue":t=>V[e.key]=t,class:d([`form-control audience-entry-field`,{"is-invalid":Z(e)}]),placeholder:K(e),disabled:!U.value,required:e.required,rows:`3`},null,10,Pe)),[[te,V[e.key]]]):p((i(),s(`input`,{key:2,id:`audience-`+e.key,"onUpdate:modelValue":t=>V[e.key]=t,class:d([`form-control audience-entry-field`,{"is-invalid":Z(e)}]),type:X(e)?`tel`:e.type===`email`?`email`:`text`,inputmode:X(e)?`numeric`:void 0,placeholder:K(e),disabled:!U.value||X(e),readonly:X(e),required:e.required,title:X(e)?t(y)(`audience.phoneReadonly`):void 0},null,10,Fe)),[[ie,V[e.key]]]),o(`div`,Ie,u(Ke(e)),1)]))),128)),o(`div`,Le,[o(`button`,{class:`btn btn-primary audience-submit-btn`,type:`submit`,disabled:!U.value||P.value},u(U.value?P.value?t(y)(`audience.submitting`):t(y)(`audience.submit`):t(y)(`audience.selectSessionFirst`)),9,Re)])],34),z.value?(i(),s(`div`,k,u(z.value),1)):g(``,!0),I.value?(i(),s(`div`,ze,u(I.value),1)):g(``,!0)])]),re(_e,{open:R.value,mode:`success`,slug:C.value,"event-badge":t(Be),registration:L.value,onClose:n[0]||=e=>R.value=!1},null,8,[`open`,`slug`,`event-badge`,`registration`])]))}});export{A as default}; |