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

379 lines
13 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");
require("../../modules/Config.js");
const appServer = new modules_api_AppServer.AppServer();
const _sfc_main = {
data() {
return {
serviceId: "",
serviceTitle: "",
userName: "",
userWechat: "",
userPhone: "",
userWhats: "",
remark: "",
origin: "",
destination: "",
flightNo: "",
departureDate: "",
petType: "",
petName: "",
hasQuarantineCert: true,
quarantineIndex: 0,
quarantineColumns: [
[
{
label: "是",
value: true
},
{
label: "否",
value: false
}
]
],
submitting: false,
flashingField: "",
selectedDialCode: "86",
showCalendar: false,
showQuarantinePicker: false,
minDate: "",
maxDate: ""
};
},
computed: {
quarantineCertText() {
const item = this.quarantineColumns[0].find((t) => t.value === this.hasQuarantineCert);
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`;
},
openCalendar() {
this.initDateRange();
this.$nextTick(() => {
this.showCalendar = true;
});
},
closeCalendar() {
this.showCalendar = false;
},
onCalendarConfirm(dates) {
if (dates && dates.length > 0) {
this.departureDate = dates[0];
}
this.showCalendar = false;
},
onQuarantineConfirm(e) {
const selected = e.value[0];
this.hasQuarantineCert = selected.value;
this.quarantineIndex = this.quarantineColumns[0].findIndex((t) => t.value === selected.value);
this.showQuarantinePicker = false;
},
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: "origin",
selector: "#fieldOrigin",
check: () => !this.origin.trim(),
message: "请输入出发地"
},
{
field: "destination",
selector: "#fieldDestination",
check: () => !this.destination.trim(),
message: "请输入目的地"
},
{
field: "flightNo",
selector: "#fieldFlightNo",
check: () => !this.flightNo.trim(),
message: "请输入航班号"
},
{
field: "departureDate",
selector: "#fieldDepartureDate",
check: () => !this.departureDate,
message: "请选择出发日期"
},
{
field: "petType",
selector: "#fieldPetType",
check: () => !this.petType.trim(),
message: "请输入宠物类型"
},
{
field: "petName",
selector: "#fieldPetName",
check: () => !this.petName.trim(),
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: "pet_transportation",
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,
origin: this.origin.trim(),
destination: this.destination.trim(),
flightNo: this.flightNo.trim(),
departureDate: this.departureDate,
petType: this.petType.trim(),
petName: this.petName.trim(),
hasQuarantineCert: this.hasQuarantineCert
};
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();
console.error("提交预约失败:", 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 {
a: common_vendor.o((...args) => $options.back && $options.back(...args)),
b: common_vendor.t(_ctx.$t("infoEntry.title")),
c: common_vendor.t(_ctx.$t("infoEntry.personalInfo")),
d: common_vendor.t(_ctx.$t("infoEntry.realName")),
e: common_vendor.o(($event) => $data.userName = $event),
f: common_vendor.p({
placeholder: _ctx.$t("infoEntry.realNamePlaceholder"),
border: "surround",
modelValue: $data.userName
}),
g: $data.flashingField === "userName" ? 1 : "",
h: common_vendor.t(_ctx.$t("infoEntry.wechat")),
i: common_vendor.t(_ctx.$t("infoEntry.contactMethod")),
j: common_vendor.o(($event) => $data.userWechat = $event),
k: common_vendor.p({
placeholder: _ctx.$t("infoEntry.wechatPlaceholder"),
border: "surround",
modelValue: $data.userWechat
}),
l: $data.flashingField === "contact" ? 1 : "",
m: common_vendor.t(_ctx.$t("infoEntry.phone")),
n: common_vendor.t(_ctx.$t("infoEntry.contactMethod")),
o: common_vendor.o(($event) => $data.selectedDialCode = $event),
p: 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
}),
q: common_vendor.o(($event) => $data.userPhone = $event),
r: common_vendor.p({
placeholder: _ctx.$t("infoEntry.phonePlaceholder"),
border: "surround",
modelValue: $data.userPhone
}),
s: $data.flashingField === "contact" ? 1 : "",
t: common_vendor.t(_ctx.$t("infoEntry.whatsapp")),
v: common_vendor.t(_ctx.$t("infoEntry.contactMethod")),
w: common_vendor.o(($event) => $data.userWhats = $event),
x: common_vendor.p({
placeholder: _ctx.$t("infoEntry.whatsappPlaceholder"),
border: "surround",
modelValue: $data.userWhats
}),
y: $data.flashingField === "contact" ? 1 : "",
z: common_vendor.t(_ctx.$t("infoEntry.remark")),
A: common_vendor.o(($event) => $data.remark = $event),
B: common_vendor.p({
placeholder: _ctx.$t("infoEntry.remarkPlaceholder"),
border: "surround",
modelValue: $data.remark
}),
C: common_vendor.t(_ctx.$t("infoEntry.serviceInfo")),
D: common_vendor.o(($event) => $data.origin = $event),
E: common_vendor.p({
placeholder: "请输入出发地",
border: "surround",
modelValue: $data.origin
}),
F: $data.flashingField === "origin" ? 1 : "",
G: common_vendor.o(($event) => $data.destination = $event),
H: common_vendor.p({
placeholder: "请输入目的地",
border: "surround",
modelValue: $data.destination
}),
I: $data.flashingField === "destination" ? 1 : "",
J: common_vendor.o(($event) => $data.flightNo = $event),
K: common_vendor.p({
placeholder: "请输入航班号",
border: "surround",
modelValue: $data.flightNo
}),
L: $data.flashingField === "flightNo" ? 1 : "",
M: common_vendor.t($data.departureDate || "请选择出发日期"),
N: !$data.departureDate ? 1 : "",
O: common_vendor.o((...args) => $options.openCalendar && $options.openCalendar(...args)),
P: $data.flashingField === "departureDate" ? 1 : "",
Q: common_vendor.o(($event) => $data.petType = $event),
R: common_vendor.p({
placeholder: "请输入宠物类型(如:狗、猫等)",
border: "surround",
modelValue: $data.petType
}),
S: $data.flashingField === "petType" ? 1 : "",
T: common_vendor.o(($event) => $data.petName = $event),
U: common_vendor.p({
placeholder: "请输入宠物名称",
border: "surround",
modelValue: $data.petName
}),
V: $data.flashingField === "petName" ? 1 : "",
W: common_vendor.t($options.quarantineCertText),
X: common_vendor.o(($event) => $data.showQuarantinePicker = true),
Y: $data.flashingField === "hasQuarantineCert" ? 1 : "",
Z: common_vendor.t(_ctx.$t("common.submit")),
aa: common_vendor.o(($event) => $options.checkData()),
ab: common_vendor.o($options.onQuarantineConfirm),
ac: common_vendor.o(($event) => $data.showQuarantinePicker = false),
ad: common_vendor.o(($event) => $data.showQuarantinePicker = false),
ae: common_vendor.p({
show: $data.showQuarantinePicker,
columns: $data.quarantineColumns,
defaultIndex: [$data.quarantineIndex],
keyName: "label"
}),
af: common_vendor.o($options.onCalendarConfirm),
ag: common_vendor.o($options.closeCalendar),
ah: 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], ["__file", "F:/gitCode/uniapp/appointment_system/miniprogram/src/pages/appointment/pet-transportation-page.vue"]]);
wx.createPage(MiniProgramPage);