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