feat: 初始化项目,项目需求、方案文档

This commit is contained in:
R524809
2026-09-01 17:35:48 +08:00
commit 5b77ba72b5
23 changed files with 5173 additions and 0 deletions
@@ -0,0 +1,155 @@
# 账户、门店管理与水印管理需求
> 状态:讨论中。本文只定义产品需求、页面与状态口径;不预设数据库表、接口路径或技术栈。
## 1. 本期范围与导航
用户登录后显示左侧一级菜单:在线商品、采集箱、店铺管理、水印管理、定价工具。
本轮细化账户、店铺管理和水印管理。在线商品、采集箱、定价工具只确定入口,功能在后续单独讨论。
默认产品形态是一个账户可管理多个店铺;店铺目前先接入 Ozon,但不能把页面或领域名称永久写死为 Ozon,以便后续增加其他平台。
## 2. 账户注册与登录
### 2.1 注册
注册页字段只有手机号和密码,均为必填:
| 字段 | 规则 |
|---|---|
| 手机号 | 使用国家区号 + 手机号的标准化格式保存;同一手机号只能注册一个账户。首期注册页默认中国区号,但数据模型和界面需支持后续扩展。 |
| 密码 | 由后续安全设计确定最终长度与复杂度;页面需要二次输入密码并提示规则。密码只可安全散列存储,绝不回显。 |
首期注册成功即可登录使用。短信验证和风控验证不在首期流程执行,但要预留“手机号是否已验证”和“注册/登录风控结果”的状态,未来加功能时不改变账户主流程。
### 2.2 登录与会话
用户用手机号和密码登录。登录成功进入默认工作空间与首页;若后续一个账户拥有多个工作空间,再增加切换入口。首期需要提供退出登录;忘记密码、短信登录、第三方登录、设备管理和多因素认证均不在本轮范围。
### 2.3 全局平台与当前店铺上下文
平台和当前店铺是全站工作上下文,不在每个业务页面重复选择。页头在用户信息左侧放置“平台选择器”;用户切换平台后,菜单、类目、物流商、佣金规则和页面数据均切换到该平台范围。
在平台下有多个已授权店铺时,系统同时使用该平台的默认店铺作为“当前店铺”;后续可在同一页头区域增加店铺切换。新用户进入一个平台时优先选中该平台默认店铺。定价方案、商品和上架任务均从此全局上下文读取平台与店铺,避免表单中出现相互矛盾的平台选择。
## 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 上架时的默认加水印规则
当用户选择的目标店铺已经绑定水印模板时,点击“上架至 Ozon”后,系统在上传每张商品图片前生成一份带水印的派生图,并把派生图上传给 Ozon;未绑定模板则上传原选图。规则如下:
- 商品级图片与每个 SKU 已选图片都适用,最终以实际要提交给 Ozon 的图片集合为准。
- 原始图片和编辑页已选图片不被改写;水印处理产物是一次独立的、可追溯的上传副本。
- 上传任务固化水印模板版本、位置、缩放/字体和不透明度;模板后续编辑不影响已上架商品。
- 用户在具体上架任务中应能查看“将应用的水印模板”;是否允许该次上架临时取消或更换模板,留待发布流程需求确认。
## 5. 本轮待确认事项
1. 商品限额的 Ozon 数据来源与刷新频率仍待平台接口/真实店铺联调确认;在此之前固定显示 `—`。
2. 账户是否从首期就允许多人共享同一工作空间/协作店铺?如果不做,首期仍按“一个账户一个工作空间”使用,但架构会保留扩展空间。
3. 上架任务是否允许临时取消或替换门店默认水印?
## 6. 非功能性约束
- API Key、Cookie、密码都属于高敏感信息:禁止日志记录、客户端缓存、列表返回和明文回显。
- 所有店铺、水印、素材与后续商品数据必须按账户/工作空间隔离。
- 凭据验证、仓库同步、图片上传和水印渲染可以失败或耗时,页面应展示最后一次状态与可重试入口,不能长时间阻塞表单提交。