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.
szkp-map-h5/dist/build/h5/assets/pages-activity-reserve.GaDh...

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