2025-08-14 17:06:05 +08:00
|
|
|
|
<template>
|
|
|
|
|
|
<view class="page">
|
|
|
|
|
|
<base-background />
|
|
|
|
|
|
<!-- 使用自定义导航栏组件 -->
|
|
|
|
|
|
<custom-navbar ref="customNavbar" title="活动报名" />
|
|
|
|
|
|
<view :style="{ backgroundColor: CommonEnum.BASE_COLOR }" class="header">
|
|
|
|
|
|
<!-- 页面内容将在这里添加 -->
|
|
|
|
|
|
<text>选择活动日期</text>
|
|
|
|
|
|
<scroll-view class="scroll-view" scroll-x="true">
|
2025-08-14 17:28:33 +08:00
|
|
|
|
<view
|
|
|
|
|
|
v-for="(date, index) in dateOptions"
|
|
|
|
|
|
:key="index"
|
|
|
|
|
|
:class="{ selected: selectedDate === date.value }"
|
|
|
|
|
|
class="scroll-view-item_date"
|
|
|
|
|
|
@click="selectDate(date.value)"
|
|
|
|
|
|
>
|
|
|
|
|
|
{{ date.label }}
|
|
|
|
|
|
</view>
|
2025-08-14 17:06:05 +08:00
|
|
|
|
</scroll-view>
|
|
|
|
|
|
<text>选择活动时段</text>
|
|
|
|
|
|
<scroll-view class="scroll-view" scroll-x="true">
|
2025-08-14 17:28:33 +08:00
|
|
|
|
<view
|
|
|
|
|
|
v-for="(time, index) in timeOptions"
|
|
|
|
|
|
:key="index"
|
|
|
|
|
|
:class="{ selected: selectedTime === time.value }"
|
|
|
|
|
|
class="scroll-view-item_time"
|
|
|
|
|
|
@click="selectTime(time.value)"
|
|
|
|
|
|
>
|
|
|
|
|
|
{{ time.label }}
|
|
|
|
|
|
</view>
|
2025-08-14 17:06:05 +08:00
|
|
|
|
</scroll-view>
|
|
|
|
|
|
<text>参与活动人数</text>
|
2025-09-19 11:02:40 +08:00
|
|
|
|
<!-- <scroll-view class="scroll-view" scroll-x="true">-->
|
|
|
|
|
|
<scroll-view class="scroll-view">
|
2025-08-14 17:28:33 +08:00
|
|
|
|
<view
|
|
|
|
|
|
v-for="(number, index) in numberOptions"
|
|
|
|
|
|
:key="index"
|
2025-08-15 09:02:09 +08:00
|
|
|
|
:class="{
|
|
|
|
|
|
selected:
|
|
|
|
|
|
selectedNumber === number.value ||
|
|
|
|
|
|
(number.value === 'custom' &&
|
|
|
|
|
|
!['1', '2'].includes(selectedNumber)),
|
|
|
|
|
|
}"
|
2025-08-14 17:28:33 +08:00
|
|
|
|
class="scroll-view-item_number"
|
|
|
|
|
|
@click="selectNumber(number.value)"
|
|
|
|
|
|
>
|
|
|
|
|
|
{{ number.label }}
|
|
|
|
|
|
</view>
|
2025-08-14 17:06:05 +08:00
|
|
|
|
</scroll-view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="contact">
|
|
|
|
|
|
<view class="contact-item">
|
|
|
|
|
|
<view class="info">姓名</view>
|
2025-08-14 17:28:33 +08:00
|
|
|
|
<input v-model="formData.name" placeholder="请输入姓名" type="text" />
|
2025-08-14 17:06:05 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
<view class="contact-item">
|
|
|
|
|
|
<view class="info">联系号码</view>
|
2025-08-14 17:28:33 +08:00
|
|
|
|
<input v-model="formData.phone" placeholder="填写手机号" type="text" />
|
2025-08-14 17:06:05 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="submit">
|
2025-08-14 17:28:33 +08:00
|
|
|
|
<view class="submit-message"
|
2025-08-15 10:09:04 +08:00
|
|
|
|
>{{ getSelectedDateLabel() }}
|
|
|
|
|
|
|
2025-08-15 10:03:43 +08:00
|
|
|
|
{{ getSelectedNumberLabel() }}
|
2025-08-15 09:02:09 +08:00
|
|
|
|
</view>
|
2025-08-14 17:28:33 +08:00
|
|
|
|
<view class="submit-button" @click="submitApplication">提交报名</view>
|
2025-08-14 17:06:05 +08:00
|
|
|
|
</view>
|
2025-08-15 09:02:09 +08:00
|
|
|
|
|
2025-08-14 17:49:57 +08:00
|
|
|
|
<!-- 自定义人数弹窗 -->
|
2025-08-15 09:02:09 +08:00
|
|
|
|
<custom-number-modal
|
|
|
|
|
|
:visible="showCustomNumberModal"
|
|
|
|
|
|
@close="closeCustomModal"
|
|
|
|
|
|
@confirm="handleCustomNumberConfirm"
|
|
|
|
|
|
/>
|
2025-08-14 17:06:05 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
|
import { CommonEnum } from "@/enum/common.js";
|
|
|
|
|
|
import SearchBox from "../../components/search-box/search-box.vue";
|
2025-08-15 09:02:09 +08:00
|
|
|
|
import CustomNumberModal from "../../components/custom-number-modal/custom-number-modal.vue";
|
2025-08-15 10:03:43 +08:00
|
|
|
|
import activityApi from "@/api/activity/activity.js";
|
2025-08-14 17:06:05 +08:00
|
|
|
|
|
|
|
|
|
|
export default {
|
|
|
|
|
|
components: {
|
|
|
|
|
|
MonkSearchBox: SearchBox,
|
2025-08-15 09:02:09 +08:00
|
|
|
|
CustomNumberModal,
|
2025-08-14 17:06:05 +08:00
|
|
|
|
},
|
|
|
|
|
|
data() {
|
|
|
|
|
|
return {
|
|
|
|
|
|
bgc: {
|
|
|
|
|
|
backgroundColor: "#F5F0E7",
|
|
|
|
|
|
},
|
|
|
|
|
|
CommonEnum,
|
|
|
|
|
|
searchName: "",
|
2025-08-14 17:28:33 +08:00
|
|
|
|
|
2025-08-15 10:03:43 +08:00
|
|
|
|
// 活动ID
|
2025-08-15 10:34:32 +08:00
|
|
|
|
activityId: "",
|
2025-08-15 10:03:43 +08:00
|
|
|
|
|
|
|
|
|
|
// 加载状态
|
|
|
|
|
|
loading: false,
|
|
|
|
|
|
|
2025-08-14 17:28:33 +08:00
|
|
|
|
// 选择项数据
|
2025-08-15 10:03:43 +08:00
|
|
|
|
dateOptions: [],
|
|
|
|
|
|
timeOptions: [],
|
2025-08-14 17:28:33 +08:00
|
|
|
|
numberOptions: [
|
|
|
|
|
|
{ label: "1人", value: "1" },
|
|
|
|
|
|
{ label: "2人", value: "2" },
|
|
|
|
|
|
{ label: "自定义", value: "custom" },
|
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
|
|
// 选中的值
|
2025-08-15 10:03:43 +08:00
|
|
|
|
selectedDate: "",
|
|
|
|
|
|
selectedTime: "",
|
2025-08-14 17:28:33 +08:00
|
|
|
|
selectedNumber: "1",
|
2025-08-15 10:03:43 +08:00
|
|
|
|
selectedSlotId: "", // 保存选中的插槽ID
|
2025-08-14 17:28:33 +08:00
|
|
|
|
|
|
|
|
|
|
// 表单数据
|
|
|
|
|
|
formData: {
|
|
|
|
|
|
name: "",
|
|
|
|
|
|
phone: "",
|
|
|
|
|
|
},
|
|
|
|
|
|
|
2025-08-14 17:49:57 +08:00
|
|
|
|
// 自定义人数弹窗相关
|
|
|
|
|
|
showCustomNumberModal: false,
|
2025-08-14 17:06:05 +08:00
|
|
|
|
};
|
|
|
|
|
|
},
|
2025-08-15 10:34:32 +08:00
|
|
|
|
onLoad(options) {
|
|
|
|
|
|
// 如果从其他页面传递了活动ID,使用传递的ID
|
|
|
|
|
|
if (options.actId) {
|
|
|
|
|
|
this.activityId = parseInt(options.actId);
|
|
|
|
|
|
}
|
2025-08-15 10:03:43 +08:00
|
|
|
|
this.fetchActivitySlots();
|
|
|
|
|
|
},
|
2025-08-14 17:06:05 +08:00
|
|
|
|
methods: {
|
2025-08-15 10:03:43 +08:00
|
|
|
|
// 获取活动插槽数据
|
|
|
|
|
|
async fetchActivitySlots() {
|
|
|
|
|
|
this.loading = true;
|
|
|
|
|
|
try {
|
|
|
|
|
|
const res = await activityApi.getActivitySlots(this.activityId);
|
|
|
|
|
|
if (res.code === 200 && Array.isArray(res.data)) {
|
|
|
|
|
|
this.processSlotData(res.data);
|
|
|
|
|
|
} else {
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: res.msg || "获取活动数据失败",
|
|
|
|
|
|
icon: "none",
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
} catch (error) {
|
|
|
|
|
|
console.error("获取活动插槽数据失败:", error);
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: "网络错误",
|
|
|
|
|
|
icon: "none",
|
|
|
|
|
|
});
|
|
|
|
|
|
} finally {
|
|
|
|
|
|
this.loading = false;
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// 处理插槽数据
|
|
|
|
|
|
processSlotData(data) {
|
|
|
|
|
|
// 处理日期选项
|
|
|
|
|
|
this.dateOptions = data.map((item) => ({
|
|
|
|
|
|
label: this.formatDateLabel(item.label),
|
|
|
|
|
|
value: item.label,
|
|
|
|
|
|
children: item.children,
|
|
|
|
|
|
}));
|
|
|
|
|
|
|
|
|
|
|
|
// 默认选择第一个日期
|
|
|
|
|
|
if (this.dateOptions.length > 0) {
|
|
|
|
|
|
this.selectDate(this.dateOptions[0].value);
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// 格式化日期标签
|
|
|
|
|
|
formatDateLabel(dateStr) {
|
|
|
|
|
|
const date = new Date(dateStr);
|
|
|
|
|
|
const month = (date.getMonth() + 1).toString().padStart(2, "0");
|
|
|
|
|
|
const day = date.getDate().toString().padStart(2, "0");
|
|
|
|
|
|
return `${month}月${day}日`;
|
|
|
|
|
|
},
|
|
|
|
|
|
|
2025-08-14 17:28:33 +08:00
|
|
|
|
// 选择日期
|
|
|
|
|
|
selectDate(value) {
|
|
|
|
|
|
this.selectedDate = value;
|
2025-08-15 10:03:43 +08:00
|
|
|
|
this.selectedTime = "";
|
|
|
|
|
|
this.selectedSlotId = "";
|
|
|
|
|
|
|
|
|
|
|
|
// 根据选中的日期更新时段选项
|
|
|
|
|
|
const selectedDateData = this.dateOptions.find(
|
|
|
|
|
|
(item) => item.value === value,
|
|
|
|
|
|
);
|
|
|
|
|
|
if (selectedDateData && selectedDateData.children) {
|
|
|
|
|
|
this.timeOptions = selectedDateData.children.map((item) => ({
|
|
|
|
|
|
label: item.label,
|
|
|
|
|
|
value: item.id,
|
|
|
|
|
|
slotId: item.id,
|
|
|
|
|
|
}));
|
|
|
|
|
|
|
|
|
|
|
|
// 默认选择第一个时段
|
|
|
|
|
|
if (this.timeOptions.length > 0) {
|
|
|
|
|
|
this.selectTime(this.timeOptions[0].value);
|
|
|
|
|
|
}
|
|
|
|
|
|
} else {
|
|
|
|
|
|
this.timeOptions = [];
|
|
|
|
|
|
}
|
2025-08-14 17:28:33 +08:00
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// 选择时段
|
|
|
|
|
|
selectTime(value) {
|
|
|
|
|
|
this.selectedTime = value;
|
2025-08-15 10:03:43 +08:00
|
|
|
|
this.selectedSlotId = value; // 保存插槽ID
|
2025-08-14 17:28:33 +08:00
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// 选择人数
|
|
|
|
|
|
selectNumber(value) {
|
2025-08-14 17:49:57 +08:00
|
|
|
|
if (value === "custom") {
|
|
|
|
|
|
this.openCustomNumberModal();
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
2025-08-14 17:28:33 +08:00
|
|
|
|
this.selectedNumber = value;
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// 提交报名
|
2025-08-15 10:03:43 +08:00
|
|
|
|
async submitApplication() {
|
2025-08-14 17:28:33 +08:00
|
|
|
|
if (!this.formData.name.trim()) {
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: "请输入姓名",
|
|
|
|
|
|
icon: "none",
|
|
|
|
|
|
});
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (!this.formData.phone.trim()) {
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: "请输入手机号",
|
|
|
|
|
|
icon: "none",
|
|
|
|
|
|
});
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-08-15 10:03:43 +08:00
|
|
|
|
if (!this.selectedSlotId) {
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: "请选择活动时段",
|
|
|
|
|
|
icon: "none",
|
|
|
|
|
|
});
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
const submitData = {
|
|
|
|
|
|
actId: this.activityId,
|
|
|
|
|
|
slotId: this.selectedSlotId,
|
|
|
|
|
|
number: this.selectedNumber,
|
|
|
|
|
|
userName: this.formData.name,
|
|
|
|
|
|
phone: this.formData.phone,
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const res = await activityApi.submitActivityApplication(submitData);
|
|
|
|
|
|
if (res.code === 200) {
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: "报名成功",
|
|
|
|
|
|
icon: "success",
|
|
|
|
|
|
});
|
|
|
|
|
|
|
2025-08-15 12:03:09 +08:00
|
|
|
|
// 跳转到报名成功页面,传递详细数据
|
2025-08-15 10:03:43 +08:00
|
|
|
|
setTimeout(() => {
|
2025-08-15 12:03:09 +08:00
|
|
|
|
const params = {
|
|
|
|
|
|
date: this.getSelectedDateLabel(),
|
|
|
|
|
|
time: this.getSelectedTimeLabel(),
|
|
|
|
|
|
number: this.getSelectedNumberLabel(),
|
|
|
|
|
|
};
|
|
|
|
|
|
const queryString = Object.keys(params)
|
2025-09-19 11:02:40 +08:00
|
|
|
|
.map((key) => `${key}=${encodeURIComponent(params[key])}`)
|
|
|
|
|
|
.join("&");
|
2025-08-15 12:03:09 +08:00
|
|
|
|
uni.navigateTo({
|
|
|
|
|
|
url: `/pages/activity/appointmentSuccess?${queryString}`,
|
|
|
|
|
|
});
|
2025-08-15 10:03:43 +08:00
|
|
|
|
}, 1500);
|
|
|
|
|
|
} else {
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: res.msg || "报名失败",
|
|
|
|
|
|
icon: "none",
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
} catch (error) {
|
|
|
|
|
|
console.error("提交报名失败:", error);
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: "网络错误",
|
|
|
|
|
|
icon: "none",
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
2025-08-14 17:28:33 +08:00
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// 获取选中的日期标签
|
|
|
|
|
|
getSelectedDateLabel() {
|
|
|
|
|
|
const selectedDate = this.dateOptions.find(
|
|
|
|
|
|
(date) => date.value === this.selectedDate,
|
|
|
|
|
|
);
|
2025-08-15 12:03:09 +08:00
|
|
|
|
|
2025-08-14 17:28:33 +08:00
|
|
|
|
return selectedDate ? selectedDate.label : "";
|
|
|
|
|
|
},
|
|
|
|
|
|
|
2025-08-15 10:03:43 +08:00
|
|
|
|
// 获取选中的时段标签
|
|
|
|
|
|
getSelectedTimeLabel() {
|
|
|
|
|
|
const selectedTime = this.timeOptions.find(
|
|
|
|
|
|
(time) => time.value === this.selectedTime,
|
|
|
|
|
|
);
|
|
|
|
|
|
return selectedTime ? selectedTime.label : "";
|
|
|
|
|
|
},
|
|
|
|
|
|
|
2025-08-14 17:28:33 +08:00
|
|
|
|
// 获取选中的人数标签
|
|
|
|
|
|
getSelectedNumberLabel() {
|
2025-08-15 09:02:09 +08:00
|
|
|
|
if (
|
|
|
|
|
|
this.selectedNumber === "custom" ||
|
|
|
|
|
|
(this.selectedNumber !== "1" && this.selectedNumber !== "2")
|
|
|
|
|
|
) {
|
2025-08-14 17:49:57 +08:00
|
|
|
|
return this.selectedNumber + "人";
|
|
|
|
|
|
}
|
2025-08-14 17:28:33 +08:00
|
|
|
|
const selectedNumber = this.numberOptions.find(
|
|
|
|
|
|
(number) => number.value === this.selectedNumber,
|
|
|
|
|
|
);
|
|
|
|
|
|
return selectedNumber ? selectedNumber.label : "";
|
|
|
|
|
|
},
|
|
|
|
|
|
|
2025-08-14 17:06:05 +08:00
|
|
|
|
// 去除 HTML 标签,返回纯文本
|
|
|
|
|
|
stripHtmlTags(html) {
|
|
|
|
|
|
if (!html) return ""; // 处理空值
|
|
|
|
|
|
return html.replace(/<[^>]+>/g, ""); // 正则替换所有 HTML 标签
|
|
|
|
|
|
},
|
2025-08-14 17:49:57 +08:00
|
|
|
|
|
|
|
|
|
|
// 自定义人数弹窗相关方法
|
|
|
|
|
|
openCustomNumberModal() {
|
|
|
|
|
|
this.showCustomNumberModal = true;
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
closeCustomModal() {
|
|
|
|
|
|
this.showCustomNumberModal = false;
|
|
|
|
|
|
},
|
|
|
|
|
|
|
2025-08-15 09:02:09 +08:00
|
|
|
|
handleCustomNumberConfirm(value) {
|
|
|
|
|
|
this.selectedNumber = value;
|
2025-08-14 17:49:57 +08:00
|
|
|
|
},
|
2025-08-14 17:06:05 +08:00
|
|
|
|
},
|
|
|
|
|
|
};
|
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
|
|
.page {
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
|
|
|
|
|
|
.header {
|
|
|
|
|
|
width: 650rpx;
|
|
|
|
|
|
margin-top: 24rpx;
|
|
|
|
|
|
height: 726rpx;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: flex-start;
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
padding: 38rpx 50rpx 50rpx 50rpx;
|
|
|
|
|
|
background: #fffbf5;
|
|
|
|
|
|
border-radius: 20rpx 20rpx 20rpx 20rpx;
|
|
|
|
|
|
border: 2rpx solid #c7a26d;
|
|
|
|
|
|
margin-bottom: 40rpx;
|
|
|
|
|
|
|
|
|
|
|
|
.scroll-view {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
|
white-space: nowrap;
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
margin-bottom: 62rpx;
|
|
|
|
|
|
|
|
|
|
|
|
.scroll-view-item_date {
|
|
|
|
|
|
text-align: center;
|
|
|
|
|
|
line-height: 120rpx;
|
|
|
|
|
|
display: inline-block;
|
|
|
|
|
|
width: 162rpx;
|
|
|
|
|
|
height: 120rpx;
|
|
|
|
|
|
background: #fff1dd;
|
|
|
|
|
|
border-radius: 14rpx 14rpx 14rpx 14rpx;
|
|
|
|
|
|
margin-right: 32rpx;
|
|
|
|
|
|
font-weight: 700;
|
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
|
color: #c7a26d;
|
2025-08-14 17:28:33 +08:00
|
|
|
|
transition: all 0.3s ease;
|
|
|
|
|
|
|
|
|
|
|
|
&.selected {
|
|
|
|
|
|
background: #a24242;
|
|
|
|
|
|
color: #ffffff;
|
|
|
|
|
|
}
|
2025-08-14 17:06:05 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.scroll-view-item_time {
|
|
|
|
|
|
text-align: center;
|
|
|
|
|
|
line-height: 120rpx;
|
|
|
|
|
|
display: inline-block;
|
|
|
|
|
|
width: 258rpx;
|
|
|
|
|
|
height: 120rpx;
|
|
|
|
|
|
background: #fff1dd;
|
|
|
|
|
|
border-radius: 14rpx 14rpx 14rpx 14rpx;
|
|
|
|
|
|
margin-right: 34rpx;
|
|
|
|
|
|
font-weight: 700;
|
|
|
|
|
|
font-size: 30rpx;
|
|
|
|
|
|
color: #c7a26d;
|
2025-08-14 17:28:33 +08:00
|
|
|
|
transition: all 0.3s ease;
|
|
|
|
|
|
|
|
|
|
|
|
&.selected {
|
|
|
|
|
|
background: #a24242;
|
|
|
|
|
|
color: #ffffff;
|
|
|
|
|
|
}
|
2025-08-14 17:06:05 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.scroll-view-item_number {
|
|
|
|
|
|
text-align: center;
|
|
|
|
|
|
line-height: 64rpx;
|
|
|
|
|
|
display: inline-block;
|
|
|
|
|
|
width: 170rpx;
|
|
|
|
|
|
height: 64rpx;
|
2025-09-19 11:46:26 +08:00
|
|
|
|
background: #fffbf5;
|
2025-08-14 17:06:05 +08:00
|
|
|
|
border-radius: 48rpx 48rpx 48rpx 48rpx;
|
|
|
|
|
|
border: 2rpx solid #c7a26d;
|
|
|
|
|
|
margin-right: 18rpx;
|
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
|
color: #c7a26d;
|
2025-08-14 17:28:33 +08:00
|
|
|
|
transition: all 0.3s ease;
|
|
|
|
|
|
|
|
|
|
|
|
&.selected {
|
2025-09-19 11:46:26 +08:00
|
|
|
|
background-color: #fff1dd;
|
2025-08-14 17:28:33 +08:00
|
|
|
|
color: #695347;
|
|
|
|
|
|
}
|
2025-08-14 17:06:05 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.contact {
|
|
|
|
|
|
width: 650rpx;
|
|
|
|
|
|
height: 232rpx;
|
|
|
|
|
|
background: #fffbf5;
|
|
|
|
|
|
border-radius: 20rpx 20rpx 20rpx 20rpx;
|
|
|
|
|
|
border: 2rpx solid #c7a26d;
|
|
|
|
|
|
padding: 0 50rpx 0 54rpx;
|
|
|
|
|
|
margin-bottom: 292rpx;
|
|
|
|
|
|
|
|
|
|
|
|
.contact-item {
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
height: 116rpx;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
border-bottom: 1px solid #d8d8d8;
|
|
|
|
|
|
|
|
|
|
|
|
.info {
|
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
|
color: #695347;
|
|
|
|
|
|
line-height: 44rpx;
|
|
|
|
|
|
text-align: center;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.submit {
|
|
|
|
|
|
width: 650rpx;
|
|
|
|
|
|
height: 92rpx;
|
|
|
|
|
|
background: #fffbf5;
|
|
|
|
|
|
border-radius: 57rpx 57rpx 57rpx 57rpx;
|
|
|
|
|
|
border: 2rpx solid #c7a26d;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
|
|
|
|
|
|
.submit-message {
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
|
color: #695347;
|
|
|
|
|
|
line-height: 38rpx;
|
|
|
|
|
|
margin-left: 62rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.submit-button {
|
|
|
|
|
|
width: 224rpx;
|
|
|
|
|
|
height: 72rpx;
|
|
|
|
|
|
background: #a24242;
|
|
|
|
|
|
border-radius: 57rpx 57rpx 57rpx 57rpx;
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
|
color: #ffffff;
|
|
|
|
|
|
line-height: 72rpx;
|
|
|
|
|
|
text-align: center;
|
|
|
|
|
|
margin-right: 10rpx;
|
2025-08-14 17:28:33 +08:00
|
|
|
|
transition: all 0.3s ease;
|
|
|
|
|
|
|
|
|
|
|
|
&:active {
|
|
|
|
|
|
background: #8a3636;
|
|
|
|
|
|
transform: scale(0.98);
|
|
|
|
|
|
}
|
2025-08-14 17:06:05 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
text {
|
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
|
color: #695347;
|
|
|
|
|
|
line-height: 44rpx;
|
|
|
|
|
|
text-align: center;
|
|
|
|
|
|
margin-bottom: 26rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
</style>
|