api.js 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364
  1. import axios from 'axios'
  2. import { useUserStore } from '@/stores/user'
  3. const api = axios.create({
  4. baseURL: import.meta.env.VITE_API_URL,
  5. headers: {
  6. 'Content-Type': 'application/json'
  7. }
  8. })
  9. // 请求拦截器
  10. api.interceptors.request.use(
  11. (config) => {
  12. const userStore = useUserStore()
  13. if (userStore.token) {
  14. config.headers.Authorization = `Bearer ${userStore.token}`
  15. }
  16. return config
  17. },
  18. (error) => {
  19. return Promise.reject(error)
  20. }
  21. )
  22. // 响应拦截器
  23. api.interceptors.response.use(
  24. (response) => response,
  25. (error) => {
  26. if (error.response?.status === 401) {
  27. const userStore = useUserStore()
  28. userStore.logout()
  29. }
  30. console.log('errorxxx', error.response?.data || error)
  31. return Promise.reject(error.response?.data || error)
  32. }
  33. )
  34. export const login = async (name, password) => {
  35. const response = await api.post('/users/login', {
  36. name,
  37. password
  38. })
  39. return response.data
  40. }
  41. export const profile = async () => {
  42. const response = await api.get('/users/profile')
  43. return response.data
  44. }
  45. export const resetPasswordApi = async (password) => {
  46. const response = await api.post('/users/reset-password', {
  47. password
  48. })
  49. return response.data
  50. }
  51. export const listUsersApi = async (page, size) => {
  52. const response = await api.get('/users', {
  53. params: {
  54. page,
  55. size
  56. }
  57. })
  58. return response.data
  59. }
  60. export const allUsersApi = async () => {
  61. const response = await api.get('/users/all')
  62. return response.data
  63. }
  64. export const createUserApi = async (userData) => {
  65. const response = await api.post('/users/create', userData)
  66. return response.data
  67. }
  68. export const updateUserApi = async (userData) => {
  69. const response = await api.post('/users/update', userData)
  70. return response.data
  71. }
  72. // 系统配置相关API
  73. export const listSysConfig = async (page = 0, size = 20, type) => {
  74. const params = { page, size }
  75. if (type) params.type = type
  76. const response = await api.get('/sys-config', { params })
  77. return response.data
  78. }
  79. export const createSysConfig = async (configData) => {
  80. const response = await api.post('/sys-config', configData)
  81. return response.data
  82. }
  83. export const updateSysConfig = async (name, configData) => {
  84. const response = await api.post(`/sys-config/update/${name}`, configData)
  85. return response.data
  86. }
  87. export const deleteSysConfig = async (name) => {
  88. const response = await api.post(`/sys-config/delete/${name}`)
  89. return response.data
  90. }
  91. export const getSysConfigByName = async (name) => {
  92. const response = await api.get(`/sys-config/${name}`)
  93. return response.data
  94. }
  95. // 文件上传API
  96. export const uploadFile = async (file) => {
  97. const formData = new FormData()
  98. formData.append('file', file)
  99. const response = await api.post('/files/upload', formData, {
  100. headers: {
  101. 'Content-Type': 'multipart/form-data'
  102. }
  103. })
  104. return response.data
  105. }
  106. // 图片上传API
  107. export const uploadImage = async (file) => {
  108. const formData = new FormData()
  109. formData.append('file', file)
  110. const response = await api.post('/files/upload/image', formData, {
  111. headers: {
  112. 'Content-Type': 'multipart/form-data'
  113. }
  114. })
  115. return response.data
  116. }
  117. // 文件下载API
  118. export const downloadFile = async (key) => {
  119. const response = await api.post(
  120. '/files/download',
  121. { key },
  122. {
  123. responseType: 'blob'
  124. }
  125. )
  126. return response.data
  127. }
  128. // ==================== 收入记录相关API ====================
  129. // 创建收入记录
  130. export const createIncome = async (incomeData) => {
  131. const response = await api.post('/income', incomeData)
  132. return response.data
  133. }
  134. // 获取收入记录列表
  135. export const listIncome = async (page = 0, size = 20, agentName, incomeType, startDate, endDate) => {
  136. const params = { page, size }
  137. if (agentName) params.agentName = agentName
  138. if (incomeType) params.incomeType = incomeType
  139. if (startDate) params.startDate = startDate
  140. if (endDate) params.endDate = endDate
  141. const response = await api.get('/income', { params })
  142. return response.data
  143. }
  144. // 获取单个收入记录
  145. export const getIncome = async (id) => {
  146. const response = await api.get(`/income/${id}`)
  147. return response.data
  148. }
  149. // 更新收入记录
  150. export const updateIncome = async (id, incomeData) => {
  151. const response = await api.put(`/income/${id}`, incomeData)
  152. return response.data
  153. }
  154. // 软删除收入记录
  155. export const deleteIncome = async (id) => {
  156. const response = await api.delete(`/income/${id}`)
  157. return response.data
  158. }
  159. // 永久删除收入记录
  160. export const hardDeleteIncome = async (id) => {
  161. const response = await api.delete(`/income/${id}/hard`)
  162. return response.data
  163. }
  164. // 获取收入统计数据
  165. export const getIncomeStatistics = async (startDate, endDate) => {
  166. const params = {}
  167. if (startDate) params.startDate = startDate
  168. if (endDate) params.endDate = endDate
  169. const response = await api.get('/income/statistics/summary', { params })
  170. return response.data
  171. }
  172. // ==================== 财务记录相关API ====================
  173. // 创建财务记录
  174. export const createFinance = async (financeData) => {
  175. const response = await api.post('/finance', financeData)
  176. return response.data
  177. }
  178. // 获取财务记录列表
  179. export const listFinance = async (page = 0, size = 20, status, paymentName, startDate, endDate) => {
  180. const params = { page, size }
  181. if (status) params.status = status
  182. if (paymentName) params.paymentName = paymentName
  183. if (startDate) params.startDate = startDate
  184. if (endDate) params.endDate = endDate
  185. const response = await api.get('/finance', { params })
  186. return response.data
  187. }
  188. // 获取单个财务记录
  189. export const getFinance = async (id) => {
  190. const response = await api.get(`/finance/${id}`)
  191. return response.data
  192. }
  193. // 更新财务记录
  194. export const updateFinance = async (id, financeData) => {
  195. const response = await api.put(`/finance/${id}`, financeData)
  196. return response.data
  197. }
  198. // 更新财务状态
  199. export const updateFinanceStatus = async (id, statusData) => {
  200. const response = await api.patch(`/finance/${id}/status`, statusData)
  201. return response.data
  202. }
  203. // 软删除财务记录
  204. export const deleteFinance = async (id) => {
  205. const response = await api.delete(`/finance/${id}`)
  206. return response.data
  207. }
  208. // 永久删除财务记录
  209. export const hardDeleteFinance = async (id) => {
  210. const response = await api.delete(`/finance/${id}/hard`)
  211. return response.data
  212. }
  213. // 获取财务统计数据
  214. export const getFinanceStatistics = async (startDate, endDate) => {
  215. const params = {}
  216. if (startDate) params.startDate = startDate
  217. if (endDate) params.endDate = endDate
  218. const response = await api.get('/finance/statistics/summary', { params })
  219. return response.data
  220. }
  221. // ==================== 团队相关API ====================
  222. // 创建团队
  223. export const createTeam = async (teamData) => {
  224. const response = await api.post('/teams', teamData)
  225. return response.data
  226. }
  227. // 获取团队列表
  228. export const listTeams = async (page = 0, size = 20, name) => {
  229. const params = { page, size }
  230. if (name) params.name = name
  231. const response = await api.get('/teams', { params })
  232. return response.data
  233. }
  234. // 获取单个团队
  235. export const getTeam = async (id) => {
  236. const response = await api.get(`/teams/${id}`)
  237. return response.data
  238. }
  239. // 更新团队
  240. export const updateTeam = async (id, teamData) => {
  241. const response = await api.put(`/teams/${id}`, teamData)
  242. return response.data
  243. }
  244. // 更新团队收入
  245. export const updateTeamRevenue = async (id, revenueData) => {
  246. const response = await api.patch(`/teams/${id}/revenue`, revenueData)
  247. return response.data
  248. }
  249. // 删除团队
  250. export const deleteTeam = async (id) => {
  251. const response = await api.delete(`/teams/${id}`)
  252. return response.data
  253. }
  254. // 重置今日收入
  255. export const resetAllTodayRevenue = async () => {
  256. const response = await api.post('/teams/reset-today-revenue')
  257. return response.data
  258. }
  259. // 获取团队统计数据
  260. export const getTeamStatistics = async () => {
  261. const response = await api.get('/teams/statistics/summary')
  262. return response.data
  263. }
  264. // ==================== 推广链接相关API ====================
  265. // 创建推广链接
  266. export const createLink = async (linkData) => {
  267. const response = await api.post('/links', linkData)
  268. return response.data
  269. }
  270. // 获取推广链接列表
  271. export const listLinks = async (page = 0, size = 20, name, type) => {
  272. const params = { page, size }
  273. if (name) params.name = name
  274. if (type) params.type = type
  275. const response = await api.get('/links', { params })
  276. return response.data
  277. }
  278. // 获取单个推广链接
  279. export const getLink = async (id) => {
  280. const response = await api.get(`/links/${id}`)
  281. return response.data
  282. }
  283. // 更新推广链接
  284. export const updateLink = async (id, linkData) => {
  285. const response = await api.put(`/links/${id}`, linkData)
  286. return response.data
  287. }
  288. // 删除推广链接
  289. export const deleteLink = async (id) => {
  290. const response = await api.delete(`/links/${id}`)
  291. return response.data
  292. }
  293. // 按类型获取推广链接
  294. export const getLinksByType = async (type) => {
  295. const response = await api.get(`/links/type/${type}`)
  296. return response.data
  297. }
  298. // 获取推广链接统计数据
  299. export const getLinkStatistics = async () => {
  300. const response = await api.get('/links/statistics/summary')
  301. return response.data
  302. }