feat(store): 新增门店中心及VIP会员升级功能
- 个人信息页新增门店名称和门店地址展示,支持异步加载与只读显示 - 用户信息卡片整体改为绿色渐变背景,添加光晕和白色边框样式 - 新增升级VIP会员入口,突出展示并添加推荐标签 - 新建VIP会员升级页面,包含门店信息表单和VIP权益预览 - 提交升级申请调用新增api,支持状态检测表单只读 - 门店中心页面重构,简化订单管理,新增功能卡片及VIP审核入口 - 页面加载校验店员身份,非店员拒绝访问并提示 - 购物相关页面和组件全面支持VIP会员价格优先显示dealerPrice - 新增ShopDealerApply模型门店相关字段,丰富会员申请数据记录
This commit is contained in:
68
src/utils/vip.ts
Normal file
68
src/utils/vip.ts
Normal file
@@ -0,0 +1,68 @@
|
||||
import Taro from '@tarojs/taro'
|
||||
import { listShopDealerApply } from '@/api/shop/shopDealerApply'
|
||||
|
||||
const VIP_STORAGE_KEY = 'is_vip_member'
|
||||
|
||||
/**
|
||||
* 从本地缓存读取 VIP 状态
|
||||
*/
|
||||
export function getVipStatusFromCache(): boolean {
|
||||
return Taro.getStorageSync(VIP_STORAGE_KEY) === true
|
||||
}
|
||||
|
||||
/**
|
||||
* 写入 VIP 状态到本地缓存
|
||||
*/
|
||||
export function setVipStatus(isVip: boolean) {
|
||||
Taro.setStorageSync(VIP_STORAGE_KEY, isVip)
|
||||
}
|
||||
|
||||
/**
|
||||
* 同步检查 VIP 状态(从缓存读取,无网络请求)
|
||||
* 用于价格展示等需要即时判断的场景
|
||||
*/
|
||||
export function isVipMember(): boolean {
|
||||
return getVipStatusFromCache()
|
||||
}
|
||||
|
||||
/**
|
||||
* 异步检查 VIP 状态并更新缓存
|
||||
* 通过查询 ShopDealerApply 记录判断(applyStatus === 20 表示已通过)
|
||||
* @param userId 用户ID
|
||||
*/
|
||||
export async function checkAndCacheVipStatus(userId?: number): Promise<boolean> {
|
||||
if (!userId) {
|
||||
// 尝试从 storage 获取 userId
|
||||
const uid = Taro.getStorageSync('UserId')
|
||||
if (!uid) {
|
||||
setVipStatus(false)
|
||||
return false
|
||||
}
|
||||
userId = uid
|
||||
}
|
||||
|
||||
try {
|
||||
const list = await listShopDealerApply({ userId })
|
||||
const approved = (list || []).some(item => item.applyStatus === 20)
|
||||
setVipStatus(approved)
|
||||
return approved
|
||||
} catch {
|
||||
// 请求失败时保持原缓存值
|
||||
return getVipStatusFromCache()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品对当前用户的实际购买价格
|
||||
* VIP 会员返回 dealerPrice,普通用户返回 price
|
||||
*/
|
||||
export function getDisplayPrice(product: {
|
||||
dealerPrice?: string
|
||||
price?: string
|
||||
salePrice?: string
|
||||
}): string {
|
||||
if (isVipMember() && product.dealerPrice) {
|
||||
return product.dealerPrice
|
||||
}
|
||||
return product.price || product.salePrice || '0'
|
||||
}
|
||||
Reference in New Issue
Block a user