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:
yml2213
2026-10-01 09:24:56 +08:00
parent 53b40f8fad
commit 329d0f75bb
22 changed files with 358 additions and 89 deletions
@@ -51,7 +51,7 @@ const displayAnnouncements = computed(() => {
return siteStore.announcements
}
return [
`【${siteStore.siteName}】官方认证独立分销站:账号实时同步主站,官方质检,安全秒交接!`,
`【${siteStore.siteName}】精选三角洲账号:官方验号,安全秒交接,售后有保障!`,
...announcements.value,
]
}
@@ -63,7 +63,7 @@ const displayBanners = computed<HomeBannerSlide[]>(() => {
return siteStore.banners.map(b => ({
eyebrow: siteStore.siteName,
title: b.title || '精选游戏账号 · 随租随玩',
badge: '分销精选',
badge: '本店精选',
pill: '官方保障',
tone: 'gold',
image_url: b.image_url,
@@ -441,17 +441,15 @@ if (!restored) {
<HomeAnnouncement :announcements="displayAnnouncements" />
<main class="home-content">
<!-- 分销站专属标识 Banner -->
<!-- 商城专属标识 Banner -->
<div v-if="siteStore.isDistribution" class="dist-portal-banner">
<div class="dist-portal-content">
<div class="dist-portal-tag">
<span class="dist-pulse"></span>
官方分销认证
{{ siteStore.storefrontText.hero_badge }}
</div>
<h2 class="dist-portal-title">{{ siteStore.siteName }} 专区</h2>
<p class="dist-portal-desc">
全站上架账号均由平台统一质检与自动交付,订单数据独立隔离,为您提供安全无忧的租号体验。
</p>
<h2 class="dist-portal-title">{{ siteStore.siteName }}</h2>
<p class="dist-portal-desc">{{ siteStore.storefrontText.hero_desc }}</p>
</div>
<div class="dist-portal-badges">
<div class="dist-badge-item">
@@ -71,19 +71,6 @@
font-size: 17px;
}
.mobile-brand-badge {
display: inline-flex;
align-items: center;
padding: 1px 5px;
font-size: 10px;
font-weight: 700;
color: #ff6a00;
background: rgba(255, 106, 0, 0.1);
border: 1px solid rgba(255, 106, 0, 0.25);
border-radius: 999px;
line-height: 1.3;
}
.mobile-brand small {
color: #64748b;
font-size: 13px;
@@ -90,7 +90,7 @@ const announcements = ref<string[]>(defaultHomeAnnouncements)
const displayAnnouncements = computed(() => {
if (siteStore.isDistribution) {
return [
`【${siteStore.siteName}】官方认证分销站,账号实时同步主站,售后有保障!`,
`【${siteStore.siteName}】精选三角洲账号:官方验号,安全秒交接,售后有保障!`,
...announcements.value,
]
}
@@ -841,9 +841,10 @@ if (!restoreHomeConfigFromCache()) {
<div>
<div class="mobile-brand-title-row">
<strong>{{ siteStore.siteName }}</strong>
<span v-if="siteStore.isDistribution" class="mobile-brand-badge">官方分销</span>
</div>
<small>{{ siteStore.isDistribution ? '官方分销·平台保障' : '哈夫币租号' }}</small>
<small>{{
siteStore.isDistribution ? siteStore.storefrontText.tagline : '哈夫币租号'
}}</small>
</div>
</div>
<button
@@ -898,13 +899,13 @@ if (!restoreHomeConfigFromCache()) {
<!-- ========== Content 区域 ========== -->
<van-pull-refresh v-model="refreshing" @refresh="onRefresh">
<section class="mobile-content">
<!-- 分销站移动端专属认证卡片 -->
<!-- 商城移动端专属认证卡片 -->
<div v-if="siteStore.isDistribution" class="mobile-dist-card">
<div class="dist-card-top">
<span class="dist-card-badge">官方分销站</span>
<span class="dist-card-badge">{{ siteStore.storefrontText.hero_badge }}</span>
<strong class="dist-card-name">{{ siteStore.siteName }}</strong>
</div>
<p class="dist-card-sub">官方平台实时同步 · 统一质检交付 · 专属独立订单</p>
<p class="dist-card-sub">{{ siteStore.storefrontText.card_sub }}</p>
</div>
<!-- Banner 轮播 -->