Browse Source

'theend

hfll
hflllll 1 day ago
parent
commit
b9a65631ff
500 changed files with 27099 additions and 11371 deletions
  1. +3
    -3
      App.vue
  2. +4
    -7
      manifest.json
  3. +66
    -2
      pages.json
  4. +400
    -0
      pages/index/activity.vue
  5. +361
    -0
      pages/index/community.vue
  6. +337
    -0
      pages/index/my.vue
  7. BIN
      static/我的.zip
  8. BIN
      static/我的_兑换记录.png
  9. BIN
      static/我的_关于我们.png
  10. BIN
      static/我的_商品收藏.png
  11. BIN
      static/我的_我的报名.png
  12. BIN
      static/我的_我的资料.png
  13. BIN
      static/我的_退出登录.png
  14. +326
    -0
      subPages/community/publishPost.vue
  15. +99
    -46
      subPages/login/userInfo.vue
  16. +223
    -0
      subPages/my/activityCheckin.vue
  17. +205
    -0
      subPages/my/activityFavorites.vue
  18. +268
    -0
      subPages/my/checkinCode.vue
  19. +280
    -0
      subPages/my/exchangeDetail.vue
  20. +320
    -0
      subPages/my/exchangeRecord.vue
  21. +406
    -0
      subPages/my/myActivityDetail.vue
  22. +349
    -0
      subPages/my/myProfile.vue
  23. +339
    -0
      subPages/my/myRegistrations.vue
  24. +205
    -0
      subPages/my/productFavorites.vue
  25. +0
    -0
      unpackage/dist/build/.automator/mp-weixin/.automator.json
  26. +4
    -0
      unpackage/dist/build/mp-weixin/app.js
  27. +91
    -0
      unpackage/dist/build/mp-weixin/app.json
  28. +3
    -0
      unpackage/dist/build/mp-weixin/app.wxss
  29. +1
    -0
      unpackage/dist/build/mp-weixin/common/main.js
  30. +1
    -0
      unpackage/dist/build/mp-weixin/common/main.wxss
  31. +4
    -0
      unpackage/dist/build/mp-weixin/common/runtime.js
  32. +8
    -0
      unpackage/dist/build/mp-weixin/common/vendor.js
  33. +10
    -0
      unpackage/dist/build/mp-weixin/pages/components/HomePageNav.js
  34. +4
    -0
      unpackage/dist/build/mp-weixin/pages/components/HomePageNav.json
  35. +1
    -0
      unpackage/dist/build/mp-weixin/pages/components/HomePageNav.wxml
  36. +1
    -0
      unpackage/dist/build/mp-weixin/pages/components/HomePageNav.wxss
  37. +10
    -0
      unpackage/dist/build/mp-weixin/pages/components/index/RecommendedActivities.js
  38. +7
    -0
      unpackage/dist/build/mp-weixin/pages/components/index/RecommendedActivities.json
  39. +1
    -0
      unpackage/dist/build/mp-weixin/pages/components/index/RecommendedActivities.wxml
  40. +1
    -0
      unpackage/dist/build/mp-weixin/pages/components/index/RecommendedActivities.wxss
  41. +10
    -0
      unpackage/dist/build/mp-weixin/pages/components/index/VolunteerFeatures.js
  42. +0
    -0
      unpackage/dist/build/mp-weixin/pages/components/index/VolunteerFeatures.json
  43. +1
    -0
      unpackage/dist/build/mp-weixin/pages/components/index/VolunteerFeatures.wxml
  44. +1
    -0
      unpackage/dist/build/mp-weixin/pages/components/index/VolunteerFeatures.wxss
  45. +10
    -0
      unpackage/dist/build/mp-weixin/pages/components/index/VolunteerHeader.js
  46. +7
    -0
      unpackage/dist/build/mp-weixin/pages/components/index/VolunteerHeader.json
  47. +1
    -0
      unpackage/dist/build/mp-weixin/pages/components/index/VolunteerHeader.wxml
  48. +1
    -0
      unpackage/dist/build/mp-weixin/pages/components/index/VolunteerHeader.wxss
  49. +10
    -0
      unpackage/dist/build/mp-weixin/pages/components/index/VolunteerRanking.js
  50. +0
    -0
      unpackage/dist/build/mp-weixin/pages/components/index/VolunteerRanking.json
  51. +1
    -0
      unpackage/dist/build/mp-weixin/pages/components/index/VolunteerRanking.wxml
  52. +1
    -0
      unpackage/dist/build/mp-weixin/pages/components/index/VolunteerRanking.wxss
  53. +10
    -0
      unpackage/dist/build/mp-weixin/pages/components/shop/PointsCard.js
  54. +4
    -0
      unpackage/dist/build/mp-weixin/pages/components/shop/PointsCard.json
  55. +1
    -0
      unpackage/dist/build/mp-weixin/pages/components/shop/PointsCard.wxml
  56. +1
    -0
      unpackage/dist/build/mp-weixin/pages/components/shop/PointsCard.wxss
  57. +10
    -0
      unpackage/dist/build/mp-weixin/pages/components/shop/ShopContent.js
  58. +8
    -0
      unpackage/dist/build/mp-weixin/pages/components/shop/ShopContent.json
  59. +1
    -0
      unpackage/dist/build/mp-weixin/pages/components/shop/ShopContent.wxml
  60. +1
    -0
      unpackage/dist/build/mp-weixin/pages/components/shop/ShopContent.wxss
  61. +1
    -0
      unpackage/dist/build/mp-weixin/pages/index/activity.js
  62. +9
    -0
      unpackage/dist/build/mp-weixin/pages/index/activity.json
  63. +1
    -0
      unpackage/dist/build/mp-weixin/pages/index/activity.wxml
  64. +11
    -0
      unpackage/dist/build/mp-weixin/pages/index/activity.wxss
  65. +1
    -0
      unpackage/dist/build/mp-weixin/pages/index/community.js
  66. +6
    -0
      unpackage/dist/build/mp-weixin/pages/index/community.json
  67. +1
    -0
      unpackage/dist/build/mp-weixin/pages/index/community.wxml
  68. +1
    -0
      unpackage/dist/build/mp-weixin/pages/index/community.wxss
  69. +1
    -0
      unpackage/dist/build/mp-weixin/pages/index/index.js
  70. +10
    -0
      unpackage/dist/build/mp-weixin/pages/index/index.json
  71. +1
    -0
      unpackage/dist/build/mp-weixin/pages/index/index.wxml
  72. +1
    -0
      unpackage/dist/build/mp-weixin/pages/index/index.wxss
  73. +1
    -0
      unpackage/dist/build/mp-weixin/pages/index/my.js
  74. +6
    -0
      unpackage/dist/build/mp-weixin/pages/index/my.json
  75. +1
    -0
      unpackage/dist/build/mp-weixin/pages/index/my.wxml
  76. +1
    -0
      unpackage/dist/build/mp-weixin/pages/index/my.wxss
  77. +1
    -0
      unpackage/dist/build/mp-weixin/pages/index/shop.js
  78. +8
    -0
      unpackage/dist/build/mp-weixin/pages/index/shop.json
  79. +1
    -0
      unpackage/dist/build/mp-weixin/pages/index/shop.wxml
  80. +1
    -0
      unpackage/dist/build/mp-weixin/pages/index/shop.wxss
  81. +29
    -0
      unpackage/dist/build/mp-weixin/project.config.json
  82. +7
    -0
      unpackage/dist/build/mp-weixin/project.private.config.json
  83. BIN
      unpackage/dist/build/mp-weixin/static/bannerImage.png
  84. +0
    -0
      unpackage/dist/build/mp-weixin/static/logo.png
  85. BIN
      unpackage/dist/build/mp-weixin/static/可用积分背景图.png
  86. BIN
      unpackage/dist/build/mp-weixin/static/商城_商品1.png
  87. BIN
      unpackage/dist/build/mp-weixin/static/商城_商品2.png
  88. BIN
      unpackage/dist/build/mp-weixin/static/商城_积分明细框.png
  89. +0
    -0
      unpackage/dist/build/mp-weixin/static/待上传头像.png
  90. BIN
      unpackage/dist/build/mp-weixin/static/志愿者箭头.png
  91. BIN
      unpackage/dist/build/mp-weixin/static/成为志愿者.png
  92. BIN
      unpackage/dist/build/mp-weixin/static/我的.zip
  93. BIN
      unpackage/dist/build/mp-weixin/static/我的_兑换记录.png
  94. BIN
      unpackage/dist/build/mp-weixin/static/我的_关于我们.png
  95. BIN
      unpackage/dist/build/mp-weixin/static/我的_商品收藏.png
  96. BIN
      unpackage/dist/build/mp-weixin/static/我的_我的报名.png
  97. BIN
      unpackage/dist/build/mp-weixin/static/我的_我的资料.png
  98. BIN
      unpackage/dist/build/mp-weixin/static/我的_退出登录.png
  99. BIN
      unpackage/dist/build/mp-weixin/static/推荐活动.png
  100. BIN
      unpackage/dist/build/mp-weixin/static/活动日历.png

