<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8447221205809134"
 crossorigin="anonymous"></script>
    <title>老张的EPG - Since2019</title>
    
    <!-- Bootstrap 5 CSS -->
    <link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.0/css/bootstrap.min.css" rel="stylesheet">

    <!-- Font Awesome 6 -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">

    <!-- Favicon -->
    <link rel="icon" type="image/png" href="/static/image/logo/logo.png">
    <link rel="shortcut icon" type="image/png" href="/static/image/logo/logo.png">

    <!-- 自定义CSS -->
    <style>
        body {
            font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
            min-height: 100vh;
            display: flex;
            flex-direction: column;
        }
        
        .navbar-brand {
            font-weight: bold;
            font-size: 1.5rem;
        }

        /* 美化顶部导航条 - 深色现代风格 */
        .navbar-dark {
            background: linear-gradient(135deg, #2c3e50 0%, #34495e 100%) !important;
            box-shadow: 0 2px 10px rgba(0,0,0,0.1);
            border-bottom: 2px solid rgba(255,255,255,0.1);
        }

        .navbar-dark .navbar-brand {
            color: #ffffff !important;
            text-shadow: 0 1px 3px rgba(0,0,0,0.3);
            transition: all 0.3s ease;
        }

        .navbar-dark .navbar-brand:hover {
            color: #f0f0f0 !important;
            transform: translateY(-1px);
        }

        .navbar-dark .nav-link {
            color: rgba(255,255,255,0.9) !important;
            transition: all 0.3s ease;
            position: relative;
        }

        .navbar-dark .nav-link:hover {
            color: #ffffff !important;
            background-color: rgba(255,255,255,0.1);
            border-radius: 6px;
        }

        .navbar-dark .nav-link.active {
            color: #ffffff !important;
            background-color: rgba(255,255,255,0.2);
            border-radius: 6px;
            font-weight: 500;
        }

        /* 二级导航美化 */
        .navbar-light.bg-light {
            background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%) !important;
            border-bottom: 1px solid #dee2e6;
            box-shadow: 0 1px 3px rgba(0,0,0,0.05);
        }

        .navbar-light .nav-link {
            color: #495057 !important;
            transition: all 0.3s ease;
            position: relative;
        }

        .navbar-light .nav-link:hover {
            color: #007bff !important;
            background-color: rgba(0,123,255,0.1);
            border-radius: 6px;
        }

        .navbar-light .nav-link.active {
            color: #007bff !important;
            background-color: rgba(0,123,255,0.15);
            border-radius: 6px;
            font-weight: 500;
        }

        /* 下拉菜单美化 */
        .dropdown-menu {
            border: none;
            box-shadow: 0 4px 15px rgba(0,0,0,0.1);
            border-radius: 8px;
            margin-top: 8px;
            animation: fadeInUp 0.3s ease;
        }

        .dropdown-item {
            transition: all 0.2s ease;
            border-radius: 4px;
            margin: 2px 4px;
        }

        .dropdown-item:hover {
            background-color: #f8f9fa;
            transform: translateX(3px);
        }

        .dropdown-header {
            font-weight: 600;
            font-size: 0.85rem;
            letter-spacing: 0.5px;
            padding: 8px 12px;
            margin-top: 8px;
        }

        /* 动画效果 */
        @keyframes fadeInUp {
            from {
                opacity: 0;
                transform: translateY(-10px);
            }
            to {
                opacity: 1;
                transform: translateY(0);
            }
        }

        /* 响应式优化 */
        @media (max-width: 768px) {
            .navbar-brand {
                font-size: 1.2rem;
            }

            .dropdown-menu {
                min-width: 250px !important;
            }
        }
        
        .main-content {
            flex: 1;
            padding: 2rem 0;
        }
        
        .footer {
            background-color: #f8f9fa;
            padding: 2rem 0;
            margin-top: auto;
            border-top: 1px solid #dee2e6;
        }
        
        .channel-logo {
            max-height: 40px;
            width: auto;
            cursor: pointer;
        }
        
        .channel-logo-large {
            max-width: 200px;
            height: auto;
        }
        
        .table-hover tbody tr:hover {
            background-color: #f8f9fa;
        }
        
        .qr-code-box {
            text-align: center;
            padding: 1rem;
            border: 1px solid #dee2e6;
            border-radius: 0.25rem;
            background-color: #fff;
        }
        
        .qr-code-box img {
            max-width: 150px;
            height: auto;
        }
        
        .qr-code-box h6 {
            margin-top: 0.5rem;
            margin-bottom: 0;
        }
        
        .stats-box {
            background-color: #f8f9fa;
            padding: 1rem;
            border-radius: 0.25rem;
            margin-bottom: 1rem;
        }
        
        .date-selector {
            margin-bottom: 1.5rem;
        }
        
        .date-selector .btn {
            margin: 0.25rem;
        }
        
        .epg-table {
            font-size: 0.95rem;
        }
        
        .epg-time {
            white-space: nowrap;
            font-weight: 600;
        }
        
        @media (max-width: 768px) {
            .navbar-brand {
                font-size: 1.2rem;
            }
            
            .channel-logo {
                max-height: 30px;
            }
            
            .table {
                font-size: 0.875rem;
            }
  
            .qr-code-box {
                margin-bottom: 1rem;
            }
        }

        /* 省份下拉菜单美化 */
        .province-dropdown-content {
            min-width: 550px;
            max-height: 400px;
            overflow-y: auto;
        }

        .province-categories {
            display: flex;
            flex-direction: column;
            gap: 1.5rem;
        }

        .province-category {
            border-bottom: 1px solid #dee2e6;
            padding-bottom: 1rem;
        }

        .province-category:last-child {
            border-bottom: none;
        }

        .province-category-header {
            font-size: 0.9rem;
            font-weight: 600;
            letter-spacing: 0.5px;
        }

        .province-buttons {
            display: flex;
            flex-wrap: wrap;
            gap: 0.5rem;
        }

        .province-btn-nav {
            display: inline-block;
            padding: 0.375rem 0.75rem;
            border-radius: 0.375rem;
            border: 1px solid #dee2e6;
            background-color: #f8f9fa;
            color: #495057;
            text-decoration: none;
            font-size: 0.875rem;
            font-weight: 500;
            transition: all 0.3s ease;
            min-width: 60px;
            text-align: center;
        }

        .province-btn-nav:hover {
            background-color: #e9ecef;
            color: #495057;
            text-decoration: none;
            transform: translateY(-1px);
            box-shadow: 0 2px 4px rgba(0,0,0,0.1);
            border-color: #adb5bd;
        }

        .province-btn-nav:active {
            transform: translateY(0);
            box-shadow: 0 1px 2px rgba(0,0,0,0.1);
        }

        /* 美化下拉菜单 */
        .dropdown-menu {
            border: 1px solid rgba(0, 0, 0, 0.15);
            border-radius: 0.5rem;
            box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.175);
            background-clip: padding-box;
        }

        .dropdown-item {
            border-radius: 0.25rem;
            transition: all 0.2s ease;
        }

        .dropdown-item:hover {
            background-color: #f8f9fa;
            color: #16181b;
        }
    </style>
    
    

