1
This commit is contained in:
@@ -0,0 +1,178 @@
|
||||
/**
|
||||
* HTTP模块统一配置常量文件
|
||||
* 统一管理所有配置模板、Loading文本常量和其他共享常量
|
||||
*/
|
||||
|
||||
// ==================== 配置模板 ====================
|
||||
|
||||
/**
|
||||
* 统一的请求配置模板
|
||||
* 合并了REQUEST_CONFIG_TEMPLATES、COMMON_CONFIG_TEMPLATES、DEFAULT_CONFIG_TEMPLATES
|
||||
*/
|
||||
export const CONFIG_TEMPLATES = {
|
||||
// 需要认证的查询请求(无loading)
|
||||
AUTHENTICATED_QUERY: {
|
||||
auth: true,
|
||||
loading: false,
|
||||
toast: true
|
||||
},
|
||||
|
||||
// 需要认证的查询请求(有loading)
|
||||
AUTHENTICATED_QUERY_WITH_LOADING: {
|
||||
auth: true,
|
||||
loading: true,
|
||||
toast: true
|
||||
},
|
||||
|
||||
// 需要认证的更新请求
|
||||
AUTHENTICATED_UPDATE: {
|
||||
auth: true,
|
||||
loading: true,
|
||||
toast: true
|
||||
},
|
||||
|
||||
// 需要认证的删除请求
|
||||
AUTHENTICATED_DELETE: {
|
||||
auth: true,
|
||||
loading: true,
|
||||
toast: true
|
||||
},
|
||||
|
||||
// 无需认证的公开请求
|
||||
PUBLIC_REQUEST: {
|
||||
auth: false,
|
||||
loading: true,
|
||||
toast: true
|
||||
},
|
||||
|
||||
// 静默请求(无loading和toast)
|
||||
SILENT_REQUEST: {
|
||||
auth: false,
|
||||
loading: false,
|
||||
toast: false
|
||||
},
|
||||
|
||||
// 需要认证的上传请求
|
||||
AUTHENTICATED_UPLOAD: {
|
||||
auth: true,
|
||||
loading: true,
|
||||
toast: true
|
||||
},
|
||||
|
||||
// 需要认证的提交请求
|
||||
AUTHENTICATED_SUBMIT: {
|
||||
auth: true,
|
||||
loading: true,
|
||||
toast: true
|
||||
},
|
||||
|
||||
// 公开的下载请求
|
||||
PUBLIC_DOWNLOAD: {
|
||||
auth: false,
|
||||
loading: true,
|
||||
toast: true
|
||||
},
|
||||
|
||||
// 静默的配置获取请求
|
||||
SILENT_CONFIG: {
|
||||
auth: false,
|
||||
loading: false,
|
||||
toast: false
|
||||
}
|
||||
}
|
||||
|
||||
// ==================== Loading文本常量 ====================
|
||||
|
||||
/**
|
||||
* 统一的Loading文本配置
|
||||
* 合并了所有模块中的LOADING_TEXTS常量
|
||||
*/
|
||||
export const LOADING_TEXTS = {
|
||||
// 通用操作
|
||||
LOADING: '正在加载...',
|
||||
SAVING: '正在保存...',
|
||||
DELETING: '正在删除...',
|
||||
UPDATING: '正在更新...',
|
||||
SUBMITTING: '正在提交...',
|
||||
UPLOADING: '正在上传...',
|
||||
|
||||
// 认证相关
|
||||
LOGIN: '正在登录...',
|
||||
LOGOUT: '正在退出...',
|
||||
REGISTER: '正在注册...',
|
||||
PHONE_VERIFY: '正在验证手机号...',
|
||||
SEND_SMS: '正在发送验证码...',
|
||||
VERIFY_SMS: '正在验证...',
|
||||
RESET_PASSWORD: '正在重置密码...',
|
||||
|
||||
// 用户相关
|
||||
UPDATING_USER_INFO: '正在更新用户信息...',
|
||||
UPLOADING_AVATAR: '正在上传头像...',
|
||||
SAVING_PROFILE: '正在保存...',
|
||||
DELETING_ACCOUNT: '正在注销账户...',
|
||||
LOADING_DATA: '正在加载...',
|
||||
|
||||
// 宠物相关
|
||||
ADD_PET: '正在添加宠物...',
|
||||
UPDATE_PET: '正在更新宠物信息...',
|
||||
DELETE_PET: '正在删除宠物...',
|
||||
ADD_RECORD: '正在添加记录...',
|
||||
UPDATE_RECORD: '正在更新记录...',
|
||||
DELETE_RECORD: '正在删除记录...',
|
||||
|
||||
// 文件相关
|
||||
UPLOAD_IMAGE: '正在上传图片...',
|
||||
UPLOAD_FILE: '正在上传文件...',
|
||||
UPLOAD_IMAGES: '正在批量上传...',
|
||||
DOWNLOAD_FILE: '正在下载文件...',
|
||||
|
||||
// AI助手相关
|
||||
AI_THINKING: 'AI正在思考中...',
|
||||
SPEECH_RECOGNITION: '正在识别语音...',
|
||||
|
||||
// 领养相关
|
||||
SUBMIT_APPLICATION: '正在提交申请...',
|
||||
CANCEL_APPLICATION: '正在取消申请...',
|
||||
|
||||
// 评价相关
|
||||
SUBMIT_REVIEW: '正在提交评价...',
|
||||
UPDATE_REVIEW: '正在更新评价...',
|
||||
DELETE_REVIEW: '正在删除评价...',
|
||||
SUBMIT_REPORT: '正在提交举报...',
|
||||
REPLY_REVIEW: '正在回复评价...',
|
||||
|
||||
// 其他
|
||||
SUBMIT_FEEDBACK: '正在提交反馈...',
|
||||
CHECK_UPDATE: '正在检查更新...'
|
||||
}
|
||||
|
||||
// ==================== 工具函数 ====================
|
||||
|
||||
/**
|
||||
* 创建标准化的请求配置
|
||||
* @param {string} template 配置模板名称
|
||||
* @param {Object} customConfig 自定义配置
|
||||
* @param {string} loadingText 自定义loading文本
|
||||
* @returns {Object} 标准化的请求配置
|
||||
*/
|
||||
export const createRequestConfig = (template, customConfig = {}, loadingText = null) => {
|
||||
const baseConfig = CONFIG_TEMPLATES[template] || {}
|
||||
|
||||
const config = {
|
||||
custom: {
|
||||
...baseConfig,
|
||||
...(loadingText && { loadingText }),
|
||||
...customConfig.custom
|
||||
},
|
||||
...customConfig
|
||||
}
|
||||
|
||||
// 移除custom属性中的undefined值
|
||||
Object.keys(config.custom).forEach(key => {
|
||||
if (config.custom[key] === undefined) {
|
||||
delete config.custom[key]
|
||||
}
|
||||
})
|
||||
|
||||
return config
|
||||
}
|
||||
+2
-101
@@ -1,111 +1,12 @@
|
||||
// HTTP请求配置和拦截器
|
||||
// 基于uView-next的luch-request库实现
|
||||
|
||||
import { HTTP_CONFIG, checkApiAuth, AUTH_REQUIRED_APIS } from './config.js'
|
||||
import { HTTP_CONFIG, checkApiAuth, checkAuthRequiredApi } from './config.js'
|
||||
import { clearAuthData, isUserLoggedIn, handleAuthRequired, tryAutoLogin } from '../utils/auth-helper.js'
|
||||
|
||||
/**
|
||||
* 清理认证数据
|
||||
*/
|
||||
function clearAuthData() {
|
||||
console.log('HTTP拦截器: 清理认证数据被调用')
|
||||
console.trace('调用堆栈:')
|
||||
uni.removeStorageSync(HTTP_CONFIG.storageKeys.token)
|
||||
uni.removeStorageSync(HTTP_CONFIG.storageKeys.refreshToken)
|
||||
uni.removeStorageSync(HTTP_CONFIG.storageKeys.userInfo)
|
||||
uni.removeStorageSync('loginStep')
|
||||
uni.removeStorageSync('wxLoginCode')
|
||||
uni.removeStorageSync('wxUserInfo')
|
||||
uni.removeStorageSync('loginDate')
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查接口是否需要强制登录
|
||||
* @param {String} url 接口URL
|
||||
* @returns {Boolean} 是否需要强制登录
|
||||
*/
|
||||
function checkAuthRequiredApi(url) {
|
||||
// 移除查询参数,只保留路径
|
||||
const path = url.split('?')[0]
|
||||
|
||||
// 检查是否在需要强制登录的列表中
|
||||
for (const authApi of AUTH_REQUIRED_APIS) {
|
||||
// 支持通配符匹配
|
||||
if (authApi.includes('*')) {
|
||||
const regex = new RegExp('^' + authApi.replace(/\*/g, '.*') + '$')
|
||||
if (regex.test(path)) {
|
||||
return true
|
||||
}
|
||||
} else if (path === authApi || path.startsWith(authApi + '/')) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查用户是否已完成登录
|
||||
* @returns {Boolean} 是否已完成登录
|
||||
*/
|
||||
function isUserLoggedIn() {
|
||||
const token = uni.getStorageSync(HTTP_CONFIG.storageKeys.token)
|
||||
const loginStep = uni.getStorageSync('loginStep')
|
||||
|
||||
// 检查是否有有效的token和完成的登录流程
|
||||
return !!(token && (loginStep === 'profile_completed' || loginStep === 'phone_authed'))
|
||||
}
|
||||
|
||||
/**
|
||||
* 尝试自动登录
|
||||
* @returns {Promise<Boolean>} 是否登录成功
|
||||
*/
|
||||
async function tryAutoLogin() {
|
||||
try {
|
||||
return await autoLogin()
|
||||
} catch (error) {
|
||||
console.error('自动登录失败:', error)
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理需要鉴权的情况
|
||||
*/
|
||||
function handleAuthRequired() {
|
||||
const loginStep = uni.getStorageSync('loginStep')
|
||||
|
||||
// 根据当前登录状态决定跳转页面
|
||||
let targetPage = '/pages/login/login'
|
||||
let toastMessage = '请先登录'
|
||||
|
||||
switch (loginStep) {
|
||||
case 'wx_logged':
|
||||
targetPage = '/pages/auth/phone-auth'
|
||||
toastMessage = '请完成手机号授权'
|
||||
break
|
||||
case 'phone_authed':
|
||||
case 'phone_skipped':
|
||||
targetPage = '/pages/profile/user-info?mode=setup'
|
||||
toastMessage = '请完善个人信息'
|
||||
break
|
||||
default:
|
||||
targetPage = '/pages/login/login'
|
||||
toastMessage = '请先登录'
|
||||
}
|
||||
|
||||
// 显示提示并跳转
|
||||
uni.showToast({
|
||||
title: toastMessage,
|
||||
icon: 'none',
|
||||
duration: 1500
|
||||
})
|
||||
|
||||
setTimeout(() => {
|
||||
uni.navigateTo({ url: targetPage }).catch(() => {
|
||||
uni.reLaunch({ url: targetPage })
|
||||
})
|
||||
}, 1500)
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化HTTP配置
|
||||
|
||||
Reference in New Issue
Block a user