+ 3
- 3
App.vue View File

@ -2,9 +2,9 @@
export default {
onLaunch: function() {
console.log('App Launch')
uni.navigateTo({
url: '/subPages/login/login'
})
// uni.navigateTo({
// url: '/subPages/login/login'
// })
},
onShow: function() {
console.log('App Show')


+ 4
- 7
manifest.json View File

@ -54,13 +54,10 @@
"setting" : {
"urlCheck" : false
},
"requiredPrivateInfos": [
"getLocation",
"chooseLocation"
],
"permission": {
"scope.userLocation": {
"desc": "你的位置信息将用于定位"
"requiredPrivateInfos" : [ "getLocation", "chooseLocation" ],
"permission" : {
"scope.userLocation" : {
"desc" : "你的位置信息将用于定位"
}
},
"usingComponents" : true


+ 66
- 2
pages.json View File

@ -22,7 +22,8 @@
{
"path": "pages/index/community",
"style": {
"navigationStyle": "custom"
"navigationBarTitleText": "社区"
// "navigationStyle": "custom"
}
},
{
@ -52,7 +53,7 @@
"path": "login/userInfo",
"style": {
"navigationBarTitleText": "",
"navigationBarTitleText": "用户信息",
//
"navigationBarBackButtonHidden": true
}
@ -105,6 +106,69 @@
"style": {
"navigationBarTitleText": "积分详情"
}
},
{
"path": "community/publishPost",
"style": {
"navigationBarTitleText": "发布动态"
}
},
{
"path": "my/activityFavorites",
"style": {
// "navigationStyle": "custom",
"navigationBarTitleText": "活动收藏"
}
},
{
"path": "my/myProfile",
"style": {
"navigationBarTitleText": "我的资料"
}
},
{
"path": "my/myRegistrations",
"style": {
"navigationBarTitleText": "我的报名"
}
},
{
"path": "my/myActivityDetail",
"style": {
"navigationBarTitleText": "活动详情"
}
},
{
"path": "my/exchangeRecord",
"style": {
"navigationBarTitleText": "兑换记录"
}
},
{
"path": "my/exchangeDetail",
"style": {
"navigationBarTitleText": "商品详情"
}
},
{
"path": "my/productFavorites",
"style": {
// "navigationStyle": "custom",
"navigationBarTitleText": "商品收藏"
}
},
{
"path": "my/activityCheckin",
"style": {
// "navigationStyle": "custom"
"navigationBarTitleText": "活动签到"
}
},
{
"path": "my/checkinCode",
"style": {
"navigationBarTitleText": "签到码"
}
}
]
}


+ 400
- 0
pages/index/activity.vue View File

@ -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>

+ 361
- 0
pages/index/community.vue View File

@ -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>

+ 337
- 0
pages/index/my.vue View File

@ -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>

BIN
static/我的.zip View File


BIN
static/我的_兑换记录.png View File

Before After
Width: 65  |  Height: 65  |  Size: 2.4 KiB

BIN
static/我的_关于我们.png View File

Before After
Width: 65  |  Height: 65  |  Size: 3.4 KiB

BIN
static/我的_商品收藏.png View File

Before After
Width: 65  |  Height: 65  |  Size: 2.7 KiB

BIN
static/我的_我的报名.png View File

Before After
Width: 65  |  Height: 65  |  Size: 1.9 KiB

BIN
static/我的_我的资料.png View File

Before After
Width: 65  |  Height: 65  |  Size: 2.9 KiB

BIN
static/我的_退出登录.png View File

Before After
Width: 65  |  Height: 65  |  Size: 2.7 KiB

+ 326
- 0
subPages/community/publishPost.vue View File

@ -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>

+ 99
- 46
subPages/login/userInfo.vue View File

@ -20,14 +20,21 @@
<!-- 表单区域 -->
<view class="form-section">
<!-- 头像 -->
<!-- 在模板中修改头像区域 -->
<view class="form-item">
<text class="form-label">头像</text>
<view class="avatar-upload" @click="chooseAvatar">
<image
class="avatar-image"
:src="userInfo.avatar || '/static/待上传头像.png'"
mode="aspectFill"
></image>
<view class="avatar-upload">
<button
class="avatar-button"
open-type="chooseAvatar"
@chooseavatar="onChooseAvatar"
>
<image
class="avatar-image"
:src="userInfo.avatar || '/static/待上传头像.png'"
mode="aspectFill"
></image>
</button>
</view>
</view>
@ -54,9 +61,13 @@
type="number"
maxlength="11"
/>
<view class="get-phone-btn" @click="getPhoneNumber">
<button
class="get-phone-btn"
open-type="getPhoneNumber"
@getphonenumber="getPhoneNumber"
>
<text class="btn-text">获取手机号</text>
</view>
</button>
</view>
</view>
</view>
@ -104,26 +115,46 @@ export default {
},
//
chooseAvatar() {
uni.chooseMedia({
count: 1,
mediaType: ['image'],
sourceType: ['album', 'camera'],
success: (res) => {
const tempFilePath = res.tempFiles[0].tempFilePath;
this.userInfo.avatar = tempFilePath;
console.log('选择头像成功', tempFilePath);
},
fail: (err) => {
console.log('选择头像失败', err);
uni.showToast({
title: '选择头像失败',
icon: 'none'
});
}
});
//
// - 使
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'
});
}
},
// chooseAvatar
// chooseAvatar() {
// uni.chooseMedia({
// count: 1,
// mediaType: ['image'],
// sourceType: ['album', 'camera'],
// success: (res) => {
// const tempFilePath = res.tempFiles[0].tempFilePath;
// this.userInfo.avatar = tempFilePath;
// console.log('', tempFilePath);
// },
// fail: (err) => {
// console.log('', err);
// uni.showToast({
// title: '',
// icon: 'none'
// });
// }
// });
// },
//
onNicknameBlur() {
if (!this.userInfo.nickname.trim()) {
@ -135,22 +166,25 @@ export default {
},
//
getPhoneNumber() {
uni.showModal({
title: '提示',
content: '是否授权获取手机号?',
success: (res) => {
if (res.confirm) {
// getPhoneNumber
// buttonopen-type="getPhoneNumber"
uni.showToast({
title: '手机号获取功能需要在实际环境中实现',
icon: 'none',
duration: 2000
});
}
}
});
getPhoneNumber(e) {
console.log('获取手机号回调', e);
if (e.detail.errMsg === 'getPhoneNumber:ok') {
// e.detail.code
console.log('获取手机号成功', e.detail);
uni.showToast({
title: '手机号获取成功',
icon: 'success'
});
// e.detail.code
//
// this.userInfo.phone = '138****8888';
} else {
console.log('获取手机号失败', e.detail);
uni.showToast({
title: '获取手机号失败',
icon: 'none'
});
}
},
//
@ -282,10 +316,10 @@ export default {
}
.form-input {
flex: 1;
flex: 3;
height: 80rpx;
padding: 0 20rpx;
border: 2rpx solid #e0e0e0;
// border: 2rpx solid #e0e0e0;
border-radius: 10rpx;
font-size: 30rpx;
color: #333333;
@ -310,9 +344,16 @@ export default {
align-items: center;
.get-phone-btn {
padding: 20rpx 30rpx;
flex: 2;
// padding: 0rpx 0rpx;
background-color: #1488DB;
border-radius: 10rpx;
border-radius: 40rpx;
border: none;
outline: none;
&::after {
border: none;
}
.btn-text {
font-size: 26rpx;
@ -341,4 +382,16 @@ export default {
}
}
}
//
.avatar-button {
padding: 0;
margin: 0;
background: transparent;
border: none;
outline: none;
&::after {
border: none;
}
}
</style>

+ 223
- 0
subPages/my/activityCheckin.vue View File

@ -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>

+ 205
- 0
subPages/my/activityFavorites.vue View File

@ -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>

+ 268
- 0
subPages/my/checkinCode.vue View File

@ -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() {
// IDAPI
// 使
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>

+ 280
- 0
subPages/my/exchangeDetail.vue View File

@ -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>

+ 320
- 0
subPages/my/exchangeRecord.vue View File

@ -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>

+ 406
- 0
subPages/my/myActivityDetail.vue View File

@ -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>

+ 349
- 0
subPages/my/myProfile.vue View File

@ -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>

+ 339
- 0
subPages/my/myRegistrations.vue View File

@ -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>

+ 205
- 0
subPages/my/productFavorites.vue View File

@ -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
unpackage/dist/build/.automator/mp-weixin/.automator.json View File


+ 4
- 0
unpackage/dist/build/mp-weixin/app.js View File

@ -0,0 +1,4 @@
require('./common/runtime.js')
require('./common/vendor.js')
require('./common/main.js')

+ 91
- 0
unpackage/dist/build/mp-weixin/app.json View File

@ -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": {}
}

+ 3
- 0
unpackage/dist/build/mp-weixin/app.wxss View File

@ -0,0 +1,3 @@
@import './common/main.wxss';
[data-custom-hidden="true"],[bind-data-custom-hidden="true"]{display: none !important;}

+ 1
- 0
unpackage/dist/build/mp-weixin/common/main.js View File

@ -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"]]]);

+ 1
- 0
unpackage/dist/build/mp-weixin/common/main.wxss View File

@ -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)}}

+ 4
- 0
unpackage/dist/build/mp-weixin/common/runtime.js
File diff suppressed because it is too large
View File


+ 8
- 0
unpackage/dist/build/mp-weixin/common/vendor.js
File diff suppressed because it is too large
View File


+ 10
- 0
unpackage/dist/build/mp-weixin/pages/components/HomePageNav.js View File

@ -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']]
]);