<link href="/static/css/ads.css" rel="stylesheet">
<style>
/* 主页模块化样式 */
.home-module {
    margin-bottom: 2rem;
    padding: 1.5rem;
    border-radius: 8px;
    box-shadow: 0 2px 10px rgba(0,0,0,0.1);
    background: #fff;
    transition: all 0.3s ease;
}

.home-module:hover {
    box-shadow: 0 4px 20px rgba(0,0,0,0.15);
    transform: translateY(-2px);
}

.module-header h5 {
    color: #2c3e50;
    border-bottom: 2px solid #3498db;
    padding-bottom: 0.5rem;
    margin-bottom: 1rem;
}

/* 下载链接样式 */
.download-item {
    background: #f8f9fa;
    transition: all 0.3s ease;
}

.download-item:hover {
    background: #e9ecef;
    transform: translateX(5px);
}

/* 快速链接样式 */
.quick-links .btn {
    margin-bottom: 0.5rem;
    transition: all 0.3s ease;
}

.quick-links .btn:hover {
    transform: translateY(-2px);
    box-shadow: 0 4px 12px rgba(0,0,0,0.15);
}

/* 二维���样式 */
.qr-code-box {
    background: #fff;
    transition: all 0.3s ease;
}

.qr-code-box:hover {
    transform: scale(1.05);
    box-shadow: 0 8px 25px rgba(0,0,0,0.15);
}

/* 图片画廊样式 */
.image-item .card {
    transition: all 0.3s ease;
    overflow: hidden;
}

.image-item:hover .card {
    transform: translateY(-5px);
    box-shadow: 0 8px 25px rgba(0,0,0,0.15);
}

.image-item img {
    transition: all 0.3s ease;
}

.image-item:hover img {
    transform: scale(1.05);
}

/* 数据统计样式 */
.data-stats h4 {
    font-weight: bold;
    margin-bottom: 0.5rem;
}

/* 富文本内容样式 */
.rich-text-content img {
    max-width: 100%;
    height: auto;
    border-radius: 8px;
    margin: 1rem 0;
}

.rich-text-content table {
    width: 100%;
    border-collapse: collapse;
    margin: 1rem 0;
}

.rich-text-content th,
.rich-text-content td {
    border: 1px solid #dee2e6;
    padding: 0.75rem;
    text-align: left;
}

.rich-text-content th {
    background-color: #f8f9fa;
    font-weight: 600;
}

/* 响应式设计 */
@media (max-width: 768px) {
    .home-module {
        padding: 1rem;
        margin-bottom: 1rem;
    }

    .module-header h5 {
        font-size: 1.1rem;
    }

    .quick-links .btn {
        font-size: 0.9rem;
    }

    .qr-code-box img {
        max-width: 120px;
    }
}

/* 加载动画 */
.module-loading {
    opacity: 0.6;
    pointer-events: none;
    position: relative;
}

.module-loading::after {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background: rgba(255,255,255,0.8);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 1.2rem;
    color: #3498db;
}

.module-loading::after {
    content: '加载中...';
}

/* 模块编辑模式样式 */
.edit-mode .home-module {
    border: 2px dashed #3498db;
    position: relative;
}

