import request from '@/utils/request' import type { Result, PageResult } from '@/api/types' // 奖励规则接口类型 export interface RewardRule { id: number name: string description: string ruleType: 'daily' | 'weekly' | 'monthly' | 'task' | 'rating' triggerCondition: { type: string operator: string value: number } rewardType: 'score' | 'badge' | 'both' rewardScore: number rewardBadge?: any scope: 'all' | 'designer' | 'department' scopeDeptIds?: number[] enabled: number cronExpression?: string lastExecuteTime?: string priority: number triggerCount?: number totalBudget?: number usedBudget?: number maxTimesPerUser?: number startTime?: string endTime?: string creatorId: number createTime: string updateTime: string } // 奖励发放记录 export interface RewardRecord { id: number userId: number ruleId: number ruleName: string rewardType: string rewardValue: string triggerData: string createTime: string userName?: string userAvatar?: string } // 用户徽章 export interface UserBadge { id: number userId: number badgeCode: string badgeName: string badgeIcon: string badgeColor: string description: string sourceType: string sourceId: number createTime: string } // 徽章定义 export interface BadgeDefinition { id: number badgeCode: string badgeName: string badgeIcon: string badgeColor: string description: string category: string sortOrder: number enabled: number } // 用户称号 export interface UserTitle { id: number userId: number titleCode: string titleName: string titleColor: string description: string isActive: number expireTime: string sourceType: string sourceId: number createTime: string } // 称号定义 export interface TitleDefinition { id: number titleCode: string titleName: string titleColor: string description: string category: string sortOrder: number enabled: number } // 奖励统计 export interface RewardStats { totalCount: number totalScore: number userCount: number hitRate: number ruleRanking: Array<{ ruleId: number; ruleName: string; triggerCount: number }> userRanking: Array<{ userId: number; userName: string; userAvatar: string; totalScore: number }> dailyTrend: Array<{ date: string; count: number; totalScore: number }> } export interface RewardRuleCreateRequest { name: string description?: string ruleType: string triggerCondition: string rewardType: string rewardScore: number scope: string scopeDeptIds?: string priority?: number } // ==================== 奖励规则 API ==================== /** * 创建奖励规则 */ export function createRewardRule(data: RewardRuleCreateRequest): Promise { return request.post>('/reward-rules', data) .then(res => res.data) } /** * 更新奖励规则 */ export function updateRewardRule(id: number, data: Partial): Promise { return request.put>(`/reward-rules/${id}`, data) .then(res => res.data) } /** * 启用规则 */ export function enableRewardRule(id: number): Promise { return request.post>(`/reward-rules/${id}/enable`) .then(res => res.data) } /** * 禁用规则 */ export function disableRewardRule(id: number): Promise { return request.post>(`/reward-rules/${id}/disable`) .then(res => res.data) } /** * 删除规则 */ export function deleteRewardRule(id: number): Promise { return request.delete>(`/reward-rules/${id}`) .then(res => res.data) } /** * 获取规则列表 */ export function getRewardRuleList(params: { page?: number pageSize?: number ruleType?: string }): Promise> { return request.get>>('/reward-rules', { params }) .then(res => res.data) } /** * 获取规则详情 */ export function getRewardRuleById(id: number): Promise { return request.get>(`/reward-rules/${id}`) .then(res => res.data) } /** * 获取启用的规则 */ export function getEnabledRewardRules(): Promise { return request.get>('/reward-rules/enabled') .then(res => res.data) } /** * 初始化默认规则 */ export function initDefaultRewardRules(): Promise { return request.post>('/reward-rules/init') .then(res => res.data) } // ==================== 奖励统计 API ==================== /** * 获取奖励统计数据 * @param period today/week/month */ export function getRewardStats(period: string = 'month'): Promise { return request.get>('/reward-rules/stats', { params: { period } }) .then(res => res.data) } // ==================== 奖励记录 API ==================== /** * 获取奖励发放记录 */ export function getRewardRecords(params: { page?: number pageSize?: number userId?: number ruleId?: number rewardType?: string startTime?: string endTime?: string }): Promise> { return request.get>>('/reward-rules/records', { params }) .then(res => res.data) } /** * 获取我的奖励记录 */ export function getMyRewardRecords(params: { page?: number pageSize?: number }): Promise> { return request.get>>('/reward-rules/records/my', { params }) .then(res => res.data) } // ==================== 徽章 API ==================== /** * 获取所有可用徽章 */ export function getAllBadges(): Promise { return request.get>('/reward-rules/badges') .then(res => res.data) } /** * 获取用户徽章 */ export function getUserBadges(userId: number): Promise { return request.get>(`/reward-rules/users/${userId}/badges`) .then(res => res.data) } /** * 获取我的徽章 */ export function getMyBadges(): Promise { return request.get>('/reward-rules/badges/my') .then(res => res.data) } // ==================== 称号 API ==================== /** * 获取所有可用称号 */ export function getAllTitles(): Promise { return request.get>('/reward-rules/titles') .then(res => res.data) } /** * 获取用户称号 */ export function getUserTitles(userId: number): Promise { return request.get>(`/reward-rules/users/${userId}/titles`) .then(res => res.data) } /** * 获取我的称号 */ export function getMyTitles(): Promise { return request.get>('/reward-rules/titles/my') .then(res => res.data) } /** * 设置激活称号 */ export function setActiveTitle(titleId?: number): Promise { return request.put>('/reward-rules/titles/active', null, { params: { titleId } }).then(res => res.data) } /** * 获取我的激活称号 */ export function getMyActiveTitle(): Promise { return request.get>('/reward-rules/titles/active') .then(res => res.data) } // 规则类型选项 export const RULE_TYPE_OPTIONS = [ { value: 'daily', label: '每日奖励' }, { value: 'weekly', label: '每周奖励' }, { value: 'monthly', label: '每月奖励' }, { value: 'task', label: '任务奖励' }, { value: 'rating', label: '好评奖励' }, ] // 触发条件类型 export const TRIGGER_TYPE_OPTIONS = [ { value: 'task_count', label: '完成任务数' }, { value: 'five_star_count', label: '五星好评数' }, { value: 'rating', label: '任务评分' }, ] // 比较运算符 export const OPERATOR_OPTIONS = [ { value: '>=', label: '大于等于' }, { value: '>', label: '大于' }, { value: '==', label: '等于' }, { value: '<=', label: '小于等于' }, { value: '<', label: '小于' }, ]