+ 4
- 0
unpackage/dist/build/mp-weixin/pages/components/HomePageNav.json View File

@ -0,0 +1,4 @@
{
"component": true,
"usingComponents": {}
}

+ 1
- 0
unpackage/dist/build/mp-weixin/pages/components/HomePageNav.wxml View File

@ -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>

+ 1
- 0
unpackage/dist/build/mp-weixin/pages/components/HomePageNav.wxss View File

@ -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}

+ 10
- 0
unpackage/dist/build/mp-weixin/pages/components/index/RecommendedActivities.js View File

@ -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']]
]);

+ 7
- 0
unpackage/dist/build/mp-weixin/pages/components/index/RecommendedActivities.json View File

@ -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
}

+ 1
- 0
unpackage/dist/build/mp-weixin/pages/components/index/RecommendedActivities.wxml View File

@ -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>

+ 1
- 0
unpackage/dist/build/mp-weixin/pages/components/index/RecommendedActivities.wxss View File

@ -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}

+ 10
- 0
unpackage/dist/build/mp-weixin/pages/components/index/VolunteerFeatures.js View File

@ -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']]
]);

unpackage/dist/dev/mp-weixin/uni_modules/uv-checkbox/components/uv-checkbox-group/uv-checkbox-group.json → unpackage/dist/build/mp-weixin/pages/components/index/VolunteerFeatures.json View File


