hookehuyr

feat(api): 添加request函数统一处理API响应并更新文档

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