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
7.3 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 l,c as a,J as u,a as t,b as i,e as o,p as n,m as v,n as d,t as s,S as c,u as r,C as _,v as p,F as y,x as f,z as b,q as m,N as k,O as g,I as h,H as x,P as V}from"./index-C46MzMfW.js";import{f as $,h as C}from"./content.77V1RU5a.js";import{_ as M}from"./_plugin-vue_export-helper.BCo6x5W8.js";const N=M(e({__name:"reserve",setup(e){const M=l(0),N=l(!1),w=l(!1),j=l(null),S=l({activity_day_id:0,visitor_name:"",visitor_phone:"",id_card:"",booking_type:"individual",people_count:1}),T=a(()=>{var e;return((null==(e=j.value)?void 0:e.days)||[]).find(e=>e.id===S.value.activity_day_id)}),U=a(()=>!!S.value.activity_day_id&&!!S.value.visitor_name&&/^1\d{10}$/.test(S.value.visitor_phone)),I=a(()=>{var e,l;return String((null==(l=null==(e=j.value)?void 0:e.activity)?void 0:l.booking_audience)||"both")}),O=a(()=>{var e,l;return Math.max(1,Number((null==(l=null==(e=j.value)?void 0:e.activity)?void 0:l.min_people_per_order)||1))}),q=a(()=>{var e,l;return Math.max(1,Number((null==(l=null==(e=j.value)?void 0:e.activity)?void 0:l.max_people_per_order)||1))}),z=a(()=>{var e,l;return(null==(l=null==(e=j.value)?void 0:e.activity)?void 0:l.booking_modes)||["individual","group"]});function B(){if("individual"===I.value)return S.value.booking_type="individual",void(S.value.people_count=1);if("group"===I.value?S.value.booking_type="group":z.value.includes(S.value.booking_type)||(S.value.booking_type="individual"),"individual"===S.value.booking_type)return void(S.value.people_count=1);const e=Math.floor(Number(S.value.people_count||0));S.value.people_count=Math.min(q.value,Math.max(O.value,e||O.value))}function F(e){if(null==e?void 0:e.is_bookable)return void(S.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 o({title:"该日期已无余票",icon:"none"});const l=function(e){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"," ");return l&&a?`${l} ~ ${a}`:""}(e);o(l?{title:`可预约时段:${l}`,icon:"none",duration:2800}:{title:"该日期当前不可预约",icon:"none"})}async function H(){var e,l;if(U.value&&M.value)if(B(),"group"===S.value.booking_type&&(S.value.people_count<O.value||S.value.people_count>q.value))o({title:`人数需在 ${O.value}-${q.value} 之间`,icon:"none"});else{w.value=!0;try{const e=await C(M.value,S.value);return o({title:"预约成功",icon:"success"}),setTimeout(()=>{V({url:`/pages/activity/detail?id=${M.value}`})},500),e}catch(a){const u=(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])||"预约失败";o({title:u,icon:"none"})}finally{w.value=!1}}else o({title:"请完整填写预约信息",icon:"none"})}return u(e=>{M.value=Number((null==e?void 0:e.id)||0),async function(){var e;if(M.value){N.value=!0;try{j.value=await $(M.value),B();const l=((null==(e=j.value)?void 0:e.days)||[]).find(e=>e.is_bookable);l&&(S.value.activity_day_id=l.id)}catch(l){o({title:(null==l?void 0:l.message)||"加载预约信息失败",icon:"none"})}finally{N.value=!1}}}()}),(e,l)=>{const a=n,u=m,o=g,V=k,$=h,C=c,M=x;return v(),t(a,{class:"page-wrap"},{default:i(()=>[d(a,{class:"head"},{default:i(()=>[s("活动预约")]),_:1}),d(C,{"scroll-y":"",class:"page"},{default:i(()=>[d(a,{class:"card"},{default:i(()=>{var e,l;return[d(a,{class:"title"},{default:i(()=>{var e,l;return[s(r((null==(l=null==(e=j.value)?void 0:e.activity)?void 0:l.title)||"活动预约"),1)]}),_:1}),d(a,{class:"meta"},{default:i(()=>{var e,l,a;return[s(r((null==(a=null==(l=null==(e=j.value)?void 0:e.activity)?void 0:l.venue)?void 0:a.name)||"-"),1)]}),_:1}),(null==(l=null==(e=j.value)?void 0:e.activity)?void 0:l.reservation_notice)?(v(),t(a,{key:0,class:"meta"},{default:i(()=>{var e,l;return[s(r(null==(l=null==(e=j.value)?void 0:e.activity)?void 0:l.reservation_notice),1)]}),_:1})):_("",!0)]}),_:1}),d(a,{class:"card"},{default:i(()=>[d(a,{class:"sub-title"},{default:i(()=>[s("选择日期")]),_:1}),d(a,{class:"day-wrap"},{default:i(()=>{var e;return[(v(!0),p(y,null,f((null==(e=j.value)?void 0:e.days)||[],e=>(v(),t(a,{key:e.id,class:b(["day-item",{active:S.value.activity_day_id===e.id,disabled:!e.is_bookable}]),onClick:l=>F(e)},{default:i(()=>[d(a,{class:"d1"},{default:i(()=>[s(r(e.activity_date),1)]),_:2},1024),e.available_count<=0?(v(),t(a,{key:0,class:"d2"},{default:i(()=>[s("已售罄")]),_:1})):e.is_bookable?(v(),t(a,{key:2,class:"d2"},{default:i(()=>[s("余票 "+r(e.available_count),1)]),_:2},1024)):(v(),t(a,{key:1,class:"d2"},{default:i(()=>[s("未到预约时间")]),_:1}))]),_:2},1032,["class","onClick"]))),128))]}),_:1})]),_:1}),d(a,{class:"card"},{default:i(()=>[d(a,{class:"sub-title"},{default:i(()=>[s("联系人信息")]),_:1}),"both"===I.value?(v(),t(a,{key:0,class:"mode-row",style:{"margin-top":"0"}},{default:i(()=>[d(u,null,{default:i(()=>[s("预约类型:")]),_:1}),d(V,{class:"radio"},{default:i(()=>[d(o,{value:"individual",checked:"individual"===S.value.booking_type,onClick:l[0]||(l[0]=e=>{S.value.booking_type="individual",B()})},null,8,["checked"]),s(" 个人 ")]),_:1}),d(V,{class:"radio"},{default:i(()=>[d(o,{value:"group",checked:"group"===S.value.booking_type,onClick:l[1]||(l[1]=e=>{S.value.booking_type="group",B()})},null,8,["checked"]),s(" 团体 ")]),_:1})]),_:1})):_("",!0),d($,{modelValue:S.value.visitor_name,"onUpdate:modelValue":l[2]||(l[2]=e=>S.value.visitor_name=e),class:"ipt",placeholder:"请输入姓名"},null,8,["modelValue"]),d($,{modelValue:S.value.visitor_phone,"onUpdate:modelValue":l[3]||(l[3]=e=>S.value.visitor_phone=e),class:"ipt",type:"number",maxlength:"11",placeholder:"请输入手机号"},null,8,["modelValue"]),_("",!0),d(a,{class:"hint"},{default:i(()=>["individual"===I.value?(v(),t(u,{key:0},{default:i(()=>[s("仅支持个人预约1人。")]),_:1})):"group"===I.value?(v(),t(u,{key:1},{default:i(()=>[s("团体预约需填写领队信息与团体人数(人数包含领队本人)。")]),_:1})):(v(),t(u,{key:2},{default:i(()=>[s("个人为1人团体为联系人信息 + 人数(人数包含联系人本人)。")]),_:1}))]),_:1}),"group"===S.value.booking_type?(v(),t(a,{key:2,class:"count-row"},{default:i(()=>[d(u,{class:"count-label"},{default:i(()=>[s("预约人数")]),_:1}),d(a,{class:"count-ctrl"},{default:i(()=>[d(a,{class:"count-btn",onClick:l[5]||(l[5]=e=>{S.value.people_count=Math.max(O.value,(Number(S.value.people_count)||O.value)-1),B()})},{default:i(()=>[s("-")]),_:1}),d($,{modelValue:S.value.people_count,"onUpdate:modelValue":l[6]||(l[6]=e=>S.value.people_count=e),class:"count-ipt",type:"number",maxlength:3,onBlur:l[7]||(l[7]=e=>B())},null,8,["modelValue"]),d(a,{class:"count-btn",onClick:l[8]||(l[8]=e=>{S.value.people_count=Math.min(q.value,(Number(S.value.people_count)||O.value)+1),B()})},{default:i(()=>[s("+")]),_:1})]),_:1}),d(u,{class:"count-range"},{default:i(()=>[s(r(O.value)+"-"+r(q.value),1)]),_:1})]),_:1})):_("",!0)]),_:1}),d(a,{class:"safe-bottom"})]),_:1}),d(a,{class:"action-bar"},{default:i(()=>[d(a,{class:"left"},{default:i(()=>[s(r(T.value?`${T.value.activity_date} · 余票${T.value.available_count}`:"请选择日期"),1)]),_:1}),d(M,{class:"btn",disabled:!U.value||w.value||N.value,onClick:H},{default:i(()=>[s(r(w.value?"提交中...":"确认预约"),1)]),_:1},8,["disabled"])]),_:1})]),_:1})}}}),[["__scopeId","data-v-6452f35c"]]);export{N as default};