diff --git a/src/mock/images.ts b/src/mock/images.ts index e79a77b..43139f1 100644 --- a/src/mock/images.ts +++ b/src/mock/images.ts @@ -4,11 +4,11 @@ */ // 首页 Banner -export const IMG_HOME_BANNER = 'https://aliyunoss.hntgov.net/image/2026/04/14/d2bf03167e484ba59f7c2d62879ad07f.jpg' +export const IMG_HOME_BANNER = 'https://aliyunoss.hn12301.net/image/2026/04/14/d2bf03167e484ba59f7c2d62879ad07f.jpg' // 年卡购买页图片 -export const IMG_CARD_BUY_1 = 'https://aliyunoss.hntgov.net/image/2026/06/23/70e9f4b3b5fd49adb1ff06edcb8fa032.jpg' -export const IMG_CARD_BUY_2 = 'https://aliyunoss.hntgov.net/image/2026/06/25/f3e45bcb3b4f4a2997f107cc6335a1bc.jpg' +export const IMG_CARD_BUY_1 = 'https://aliyunoss.hn12301.net/image/2026/06/23/70e9f4b3b5fd49adb1ff06edcb8fa032.jpg' +export const IMG_CARD_BUY_2 = 'https://aliyunoss.hn12301.net/image/2026/06/25/f3e45bcb3b4f4a2997f107cc6335a1bc.jpg' // 入园码页面 export const IMG_QRCODE_LOGO = 'https://hn12301.oss-cn-shenzhen.aliyuncs.com/hn12301/%E5%88%9D%E5%BF%83%E6%BA%90%20%E6%B9%98%E9%84%82%E8%B5%A3%E6%96%87%E6%97%85%E4%B8%80%E5%8D%A1%E9%80%9A_1777447994254.png' diff --git a/src/packages/content/pages/notice-detail.vue b/src/packages/content/pages/notice-detail.vue new file mode 100644 index 0000000..bd22e3d --- /dev/null +++ b/src/packages/content/pages/notice-detail.vue @@ -0,0 +1,151 @@ + + + + + diff --git a/src/packages/content/pages/notice-list.vue b/src/packages/content/pages/notice-list.vue index 6ca31ee..4442d4e 100644 --- a/src/packages/content/pages/notice-list.vue +++ b/src/packages/content/pages/notice-list.vue @@ -8,25 +8,17 @@ :style="{ animationDelay: index * 60 + 'ms' }" @click="openDetail(item)" > - - - - {{ item.title }} - {{ item.content }} + {{ item.title }} + + 发布时间:{{ item.date }} + + 查看详情 + - {{ item.date }} - - - - @@ -34,7 +26,6 @@ @@ -144,63 +136,55 @@ function openDetail(item: NoticeItem) { } } -/* ====== 卡片内容行 ====== */ -.card-header { - display: flex; - align-items: center; -} - -/* 左侧文字区(标题 + 摘要) */ -.header-text { - flex: 1; - min-width: 0; - margin-right: 16rpx; -} - /* 标题 */ .card-title { display: block; font-size: $font-size-base; font-weight: $font-weight-bold; color: $uv-main-color; - line-height: 1.3; + line-height: 1.4; letter-spacing: -0.3rpx; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - margin-bottom: 8rpx; } -/* 摘要 */ -.card-summary { - display: -webkit-box; - -webkit-line-clamp: 2; - -webkit-box-orient: vertical; - overflow: hidden; - font-size: $font-size-sm; - font-weight: $font-weight-normal; - color: $uv-tips-color; - line-height: 1.6; +/* 发布行:时间 + 查看详情按钮在一排 */ +.card-footer { + display: flex; + align-items: center; + justify-content: space-between; + margin-top: 20rpx; } -/* 日期 */ +/* 发布时间 */ .card-date { font-size: 22rpx; font-weight: $font-weight-normal; color: $uv-placeholder-color; - flex-shrink: 0; letter-spacing: 0.5rpx; } +.card-action-row { + display: flex; + align-items: center; +} + +.card-action { + font-size: $font-size-sm; + font-weight: $font-weight-medium; + color: $uv-primary; +} + /* 右箭头 */ .card-arrow { width: 14rpx; height: 14rpx; - border-right: 3rpx solid #dadbde; - border-bottom: 3rpx solid #dadbde; + border-right: 3rpx solid $uv-primary; + border-bottom: 3rpx solid $uv-primary; transform: rotate(-45deg); flex-shrink: 0; - margin-left: 16rpx; + margin-left: 12rpx; } /* ====== 底部安全区 ====== */ diff --git a/src/packages/content/pages/scenic-detail.vue b/src/packages/content/pages/scenic-detail.vue index a8d74b2..aebfe86 100644 --- a/src/packages/content/pages/scenic-detail.vue +++ b/src/packages/content/pages/scenic-detail.vue @@ -95,7 +95,9 @@ - {{ card.remainingCount > 0 ? '全年剩余' + card.remainingCount + '次' : '全年可用' + card.freeCount + '次' }} + + + {{ card.bookingDeadline }} @@ -129,10 +131,10 @@ - + - + @@ -145,7 +147,7 @@ {{ storeNotice.title }} - + @@ -166,7 +168,7 @@ import { onLoad, onShareAppMessage, onShareTimeline } from '@dcloudio/uni-app' import { post, getToken } from '../../../api/request' interface NoticeItem { title: string; content: string } -interface CardBenefit { type: string; cardName: string; skuName: string; remainingCount: number; freeCount: number; bookingDeadline: string; cardModelId: string; resourceId: string; goodsId: string } +interface CardBenefit { type: string; cardName: string; skuName: string; remainingCount: number; freeCount: number; bookingDeadline: string; cardModelId: string; resourceId: string; goodsId: string; preferential: string; discountPercentage: number; discountAmount: number } interface ScenicDetail { id: number; name: string; price: number; freeCount: number; level: string hours: string; needReservation: string; bookingDeadline: string @@ -176,6 +178,23 @@ interface ScenicDetail { } const scenic = ref({ tags: [], images: [], cards: [], bookingNotice: [] } as unknown as ScenicDetail) + +/** 富文本 HTML 清洗:给所有 img 加 max-width:100%,防止超出容器边界 */ +function fixRichHtml(html: string): string { + if (!html) return '' + const style = 'max-width:100%;height:auto;display:block;' + return html.replace(/]*max-width)[^>]*>/gi, (tag: string) => { + if (/style="[^"]*"/i.test(tag)) { + return tag.replace(/style="([^"]*)"/i, (_: string, s: string) => `style="${s};${style}"`) + } + return tag.replace(/ fixRichHtml(scenic.value.introduction)) +const bookingNoticeHtml = computed(() => fixRichHtml(scenic.value.bookingNoticeHtml)) +const storeNoticeHtml = computed(() => fixRichHtml(storeNotice.value.content)) + const activeTab = ref<'notice' | 'intro'>('notice') const currentSlide = ref(0) const loading = ref(true) @@ -303,7 +322,7 @@ async function onBookClick(card: CardBenefit) { if (res?.hasValidCard) { uni.navigateTo({ - url: `/packages/user/pages/reserve/index?cardNumber=${res.cardNumber}&resourceId=${res.resourceId}&cardModelId=${card.cardModelId}`, + url: `/packages/user/pages/reserve/index?resourceId=${res.resourceId || card.resourceId}&cardModelId=${card.cardModelId}`, }) } else { if (String(card.cardModelId) === '820093340659013') { @@ -716,7 +735,7 @@ $icon-crown: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' w margin: 0 $spacing-3; border-radius: 0 0 $radius-lg $radius-lg; box-shadow: $shadow-sm; - padding: $spacing-3; + padding: 24rpx; } .content-section { diff --git a/src/packages/content/pages/scenic-list.vue b/src/packages/content/pages/scenic-list.vue index 04a7bb4..63b06fe 100644 --- a/src/packages/content/pages/scenic-list.vue +++ b/src/packages/content/pages/scenic-list.vue @@ -1,20 +1,7 @@