站点与品牌设置
站名、Logo、主题色这些三端都可见的信息统一在管理端一个页面维护,保存后写入 settings 表并即时下发。本文说明每一项填什么、留空会怎样、改完怎么验证。
1. 后台入口
| 页面 | 路径 | 页面权限 | 读写接口权限 |
|---|---|---|---|
| 站点设置(基础信息) | 站点内容 → 站点配置 → 站点设置 | site.view | 读 settings.view,写 settings.manage |
| 通知总开关 | 同上页面「通知总开关」分区 | site.view | 同上 |
| 首页 Banner | 站点内容 → 站点配置 → 首页 Banner | site.view | 同上(首页装修走自己的接口) |
站点设置页面的可见性看 site.view,但表单读的是 GET /api/v2/admin/settings、写的是 POST /api/v2/admin/settings,这两个接口分别要求 settings.view 与 settings.manage。只给了 site.view 的账号能进页面、点了保存会提示无权限——这不是页面故障,是权限没配全。系统里定义了 site.manage 这个权限常量,但当前没有任何路由使用它(未在代码中确认它的用途)。
2. 基础信息字段
配置分组是 basic,键名即下面每项的行内代码。
| 字段 | 默认值 | 生效范围 |
|---|---|---|
site_name 站点名称 | 图拉云 | 官网、用户控制台、管理端、邮件 |
browser_title 浏览器标题 | 空(回退站点名称) | 官网首屏、标签页、分享卡片 |
site_logo 站点 Logo | 空(回退 /branding/logo.png) | 官网、控制台导航 |
site_favicon 站点 Favicon | 空(回退 /branding/favicon-32.png) | 浏览器标签页图标 |
client_console_icon 用户控制台图标 | 空(回退 Favicon) | 控制台侧边栏、登录页 |
brand_primary_color 品牌主色 | #165DFF(TDesign 品牌蓝) | 三端强调色 |
brand_radius 界面圆角 | 6 | 三端控件与容器圆角 |
product_display_mode 商品展示方式 | list(列表式) | 前台商品列表默认形态(访客可自行切换) |
service_phone 官方 QQ 群 | 空(回退文案「待补充群号」) | 官网页脚、控制台联系方式 |
service_email 合作邮箱 | 空(该行不显示) | 官网页脚、控制台联系方式 |
service_hours 服务时间 | 空(该行不显示) | 官网页脚、「关于我们」页 |
support_group_qr 官方群聊二维码 | 空 | 官网与控制台的联系入口 |
support_group_link 入群链接 | 空 | 同上 |
icp_record ICP 备案号 | 空(页脚该行不显示) | 官网页脚 |
value_added_license 增值电信业务经营许可证 | 空 | 官网页脚 |
terms_url 服务条款链接 | 空 | 注册与下单页的服务条款入口 |
privacy_url 隐私政策链接 | 空 | 同上 |
品牌主色与圆角的取值有硬校验,填错不是「不好看」而是「静默回退默认值」:
brand_primary_color只接受#RRGGBB或#RGB,三位写法会展开成六位并转小写。带分号、花括号、逗号或url()的输入会让整条样式规则失效甚至成为注入点,系统直接回退#165DFF。管理端表单本身也有#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})的正则校验,但服务端不信任前端,落库前会再校验一次。brand_radius只接受 0–24 的整数像素,超过 24 回退6。项目规范是容器取该值、控件取一半,即默认的 6px / 3px;填成 30 这类值会看到圆角忽然变小,那是回退,不是没保存。service_qq_group与service_phone是同一展示位的两个候选键,取值时先看service_qq_group,为空再取service_phone,都为空则显示占位文案「待补充群号」。官网页脚上那一行写着「待补充群号」就说明这里没填。
client_console_icon 只在用户控制台生效;官网顶栏与页脚用的是站点 Logo 加站点名称。图片字段接受的是媒体库上传后的地址,也可以直接填 /branding/ 下的静态文件名。
product_display_mode 只决定访客第一次打开选购页看到的形态。访客可以在选购页右上角切换「卡片式 / 列表式」(手机端同样有切换条),还可以在「页面宽度」面板里选固定宽度(1200 / 1280 / 1440 / 1600 / 1920)或撑满屏幕;两项偏好分别记在该浏览器的 localStorage(turaidc:shop-display-mode、turaidc:shop-page-width)里,换浏览器、换设备或清缓存后回到站点默认值。想确认站点默认值实际生效,请用无痕窗口打开选购页,或先清掉这两个键。
3. 通知总开关
同一页面「通知总开关」分区属于 notification 分组:
email_enabled启用邮件通知,默认关闭。sms_enabled启用短信通知,默认关闭。
这两个开关是「对外是否真的会发信」的唯一判定源。关闭时注册验证码、找回密码等对外发码会直接返回「邮件服务暂不可用」,而管理端插件详情页的「发送测试邮件 / 发送测试短信」按钮走驱动直发、不受总开关约束——测试成功不代表对外可用,测试结果里会额外回传总开关状态并提示这一点。通道本身的配置见邮件与短信。
4. 保存后多久生效
- 读取接口
GET /api/v2/site/config不缓存,刷新官网或控制台即可看到新站名。 - 保存
basic分组会触发内容版本号自增,官网的 SEO 渲染结果与 sitemap 缓存立即失效,不需要等 TTL 过期,也不用手动清缓存。 - 浏览器标签页图标与标题由首屏脚本按上次访问留下的
localStorage缓存先渲染一次,再被接口结果覆盖。同一个标签页里改名不会立刻改标题,新开标签页就正常。 - 官网上静态引用的图片(例如直接写在 Nginx 里的 favicon)可能被 CDN 或浏览器缓存,这部分策略见前端站点 Nginx 规则。
5. 验证
用接口确认服务端的真实取值,不要只看页面回显(页面回显带表单本地状态):
curl -s https://你的官网域名/api/v2/site/config | head -c 800返回里的 site_name、browser_title、site_logo、site_favicon、brand_primary_color、brand_radius 就是三端实际使用的值。随后逐项人工确认:
- 新开浏览器标签页打开官网,标签页标题与图标已是新品牌。
- 刷新官网首页与用户控制台,站点名与主色已变;管理端刷新后主色同步。
- 官网页脚的备案号、服务时间、合作邮箱按填写内容显示,留空的整行不出现。
- 用无痕窗口打开选购页,商品列表按
product_display_mode的取值呈现为列表式或卡片式;普通窗口里访客的切换偏好会覆盖默认值,这是预期行为。
改完没有任何变化时,按顺序排查:账号是否有 settings.manage(保存本身被拒)、brand_primary_color / brand_radius 是否被服务端校验回退、浏览器是否拿着旧的标签页缓存。