# Portal 搜索与访问监控接口前端接入指南 ## 1. 基本说明 - 接口前缀:`/prod-api`(按当前前端 `request.js` 约定) - 统一返回结构:`{ code, msg, data }` - `code = 200` 表示成功,其他值表示失败 说明: - 搜索结果当前覆盖:`menu/web/web1/document/configType` - 已弃用表(不再纳入搜索):`hw_about_us_info`、`hw_product_case_info`、`hw_product_info`、`hw_product_info_detail` ## 2. 搜索接口(展示端) ### 2.1 请求 - Method: `GET` - URL: `/prod-api/portal/search` - Query: - `keyword` 必填,1~50 字符 - `pageNum` 可选,默认 `1` - `pageSize` 可选,默认 `20`,最大 `50` 示例: ```http GET /prod-api/portal/search?keyword=工业交换机&pageNum=1&pageSize=10 ``` ### 2.2 成功返回示例 ```json { "code": 200, "msg": "操作成功", "data": { "total": 2, "rows": [ { "sourceType": "web1", "title": "详情#7-1-1001", "snippet": "...工业交换机用于工业现场网络互联...", "score": 120, "route": "/productCenter/detail", "routeQuery": { "webCode": "7", "typeId": "1", "deviceId": "1001" }, "editRoute": null }, { "sourceType": "menu", "title": "工业物联", "snippet": "工业物联", "score": 110, "route": "/test", "routeQuery": { "id": "23" }, "editRoute": null } ] } } ``` ### 2.3 失败返回示例 ```json { "code": 500, "msg": "关键词不能为空" } ``` ## 3. 搜索接口(编辑端) ### 3.1 请求 - Method: `GET` - URL: `/prod-api/portal/search/edit` - Query 与展示端一致 示例: ```http GET /prod-api/portal/search/edit?keyword=RFID&pageNum=1&pageSize=20 ``` ### 3.2 返回差异 - `rows[].editRoute` 会返回编辑页路由,可直接 `router.push(editRoute)` 示例字段: ```json { "sourceType": "web1", "editRoute": "/editor?type=2&id=7,1,1001" } ``` ## 4. 匿名访问采集接口 ### 4.1 请求 - Method: `POST` - URL: `/prod-api/portal/analytics/collect` - Content-Type 支持: - `application/json` - `text/plain`(兼容 `navigator.sendBeacon`) 请求体字段(常用): - `visitorId` 必填,访客匿名 ID - `sessionId` 必填,会话 ID - `eventType` 必填:`page_view` / `page_leave` / `search_submit` / `download_click` / `contact_submit` - `path` 必填,当前页面路径 - `eventTime` 可选,毫秒时间戳 - `stayMs` 可选(`page_leave` 时建议传) - `keyword` 可选(`search_submit` 时建议传) - `utmSource` / `utmMedium` / `utmCampaign` 可选 示例: ```json { "visitorId": "b7b2b53f-9f0b-4d90-9a4b-1f53c0f0a911", "sessionId": "77c4d72a-75f8-46f1-a5f2-e7f72f6f9de0", "eventType": "page_view", "path": "/productCenter/detail?webCode=7&typeId=1&deviceId=1001", "referrer": "/productCenter", "eventTime": 1772438400000 } ``` 成功返回: ```json { "code": 200, "msg": "操作成功" } ``` 失败返回(示例): ```json { "code": 500, "msg": "采集失败: 不支持的事件类型" } ``` ## 5. 访问监控看板接口 ### 5.1 请求 - Method: `GET` - URL: `/prod-api/portal/analytics/dashboard` - Query: - `statDate` 可选,格式 `yyyy-MM-dd`,默认当天 - `top` 可选,排行数量,默认 `10`,最大 `50` 示例: ```http GET /prod-api/portal/analytics/dashboard?statDate=2026-03-02&top=10 ``` ### 5.2 返回示例 ```json { "code": 200, "msg": "操作成功", "data": { "statDate": "2026-03-02", "pv": 1250, "uv": 420, "ipUv": 390, "avgStayMs": 18342, "bounceRate": 41.25, "searchCount": 86, "downloadCount": 29, "entryPages": [ { "name": "/index", "value": 230 } ], "hotPages": [ { "name": "/productCenter", "value": 402 } ], "hotKeywords": [ { "name": "工业交换机", "value": 21 } ] } } ``` ## 6. 前端接入建议 - 搜索页渲染时直接使用: - 跳转:`router.push({ path: item.route, query: item.routeQuery })` - 高亮摘要:`v-html="item.snippet"`(仅渲染后端已生成片段) - 编辑端定位: - `if (item.editRoute) router.push(item.editRoute)` - 采集埋点: - `page_view`:路由切换后上报 - `page_leave`:离开页面时通过 `sendBeacon` 上报 `stayMs` - `search_submit`:提交搜索时同步上报 `keyword`