.edit-mode .home-module::before {
    content: '拖拽排序';
    position: absolute;
    top: 5px;
    right: 5px;
    background: #3498db;
    color: white;
    padding: 2px 8px;
    border-radius: 3px;
    font-size: 0.8rem;
    z-index: 10;
}
</style>

</head>

<body>
    <!-- 全局头部广告 -->
    

    <!-- 导航栏 -->
    <nav class="navbar navbar-expand-lg navbar-dark" style="background: linear-gradient(135deg, #2c3e50 0%, #34495e 100%); box-shadow: 0 2px 10px rgba(0,0,0,0.1);">
    <div class="container">
        <a class="navbar-brand" href="/" style="display: flex; align-items: center;">
            <img src="/static/image/logo/logo.png" alt="老张的EPG" style="height: 40px; margin-right: 12px;">
            <span style="font-weight: 600; letter-spacing: 0.5px;">老张的EPG</span>
        </a>

        <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
            <span class="navbar-toggler-icon"></span>
        </button>

        <div class="collapse navbar-collapse" id="navbarNav">
            <ul class="navbar-nav me-auto">
                
                <li class="nav-item">
                    <a class="nav-link active" href="/">
                        <i class="fas fa-list me-1"></i>节目单
                    </a>
                </li>
                
                
                <li class="nav-item">
                    <a class="nav-link "
                        href="/multicast/">
                        <i class="fas fa-broadcast-tower me-1"></i>组播地址查询
                    </a>
                </li>
                
                
                <li class="nav-item">
                    <a class="nav-link "
                        href="/tools/">
                        <i class="fas fa-tools me-1"></i>小工具
                    </a>
                </li>
                
                
                <li class="nav-item">
                    <a class="nav-link "
                        href="/tutorials/">
                        <i class="fas fa-book-open me-1"></i>教程
                    </a>
                </li>
                
            </ul>

            <!-- 赞助用户登录按钮 -->
            <ul class="navbar-nav">
                <li class="nav-item">
                    <a class="nav-link btn btn-warning text-dark px-3 py-1 ms-2" href="/mem/"
                        style="border-radius: 20px; transition: all 0.3s ease;"
                        onmouseover="this.style.transform='scale(1.05)'; this.style.boxShadow='0 4px 15px rgba(255,193,7,0.4)';"
                        onmouseout="this.style.transform='scale(1)'; this.style.boxShadow='none';">
                        <i class="fas fa-crown me-1"></i>
                        <strong>赞助用户登录</strong>
                    </a>
                </li>
            </ul>
        </div>
    </div>
</nav>

<!-- 二级导航（仅在EPG页面且启用节目单时显示） -->

