哪吒探针添加日期提示

发布于 2024-11-12  138 次阅读


AI 摘要

当在管理后台设置中添加了代码后,可以对默认主题的条目的金额和日期进行显示。如果距离到期不足7天,系统会进行相应的提示。剩余时间会以"剩余X天X小时"的形式显示。

默认主题增加金额,日期显示,不足7天提示

进入管理后台>设置>在自定义代码(包括 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>

参考:

【哪吒探针美化】添加服务器到期备注以及跑马灯进度条 - 开发调优 - LINUX DO

哪吒面板 添加价格和购买链接按钮代码 Default主题

  • alipay_img
  • wechat_img
公众号:享生活爱羊毛
最后更新于 2024-11-12