|  | @@ -1,4 +1,4 @@
 | 
	
		
			
				|  |  | -import request from '@/router/axios';
 | 
	
		
			
				|  |  | +import request from "@/router/axios";
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /**
 | 
	
		
			
				|  |  |   * 营销活动查询参数类型定义
 | 
	
	
		
			
				|  | @@ -140,6 +140,31 @@ import request from '@/router/axios';
 | 
	
		
			
				|  |  |   */
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /**
 | 
	
		
			
				|  |  | + * 审批记录修改参数类型定义
 | 
	
		
			
				|  |  | + * @typedef {Object} ApprovalRecordUpdateParams
 | 
	
		
			
				|  |  | + * @property {string|number} id - 审批记录ID
 | 
	
		
			
				|  |  | + * @property {string|number} activityId - 活动ID
 | 
	
		
			
				|  |  | + * @property {string} activityCode - 活动编码
 | 
	
		
			
				|  |  | + * @property {number} approvalStatus - 审批状态 1-待审批 2-审批通过 3-审批拒绝
 | 
	
		
			
				|  |  | + * @property {string} approvalRemark - 审批备注
 | 
	
		
			
				|  |  | + * @property {string|number} approverId - 审批人ID
 | 
	
		
			
				|  |  | + * @property {string} approverName - 审批人姓名
 | 
	
		
			
				|  |  | + * @property {string} approvalTime - 审批时间
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * 审批记录添加参数类型定义
 | 
	
		
			
				|  |  | + * @typedef {Object} ApprovalRecordAddParams
 | 
	
		
			
				|  |  | + * @property {string|number} activityId - 活动ID
 | 
	
		
			
				|  |  | + * @property {string} activityCode - 活动编码
 | 
	
		
			
				|  |  | + * @property {number} approvalStatus - 审批状态 1-待审批 2-审批通过 3-审批拒绝
 | 
	
		
			
				|  |  | + * @property {string} approvalRemark - 审批备注
 | 
	
		
			
				|  |  | + * @property {string|number} approverId - 审批人ID
 | 
	
		
			
				|  |  | + * @property {string} approverName - 审批人姓名
 | 
	
		
			
				|  |  | + * @property {string} approvalTime - 审批时间
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  |   * 营销活动分页查询
 | 
	
		
			
				|  |  |   * @param {number} current - 当前页码
 | 
	
		
			
				|  |  |   * @param {number} size - 每页大小
 | 
	
	
		
			
				|  | @@ -147,68 +172,113 @@ import request from '@/router/axios';
 | 
	
		
			
				|  |  |   * @returns {Promise<ApiResponse<PageResult<MarketingActivityItem>>>} 分页查询结果
 | 
	
		
			
				|  |  |   */
 | 
	
		
			
				|  |  |  export const getList = (current, size, params = {}) => {
 | 
	
		
			
				|  |  | -  return request({
 | 
	
		
			
				|  |  | -    url: '/api/blade-factory/api/factory/marketing-activity',
 | 
	
		
			
				|  |  | -    method: 'get',
 | 
	
		
			
				|  |  | -    params: {
 | 
	
		
			
				|  |  | -      ...params,
 | 
	
		
			
				|  |  | -      current,
 | 
	
		
			
				|  |  | -      size
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -  })
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +    return request({
 | 
	
		
			
				|  |  | +        url: "/api/blade-factory/api/factory/marketing-activity",
 | 
	
		
			
				|  |  | +        method: "get",
 | 
	
		
			
				|  |  | +        params: {
 | 
	
		
			
				|  |  | +            ...params,
 | 
	
		
			
				|  |  | +            current,
 | 
	
		
			
				|  |  | +            size
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /**
 | 
	
		
			
				|  |  |   * 获取营销活动详情
 | 
	
		
			
				|  |  |   * @param {string|number} activityId - 活动ID
 | 
	
		
			
				|  |  |   * @returns {Promise<ApiResponse<MarketingActivityItem>>} 活动详情
 | 
	
		
			
				|  |  |   */
 | 
	
		
			
				|  |  | -export const getDetail = (activityId) => {
 | 
	
		
			
				|  |  | -  return request({
 | 
	
		
			
				|  |  | -    url: `/api/blade-factory/api/factory/marketing-activity/${activityId}`,
 | 
	
		
			
				|  |  | -    method: 'get'
 | 
	
		
			
				|  |  | -  })
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +export const getDetail = activityId => {
 | 
	
		
			
				|  |  | +    return request({
 | 
	
		
			
				|  |  | +        url: `/api/blade-factory/api/factory/marketing-activity/${activityId}`,
 | 
	
		
			
				|  |  | +        method: "get"
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /**
 | 
	
		
			
				|  |  |   * 修改营销活动(主要用于审批操作)
 | 
	
		
			
				|  |  |   * @param {MarketingActivityForm} row - 活动数据
 | 
	
		
			
				|  |  |   * @returns {Promise<ApiResponse<boolean>>} 修改结果
 | 
	
		
			
				|  |  |   */
 | 
	
		
			
				|  |  | -export const update = (row) => {
 | 
	
		
			
				|  |  | -  return request({
 | 
	
		
			
				|  |  | -    url: '/api/blade-factory/api/factory/marketing-activity',
 | 
	
		
			
				|  |  | -    method: 'put',
 | 
	
		
			
				|  |  | -    data: row
 | 
	
		
			
				|  |  | -  })
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +export const update = row => {
 | 
	
		
			
				|  |  | +    return request({
 | 
	
		
			
				|  |  | +        url: "/api/blade-factory/api/factory/marketing-activity",
 | 
	
		
			
				|  |  | +        method: "put",
 | 
	
		
			
				|  |  | +        data: row
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /**
 | 
	
		
			
				|  |  |   * 审批营销活动
 | 
	
		
			
				|  |  |   * @param {ApprovalParams} params - 审批参数
 | 
	
		
			
				|  |  | + * @param {Object} userInfo - 当前用户信息
 | 
	
		
			
				|  |  | + * @param {string|number} userInfo.userId - 用户ID
 | 
	
		
			
				|  |  | + * @param {string} userInfo.userName - 用户姓名
 | 
	
		
			
				|  |  |   * @returns {Promise<ApiResponse<boolean>>} 审批结果
 | 
	
		
			
				|  |  |   */
 | 
	
		
			
				|  |  | -export const approve = async (params) => {
 | 
	
		
			
				|  |  | -  const { id, approvalStatus, approvalRemark } = params
 | 
	
		
			
				|  |  | -  
 | 
	
		
			
				|  |  | -  // 先获取活动详情
 | 
	
		
			
				|  |  | -  const detailRes = await getDetail(id)
 | 
	
		
			
				|  |  | -  if (!detailRes.data.success) {
 | 
	
		
			
				|  |  | -    throw new Error('获取活动详情失败')
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  
 | 
	
		
			
				|  |  | -  const activityData = detailRes.data.data
 | 
	
		
			
				|  |  | -  
 | 
	
		
			
				|  |  | -  // 构建更新数据
 | 
	
		
			
				|  |  | -  const updateData = {
 | 
	
		
			
				|  |  | -    ...activityData,
 | 
	
		
			
				|  |  | -    approvalStatus,
 | 
	
		
			
				|  |  | -    approvalRemark,
 | 
	
		
			
				|  |  | -    approvalTime: new Date().toISOString().replace('T', ' ').substring(0, 19)
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  
 | 
	
		
			
				|  |  | -  return update(updateData)
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +export const approveWithSmartRecord = async (params, userInfo) => {
 | 
	
		
			
				|  |  | +    const { id, approvalStatus, approvalRemark } = params;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    try {
 | 
	
		
			
				|  |  | +        // 先获取活动详情
 | 
	
		
			
				|  |  | +        const detailRes = await getDetail(id);
 | 
	
		
			
				|  |  | +        if (!detailRes.data.success) {
 | 
	
		
			
				|  |  | +            throw new Error("获取活动详情失败");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        const activityData = detailRes.data.data;
 | 
	
		
			
				|  |  | +        const currentTime = new Date()
 | 
	
		
			
				|  |  | +            .toISOString()
 | 
	
		
			
				|  |  | +            .replace("T", " ")
 | 
	
		
			
				|  |  | +            .substring(0, 19);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 构建更新数据
 | 
	
		
			
				|  |  | +        const updateData = {
 | 
	
		
			
				|  |  | +            ...activityData,
 | 
	
		
			
				|  |  | +            approvalStatus,
 | 
	
		
			
				|  |  | +            approvalRemark,
 | 
	
		
			
				|  |  | +            approvalTime: currentTime,
 | 
	
		
			
				|  |  | +            approverId: userInfo.userId,
 | 
	
		
			
				|  |  | +            approverName: userInfo.userName
 | 
	
		
			
				|  |  | +        };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 执行审批更新
 | 
	
		
			
				|  |  | +        const updateResult = await update(updateData);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if (updateResult.data.success) {
 | 
	
		
			
				|  |  | +            // 审批成功后,智能保存审批记录
 | 
	
		
			
				|  |  | +            const approvalRecordData = {
 | 
	
		
			
				|  |  | +                activityId: activityData.id,
 | 
	
		
			
				|  |  | +                activityCode: activityData.activityCode,
 | 
	
		
			
				|  |  | +                approvalStatus,
 | 
	
		
			
				|  |  | +                approvalRemark,
 | 
	
		
			
				|  |  | +                approverId: userInfo.userId,
 | 
	
		
			
				|  |  | +                approverName: userInfo.userName,
 | 
	
		
			
				|  |  | +                approvalTime: currentTime
 | 
	
		
			
				|  |  | +            };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            try {
 | 
	
		
			
				|  |  | +                const recordResult = await saveApprovalRecord(
 | 
	
		
			
				|  |  | +                    activityData.id,
 | 
	
		
			
				|  |  | +                    userInfo.userId,
 | 
	
		
			
				|  |  | +                    approvalRecordData
 | 
	
		
			
				|  |  | +                );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                if (!recordResult.data.success) {
 | 
	
		
			
				|  |  | +                    console.warn("审批记录保存失败:", recordResult.data.msg);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            } catch (recordError) {
 | 
	
		
			
				|  |  | +                console.error("保存审批记录失败:", recordError);
 | 
	
		
			
				|  |  | +                // 审批记录保存失败不影响主流程,只记录错误日志
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        return updateResult;
 | 
	
		
			
				|  |  | +    } catch (error) {
 | 
	
		
			
				|  |  | +        console.error("审批操作失败:", error);
 | 
	
		
			
				|  |  | +        throw error;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /**
 | 
	
		
			
				|  |  |   * 获取营销活动审批记录列表
 | 
	
	
		
			
				|  | @@ -218,25 +288,90 @@ export const approve = async (params) => {
 | 
	
		
			
				|  |  |   * @returns {Promise<ApiResponse<PageResult<ApprovalRecordItem>>>} 审批记录分页查询结果
 | 
	
		
			
				|  |  |   */
 | 
	
		
			
				|  |  |  export const getApprovalRecords = (current, size, activityId) => {
 | 
	
		
			
				|  |  | -  return request({
 | 
	
		
			
				|  |  | -    url: '/api/blade-factory/api/factory/activity-approval',
 | 
	
		
			
				|  |  | -    method: 'get',
 | 
	
		
			
				|  |  | -    params: {
 | 
	
		
			
				|  |  | -      current,
 | 
	
		
			
				|  |  | -      size,
 | 
	
		
			
				|  |  | -      activityId
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -  })
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +    return request({
 | 
	
		
			
				|  |  | +        url: "/api/blade-factory/api/factory/activity-approval",
 | 
	
		
			
				|  |  | +        method: "get",
 | 
	
		
			
				|  |  | +        params: {
 | 
	
		
			
				|  |  | +            current,
 | 
	
		
			
				|  |  | +            size,
 | 
	
		
			
				|  |  | +            activityId
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /**
 | 
	
		
			
				|  |  |   * 获取单条审批记录详情
 | 
	
		
			
				|  |  |   * @param {string|number} activityApprovalId - 审批记录ID
 | 
	
		
			
				|  |  |   * @returns {Promise<ApiResponse<ApprovalRecordItem>>} 审批记录详情
 | 
	
		
			
				|  |  |   */
 | 
	
		
			
				|  |  | -export const getApprovalRecordDetail = (activityApprovalId) => {
 | 
	
		
			
				|  |  | -  return request({
 | 
	
		
			
				|  |  | -    url: `/api/blade-factory/api/factory/activity-approval/${activityApprovalId}`,
 | 
	
		
			
				|  |  | -    method: 'get'
 | 
	
		
			
				|  |  | -  })
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +export const getApprovalRecordDetail = activityApprovalId => {
 | 
	
		
			
				|  |  | +    return request({
 | 
	
		
			
				|  |  | +        url: `/api/blade-factory/api/factory/activity-approval/${activityApprovalId}`,
 | 
	
		
			
				|  |  | +        method: "get"
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * 添加审批记录
 | 
	
		
			
				|  |  | + * @param {ApprovalRecordAddParams} params - 审批记录参数
 | 
	
		
			
				|  |  | + * @returns {Promise<ApiResponse<boolean>>} 添加结果
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +export const addApprovalRecord = params => {
 | 
	
		
			
				|  |  | +    return request({
 | 
	
		
			
				|  |  | +        url: "/api/blade-factory/api/factory/activity-approval",
 | 
	
		
			
				|  |  | +        method: "post",
 | 
	
		
			
				|  |  | +        data: params
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * 修改审批记录
 | 
	
		
			
				|  |  | + * @param {ApprovalRecordUpdateParams} params - 审批记录修改参数
 | 
	
		
			
				|  |  | + * @returns {Promise<ApiResponse<boolean>>} 修改结果
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +export const updateApprovalRecord = params => {
 | 
	
		
			
				|  |  | +    return request({
 | 
	
		
			
				|  |  | +        url: "/api/blade-factory/api/factory/activity-approval",
 | 
	
		
			
				|  |  | +        method: "put",
 | 
	
		
			
				|  |  | +        data: params
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * 保存审批记录(如果存在则修改,不存在则添加)
 | 
	
		
			
				|  |  | + * @param {string|number} activityId - 活动ID
 | 
	
		
			
				|  |  | + * @param {string|number} approverId - 审批人ID
 | 
	
		
			
				|  |  | + * @param {ApprovalRecordAddParams} approvalData - 审批记录数据
 | 
	
		
			
				|  |  | + * @returns {Promise<ApiResponse<boolean>>} 保存结果
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +export const saveApprovalRecord = async (
 | 
	
		
			
				|  |  | +    activityId,
 | 
	
		
			
				|  |  | +    approverId,
 | 
	
		
			
				|  |  | +    approvalData
 | 
	
		
			
				|  |  | +) => {
 | 
	
		
			
				|  |  | +    try {
 | 
	
		
			
				|  |  | +        // 先查询是否已有该活动的审批记录
 | 
	
		
			
				|  |  | +        const recordsResponse = await getApprovalRecords(1, 100, activityId);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if (
 | 
	
		
			
				|  |  | +            recordsResponse.data.success &&
 | 
	
		
			
				|  |  | +            recordsResponse.data.data.records.length > 0
 | 
	
		
			
				|  |  | +        ) {
 | 
	
		
			
				|  |  | +            const existingRecord = recordsResponse.data.data.records[0];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            const updateParams = {
 | 
	
		
			
				|  |  | +                ...approvalData,
 | 
	
		
			
				|  |  | +                id: existingRecord.id,
 | 
	
		
			
				|  |  | +                approverId: existingRecord.approverId
 | 
	
		
			
				|  |  | +            };
 | 
	
		
			
				|  |  | +            return await updateApprovalRecord(updateParams);
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +            // 如果查询失败或没有记录,则添加新记录
 | 
	
		
			
				|  |  | +            return await addApprovalRecord(approvalData);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    } catch (error) {
 | 
	
		
			
				|  |  | +        console.error("保存审批记录失败:", error);
 | 
	
		
			
				|  |  | +        // 如果查询失败,尝试添加新记录
 | 
	
		
			
				|  |  | +        return await addApprovalRecord(approvalData);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +};
 |