|
|
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};
|