// API 服务器地址 - 开发环境使用本地地址,生产环境请替换为实际域名 // 微信开发者工具需勾选: 设置 → 安全 → 不校验合法域名 const API_BASE_URL = 'http://127.0.0.1:8186/api' const TIMEOUT = 30000 async function request(method, url, data) { const token = uni.getStorageSync('token') const header = { 'Content-Type': 'application/json' } if (token) { header.Authorization = `Bearer ${token}` } return new Promise((resolve, reject) => { uni.request({ url: API_BASE_URL + url, method, data, header, timeout: TIMEOUT, success(res) { const response = res.data if (response.code !== 0) { uni.showToast({ title: response.message || '请求失败', icon: 'none' }) if (response.code === 1001) { uni.removeStorageSync('token') // 跳转到登录页,避免 switchTab 超时问题 setTimeout(() => { uni.reLaunch({ url: '/pages/login/index' }) }, 500) } const err = new Error(response.message || '请求失败') err.code = response.code reject(err) } else { resolve(response.data) } }, fail(err) { uni.showToast({ title: '网络错误', icon: 'none' }) reject(err) } }) }) } const requestInstance = { get: (url, data) => request('GET', url, data), post: (url, data) => request('POST', url, data), put: (url, data) => request('PUT', url, data), delete: (url, data) => request('DELETE', url, data) } export default requestInstance export const authApi = { login: (data) => requestInstance.post('/auth/login', data) } export const consultationApi = { start: (data) => requestInstance.post('/consultation/start', data), check: (data) => requestInstance.post('/consultation/check', data) } export const chartApi = { create: (data) => requestInstance.post('/chart/create', data), list: () => requestInstance.post('/chart/list', {}), detail: (id) => requestInstance.post('/chart/detail', { id }), delete: (id) => requestInstance.post('/chart/delete', { id }) } export const chatApi = { send: (data) => requestInstance.post('/chat/send', data), history: (chartRecordId) => requestInstance.post('/chat/history', { chartRecordId }) } export const payApi = { create: (data) => requestInstance.post('/pay/create', data) } export const profileApi = { info: () => requestInstance.post('/profile/info', {}), vipStatus: () => requestInstance.post('/profile/vip-status', {}), quota: () => requestInstance.post('/profile/quota', {}), commissionSummary: () => requestInstance.post('/profile/commission-summary', {}), chartCount: () => requestInstance.post('/profile/chart-count', {}) } export const annotationApi = { add: (data) => requestInstance.post('/annotation/add', data), list: (recordId) => requestInstance.post('/annotation/list', { recordId }), delete: (id) => requestInstance.post('/annotation/delete', { id }), addTag: (data) => requestInstance.post('/annotation/tag/add', data), listTags: (recordId) => requestInstance.post('/annotation/tag/list', { recordId }), deleteTag: (id) => requestInstance.post('/annotation/tag/delete', { id }) } export const commissionApi = { list: () => requestInstance.post('/commission/list', {}), total: () => requestInstance.post('/commission/total', {}) }