@ -0,0 +1,400 @@ | |||
<template> | |||
<view class="activity-page"> | |||
<!-- 搜索栏和一级Tab合并容器 --> | |||
<view class="search-section"> | |||
<view class="search-bar"> | |||
<uv-icon name="search" size="18" color="#999"></uv-icon> | |||
<input type="text" placeholder="搜索活动名称" class="search-input" v-model="searchKeyword" /> | |||
</view> | |||
<!-- 一级Tab:当前活动/往期活动 移到搜索容器内 --> | |||
<view class="primary-tabs"> | |||
<view | |||
class="primary-tab-item" | |||
:class="{ active: primaryActiveTab === 'current' }" | |||
@click="switchPrimaryTab('current')" | |||
> | |||
当前活动 | |||
</view> | |||
<view | |||
class="primary-tab-item" | |||
:class="{ active: primaryActiveTab === 'past' }" | |||
@click="switchPrimaryTab('past')" | |||
> | |||
往期活动 | |||
</view> | |||
</view> | |||
</view> | |||
<!-- 二级Tab:使用uv-tabs组件 --> | |||
<view class="secondary-tabs"> | |||
<uv-tabs | |||
:list="secondaryTabs" | |||
:current="secondaryActiveIndex" | |||
@change="switchSecondaryTab" | |||
lineColor="#007AFF" | |||
activeColor="#007AFF" | |||
inactiveColor="#666" | |||
:lineWidth="30" | |||
:lineHeight="3" | |||
itemStyle="padding: 10px 20px;" | |||
></uv-tabs> | |||
</view> | |||
<!-- 活动列表 --> | |||
<view class="activity-list"> | |||
<view | |||
class="activity-item" | |||
v-for="(item, index) in filteredActivities" | |||
:key="index" | |||
@click="goToActivityDetail(item)" | |||
> | |||
<!-- 活动图片 --> | |||
<view class="activity-image"> | |||
<image :src="item.image" mode="aspectFill" class="image"></image> | |||
</view> | |||
<!-- 活动信息 --> | |||
<view class="activity-info"> | |||
<view class="title-row"> | |||
<!-- 活动标签 --> | |||
<view class="activity-tag" :style="{ backgroundColor: item.tagColor }"> | |||
{{ item.tag }} | |||
</view> | |||
<view class="activity-title">{{ item.title }}</view> | |||
</view> | |||
<view class="activity-location"> | |||
<uv-icon name="map-fill" size="14" color="#999"></uv-icon> | |||
<text class="location-text">{{ item.location }}</text> | |||
</view> | |||
<view class="activity-time"> | |||
<uv-icon name="calendar" size="14" color="#999"></uv-icon> | |||
<text class="time-text">{{ item.time }}</text> | |||
</view> | |||
<view class="activity-participants"> | |||
<uv-icon name="account-fill" size="14" color="#999"></uv-icon> | |||
<text class="participants-text">报名人数:{{ item.participants }}/{{ item.maxParticipants }}</text> | |||
</view> | |||
</view> | |||
<!-- 报名按钮 --> | |||
<view class="activity-action"> | |||
<uv-button type="primary" size="mini" shape="circle" :text="item.isFullOrExpired ? '已结束' : '报名中'" :disabled="item.isFullOrExpired" @click.stop="signUpActivity(item)"></uv-button> | |||
</view> | |||
</view> | |||
</view> | |||
<!-- 空状态 --> | |||
<view class="empty-state" v-if="filteredActivities.length === 0"> | |||
<uv-empty mode="data" text="暂无活动数据"></uv-empty> | |||
</view> | |||
</view> | |||
</template> | |||
<script> | |||
export default { | |||
data() { | |||
return { | |||
searchKeyword: '', | |||
primaryActiveTab: 'current', // current: 当前活动, past: 往期活动 | |||
secondaryActiveIndex: 0, | |||
secondaryTabs: [ | |||
{ name: '全部' }, | |||
{ name: '品牌项目' }, | |||
{ name: '公益活动' }, | |||
{ name: '培训活动' } | |||
], | |||
// 模拟活动数据 | |||
activities: [ | |||
{ | |||
id: 1, | |||
title: '关爱自闭症儿童活动', | |||
location: '长沙市雨花区时代阳光大道国际人才2145', | |||
time: '2025/08/1-2025/09/01', | |||
participants: 12, | |||
maxParticipants: 30, | |||
image: '/static/bannerImage.png', | |||
tag: '30分', | |||
tagColor: '#007AFF', | |||
category: 'charity', // all, brand, charity, training | |||
status: 'current', // current, past | |||
isFullOrExpired: false | |||
}, | |||
{ | |||
id: 2, | |||
title: '社区环保志愿服务', | |||
location: '长沙市岳麓区梅溪湖国际新城', | |||
time: '2025/07/15-2025/07/20', | |||
participants: 25, | |||
maxParticipants: 40, | |||
image: '/static/bannerImage.png', | |||
tag: '20分', | |||
tagColor: '#52C41A', | |||
category: 'charity', | |||
status: 'current', | |||
isFullOrExpired: false | |||
}, | |||
{ | |||
id: 3, | |||
title: '青少年编程培训', | |||
location: '长沙市开福区万达广场', | |||
time: '2025/06/01-2025/06/30', | |||
participants: 30, | |||
maxParticipants: 30, | |||
image: '/static/bannerImage.png', | |||
tag: '50分', | |||
tagColor: '#FF6B35', | |||
category: 'training', | |||
status: 'past', | |||
isFullOrExpired: true | |||
}, | |||
{ | |||
id: 4, | |||
title: '品牌推广活动', | |||
location: '长沙市天心区IFS国金中心', | |||
time: '2025/05/10-2025/05/15', | |||
participants: 18, | |||
maxParticipants: 25, | |||
image: '/static/bannerImage.png', | |||
tag: '40分', | |||
tagColor: '#722ED1', | |||
category: 'brand', | |||
status: 'past', | |||
isFullOrExpired: true | |||
} | |||
] | |||
} | |||
}, | |||
computed: { | |||
filteredActivities() { | |||
let filtered = this.activities; | |||
// 根据一级tab筛选 | |||
filtered = filtered.filter(item => item.status === this.primaryActiveTab); | |||
// 根据二级tab筛选 | |||
const categoryMap = { | |||
0: 'all', | |||
1: 'brand', | |||
2: 'charity', | |||
3: 'training' | |||
}; | |||
const selectedCategory = categoryMap[this.secondaryActiveIndex]; | |||
if (selectedCategory !== 'all') { | |||
filtered = filtered.filter(item => item.category === selectedCategory); | |||
} | |||
// 根据搜索关键词筛选 | |||
if (this.searchKeyword.trim()) { | |||
filtered = filtered.filter(item => | |||
item.title.toLowerCase().includes(this.searchKeyword.toLowerCase()) | |||
); | |||
} | |||
return filtered; | |||
} | |||
}, | |||
methods: { | |||
// 切换一级tab | |||
switchPrimaryTab(tab) { | |||
this.primaryActiveTab = tab; | |||
}, | |||
// 切换二级tab | |||
switchSecondaryTab(index) { | |||
this.secondaryActiveIndex = index; | |||
}, | |||
// 跳转到活动详情 | |||
goToActivityDetail(activity) { | |||
uni.navigateTo({ | |||
url: `/subPages/index/activityDetail?id=${activity.id}` | |||
}); | |||
}, | |||
// 报名活动 | |||
signUpActivity(item) { | |||
if (item.isFullOrExpired) { | |||
uni.showToast({ | |||
title: '活动已结束', | |||
icon: 'none' | |||
}); | |||
return; | |||
} | |||
uni.navigateTo({ | |||
url: `/subPages/index/activityDetail?id=${item.id}` | |||
}); | |||
} | |||
}, | |||
onLoad() { | |||
// 页面加载时的初始化逻辑 | |||
console.log('活动页面加载完成'); | |||
} | |||
} | |||
</script> | |||
<style lang="scss" scoped> | |||
.activity-page { | |||
background-color: #f5f5f5; | |||
min-height: 100vh; | |||
} | |||
// 搜索栏样式 - 修改为包含一级Tab | |||
.search-section { | |||
height: 350rpx; | |||
background: linear-gradient(180deg,#1488db, #98b5f1); | |||
padding-top: 180rpx; /* 使用padding-top避免margin塌陷 */ | |||
box-sizing: border-box; /* 确保padding包含在高度内 */ | |||
} | |||
.search-bar { | |||
background-color: white; | |||
border-radius: 50rpx; | |||
padding: 20rpx 30rpx; | |||
display: flex; | |||
align-items: center; | |||
gap: 20rpx; | |||
width: 85%; | |||
margin: 0 auto ; /* 移除margin-top,只保留左右居中和下边距 */ | |||
} | |||
.search-input { | |||
flex: 1; | |||
font-size: 28rpx; | |||
color: #333; | |||
&::placeholder { | |||
color: #999; | |||
} | |||
} | |||
// 一级Tab样式 - 调整为在蓝色背景内 | |||
.primary-tabs { | |||
display: flex; | |||
padding: 0 20rpx; | |||
margin-bottom: 20rpx; | |||
} | |||
.primary-tab-item { | |||
flex: 1; | |||
text-align: center; | |||
padding: 20rpx 0; | |||
font-size: 32rpx; | |||
color: #000000; /* 白色半透明 */ | |||
position: relative; | |||
&.active { | |||
color: white; /* 激活状态为纯白色 */ | |||
font-weight: 600; | |||
&::after { | |||
content: ''; | |||
position: absolute; | |||
bottom: 0; | |||
left: 50%; | |||
transform: translateX(-50%); | |||
width: 100rpx; | |||
height: 6rpx; | |||
background-color: white; /* 下划线改为白色 */ | |||
border-radius: 3rpx; | |||
} | |||
} | |||
} | |||
// 二级Tab样式 - 保持不变 | |||
.secondary-tabs { | |||
background-color: white; | |||
border-bottom: 1px solid #f0f0f0; | |||
} | |||
// 活动列表样式 | |||
.activity-list { | |||
padding: 20rpx; | |||
} | |||
.activity-item { | |||
background-color: white; | |||
border-radius: 12rpx; | |||
margin-bottom: 30rpx; | |||
padding: 20rpx; | |||
display: flex; | |||
box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.05); | |||
} | |||
.activity-image { | |||
width: 180rpx; | |||
height: 180rpx; | |||
border-radius: 8rpx; | |||
overflow: hidden; | |||
flex-shrink: 0; | |||
margin-right: 20rpx; | |||
} | |||
.image { | |||
width: 100%; | |||
height: 100%; | |||
} | |||
.activity-info { | |||
flex: 1; | |||
display: flex; | |||
flex-direction: column; | |||
justify-content: space-between; | |||
} | |||
.title-row { | |||
display: flex; | |||
align-items: center; | |||
margin-bottom: 10rpx; | |||
} | |||
.activity-tag { | |||
width: 31px; | |||
height: 20px; | |||
background: #218cdd; | |||
border-radius: 3.5px; | |||
margin-right: 7rpx; | |||
display: flex; | |||
align-items: center; | |||
justify-content: center; | |||
font-size: 18rpx; | |||
color: white; | |||
font-weight: 600; | |||
} | |||
.activity-title { | |||
font-size: 28rpx; | |||
font-weight: bold; | |||
color: #333; | |||
line-height: 1.4; | |||
} | |||
.activity-location, | |||
.activity-time, | |||
.activity-participants { | |||
display: flex; | |||
align-items: center; | |||
margin-bottom: 6rpx; | |||
.location-text, | |||
.time-text, | |||
.participants-text { | |||
font-size: 24rpx; | |||
color: #666; | |||
margin-left: 6rpx; | |||
} | |||
} | |||
.activity-action { | |||
display: flex; | |||
align-items: flex-end; | |||
padding-bottom: 10rpx; | |||
} | |||
// 空状态样式 | |||
.empty-state { | |||
padding: 100rpx 40rpx; | |||
} | |||
</style> |
@ -0,0 +1,361 @@ | |||
<template> | |||
<view class="community-page"> | |||
<!-- 顶部图片 --> | |||
<view class="banner-section"> | |||
<image class="banner-image" src="/static/bannerImage.png" mode="aspectFill"></image> | |||
</view> | |||
<!-- Tab切换区域 --> | |||
<view class="tab-section"> | |||
<view class="tab-container"> | |||
<view | |||
class="tab-item" | |||
:class="{ active: currentTab === 'current' }" | |||
@click="switchTab('current')" | |||
> | |||
<text class="tab-text">木邻说</text> | |||
<view class="tab-line" v-if="currentTab === 'current'"></view> | |||
</view> | |||
<view | |||
class="tab-item" | |||
:class="{ active: currentTab === 'past' }" | |||
@click="switchTab('past')" | |||
> | |||
<text class="tab-text">木邻见</text> | |||
<view class="tab-line" v-if="currentTab === 'past'"></view> | |||
</view> | |||
</view> | |||
</view> | |||
<!-- 动态列表 --> | |||
<view class="post-list"> | |||
<view | |||
class="post-item" | |||
v-for="(item, index) in filteredPosts" | |||
:key="index" | |||
@click="goToPostDetail(item)" | |||
> | |||
<!-- 用户信息 --> | |||
<view class="user-info"> | |||
<image class="user-avatar" :src="item.avatar" mode="aspectFill"></image> | |||
<view class="user-details"> | |||
<text class="username">{{ item.username }}</text> | |||
<text class="post-time">发布时间:{{ item.time }}</text> | |||
</view> | |||
</view> | |||
<!-- 动态内容 --> | |||
<view class="post-content"> | |||
<text class="post-text">{{ item.content }}</text> | |||
<!-- 图片列表 --> | |||
<view class="image-grid" v-if="item.images && item.images.length > 0"> | |||
<image | |||
class="post-image" | |||
v-for="(img, imgIndex) in item.images" | |||
:key="imgIndex" | |||
:src="img" | |||
mode="aspectFill" | |||
@click.stop="previewImage(img, item.images)" | |||
></image> | |||
</view> | |||
</view> | |||
</view> | |||
</view> | |||
<!-- 随手拍/我要留言按钮 --> | |||
<view class="action-btn" :class="currentTab === 'current' ? 'current-btn' : 'photo'" @click="openAction"> | |||
<uv-icon name="edit-pen-fill" size="20" color="white"></uv-icon> | |||
<text class="action-text">{{ actionButtonText }}</text> | |||
</view> | |||
</view> | |||
</template> | |||
<script> | |||
export default { | |||
name: 'CommunityPage', | |||
data() { | |||
return { | |||
currentTab: 'current', // current: 木邻说, past: 木邻见 | |||
postList: [ | |||
{ | |||
id: 1, | |||
username: '猫小姐', | |||
avatar: '/static/默认头像.png', | |||
time: '2023-12-10 14:15:26', | |||
content: '建议社区草地修剪一下,杂草太多了!', | |||
images: ['/static/bannerImage.png', '/static/bannerImage.png', '/static/bannerImage.png'], | |||
type: 'current' | |||
}, | |||
{ | |||
id: 2, | |||
username: '猫小姐', | |||
avatar: '/static/默认头像.png', | |||
time: '2023-12-10 14:15:26', | |||
content: '建议社区草地修剪一下,杂草太多了!', | |||
images: ['/static/bannerImage.png', '/static/bannerImage.png', '/static/bannerImage.png'], | |||
type: 'current' | |||
}, | |||
{ | |||
id: 3, | |||
username: '邻居小王', | |||
avatar: '/static/默认头像.png', | |||
time: '2023-12-09 16:30:15', | |||
content: '今天在小区里捡到一只小猫,有人丢失了吗?', | |||
images: ['/static/bannerImage.png'], | |||
type: 'past' | |||
}, | |||
{ | |||
id: 4, | |||
username: '李阿姨', | |||
avatar: '/static/默认头像.png', | |||
time: '2023-12-08 09:20:30', | |||
content: '分享一下我种的花,希望大家喜欢!', | |||
images: ['/static/bannerImage.png', '/static/bannerImage.png'], | |||
type: 'past' | |||
} | |||
] | |||
} | |||
}, | |||
computed: { | |||
filteredPosts() { | |||
return this.postList.filter(post => post.type === this.currentTab) | |||
}, | |||
actionButtonText() { | |||
return this.currentTab === 'current' ? '我要留言' : '随手拍' | |||
} | |||
}, | |||
methods: { | |||
switchTab(tab) { | |||
this.currentTab = tab | |||
}, | |||
goToPostDetail(post) { | |||
// 跳转到动态详情页面 | |||
uni.navigateTo({ | |||
url: `/subPages/community/postDetail?id=${post.id}` | |||
}) | |||
}, | |||
previewImage(current, urls) { | |||
uni.previewImage({ | |||
current: current, | |||
urls: urls | |||
}) | |||
}, | |||
openAction() { | |||
if (this.currentTab === 'current') { | |||
// 我要留言功能 | |||
this.goToComment() | |||
} else { | |||
// 随手拍功能 | |||
// this.goToComment() | |||
this.takePhoto() | |||
} | |||
}, | |||
takePhoto() { | |||
// uni.chooseMedia({ | |||
// count: 9, | |||
// mediaType: ['image'], | |||
// sourceType: ['album', 'camera'], | |||
// success: (res) => { | |||
// // 处理拍照结果 | |||
// uni.navigateTo({ | |||
// url: '/subPages/community/publishPost' | |||
// }) | |||
// } | |||
// }) | |||
uni.navigateTo({ | |||
url: '/subPages/community/publishPost?page=photo' | |||
}) | |||
}, | |||
goToComment() { | |||
uni.navigateTo({ | |||
url: '/subPages/community/publishPost' | |||
}) | |||
} | |||
} | |||
} | |||
</script> | |||
<style lang="scss" scoped> | |||
.community-page { | |||
min-height: 100vh; | |||
background-color: #f8f9fa; | |||
position: relative; | |||
padding-bottom: 120rpx; | |||
} | |||
// 横幅样式 | |||
.banner-section { | |||
height: 400rpx; | |||
overflow: hidden; | |||
} | |||
.banner-image { | |||
width: 100%; | |||
height: 100%; | |||
} | |||
// Tab切换区域 | |||
.tab-section { | |||
background: white; | |||
padding: 0 40rpx; | |||
border-bottom: 1rpx solid #f0f0f0; | |||
box-shadow: 0px 1.5px 3px 0px rgba(0,0,0,0.16); | |||
} | |||
.tab-container { | |||
display: flex; | |||
// gap: 60rpx; | |||
justify-content: space-evenly; | |||
} | |||
.tab-item { | |||
position: relative; | |||
padding: 30rpx 0; | |||
.tab-text { | |||
font-size: 32rpx; | |||
color: #666; | |||
font-weight: 500; | |||
transition: color 0.3s ease; | |||
} | |||
&.active { | |||
.tab-text { | |||
color: #007AFF; | |||
font-weight: bold; | |||
} | |||
} | |||
} | |||
.tab-line { | |||
position: absolute; | |||
bottom: 0; | |||
left: 50%; | |||
transform: translateX(-50%); | |||
width: 40rpx; | |||
height: 6rpx; | |||
background: #007AFF; | |||
border-radius: 3rpx; | |||
animation: slideIn 0.3s ease; | |||
} | |||
@keyframes slideIn { | |||
from { | |||
width: 0; | |||
} | |||
to { | |||
width: 40rpx; | |||
} | |||
} | |||
// 动态列表样式 | |||
.post-list { | |||
// padding: 20rpx; | |||
} | |||
.post-item { | |||
background-color: white; | |||
border-radius: 16rpx; | |||
// margin-bottom: 24rpx; | |||
padding: 32rpx; | |||
box-shadow: 0 2rpx 16rpx rgba(0, 0, 0, 0.06); | |||
border: 1rpx solid #f5f5f5; | |||
transition: transform 0.2s ease, box-shadow 0.2s ease; | |||
&:active { | |||
transform: scale(0.98); | |||
box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.1); | |||
} | |||
} | |||
.user-info { | |||
display: flex; | |||
align-items: center; | |||
margin-bottom: 24rpx; | |||
} | |||
.user-avatar { | |||
width: 88rpx; | |||
height: 88rpx; | |||
border-radius: 50%; | |||
margin-right: 24rpx; | |||
border: 2rpx solid #f0f0f0; | |||
} | |||
.user-details { | |||
flex: 1; | |||
} | |||
.username { | |||
font-size: 30rpx; | |||
font-weight: bold; | |||
color: #333; | |||
display: block; | |||
margin-bottom: 8rpx; | |||
} | |||
.post-time { | |||
font-size: 24rpx; | |||
color: #999; | |||
} | |||
.post-content { | |||
.post-text { | |||
font-size: 30rpx; | |||
color: #333; | |||
line-height: 1.6; | |||
display: block; | |||
margin-bottom: 24rpx; | |||
} | |||
} | |||
.image-grid { | |||
display: flex; | |||
flex-wrap: wrap; | |||
gap: 12rpx; | |||
} | |||
.post-image { | |||
width: 200rpx; | |||
height: 200rpx; | |||
border-radius: 12rpx; | |||
border: 1rpx solid #f0f0f0; | |||
} | |||
// 随手拍/我要留言按钮样式 | |||
.action-btn { | |||
position: fixed; | |||
bottom: 120rpx; | |||
right: 30rpx; | |||
width: 120rpx; | |||
height: 120rpx; | |||
background: linear-gradient(135deg, #007AFF 0%, #0056CC 100%); | |||
border-radius: 50%; | |||
display: flex; | |||
flex-direction: column; | |||
align-items: center; | |||
justify-content: center; | |||
box-shadow: 0 8rpx 24rpx rgba(0, 122, 255, 0.4); | |||
z-index: 100; | |||
transition: transform 0.2s ease, box-shadow 0.2s ease; | |||
&:active { | |||
transform: scale(0.95); | |||
box-shadow: 0 4rpx 16rpx rgba(0, 122, 255, 0.6); | |||
} | |||
&.photo { | |||
background: linear-gradient(135deg, #FF6666 0%, #CC3333 100%); | |||
} | |||
} | |||
.action-text { | |||
font-size: 20rpx; | |||
color: white; | |||
margin-top: 8rpx; | |||
font-weight: bold; | |||
} | |||
</style> |
@ -0,0 +1,337 @@ | |||
<template> | |||
<view class="my-page"> | |||
<!-- 顶部渐变背景区域 --> | |||
<view class="header-section"> | |||
<!-- 右上角图标 --> | |||
<view class="header-icons"> | |||
<uv-icon name="more-dot-fill" size="20" color="white"></uv-icon> | |||
<uv-icon name="setting" size="20" color="white"></uv-icon> | |||
</view> | |||
<!-- 用户信息区域 --> | |||
<view class="user-info"> | |||
<view class="avatar-container"> | |||
<image class="avatar" src="/static/默认头像.png" mode="aspectFill"></image> | |||
</view> | |||
<text class="username">小精灵</text> | |||
</view> | |||
</view> | |||
<!-- 积分信息区域 --> | |||
<view class="points-section"> | |||
<view class="points-item yellow" @click="navigateTo('favoritesActivity')"> | |||
<view class="points-content"> | |||
<text class="points-number ">5</text> | |||
<text class="points-label yellow">我的收藏</text> | |||
</view> | |||
<view class="points-icon"> | |||
<uv-icon name="star-fill" size="28" color="#FFD700"></uv-icon> | |||
</view> | |||
</view> | |||
<view class="points-item blue"> | |||
<view class="points-content"> | |||
<text class="points-number">41</text> | |||
<text class="points-label blue">可用积分</text> | |||
</view> | |||
<view class="points-icon"> | |||
<uv-icon name="integral" size="28" color="#4A90E2"></uv-icon> | |||
</view> | |||
</view> | |||
</view> | |||
<!-- 常用功能区域 --> | |||
<view class="functions-container"> | |||
<text class="section-title">常用功能</text> | |||
<view class="functions-grid"> | |||
<!-- 第一行 --> | |||
<view class="function-item" @click="navigateTo('profile')"> | |||
<image class="function-icon" src="/static/我的_我的资料.png" mode="aspectFit"></image> | |||
<text class="function-text">我的资料</text> | |||
</view> | |||
<view class="function-item" @click="navigateTo('reports')"> | |||
<image class="function-icon" src="/static/我的_我的报名.png" mode="aspectFit"></image> | |||
<text class="function-text">我的报名</text> | |||
</view> | |||
<view class="function-item" @click="navigateTo('records')"> | |||
<image class="function-icon" src="/static/我的_兑换记录.png" mode="aspectFit"></image> | |||
<text class="function-text">兑换记录</text> | |||
</view> | |||
<view class="function-item" @click="navigateTo('favorites')"> | |||
<image class="function-icon" src="/static/我的_商品收藏.png" mode="aspectFit"></image> | |||
<text class="function-text">商品收藏</text> | |||
</view> | |||
<!-- 第二行 --> | |||
<view class="function-item" @click="logout"> | |||
<image class="function-icon" src="/static/我的_退出登录.png" mode="aspectFit"></image> | |||
<text class="function-text">退出登录</text> | |||
</view> | |||
<view class="function-item" @click="navigateTo('about')"> | |||
<image class="function-icon" src="/static/我的_关于我们.png" mode="aspectFit"></image> | |||
<text class="function-text">关于我们</text> | |||
</view> | |||
<view class="function-item" @click="navigateTo('checkin')"> | |||
<view class="function-icon-wrapper"> | |||
<uv-icon name="file-text-fill" size="32" color="#218cdd"></uv-icon> | |||
</view> | |||
<text class="function-text">活动签到</text> | |||
</view> | |||
</view> | |||
</view> | |||
</view> | |||
</template> | |||
<script> | |||
export default { | |||
name: 'MyPage', | |||
data() { | |||
return { | |||
userInfo: { | |||
name: '小精灵', | |||
avatar: '/static/默认头像.png', | |||
favorites: 5, | |||
points: 41 | |||
} | |||
} | |||
}, | |||
methods: { | |||
navigateTo(page) { | |||
console.log('导航到:', page) | |||
// 根据不同页面进行导航 | |||
switch(page) { | |||
case 'profile': | |||
uni.navigateTo({ | |||
url: '/subPages/my/myProfile' | |||
}) | |||
break | |||
case 'reports': | |||
uni.navigateTo({ | |||
url: '/subPages/my/myRegistrations' | |||
}) | |||
break | |||
case 'records': | |||
uni.navigateTo({ | |||
url: '/subPages/my/exchangeRecord' | |||
}) | |||
break | |||
case 'favorites': | |||
uni.navigateTo({ | |||
url: '/subPages/my/productFavorites' | |||
}) | |||
break | |||
case 'favoritesActivity': | |||
uni.navigateTo({ | |||
url: '/subPages/my/activityFavorites' | |||
}) | |||
break | |||
case 'about': | |||
// 关于我们页面 | |||
break | |||
case 'checkin': | |||
uni.navigateTo({ | |||
url: '/subPages/my/activityCheckin' | |||
}) | |||
break | |||
default: | |||
break | |||
} | |||
}, | |||
logout() { | |||
uni.showModal({ | |||
title: '提示', | |||
content: '确定要退出登录吗?', | |||
success: (res) => { | |||
if (res.confirm) { | |||
// 清除用户信息 | |||
uni.removeStorageSync('userInfo') | |||
uni.showToast({ | |||
title: '已退出登录', | |||
icon: 'success' | |||
}) | |||
// 跳转到登录页面 | |||
setTimeout(() => { | |||
uni.reLaunch({ | |||
url: '/subPages/login/login' | |||
}) | |||
}, 1500) | |||
} | |||
} | |||
}) | |||
} | |||
} | |||
} | |||
</script> | |||
<style lang="scss" scoped> | |||
.my-page { | |||
min-height: 100vh; | |||
background-color: #FFFFFF; | |||
} | |||
// 顶部渐变背景区域 | |||
.header-section { | |||
background: linear-gradient(180deg, #1488db, #98b5f1); | |||
padding: 60rpx 40rpx 80rpx; | |||
position: relative; | |||
} | |||
.header-icons { | |||
display: flex; | |||
justify-content: flex-end; | |||
gap: 32rpx; | |||
margin-bottom: 40rpx; | |||
} | |||
// 用户信息区域 | |||
.user-info { | |||
display: flex; | |||
flex-direction: column; | |||
align-items: center; | |||
margin-bottom: 60rpx; | |||
} | |||
.avatar-container { | |||
width: 120rpx; | |||
height: 120rpx; | |||
border-radius: 50%; | |||
overflow: hidden; | |||
margin-bottom: 20rpx; | |||
border: 4rpx solid rgba(255, 255, 255, 0.3); | |||
} | |||
.avatar { | |||
width: 100%; | |||
height: 100%; | |||
} | |||
.username { | |||
font-size: 30rpx; | |||
color: #000000; | |||
// font-weight: bold; | |||
} | |||
// 积分信息区域 | |||
.points-section { | |||
display: flex; | |||
justify-content: space-between; | |||
margin: 30rpx 30rpx; | |||
gap: 24rpx; | |||
} | |||
.points-item { | |||
border-radius: 12rpx; | |||
padding: 32rpx 24rpx; | |||
flex: 1; | |||
display: flex; | |||
align-items: center; | |||
justify-content: space-between; | |||
position: relative; | |||
box-shadow: 0px 1.5px 3px 0px rgba(0,0,0,0.16); | |||
&.yellow { | |||
background: #FEF4D1; | |||
} | |||
&.blue { | |||
background: #C7E6FF; | |||
} | |||
} | |||
.points-content { | |||
display: flex; | |||
flex-direction: column; | |||
align-items: flex-start; | |||
} | |||
.points-number { | |||
font-size: 48rpx; | |||
color: #000000; | |||
font-weight: bold; | |||
line-height: 1; | |||
} | |||
.points-label { | |||
font-size: 24rpx; | |||
color: #000000; | |||
font-size: 24rpx; | |||
// color: white; | |||
margin-top: 8rpx; | |||
&.yellow{ | |||
color: #DEB31B; | |||
} | |||
&.blue{ | |||
color: #1488db; | |||
} | |||
} | |||
.points-icon { | |||
display: flex; | |||
align-items: center; | |||
justify-content: center; | |||
} | |||
// 常用功能区域 | |||
.functions-container { | |||
height: 319px; | |||
background: #ffffff; | |||
border-radius: 8px; | |||
box-shadow: 0px 1.5px 3px 0px rgba(0,0,0,0.16); | |||
margin: 20rpx 30rpx; | |||
padding: 40rpx; | |||
} | |||
.section-title { | |||
font-size: 32rpx; | |||
color: #333; | |||
font-weight: bold; | |||
margin-bottom: 40rpx; | |||
display: block; | |||
} | |||
.functions-grid { | |||
display: grid; | |||
grid-template-columns: repeat(4, 1fr); | |||
gap: 40rpx 10rpx; | |||
} | |||
.function-item { | |||
display: flex; | |||
flex-direction: column; | |||
align-items: center; | |||
gap: 16rpx; | |||
padding: 20rpx; | |||
border-radius: 12rpx; | |||
transition: all 0.3s ease; | |||
&:active { | |||
background-color: #F0F8FF; | |||
transform: scale(0.95); | |||
} | |||
} | |||
.function-icon { | |||
width: 48rpx; | |||
height: 48rpx; | |||
} | |||
.function-icon-wrapper { | |||
width: 48rpx; | |||
height: 48rpx; | |||
display: flex; | |||
align-items: center; | |||
justify-content: center; | |||
} | |||
.function-text { | |||
font-size: 24rpx; | |||
color: #000000; | |||
text-align: center; | |||
} | |||
</style> |
@ -0,0 +1,326 @@ | |||
<template> | |||
<view class="publish-page"> | |||
<!-- 顶部提示容器 --> | |||
<view class="tip-container"> | |||
<uv-icon name="info-circle-fill" size="16" color="#007AFF"></uv-icon> | |||
<text class="tip-text">留言板内容要经过审核才能发布成功,提交审核中请耐心等待,审核通过后会上线!</text> | |||
</view> | |||
<!-- 主要内容容器 --> | |||
<view class="main-container"> | |||
<!-- 木邻说标题 --> | |||
<view class="title-section"> | |||
<!-- 加一个小竖条 --> | |||
<view class="vertical-line" :class="isPhoto ? 'red' : 'blue'"></view> | |||
<text class="title-text"> {{ isPhoto ? '木龄见' : '木龄说' }} </text> | |||
</view> | |||
<!-- 留言板输入区域 --> | |||
<view class="message-section"> | |||
<text class="section-label">您对本社区发展有什么建议和期待,欢迎留言</text> | |||
<view class="textarea-container"> | |||
<textarea | |||
class="message-textarea" | |||
v-model="messageContent" | |||
placeholder="请输入您的留言内容..." | |||
maxlength="500" | |||
:show-confirm-bar="false" | |||
></textarea> | |||
<view class="char-count"> | |||
<text class="count-text">{{ messageContent.length }}/500</text> | |||
</view> | |||
</view> | |||
</view> | |||
<!-- 添加图片区域 --> | |||
<view class="image-section"> | |||
<view class="image-grid"> | |||
<!-- 已选择的图片 --> | |||
<view | |||
class="image-item" | |||
v-for="(image, index) in selectedImages" | |||
:key="index" | |||
> | |||
<image class="preview-image" :src="image" mode="aspectFill"></image> | |||
<view class="delete-btn" @click="removeImage(index)"> | |||
<uv-icon name="close" size="12" color="white"></uv-icon> | |||
</view> | |||
</view> | |||
<!-- 添加图片按钮 --> | |||
<view | |||
class="add-image-btn" | |||
v-if="selectedImages.length < 9" | |||
@click="chooseImage" | |||
> | |||
<uv-icon name="plus" size="24" color="#999"></uv-icon> | |||
<text class="add-text">添加图片</text> | |||
</view> | |||
</view> | |||
</view> | |||
</view> | |||
<!-- 提交按钮容器 --> | |||
<view class="submit-container"> | |||
<uv-button | |||
class="submit-btn" | |||
type="primary" | |||
shape="circle" | |||
:disabled="!messageContent.trim()" | |||
@click="submitPost" | |||
> | |||
提交审核 | |||
</uv-button> | |||
</view> | |||
</view> | |||
</template> | |||
<script> | |||
export default { | |||
name: 'PublishPost', | |||
data() { | |||
return { | |||
messageContent: '', | |||
selectedImages: [], | |||
isPhoto: false | |||
} | |||
}, | |||
methods: { | |||
chooseImage() { | |||
const remainingCount = 9 - this.selectedImages.length | |||
uni.chooseMedia({ | |||
count: remainingCount, | |||
mediaType: ['image'], | |||
sourceType: ['album', 'camera'], | |||
success: (res) => { | |||
const tempFiles = res.tempFiles.map(file => file.tempFilePath) | |||
this.selectedImages = [...this.selectedImages, ...tempFiles] | |||
}, | |||
fail: (err) => { | |||
console.error('选择图片失败:', err) | |||
} | |||
}) | |||
}, | |||
removeImage(index) { | |||
this.selectedImages.splice(index, 1) | |||
}, | |||
submitPost() { | |||
if (!this.messageContent.trim()) { | |||
uni.showToast({ | |||
title: '请输入留言内容', | |||
icon: 'none' | |||
}) | |||
return | |||
} | |||
// 模拟提交 | |||
uni.showLoading({ | |||
title: '提交中...' | |||
}) | |||
setTimeout(() => { | |||
uni.hideLoading() | |||
uni.showToast({ | |||
title: '提交成功,等待审核', | |||
icon: 'success' | |||
}) | |||
setTimeout(() => { | |||
uni.navigateBack() | |||
}, 1500) | |||
}, 2000) | |||
} | |||
}, | |||
onLoad(options) { | |||
if (options.page === 'photo') { | |||
this.isPhoto = true | |||
console.log(this.isPhoto); | |||
} | |||
} | |||
} | |||
</script> | |||
<style lang="scss" scoped> | |||
.publish-page { | |||
min-height: 100vh; | |||
background-color: #F3F7F8; | |||
// display: flex; | |||
// flex-direction: column; | |||
} | |||
// 顶部提示容器 | |||
.tip-container { | |||
background-color: #E3F2FD; | |||
padding: 24rpx 32rpx; | |||
margin: 20rpx; | |||
border-radius: 12rpx; | |||
display: flex; | |||
align-items: flex-start; | |||
gap: 16rpx; | |||
border-left: 6rpx solid #007AFF; | |||
} | |||
.tip-text { | |||
font-size: 26rpx; | |||
color: #1976D2; | |||
line-height: 1.5; | |||
flex: 1; | |||
} | |||
// 主要内容容器 | |||
.main-container { | |||
flex: 1; | |||
margin: 0 20rpx; | |||
background-color: white; | |||
border-radius: 16rpx; | |||
padding: 32rpx; | |||
box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.05); | |||
} | |||
.title-section { | |||
margin-bottom: 32rpx; | |||
display: flex; | |||
align-items: center; | |||
gap: 16rpx; | |||
} | |||
.vertical-line { | |||
width: 8rpx; | |||
height: 40rpx; | |||
border-radius: 4rpx; | |||
&.red { | |||
background-color: #FF4757; | |||
} | |||
&.blue { | |||
background-color: #007AFF; | |||
} | |||
} | |||
.title-text { | |||
font-size: 36rpx; | |||
font-weight: bold; | |||
color: #333; | |||
} | |||
// 留言板区域 | |||
.message-section { | |||
margin-bottom: 40rpx; | |||
} | |||
.section-label { | |||
font-size: 28rpx; | |||
color: #666; | |||
display: block; | |||
margin-bottom: 20rpx; | |||
} | |||
.textarea-container { | |||
position: relative; | |||
background-color: #f5f5f5; | |||
border-radius: 12rpx; | |||
padding: 24rpx; | |||
} | |||
.message-textarea { | |||
width: 100%; | |||
min-height: 300rpx; | |||
font-size: 30rpx; | |||
color: #333; | |||
background-color: transparent; | |||
border: none; | |||
outline: none; | |||
resize: none; | |||
line-height: 1.6; | |||
} | |||
.char-count { | |||
position: absolute; | |||
bottom: 16rpx; | |||
right: 16rpx; | |||
} | |||
.count-text { | |||
font-size: 24rpx; | |||
color: #999; | |||
} | |||
// 图片区域 | |||
.image-section { | |||
margin-bottom: 40rpx; | |||
} | |||
.image-grid { | |||
display: flex; | |||
flex-wrap: wrap; | |||
gap: 16rpx; | |||
} | |||
.image-item { | |||
position: relative; | |||
width: 200rpx; | |||
height: 200rpx; | |||
border-radius: 12rpx; | |||
overflow: hidden; | |||
} | |||
.preview-image { | |||
width: 100%; | |||
height: 100%; | |||
} | |||
.delete-btn { | |||
position: absolute; | |||
top: 8rpx; | |||
right: 8rpx; | |||
width: 40rpx; | |||
height: 40rpx; | |||
background-color: rgba(0, 0, 0, 0.6); | |||
border-radius: 50%; | |||
display: flex; | |||
align-items: center; | |||
justify-content: center; | |||
} | |||
.add-image-btn { | |||
width: 200rpx; | |||
height: 200rpx; | |||
border: 2rpx dashed #ddd; | |||
border-radius: 12rpx; | |||
display: flex; | |||
flex-direction: column; | |||
align-items: center; | |||
justify-content: center; | |||
gap: 12rpx; | |||
background-color: #fafafa; | |||
transition: all 0.3s ease; | |||
&:active { | |||
background-color: #f0f0f0; | |||
border-color: #007AFF; | |||
} | |||
} | |||
.add-text { | |||
font-size: 24rpx; | |||
color: #999; | |||
} | |||
// 提交按钮容器 | |||
.submit-container { | |||
padding: 32rpx 40rpx; | |||
// background-color: white; | |||
margin-top: 60rpx; | |||
border-top: 1rpx solid #f0f0f0; | |||
} | |||
.submit-btn { | |||
width: 100%; | |||
height: 88rpx; | |||
border-radius: 44rpx; | |||
font-size: 32rpx; | |||
font-weight: bold; | |||
} | |||
</style> |
@ -0,0 +1,223 @@ | |||
<template> | |||
<view class="page"> | |||
<!-- 导航栏 --> | |||
<!-- 签到列表 --> | |||
<view class="content"> | |||
<view v-if="checkinList.length > 0" class="list"> | |||
<view v-for="item in checkinList" :key="item.id" class="activity-item" @click.stop="checkinActivity(item)" > | |||
<image class="activity-image" :src="item.image" mode="aspectFill"></image> | |||
<view class="activity-info"> | |||
<view class="title-row"> | |||
<view class="activity-badge"> | |||
<text class="badge-text">{{ item.points }}分</text> | |||
</view> | |||
<text class="activity-title">{{ item.title }}</text> | |||
</view> | |||
<view class="activity-location"> | |||
<uv-icon name="map-fill" size="14" color="#999"></uv-icon> | |||
<text class="location-text">{{ item.location }}</text> | |||
</view> | |||
<view class="activity-time"> | |||
<uv-icon name="calendar" size="14" color="#999"></uv-icon> | |||
<text class="time-text">{{ item.time }}</text> | |||
</view> | |||
<view class="activity-participants"> | |||
<uv-icon name="account-fill" size="14" color="#999"></uv-icon> | |||
<text class="participants-text">{{ item.participants }}人已报名</text> | |||
</view> | |||
</view> | |||
<view class="activity-action"> | |||
<uv-button | |||
type="primary" | |||
shape="circle" | |||
size="small" | |||
text="签到码" | |||
></uv-button> | |||
</view> | |||
</view> | |||
</view> | |||
<view v-else class="empty"> | |||
<uv-empty mode="data" text="暂无可签到活动"></uv-empty> | |||
</view> | |||
</view> | |||
<!-- 操作菜单 --> | |||
<uv-action-sheet :show="showActionSheet" :actions="actions" @close="showActionSheet = false" @select="onActionSelect"></uv-action-sheet> | |||
</view> | |||
</template> | |||
<script> | |||
export default { | |||
data() { | |||
return { | |||
showActionSheet: false, | |||
actions: [ | |||
{ name: '刷新列表', color: '#218cdd' } | |||
], | |||
checkinList: [ | |||
{ | |||
id: 1, | |||
title: '关爱自闭儿童活动', | |||
image: '/static/bannerImage.png', | |||
location: '七步沙社区文化中心', | |||
time: '2025-06-12 14:30', | |||
participants: 12, | |||
points: 30, | |||
status: 'pending' // pending: 待签到, checked: 已签到 | |||
}, | |||
{ | |||
id: 2, | |||
title: '社区环保志愿活动', | |||
image: '/static/bannerImage.png', | |||
location: '绿园社区广场', | |||
time: '2025-06-13 09:00', | |||
participants: 25, | |||
points: 25, | |||
status: 'checked' | |||
}, | |||
{ | |||
id: 3, | |||
title: '老年人关爱服务', | |||
image: '/static/bannerImage.png', | |||
location: '夕阳红养老院', | |||
time: '2025-06-14 15:00', | |||
participants: 8, | |||
points: 35, | |||
status: 'pending' | |||
}, | |||
{ | |||
id: 4, | |||
title: '青少年心理健康讲座', | |||
image: '/static/bannerImage.png', | |||
location: '市图书馆报告厅', | |||
time: '2025-06-15 19:30', | |||
participants: 45, | |||
points: 20, | |||
status: 'pending' | |||
} | |||
] | |||
} | |||
}, | |||
methods: { | |||
// 查看活动详情 | |||
viewActivityDetail(item) { | |||
uni.navigateTo({ | |||
url: `/subPages/index/activityDetail?id=${item.id}` | |||
}) | |||
}, | |||
// 跳转到签到码界面 | |||
checkinActivity(item) { | |||
uni.navigateTo({ | |||
url: `/subPages/my/checkinCode?id=${item.id}&title=${item.title}&points=${item.points}` | |||
}) | |||
}, | |||
// 操作菜单选择 | |||
onActionSelect(item) { | |||
if (item.name === '刷新列表') { | |||
uni.showToast({ | |||
title: '刷新成功', | |||
icon: 'success' | |||
}) | |||
} | |||
this.showActionSheet = false | |||
} | |||
} | |||
} | |||
</script> | |||
<style lang="scss" scoped> | |||
.page { | |||
background-color: #f5f5f5; | |||
min-height: 100vh; | |||
} | |||
.content { | |||
padding: 20rpx; | |||
} | |||
.list { | |||
display: flex; | |||
flex-direction: column; | |||
gap: 20rpx; | |||
} | |||
.activity-item { | |||
display: flex; | |||
// margin-bottom: 30rpx; | |||
background: #fff; | |||
border-radius: 12rpx; | |||
padding: 20rpx; | |||
box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.1); | |||
} | |||
.activity-image { | |||
width: 180rpx; | |||
height: 180rpx; | |||
border-radius: 8rpx; | |||
margin-right: 20rpx; | |||
} | |||
.activity-info { | |||
flex: 1; | |||
display: flex; | |||
flex-direction: column; | |||
justify-content: space-between; | |||
} | |||
.title-row { | |||
display: flex; | |||
align-items: center; | |||
margin-bottom: 10rpx; | |||
} | |||
.activity-badge { | |||
width: 62rpx; | |||
height: 40rpx; | |||
background: #218cdd; | |||
border-radius: 7rpx; | |||
margin-right: 14rpx; | |||
display: flex; | |||
align-items: center; | |||
justify-content: center; | |||
} | |||
.badge-text { | |||
font-size: 18rpx; | |||
color: #fff; | |||
} | |||
.activity-title { | |||
font-size: 28rpx; | |||
font-weight: bold; | |||
color: #333; | |||
line-height: 1.4; | |||
display: -webkit-box; | |||
-webkit-box-orient: vertical; | |||
-webkit-line-clamp: 2; | |||
overflow: hidden; | |||
} | |||
.activity-location, .activity-time, .activity-participants { | |||
display: flex; | |||
align-items: center; | |||
margin-bottom: 6rpx; | |||
} | |||
.location-text, .time-text, .participants-text { | |||
font-size: 24rpx; | |||
color: #999; | |||
margin-left: 6rpx; | |||
} | |||
.activity-action { | |||
display: flex; | |||
align-items: flex-end; | |||
padding-bottom: 10rpx; | |||
} | |||
.empty { | |||
margin-top: 200rpx; | |||
} | |||
</style> |
@ -0,0 +1,205 @@ | |||
<template> | |||
<view class="page"> | |||
<!-- 收藏列表 --> | |||
<view class="content"> | |||
<view v-if="favoritesList.length > 0" class="list"> | |||
<view v-for="item in favoritesList" :key="item.id" class="record-item" @click="viewGoodsDetail(item)"> | |||
<image class="record-image" :src="item.image" mode="aspectFit"></image> | |||
<view class="record-content"> | |||
<view class="record-info"> | |||
<view class="title-row"> | |||
<text class="record-title">{{ item.title }}</text> | |||
</view> | |||
<view class="record-points"> | |||
<uv-icon name="integral" size="16" color="#218cdd"></uv-icon> | |||
<text class="points-text">{{ item.points }}积分</text> | |||
</view> | |||
<view class="record-time"> | |||
<uv-icon name="heart-fill" size="14" color="#ff6b6b"></uv-icon> | |||
<text class="time-text">收藏时间:{{ item.favoriteTime }}</text> | |||
</view> | |||
</view> | |||
<view class="record-action"> | |||
<uv-button | |||
type="primary" | |||
size="small" | |||
text="查看详情" | |||
shape="circle" | |||
@click.stop="viewGoodsDetail(item)" | |||
></uv-button> | |||
</view> | |||
</view> | |||
</view> | |||
</view> | |||
<view v-else class="empty"> | |||
<uv-empty mode="data" text="暂无收藏商品"></uv-empty> | |||
</view> | |||
</view> | |||
<!-- 操作菜单 --> | |||
<uv-action-sheet :show="showActionSheet" :actions="actions" @close="showActionSheet = false" @select="onActionSelect"></uv-action-sheet> | |||
</view> | |||
</template> | |||
<script> | |||
export default { | |||
data() { | |||
return { | |||
showActionSheet: false, | |||
actions: [ | |||
{ name: '清空收藏', color: '#ff4757' } | |||
], | |||
favoritesList: [ | |||
{ | |||
id: 1, | |||
title: '咖吧之夜童话海新款教育咖吧放内艺术手办树脂伴学生小礼品', | |||
image: '/static/商城_商品1.png', | |||
points: 100, | |||
favoriteTime: '2025-06-12 14:30:12' | |||
}, | |||
{ | |||
id: 2, | |||
title: '创意文具套装学生用品办公用品礼盒装', | |||
image: '/static/商城_商品2.png', | |||
points: 150, | |||
favoriteTime: '2025-06-11 10:20:30' | |||
}, | |||
{ | |||
id: 3, | |||
title: '精美笔记本套装商务办公记事本礼品', | |||
image: '/static/商城_商品1.png', | |||
points: 80, | |||
favoriteTime: '2025-06-10 16:45:22' | |||
}, | |||
{ | |||
id: 4, | |||
title: '环保购物袋帆布袋手提袋学生用品', | |||
image: '/static/商城_商品2.png', | |||
points: 50, | |||
favoriteTime: '2025-06-09 09:15:18' | |||
} | |||
] | |||
} | |||
}, | |||
methods: { | |||
// 查看商品详情 | |||
viewGoodsDetail(item) { | |||
uni.navigateTo({ | |||
url: `/subPages/shop/goodsDetail?id=${item.id}` | |||
}) | |||
}, | |||
// 操作菜单选择 | |||
onActionSelect(item) { | |||
if (item.name === '清空收藏') { | |||
uni.showModal({ | |||
title: '提示', | |||
content: '确定要清空所有收藏商品吗?', | |||
success: (res) => { | |||
if (res.confirm) { | |||
this.favoritesList = [] | |||
uni.showToast({ | |||
title: '已清空收藏', | |||
icon: 'success' | |||
}) | |||
} | |||
} | |||
}) | |||
} | |||
this.showActionSheet = false | |||
} | |||
} | |||
} | |||
</script> | |||
<style lang="scss" scoped> | |||
.page { | |||
background-color: #f5f5f5; | |||
min-height: 100vh; | |||
} | |||
.content { | |||
padding: 0; | |||
} | |||
.list { | |||
padding: 20rpx; | |||
} | |||
.record-item { | |||
display: flex; | |||
align-items: flex-start; | |||
margin-bottom: 30rpx; | |||
background: #fff; | |||
border-radius: 12rpx; | |||
padding: 20rpx; | |||
} | |||
.record-image { | |||
width: 215rpx; | |||
height: 215rpx; | |||
border-radius: 8rpx; | |||
margin-right: 20rpx; | |||
flex-shrink: 0; | |||
} | |||
.record-content { | |||
flex: 1; | |||
display: flex; | |||
flex-direction: column; | |||
} | |||
.record-info { | |||
display: flex; | |||
flex-direction: column; | |||
margin-bottom: 20rpx; | |||
} | |||
.title-row { | |||
margin-bottom: 10rpx; | |||
} | |||
.record-title { | |||
font-size: 22rpx; | |||
color: #000; | |||
line-height: 1.4; | |||
display: -webkit-box; | |||
-webkit-box-orient: vertical; | |||
-webkit-line-clamp: 2; | |||
overflow: hidden; | |||
} | |||
.record-points { | |||
display: flex; | |||
align-items: center; | |||
margin-bottom: 8rpx; | |||
} | |||
.points-text { | |||
font-size: 26rpx; | |||
color: #218cdd; | |||
font-weight: bold; | |||
margin-left: 6rpx; | |||
} | |||
.record-time { | |||
display: flex; | |||
align-items: center; | |||
} | |||
.time-text { | |||
font-size: 22rpx; | |||
color: #999; | |||
margin-left: 6rpx; | |||
} | |||
.record-action { | |||
display: flex; | |||
justify-content: flex-end; | |||
border-top: 1rpx solid #f0f0f0; | |||
} | |||
.empty { | |||
margin-top: 200rpx; | |||
} | |||
</style> |
@ -0,0 +1,268 @@ | |||
<template> | |||
<view class="page"> | |||
<!-- 活动信息卡片 --> | |||
<view class="activity-card"> | |||
<image class="activity-image" :src="activityInfo.image" mode="aspectFill"></image> | |||
<view class="activity-info"> | |||
<view class="title-row"> | |||
<view class="activity-badge"> | |||
<text class="badge-text">{{ activityInfo.points }}分</text> | |||
</view> | |||
<text class="activity-title">{{ activityInfo.title }}</text> | |||
</view> | |||
<view class="activity-location"> | |||
<uv-icon name="map-fill" size="14" color="#999"></uv-icon> | |||
<text class="location-text">{{ activityInfo.location }}</text> | |||
</view> | |||
<view class="activity-time"> | |||
<uv-icon name="calendar" size="14" color="#999"></uv-icon> | |||
<text class="time-text">{{ activityInfo.time }}</text> | |||
</view> | |||
<view class="activity-participants"> | |||
<uv-icon name="account-fill" size="14" color="#999"></uv-icon> | |||
<text class="participants-text">{{ activityInfo.participants }}/{{ activityInfo.maxParticipants }}人已报名</text> | |||
</view> | |||
</view> | |||
</view> | |||
<!-- 二维码区域 --> | |||
<view class="qrcode-container"> | |||
<view class="qrcode-wrapper"> | |||
<!-- <uv-qrcode ref="qrcode" size="300px" value="https://h5.uvui.cn"></uv-qrcode> --> | |||
<uv-qrcode | |||
ref="qrcode" | |||
:value="qrcodeValue" | |||
size="500rpx" | |||
@complete="onQRCodeComplete" | |||
></uv-qrcode> | |||
</view> | |||
</view> | |||
<!-- 保存按钮 --> | |||
<view class="save-container"> | |||
<uv-button | |||
type="primary" | |||
text="保存到手机" | |||
size="large" | |||
shape="circle" | |||
@click="saveQRCode" | |||
></uv-button> | |||
</view> | |||
</view> | |||
</template> | |||
<script> | |||
import utils from '@/utils/index' | |||
export default { | |||
data() { | |||
return { | |||
activityInfo: { | |||
id: '', | |||
title: '', | |||
image: '/static/bannerImage.png', | |||
location: '', | |||
time: '', | |||
participants: 0, | |||
maxParticipants: 30, | |||
points: 0 | |||
}, | |||
qrcodeValue: 'https://h5.uvui.cn', | |||
qrCodeReady: false | |||
} | |||
}, | |||
onLoad(options) { | |||
// 获取传递的参数 | |||
if (options.id) { | |||
this.activityInfo.id = options.id | |||
} | |||
if (options.title) { | |||
this.activityInfo.title = decodeURIComponent(options.title) | |||
} | |||
if (options.points) { | |||
this.activityInfo.points = options.points | |||
} | |||
// 模拟获取活动详细信息 | |||
this.loadActivityInfo() | |||
// 生成签到码 | |||
this.generateQRCode() | |||
}, | |||
methods: { | |||
// 加载活动信息 | |||
loadActivityInfo() { | |||
// 这里应该根据活动ID调用API获取详细信息 | |||
// 现在使用模拟数据 | |||
this.activityInfo = { | |||
...this.activityInfo, | |||
location: '长沙市雨花区时代阳光大道国际新城2145', | |||
time: '2025-06-12 14:30', | |||
participants: 30, | |||
maxParticipants: 30 | |||
} | |||
}, | |||
// 生成二维码内容 | |||
generateQRCode() { | |||
// 生成包含活动信息的二维码内容 | |||
const qrData = { | |||
activityId: this.activityInfo.id, | |||
activityTitle: this.activityInfo.title, | |||
type: 'checkin', | |||
timestamp: Date.now() | |||
} | |||
this.qrcodeValue = JSON.stringify(qrData) | |||
}, | |||
// 二维码生成完成事件 | |||
onQRCodeComplete(result) { | |||
if (result.success) { | |||
this.qrCodeReady = true | |||
console.log('二维码生成成功') | |||
} else { | |||
console.log('二维码生成失败') | |||
} | |||
}, | |||
// 保存二维码到手机 | |||
saveQRCode() { | |||
if (!this.qrCodeReady) { | |||
uni.showToast({ | |||
title: '二维码还未生成完成', | |||
icon: 'none' | |||
}) | |||
return | |||
} | |||
this.$refs.qrcode.save({ | |||
success: (res) => { | |||
uni.showToast({ | |||
title: '保存成功', | |||
icon: 'success' | |||
}) | |||
}, | |||
fail: (err) => { | |||
console.log('保存失败:', err) | |||
// 用uniapp获取保存权限 | |||
utils.authoriza({ | |||
scope: 'writePhotosAlbum', | |||
successfn: () => { | |||
// 保存二维码 | |||
this.$refs.qrcode.save({ | |||
success: (res) => { | |||
uni.showToast({ | |||
title: '保存成功', | |||
icon: 'success' | |||
}) | |||
}, | |||
fail: (err) => { | |||
console.log('保存失败:', err) | |||
uni.showToast({ | |||
title: '保存失败', | |||
icon: 'none' | |||
}) | |||
} | |||
}) | |||
}, | |||
failfn: () => { | |||
uni.showToast({ | |||
title: '保存失败', | |||
icon: 'none' | |||
}) | |||
} | |||
}) | |||
} | |||
}) | |||
} | |||
} | |||
} | |||
</script> | |||
<style lang="scss" scoped> | |||
.page { | |||
background-color: #f5f5f5; | |||
min-height: 100vh; | |||
padding: 20rpx; | |||
} | |||
.activity-card { | |||
display: flex; | |||
background: #fff; | |||
border-radius: 12rpx; | |||
padding: 20rpx; | |||
margin-bottom: 40rpx; | |||
box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.1); | |||
} | |||
.activity-image { | |||
width: 180rpx; | |||
height: 180rpx; | |||
border-radius: 8rpx; | |||
margin-right: 20rpx; | |||
} | |||
.activity-info { | |||
flex: 1; | |||
display: flex; | |||
flex-direction: column; | |||
justify-content: space-between; | |||
} | |||
.title-row { | |||
display: flex; | |||
align-items: center; | |||
margin-bottom: 10rpx; | |||
} | |||
.activity-badge { | |||
width: 31px; | |||
height: 20px; | |||
background: #218cdd; | |||
border-radius: 3.5px; | |||
margin-right: 7rpx; | |||
display: flex; | |||
align-items: center; | |||
justify-content: center; | |||
} | |||
.badge-text { | |||
font-size: 18rpx; | |||
color: #fff; | |||
} | |||
.activity-title { | |||
font-size: 28rpx; | |||
font-weight: bold; | |||
color: #333; | |||
line-height: 1.4; | |||
} | |||
.activity-location, .activity-time, .activity-participants { | |||
display: flex; | |||
align-items: center; | |||
margin-bottom: 6rpx; | |||
} | |||
.location-text, .time-text, .participants-text { | |||
font-size: 24rpx; | |||
color: #999; | |||
margin-left: 6rpx; | |||
} | |||
.qrcode-container { | |||
display: flex; | |||
justify-content: center; | |||
margin-bottom: 60rpx; | |||
} | |||
.qrcode-wrapper { | |||
background: #fff; | |||
border-radius: 12rpx; | |||
padding: 40rpx; | |||
box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.1); | |||
} | |||
.save-container { | |||
padding: 0 40rpx; | |||
} | |||
</style> |
@ -0,0 +1,280 @@ | |||
<template> | |||
<view class="goods-detail"> | |||
<!-- 轮播图 --> | |||
<view class="banner-container"> | |||
<uv-swiper | |||
indicator | |||
indicatorMode="dot" | |||
indicatorActiveColor="blue" | |||
height="700rpx" | |||
:list="bannerImages"></uv-swiper> | |||
</view> | |||
<!-- 商品信息 --> | |||
<view class="goods-info"> | |||
<!-- 积分信息 --> | |||
<view class="points-section"> | |||
<uv-icon name="integral" size="16" color="#218cdd"></uv-icon> | |||
<text class="points-text">{{ goodsData.points }}积分</text> | |||
</view> | |||
<!-- 商品标题 --> | |||
<view class="title-section"> | |||
<text class="goods-title">{{ goodsData.name }}</text> | |||
</view> | |||
</view> | |||
<!-- 商品详情独立容器 --> | |||
<view class="detail-container"> | |||
<!-- 商品详情标题 --> | |||
<view class="detail-title-section"> | |||
<text class="detail-title">商品详情</text> | |||
</view> | |||
<!-- 商品图集 --> | |||
<view class="gallery-section"> | |||
<view class="gallery-grid"> | |||
<image | |||
v-for="(img, index) in goodsData.gallery" | |||
:key="index" | |||
:src="img" | |||
class="gallery-image" | |||
mode="aspectFill" | |||
@click="previewImage(img, goodsData.gallery)" | |||
></image> | |||
</view> | |||
</view> | |||
</view> | |||
<!-- 底部操作栏 - 只在待领取状态显示 --> | |||
<view v-if="status === 'pending'" class="bottom-bar"> | |||
<view class="exchange-btn" @click="confirmReceive"> | |||
<text class="exchange-text">确认取货</text> | |||
</view> | |||
</view> | |||
</view> | |||
</template> | |||
<script> | |||
export default { | |||
name: 'ExchangeDetail', | |||
data() { | |||
return { | |||
goodsId: '', | |||
status: 'pending', // pending: 待领取, received: 已领取, cancelled: 系统取消 | |||
goodsData: { | |||
id: 1, | |||
name: '哪吒之魔童闹海新款首套装哪吒校内艺术手办树脂摆件学生小礼品', | |||
points: 100, | |||
category: '积分兑换', | |||
exchangeCount: 120, | |||
stock: 50, | |||
description: '这是一款美味的薄脆小饼干,口感酥脆,营养丰富。采用优质原料制作,无添加剂,适合全家人享用。每一口都能感受到浓郁的香味和酥脆的口感,是您休闲时光的最佳选择。', | |||
gallery: [ | |||
'/static/商城_商品1.png', | |||
'/static/商城_商品2.png', | |||
'/static/bannerImage.png', | |||
'/static/商城_商品1.png', | |||
'/static/商城_商品2.png', | |||
'/static/bannerImage.png' | |||
] | |||
}, | |||
bannerImages: [ | |||
'/static/商城_商品1.png', | |||
'/static/商城_商品2.png', | |||
'/static/bannerImage.png' | |||
] | |||
} | |||
}, | |||
onLoad(options) { | |||
if (options.id) { | |||
this.goodsId = options.id; | |||
} | |||
if (options.status) { | |||
this.status = options.status; | |||
} | |||
this.getGoodsDetail(this.goodsId); | |||
}, | |||
methods: { | |||
getGoodsDetail(id) { | |||
// 模拟获取商品详情 | |||
console.log('获取商品详情:', id); | |||
// 根据id设置不同的商品数据 | |||
const goodsMap = { | |||
'1': { | |||
id: 1, | |||
name: '哪吒之魔童闹海新款首套装哪吒校内艺术手办树脂摆件学生小礼品', | |||
points: 100, | |||
category: '积分兑换', | |||
exchangeCount: 120, | |||
stock: 50, | |||
description: '这是一款美味的薄脆小饼干,口感酥脆,营养丰富。采用优质原料制作,无添加剂,适合全家人享用。', | |||
gallery: ['/static/商城_商品1.png', '/static/商城_商品2.png', '/static/bannerImage.png', '/static/商城_商品1.png', '/static/商城_商品2.png', '/static/bannerImage.png'] | |||
}, | |||
'2': { | |||
id: 2, | |||
name: '幼儿园宝宝启蒙书', | |||
points: 145, | |||
category: '母婴', | |||
exchangeCount: 85, | |||
stock: 30, | |||
description: '专为幼儿园宝宝设计的启蒙读物,内容丰富有趣,图文并茂,有助于培养孩子的阅读兴趣和认知能力。', | |||
gallery: ['/static/商城_商品2.png', '/static/商城_商品1.png', '/static/bannerImage.png', '/static/商城_商品2.png', '/static/商城_商品1.png', '/static/bannerImage.png'] | |||
} | |||
}; | |||
if (goodsMap[id]) { | |||
this.goodsData = goodsMap[id]; | |||
this.bannerImages = goodsMap[id].gallery.slice(0, 3); | |||
} | |||
}, | |||
previewImage(current, urls) { | |||
uni.previewImage({ | |||
current: current, | |||
urls: urls | |||
}); | |||
}, | |||
confirmReceive() { | |||
uni.showModal({ | |||
title: '确认取货', | |||
content: `确定已取货${this.goodsData.name}吗?`, | |||
success: (res) => { | |||
if (res.confirm) { | |||
// 执行确认取货逻辑 | |||
uni.showToast({ | |||
title: '取货成功', | |||
icon: 'success' | |||
}); | |||
// 延迟返回上一页 | |||
setTimeout(() => { | |||
uni.navigateBack(); | |||
}, 1500); | |||
} | |||
} | |||
}); | |||
} | |||
} | |||
} | |||
</script> | |||
<style lang="scss" scoped> | |||
.goods-detail { | |||
background: #f8f8f8; | |||
min-height: 100vh; | |||
padding-bottom: 120rpx; // 为底部固定栏留出空间 | |||
} | |||
.banner-container { | |||
height: 700rpx; | |||
.banner-swiper { | |||
width: 100%; | |||
.banner-image { | |||
width: 100%; | |||
height: 100%; | |||
} | |||
} | |||
} | |||
.goods-info { | |||
background: #ffffff; | |||
margin-top: 20rpx; | |||
padding: 30rpx; | |||
} | |||
.points-section { | |||
display: flex; | |||
align-items: center; | |||
margin-bottom: 20rpx; | |||
.points-text { | |||
font-size: 32rpx; | |||
font-weight: bold; | |||
color: #218cdd; | |||
margin-left: 6rpx; | |||
} | |||
} | |||
.title-section { | |||
margin-bottom: 40rpx; | |||
.goods-title { | |||
font-size: 28rpx; | |||
color: #333333; | |||
line-height: 1.5; | |||
display: block; | |||
} | |||
} | |||
.detail-container { | |||
background: #ffffff; | |||
margin-top: 20rpx; | |||
padding: 30rpx; | |||
margin-bottom: 120rpx; | |||
} | |||
.detail-title-section { | |||
display: flex; | |||
align-items: center; | |||
justify-content: center; | |||
margin-bottom: 30rpx; | |||
.detail-title { | |||
font-size: 28rpx; | |||
font-weight: bold; | |||
color: #333333; | |||
} | |||
} | |||
.gallery-section { | |||
margin-bottom: 40rpx; | |||
.gallery-grid { | |||
display: grid; | |||
grid-template-columns: repeat(3, 1fr); | |||
gap: 16rpx; | |||
.gallery-image { | |||
width: 100%; | |||
height: 200rpx; | |||
border-radius: 12rpx; | |||
border: 1rpx solid #f0f0f0; | |||
} | |||
} | |||
} | |||
.bottom-bar { | |||
position: fixed; | |||
bottom: 0; | |||
left: 0; | |||
right: 0; | |||
background: #ffffff; | |||
padding: 20rpx 30rpx; | |||
border-top: 1rpx solid #f0f0f0; | |||
z-index: 999; | |||
box-shadow: 0 -2rpx 10rpx rgba(0, 0, 0, 0.1); | |||
display: flex; | |||
align-items: center; | |||
justify-content: center; | |||
.exchange-btn { | |||
width: 100%; | |||
height: 80rpx; | |||
border-radius: 40rpx; | |||
background-color: #218cdd; | |||
display: flex; | |||
align-items: center; | |||
justify-content: center; | |||
.exchange-text { | |||
color: #ffffff; | |||
font-size: 28rpx; | |||
} | |||
} | |||
} | |||
</style> |
@ -0,0 +1,320 @@ | |||
<template> | |||
<view class="exchange-record"> | |||
<!-- 自定义tabs --> | |||
<view class="custom-tabs"> | |||
<view | |||
v-for="(tab, index) in tabList" | |||
:key="index" | |||
class="tab-item" | |||
@click="tabChange(index)" | |||
> | |||
<text class="tab-text" :class="{ active: currentTab === index }">{{ tab.name }}</text> | |||
<view v-if="currentTab === index" class="tab-line"></view> | |||
</view> | |||
</view> | |||
<!-- 兑换记录列表 --> | |||
<view class="record-list"> | |||
<view | |||
v-for="(item, index) in currentRecordList" | |||
:key="index" | |||
class="record-item" | |||
@click="handleItemClick(item)" | |||
> | |||
<image class="record-image" :src="item.image" mode="aspectFit"></image> | |||
<view class="record-content"> | |||
<view class="record-info"> | |||
<view class="title-row"> | |||
<text class="record-title">{{ item.title }}</text> | |||
</view> | |||
<view class="record-points"> | |||
<uv-icon name="integral" size="16" color="#218cdd"></uv-icon> | |||
<text class="points-text">{{ item.points }}积分</text> | |||
</view> | |||
<view class="record-time"> | |||
<uv-icon name="clock" size="14" color="#999"></uv-icon> | |||
<text class="time-text">兑换时间:{{ item.exchangeTime }}</text> | |||
</view> | |||
</view> | |||
<view class="record-action"> | |||
<uv-button | |||
v-if="currentTab === 0" | |||
type="primary" | |||
size="small" | |||
text="确认领取" | |||
shape="circle" | |||
@click.stop="viewDetail(item)" | |||
></uv-button> | |||
<uv-button | |||
v-else-if="currentTab === 1" | |||
type="success" | |||
size="small" | |||
text="查看详情" | |||
shape="circle" | |||
@click.stop="viewDetail(item)" | |||
></uv-button> | |||
<uv-button | |||
v-else | |||
type="error" | |||
size="small" | |||
text="已取消" | |||
shape="circle" | |||
disabled | |||
></uv-button> | |||
</view> | |||
</view> | |||
</view> | |||
</view> | |||
</view> | |||
</template> | |||
<script> | |||
export default { | |||
data() { | |||
return { | |||
currentTab: 0, | |||
tabList: [ | |||
{ name: '待领取' }, | |||
{ name: '已领取' }, | |||
{ name: '系统取消' } | |||
], | |||
// 待领取记录列表 | |||
pendingList: [ | |||
{ | |||
id: 1, | |||
title: '咖吧之夜童话海新款教育咖吧放内艺术手办树脂伴学生小礼品', | |||
image: '/static/商城_商品1.png', | |||
points: 100, | |||
exchangeTime: '2025-06-12 14:30:12' | |||
}, | |||
{ | |||
id: 2, | |||
title: '咖吧之夜童话海新款教育咖吧放内艺术手办树脂伴学生小礼品', | |||
image: '/static/商城_商品2.png', | |||
points: 100, | |||
exchangeTime: '2025-06-12 14:30:12' | |||
}, | |||
{ | |||
id: 3, | |||
title: '咖吧之夜童话海新款教育咖吧放内艺术手办树脂伴学生小礼品', | |||
image: '/static/商城_商品1.png', | |||
points: 100, | |||
exchangeTime: '2025-06-12 14:30:12' | |||
}, | |||
{ | |||
id: 4, | |||
title: '咖吧之夜童话海新款教育咖吧放内艺术手办树脂伴学生小礼品', | |||
image: '/static/商城_商品2.png', | |||
points: 100, | |||
exchangeTime: '2025-06-12 14:30:12' | |||
} | |||
], | |||
// 已领取记录列表 | |||
receivedList: [ | |||
{ | |||
id: 5, | |||
title: '咖吧之夜童话海新款教育咖吧放内艺术手办树脂伴学生小礼品', | |||
image: '/static/商城_商品1.png', | |||
points: 100, | |||
exchangeTime: '2025-06-12 14:30:12' | |||
} | |||
], | |||
// 系统取消记录列表 | |||
cancelledList: [ | |||
{ | |||
id: 6, | |||
title: '咖吧之夜童话海新款教育咖吧放内艺术手办树脂伴学生小礼品', | |||
image: '/static/商城_商品2.png', | |||
points: 100, | |||
exchangeTime: '2025-06-12 14:30:12' | |||
} | |||
] | |||
} | |||
}, | |||
computed: { | |||
currentRecordList() { | |||
if (this.currentTab === 0) { | |||
return this.pendingList | |||
} else if (this.currentTab === 1) { | |||
return this.receivedList | |||
} else { | |||
return this.cancelledList | |||
} | |||
} | |||
}, | |||
methods: { | |||
tabChange(index) { | |||
this.currentTab = index | |||
}, | |||
handleItemClick(item) { | |||
if (this.currentTab === 0) { | |||
this.viewDetail(item) | |||
} else if (this.currentTab === 1) { | |||
this.viewDetail(item) | |||
} else if (this.currentTab === 2) { | |||
this.viewDetail(item) | |||
} | |||
}, | |||
confirmReceive(item) { | |||
// 确认领取逻辑 | |||
uni.showModal({ | |||
title: '确认领取', | |||
content: '确认已领取该商品?', | |||
success: (res) => { | |||
if (res.confirm) { | |||
// 移动到已领取列表 | |||
const index = this.pendingList.findIndex(record => record.id === item.id) | |||
if (index !== -1) { | |||
const record = this.pendingList.splice(index, 1)[0] | |||
this.receivedList.unshift(record) | |||
} | |||
uni.showToast({ | |||
title: '领取成功', | |||
icon: 'success' | |||
}) | |||
} | |||
} | |||
}) | |||
}, | |||
viewDetail(item) { | |||
// 查看详情逻辑 - 跳转到兑换详情页面 | |||
let status = 'pending' | |||
if (this.currentTab === 1) { | |||
status = 'received' | |||
} else if (this.currentTab === 2) { | |||
status = 'cancelled' | |||
} | |||
uni.navigateTo({ | |||
url: `/subPages/my/exchangeDetail?id=${item.id}&status=${status}` | |||
}) | |||
} | |||
} | |||
} | |||
</script> | |||
<style lang="scss" scoped> | |||
.exchange-record { | |||
background-color: #f5f5f5; | |||
min-height: 100vh; | |||
.custom-tabs { | |||
display: flex; | |||
background-color: #fff; | |||
border-bottom: 1rpx solid #e5e5e5; | |||
.tab-item { | |||
flex: 1; | |||
position: relative; | |||
display: flex; | |||
flex-direction: column; | |||
align-items: center; | |||
padding: 30rpx 0; | |||
cursor: pointer; | |||
.tab-text { | |||
font-size: 28rpx; | |||
color: #666; | |||
transition: color 0.3s; | |||
&.active { | |||
color: #218cdd; | |||
font-weight: bold; | |||
} | |||
} | |||
.tab-line { | |||
position: absolute; | |||
bottom: 0; | |||
left: 50%; | |||
transform: translateX(-50%); | |||
width: 60rpx; | |||
height: 4rpx; | |||
background-color: #218cdd; | |||
border-radius: 2rpx; | |||
} | |||
} | |||
} | |||
.record-list { | |||
padding: 20rpx; | |||
.record-item { | |||
display: flex; | |||
align-items: flex-start; | |||
margin-bottom: 30rpx; | |||
background: #fff; | |||
border-radius: 12rpx; | |||
padding: 20rpx; | |||
.record-image { | |||
width: 215rpx; | |||
height: 215rpx; | |||
border-radius: 8rpx; | |||
margin-right: 20rpx; | |||
flex-shrink: 0; | |||
} | |||
.record-content { | |||
flex: 1; | |||
display: flex; | |||
flex-direction: column; | |||
.record-info { | |||
display: flex; | |||
flex-direction: column; | |||
margin-bottom: 20rpx; | |||
.title-row { | |||
margin-bottom: 10rpx; | |||
} | |||
.record-title { | |||
font-size: 22rpx; | |||
// font-weight: bold; | |||
color: #000; | |||
line-height: 1.4; | |||
display: -webkit-box; | |||
-webkit-box-orient: vertical; | |||
-webkit-line-clamp: 2; | |||
overflow: hidden; | |||
} | |||
.record-points { | |||
display: flex; | |||
align-items: center; | |||
margin-bottom: 8rpx; | |||
.points-text { | |||
font-size: 26rpx; | |||
color: #218cdd; | |||
font-weight: bold; | |||
margin-left: 6rpx; | |||
} | |||
} | |||
.record-time { | |||
display: flex; | |||
align-items: center; | |||
.time-text { | |||
font-size: 22rpx; | |||
color: #999; | |||
margin-left: 6rpx; | |||
} | |||
} | |||
} | |||
.record-action { | |||
display: flex; | |||
justify-content: flex-end; | |||
// padding-top: 10rpx; | |||
border-top: 1rpx solid #f0f0f0; | |||
} | |||
} | |||
} | |||
} | |||
} | |||
</style> |
@ -0,0 +1,406 @@ | |||
<template> | |||
<view class="activity-detail"> | |||
<!-- 轮播图 --> | |||
<view class="banner-container"> | |||
<swiper class="banner-swiper" height="450rpx" :indicator-dots="true" :autoplay="true" :interval="3000" :duration="500"> | |||
<swiper-item v-for="(image, index) in bannerImages" :key="index"> | |||
<image class="banner-image" :src="image" mode="aspectFill"></image> | |||
</swiper-item> | |||
</swiper> | |||
</view> | |||
<!-- 活动信息 --> | |||
<view class="activity-info"> | |||
<!-- 活动标题和标签 --> | |||
<view class="title-section"> | |||
<view class="activity-badge"> | |||
<text class="badge-text">{{ activityData.duration }}</text> | |||
</view> | |||
<text class="activity-title">{{ activityData.title }}</text> | |||
</view> | |||
<!-- 活动详细信息 --> | |||
<view class="info-section"> | |||
<view class="info-item"> | |||
<uv-icon name="calendar" size="16" color="#666"></uv-icon> | |||
<text class="info-label">活动时间:</text> | |||
<text class="info-value">{{ activityData.time }}</text> | |||
</view> | |||
<view class="info-item"> | |||
<uv-icon name="clock" size="16" color="#666"></uv-icon> | |||
<text class="info-label">报名时间:</text> | |||
<text class="info-value">{{ activityData.registrationTime }}</text> | |||
</view> | |||
<view class="info-item"> | |||
<uv-icon name="account-fill" size="16" color="#666"></uv-icon> | |||
<text class="info-label">联系人:</text> | |||
<text class="info-value">{{ activityData.contact }}</text> | |||
</view> | |||
<view class="info-item"> | |||
<uv-icon name="phone" size="16" color="#666"></uv-icon> | |||
<text class="info-label">取消规则:</text> | |||
<text class="info-value">{{ activityData.cancelRule }}</text> | |||
</view> | |||
<view class="info-item"> | |||
<uv-icon name="map-fill" size="16" color="#666"></uv-icon> | |||
<text class="info-label">活动地点:</text> | |||
<text class="info-value">{{ activityData.location }}</text> | |||
</view> | |||
</view> | |||
<!-- 活动详情 --> | |||
<view class="detail-section"> | |||
<view class="section-title"> | |||
<text class="title-text">活动详情</text> | |||
</view> | |||
<view class="detail-content"> | |||
<text class="detail-text" v-for="(item, index) in activityData.details" :key="index"> | |||
{{ index + 1 }}. {{ item }} | |||
</text> | |||
</view> | |||
</view> | |||
<!-- 活动图集 --> | |||
<view class="gallery-section"> | |||
<view class="section-title"> | |||
<text class="title-text">活动图集</text> | |||
</view> | |||
<view class="gallery-grid"> | |||
<image | |||
v-for="(image, index) in activityData.gallery" | |||
:key="index" | |||
class="gallery-image" | |||
:src="image" | |||
mode="aspectFill" | |||
@click="previewImage(image, activityData.gallery)" | |||
></image> | |||
</view> | |||
</view> | |||
</view> | |||
<!-- 固定底部操作栏 --> | |||
<view class="bottom-action"> | |||
<view class="action-left"> | |||
<view class="action-item" @click="shareActivity"> | |||
<uv-icon name="share" size="24" color="#000"></uv-icon> | |||
<text class="action-text">分享</text> | |||
</view> | |||
<view class="action-item" @click="collectActivity"> | |||
<uv-icon name="heart-fill" size="24" :color="isCollected ? '#ff4757' : '#999'"></uv-icon> | |||
<text class="action-text">收藏</text> | |||
</view> | |||
<view class="action-item"> | |||
<text class="participants-count"> | |||
<text :style="{'color': activityData.registeredCount >= activityData.maxCount ? '#999' : '#1488DB'}">{{ activityData.registeredCount }}</text> | |||
/{{ activityData.maxCount }}</text> | |||
<text class="action-text">已报名</text> | |||
</view> | |||
</view> | |||
<view class="action-right"> | |||
<!-- 未签到状态 --> | |||
<uv-button | |||
v-if="status === 'unsigned'" | |||
type="primary" | |||
size="normal" | |||
text="扫码签到" | |||
shape="circle" | |||
@click="scanQRCode" | |||
></uv-button> | |||
<!-- 已签到状态 --> | |||
<uv-button | |||
v-else-if="status === 'signed'" | |||
type="success" | |||
size="normal" | |||
text="已签到" | |||
shape="circle" | |||
:disabled="true" | |||
></uv-button> | |||
<!-- 系统取消状态 --> | |||
<uv-button | |||
v-else-if="status === 'cancelled'" | |||
type="error" | |||
size="normal" | |||
text="系统取消" | |||
shape="circle" | |||
:disabled="true" | |||
></uv-button> | |||
</view> | |||
</view> | |||
</view> | |||
</template> | |||
<script> | |||
export default { | |||
data() { | |||
return { | |||
isCollected: false, | |||
status: 'unsigned', // unsigned: 未签到, signed: 已签到, cancelled: 系统取消 | |||
bannerImages: [ | |||
'/static/bannerImage.png', | |||
'/static/bannerImage.png', | |||
'/static/bannerImage.png' | |||
], | |||
activityData: { | |||
title: '关爱自闭症儿童活动', | |||
duration: '30积分', | |||
time: '2025-06-12 14:30', | |||
registrationTime: '2025-06-01 14:30——2025-09-01 14:30', | |||
contact: '柳老师 (13256484512)', | |||
cancelRule: '报名随时可取消', | |||
location: '长沙市雨花区时代阳光大夏国际大厅2145', | |||
registeredCount: 9, | |||
maxCount: 30, | |||
details: [ | |||
'身体健康,热爱志愿服务工作,富有责任感和奉献精神', | |||
'遵纪守法,思想上进,作风正派,服从安排', | |||
'年龄在60岁以下,具备广告宣传理能力' | |||
], | |||
gallery: [ | |||
'/static/bannerImage.png', | |||
'/static/bannerImage.png', | |||
'/static/bannerImage.png', | |||
'/static/bannerImage.png' | |||
] | |||
} | |||
} | |||
}, | |||
onLoad(options) { | |||
if (options.id) { | |||
this.loadActivityDetail(options.id) | |||
} | |||
if (options.status) { | |||
this.status = options.status | |||
} | |||
}, | |||
methods: { | |||
loadActivityDetail(id) { | |||
// 根据ID加载活动详情 | |||
console.log('加载活动详情:', id) | |||
}, | |||
previewImage(current, urls) { | |||
uni.previewImage({ | |||
current: current, | |||
urls: urls | |||
}) | |||
}, | |||
shareActivity() { | |||
uni.showToast({ | |||
title: '分享功能', | |||
icon: 'none' | |||
}) | |||
}, | |||
collectActivity() { | |||
this.isCollected = !this.isCollected | |||
uni.showToast({ | |||
title: this.isCollected ? '收藏成功' : '取消收藏', | |||
icon: 'none' | |||
}) | |||
}, | |||
scanQRCode() { | |||
// 扫码签到功能 | |||
uni.scanCode({ | |||
success: (res) => { | |||
console.log('扫码结果:', res) | |||
// 这里可以调用签到API | |||
this.status = 'signed' | |||
uni.showToast({ | |||
title: '签到成功', | |||
icon: 'success' | |||
}) | |||
}, | |||
fail: (err) => { | |||
console.log('扫码失败:', err) | |||
uni.showToast({ | |||
title: '扫码失败', | |||
icon: 'none' | |||
}) | |||
} | |||
}) | |||
} | |||
} | |||
} | |||
</script> | |||
<style lang="scss" scoped> | |||
.activity-detail { | |||
min-height: 100vh; | |||
background: #f8f8f8; | |||
padding-bottom: 120rpx; | |||
.banner-container { | |||
width: 100%; | |||
height: 450rpx; | |||
.banner-swiper { | |||
width: 100%; | |||
height: 100%; | |||
.banner-image { | |||
width: 100%; | |||
height: 100%; | |||
} | |||
} | |||
} | |||
.activity-info { | |||
background: #ffffff; | |||
margin: 20rpx; | |||
border-radius: 16rpx; | |||
padding: 30rpx; | |||
.title-section { | |||
display: flex; | |||
align-items: center; | |||
margin-bottom: 30rpx; | |||
.activity-badge { | |||
background: #218CDD; | |||
border-radius: 8rpx; | |||
padding: 4rpx 10rpx; | |||
margin-right: 16rpx; | |||
.badge-text { | |||
color: #ffffff; | |||
font-size: 24rpx; | |||
font-weight: 500; | |||
} | |||
} | |||
.activity-title { | |||
font-size: 36rpx; | |||
font-weight: bold; | |||
color: #333333; | |||
flex: 1; | |||
} | |||
} | |||
.info-section { | |||
background: #F3F7F8; | |||
margin-bottom: 40rpx; | |||
border: 2rpx dashed #F3F7F8; | |||
.info-item { | |||
display: flex; | |||
align-items: center; | |||
margin-bottom: 20rpx; | |||
&:last-child { | |||
margin-bottom: 0; | |||
} | |||
.info-label { | |||
font-size: 28rpx; | |||
color: #999999; | |||
margin-left: 12rpx; | |||
margin-right: 8rpx; | |||
} | |||
.info-value { | |||
font-size: 28rpx; | |||
color: #999999; | |||
flex: 1; | |||
} | |||
} | |||
} | |||
.detail-section { | |||
margin-bottom: 40rpx; | |||
.section-title { | |||
margin-bottom: 20rpx; | |||
.title-text { | |||
font-size: 32rpx; | |||
font-weight: bold; | |||
color: #333333; | |||
} | |||
} | |||
.detail-content { | |||
.detail-text { | |||
display: block; | |||
font-size: 28rpx; | |||
color: #666666; | |||
line-height: 1.6; | |||
margin-bottom: 16rpx; | |||
&:last-child { | |||
margin-bottom: 0; | |||
} | |||
} | |||
} | |||
} | |||
.gallery-section { | |||
.section-title { | |||
margin-bottom: 20rpx; | |||
.title-text { | |||
font-size: 32rpx; | |||
font-weight: bold; | |||
color: #333333; | |||
} | |||
} | |||
.gallery-grid { | |||
display: grid; | |||
grid-template-columns: repeat(2, 1fr); | |||
gap: 16rpx; | |||
.gallery-image { | |||
width: 100%; | |||
height: 200rpx; | |||
border-radius: 12rpx; | |||
} | |||
} | |||
} | |||
} | |||
.bottom-action { | |||
position: fixed; | |||
bottom: 0; | |||
left: 0; | |||
right: 0; | |||
background: #ffffff; | |||
padding: 20rpx 30rpx; | |||
border-top: 1rpx solid #eeeeee; | |||
display: flex; | |||
align-items: center; | |||
justify-content: space-between; | |||
z-index: 100; | |||
.action-left { | |||
display: flex; | |||
align-items: center; | |||
gap: 100rpx; | |||
.action-item { | |||
display: flex; | |||
flex-direction: column; | |||
align-items: center; | |||
gap: 8rpx; | |||
.action-text { | |||
font-size: 22rpx; | |||
color: #000; | |||
} | |||
.participants-count { | |||
font-size: 24rpx; | |||
color: #333333; | |||
} | |||
} | |||
} | |||
.action-right { | |||
flex-shrink: 0; | |||
} | |||
} | |||
} | |||
</style> |
@ -0,0 +1,349 @@ | |||
<template> | |||
<view class="profile-container"> | |||
<!-- 基本资料 --> | |||
<view class="section"> | |||
<view class="section-title"> | |||
<!-- 小竖线 --> | |||
<view class="vertical-line"></view> | |||
<view> | |||
<text class="title-text">基本资料</text> | |||
</view> | |||
</view> | |||
<!-- 头像 --> | |||
<view class="avatar-section"> | |||
<button | |||
class="avatar-button" | |||
open-type="chooseAvatar" | |||
@chooseavatar="onChooseAvatar" | |||
> | |||
<image | |||
class="avatar" | |||
:src="userInfo.avatar || '/static/待上传头像.png'" | |||
mode="aspectFill" | |||
></image> | |||
</button> | |||
<text class="avatar-tip">点击更换头像</text> | |||
</view> | |||
<!-- 昵称 --> | |||
<view class="info-item"> | |||
<text class="label">昵称</text> | |||
<view class="value-container"> | |||
<input | |||
class="nickname-input" | |||
v-model="userInfo.nickname" | |||
placeholder="请输入" | |||
type="nickname" | |||
@blur="onNicknameBlur" | |||
/> | |||
</view> | |||
</view> | |||
<!-- 手机号 --> | |||
<view class="info-item"> | |||
<text class="label">手机号</text> | |||
<view class="value-container"> | |||
<input | |||
class="phone-input" | |||
v-model="userInfo.phone" | |||
placeholder="请输入" | |||
type="number" | |||
maxlength="11" | |||
/> | |||
</view> | |||
</view> | |||
</view> | |||
<!-- 保存按钮 --> | |||
<view class="save-section"> | |||
<button class="save-button" @click="saveProfile"> | |||
保存 | |||
</button> | |||
</view> | |||
</view> | |||
</template> | |||
<script> | |||
export default { | |||
name: 'MyProfile', | |||
data() { | |||
return { | |||
userInfo: { | |||
avatar: '', | |||
nickname: '', | |||
phone: '' | |||
} | |||
} | |||
}, | |||
onLoad() { | |||
this.loadUserProfile(); | |||
}, | |||
methods: { | |||
// 返回上一页 | |||
goBack() { | |||
uni.navigateBack(); | |||
}, | |||
// 加载用户资料 | |||
loadUserProfile() { | |||
// 从本地存储获取用户资料 | |||
const storedUserInfo = uni.getStorageSync('userInfo'); | |||
if (storedUserInfo) { | |||
this.userInfo = { ...this.userInfo, ...storedUserInfo }; | |||
} | |||
}, | |||
// 选择微信头像 | |||
onChooseAvatar(e) { | |||
console.log('选择头像回调', e); | |||
if (e.detail.avatarUrl) { | |||
this.userInfo.avatar = e.detail.avatarUrl; | |||
console.log('头像设置成功', e.detail.avatarUrl); | |||
uni.showToast({ | |||
title: '头像更新成功', | |||
icon: 'success' | |||
}); | |||
} else { | |||
uni.showToast({ | |||
title: '头像选择失败', | |||
icon: 'none' | |||
}); | |||
} | |||
}, | |||
// 昵称输入失焦验证 | |||
onNicknameBlur() { | |||
if (!this.userInfo.nickname.trim()) { | |||
uni.showToast({ | |||
title: '请输入昵称', | |||
icon: 'none' | |||
}); | |||
} | |||
}, | |||
// 保存资料 | |||
async saveProfile() { | |||
// 验证昵称 | |||
if (!this.userInfo.nickname.trim()) { | |||
uni.showToast({ | |||
title: '请输入昵称', | |||
icon: 'none' | |||
}); | |||
return; | |||
} | |||
// 验证手机号(如果填写了) | |||
if (this.userInfo.phone && !/^1[3-9]\d{9}$/.test(this.userInfo.phone)) { | |||
uni.showToast({ | |||
title: '请输入正确的手机号', | |||
icon: 'none' | |||
}); | |||
return; | |||
} | |||
try { | |||
uni.showLoading({ | |||
title: '保存中...' | |||
}); | |||
// 保存到本地存储 | |||
uni.setStorageSync('userInfo', this.userInfo); | |||
// 模拟API调用 | |||
await new Promise(resolve => setTimeout(resolve, 1000)); | |||
uni.hideLoading(); | |||
uni.showToast({ | |||
title: '保存成功', | |||
icon: 'success' | |||
}); | |||
// 返回上一页 | |||
setTimeout(() => { | |||
uni.navigateBack(); | |||
}, 1500); | |||
} catch (error) { | |||
uni.hideLoading(); | |||
console.error('保存失败:', error); | |||
uni.showToast({ | |||
title: '保存失败', | |||
icon: 'none' | |||
}); | |||
} | |||
} | |||
} | |||
} | |||
</script> | |||
<style lang="scss" scoped> | |||
.profile-container { | |||
min-height: 100vh; | |||
background-color: #f5f5f5; | |||
} | |||
.vertical-line { | |||
width: 9rpx; | |||
height: 33rpx; | |||
background-color: #1488DB; | |||
margin-right: 20rpx; | |||
} | |||
// 自定义导航栏 | |||
.custom-navbar { | |||
background: linear-gradient(90deg, #1488db 0%, #1488db 100%); | |||
padding-top: var(--status-bar-height, 44rpx); | |||
.navbar-content { | |||
height: 88rpx; | |||
display: flex; | |||
align-items: center; | |||
justify-content: space-between; | |||
padding: 0 30rpx; | |||
.navbar-left { | |||
.back-icon { | |||
font-size: 40rpx; | |||
color: #ffffff; | |||
font-weight: bold; | |||
} | |||
} | |||
.navbar-title { | |||
font-size: 36rpx; | |||
color: #ffffff; | |||
font-weight: 500; | |||
} | |||
.navbar-right { | |||
display: flex; | |||
gap: 20rpx; | |||
.more-icon, | |||
.settings-icon { | |||
font-size: 32rpx; | |||
color: #ffffff; | |||
} | |||
} | |||
} | |||
} | |||
.section { | |||
margin: 20rpx; | |||
background-color: #ffffff; | |||
border-radius: 20rpx; | |||
overflow: hidden; | |||
.section-title { | |||
display: flex; | |||
align-items: center; | |||
padding: 30rpx; | |||
border-bottom: 1rpx solid #f0f0f0; | |||
.title-text { | |||
font-size: 32rpx; | |||
font-weight: 500; | |||
color: #333333; | |||
} | |||
} | |||
} | |||
.avatar-section { | |||
display: flex; | |||
flex-direction: column; | |||
align-items: center; | |||
padding: 40rpx 30rpx; | |||
border-bottom: 1rpx solid #f0f0f0; | |||
.avatar-button { | |||
padding: 0; | |||
margin: 0; | |||
background: transparent; | |||
border: none; | |||
outline: none; | |||
margin-bottom: 20rpx; | |||
&::after { | |||
border: none; | |||
} | |||
.avatar { | |||
width: 160rpx; | |||
height: 160rpx; | |||
border-radius: 80rpx; | |||
border: 4rpx dashed #cccccc; | |||
} | |||
} | |||
.avatar-tip { | |||
font-size: 26rpx; | |||
color: #999999; | |||
} | |||
} | |||
.info-item { | |||
display: flex; | |||
align-items: center; | |||
justify-content: space-between; | |||
padding: 30rpx; | |||
border-bottom: 1rpx solid #f0f0f0; | |||
&:last-child { | |||
border-bottom: none; | |||
} | |||
.label { | |||
font-size: 30rpx; | |||
color: #333333; | |||
font-weight: 500; | |||
width: 120rpx; | |||
} | |||
.value-container { | |||
flex: 1; | |||
display: flex; | |||
align-items: center; | |||
justify-content: flex-end; | |||
.nickname-input, | |||
.phone-input { | |||
width: 100%; | |||
text-align: right; | |||
font-size: 30rpx; | |||
color: #666666; | |||
border: none; | |||
outline: none; | |||
background: transparent; | |||
&::placeholder { | |||
color: #cccccc; | |||
} | |||
} | |||
} | |||
} | |||
.save-section { | |||
padding: 40rpx 20rpx; | |||
.save-button { | |||
width: 100%; | |||
height: 88rpx; | |||
background-color: #1488db; | |||
border-radius: 44rpx; | |||
border: none; | |||
outline: none; | |||
font-size: 32rpx; | |||
font-weight: 500; | |||
color: #ffffff; | |||
display: flex; | |||
align-items: center; | |||
justify-content: center; | |||
&::after { | |||
border: none; | |||
} | |||
} | |||
} | |||
</style> |
@ -0,0 +1,339 @@ | |||
<template> | |||
<view class="my-registrations"> | |||
<!-- 原生tabs组件 --> | |||
<view class="custom-tabs"> | |||
<view | |||
v-for="(tab, index) in tabList" | |||
:key="index" | |||
class="tab-item" | |||
:class="{ active: currentTab === index }" | |||
@click="tabChange(index)" | |||
> | |||
<text class="tab-text" :class="{ active: currentTab === index }">{{ tab.name }}</text> | |||
<view v-if="currentTab === index" class="tab-line"></view> | |||
</view> | |||
</view> | |||
<!-- 活动列表 --> | |||
<view class="activity-list"> | |||
<view class="activity-item" v-for="(item, index) in currentActivityList" :key="index" @click="viewActivityDetail(item)"> | |||
<image class="activity-image" :src="item.image" mode="aspectFill"></image> | |||
<view class="activity-info"> | |||
<view class="title-row"> | |||
<view class="activity-badge"> | |||
<text class="badge-text">30分</text> | |||
</view> | |||
<text class="activity-title">{{item.title}}</text> | |||
</view> | |||
<view class="activity-location"> | |||
<uv-icon name="map-fill" size="14" color="#999"></uv-icon> | |||
<text class="location-text">{{item.location}}</text> | |||
</view> | |||
<view class="activity-time"> | |||
<uv-icon name="calendar" size="14" color="#999"></uv-icon> | |||
<text class="time-text">{{item.time}}</text> | |||
</view> | |||
<view class="activity-participants"> | |||
<uv-icon name="account-fill" size="14" color="#999"></uv-icon> | |||
<text class="participants-text">报名人数:{{item.participants}}/{{item.maxParticipants}}</text> | |||
</view> | |||
</view> | |||
<view class="activity-action"> | |||
<uv-button | |||
v-if="currentTab === 0" | |||
type="primary" | |||
size="mini" | |||
shape="circle" | |||
text="扫码签到" | |||
@click.stop="scanQRCode(item)" | |||
></uv-button> | |||
<uv-button | |||
v-else-if="currentTab === 1" | |||
type="success" | |||
shape="circle" | |||
size="mini" | |||
text="已签到" | |||
disabled | |||
></uv-button> | |||
<uv-button | |||
v-else | |||
type="error" | |||
size="mini" | |||
text="已取消" | |||
disabled | |||
></uv-button> | |||
</view> | |||
</view> | |||
<!-- 空状态 --> | |||
<view v-if="currentActivityList.length === 0" class="empty-state"> | |||
<text class="empty-text">暂无相关报名记录</text> | |||
</view> | |||
</view> | |||
</view> | |||
</template> | |||
<script> | |||
export default { | |||
name: 'MyRegistrations', | |||
data() { | |||
return { | |||
currentTab: 0, | |||
tabList: [ | |||
{ name: '未签到' }, | |||
{ name: '已签到' }, | |||
{ name: '系统取消' } | |||
], | |||
// 未签到活动列表 | |||
unsignedList: [ | |||
{ | |||
id: 1, | |||
title: '关爱自闭症儿童活动', | |||
image: '/static/bannerImage.png', | |||
location: '长沙市雨花区时代阳光大道国际大厅2145', | |||
time: '2025-06-12 14:30', | |||
participants: 30, | |||
maxParticipants: 30 | |||
}, | |||
{ | |||
id: 2, | |||
title: '关爱自闭症儿童活动', | |||
image: '/static/bannerImage.png', | |||
location: '长沙市雨花区时代阳光大道国际大厅2145', | |||
time: '2025-06-12 14:30', | |||
participants: 30, | |||
maxParticipants: 30 | |||
}, | |||
{ | |||
id: 3, | |||
title: '关爱自闭症儿童活动', | |||
image: '/static/bannerImage.png', | |||
location: '长沙市雨花区时代阳光大道国际大厅2145', | |||
time: '2025-06-12 14:30', | |||
participants: 30, | |||
maxParticipants: 30 | |||
}, | |||
{ | |||
id: 4, | |||
title: '关爱自闭症儿童活动', | |||
image: '/static/bannerImage.png', | |||
location: '长沙市雨花区时代阳光大道国际大厅2145', | |||
time: '2025-06-12 14:30', | |||
participants: 30, | |||
maxParticipants: 30 | |||
} | |||
], | |||
// 已签到活动列表 | |||
signedList: [ | |||
{ | |||
id: 5, | |||
title: '关爱自闭症儿童活动', | |||
image: '/static/bannerImage.png', | |||
location: '长沙市雨花区时代阳光大道国际大厅2145', | |||
time: '2025-06-12 14:30', | |||
participants: 30, | |||
maxParticipants: 30 | |||
} | |||
], | |||
// 系统取消活动列表 | |||
cancelledList: [ | |||
{ | |||
id: 6, | |||
title: '关爱自闭症儿童活动', | |||
image: '/static/bannerImage.png', | |||
location: '长沙市雨花区时代阳光大道国际大厅2145', | |||
time: '2025-06-12 14:30', | |||
participants: 30, | |||
maxParticipants: 30 | |||
} | |||
] | |||
} | |||
}, | |||
computed: { | |||
currentActivityList() { | |||
switch(this.currentTab) { | |||
case 0: | |||
return this.unsignedList | |||
case 1: | |||
return this.signedList | |||
case 2: | |||
return this.cancelledList | |||
default: | |||
return [] | |||
} | |||
} | |||
}, | |||
methods: { | |||
tabChange(index) { | |||
this.currentTab = index | |||
}, | |||
viewActivityDetail(activity) { | |||
// 查看活动详情,根据当前tab状态跳转到对应页面 | |||
let status = 'unsigned' // 默认未签到 | |||
switch(this.currentTab) { | |||
case 0: | |||
status = 'unsigned' // 未签到 | |||
break | |||
case 1: | |||
status = 'signed' // 已签到 | |||
break | |||
case 2: | |||
status = 'cancelled' // 系统取消 | |||
break | |||
} | |||
uni.navigateTo({ | |||
url: `/subPages/my/myActivityDetail?id=${activity.id}&status=${status}` | |||
}) | |||
}, | |||
// scanQRCode(activity) { | |||
// // 扫码签到 | |||
// uni.scanCode({ | |||
// success: (res) => { | |||
// console.log('扫码结果:', res) | |||
// // 这里可以处理签到逻辑 | |||
// uni.showToast({ | |||
// title: '签到成功', | |||
// icon: 'success' | |||
// }) | |||
// }, | |||
// fail: (err) => { | |||
// console.log('扫码失败:', err) | |||
// uni.showToast({ | |||
// title: '扫码失败', | |||
// icon: 'error' | |||
// }) | |||
// } | |||
// }) | |||
// } | |||
} | |||
} | |||
</script> | |||
<style lang="scss" scoped> | |||
.my-registrations { | |||
background-color: #f5f5f5; | |||
min-height: 100vh; | |||
.custom-tabs { | |||
display: flex; | |||
background-color: #fff; | |||
border-bottom: 1rpx solid #e5e5e5; | |||
.tab-item { | |||
flex: 1; | |||
position: relative; | |||
display: flex; | |||
flex-direction: column; | |||
align-items: center; | |||
padding: 30rpx 0; | |||
cursor: pointer; | |||
.tab-text { | |||
font-size: 28rpx; | |||
color: #666; | |||
transition: color 0.3s; | |||
&.active { | |||
color: #218cdd; | |||
font-weight: bold; | |||
} | |||
} | |||
.tab-line { | |||
position: absolute; | |||
bottom: 0; | |||
left: 50%; | |||
transform: translateX(-50%); | |||
width: 60rpx; | |||
height: 4rpx; | |||
background-color: #218cdd; | |||
border-radius: 2rpx; | |||
} | |||
} | |||
} | |||
.activity-list { | |||
padding: 20rpx; | |||
.activity-item { | |||
display: flex; | |||
margin-bottom: 30rpx; | |||
background: #fff; | |||
border-radius: 12rpx; | |||
padding: 20rpx; | |||
.activity-image { | |||
width: 180rpx; | |||
height: 180rpx; | |||
border-radius: 8rpx; | |||
margin-right: 20rpx; | |||
} | |||
.activity-info { | |||
flex: 1; | |||
display: flex; | |||
flex-direction: column; | |||
justify-content: space-between; | |||
.title-row { | |||
display: flex; | |||
align-items: center; | |||
margin-bottom: 10rpx; | |||
.activity-badge { | |||
width: 31px; | |||
height: 20px; | |||
background: #218cdd; | |||
border-radius: 3.5px; | |||
margin-right: 7rpx; | |||
display: flex; | |||
align-items: center; | |||
justify-content: center; | |||
.badge-text { | |||
font-size: 18rpx; | |||
color: #fff; | |||
} | |||
} | |||
} | |||
.activity-title { | |||
font-size: 28rpx; | |||
font-weight: bold; | |||
color: $uni-text-color; | |||
} | |||
.activity-location, .activity-time, .activity-participants { | |||
display: flex; | |||
align-items: center; | |||
margin-bottom: 6rpx; | |||
.location-text, .time-text, .participants-text { | |||
font-size: 24rpx; | |||
color: $uni-text-color-grey; | |||
margin-left: 6rpx; | |||
} | |||
} | |||
} | |||
.activity-action { | |||
display: flex; | |||
align-items: flex-end; | |||
padding-bottom: 10rpx; | |||
} | |||
} | |||
.empty-state { | |||
display: flex; | |||
justify-content: center; | |||
align-items: center; | |||
height: 400rpx; | |||
.empty-text { | |||
font-size: 28rpx; | |||
color: $uni-text-color-grey; | |||
} | |||
} | |||
} | |||
} | |||
</style> |
@ -0,0 +1,205 @@ | |||
<template> | |||
<view class="page"> | |||
<!-- 收藏列表 --> | |||
<view class="content"> | |||
<view v-if="favoritesList.length > 0" class="list"> | |||
<view v-for="item in favoritesList" :key="item.id" class="record-item" @click="viewGoodsDetail(item)"> | |||
<image class="record-image" :src="item.image" mode="aspectFit"></image> | |||
<view class="record-content"> | |||
<view class="record-info"> | |||
<view class="title-row"> | |||
<text class="record-title">{{ item.title }}</text> | |||
</view> | |||
<view class="record-points"> | |||
<uv-icon name="integral" size="16" color="#218cdd"></uv-icon> | |||
<text class="points-text">{{ item.points }}积分</text> | |||
</view> | |||
<view class="record-time"> | |||
<uv-icon name="heart-fill" size="14" color="#ff6b6b"></uv-icon> | |||
<text class="time-text">收藏时间:{{ item.favoriteTime }}</text> | |||
</view> | |||
</view> | |||
<view class="record-action"> | |||
<uv-button | |||
type="primary" | |||
size="small" | |||
text="查看详情" | |||
shape="circle" | |||
@click.stop="viewGoodsDetail(item)" | |||
></uv-button> | |||
</view> | |||
</view> | |||
</view> | |||
</view> | |||
<view v-else class="empty"> | |||
<uv-empty mode="data" text="暂无收藏商品"></uv-empty> | |||
</view> | |||
</view> | |||
<!-- 操作菜单 --> | |||
<uv-action-sheet :show="showActionSheet" :actions="actions" @close="showActionSheet = false" @select="onActionSelect"></uv-action-sheet> | |||
</view> | |||
</template> | |||
<script> | |||
export default { | |||
data() { | |||
return { | |||
showActionSheet: false, | |||
actions: [ | |||
{ name: '清空收藏', color: '#ff4757' } | |||
], | |||
favoritesList: [ | |||
{ | |||
id: 1, | |||
title: '咖啡之魅惑调制饮料袋装咖啡内容学生小礼品', | |||
image: '/static/商城_商品1.png', | |||
points: 100, | |||
favoriteTime: '2025-06-12 14:30:12' | |||
}, | |||
{ | |||
id: 2, | |||
title: '咖啡之魅惑调制饮料袋装咖啡内容学生小礼品', | |||
image: '/static/商城_商品2.png', | |||
points: 100, | |||
favoriteTime: '2025-06-12 14:30:12' | |||
}, | |||
{ | |||
id: 3, | |||
title: '咖啡之魅惑调制饮料袋装咖啡内容学生小礼品', | |||
image: '/static/商城_商品1.png', | |||
points: 100, | |||
favoriteTime: '2025-06-12 14:30:12' | |||
}, | |||
{ | |||
id: 4, | |||
title: '咖啡之魅惑调制饮料袋装咖啡内容学生小礼品', | |||
image: '/static/商城_商品2.png', | |||
points: 100, | |||
favoriteTime: '2025-06-12 14:30:12' | |||
} | |||
] | |||
} | |||
}, | |||
methods: { | |||
// 查看商品详情 | |||
viewGoodsDetail(item) { | |||
uni.navigateTo({ | |||
url: `/subPages/shop/goodsDetail?id=${item.id}` | |||
}) | |||
}, | |||
// 操作菜单选择 | |||
onActionSelect(item) { | |||
if (item.name === '清空收藏') { | |||
uni.showModal({ | |||
title: '提示', | |||
content: '确定要清空所有收藏商品吗?', | |||
success: (res) => { | |||
if (res.confirm) { | |||
this.favoritesList = [] | |||
uni.showToast({ | |||
title: '已清空收藏', | |||
icon: 'success' | |||
}) | |||
} | |||
} | |||
}) | |||
} | |||
this.showActionSheet = false | |||
} | |||
} | |||
} | |||
</script> | |||
<style lang="scss" scoped> | |||
.page { | |||
background-color: #f5f5f5; | |||
min-height: 100vh; | |||
} | |||
.content { | |||
padding: 0; | |||
} | |||
.list { | |||
padding: 20rpx; | |||
} | |||
.record-item { | |||
display: flex; | |||
align-items: flex-start; | |||
margin-bottom: 30rpx; | |||
background: #fff; | |||
border-radius: 12rpx; | |||
padding: 20rpx; | |||
} | |||
.record-image { | |||
width: 215rpx; | |||
height: 215rpx; | |||
border-radius: 8rpx; | |||
margin-right: 20rpx; | |||
flex-shrink: 0; | |||
} | |||
.record-content { | |||
flex: 1; | |||
display: flex; | |||
flex-direction: column; | |||
} | |||
.record-info { | |||
display: flex; | |||
flex-direction: column; | |||
margin-bottom: 20rpx; | |||
} | |||
.title-row { | |||
margin-bottom: 10rpx; | |||
} | |||
.record-title { | |||
font-size: 22rpx; | |||
color: #000; | |||
line-height: 1.4; | |||
display: -webkit-box; | |||
-webkit-box-orient: vertical; | |||
-webkit-line-clamp: 2; | |||
overflow: hidden; | |||
} | |||
.record-points { | |||
display: flex; | |||
align-items: center; | |||
margin-bottom: 8rpx; | |||
} | |||
.points-text { | |||
font-size: 26rpx; | |||
color: #218cdd; | |||
font-weight: bold; | |||
margin-left: 6rpx; | |||
} | |||
.record-time { | |||
display: flex; | |||
align-items: center; | |||
} | |||
.time-text { | |||
font-size: 22rpx; | |||
color: #999; | |||
margin-left: 6rpx; | |||
} | |||
.record-action { | |||
display: flex; | |||
justify-content: flex-end; | |||
border-top: 1rpx solid #f0f0f0; | |||
} | |||
.empty { | |||
margin-top: 200rpx; | |||
} | |||
</style> |
@ -0,0 +1,4 @@ | |||
require('./common/runtime.js') | |||
require('./common/vendor.js') | |||
require('./common/main.js') |
@ -0,0 +1,91 @@ | |||
{ | |||
"pages": [ | |||
"pages/index/index", | |||
"pages/index/shop", | |||
"pages/index/activity", | |||
"pages/index/community", | |||
"pages/index/my" | |||
], | |||
"subPackages": [ | |||
{ | |||
"root": "subPages", | |||
"pages": [ | |||
"index/announcement", | |||
"login/login", | |||
"login/userInfo", | |||
"index/announcementDetail", | |||
"index/ranking", | |||
"index/volunteerApply", | |||
"index/organizationIntroduction", | |||
"index/activityCalendar", | |||
"index/activityDetail", | |||
"shop/goodsDetail", | |||
"shop/pointsDetail", | |||
"community/publishPost", | |||
"my/activityFavorites", | |||
"my/myProfile", | |||
"my/myRegistrations", | |||
"my/myActivityDetail", | |||
"my/exchangeRecord", | |||
"my/exchangeDetail", | |||
"my/productFavorites", | |||
"my/activityCheckin", | |||
"my/checkinCode" | |||
] | |||
} | |||
], | |||
"window": { | |||
"navigationBarTextStyle": "white", | |||
"navigationBarTitleText": "uni-app", | |||
"navigationBarBackgroundColor": "#1488DB", | |||
"backgroundColor": "#218CDD" | |||
}, | |||
"tabBar": { | |||
"color": "#999999", | |||
"selectedColor": "#2E66F4", | |||
"borderStyle": "white", | |||
"backgroundColor": "#ffffff", | |||
"list": [ | |||
{ | |||
"pagePath": "pages/index/index", | |||
"text": "主页", | |||
"iconPath": "static/组件 7 – 4@2x.png", | |||
"selectedIconPath": "static/组件 4 – 4@2x.png" | |||
}, | |||
{ | |||
"pagePath": "pages/index/shop", | |||
"text": "商城", | |||
"iconPath": "static/组件 309 – 2@2x.png", | |||
"selectedIconPath": "static/组件 7 – 4@2x.png" | |||
}, | |||
{ | |||
"pagePath": "pages/index/activity", | |||
"text": "活动", | |||
"iconPath": "static/组件 302 – 4@2x.png", | |||
"selectedIconPath": "static/组件 7 – 4@2x.png" | |||
}, | |||
{ | |||
"pagePath": "pages/index/community", | |||
"text": "社区", | |||
"iconPath": "static/组件 68 – 1@2x.png", | |||
"selectedIconPath": "static/组件 7 – 4@2x.png" | |||
}, | |||
{ | |||
"pagePath": "pages/index/my", | |||
"text": "我的", | |||
"iconPath": "static/组件 4 – 4@2x.png", | |||
"selectedIconPath": "static/组件 7 – 4@2x.png" | |||
} | |||
] | |||
}, | |||
"requiredPrivateInfos": [ | |||
"getLocation", | |||
"chooseLocation" | |||
], | |||
"permission": { | |||
"scope.userLocation": { | |||
"desc": "你的位置信息将用于定位" | |||
} | |||
}, | |||
"usingComponents": {} | |||
} |
@ -0,0 +1,3 @@ | |||
@import './common/main.wxss'; | |||
[data-custom-hidden="true"],[bind-data-custom-hidden="true"]{display: none !important;} |
@ -0,0 +1 @@ | |||
(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["common/main"],{"18b9":function(e,t,n){},"663b":function(e,t,n){"use strict";n.r(t);var o=n("ad88"),r=n.n(o);for(var c in o)["default"].indexOf(c)<0&&function(e){n.d(t,e,(function(){return o[e]}))}(c);t["default"]=r.a},"76e5":function(e,t,n){"use strict";var o=n("18b9"),r=n.n(o);r.a},a4ae:function(e,t,n){"use strict";(function(e,t){var o=n("47a9"),r=o(n("7ca3"));n("a476");var c=o(n("e239")),u=o(n("3240"));function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}n("6e75"),e.__webpack_require_UNI_MP_PLUGIN__=n,u.default.config.productionTip=!1,c.default.mpType="app";var i=new u.default(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){(0,r.default)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({},c.default));t(i).$mount()}).call(this,n("3223")["default"],n("df3c")["createApp"])},ad88:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o={onLaunch:function(){console.log("App Launch")},onShow:function(){console.log("App Show")},onHide:function(){console.log("App Hide")}};t.default=o},e239:function(e,t,n){"use strict";n.r(t);var o=n("663b");for(var r in o)["default"].indexOf(r)<0&&function(e){n.d(t,e,(function(){return o[e]}))}(r);n("76e5");var c=n("828b"),u=Object(c["a"])(o["default"],void 0,void 0,!1,null,null,null,!1,void 0,void 0);t["default"]=u.exports}},[["a4ae","common/runtime","common/vendor"]]]); |
@ -0,0 +1 @@ | |||
.uv-line-1{display:-webkit-box!important;overflow:hidden;text-overflow:ellipsis;word-break:break-all;-webkit-line-clamp:1;-webkit-box-orient:vertical!important}.uv-line-2{display:-webkit-box!important;overflow:hidden;text-overflow:ellipsis;word-break:break-all;-webkit-line-clamp:2;-webkit-box-orient:vertical!important}.uv-line-3{display:-webkit-box!important;overflow:hidden;text-overflow:ellipsis;word-break:break-all;-webkit-line-clamp:3;-webkit-box-orient:vertical!important}.uv-line-4{display:-webkit-box!important;overflow:hidden;text-overflow:ellipsis;word-break:break-all;-webkit-line-clamp:4;-webkit-box-orient:vertical!important}.uv-line-5{display:-webkit-box!important;overflow:hidden;text-overflow:ellipsis;word-break:break-all;-webkit-line-clamp:5;-webkit-box-orient:vertical!important}.uv-border{border-width:.5px!important;border-color:#dadbde!important;border-style:solid}.uv-border-top{border-top-width:.5px!important;border-color:#dadbde!important;border-top-style:solid}.uv-border-left{border-left-width:.5px!important;border-color:#dadbde!important;border-left-style:solid}.uv-border-right{border-right-width:.5px!important;border-color:#dadbde!important;border-right-style:solid}.uv-border-bottom{border-bottom-width:.5px!important;border-color:#dadbde!important;border-bottom-style:solid}.uv-border-top-bottom{border-top-width:.5px!important;border-bottom-width:.5px!important;border-color:#dadbde!important;border-top-style:solid;border-bottom-style:solid}.uv-reset-button{padding:0;background-color:initial;font-size:inherit;line-height:inherit;color:inherit}.uv-reset-button::after{border:none}.uv-hover-class{opacity:.7}.uv-safe-area-inset-top{padding-top:0;padding-top:constant(safe-area-inset-top);padding-top:env(safe-area-inset-top)}.uv-safe-area-inset-right{padding-right:0;padding-right:constant(safe-area-inset-right);padding-right:env(safe-area-inset-right)}.uv-safe-area-inset-bottom{padding-bottom:0;padding-bottom:constant(safe-area-inset-bottom);padding-bottom:env(safe-area-inset-bottom)}.uv-safe-area-inset-left{padding-left:0;padding-left:constant(safe-area-inset-left);padding-left:env(safe-area-inset-left)}::-webkit-scrollbar{display:none;width:0!important;height:0!important;-webkit-appearance:none;background:transparent}page::after{position:fixed;content:'';left:-1000px;top:-1000px;-webkit-animation:shadow-preload .1s;-webkit-animation-delay:3s;animation:shadow-preload .1s;animation-delay:3s}@-webkit-keyframes shadow-preload{0%{background-image:url(https://cdn1.dcloud.net.cn/524552444f5556475243556c643368694e6d59784d544d324d3245314e5759354e544d31/img/shadow-grey.png)}100%{background-image:url(https://cdn1.dcloud.net.cn/524552444f5556475243556c643368694e6d59784d544d324d3245314e5759354e544d31/img/shadow-grey.png)}}@keyframes shadow-preload{0%{background-image:url(https://cdn1.dcloud.net.cn/524552444f5556475243556c643368694e6d59784d544d324d3245314e5759354e544d31/img/shadow-grey.png)}100%{background-image:url(https://cdn1.dcloud.net.cn/524552444f5556475243556c643368694e6d59784d544d324d3245314e5759354e544d31/img/shadow-grey.png)}} |
@ -0,0 +1,10 @@ | |||
(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["pages/components/HomePageNav"],{"3d37":function(n,t,e){},"720d":function(n,t,e){"use strict";e.r(t);var u=e("b552"),a=e.n(u);for(var c in u)["default"].indexOf(c)<0&&function(n){e.d(t,n,(function(){return u[n]}))}(c);t["default"]=a.a},"933e":function(n,t,e){"use strict";var u=e("3d37"),a=e.n(u);a.a},"9b70":function(n,t,e){"use strict";e.d(t,"b",(function(){return u})),e.d(t,"c",(function(){return a})),e.d(t,"a",(function(){}));var u=function(){var n=this.$createElement;this._self._c},a=[]},b552:function(n,t,e){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={}},bb1c:function(n,t,e){"use strict";e.r(t);var u=e("9b70"),a=e("720d");for(var c in a)["default"].indexOf(c)<0&&function(n){e.d(t,n,(function(){return a[n]}))}(c);e("933e");var r=e("828b"),f=Object(r["a"])(a["default"],u["b"],u["c"],!1,null,"61bbdf36",null,!1,u["a"],void 0);t["default"]=f.exports}}]); | |||
;(global["webpackJsonp"] = global["webpackJsonp"] || []).push([ | |||
'pages/components/HomePageNav-create-component', | |||
{ | |||
'pages/components/HomePageNav-create-component':(function(module, exports, __webpack_require__){ | |||
__webpack_require__('df3c')['createComponent'](__webpack_require__("bb1c")) | |||
}) | |||
}, | |||
[['pages/components/HomePageNav-create-component']] | |||
]); |
@ -0,0 +1,4 @@ | |||
{ | |||
"component": true, | |||
"usingComponents": {} | |||
} |
@ -0,0 +1 @@ | |||
<view style="{{'width:'+('100%')+';'}}" class="data-v-61bbdf36"><view class="nav-container data-v-61bbdf36"></view><view class="placeholder data-v-61bbdf36"></view></view> |
@ -0,0 +1 @@ | |||
.nav-container.data-v-61bbdf36{position:absolute;width:100%;height:270rpx;background:linear-gradient(180deg,#1488db,#98b5f1)}.placeholder.data-v-61bbdf36{width:100%;height:160rpx} |
@ -0,0 +1,10 @@ | |||
(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["pages/components/index/RecommendedActivities"],{"65de":function(t,n,i){"use strict";i.r(n);var e=i("d60f"),a=i("99ca");for(var c in a)["default"].indexOf(c)<0&&function(t){i.d(n,t,(function(){return a[t]}))}(c);i("a602");var o=i("828b"),u=Object(o["a"])(a["default"],e["b"],e["c"],!1,null,"a26324c2",null,!1,e["a"],void 0);n["default"]=u.exports},"8ef5":function(t,n,i){},"99ca":function(t,n,i){"use strict";i.r(n);var e=i("d989"),a=i.n(e);for(var c in e)["default"].indexOf(c)<0&&function(t){i.d(n,t,(function(){return e[t]}))}(c);n["default"]=a.a},a602:function(t,n,i){"use strict";var e=i("8ef5"),a=i.n(e);a.a},d60f:function(t,n,i){"use strict";i.d(n,"b",(function(){return a})),i.d(n,"c",(function(){return c})),i.d(n,"a",(function(){return e}));var e={uvIcon:function(){return Promise.all([i.e("common/vendor"),i.e("uni_modules/uv-icon/components/uv-icon/uv-icon")]).then(i.bind(null,"1509"))},uvButton:function(){return Promise.all([i.e("common/vendor"),i.e("uni_modules/uv-button/components/uv-button/uv-button")]).then(i.bind(null,"2f88"))}},a=function(){var t=this.$createElement;this._self._c},c=[]},d989:function(t,n,i){"use strict";(function(t){Object.defineProperty(n,"__esModule",{value:!0}),n.default=void 0;var i={name:"RecommendedActivities",data:function(){return{activityList:[{id:1,title:"关爱自闭儿童活动",image:"/static/bannerImage.png",location:"七步沙社区文化中心",time:"2025-06-12 14:30",participants:12},{id:1,title:"关爱自闭儿童活动",image:"/static/bannerImage.png",location:"七步沙社区文化中心",time:"2025-06-12 14:30",participants:12},{id:1,title:"关爱自闭儿童活动",image:"/static/bannerImage.png",location:"七步沙社区文化中心",time:"2025-06-12 14:30",participants:12},{id:1,title:"关爱自闭儿童活动",image:"/static/bannerImage.png",location:"七步沙社区文化中心",time:"2025-06-12 14:30",participants:12}]}},methods:{goToMoreActivities:function(){t.navigateTo({url:"/subPages/index/activities"})},viewActivityDetail:function(n){t.navigateTo({url:"/subPages/index/activityDetail?id=".concat(n.id)})},signUpActivity:function(n){t.navigateTo({url:"/subPages/index/activityDetail?id=".concat(n.id)})}}};n.default=i}).call(this,i("df3c")["default"])}}]); | |||
;(global["webpackJsonp"] = global["webpackJsonp"] || []).push([ | |||
'pages/components/index/RecommendedActivities-create-component', | |||
{ | |||
'pages/components/index/RecommendedActivities-create-component':(function(module, exports, __webpack_require__){ | |||
__webpack_require__('df3c')['createComponent'](__webpack_require__("65de")) | |||
}) | |||
}, | |||
[['pages/components/index/RecommendedActivities-create-component']] | |||
]); |
@ -0,0 +1,7 @@ | |||
{ | |||
"usingComponents": { | |||
"uv-icon": "/uni_modules/uv-icon/components/uv-icon/uv-icon", | |||
"uv-button": "/uni_modules/uv-button/components/uv-button/uv-button" | |||
}, | |||
"component": true | |||
} |
@ -0,0 +1 @@ | |||
<view class="recommended-activities data-v-a26324c2"><view class="activities-header data-v-a26324c2"><view class="header-left data-v-a26324c2"><image class="header-icon data-v-a26324c2" src="/static/推荐活动.png" mode="aspectFit"></image></view><view data-event-opts="{{[['tap',[['goToMoreActivities',['$event']]]]]}}" class="more data-v-a26324c2" bindtap="__e"><text class="more-text data-v-a26324c2">更多</text><uv-icon vue-id="85d77bca-1" name="arrow-right" color="#999" size="12" class="data-v-a26324c2" bind:__l="__l"></uv-icon></view></view><view class="activity-list data-v-a26324c2"><block wx:for="{{activityList}}" wx:for-item="item" wx:for-index="index" wx:key="index"><view data-event-opts="{{[['tap',[['viewActivityDetail',['$0'],[[['activityList','',index]]]]]]]}}" class="activity-item data-v-a26324c2" bindtap="__e"><image class="activity-image data-v-a26324c2" src="{{item.image}}" mode="aspectFill"></image><view class="activity-info data-v-a26324c2"><view class="title-row data-v-a26324c2"><view class="activity-badge data-v-a26324c2"><text class="badge-text data-v-a26324c2">30分</text></view><text class="activity-title data-v-a26324c2">{{item.title}}</text></view><view class="activity-location data-v-a26324c2"><uv-icon vue-id="{{'85d77bca-2-'+index}}" name="map-fill" size="14" color="#999" class="data-v-a26324c2" bind:__l="__l"></uv-icon><text class="location-text data-v-a26324c2">{{item.location}}</text></view><view class="activity-time data-v-a26324c2"><uv-icon vue-id="{{'85d77bca-3-'+index}}" name="calendar" size="14" color="#999" class="data-v-a26324c2" bind:__l="__l"></uv-icon><text class="time-text data-v-a26324c2">{{item.time}}</text></view><view class="activity-participants data-v-a26324c2"><uv-icon vue-id="{{'85d77bca-4-'+index}}" name="account-fill" size="14" color="#999" class="data-v-a26324c2" bind:__l="__l"></uv-icon><text class="participants-text data-v-a26324c2">{{item.participants+"人已报名"}}</text></view></view><view class="activity-action data-v-a26324c2"><uv-button vue-id="{{'85d77bca-5-'+index}}" type="primary" size="mini" text="报名中" data-event-opts="{{[['^click',[['signUpActivity',['$0'],[[['activityList','',index]]]]]]]}}" catch:click="__e" class="data-v-a26324c2" bind:__l="__l"></uv-button></view></view></block></view></view> |
@ -0,0 +1 @@ | |||
.recommended-activities.data-v-a26324c2{margin:20rpx;border-radius:12rpx}.recommended-activities .activities-header.data-v-a26324c2{display:flex;justify-content:space-between;align-items:center;margin-bottom:10rpx;padding-left:20rpx}.recommended-activities .activities-header .header-left.data-v-a26324c2{display:flex;align-items:center}.recommended-activities .activities-header .header-left .header-icon.data-v-a26324c2{width:158rpx;height:50rpx;margin-right:10rpx}.recommended-activities .activities-header .header-left .header-title.data-v-a26324c2{font-size:30rpx;font-weight:700;color:#333}.recommended-activities .activities-header .more.data-v-a26324c2{display:flex;align-items:center}.recommended-activities .activities-header .more .more-text.data-v-a26324c2{font-size:24rpx;color:#999;margin-right:4rpx}.recommended-activities .activity-list .activity-item.data-v-a26324c2{display:flex;margin-bottom:30rpx;background:#fff;border-radius:12rpx;padding:20rpx}.recommended-activities .activity-list .activity-item .activity-image.data-v-a26324c2{width:180rpx;height:180rpx;border-radius:8rpx;margin-right:20rpx}.recommended-activities .activity-list .activity-item .activity-info.data-v-a26324c2{flex:1;display:flex;flex-direction:column;justify-content:space-between}.recommended-activities .activity-list .activity-item .activity-info .title-row.data-v-a26324c2{display:flex;align-items:center;margin-bottom:10rpx}.recommended-activities .activity-list .activity-item .activity-info .title-row .activity-badge.data-v-a26324c2{width:31px;height:20px;background:#218cdd;border-radius:3.5px;margin-right:7rpx;display:flex;align-items:center;justify-content:center}.recommended-activities .activity-list .activity-item .activity-info .title-row .activity-badge .badge-text.data-v-a26324c2{font-size:18rpx;color:#fff}.recommended-activities .activity-list .activity-item .activity-title.data-v-a26324c2{font-size:28rpx;font-weight:700;color:#333}.recommended-activities .activity-list .activity-item .activity-location.data-v-a26324c2, .recommended-activities .activity-list .activity-item .activity-time.data-v-a26324c2, .recommended-activities .activity-list .activity-item .activity-participants.data-v-a26324c2{display:flex;align-items:center;margin-bottom:6rpx}.recommended-activities .activity-list .activity-item .activity-location .location-text.data-v-a26324c2, .recommended-activities .activity-list .activity-item .activity-location .time-text.data-v-a26324c2, .recommended-activities .activity-list .activity-item .activity-location .participants-text.data-v-a26324c2, .recommended-activities .activity-list .activity-item .activity-time .location-text.data-v-a26324c2, .recommended-activities .activity-list .activity-item .activity-time .time-text.data-v-a26324c2, .recommended-activities .activity-list .activity-item .activity-time .participants-text.data-v-a26324c2, .recommended-activities .activity-list .activity-item .activity-participants .location-text.data-v-a26324c2, .recommended-activities .activity-list .activity-item .activity-participants .time-text.data-v-a26324c2, .recommended-activities .activity-list .activity-item .activity-participants .participants-text.data-v-a26324c2{font-size:24rpx;color:#999;margin-left:6rpx}.recommended-activities .activity-list .activity-action.data-v-a26324c2{display:flex;align-items:flex-end;padding-bottom:10rpx} |
@ -0,0 +1,10 @@ | |||
(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["pages/components/index/VolunteerFeatures"],{"0cd9":function(n,t,e){},"4abd":function(n,t,e){"use strict";e.d(t,"b",(function(){return u})),e.d(t,"c",(function(){return a})),e.d(t,"a",(function(){}));var u=function(){var n=this.$createElement;this._self._c},a=[]},6339:function(n,t,e){"use strict";e.r(t);var u=e("4abd"),a=e("e424");for(var c in a)["default"].indexOf(c)<0&&function(n){e.d(t,n,(function(){return a[n]}))}(c);e("8737");var r=e("828b"),i=Object(r["a"])(a["default"],u["b"],u["c"],!1,null,"8bc70268",null,!1,u["a"],void 0);t["default"]=i.exports},8737:function(n,t,e){"use strict";var u=e("0cd9"),a=e.n(u);a.a},a4c4:function(n,t,e){"use strict";(function(n){Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var e={name:"VolunteerFeatures",data:function(){return{}},methods:{navigateTo:function(t){n.navigateTo({url:t})}}};t.default=e}).call(this,e("df3c")["default"])},e424:function(n,t,e){"use strict";e.r(t);var u=e("a4c4"),a=e.n(u);for(var c in u)["default"].indexOf(c)<0&&function(n){e.d(t,n,(function(){return u[n]}))}(c);t["default"]=a.a}}]); | |||
;(global["webpackJsonp"] = global["webpackJsonp"] || []).push([ | |||
'pages/components/index/VolunteerFeatures-create-component', | |||
{ | |||
'pages/components/index/VolunteerFeatures-create-component':(function(module, exports, __webpack_require__){ | |||
__webpack_require__('df3c')['createComponent'](__webpack_require__("6339")) | |||
}) | |||
}, | |||
[['pages/components/index/VolunteerFeatures-create-component']] | |||
]); |
@ -0,0 +1 @@ | |||
<view class="volunteer-features data-v-8bc70268"><view class="features-container data-v-8bc70268"><view data-event-opts="{{[['tap',[['navigateTo',['/subPages/index/volunteerApply']]]]]}}" class="feature-block left-feature data-v-8bc70268" bindtap="__e"><image class="feature-bg data-v-8bc70268" src="/static/成为志愿者.png" mode="aspectFill"></image><view class="feature-content data-v-8bc70268"><view class="feature-info data-v-8bc70268"><text class="feature-title data-v-8bc70268">成为志愿者</text><text class="feature-desc data-v-8bc70268">加入我们的行列</text><image class="arrow-icon data-v-8bc70268" src="/static/志愿者箭头.png" mode="aspectFit"></image></view></view></view><view class="right-features data-v-8bc70268"><view data-event-opts="{{[['tap',[['navigateTo',['/subPages/index/organizationIntroduction']]]]]}}" class="feature-block right-feature data-v-8bc70268" bindtap="__e"><image class="feature-bg data-v-8bc70268" src="/static/组织介绍.png" mode="aspectFill"></image><view class="feature-content data-v-8bc70268"><view class="feature-info data-v-8bc70268"><text class="feature-title data-v-8bc70268">组织介绍</text><text class="feature-desc data-v-8bc70268">了解我们的组织</text><image class="arrow-icon data-v-8bc70268" src="/static/组织箭头.png" mode="aspectFit"></image></view></view></view><view data-event-opts="{{[['tap',[['navigateTo',['/subPages/index/activityCalendar']]]]]}}" class="feature-block right-feature data-v-8bc70268" bindtap="__e"><image class="feature-bg data-v-8bc70268" src="/static/活动日历.png" mode="aspectFill"></image><view class="feature-content data-v-8bc70268"><view class="feature-info data-v-8bc70268"><text class="feature-title data-v-8bc70268">活动日历</text><text class="feature-desc data-v-8bc70268">查看近期活动安排</text><image class="arrow-icon data-v-8bc70268" src="/static/活动箭头.png" mode="aspectFit"></image></view></view></view></view></view></view> |
@ -0,0 +1 @@ | |||
.volunteer-features.data-v-8bc70268{margin:20rpx}.volunteer-features .features-container.data-v-8bc70268{display:flex;gap:40rpx;height:400rpx}.volunteer-features .features-container .feature-block.data-v-8bc70268{position:relative;border-radius:20rpx;overflow:hidden}.volunteer-features .features-container .left-feature.data-v-8bc70268{flex:1;height:100%}.volunteer-features .features-container .feature-bg.data-v-8bc70268{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;z-index:1}.volunteer-features .features-container .right-features.data-v-8bc70268{flex:1;display:flex;flex-direction:column;gap:20rpx}.volunteer-features .features-container .right-features .right-feature.data-v-8bc70268{flex:1}.volunteer-features .features-container .feature-content.data-v-8bc70268{position:absolute;top:0;left:0;right:0;padding:30rpx;display:flex;justify-content:space-between;align-items:flex-end;z-index:2}.volunteer-features .features-container .feature-content .feature-info.data-v-8bc70268{display:flex;flex-direction:column;gap:10rpx}.volunteer-features .features-container .feature-content .feature-info .feature-title.data-v-8bc70268{font-size:32rpx;color:#000;margin-bottom:5rpx}.volunteer-features .features-container .feature-content .feature-info .feature-desc.data-v-8bc70268{font-size:20rpx;color:#999}.volunteer-features .features-container .feature-content .feature-info .arrow-icon.data-v-8bc70268{width:54rpx;height:29rpx;margin-left:20rpx} |
@ -0,0 +1,10 @@ | |||
(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["pages/components/index/VolunteerHeader"],{1133:function(n,e,t){"use strict";t.d(e,"b",(function(){return o})),t.d(e,"c",(function(){return i})),t.d(e,"a",(function(){return u}));var u={uvSwiper:function(){return Promise.all([t.e("common/vendor"),t.e("uni_modules/uv-swiper/components/uv-swiper/uv-swiper")]).then(t.bind(null,"961c"))},uvIcon:function(){return Promise.all([t.e("common/vendor"),t.e("uni_modules/uv-icon/components/uv-icon/uv-icon")]).then(t.bind(null,"1509"))}},o=function(){var n=this.$createElement;this._self._c},i=[]},"4d8f":function(n,e,t){"use strict";t.r(e);var u=t("1133"),o=t("efb1");for(var i in o)["default"].indexOf(i)<0&&function(n){t.d(e,n,(function(){return o[n]}))}(i);t("9d65");var a=t("828b"),r=Object(a["a"])(o["default"],u["b"],u["c"],!1,null,"0e253455",null,!1,u["a"],void 0);e["default"]=r.exports},7694:function(n,e,t){"use strict";(function(n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t={name:"VolunteerHeader",data:function(){return{bannerList:["/static/bannerImage.png","/static/bannerImage.png","/static/bannerImage.png"]}},methods:{goToAnnouncement:function(){n.navigateTo({url:"/subPages/index/announcement"})},goToDetail:function(){n.navigateTo({url:"/subPages/index/activityDetail"})}}};e.default=t}).call(this,t("df3c")["default"])},"9d65":function(n,e,t){"use strict";var u=t("d3c4"),o=t.n(u);o.a},d3c4:function(n,e,t){},efb1:function(n,e,t){"use strict";t.r(e);var u=t("7694"),o=t.n(u);for(var i in u)["default"].indexOf(i)<0&&function(n){t.d(e,n,(function(){return u[n]}))}(i);e["default"]=o.a}}]); | |||
;(global["webpackJsonp"] = global["webpackJsonp"] || []).push([ | |||
'pages/components/index/VolunteerHeader-create-component', | |||
{ | |||
'pages/components/index/VolunteerHeader-create-component':(function(module, exports, __webpack_require__){ | |||
__webpack_require__('df3c')['createComponent'](__webpack_require__("4d8f")) | |||
}) | |||
}, | |||
[['pages/components/index/VolunteerHeader-create-component']] | |||
]); |
@ -0,0 +1,7 @@ | |||
{ | |||
"usingComponents": { | |||
"uv-swiper": "/uni_modules/uv-swiper/components/uv-swiper/uv-swiper", | |||
"uv-icon": "/uni_modules/uv-icon/components/uv-icon/uv-icon" | |||
}, | |||
"component": true | |||
} |
@ -0,0 +1 @@ | |||
<view class="volunteer-header data-v-0e253455"><view data-event-opts="{{[['tap',[['goToDetail',['$event']]]]]}}" class="swiper-container data-v-0e253455" bindtap="__e"><uv-swiper vue-id="e8d845a8-1" list="{{bannerList}}" indicator="{{true}}" indicatorMode="dot" height="270rpx" circular="{{true}}" class="data-v-0e253455" bind:__l="__l"></uv-swiper></view><view data-event-opts="{{[['tap',[['goToAnnouncement',['$event']]]]]}}" class="notice-bar data-v-0e253455" bindtap="__e"><image class="horn-icon data-v-0e253455" src="/static/首页_小喇叭.png" mode="aspectFit"></image><text class="notice-text data-v-0e253455">最新一条通知公告内容展示</text><uv-icon vue-id="e8d845a8-2" name="arrow-right" color="#999" size="14" class="data-v-0e253455" bind:__l="__l"></uv-icon></view></view> |
@ -0,0 +1 @@ | |||
.volunteer-header.data-v-0e253455{width:100%}.volunteer-header .swiper-container.data-v-0e253455{position:relative;margin:20rpx;border-radius:20rpx;overflow:hidden}.volunteer-header .swiper-container .header-title.data-v-0e253455{position:absolute;bottom:20rpx;left:20rpx;z-index:10;display:flex;flex-direction:column;background-color:rgba(0,0,0,.4);padding:10rpx 20rpx;border-radius:10rpx}.volunteer-header .swiper-container .header-title .title-text.data-v-0e253455{font-size:36rpx;font-weight:700;color:#fff}.volunteer-header .swiper-container .header-title .date-text.data-v-0e253455{font-size:28rpx;color:#2c5e2e;margin-top:6rpx}.volunteer-header .swiper-container .dove-icon.data-v-0e253455{position:absolute;right:20rpx;bottom:20rpx;z-index:10;width:70rpx;height:70rpx;background-color:#fff;border-radius:50%;padding:10rpx}.volunteer-header .notice-bar.data-v-0e253455{display:flex;align-items:center;background-color:#fff;padding:20rpx;margin:0 20rpx 20rpx;border-radius:12rpx;box-shadow:0rpx 1rpx 0rpx 0rpx #3a94e1}.volunteer-header .notice-bar .horn-icon.data-v-0e253455{width:40rpx;height:40rpx;margin-right:10rpx}.volunteer-header .notice-bar .notice-text.data-v-0e253455{flex:1;font-size:28rpx;color:#333} |
@ -0,0 +1,10 @@ | |||
(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["pages/components/index/VolunteerRanking"],{"667a":function(n,t,e){"use strict";e.r(t);var i=e("9c73"),a=e.n(i);for(var o in i)["default"].indexOf(o)<0&&function(n){e.d(t,n,(function(){return i[n]}))}(o);t["default"]=a.a},9128:function(n,t,e){},"9c73":function(n,t,e){"use strict";(function(n){Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var e={name:"VolunteerRanking",data:function(){return{rankingList:[{id:1,name:"甜甜",avatar:"/static/默认头像.png",points:7854},{id:2,name:"懒洋洋",avatar:"/static/默认头像.png",points:6514},{id:3,name:"这很南平",avatar:"/static/默认头像.png",points:4454},{id:4,name:"附近用户",avatar:"/static/默认头像.png",points:3354},{id:5,name:"故事",avatar:"/static/默认头像.png",points:2154}],currentScrollIndex:0}},methods:{goToRankingList:function(){n.navigateTo({url:"/subPages/index/ranking"})},viewVolunteerDetail:function(t){n.navigateTo({url:"/subPages/index/volunteer-detail?id=".concat(t.id)})},onScrollChange:function(n){var t=n.detail.scrollLeft,e=(n.detail.scrollWidth,n.detail.scrollWidth/this.rankingList.length*3);this.currentScrollIndex=t<e/3?0:t<2*e/3?1:2}}};t.default=e}).call(this,e("df3c")["default"])},c30c:function(n,t,e){"use strict";e.r(t);var i=e("f5fb"),a=e("667a");for(var o in a)["default"].indexOf(o)<0&&function(n){e.d(t,n,(function(){return a[n]}))}(o);e("e58d");var r=e("828b"),u=Object(r["a"])(a["default"],i["b"],i["c"],!1,null,"1f402736",null,!1,i["a"],void 0);t["default"]=u.exports},e58d:function(n,t,e){"use strict";var i=e("9128"),a=e.n(i);a.a},f5fb:function(n,t,e){"use strict";e.d(t,"b",(function(){return a})),e.d(t,"c",(function(){return o})),e.d(t,"a",(function(){return i}));var i={uvIcon:function(){return Promise.all([e.e("common/vendor"),e.e("uni_modules/uv-icon/components/uv-icon/uv-icon")]).then(e.bind(null,"1509"))}},a=function(){var n=this.$createElement;this._self._c},o=[]}}]); | |||
;(global["webpackJsonp"] = global["webpackJsonp"] || []).push([ | |||
'pages/components/index/VolunteerRanking-create-component', | |||
{ | |||
'pages/components/index/VolunteerRanking-create-component':(function(module, exports, __webpack_require__){ | |||
__webpack_require__('df3c')['createComponent'](__webpack_require__("c30c")) | |||
}) | |||
}, | |||
[['pages/components/index/VolunteerRanking-create-component']] | |||
]); |
@ -0,0 +1 @@ | |||
<view class="volunteer-ranking data-v-1f402736"><view class="ranking-header data-v-1f402736"><image class="ranking-title-img data-v-1f402736" src="/static/积分排行榜.png" mode="aspectFit"></image><view data-event-opts="{{[['tap',[['goToRankingList',['$event']]]]]}}" class="more data-v-1f402736" bindtap="__e"><text class="more-text data-v-1f402736">更多</text><uv-icon vue-id="7f0a3e2d-1" name="arrow-right" color="#999" size="12" class="data-v-1f402736" bind:__l="__l"></uv-icon></view></view><view class="ranking-scroll-container data-v-1f402736"><scroll-view class="ranking-list data-v-1f402736" scroll-x="{{true}}" show-scrollbar="false" enhanced="true" enable-flex="true" scroll-with-animation="true" data-event-opts="{{[['scroll',[['onScrollChange',['$event']]]]]}}" bindscroll="__e"><view class="ranking-content data-v-1f402736"><block wx:for="{{rankingList}}" wx:for-item="item" wx:for-index="index" wx:key="index"><view data-event-opts="{{[['tap',[['viewVolunteerDetail',['$0'],[[['rankingList','',index]]]]]]]}}" class="ranking-item data-v-1f402736" bindtap="__e"><view class="avatar-container data-v-1f402736"><view class="avatar-with-border data-v-1f402736"><image class="avatar-image data-v-1f402736" src="{{item.avatar}}" mode="aspectFill"></image></view></view><view class="points-container data-v-1f402736"><image class="points-icon data-v-1f402736" src="/static/积分图标.png" mode="aspectFit"></image><text class="volunteer-points data-v-1f402736">{{item.points}}</text></view><text class="volunteer-name data-v-1f402736">{{item.name}}</text></view></block></view></scroll-view></view></view> |
@ -0,0 +1 @@ | |||
.volunteer-ranking.data-v-1f402736{background-color:#fff;margin:20rpx;border-radius:10rpx;padding:20rpx}.volunteer-ranking .ranking-header.data-v-1f402736{display:flex;justify-content:space-between;align-items:center;margin-bottom:20rpx}.volunteer-ranking .ranking-header .ranking-title-img.data-v-1f402736{height:60rpx;width:200rpx}.volunteer-ranking .ranking-header .more.data-v-1f402736{display:flex;align-items:center}.volunteer-ranking .ranking-header .more .more-text.data-v-1f402736{font-size:24rpx;color:#999;margin-right:4rpx}.volunteer-ranking .ranking-scroll-container.data-v-1f402736{position:relative;width:100%}.volunteer-ranking .ranking-list.data-v-1f402736{white-space:nowrap;padding:15rpx 0;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.volunteer-ranking .ranking-list .ranking-content.data-v-1f402736{display:flex;padding:0 20rpx;min-width:-webkit-max-content;min-width:max-content}.volunteer-ranking .ranking-list .ranking-item.data-v-1f402736{display:inline-flex;flex-direction:column;align-items:center;margin-right:40rpx;flex-shrink:0;min-width:100rpx;transition:all .3s cubic-bezier(.25,.46,.45,.94)}.volunteer-ranking .ranking-list .ranking-item.data-v-1f402736:hover, .volunteer-ranking .ranking-list .ranking-item.data-v-1f402736:active{-webkit-transform:scale(1.08);transform:scale(1.08)}.volunteer-ranking .ranking-list .ranking-item.data-v-1f402736:last-child{margin-right:20rpx}.volunteer-ranking .ranking-list .ranking-item .avatar-container.data-v-1f402736{position:relative;width:100rpx;height:100rpx;display:flex;justify-content:center;align-items:center}.volunteer-ranking .ranking-list .ranking-item .avatar-container .avatar-with-border.data-v-1f402736{width:100rpx;height:100rpx;border:4rpx solid #218cdd;border-radius:50%;box-shadow:0 4rpx 12rpx rgba(33,140,221,.2);transition:all .3s ease;overflow:hidden;display:flex;align-items:center;justify-content:center}.volunteer-ranking .ranking-list .ranking-item .avatar-container .avatar-with-border .avatar-image.data-v-1f402736{width:100%;height:100%;border-radius:50%}.volunteer-ranking .ranking-list .ranking-item .points-container.data-v-1f402736{display:flex;align-items:center;justify-content:center;margin-top:8rpx;background-color:#218cdd;border-radius:20rpx;padding:4rpx 12rpx;box-shadow:0 2rpx 8rpx rgba(33,140,221,.3)}.volunteer-ranking .ranking-list .ranking-item .points-container .points-icon.data-v-1f402736{width:20rpx;height:20rpx;margin-right:4rpx;-webkit-filter:brightness(0) invert(1);filter:brightness(0) invert(1)}.volunteer-ranking .ranking-list .ranking-item .points-container .volunteer-points.data-v-1f402736{font-size:20rpx;color:#fff;font-weight:700;margin:0}.volunteer-ranking .ranking-list .ranking-item .volunteer-name.data-v-1f402736{font-size:24rpx;color:#333;margin-top:10rpx;max-width:100rpx;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:500} |
@ -0,0 +1,10 @@ | |||
(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["pages/components/shop/PointsCard"],{"1c21":function(t,n,e){"use strict";e.d(n,"b",(function(){return a})),e.d(n,"c",(function(){return u})),e.d(n,"a",(function(){}));var a=function(){var t=this.$createElement;this._self._c},u=[]},5507:function(t,n,e){"use strict";e.r(n);var a=e("1c21"),u=e("77c3");for(var c in u)["default"].indexOf(c)<0&&function(t){e.d(n,t,(function(){return u[t]}))}(c);e("c37a");var i=e("828b"),o=Object(i["a"])(u["default"],a["b"],a["c"],!1,null,"e6f6877c",null,!1,a["a"],void 0);n["default"]=o.exports},"77c3":function(t,n,e){"use strict";e.r(n);var a=e("862e"),u=e.n(a);for(var c in a)["default"].indexOf(c)<0&&function(t){e.d(n,t,(function(){return a[t]}))}(c);n["default"]=u.a},"862e":function(t,n,e){"use strict";(function(t){Object.defineProperty(n,"__esModule",{value:!0}),n.default=void 0;var e={name:"PointsCard",props:{points:{type:[String,Number],default:1385}},methods:{showPointsDetail:function(){t.navigateTo({url:"/subPages/shop/pointsDetail"})}}};n.default=e}).call(this,e("df3c")["default"])},c37a:function(t,n,e){"use strict";var a=e("c8a1"),u=e.n(a);u.a},c8a1:function(t,n,e){}}]); | |||
;(global["webpackJsonp"] = global["webpackJsonp"] || []).push([ | |||
'pages/components/shop/PointsCard-create-component', | |||
{ | |||
'pages/components/shop/PointsCard-create-component':(function(module, exports, __webpack_require__){ | |||
__webpack_require__('df3c')['createComponent'](__webpack_require__("5507")) | |||
}) | |||
}, | |||
[['pages/components/shop/PointsCard-create-component']] | |||
]); |
@ -0,0 +1,4 @@ | |||
{ | |||
"usingComponents": {}, | |||
"component": true | |||
} |
@ -0,0 +1 @@ | |||
<view class="points-card data-v-e6f6877c"><view class="points-background data-v-e6f6877c"><image class="bg-image data-v-e6f6877c" src="/static/可用积分背景图.png" mode="aspectFill"></image><view class="points-content data-v-e6f6877c"><view class="points-text data-v-e6f6877c"><text class="points-label data-v-e6f6877c">可用积分</text><text class="points-value data-v-e6f6877c">{{points}}</text></view></view><view data-event-opts="{{[['tap',[['showPointsDetail',['$event']]]]]}}" class="points-detail data-v-e6f6877c" bindtap="__e"><image class="detail-bg data-v-e6f6877c" src="/static/商城_积分明细框.png" mode="aspectFit"></image><text class="detail-text data-v-e6f6877c">积分明细</text></view></view></view> |
@ -0,0 +1 @@ | |||
.points-card.data-v-e6f6877c{width:96%;margin:0 auto;position:relative;z-index:10}.points-background.data-v-e6f6877c{position:relative;width:100%;height:290rpx;border-radius:20rpx;overflow:hidden}.points-background .bg-image.data-v-e6f6877c{width:100%;height:100%;position:absolute;top:0;left:0}.points-background .points-content.data-v-e6f6877c{position:absolute;top:0;left:0;width:100%;height:100%;display:flex;align-items:center;justify-content:space-between;padding:0 40rpx}.points-background .points-content .points-text.data-v-e6f6877c{display:flex;flex-direction:column;align-items:center;gap:10rpx}.points-background .points-content .points-text .points-label.data-v-e6f6877c{font-size:30rpx;color:#fff;margin-bottom:15rpx;opacity:.9}.points-background .points-content .points-text .points-value.data-v-e6f6877c{font-size:58rpx;color:#fff;font-weight:700;line-height:1}.points-background .points-content .points-icon.data-v-e6f6877c{width:120rpx;height:120rpx}.points-background .points-content .points-icon .icon-image.data-v-e6f6877c{width:100%;height:100%}.points-background .points-detail.data-v-e6f6877c{position:absolute;bottom:10rpx;left:30rpx;width:160rpx;height:60rpx;display:flex;align-items:center;justify-content:center}.points-background .points-detail .detail-bg.data-v-e6f6877c{position:absolute;width:100%;height:100%;top:0;left:0}.points-background .points-detail .detail-text.data-v-e6f6877c{font-size:24rpx;color:#218cdd;position:relative;z-index:1} |
@ -0,0 +1,10 @@ | |||
(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["pages/components/shop/ShopContent"],{"2aaa":function(n,t,e){"use strict";(function(n){var a=e("47a9");Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=a(e("af34")),i={name:"ShopContent",data:function(){return{searchValue:"",currentTab:0,tabList:[{name:"全部"},{name:"积分兑换"},{name:"兑换量"},{name:"女装"},{name:"母婴"},{name:"水果"},{name:"竹制品"}],goodsList:[{id:1,name:"薄脆可口数字小饼干蘑菇饼干",points:100,image:"/static/商城_商品1.png",category:"积分兑换",exchangeCount:120},{id:2,name:"幼儿园宝宝启蒙书",points:145,image:"/static/商城_商品2.png",category:"母婴",exchangeCount:85},{id:3,name:"薄脆可口数字小饼干蘑菇饼干",points:100,image:"/static/商城_商品1.png",category:"积分兑换",exchangeCount:95},{id:4,name:"幼儿园宝宝启蒙书",points:145,image:"/static/商城_商品2.png",category:"母婴",exchangeCount:67},{id:1,name:"薄脆可口数字小饼干蘑菇饼干",points:100,image:"/static/商城_商品1.png",category:"积分兑换",exchangeCount:120},{id:2,name:"幼儿园宝宝启蒙书",points:145,image:"/static/商城_商品2.png",category:"母婴",exchangeCount:85},{id:3,name:"薄脆可口数字小饼干蘑菇饼干",points:100,image:"/static/商城_商品1.png",category:"积分兑换",exchangeCount:95},{id:4,name:"幼儿园宝宝启蒙书",points:145,image:"/static/商城_商品2.png",category:"母婴",exchangeCount:67},{id:1,name:"薄脆可口数字小饼干蘑菇饼干",points:100,image:"/static/商城_商品1.png",category:"积分兑换",exchangeCount:120},{id:2,name:"幼儿园宝宝启蒙书",points:145,image:"/static/商城_商品2.png",category:"母婴",exchangeCount:85},{id:3,name:"薄脆可口数字小饼干蘑菇饼干",points:100,image:"/static/商城_商品1.png",category:"积分兑换",exchangeCount:95},{id:4,name:"幼儿园宝宝启蒙书",points:145,image:"/static/商城_商品2.png",category:"母婴",exchangeCount:67}],buttonStyle:{width:"128rpx",height:"44rpx",borderRadius:"28rpx",fontSize:"22rpx"}}},computed:{filteredGoodsList:function(){var n=this,t=this.goodsList;this.searchValue&&(t=t.filter((function(t){return t.name.toLowerCase().includes(n.searchValue.toLowerCase())})));var e=this.tabList[this.currentTab].name;return"全部"!==e&&(t="兑换量"===e?(0,o.default)(t).sort((function(n,t){return t.exchangeCount-n.exchangeCount})):t.filter((function(n){return n.category===e}))),t}},methods:{onSearch:function(n){console.log("搜索:",n)},onTabChange:function(n){this.currentTab=n},onGoodsClick:function(t){n.navigateTo({url:"/subPages/shop/goodsDetail?id=".concat(t.id)})},onExchange:function(t){n.showModal({title:"确认兑换",content:"确定要用".concat(t.points,"积分兑换").concat(t.name,"吗?"),success:function(t){t.confirm&&n.showToast({title:"兑换成功",icon:"success"})}})}}};t.default=i}).call(this,e("df3c")["default"])},"4a56":function(n,t,e){"use strict";e.d(t,"b",(function(){return o})),e.d(t,"c",(function(){return i})),e.d(t,"a",(function(){return a}));var a={uvSearch:function(){return Promise.all([e.e("common/vendor"),e.e("uni_modules/uv-search/components/uv-search/uv-search")]).then(e.bind(null,"f2c6"))},uvTabs:function(){return Promise.all([e.e("common/vendor"),e.e("uni_modules/uv-tabs/components/uv-tabs/uv-tabs")]).then(e.bind(null,"455f"))},uvButton:function(){return Promise.all([e.e("common/vendor"),e.e("uni_modules/uv-button/components/uv-button/uv-button")]).then(e.bind(null,"2f88"))}},o=function(){var n=this.$createElement;this._self._c},i=[]},6333:function(n,t,e){"use strict";e.r(t);var a=e("2aaa"),o=e.n(a);for(var i in a)["default"].indexOf(i)<0&&function(n){e.d(t,n,(function(){return a[n]}))}(i);t["default"]=o.a},"990d":function(n,t,e){"use strict";var a=e("9bd6"),o=e.n(a);o.a},"9bd6":function(n,t,e){},cf4b:function(n,t,e){"use strict";e.r(t);var a=e("4a56"),o=e("6333");for(var i in o)["default"].indexOf(i)<0&&function(n){e.d(t,n,(function(){return o[n]}))}(i);e("990d");var c=e("828b"),u=Object(c["a"])(o["default"],a["b"],a["c"],!1,null,"1e11d485",null,!1,a["a"],void 0);t["default"]=u.exports}}]); | |||
;(global["webpackJsonp"] = global["webpackJsonp"] || []).push([ | |||
'pages/components/shop/ShopContent-create-component', | |||
{ | |||
'pages/components/shop/ShopContent-create-component':(function(module, exports, __webpack_require__){ | |||
__webpack_require__('df3c')['createComponent'](__webpack_require__("cf4b")) | |||
}) | |||
}, | |||
[['pages/components/shop/ShopContent-create-component']] | |||
]); |
@ -0,0 +1,8 @@ | |||
{ | |||
"usingComponents": { | |||
"uv-search": "/uni_modules/uv-search/components/uv-search/uv-search", | |||
"uv-tabs": "/uni_modules/uv-tabs/components/uv-tabs/uv-tabs", | |||
"uv-button": "/uni_modules/uv-button/components/uv-button/uv-button" | |||
}, | |||
"component": true | |||
} |
@ -0,0 +1 @@ | |||
<view class="shop-content data-v-1e11d485"><view class="search-container data-v-1e11d485"><uv-search vue-id="316726ec-1" placeholder="搜索商品名" show-action="{{false}}" bg-color="#f3f7f8" inputAlign="center" height="40" margin="10rpx" value="{{searchValue}}" data-event-opts="{{[['^search',[['onSearch']]],['^input',[['__set_model',['','searchValue','$event',[]]]]]]}}" bind:search="__e" bind:input="__e" class="data-v-1e11d485" bind:__l="__l"></uv-search></view><view class="tab-container data-v-1e11d485"><uv-tabs vue-id="316726ec-2" list="{{tabList}}" current="{{currentTab}}" active-color="#218CDD" inactive-color="#999" line-color="#218CDD" line-width="{{40}}" line-height="{{4}}" font-size="26" height="80" data-event-opts="{{[['^change',[['onTabChange']]]]}}" bind:change="__e" class="data-v-1e11d485" bind:__l="__l"></uv-tabs></view><view class="goods-container data-v-1e11d485"><view class="goods-grid data-v-1e11d485"><block wx:for="{{filteredGoodsList}}" wx:for-item="item" wx:for-index="index" wx:key="index"><view data-event-opts="{{[['tap',[['onGoodsClick',['$0'],[[['filteredGoodsList','',index]]]]]]]}}" class="goods-item data-v-1e11d485" bindtap="__e"><view class="goods-image data-v-1e11d485"><image class="image data-v-1e11d485" src="{{item.image}}" mode="aspectFit"></image></view><view class="goods-info data-v-1e11d485"><text class="goods-name data-v-1e11d485">{{item.name}}</text><view class="goods-bottom data-v-1e11d485"><view class="points-info data-v-1e11d485"><image class="points-icon data-v-1e11d485" src="/static/积分图标.png" mode="aspectFit"></image><text class="points-text data-v-1e11d485">{{item.points+"积分"}}</text></view><uv-button vue-id="{{'316726ec-3-'+index}}" type="primary" size="mini" text="立即兑换" custom-style="{{buttonStyle}}" data-event-opts="{{[['^click',[['onExchange',['$0'],[[['filteredGoodsList','',index]]]]]]]}}" catch:click="__e" class="data-v-1e11d485" bind:__l="__l"></uv-button></view></view></view></block></view></view></view> |
@ -0,0 +1 @@ | |||
.shop-content.data-v-1e11d485{background:#f8f8f8;min-height:calc(100vh - 400rpx)}.search-container.data-v-1e11d485{position:-webkit-sticky;position:sticky;z-index:999;top:10rpx;padding:15rpx 20rpx;background:#fff}.tab-container.data-v-1e11d485{position:-webkit-sticky;position:sticky;z-index:999;top:90rpx;background:#fff;padding:0 30rpx;border-bottom:1rpx solid #f0f0f0}.goods-container.data-v-1e11d485{padding:20rpx 30rpx;background:#f8f8f8}.goods-grid.data-v-1e11d485{display:grid;grid-template-columns:1fr 1fr;gap:20rpx}.goods-item.data-v-1e11d485{display:flex;flex-direction:column;background:#fff;border-radius:12rpx;padding:20rpx;box-shadow:0 2rpx 12rpx rgba(0,0,0,.04);border:1rpx solid #f5f5f5}.goods-item .goods-image.data-v-1e11d485{width:100%;height:230rpx;border-radius:8rpx;overflow:hidden;margin-bottom:16rpx;border:2rpx dashed #e0e0e0}.goods-item .goods-image .image.data-v-1e11d485{width:100%;height:100%;object-fit:cover}.goods-item .goods-info.data-v-1e11d485{flex:1;display:flex;flex-direction:column}.goods-item .goods-info .goods-name.data-v-1e11d485{font-size:28rpx;color:#333;line-height:1.4;margin-bottom:16rpx;font-weight:500;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;min-height:72rpx}.goods-item .goods-info .goods-bottom.data-v-1e11d485{display:flex;gap:22rpx;margin-top:auto}.goods-item .goods-info .goods-bottom .points-info.data-v-1e11d485{display:flex;align-items:center}.goods-item .goods-info .goods-bottom .points-info .points-icon.data-v-1e11d485{width:24rpx;height:24rpx;margin-right:6rpx}.goods-item .goods-info .goods-bottom .points-info .points-text.data-v-1e11d485{font-size:28rpx;color:#218cdd;font-weight:700} |
@ -0,0 +1 @@ | |||
(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["pages/index/activity"],{"2e3b":function(t,n,e){"use strict";e.d(n,"b",(function(){return a})),e.d(n,"c",(function(){return r})),e.d(n,"a",(function(){return i}));var i={uvIcon:function(){return Promise.all([e.e("common/vendor"),e.e("uni_modules/uv-icon/components/uv-icon/uv-icon")]).then(e.bind(null,"1509"))},uvTabs:function(){return Promise.all([e.e("common/vendor"),e.e("uni_modules/uv-tabs/components/uv-tabs/uv-tabs")]).then(e.bind(null,"455f"))},uvButton:function(){return Promise.all([e.e("common/vendor"),e.e("uni_modules/uv-button/components/uv-button/uv-button")]).then(e.bind(null,"2f88"))},uvEmpty:function(){return Promise.all([e.e("common/vendor"),e.e("uni_modules/uv-empty/components/uv-empty/uv-empty")]).then(e.bind(null,"b3f9"))}},a=function(){var t=this.$createElement,n=(this._self._c,this.filteredActivities.length);this.$mp.data=Object.assign({},{$root:{g0:n}})},r=[]},3895:function(t,n,e){"use strict";var i=e("8ee9"),a=e.n(i);a.a},"610b":function(t,n,e){"use strict";(function(t,n){var i=e("47a9");e("a476");i(e("3240"));var a=i(e("9191"));t.__webpack_require_UNI_MP_PLUGIN__=e,n(a.default)}).call(this,e("3223")["default"],e("df3c")["createPage"])},"70ed":function(t,n,e){"use strict";(function(t){Object.defineProperty(n,"__esModule",{value:!0}),n.default=void 0;var e={data:function(){return{searchKeyword:"",primaryActiveTab:"current",secondaryActiveIndex:0,secondaryTabs:[{name:"全部"},{name:"品牌项目"},{name:"公益活动"},{name:"培训活动"}],activities:[{id:1,title:"关爱自闭症儿童活动",location:"长沙市雨花区时代阳光大道国际人才2145",time:"2025/08/1-2025/09/01",participants:12,maxParticipants:30,image:"/static/bannerImage.png",tag:"30分",tagColor:"#007AFF",category:"charity",status:"current",isFullOrExpired:!1},{id:2,title:"社区环保志愿服务",location:"长沙市岳麓区梅溪湖国际新城",time:"2025/07/15-2025/07/20",participants:25,maxParticipants:40,image:"/static/bannerImage.png",tag:"20分",tagColor:"#52C41A",category:"charity",status:"current",isFullOrExpired:!1},{id:3,title:"青少年编程培训",location:"长沙市开福区万达广场",time:"2025/06/01-2025/06/30",participants:30,maxParticipants:30,image:"/static/bannerImage.png",tag:"50分",tagColor:"#FF6B35",category:"training",status:"past",isFullOrExpired:!0},{id:4,title:"品牌推广活动",location:"长沙市天心区IFS国金中心",time:"2025/05/10-2025/05/15",participants:18,maxParticipants:25,image:"/static/bannerImage.png",tag:"40分",tagColor:"#722ED1",category:"brand",status:"past",isFullOrExpired:!0}]}},computed:{filteredActivities:function(){var t=this,n=this.activities;n=n.filter((function(n){return n.status===t.primaryActiveTab}));var e={0:"all",1:"brand",2:"charity",3:"training"}[this.secondaryActiveIndex];return"all"!==e&&(n=n.filter((function(t){return t.category===e}))),this.searchKeyword.trim()&&(n=n.filter((function(n){return n.title.toLowerCase().includes(t.searchKeyword.toLowerCase())}))),n}},methods:{switchPrimaryTab:function(t){this.primaryActiveTab=t},switchSecondaryTab:function(t){this.secondaryActiveIndex=t},goToActivityDetail:function(n){t.navigateTo({url:"/subPages/index/activityDetail?id=".concat(n.id)})},signUpActivity:function(n){n.isFullOrExpired?t.showToast({title:"活动已结束",icon:"none"}):t.navigateTo({url:"/subPages/index/activityDetail?id=".concat(n.id)})}},onLoad:function(){console.log("活动页面加载完成")}};n.default=e}).call(this,e("df3c")["default"])},"8ee9":function(t,n,e){},9191:function(t,n,e){"use strict";e.r(n);var i=e("2e3b"),a=e("dc63");for(var r in a)["default"].indexOf(r)<0&&function(t){e.d(n,t,(function(){return a[t]}))}(r);e("3895");var o=e("828b"),c=Object(o["a"])(a["default"],i["b"],i["c"],!1,null,"dfc5aa9e",null,!1,i["a"],void 0);n["default"]=c.exports},dc63:function(t,n,e){"use strict";e.r(n);var i=e("70ed"),a=e.n(i);for(var r in i)["default"].indexOf(r)<0&&function(t){e.d(n,t,(function(){return i[t]}))}(r);n["default"]=a.a}},[["610b","common/runtime","common/vendor"]]]); |
@ -0,0 +1,9 @@ | |||
{ | |||
"navigationStyle": "custom", | |||
"usingComponents": { | |||
"uv-icon": "/uni_modules/uv-icon/components/uv-icon/uv-icon", | |||
"uv-tabs": "/uni_modules/uv-tabs/components/uv-tabs/uv-tabs", | |||
"uv-button": "/uni_modules/uv-button/components/uv-button/uv-button", | |||
"uv-empty": "/uni_modules/uv-empty/components/uv-empty/uv-empty" | |||
} | |||
} |
@ -0,0 +1 @@ | |||
<view class="activity-page data-v-dfc5aa9e"><view class="search-section data-v-dfc5aa9e"><view class="search-bar data-v-dfc5aa9e"><uv-icon vue-id="68858b41-1" name="search" size="18" color="#999" class="data-v-dfc5aa9e" bind:__l="__l"></uv-icon><input class="search-input data-v-dfc5aa9e" type="text" placeholder="搜索活动名称" data-event-opts="{{[['input',[['__set_model',['','searchKeyword','$event',[]]]]]]}}" value="{{searchKeyword}}" bindinput="__e"/></view><view class="primary-tabs data-v-dfc5aa9e"><view data-event-opts="{{[['tap',[['switchPrimaryTab',['current']]]]]}}" class="{{['primary-tab-item','data-v-dfc5aa9e',(primaryActiveTab==='current')?'active':'']}}" bindtap="__e">当前活动</view><view data-event-opts="{{[['tap',[['switchPrimaryTab',['past']]]]]}}" class="{{['primary-tab-item','data-v-dfc5aa9e',(primaryActiveTab==='past')?'active':'']}}" bindtap="__e">往期活动</view></view></view><view class="secondary-tabs data-v-dfc5aa9e"><uv-tabs vue-id="68858b41-2" list="{{secondaryTabs}}" current="{{secondaryActiveIndex}}" lineColor="#007AFF" activeColor="#007AFF" inactiveColor="#666" lineWidth="{{30}}" lineHeight="{{3}}" itemStyle="padding: 10px 20px;" data-event-opts="{{[['^change',[['switchSecondaryTab']]]]}}" bind:change="__e" class="data-v-dfc5aa9e" bind:__l="__l"></uv-tabs></view><view class="activity-list data-v-dfc5aa9e"><block wx:for="{{filteredActivities}}" wx:for-item="item" wx:for-index="index" wx:key="index"><view data-event-opts="{{[['tap',[['goToActivityDetail',['$0'],[[['filteredActivities','',index]]]]]]]}}" class="activity-item data-v-dfc5aa9e" bindtap="__e"><view class="activity-image data-v-dfc5aa9e"><image class="image data-v-dfc5aa9e" src="{{item.image}}" mode="aspectFill"></image></view><view class="activity-info data-v-dfc5aa9e"><view class="title-row data-v-dfc5aa9e"><view class="activity-tag data-v-dfc5aa9e" style="{{'background-color:'+(item.tagColor)+';'}}">{{''+item.tag+''}}</view><view class="activity-title data-v-dfc5aa9e">{{item.title}}</view></view><view class="activity-location data-v-dfc5aa9e"><uv-icon vue-id="{{'68858b41-3-'+index}}" name="map-fill" size="14" color="#999" class="data-v-dfc5aa9e" bind:__l="__l"></uv-icon><text class="location-text data-v-dfc5aa9e">{{item.location}}</text></view><view class="activity-time data-v-dfc5aa9e"><uv-icon vue-id="{{'68858b41-4-'+index}}" name="calendar" size="14" color="#999" class="data-v-dfc5aa9e" bind:__l="__l"></uv-icon><text class="time-text data-v-dfc5aa9e">{{item.time}}</text></view><view class="activity-participants data-v-dfc5aa9e"><uv-icon vue-id="{{'68858b41-5-'+index}}" name="account-fill" size="14" color="#999" class="data-v-dfc5aa9e" bind:__l="__l"></uv-icon><text class="participants-text data-v-dfc5aa9e">{{"报名人数:"+item.participants+"/"+item.maxParticipants}}</text></view></view><view class="activity-action data-v-dfc5aa9e"><uv-button vue-id="{{'68858b41-6-'+index}}" type="primary" size="mini" shape="circle" text="{{item.isFullOrExpired?'已结束':'报名中'}}" disabled="{{item.isFullOrExpired}}" data-event-opts="{{[['^click',[['signUpActivity',['$0'],[[['filteredActivities','',index]]]]]]]}}" catch:click="__e" class="data-v-dfc5aa9e" bind:__l="__l"></uv-button></view></view></block></view><block wx:if="{{$root.g0===0}}"><view class="empty-state data-v-dfc5aa9e"><uv-empty vue-id="68858b41-7" mode="data" text="暂无活动数据" class="data-v-dfc5aa9e" bind:__l="__l"></uv-empty></view></block></view> |
@ -0,0 +1,11 @@ | |||
.activity-page.data-v-dfc5aa9e{background-color:#f5f5f5;min-height:100vh}.search-section.data-v-dfc5aa9e{height:350rpx;background:linear-gradient(180deg,#1488db,#98b5f1);padding-top:180rpx;box-sizing:border-box}.search-bar.data-v-dfc5aa9e{background-color:#fff;border-radius:50rpx;padding:20rpx 30rpx;display:flex;align-items:center;gap:20rpx;width:85%;margin:0 auto}.search-input.data-v-dfc5aa9e{flex:1;font-size:28rpx;color:#333}.search-input.data-v-dfc5aa9e::-webkit-input-placeholder{color:#999}.search-input.data-v-dfc5aa9e::placeholder{color:#999}.primary-tabs.data-v-dfc5aa9e{display:flex;padding:0 20rpx;margin-bottom:20rpx}.primary-tab-item.data-v-dfc5aa9e{flex:1;text-align:center;padding:20rpx 0;font-size:32rpx;color:#000;position:relative}.primary-tab-item.active.data-v-dfc5aa9e{color:#fff;font-weight:600}.primary-tab-item.active.data-v-dfc5aa9e::after{content:"";position:absolute;bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);width:100rpx;height:6rpx;background-color:#fff;border-radius:3rpx}.secondary-tabs.data-v-dfc5aa9e{background-color:#fff;border-bottom:1px solid #f0f0f0}.activity-list.data-v-dfc5aa9e{padding:20rpx}.activity-item.data-v-dfc5aa9e{background-color:#fff;border-radius:12rpx;margin-bottom:30rpx;padding:20rpx;display:flex;box-shadow:0 4rpx 20rpx rgba(0,0,0,.05)}.activity-image.data-v-dfc5aa9e{width:180rpx;height:180rpx;border-radius:8rpx;overflow:hidden;flex-shrink:0;margin-right:20rpx}.image.data-v-dfc5aa9e{width:100%;height:100%}.activity-info.data-v-dfc5aa9e{flex:1;display:flex;flex-direction:column;justify-content:space-between}.title-row.data-v-dfc5aa9e{display:flex;align-items:center;margin-bottom:10rpx}.activity-tag.data-v-dfc5aa9e{width:31px;height:20px;background:#218cdd;border-radius:3.5px;margin-right:7rpx;display:flex;align-items:center;justify-content:center;font-size:18rpx;color:#fff;font-weight:600}.activity-title.data-v-dfc5aa9e{font-size:28rpx;font-weight:700;color:#333;line-height:1.4}.activity-location.data-v-dfc5aa9e, | |||
.activity-time.data-v-dfc5aa9e, | |||
.activity-participants.data-v-dfc5aa9e{display:flex;align-items:center;margin-bottom:6rpx}.activity-location .location-text.data-v-dfc5aa9e, | |||
.activity-location .time-text.data-v-dfc5aa9e, | |||
.activity-location .participants-text.data-v-dfc5aa9e, | |||
.activity-time .location-text.data-v-dfc5aa9e, | |||
.activity-time .time-text.data-v-dfc5aa9e, | |||
.activity-time .participants-text.data-v-dfc5aa9e, | |||
.activity-participants .location-text.data-v-dfc5aa9e, | |||
.activity-participants .time-text.data-v-dfc5aa9e, | |||
.activity-participants .participants-text.data-v-dfc5aa9e{font-size:24rpx;color:#666;margin-left:6rpx}.activity-action.data-v-dfc5aa9e{display:flex;align-items:flex-end;padding-bottom:10rpx}.empty-state.data-v-dfc5aa9e{padding:100rpx 40rpx} |
@ -0,0 +1 @@ | |||
(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["pages/index/community"],{4759:function(t,n,e){"use strict";var a=e("a661"),i=e.n(a);i.a},"7fb2":function(t,n,e){"use strict";(function(t){Object.defineProperty(n,"__esModule",{value:!0}),n.default=void 0;var e={name:"CommunityPage",data:function(){return{currentTab:"current",postList:[{id:1,username:"猫小姐",avatar:"/static/默认头像.png",time:"2023-12-10 14:15:26",content:"建议社区草地修剪一下,杂草太多了!",images:["/static/bannerImage.png","/static/bannerImage.png","/static/bannerImage.png"],type:"current"},{id:2,username:"猫小姐",avatar:"/static/默认头像.png",time:"2023-12-10 14:15:26",content:"建议社区草地修剪一下,杂草太多了!",images:["/static/bannerImage.png","/static/bannerImage.png","/static/bannerImage.png"],type:"current"},{id:3,username:"邻居小王",avatar:"/static/默认头像.png",time:"2023-12-09 16:30:15",content:"今天在小区里捡到一只小猫,有人丢失了吗?",images:["/static/bannerImage.png"],type:"past"},{id:4,username:"李阿姨",avatar:"/static/默认头像.png",time:"2023-12-08 09:20:30",content:"分享一下我种的花,希望大家喜欢!",images:["/static/bannerImage.png","/static/bannerImage.png"],type:"past"}]}},computed:{filteredPosts:function(){var t=this;return this.postList.filter((function(n){return n.type===t.currentTab}))},actionButtonText:function(){return"current"===this.currentTab?"我要留言":"随手拍"}},methods:{switchTab:function(t){this.currentTab=t},goToPostDetail:function(n){t.navigateTo({url:"/subPages/community/postDetail?id=".concat(n.id)})},previewImage:function(n,e){t.previewImage({current:n,urls:e})},openAction:function(){"current"===this.currentTab?this.goToComment():this.takePhoto()},takePhoto:function(){t.navigateTo({url:"/subPages/community/publishPost?page=photo"})},goToComment:function(){t.navigateTo({url:"/subPages/community/publishPost"})}}};n.default=e}).call(this,e("df3c")["default"])},a661:function(t,n,e){},c849:function(t,n,e){"use strict";e.r(n);var a=e("e66b"),i=e("d9b3");for(var r in i)["default"].indexOf(r)<0&&function(t){e.d(n,t,(function(){return i[t]}))}(r);e("4759");var o=e("828b"),u=Object(o["a"])(i["default"],a["b"],a["c"],!1,null,"35b85e7e",null,!1,a["a"],void 0);n["default"]=u.exports},d9b3:function(t,n,e){"use strict";e.r(n);var a=e("7fb2"),i=e.n(a);for(var r in a)["default"].indexOf(r)<0&&function(t){e.d(n,t,(function(){return a[t]}))}(r);n["default"]=i.a},e66b:function(t,n,e){"use strict";e.d(n,"b",(function(){return i})),e.d(n,"c",(function(){return r})),e.d(n,"a",(function(){return a}));var a={uvIcon:function(){return Promise.all([e.e("common/vendor"),e.e("uni_modules/uv-icon/components/uv-icon/uv-icon")]).then(e.bind(null,"1509"))}},i=function(){var t=this,n=t.$createElement,e=(t._self._c,t.__map(t.filteredPosts,(function(n,e){var a=t.__get_orig(n),i=n.images&&n.images.length>0;return{$orig:a,g0:i}})));t.$mp.data=Object.assign({},{$root:{l0:e}})},r=[]},f680:function(t,n,e){"use strict";(function(t,n){var a=e("47a9");e("a476");a(e("3240"));var i=a(e("c849"));t.__webpack_require_UNI_MP_PLUGIN__=e,n(i.default)}).call(this,e("3223")["default"],e("df3c")["createPage"])}},[["f680","common/runtime","common/vendor"]]]); |
@ -0,0 +1,6 @@ | |||
{ | |||
"navigationBarTitleText": "社区", | |||
"usingComponents": { | |||
"uv-icon": "/uni_modules/uv-icon/components/uv-icon/uv-icon" | |||
} | |||
} |
@ -0,0 +1 @@ | |||
<view class="community-page data-v-35b85e7e"><view class="banner-section data-v-35b85e7e"><image class="banner-image data-v-35b85e7e" src="/static/bannerImage.png" mode="aspectFill"></image></view><view class="tab-section data-v-35b85e7e"><view class="tab-container data-v-35b85e7e"><view data-event-opts="{{[['tap',[['switchTab',['current']]]]]}}" class="{{['tab-item','data-v-35b85e7e',(currentTab==='current')?'active':'']}}" bindtap="__e"><text class="tab-text data-v-35b85e7e">木邻说</text><block wx:if="{{currentTab==='current'}}"><view class="tab-line data-v-35b85e7e"></view></block></view><view data-event-opts="{{[['tap',[['switchTab',['past']]]]]}}" class="{{['tab-item','data-v-35b85e7e',(currentTab==='past')?'active':'']}}" bindtap="__e"><text class="tab-text data-v-35b85e7e">木邻见</text><block wx:if="{{currentTab==='past'}}"><view class="tab-line data-v-35b85e7e"></view></block></view></view></view><view class="post-list data-v-35b85e7e"><block wx:for="{{$root.l0}}" wx:for-item="item" wx:for-index="index" wx:key="index"><view data-event-opts="{{[['tap',[['goToPostDetail',['$0'],[[['filteredPosts','',index]]]]]]]}}" class="post-item data-v-35b85e7e" bindtap="__e"><view class="user-info data-v-35b85e7e"><image class="user-avatar data-v-35b85e7e" src="{{item.$orig.avatar}}" mode="aspectFill"></image><view class="user-details data-v-35b85e7e"><text class="username data-v-35b85e7e">{{item.$orig.username}}</text><text class="post-time data-v-35b85e7e">{{"发布时间:"+item.$orig.time}}</text></view></view><view class="post-content data-v-35b85e7e"><text class="post-text data-v-35b85e7e">{{item.$orig.content}}</text><block wx:if="{{item.g0}}"><view class="image-grid data-v-35b85e7e"><block wx:for="{{item.$orig.images}}" wx:for-item="img" wx:for-index="imgIndex" wx:key="imgIndex"><image class="post-image data-v-35b85e7e" src="{{img}}" mode="aspectFill" data-event-opts="{{[['tap',[['previewImage',['$0','$1'],[[['filteredPosts','',index],['images','',imgIndex]],[['filteredPosts','',index,'images']]]]]]]}}" catchtap="__e"></image></block></view></block></view></view></block></view><view data-event-opts="{{[['tap',[['openAction',['$event']]]]]}}" class="{{['action-btn','data-v-35b85e7e',currentTab==='current'?'current-btn':'photo']}}" bindtap="__e"><uv-icon vue-id="b4cbc03a-1" name="edit-pen-fill" size="20" color="white" class="data-v-35b85e7e" bind:__l="__l"></uv-icon><text class="action-text data-v-35b85e7e">{{actionButtonText}}</text></view></view> |
@ -0,0 +1 @@ | |||
.community-page.data-v-35b85e7e{min-height:100vh;background-color:#f8f9fa;position:relative;padding-bottom:120rpx}.banner-section.data-v-35b85e7e{height:400rpx;overflow:hidden}.banner-image.data-v-35b85e7e{width:100%;height:100%}.tab-section.data-v-35b85e7e{background:#fff;padding:0 40rpx;border-bottom:1rpx solid #f0f0f0;box-shadow:0 1.5px 3px 0 rgba(0,0,0,.16)}.tab-container.data-v-35b85e7e{display:flex;justify-content:space-evenly}.tab-item.data-v-35b85e7e{position:relative;padding:30rpx 0}.tab-item .tab-text.data-v-35b85e7e{font-size:32rpx;color:#666;font-weight:500;transition:color .3s ease}.tab-item.active .tab-text.data-v-35b85e7e{color:#007aff;font-weight:700}.tab-line.data-v-35b85e7e{position:absolute;bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);width:40rpx;height:6rpx;background:#007aff;border-radius:3rpx;-webkit-animation:slideIn-data-v-35b85e7e .3s ease;animation:slideIn-data-v-35b85e7e .3s ease}@-webkit-keyframes slideIn-data-v-35b85e7e{from{width:0}to{width:40rpx}}@keyframes slideIn-data-v-35b85e7e{from{width:0}to{width:40rpx}}.post-item.data-v-35b85e7e{background-color:#fff;border-radius:16rpx;padding:32rpx;box-shadow:0 2rpx 16rpx rgba(0,0,0,.06);border:1rpx solid #f5f5f5;transition:box-shadow .2s ease,-webkit-transform .2s ease;transition:transform .2s ease,box-shadow .2s ease;transition:transform .2s ease,box-shadow .2s ease,-webkit-transform .2s ease}.post-item.data-v-35b85e7e:active{-webkit-transform:scale(.98);transform:scale(.98);box-shadow:0 4rpx 20rpx rgba(0,0,0,.1)}.user-info.data-v-35b85e7e{display:flex;align-items:center;margin-bottom:24rpx}.user-avatar.data-v-35b85e7e{width:88rpx;height:88rpx;border-radius:50%;margin-right:24rpx;border:2rpx solid #f0f0f0}.user-details.data-v-35b85e7e{flex:1}.username.data-v-35b85e7e{font-size:30rpx;font-weight:700;color:#333;display:block;margin-bottom:8rpx}.post-time.data-v-35b85e7e{font-size:24rpx;color:#999}.post-content .post-text.data-v-35b85e7e{font-size:30rpx;color:#333;line-height:1.6;display:block;margin-bottom:24rpx}.image-grid.data-v-35b85e7e{display:flex;flex-wrap:wrap;gap:12rpx}.post-image.data-v-35b85e7e{width:200rpx;height:200rpx;border-radius:12rpx;border:1rpx solid #f0f0f0}.action-btn.data-v-35b85e7e{position:fixed;bottom:120rpx;right:30rpx;width:120rpx;height:120rpx;background:linear-gradient(135deg,#007aff,#0056cc);border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;box-shadow:0 8rpx 24rpx rgba(0,122,255,.4);z-index:100;transition:box-shadow .2s ease,-webkit-transform .2s ease;transition:transform .2s ease,box-shadow .2s ease;transition:transform .2s ease,box-shadow .2s ease,-webkit-transform .2s ease}.action-btn.data-v-35b85e7e:active{-webkit-transform:scale(.95);transform:scale(.95);box-shadow:0 4rpx 16rpx rgba(0,122,255,.6)}.action-btn.photo.data-v-35b85e7e{background:linear-gradient(135deg,#f66,#c33)}.action-text.data-v-35b85e7e{font-size:20rpx;color:#fff;margin-top:8rpx;font-weight:700} |
@ -0,0 +1 @@ | |||
(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["pages/index/index"],{"341e":function(e,n,t){"use strict";t.r(n);var o=t("f9593"),c=t("5b76");for(var u in c)["default"].indexOf(u)<0&&function(e){t.d(n,e,(function(){return c[e]}))}(u);t("5231");var a=t("828b"),i=Object(a["a"])(c["default"],o["b"],o["c"],!1,null,"5131224c",null,!1,o["a"],void 0);n["default"]=i.exports},5231:function(e,n,t){"use strict";var o=t("f808"),c=t.n(o);c.a},"5b76":function(e,n,t){"use strict";t.r(n);var o=t("6d4c"),c=t.n(o);for(var u in o)["default"].indexOf(u)<0&&function(e){t.d(n,e,(function(){return o[e]}))}(u);n["default"]=c.a},"6d4c":function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=void 0;var o={components:{VolunteerHeader:function(){t.e("pages/components/index/VolunteerHeader").then(function(){return resolve(t("4d8f"))}.bind(null,t)).catch(t.oe)},VolunteerRanking:function(){t.e("pages/components/index/VolunteerRanking").then(function(){return resolve(t("c30c"))}.bind(null,t)).catch(t.oe)},VolunteerFeatures:function(){t.e("pages/components/index/VolunteerFeatures").then(function(){return resolve(t("6339"))}.bind(null,t)).catch(t.oe)},RecommendedActivities:function(){t.e("pages/components/index/RecommendedActivities").then(function(){return resolve(t("65de"))}.bind(null,t)).catch(t.oe)},HomePageNav:function(){t.e("pages/components/HomePageNav").then(function(){return resolve(t("bb1c"))}.bind(null,t)).catch(t.oe)}},data:function(){return{}},onLoad:function(){this.getPageData()},methods:{getPageData:function(){}}};n.default=o},"7a2b":function(e,n,t){"use strict";(function(e,n){var o=t("47a9");t("a476");o(t("3240"));var c=o(t("341e"));e.__webpack_require_UNI_MP_PLUGIN__=t,n(c.default)}).call(this,t("3223")["default"],t("df3c")["createPage"])},f808:function(e,n,t){},f9593:function(e,n,t){"use strict";t.d(n,"b",(function(){return o})),t.d(n,"c",(function(){return c})),t.d(n,"a",(function(){}));var o=function(){var e=this.$createElement;this._self._c},c=[]}},[["7a2b","common/runtime","common/vendor"]]]); |
@ -0,0 +1,10 @@ | |||
{ | |||
"navigationStyle": "custom", | |||
"usingComponents": { | |||
"volunteer-header": "/pages/components/index/VolunteerHeader", | |||
"volunteer-ranking": "/pages/components/index/VolunteerRanking", | |||
"volunteer-features": "/pages/components/index/VolunteerFeatures", | |||
"recommended-activities": "/pages/components/index/RecommendedActivities", | |||
"home-page-nav": "/pages/components/HomePageNav" | |||
} | |||
} |
@ -0,0 +1 @@ | |||
<view class="volunteer-day-container data-v-5131224c"><home-page-nav vue-id="8dd740cc-1" class="data-v-5131224c" bind:__l="__l"></home-page-nav><volunteer-header vue-id="8dd740cc-2" class="data-v-5131224c" bind:__l="__l"></volunteer-header><volunteer-ranking vue-id="8dd740cc-3" class="data-v-5131224c" bind:__l="__l"></volunteer-ranking><volunteer-features vue-id="8dd740cc-4" class="data-v-5131224c" bind:__l="__l"></volunteer-features><recommended-activities vue-id="8dd740cc-5" class="data-v-5131224c" bind:__l="__l"></recommended-activities></view> |
@ -0,0 +1 @@ | |||
.volunteer-day-container.data-v-5131224c{min-height:100vh;background-color:#f5f5f5;padding-bottom:30rpx} |
@ -0,0 +1 @@ | |||
(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["pages/index/my"],{"01be":function(e,n,t){"use strict";t.d(n,"b",(function(){return o})),t.d(n,"c",(function(){return c})),t.d(n,"a",(function(){return a}));var a={uvIcon:function(){return Promise.all([t.e("common/vendor"),t.e("uni_modules/uv-icon/components/uv-icon/uv-icon")]).then(t.bind(null,"1509"))}},o=function(){var e=this.$createElement;this._self._c},c=[]},4956:function(e,n,t){"use strict";(function(e){Object.defineProperty(n,"__esModule",{value:!0}),n.default=void 0;var t={name:"MyPage",data:function(){return{userInfo:{name:"小精灵",avatar:"/static/默认头像.png",favorites:5,points:41}}},methods:{navigateTo:function(n){switch(console.log("导航到:",n),n){case"profile":e.navigateTo({url:"/subPages/my/myProfile"});break;case"reports":e.navigateTo({url:"/subPages/my/myRegistrations"});break;case"records":e.navigateTo({url:"/subPages/my/exchangeRecord"});break;case"favorites":e.navigateTo({url:"/subPages/my/productFavorites"});break;case"favoritesActivity":e.navigateTo({url:"/subPages/my/activityFavorites"});break;case"about":break;case"checkin":e.navigateTo({url:"/subPages/my/activityCheckin"});break;default:break}},logout:function(){e.showModal({title:"提示",content:"确定要退出登录吗?",success:function(n){n.confirm&&(e.removeStorageSync("userInfo"),e.showToast({title:"已退出登录",icon:"success"}),setTimeout((function(){e.reLaunch({url:"/subPages/login/login"})}),1500))}})}}};n.default=t}).call(this,t("df3c")["default"])},8258:function(e,n,t){"use strict";t.r(n);var a=t("01be"),o=t("f94b");for(var c in o)["default"].indexOf(c)<0&&function(e){t.d(n,e,(function(){return o[e]}))}(c);t("c009");var u=t("828b"),i=Object(u["a"])(o["default"],a["b"],a["c"],!1,null,"b6f21434",null,!1,a["a"],void 0);n["default"]=i.exports},9587:function(e,n,t){},c009:function(e,n,t){"use strict";var a=t("9587"),o=t.n(a);o.a},c8ec:function(e,n,t){"use strict";(function(e,n){var a=t("47a9");t("a476");a(t("3240"));var o=a(t("8258"));e.__webpack_require_UNI_MP_PLUGIN__=t,n(o.default)}).call(this,t("3223")["default"],t("df3c")["createPage"])},f94b:function(e,n,t){"use strict";t.r(n);var a=t("4956"),o=t.n(a);for(var c in a)["default"].indexOf(c)<0&&function(e){t.d(n,e,(function(){return a[e]}))}(c);n["default"]=o.a}},[["c8ec","common/runtime","common/vendor"]]]); |
@ -0,0 +1,6 @@ | |||
{ | |||
"navigationStyle": "custom", | |||
"usingComponents": { | |||
"uv-icon": "/uni_modules/uv-icon/components/uv-icon/uv-icon" | |||
} | |||
} |
@ -0,0 +1 @@ | |||
<view class="my-page data-v-b6f21434"><view class="header-section data-v-b6f21434"><view class="header-icons data-v-b6f21434"><uv-icon vue-id="2f91d444-1" name="more-dot-fill" size="20" color="white" class="data-v-b6f21434" bind:__l="__l"></uv-icon><uv-icon vue-id="2f91d444-2" name="setting" size="20" color="white" class="data-v-b6f21434" bind:__l="__l"></uv-icon></view><view class="user-info data-v-b6f21434"><view class="avatar-container data-v-b6f21434"><image class="avatar data-v-b6f21434" src="/static/默认头像.png" mode="aspectFill"></image></view><text class="username data-v-b6f21434">小精灵</text></view></view><view class="points-section data-v-b6f21434"><view data-event-opts="{{[['tap',[['navigateTo',['favoritesActivity']]]]]}}" class="points-item yellow data-v-b6f21434" bindtap="__e"><view class="points-content data-v-b6f21434"><text class="points-number data-v-b6f21434">5</text><text class="points-label yellow data-v-b6f21434">我的收藏</text></view><view class="points-icon data-v-b6f21434"><uv-icon vue-id="2f91d444-3" name="star-fill" size="28" color="#FFD700" class="data-v-b6f21434" bind:__l="__l"></uv-icon></view></view><view class="points-item blue data-v-b6f21434"><view class="points-content data-v-b6f21434"><text class="points-number data-v-b6f21434">41</text><text class="points-label blue data-v-b6f21434">可用积分</text></view><view class="points-icon data-v-b6f21434"><uv-icon vue-id="2f91d444-4" name="integral" size="28" color="#4A90E2" class="data-v-b6f21434" bind:__l="__l"></uv-icon></view></view></view><view class="functions-container data-v-b6f21434"><text class="section-title data-v-b6f21434">常用功能</text><view class="functions-grid data-v-b6f21434"><view data-event-opts="{{[['tap',[['navigateTo',['profile']]]]]}}" class="function-item data-v-b6f21434" bindtap="__e"><image class="function-icon data-v-b6f21434" src="/static/我的_我的资料.png" mode="aspectFit"></image><text class="function-text data-v-b6f21434">我的资料</text></view><view data-event-opts="{{[['tap',[['navigateTo',['reports']]]]]}}" class="function-item data-v-b6f21434" bindtap="__e"><image class="function-icon data-v-b6f21434" src="/static/我的_我的报名.png" mode="aspectFit"></image><text class="function-text data-v-b6f21434">我的报名</text></view><view data-event-opts="{{[['tap',[['navigateTo',['records']]]]]}}" class="function-item data-v-b6f21434" bindtap="__e"><image class="function-icon data-v-b6f21434" src="/static/我的_兑换记录.png" mode="aspectFit"></image><text class="function-text data-v-b6f21434">兑换记录</text></view><view data-event-opts="{{[['tap',[['navigateTo',['favorites']]]]]}}" class="function-item data-v-b6f21434" bindtap="__e"><image class="function-icon data-v-b6f21434" src="/static/我的_商品收藏.png" mode="aspectFit"></image><text class="function-text data-v-b6f21434">商品收藏</text></view><view data-event-opts="{{[['tap',[['logout',['$event']]]]]}}" class="function-item data-v-b6f21434" bindtap="__e"><image class="function-icon data-v-b6f21434" src="/static/我的_退出登录.png" mode="aspectFit"></image><text class="function-text data-v-b6f21434">退出登录</text></view><view data-event-opts="{{[['tap',[['navigateTo',['about']]]]]}}" class="function-item data-v-b6f21434" bindtap="__e"><image class="function-icon data-v-b6f21434" src="/static/我的_关于我们.png" mode="aspectFit"></image><text class="function-text data-v-b6f21434">关于我们</text></view><view data-event-opts="{{[['tap',[['navigateTo',['checkin']]]]]}}" class="function-item data-v-b6f21434" bindtap="__e"><view class="function-icon-wrapper data-v-b6f21434"><uv-icon vue-id="2f91d444-5" name="file-text-fill" size="32" color="#218cdd" class="data-v-b6f21434" bind:__l="__l"></uv-icon></view><text class="function-text data-v-b6f21434">活动签到</text></view></view></view></view> |
@ -0,0 +1 @@ | |||
.my-page.data-v-b6f21434{min-height:100vh;background-color:#fff}.header-section.data-v-b6f21434{background:linear-gradient(180deg,#1488db,#98b5f1);padding:60rpx 40rpx 80rpx;position:relative}.header-icons.data-v-b6f21434{display:flex;justify-content:flex-end;gap:32rpx;margin-bottom:40rpx}.user-info.data-v-b6f21434{display:flex;flex-direction:column;align-items:center;margin-bottom:60rpx}.avatar-container.data-v-b6f21434{width:120rpx;height:120rpx;border-radius:50%;overflow:hidden;margin-bottom:20rpx;border:4rpx solid hsla(0,0%,100%,.3)}.avatar.data-v-b6f21434{width:100%;height:100%}.username.data-v-b6f21434{font-size:30rpx;color:#000}.points-section.data-v-b6f21434{display:flex;justify-content:space-between;margin:30rpx 30rpx;gap:24rpx}.points-item.data-v-b6f21434{border-radius:12rpx;padding:32rpx 24rpx;flex:1;display:flex;align-items:center;justify-content:space-between;position:relative;box-shadow:0 1.5px 3px 0 rgba(0,0,0,.16)}.points-item.yellow.data-v-b6f21434{background:#fef4d1}.points-item.blue.data-v-b6f21434{background:#c7e6ff}.points-content.data-v-b6f21434{display:flex;flex-direction:column;align-items:flex-start}.points-number.data-v-b6f21434{font-size:48rpx;color:#000;font-weight:700;line-height:1}.points-label.data-v-b6f21434{font-size:24rpx;color:#000;font-size:24rpx;margin-top:8rpx}.points-label.yellow.data-v-b6f21434{color:#deb31b}.points-label.blue.data-v-b6f21434{color:#1488db}.points-icon.data-v-b6f21434{display:flex;align-items:center;justify-content:center}.functions-container.data-v-b6f21434{height:319px;background:#fff;border-radius:8px;box-shadow:0 1.5px 3px 0 rgba(0,0,0,.16);margin:20rpx 30rpx;padding:40rpx}.section-title.data-v-b6f21434{font-size:32rpx;color:#333;font-weight:700;margin-bottom:40rpx;display:block}.functions-grid.data-v-b6f21434{display:grid;grid-template-columns:repeat(4,1fr);gap:40rpx 10rpx}.function-item.data-v-b6f21434{display:flex;flex-direction:column;align-items:center;gap:16rpx;padding:20rpx;border-radius:12rpx;transition:all .3s ease}.function-item.data-v-b6f21434:active{background-color:#f0f8ff;-webkit-transform:scale(.95);transform:scale(.95)}.function-icon.data-v-b6f21434{width:48rpx;height:48rpx}.function-icon-wrapper.data-v-b6f21434{width:48rpx;height:48rpx;display:flex;align-items:center;justify-content:center}.function-text.data-v-b6f21434{font-size:24rpx;color:#000;text-align:center} |
@ -0,0 +1 @@ | |||
(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["pages/index/shop"],{"10c3":function(n,t,e){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o={name:"Shop",components:{HomePageNav:function(){e.e("pages/components/HomePageNav").then(function(){return resolve(e("bb1c"))}.bind(null,e)).catch(e.oe)},PointsCard:function(){e.e("pages/components/shop/PointsCard").then(function(){return resolve(e("5507"))}.bind(null,e)).catch(e.oe)},ShopContent:function(){e.e("pages/components/shop/ShopContent").then(function(){return resolve(e("cf4b"))}.bind(null,e)).catch(e.oe)}},data:function(){return{userPoints:1385}},onLoad:function(){this.getUserPoints()},methods:{getUserPoints:function(){this.userPoints=1385}}};t.default=o},"33e3":function(n,t,e){"use strict";e.r(t);var o=e("b94c"),c=e("4792");for(var u in c)["default"].indexOf(u)<0&&function(n){e.d(t,n,(function(){return c[n]}))}(u);e("98a6");var a=e("828b"),i=Object(a["a"])(c["default"],o["b"],o["c"],!1,null,"240c5962",null,!1,o["a"],void 0);t["default"]=i.exports},4792:function(n,t,e){"use strict";e.r(t);var o=e("10c3"),c=e.n(o);for(var u in o)["default"].indexOf(u)<0&&function(n){e.d(t,n,(function(){return o[n]}))}(u);t["default"]=c.a},"738b":function(n,t,e){"use strict";(function(n,t){var o=e("47a9");e("a476");o(e("3240"));var c=o(e("33e3"));n.__webpack_require_UNI_MP_PLUGIN__=e,t(c.default)}).call(this,e("3223")["default"],e("df3c")["createPage"])},"98a6":function(n,t,e){"use strict";var o=e("f2f6"),c=e.n(o);c.a},b94c:function(n,t,e){"use strict";e.d(t,"b",(function(){return o})),e.d(t,"c",(function(){return c})),e.d(t,"a",(function(){}));var o=function(){var n=this.$createElement;this._self._c},c=[]},f2f6:function(n,t,e){}},[["738b","common/runtime","common/vendor"]]]); |
@ -0,0 +1,8 @@ | |||
{ | |||
"navigationStyle": "custom", | |||
"usingComponents": { | |||
"home-page-nav": "/pages/components/HomePageNav", | |||
"points-card": "/pages/components/shop/PointsCard", | |||
"shop-content": "/pages/components/shop/ShopContent" | |||
} | |||
} |
@ -0,0 +1 @@ | |||
<view class="shop-page data-v-240c5962"><home-page-nav vue-id="f6ece68c-1" class="data-v-240c5962" bind:__l="__l"></home-page-nav><points-card vue-id="f6ece68c-2" points="{{userPoints}}" class="data-v-240c5962" bind:__l="__l"></points-card><shop-content vue-id="f6ece68c-3" class="data-v-240c5962" bind:__l="__l"></shop-content></view> |
@ -0,0 +1 @@ | |||
.shop-page.data-v-240c5962{min-height:100vh;background:#f8f8f8} |
@ -0,0 +1,29 @@ | |||
{ | |||
"description": "项目配置文件。", | |||
"packOptions": { | |||
"ignore": [], | |||
"include": [] | |||
}, | |||
"setting": { | |||
"urlCheck": false, | |||
"es6": false, | |||
"postcss": false, | |||
"minified": false, | |||
"newFeature": true, | |||
"bigPackageSizeSupport": true, | |||
"babelSetting": { | |||
"ignore": [], | |||
"disablePlugins": [], | |||
"outputPath": "" | |||
} | |||
}, | |||
"compileType": "miniprogram", | |||
"libVersion": "3.8.12", | |||
"appid": "wxb6f11363a55f9535", | |||
"projectname": "木邻有你", | |||
"condition": {}, | |||
"editorSetting": { | |||
"tabIndent": "insertSpaces", | |||
"tabSize": 2 | |||
} | |||
} |
@ -0,0 +1,7 @@ | |||
{ | |||
"description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html", | |||
"projectname": "木邻有你", | |||
"setting": { | |||
"compileHotReLoad": true | |||
} | |||
} |