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,c as a,w as t,U as n,f as u,b as o,e as i,i as r,K as s,L as v,N as d,g as c,j as _,S as m,l as f,t as p,A as g,n as y,k,I as h,v as b,q as w,Z as S,O as C,a7 as V,J as j,_ as U}from"./index-DVE-krFW.js";import{k as x,l as $,m as N}from"./content.BRfAtgXD.js";import{g as B}from"./profile.UEpwOW_R.js";import{l as O}from"./localProfile.wNNIATWe.js";import{b as P}from"./richText.Cl1iMeI3.js";function T(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 A=U(e({__name:"reserve",setup(e){const U=l(0),A=l(0),I=l(!0),X=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())),M=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)||"")}),z=a(()=>{var e,l;return P(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?T(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)))}),R=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?"":"当前暂无法预约。":"今日无放票计划。":"当前不在今日放票时段内,请稍后再试。":"当前不在该活动的预约开放日期内,无法提交。":""}),W=a(()=>Z.value&&Q.value&&D.value>=2),Y=a(()=>{const e=M.value;return e.length?["请选择入馆日期",...e]:[]}),ee=a(()=>{const e=M.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)&&(!R.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=M.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&&A.value){I.value=!0;try{const[e,l]=await Promise.all([x(U.value,A.value),$(A.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 B();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=O();(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{I.value=!1}}else I.value=!1}async function re(){var e,l;if(le.value){X.value=!0;try{const e={venue_id:A.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}`}):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{X.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: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,D],()=>{Z.value&&Q.value&&D.value<=1&&(K.value.ticket_mode="single")},{flush:"post"}),t([M,Q],()=>{if(!Q.value)return;const e=M.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),A.value=Number((null==e?void 0:e.venue_id)||0),!U.value||!A.value)return u({title:"参数无效",icon:"none"}),void(I.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(()=>[I.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}),R.value?(c(),o(t,{key:0,class:"warn-line"},{default:i(()=>[f(p(R.value),1)]),_:1})):g("",!0)]),_:1}),_(t,{class:y(["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})):g("",!0),M.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:Y.value,value:ee.value,disabled:!Q.value,onChange:ne},{default:i(()=>[_(t,{class:y(["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:y(["mode-pill",{on:"single"===K.value.ticket_mode,disabled:!Q.value}]),onClick:ue},{default:i(()=>[f("单张")]),_:1},8,["class"]),_(t,{class:y(["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&&D.value<=1?(c(),o(t,{key:0,class:"mode-tip"},{default:i(()=>[f(" 当前仅剩 1 张,仅可选单张 ")]),_:1})):g("",!0)]),_:1})):g("",!0)]),_:1},8,["class"]),z.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:z.value},null,8,["nodes"])]),_:1})]),_:1})):g("",!0)]),_:1})),_(t,{class:"safe-bottom"})]),_:1}),_(t,{class:"action-bar"},{default:i(()=>[_(j,{class:"btn primary",disabled:!le.value||X.value||I.value,onClick:re},{default:i(()=>[f(p(X.value?"提交中…":"确认抢票"),1)]),_:1},8,["disabled"])]),_:1})]),_:1})}}}),[["__scopeId","data-v-286e8350"]]);export{A as default};