feat:邀请福利;特权文本修改;用户列表显示相册总数;动态页顶部轮播图;logo;

This commit is contained in:
ctw committed 2025-12-08 17:09:09 +08:00
1 parent 497f31a66c
commit 0be6d590e4
25 files changed
+118 -71

No files matched your search

+4 -4
View File
@@ -437,10 +437,10 @@
this.userStore
.loadUser()
.then((userInfo) => {
uni.showToast({
title: '连接已断开,尝试重新连接...',
icon: 'none',
});
// uni.showToast({
// title: '连接已断开,尝试重新连接...',
// icon: 'none',
// });
// 重新连接
let loginInfo = uni.getStorageSync('loginInfo');
wsApi.reconnect(CHAT_ENV.WS_URL, loginInfo.accessToken);
+42 -29
View File
@@ -14,46 +14,59 @@
</template>
</wd-navbar>
<swiper :current="current" style="height: calc(100vh - 44rpx - 100rpx)"
@change="(e) => (current = e.detail.current)" :duration="200" disable-touch>
<swiper
:current="current"
style="height: calc(100vh - 44rpx - 100rpx)"
@change="(e) => (current = e.detail.current)"
:duration="200"
disable-touch
>
<swiper-item v-for="(item, index) in segmentedItems" :key="index">
<scroll-user :scene="item['search-action']" />
</swiper-item>
</swiper>
</wd-config-provider>
<navigator url="/pages/wechat/index" open-type="navigate" hover-class="navigator-hover">
<image
class="size-120rpx fixed right-0 bottom-160"
src="@/static/invitation-activity.png"
mode="aspectFit"
/>
</navigator>
<s-auth-modal />
</template>
<script setup lang="ts">
import { computed, ref } from 'vue';
import segmented from '@/sheep/components/segmented/segmented.vue';
import RecentApi from '@/sheep/api/member/recent';
import ScrollUser from './components/scroll-user.vue';
// @ts-ignore
import sheep from '@/sheep';
import { onLoad } from '@dcloudio/uni-app';
import { computed, ref } from 'vue';
import segmented from '@/sheep/components/segmented/segmented.vue';
import RecentApi from '@/sheep/api/member/recent';
import ScrollUser from './components/scroll-user.vue';
// @ts-ignore
import sheep from '@/sheep';
import { onLoad } from '@dcloudio/uni-app';
const current = ref(0);
const segmentedItems = ref([]);
const userCity = computed(() => sheep.$store('user').userCity);
const current = ref(0);
const segmentedItems = ref([]);
const userCity = computed(() => sheep.$store('user').userCity);
onLoad(async () => {
// 获取顶部导航栏tab菜单
const { data } = await RecentApi.getSquareTabMenu();
if (data && data.length > 0) {
segmentedItems.value = data;
}
});
const goSelectAddress = () => {
uni.navigateTo({
url: '/pages/home/city',
events: {
changeCity: async () => {
// await refreshList();
},
},
onLoad(async () => {
// 获取顶部导航栏tab菜单
const { data } = await RecentApi.getSquareTabMenu();
if (data && data.length > 0) {
segmentedItems.value = data;
}
});
};
const goSelectAddress = () => {
uni.navigateTo({
url: '/pages/home/city',
events: {
changeCity: async () => {
// await refreshList();
},
},
});
};
</script>
+12 -14
View File
@@ -7,28 +7,18 @@
:scroll-top="scrollTop"
>
<swiper
class="h-300rpx mx-4"
class="h-300rpx mt-2"
indicator-dots
indicator-color="#fff"
indicator-active-color="#D29E52"
autoplay
circular
>
<swiper-item>
<image
class="w-full h-full rounded-20rpx"
src="https://img3.redocn.com/tupian/20160316/qingxinpugongyingqingxinbeijing_6012341.jpg"
mode="aspectFill"
/>
</swiper-item>
<swiper-item>
<image
class="w-full h-full rounded-20rpx"
src="https://img3.redocn.com/tupian/20160316/qingxinpugongyingqingxinbeijing_6012341.jpg"
mode="aspectFill"
/>
<swiper-item v-for="(item, index) in bannerList" :key="index" class="text-center">
<image class="w-90% h-full rounded-20rpx" :src="item.picUrl" mode="aspectFill" />
</swiper-item>
</swiper>
<view v-if="isRefreshing" class="flex px-4 py-4" v-for="index in 3" :key="index">
<wd-skeleton :row-col="[{ size: '50px', type: 'circle' }]" animation="flashed" />
<wd-skeleton
@@ -72,11 +62,19 @@
RecentApi.quickPage,
params,
);
const bannerList = ref<any>([]);
onMounted(() => {
refreshList();
getBannerList();
});
const getBannerList = async () => {
const { code, data = null } = await RecentApi.getBannerList();
if (code !== 0) return;
bannerList.value = data ?? [];
};
watch(
() => userCity.value,
async (city) => {
+13 -13
View File
@@ -80,9 +80,7 @@
<!-- 协议 -->
<view class="mt-4 px-4 text-xs text-gray leading-relaxed text-center">
开通即视为同意
<text class="text-color-theme-dark">《VIP会员协议》</text>
和
<text class="text-color-theme-dark">《会员充值协议》</text>
<text class="text-color-theme-dark">《荷塘月色会员协议》</text>
</view>
<view
@@ -94,16 +92,17 @@
</view>
<view class="mt-6 px-4">
<view class="grid grid-cols-2 gap-3">
<view class="grid grid-cols-3 gap-2">
<view
v-for="(item, index) in benefits"
:key="index"
class="p-3 rounded-2 bg-#111 flex items-center"
class="p-2 flex flex-col items-center"
>
<view class="flex-1">
<view class="text-sm mb-1">{{ item.title }}</view>
<view class="text-xs text-#ffffff80">{{ item.desc }}</view>
<view class="mb-1 size-120rpx rounded-full bg-#333 text-center line-height-120rpx">
<uni-icons :type="item.icon" size="32" color="#d29e52"></uni-icons>
</view>
<view class="text-base text-color-theme-dark whitespace-normal">{{ item.desc }}</view>
<view class="text-xs text-color-theme-dark whitespace-normal">{{ item.subDesc }}</view>
</view>
</view>
</view>
@@ -137,11 +136,12 @@
createTime: number;
}
const benefits = [
{ title: '无限次打招呼', desc: '每天畅聊不设上限,优先曝光给心仪的人' },
{ title: '优先展示', desc: '在附近和推荐列表中获得更高权重' },
{ title: '查看谁喜欢我', desc: '查看所有喜欢你的用户' },
{ title: '专属身份标识', desc: '昵称后展示 VIP 标识,提升可信度' },
const benefits: any = [
{ icon: 'chat-filled', desc: '解锁微信', subDesc: '每天10个' },
{ icon: 'chatboxes-filled', desc: '无限畅聊', subDesc: '每天10个' },
{ icon: 'vip-filled', desc: '尊贵身份', subDesc: '专属标识' },
{ icon: 'locked-filled', desc: '个人身份', subDesc: '安全保密' },
{ icon: 'medal-filled', desc: '更多特权', subDesc: '敬请期待' },
];
const payMethod = ref<'alipay' | 'wechat'>('alipay'); // 支付方式:alipay / wechat
const openTypeList = ref<OpenTypeItem[]>([]); // 会员类型列表
+25 -6
View File
@@ -27,11 +27,13 @@
</view>
<view class="mb-2 text-xs text-#ffffff80 flex items-center">
<text>ID: {{ userInfo.id }}</text>
<text
class="font-bold font-italic text-xs ml-2 text-color-dark bg-color-theme-dark px-1 rounded-1"
<view
v-if="userInfo.memberVip?.vip"
class="text-20rpx ml-2 flex-row-center bg-color-theme-dark px-1 rounded-1"
>
VIP
</text>
<uni-icons type="vip-filled" size="14" />
<text class="text-color-dark ml-1">VIP</text>
</view>
</view>
<text
v-if="userCity?.t"
@@ -80,7 +82,7 @@
<view class="flex items-center">
<text class="text-xs">尊享vip免费特权</text>
<navigator
v-if="!userInfo.memberVip.vip"
v-if="!userInfo.memberVip?.vip"
url="/pages/profile/apply-vip"
open-type="navigate"
hover-class="navigator-hover"
@@ -97,8 +99,25 @@
<!-- 用户相册 -->
<user-ablum :ablumList="ablumList" />
<!-- 邀请福利 -->
<view class="bg-gradient-to-r from-#d29e52 to-#333 py-2 px-4 rounded-2 mx-4 c-black">
<view class="flex justify-between items-center">
<view class="flex items-center">
<view class="bg-black rounded-full size-40rpx flex-row-center">
<uni-icons type="redo-filled" size="12" color="#d29e52"></uni-icons>
</view>
<text class="text-xs ml-2">邀请福利</text>
<text class="text-20rpx ml-4 mt-2rpx">邀请用户领会员</text>
</view>
<navigator url="/pages/wechat/index" open-type="navigate" hover-class="navigator-hover">
<view class="bg-color-theme text-xs rounded-full py-1 px-3">查看福利</view>
</navigator>
</view>
</view>
<!-- 菜单 -->
<view class="mt-4 mx-1">
<view class="mt-2 mx-1">
<wd-cell-group>
<wd-cell
v-for="(item, index) in MenuCellList"
+12
View File
@@ -116,6 +116,18 @@ const RecentApi = {
},
});
},
// 动态页面的轮播图
getBannerList: (params?: any) => {
return request({
url: '/promotion/banner/list',
method: 'GET',
params: { position: '6' }, // 轮播图位置写死6代表动态页面的轮播图
custom: {
showLoading: true,
loadingMsg: '加载中',
},
});
},
// 查看我的评价
myEvaluate: () => {
return request({
+10 -5
View File
@@ -1,11 +1,16 @@
<template>
<view>
<view class="flex px-4 py-2">
<image
class="w-200rpx h-300rpx mr-3 rounded-2 bg-#777"
:src="member.memberAvatar"
mode="aspectFill"
/>
<view class="w-200rpx h-300rpx rounded-2 bg-#777 mr-3 relative">
<image class="size-full rounded-2" :src="member.memberAvatar" mode="aspectFill" />
<view
v-if="data.memberPhotoTotal?.total"
class="absolute left-0 bottom-0 bg-#22222277 rounded-rt-2 rounded-lb-2 flex-row-center px-1 line-height-28rpx"
>
<uni-icons type="image" color="#fff" size="12" />
<text class="text-16rpx ml-0.5">{{ data.memberPhotoTotal.total }}</text>
</view>
</view>
<view class="flex-1 overflow-hidden">
<view class="flex justify-between items-center mt-2">
<text class="text-sm truncate">{{ member.memberNickname }}</text>
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 168 KiB

After

Width:  |  Height:  |  Size: 448 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.9 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 831 B

After

Width:  |  Height:  |  Size: 770 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

After

Width:  |  Height:  |  Size: 8.8 KiB