<nav class="navbar navbar-expand navbar-light bg-light border-bottom">
    <style>
        /* 移动端横向滚动样�� */
        @media (max-width: 991.98px) {
            #subNavbarNav {
                overflow-x: auto;
                flex-wrap: nowrap;
                -webkit-overflow-scrolling: touch;
            }
            #subNavbarNav .navbar-nav {
                flex-direction: row !important;
                flex-wrap: nowrap;
            }
            #subNavbarNav .nav-item {
                white-space: nowrap;
                flex-shrink: 0;
            }
            #subNavbarNav .dropdown-menu {
                position: static;
                transform: none !important;
                width: 100%;
                max-width: none;
            }
        }
    </style>
    <div class="container">
        <div class="collapse navbar-collapse show" id="subNavbarNav">
            <ul class="navbar-nav">
                <li class="nav-item">
                    <a class="nav-link" href="/category/cctv/">
                        <i class="fas fa-star me-1"></i>央视
                    </a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="/category/satellite/">
                        <i class="fas fa-satellite me-1"></i>卫视
                    </a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="/category/digital/">
                        <i class="fas fa-film me-1"></i>数字付费
                    </a>
                </li>
                <!-- 地方频道导航 -->
                <li class="nav-item dropdown">
                    <a class="nav-link dropdown-toggle " href="#"
                        id="navbarDropdown" role="button" data-bs-toggle="dropdown">
                        <i class="fas fa-map-marker-alt me-1"></i>地方
                    </a>
                    <ul class="dropdown-menu" aria-labelledby="navbarDropdown" style="min-width: 600px; padding: 0;">
                        <li class="px-3 py-2">
                            <div class="province-dropdown-content">
                                <!-- 全部频道 -->
                                <div class="mb-3">
                                    <a href="/category/local/"
                                        class="btn btn-outline-primary btn-sm w-100">
                                        <i class="fas fa-th me-1"></i>全部地方频道
                                    </a>
                                </div>

                                <!-- 省份分类（横向显示） -->
                                <div class="province-categories">
                                    <!-- 直辖市 -->
                                    <div class="province-category">
                                        <div class="province-category-header text-primary mb-2">
                                            <i class="fas fa-city me-1"></i>直辖市
                                        </div>
                                        <div class="province-buttons">
                                            <a href="/category/local/%E5%8C%97%E4%BA%AC/"
                                                class="province-btn-nav">北京</a>
                                            <a href="/category/local/%E4%B8%8A%E6%B5%B7/"
                                                class="province-btn-nav">上海</a>
                                            <a href="/category/local/%E5%A4%A9%E6%B4%A5/"
                                                class="province-btn-nav">天津</a>
                                            <a href="/category/local/%E9%87%8D%E5%BA%86/"
                                                class="province-btn-nav">重庆</a>
                                        </div>
                                    </div>

                                    <!-- 主要省份 -->
                                    <div class="province-category">
                                        <div class="province-category-header text-success mb-2">
                                            <i class="fas fa-map me-1"></i>主要省份
                                        </div>
                                        <div class="province-buttons">
                                            <a href="/category/local/%E5%B9%BF%E4%B8%9C/"
                                                class="province-btn-nav">广东</a>
                                            <a href="/category/local/%E6%B1%9F%E8%8B%8F/"
                                                class="province-btn-nav">江苏</a>
                                            <a href="/category/local/%E6%B5%99%E6%B1%9F/"
                                                class="province-btn-nav">浙江</a>
                                            <a href="/category/local/%E5%B1%B1%E4%B8%9C/"
                                                class="province-btn-nav">山东</a>
                                            <a href="/category/local/%E6%B2%B3%E5%8D%97/"
                                                class="province-btn-nav">河南</a>
                                            <a href="/category/local/%E5%9B%9B%E5%B7%9D/"
                                                class="province-btn-nav">四川</a>
                                            <a href="/category/local/%E6%B9%96%E5%8C%97/"
                                                class="province-btn-nav">湖北</a>
                                            <a href="/category/local/%E6%B9%96%E5%8D%97/"
                                                class="province-btn-nav">湖南</a>
                                            <a href="/category/local/%E6%B2%B3%E5%8C%97/"
                                                class="province-btn-nav">河北</a>
                                            <a href="/category/local/%E7%A6%8F%E5%BB%BA/"
                                                class="province-btn-nav">福建</a>
                                            <a href="/category/local/%E5%AE%89%E5%BE%BD/"
                                                class="province-btn-nav">安徽</a>
                                            <a href="/category/local/%E6%B1%9F%E8%A5%BF/"
                                                class="province-btn-nav">江西</a>
                                        </div>
                                    </div>

                                    <!-- 其他省份 -->
                                    <div class="province-category">
                                        <div class="province-category-header text-info mb-2">
                                            <i class="fas fa-ellipsis-h me-1"></i>其他省份
                                        </div>
                                        <div class="province-buttons">
                                            <a href="/category/local/%E5%B1%B1%E8%A5%BF/"
                                                class="province-btn-nav">山西</a>
                                            <a href="/category/local/%E8%BE%BD%E5%AE%81/"
                                                class="province-btn-nav">辽宁</a>
                                            <a href="/category/local/%E5%90%89%E6%9E%97/"
                                                class="province-btn-nav">吉林</a>
                                            <a href="/category/local/%E9%BB%91%E9%BE%99%E6%B1%9F/"
                                                class="province-btn-nav">黑龙江</a>
                                            <a href="/category/local/%E9%99%95%E8%A5%BF/"
                                                class="province-btn-nav">陕西</a>
                                            <a href="/category/local/%E7%94%98%E8%82%83/"
                                                class="province-btn-nav">甘肃</a>
                                            <a href="/category/local/%E9%9D%92%E6%B5%B7/"
                                                class="province-btn-nav">青海</a>
                                            <a href="/category/local/%E4%BA%91%E5%8D%97/"
                                                class="province-btn-nav">云南</a>
                                            <a href="/category/local/%E8%B4%B5%E5%B7%9E/"
                                                class="province-btn-nav">贵州</a>
                                            <a href="/category/local/%E6%96%B0%E7%96%86/"
                                                class="province-btn-nav">新疆</a>
                                            <a href="/category/local/%E8%A5%BF%E8%97%8F/"
                                                class="province-btn-nav">西藏</a>
                                            <a href="/category/local/%E5%B9%BF%E8%A5%BF/"
                                                class="province-btn-nav">广西</a>
                                            <a href="/category/local/%E5%86%85%E8%92%99/"
                                                class="province-btn-nav">内蒙</a>
                                            <a href="/category/local/%E5%AE%81%E5%A4%8F/"
                                                class="province-btn-nav">宁夏</a>
                                            <a href="/category/local/%E6%B5%B7%E5%8D%97/"
                                                class="province-btn-nav">海南</a>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </li>
                    </ul>
                </li>
                
            </ul>
        </div>
    </div>
</nav>

    
    <!-- 主要内容 -->
    <main class="main-content">
        <div class="container">
            <!-- 消息提示 -->
            
            
            

<!-- 主页顶部广告 -->


<div class="modular-homepage">
    
        <!-- 有模块数据时的布局 -->
        <div class="row">
            <div class="col-lg-9">
                
                    <div class="row g-4">
                        
                            <div class="col-lg-12 mb-4">
                                
                                    <!-- 内容模块模板 -->
