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

351 lines
12 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: "",
travelDate: "",
origin: "",
destination: "",
travelDays: "",
adultCount: 0,
childCount: 0,
infantCount: 0,
submitting: false,
flashingField: "",
selectedDialCode: "86",
showCalendar: false,
minDate: "",
maxDate: ""
};
},
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`;
},
openCalendar() {
this.initDateRange();
this.$nextTick(() => {
this.showCalendar = true;
});
},
closeCalendar() {
this.showCalendar = false;
},
onCalendarConfirm(dates) {
if (dates && dates.length > 0) {
this.travelDate = dates[0];
}
this.showCalendar = false;
},
increaseCount(type) {
if (type === "adult") {
this.adultCount++;
} else if (type === "child") {
this.childCount++;
} else if (type === "infant") {
this.infantCount++;
}
},
decreaseCount(type) {
if (type === "adult" && this.adultCount > 0) {
this.adultCount--;
} else if (type === "child" && this.childCount > 0) {
this.childCount--;
} else if (type === "infant" && this.infantCount > 0) {
this.infantCount--;
}
},
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: "travelDate",
selector: "#fieldTravelDate",
check: () => !this.travelDate,
message: "请选择出行日期"
},
{
field: "origin",
selector: "#fieldOrigin",
check: () => !this.origin.trim(),
message: "请输入出发地"
},
{
field: "destination",
selector: "#fieldDestination",
check: () => !this.destination.trim(),
message: "请输入目的地"
},
{
field: "travelDays",
selector: "#fieldTravelDays",
check: () => !this.travelDays || parseInt(this.travelDays) <= 0,
message: "请输入有效的出行天数"
},
{
field: "personCount",
selector: "#fieldPersonCount",
check: () => this.adultCount === 0 && this.childCount === 0 && this.infantCount === 0,
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: "travel_planning",
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,
travelDate: this.travelDate,
origin: this.origin.trim(),
travelDestination: this.destination.trim(),
travelDays: parseInt(this.travelDays) || 0,
adultCount: this.adultCount,
childCount: this.childCount,
infantCount: this.infantCount
};
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/travel-planning-page.vue:383", "提交预约失败:", 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_calendar2 = common_vendor.resolveComponent("up-calendar");
(_easycom_up_input2 + _easycom_aure_country_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_calendar = () => "../../node-modules/uview-plus/components/u-calendar/u-calendar.js";
if (!Math) {
(_easycom_up_input + _easycom_aure_country_picker + _easycom_up_calendar)();
}
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return {
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.travelDate || "请选择出行日期"),
F: !$data.travelDate ? 1 : "",
G: common_assets._imports_1,
H: common_vendor.o((...args) => $options.openCalendar && $options.openCalendar(...args)),
I: $data.flashingField === "travelDate" ? 1 : "",
J: common_vendor.o(($event) => $data.origin = $event),
K: common_vendor.p({
placeholder: "请输入出发地",
border: "surround",
modelValue: $data.origin
}),
L: $data.flashingField === "origin" ? 1 : "",
M: common_vendor.o(($event) => $data.destination = $event),
N: common_vendor.p({
placeholder: "请输入目的地",
border: "surround",
modelValue: $data.destination
}),
O: $data.flashingField === "destination" ? 1 : "",
P: common_vendor.o(($event) => $data.travelDays = $event),
Q: common_vendor.p({
placeholder: "请输入出行天数",
border: "surround",
type: "number",
modelValue: $data.travelDays
}),
R: $data.flashingField === "travelDays" ? 1 : "",
S: common_vendor.o(($event) => $options.decreaseCount("adult")),
T: common_vendor.t($data.adultCount),
U: common_vendor.o(($event) => $options.increaseCount("adult")),
V: common_vendor.o(($event) => $options.decreaseCount("child")),
W: common_vendor.t($data.childCount),
X: common_vendor.o(($event) => $options.increaseCount("child")),
Y: common_vendor.o(($event) => $options.decreaseCount("infant")),
Z: common_vendor.t($data.infantCount),
aa: common_vendor.o(($event) => $options.increaseCount("infant")),
ab: $data.flashingField === "personCount" ? 1 : "",
ac: common_vendor.t(_ctx.$t("common.submit")),
ad: common_vendor.o(($event) => $options.checkData()),
ae: common_vendor.o($options.onCalendarConfirm),
af: common_vendor.o($options.closeCalendar),
ag: 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/travel-planning-page.js.map