Files
atlas-seller-kit/docs/requirements/account-store-watermark.md
T
2026-09-07 17:51:11 +08:00

12 KiB
Raw Blame History

账户、门店管理与水印管理需求

状态:讨论中。本文只定义产品需求、页面与状态口径;不预设数据库表、接口路径或技术栈。

1. 本期范围与导航

用户登录后显示左侧一级菜单:在线商品、采集箱、店铺管理、水印管理、定价工具。

本轮细化账户、店铺管理和水印管理。在线商品、采集箱、定价工具只确定入口,功能在后续单独讨论。

默认产品形态是一个账户可管理多个店铺;店铺目前先接入 Ozon,但不能把页面或领域名称永久写死为 Ozon,以便后续增加其他平台。

2. 账户注册与登录

2.1 注册

注册页字段只有邮箱和密码,均为必填:

字段 规则
邮箱 去除首尾空格后以不区分大小写的形式保存;同一邮箱只能注册一个账户。首期仅校验基本邮箱格式,不发送验证邮件。
密码 由后续安全设计确定最终长度与复杂度;页面需要二次输入密码并提示规则。密码只可安全散列存储,绝不回显。

首期注册成功即可登录使用。邮箱验证和注册/登录风控不在首期流程执行,但数据模型预留 email_verified_at;后续可增加邮箱验证。手机号、短信验证、短信登录也不在首期范围,未来通过新增可选手机号凭据和验证流程扩展,不影响邮箱账户主流程。

2.2 登录与会话

用户用邮箱和密码登录。登录成功进入默认工作空间与首页;若后续一个账户拥有多个工作空间,再增加切换入口。首期需要提供退出登录;短信登录、第三方登录、设备管理和多因素认证均不在本轮范围。

2.3 忘记密码(待开发任务)

该功能已列入下一轮账户认证开发,尚未实现。登录页增加“忘记密码”入口,用户可提交邮箱并通过邮件中的一次性链接设置新密码。

  • 请求重置时,无论邮箱是否已注册,页面均显示相同的成功提示,避免枚举账户;服务端须按 IP 与邮箱摘要限流,且不得记录明文密码、重置令牌或完整重置链接。
  • 重置链接使用随机、不透明、一次性令牌;数据库只保存其哈希与过期时间。令牌须短时有效,使用、过期或再次申请后不得重复使用。
  • 用户在重置页输入新密码与确认密码。成功后更新密码哈希、撤销该账户所有已有 session,并引导用户用新密码登录;旧 access token 与插件缓存随之失效。
  • 开发前须补充 docs/api/auth.md、数据库迁移、邮件投递配置与失败/限流错误契约;交付须包含 API、Web 页面与邮件链接的集成测试,且测试不能输出令牌或密码。

2.4 全局平台与当前店铺上下文

平台和当前店铺是全站工作上下文,不在每个业务页面重复选择。页头在用户信息左侧放置“平台选择器”;用户切换平台后,菜单、类目、物流商、佣金规则和页面数据均切换到该平台范围。

在平台下有多个已授权店铺时,系统同时使用该平台的默认店铺作为“当前店铺”;后续可在同一页头区域增加店铺切换。新用户进入一个平台时优先选中该平台默认店铺。定价方案、商品和上架任务均从此全局上下文读取平台与店铺,避免表单中出现相互矛盾的平台选择。

3. 店铺管理

3.1 列表页面

入口为“店铺管理”。页面左上方有“添加店铺授权”按钮;列表按添加时间倒序,支持空状态。字段如下:

列 展示/来源 说明
序号 当前列表序号 仅是 UI 序号,不作为店铺标识。
店铺名称 用户填写 允许编辑,不能为空。
店铺 Client ID 用户填写 Ozon Client-Id;可完整显示,但不应把 API Key 放在列表或详情中。
密钥过期时间 平台可提供时同步 现有 Ozon Seller API 资料仅说明 Api-Key 由卖家后台生成、只显示一次,未发现可读取密钥过期时间的接口。因此首期展示 —;同时建议在详情/编辑页显示“最近验证时间”和“凭据验证状态”。不能用本系统添加时间推算到期。
商品限额 平台可提供时同步 指一家门店可铺货的商品数量上限。现有资料未确认 Ozon 可返回该配额;首期显示 —,不得把当前商品数量误作限额。
货币类型 用户选择 首期提供人民币 CNY 和俄罗斯卢布 RUB;其他币种由后台配置后才显示。一个店铺只有一个默认结算/计价币种。
默认店铺 系统状态 每个工作空间最多一个默认店铺;设为默认会自动取消原默认店铺。
仓库数量 平台同步 Ozon 可通过 POST /v1/warehouse/list 获取仓库数组,列表显示最近一次成功同步的数量;未同步、凭据失效或请求失败时显示 — 并保留最近同步时间。
Cookie 状态 预留字段 Ozon 商品发布使用 Client-Id + Api-Key 的 Seller API 鉴权,不需要浏览器 Cookie。因此首期此列保持空白;只有未来接入网页自动化等 Seller API 覆盖不到的能力,才增加 Cookie 授权、加密保存、失效检测与更新入口。
状态 系统状态 验证中、正常、凭据失效、同步异常、已停用。添加/更新凭据后先验证再置为正常。
绑定水印 关联状态 显示已绑定的水印模板名称,未绑定时显示“未绑定”。
添加时间 系统时间 显示店铺创建时间。
操作 用户操作 绑定水印、编辑、删除。删除必须二次确认,首期建议软删除:不再出现在默认列表,但保留关联商品和操作审计。默认店铺删除前必须先指定另一店铺为默认,或在没有其他店铺时允许默认店铺为空。