<div class="universal-module content-module "
     style="background-color: #f8f9fa;
            ">

    
    <div class="module-header">
        <h5 class="module-title">系统公告</h5>
    </div>
    

    <div class="module-body">
        
            <div class="alert alert-info"><h4>📢 系统公告</h4><h5>请访问<a href="http://epg.51zmt.top:8000">http://epg.51zmt.top:8000</a>来获取本站完整功能</h5><p>本站提供最新的电视节目单信息。</p><p>2025-01-01本站启用新测试站点，提供更精细的节目表服务，部分节目表提供节目详情。</p><p>因新站点刚启用，难免有不足，请见谅。</p><h6>本网站信息仅供个人使用，请勿商用</h6><h5>每日早晨7:10更新，无须反复下载！</h5><p>新站测试期间，所有用户均可访问e1.xml.gz及e2.xml.gz</p></div>
        
    </div>
</div>
                                
                            </div>
                        
                    </div>
                
                    <div class="row g-4">
                        
                            <div class="col-lg-12 mb-4">
                                
                                    <!-- 链接模块模板 -->
<div class="universal-module links-module "
     style="
            ">

    
    <div class="module-header">
        <h5 class="module-title">EPG节目表下载</h5>
    </div>
    

    <div class="module-body">
        

        
            <div class="links-grid">
                
                    <div class="link-item">
                        <div class="link-content">
                            
                            <div class="link-header">
                                <i class="fas fa-download link-icon"></i>
                                <h6 class="link-title-text">国内节目表（免费）</h6>
                            </div>
                            

                            
                            <div class="link-url">
                                <small class="text-muted">http://epg.51zmt.top:8000/e.xml.gz</small>
                            </div>
                            

                            
                            <div class="link-description">
                                <small class="text-muted">包含两天国内央视、卫视、数字付费频道完整节目单,原来地方及数字电视不再单独提供</small>
                            </div>
                            
                        </div>

                        
                        <div class="link-action">
                            <a href="http://epg.51zmt.top:8000/e.xml.gz"
                               target="_blank"
                               class="btn-download btn-outline-primary">
                                <i class="fas fa-download"></i>
                                <span>下载</span>
                            </a>
                        </div>
                        
                    </div>
                
                    <div class="link-item">
                        <div class="link-content">
                            
                            <div class="link-header">
                                <i class="fas fa-download link-icon"></i>
                                <h6 class="link-title-text">国内节目表</h6>
                            </div>
                            

                            
                            <div class="link-url">
                                <small class="text-muted">http://epg.51zmt.top:8000/e1.xml.gz</small>
                            </div>
                            

                            
                            <div class="link-description">
                                <small class="text-muted">包含两天国内央视、卫视、数字付费频道以及部分省级频道完整节目单及节目详情</small>
                            </div>
                            
                        </div>

                        
                        <div class="link-action">
                            <a href="http://epg.51zmt.top:8000/e1.xml.gz"
                               target="_blank"
                               class="btn-download btn-outline-primary">
                                <i class="fas fa-download"></i>
                                <span>下载</span>
                            </a>
                        </div>
                        
                    </div>
                
                    <div class="link-item">
                        <div class="link-content">
                            
                            <div class="link-header">
                                <i class="fas fa-download link-icon"></i>
                                <h6 class="link-title-text">海外节目表</h6>
                            </div>
                            

                            
                            <div class="link-url">
                                <small class="text-muted">http://epg.51zmt.top:8000/e2.xml.gz</small>
                            </div>
                            

                            
                            <div class="link-description">
                                <small class="text-muted">部分国外频道节目表</small>
                            </div>
                            
                        </div>

                        
                        <div class="link-action">
                            <a href="http://epg.51zmt.top:8000/e2.xml.gz"
                               target="_blank"
                               class="btn-download btn-outline-primary">
                                <i class="fas fa-download"></i>
                                <span>下载</span>
                            </a>
                        </div>
                        
                    </div>
                
                    <div class="link-item">
                        <div class="link-content">
                            
                            <div class="link-header">
                                <i class="fas fa-download link-icon"></i>
                                <h6 class="link-title-text">DIYP接口地址(免费)</h6>
                            </div>
                            

                            
                            <div class="link-url">
                                <small class="text-muted">http://epg.51zmt.top:8000/api/diyp/</small>
                            </div>
                            

                            
                            <div class="link-description">
                                <small class="text-muted">DIYP接口地址，用于使用DIYP接口的APP使用</small>
                            </div>
                            
                        </div>

                        
                        <div class="link-action">
                            <a href="http://epg.51zmt.top:8000/api/diyp/"
                               target="_blank"
                               class="btn-download btn-outline-primary">
                                <i class="fas fa-download"></i>
                                <span>下载</span>
                            </a>
                        </div>
                        
                    </div>
                
            </div>
        
    </div>
</div>

<style>
/* 链接网格布局 */
.links-grid {
    display: flex;
    flex-direction: column;
    gap: 12px;
}

/* 链接项目布局 - 多行显示 */
.links-grid .link-item {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    padding: 16px;
    border: 1px solid #dee2e6;
    border-radius: 10px;
    background-color: #fff;
    transition: all 0.2s ease;
    gap: 15px;
    min-height: 100px;
}

.links-grid .link-item:hover {
    border-color: #007bff;
    box-shadow: 0 2px 8px rgba(0,123,255,0.1);
}

