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