Files
xin-procurement-weapp/mini-home-api.md
T
2026-08-14 12:34:25 +08:00

173 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 小程序首页接口文档
> 适用端:微信小程序(h5 仓库,Taro)
> 后台配置入口:PC 后台「客户端配置」菜单(首页轮播图 / 宫格导航 / 促销推荐卡片)
> 更新日期:2026-08-14
## 通用约定
| 项 | 说明 |
|---|---|
| 根地址 | `BASE_URL`(见 `src/utils/request.ts`,如 `http://localhost:8000/index.php` |
| 认证 | 请求头 `Authorization: Bearer {token}`,token 来自登录接口,本地存储 key `auth_token` |
| 响应包络 | `{ success: boolean, data: T, msg?: string, showType?: number }` |
| 失败处理 | `success=false``msg` 为中文错误信息;HTTP 401 表示登录过期,需重新登录 |
## GET /mini/home
首页配置聚合接口:一次返回轮播图、宫格导航、促销推荐卡片三组数据,均为**启用状态(status=1)**且按 `sort` 升序(越小越靠前)。
- **权限**:需登录(Bearer token
- **请求参数**:无
### 响应示例
```json
{
"success": true,
"msg": "ok",
"data": {
"banners": [
{
"id": 1,
"title": "新鲜直采",
"image_id": 123,
"link": "/pages/goods/detail?id=1",
"sort": 0,
"image_url": "http://localhost:8000/storage/uploads/2026/08/14/xxx.jpg"
}
],
"navs": [
{
"id": 1,
"name": "蔬菜专区",
"image_id": 124,
"link": "/pages/category/index?id=1",
"sort": 0,
"image_url": "http://localhost:8000/storage/uploads/2026/08/14/yyy.png"
}
],
"promos": [
{
"id": 1,
"title": "限时特惠",
"sub_title": "全场 8 折起",
"image_id": 125,
"link": "/pages/promo/detail?id=1",
"sort": 0,
"image_url": "http://localhost:8000/storage/uploads/2026/08/14/zzz.jpg"
}
]
}
}
```
### 字段说明
**banners(轮播图)**
| 字段 | 类型 | 说明 |
|---|---|---|
| id | number | 轮播图 ID |
| title | string | 标题(后台维护,可用于无障碍/占位) |
| image_id | number | 图片文件 IDsys_file),一般无需使用 |
| **image_url** | string \| null | 轮播图片完整 URL,直接用于 `<Image src>`;未传图时为 null |
| link | string | 小程序页面跳转路径,**空字符串表示点击不跳转** |
| sort | number | 排序值(已按此升序返回,前端无需再排) |
**navs(宫格导航)**
| 字段 | 类型 | 说明 |
|---|---|---|
| id | number | 导航 ID |
| name | string | 导航名称(宫格文字) |
| **image_url** | string \| null | 导航图标完整 URL |
| link | string | 小程序页面跳转路径,空字符串不跳转 |
| sort | number | 排序值 |
**promos(促销推荐卡片)**
| 字段 | 类型 | 说明 |
|---|---|---|
| id | number | 卡片 ID |
| title | string | 卡片标题 |
| sub_title | string | 副标题/促销文案,可能为空字符串 |
| **image_url** | string \| null | 卡片图片完整 URL |
| link | string | 小程序页面跳转路径,空字符串不跳转 |
| sort | number | 排序值 |
### 前端接入示例
`src/services/home.ts`(新增):
```ts
import { get } from '@/utils/request'
/** 首页轮播图项 */
export interface HomeBanner {
id: number
title: string
image_id: number
image_url: string | null
link: string
sort: number
}
/** 首页宫格导航项 */
export interface HomeNav {
id: number
name: string
image_id: number
image_url: string | null
link: string
sort: number
}
/** 首页促销推荐卡片 */
export interface HomePromo {
id: number
title: string
sub_title: string
image_id: number
image_url: string | null
link: string
sort: number
}
/** 首页配置聚合数据 */
export interface HomeConfig {
banners: HomeBanner[]
navs: HomeNav[]
promos: HomePromo[]
}
/** 首页配置(轮播图 + 宫格导航 + 促销卡片):GET /mini/home */
export function getHomeConfigApi() {
return get<HomeConfig>('/mini/home')
}
```
页面中使用(跳转需兼容空链接):
```tsx
const [config, setConfig] = useState<HomeConfig>({ banners: [], navs: [], promos: [] })
useEffect(() => {
getHomeConfigApi().then(res => setConfig(res.data))
}, [])
/** 统一跳转:link 为空不跳转 */
function handleLink(link: string) {
if (!link) return
Taro.navigateTo({ url: link })
}
```
### 注意事项
1. **三组数据均可能为空数组**(后台未配置或全部停用),页面需做空态处理。
2. `image_url` 可能为 `null`(后台未上传图片),渲染前判空。
3. `link` 为小程序内部页面路径(以 `/` 开头),用 `Taro.navigateTo` 跳转;若目标为 tabBar 页面需改用 `Taro.switchTab`(建议后台配置时避免填 tabBar 路径)。
4. 数据实时生效:后台修改后,小程序下次进入首页请求即为最新内容,无缓存。
5. 接口需登录后调用;未登录(401)会由 request 封装自动跳登录页。