39 lines
1.3 KiB
TypeScript
39 lines
1.3 KiB
TypeScript
import type { FriendLinkApply } from '../api/types';
|
||
|
||
/** 解析友链 LOGO 为可加载的 URL(相对路径补全为当前站点 origin) */
|
||
export function resolveFriendLinkLogo(logo?: string, siteURL?: string): string {
|
||
const raw = logo?.trim() || '';
|
||
if (!raw) return '';
|
||
if (/^https?:\/\//i.test(raw)) return raw;
|
||
if (raw.startsWith('/')) {
|
||
const base = siteURL?.trim() || (typeof window !== 'undefined' ? window.location.origin : '');
|
||
return base ? `${base.replace(/\/$/, '')}${raw}` : raw;
|
||
}
|
||
return raw;
|
||
}
|
||
|
||
/** 回链检测是否仍在后台进行中 */
|
||
export function isReciprocalChecking(apply: FriendLinkApply): boolean {
|
||
if (apply.status !== 'pending') return false;
|
||
if (apply.reciprocal_checked_at) return false;
|
||
if (apply.reciprocal_verified) return false;
|
||
if (apply.reciprocal_check_note?.trim()) return false;
|
||
return true;
|
||
}
|
||
|
||
export function reciprocalStatusLabel(apply: FriendLinkApply): {
|
||
text: string;
|
||
variant: 'green' | 'orange' | 'secondary';
|
||
} {
|
||
if (isReciprocalChecking(apply)) {
|
||
return { text: '检测中…', variant: 'secondary' };
|
||
}
|
||
if (apply.reciprocal_verified) {
|
||
return { text: '回链已检测到', variant: 'green' };
|
||
}
|
||
if (apply.reciprocal_check_note?.trim()) {
|
||
return { text: apply.reciprocal_check_note, variant: 'orange' };
|
||
}
|
||
return { text: '未检测', variant: 'secondary' };
|
||
}
|