vip系统

This commit is contained in:
170-carry 2026-04-29 20:17:20 +08:00
parent b830642c14
commit a38e98e29e

View File

@ -152,6 +152,8 @@ const statusMeta = computed(() => {
function createResource() {
return {
cover: '',
coverUrl: '',
name: '',
resourceId: '',
url: '',
@ -177,7 +179,10 @@ function createLevel(level: number) {
function normalizeResource(value: Record<string, any> | null | undefined) {
const resourceId = String(value?.resourceId ?? '').trim();
const url = String(value?.url || value?.sourceUrl || value?.resourceUrl || '').trim();
const cover = String(value?.cover || value?.coverUrl || value?.resourceCover || '').trim();
return {
cover,
coverUrl: cover,
name: String(value?.name || ''),
resourceId: resourceId === '0' ? '' : resourceId,
resourceUrl: url,
@ -188,15 +193,20 @@ function normalizeResource(value: Record<string, any> | null | undefined) {
function normalizePropsSourceResource(value: Record<string, any> | null | undefined) {
const resourceId = String(value?.id ?? value?.resourceId ?? '').trim();
const cover = String(
value?.cover || value?.coverUrl || value?.resourceCover || value?.selectUrl || '',
).trim();
const url = String(
value?.sourceUrl ||
value?.resourceUrl ||
value?.url ||
value?.animationUrl ||
value?.cover ||
cover ||
'',
).trim();
return {
cover,
coverUrl: cover,
name: String(value?.name || ''),
resourceId,
resourceUrl: url,
@ -250,7 +260,20 @@ function resourceMeta(record: Record<string, any>, key: string) {
if (!resource.resourceId) {
return '';
}
return [resource.name, resource.url].filter(Boolean).join(' / ');
return [
resource.name,
resource.cover ? `封面: ${resource.cover}` : '',
resource.url ? `资源: ${resource.url}` : '',
]
.filter(Boolean)
.join(' / ');
}
function buildResourceSavePayload(value: Record<string, any> | null | undefined) {
const resource = normalizeResource(value);
return {
resourceId: resource.resourceId || '0',
};
}
async function loadResourceOptions(field: ResourceField) {
@ -333,14 +356,14 @@ function buildSavePayload() {
return {
sysOrigin: form.sysOrigin,
levels: (form.levels || []).map((item: Record<string, any>) => ({
avatarFrame: normalizeResource(item.avatarFrame),
badge: normalizeResource(item.badge),
chatBubble: normalizeResource(item.chatBubble),
avatarFrame: buildResourceSavePayload(item.avatarFrame),
badge: buildResourceSavePayload(item.badge),
chatBubble: buildResourceSavePayload(item.chatBubble),
displayName: String(item.displayName || '').trim(),
durationDays: 30,
enabled: Boolean(item.enabled),
entryEffect: normalizeResource(item.entryEffect),
floatPicture: normalizeResource(item.floatPicture),
entryEffect: buildResourceSavePayload(item.entryEffect),
floatPicture: buildResourceSavePayload(item.floatPicture),
level: Number(item.level || 0),
levelCode: `VIP${Number(item.level || 0)}`,
priceGold: Number(item.priceGold || 0),