+ 1
- 0
unpackage/dist/build/mp-weixin/pages/components/index/VolunteerFeatures.wxml View File

@ -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>

+ 1
- 0
unpackage/dist/build/mp-weixin/pages/components/index/VolunteerFeatures.wxss View File

@ -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}

+ 10
- 0
unpackage/dist/build/mp-weixin/pages/components/index/VolunteerHeader.js View File

@ -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']]
]);

+ 7
- 0
unpackage/dist/build/mp-weixin/pages/components/index/VolunteerHeader.json View File

@ -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
}

+ 1
- 0
unpackage/dist/build/mp-weixin/pages/components/index/VolunteerHeader.wxml View File

@ -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>

+ 1
- 0
unpackage/dist/build/mp-weixin/pages/components/index/VolunteerHeader.wxss View File

@ -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}

+ 10
- 0
unpackage/dist/build/mp-weixin/pages/components/index/VolunteerRanking.js View File

@ -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']]
]);

unpackage/dist/dev/mp-weixin/uni_modules/uv-checkbox/components/uv-checkbox/uv-checkbox.json → unpackage/dist/build/mp-weixin/pages/components/index/VolunteerRanking.json View File


+ 1
- 0
unpackage/dist/build/mp-weixin/pages/components/index/VolunteerRanking.wxml View File

