154 lines
4.6 KiB
TypeScript
154 lines
4.6 KiB
TypeScript
// API配置文件
|
|
// 统一管理后端接口地址
|
|
|
|
/**
|
|
* 环境类型
|
|
* dev: 开发环境(本地)
|
|
* test: 测试环境(服务器测试)
|
|
* prod: 生产环境
|
|
*/
|
|
type EnvType = 'dev' | 'test' | 'prod';
|
|
|
|
/**
|
|
* 环境配置接口
|
|
*/
|
|
interface EnvConfig {
|
|
baseURL: string; // 主服务地址
|
|
pythonURL?: string; // Python服务地址(可选)
|
|
timeout: number; // 请求超时时间
|
|
}
|
|
|
|
/**
|
|
* 多环境配置
|
|
* 修改这里的配置即可切换不同环境的后端地址
|
|
*/
|
|
const API_CONFIG: Record<EnvType, EnvConfig> = {
|
|
// 开发环境 - 本地开发
|
|
dev: {
|
|
baseURL: 'http://localhost:8080', // 本地Go服务
|
|
pythonURL: 'http://localhost:8000', // 本地Python服务
|
|
timeout: 90000
|
|
},
|
|
|
|
// 测试环境 - 服务器测试
|
|
test: {
|
|
baseURL: 'https://lehang.tech', // 测试服务器Go服务
|
|
pythonURL: 'https://lehang.tech', // 测试服务器Python服务
|
|
timeout: 90000
|
|
},
|
|
|
|
// 生产环境
|
|
prod: {
|
|
baseURL: 'https://lehang.tech', // 生产环境Go服务
|
|
pythonURL: 'https://lehang.tech', // 生产环境Python服务
|
|
timeout: 90000
|
|
}
|
|
};
|
|
|
|
/**
|
|
* 自动检测环境
|
|
* 根据小程序的运行环境自动判断:
|
|
* - 开发版(develop) → dev
|
|
* - 体验版(trial) → test
|
|
* - 正式版(release) → prod
|
|
*/
|
|
function detectEnvironment(): EnvType {
|
|
try {
|
|
const accountInfo = wx.getAccountInfoSync();
|
|
const envVersion = accountInfo.miniProgram.envVersion;
|
|
|
|
switch (envVersion) {
|
|
case 'develop':
|
|
return 'dev'; // 开发版
|
|
case 'trial':
|
|
return 'test'; // 体验版
|
|
case 'release':
|
|
return 'prod'; // 正式版
|
|
default:
|
|
return 'dev';
|
|
}
|
|
} catch (error) {
|
|
console.warn('无法检测环境,使用默认开发环境', error);
|
|
return 'dev';
|
|
}
|
|
}
|
|
|
|
// 当前环境(自动检测)
|
|
const currentEnv: EnvType = detectEnvironment();
|
|
const currentConfig = (): EnvConfig => API_CONFIG[currentEnv];
|
|
|
|
// 导出环境检测相关函数和变量
|
|
export const getCurrentEnv = (): EnvType => currentEnv;
|
|
export const isDevelopment = (): boolean => currentEnv === 'dev';
|
|
export const isDevOrTrial = (): boolean => currentEnv === 'dev' || currentEnv === 'test'; // 开发版或体验版
|
|
export { detectEnvironment };
|
|
export type { EnvType };
|
|
|
|
// 输出环境信息
|
|
console.log(`[API Config] 当前环境: ${currentEnv}`);
|
|
console.log(`[API Config] 主服务: ${currentConfig().baseURL}`);
|
|
if (currentConfig().pythonURL) {
|
|
console.log(`[API Config] Python服务: ${currentConfig().pythonURL}`);
|
|
}
|
|
|
|
// API端点
|
|
export const API = {
|
|
// 基础配置(动态获取)
|
|
get baseURL(): string {
|
|
return currentConfig().baseURL;
|
|
},
|
|
get pythonURL(): string | undefined {
|
|
return currentConfig().pythonURL;
|
|
},
|
|
get timeout(): number {
|
|
return currentConfig().timeout;
|
|
},
|
|
|
|
// 登录接口
|
|
auth: {
|
|
wechatLogin: '/api/login/wechat', // 微信登录
|
|
phoneLogin: '/api/login/phone', // 手机号登录
|
|
phonePasswordLogin: '/api/login/phone-password', // 手机号密码登录
|
|
xhsPhoneCodeLogin: '/api/login/xhs-phone-code' // 小红书手机号验证码登录
|
|
},
|
|
|
|
// 员工端接口
|
|
employee: {
|
|
profile: '/api/employee/profile', // 获取个人信息
|
|
bindXHS: '/api/employee/bind-xhs', // 绑定小红书
|
|
bindXHSStatus: '/api/employee/bind-xhs-status', // 获取绑定状态
|
|
unbindXHS: '/api/employee/unbind-xhs', // 解绑小红书
|
|
availableCopies: '/api/employee/available-copies', // 获取可领取文案
|
|
claimCopy: '/api/employee/claim-copy', // 领取文案
|
|
claimRandomCopy: '/api/employee/claim-random-copy', // 随机领取文案
|
|
publish: '/api/employee/publish', // 发布内容
|
|
myPublishRecords: '/api/employee/my-publish-records' // 我的发布记录
|
|
},
|
|
|
|
// 公开接口(不需要登录)
|
|
public: {
|
|
products: '/api/products' // 获取产品列表
|
|
},
|
|
|
|
// 小红书相关接口
|
|
xhs: {
|
|
sendCode: '/api/xhs/send-code', // 发送小红书验证码
|
|
sendVerificationCode: '/api/xhs/send-verification-code' // 发送验证码(新接口)
|
|
}
|
|
};
|
|
|
|
// 构建完整URL
|
|
export function buildURL(path: string, usePython = false): string {
|
|
const baseURL = usePython ? (API.pythonURL || API.baseURL) : API.baseURL;
|
|
return `${baseURL}${path}`;
|
|
}
|
|
|
|
// 获取请求头
|
|
export function getHeaders(): Record<string, string> {
|
|
const token = wx.getStorageSync('token') || '';
|
|
return {
|
|
'Content-Type': 'application/json',
|
|
'Authorization': token ? `Bearer ${token}` : ''
|
|
};
|
|
}
|