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