|
|
import{d as e,e as a,f as l,w as u,W as o,j as i,k as t,s,m as n,g as v,S as d,n as c,p as r,q as _,v as p,x as f,t as m,D as y,E as b,J as h,C as g,_ as k,I as x,R as w,a3 as M,a0 as j,a1 as N,a2 as V,u as C}from"./index-Cm29_xFk.js";import{l as A,m as $}from"./content.jwYrJPXR.js";import{g as T,l as U}from"./localProfile.DP0AsmgM.js";import{b as q}from"./richText.Cl1iMeI3.js";import{i as B,a as I}from"./icon_up.DJ5zmdk8.js";import{_ as R}from"./_plugin-vue_export-helper.BCo6x5W8.js";const S=R(e({__name:"reserve",setup(e){const R=a(0),S=a(0),D=a(!1),E=a(!1),F=a(null),J=a(!0),O=a(!1),P=a({activity_day_id:0,visitor_name:"",visitor_phone:"",booking_type:"individual",people_count:1}),W=l(()=>{var e;return((null==(e=F.value)?void 0:e.days)||[]).find(e=>e.id===P.value.activity_day_id)}),z=l(()=>{const e=W.value;return!0===(null==e?void 0:e.is_bookable)}),G=l(()=>!!P.value.activity_day_id&&z.value&&!!P.value.visitor_name&&/^1\d{10}$/.test(P.value.visitor_phone)),H=l(()=>{var e,a;return q(null==(a=null==(e=F.value)?void 0:e.activity)?void 0:a.reservation_notice)});u(H,()=>{J.value=!0,j(()=>{setTimeout(()=>{var e;const a=null==(e=N())?void 0:e.proxy,l=V();a&&l.in(a);const u=C(187);l.select(".judge-notice-reserve").boundingClientRect(),l.exec(e=>{const[a]=e||[];O.value=!!(a&&a.height&&a.height>u+1),O.value?J.value=!1:J.value=!0})},120)})});const K=l(()=>{var e,a;return String((null==(a=null==(e=F.value)?void 0:e.activity)?void 0:a.booking_audience)||"both")}),L=l(()=>{var e,a;return Math.max(1,Number((null==(a=null==(e=F.value)?void 0:e.activity)?void 0:a.min_people_per_order)||1))}),Q=l(()=>{var e,a;const l=Math.max(1,Number((null==(a=null==(e=F.value)?void 0:e.activity)?void 0:a.max_people_per_order)||1));return Math.max(l,L.value)}),X=l(()=>{var e,a;return(null==(a=null==(e=F.value)?void 0:e.activity)?void 0:a.booking_modes)||["individual","group"]}),Y=l(()=>"individual"===K.value),Z=l(()=>"group"===K.value),ee=l(()=>`团体(${L.value}-${Q.value}人)`),ae=l(()=>"group"===K.value||"both"===K.value&&"group"===P.value.booking_type),le=l(()=>ae.value&&Math.floor(Number(P.value.people_count)||L.value)<=L.value),ue=l(()=>ae.value&&Math.floor(Number(P.value.people_count)||L.value)>=Q.value);function oe(){if("individual"===K.value)return P.value.booking_type="individual",void(P.value.people_count=1);if("group"===K.value?P.value.booking_type="group":X.value.includes(P.value.booking_type)||(P.value.booking_type="individual"),"individual"===P.value.booking_type)return void(P.value.people_count=1);const e=Math.floor(Number(P.value.people_count||0));P.value.people_count=Math.min(Q.value,Math.max(L.value,e||L.value))}function ie(){Z.value||(P.value.booking_type="individual",oe())}function te(){Y.value||(P.value.booking_type="group",oe())}async function se(){var e;if(R.value){D.value=!0;try{F.value=await A(R.value),oe();const a=(null==(e=F.value)?void 0:e.days)||[];S.value&&a.some(e=>e.id===S.value)?P.value.activity_day_id=S.value:function(){var e;const a=(null==(e=F.value)?void 0:e.days)||[];if(!a.length)return void(P.value.activity_day_id=0);const l=a.filter(e=>e.is_bookable);l.length?P.value.activity_day_id=l[0].id:P.value.activity_day_id=a[0].id}(),await async function(){if(v(d.accessToken))try{const e=await T();return(null==e?void 0:e.real_name)&&(P.value.visitor_name=e.real_name),void((null==e?void 0:e.phone)&&(P.value.visitor_phone=e.phone))}catch{}const e=U();(null==e?void 0:e.real_name)&&(P.value.visitor_name=e.real_name),(null==e?void 0:e.phone)&&(P.value.visitor_phone=e.phone)}()}catch(a){s({title:(null==a?void 0:a.message)||"加载预约信息失败",icon:"none"})}finally{D.value=!1}}}function ne(){le.value||(P.value.people_count=Math.max(L.value,(Number(P.value.people_count)||L.value)-1),oe())}function ve(){ue.value||(P.value.people_count=Math.min(Q.value,(Number(P.value.people_count)||L.value)+1),oe())}async function de(){if(R.value)if(z.value)if(G.value)if(oe(),"group"===P.value.booking_type&&(P.value.people_count<L.value||P.value.people_count>Q.value))s({title:`人数需在 ${L.value}-${Q.value} 之间`,icon:"none"});else{E.value=!0;try{await $(R.value,P.value),s({title:"预约成功",icon:"success"}),setTimeout(()=>{M({url:`/pages/activity/detail?id=${R.value}`})},500)}catch(e){const a=(null==e?void 0:e.errors)||{},l=Array.isArray(a.activity_day_id)&&a.activity_day_id[0]||Array.isArray(a.visitor_phone)&&a.visitor_phone[0]||""||("string"==typeof(null==e?void 0:e.message)?e.message:"")||Object.keys(a).map(e=>Array.isArray(a[e])?a[e][0]:"").find(Boolean)||"预约失败";s({title:l,icon:"none"})}finally{E.value=!1}}else s({title:"请完整填写预约信息",icon:"none"});else s({title:"当前场次不可预约,请返回活动详情重新选择",icon:"none"})}return o(e=>{R.value=Number((null==e?void 0:e.id)||0),S.value=Number((null==e?void 0:e.day_id)||0),se()}),(e,a)=>{const l=n,u=m,o=y,s=k,v=x,d=_,M=w;return c(),i(l,{class:"page-wrap"},{default:t(()=>[r(d,{"scroll-y":"",class:"page"},{default:t(()=>[D.value?(c(),i(l,{key:0,class:"loading-tip"},{default:t(()=>[p("加载中…")]),_:1})):(c(),i(l,{key:1,class:"content"},{default:t(()=>[r(l,{class:"card"},{default:t(()=>[r(l,{class:"act-title"},{default:t(()=>{var e,a;return[p(f((null==(a=null==(e=F.value)?void 0:e.activity)?void 0:a.title)||"活动预约"),1)]}),_:1}),r(l,{class:"field-label"},{default:t(()=>[p("预约场次")]),_:1}),W.value?(c(),i(l,{key:0,class:"session-info"},{default:t(()=>[r(u,{class:"session-info-name"},{default:t(()=>[p(f(W.value.session_name||"场次"),1)]),_:1}),r(u,{class:"session-info-line"},{default:t(()=>[p("场次时间:"+f(W.value.time_display||"-"),1)]),_:1}),r(u,{class:"session-info-line"},{default:t(()=>[p(f(W.value.enrolled_count_text||"已报名数:"+(Number(W.value.booked_count)||0)),1)]),_:1})]),_:1})):(c(),i(l,{key:1,class:"session-info session-info--empty"},{default:t(()=>[p("暂无场次信息")]),_:1})),H.value?(c(),i(l,{key:2,class:"notice-block"},{default:t(()=>[r(l,{class:"sec-title-row notice-head-row"},{default:t(()=>[r(u,{class:"notice-label"},{default:t(()=>[p("预约须知")]),_:1}),O.value?(c(),i(l,{key:0,class:"expand-arrow-tap",onClick:a[0]||(a[0]=e=>J.value=!J.value)},{default:t(()=>[r(o,{class:"expand-arrow-img",src:J.value?b(B):b(I),mode:"aspectFit"},null,8,["src"])]),_:1})):h("",!0)]),_:1}),r(l,{class:g(["notice-block-body judge-notice-reserve",{"is-collapsed":O.value&&!J.value}])},{default:t(()=>[r(s,{class:"notice-inline-rich",nodes:H.value},null,8,["nodes"])]),_:1},8,["class"])]),_:1})):h("",!0)]),_:1}),F.value?(c(),i(l,{key:0,class:"card"},{default:t(()=>[r(l,{class:"mode-row"},{default:t(()=>[r(u,{class:"mode-label"},{default:t(()=>[p("预约类型")]),_:1}),r(l,{class:"mode-btns"},{default:t(()=>[r(l,{class:g(["mode-pill",{on:"individual"===P.value.booking_type,disabled:Z.value}]),onClick:ie},{default:t(()=>[p("个人")]),_:1},8,["class"]),r(l,{class:g(["mode-pill",{on:"group"===P.value.booking_type,disabled:Y.value}]),onClick:te},{default:t(()=>[p(f(ee.value),1)]),_:1},8,["class"])]),_:1})]),_:1}),ae.value?(c(),i(l,{key:0,class:"count-row"},{default:t(()=>[r(u,{class:"count-name"},{default:t(()=>[p("参观人数")]),_:1}),r(l,{class:"stepper"},{default:t(()=>[r(l,{class:g(["step-btn",{disabled:le.value}]),onClick:ne},{default:t(()=>[p("−")]),_:1},8,["class"]),r(v,{modelValue:P.value.people_count,"onUpdate:modelValue":a[1]||(a[1]=e=>P.value.people_count=e),modelModifiers:{number:!0},class:"step-val",type:"number",onBlur:a[2]||(a[2]=e=>oe())},null,8,["modelValue"]),r(l,{class:g(["step-btn",{disabled:ue.value}]),onClick:ve},{default:t(()=>[p("+")]),_:1},8,["class"])]),_:1})]),_:1})):h("",!0)]),_:1})):h("",!0),r(l,{class:"card"},{default:t(()=>[r(l,{class:"card-hd"},{default:t(()=>[p("联系人信息")]),_:1}),r(l,{class:"form-row"},{default:t(()=>[r(u,{class:"form-label"},{default:t(()=>[p("联系人")]),_:1}),r(v,{modelValue:P.value.visitor_name,"onUpdate:modelValue":a[3]||(a[3]=e=>P.value.visitor_name=e),class:"form-input",placeholder:"请输入姓名","placeholder-class":"ph"},null,8,["modelValue"])]),_:1}),r(l,{class:"form-row last"},{default:t(()=>[r(u,{class:"form-label"},{default:t(()=>[p("手机号")]),_:1}),r(v,{modelValue:P.value.visitor_phone,"onUpdate:modelValue":a[4]||(a[4]=e=>P.value.visitor_phone=e),class:"form-input",type:"number",maxlength:"11",placeholder:"输入手机号","placeholder-class":"ph"},null,8,["modelValue"])]),_:1})]),_:1})]),_:1})),r(l,{class:"safe-bottom"})]),_:1}),r(l,{class:"action-bar"},{default:t(()=>[r(M,{class:"btn primary",disabled:!G.value||E.value||D.value,onClick:de},{default:t(()=>[p(f(E.value?"提交中...":"确认预约"),1)]),_:1},8,["disabled"])]),_:1})]),_:1})}}}),[["__scopeId","data-v-6dbe80c8"]]);export{S as default};
|