进入管理后台>设置>在自定义代码(包括 style 和 script)中增加以下代码
<script>
window.onload = function() {
const affLinks = {
1: {
price: '€45/年',
expiration: '🕐2025年7月16日' // Contabo
},
21: {
price: '¥169/月',
expiration: '🕐每月26日' // Hyper深港专线
},
25: {
price: '¥139/月',
expiration: '🕐2024年12月14日' // lala深港专线
},
15: {
price: '¥99/月',
expiration: '🕐每月27日' // 深圳移动
},
11: {
price: '$15/年',
expiration: '🕐2025年5月15日' // BagevmHK
},
18: {
price: '$4/月',
expiration: '🕐每月28日' // 爪云hk1
},
19: {
price: '$4/月',
expiration: '🕐每月30日' // 爪云hk2
},
3: {
price: '$3/月',
expiration: '🕐每月14日' // yxvmhk1
},
16: {
price: '$3/月',
expiration: '🕐每月27日' // yxvmhk2
},
6: {
price: '$115/年',
expiration: '🕐2025年2月3日' // 搬瓦工
},
24: {
price: '$43/月',
expiration: '🕐每月15日' // hinet
},
20: {
price: '$10.5/半年',
expiration: '🕐每月30日' // 爪云sg
},
12: {
price: '$3/月',
expiration: '🕐每月22日' // yxvmjp1
},
14: {
price: '$3/月',
expiration: '🕐每月25日' // yxvmjp2
},
9: {
price: '$13/年',
expiration: '🕐2025年8月8日' // crunchbits
},
2: {
price: '$40/年',
expiration: '🕐2025年7月11日' // dmit cm 1t
},
23: {
price: '$50/年',
expiration: '🕐2025年10月9日' // dmit cm 2t
},
22: {
price: '$50/年',
expiration: '🕐2025年10月5日' // dmit cn2
},
5: {
price: '$10/年',
expiration: '🕐2025年2月2日' // rn
}
};
// 获取当前日期与到期日期的剩余天数和小时数
const getRemainingTime = (expiration) => {
const today = new Date();
// 如果是"每月xx日"格式
if (expiration.includes('每月')) {
const dayOfMonth = parseInt(expiration.replace('🕐每月', '').replace('日', ''));
// 设置目标日期为当前月份的目标日期
const expirationDate = new Date(today.getFullYear(), today.getMonth(), dayOfMonth);
// 如果目标日期已经过去了,设置为下个月的同一天
if (expirationDate < today) {
expirationDate.setMonth(today.getMonth() + 1);
}
// 计算剩余时间
const timeDiff = expirationDate - today;
const daysRemaining = Math.floor(timeDiff / (1000 * 3600 * 24));
const hoursRemaining = Math.floor((timeDiff % (1000 * 3600 * 24)) / (1000 * 3600));
// 如果剩余天数小于7天,返回剩余天数和小时数
if (daysRemaining < 7) {
return {
remainingText: `剩余${daysRemaining}天${hoursRemaining}小时`,
expirationDate
};
} else {
return { remainingText: '', expirationDate };
}
}
// 如果是完整日期(例如 2025年7月16日),则使用原有的逻辑
const expirationDateStr = expiration.replace('🕐', '').trim();
const expirationDateParts = expirationDateStr.match(/(\d{4})年(\d{1,2})月(\d{1,2})日/);
if (expirationDateParts) {
// 格式化为可以被Date解析的格式 (YYYY-MM-DD)
const formattedExpirationDate = `${expirationDateParts[1]}-${expirationDateParts[2].padStart(2, '0')}-${expirationDateParts[3].padStart(2, '0')}`;
const expirationDate = new Date(formattedExpirationDate);
// 计算剩余时间
const timeDiff = expirationDate - today;
const daysRemaining = Math.floor(timeDiff / (1000 * 3600 * 24));
const hoursRemaining = Math.floor((timeDiff % (1000 * 3600 * 24)) / (1000 * 3600));
// 如果剩余天数小于7天,返回剩余天数和小时数
if (daysRemaining < 7) {
return {
remainingText: `剩余${daysRemaining}天${hoursRemaining}小时`,
expirationDate
};
} else {
return { remainingText: '', expirationDate };
}
} else {
return { remainingText: '', expirationDate: null };
}
};
const createPriceTag = (price) => {
if (!price) return null;
const $priceTag = document.createElement('span');
$priceTag.setAttribute('style', 'background-color: rgba(0, 0, 0, 0.7); color: white; padding: 3px 6px; border-radius: 3px; margin-left: 5px;');
$priceTag.textContent = price;
return $priceTag;
};
const createExpirationTag = (expiration) => {
if (!expiration) return null;
const $expirationTag = document.createElement('span');
$expirationTag.setAttribute('style', 'background-color: rgba(0, 0, 0, 0.7); color: white; padding: 3px 6px; border-radius: 3px; margin-left: 5px;');
$expirationTag.textContent = expiration;
return $expirationTag;
};
const createRemainingTimeTag = (remainingText) => {
if (!remainingText) return null;
const $remainingTimeTag = document.createElement('span');
$remainingTimeTag.setAttribute('style', 'background-color: rgba(255, 0, 0, 0.7); color: white; padding: 3px 6px; border-radius: 3px; margin-left: 5px;');
$remainingTimeTag.textContent = remainingText;
return $remainingTimeTag;
};
const uiCards = document.querySelectorAll('.ui.card');
uiCards.forEach((card) => {
let cardId = card.id;
if (cardId && affLinks[cardId]) {
let $aLinkBox = document.createElement('div');
$aLinkBox.setAttribute('style', 'position: absolute; bottom: 10px; right: 10px; display: flex; align-items: center;');
let { remainingText, expirationDate } = getRemainingTime(affLinks[cardId].expiration);
let $priceTag = createPriceTag(affLinks[cardId].price);
if ($priceTag) {
$aLinkBox.appendChild($priceTag);
}
let $expirationTag = createExpirationTag(affLinks[cardId].expiration);
if ($expirationTag) {
$aLinkBox.appendChild($expirationTag);
}
let $remainingTimeTag = createRemainingTimeTag(remainingText);
if ($remainingTimeTag) {
$aLinkBox.appendChild($remainingTimeTag);
}
card.appendChild($aLinkBox);
}
});
};
</script>
Comments NOTHING