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