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