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
10 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,Z as n,s as u,j as o,k as i,m as s,g as r,S as v,U as d,n as c,p as _,q as m,x as f,C as p,E as k,F as y,G as g,J as h,t as b,I as w,v as S,D as C,B as V,a2 as $,V as x,a7 as U,R as j,_ as B}from"./index-IUVLU5T2.js";import{k as N,l as P,m as T}from"./content.BtG42C1n.js";import{g as I,l as O}from"./localProfile.Br_QS8y8.js";import{b as X}from"./richText.Cl1iMeI3.js";function q(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 D=B(e({__name:"reserve",setup(e){const B=l(0),D=l(0),E=l(!0),F=l(!1),G=l(null),J=l(""),M=l({visitor_name:"",visitor_phone:"",id_card:"",entry_date:"",ticket_mode:"single"}),R=a(()=>/^1\d{10}$/.test(String(M.value.visitor_phone||"").trim())),Z=a(()=>{var e;return(null==(e=G.value)?void 0:e.entry_dates)||[]}),z=a(()=>{var e,l;return"school_age"===String((null==(l=null==(e=G.value)?void 0:e.event)?void 0:l.booking_audience)||"")}),A=a(()=>{var e,l;return X(null==(l=null==(e=G.value)?void 0:e.event)?void 0:l.reservation_notice)}),H=a(()=>{var e,l;return Number((null==(l=null==(e=G.value)?void 0:e.today_release)?void 0:l.remaining)??0)}),K=a(()=>{var e,l;return(null==(l=null==(e=G.value)?void 0:e.event)?void 0:l.age_limit_start)||null}),L=a(()=>{var e,l;return(null==(l=null==(e=G.value)?void 0:e.event)?void 0:l.age_limit_end)||null}),Q=a(()=>/^\d{17}[\dXx]$/.test(String(M.value.id_card||"").trim())),W=a(()=>Q.value?q(String(M.value.id_card).trim().toUpperCase(),K.value,L.value):null),Y=a(()=>{var e,l;return!!(null==(e=M.value.visitor_name)?void 0:e.trim())&&(!!R.value&&(!!Q.value&&!0===(null==(l=W.value)?void 0:l.ok)))}),ee=a(()=>{const e=G.value;return e?e.in_booking_window?e.in_daily_release_time?e.today_release?H.value<=0?"今日余票已发完。":e.can_book_now?"":"当前暂无法预约。":"今日无放票计划。":"当前不在今日放票时段内,请稍后再试。":"当前不在该活动的预约开放日期内,无法提交。":""}),le=a(()=>z.value&&Y.value&&H.value>=2),ae=a(()=>{const e=Z.value;return e.length?["请选择入馆日期",...e]:[]}),te=a(()=>{const e=Z.value;if(!M.value.entry_date)return 0;const l=e.indexOf(M.value.entry_date);return l>=0?l+1:0}),ne=a(()=>{var e;const l=null==(e=G.value)?void 0:e.event;if(!l)return[];return[`抢票时间:${l.booking_start_at||"—"} 至 ${l.booking_end_at||"—"}`,`每日 ${l.daily_release_start_time||"—"} 开放`,`今日剩余 ${H.value} 张免费名额`,"请确保姓名、手机号与身份证号真实有效,预约成功后需凭二维码入馆。"]}),ue=a(()=>{var e,l,a;return!!(null==(e=G.value)?void 0:e.can_book_now)&&(!ee.value&&(!!(null==(l=M.value.visitor_name)?void 0:l.trim())&&(!!R.value&&(!!Q.value&&(!!(null==(a=W.value)?void 0:a.ok)&&(!!Y.value&&(!!M.value.entry_date&&!(z.value&&"pair"===M.value.ticket_mode&&H.value<2))))))))});function oe(){var e;Y.value||((null==(e=M.value.visitor_name)?void 0:e.trim())?R.value?Q.value?W.value&&!W.value.ok&&u({title:W.value.reason||"该证件出生日期不在允许范围",icon:"none"}):u({title:"请填写 18 位身份证号",icon:"none"}):u({title:"请填写 11 位大陆手机号",icon:"none"}):u({title:"请先填写参与人姓名",icon:"none"}))}function ie(){Y.value||oe()}function se(e){var l;if(!Y.value)return void oe();const a=Number((null==(l=null==e?void 0:e.detail)?void 0:l.value)??0),t=Z.value;if(!t.length)return;if(0===a)return void(M.value.entry_date="");const n=a-1;M.value.entry_date=t[n]??""}function re(){z.value&&(Y.value?M.value.ticket_mode="single":oe())}function ve(){z.value&&(Y.value?le.value?M.value.ticket_mode="pair":u({title:"一大一小需至少 2 张余票",icon:"none"}):oe())}async function de(){if(B.value&&D.value){E.value=!0;try{const[e,l]=await Promise.all([N(B.value,D.value),P(D.value).catch(()=>null)]);G.value=e,J.value=(null==l?void 0:l.name)||"场馆",M.value.entry_date="",await async function(){if(r(v.accessToken))try{const e=await I();return(null==e?void 0:e.real_name)&&(M.value.visitor_name=e.real_name),void((null==e?void 0:e.phone)&&/^1\d{10}$/.test(String(e.phone).trim())&&(M.value.visitor_phone=String(e.phone).trim()))}catch{}const e=O();(null==e?void 0:e.real_name)&&(M.value.visitor_name=e.real_name),(null==e?void 0:e.phone)&&/^1\d{10}$/.test(String(e.phone).trim())&&(M.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{E.value=!1}}else E.value=!1}async function ce(){var e,l;if(ue.value){F.value=!0;try{const e={venue_id:D.value,visitor_name:M.value.visitor_name.trim(),visitor_phone:String(M.value.visitor_phone).trim(),id_card:String(M.value.id_card).trim().toUpperCase(),entry_date:M.value.entry_date};z.value&&(e.ticket_mode=M.value.ticket_mode);const a=await T(B.value,e);u({title:"预约成功",icon:"success"});const t=null==(l=null==a?void 0:a.reservation)?void 0:l.id;setTimeout(()=>{t?U({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{F.value=!1}}else(null==(e=M.value.visitor_name)?void 0:e.trim())?R.value?Q.value?W.value&&!W.value.ok?u({title:W.value.reason||"该证件年龄不符合",icon:"none"}):M.value.entry_date?u({title:ee.value||"请完善信息",icon:"none"}):u({title:"请选择入馆日期",icon:"none"}):u({title:"请填写 18 位身份证号",icon:"none"}):u({title:"请填写 11 位大陆手机号",icon:"none"}):u({title:"请填写参与人姓名",icon:"none"})}return t(Y,e=>{e||(M.value.entry_date="")},{flush:"post"}),t([()=>z.value,Y,H],()=>{z.value&&Y.value&&H.value<=1&&(M.value.ticket_mode="single")},{flush:"post"}),t([Z,Y],()=>{if(!Y.value)return;const e=Z.value;M.value.entry_date&&!e.includes(M.value.entry_date)&&(M.value.entry_date="")},{flush:"post"}),n(e=>{if(B.value=Number((null==e?void 0:e.event_id)||0),D.value=Number((null==e?void 0:e.venue_id)||0),!B.value||!D.value)return u({title:"参数无效",icon:"none"}),void(E.value=!1);de()}),(e,l)=>{const a=d("SubPageBackBtn"),t=s,n=b,u=w,r=V,v=$,U=m,j=x;return c(),o(t,{class:"page-wrap"},{default:i(()=>[_(a),_(U,{"scroll-y":"",class:"page"},{default:i(()=>[E.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=G.value)?void 0:e.event)?void 0:l.title)||"抢票预约"),1)]}),_:1}),_(t,{class:"sub-line"},{default:i(()=>[f("预约场馆:"+p(J.value),1)]),_:1}),ne.value.length?(c(),o(t,{key:0,class:"promo-box"},{default:i(()=>[(c(!0),k(y,null,g(ne.value,(e,l)=>(c(),o(t,{key:l,class:"promo-line"},{default:i(()=>[f(p(e),1)]),_:2},1024))),128))]),_:1})):h("",!0),ee.value?(c(),o(t,{key:1,class:"warn-line"},{default:i(()=>[f(p(ee.value),1)]),_:1})):(c(),o(t,{key:2,class:"ok-line"},{default:i(()=>[f("满足条件时可提交预约")]),_:1}))]),_:1}),_(t,{class:"card"},{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:M.value.visitor_name,"onUpdate:modelValue":l[0]||(l[0]=e=>M.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:M.value.visitor_phone,"onUpdate:modelValue":l[1]||(l[1]=e=>M.value.visitor_phone=e),class:"form-input",type:"number",maxlength:"11",placeholder:"必填,11 位手机号","placeholder-class":"ph"},null,8,["modelValue"])]),_:1}),_(t,{class:"form-row last"},{default:i(()=>[_(n,{class:"form-label"},{default:i(()=>[f("身份证号")]),_:1}),_(u,{modelValue:M.value.id_card,"onUpdate:modelValue":l[2]||(l[2]=e=>M.value.id_card=e),class:"form-input",placeholder:"必填,18 位","placeholder-class":"ph"},null,8,["modelValue"])]),_:1}),Q.value&&W.value&&!W.value.ok?(c(),o(t,{key:0,class:"id-warn"},{default:i(()=>[f(p(W.value.reason),1)]),_:1})):h("",!0)]),_:1}),_(t,{class:S(["card",{"field-locked":!Y.value}]),onClick:ie},{default:i(()=>[_(t,{class:"card-hd"},{default:i(()=>[f("参观信息")]),_:1}),Z.value.length?(c(),o(t,{key:0,class:"form-row form-row--picker",onClick:l[3]||(l[3]=C(()=>{},["stop"]))},{default:i(()=>[_(n,{class:"form-label"},{default:i(()=>[f("入馆日期")]),_:1}),_(r,{mode:"selector",range:ae.value,value:te.value,disabled:!Y.value,onChange:se},{default:i(()=>[_(t,{class:S(["picker-val",{muted:!M.value.entry_date||!Y.value}])},{default:i(()=>[f(p(Y.value?M.value.entry_date||"请选择":"请先完成参与人信息"),1)]),_:1},8,["class"])]),_:1},8,["range","value","disabled"])]),_:1})):(c(),o(t,{key:1,class:"form-row"},{default:i(()=>[_(n,{class:"form-muted"},{default:i(()=>[f("暂无可选入馆日期,请稍后再来")]),_:1})]),_:1})),z.value?(c(),o(t,{key:2,class:"mode-wrap",onClick:l[4]||(l[4]=C(()=>{},["stop"]))},{default:i(()=>[_(n,{class:"form-label"},{default:i(()=>[f("名额类型")]),_:1}),_(t,{class:"mode-btns"},{default:i(()=>[_(t,{class:S(["mode-pill",{on:"single"===M.value.ticket_mode,disabled:!Y.value}]),onClick:re},{default:i(()=>[f("单张")]),_:1},8,["class"]),_(t,{class:S(["mode-pill",{on:"pair"===M.value.ticket_mode,disabled:!Y.value||!le.value}]),onClick:ve},{default:i(()=>[f("一大一小(2 张)")]),_:1},8,["class"])]),_:1}),z.value&&Y.value&&H.value<=1?(c(),o(t,{key:0,class:"mode-tip"},{default:i(()=>[f(" 当前仅剩 1 张,仅可选单张 ")]),_:1})):h("",!0)]),_:1})):h("",!0)]),_:1},8,["class"]),A.value?(c(),o(t,{key:0,class:"card"},{default:i(()=>[_(t,{class:"card-hd"},{default:i(()=>[f("预约须知")]),_:1}),_(t,{class:"notice-body"},{default:i(()=>[_(v,{class:"notice-rich",nodes:A.value},null,8,["nodes"])]),_:1})]),_:1})):h("",!0)]),_:1})),_(t,{class:"safe-bottom"})]),_:1}),_(t,{class:"action-bar"},{default:i(()=>[_(j,{class:"btn primary",disabled:!ue.value||F.value||E.value,onClick:ce},{default:i(()=>[f(p(F.value?"提交中…":"确认预约"),1)]),_:1},8,["disabled"])]),_:1})]),_:1})}}}),[["__scopeId","data-v-92d720d5"]]);export{D as default};