/* 链接内容区域 */
.link-content {
    flex: 1;
    min-width: 0;
}

/* 链接头部 - 图标和标题 */
.link-header {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 6px;
}

.link-icon {
    font-size: 20px;
    width: 24px;
    text-align: center;
    color: #007bff;
    flex-shrink: 0;
}

.link-title-text {
    font-size: 16px;
    font-weight: 600;
    margin: 0;
    color: #333;
    word-break: break-word;
}

/* 链接地址 */
.link-url {
    margin-bottom: 4px;
}

.link-url small {
    font-size: 13px;
    font-family: 'Courier New', monospace;
    word-break: break-all;
    line-height: 1.4;
    display: block;
    padding: 2px 0;
}

/* 链接描述 */
.link-description {
    margin-bottom: 0;
}

.link-description small {
    font-size: 14px;
    line-height: 1.4;
    color: #6c757d !important;
    display: block;
    padding: 2px 0;
}

/* 下载按钮区域 */
.link-action {
    flex-shrink: 0;
    display: flex;
    align-items: flex-start;
    padding-top: 4px;
}

/* 小型下载按钮 */
.btn-download {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 6px 12px;
    font-size: 14px;
    line-height: 1.4;
    min-width: auto;
    white-space: nowrap;
    border-radius: 6px;
    text-decoration: none;
    transition: all 0.2s ease;
}

.btn-download:hover {
    transform: translateY(-1px);
    box-shadow: 0 2px 6px rgba(0,0,0,0.15);
}

.btn-download i {
    font-size: 13px;
}

/* 响应式设计 */
@media (max-width: 576px) {
    .links-grid .link-item {
        flex-direction: column;
        gap: 10px;
        padding: 12px;
    }

    .link-action {
        align-self: flex-end;
        padding-top: 0;
    }

    .link-header {
        margin-bottom: 4px;
    }

    .link-title-text {
        font-size: 15px;
    }

    .link-url small {
        font-size: 12px;
    }

    .link-description small {
        font-size: 13px;
    }
}

/* 在小模块中进一步优化 */
@media (max-width: 768px) {
    .link-title-text {
        font-size: 15px;
    }

    .link-url small {
        font-size: 12px;
    }

    .link-description small {
        font-size: 13px;
    }

    .btn-download span {
        display: none; /* 在小屏幕上只显示图标 */
    }

    .btn-download {
        padding: 5px 8px;
        min-width: 32px;
        justify-content: center;
        font-size: 13px;
    }

    .btn-download i {
        font-size: 12px;
    }
}

/* 深色主题支持 */
@media (prefers-color-scheme: dark) {
    .links-grid .link-item {
        background-color: #2d3748;
        border-color: #4a5568;
        color: #e2e8f0;
    }

    .links-grid .link-item:hover {
        border-color: #4299e1;
        box-shadow: 0 2px 8px rgba(66,153,225,0.2);
    }

    .link-title-text {
        color: #e2e8f0;
    }

    .link-icon {
        color: #4299e1;
    }
}
</style>
                                
                            </div>
                        
                    </div>
                

                <!-- 固定功能区域 -->
                
                <!-- M3U上传匹配 -->
                <div class="card mb-4">
                    <div class="card-header bg-info text-white">
                        <h5 class="mb-0">
                            <i class="fas fa-upload me-2"></i>M3U文件匹配
                        </h5>
                    </div>
                    <div class="card-body">
                        <!-- 隐私保护提示 -->
                        <div class="alert alert-warning mb-3">
                            <i class="fas fa-exclamation-triangle me-2"></i>
                            <strong>数据处理说明：</strong>文件会<strong>上传至服务器</strong>进行处理，处理完成后会<strong>定期清理</strong>临时文件。
                        </div>

                        <p class="mb-3">选择m3u或txt文件，可为您匹配生成带有台标及EPG的m3u文件</p>

                        <form id="m3uUploadForm" method="post" action="/upload/" enctype="multipart/form-data">
                            <input type="hidden" name="csrfmiddlewaretoken" value="qKY3VSuuc1ZAETDtgh6tz7RlHsKzwU6TyolQItVvikXZ0CtjMXDkQyyjPVIKmzbn">
                            <div class="mb-3">
                                <input type="file" name="m3u_file" id="m3uFileInput" class="form-control" accept=".m3u,.txt">
                                <small class="form-text text-muted">
                                    支持 M3U 和 TXT 格式文件，最大 500KB
                                </small>
                            </div>

                            <!-- 匹配选项 -->
                            <div class="card bg-light mb-3" id="m3uOptions" style="display: none;">
                                <div class="card-body">
                                    <h6 class="card-title mb-3">
                                        <i class="fas fa-cog me-2"></i>匹配选项
                                    </h6>

                                    <div class="row g-3">
                                        <div class="col-md-6">
                                            <div class="form-check">
                                                <input class="form-check-input" type="checkbox"
                                                       name="use_source_name" id="use_source_name" checked>
                                                <label class="form-check-label" for="use_source_name">
                                                    使用源文件频道名称
                                                </label>
                                                <small class="form-text text-muted d-block">
                                                    勾选后使用源文件中的频道名称，否则使用数据库标准名称
                                                </small>
                                            </div>
                                        </div>

                                        <div class="col-md-6">
                                            <div class="form-check">
                                                <input class="form-check-input" type="checkbox"
                                                       name="use_source_category" id="use_source_category" checked>
                                                <label class="form-check-label" for="use_source_category">
                                                    使用源文件分类名
                                                </label>
                                                <small class="form-text text-muted d-block">
                                                    勾选后使用源文件分类，否则使用简化分类（央视/卫视/数字付费/海外/地方）
                                                </small>
                                            </div>
                                        </div>

                                        <div class="col-md-6">
                                            <div class="form-check">
                                                <input class="form-check-input" type="checkbox"
                                                       name="use_source_logo" id="use_source_logo">
                                                <label class="form-check-label" for="use_source_logo">
                                                    使用源文件台标
                                                </label>
                                                <small class="form-text text-muted d-block">
                                                    勾选后使用源文件台标，否则使用数据库台标
                                                </small>
                                            </div>
                                        </div>

                                        <div class="col-md-6">
                                            <label class="form-label">未匹配频道tvg-name处理：</label>
                                            <select class="form-select form-select-sm" name="unmatched_tvg_name">
                                                <option value="noepg" selected>noepg（推荐）</option>
                                                <option value="channel_name">使用频道名称</option>
                                                <option value="blank">空白</option>
                                            </select>
                                            <small class="form-text text-muted">
                                                未匹配到数据库时tvg-name的值
                                            </small>
                                        </div>
                                    </div>
                                </div>
                            </div>

                            <div class="d-grid">
                                <button type="submit" class="btn btn-primary" id="uploadBtn">
                                    <i class="fas fa-check me-1"></i>开始匹配
                                </button>
                            </div>
                        </form>

                        <!-- 显示结果区域 -->
                        <div id="uploadResult" style="display: none; margin-top: 20px;"></div>
                    </div>
                </div>
                

                

                <!-- 主页底部广告 -->
                
            </div>

            <!-- 侧边栏 -->
            <div class="col-lg-3">
                
