feat(distribution): 分站前台按独立商城呈现并支持首页文案自定义
分站前台原本对顾客暴露分销身份,且登录等页面写死了主站品牌, 与「一手独立商城」的定位不符;同时首页文案全部硬编码,站长无法按自己口径调整。 去分销身份(顾客可见处): - 头部品牌区、首页主视觉、移动端认证卡去掉「官方分销/官方分销认证/官方分销站」标识 - 会员徽标「分销专享」→「会员专享」,「所属商城」兜底「专属分销站/商城」→「官方商城」 - 订单页说明改为「当前为【X】商城,仅展示在本站产生的订单记录」,保留订单按站隔离的必要说明 - 无公告时的兜底跑马灯、轮播角标去掉分销措辞 - 清理随之失效的 pc-brand-badge / mobile-brand-badge 样式 品牌跟随站点配置(即可自定义): - PC/移动登录页、移动注册页、加桌面引导页的品牌改为 站点名称 + Logo(无 Logo 取站名首字), 不再写死主站「大锤商行」;主站行为不变(新增 store getter brandMark:分站取站名首字,主站仍为「锤」) 首页文案可配置: - 新增迁移 000076 与 distribution_sites.storefront_text_json (tagline 头部副标题 / hero_badge 主视觉徽标 / hero_desc 主视觉描述 / card_sub 移动端卡片副标题) - 分销后台「品牌装修 → 首页文案」可编辑,占位提示即默认值,留空或整段清空回落内置默认 - 贯通 UpdateSiteBranding → 公开站点信息接口(含 Redis 缓存失效)→ 前台 store 逐字段合并默认值 - 装修预览同步展示站长填写的副标题与徽标 测试: - 后端补装修字段写入/公开接口透出/清空回落断言 - 前端新增 storefrontText 单测(默认合并、覆盖、空白与非法类型回落)
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
import { describe, expect, it } from 'vitest'
|
||||
|
||||
import { defaultStorefrontText, mergeStorefrontText } from '../storefrontText'
|
||||
|
||||
describe('mergeStorefrontText', () => {
|
||||
it('未配置时全部回落默认文案', () => {
|
||||
expect(mergeStorefrontText()).toEqual(defaultStorefrontText)
|
||||
expect(mergeStorefrontText(null)).toEqual(defaultStorefrontText)
|
||||
expect(mergeStorefrontText({})).toEqual(defaultStorefrontText)
|
||||
})
|
||||
|
||||
it('站长配置覆盖对应字段,其余保持默认', () => {
|
||||
const merged = mergeStorefrontText({ tagline: '天域商行 · 专注回收', hero_badge: '正品保障' })
|
||||
expect(merged.tagline).toBe('天域商行 · 专注回收')
|
||||
expect(merged.hero_badge).toBe('正品保障')
|
||||
expect(merged.hero_desc).toBe(defaultStorefrontText.hero_desc)
|
||||
expect(merged.card_sub).toBe(defaultStorefrontText.card_sub)
|
||||
})
|
||||
|
||||
it('空白配置按未配置处理(不允许出现空文案)', () => {
|
||||
const merged = mergeStorefrontText({ tagline: ' ', hero_desc: '' })
|
||||
expect(merged.tagline).toBe(defaultStorefrontText.tagline)
|
||||
expect(merged.hero_desc).toBe(defaultStorefrontText.hero_desc)
|
||||
})
|
||||
|
||||
it('去掉首尾空白并忽略非法类型', () => {
|
||||
const merged = mergeStorefrontText({
|
||||
tagline: ' 安全交易 · 全程留痕 ',
|
||||
hero_badge: 123 as unknown as string,
|
||||
})
|
||||
expect(merged.tagline).toBe('安全交易 · 全程留痕')
|
||||
expect(merged.hero_badge).toBe(defaultStorefrontText.hero_badge)
|
||||
})
|
||||
})
|
||||
@@ -0,0 +1,38 @@
|
||||
/**
|
||||
* 分站首页文案(站长可在分销后台「品牌装修」自定义,留空则用这里的默认值)。
|
||||
*
|
||||
* 这些位置原本是写死的分销标识(如「官方分销认证」),改成可配置后:
|
||||
* - 各站可以写自己的口号,前台看起来是独立商城
|
||||
* - 不配置时行为与默认口径一致
|
||||
*/
|
||||
export interface StorefrontText {
|
||||
/** 头部品牌区副标题(PC + 移动) */
|
||||
tagline: string
|
||||
/** 首页主视觉徽标(PC Hero + 移动认证卡片) */
|
||||
hero_badge: string
|
||||
/** 首页主视觉描述(PC) */
|
||||
hero_desc: string
|
||||
/** 移动端认证卡片副标题 */
|
||||
card_sub: string
|
||||
}
|
||||
|
||||
export const defaultStorefrontText: StorefrontText = {
|
||||
tagline: '安全交易 · 全程留痕',
|
||||
hero_badge: '品质保障',
|
||||
hero_desc: '账号均经过严格验号与安全质检,支持自动交付与全程留痕,为您提供安全无忧的租号体验。',
|
||||
card_sub: '严格验号 · 统一质检交付 · 专属独立订单',
|
||||
}
|
||||
|
||||
/** 逐字段合并站长配置:未配置或配置为空的字段回落到默认文案。 */
|
||||
export function mergeStorefrontText(raw?: Partial<StorefrontText> | null): StorefrontText {
|
||||
return {
|
||||
tagline: readText(raw?.tagline, defaultStorefrontText.tagline),
|
||||
hero_badge: readText(raw?.hero_badge, defaultStorefrontText.hero_badge),
|
||||
hero_desc: readText(raw?.hero_desc, defaultStorefrontText.hero_desc),
|
||||
card_sub: readText(raw?.card_sub, defaultStorefrontText.card_sub),
|
||||
}
|
||||
}
|
||||
|
||||
function readText(value: unknown, fallback: string): string {
|
||||
return typeof value === 'string' && value.trim() ? value.trim() : fallback
|
||||
}
|
||||
Reference in New Issue
Block a user