feat(api): 添加request函数统一处理API响应并更新文档
在fn.js中添加request函数封装API请求,统一处理响应格式和错误提示 更新recall_users.js中所有API调用使用新的request函数 更新VUE_CODE_STYLE_GUIDE.md文档说明API返回结构调整
Showing
3 changed files
with
64 additions
and
13 deletions
| ... | @@ -184,7 +184,7 @@ Vue 官方建议在 SFC + Composition API 场景使用 `<script setup>`,因为 | ... | @@ -184,7 +184,7 @@ Vue 官方建议在 SFC + Composition API 场景使用 `<script setup>`,因为 |
| 184 | 184 | ||
| 185 | ## 6. 结合本项目:可直接落地的优化清单(按收益排序) | 185 | ## 6. 结合本项目:可直接落地的优化清单(按收益排序) |
| 186 | 186 | ||
| 187 | -1) 统一 API 返回结构:去掉 `false` 返回,调用侧统一 `res.code === 1` | 187 | +1) 统一 API 返回结构:去掉 `false` 返回,调用侧统一 `res.code === 1` (已做调整,在recall_users.js里面使用了request函数做了封装) |
| 188 | 188 | ||
| 189 | - 目标:减少大量 `if (res && res.code)` 的防御判断,把错误信息(msg)保留下来 | 189 | - 目标:减少大量 `if (res && res.code)` 的防御判断,把错误信息(msg)保留下来 |
| 190 | - 涉及文件:[fn.js](file:///Users/huyirui/program/itomix/git/mlaj/src/api/fn.js) | 190 | - 涉及文件:[fn.js](file:///Users/huyirui/program/itomix/git/mlaj/src/api/fn.js) | ... | ... |
| 1 | /* | 1 | /* |
| 2 | * @Date: 2022-05-18 22:56:08 | 2 | * @Date: 2022-05-18 22:56:08 |
| 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com | 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com |
| 4 | - * @LastEditTime: 2025-03-25 14:59:50 | 4 | + * @LastEditTime: 2025-12-27 23:06:36 |
| 5 | * @FilePath: /mlaj/src/api/fn.js | 5 | * @FilePath: /mlaj/src/api/fn.js |
| 6 | * @Description: 文件描述 | 6 | * @Description: 文件描述 |
| 7 | */ | 7 | */ |
| 8 | import axios from '@/utils/axios'; | 8 | import axios from '@/utils/axios'; |
| 9 | -import qs from 'Qs' | 9 | +import qs from 'qs' |
| 10 | import { showFailToast } from 'vant'; | 10 | import { showFailToast } from 'vant'; |
| 11 | import 'vant/es/toast/style' | 11 | import 'vant/es/toast/style' |
| 12 | 12 | ||
| ... | @@ -40,6 +40,57 @@ export const fn = (api) => { | ... | @@ -40,6 +40,57 @@ export const fn = (api) => { |
| 40 | } | 40 | } |
| 41 | 41 | ||
| 42 | /** | 42 | /** |
| 43 | + * 网络请求功能函数(带错误处理) | ||
| 44 | + * @param {*} api 请求axios接口 | ||
| 45 | + * @param {*} options 选项对象,包含 toast、silent_codes、default_msg、network_msg 字段 | ||
| 46 | + * @returns 请求成功后,获取数据 | ||
| 47 | + */ | ||
| 48 | +export const request = async (api, options = {}) => { | ||
| 49 | + const { | ||
| 50 | + toast = true, | ||
| 51 | + silent_codes = [401], | ||
| 52 | + default_msg = '请求失败', | ||
| 53 | + network_msg = '网络异常', | ||
| 54 | + } = options || {} | ||
| 55 | + | ||
| 56 | + try { | ||
| 57 | + const res = await api | ||
| 58 | + const payload = res && res.data ? res.data : {} | ||
| 59 | + const code = payload && typeof payload.code === 'number' ? payload.code : 0 | ||
| 60 | + | ||
| 61 | + if (code === 1) { | ||
| 62 | + return payload || { code: 1, data: null, msg: '' } | ||
| 63 | + } | ||
| 64 | + | ||
| 65 | + const msg = payload && payload.msg ? payload.msg : default_msg | ||
| 66 | + const should_toast = toast && !silent_codes.includes(code) | ||
| 67 | + if (should_toast) { | ||
| 68 | + showFailToast(msg) | ||
| 69 | + } | ||
| 70 | + | ||
| 71 | + return { | ||
| 72 | + code: 0, | ||
| 73 | + data: payload && Object.prototype.hasOwnProperty.call(payload, 'data') ? payload.data : null, | ||
| 74 | + msg, | ||
| 75 | + raw_code: code, | ||
| 76 | + raw: payload | ||
| 77 | + } | ||
| 78 | + } catch (err) { | ||
| 79 | + if (toast) { | ||
| 80 | + showFailToast(network_msg) | ||
| 81 | + } | ||
| 82 | + return { | ||
| 83 | + code: 0, | ||
| 84 | + data: null, | ||
| 85 | + msg: network_msg, | ||
| 86 | + raw_code: 0, | ||
| 87 | + raw: null, | ||
| 88 | + error: err | ||
| 89 | + } | ||
| 90 | + } | ||
| 91 | +} | ||
| 92 | + | ||
| 93 | +/** | ||
| 43 | * 七牛返回格式 | 94 | * 七牛返回格式 |
| 44 | * @param {*} api | 95 | * @param {*} api |
| 45 | * @returns | 96 | * @returns | ... | ... |
| 1 | /* | 1 | /* |
| 2 | * @Date: 2025-12-19 10:43:09 | 2 | * @Date: 2025-12-19 10:43:09 |
| 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com | 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com |
| 4 | - * @LastEditTime: 2025-12-26 16:00:49 | 4 | + * @LastEditTime: 2025-12-27 23:10:17 |
| 5 | * @FilePath: /mlaj/src/api/recall_users.js | 5 | * @FilePath: /mlaj/src/api/recall_users.js |
| 6 | * @Description: 引入外部接口, 召回旧用户相关接口 | 6 | * @Description: 引入外部接口, 召回旧用户相关接口 |
| 7 | */ | 7 | */ |
| 8 | -import { fn, fetch } from './fn'; | 8 | +import { fetch, request } from './fn'; |
| 9 | 9 | ||
| 10 | const Api = { | 10 | const Api = { |
| 11 | USER_LOGIN: '/srv/?a=desk_calendar&t=login', | 11 | USER_LOGIN: '/srv/?a=desk_calendar&t=login', |
| ... | @@ -25,13 +25,13 @@ const Api = { | ... | @@ -25,13 +25,13 @@ const Api = { |
| 25 | * @param: entry 进入H5的入口。qrcode=扫二维码进入, poster=通过海报进入 | 25 | * @param: entry 进入H5的入口。qrcode=扫二维码进入, poster=通过海报进入 |
| 26 | * @param: referrer_user_id 海报创建人ID | 26 | * @param: referrer_user_id 海报创建人ID |
| 27 | */ | 27 | */ |
| 28 | -export const loginAPI = (params) => fn(fetch.post(Api.USER_LOGIN, params)); | 28 | +export const loginAPI = (params) => request(fetch.post(Api.USER_LOGIN, params)); |
| 29 | 29 | ||
| 30 | /** | 30 | /** |
| 31 | * @description: 获取用户信息 | 31 | * @description: 获取用户信息 |
| 32 | * @return: data.user: { id 用户ID, name 姓名, mobile 手机号, has_idcard 是否填写了身份证, has_activity_registration 是否收集了星球壁币 } | 32 | * @return: data.user: { id 用户ID, name 姓名, mobile 手机号, has_idcard 是否填写了身份证, has_activity_registration 是否收集了星球壁币 } |
| 33 | */ | 33 | */ |
| 34 | -export const userInfoAPI = () => fn(fetch.get(Api.USER_INFO)); | 34 | +export const userInfoAPI = () => request(fetch.get(Api.USER_INFO)); |
| 35 | 35 | ||
| 36 | /** | 36 | /** |
| 37 | * @description: 搜索历史活动 | 37 | * @description: 搜索历史活动 |
| ... | @@ -44,7 +44,7 @@ export const userInfoAPI = () => fn(fetch.get(Api.USER_INFO)); | ... | @@ -44,7 +44,7 @@ export const userInfoAPI = () => fn(fetch.get(Api.USER_INFO)); |
| 44 | * fee_desc 收费描述, create_time 创建时间 }] | 44 | * fee_desc 收费描述, create_time 创建时间 }] |
| 45 | * } | 45 | * } |
| 46 | */ | 46 | */ |
| 47 | -export const searchOldActivityAPI = (params) => fn(fetch.get(Api.USER_SEARCH_OLD_ACTIVITY, params)); | 47 | +export const searchOldActivityAPI = (params) => request(fetch.get(Api.USER_SEARCH_OLD_ACTIVITY, params)); |
| 48 | 48 | ||
| 49 | /** | 49 | /** |
| 50 | * @description: 查询海报配置 | 50 | * @description: 查询海报配置 |
| ... | @@ -52,26 +52,26 @@ export const searchOldActivityAPI = (params) => fn(fetch.get(Api.USER_SEARCH_OLD | ... | @@ -52,26 +52,26 @@ export const searchOldActivityAPI = (params) => fn(fetch.get(Api.USER_SEARCH_OLD |
| 52 | * @param: campaign_id 活动ID | 52 | * @param: campaign_id 活动ID |
| 53 | * @return: data: { background_image 海报背景图URL, qrcode 二维码 } | 53 | * @return: data: { background_image 海报背景图URL, qrcode 二维码 } |
| 54 | */ | 54 | */ |
| 55 | -export const getPosterAPI = (params) => fn(fetch.get(Api.USER_GET_POSTER, params)); | 55 | +export const getPosterAPI = (params) => request(fetch.get(Api.USER_GET_POSTER, params)); |
| 56 | 56 | ||
| 57 | /** | 57 | /** |
| 58 | * @description: 编辑海报配置 | 58 | * @description: 编辑海报配置 |
| 59 | * @param: campaign_id 活动ID | 59 | * @param: campaign_id 活动ID |
| 60 | * @param: background_image 海报背景图URL | 60 | * @param: background_image 海报背景图URL |
| 61 | */ | 61 | */ |
| 62 | -export const editPosterAPI = (params) => fn(fetch.post(Api.USER_EDIT_POSTER, params)); | 62 | +export const editPosterAPI = (params) => request(fetch.post(Api.USER_EDIT_POSTER, params)); |
| 63 | 63 | ||
| 64 | /** | 64 | /** |
| 65 | * @description: 查询补充信息 | 65 | * @description: 查询补充信息 |
| 66 | * @return: data: { note 补充说明 } | 66 | * @return: data: { note 补充说明 } |
| 67 | */ | 67 | */ |
| 68 | -export const getSupplementAPI = (params) => fn(fetch.get(Api.USER_GET_SUPPLEMENT, params)); | 68 | +export const getSupplementAPI = (params) => request(fetch.get(Api.USER_GET_SUPPLEMENT, params)); |
| 69 | 69 | ||
| 70 | /** | 70 | /** |
| 71 | * @description: 编辑补充信息 | 71 | * @description: 编辑补充信息 |
| 72 | * @param: note 补充说明 | 72 | * @param: note 补充说明 |
| 73 | */ | 73 | */ |
| 74 | -export const editSupplementAPI = (params) => fn(fetch.post(Api.USER_EDIT_SUPPLEMENT, params)); | 74 | +export const editSupplementAPI = (params) => request(fetch.post(Api.USER_EDIT_SUPPLEMENT, params)); |
| 75 | 75 | ||
| 76 | /** | 76 | /** |
| 77 | * @description: 埋点 | 77 | * @description: 埋点 |
| ... | @@ -79,4 +79,4 @@ export const editSupplementAPI = (params) => fn(fetch.post(Api.USER_EDIT_SUPPLEM | ... | @@ -79,4 +79,4 @@ export const editSupplementAPI = (params) => fn(fetch.post(Api.USER_EDIT_SUPPLEM |
| 79 | * @param: campaign_id 活动ID(转发海报时填写) | 79 | * @param: campaign_id 活动ID(转发海报时填写) |
| 80 | * @param: stu_uid 学员ID(转发海报时填写) | 80 | * @param: stu_uid 学员ID(转发海报时填写) |
| 81 | */ | 81 | */ |
| 82 | -export const trackingAPI = (params) => fn(fetch.post(Api.USER_TRACKING, params)); | 82 | +export const trackingAPI = (params) => request(fetch.post(Api.USER_TRACKING, params)); | ... | ... |
-
Please register or login to post a comment