代码提交

This commit is contained in:
wong
2025-04-15 17:08:52 +08:00
parent 4581ef5ee1
commit 988cd419d4
16 changed files with 580 additions and 154 deletions

View 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)))
}
}
}

View 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
}
})
}
}

View 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
})
}
}

View 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
}
})
}
}

View 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'
});
};