@ -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>

+ 1
- 0
unpackage/dist/build/mp-weixin/pages/components/index/VolunteerRanking.wxss View File

@ -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}

+ 10
- 0
unpackage/dist/build/mp-weixin/pages/components/shop/PointsCard.js View File

@ -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']]
]);

+ 4
- 0
unpackage/dist/build/mp-weixin/pages/components/shop/PointsCard.json View File

@ -0,0 +1,4 @@
{
"usingComponents": {},
"component": true
}

+ 1
- 0
unpackage/dist/build/mp-weixin/pages/components/shop/PointsCard.wxml View File

@ -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>

+ 1
- 0
unpackage/dist/build/mp-weixin/pages/components/shop/PointsCard.wxss View File

@ -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}

+ 10
- 0
unpackage/dist/build/mp-weixin/pages/components/shop/ShopContent.js View File

@ -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']]
]);

+ 8
- 0
unpackage/dist/build/mp-weixin/pages/components/shop/ShopContent.json View File

@ -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
}

+ 1
- 0
unpackage/dist/build/mp-weixin/pages/components/shop/ShopContent.wxml View File

@ -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>

+ 1
- 0
unpackage/dist/build/mp-weixin/pages/components/shop/ShopContent.wxss View File

@ -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}

+ 1
- 0
unpackage/dist/build/mp-weixin/pages/index/activity.js View File

