feat(guest): 支持游客态浏览示例衣物与搭配

游客可点开示例衣物详情与搭配抽屉,不再在浏览路径上要求登录。
This commit is contained in:
2026-09-17 11:41:42 +08:00
parent 45222317af
commit f0503c7ad7
30 changed files with 648 additions and 127 deletions
+20 -51
View File
@@ -1,4 +1,5 @@
import { HoroscopeData } from '../types/models'
import { ClothesItem, HoroscopeData } from '../types/models'
import { DAMO_CLOTHES, DAMO_OUTFIT_ITEMS } from '../damo/damo'
import { logger } from './logger'
// 日志模块名
@@ -7,29 +8,32 @@ const LOG = 'guest'
/**
* 游客态唯一数据源:未登录浏览时展示的本地示例内容 + 统一登录引导。
*
* 合规背景(微信审核驳回整改):
* 合规背景(微信审核整改):
* 1. 打开小程序不得直接要求授权登录,用户应能先浏览体验功能服务;
* 2. 仅在用户主动点击受限功能时,才由用户自行选择是否登录。
* 2. 示例内容必须能完整浏览与点开查看详情,不得在浏览路径上要求登录;
* 3. 仅在用户主动使用受限功能时,才由用户自行选择是否登录。
*
* 本模块不发起任何网络请求、不改动登录态,只提供静态示例数据与登录跳转入口。
* 本模块不发起任何网络请求、不改动登录态:示例数据全部来自本地 damo 素材。
*/
// 衣物示例:icon 取 styles/icons.wxss 的线稿图标类名
export interface GuestClothes {
key: string
name: string
category: string // 与衣橱分类条 value 对齐
color: string
icon: string
}
// 衣橱示例:damo 素材(含包内图片路径),分类筛选由调用方按 category_main 本地完成
export const GUEST_WARDROBE: ClothesItem[] = DAMO_CLOTHES
// 穿搭示例:icons 为拼图封面里的线稿占位图标
// 穿搭示例:游客态只展示这一套(黑色短袖JK水手服上衣 + 藏青色百褶半身裙)
export interface GuestOutfit {
key: string
name: string
scene: string
desc: string
icons: string[]
items: ClothesItem[]
}
export const GUEST_OUTFIT: GuestOutfit = {
key: 'damo-outfit-1',
name: '藏青学院一套',
scene: '校园上课',
desc: '黑色短袖水手服上衣配藏青百褶半身裙,酒红蝴蝶结与白条纹作点缀',
items: DAMO_OUTFIT_ITEMS,
}
// 分享示例
@@ -41,44 +45,9 @@ export interface GuestShare {
expireText: string
}
export const GUEST_WARDROBE: GuestClothes[] = [
{ key: 'g1', name: '白衬衫', category: '上装', color: '白', icon: 'icon-shirt' },
{ key: 'g2', name: '直筒牛仔裤', category: '下装', color: '蓝', icon: 'icon-hanger' },
{ key: 'g3', name: '针织开衫', category: '外套', color: '灰', icon: 'icon-shirt' },
{ key: 'g4', name: '黑色连衣裙', category: '连衣裙', color: '黑', icon: 'icon-hanger' },
{ key: 'g5', name: '小白鞋', category: '鞋', color: '白', icon: 'icon-image' },
{ key: 'g6', name: '丝巾', category: '配饰', color: '米', icon: 'icon-sparkles' },
{ key: 'g7', name: '风衣', category: '外套', color: '卡其', icon: 'icon-shirt' },
{ key: 'g8', name: '半身裙', category: '下装', color: '棕', icon: 'icon-hanger' },
]
export const GUEST_OUTFITS: GuestOutfit[] = [
{
key: 'go1',
name: '通勤的干净线条',
scene: '通勤',
desc: '衬衫配直筒裤,外搭一件风衣',
icons: ['icon-shirt', 'icon-hanger', 'icon-image'],
},
{
key: 'go2',
name: '周末的松弛感',
scene: '周末',
desc: '针织开衫配半身裙,鞋选小白鞋',
icons: ['icon-shirt', 'icon-hanger'],
},
{
key: 'go3',
name: '晚间约会的黑色',
scene: '约会',
desc: '黑色连衣裙加一条丝巾点亮',
icons: ['icon-hanger', 'icon-sparkles'],
},
]
export const GUEST_SHARES: GuestShare[] = [
{ key: 'gs1', kind: 'closet', title: '衣柜分享 · 12 件', typeText: '全量衣橱', expireText: '示例内容' },
{ key: 'gs2', kind: 'outfit', title: '通勤的干净线条', typeText: '穿搭分享 · 3 件', expireText: '示例内容' },
{ key: 'gs2', kind: 'outfit', title: '藏青学院一套', typeText: '穿搭分享 · 2 件', expireText: '示例内容' },
]
// 运势示例:日期取当天,保证页头日期不出现过去时间
@@ -107,7 +76,7 @@ let lastNavAt = 0
*
* 与 utils/request.ts 的 redirectToLogin 的区别:
* - redirectToLogin 用于「登录态失效」的被动兜底,reLaunch 清栈;
* - goLogin 用于用户主动点击受限功能的场景,navigateTo 保留返回路径,
* - goLogin 用于用户主动使用受限功能的场景,navigateTo 保留返回路径,
* 用户可随时返回继续浏览,不会被强制清栈。
*/
export function goLogin(options: { redirect?: string } = {}): void {