Files
yudao-ui-admin-vue3/src/views/ydoyun/report/lijun/reportpage6/API接口文档.md

1007 lines
46 KiB
Markdown
Raw Normal View History

2026-02-27 09:47:06 +08:00
# 报表系统 API 接口文档
## 目录
### 1. 查询条件
- [统一查询参数设计](#10-统一查询参数设计)
- [下拉选项接口](#11-下拉选项接口)
### 2. 顶部数据选项卡
- [KPI 指标数据接口](#21-kpi-指标数据接口)
### 3. 供应商表现 (Top 10) / 品类诊断(共用同一接口)
- [供应商表现与品类诊断接口(统一)](#31-供应商表现与品类诊断接口统一)
- [供应商表现 (Top 10) 更多](#32-供应商表现-top-10-更多)
### 4. 中类销售排名 Top 5
- [中类销售排名 Top 5 接口](#41-中类销售排名-top-5-接口)
- [中类销售排名 Top 5 更多](#42-中类销售排名-top-5-更多)
### 5. 商品明细列表
- [商品明细列表接口](#51-商品明细列表接口)
- [商品明细列表鼠标悬浮框](#52-商品明细列表鼠标悬浮框)
- [商品明细列表更多](#53-商品明细列表更多)
### 6. 品类诊断列表(与品类表现共用接口)
- 数据来源与 [3.1 品类表现与品类诊断接口](#31-品类表现与品类诊断接口统一) 相同,仅展示形式不同(卡片列表)。
### 7. 品类分析页面category-diagnostic
- [品类分析页面查询接口](#71-品类分析页面查询接口)
#### 7.1 品类分析页面查询接口
**品类分析页面**(路径 `/reports/lijun/category-diagnostic`)用于展示中类销售排名 Top 5 的详情,以卡片列表形式展示各品类/中类的诊断结果。
#### 接口信息
- **接口路径**: `/api/reportpage/executeProcedureWithData`
- **请求方式**: GET
- **存储过程名**: `YDY_AI_GET_SPDP3`
- **接口说明**: 获取品类分析卡片列表数据;返回所有品类/中类的 list用于卡片列表展示。
#### 请求参数
与 [统一查询参数设计](#10-统一查询参数设计) 一致,**不传 ghsdm**。
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| reportId | number | 是 | 固定 6 |
| name | string | 是 | 固定 `YDY_AI_GET_SPDP3` |
| rq_s | string | 是 | 开始日期 YYYY-MM-DD |
| rq_e | string | 是 | 结束日期 YYYY-MM-DD |
| ckdm | string | 否 | 门店代码,多选逗号分隔 |
| pp | string | 否 | 品牌代码,多选逗号分隔 |
| dalei | string | 否 | 大类代码,多选逗号分隔 |
| jj | string | 否 | 季节代码,多选逗号分隔 |
| zhonglei | string | 否 | 中类,默认空字符串 |
| p | string | 否 | 秘钥,默认 "123" |
| username | string | 否 | 当前登录用户 |
| ghsdm | string | **不传** | 品类分析页不传;供应商详情页传单个供应商 code |
#### 返回值结构
与供应商详情页**完全一致**`{ code, msg, data }`,其中 **data** 支持两种形态:
1. **二维数组**`data = [[列配置数组], [行数据数组]]`
- `data[0]`:列配置(每项含 title、keys/key、orders/order、labelKey、colorKey
- `data[1]`:行数据 list每项为一条品类/中类数据(含 title/name、value1、value2、…、value1date、value2date、…、tag、tagcolor、titleName、titleValue 等)
2. **一维数组**(混合):含 `keys` 的项为列配置,其余为行数据。
前端使用方式:`const columns = data[0]``const list = data[1]`;品类分析页用 list 渲染卡片列表卡片布局包含标题、titleName/titleValue、检测指标/实际结果/基准参考表格。
**针对「中类销售排名 Top 5 更多」**:该页面即品类分析卡片页,查询接口与本节一致(使用 `YDY_AI_GET_SPDP3`,不传 ghsdm。**返回值结构**及**与页面展示一致的示例数据**(列配置 keys、行数据 title/tag/tagcolor/titleName/titleValue、value1/value1date/value1tag/value1color 等)见 [4.2 中类销售排名 Top 5 更多](#42-中类销售排名-top-5-更多)。
#### 路由与查询条件
- **入口**: 仪表盘「中类销售排名 Top 5」点击「更多」或直接访问 `/reports/lijun/category-diagnostic`
- **Query 参数**: rq、rq2、ckdm、pp、season、zgj、category、line与统一查询参数一致页面加载时从 URL 读取并带入请求。
---
## 1. 查询条件
### 1.0 统一查询参数设计
仪表盘及各子页(中类排名、品类诊断、商品明细、产品卡片)共用一套查询条件,多选参数以**逗号分隔字符串**传给后端。
| 参数名 | 类型 | 必填 | 说明 | 示例 |
|--------|------|------|------|------|
| rq / rq_s | string | 是 | 开始日期,格式 YYYY-MM-DD | "2025-01-20" |
| rq2 / rq_e | string | 是 | 结束日期,格式 YYYY-MM-DD | "2025-01-27" |
| ckdm | string | 否 | 门店代码,多选时逗号分隔;可从字典 ljsm_kehu 获取 | "" 或 "S1,S2" |
| pp | string | 否 | 品牌代码,多选时逗号分隔;从 executeTable(pinpai) 获取 | "" 或 "P1,P2" |
| season | string | 否 | 季节代码,多选时逗号分隔;从 executeTable(jijie) 获取 | "" 或 "J1,J2" |
| zgj | string | 否 | 正特价1=正价0=特价,多选逗号分隔 | "" 或 "1,0" |
| category | string | 否 | 大类代码,多选时逗号分隔;从 executeTable(dalei) 获取 | "" 或 "D1,D2" |
| line | string | 否 | 线路代码,多选时逗号分隔;从 executeTable(xianlu) 获取 | "" 或 "L1,L2" |
| zhonglei | string | 否 | 中类,默认空字符串 | "" |
| username | string | 否 | 当前登录用户,用于权限与审计 | "admin" |
**说明**:前端多选组件得到数组后,传参时转为逗号拼接,例如 `ckdm: ['S1','S2']``ckdm: "S1,S2"`;空数组传空字符串表示不按该维度筛选。
---
### 1.1 下拉选项接口
仪表盘及各子页的下拉选项(品牌、季节、大类、线路、门店)统一通过 **executeTable** 获取。
- **接口路径**: `GET /api/reportpage/executeTable`
- **请求参数**: `{ reportId: 6, tableName: string }`
| tableName | 说明 | 前端用途 | 返回字段映射示例 |
|-----------|------|----------|------------------|
| pinpai | 品牌 | 品牌多选/单选 | PPMC → label, PPDM → value |
| jijie | 季节 | 季节多选 | JJMC → label, JJDM → value |
| dalei | 大类 | 大类/品类多选 | DLMC → label, DLDM → value |
| xianlu 或 line | 线路 | 线路多选 | XLMC/name → label, XLDM/code → value |
| ljsm_kehu | 门店 | 门店多选 | 字典 label/value |
- **reportId** 固定为 **6**。返回为数组或 `{ data/list/rows }` 包裹的数组,前端取 list 后按上表映射为 `{ label, value }[]`
---
## 2. 顶部数据选项卡
### 2.1 KPI 指标数据接口
#### 接口信息
- **接口路径**: `/api/report/product-dashboard/kpi` 或 使用 **executeProcedureWithData**reportId=6, name='YDY_AI_GET_SPDP1'
- **请求方式**: `GET`executeProcedureWithData 为 GET若独立接口可为 POST
- **接口说明**: 获取商品仪表板顶部 KPI 卡片数据:销售总额、平均折扣率、季末售罄率、库存周转、连带率。数据格式与下表一致,**顶部数据卡片数据格式以本节及 kpiCardData 表为准,无需改动**。
#### 请求参数
与 [统一查询参数设计](#10-统一查询参数设计) 一致。
**特殊说明**:若使用 `executeProcedureWithData` 方式调用,需额外传递:
- `reportId`: 固定为 `6`
- `name`: 存储过程/接口名KPI 为 `YDY_AI_GET_SPDP1`
#### 返回值类型
```json
{
"code": 200,
"msg": "查询成功",
"data": {
"kpiList": [
{
"title": "销售总额 (GMV)",
"unit": "¥",
"value": "842.5",
"valueSuffix": "w",
"trendText": 12,
"trend": "up",
"desc": "目标达成 92%",
"rawValue": 8425000,
"targetValue": 9150000,
"achievementRate": 92,
"miniBars": "33,50,40,75,100,67,50"
},
{
"title": "平均折扣率",
"unit": "%",
"value": "8.2",
"valueSuffix": "折",
"trendText": -0.3,
"trend": "down",
"desc": "毛利空间健康",
"bottomText": "正价占比: 65%",
"rawValue": 8.2,
"targetValue": 8.5
},
{
"title": "季末售罄率",
"unit": "%",
"value": "68.5",
"valueSuffix": "%",
"trendText": 5.2,
"trend": "up",
"desc": "同比提升",
"progress": 68.5,
"rawValue": 68.5,
"targetValue": 70
},
{
"title": "库存周转",
"unit": "Days",
"value": "135",
"trendText": -10,
"trend": "down",
"desc": "效率优化",
"bottomText": "库销比: 4.2 (偏高)",
"rawValue": 135,
"targetValue": 120
},
{
"title": "连带率 (UPT)",
"unit": "件/单",
"value": "1.85",
"trendText": 0.1,
"trend": "up",
"desc": "搭配推荐有效",
"bottomText": "客单价: ¥1,299",
"rawValue": 1.85,
"targetValue": 2.0
}
]
}
}
```
#### 字段含义
| 字段 | 格式 | 必填 | 含义 |
|------|------|------|------|
| code | number | 是 | 响应码200 表示成功 |
| msg | string | 是 | 响应消息 |
| data.kpiList | array | 是 | KPI 列表 |
| kpiList[].title | string | 是 | 指标标题(如“销售总额 (GMV)”) |
| kpiList[].unit | string | 否 | 单位(如“¥”“%”“Days”“件/单”) |
| kpiList[].value | string | 是 | 展示值(已格式化字符串) |
| kpiList[].valueSuffix | string | 否 | 后缀如“w”“折”“%”) |
| kpiList[].trendText | number | 是 | 趋势变化值(数值本身,前端据此展示箭头与颜色) |
| kpiList[].trend | string | 是 | 趋势方向:`up` / `down` |
| kpiList[].desc | string | 否 | 描述文案(如“目标达成 92%”) |
| kpiList[].rawValue | number | 否 | 原始值(便于前端二次计算/格式化) |
| kpiList[].targetValue | number | 否 | 目标值 |
| kpiList[].achievementRate | number | 否 | 达成率(百分比 0100 |
| kpiList[].miniBars | string | 否 | 迷你柱状图数据:逗号分隔数字字符串(仅 GMV 使用) |
| kpiList[].progress | number | 否 | 进度条数值 0100仅季末售罄率使用 |
| kpiList[].bottomText | string | 否 | 底部补充说明(如正价占比/库销比/客单价等) |
- **trend**:仅 `up` / `down`,所有指标必填;前端根据 trend 显示箭头与颜色。
- **miniBars**:仅销售总额返回,逗号分隔数字,前端自动加 %≥100 深色、<100 浅色
- **progress**仅季末售罄率返回0100。
- **bottomText**:平均折扣率、库存周转、连带率可返回;其他不返回。
---
## 3. 供应商表现 (Top 10) / 品类诊断(共用同一接口)
### 3.1 供应商表现与品类诊断接口(统一)
**供应商表现 (Top 10)** 与 **品类诊断列表** 使用同一接口、同一返回值结构。仪表盘「供应商表现」取前 10 条以表格展示;品类诊断页使用同一接口返回的 list 以卡片列表展示。
#### 接口信息
- **接口路径**: `/api/report/product-dashboard/category-performance`**executeProcedureWithData**reportId=6, name=**YDY_AI_GET_SPDP2**
- **请求方式**: GET / POST
- **接口说明**: 获取供应商表现/品类诊断数据,返回结构一致。用于仪表盘「供应商表现 (Top 10)」表格与品类诊断页卡片列表。
#### 返回值结构data 为二维数组)
接口整体仍为 `{ code, msg, data }`**其他结构不变**。仅 **data** 改为**二维数组**
- **data**: `[[列配置数组], [行数据数组]]`
- **第一组** `data[0]`:列配置数组(与下表「列配置」结构一致)。
- **第二组** `data[1]`行数据数组list每行为一条品类对象字段与「返回值结构统一字段」一致。
前端使用方式:`const columns = data[0]``const list = data[1]`;仪表盘取 list 前 10 条做表格,品类诊断页用 list 渲染卡片。
#### 请求参数
与 [统一查询参数设计](#10-统一查询参数设计) 一致。
#### 供应商表现 Top 10 表格:列配置与动态列
**列配置** `categoryColumns`(后端返回):表头与列按此配置渲染,列数不固定。
| 字段名 | 格式 | 必填 | 含义 |
|--------|------|------|------|
| title | string | 是 | 列标题(中文名,直接作为表头显示) |
| key | string | 是 | 该列取值字段名(行数据中对应 key 的值显示在单元格) |
| order | number | 否 | 列排序;数字越小越靠前,用于控制显示顺序 |
| labelKey | string | 否 | 标签取值字段名;有值时在单元格内显示标签,**不单独占一列**;支持**多值逗号拼接**,与 colorKey 一一对应 |
| colorKey | string | 否 | 标签颜色取值字段名;取值为 `up`/`down`/`flat``green`/`red`/`yellow`;支持**多值逗号拼接**,与 labelKey 按顺序一一对应 |
**行数据** `categoryList`:每行为一条对象。对每一列配置,单元格显示 `row[key]`;若该列配置了 `labelKey``row[labelKey]` 有值,则在同格内显示标签,颜色由 `row[colorKey]` 决定。**标签与颜色支持多值**`labelKey``colorKey` 对应字段可为逗号分隔字符串,前端按逗号拆成多组,每组「标签 + 颜色」一一对应渲染多个标签。携带“标签”“颜色”的字段仅用于展示标签与颜色,不作为单独列显示。
**示例(单值)**`{ supplier: "A公司", supplierLabel: "上升", supplierColor: "up" }` → 单元格为「A公司 上升」(「上升」为绿色标签)。
**示例(多值拼接)**`{ supplier: "A公司", supplierLabel: "上升,持续突破", supplierColor: "up,up" }` → 单元格为「A公司 上升 持续突破」(两个标签均为绿色)。
#### 返回值结构(统一字段,品类诊断共用)
每条数据可包含以下字段;**供应商表现 Top 10** 的列由列配置 + list 动态决定。
| 字段名 | 格式 | 必填 | 含义 |
|--------|------|------|------|
| categoryId | string | 是 | 品类ID |
| name | string | 是 | 品类名称 |
| label | string | 否 | 标签(文字);支持**多值逗号拼接**,与 trend 按顺序一一对应,如 `"上升,持续突破"` |
| trend | string | 否 | 标签颜色状态;支持**多值逗号拼接**,与 label 一一对应,如 `"up,up"`;单值为 `up`/`down`/`flat`(绿/红/黄) |
| grossProfit | number | 否 | 毛利 |
| grossMarginRate | number | 否 | 毛利率 |
| turnoverDays | number | 否 | 周转天 |
| status | string | 否 | 状态0全部、1低毛利、2缺货、3积压可多选用,拼接) |
| salesCount | number | 否 | 销量 |
| salesAmount | number | 否 | 销售额 |
| inventoryCount | number | 否 | 库存量 |
| inventoryCost | number | 否 | 库存成本 |
| inventoryTagAmount | number | 否 | 库存吊销额 |
| digestionRate | number | 否 | 消化率 |
| turnoverRate | number | 否 | 动销率 |
| salesCountRef | number | 否 | 销量基准参考 |
| salesAmountRef | number | 否 | 销售额基准参考 |
| inventoryCountRef | number | 否 | 库存量基准参考 |
| inventoryCostRef | number | 否 | 库存成本基准参考 |
| inventoryTagAmountRef | number | 否 | 库存吊销额基准参考 |
| digestionRateRef | number | 否 | 消化率基准参考 |
| turnoverRateRef | number | 否 | 动销率基准参考 |
#### 示例数据(与页面展示一致)
`data` 为**二维数组**:第一组为列配置,第二组为行数据 list。
```json
{
"code": 200,
"msg": "查询成功",
"data": [
[
{ "title": "供应商", "key": "supplier", "order": 1, "labelKey": "supplierLabel", "colorKey": "supplierColor" },
{ "title": "毛利率", "key": "grossMarginRate", "order": 2, "labelKey": "grossMarginRateLabel", "colorKey": "grossMarginRateColor" },
{ "title": "动销率", "key": "turnoverRate", "order": 3, "labelKey": "turnoverRateLabel", "colorKey": "turnoverRateColor" },
{ "title": "销售额", "key": "salesAmount", "order": 4, "labelKey": "salesAmountLabel", "colorKey": "salesAmountColor" }
],
[
{
"categoryId": "C001",
"name": "女装 - 连衣裙",
"label": "销量领先",
"trend": "up",
"supplier": "杭州女装供应链",
"supplierLabel": "上升,持续突破",
"supplierColor": "up,up",
"grossProfit": 1238500,
"grossMarginRate": 42,
"grossMarginRateLabel": "良好",
"grossMarginRateColor": "up",
"turnoverDays": 28,
"status": "0",
"salesCount": 12500,
"salesAmount": 2948750,
"inventoryCount": 12500,
"inventoryCost": 1850000,
"inventoryTagAmount": 3200000,
"digestionRate": 68,
"turnoverRate": 55,
"salesCountRef": 11200,
"salesAmountRef": 2650000,
"inventoryCountRef": 11800,
"inventoryCostRef": 1720000,
"inventoryTagAmountRef": 2980000,
"digestionRateRef": 65,
"turnoverRateRef": 52
},
{
"categoryId": "C002",
"name": "女装 - 休闲裤",
"label": "稳步运行",
"trend": "flat",
"grossProfit": 703300,
"grossMarginRate": 38,
"turnoverDays": 35,
"status": "0",
"salesCount": 8900,
"salesAmount": 1853500,
"inventoryCount": 9800,
"inventoryCost": 1420000,
"inventoryTagAmount": 2450000,
"digestionRate": 62,
"turnoverRate": 48,
"salesCountRef": 8200,
"salesAmountRef": 1690000,
"inventoryCountRef": 9500,
"inventoryCostRef": 1380000,
"inventoryTagAmountRef": 2350000,
"digestionRateRef": 59,
"turnoverRateRef": 45
},
{
"categoryId": "C003",
"name": "女装 - 风衣/外套",
"grossProfit": 606600,
"grossMarginRate": 40,
"turnoverDays": 52,
"status": "3",
"salesCount": 3200,
"salesAmount": 1516500,
"inventoryCount": 8500,
"inventoryCost": 1180000,
"inventoryTagAmount": 2000000,
"digestionRate": 58,
"turnoverRate": 52,
"salesCountRef": 2850,
"salesAmountRef": 1350000,
"inventoryCountRef": 9200,
"inventoryCostRef": 1250000,
"inventoryTagAmountRef": 2150000,
"digestionRateRef": 55,
"turnoverRateRef": 48
},
{
"categoryId": "C004",
"name": "女装 - 衬衫",
"grossProfit": 363960,
"grossMarginRate": 36,
"turnoverDays": 42,
"status": "1",
"salesCount": 6800,
"salesAmount": 1011000,
"inventoryCount": 7200,
"inventoryCost": 920000,
"inventoryTagAmount": 1580000,
"digestionRate": 52,
"turnoverRate": 45,
"salesCountRef": 6400,
"salesAmountRef": 950000,
"inventoryCountRef": 7500,
"inventoryCostRef": 960000,
"inventoryTagAmountRef": 1620000,
"digestionRateRef": 50,
"turnoverRateRef": 42
}
]
]
}
```
说明:最外层为 `{ code, msg, data }``data` 为长度为 2 的数组,`data[0]` 为列配置,`data[1]` 为 list。
#### 数据用途说明
- **仪表盘「供应商表现 (Top 10)」**:请求本接口,取 `data[0]`(列配置)与 `data[1]`(行数据 list前 10 条;表头与列按 `data[0]` 渲染(每列 title、key可选 labelKey、colorKey。**筛选项**:从当前 list 中收集每条数据的 `label`(按逗号拆分)去重后,与「全部」一起作为筛选条件(如:全部、销量领先、持续突破、低毛利…);选中某标签时仅显示该行 `label` 包含该标签的条目。点击行可跳转品类诊断。
- **品类诊断页**:请求本接口,用同一 `data[1]`list渲染卡片列表卡片展示上述全部指标及基准参考列带升降箭头。
### 3.2 供应商表现 (Top 10) 更多
点击「更多」跳转品类诊断页,仍调用 [3.1 品类表现与品类诊断接口](#31-品类表现与品类诊断接口统一),仅展示形式变为卡片列表。
---
## 4. 中类销售排名 Top 5
### 4.1 中类销售排名 Top 5 接口
#### 接口信息
- **接口路径**: `/api/reportpage/executeProcedureWithData`
- **存储过程名**: `YDY_AI_GET_SPDP3`
- **请求方式**: GET
- **接口说明**: 获取中类销售排名 Top5仪表盘以**饼图**形式展示,饼图居中偏上,图例在底部横向排列;饼图标签仅显示百分比,图例显示「名称 占比%」;点击饼图扇区可跳转品类诊断页;悬停显示详情卡片(销量信息)。
#### 请求参数
与 [统一查询参数设计](#10-统一查询参数设计) 一致,**zhonglei 固定为空字符串**。
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| reportId | number | 是 | 固定 6 |
| name | string | 是 | 固定 `YDY_AI_GET_SPDP3` |
| rq_s | string | 是 | 开始日期 YYYY-MM-DD |
| rq_e | string | 是 | 结束日期 YYYY-MM-DD |
| ckdm | string | 否 | 门店代码,多选逗号分隔 |
| pp | string | 否 | 品牌代码,多选逗号分隔 |
| dalei | string | 否 | 大类代码,多选逗号分隔 |
| jj | string | 否 | 季节代码,多选逗号分隔 |
| zgj | string | 否 | 正特价多选逗号分隔1=正价0=特价) |
| line | string | 否 | 线路代码,多选逗号分隔 |
| zhonglei | string | 否 | 中类,**固定为空字符串 ''** |
| p | string | 否 | 秘钥,默认 "123" |
| username | string | 否 | 当前登录用户 |
#### 返回值结构
返回格式:`{ code, msg, data }`,其中 **data** 为一维数组(混合格式):
- **列配置项**(含 `keys` 字段):前几项为列配置
- `keys="title"`:对应 name中类名称数据行中对应 `title` 字段
- `keys="value1"`:对应 value销量数据行中对应 `value1` 字段
- **数据行**(不含 `keys` 字段):后续项为数据行
- `title`:中类名称
- `value1`:销量值(用于饼图展示)
**数据解析逻辑**
1. 分离列配置(含 `keys` 字段)和数据行(不含 `keys` 字段)
2. 从列配置中找到 `keys="title"` 的列(对应 name`keys="value1"` 的列(对应 value
3. 从数据行中提取 `title` 作为名称,`value1` 作为销量值
4. 按销量降序排序,计算各中类的销量占比,取前 5 条用于饼图展示
#### 返回值示例
```json
{
"code": 0,
"msg": "",
"data": [
{
"keys": "title",
"title": "name",
"orders": 1
},
{
"keys": "value1",
"title": "value",
"orders": 2
},
{
"title": "K休闲裤类",
"value1": 394
},
{
"title": "外套类",
"value1": 254
},
{
"title": "棉衣类",
"value1": 229
}
]
}
```
#### 数据用途说明
- **仪表盘「中类销售排名 Top 5」**:以饼图展示,前端通过数据映射逻辑获取各中类的销量,计算占比后取前 5 条绘制扇区;悬停显示销量信息;点击扇区跳转品类诊断页。
- **点击「更多」**:跳转品类诊断页,携带当前查询条件。
### 4.2 中类销售排名 Top 5 更多(品类分析卡片页)
点击「中类销售排名 Top 5」的「更多」进入**品类分析**页(路径 `/reports/lijun/category-diagnostic`),以卡片列表展示各品类/中类的诊断结果。该页面与 [7.1 品类分析页面查询接口](#71-品类分析页面查询接口) 使用**同一查询接口**与**同一返回值结构**。
#### 查询接口
- **接口路径**: `GET /api/reportpage/executeProcedureWithData`
- **存储过程名**: `YDY_AI_GET_SPDP3`(与品类分析页 7.1 一致)
- **请求参数**: 与 [统一查询参数设计](#10-统一查询参数设计) 一致,**不传 ghsdm**;传 rq_s、rq_e、ckdm、pp、dalei、jj、zhonglei、p、username 等。
#### 返回值结构
与 [3.1 供应商表现与品类诊断接口](#31-供应商表现与品类诊断接口统一) / [7.1 品类分析页面查询接口](#71-品类分析页面查询接口) 一致:`{ code, msg, data }`,其中 **data** 为长度为 2 的数组:
- **data[0]**:列配置数组。每项为 `{ title, key/keys, order/orders, labelKey?, colorKey? }`。第一列一般为品类名称(如 key 为 `title`),后续列为检测指标(如 key 为 `value1``value2`…)。前端用其生成卡片内「检测指标 / 实际结果 / 基准参考」表格。
- **data[1]**:行数据 list。每条对应一张品类诊断卡片字段需与列配置及页面展示一致。
**行数据每条(与页面展示一致)**
| 字段 | 类型 | 说明 |
|------|------|------|
| title / name | string | 卡片标题(品类/中类名称) |
| tag | string | 状态标签,逗号分隔(如 `"低毛利,缺货"`),用于卡片左上角标签 |
| tagcolor | string | 标签/边框颜色,逗号分隔(如 `"red,down"`),与 tag 顺序对应;含 down/red 时卡片边框为红 |
| titleName / titleValue | string | 卡片右上角「名称: 值」(如 周转天: 28 |
| key | number/string | 某指标实际值key 与列配置中 key 一致(如 value1、value2 |
| key+date | string | 该指标基准参考值,展示在「基准参考」列 |
| key+tag | string | 可选,该指标标签(如「上升」),逗号分隔多值 |
| key+color | string | 可选该指标颜色up/down/flat 或 green/red逗号分隔与 key+tag 对应;用于升降箭头与标签样式 |
说明:列配置中除第一列外的每一列,若行数据中存在对应 `col.key + 'date'` 且非空,则卡片内展示一行「检测指标 = col.title / 实际结果 = row[col.key] / 基准参考 = row[col.key+date]」,并可带升降箭头(由 key+color 推断)及小标签(由 key+tag、key+color 解析)。
#### 示例数据(与页面展示一致)
以下示例对应品类分析卡片页的展示:列配置为「品类 + 销量 + 销售额 + 库存量」,行数据含 title、tag、tagcolor、titleName、titleValue 及 value1/value1date、value2/value2date 等。
```json
{
"code": 200,
"msg": "查询成功",
"data": [
[
{ "title": "品类", "keys": "title", "orders": 0 },
{ "title": "销量", "keys": "value1", "orders": 1 },
{ "title": "销售额", "keys": "value2", "orders": 2 },
{ "title": "库存量", "keys": "value3", "orders": 3 }
],
[
{
"title": "女装 - 连衣裙",
"tag": "低毛利",
"tagcolor": "red",
"titleName": "周转天",
"titleValue": "28",
"value1": 12500,
"value1date": "11,200",
"value1tag": "上升",
"value1color": "up",
"value2": 2948750,
"value2date": "2,650,000",
"value2tag": "上升",
"value2color": "up",
"value3": 12500,
"value3date": "11,800",
"value3tag": "下降",
"value3color": "down"
},
{
"title": "女装 - 休闲裤",
"tag": "稳步运行",
"tagcolor": "flat",
"titleName": "周转天",
"titleValue": "35",
"value1": 8900,
"value1date": "8,200",
"value2": 1853500,
"value2date": "1,690,000",
"value3": 9800,
"value3date": "9,500"
},
{
"title": "女装 - 风衣/外套",
"tag": "积压",
"tagcolor": "down",
"titleName": "周转天",
"titleValue": "52",
"value1": 3200,
"value1date": "2,850",
"value2": 1516500,
"value2date": "1,350,000",
"value3": 8500,
"value3date": "9,200",
"value3tag": "下降",
"value3color": "down"
}
]
]
}
```
说明:最外层为 `{ code, msg, data }``data[0]` 为列配置(支持 title、keys、orders前端会取 keys 作为 key、orders 作为 order`data[1]` 为行数据 list。卡片标题取 `row.title ?? row.name`,标签取 `row.tag` 按逗号拆分,右上角取 `row.titleName``row.titleValue`;表格每行由列配置(除首列)中该行存在 `key+date` 的列动态生成,实际结果取 `row[key]`,基准参考取 `row[key+date]`,箭头与标签由 `row[key+tag]``row[key+color]` 解析。
---
## 5. 商品明细列表
### 5.1 商品明细列表接口
#### 接口信息
- **接口路径**: `/api/report/product-dashboard/product-list`**executeProcedureWithData**reportId=6, name 由后端约定)
- **请求方式**: `GET` / `POST`
- **接口说明**: 获取商品明细列表数据,包含销售、库存、售罄率、折扣率、尺码状态、生命周期等;用于仪表盘表格与产品卡片页(可选 productCode 定位当前商品)。
#### 请求参数
与 [统一查询参数设计](#10-统一查询参数设计) 一致,并增加以下列表专用参数:
| 参数名 | 类型 | 必填 | 说明 | 示例 |
|--------|------|------|------|------|
| keyword | string | 否 | 关键词搜索(款号/名称) | "" 或 "GZ6596Z" |
| pageNum | number | 否 | 页码,默认 1 | 1 |
| pageSize | number | 否 | 每页条数,默认 20 | 20 |
| productCode | string | 否 | 商品款号(用于定位当前商品) | "" 或 "54000008" |
#### 数据用途说明
- **仪表盘「商品明细列表」**:表格列包括商品信息(图+名称+货号+颜色+季节)、类目/波段、销量、销售额、库存、周转、售罄率(进度条)、折扣率、断码监控(尺码芯片)、生命周期、供货商、操作;支持关键词搜索(款号/名称)、分页展示。
### 5.2 商品明细列表鼠标悬浮框
鼠标悬停在商品明细列表的表格行上时,展示商品详情悬浮卡片。
**数据来源**:建议使用「按产品 code 查询商品悬浮详情接口」单独查询,避免商品列表接口字段不足或分页导致的数据不全;同时确保**必须携带产品 code** 精确查询。
#### 5.2.1 商品悬浮详情接口(按产品 code 查询)
##### 接口信息
- **接口路径**: `GET /api/reportpage/executeProcedureWithData`
- **请求方式**: GET
- **存储过程名**: `YDY_AI_GET_SPMX_DETAIL`(建议;后端可按实际命名)
- **接口说明**: 根据**产品款号 code** + 当前查询条件,返回商品悬浮卡片所需的完整字段(图片、条码、颜色、尺码库存、价格、销售/库存、售罄率、折扣、生命周期等)。
##### 请求参数
在 [统一查询参数设计](#10-统一查询参数设计) 基础上,增加并要求以下参数:
| 参数名 | 类型 | 必填 | 说明 | 示例 |
|--------|------|------|------|------|
| reportId | number | 是 | 固定 6 | 6 |
| name | string | 是 | 固定 `YDY_AI_GET_SPMX_DETAIL` | "YDY_AI_GET_SPMX_DETAIL" |
| code | string | **是** | 产品款号/货号(悬浮卡片必须携带) | "54000008" |
| rq_s | string | 是 | 开始日期 YYYY-MM-DD | "2025-01-20" |
| rq_e | string | 是 | 结束日期 YYYY-MM-DD | "2025-01-27" |
| ckdm | string | 否 | 门店代码,多选逗号分隔 | "S1,S2" |
| pp | string | 否 | 品牌代码,多选逗号分隔 | "P1,P2" |
| dalei | string | 否 | 大类代码,多选逗号分隔 | "D1,D2" |
| jj | string | 否 | 季节代码,多选逗号分隔 | "J1,J2" |
| zgj | string | 否 | 正/特价,多选逗号分隔 | "1,0" |
| line | string | 否 | 线路代码,多选逗号分隔 | "L1,L2" |
| p | string | 否 | 秘钥,默认 "123" | "123" |
| username | string | 否 | 当前登录用户 | "admin" |
##### 返回值结构
`{ code, msg, data }`,其中 `data` 为一个对象(单商品详情),字段与页面展示一致。
**悬浮卡片展示字段**
- **商品图片**`imageUrl`
- **款号**`code`
- **条码**`barcode`
- **颜色**`color`
- **进价/卖价**`purchasePrice` / `sellingPrice`
- **毛利率**`grossMargin`可选0-1 小数;若不传,前端可用 `purchasePrice/sellingPrice` 计算展示)
- **类目**`category`
- **上市天数**`daysOnMarket`
- **销量/销售额/库存/周转**`salesCount` / `salesAmount` / `inventoryCount` / `turnoverText`
- **售罄率**`selloutRate`(进度条颜色由 `selloutRateStatus` 在前端映射)
- **折扣**`discount`
- **尺码剩余数量**`sizes`(数组,显示每个尺码的库存状态)
- **断码**`sizeStatusText`
- **生命周期**`lifecycle`(标签,类型由 `lifecycleType` 控制)
**说明**
- **必须带 code 查询**:悬浮卡片不依赖列表行数据是否完整。
- **兼容兜底**:若后端暂未提供本接口,前端可先用 [5.1 商品明细列表接口](#51-商品明细列表接口) 的行数据做展示兜底,但字段可能缺失(如 barcode、sizes、purchasePrice 等)。
##### 示例数据(与页面展示一致)
```json
{
"code": 200,
"msg": "查询成功",
"data": {
"name": "GZ6596Z 法式收腰连衣裙",
"code": "54000008",
"barcode": "6901234567890",
"color": "黑色",
"season": "25春 一波段",
"category": "女装 / 连衣裙",
"supplierName": "杭州女装供应链有限公司",
"imageUrl": "https://img.alicdn.com/imgextra/i1/2215397650053/O1CN01kQKs0S1COq3OWK7Wb_!!2215397650053.jpg",
"purchasePrice": 168,
"sellingPrice": 399,
"grossMargin": 0.579,
"daysOnMarket": 35,
"salesCount": 320,
"salesAmount": 85200,
"inventoryCount": 120,
"turnoverDays": 15,
"turnoverText": "周转: 15天 (极快)",
"turnoverStatus": "success",
"selloutRate": 78,
"selloutRateStatus": "danger",
"discount": "9.5折",
"discountStatus": "info",
"sizes": [
{ "label": "S", "status": "out", "title": "S码 缺货", "stock": 0 },
{ "label": "M", "status": "out", "title": "M码 缺货", "stock": 0 },
{ "label": "L", "status": "low", "title": "L码 紧张", "stock": 8 },
{ "label": "XL", "status": "ok", "title": "XL码 充足", "stock": 45 }
],
"sizeStatusText": "缺核心码",
"sizeStatusStatus": "danger",
"lifecycle": "爆发成长期",
"lifecycleType": "success",
"lifecycleIcon": "fa-solid:fire-alt"
}
}
```
### 5.3 商品明细列表更多
点击商品明细列表的表格行,跳转到「查看更多产品卡片」页面。
**数据来源**:使用 [5.1 商品明细列表接口](#51-商品明细列表接口),可选传 `productCode` 参数定位当前商品。
**请求参数**:在统一查询参数基础上增加:
- `keyword`:款号/名称搜索(可选)
- `pageNum`:页码(默认 1
- `pageSize`:每页条数(默认 20
- `productCode`:当前商品款号(可选,用于定位当前商品)
**展示方式**:产品卡片页以卡片形式展示商品列表,每个卡片包含商品图片、名称、款号、颜色、季节、类目、上市天数、销量、销售额、库存、周转、售罄率、折扣、尺码状态、生命周期、供货商等信息。
**说明**:与仪表盘商品明细列表使用相同的数据接口和数据结构,只是展示方式不同(表格 vs 卡片)。
#### 示例数据(与页面展示一致)
```json
{
"code": 200,
"msg": "查询成功",
"data": {
"list": [
{
"name": "GZ6596Z 法式收腰连衣裙",
"code": "54000008",
"color": "黑色",
"season": "25春 一波段",
"category": "女装 / 连衣裙",
"daysOnMarket": 35,
"salesAmount": 85200,
"salesCount": 320,
"inventoryCount": 120,
"turnoverText": "周转: 15天 (极快)",
"turnoverStatus": "success",
"selloutRate": 78,
"selloutRateStatus": "danger",
"discount": "9.5折",
"discountStatus": "info",
"sizes": [
{ "label": "S", "status": "out", "title": "S码 缺货", "stock": 0 },
{ "label": "M", "status": "out", "title": "M码 缺货", "stock": 0 },
{ "label": "L", "status": "low", "title": "L码 紧张", "stock": 8 },
{ "label": "XL", "status": "ok", "title": "XL码 充足", "stock": 45 }
],
"sizeStatusText": "缺核心码",
"sizeStatusStatus": "danger",
"lifecycle": "爆发成长期",
"lifecycleType": "success",
"lifecycleIcon": "fa-solid:fire-alt",
"actionText": "补货",
"actionType": "primary",
"barcode": "6901234567890",
"purchasePrice": 168,
"sellingPrice": 399,
"imageUrl": "https://img.alicdn.com/imgextra/i1/2215397650053/O1CN01kQKs0S1COq3OWK7Wb_!!2215397650053.jpg",
"supplierName": "杭州女装供应链有限公司"
},
{
"name": "7537X 双面呢大衣",
"code": "54000321",
"color": "驼色",
"season": "24冬 三波段",
"category": "女装 / 外套",
"daysOnMarket": 120,
"salesAmount": 22000,
"salesCount": 18,
"inventoryCount": 850,
"turnoverText": "周转: 280天 (滞销)",
"turnoverStatus": "info",
"selloutRate": 15,
"selloutRateStatus": "warning",
"discount": "6.0折",
"discountStatus": "danger",
"sizes": [
{ "label": "S", "status": "ok", "title": "S码 充足", "stock": 210 },
{ "label": "M", "status": "ok", "title": "M码 充足", "stock": 220 },
{ "label": "L", "status": "ok", "title": "L码 充足", "stock": 215 },
{ "label": "XL", "status": "ok", "title": "XL码 充足", "stock": 205 }
],
"sizeStatusText": "库存齐色齐码",
"sizeStatusStatus": "info",
"lifecycle": "严重滞销",
"lifecycleType": "danger",
"lifecycleIcon": "ep:circle-close",
"actionText": "调价",
"actionType": "warning",
"barcode": "6901234567891",
"supplierName": "上海大衣制造厂",
"purchasePrice": 580,
"sellingPrice": 1299,
"imageUrl": "https://img.alicdn.com/imgextra/i2/2215397650053/O1CN01kQKs0S1COq3OWK7Wb_!!2215397650053.jpg"
}
],
"total": 156,
"pageNum": 1,
"pageSize": 20
}
}
```
#### 字段含义
| 字段 | 格式 | 必填 | 含义 |
|------|------|------|------|
| code | number | 是 | 响应码200 表示成功 |
| msg | string | 是 | 响应消息 |
| data.list | array | 是 | 商品明细列表 |
| data.total | number | 是 | 总记录数(分页用) |
| data.pageNum | number | 是 | 当前页码 |
| data.pageSize | number | 是 | 每页条数 |
| list[].name | string | 是 | 商品名称 |
| list[].code | string | 是 | 款号/货号 |
| list[].color | string | 是 | 颜色 |
| list[].season | string | 是 | 季节/波段 |
| list[].category | string | 是 | 类目 |
| list[].daysOnMarket | number | 是 | 上市天数 |
| list[].salesAmount | number | 是 | 销售额(单位:分) |
| list[].salesCount | number | 是 | 销量(件) |
| list[].inventoryCount | number | 是 | 库存量(件) |
| list[].turnoverText | string | 是 | 周转展示文案(如“周转: 15天 (极快)”) |
| list[].turnoverStatus | string | 是 | 周转展示状态success/warning/danger/info由前端映射为样式 |
| list[].selloutRate | number | 是 | 售罄率0100 |
| list[].selloutRateStatus | string | 是 | 售罄率展示状态success/warning/danger/info由前端映射为样式与进度条颜色 |
| list[].discount | string | 是 | 折扣文案如“9.5折”) |
| list[].discountStatus | string | 否 | 折扣展示状态success/warning/danger/info由前端映射为样式 |
| list[].sizes | array | 是 | 尺码状态数组 |
| sizes[].label | string | 是 | 尺码S/M/L/XL… |
| sizes[].status | string | 是 | 尺码状态out/low/warn/ok由前端映射为样式类红/橙/黄/灰) |
| sizes[].title | string | 是 | 悬浮提示如“S码 缺货”) |
| sizes[].stock | number | 否 | 该尺码剩余数量 |
| sizes[].outOfStock | boolean | 否 | 是否缺货 |
| list[].sizeStatusText | string | 是 | 断码说明文案 |
| list[].sizeStatusStatus | string | 是 | 断码展示状态success/warning/danger/info由前端映射为样式 |
| list[].lifecycle | string | 是 | 生命周期文案 |
| list[].lifecycleType | string | 是 | 生命周期标签类型success/danger/info/warning |
| list[].lifecycleIcon | string | 是 | 生命周期图标名 |
| list[].actionText | string | 是 | 操作按钮文案 |
| list[].actionType | string | 是 | 操作按钮类型primary/warning/default/danger |
| list[].productId | string | 否 | 商品 ID |
| list[].imageUrl | string | 否 | 商品图片 URL |
| list[].turnoverDays | number | 否 | 周转天数(数值) |
| list[].grossMargin | number | 否 | 毛利率01小数 |
| list[].barcode | string | 否 | 条码 |
| list[].purchasePrice | number | 否 | 进价(元) |
| list[].sellingPrice | number | 否 | 卖价(元) |
| list[].supplierName | string | 否 | 供货商名称 |
---
## 6. 品类诊断列表(与品类表现共用接口)
品类诊断页与「供应商表现 (Top 10)」使用**同一接口**、**同一返回值结构**。
- **接口**:见 [3.1 品类表现与品类诊断接口(统一)](#31-品类表现与品类诊断接口统一)。
- **请求参数**:与统一查询参数一致。
- **返回**`data` 为二维数组 `[[列配置], [list]]``data[0]` 为列配置,`data[1]` 为行数据 list品类表现表格按列配置动态渲染品类诊断共用 list 结构(品类名称、毛利、毛利率、周转天、状态、销量、销售额、库存量、库存成本、库存吊销额、消化率、动销率及对应基准参考字段)。
**品类诊断页展示**:品类分析页(路径 `/reports/lijun/category-diagnostic`)用上述 list`data[1]`)渲染卡片列表;卡片头部为品类名称、状态标签(由 `status` 解析)、周转天等;指标表格三列「检测指标 / 实际结果 / 基准参考」,对应销量、销售额、库存量、库存成本、库存吊销额、消化率、动销率及带 `Ref` 的基准参考,升降箭头由实际值与参考值比较得出。
**品类代码说明**`dalei` 参数值):
- `"1"` - 女装 `"2"` - 男装 `"3"` - 童装 `"4"` - 鞋区 `"5"` - 内衣睡衣 `"6"` - 床上用品 `"7"` - 皮具箱包 `"8"` - 百货 `"9"` - 礼品区 `"A"` - 游戏厅 `"B"` - 联营 `"0"` - 玩具 `"C"` - 辅料
---
---
## 附录
### A. 通用响应格式
所有接口统一使用以下响应格式:
```json
{
"code": 200, // 响应码: 200-成功, 400-参数错误, 500-服务器错误
"msg": "查询成功", // 响应消息
"data": {} // 响应数据
}
```
### B. 错误码说明
| 错误码 | 说明 |
|--------|------|
| 200 | 请求成功 |
| 400 | 请求参数错误 |
| 401 | 未授权, 需要登录 |
| 403 | 无权限访问 |
| 404 | 资源不存在 |
| 500 | 服务器内部错误 |
### C. 日期格式说明
- 所有日期参数统一使用格式: `YYYY-MM-DD`
- 示例: `2025-01-27`
- 时区: 服务器时区
### D. 金额单位说明
- 所有金额字段统一使用 **分** 作为单位
- 前端显示时需要转换为元: `金额(元) = 金额(分) / 100`
- 示例: 后端返回 `8425000` 分, 前端显示为 `84250.00`
### E. 分页说明
- `pageNum`: 页码, 从1开始
- `pageSize`: 每页数量, 默认20
- 返回数据包含 `total` 总记录数, 用于前端分页组件
### F. 筛选条件说明
- `"all"` 表示不筛选, 查询全部
- 多个值使用数组传递, 如: `["1", "2"]`
- 空数组 `[]` 等同于 `"all"`
---
**文档版本**: v1.7
**最后更新**: 2025-01-25
**维护人员**: 开发团队
**v1.7 更新说明**
- **供应商表现与品类诊断统一接口**:供应商表现 (Top 10) 与品类诊断列表共用同一接口;接口返回 `data` 为二维数组 `[[列配置], [list]]`,第一组为列、第二组为行数据;供应商表现表格按列配置 + list 动态渲染(每列:名称、标签、颜色)。
**v1.6 更新说明**
- **简化请求参数说明**:所有接口的请求参数统一引用「统一查询参数设计」部分,不再在每个接口中重复叙述。仅保留特殊参数说明(如 KPI 接口的 reportId/name、商品明细列表的分页参数等
**v1.5 更新说明**
- **删除不使用的接口文档**:删除 BCG 矩阵接口文档,因为页面中已不再显示 BCG 矩阵图表。
**v1.4 更新说明**
- **按页面功能模块重新组织文档结构**:按照实际页面功能模块划分,分为查询条件、顶部数据选项卡、供应商表现 (Top 10)、中类销售排名 Top 5、商品明细列表、品类诊断列表等模块每个模块包含主接口和相关的"更多"页面接口说明。
- **新增页面功能说明**
- **供应商表现 (Top 10) 更多**:说明点击"更多"按钮跳转到品类诊断页
- **中类销售排名 Top 5 更多**:说明点击"更多"按钮跳转到品类诊断页
- **商品明细列表鼠标悬浮框**:说明悬浮卡片展示的字段和数据来源
- **商品明细列表更多**:说明点击表格行跳转到产品卡片页
- **目录结构优化**:按照页面功能模块组织,便于前端开发人员快速找到对应页面的接口文档。
**v1.3 更新说明**
- **重新组织文档结构**:按照功能模块划分,分为基础模块、仪表盘模块、商品管理模块、品类分析模块;更新目录结构,按模块组织接口,便于查找和维护。
- **接口模块化重组**
- **基础模块**:统一查询参数设计、下拉选项接口
- **仪表盘模块**KPI 指标、中类销售排名 Top5、供应商表现 (Top 10)
- **商品管理模块**:商品明细列表接口
- **品类分析模块**:品类诊断列表接口
**v1.2 更新说明**
- **新增 1.3 供应商表现 (Top 10) 接口**:表格按后端返回的列配置与行数据动态渲染;每列支持名称、标签、颜色;支持筛选和展开/收起。
- **更新 1.2 中类销售排名 Top5 接口**:更新接口说明,明确以饼图形式展示,饼图标签仅显示百分比,图例在底部横向排列;更新数据用途说明,明确饼图展示方式和交互。
**v1.1 更新说明**
- 新增「0. 统一查询参数设计」,仪表盘及各子页共用 rq_s/rq_e、ckdm、pp、jj、dalei、line、zgj、username多选以逗号分隔。
- 1.1 KPI 接口:补充 kpiCardData 表结构及与顶部数据卡片一致的响应示例trend 仅 up/downminiBars/progress/bottomText 按指标区分)。
- 新增 1.3 中类销售排名 Top5、1.4 商品明细列表(含 productCode、keyword、分页的查询接口与参数。
- 2.1 品类诊断列表请求参数改为统一查询参数。
- 新增「3. 下拉选项接口」executeTablereportId=6tableName: pinpai/jijie/dalei/xianlu/line/ljsm_kehu