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
9.4 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,Z as t,j as i,k as o,s as u,n,g as s,S as r,t as c,u as v,v as d,y as p,z as _,B as f,F as m,C as y,E as g,G as b,x as h,a1 as k,I as $,W as x,a7 as w}from"./index-DcvbZGSt.js";import{h as S,i as M}from"./content.Cgu-vdzk.js";import{g as C,l as D}from"./localProfile.D0TMRqfi.js";import{_ as N}from"./_plugin-vue_export-helper.BCo6x5W8.js";function V(e){if(null==e||""===e)return"";const l=String(e);let a="";if(/<[a-z][\s\S]*>/i.test(l))a=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);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:#4e5969;line-height:1.65;">${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 j=N(e({__name:"reserve",setup(e){const N=l(0),j=l(!1),F=l(!1),T=l(null),z=l(!1),U=l({activity_day_id:0,visitor_name:"",visitor_phone:"",booking_type:"individual",people_count:1});a(()=>{var e;return((null==(e=T.value)?void 0:e.days)||[]).find(e=>e.id===U.value.activity_day_id)});const Y=a(()=>!!U.value.activity_day_id&&!!U.value.visitor_name&&/^1\d{10}$/.test(U.value.visitor_phone)),B=a(()=>{var e,l;return V(null==(l=null==(e=T.value)?void 0:e.activity)?void 0:l.reservation_notice)}),I=a(()=>{var e,l;return String((null==(l=null==(e=T.value)?void 0:e.activity)?void 0:l.booking_audience)||"both")}),q=a(()=>{var e,l;return Math.max(1,Number((null==(l=null==(e=T.value)?void 0:e.activity)?void 0:l.min_people_per_order)||1))}),E=a(()=>{var e,l;const a=Math.max(1,Number((null==(l=null==(e=T.value)?void 0:e.activity)?void 0:l.max_people_per_order)||1));return Math.max(a,q.value)}),G=a(()=>{var e,l;return(null==(l=null==(e=T.value)?void 0:e.activity)?void 0:l.booking_modes)||["individual","group"]}),O=a(()=>"individual"===I.value),P=a(()=>`团体(${q.value}-${E.value}人)`),W=a(()=>{var e;return[...(null==(e=T.value)?void 0:e.days)||[]].sort((e,l)=>String(e.activity_date).localeCompare(String(l.activity_date)))});function Z(e){return String(e).padStart(2,"0")}function A(e){const l=new Date,a=`${l.getFullYear()}-${Z(l.getMonth()+1)}-${Z(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()}-${Z(i.getMonth()+1)}-${Z(i.getDate())}`)return"明天";const o=new Date(l);o.setDate(o.getDate()+2);return t===`${o.getFullYear()}-${Z(o.getMonth()+1)}-${Z(o.getDate())}`?"后天":""}function H(e){const l=String(e).slice(0,10).split("-");return 3!==l.length?"":`${Number(l[1])}${Number(l[2])}`}function J(e){const l=Number((null==e?void 0:e.available_count)??0);return l<=0?"0张":`${l}`}function K(){if("individual"===I.value)return U.value.booking_type="individual",void(U.value.people_count=1);if("group"===I.value?U.value.booking_type="group":G.value.includes(U.value.booking_type)||(U.value.booking_type="individual"),"individual"===U.value.booking_type)return void(U.value.people_count=1);const e=Math.floor(Number(U.value.people_count||0));U.value.people_count=Math.min(E.value,Math.max(q.value,e||q.value))}function L(){O.value||(U.value.booking_type="group",K())}async function Q(){var e,l;if(N.value){j.value=!0;try{T.value=await S(N.value),K();const a=((null==(e=T.value)?void 0:e.days)||[]).find(e=>e.is_bookable);if(a)U.value.activity_day_id=a.id;else{const e=((null==(l=T.value)?void 0:l.days)||[])[0];e&&(U.value.activity_day_id=e.id)}await async function(){if(s(r.accessToken))try{const e=await C();return(null==e?void 0:e.real_name)&&(U.value.visitor_name=e.real_name),void((null==e?void 0:e.phone)&&(U.value.visitor_phone=e.phone))}catch{}const e=D();(null==e?void 0:e.real_name)&&(U.value.visitor_name=e.real_name),(null==e?void 0:e.phone)&&(U.value.visitor_phone=e.phone)}()}catch(a){u({title:(null==a?void 0:a.message)||"加载预约信息失败",icon:"none"})}finally{j.value=!1}}}function R(){U.value.people_count=Math.max(q.value,(Number(U.value.people_count)||q.value)-1),K()}function X(){U.value.people_count=Math.min(E.value,(Number(U.value.people_count)||q.value)+1),K()}async function ee(){var e,l;if(Y.value&&N.value)if(K(),"group"===U.value.booking_type&&(U.value.people_count<q.value||U.value.people_count>E.value))u({title:`人数需在 ${q.value}-${E.value} 之间`,icon:"none"});else{F.value=!0;try{await M(N.value,U.value),u({title:"预约成功",icon:"success"}),setTimeout(()=>{w({url:`/pages/activity/detail?id=${N.value}`})},500)}catch(a){const t=(null==a?void 0:a.message)||(null==(l=null==(e=null==a?void 0:a.errors)?void 0:e[Object.keys((null==a?void 0:a.errors)||{})[0]])?void 0:l[0])||"预约失败";u({title:t,icon:"none"})}finally{F.value=!1}}else u({title:"请完整填写预约信息",icon:"none"})}return t(e=>{N.value=Number((null==e?void 0:e.id)||0),Q()}),(e,l)=>{const a=n,t=h,s=d,r=k,w=$,S=x;return c(),i(a,{class:"page-wrap"},{default:o(()=>[v(s,{"scroll-y":"",class:"page"},{default:o(()=>[j.value?(c(),i(a,{key:0,class:"loading-tip"},{default:o(()=>[p("加载中…")]),_:1})):(c(),i(a,{key:1,class:"content"},{default:o(()=>[v(a,{class:"card"},{default:o(()=>[v(a,{class:"act-title"},{default:o(()=>{var e,l;return[p(_((null==(l=null==(e=T.value)?void 0:e.activity)?void 0:l.title)||"活动预约"),1)]}),_:1}),v(a,{class:"field-label"},{default:o(()=>[p("日期")]),_:1}),v(s,{"scroll-x":"",class:"day-scroll","show-scrollbar":!1,"enable-flex":!0},{default:o(()=>[v(a,{class:"day-scroll-inner"},{default:o(()=>[(c(!0),f(m,null,y(W.value,e=>(c(),i(a,{key:e.id,class:g(["day-chip",{active:U.value.activity_day_id===e.id&&e.is_bookable,disabled:!e.is_bookable}]),onClick:l=>function(e){if(null==e?void 0:e.is_bookable)return void(U.value.activity_day_id=e.id);if((null==e?void 0:e.available_count)<=0||"sold_out"===(null==e?void 0:e.unavailable_reason))return void u({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"," ");u(l&&a?{title:`可预约时段:${l} ~ ${a}`,icon:"none",duration:2800}:{title:"该日期当前不可预约",icon:"none"})}(e)},{default:o(()=>[U.value.activity_day_id===e.id&&e.is_bookable?(c(),i(a,{key:0,class:"chip-check"},{default:o(()=>[p("✓")]),_:1})):b("",!0),v(t,{class:"chip-line1"},{default:o(()=>[p(_(A(e.activity_date)||" "),1)]),_:2},1024),v(t,{class:"chip-line2"},{default:o(()=>[p(_(H(e.activity_date)),1)]),_:2},1024),v(t,{class:"chip-line3"},{default:o(()=>[p(_(J(e)),1)]),_:2},1024)]),_:2},1032,["class","onClick"]))),128))]),_:1})]),_:1}),v(a,{class:"card-foot"},{default:o(()=>[v(t,{class:"foot-link",onClick:l[0]||(l[0]=e=>z.value=!z.value)},{default:o(()=>[p(_(z.value?"收起预约须知":"展开预约须知")+" ",1)]),_:1})]),_:1}),z.value&&B.value?(c(),i(a,{key:0,class:"notice-box"},{default:o(()=>[v(r,{class:"notice-inline-rich",nodes:B.value},null,8,["nodes"])]),_:1})):b("",!0)]),_:1}),v(a,{class:"card"},{default:o(()=>["both"===I.value?(c(),i(a,{key:0,class:"mode-row"},{default:o(()=>[v(t,{class:"mode-label"},{default:o(()=>[p("预约类型")]),_:1}),v(a,{class:"mode-btns"},{default:o(()=>[v(a,{class:g(["mode-pill",{on:"individual"===U.value.booking_type}]),onClick:l[1]||(l[1]=e=>{U.value.booking_type="individual",K()})},{default:o(()=>[p("个人")]),_:1},8,["class"]),v(a,{class:g(["mode-pill",{on:"group"===U.value.booking_type,disabled:O.value}]),onClick:L},{default:o(()=>[p(_(P.value),1)]),_:1},8,["class"])]),_:1})]),_:1})):b("",!0),v(a,{class:"count-row"},{default:o(()=>[v(t,{class:"count-name"},{default:o(()=>[p("参观人数")]),_:1}),"group"===I.value||"both"===I.value&&"group"===U.value.booking_type?(c(),i(a,{key:0,class:"stepper"},{default:o(()=>[v(a,{class:"step-btn",onClick:R},{default:o(()=>[p("")]),_:1}),v(w,{modelValue:U.value.people_count,"onUpdate:modelValue":l[2]||(l[2]=e=>U.value.people_count=e),modelModifiers:{number:!0},class:"step-val",type:"number",onBlur:l[3]||(l[3]=e=>K())},null,8,["modelValue"]),v(a,{class:"step-btn",onClick:X},{default:o(()=>[p("+")]),_:1})]),_:1})):(c(),i(t,{key:1,class:"count-fixed"},{default:o(()=>[p("1")]),_:1}))]),_:1})]),_:1}),v(a,{class:"card"},{default:o(()=>[v(a,{class:"card-hd"},{default:o(()=>[p("联系人信息")]),_:1}),v(a,{class:"form-row"},{default:o(()=>[v(t,{class:"form-label"},{default:o(()=>[p("联系人")]),_:1}),v(w,{modelValue:U.value.visitor_name,"onUpdate:modelValue":l[4]||(l[4]=e=>U.value.visitor_name=e),class:"form-input",placeholder:"请输入姓名","placeholder-class":"ph"},null,8,["modelValue"])]),_:1}),v(a,{class:"form-row last"},{default:o(()=>[v(t,{class:"form-label"},{default:o(()=>[p("手机号")]),_:1}),v(w,{modelValue:U.value.visitor_phone,"onUpdate:modelValue":l[5]||(l[5]=e=>U.value.visitor_phone=e),class:"form-input",type:"number",maxlength:"11",placeholder:"输入手机号","placeholder-class":"ph"},null,8,["modelValue"])]),_:1})]),_:1})]),_:1})),v(a,{class:"safe-bottom"})]),_:1}),v(a,{class:"action-bar"},{default:o(()=>[v(S,{class:"btn primary",disabled:!Y.value||F.value||j.value,onClick:ee},{default:o(()=>[p(_(F.value?"提交中...":"确认预约"),1)]),_:1},8,["disabled"])]),_:1})]),_:1})}}}),[["__scopeId","data-v-0e121f68"]]);export{j as default};