import { ResPage, StoreUser } from "@/api/interface/index"; import { PORT_NONE } from "@/api/config/servicePort"; import http from "@/api"; import http_store from "@/api/indexStore"; import http_ai from "@/api/indexAi"; import axios from "axios"; import { ResultEnum } from "@/enums/httpEnum"; import { useUserStore } from "@/stores/modules/user"; import { ElMessage } from "element-plus"; import { LOGIN_URL } from "@/config"; import router from "@/routers"; // 创建专门用于 STORE API 的 axios 实例(单例) const storeAxiosInstance = axios.create({ baseURL: import.meta.env.VITE_API_URL_STORE as string, timeout: ResultEnum.TIMEOUT as number, withCredentials: true }); // 添加请求拦截器 storeAxiosInstance.interceptors.request.use( (config: any) => { const userStore = useUserStore(); if (config.headers) { config.headers.Authorization = userStore.token; } return config; }, (error: any) => { return Promise.reject(error); } ); // 添加响应拦截器 storeAxiosInstance.interceptors.response.use( (response: any) => { const { data } = response; const userStore = useUserStore(); // 登录失效 if (data.code == ResultEnum.OVERDUE) { userStore.setToken(""); router.replace(LOGIN_URL); ElMessage.error(data.msg); return Promise.reject(data); } // 全局错误信息拦截 if (data.code && data.code !== ResultEnum.SUCCESS) { ElMessage.error(data.msg); return Promise.reject(data); } return data; }, async (error: any) => { const { response } = error; // 请求超时 && 网络错误单独判断 if (error.message.indexOf("timeout") !== -1) ElMessage.error("请求超时!请您稍后重试"); if (error.message.indexOf("Network Error") !== -1) ElMessage.error("网络错误!请您稍后重试"); // 根据服务器响应的错误状态码,做不同的处理 if (response?.data?.message) { ElMessage.error(response.data.message); } return Promise.reject(error); } ); /** * 获取优惠券列表 * @param params 请求参数 * @returns 优惠券列表数据 */ export const getCouponList = params => { return http.post>(PORT_NONE + `/couponPlatform/getCouponList`, params); }; /** * 获取优惠券模板列表 * @param params 请求参数 * @returns 优惠券模板列表数据 */ export const getCouponTemplateList = params => { return http.post>(PORT_NONE + `/discountCouponPlatform/getCouponTemplateList`, params); }; /** * 获取运营活动列表(分页查询) * @param params { activityName?: string, activityStatus?: string, pageNum?: string, pageSize?: string, status?: number, storeId?: string, storeName?: string } * @returns 运营活动列表数据 */ export const getActivityList = (params: { activityName?: string; // 活动名称(模糊查询) activityStatus?: string; // 活动状态 activityType?: number; // 活动类型(1-营销活动,2-评论有礼) pageNum?: string; // 当前页 pageSize?: string; // 每页数量 status?: number; // 状态(1-待审核, 2-未开始, 3-审核拒绝, 4-已售罄, 5-进行中, 6-已下架, 7-已结束, 8-审核成功) storeId?: string; // 商户ID storeName?: string; // 商户名称(模糊查询) }) => { return storeAxiosInstance.get>(PORT_NONE + `/operationalActivity/detail`, { params }); }; /** * 获取运营活动详情 * @param params 请求参数 * @returns 运营活动详情数据 */ export const getActivityDetail = params => { return http.get(PORT_NONE + `/operationalActivity/queryActivityById`, params); }; /** * 新增运营活动 * @param params 请求参数 * @returns 新增结果 */ export const addActivity = params => { return http.post(PORT_NONE + `/operationalActivity/create`, params); }; /** * 更新运营活动 * @param params 请求参数 * @returns 更新结果 */ export const updateActivity = params => { return http.post(PORT_NONE + `/operationalActivity/update`, params); }; /** * 删除运营活动 * @param params 请求参数 * @returns 删除结果 */ export const deleteActivity = params => { return http.get(PORT_NONE + `/operationalActivity/delete`, params); }; /** * 更新运营活动状态 * @param params 请求参数 * @returns 更新结果 */ export const updateActivityStatus = params => { return http.get(PORT_NONE + `/operationalActivity/updateStatus`, params); }; /** * 获取活动规则级联选择器选项 * @param params 请求参数 * @returns 级联选择器选项数据 */ export const getActivityRuleOptions = (params?: any) => { return storeAxiosInstance.get(PORT_NONE + `/userActionRewardRule/getRewardRuleList`, params); }; /** * AI生成活动宣传图 * @param params 请求参数 { text: string } - 活动描述文本 * @returns 生成的图片数据 */ export const generatePromotionImage = (params: { text: string }) => { return http_ai.post(`/ai/life-manager/api/v1/promotion_image/generate`, params); }; /** * 活动案例列表(使用 VITE_API_URL_STORE) * @param params { uploadStatus?: number, activityName?: string, pageNum?: number, pageSize?: number } * @returns 活动案例列表 */ export const getPersonCaseList = (params: { storeId: number; hasResult?: number; // 上传情况:0-未上传,1-已上传(非必填) activityName?: string; // 所属活动/活动名称(非必填) pageNum?: number; // 当前页(非必填) pageSize?: number; // 每页条数(非必填) }) => { // 此接口需要使用 VITE_API_URL_STORE,使用专门的 axios 实例 return storeAxiosInstance.post>(PORT_NONE + `/storeOperationalActivity/achievement/case/store/list`, params); }; /** * 查询报名人员列表 * @param params { storeId: number, status?: number, activityName?: string, pageNum?: number, pageSize?: number } * @returns 报名人员列表 */ export const getPersonnelList = (params: { storeId: number; // 商户ID(必填) status?: number; // 报名状态: 0-待审核, 1-拒绝, 2-通过(非必填) activityName?: string; // 活动名称(模糊查询)(非必填) pageNum?: number; // 页码,默认值:1(非必填) pageSize?: number; // 每页大小,默认值:10(非必填) }) => { return http.post>(PORT_NONE + `/operationalActivitySignup/queryList`, params); }; /** * 查询案例详情 * @param params { activityId: number, userId: number } - 活动ID(必填),用户ID(必填) * @returns 案例详情信息 */ export const getPersonCaseDetail = (params: { activityId: number; userId: number }) => { return storeAxiosInstance.get(PORT_NONE + `/storeOperationalActivity/achievement/case/detail`, { params }); }; /** * 查询报名人员详情 * @param params { id: number } - 报名ID(必填) * @returns 报名人员详情信息 */ export const getPersonnelDetail = (params: { id: number }) => { return http.post(PORT_NONE + `/operationalActivitySignup/queryById`, params); }; /** * 审核通过报名人员 * @param params { id: number } - 报名ID(必填) * @returns 审核结果 */ export const approvePersonnel = (params: { id: number }) => { return http.post(PORT_NONE + `/operationalActivitySignup/approve`, params); }; /** * 审核拒绝报名人员 * @param params { id: number, rejectReason?: string } - 报名ID(必填),拒绝原因(非必填) * @returns 审核结果 */ export const rejectPersonnel = (params: { id: number; rejectReason?: string }) => { return http.post(PORT_NONE + `/operationalActivitySignup/reject`, params); }; /** * 上传活动结果 * @param params * @returns */ export const uploadActivityResult = (params: { id: number; // 活动ID(必填) resultType: number; // 结果类型:0-文字,1-图片(必填) resultText?: string; // 结果文字,当resultType=0时使用(非必填) resultMediaUrl?: string; // 结果图片地址,当resultType=1时使用(非必填) }) => { return http.post(PORT_NONE + `/operationalActivity/uploadResult`, params); };