<!-- 侧边栏广告 -->


<!-- 侧边栏模块容器 -->

    
        <div class="sidebar-module mb-4">
            <!-- 统一使用模块模板，支持content/links/media三种类型 -->
            <!-- 统一侧边栏模块模板 - 支持content/links/media三种类型 -->
<div class="card sidebar-module">
    
    <div class="card-header">
        <h6 class="mb-0">赞助支持</h6>
    </div>
    

    <div class="card-body p-2"
         
         ">

        
        <div class="sidebar-module-content mb-2">
            <h3>💕 赞助支持</h3><p>如果觉得本站有用，欢迎赞助支持我们的服务器运行费用。</p>
        </div>
        

        
            
                <!-- 媒体模块 -->
                <div class="sidebar-media-grid">
                    
                    <div class="sidebar-media-item text-center">
                        
                            
                            <img src="/static/image/qr-wechat.jpg" alt="微信赞助" class="sidebar-media-image">
                            
                        

                        
                        <div class="sidebar-media-title small mt-1">微信赞助</div>
                        

                        
                        <div class="sidebar-media-description text-muted small">微信扫码赞助</div>
                        
                    </div>
                    
                    <div class="sidebar-media-item text-center">
                        
                            
                            <img src="/static/image/qr-alipay.jpg" alt="支付宝赞助" class="sidebar-media-image">
                            
                        

                        
                        <div class="sidebar-media-title small mt-1">支付宝赞助</div>
                        

                        
                        <div class="sidebar-media-description text-muted small">支付宝扫码赞助</div>
                        
                    </div>
                    
                </div>

            
        

        
    </div>
</div>

