operationManagement.ts 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. import { ResPage, StoreUser } from "@/api/interface/index";
  2. import { PORT_NONE } from "@/api/config/servicePort";
  3. import http from "@/api";
  4. import http_store from "@/api/indexStore";
  5. import http_ai from "@/api/indexAi";
  6. import axios from "axios";
  7. import { ResultEnum } from "@/enums/httpEnum";
  8. import { useUserStore } from "@/stores/modules/user";
  9. import { ElMessage } from "element-plus";
  10. import { LOGIN_URL } from "@/config";
  11. import router from "@/routers";
  12. // 创建专门用于 STORE API 的 axios 实例(单例)
  13. const storeAxiosInstance = axios.create({
  14. baseURL: import.meta.env.VITE_API_URL_STORE as string,
  15. timeout: ResultEnum.TIMEOUT as number,
  16. withCredentials: true
  17. });
  18. // 添加请求拦截器
  19. storeAxiosInstance.interceptors.request.use(
  20. (config: any) => {
  21. const userStore = useUserStore();
  22. if (config.headers) {
  23. config.headers.Authorization = userStore.token;
  24. }
  25. return config;
  26. },
  27. (error: any) => {
  28. return Promise.reject(error);
  29. }
  30. );
  31. // 添加响应拦截器
  32. storeAxiosInstance.interceptors.response.use(
  33. (response: any) => {
  34. const { data } = response;
  35. const userStore = useUserStore();
  36. // 登录失效
  37. if (data.code == ResultEnum.OVERDUE) {
  38. userStore.setToken("");
  39. router.replace(LOGIN_URL);
  40. ElMessage.error(data.msg);
  41. return Promise.reject(data);
  42. }
  43. // 全局错误信息拦截
  44. if (data.code && data.code !== ResultEnum.SUCCESS) {
  45. ElMessage.error(data.msg);
  46. return Promise.reject(data);
  47. }
  48. return data;
  49. },
  50. async (error: any) => {
  51. const { response } = error;
  52. // 请求超时 && 网络错误单独判断
  53. if (error.message.indexOf("timeout") !== -1) ElMessage.error("请求超时!请您稍后重试");
  54. if (error.message.indexOf("Network Error") !== -1) ElMessage.error("网络错误!请您稍后重试");
  55. // 根据服务器响应的错误状态码,做不同的处理
  56. if (response?.data?.message) {
  57. ElMessage.error(response.data.message);
  58. }
  59. return Promise.reject(error);
  60. }
  61. );
  62. /**
  63. * 获取优惠券列表
  64. * @param params 请求参数
  65. * @returns 优惠券列表数据
  66. */
  67. export const getCouponList = params => {
  68. return http.post<ResPage<any>>(PORT_NONE + `/couponPlatform/getCouponList`, params);
  69. };
  70. /**
  71. * 获取优惠券模板列表
  72. * @param params 请求参数
  73. * @returns 优惠券模板列表数据
  74. */
  75. export const getCouponTemplateList = params => {
  76. return http.post<ResPage<any>>(PORT_NONE + `/discountCouponPlatform/getCouponTemplateList`, params);
  77. };
  78. /**
  79. * 获取运营活动列表(分页查询)
  80. * @param params { activityName?: string, activityStatus?: string, pageNum?: string, pageSize?: string, status?: number, storeId?: string, storeName?: string }
  81. * @returns 运营活动列表数据
  82. */
  83. export const getActivityList = (params: {
  84. activityName?: string; // 活动名称(模糊查询)
  85. activityStatus?: string; // 活动状态
  86. activityType?: number; // 活动类型(1-营销活动,2-评论有礼)
  87. pageNum?: string; // 当前页
  88. pageSize?: string; // 每页数量
  89. status?: number; // 状态(1-待审核, 2-未开始, 3-审核拒绝, 4-已售罄, 5-进行中, 6-已下架, 7-已结束, 8-审核成功)
  90. storeId?: string; // 商户ID
  91. storeName?: string; // 商户名称(模糊查询)
  92. }) => {
  93. return storeAxiosInstance.get<ResPage<any>>(PORT_NONE + `/operationalActivity/detail`, { params });
  94. };
  95. /**
  96. * 获取运营活动详情
  97. * @param params 请求参数
  98. * @returns 运营活动详情数据
  99. */
  100. export const getActivityDetail = params => {
  101. return http.get<any>(PORT_NONE + `/operationalActivity/queryActivityById`, params);
  102. };
  103. /**
  104. * 新增运营活动
  105. * @param params 请求参数
  106. * @returns 新增结果
  107. */
  108. export const addActivity = params => {
  109. return http.post<any>(PORT_NONE + `/operationalActivity/create`, params);
  110. };
  111. /**
  112. * 更新运营活动
  113. * @param params 请求参数
  114. * @returns 更新结果
  115. */
  116. export const updateActivity = params => {
  117. return http.post<any>(PORT_NONE + `/operationalActivity/update`, params);
  118. };
  119. /**
  120. * 删除运营活动
  121. * @param params 请求参数
  122. * @returns 删除结果
  123. */
  124. export const deleteActivity = params => {
  125. return http.get<any>(PORT_NONE + `/operationalActivity/delete`, params);
  126. };
  127. /**
  128. * 更新运营活动状态
  129. * @param params 请求参数
  130. * @returns 更新结果
  131. */
  132. export const updateActivityStatus = params => {
  133. return http.get<any>(PORT_NONE + `/operationalActivity/updateStatus`, params);
  134. };
  135. /**
  136. * 获取活动规则级联选择器选项
  137. * @param params 请求参数
  138. * @returns 级联选择器选项数据
  139. */
  140. export const getActivityRuleOptions = (params?: any) => {
  141. return storeAxiosInstance.get<any>(PORT_NONE + `/userActionRewardRule/getRewardRuleList`, params);
  142. };
  143. /**
  144. * AI生成活动宣传图
  145. * @param params 请求参数 { text: string } - 活动描述文本
  146. * @returns 生成的图片数据
  147. */
  148. export const generatePromotionImage = (params: { text: string }) => {
  149. return http_ai.post<any>(`/ai/life-manager/api/v1/promotion_image/generate`, params);
  150. };
  151. /**
  152. * 活动案例列表(使用 VITE_API_URL_STORE)
  153. * @param params { uploadStatus?: number, activityName?: string, pageNum?: number, pageSize?: number }
  154. * @returns 活动案例列表
  155. */
  156. export const getPersonCaseList = (params: {
  157. storeId: number;
  158. hasResult?: number; // 上传情况:0-未上传,1-已上传(非必填)
  159. activityName?: string; // 所属活动/活动名称(非必填)
  160. pageNum?: number; // 当前页(非必填)
  161. pageSize?: number; // 每页条数(非必填)
  162. }) => {
  163. // 此接口需要使用 VITE_API_URL_STORE,使用专门的 axios 实例
  164. return storeAxiosInstance.post<ResPage<any>>(PORT_NONE + `/storeOperationalActivity/achievement/case/store/list`, params);
  165. };
  166. /**
  167. * 查询报名人员列表
  168. * @param params { storeId: number, status?: number, activityName?: string, pageNum?: number, pageSize?: number }
  169. * @returns 报名人员列表
  170. */
  171. export const getPersonnelList = (params: {
  172. storeId: number; // 商户ID(必填)
  173. status?: number; // 报名状态: 0-待审核, 1-拒绝, 2-通过(非必填)
  174. activityName?: string; // 活动名称(模糊查询)(非必填)
  175. pageNum?: number; // 页码,默认值:1(非必填)
  176. pageSize?: number; // 每页大小,默认值:10(非必填)
  177. }) => {
  178. return http.post<ResPage<any>>(PORT_NONE + `/operationalActivitySignup/queryList`, params);
  179. };
  180. /**
  181. * 查询案例详情
  182. * @param params { activityId: number, userId: number } - 活动ID(必填),用户ID(必填)
  183. * @returns 案例详情信息
  184. */
  185. export const getPersonCaseDetail = (params: { activityId: number; userId: number }) => {
  186. return storeAxiosInstance.get<any>(PORT_NONE + `/storeOperationalActivity/achievement/case/detail`, { params });
  187. };
  188. /**
  189. * 查询报名人员详情
  190. * @param params { id: number } - 报名ID(必填)
  191. * @returns 报名人员详情信息
  192. */
  193. export const getPersonnelDetail = (params: { id: number }) => {
  194. return http.post<any>(PORT_NONE + `/operationalActivitySignup/queryById`, params);
  195. };
  196. /**
  197. * 审核通过报名人员
  198. * @param params { id: number } - 报名ID(必填)
  199. * @returns 审核结果
  200. */
  201. export const approvePersonnel = (params: { id: number }) => {
  202. return http.post<any>(PORT_NONE + `/operationalActivitySignup/approve`, params);
  203. };
  204. /**
  205. * 审核拒绝报名人员
  206. * @param params { id: number, rejectReason?: string } - 报名ID(必填),拒绝原因(非必填)
  207. * @returns 审核结果
  208. */
  209. export const rejectPersonnel = (params: { id: number; rejectReason?: string }) => {
  210. return http.post<any>(PORT_NONE + `/operationalActivitySignup/reject`, params);
  211. };
  212. /**
  213. * 上传活动结果
  214. * @param params
  215. * @returns
  216. */
  217. export const uploadActivityResult = (params: {
  218. id: number; // 活动ID(必填)
  219. resultType: number; // 结果类型:0-文字,1-图片(必填)
  220. resultText?: string; // 结果文字,当resultType=0时使用(非必填)
  221. resultMediaUrl?: string; // 结果图片地址,当resultType=1时使用(非必填)
  222. }) => {
  223. return http.post<any>(PORT_NONE + `/operationalActivity/uploadResult`, params);
  224. };