diff --git a/apps/src/views/resident-activity/wheel-config.vue b/apps/src/views/resident-activity/wheel-config.vue index b1a7506..f0faa21 100644 --- a/apps/src/views/resident-activity/wheel-config.vue +++ b/apps/src/views/resident-activity/wheel-config.vue @@ -4,9 +4,14 @@ import { computed, nextTick, reactive, ref, watch } from 'vue'; import { Page } from '@vben/common-ui'; import { useAccessStore } from '@vben/stores'; +import type { Dayjs } from 'dayjs'; +import dayjs from 'dayjs'; + import { + Avatar, Button, Card, + DatePicker, Input, InputNumber, message, @@ -31,6 +36,8 @@ import { getAllowedSysOrigins } from '#/views/system/shared'; defineOptions({ name: 'ResidentWheelConfigPage' }); +const { RangePicker } = DatePicker; + const PROBABILITY_TOTAL = 1_000_000; const WHEEL_CATEGORIES = [ { @@ -175,12 +182,24 @@ const recordQuery = reactive>({ status: '', userId: '', }); +const recordRangeDate = ref<[Dayjs, Dayjs] | null>([ + dayjs().startOf('day'), + dayjs().endOf('day'), +]); const recordPage = reactive>({ current: 1, records: [], size: 20, total: 0, }); +const recordSummary = reactive>({ + endTime: '', + participantCount: 0, + startTime: '', + totalDrawTimes: 0, + totalPaidGold: 0, + totalRewardGold: 0, +}); const rewardColumns = [ { dataIndex: 'enabled', key: 'enabled', title: '启用', width: 80 }, @@ -195,7 +214,8 @@ const rewardColumns = [ const recordColumns = [ { dataIndex: 'drawNo', key: 'drawNo', title: '抽奖单号', width: 190 }, { dataIndex: 'category', key: 'category', title: '转盘', width: 120 }, - { dataIndex: 'userId', key: 'userId', title: '用户ID', width: 140 }, + { dataIndex: 'user', key: 'user', title: '用户信息', width: 280 }, + { dataIndex: 'userTotalDrawTimes', key: 'userTotalDrawTimes', title: '用户总次数', width: 130 }, { dataIndex: 'drawTimes', key: 'drawTimes', title: '次数', width: 90 }, { dataIndex: 'paidGold', key: 'paidGold', title: '消耗金币', width: 120 }, { dataIndex: 'reward', key: 'reward', title: '中奖奖励', width: 360 }, @@ -245,6 +265,10 @@ function probabilityPercent(value: any) { return ((Number(value || 0) * 100) / PROBABILITY_TOTAL).toFixed(4); } +function numberText(value: any) { + return Number(value || 0).toLocaleString(); +} + function normalizeReward(item: Record | undefined, index: number) { const value = item || {}; const rewardType = normalizeRewardTypeValue(value.rewardType); @@ -390,6 +414,25 @@ function normalizeRecordPage(result: null | Record | undefined) { recordPage.total = Number(value.total || 0); recordPage.current = Number(value.current || 1); recordPage.size = Number(value.size || 20); + Object.assign(recordSummary, { + endTime: String(value.endTime || ''), + participantCount: Number(value.participantCount || 0), + startTime: String(value.startTime || ''), + totalDrawTimes: Number(value.totalDrawTimes || 0), + totalPaidGold: Number(value.totalPaidGold || 0), + totalRewardGold: Number(value.totalRewardGold || 0), + }); +} + +function recordTimeParams() { + const range = recordRangeDate.value; + if (!range?.length) { + return { endTime: '', startTime: '' }; + } + return { + endTime: range[1]?.format('YYYY-MM-DD HH:mm:ss') || '', + startTime: range[0]?.format('YYYY-MM-DD HH:mm:ss') || '', + }; } async function loadRecords(reset = false) { @@ -403,6 +446,7 @@ async function loadRecords(reset = false) { try { const result = await pageResidentWheelDrawRecords({ ...recordQuery, + ...recordTimeParams(), sysOrigin: selectedSysOrigin.value, }); normalizeRecordPage(result); @@ -803,6 +847,15 @@ function statusColor(status: string) { } } +function userAvatarFallback(record: Record) { + const nickname = String(record.userNickname || '').trim(); + if (nickname) { + return nickname.slice(0, 1).toUpperCase(); + } + const shortId = String(record.userShortId || '').trim(); + return shortId ? shortId.slice(0, 1).toUpperCase() : 'U'; +} + function coverStyle(url: string) { return { backgroundImage: `url("${String(url || '').replaceAll('"', '%22')}")`, @@ -1103,12 +1156,36 @@ watch(activePageTab, (value) => { placeholder="状态" style="width: 130px" /> + +
+
+ 用户总抽奖消耗金币 + {{ numberText(recordSummary.totalPaidGold) }} +
+
+ 礼物发放金币总价值 + {{ numberText(recordSummary.totalRewardGold) }} +
+
+ 用户总抽奖次数 + {{ numberText(recordSummary.totalDrawTimes) }} +
+
+ 用户参与量 + {{ numberText(recordSummary.participantCount) }} +
+
+ { total: recordPage.total, }" row-key="id" - :scroll="{ x: 1790 }" + :scroll="{ x: 2060 }" @change="handleRecordTableChange" >