appointment_system/miniprogram/unpackage/dist/dev/mp-weixin/pages/appointment/hotel-reservation-page.js
2025-12-19 00:37:31 +08:00

500 lines
17 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"use strict";
const common_vendor = require("../../common/vendor.js");
const modules_api_AppServer = require("../../modules/api/AppServer.js");
const common_assets = require("../../common/assets.js");
const appServer = new modules_api_AppServer.AppServer();
const _sfc_main = {
data() {
return {
serviceId: "",
serviceTitle: "",
userName: "",
userWechat: "",
userPhone: "",
userWhats: "",
remark: "",
checkInDate: "",
checkOutDate: "",
countryCity: "",
hotelName: "",
roomCount: 1,
roomType: "standard",
roomTypeIndex: 0,
needMeal: false,
mealPlan: "breakfast",
mealPlanIndex: 0,
submitting: false,
flashingField: "",
selectedDialCode: "86",
showCalendar: false,
calendarType: "checkIn",
showRoomTypePicker: false,
showMealRequirementPicker: false,
showMealPlanPicker: false,
minDate: "",
maxDate: "",
roomTypeColumns: [
[
{
label: "标准间",
value: "standard"
},
{
label: "大床房",
value: "king"
},
{
label: "双床房",
value: "twin"
},
{
label: "套房",
value: "suite"
},
{
label: "家庭房",
value: "family"
}
]
],
mealRequirementColumns: [
[
{
label: "是",
value: true
},
{
label: "否",
value: false
}
]
],
mealPlanColumns: [
[
{
label: "早餐",
value: "breakfast"
},
{
label: "三餐",
value: "three_meals"
},
{
label: "全包",
value: "all_inclusive"
}
]
]
};
},
computed: {
roomTypeText() {
const item = this.roomTypeColumns[0].find((t) => t.value === this.roomType);
return item ? item.label : "标准间";
},
needMealText() {
return this.needMeal ? "是" : "否";
},
mealPlanText() {
const item = this.mealPlanColumns[0].find((t) => t.value === this.mealPlan);
return item ? item.label : "早餐";
}
},
onLoad(options) {
this.initDateRange();
if (options.id) {
this.serviceId = options.id;
}
if (options.title) {
this.serviceTitle = decodeURIComponent(options.title);
}
},
methods: {
initDateRange() {
const now = /* @__PURE__ */ new Date();
const year = now.getFullYear();
const month = String(now.getMonth() + 1).padStart(2, "0");
const day = String(now.getDate()).padStart(2, "0");
this.minDate = `${year}-${month}-${day}`;
this.maxDate = `${year + 2}-12-31`;
},
openCheckInCalendar() {
this.calendarType = "checkIn";
this.initDateRange();
this.$nextTick(() => {
this.showCalendar = true;
});
},
openCheckOutCalendar() {
this.calendarType = "checkOut";
if (this.checkInDate) {
this.minDate = this.checkInDate;
} else {
this.initDateRange();
}
this.$nextTick(() => {
this.showCalendar = true;
});
},
closeCalendar() {
this.showCalendar = false;
this.initDateRange();
},
onCalendarConfirm(dates) {
if (dates && dates.length > 0) {
if (this.calendarType === "checkIn") {
this.checkInDate = dates[0];
if (this.checkOutDate && this.checkOutDate < dates[0]) {
this.checkOutDate = "";
}
} else {
this.checkOutDate = dates[0];
}
}
this.showCalendar = false;
this.initDateRange();
},
onRoomTypeConfirm(e) {
const selected = e.value[0];
this.roomType = selected.value;
this.roomTypeIndex = this.roomTypeColumns[0].findIndex((t) => t.value === selected.value);
this.showRoomTypePicker = false;
},
onMealRequirementConfirm(e) {
const selected = e.value[0];
this.needMeal = selected.value;
this.showMealRequirementPicker = false;
},
onMealPlanConfirm(e) {
const selected = e.value[0];
this.mealPlan = selected.value;
this.mealPlanIndex = this.mealPlanColumns[0].findIndex((t) => t.value === selected.value);
this.showMealPlanPicker = false;
},
increaseRoomCount() {
this.roomCount++;
},
decreaseRoomCount() {
if (this.roomCount > 1) {
this.roomCount--;
}
},
checkData() {
const validations = [
{
field: "userName",
selector: "#fieldUserName",
check: () => !this.userName.trim(),
message: "请输入真实姓名"
},
{
field: "contact",
selector: "#fieldContact",
check: () => !this.userWechat.trim() && !this.userPhone.trim() && !this.userWhats.trim(),
message: "请至少填写一种联系方式(微信号/手机号/WhatsApp"
},
{
field: "checkInDate",
selector: "#fieldCheckInDate",
check: () => !this.checkInDate,
message: "请选择入住日期"
},
{
field: "checkOutDate",
selector: "#fieldCheckOutDate",
check: () => !this.checkOutDate,
message: "请选择退房日期"
},
{
field: "checkOutDate",
selector: "#fieldCheckOutDate",
check: () => this.checkInDate && this.checkOutDate && this.checkOutDate < this.checkInDate,
message: "退房日期不能早于入住日期"
},
{
field: "countryCity",
selector: "#fieldCountryCity",
check: () => !this.countryCity.trim(),
message: "请输入国家/城市"
},
{
field: "hotelName",
selector: "#fieldHotelName",
check: () => !this.hotelName.trim(),
message: "请输入酒店名称"
},
{
field: "roomCount",
selector: "#fieldRoomCount",
check: () => this.roomCount < 1,
message: "房间数量至少为1"
},
{
field: "mealPlan",
selector: "#fieldMealPlan",
check: () => this.needMeal && !this.mealPlan,
message: "请选择用餐方案"
}
];
for (const validation of validations) {
if (validation.check()) {
common_vendor.index.showToast({
title: validation.message,
icon: "none"
});
this.scrollToElement(validation.selector);
this.flashingField = validation.field;
setTimeout(() => {
this.flashingField = "";
}, 1500);
return;
}
}
this.submitAppointment();
},
async submitAppointment() {
var _a;
if (this.submitting)
return;
this.submitting = true;
common_vendor.index.showLoading({
title: "提交中...",
mask: true
});
try {
const appointmentData = {
hotServiceId: parseInt(this.serviceId) || null,
serviceType: "hotel",
realName: this.userName.trim(),
wechatId: this.userWechat.trim() || null,
phone: this.userPhone.trim() || null,
phoneCountryCode: this.userPhone.trim() ? this.selectedDialCode : null,
whatsapp: this.userWhats.trim() || null,
notes: this.remark.trim() || null,
checkInDate: this.checkInDate,
checkOutDate: this.checkOutDate,
countryCity: this.countryCity.trim(),
hotelName: this.hotelName.trim(),
roomCount: this.roomCount,
roomType: this.roomType,
needMeal: this.needMeal,
mealPlan: this.needMeal ? this.mealPlan : null
};
const result = await appServer.CreateAppointment(appointmentData);
common_vendor.index.hideLoading();
if (result.success || result.code === 0) {
common_vendor.index.showToast({
title: "预约提交成功",
icon: "success"
});
setTimeout(() => {
common_vendor.index.navigateBack({
delta: 1
});
}, 1500);
} else {
common_vendor.index.showToast({
title: ((_a = result.error) == null ? void 0 : _a.message) || "提交失败,请重试",
icon: "none"
});
}
} catch (error) {
common_vendor.index.hideLoading();
common_vendor.index.__f__("error", "at pages/appointment/hotel-reservation-page.vue:514", "提交预约失败:", error);
common_vendor.index.showToast({
title: "网络错误,请重试",
icon: "none"
});
} finally {
this.submitting = false;
}
},
scrollToElement(selector) {
const systemInfo = common_vendor.index.getSystemInfoSync();
const screenHeight = systemInfo.windowHeight;
const query = common_vendor.index.createSelectorQuery().in(this);
query.select(selector).boundingClientRect();
query.selectViewport().scrollOffset();
query.exec((res) => {
if (res[0] && res[1]) {
const rect = res[0];
const scrollInfo = res[1];
const targetScrollTop = scrollInfo.scrollTop + rect.top - screenHeight / 2 + rect.height / 2;
common_vendor.index.pageScrollTo({
scrollTop: Math.max(0, targetScrollTop),
duration: 300
});
}
});
},
back() {
common_vendor.index.navigateBack({
delta: 1
});
}
}
};
if (!Array) {
const _easycom_up_input2 = common_vendor.resolveComponent("up-input");
const _easycom_aure_country_picker2 = common_vendor.resolveComponent("aure-country-picker");
const _easycom_up_picker2 = common_vendor.resolveComponent("up-picker");
const _easycom_up_calendar2 = common_vendor.resolveComponent("up-calendar");
(_easycom_up_input2 + _easycom_aure_country_picker2 + _easycom_up_picker2 + _easycom_up_calendar2)();
}
const _easycom_up_input = () => "../../node-modules/uview-plus/components/u-input/u-input.js";
const _easycom_aure_country_picker = () => "../../uni_modules/aure-country-picker/components/aure-country-picker/aure-country-picker.js";
const _easycom_up_picker = () => "../../node-modules/uview-plus/components/u-picker/u-picker.js";
const _easycom_up_calendar = () => "../../node-modules/uview-plus/components/u-calendar/u-calendar.js";
if (!Math) {
(_easycom_up_input + _easycom_aure_country_picker + _easycom_up_picker + _easycom_up_calendar)();
}
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return common_vendor.e({
a: common_assets._imports_0,
b: common_vendor.o((...args) => $options.back && $options.back(...args)),
c: common_vendor.t(_ctx.$t("infoEntry.title")),
d: common_vendor.t(_ctx.$t("infoEntry.personalInfo")),
e: common_vendor.t(_ctx.$t("infoEntry.realName")),
f: common_vendor.o(($event) => $data.userName = $event),
g: common_vendor.p({
placeholder: _ctx.$t("infoEntry.realNamePlaceholder"),
border: "surround",
modelValue: $data.userName
}),
h: $data.flashingField === "userName" ? 1 : "",
i: common_vendor.t(_ctx.$t("infoEntry.wechat")),
j: common_vendor.t(_ctx.$t("infoEntry.contactMethod")),
k: common_vendor.o(($event) => $data.userWechat = $event),
l: common_vendor.p({
placeholder: _ctx.$t("infoEntry.wechatPlaceholder"),
border: "surround",
modelValue: $data.userWechat
}),
m: $data.flashingField === "contact" ? 1 : "",
n: common_vendor.t(_ctx.$t("infoEntry.phone")),
o: common_vendor.t(_ctx.$t("infoEntry.contactMethod")),
p: common_vendor.o(($event) => $data.selectedDialCode = $event),
q: common_vendor.p({
title: _ctx.$t("infoEntry.selectCountry"),
height: "70%",
width: "60vw",
duration: 350,
position: "bottom",
round: true,
radius: "24rpx",
["mask-closable"]: true,
modelValue: $data.selectedDialCode
}),
r: common_vendor.o(($event) => $data.userPhone = $event),
s: common_vendor.p({
placeholder: _ctx.$t("infoEntry.phonePlaceholder"),
border: "surround",
modelValue: $data.userPhone
}),
t: $data.flashingField === "contact" ? 1 : "",
v: common_vendor.t(_ctx.$t("infoEntry.whatsapp")),
w: common_vendor.t(_ctx.$t("infoEntry.contactMethod")),
x: common_vendor.o(($event) => $data.userWhats = $event),
y: common_vendor.p({
placeholder: _ctx.$t("infoEntry.whatsappPlaceholder"),
border: "surround",
modelValue: $data.userWhats
}),
z: $data.flashingField === "contact" ? 1 : "",
A: common_vendor.t(_ctx.$t("infoEntry.remark")),
B: common_vendor.o(($event) => $data.remark = $event),
C: common_vendor.p({
placeholder: _ctx.$t("infoEntry.remarkPlaceholder"),
border: "surround",
modelValue: $data.remark
}),
D: common_vendor.t(_ctx.$t("infoEntry.serviceInfo")),
E: common_vendor.t($data.checkInDate || "请选择入住日期"),
F: !$data.checkInDate ? 1 : "",
G: common_assets._imports_1,
H: common_vendor.o((...args) => $options.openCheckInCalendar && $options.openCheckInCalendar(...args)),
I: $data.flashingField === "checkInDate" ? 1 : "",
J: common_vendor.t($data.checkOutDate || "请选择退房日期"),
K: !$data.checkOutDate ? 1 : "",
L: common_assets._imports_1,
M: common_vendor.o((...args) => $options.openCheckOutCalendar && $options.openCheckOutCalendar(...args)),
N: $data.flashingField === "checkOutDate" ? 1 : "",
O: common_vendor.o(($event) => $data.countryCity = $event),
P: common_vendor.p({
placeholder: "请输入国家/城市",
border: "surround",
modelValue: $data.countryCity
}),
Q: $data.flashingField === "countryCity" ? 1 : "",
R: common_vendor.o(($event) => $data.hotelName = $event),
S: common_vendor.p({
placeholder: "请输入酒店名称",
border: "surround",
modelValue: $data.hotelName
}),
T: $data.flashingField === "hotelName" ? 1 : "",
U: common_vendor.o((...args) => $options.decreaseRoomCount && $options.decreaseRoomCount(...args)),
V: common_vendor.t($data.roomCount),
W: common_vendor.o((...args) => $options.increaseRoomCount && $options.increaseRoomCount(...args)),
X: $data.flashingField === "roomCount" ? 1 : "",
Y: common_vendor.t($options.roomTypeText),
Z: common_assets._imports_2$1,
aa: common_vendor.o(($event) => $data.showRoomTypePicker = true),
ab: $data.flashingField === "roomType" ? 1 : "",
ac: common_vendor.t($options.needMealText),
ad: common_assets._imports_2$1,
ae: common_vendor.o(($event) => $data.showMealRequirementPicker = true),
af: $data.needMeal
}, $data.needMeal ? {
ag: common_vendor.t($options.mealPlanText),
ah: common_assets._imports_2$1,
ai: common_vendor.o(($event) => $data.showMealPlanPicker = true),
aj: $data.flashingField === "mealPlan" ? 1 : ""
} : {}, {
ak: $data.needMeal
}, $data.needMeal ? {} : {}, {
al: common_vendor.t(_ctx.$t("common.submit")),
am: common_vendor.o(($event) => $options.checkData()),
an: common_vendor.o($options.onRoomTypeConfirm),
ao: common_vendor.o(($event) => $data.showRoomTypePicker = false),
ap: common_vendor.o(($event) => $data.showRoomTypePicker = false),
aq: common_vendor.p({
show: $data.showRoomTypePicker,
columns: $data.roomTypeColumns,
defaultIndex: [$data.roomTypeIndex],
keyName: "label"
}),
ar: common_vendor.o($options.onMealRequirementConfirm),
as: common_vendor.o(($event) => $data.showMealRequirementPicker = false),
at: common_vendor.o(($event) => $data.showMealRequirementPicker = false),
av: common_vendor.p({
show: $data.showMealRequirementPicker,
columns: $data.mealRequirementColumns,
defaultIndex: [$data.needMeal ? 0 : 1],
keyName: "label"
}),
aw: common_vendor.o($options.onMealPlanConfirm),
ax: common_vendor.o(($event) => $data.showMealPlanPicker = false),
ay: common_vendor.o(($event) => $data.showMealPlanPicker = false),
az: common_vendor.p({
show: $data.showMealPlanPicker,
columns: $data.mealPlanColumns,
defaultIndex: [$data.mealPlanIndex],
keyName: "label"
}),
aA: common_vendor.o($options.onCalendarConfirm),
aB: common_vendor.o($options.closeCalendar),
aC: common_vendor.p({
show: $data.showCalendar,
mode: "single",
minDate: $data.minDate,
maxDate: $data.maxDate,
confirmText: _ctx.$t("common.confirm"),
color: "#57C9DD"
})
});
}
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render]]);
wx.createPage(MiniProgramPage);
//# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/appointment/hotel-reservation-page.js.map