diff --git a/src/api/admin/reward.ts b/src/api/admin/reward.ts new file mode 100644 index 0000000..75effc7 --- /dev/null +++ b/src/api/admin/reward.ts @@ -0,0 +1,93 @@ +// Author: fruit.com.cn + +import request from '@/axios' +import type { PageResult } from './types' + +export interface RewardTaskItem { + id: string + code: string + sectionCode: string + type: string + verifyMode: string + targetValue: number + rewardCoin: number + cycleType: string + cycleLimit: number + actionType: string + actionUrl: string + iconUrl: string + titleId: string + titleEn: string + titleZh: string + subtitleId: string + subtitleEn: string + subtitleZh: string + ctaId: string + ctaEn: string + ctaZh: string + sectionTitleId: string + sectionTitleEn: string + sectionTitleZh: string + configJson: string + sort: number + status: number + statusText: string + startAt?: string + endAt?: string +} + +export interface RewardTaskPageParams { + pageIndex?: number + pageSize?: number + keyword?: string + type?: string + sectionCode?: string + status?: number +} + +export type RewardTaskSaveData = Omit + +export interface RewardRuleDay { + dayIndex: number + rewardCoin: number +} + +export interface RewardGrantItem { + id: string + userId: string + taskId: string + cycleKey: string + amount: number + status: string + idempotentKey: string + coinLedgerId: string + source: string + operatorId: string + failureReason: string + grantedAt?: string + createdAt?: string +} + +export const pageRewardTasksApi = (params: RewardTaskPageParams) => + request.get>({ url: '/admin/rewards/tasks/page', params }) + +export const createRewardTaskApi = (data: RewardTaskSaveData) => + request.post({ url: '/admin/rewards/tasks', data }) + +export const updateRewardTaskApi = (id: string, data: RewardTaskSaveData) => + request.put({ url: `/admin/rewards/tasks/${id}`, data }) + +export const updateRewardTaskStatusApi = (id: string, status: number) => + request.put({ url: `/admin/rewards/tasks/${id}/status`, params: { status } }) + +export const getRewardRulesApi = () => + request.get({ url: '/admin/rewards/check-in/rules' }) + +export const saveRewardRulesApi = (days: RewardRuleDay[]) => + request.put({ url: '/admin/rewards/check-in/rules', data: { days } }) + +export const pageRewardGrantsApi = (params: Record) => + request.get>({ url: '/admin/rewards/grants/page', params }) + +export const manualRewardGrantApi = (data: Record) => + request.post({ url: '/admin/rewards/grants/manual', data }) diff --git a/src/views/commerce/RewardTaskManagementView.vue b/src/views/commerce/RewardTaskManagementView.vue new file mode 100644 index 0000000..2be1256 --- /dev/null +++ b/src/views/commerce/RewardTaskManagementView.vue @@ -0,0 +1,616 @@ + + + + + + +