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