<style>
.sidebar-links-list {
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.sidebar-link-item:hover {
    transform: translateX(3px);
}

.sidebar-media-grid {
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.sidebar-media-item {
    padding: 8px;
    border-radius: 6px;
    background-color: #f8f9fa;
    transition: all 0.3s ease;
}

.sidebar-media-item:hover {
    background-color: #e9ecef;
}

.sidebar-media-image {
    max-width: 100%;
    height: auto;
    border-radius: 4px;
}

/* 二维码特殊样式 */


.sidebar-items-list {
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.sidebar-item {
    padding: 6px 8px;
    border-radius: 4px;
    background-color: rgba(0,0,0,0.02);
}
</style>

        </div>
    


<!-- 默认赞助二维码（如果没有侧边栏模块） -->

            </div>
        </div>
    
</div>

<!-- 模块管理工具栏已移除 -->

        </div>
    </main>

    <!-- 全局底部广告 -->
    

    <!-- 页脚 -->
    <footer class="footer">
    <div class="container">
        <ul class="list-inline text-center mb-0">
            <li class="list-inline-item">
                <em>&nbsp;&nbsp;本站内容均来自网络，如有侵害到您权益，请告知
                    <a href="/cdn-cgi/l/email-protection#3f0c0e070b06090d087f4e4e115c5052">我们</a>，我们会立即处理相关内容。
                </em>
            </li>
            
            <li class="list-inline-item">
                <em>
                    <a href="https://beian.miit.gov.cn/" target="_blank" rel="noopener">鲁ICP备18015570号</a>
                </em>
            </li>
            
            
        </ul>
        
        <div class="text-center mt-2">
            <!--川公网安备51011502000806-->
        </div>
        
    </div>
</footer>


    
    <!-- Bootstrap 5 JS -->
    <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.0/js/bootstrap.bundle.min.js"></script>

    <!-- jQuery (可选) -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>

    <!-- 懒加载 -->
    
    
    
<script>
document.addEventListener('DOMContentLoaded', function() {
    console.log('[M3U Upload] DOM loaded, initializing...');

    const form = document.getElementById('m3uUploadForm');
    if (!form) {
        console.log('[M3U Upload] Form not found on this page');
        return;
    }

    console.log('[M3U Upload] Form found, binding submit event');

    // 监听文件选择，显示匹配选项
    const fileInput = document.getElementById('m3uFileInput');
    const m3uOptions = document.getElementById('m3uOptions');
    if (fileInput && m3uOptions) {
        fileInput.addEventListener('change', function() {
            if (this.files && this.files.length > 0) {
                m3uOptions.style.display = 'block';
            } else {
                m3uOptions.style.display = 'none';
            }
        });
    }

    form.addEventListener('submit', function(e) {
        e.preventDefault();
        console.log('[M3U Upload] Form submitted, starting AJAX');

        const formData = new FormData(form);
        const resultDiv = document.getElementById('uploadResult');
        const uploadBtn = document.getElementById('uploadBtn');

        // 禁用按钮，显示加载状态
        uploadBtn.disabled = true;
        uploadBtn.innerHTML = '<i class="fas fa-spinner fa-spin me-1"></i>处理中...';

        // 显示处理中消息
        resultDiv.style.display = 'block';
        resultDiv.innerHTML = `
            <div class="alert alert-info">
                <i class="fas fa-spinner fa-spin me-2"></i>
                <strong>正在处理文件，请稍候...</strong>
                <p class="mb-0 mt-2 small text-muted">
                    <i class="fas fa-info-circle me-1"></i>
                    文件较大时可能需要10-30秒，请耐心等待...
                </p>
            </div>
        `;

        // 创建超时控制器（2分钟超时）
        const controller = new AbortController();
        const timeoutId = setTimeout(() => controller.abort(), 120000);

        fetch(form.action, {
            method: 'POST',
            body: formData,
            headers: {
                'X-Requested-With': 'XMLHttpRequest'
            },
            signal: controller.signal
        })
        .then(response => {
            clearTimeout(timeoutId);
            if (!response.ok) {
                throw new Error(`HTTP ${response.status}: ${response.statusText}`);
            }
            return response.json();
        })
        .then(data => {
            if (data.success) {
                const downloadUrl = '/download/' + data.output_filename + '/';
                const matchRate = data.channel_num > 0
                    ? Math.round((data.channel_num_check / data.channel_num) * 100)
                    : 0;

                resultDiv.innerHTML = `
                    <div class="alert alert-success">
                        <h5><i class="fas fa-check-circle me-2"></i>处理成功！</h5>
                        <p class="mb-2"><strong>${data.msg}</strong></p>
                        <div class="mb-3">
                            <div>总频道数: <strong>${data.channel_num}</strong> |
                                 匹配成功: <strong class="text-success">${data.channel_num_check}</strong> |
                                 匹配率: <strong>${matchRate}%</strong>
                            </div>
                        </div>
                        <a href="${downloadUrl}" class="btn btn-success" download>
                            <i class="fas fa-download me-1"></i>下载生成的M3U文件
                        </a>
                        <p class="mb-0 mt-2 small text-muted">
                            <i class="fas fa-info-circle me-1"></i>
                            如果下载没有自动开始，请点击上方按钮
                        </p>
                    </div>
                `;

                // 2秒后自动触发下载
                setTimeout(() => {
                    window.location.href = downloadUrl;
                }, 2000);
            } else {
                resultDiv.innerHTML = `
                    <div class="alert alert-danger">
                        <h5><i class="fas fa-exclamation-circle me-2"></i>处理失败</h5>
                        <p>${data.msg}</p>
                    </div>
                `;
            }
        })
        .catch(error => {
            if (error.name === 'AbortError') {
                resultDiv.innerHTML = `
                    <div class="alert alert-warning">
                        <h5><i class="fas fa-clock me-2"></i>处理超时</h5>
                        <p>文件处理时间过长（超过2分钟）。</p>
                        <p class="mb-0">建议：稍后重试，或减少文件中的频道数量</p>
                    </div>
                `;
            } else {
                resultDiv.innerHTML = `
                    <div class="alert alert-danger">
                        <h5><i class="fas fa-exclamation-triangle me-2"></i>处理失败</h5>
                        <p>网络错误或服务器异常，请稍后重试。</p>
                        <p class="text-muted small mb-0">错误: ${error.message}</p>
                    </div>
                `;
            }
        })
        .finally(() => {
            uploadBtn.disabled = false;
            uploadBtn.innerHTML = '<i class="fas fa-check me-1"></i>开始匹配';
        });
    });
});
</script>

</body>
</html>

