fix(admin): repair banner times and wheel value cards
This commit is contained in:
parent
66568253aa
commit
33db3e0ea2
@ -1,6 +1,9 @@
|
||||
<script lang="ts" setup>
|
||||
import { computed, reactive, ref, watch } from 'vue';
|
||||
|
||||
import type { Dayjs } from 'dayjs';
|
||||
import dayjs from 'dayjs';
|
||||
|
||||
import {
|
||||
OSS_FILE_BUCKETS,
|
||||
getAccessImgUrl,
|
||||
@ -113,6 +116,8 @@ const selectCountryCodes = ref<string[]>([]);
|
||||
const countriesLoading = ref(false);
|
||||
const regionsLoading = ref(false);
|
||||
const form = reactive<Record<string, any>>(createForm());
|
||||
const startTimePicker = ref<Dayjs | null>(null);
|
||||
const expiredTimePicker = ref<Dayjs | null>(null);
|
||||
|
||||
const regionSelectOptions = computed(() =>
|
||||
regionOptions.value.map((item) => ({
|
||||
@ -156,6 +161,27 @@ function normalizeMultiValue(value: any) {
|
||||
.filter(Boolean);
|
||||
}
|
||||
|
||||
function normalizePickerValue(value: any) {
|
||||
if (value === '' || value === null || value === undefined) {
|
||||
return null;
|
||||
}
|
||||
if (dayjs.isDayjs(value)) {
|
||||
return value.isValid() ? value : null;
|
||||
}
|
||||
const raw = String(value).trim();
|
||||
const numericValue = Number(raw);
|
||||
const parsed = raw !== '' && Number.isFinite(numericValue) ? dayjs(numericValue) : dayjs(value);
|
||||
return parsed.isValid() ? parsed : null;
|
||||
}
|
||||
|
||||
function pickerToTimestamp(value: Dayjs | null) {
|
||||
return value?.isValid() ? String(value.valueOf()) : '';
|
||||
}
|
||||
|
||||
function getDatePickerPopupContainer(triggerNode: HTMLElement) {
|
||||
return triggerNode.parentElement || document.body;
|
||||
}
|
||||
|
||||
watch(
|
||||
() => ({ open: props.open, row: props.row, sysOrigin: props.sysOrigin }),
|
||||
({ open, row, sysOrigin }) => {
|
||||
@ -174,6 +200,8 @@ watch(
|
||||
roomSearchValue.value = String(form.params);
|
||||
}
|
||||
}
|
||||
startTimePicker.value = normalizePickerValue(form.startTime);
|
||||
expiredTimePicker.value = normalizePickerValue(form.expiredTime);
|
||||
void Promise.all([
|
||||
loadCountries(),
|
||||
sysOrigin ? loadRegions(sysOrigin) : Promise.resolve(),
|
||||
@ -204,6 +232,14 @@ watch(
|
||||
},
|
||||
);
|
||||
|
||||
watch(startTimePicker, (value) => {
|
||||
form.startTime = pickerToTimestamp(value);
|
||||
});
|
||||
|
||||
watch(expiredTimePicker, (value) => {
|
||||
form.expiredTime = pickerToTimestamp(value);
|
||||
});
|
||||
|
||||
async function loadCountries() {
|
||||
countriesLoading.value = true;
|
||||
try {
|
||||
@ -287,10 +323,18 @@ async function submitForm() {
|
||||
message.warning('请选择系统');
|
||||
return;
|
||||
}
|
||||
if (!form.startTime) {
|
||||
message.warning('请选择开始时间');
|
||||
return;
|
||||
}
|
||||
if (!form.expiredTime) {
|
||||
message.warning('请选择过期时间');
|
||||
return;
|
||||
}
|
||||
if (Number(form.expiredTime) <= Number(form.startTime)) {
|
||||
message.warning('过期时间必须晚于开始时间');
|
||||
return;
|
||||
}
|
||||
if (form.content === 'ENTER_ROOM' && !form.params) {
|
||||
message.warning('请选择房间');
|
||||
return;
|
||||
@ -486,20 +530,22 @@ async function submitForm() {
|
||||
<div class="field">
|
||||
<div class="label">开始时间</div>
|
||||
<DatePicker
|
||||
v-model:value="form.startTime"
|
||||
v-model:value="startTimePicker"
|
||||
format="YYYY-MM-DD HH:mm:ss"
|
||||
:get-popup-container="getDatePickerPopupContainer"
|
||||
show-time
|
||||
style="width: 100%"
|
||||
value-format="x"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="field">
|
||||
<div class="label">过期时间</div>
|
||||
<DatePicker
|
||||
v-model:value="form.expiredTime"
|
||||
v-model:value="expiredTimePicker"
|
||||
format="YYYY-MM-DD HH:mm:ss"
|
||||
:get-popup-container="getDatePickerPopupContainer"
|
||||
show-time
|
||||
style="width: 100%"
|
||||
value-format="x"
|
||||
/>
|
||||
</div>
|
||||
|
||||
|
||||
@ -196,7 +196,9 @@ const recordSummary = reactive<Record<string, any>>({
|
||||
endTime: '',
|
||||
participantCount: 0,
|
||||
startTime: '',
|
||||
totalDecorationRewardGold: 0,
|
||||
totalDrawTimes: 0,
|
||||
totalGiftRewardGold: 0,
|
||||
totalPaidGold: 0,
|
||||
totalRewardGold: 0,
|
||||
});
|
||||
@ -418,7 +420,9 @@ function normalizeRecordPage(result: null | Record<string, any> | undefined) {
|
||||
endTime: String(value.endTime || ''),
|
||||
participantCount: Number(value.participantCount || 0),
|
||||
startTime: String(value.startTime || ''),
|
||||
totalDecorationRewardGold: Number(value.totalDecorationRewardGold || 0),
|
||||
totalDrawTimes: Number(value.totalDrawTimes || 0),
|
||||
totalGiftRewardGold: Number(value.totalGiftRewardGold || 0),
|
||||
totalPaidGold: Number(value.totalPaidGold || 0),
|
||||
totalRewardGold: Number(value.totalRewardGold || 0),
|
||||
});
|
||||
@ -1173,8 +1177,12 @@ watch(activePageTab, (value) => {
|
||||
<strong>{{ numberText(recordSummary.totalPaidGold) }}</strong>
|
||||
</div>
|
||||
<div class="record-summary-item">
|
||||
<span>礼物发放金币总价值</span>
|
||||
<strong>{{ numberText(recordSummary.totalRewardGold) }}</strong>
|
||||
<span>礼物价值</span>
|
||||
<strong>{{ numberText(recordSummary.totalGiftRewardGold) }}</strong>
|
||||
</div>
|
||||
<div class="record-summary-item">
|
||||
<span>装扮价值</span>
|
||||
<strong>{{ numberText(recordSummary.totalDecorationRewardGold) }}</strong>
|
||||
</div>
|
||||
<div class="record-summary-item">
|
||||
<span>用户总抽奖次数</span>
|
||||
@ -1318,7 +1326,7 @@ watch(activePageTab, (value) => {
|
||||
.record-summary {
|
||||
display: grid;
|
||||
gap: 10px;
|
||||
grid-template-columns: repeat(4, minmax(160px, 1fr));
|
||||
grid-template-columns: repeat(5, minmax(160px, 1fr));
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user