代码提交
This commit is contained in:
91
Store_vue/api/config/index.js
Normal file
91
Store_vue/api/config/index.js
Normal file
@@ -0,0 +1,91 @@
|
||||
// API配置文件
|
||||
|
||||
// 基础配置
|
||||
export const BASE_URL = 'http://yi.cn'
|
||||
//export const BASE_URL = 'https://ckbapi.quwanzhi.com'
|
||||
|
||||
// 获取请求头
|
||||
const getHeaders = (options = {}) => {
|
||||
const token = uni.getStorageSync('token');
|
||||
return {
|
||||
'content-type': 'application/json',
|
||||
...(token ? { 'Authorization': `Bearer ${token}` } : {}),
|
||||
...options.header
|
||||
};
|
||||
};
|
||||
|
||||
// 请求配置
|
||||
export const request = (options) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
const requestTask = uni.request({
|
||||
url: BASE_URL + options.url,
|
||||
method: options.method || 'GET',
|
||||
data: options.data,
|
||||
header: getHeaders(options),
|
||||
success: (res) => {
|
||||
if (res.statusCode === 200) {
|
||||
resolve(res.data)
|
||||
} else if (res.statusCode === 401) {
|
||||
// token过期或无效
|
||||
uni.removeStorageSync('token');
|
||||
uni.removeStorageSync('member');
|
||||
uni.removeStorageSync('token_expired');
|
||||
uni.showToast({
|
||||
title: '登录已过期,请重新登录',
|
||||
icon: 'none'
|
||||
});
|
||||
setTimeout(() => {
|
||||
uni.reLaunch({
|
||||
url: '/pages/login/index'
|
||||
});
|
||||
}, 1500);
|
||||
reject(res);
|
||||
} else {
|
||||
handleError(res)
|
||||
reject(res)
|
||||
}
|
||||
},
|
||||
fail: (err) => {
|
||||
handleError(err)
|
||||
reject(err)
|
||||
}
|
||||
})
|
||||
|
||||
// 超时处理
|
||||
setTimeout(() => {
|
||||
if (requestTask) {
|
||||
requestTask.abort()
|
||||
handleError({ message: '请求超时,请稍后重试' })
|
||||
reject({ message: '请求超时,请稍后重试' })
|
||||
}
|
||||
}, options.timeout || 30000)
|
||||
})
|
||||
}
|
||||
|
||||
// 错误处理函数
|
||||
const handleError = (error) => {
|
||||
let message = '网络请求失败,请稍后重试'
|
||||
|
||||
if (error.errMsg && error.errMsg.includes('解析失败')) {
|
||||
message = '网页解析失败,可能是不支持的网页类型,请稍后重试'
|
||||
}
|
||||
|
||||
console.log(message)
|
||||
// uni.showToast({
|
||||
// title: message,
|
||||
// icon: 'none',
|
||||
// duration: 2000
|
||||
// })
|
||||
}
|
||||
|
||||
// 请求重试函数
|
||||
export const requestWithRetry = async (options, maxRetries = 3) => {
|
||||
for (let i = 0; i < maxRetries; i++) {
|
||||
try {
|
||||
return await request(options)
|
||||
} catch (error) {
|
||||
if (i === maxRetries - 1) throw error
|
||||
await new Promise(resolve => setTimeout(resolve, 1000 * (i + 1)))
|
||||
}
|
||||
}
|
||||
}
|
||||
17
Store_vue/api/modules/auth.js
Normal file
17
Store_vue/api/modules/auth.js
Normal file
@@ -0,0 +1,17 @@
|
||||
import { request, requestWithRetry } from '../config'
|
||||
|
||||
// 认证相关API
|
||||
export const authApi = {
|
||||
// 用户登录
|
||||
login: (account, password) => {
|
||||
return request({
|
||||
url: '/v1/auth/login',
|
||||
method: 'POST',
|
||||
data: {
|
||||
account: account,
|
||||
password: password,
|
||||
typeId: 2 // 固定为2
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
31
Store_vue/api/modules/example.js
Normal file
31
Store_vue/api/modules/example.js
Normal file
@@ -0,0 +1,31 @@
|
||||
import { request, requestWithRetry } from '../config'
|
||||
|
||||
// 示例API
|
||||
export const exampleApi = {
|
||||
// 普通请求示例
|
||||
getData: (params) => {
|
||||
return request({
|
||||
url: '/api/getData',
|
||||
method: 'GET',
|
||||
data: params
|
||||
})
|
||||
},
|
||||
|
||||
// 使用重试机制的请求示例
|
||||
getDataWithRetry: (params) => {
|
||||
return requestWithRetry({
|
||||
url: '/api/getData',
|
||||
method: 'GET',
|
||||
data: params
|
||||
})
|
||||
},
|
||||
|
||||
// POST请求示例
|
||||
postData: (data) => {
|
||||
return request({
|
||||
url: '/api/postData',
|
||||
method: 'POST',
|
||||
data
|
||||
})
|
||||
}
|
||||
}
|
||||
31
Store_vue/api/modules/traffic.js
Normal file
31
Store_vue/api/modules/traffic.js
Normal file
@@ -0,0 +1,31 @@
|
||||
import { request, requestWithRetry } from '../config'
|
||||
|
||||
// 流量相关API
|
||||
export const trafficApi = {
|
||||
// 获取流量套餐列表
|
||||
getFlowPackages: () => {
|
||||
return requestWithRetry({
|
||||
url: '/v1/store/flow-packages',
|
||||
method: 'GET'
|
||||
})
|
||||
},
|
||||
|
||||
// 获取本月流量使用情况
|
||||
getRemainingFlow: () => {
|
||||
return requestWithRetry({
|
||||
url: '/v1/store/flow-packages/remaining-flow',
|
||||
method: 'GET'
|
||||
})
|
||||
},
|
||||
|
||||
// 创建流量套餐订单
|
||||
createOrder: (packageId) => {
|
||||
return request({
|
||||
url: '/v1/store/flow-packages/order',
|
||||
method: 'POST',
|
||||
data: {
|
||||
packageId
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
48
Store_vue/api/utils/auth.js
Normal file
48
Store_vue/api/utils/auth.js
Normal file
@@ -0,0 +1,48 @@
|
||||
/**
|
||||
* token验证与跳转工具函数
|
||||
*/
|
||||
|
||||
// 检查token是否存在
|
||||
export const hasToken = () => {
|
||||
return !!uni.getStorageSync('token');
|
||||
};
|
||||
|
||||
// 检查token是否过期
|
||||
export const isTokenExpired = () => {
|
||||
const expiredTime = uni.getStorageSync('token_expired');
|
||||
if (!expiredTime) return true;
|
||||
|
||||
// 将当前时间转换为秒级时间戳,确保与expiredTime单位一致
|
||||
const currentTimeInSeconds = Math.floor(Date.now() / 1000);
|
||||
|
||||
return currentTimeInSeconds >= expiredTime;
|
||||
};
|
||||
|
||||
// 检查是否有有效token
|
||||
export const hasValidToken = () => {
|
||||
return hasToken() && !isTokenExpired();
|
||||
};
|
||||
|
||||
// 清除token信息
|
||||
export const clearToken = () => {
|
||||
uni.removeStorageSync('token');
|
||||
uni.removeStorageSync('member');
|
||||
uni.removeStorageSync('token_expired');
|
||||
};
|
||||
|
||||
// 跳转到登录页面
|
||||
export const redirectToLogin = () => {
|
||||
const currentPage = getCurrentPages().pop();
|
||||
if (currentPage && currentPage.route !== 'pages/login/index') {
|
||||
uni.reLaunch({
|
||||
url: '/pages/login/index'
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// 跳转到聊天页面
|
||||
export const redirectToChat = () => {
|
||||
uni.reLaunch({
|
||||
url: '/pages/chat/index'
|
||||
});
|
||||
};
|
||||
Reference in New Issue
Block a user