# pb_tbl_product_list

> 来源：产品表字段草图（用户提供）与现有 PocketBase 表设计规范
> 类型：`base`
> 读写规则：公开可读（PocketBase `listRule = ""`、`viewRule = ""`）；新增 / 修改 / 删除仅 `ManagePlatform` / 管理角色允许

## 表用途

用于存储产品主数据，承载型号、分类、方案、通讯、供电、标签、价格等信息，并为前端产品列表检索与筛选提供统一数据源。

## 字段清单

| 字段名 | 类型 | 必填 | 说明 |
| :--- | :--- | :---: | :--- |
| `id` | `text` | 是 | PocketBase 记录主键 |
| `prod_list_id` | `text` | 是 | 产品列表业务 ID，唯一标识 |
| `prod_list_name` | `text` | 是 | 产品名称 |
| `prod_list_modelnumber` | `text` | 否 | 产品型号 |
| `prod_list_barcode` | `text` | 否 | 产品料号 |
| `prod_list_icon` | `text` | 否 | 产品图标，保存 `tbl_attachments.attachments_id`，多图时以 `|` 分隔 |
| `prod_list_description` | `text` | 否 | 产品说明（editor 内容，建议保存 Markdown 或已净化 HTML） |
| `prod_list_feature` | `text` | 否 | 产品特色 |
| `prod_list_parameters` | `json` | 否 | 产品参数（JSON 数组，格式为 `[ { "sort": 1, "name": "属性名", "value": "属性值" } ]`） |
| `prod_list_plantype` | `text` | 否 | 产品方案 |
| `prod_list_category` | `text` | 是 | 产品分类（必填，单选） |
| `prod_list_sort` | `number` | 否 | 排序值（同分类内按升序） |
| `prod_list_comm_type` | `text` | 否 | 通讯类型 |
| `prod_list_series` | `text` | 否 | 产品系列 |
| `prod_list_power_supply` | `text` | 否 | 供电方式 |
| `prod_list_tags` | `text` | 否 | 产品标签（辅助检索，以 `|` 聚合） |
| `prod_list_status` | `text` | 否 | 产品状态（有效 / 过期 / 主推等） |
| `prod_list_basic_price` | `number` | 否 | 基础价格 |
| `prod_list_vip_price` | `json` | 否 | 会员价数组，格式为 `[{"viplevel":"会员等级枚举值","price":1999}]` |
| `prod_list_remark` | `text` | 否 | 备注 |
| `is_delete` | `number` | 否 | 软删除标记，`0` 表示未删除，`1` 表示已删除，默认 `0` |

## 索引

| 索引名 | 类型 | 说明 |
| :--- | :--- | :--- |
| `idx_tbl_product_list_prod_list_id` | `UNIQUE INDEX` | 保证 `prod_list_id` 唯一 |
| `idx_tbl_product_list_prod_list_name` | `INDEX` | 加速按产品名称检索 |
| `idx_tbl_product_list_prod_list_modelnumber` | `INDEX` | 加速按产品型号检索 |
| `idx_tbl_product_list_prod_list_status` | `INDEX` | 加速按产品状态过滤 |
| `idx_tbl_product_list_prod_list_category` | `INDEX` | 加速按产品分类过滤 |
| `idx_tbl_product_list_prod_list_sort` | `INDEX` | 加速按排序值检索 |
| `idx_tbl_product_list_category_sort` | `INDEX` | 加速分类内排序计算 |
| `idx_tbl_product_list_prod_list_series` | `INDEX` | 加速按产品系列过滤 |
| `idx_tbl_product_list_prod_list_tags` | `INDEX` | 加速标签检索（模糊筛选场景） |

## 补充约定

- `prod_list_icon` 仅保存附件业务 ID，真实文件统一在 `tbl_attachments`；多图时按上传顺序使用 `|` 聚合。
- `prod_list_barcode` 为可空文本字段，用于保存产品料号；当前已接入产品管理页录入、产品列表模糊检索以及方案模板中的产品快照展示。
- `is_delete` 用于软删除控制，产品停用/删除时建议优先标记为 `1`。
- 集合默认查询规则已内置 `is_delete = 0`，产品列表默认不返回已软删除记录。
- 当前预构建脚本中已将 `listRule` 与 `viewRule` 设置为空字符串（`""`），对应 PocketBase 的“任何人可查看”。
- `prod_list_parameters` 使用 PocketBase `json` 字段，写入时应直接提交数组结构：`[{"sort":1,"name":"属性名","value":"属性值"}]`。
- `prod_list_parameters.sort` 用于稳定参数展示顺序，约定为正整数；前端未填写时可按当前录入/导入顺序自动补齐。
- `prod_list_vip_price` 使用 PocketBase `json` 字段，写入时应直接提交数组结构：`[{"viplevel":"VIP1","price":1999}]`。
- `prod_list_vip_price.viplevel` 必须保存“数据-会员等级”字典中的枚举值，`price` 保存对应会员等级价格。
- `prod_list_description` 作为 editor 内容字段，建议统一为 Markdown 或净化后的 HTML；若允许 HTML，需在写入前做 XSS 白名单过滤。
- 前端渲染 `prod_list_description` 时应保持和存储格式一致（Markdown 渲染器或受控 HTML 渲染），避免直接注入未净化内容。
- `prod_list_basic_price` 使用 `number`，如需货币精度策略建议后续统一为“分”或固定小数位。
- PocketBase 系统字段 `created`、`updated` 仍然存在，只是不在 collection 字段清单里单独声明。
- 本文档已同步当前产品表建表脚本；若已执行脚本，则以 PocketBase 实际结构为准。
