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,e as l,f as a,w as t,Y as n,s as u,k as o,l as i,n as r,g as s,S as v,U as d,p as c,q as _,t as m,y as f,D as p,K as y,x as g,v as k,I as h,E as b,C as w,a1 as S,V as C,a6 as V,T as x,_ as U}from"./index-CalkcR7d.js";import{k as $,l as j,m as N}from"./content.2ii_zDQe.js";import{g as T,l as B}from"./localProfile.FuJ6lVhu.js";import{b as P}from"./richText.Cl1iMeI3.js";function I(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 O=U(e({__name:"reserve",setup(e){const U=l(0),O=l(0),X=l(!0),q=l(!1),D=l(null),E=l(""),K=l({visitor_name:"",visitor_phone:"",id_card:"",entry_date:"",ticket_mode:"single"}),M=a(()=>/^1\d{10}$/.test(String(K.value.visitor_phone||"").trim())),Y=a(()=>{var e;return(null==(e=D.value)?void 0:e.entry_dates)||[]}),z=a(()=>{var e,l;return"school_age"===String((null==(l=null==(e=D.value)?void 0:e.event)?void 0:l.booking_audience)||"")}),A=a(()=>{var e,l;return P(null==(l=null==(e=D.value)?void 0:e.event)?void 0:l.reservation_notice)}),F=a(()=>{var e,l;return Number((null==(l=null==(e=D.value)?void 0:e.today_release)?void 0:l.remaining)??0)}),G=a(()=>{var e,l;return(null==(l=null==(e=D.value)?void 0:e.event)?void 0:l.age_limit_start)||null}),H=a(()=>{var e,l;return(null==(l=null==(e=D.value)?void 0:e.event)?void 0:l.age_limit_end)||null}),J=a(()=>/^\d{17}[\dXx]$/.test(String(K.value.id_card||"").trim())),L=a(()=>J.value?I(String(K.value.id_card).trim().toUpperCase(),G.value,H.value):null),Q=a(()=>{var e,l;return!!(null==(e=K.value.visitor_name)?void 0:e.trim())&&(!!M.value&&(!!J.value&&!0===(null==(l=L.value)?void 0:l.ok)))}),R=a(()=>{const e=D.value;return e?e.in_booking_window?e.in_daily_release_time?e.today_release?F.value<=0?"今日余票已发完。":e.can_book_now?"":"当前暂无法预约。":"今日无放票计划。":"当前不在今日放票时段内,请稍后再试。":"当前不在该活动的预约开放日期内,无法提交。":""}),W=a(()=>z.value&&Q.value&&F.value>=2),Z=a(()=>{const e=Y.value;return e.length?["请选择入馆日期",...e]:[]}),ee=a(()=>{const e=Y.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=D.value)?void 0:e.can_book_now)&&(!R.value&&(!!(null==(l=K.value.visitor_name)?void 0:l.trim())&&(!!M.value&&(!!J.value&&(!!(null==(a=L.value)?void 0:a.ok)&&(!!Q.value&&(!!K.value.entry_date&&!(z.value&&"pair"===K.value.ticket_mode&&F.value<2))))))))});function ae(){var e;Q.value||((null==(e=K.value.visitor_name)?void 0:e.trim())?M.value?J.value?L.value&&!L.value.ok&&u({title:L.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=Y.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?W.value?K.value.ticket_mode="pair":u({title:"一大一小需至少 2 张余票",icon:"none"}):ae())}async function ie(){if(U.value&&O.value){X.value=!0;try{const[e,l]=await Promise.all([$(U.value,O.value),j(O.value).catch(()=>null)]);D.value=e,E.value=(null==l?void 0:l.name)||"场馆",K.value.entry_date="",await async function(){if(s(v.accessToken))try{const e=await T();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=B();(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{X.value=!1}}else X.value=!1}async function re(){var e,l;if(le.value){q.value=!0;try{const e={venue_id:O.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 N(U.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}`}):x()},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{q.value=!1}}else(null==(e=K.value.visitor_name)?void 0:e.trim())?M.value?J.value?L.value&&!L.value.ok?u({title:L.value.reason||"该证件年龄不符合",icon:"none"}):K.value.entry_date?u({title:R.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,F],()=>{z.value&&Q.value&&F.value<=1&&(K.value.ticket_mode="single")},{flush:"post"}),t([Y,Q],()=>{if(!Q.value)return;const e=Y.value;K.value.entry_date&&!e.includes(K.value.entry_date)&&(K.value.entry_date="")},{flush:"post"}),n(e=>{if(U.value=Number((null==e?void 0:e.event_id)||0),O.value=Number((null==e?void 0:e.venue_id)||0),!U.value||!O.value)return u({title:"参数无效",icon:"none"}),void(X.value=!1);ie()}),(e,l)=>{const a=d("SubPageBackBtn"),t=r,n=k,u=h,s=w,v=S,V=m,x=C;return c(),o(t,{class:"page-wrap"},{default:i(()=>[_(a),_(V,{"scroll-y":"",class:"page"},{default:i(()=>[X.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=D.value)?void 0:e.event)?void 0:l.title)||"抢票预约"),1)]}),_:1}),_(t,{class:"sub-line"},{default:i(()=>[f("预约场馆:"+p(E.value),1)]),_:1}),R.value?(c(),o(t,{key:0,class:"warn-line"},{default:i(()=>[f(p(R.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}),J.value&&L.value&&!L.value.ok?(c(),o(t,{key:0,class:"id-warn"},{default:i(()=>[f(p(L.value.reason),1)]),_:1})):y("",!0),Y.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||!W.value}]),onClick:oe},{default:i(()=>[f("一大一小2 张)")]),_:1},8,["class"])]),_:1}),z.value&&Q.value&&F.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(()=>[_(x,{class:"btn primary",disabled:!le.value||q.value||X.value,onClick:re},{default:i(()=>[f(p(q.value?"提交中…":"确认抢票"),1)]),_:1},8,["disabled"])]),_:1})]),_:1})}}}),[["__scopeId","data-v-286e8350"]]);export{O as default};