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
12 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 i,j as o,k as n,a0 as u,s,m as r,g as c,S as v,a2 as d,u as p,a1 as _,n as f,p as y,q as m,v as g,x as b,y as h,F as k,z as $,C as x,J as w,t as M,D as S,E as D,_ as C,I as N,R as j,a3 as V}from"./index-BQvUePVO.js";import{h as A,i as T}from"./content.R922wQQ4.js";import{g as F,l as z}from"./localProfile.nTeK2MPl.js";import{i as Y,a as q}from"./icon_up.DJ5zmdk8.js";import{_ as I}from"./_plugin-vue_export-helper.BCo6x5W8.js";function R(e){if(null==e||""===e)return"";const l=String(e);let a="";if(/<[a-z][\s\S]*>/i.test(l)){const e=function(e){if(!e||"string"!=typeof e)return"";const l="max-width:100%;height:auto;display:block;vertical-align:top;";return e.replace(/<img\b([\s\S]*?)(\/>|>)/gi,(e,a,t)=>{const i=String(a).trim();return/style\s*=/i.test(i)?/max-width\s*:/i.test(i)?e:e.replace(/style\s*=\s*(["'])([\s\S]*?)\1/i,(e,a,t)=>/max-width/i.test(t)?e:`style=${a}${t};${l}${a}`):`<img ${i} style="${l}"${"/>"===t?" />":">"}`})}(l);a=`<div style="font-size:13px;color:#2c2c2c;line-height:1.8;">${e}</div>`}else{const e=function(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}(l);a=`<div style="white-space:pre-wrap;font-size:13px;color:#2c2c2c;line-height:1.8;">${e}</div>`}return(t=a)&&String(t).trim()&&String(t).replace(/<[^>]+>/g," ").replace(/&nbsp;/gi," ").replace(/\s+/g," ").trim().length>0?a:"";var t}const U=I(e({__name:"reserve",setup(e){const I=l(0),U=l(!1),B=l(!1),O=l(null),E=l(!0),J=l(!1),L=l({activity_day_id:0,visitor_name:"",visitor_phone:"",booking_type:"individual",people_count:1});a(()=>{var e;return((null==(e=O.value)?void 0:e.days)||[]).find(e=>e.id===L.value.activity_day_id)});const P=a(()=>!!L.value.activity_day_id&&!!L.value.visitor_name&&/^1\d{10}$/.test(L.value.visitor_phone)),W=a(()=>{var e,l;return R(null==(l=null==(e=O.value)?void 0:e.activity)?void 0:l.reservation_notice)});t(W,()=>{E.value=!0,u(()=>{setTimeout(()=>{var e;const l=null==(e=_())?void 0:e.proxy,a=d();l&&a.in(l);const t=p(187);a.select(".judge-notice-reserve").boundingClientRect(),a.exec(e=>{const[l]=e||[];J.value=!!(l&&l.height&&l.height>t+1),J.value?E.value=!1:E.value=!0})},120)})});const G=a(()=>{var e,l;return String((null==(l=null==(e=O.value)?void 0:e.activity)?void 0:l.booking_audience)||"both")}),H=a(()=>{var e,l;return Math.max(1,Number((null==(l=null==(e=O.value)?void 0:e.activity)?void 0:l.min_people_per_order)||1))}),K=a(()=>{var e,l;const a=Math.max(1,Number((null==(l=null==(e=O.value)?void 0:e.activity)?void 0:l.max_people_per_order)||1));return Math.max(a,H.value)}),Q=a(()=>{var e,l;return(null==(l=null==(e=O.value)?void 0:e.activity)?void 0:l.booking_modes)||["individual","group"]}),X=a(()=>"individual"===G.value),Z=a(()=>"group"===G.value),ee=a(()=>`团体(${H.value}-${K.value}人)`),le=a(()=>"group"===G.value||"both"===G.value&&"group"===L.value.booking_type),ae=a(()=>le.value&&Math.floor(Number(L.value.people_count)||H.value)<=H.value),te=a(()=>le.value&&Math.floor(Number(L.value.people_count)||H.value)>=K.value),ie=a(()=>{var e;return[...(null==(e=O.value)?void 0:e.days)||[]].sort((e,l)=>String(e.activity_date).localeCompare(String(l.activity_date)))}),oe=l(0);function ne(){if(!ie.value.length)return void(oe.value=0);const e=L.value.activity_day_id;if(!e)return void(oe.value=0);const l=ie.value.findIndex(l=>l.id===e);l<0||u(()=>{setTimeout(()=>{var a;const t=null==(a=_())?void 0:a.proxy,i=d();t&&i.in(t),i.select(".day-scroll").fields({scrollOffset:!0,size:!0,rect:!0}),i.select(`#daycell-${e}`).boundingClientRect(),i.exec(e=>{const a=Array.isArray(e)?e:[],t=a[0],i=a[1];if(null!=t&&null!=i&&"number"==typeof t.left&&"number"==typeof i.left){const e=Number(t.scrollLeft??0),l=i.left-t.left,a=Math.max(0,Math.round(e+l));return void(oe.value=a)}if(l<=0)return void(oe.value=0);const o=160*l;oe.value=Math.round(p(o))})},80)})}function ue(e){return String(e).padStart(2,"0")}function se(){var e;const l=(null==(e=O.value)?void 0:e.days)||[];if(!l.length)return void(L.value.activity_day_id=0);const a=l.filter(e=>e.is_bookable);if(a.length){const e=function(){const e=new Date;return`${e.getFullYear()}-${ue(e.getMonth()+1)}-${ue(e.getDate())}`}(),l=a.find(l=>{return a=l.activity_date,String(a||"").slice(0,10)===e;var a});return void(L.value.activity_day_id=l?l.id:a[0].id)}const t=l[0];L.value.activity_day_id=t?t.id:0}function re(e){const l=new Date,a=`${l.getFullYear()}-${ue(l.getMonth()+1)}-${ue(l.getDate())}`,t=String(e).slice(0,10);if(t===a)return"今天";const i=new Date(l);i.setDate(i.getDate()+1);if(t===`${i.getFullYear()}-${ue(i.getMonth()+1)}-${ue(i.getDate())}`)return"明天";const o=new Date(l);o.setDate(o.getDate()+2);return t===`${o.getFullYear()}-${ue(o.getMonth()+1)}-${ue(o.getDate())}`?"后天":""}function ce(e){const l=String(e).slice(0,10).split("-");return 3!==l.length?"":`${Number(l[1])}${Number(l[2])}`}function ve(e){if((null==e?void 0:e.already_reserved)||"already_reserved"===(null==e?void 0:e.unavailable_reason))return"已约";const l=Number((null==e?void 0:e.available_count)??0);return l<=0?"0张":`${l}`}function de(){if("individual"===G.value)return L.value.booking_type="individual",void(L.value.people_count=1);if("group"===G.value?L.value.booking_type="group":Q.value.includes(L.value.booking_type)||(L.value.booking_type="individual"),"individual"===L.value.booking_type)return void(L.value.people_count=1);const e=Math.floor(Number(L.value.people_count||0));L.value.people_count=Math.min(K.value,Math.max(H.value,e||H.value))}function pe(){Z.value||(L.value.booking_type="individual",de())}function _e(){X.value||(L.value.booking_type="group",de())}async function fe(){if(I.value){U.value=!0;try{O.value=await A(I.value),de(),se(),await async function(){if(c(v.accessToken))try{const e=await F();return(null==e?void 0:e.real_name)&&(L.value.visitor_name=e.real_name),void((null==e?void 0:e.phone)&&(L.value.visitor_phone=e.phone))}catch{}const e=z();(null==e?void 0:e.real_name)&&(L.value.visitor_name=e.real_name),(null==e?void 0:e.phone)&&(L.value.visitor_phone=e.phone)}(),u(()=>{setTimeout(()=>ne(),100)})}catch(e){s({title:(null==e?void 0:e.message)||"加载预约信息失败",icon:"none"})}finally{U.value=!1}}}function ye(){ae.value||(L.value.people_count=Math.max(H.value,(Number(L.value.people_count)||H.value)-1),de())}function me(){te.value||(L.value.people_count=Math.min(K.value,(Number(L.value.people_count)||H.value)+1),de())}async function ge(){if(P.value&&I.value)if(de(),"group"===L.value.booking_type&&(L.value.people_count<H.value||L.value.people_count>K.value))s({title:`人数需在 ${H.value}-${K.value} 之间`,icon:"none"});else{B.value=!0;try{await T(I.value,L.value),s({title:"预约成功",icon:"success"}),setTimeout(()=>{V({url:`/pages/activity/detail?id=${I.value}`})},500)}catch(e){const l=(null==e?void 0:e.errors)||{},a=Array.isArray(l.activity_day_id)&&l.activity_day_id[0]||Array.isArray(l.visitor_phone)&&l.visitor_phone[0]||""||("string"==typeof(null==e?void 0:e.message)?e.message:"")||Object.keys(l).map(e=>Array.isArray(l[e])?l[e][0]:"").find(Boolean)||"预约失败";s({title:a,icon:"none"})}finally{B.value=!1}}else s({title:"请完整填写预约信息",icon:"none"})}return i(e=>{I.value=Number((null==e?void 0:e.id)||0),fe()}),(e,l)=>{const a=r,t=M,i=m,c=S,v=C,d=N,p=j;return f(),o(a,{class:"page-wrap"},{default:n(()=>[y(i,{"scroll-y":"",class:"page"},{default:n(()=>[U.value?(f(),o(a,{key:0,class:"loading-tip"},{default:n(()=>[g("加载中…")]),_:1})):(f(),o(a,{key:1,class:"content"},{default:n(()=>[y(a,{class:"card"},{default:n(()=>[y(a,{class:"act-title"},{default:n(()=>{var e,l;return[g(b((null==(l=null==(e=O.value)?void 0:e.activity)?void 0:l.title)||"活动预约"),1)]}),_:1}),y(a,{class:"field-label"},{default:n(()=>[g("日期")]),_:1}),y(i,{"scroll-x":"",class:"day-scroll","show-scrollbar":!1,"enable-flex":!0,"scroll-left":oe.value,"scroll-with-animation":!0},{default:n(()=>[y(a,{class:"day-scroll-inner"},{default:n(()=>[(f(!0),h(k,null,$(ie.value,e=>(f(),o(a,{id:"daycell-"+e.id,key:e.id,class:x(["day-chip",{active:L.value.activity_day_id===e.id&&e.is_bookable,disabled:!e.is_bookable}]),onClick:l=>function(e){if((null==e?void 0:e.already_reserved)||"already_reserved"===(null==e?void 0:e.unavailable_reason))return void s({title:"您已预约过该日期",icon:"none"});if(null==e?void 0:e.is_bookable)return L.value.activity_day_id=e.id,void u(()=>{setTimeout(()=>ne(),80)});if((null==e?void 0:e.available_count)<=0||"sold_out"===(null==e?void 0:e.unavailable_reason))return void s({title:"该日期已无余票",icon:"none"});const l=String((null==e?void 0:e.opens_at)||"").slice(0,16).replace("T"," "),a=String((null==e?void 0:e.closes_at)||"").slice(0,16).replace("T"," ");s(l&&a?{title:`可预约时段:${l} ~ ${a}`,icon:"none",duration:2800}:{title:"该日期当前不可预约",icon:"none"})}(e)},{default:n(()=>[L.value.activity_day_id===e.id&&e.is_bookable?(f(),o(a,{key:0,class:"chip-check"},{default:n(()=>[g("✓")]),_:1})):w("",!0),y(t,{class:"chip-line1"},{default:n(()=>[g(b(re(e.activity_date)||" "),1)]),_:2},1024),y(t,{class:"chip-line2"},{default:n(()=>[g(b(ce(e.activity_date)),1)]),_:2},1024),y(t,{class:"chip-line3"},{default:n(()=>[g(b(ve(e)),1)]),_:2},1024)]),_:2},1032,["id","class","onClick"]))),128))]),_:1})]),_:1},8,["scroll-left"]),W.value?(f(),o(a,{key:0,class:"notice-block"},{default:n(()=>[y(a,{class:"sec-title-row notice-head-row"},{default:n(()=>[y(t,{class:"notice-label"},{default:n(()=>[g("预约须知")]),_:1}),J.value?(f(),o(a,{key:0,class:"expand-arrow-tap",onClick:l[0]||(l[0]=e=>E.value=!E.value)},{default:n(()=>[y(c,{class:"expand-arrow-img",src:E.value?D(Y):D(q),mode:"aspectFit"},null,8,["src"])]),_:1})):w("",!0)]),_:1}),y(a,{class:x(["notice-block-body judge-notice-reserve",{"is-collapsed":J.value&&!E.value}])},{default:n(()=>[y(v,{class:"notice-inline-rich",nodes:W.value},null,8,["nodes"])]),_:1},8,["class"])]),_:1})):w("",!0)]),_:1}),O.value?(f(),o(a,{key:0,class:"card"},{default:n(()=>[y(a,{class:"mode-row"},{default:n(()=>[y(t,{class:"mode-label"},{default:n(()=>[g("预约类型")]),_:1}),y(a,{class:"mode-btns"},{default:n(()=>[y(a,{class:x(["mode-pill",{on:"individual"===L.value.booking_type,disabled:Z.value}]),onClick:pe},{default:n(()=>[g("个人")]),_:1},8,["class"]),y(a,{class:x(["mode-pill",{on:"group"===L.value.booking_type,disabled:X.value}]),onClick:_e},{default:n(()=>[g(b(ee.value),1)]),_:1},8,["class"])]),_:1})]),_:1}),le.value?(f(),o(a,{key:0,class:"count-row"},{default:n(()=>[y(t,{class:"count-name"},{default:n(()=>[g("参观人数")]),_:1}),y(a,{class:"stepper"},{default:n(()=>[y(a,{class:x(["step-btn",{disabled:ae.value}]),onClick:ye},{default:n(()=>[g("")]),_:1},8,["class"]),y(d,{modelValue:L.value.people_count,"onUpdate:modelValue":l[1]||(l[1]=e=>L.value.people_count=e),modelModifiers:{number:!0},class:"step-val",type:"number",onBlur:l[2]||(l[2]=e=>de())},null,8,["modelValue"]),y(a,{class:x(["step-btn",{disabled:te.value}]),onClick:me},{default:n(()=>[g("+")]),_:1},8,["class"])]),_:1})]),_:1})):w("",!0)]),_:1})):w("",!0),y(a,{class:"card"},{default:n(()=>[y(a,{class:"card-hd"},{default:n(()=>[g("联系人信息")]),_:1}),y(a,{class:"form-row"},{default:n(()=>[y(t,{class:"form-label"},{default:n(()=>[g("联系人")]),_:1}),y(d,{modelValue:L.value.visitor_name,"onUpdate:modelValue":l[3]||(l[3]=e=>L.value.visitor_name=e),class:"form-input",placeholder:"请输入姓名","placeholder-class":"ph"},null,8,["modelValue"])]),_:1}),y(a,{class:"form-row last"},{default:n(()=>[y(t,{class:"form-label"},{default:n(()=>[g("手机号")]),_:1}),y(d,{modelValue:L.value.visitor_phone,"onUpdate:modelValue":l[4]||(l[4]=e=>L.value.visitor_phone=e),class:"form-input",type:"number",maxlength:"11",placeholder:"输入手机号","placeholder-class":"ph"},null,8,["modelValue"])]),_:1})]),_:1})]),_:1})),y(a,{class:"safe-bottom"})]),_:1}),y(a,{class:"action-bar"},{default:n(()=>[y(p,{class:"btn primary",disabled:!P.value||B.value||U.value,onClick:ge},{default:n(()=>[g(b(B.value?"提交中...":"确认预约"),1)]),_:1},8,["disabled"])]),_:1})]),_:1})}}}),[["__scopeId","data-v-ad637713"]]);export{U as default};