@ -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"]]]);

+ 9
- 0
unpackage/dist/build/mp-weixin/pages/index/activity.json View File

@ -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"
}
}

+ 1
- 0
unpackage/dist/build/mp-weixin/pages/index/activity.wxml View File

@ -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>

+ 11
- 0
unpackage/dist/build/mp-weixin/pages/index/activity.wxss View File

@ -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}

+ 1
- 0
unpackage/dist/build/mp-weixin/pages/index/community.js View File

@ -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"]]]);

+ 6
- 0
unpackage/dist/build/mp-weixin/pages/index/community.json View File

@ -0,0 +1,6 @@
{
"navigationBarTitleText": "社区",
"usingComponents": {
"uv-icon": "/uni_modules/uv-icon/components/uv-icon/uv-icon"
}
}

+ 1
- 0
unpackage/dist/build/mp-weixin/pages/index/community.wxml View File

@ -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>

+ 1
- 0
unpackage/dist/build/mp-weixin/pages/index/community.wxss View File

@ -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}

+ 1
- 0
unpackage/dist/build/mp-weixin/pages/index/index.js View File

@ -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"]]]);

+ 10
- 0
unpackage/dist/build/mp-weixin/pages/index/index.json View File

@ -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"
}
}

+ 1
- 0
unpackage/dist/build/mp-weixin/pages/index/index.wxml View File

@ -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>

+ 1
- 0
unpackage/dist/build/mp-weixin/pages/index/index.wxss View File

@ -0,0 +1 @@
.volunteer-day-container.data-v-5131224c{min-height:100vh;background-color:#f5f5f5;padding-bottom:30rpx}

+ 1
- 0
unpackage/dist/build/mp-weixin/pages/index/my.js View File

@ -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"]]]);

+ 6
- 0
unpackage/dist/build/mp-weixin/pages/index/my.json View File

@ -0,0 +1,6 @@
{
"navigationStyle": "custom",
"usingComponents": {
"uv-icon": "/uni_modules/uv-icon/components/uv-icon/uv-icon"
}
}

+ 1
- 0
unpackage/dist/build/mp-weixin/pages/index/my.wxml View File

@ -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>

+ 1
- 0
unpackage/dist/build/mp-weixin/pages/index/my.wxss View File

@ -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}

