feat: 抖音核销接入小泥人API、公告详情页、景区预约人选人等多处优化
抖音核销(douyin-verify): - 对接小泥人 OAuth2 token 与 voucher-list 券码接口,按 code 分组展示订单券号及可激活次数 - 支持手动输入券码验证券码;核销流程改为先调后端 sendAndBind 发卡绑定,再验证券码 - 购卡须知改为富文本渲染,新增无可核销订单提示弹窗、客服电话拨打 - 增加 product_id 过滤与 per-page=100,验证券码命中后仅展示不弹提示 公告模块: - 首页/公告列表点击跳转到新增公告详情页(notice-detail),展示标题、发布时间、富文本内容及视频 - 公告列表卡片改为标题+发布时间+查看详情按钮,时间与按钮同排 - 富文本支持内嵌 video 解析播放;content 为空不显示分隔线;标题取公告 title 而非类型 首页与价格: - 首页大卡价格/划线价/立省改为商品详情接口动态获取 - 热门景区列表扩展至8条,支持优惠/折扣标签与默认占位图 预约/景区: - 预约页改为选择预约人(可选/已预约置灰),预约参数改用预约人信息 - 景区列表与详情支持优惠类型、折扣、特惠价展示,富文本图片防溢出 - 景区列表移除自定义导航改用原生导航 订单/绑卡: - 订单列表/详情增加抖音核销单号(thirdOrderNo)展示,核销订单隐藏金额与退款入口 - 绑卡页移除人脸可选开关,照片必传改为拍照 - 其他:图片域名统一为 hn12301,tabBar'旅游卡'改名,登录页支持 redirect 回跳
This commit is contained in:
@@ -63,14 +63,14 @@
|
||||
<!-- 操作 -->
|
||||
<view class="record-actions">
|
||||
<view
|
||||
v-if="r.status === 'pending' && canCancel(r.date)"
|
||||
v-if="r.canCancel"
|
||||
class="btn-sm btn-sm--outline"
|
||||
@tap="showCancelModal(r)"
|
||||
>
|
||||
<text class="btn-sm__text--outline">取消预约</text>
|
||||
</view>
|
||||
<view
|
||||
v-if="r.status === 'pending'"
|
||||
v-if="r.showEntryCode && r.status !== 'cancelled'"
|
||||
class="btn-sm btn-sm--outline"
|
||||
@tap="showCode(r)"
|
||||
>
|
||||
@@ -215,6 +215,8 @@ interface ReserveRecord {
|
||||
verifyPhoto?: string
|
||||
cardInstruction?: string
|
||||
cardModelId?: string
|
||||
canCancel?: boolean
|
||||
showEntryCode?: boolean
|
||||
}
|
||||
|
||||
const tabs = [
|
||||
@@ -288,6 +290,8 @@ async function fetchRecords(append = false) {
|
||||
verifyPhoto: item.verifyPhoto || '',
|
||||
cardInstruction: item.cardInstruction || '',
|
||||
cardModelId: item.cardModelId || item.thirdId || '',
|
||||
canCancel: !!item.canCancel,
|
||||
showEntryCode: !!item.showEntryCode,
|
||||
}))
|
||||
if (append) {
|
||||
records.value.push(...list)
|
||||
@@ -321,13 +325,6 @@ watch(activeTab, () => {
|
||||
fetchRecords()
|
||||
})
|
||||
|
||||
function canCancel(date: string) {
|
||||
const today = new Date()
|
||||
today.setHours(0, 0, 0, 0)
|
||||
const d = new Date(date)
|
||||
return (d.getTime() - today.getTime()) / (1000 * 60 * 60 * 24) >= 1
|
||||
}
|
||||
|
||||
function showCancelModal(r: ReserveRecord) {
|
||||
cancelRecord.value = r
|
||||
cancelPopup.value?.open()
|
||||
@@ -556,11 +553,18 @@ function previewPhoto(url: string) {
|
||||
font-size: $font-size-base;
|
||||
font-weight: $font-weight-medium;
|
||||
color: $uv-main-color;
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
margin-right: 16rpx;
|
||||
}
|
||||
|
||||
.status-tag {
|
||||
padding: 4rpx 14rpx;
|
||||
border-radius: 8rpx;
|
||||
flex-shrink: 0;
|
||||
|
||||
&--pending { background: #e8f3ff; }
|
||||
&--cancelled { background: $uv-bg-color; }
|
||||
|
||||
Reference in New Issue
Block a user