<!doctype html><html lang="cn"><head><base href="{{.BasePath}}/"><meta charset="utf-8"><meta content="IE=edge"><meta name="referer" content="never"><meta name="renderer" content="webkit"><title>{{LangCtx .ctx .Title}}</title><script>const language = '{{.language.name}}' || 'zh'
      if (language !== 'zh') {
        // 同步加载语言包（阻塞后续渲染，确保优先完成）
        const xhr = new XMLHttpRequest()
        xhr.open('GET', `/static/languages/${language}.json`, false) // 同步请求
        xhr.onload = function () {
          if (xhr.status === 200) {
            window.languages = {
              ...(window.languages || {}),
              [language]: JSON.parse(xhr.responseText)
            }
          }
        }
        xhr.send()
      }</script><link rel="icon" href="./static/favicon.ico"><link rel="stylesheet" crossorigin href="./static/css/login.min.css?v=20260328163632"><script>window.vite_public_languages = '{{.languages}}' // 语言列表
      window.vite_public_language = '{{.language.name}}' // 语言包
      window.vite_public_title = '{{.Title}}' // 网站标题
      window.vite_public_encryption = '{{.aesKey}}' // rsa加密公钥
      window.vite_public_login_token = '{{.LoginToken}}' // 登录token
      window.vite_public_login_check = '{{.isShowCaptcha}}' === 'true' // 是否登录检查
      window.vite_public_version_name = '{{.VersionName}}' // 版本名称
      window.vite_public_home_url = '{{.HomeUrl}}' // 官网地址
      window.vite_public_version = '{{.Version}}' // 版本号
      window.basePath = '{{.BasePath}}' // 基础路径
      if (window.vite_public_version_name === 'aaPanel') {
        // 调整图标
        document.querySelector('link[rel="icon"]').href = './static/aa_favicon.ico'
      }
      ;(function () {
        // 浏览器兼容性检测
        function browserCompatible() {
          // IE浏览器版本检测
          var ieVersion = (function () {
            var userAgent = navigator.userAgent,
              isLessIE11 = userAgent.indexOf('compatible') > -1 && userAgent.indexOf('MSIE') > -1,
              isEdge = userAgent.indexOf('Edge') > -1 && !isLessIE11,
              isIE11 = userAgent.indexOf('Trident') > -1 && userAgent.indexOf('rv:11.0') > -1
            if (isLessIE11) {
              var IEReg = new RegExp('MSIE (\\d+\\.\\d+);')
              IEReg.test(userAgent)
              var IEVersionNum = parseFloat(RegExp['$1'])
              if ([7, 8, 9, 10].indexOf(IEVersionNum) > -1) {
                return IEVersionNum
              } else {
                return 6
              }
            } else if (isEdge) {
              return 'edge'
            } else if (isIE11) {
              return 11
            } else {
              return -1
            }
          })()
          if ((ieVersion != -1 && ieVersion <= 11) || ieVersion === 'edge') location.href = '/tips'
          // 支持Firefox\Chrome\Safari浏览器判断，排除移动设备
          var browserVersion = function (config) {
            var userAgent = navigator.userAgent
            // 判断是否为移动端设备
            if (
              userAgent.match(
                /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i
              )
            )
              return false
            if (type === 'Safari') type = 'Version'
            for (var i = 0; i < config.length; i++) {
              var type = config[i][0]
              var version = config[i][1]
              if (userAgent.indexOf(type) > -1) {
                var reg = new RegExp(type + '/(\\d+\\.\\d+)')
                reg.test(userAgent)
                var versionNum = parseFloat(RegExp['$1'])
                return version > versionNum
              } else {
                return false
              }
            }
          }
          if (
            browserVersion([
              ['Chrome', 60],
              ['Safari', 11],
              ['Firefox', 55]
            ])
          ) {
            location.href = '/tips'
          }
          if (!location.origin)
            location.origin =
              location.protocol +
              '//' +
              location.hostname +
              (location.port ? ':' + location.port : '')
        }

        // 禁止后退
        function blockHist() {
          if (window.history && window.history.pushState) {
            window.onpopstate = function () {
              window.history.pushState('forward', null, '')
              window.history.forward(1)
            }
          }
          window.history.pushState('forward', null, '') //在IE中必须得有这两行
          window.history.forward(1)
        }

        // 主题切换的方法
        function useDark(config) {
          let theme = localStorage.getItem(config.storageKey) // 从本地存储中获取主题
          function isDarkMode() {
            const darkModeQuery = window.matchMedia('(prefers-color-scheme: dark)')
            return darkModeQuery.matches
          }
          if (theme && theme.includes('auto') && isDarkMode)
            theme = isDarkMode ? config.valueDark : config.valueLight // 自动模式下，根据系统主题切换
          document.querySelector(config.selector).setAttribute('class', theme) // 设置主题，使用setAttribute方法

          // 设置主题，使用innerHTML方法
          function setThemeDom(el) {
            const divHtml = '<div class="cut-theme"><i class="svgtofont-icon-dark"></i></div>'
            const divView = document.createElement('div')
            divView.classList.add('theme-view') // 创建一个div元素
            divView.innerHTML = divHtml // 设置div元素的innerHTML属性
            console.log(divView)
            if (document.getElementsByTagName('body')[0])
              document.getElementsByTagName('body')[0].append(divView) // 将div元素添加到body元素中
          }
          setThemeDom('body')
        }

        browserCompatible()
        blockHist()
        useDark({
          selector: 'html',
          storageKey: 'PANEL-THEME',
          valueDark: 'dark',
          valueLight: 'light'
        })
      })()</script><script src="./static/js/md5.min.js?v=20260328163632"></script><script src="./static/js/standalone-i18n.js?v=20260328163632"></script><script type="module" crossorigin src="./static/js/login.js?v=20260328163632"></script><script type="module">import.meta.url;import("_").catch(()=>1);(async function*(){})().next();if(location.protocol!="file:"){window.__vite_is_modern_browser=true}</script><script type="module">!function(){if(window.__vite_is_modern_browser)return;console.warn("vite: loading legacy chunks, syntax error above and the same error below should be ignored");var e=document.getElementById("vite-legacy-polyfill"),n=document.createElement("script");n.src=e.src,n.onload=function(){System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))},document.body.appendChild(n)}();</script></head><body><script src="./html/js/crypto-js.min.js?v=20260328163632"></script><script src="./static/js/qrcode.min.js?v=20260328163632"></script><div id="aesKey" data-token="{{.aesKey}}" style="display:none"></div><div id="app"></div><script>// 节点加载完成
      window.addEventListener('load', function () {
        // 获取所有i18n节点
        const i18nElements = document.querySelectorAll('.i18n')
        i18nElements.forEach(function (element) {
          // 当前元素为img标签时 获取title 并修改title
          if (element.tagName === 'IMG') {
            element.title = langI18n(element.title)
          }
          // 当前元素为input标签时 获取placeholder 并修改placeholder
          else if (element.tagName === 'INPUT') {
            element.placeholder = langI18n(element.placeholder)
          } else {
            const text = element.textContent.trim()
            element.innerHTML = langI18n(text)
            if (element?.title) {
              element.title = langI18n(element.title)
            }
          }
        })
      })</script><script nomodule>!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",(function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()}),!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script nomodule crossorigin id="vite-legacy-polyfill" src="./static/js/polyfills-legacy.js?v=20260328163632"></script><script nomodule crossorigin id="vite-legacy-entry" data-src="./static/js/login-legacy.js?v=20260328163632">System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))</script></body></html>