+ 1
- 0
unpackage/dist/build/mp-weixin/pages/index/shop.js View File

@ -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"]]]);

+ 8
- 0
unpackage/dist/build/mp-weixin/pages/index/shop.json View File

@ -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"
}
}

+ 1
- 0
unpackage/dist/build/mp-weixin/pages/index/shop.wxml View File

@ -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>

+ 1
- 0
unpackage/dist/build/mp-weixin/pages/index/shop.wxss View File

@ -0,0 +1 @@
.shop-page.data-v-240c5962{min-height:100vh;background:#f8f8f8}

+ 29
- 0
unpackage/dist/build/mp-weixin/project.config.json View File

@ -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
}
}

+ 7
- 0
unpackage/dist/build/mp-weixin/project.private.config.json View File

@ -0,0 +1,7 @@
{
"description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
"projectname": "木邻有你",
"setting": {
"compileHotReLoad": true
}
}

BIN
unpackage/dist/build/mp-weixin/static/bannerImage.png View File

Before After
Width: 709  |  Height: 275  |  Size: 158 KiB

unpackage/dist/dev/mp-weixin/static/组件 81 – 1@2x.png → unpackage/dist/build/mp-weixin/static/logo.png View File


BIN
unpackage/dist/build/mp-weixin/static/可用积分背景图.png View File

Before After
Width: 724  |  Height: 290  |  Size: 27 KiB

BIN
unpackage/dist/build/mp-weixin/static/商城_商品1.png View File

Before After
Width: 227  |  Height: 227  |  Size: 99 KiB

BIN
unpackage/dist/build/mp-weixin/static/商城_商品2.png View File

Before After
Width: 229  |  Height: 229  |  Size: 68 KiB

BIN
unpackage/dist/build/mp-weixin/static/商城_积分明细框.png View File

Before After
Width: 149  |  Height: 65  |  Size: 2.9 KiB

unpackage/dist/dev/mp-weixin/static/组件 94 – 1@2x.png → unpackage/dist/build/mp-weixin/static/待上传头像.png View File


BIN
unpackage/dist/build/mp-weixin/static/志愿者箭头.png View File

Before After
Width: 56  |  Height: 29  |  Size: 1.1 KiB

BIN
unpackage/dist/build/mp-weixin/static/成为志愿者.png View File

Before After
Width: 334  |  Height: 451  |  Size: 20 KiB

BIN
unpackage/dist/build/mp-weixin/static/我的.zip View File


BIN
unpackage/dist/build/mp-weixin/static/我的_兑换记录.png View File

Before After
Width: 65  |  Height: 65  |  Size: 2.4 KiB

BIN
unpackage/dist/build/mp-weixin/static/我的_关于我们.png View File

Before After
Width: 65  |  Height: 65  |  Size: 3.4 KiB

BIN
unpackage/dist/build/mp-weixin/static/我的_商品收藏.png View File

Before After
Width: 65  |  Height: 65  |  Size: 2.7 KiB

BIN
unpackage/dist/build/mp-weixin/static/我的_我的报名.png View File

Before After
Width: 65  |  Height: 65  |  Size: 1.9 KiB

BIN
unpackage/dist/build/mp-weixin/static/我的_我的资料.png View File

Before After
Width: 65  |  Height: 65  |  Size: 2.9 KiB

BIN
unpackage/dist/build/mp-weixin/static/我的_退出登录.png View File

Before After
Width: 65  |  Height: 65  |  Size: 2.7 KiB

BIN
unpackage/dist/build/mp-weixin/static/推荐活动.png View File

Before After
Width: 158  |  Height: 50  |  Size: 3.6 KiB

BIN
unpackage/dist/build/mp-weixin/static/活动日历.png View File

Before After
Width: 322  |  Height: 213  |  Size: 8.6 KiB

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save