feat:邀请福利;特权文本修改;用户列表显示相册总数;动态页顶部轮播图;logo;
No files matched your search
@@ -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);
|
||||
|
||||
@@ -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>
|
||||
@@ -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) => {
|
||||
|
||||
@@ -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[]>([]); // 会员类型列表
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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({
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
After Width: | Height: | Size: 2.6 MiB |
|
Before Width: | Height: | Size: 168 KiB After Width: | Height: | Size: 448 KiB |
|
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 831 B After Width: | Height: | Size: 770 B |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.8 KiB |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 4.0 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 5.4 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 5.9 KiB |
|
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 6.5 KiB |
|
Before Width: | Height: | Size: 6.0 KiB After Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 8.8 KiB |