2 Commits

Author SHA1 Message Date
pcwl_yancheng f214a61735 修复bug 2026-06-22 14:24:08 +08:00
pcwl_yancheng 3fb5db48f2 修改 2026-06-18 21:04:03 +08:00
4 changed files with 214 additions and 229 deletions
+2 -2
View File
@@ -2,8 +2,8 @@
"name" : "CHEFLINK delivery",
"appid" : "__UNI__06509BE",
"description" : "",
"versionName" : "3.2.9",
"versionCode" : 329,
"versionName" : "3.3.2",
"versionCode" : 332,
"transformPx" : false,
/* 5+App */
"app-plus" : {
+55 -4
View File
@@ -1419,6 +1419,51 @@ const isUserMemberCheckout = computed(() => {
return false;
});
function getCheckoutCartItemDiscountPrice(item: MerchantCartVo) {
return item.discountPrice ?? item.merchantDishVo?.discountPrice;
}
function getCheckoutCartItemOriginalPrice(item: MerchantCartVo) {
return item.originalPrice ?? item.merchantDishVo?.originalPrice;
}
function getCheckoutCartItemMemberPrice(item: MerchantCartVo) {
return item.memberPrice ?? item.merchantDishVo?.memberPrice;
}
function normalizeCheckoutPriceString(val: unknown) {
const s = String(val ?? '').trim();
if (!/^\d+(\.\d+)?$/.test(s)) return '0';
const [intRaw, decRaw = ''] = s.split('.');
const intPart = intRaw.replace(/^0+(?=\d)/, '') || '0';
const decPart = decRaw.slice(0, 2).padEnd(2, '0');
return `${intPart}.${decPart}`;
}
function checkoutPriceToCentString(val: unknown) {
const normalized = normalizeCheckoutPriceString(val);
const [intPart, decPart = '00'] = normalized.split('.');
return `${intPart}${decPart}`.replace(/^0+(?=\d)/, '') || '0';
}
/** 与购物车列表一致:会员展示会员价,非会员展示折扣价 */
function getCheckoutLineDisplayPrice(item: MerchantCartVo) {
if (isUserMemberCheckout.value) {
return getCheckoutCartItemMemberPrice(item);
}
return getCheckoutCartItemDiscountPrice(item);
}
/** 与购物车列表一致:划线原价与当前展示价不一致时显示 */
function showCheckoutLineOriginalPrice(item: MerchantCartVo) {
const originalCent = checkoutPriceToCentString(getCheckoutCartItemOriginalPrice(item));
const currentCent =
isUserMemberCheckout.value && checkoutPriceToCentString(getCheckoutCartItemMemberPrice(item)) !== '0'
? checkoutPriceToCentString(getCheckoutCartItemMemberPrice(item))
: checkoutPriceToCentString(getCheckoutCartItemDiscountPrice(item));
return originalCent !== '0' && originalCent !== currentCent;
}
const cartTotalPieceCount = computed(() => {
if (orderType.value === 'batch') {
let n = 0;
@@ -1773,7 +1818,13 @@ function handleClose(merchantId?: string) {
</view>
</view>
</view>
<view class="text-30rpx text-#333 font-500 shrink-0 ml-16rpx">${{ item.merchantDishVo?.discountPrice }}</view>
<view class="checkout-order-line-price shrink-0 ml-16rpx text-right">
<view class="text-30rpx text-#333 font-500">${{ getCheckoutLineDisplayPrice(item) }}</view>
<view
v-if="showCheckoutLineOriginalPrice(item)"
class="text-24rpx text-#7D7D7D line-through mt-4rpx"
>${{ getCheckoutCartItemOriginalPrice(item) }}</view>
</view>
</view>
</wd-collapse-item>
</wd-collapse>
@@ -1863,11 +1914,11 @@ function handleClose(merchantId?: string) {
<view class="flex items-center justify-between mt-12rpx">
<view class="flex items-center">
<text class="text-[#333333] text-28rpx font-500"
>${{ item.merchantDishVo?.discountPrice }}</text>
>${{ getCheckoutLineDisplayPrice(item) }}</text>
<text
v-if="item.merchantDishVo?.originalPrice && item.merchantDishVo?.originalPrice !== item.merchantDishVo?.discountPrice"
v-if="showCheckoutLineOriginalPrice(item)"
class="text-[#7D7D7D] text-22rpx line-through ml-8rpx"
>${{ item.merchantDishVo?.originalPrice }}</text>
>${{ getCheckoutCartItemOriginalPrice(item) }}</text>
</view>
<view class="text-[#7D7D7D] text-22rpx">
x{{ item.count }}
@@ -2,7 +2,7 @@
import { ref, computed } from 'vue'
import { useI18n } from 'vue-i18n'
import useEventEmit from "@/hooks/useEventEmit";
import {CollectionType, EventEnum} from "@/constant/enums";
import { CollectionType, EventEnum } from "@/constant/enums";
import { useConfigStore, useUserStore } from "@/store";
import Config from '@/config/index'
import { debounce } from 'throttle-debounce'
@@ -26,7 +26,7 @@ import {
appRecipeCategoryListGet
} from "@/service";
import usePage from "@/hooks/usePage";
import {getFeaturedDishList} from "@/pages-store/service";
import { getFeaturedDishList } from "@/pages-store/service";
import {
buildQuickTopicUrl,
isQuickTopicSlug,
@@ -44,12 +44,12 @@ const { t, locale } = useI18n();
/** 首页运营图:按语言切换(中文 / 英文) */
const HOME_PROMO_BANNERS = {
memberUpgrade: {
zh: 'https://www.howhowfresh.com/minio/ruoyi/2026/06/05/d4a0d40503ac4206a0387af1ab869de6.png',
en: 'https://www.howhowfresh.com/minio/ruoyi/2026/06/05/c01f1664626d417a9a7ca6165a20f06f.png',
zh: 'https://www.howhowfresh.com/minio/ruoyi/2026/06/18/edb822ef721642b39e52f19b2e5df949.png',
en: 'https://www.howhowfresh.com/minio/ruoyi/2026/06/18/6a8a43575f70425eb6b8071633708531.png',
},
deliveryTime: {
zh: 'https://www.howhowfresh.com/minio/ruoyi/2026/06/03/c5673a8874594755bdde7ed7fcbd1982.jpg',
en: 'https://www.howhowfresh.com/minio/ruoyi/2026/06/03/1da02f1e0af34cea91a4f643247176be.png',
zh: 'https://www.howhowfresh.com/minio/ruoyi/2026/06/18/8a0fcfab0a6e4ff29fdecdc41e01ebdb.png',
en: 'https://www.howhowfresh.com/minio/ruoyi/2026/06/18/99c6b38e7f1e4337baee0ec5e42c76ba.png',
},
} as const
@@ -84,7 +84,7 @@ function getDishPromoLabel(item: Record<string, unknown>): string {
function navigateTo(url: string) {
if(userStore.checkLogin()) {
if (userStore.checkLogin()) {
uni.navigateTo({
url,
});
@@ -95,7 +95,7 @@ const swiperList = ref<any[]>([])
async function initData() {
// 只在首次加载时显示骨架屏,避免切换时的白屏
if(featuredList.value.length === 0) {
if (featuredList.value.length === 0) {
loading.value = true
}
getAppMarketActivityList()
@@ -168,9 +168,9 @@ function getAppFeaturedList() {
lat: userStore.userLocation.latitude,
lng: userStore.userLocation.longitude,
}
}).then(res=> {
}).then(res => {
featuredList.value = res.data || []
}).finally(()=> {
}).finally(() => {
loading.value = false
})
}
@@ -183,7 +183,7 @@ function getAppNearbyListPost() {
lat: userStore.userLocation.latitude,
lng: userStore.userLocation.longitude,
}
}).then(res=> {
}).then(res => {
nearbyList.value = res.data || []
})
}
@@ -200,7 +200,7 @@ function toggleDiscount(value: number) {
discount.value = value;
// paging.value.refresh()
}
const {paging, dataList, queryList} = usePage(getList)
const { paging, dataList, queryList } = usePage(getList)
function getList(pageNum: number, pageSize: number) {
return new Promise(resolve => {
getFeaturedDishList({
@@ -208,7 +208,7 @@ function getList(pageNum: number, pageSize: number) {
pageSize,
}).then(res => {
console.log('查询精选菜品列表', res)
resolve({rows: res.rows})
resolve({ rows: res.rows })
})
})
}
@@ -263,8 +263,8 @@ function tabsTypeChange(id: string | number) {
}
// 是否展示精选商家和附近商家 true 显示 false隐藏
const isShowMerchant = computed(()=> {
if(!selfPickup.value && !discount.value && !props.scoreRange && !props.price && !currentCategory.value) {
const isShowMerchant = computed(() => {
if (!selfPickup.value && !discount.value && !props.scoreRange && !props.price && !currentCategory.value) {
return true // 没有筛选条件时显示
} else {
return true // 有筛选条件时隐藏
@@ -321,9 +321,9 @@ function handleClickSwiper(item: any) {
case 5: // 充值活动
navigateTo('/pages-user/pages/recharge/activity-detail?id=' + item.id)
break
// case 4:
// navigateTo('/pages/ai/chat/index')
// break
// case 4:
// navigateTo('/pages/ai/chat/index')
// break
}
}
@@ -334,19 +334,19 @@ function navigateToDishes(item: any) {
}
// 收藏菜品
function handleDishCollectionClick(item: any) {
debouncedEmit(item.isCollect, item.id, CollectionType.DISH, ()=> {
debouncedEmit(item.isCollect, item.id, CollectionType.DISH, () => {
item.isCollect = !item.isCollect
})
}
// 防抖处理函数
const debouncedEmit = debounce(1300, (isCollected: boolean, id: string, type: CollectionType, callback: ()=> void) => {
const debouncedEmit = debounce(1300, (isCollected: boolean, id: string, type: CollectionType, callback: () => void) => {
// 收藏接口
appCollectCollectPost({
body: {
targetId: id,
targetType: type
}
}).then(res=> {
}).then(res => {
callback()
})
}, {
@@ -355,210 +355,140 @@ const debouncedEmit = debounce(1300, (isCollected: boolean, id: string, type: Co
</script>
<template>
<view
class="home-page-root"
:style="[
{
height: configStore.windowHeight + 'px',
},
]"
>
<z-paging @onRefresh="onRefresh" ref="paging" v-model="dataList" :auto="false" @query="queryList" @scroll="onPageScroll" :refresher-enabled="true" :auto-show-back-to-top="false">
<template #top>
<status-bar />
<home-top-header
:app-name="Config.appName"
:location-text="userStore.userLocation.location"
:cart-badge-total="cartBadgeTotal"
:is-login="userStore.isLogin"
@click-location="navigateTo('/pages-user/pages/search-address/index')"
@click-cart="goCart"
/>
</template>
<view
class="animate-in fade-in animate-ease-out animate-duration-300"
v-show="loading && featuredList.length === 0"
>
<home-skeleton />
<view class="home-page-root" :style="[
{
height: configStore.windowHeight + 'px',
},
]">
<z-paging @onRefresh="onRefresh" ref="paging" v-model="dataList" :auto="false" @query="queryList"
@scroll="onPageScroll" :refresher-enabled="true" :auto-show-back-to-top="false">
<template #top>
<status-bar />
<home-top-header :app-name="Config.appName" :location-text="userStore.userLocation.location"
:cart-badge-total="cartBadgeTotal" :is-login="userStore.isLogin"
@click-location="navigateTo('/pages-user/pages/search-address/index')" @click-cart="goCart" />
</template>
<view class="animate-in fade-in animate-ease-out animate-duration-300"
v-show="loading && featuredList.length === 0">
<home-skeleton />
</view>
<view class="px-24rpx pt-12rpx pb-8rpx">
<search />
<msg-box />
<!-- 分类标签 -->
<view class="mt-28rpx" v-if="appMerchantLabelList.length > 0">
<class-bullet :categories="appMerchantLabelList" @itemClick="handleItemClick" />
</view>
<view class="px-24rpx pt-12rpx pb-8rpx">
<search />
<msg-box />
<!-- 分类标签 -->
<view class="mt-28rpx" v-if="appMerchantLabelList.length > 0">
<class-bullet :categories="appMerchantLabelList" @itemClick="handleItemClick" />
</view>
<!-- 轮播图/app/marketActivity/list -->
<swiper v-if="swiperList.length > 0" class="card-swiper" :circular="swiperList.length > 1"
:autoplay="swiperList.length > 1">
<swiper-item v-for="(item, sIdx) in swiperList" :key="item.id ?? sIdx" @click="handleClickSwiper(item)">
<image :src="item.activityImage" class="swiper-item-content w-full h-100%" mode="scaleToFill"></image>
</swiper-item>
</swiper>
<!-- 快捷入口固定五项跳转精选菜品专题页 -->
<tabs-type :current-id="currentCategory" class="mt-28rpx mb-24rpx home-tabs-quick"
@change-type="tabsTypeChange" />
<view class="home-promo-block px-24rpx">
<image :src="memberUpgradeBannerSrc" class="home-promo-banner-img" mode="widthFix" />
<view class="home-promo-actions">
<view class="home-promo-btn" @click="navigateTo('/pages-user/pages/member/index')">
<text class="home-promo-btn-text">{{ t('pages.home.open-member') }}</text>
</view>
<view class="home-promo-btn" @click="navigateTo('/pages-user/pages/recharge/index')">
<text class="home-promo-btn-text">{{ t('pages.home.recharge-now') }}</text>
</view>
</view>
<!-- 轮播图/app/marketActivity/list -->
<swiper
v-if="swiperList.length > 0"
class="card-swiper"
:circular="swiperList.length > 1"
:autoplay="swiperList.length > 1"
>
<swiper-item
v-for="(item, sIdx) in swiperList"
:key="item.id ?? sIdx"
@click="handleClickSwiper(item)"
>
<image
:src="item.activityImage"
class="swiper-item-content w-full h-100%"
mode="scaleToFill"
></image>
</swiper-item>
</swiper>
<!-- 快捷入口固定五项跳转精选菜品专题页 -->
<tabs-type
:current-id="currentCategory"
class="mt-28rpx mb-24rpx home-tabs-quick"
@change-type="tabsTypeChange"
/>
<view
class="home-member-banner"
:style="{ backgroundImage: `url(${memberUpgradeBannerSrc})` }"
>
<view class="home-member-banner__actions">
<view
class="home-member-banner__btn"
@click="navigateTo('/pages-user/pages/member/index')"
>
<text class="home-member-banner__btn-text">{{ t('pages.home.open-member') }}</text>
</view>
<view
class="home-member-banner__btn"
@click="navigateTo('/pages-user/pages/recharge/index')"
>
<text class="home-member-banner__btn-text">{{ t('pages.home.recharge-now') }}</text>
</view>
</view>
</view>
<image
:src="deliveryTimeBannerSrc"
class="w-100% h-[200rpx] rounded-24rpx mt-4rpx"
mode="widthFix"
/>
<!-- 精选商家和附近商家 -->
<view class="animate-in fade-in animate-ease-in animate-duration-300" v-if="isShowMerchant">
<!-- Featured on ChefLink 精选商家浅底 + 横向卡片对齐设计稿 -->
<view v-if="featuredList.length > 0" class="featured-merchants-section mt-36rpx px-24rpx pt-8rpx pb-16rpx">
<view class="mb-24rpx px-6rpx text-28rpx lh-36rpx text-#1a1a1a">
{{ t('pages.home.featured-on') }}
</view>
<featured-on :list="featuredList" />
</view>
<!-- Nearby Merchants 附近商家 -->
<view v-if="nearbyList.length > 0" class="nearby-merchants-block mt-36rpx px-24rpx pb-16rpx">
<view class="mb-24rpx px-6rpx text-28rpx lh-36rpx text-#1a1a1a ">
{{ t('pages.home.nearby-merchants') }}
</view>
<nearby-merchants :list="nearbyList" />
<image :src="deliveryTimeBannerSrc" class="home-promo-banner-img" mode="widthFix" />
</view>
<!-- 精选商家和附近商家 -->
<view class="animate-in fade-in animate-ease-in animate-duration-300" v-if="isShowMerchant">
<!-- Featured on ChefLink 精选商家浅底 + 横向卡片对齐设计稿 -->
<view v-if="featuredList.length > 0" class="featured-merchants-section mt-36rpx px-24rpx pt-8rpx pb-16rpx">
<view class="mb-24rpx px-6rpx text-28rpx lh-36rpx text-#1a1a1a">
{{ t('pages.home.featured-on') }}
</view>
<featured-on :list="featuredList" />
</view>
<!-- List 精选菜品瀑布流浅底 + 白卡片 + 阴影结构对齐设计稿 -->
<view class="featured-dishes-section mt-36rpx px-24rpx pb-40rpx">
<view class="mb-24rpx px-6rpx text-28rpx lh-36rpx text-#1a1a1a "
>{{ t('pages.home.featured-dishes') }}</view>
<view class="waterfall-row flex gap-16rpx items-start">
<view
v-for="(col, colIndex) in featuredDishColumns"
:key="colIndex"
class="waterfall-col flex-1 min-w-0 flex flex-col gap-16rpx"
>
<view
v-for="item in col"
:key="item.id || String(item.merchantId) + '-' + item.dishName"
@click="navigateToDishes(item)"
class="featured-dish-card w-full"
>
<view class="featured-dish-image">
<view v-if="item.isNew == 1" class="dish-new-ribbon">
<text class="dish-new-ribbon__text">NEW</text>
</view>
<image
:src="item?.dishImage?.split(',')[0]"
mode="aspectFill"
class="featured-dish-img"
/>
<view
v-if="isSoldOutStock(item?.stock)"
class="featured-dish-sold-dim"
/>
<image
v-if="isSoldOutStock(item?.stock)"
src="/static/app/images/SoldOut.png"
mode="aspectFill"
class="featured-dish-sold-overlay"
/>
<view
@click.stop="handleDishCollectionClick(item)"
class="featured-dish-collect w-56rpx h-56rpx absolute z-4 top-12rpx right-12rpx center"
>
<image
v-if="!item.isCollect"
src="@img-store/1334.png"
mode="aspectFill"
class="w-44rpx h-44rpx featured-dish-collect-icon"
/>
<image
v-else
src="@img-store/1337.png"
mode="aspectFill"
class="w-44rpx h-44rpx featured-dish-collect-icon"
/>
</view>
<!-- Nearby Merchants 附近商家 -->
<view v-if="nearbyList.length > 0" class="nearby-merchants-block mt-36rpx px-24rpx pb-16rpx">
<view class="mb-24rpx px-6rpx text-28rpx lh-36rpx text-#1a1a1a ">
{{ t('pages.home.nearby-merchants') }}
</view>
<nearby-merchants :list="nearbyList" />
</view>
</view>
<!-- List 精选菜品瀑布流浅底 + 白卡片 + 阴影结构对齐设计稿 -->
<view class="featured-dishes-section mt-36rpx px-24rpx pb-40rpx">
<view class="mb-24rpx px-6rpx text-28rpx lh-36rpx text-#1a1a1a ">{{ t('pages.home.featured-dishes') }}</view>
<view class="waterfall-row flex gap-16rpx items-start">
<view v-for="(col, colIndex) in featuredDishColumns" :key="colIndex"
class="waterfall-col flex-1 min-w-0 flex flex-col gap-16rpx">
<view v-for="item in col" :key="item.id || String(item.merchantId) + '-' + item.dishName"
@click="navigateToDishes(item)" class="featured-dish-card w-full">
<view class="featured-dish-image">
<view v-if="item.isNew == 1" class="dish-new-ribbon">
<text class="dish-new-ribbon__text">NEW</text>
</view>
<view class="featured-dish-body">
<view class="featured-dish-meta flex items-start justify-between gap-12rpx mb-14rpx">
<view class="min-w-0 flex-1">
<text class="featured-dish-price">US${{item?.originalPrice }}</text>
<!-- <text
<image :src="item?.dishImage?.split(',')[0]" mode="aspectFill" class="featured-dish-img" />
<view v-if="isSoldOutStock(item?.stock)" class="featured-dish-sold-dim" />
<image v-if="isSoldOutStock(item?.stock)" src="/static/app/images/SoldOut.png" mode="aspectFill"
class="featured-dish-sold-overlay" />
<view @click.stop="handleDishCollectionClick(item)"
class="featured-dish-collect w-56rpx h-56rpx absolute z-4 top-12rpx right-12rpx center">
<image v-if="!item.isCollect" src="@img-store/1334.png" mode="aspectFill"
class="w-44rpx h-44rpx featured-dish-collect-icon" />
<image v-else src="@img-store/1337.png" mode="aspectFill"
class="w-44rpx h-44rpx featured-dish-collect-icon" />
</view>
</view>
<view class="featured-dish-body">
<view class="featured-dish-meta flex items-start justify-between gap-12rpx mb-14rpx">
<view class="min-w-0 flex-1">
<text class="featured-dish-price">US${{ item?.originalPrice }}</text>
<!-- <text
v-if="Number(item?.originalPrice) > Number(item?.discountPrice)"
class="featured-dish-original"
>US${{ item?.originalPrice }}</text> -->
</view>
<text class="featured-dish-sales shrink-0">{{ t('pages-store.store.sales') }}: {{ formatSalesCount(item?.salesCount) }}</text>
</view>
<view class="featured-dish-title line-clamp-2 mb-16rpx">
{{ item?.dishName }}
<text class="featured-dish-sales shrink-0">{{ t('pages-store.store.sales') }}: {{
formatSalesCount(item?.salesCount) }}</text>
</view>
<view class="featured-dish-title line-clamp-2 mb-16rpx">
{{ item?.dishName }}
</view>
<view class="flex items-center justify-between gap-12rpx">
<view v-if="Number(item?.memberPrice) > 0" class="featured-dish-member shrink min-w-0">
<text class="featured-dish-member-inner">{{ t('pages-store.store.members') }}: US${{
item?.memberPrice
}}</text>
</view>
<view class="flex items-center justify-between gap-12rpx">
<view
v-if="Number(item?.memberPrice) > 0"
class="featured-dish-member shrink min-w-0"
>
<text class="featured-dish-member-inner">{{ t('pages-store.store.members') }}: US${{ item?.memberPrice }}</text>
</view>
<view v-else class="flex-1 min-w-0"></view>
<view class="featured-dish-add shrink-0">
<image
src="/static/app/images/add_cart.png"
class="featured-dish-add__icon"
/>
</view>
</view>
<view
v-if="getDishPromoLabel(item as Record<string, unknown>)"
class="featured-dish-promo mt-16rpx"
>
<text class="featured-dish-promo-text">{{ getDishPromoLabel(item as Record<string, unknown>) }}</text>
<view v-else class="flex-1 min-w-0"></view>
<view class="featured-dish-add shrink-0">
<image src="/static/app/images/add_cart.png" class="featured-dish-add__icon" />
</view>
</view>
<view v-if="getDishPromoLabel(item as Record<string, unknown>)" class="featured-dish-promo mt-16rpx">
<text class="featured-dish-promo-text">{{ getDishPromoLabel(item as Record<string, unknown>) }}</text>
</view>
</view>
</view>
</view>
</view>
<template #bottom>
<view class="h-50px"></view>
<view :style="[configStore.iosSafeBottomPlaceholder]"></view>
</template>
</z-paging>
</view>
<template #bottom>
<view class="h-50px"></view>
<view :style="[configStore.iosSafeBottomPlaceholder]"></view>
</template>
</z-paging>
<!-- 回到顶部购物车已并入顶栏不再使用底部浮条 -->
<view v-if="showBackToTop" @click="scrollToTop" class="home-back-top fixed left-30rpx w-88rpx h-88rpx bg-#14181B rounded-50% center shadow-lg">
<view v-if="showBackToTop" @click="scrollToTop"
class="home-back-top fixed left-30rpx w-88rpx h-88rpx bg-#14181B rounded-50% center shadow-lg">
<image src="@img/chef/119.png" class="w-40rpx h-40rpx shrink-0 rotate-180"></image>
</view>
</view>
@@ -578,28 +508,29 @@ const debouncedEmit = debounce(1300, (isCollected: boolean, id: string, type: Co
padding-right: 8rpx;
}
.home-member-banner {
position: relative;
width: 100%;
height: 550rpx;
background-size: 100% 100%;
background-position: center;
background-repeat: no-repeat;
.home-promo-block {
display: flex;
flex-direction: column;
gap: 24rpx;
margin-top: 8rpx;
margin-bottom: 8rpx;
}
.home-member-banner__actions {
position: absolute;
left: 0;
right: 0;
bottom: 5rpx;
padding: 0 40rpx;
.home-promo-banner-img {
display: block;
width: 100%;
border-radius: 24rpx;
}
.home-promo-actions {
display: flex;
align-items: center;
justify-content: space-between;
gap: 24rpx;
padding: 0 8rpx;
}
.home-member-banner__btn {
.home-promo-btn {
flex: 1;
height: 72rpx;
padding: 0 24rpx;
@@ -610,7 +541,7 @@ const debouncedEmit = debounce(1300, (isCollected: boolean, id: string, type: Co
justify-content: center;
}
.home-member-banner__btn-text {
.home-promo-btn-text {
font-size: 28rpx;
font-weight: 600;
color: #ffffff;
@@ -629,6 +560,7 @@ const debouncedEmit = debounce(1300, (isCollected: boolean, id: string, type: Co
.card-swiper {
height: 420rpx;
}
.swiper-item-content {
width: 100%;
height: 100%;
@@ -127,8 +127,10 @@ const isUserMember = computed(()=> {
function handleTabClick(item: Tab) {
switch (item.code) {
case "inviteFriends": {
// R.both(checkNeedLogin, R.pipe(() => emits("inviteUser"), R.T))(item.isLogin)
emits("inviteUser");
R.both(
checkNeedLogin,
R.pipe(() => emits("inviteUser"), R.T)
)(item.isLogin);
break;
}
case "support": {