feat: 客服热线弹窗、取消预约文案与旅游卡页布局优化

- 客服热线改为弹窗拉取 mpContent/queryList 客服信息(SERVICE_INFO),富文本电话可点击拨号
- 取消预约确认弹窗展示具体预约日期与景区名称,取消后隐藏取消按钮
- makePhoneCall 用户取消时静默处理,不再上报异常
- 景区列表搜索图标改为 OSS 图片
- 旅游卡页:人脸头像方形竖版、信息单行靠右、入园提示移至持卡人信息下方等布局优化
- project.config.json appid 同步为 wxae3b39ac443fedc3

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
jacobxu666
2026-08-07 18:29:12 +08:00
co-authored by Claude Opus 4.8
parent f0911c67a0
commit 08e2f6888b
8 changed files with 312 additions and 90 deletions
+1 -1
View File
@@ -296,7 +296,7 @@ function onHoursClick() {
uni.showToast({ title: '营业时间仅供参考', icon: 'none' })
}
function onPhoneClick() {
uni.makePhoneCall({ phoneNumber: scenic.value.phone })
uni.makePhoneCall({ phoneNumber: scenic.value.phone, fail: () => {} })
}
function onCopyAddress() {
uni.setClipboardData({
+5 -25
View File
@@ -6,10 +6,11 @@
<view class="sticky-header">
<!-- 搜索框 -->
<view class="search-box">
<view class="search-icon">
<view class="icon-circle" />
<view class="icon-handle" />
</view>
<image
class="search-icon"
src="https://hn12301.oss-cn-shenzhen.aliyuncs.com/hn12301/fangdajing.png"
mode="aspectFit"
/>
<input
class="search-input"
v-model="searchText"
@@ -622,32 +623,11 @@ onShareTimeline(() => ({
}
.search-icon {
position: relative;
width: 32rpx;
height: 32rpx;
margin-right: $spacing-2;
}
.icon-circle {
width: 20rpx;
height: 20rpx;
border: 3rpx solid $uv-tips-color;
border-radius: 50%;
position: absolute;
top: 0;
left: 0;
}
.icon-handle {
width: 10rpx;
height: 3rpx;
background: $uv-tips-color;
position: absolute;
bottom: 4rpx;
right: 0;
transform: rotate(45deg);
}
.search-input {
flex: 1;
font-size: $font-size-base;
+1 -1
View File
@@ -640,7 +640,7 @@ function removePhoto() {
}
function callService() {
uni.makePhoneCall({ phoneNumber: '0731-88912301' })
uni.makePhoneCall({ phoneNumber: '0731-88912301', fail: () => {} })
}
function closeNoVoucher() {
+9 -2
View File
@@ -63,7 +63,7 @@
<!-- 操作 -->
<view class="record-actions">
<view
v-if="r.canCancel"
v-if="r.canCancel && r.status !== 'cancelled'"
class="btn-sm btn-sm--outline"
@tap="showCancelModal(r)"
>
@@ -110,7 +110,7 @@
<view class="cancel-modal">
<text class="cancel-modal__title">取消预约</text>
<view class="cancel-modal__body">
<text class="cancel-modal__text">确定取消该预约吗?未提前取消且未入园将扣除1次年卡使用次数,权益不可恢复。</text>
<text class="cancel-modal__text">确定取消 {{ formatReserveDate(cancelRecord?.date) }}{{ cancelRecord?.scenicName }} 的预约吗?</text>
</view>
<view class="cancel-modal__actions">
<view class="btn-modal btn-modal--outline" @tap="cancelPopup?.close()">
@@ -325,6 +325,13 @@ watch(activeTab, () => {
fetchRecords()
})
/** 将预约日期(如 2026-08-05)格式化为「2026 年 8 月 5 日」 */
function formatReserveDate(date?: string): string {
const m = (date || '').match(/(\d{4})[-/年.](\d{1,2})[-/月.](\d{1,2})/)
if (!m) return date || ''
return `${m[1]} 年 ${Number(m[2])} 月 ${Number(m[3])} 日`
}
function showCancelModal(r: ReserveRecord) {
cancelRecord.value = r
cancelPopup.value?.open()