api.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. // API 服务器地址 - 开发环境使用本地地址,生产环境请替换为实际域名
  2. // 微信开发者工具需勾选: 设置 → 安全 → 不校验合法域名
  3. const API_BASE_URL = 'http://127.0.0.1:8186/api'
  4. const TIMEOUT = 30000
  5. async function request(method, url, data) {
  6. const token = uni.getStorageSync('token')
  7. const header = { 'Content-Type': 'application/json' }
  8. if (token) {
  9. header.Authorization = `Bearer ${token}`
  10. }
  11. return new Promise((resolve, reject) => {
  12. uni.request({
  13. url: API_BASE_URL + url,
  14. method,
  15. data,
  16. header,
  17. timeout: TIMEOUT,
  18. success(res) {
  19. const response = res.data
  20. if (response.code !== 0) {
  21. uni.showToast({ title: response.message || '请求失败', icon: 'none' })
  22. if (response.code === 1001) {
  23. uni.removeStorageSync('token')
  24. // 跳转到登录页,避免 switchTab 超时问题
  25. setTimeout(() => {
  26. uni.reLaunch({ url: '/pages/login/index' })
  27. }, 500)
  28. }
  29. const err = new Error(response.message || '请求失败')
  30. err.code = response.code
  31. reject(err)
  32. } else {
  33. resolve(response.data)
  34. }
  35. },
  36. fail(err) {
  37. uni.showToast({ title: '网络错误', icon: 'none' })
  38. reject(err)
  39. }
  40. })
  41. })
  42. }
  43. const requestInstance = {
  44. get: (url, data) => request('GET', url, data),
  45. post: (url, data) => request('POST', url, data),
  46. put: (url, data) => request('PUT', url, data),
  47. delete: (url, data) => request('DELETE', url, data)
  48. }
  49. export default requestInstance
  50. export const authApi = {
  51. login: (data) => requestInstance.post('/auth/login', data)
  52. }
  53. export const consultationApi = {
  54. start: (data) => requestInstance.post('/consultation/start', data),
  55. check: (data) => requestInstance.post('/consultation/check', data),
  56. regenerate: (chartRecordId) => requestInstance.post('/consultation/regenerate', { chartRecordId })
  57. }
  58. export const chartApi = {
  59. create: (data) => requestInstance.post('/chart/create', data),
  60. list: () => requestInstance.post('/chart/list', {}),
  61. detail: (id) => requestInstance.post('/chart/detail', { id }),
  62. delete: (id) => requestInstance.post('/chart/delete', { id }),
  63. interpret: (chartRecordId) => requestInstance.post('/chart/interpret', { chartRecordId }),
  64. academicOrientation: (chartRecordId) => requestInstance.post('/chart/academic-orientation', { chartRecordId })
  65. }
  66. export const chatApi = {
  67. send: (data) => requestInstance.post('/chat/send', data),
  68. history: (chartRecordId) => requestInstance.post('/chat/history', { chartRecordId })
  69. }
  70. export const payApi = {
  71. create: (data) => requestInstance.post('/pay/create', data)
  72. }
  73. export const pricingApi = {
  74. current: () => requestInstance.post('/pricing/current', {})
  75. }
  76. export const profileApi = {
  77. info: () => requestInstance.post('/profile/info', {}),
  78. vipStatus: () => requestInstance.post('/profile/vip-status', {}),
  79. quota: () => requestInstance.post('/profile/quota', {}),
  80. commissionSummary: () => requestInstance.post('/profile/commission-summary', {}),
  81. chartCount: () => requestInstance.post('/profile/chart-count', {}),
  82. trackShare: () => requestInstance.post('/profile/share/track', {}),
  83. complete: (data) => requestInstance.post('/profile/complete', data),
  84. update: (data) => requestInstance.post('/profile/update', data)
  85. }
  86. export const annotationApi = {
  87. add: (data) => requestInstance.post('/annotation/add', data),
  88. list: (recordId) => requestInstance.post('/annotation/list', { recordId }),
  89. delete: (id) => requestInstance.post('/annotation/delete', { id }),
  90. addTag: (data) => requestInstance.post('/annotation/tag/add', data),
  91. listTags: (recordId) => requestInstance.post('/annotation/tag/list', { recordId }),
  92. deleteTag: (id) => requestInstance.post('/annotation/tag/delete', { id })
  93. }
  94. export const commissionApi = {
  95. list: () => requestInstance.post('/commission/list', {}),
  96. total: () => requestInstance.post('/commission/total', {}),
  97. team: () => requestInstance.post('/commission/team', {}),
  98. stats: () => requestInstance.post('/commission/stats', {})
  99. }
  100. export const withdrawApi = {
  101. apply: (amount) => requestInstance.post('/withdraw/apply', { amount }),
  102. list: () => requestInstance.post('/withdraw/list', {}),
  103. balance: () => requestInstance.post('/withdraw/balance', {})
  104. }
  105. export const exportApi = {
  106. pdf: (recordId) => requestInstance.post('/export/pdf', { recordId })
  107. }