| | |
| | | <template> |
| | | <view class="page"> |
| | | <view class="custom-nav"><view class="safe-space" :style="'height:' + navTop + 'px'"></view><view class="nav-row" :style="'height:' + navHeight + 'px;padding-right:' + navRight + 'px'"><view class="back-button" hover-class="back-button-active" @tap="goBack"><image src="/static/news-assets/arrow-left.svg"></image></view><text class="nav-title">人才政策</text><view class="capsule-space" :style="'width:' + navWidth + 'px'"></view></view></view> |
| | | <scroll-view class="content" scroll-y> |
| | | <scroll-view :show-scrollbar="false" class="content" scroll-y> |
| | | <view v-if="initialLoading" class="detail-state"><view class="loading-spinner"></view><text>正在加载政策详情</text></view> |
| | | <view v-else-if="policyUnavailable" class="detail-state error-state"><text>政策已失效</text><text class="retry-text" @tap="goBack">返回政策列表</text></view> |
| | | <view v-else-if="initialError" class="detail-state error-state"><text>政策详情加载失败</text><text class="retry-text" @tap="loadPolicy">重新加载</text></view> |
| | |
| | | const useHeroFallback = () => { policyCover.value = '' } |
| | | const useContentImageFallback = (index: number) => { |
| | | const next = policyContentImages.value.slice() |
| | | next[index] = '/static/policy-assets/policy-explanation.jpg' |
| | | next[index] = '/static/common/image-placeholder.png' |
| | | policyContentImages.value = next |
| | | } |
| | | const goBack = () => safeBack('/pages/policy/policy') |