It looks like this is a web page, not a feed. I looked for a feed associated with this page, but couldn't find one. Please enter the address of your feed to validate.

Source: https://www.qqpqq.com/

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4.    <meta charset="UTF-8">
  5.    <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.    <title>艾米管理系统-登录</title>
  7.    <link rel="stylesheet" href="layui/css/layui.css">
  8.    <script src="js/jquery.js"></script>
  9.    <script src="js/common.js"></script>
  10.    <style>
  11.        * {
  12.            margin: 0;
  13.            padding: 0;
  14.            box-sizing: border-box;
  15.            font-family: 'Segoe UI', 'Microsoft YaHei', sans-serif;
  16.        }
  17.        
  18.        body {
  19.            background: linear-gradient(135deg, #1a2980, #26d0ce);
  20.            height: 100vh;
  21.            display: flex;
  22.            justify-content: center;
  23.            align-items: center;
  24.            overflow: hidden;
  25.            position: relative;
  26.        }
  27.        
  28.        .background-pattern {
  29.            position: absolute;
  30.            top: 0;
  31.            left: 0;
  32.            width: 100%;
  33.            height: 100%;
  34.            background:
  35.                radial-gradient(circle at 10% 20%, rgba(255,255,255,0.1) 0%, transparent 20%),
  36.                radial-gradient(circle at 90% 80%, rgba(255,255,255,0.1) 0%, transparent 20%);
  37.            z-index: 0;
  38.        }
  39.        
  40.        .login-container {
  41.            width: 90%;
  42.            max-width: 420px;
  43.            background: rgba(255, 255, 255, 0.97);
  44.            border-radius: 15px;
  45.            box-shadow: 0 15px 40px rgba(0, 0, 0, 0.25);
  46.            overflow: hidden;
  47.            position: relative;
  48.            z-index: 10;
  49.            animation: fadeIn 0.8s ease-out;
  50.            transition: transform 0.3s ease;
  51.        }
  52.        
  53.        .login-container:hover {
  54.            transform: translateY(-5px) scale(1.01);
  55.        }
  56.        
  57.        .login-header {
  58.            background: linear-gradient(to right, #4776E6, #8E54E9);
  59.            color: white;
  60.            text-align: center;
  61.            padding: 30px 20px;
  62.            position: relative;
  63.            overflow: hidden;
  64.        }
  65.        
  66.        .login-header::before {
  67.            content: '';
  68.            position: absolute;
  69.            top: -50%;
  70.            left: -50%;
  71.            width: 200%;
  72.            height: 200%;
  73.            background: radial-gradient(circle, rgba(255,255,255,0.2) 0%, transparent 70%);
  74.            transform: rotate(30deg);
  75.        }
  76.        
  77.        .login-header h2 {
  78.            font-size: 28px;
  79.            margin-bottom: 8px;
  80.            letter-spacing: 1px;
  81.            position: relative;
  82.            text-shadow: 0 2px 4px rgba(0,0,0,0.2);
  83.        }
  84.        
  85.        .login-header p {
  86.            font-size: 15px;
  87.            opacity: 0.9;
  88.            position: relative;
  89.        }
  90.        
  91.        .login-header::after {
  92.            content: '';
  93.            position: absolute;
  94.            bottom: -15px;
  95.            left: 50%;
  96.            transform: translateX(-50%);
  97.            width: 30px;
  98.            height: 30px;
  99.            background: white;
  100.            border-radius: 50%;
  101.            box-shadow: 0 0 10px rgba(0,0,0,0.1);
  102.        }
  103.        
  104.        .login-body {
  105.            padding: 40px 30px;
  106.            background: white;
  107.        }
  108.        
  109.        .form-group {
  110.            margin-bottom: 25px;
  111.            position: relative;
  112.        }
  113.        
  114.        .form-group label {
  115.            display: block;
  116.            margin-bottom: 8px;
  117.            font-weight: 500;
  118.            color: #333;
  119.            font-size: 15px;
  120.            padding-left: 5px;
  121.        }
  122.        
  123.        .input-with-icon {
  124.            position: relative;
  125.        }
  126.        
  127.        .input-with-icon i {
  128.            position: absolute;
  129.            left: 15px;
  130.            top: 50%;
  131.            transform: translateY(-50%);
  132.            color: #6c63ff;
  133.            font-size: 20px;
  134.            z-index: 2;
  135.        }
  136.        
  137.        .form-control {
  138.            width: 100%;
  139.            padding: 14px 14px 14px 50px;
  140.            border: 2px solid #e1e1e1;
  141.            border-radius: 10px;
  142.            font-size: 16px;
  143.            transition: all 0.3s ease;
  144.            background: #f9f9ff;
  145.            position: relative;
  146.            z-index: 1;
  147.        }
  148.        
  149.        .form-control:focus {
  150.            border-color: #6c63ff;
  151.            outline: none;
  152.            box-shadow: 0 0 0 3px rgba(108, 99, 255, 0.2);
  153.            background: white;
  154.        }
  155.        
  156.        .btn-login {
  157.            width: 100%;
  158.            padding: 15px;
  159.            background: linear-gradient(to right, #4776E6, #8E54E9);
  160.            color: white;
  161.            border: none;
  162.            border-radius: 10px;
  163.            font-size: 17px;
  164.            font-weight: 600;
  165.            cursor: pointer;
  166.            transition: all 0.3s ease;
  167.            letter-spacing: 1px;
  168.            position: relative;
  169.            overflow: hidden;
  170.            margin-top: 5px;
  171.            box-shadow: 0 5px 15px rgba(108, 99, 255, 0.3);
  172.        }
  173.        
  174.        .btn-login::after {
  175.            content: '';
  176.            position: absolute;
  177.            top: 50%;
  178.            left: 50%;
  179.            width: 5px;
  180.            height: 5px;
  181.            background: rgba(255, 255, 255, 0.5);
  182.            opacity: 0;
  183.            border-radius: 100%;
  184.            transform: scale(1, 1) translate(-50%);
  185.            transform-origin: 50% 50%;
  186.        }
  187.        
  188.        .btn-login:focus:not(:active)::after {
  189.            animation: ripple 1s ease-out;
  190.        }
  191.        
  192.        .btn-login:hover {
  193.            background: linear-gradient(to right, #3a68e0, #7d48e5);
  194.            transform: translateY(-2px);
  195.            box-shadow: 0 7px 20px rgba(108, 99, 255, 0.4);
  196.        }
  197.        
  198.        .login-footer {
  199.            text-align: center;
  200.            padding: 20px;
  201.            font-size: 14px;
  202.            color: #666;
  203.            border-top: 1px solid #eee;
  204.            background: #fafafa;
  205.        }
  206.        
  207.        .login-footer a {
  208.            color: #6c63ff;
  209.            text-decoration: none;
  210.            transition: color 0.3s;
  211.            font-weight: 500;
  212.        }
  213.        
  214.        .login-footer a:hover {
  215.            color: #4776E6;
  216.            text-decoration: underline;
  217.        }
  218.        
  219.        .error-message {
  220.            color: #ff4757;
  221.            font-size: 14px;
  222.            margin-top: 5px;
  223.            height: 20px;
  224.            text-align: center;
  225.            min-height: 20px;
  226.            font-weight: 500;
  227.        }
  228.        
  229.        .success-message {
  230.            color: #2ed573;
  231.            font-size: 14px;
  232.            margin-top: 5px;
  233.            height: 20px;
  234.            text-align: center;
  235.            min-height: 20px;
  236.            font-weight: 500;
  237.        }
  238.        
  239.        .password-toggle {
  240.            position: absolute;
  241.            right: 15px;
  242.            top: 50%;
  243.            transform: translateY(-50%);
  244.            cursor: pointer;
  245.            color: #777;
  246.            font-size: 20px;
  247.            z-index: 2;
  248.            background: rgba(249, 249, 255, 0.7);
  249.            padding: 5px;
  250.            border-radius: 50%;
  251.            width: 30px;
  252.            height: 30px;
  253.            display: flex;
  254.            align-items: center;
  255.            justify-content: center;
  256.        }
  257.        
  258.        .system-logo {
  259.            text-align: center;
  260.            margin-bottom: 20px;
  261.            position: relative;
  262.        }
  263.        
  264.        .system-logo i {
  265.            font-size: 60px;
  266.            background: linear-gradient(to right, #4776E6, #8E54E9);
  267.            -webkit-background-clip: text;
  268.            background-clip: text;
  269.            -webkit-text-fill-color: transparent;
  270.            display: inline-block;
  271.            padding: 15px;
  272.            border-radius: 50%;
  273.            background-color: rgba(255,255,255,0.9);
  274.            box-shadow: 0 5px 15px rgba(0,0,0,0.1);
  275.        }
  276.        
  277.        @keyframes fadeIn {
  278.            from {
  279.                opacity: 0;
  280.                transform: translateY(30px);
  281.            }
  282.            to {
  283.                opacity: 1;
  284.                transform: translateY(0);
  285.            }
  286.        }
  287.        
  288.        @keyframes ripple {
  289.            0% {
  290.                transform: scale(0, 0);
  291.                opacity: 1;
  292.            }
  293.            20% {
  294.                transform: scale(25, 25);
  295.                opacity: 1;
  296.            }
  297.            100% {
  298.                opacity: 0;
  299.                transform: scale(40, 40);
  300.            }
  301.        }
  302.        
  303.        @keyframes shake {
  304.            0% { transform: translateX(0); }
  305.            20% { transform: translateX(-10px); }
  306.            40% { transform: translateX(10px); }
  307.            60% { transform: translateX(-10px); }
  308.            80% { transform: translateX(10px); }
  309.            100% { transform: translateX(0); }
  310.        }
  311.        
  312.        .shake {
  313.            animation: shake 0.5s;
  314.        }
  315.        
  316.        .login-loading .btn-text {
  317.            display: none;
  318.        }
  319.        
  320.        .login-loading .login-spinner {
  321.            display: inline-block;
  322.        }
  323.        
  324.        .login-spinner {
  325.            display: none;
  326.            animation: spin 1s linear infinite;
  327.            font-size: 18px;
  328.        }
  329.        
  330.        @keyframes spin {
  331.            0% { transform: rotate(0deg); }
  332.            100% { transform: rotate(360deg); }
  333.        }
  334.        
  335.        @media (max-width: 480px) {
  336.            .login-container {
  337.                width: 95%;
  338.            }
  339.            
  340.            .login-body {
  341.                padding: 30px 20px;
  342.            }
  343.            
  344.            .login-header h2 {
  345.                font-size: 24px;
  346.            }
  347.            
  348.            .system-logo i {
  349.                font-size: 50px;
  350.            }
  351.        }
  352.        
  353.        .remember-forgot {
  354.            display: flex;
  355.            justify-content: space-between;
  356.            align-items: center;
  357.            margin-top: -10px;
  358.            margin-bottom: 20px;
  359.            font-size: 14px;
  360.        }
  361.        
  362.        .remember-me {
  363.            display: flex;
  364.            align-items: center;
  365.        }
  366.        
  367.        .remember-me input {
  368.            margin-right: 8px;
  369.        }
  370.        
  371.        .forgot-password {
  372.            color: #6c63ff;
  373.            text-decoration: none;
  374.        }
  375.        
  376.        .forgot-password:hover {
  377.            text-decoration: underline;
  378.        }
  379.        
  380.        .api-status {
  381.            position: absolute;
  382.            top: 20px;
  383.            left: 20px;
  384.            background: rgba(0,0,0,0.6);
  385.            color: white;
  386.            padding: 5px 10px;
  387.            border-radius: 4px;
  388.            font-size: 12px;
  389.            z-index: 20;
  390.        }
  391.    </style>
  392. </head>
  393. <body>
  394.    <div class="background-pattern"></div>
  395.    
  396.  
  397.    
  398.    <div class="login-container">
  399.        <div class="system-logo">
  400.            <i class="layui-icon layui-icon-user"></i>
  401.        </div>
  402.        
  403.        <div class="login-header">
  404.            <h2>艾米管理系统</h2>
  405.            <p>请使用您的账号密码登录系统</p>
  406.        </div>
  407.        
  408.        <div class="login-body">
  409.            <form id="loginForm">
  410.                <div class="form-group">
  411.                    <label for="username">用户名</label>
  412.                    <div class="input-with-icon">
  413.                        <i class="layui-icon layui-icon-username"></i>
  414.                        <input type="text" id="username" name="username" class="form-control" placeholder="请输入用户名" required>
  415.                    </div>
  416.                </div>
  417.                
  418.                <div class="form-group">
  419.                    <label for="password">密码</label>
  420.                    <div class="input-with-icon">
  421.                        <i class="layui-icon layui-icon-password"></i>
  422.                        <input type="password" id="password" name="password" class="form-control" placeholder="请输入密码" required>
  423.                        <span class="password-toggle" id="togglePassword">
  424.                            <i class="layui-icon layui-icon-eye"></i>
  425.                        </span>
  426.                    </div>
  427.                </div>
  428.                
  429.                <div class="remember-forgot">
  430.                    <div class="remember-me">
  431.                        <input type="checkbox" id="rememberMe">
  432.                        <label for="rememberMe">记住我</label>
  433.                    </div>
  434.                    <a href="#" class="forgot-password">忘记密码?</a>
  435.                </div>
  436.                
  437.                <div class="error-message" id="errorMessage"></div>
  438.                <div class="success-message" id="successMessage"></div>
  439.                
  440.                <button type="submit" class="btn-login" id="loginButton">
  441.                    <span class="btn-text">登录系统</span>
  442.                    <i class="layui-icon layui-icon-loading login-spinner"></i>
  443.                </button>
  444.            </form>
  445.        </div>
  446.        
  447.        <div class="login-footer">
  448.            <p>© 2025 艾米科技 | 技术支持: <a href="tel:888-888-8888">888-888-8888</a></p>
  449.        </div>
  450.    </div>
  451.  
  452.    <script>
  453.        $(document).ready(function() {
  454.            // 显示/隐藏密码
  455.            $('#togglePassword').click(function() {
  456.                const type = $('#password').attr('type') === 'password' ? 'text' : 'password';
  457.                $('#password').attr('type', type);
  458.                $(this).html(type === 'password' ?
  459.                    '<i class="layui-icon layui-icon-eye"></i>' :
  460.                    '<i class="layui-icon layui-icon-eye-close"></i>');
  461.            });
  462.  
  463.            // 表单提交处理 - 使用真实API
  464.            $('#loginForm').submit(function(e) {
  465.                e.preventDefault();
  466.  
  467.                // 获取表单数据
  468.                const username = $('#username').val().trim();
  469.                const password = $('#password').val();
  470.  
  471.                // 验证输入
  472.                if (!username) {
  473.                    showError('请输入用户名');
  474.                    return;
  475.                }
  476.                
  477.                if (!password) {
  478.                    showError('请输入密码');
  479.                    return;
  480.                }
  481.  
  482.                // 显示加载状态
  483.                $('#loginButton').addClass('login-loading');
  484.                clearMessages();
  485.  
  486.                // 发送真实API请求
  487.                $.ajax({
  488.                    url: BASE_URL + '/back/user/login',
  489.                    type: 'POST',
  490.                    data: {
  491.                        username: username,
  492.                        password: password
  493.                    },
  494.                    dataType: 'json',
  495.                    success: function(data) {
  496.                        $('#loginButton').removeClass('login-loading');
  497.                        console.log("API响应数据:", data);
  498.                        
  499.                        if (data.code == 200) {
  500.                            showSuccess('登录成功,正在跳转...');
  501.                            
  502.                            const userName = data.obj?.username || username;
  503.                            const jsid = data.obj?.jsid || '';
  504.                            
  505.                            // 保存记住我状态
  506.                            if($('#rememberMe').is(':checked')) {
  507.                                localStorage.setItem('rememberMe', 'true');
  508.                                localStorage.setItem('username', userName);
  509.                            } else {
  510.                                localStorage.removeItem('rememberMe');
  511.                                localStorage.removeItem('username');
  512.                            }
  513.                            
  514.                            // 跳转页面
  515.                            setTimeout(function() {
  516.                                window.location.href = `index.html?username=${encodeURIComponent(userName)}&jsid=${encodeURIComponent(jsid)}`;
  517.                            }, 1500);
  518.                        } else {
  519.                            showError(data.message || '登录失败,请检查用户名和密码');
  520.                        }
  521.                    },
  522.                    error: function(xhr) {
  523.                        $('#loginButton').removeClass('login-loading');
  524.                        console.error('API请求错误:', xhr);
  525.                        
  526.                        let errorMsg = '请求失败: ';
  527.                        if (xhr.status === 0) {
  528.                            errorMsg += '无法连接到服务器';
  529.                        } else if (xhr.status === 404) {
  530.                            errorMsg += 'API地址未找到';
  531.                        } else if (xhr.status === 500) {
  532.                            errorMsg += '服务器内部错误';
  533.                        } else {
  534.                            errorMsg += xhr.statusText || '未知错误';
  535.                        }
  536.                        
  537.                        showError(errorMsg);
  538.                    }
  539.                });
  540.            });
  541.  
  542.            // 清除所有消息
  543.            function clearMessages() {
  544.                $('#errorMessage').text('');
  545.                $('#successMessage').text('');
  546.            }  
  547.  
  548.            // 显示错误信息
  549.            function showError(message) {
  550.                $('#errorMessage').text(message).addClass('shake');
  551.                setTimeout(() => $('#errorMessage').removeClass('shake'), 500);
  552.            }
  553.  
  554.            // 显示成功信息
  555.            function showSuccess(message) {
  556.                $('#successMessage').text(message);
  557.            }
  558.  
  559.            // 检查本地存储中是否有记住的登录信息
  560.            if(localStorage.getItem('rememberMe') === 'true') {
  561.                const savedUsername = localStorage.getItem('username');
  562.                if(savedUsername) {
  563.                    $('#username').val(savedUsername);
  564.                    $('#rememberMe').prop('checked', true);
  565.                }
  566.            }
  567.            
  568.        });
  569.    </script>
  570. <script defer src="https://static.cloudflareinsights.com/beacon.min.js/vcd15cbe7772f49c399c6a5babf22c1241717689176015" integrity="sha512-ZpsOmlRQV6y907TI0dKBHq9Md29nnaEIPlkf84rnaERnq6zvWvPUqr2ft8M1aS28oN72PdrCzSjY4U6VaAw1EQ==" data-cf-beacon='{"version":"2024.11.0","token":"1a40b364c65d4206912f189b44c25d02","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
  571. </body>
  572. </html>
Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda