优化提现功能,新增静默请求选项以支持无弹窗请求,提升用户体验。同时,更新微信转账逻辑,确保在未初始化转账客户端时正确处理状态,增强系统的灵活性和可维护性。调整API响应字段,确保一致性,提升代码可读性。
This commit is contained in:
@@ -118,7 +118,8 @@ App({
|
||||
visitorId: userId,
|
||||
source: 'miniprogram',
|
||||
page: getCurrentPages()[getCurrentPages().length - 1]?.route || ''
|
||||
}
|
||||
},
|
||||
silent: true
|
||||
})
|
||||
console.log('[App] 记录推荐访问成功')
|
||||
} catch (e) {
|
||||
@@ -141,7 +142,8 @@ App({
|
||||
data: {
|
||||
userId,
|
||||
referralCode: refCode
|
||||
}
|
||||
},
|
||||
silent: true
|
||||
})
|
||||
|
||||
if (res.success) {
|
||||
@@ -242,11 +244,41 @@ App({
|
||||
}
|
||||
},
|
||||
|
||||
// 统一请求方法
|
||||
request(url, options = {}) {
|
||||
/**
|
||||
* 从 soul-api 返回体中取错误提示文案(兼容 message / error 字段)
|
||||
*/
|
||||
_getApiErrorMsg(data, defaultMsg = '请求失败') {
|
||||
if (!data || typeof data !== 'object') return defaultMsg
|
||||
const msg = data.message || data.error
|
||||
return (msg && String(msg).trim()) ? String(msg).trim() : defaultMsg
|
||||
},
|
||||
|
||||
/**
|
||||
* 统一请求方法。接口失败时会弹窗提示(与 soul-api 返回的 message/error 一致)。
|
||||
* @param {string|object} urlOrOptions - 接口路径,或 { url, method, data, header, silent }
|
||||
* @param {object} options - { method, data, header, silent }
|
||||
* @param {boolean} options.silent - 为 true 时不弹窗,仅 reject(用于静默请求如访问统计)
|
||||
*/
|
||||
request(urlOrOptions, options = {}) {
|
||||
let url
|
||||
if (typeof urlOrOptions === 'string') {
|
||||
url = urlOrOptions
|
||||
} else if (urlOrOptions && typeof urlOrOptions === 'object' && urlOrOptions.url) {
|
||||
url = urlOrOptions.url
|
||||
options = { ...urlOrOptions, url: undefined }
|
||||
} else {
|
||||
url = ''
|
||||
}
|
||||
const silent = !!options.silent
|
||||
const showError = (msg) => {
|
||||
if (!silent && msg) {
|
||||
wx.showToast({ title: msg, icon: 'none', duration: 2500 })
|
||||
}
|
||||
}
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
const token = wx.getStorageSync('token')
|
||||
|
||||
|
||||
wx.request({
|
||||
url: this.globalData.baseUrl + url,
|
||||
method: options.method || 'GET',
|
||||
@@ -257,18 +289,33 @@ App({
|
||||
...options.header
|
||||
},
|
||||
success: (res) => {
|
||||
const data = res.data
|
||||
if (res.statusCode === 200) {
|
||||
resolve(res.data)
|
||||
} else if (res.statusCode === 401) {
|
||||
// 未授权,清除登录状态
|
||||
this.logout()
|
||||
reject(new Error('未授权'))
|
||||
} else {
|
||||
reject(new Error(res.data?.message || '请求失败'))
|
||||
// 业务失败:success === false,soul-api 用 message 或 error 返回原因
|
||||
if (data && data.success === false) {
|
||||
const msg = this._getApiErrorMsg(data, '操作失败')
|
||||
showError(msg)
|
||||
reject(new Error(msg))
|
||||
return
|
||||
}
|
||||
resolve(data)
|
||||
return
|
||||
}
|
||||
if (res.statusCode === 401) {
|
||||
this.logout()
|
||||
showError('未授权,请重新登录')
|
||||
reject(new Error('未授权'))
|
||||
return
|
||||
}
|
||||
// 4xx/5xx:优先用返回体的 message/error
|
||||
const msg = this._getApiErrorMsg(data, res.statusCode >= 500 ? '服务器异常,请稍后重试' : '请求失败')
|
||||
showError(msg)
|
||||
reject(new Error(msg))
|
||||
},
|
||||
fail: (err) => {
|
||||
reject(err)
|
||||
const msg = (err && err.errMsg) ? (err.errMsg.indexOf('timeout') !== -1 ? '请求超时,请重试' : '网络异常,请重试') : '网络异常,请重试'
|
||||
showError(msg)
|
||||
reject(new Error(msg))
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user