feat: deliver V1.1 dual-client UI fidelity milestone

This commit is contained in:
2026-09-10 16:06:11 +08:00
parent 5b51d5b3f1
commit 45ca118453
82 changed files with 682 additions and 1167 deletions
@@ -1,8 +1,4 @@
/**
* 页面占位骨架
*/
Page({
data: {},
onLoad(options) {},
onShow() {}
});
const { getActivityDetail } = require('../../services/activityService')
const { appStore } = require('../../stores')
const previewActivity = { id:'preview-activity', title:'“初秋相遇”青年公益交友活动', typeLabel:'公益交友', startText:'2026-09-20 14:00', locationName:'善缘丹阳公益服务站', address:'丹阳市云阳街道(报名通过后显示详细地址)', registrationStatus:'not_registered', quotaText:'剩余 18 个名额', organizer:'善缘丹阳公益婚恋服务平台', description:'通过轻松自然的互动环节,帮助丹阳单身青年在安全、友好的环境中认识新朋友。', eligibility:['年满 18 周岁的单身人士','完成实名认证与资料审核','符合活动当期本地资格要求'] }
Page({data:{activity:null,loading:true,error:false},onLoad(options){this.activityId=options.id||'';this.load()},isPreview(){try{return wx.getAccountInfoSync().miniProgram.envVersion==='develop'}catch(_){return false}},async load(){this.setData({loading:true,error:false});try{if(!this.activityId&&this.isPreview())return this.setData({activity:previewActivity,loading:false});const activity=await getActivityDetail(this.activityId);this.setData({activity,loading:false})}catch(error){console.error(error);if(this.isPreview())this.setData({activity:previewActivity,loading:false});else this.setData({loading:false,error:true})}},retry(){this.load()},register(){if(!this.data.activity)return;wx.navigateTo({url:`/pages/activity-register/activity-register?id=${this.data.activity.id}`})},openMyActivities(){wx.navigateTo({url:'/pages/my-activities/my-activities'})},contact(){appStore.toastSuccess('可在“我的活动”中查看报名进度')}})
@@ -1 +1 @@
{"navigationBarTitleText":"activity-detail","usingComponents":{}}
{"navigationBarTitleText":"活动详情","backgroundColor":"#FAFAF8","usingComponents":{"ui-loading":"/components/loading/index","ui-error-state":"/components/error-state/index"}}
@@ -1 +1 @@
<view class="page"><text>页面: activity-detail</text></view>
<view class="service-page"><ui-loading wx:if="{{loading}}" mode="skeleton" rows="6"/><ui-error-state wx:elif="{{error}}" title="活动信息加载失败" description="请检查网络后重试" bind:retry="retry"/><block wx:elif="{{activity}}"><view class="activity-hero"><view class="activity-badge">{{activity.typeLabel || '公益活动'}}</view><text class="activity-title">{{activity.title}}</text><text class="activity-slogan">真实相识 · 公益免费 · 尊重意愿</text></view><view class="content"><view class="block"><text class="block-title">活动信息</text><view class="card"><view class="feature-row"><view class="feature-icon">时</view><view class="feature-copy"><text class="feature-title">{{activity.startText}}</text><text class="feature-desc">请提前 15 分钟到场签到</text></view></view><view class="feature-row"><view class="feature-icon">址</view><view class="feature-copy"><text class="feature-title">{{activity.locationName}}</text><text class="feature-desc">{{activity.address}}</text></view></view><view class="feature-row"><view class="feature-icon">额</view><view class="feature-copy"><text class="feature-title">{{activity.quotaText}}</text><text class="feature-desc">报名提交后需等待工作人员审核</text></view><text class="tag">公益免费</text></view></view></view><view class="block"><text class="block-title">活动介绍</text><view class="card"><text class="body-text">{{activity.description}}</text></view></view><view class="block"><text class="block-title">报名须知</text><view class="card"><view wx:for="{{activity.eligibility}}" wx:key="*this" class="rule-row"><text>{{index+1}}</text><text>{{item}}</text></view><view class="notice">不同活动类型的资格要求可能不同,最终以本活动页面和审核结果为准。</view></view></view><view class="block"><text class="block-title">主办信息</text><view class="card"><text class="feature-title">{{activity.organizer}}</text><text class="feature-desc">主办单位关系不会自动授予用户资料访问权限。</text></view></view></view><view class="fixed-action"><view wx:if="{{activity.registrationStatus === 'not_registered'}}" class="primary-btn" bindtap="register">报名参加活动</view><view wx:else class="secondary-btn" bindtap="openMyActivities">查看我的报名</view></view></block></view>
@@ -1 +1 @@
.page{padding:32rpx;background:#FFF8F7;min-height:100vh;text-align:center;color:#999;padding-top:200rpx;}
@import "../../styles/service-page.wxss";.activity-hero{height:360rpx;padding:48rpx 32rpx;box-sizing:border-box;background:linear-gradient(140deg,#F1D4C7,#F9ECE4);position:relative;overflow:hidden}.activity-hero:after{content:'相遇';position:absolute;right:28rpx;bottom:12rpx;font-size:90rpx;color:rgba(125,76,63,.15);font-weight:700}.activity-badge{display:inline-flex;padding:7rpx 14rpx;border-radius:999rpx;background:rgba(255,255,255,.75);color:#9A5B4E;font-size:21rpx}.activity-title{display:block;margin-top:28rpx;width:82%;font-size:40rpx;line-height:1.4;font-weight:700;color:#5E3730}.activity-slogan{display:block;margin-top:16rpx;font-size:23rpx;color:#8A5F57}.body-text{font-size:27rpx;color:var(--color-text-secondary);line-height:1.8}.rule-row{display:flex;gap:18rpx;align-items:flex-start;padding:16rpx 0;font-size:26rpx}.rule-row>text:first-child{width:42rpx;height:42rpx;display:flex;align-items:center;justify-content:center;flex:none;border-radius:50%;background:var(--color-primary-light);color:var(--color-primary);font-size:21rpx}.rule-row>text:last-child{padding-top:4rpx;line-height:1.55}