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.

2 lines
9.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import{d as e,r as l,m as a,w as t,R as n,p as u,c as o,f as i,i as r,J as s,K as v,L as d,b as c,k as _,S as m,h as f,t as p,j as y,q as g,l as k,I as h,e as b,y as w,X as S,M as C,a5 as V,a6 as j,_ as x}from"./index-CaRitDsG.js";import{k as U,l as $,m as B}from"./content.-RRlS2W0.js";import{g as N}from"./profile.DSLCrXzx.js";import{l as P}from"./localProfile.CRJwExOD.js";import{b as T}from"./richText.Cl1iMeI3.js";function X(e,l,a){const t=function(e){const l=String(e||"").trim().toUpperCase();return/^\d{17}[\dX]$/.test(l)?l.slice(6,14):null}(e);return t?l||a?function(e,l,a){if(!e||8!==e.length)return!1;if(!l&&!a)return!0;if(l&&e<l.replace(/-/g,""))return!1;if(a&&e>a.replace(/-/g,""))return!1;return!0}(t,l,a)?{ok:!0,ymd:t,reason:""}:{ok:!1,ymd:t,reason:"该证件的出生日期不在本次活动允许范围内"}:{ok:!0,ymd:t,reason:""}:{ok:!1,ymd:null,reason:"请填写正确的 18 位身份证号"}}const I=x(e({__name:"reserve",setup(e){const x=l(0),I=l(0),M=l(!0),O=l(!1),q=l(null),J=l(""),K=l({visitor_name:"",visitor_phone:"",id_card:"",entry_date:"",ticket_mode:"single"}),L=a(()=>/^1\d{10}$/.test(String(K.value.visitor_phone||"").trim())),R=a(()=>{var e;return(null==(e=q.value)?void 0:e.entry_dates)||[]}),z=a(()=>{var e,l;return"school_age"===String((null==(l=null==(e=q.value)?void 0:e.event)?void 0:l.booking_audience)||"")}),A=a(()=>{var e,l;return T(null==(l=null==(e=q.value)?void 0:e.event)?void 0:l.reservation_notice)}),D=a(()=>{var e,l;return Number((null==(l=null==(e=q.value)?void 0:e.today_release)?void 0:l.remaining)??0)}),E=a(()=>{var e,l;return(null==(l=null==(e=q.value)?void 0:e.event)?void 0:l.age_limit_start)||null}),F=a(()=>{var e,l;return(null==(l=null==(e=q.value)?void 0:e.event)?void 0:l.age_limit_end)||null}),G=a(()=>/^\d{17}[\dXx]$/.test(String(K.value.id_card||"").trim())),H=a(()=>G.value?X(String(K.value.id_card).trim().toUpperCase(),E.value,F.value):null),Q=a(()=>{var e,l;return!!(null==(e=K.value.visitor_name)?void 0:e.trim())&&(!!L.value&&(!!G.value&&!0===(null==(l=H.value)?void 0:l.ok)))}),W=a(()=>{const e=q.value;return e?e.in_booking_window?e.in_daily_release_time?e.today_release?D.value<=0?"今日余票已发完。":e.can_book_now?"":"当前暂无法预约。":"今日无放票计划。":"当前不在今日放票时段内,请稍后再试。":"当前不在该活动的预约开放日期内,无法提交。":""}),Y=a(()=>z.value&&Q.value&&D.value>=2),Z=a(()=>{const e=R.value;return e.length?["请选择入馆日期",...e]:[]}),ee=a(()=>{const e=R.value;if(!K.value.entry_date)return 0;const l=e.indexOf(K.value.entry_date);return l>=0?l+1:0}),le=a(()=>{var e,l,a;return!!(null==(e=q.value)?void 0:e.can_book_now)&&(!W.value&&(!!(null==(l=K.value.visitor_name)?void 0:l.trim())&&(!!L.value&&(!!G.value&&(!!(null==(a=H.value)?void 0:a.ok)&&(!!Q.value&&(!!K.value.entry_date&&!(z.value&&"pair"===K.value.ticket_mode&&D.value<2))))))))});function ae(){var e;Q.value||((null==(e=K.value.visitor_name)?void 0:e.trim())?L.value?G.value?H.value&&!H.value.ok&&u({title:H.value.reason||"该证件出生日期不在允许范围",icon:"none"}):u({title:"请填写 18 位身份证号",icon:"none"}):u({title:"请填写 11 位大陆手机号",icon:"none"}):u({title:"请先填写姓名",icon:"none"}))}function te(){Q.value||ae()}function ne(e){var l;if(!Q.value)return void ae();const a=Number((null==(l=null==e?void 0:e.detail)?void 0:l.value)??0),t=R.value;if(!t.length)return;if(0===a)return void(K.value.entry_date="");const n=a-1;K.value.entry_date=t[n]??""}function ue(){z.value&&(Q.value?K.value.ticket_mode="single":ae())}function oe(){z.value&&(Q.value?Y.value?K.value.ticket_mode="pair":u({title:"一大一小需至少 2 张余票",icon:"none"}):ae())}async function ie(){if(x.value&&I.value){M.value=!0;try{const[e,l]=await Promise.all([U(x.value,I.value),$(I.value).catch(()=>null)]);q.value=e,J.value=(null==l?void 0:l.name)||"场馆",K.value.entry_date="",await async function(){if(s(v.accessToken))try{const e=await N();return(null==e?void 0:e.real_name)&&(K.value.visitor_name=e.real_name),void((null==e?void 0:e.phone)&&/^1\d{10}$/.test(String(e.phone).trim())&&(K.value.visitor_phone=String(e.phone).trim()))}catch{}const e=P();(null==e?void 0:e.real_name)&&(K.value.visitor_name=e.real_name),(null==e?void 0:e.phone)&&/^1\d{10}$/.test(String(e.phone).trim())&&(K.value.visitor_phone=String(e.phone).trim())}()}catch(e){const l=(null==e?void 0:e.message)||(null==e?void 0:e.errMsg)||"加载失败";u({title:String(l),icon:"none"})}finally{M.value=!1}}else M.value=!1}async function re(){var e,l;if(le.value){O.value=!0;try{const e={venue_id:I.value,visitor_name:K.value.visitor_name.trim(),visitor_phone:String(K.value.visitor_phone).trim(),id_card:String(K.value.id_card).trim().toUpperCase(),entry_date:K.value.entry_date};z.value&&(e.ticket_mode=K.value.ticket_mode);const a=await B(x.value,e);u({title:"抢票成功",icon:"success"});const t=null==(l=null==a?void 0:a.reservation)?void 0:l.id;setTimeout(()=>{t?V({url:`/pages/mine/reservation-detail?id=${t}`}):j()},400)}catch(a){const e="string"==typeof(null==a?void 0:a.message)&&a.message||Object.values((null==a?void 0:a.errors)||{}).flat().find(Boolean)||"预约失败";u({title:String(e),icon:"none"})}finally{O.value=!1}}else(null==(e=K.value.visitor_name)?void 0:e.trim())?L.value?G.value?H.value&&!H.value.ok?u({title:H.value.reason||"该证件年龄不符合",icon:"none"}):K.value.entry_date?u({title:W.value||"请完善信息",icon:"none"}):u({title:"请选择入馆日期",icon:"none"}):u({title:"请填写 18 位身份证号",icon:"none"}):u({title:"请填写 11 位大陆手机号",icon:"none"}):u({title:"请填写姓名",icon:"none"})}return t(Q,e=>{e||(K.value.entry_date="")},{flush:"post"}),t([()=>z.value,Q,D],()=>{z.value&&Q.value&&D.value<=1&&(K.value.ticket_mode="single")},{flush:"post"}),t([R,Q],()=>{if(!Q.value)return;const e=R.value;K.value.entry_date&&!e.includes(K.value.entry_date)&&(K.value.entry_date="")},{flush:"post"}),n(e=>{if(x.value=Number((null==e?void 0:e.event_id)||0),I.value=Number((null==e?void 0:e.venue_id)||0),!x.value||!I.value)return u({title:"参数无效",icon:"none"}),void(M.value=!1);ie()}),(e,l)=>{const a=d("SubPageBackBtn"),t=r,n=k,u=h,s=w,v=S,V=m,j=C;return c(),o(t,{class:"page-wrap"},{default:i(()=>[_(a),_(V,{"scroll-y":"",class:"page"},{default:i(()=>[M.value?(c(),o(t,{key:0,class:"loading-tip"},{default:i(()=>[f("加载中…")]),_:1})):(c(),o(t,{key:1,class:"content"},{default:i(()=>[_(t,{class:"card"},{default:i(()=>[_(t,{class:"act-title"},{default:i(()=>{var e,l;return[f(p((null==(l=null==(e=q.value)?void 0:e.event)?void 0:l.title)||"抢票预约"),1)]}),_:1}),_(t,{class:"sub-line"},{default:i(()=>[f("预约场馆:"+p(J.value),1)]),_:1}),W.value?(c(),o(t,{key:0,class:"warn-line"},{default:i(()=>[f(p(W.value),1)]),_:1})):y("",!0)]),_:1}),_(t,{class:g(["card",{"field-locked":!Q.value}]),onClick:te},{default:i(()=>[_(t,{class:"card-hd"},{default:i(()=>[f("预约信息")]),_:1}),_(t,{class:"form-row"},{default:i(()=>[_(n,{class:"form-label"},{default:i(()=>[f("姓名")]),_:1}),_(u,{modelValue:K.value.visitor_name,"onUpdate:modelValue":l[0]||(l[0]=e=>K.value.visitor_name=e),class:"form-input",placeholder:"必填,与身份证一致","placeholder-class":"ph"},null,8,["modelValue"])]),_:1}),_(t,{class:"form-row"},{default:i(()=>[_(n,{class:"form-label"},{default:i(()=>[f("联系方式")]),_:1}),_(u,{modelValue:K.value.visitor_phone,"onUpdate:modelValue":l[1]||(l[1]=e=>K.value.visitor_phone=e),class:"form-input",type:"number",maxlength:"11",placeholder:"必填,11 位手机号","placeholder-class":"ph"},null,8,["modelValue"])]),_:1}),_(t,{class:"form-row"},{default:i(()=>[_(n,{class:"form-label"},{default:i(()=>[f("身份证号")]),_:1}),_(u,{modelValue:K.value.id_card,"onUpdate:modelValue":l[2]||(l[2]=e=>K.value.id_card=e),class:"form-input",placeholder:"必填,18 位","placeholder-class":"ph"},null,8,["modelValue"])]),_:1}),G.value&&H.value&&!H.value.ok?(c(),o(t,{key:0,class:"id-warn"},{default:i(()=>[f(p(H.value.reason),1)]),_:1})):y("",!0),R.value.length?(c(),o(t,{key:1,class:"form-row form-row--picker",onClick:l[3]||(l[3]=b(()=>{},["stop"]))},{default:i(()=>[_(n,{class:"form-label"},{default:i(()=>[f("入馆日期")]),_:1}),_(s,{mode:"selector",range:Z.value,value:ee.value,disabled:!Q.value,onChange:ne},{default:i(()=>[_(t,{class:g(["picker-val",{muted:!K.value.entry_date||!Q.value}])},{default:i(()=>[f(p(Q.value?K.value.entry_date||"请选择":"请先完成上方信息"),1)]),_:1},8,["class"])]),_:1},8,["range","value","disabled"])]),_:1})):(c(),o(t,{key:2,class:"form-row"},{default:i(()=>[_(n,{class:"form-muted"},{default:i(()=>[f("暂无可选入馆日期,请稍后再来")]),_:1})]),_:1})),z.value?(c(),o(t,{key:3,class:"mode-wrap",onClick:l[4]||(l[4]=b(()=>{},["stop"]))},{default:i(()=>[_(n,{class:"form-label"},{default:i(()=>[f("名额类型")]),_:1}),_(t,{class:"mode-btns"},{default:i(()=>[_(t,{class:g(["mode-pill",{on:"single"===K.value.ticket_mode,disabled:!Q.value}]),onClick:ue},{default:i(()=>[f("单张")]),_:1},8,["class"]),_(t,{class:g(["mode-pill",{on:"pair"===K.value.ticket_mode,disabled:!Q.value||!Y.value}]),onClick:oe},{default:i(()=>[f("一大一小(2 张)")]),_:1},8,["class"])]),_:1}),z.value&&Q.value&&D.value<=1?(c(),o(t,{key:0,class:"mode-tip"},{default:i(()=>[f(" 当前仅剩 1 张,仅可选单张 ")]),_:1})):y("",!0)]),_:1})):y("",!0)]),_:1},8,["class"]),A.value?(c(),o(t,{key:0,class:"card notice-card"},{default:i(()=>[_(t,{class:"card-hd"},{default:i(()=>[f("预约须知")]),_:1}),_(t,{class:"promo-notice"},{default:i(()=>[_(v,{class:"promo-notice-rich",nodes:A.value},null,8,["nodes"])]),_:1})]),_:1})):y("",!0)]),_:1})),_(t,{class:"safe-bottom"})]),_:1}),_(t,{class:"action-bar"},{default:i(()=>[_(j,{class:"btn primary",disabled:!le.value||O.value||M.value,onClick:re},{default:i(()=>[f(p(O.value?"提交中…":"确认抢票"),1)]),_:1},8,["disabled"])]),_:1})]),_:1})}}}),[["__scopeId","data-v-286e8350"]]);export{I as default};