“仓库数量”的来源已经在现有 Ozon 资料中确认。密钥过期时间和商品限额如果无法由平台获得,统一展示 —,不推算、不猜测;Cookie 不是商品发布所需的 Seller API 凭据,首期保持空白。

3.2 添加店铺授权

点击“添加店铺授权”弹出表单,字段顺序固定如下:

字段 必填 规则
店铺名称 是 用户自定义名称。
Client ID 是 Ozon Client-Id。
API 密钥 是 仅提交一次给服务端验证和加密保存;保存后永不在 UI 或接口响应中返回明文。
货币类型 是 首期仅 CNY、RUB;由可配置币种清单驱动,默认建议 RUB。
是否默认店铺 否 新账户的首家店铺强制成为默认;其他店铺由勾选决定。
备注 否 仅供账户内管理,不对平台发送。

提交后系统必须用该凭据调用一个低风险 Ozon API 进行校验,并拉取仓库列表;验证失败时不得把店铺标为正常,错误提示不能包含 API Key。首期先按 Ozon Client-Id + Api-Key 接入,未来其他平台在同一“添加店铺授权”入口内按平台显示各自表单。

3.3 绑定水印

点击列表操作“绑定水印”弹出对话框:

  • 店铺名称:只读,不可修改。
  • 水印:下拉列表,包含当前账户可用的水印模板,也可以选择“暂不绑定”。
  • 确认后,该店铺保存一个推荐水印模板;已有图片不会被自动重写。首期它不在发布时自动处理商品图片,用户须在商品编辑页对具体图片的“编辑 → 添加水印”中主动选择模板并生成派生图。

一个店铺首期只可绑定一个推荐水印;同一水印模板可以绑定给多个店铺。后期可将它用作图片弹窗的默认预选、批量添加或自动添加策略,但这些自动行为不属于首期。

3.4 编辑与删除

编辑复用添加表单,但 API Key 默认不显示;用户只有重新输入新 Key 时才更新凭据并触发验证。删除只处理本系统的店铺连接,不会删除 Ozon 平台店铺、商品或仓库。

4. 水印管理

4.1 列表页面

页面左上方有“添加水印模板”按钮。列表按创建时间倒序,列为:序号、水印名称、水印类型、水印内容、水印位置、创建时间、操作。

列 说明
水印名称 模板名称,在当前账户内唯一。
水印类型 文字水印 或 图片水印。
水印内容 文字水印展示文字内容;图片水印展示缩略图/文件名,不显示原始存储路径。
水印位置 九宫格位置,以清晰中文名展示,如“右下”。
操作 查看效果、编辑、删除。

删除已被店铺绑定的模板时,必须二次确认并说明影响;确认删除后应解除所有店铺绑定,而不是让任务继续引用一个已删除的模板。已生成的历史图片不受影响。

4.2 添加/编辑水印模板

点击“添加水印模板”打开弹窗。先选择水印类型,表单随类型切换;编辑时保留原类型和参数,并支持更换图片或文字。模板名称与水印类型始终必填。

共同字段:

字段 规则
模板名称 必填;当前账户内唯一。
水印类型 必填,文字或图片。切换类型时需确认,因为原类型专属字段会被清空。
不透明度 使用 Ant Design Slider;取值 0%–100%,预览同步更新。
水印位置 九宫格单选:左上、上中、右上、左中、居中、右中、左下、下中、右下。
预览效果 基于固定演示底图实时渲染位置、缩放和透明度;首期仅预览,不写入商品图。

图片水印专属字段:

字段 必填 规则
上传图片 是 上传 PNG/JPG/WebP;透明底 PNG 是推荐格式。具体大小、像素与文件大小限制由媒体模块确定。
图片缩放 是 使用 Ant Design Slider;首期建议取值 10%–200%,表示相对演示底图短边的比例。

文字水印专属字段:

字段 必填 规则
文字内容 是 允许的最大长度与禁用字符由媒体模块确定。
字体 是 由服务端返回的、已随渲染服务部署的字体清单驱动,不能直接读取浏览器或开发机字体。
字体大小 是 12px–60px。

“查看效果”使用模板当前配置和固定演示底图打开预览。

4.3 商品编辑时主动加水印规则

用户在商品编辑页的已选图片上悬浮,点击“编辑 → 添加水印”,在弹窗选择一个工作空间水印模板。确认后系统对这张图片生成一份带水印的派生图,并以派生图替换此 SKU 当前图片位置。规则如下:

  • 商品级候选图片与每个 SKU 已选图片都可处理;最终仅提交用户明确选中的图片集合。
  • 原始图片不被改写;水印处理产物是独立、可追溯的派生素材,用户可在编辑弹窗恢复使用原图。
  • 派生任务固化水印模板版本、位置、缩放/字体和不透明度;模板后续编辑不影响已生成的派生图。
  • 首期不在上架任务中自动加水印,也不允许发布时临时替换;后续另行支持绑定水印的默认预选、批量添加或自动添加。

5. 本轮待确认事项

  1. 商品限额的 Ozon 数据来源与刷新频率仍待平台接口/真实店铺联调确认;在此之前固定显示 —。
  2. 账户是否从首期就允许多人共享同一工作空间/协作店铺?如果不做,首期仍按“一个账户一个工作空间”使用,但架构会保留扩展空间。
  3. 后续“推荐水印”是仅在图片弹窗中预选,还是支持批量/自动生成派生图?

6. 非功能性约束

  • API Key、Cookie、密码都属于高敏感信息:禁止日志记录、客户端缓存、列表返回和明文回显。
  • 所有店铺、水印、素材与后续商品数据必须按账户/工作空间隔离。
  • 凭据验证、仓库同步、图片上传和水印渲染可以失败或耗时,页面应展示最后一次状态与可重试入口,不能长时间阻塞表单提交。