| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- // 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),
- regenerate: (chartRecordId) => requestInstance.post('/consultation/regenerate', { chartRecordId })
- }
- 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 }),
- interpret: (chartRecordId) => requestInstance.post('/chart/interpret', { chartRecordId }),
- academicOrientation: (chartRecordId) => requestInstance.post('/chart/academic-orientation', { chartRecordId })
- }
- export const chatApi = {
- send: (data) => requestInstance.post('/chat/send', data),
- history: (chartRecordId) => requestInstance.post('/chat/history', { chartRecordId }),
- voiceUpload: (filePath, chartRecordId) => {
- const token = uni.getStorageSync('token')
- return new Promise((resolve, reject) => {
- uni.uploadFile({
- url: API_BASE_URL + '/chat/voice',
- filePath,
- name: 'file',
- formData: { chartRecordId: String(chartRecordId || '') },
- header: token ? { Authorization: `Bearer ${token}` } : {},
- success: (res) => {
- try {
- const data = JSON.parse(res.data)
- if (data.code === 0) resolve(data.data)
- else reject(new Error(data.message || '上传失败'))
- } catch (e) { reject(new Error('解析响应失败')) }
- },
- fail: (err) => reject(err)
- })
- })
- }
- }
- export const payApi = {
- create: (data) => requestInstance.post('/pay/create', data)
- }
- export const pricingApi = {
- current: () => requestInstance.post('/pricing/current', {}),
- upgrade: () => requestInstance.post('/pricing/upgrade', {})
- }
- export const planApi = {
- apply: (data) => requestInstance.post('/plan/apply', data),
- myRequests: () => requestInstance.post('/plan/requests/my', {})
- }
- export const workbenchApi = {
- list: () => requestInstance.post('/plan/requests/incoming', {}),
- accept: (requestId) => requestInstance.post('/plan/requests/accept', { requestId }),
- reject: (requestId) => requestInstance.post('/plan/requests/reject', { requestId })
- }
- export const proposalApi = {
- create: (data) => requestInstance.post('/plan/proposals/create', data),
- counter: (data) => requestInstance.post('/plan/proposals/counter', data),
- accept: (data) => requestInstance.post('/plan/proposals/accept', data),
- reject: (data) => requestInstance.post('/plan/proposals/reject', data),
- logs: (requestId) => requestInstance.post('/plan/proposals/logs', { requestId })
- }
- 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', {}),
- trackShare: () => requestInstance.post('/profile/share/track', {}),
- complete: (data) => requestInstance.post('/profile/complete', data),
- update: (data) => requestInstance.post('/profile/update', data),
- qrcode: () => requestInstance.get('/profile/qrcode', {})
- }
- 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', {}),
- team: () => requestInstance.post('/commission/team', {}),
- stats: () => requestInstance.post('/commission/stats', {})
- }
- export const withdrawApi = {
- apply: (amount) => requestInstance.post('/withdraw/apply', { amount }),
- list: () => requestInstance.post('/withdraw/list', {}),
- balance: () => requestInstance.post('/withdraw/balance', {})
- }
- export const interventionApi = {
- chatList: () => requestInstance.post('/intervention/chat-list', {}),
- history: (chartRecordId) => requestInstance.post('/intervention/chat-history', { chartRecordId }),
- start: (chartRecordId) => requestInstance.post('/intervention/start', { chartRecordId }),
- end: (interventionId) => requestInstance.post('/intervention/end', { interventionId, endedBy: 'practitioner' }),
- endByUser: (interventionId) => requestInstance.post('/intervention/end', { interventionId, endedBy: 'user' }),
- send: (data) => requestInstance.post('/intervention/send', data)
- }
- export const deliveryApi = {
- create: (data) => requestInstance.post('/plan/delivery/create', data),
- list: (planRequestId) => requestInstance.post('/plan/delivery/list', { planRequestId })
- }
- export const exportApi = {
- pdf: (recordId) => {
- const token = uni.getStorageSync('token')
- return new Promise((resolve, reject) => {
- uni.downloadFile({
- url: API_BASE_URL + '/export/pdf',
- method: 'POST',
- data: { recordId },
- header: token ? { Authorization: `Bearer ${token}` } : {},
- success: (res) => {
- if (res.statusCode === 200) {
- resolve(res.tempFilePath)
- } else {
- reject(new Error('导出失败: ' + res.statusCode))
- }
- },
- fail: (err) => {
- reject(err)
- }
- })
- })
- }
- }
|