Files
waf-platform/EdgeUser/web/views/@default/@layout.html
2026-02-14 23:23:35 +08:00

163 lines
9.6 KiB
HTML

<!DOCTYPE html>
<html lang="zh">
<head>
<title>{$ htmlEncode .teaTitle}</title>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=0">
{$if eq .teaFaviconFileId 0}
<link rel="shortcut icon" href="/images/favicon.png" />
{$else}
<link rel="shortcut icon" href="/ui/image/{$.teaFaviconFileId}" />
{$end}
<link rel="stylesheet" type="text/css" href="/_/@default/@layout.css" media="all" />
{$TEA.SEMANTIC}
<link rel="stylesheet" type="text/css" href="/_/@default/@layout_override.css" media="all" />
{$TEA.VUE}
{$echo "header"}
<!-- 品牌配置 -->
<script type="text/javascript">
window.BRAND_OFFICIAL_SITE = { $ jsonEncode .brandConfig.officialSite };
window.BRAND_DOCS_SITE = { $ jsonEncode .brandConfig.docsSite };
window.BRAND_DOCS_PREFIX = { $ jsonEncode .brandConfig.docsPathPrefix };
window.BRAND_PRODUCT_NAME = { $ jsonEncode .brandConfig.productName };
</script>
<script type="text/javascript" src="/js/config/brand.js"></script>
<script type="text/javascript" src="/_/@default/@layout.js"></script>
<script type="text/javascript" src="/js/components.js?v=v{$.teaVersion}"></script>
<script type="text/javascript" src="/js/utils.min.js"></script>
<script type="text/javascript" src="/js/sweetalert2/dist/sweetalert2.all.min.js"></script>
<script type="text/javascript" src="/js/date.tea.js"></script>
{$if not (eq .teaThemeBackgroundColor "")}
<style>
.top-nav,
.main-menu,
.main-menu .menu {
background: #{$.teaThemeBackgroundColor} !important;
}
</style>
{$end}
<!-- 应用保存的主题颜色 -->
<script type="text/javascript">
(function () {
try {
var savedColor = localStorage.getItem("themeColor");
if (savedColor) {
var styleId = "theme-color-custom";
var styleEl = document.getElementById(styleId);
if (!styleEl) {
styleEl = document.createElement("style");
styleEl.id = styleId;
document.head.appendChild(styleEl);
}
styleEl.textContent = ".top-nav, .main-menu, .main-menu .menu { background: " + savedColor + " !important; } .main-menu .ui.labeled.menu.vertical.blue.inverted.tiny.borderless { background: " + savedColor + " !important; } .main-menu .ui.labeled.menu.vertical.blue.inverted.tiny.borderless .item { background: " + savedColor + " !important; } .main-menu .ui.labeled.menu.vertical.blue.inverted.tiny.borderless .sub-items { background: " + savedColor + " !important; } .main-menu .ui.labeled.menu.vertical.blue.inverted.tiny.borderless .sub-items .item { background: " + savedColor + " !important; } .main-menu .ui.menu .sub-items { background: " + savedColor + " !important; } .main-menu .ui.menu .sub-items .item { background: " + savedColor + " !important; } .main-menu .ui.labeled.menu .sub-items { background: " + savedColor + " !important; } .main-menu .ui.labeled.menu .sub-items .item { background: " + savedColor + " !important; } .main-menu .sub-items { background: " + savedColor + " !important; } .main-menu .sub-items .item { background: " + savedColor + " !important; } .ui.menu.blue.inverted { background: " + savedColor + " !important; } .ui.menu.blue.inverted .item { background: " + savedColor + " !important; } .ui.menu.vertical.blue.inverted { background: " + savedColor + " !important; } .ui.menu.vertical.blue.inverted .item { background: " + savedColor + " !important; } .ui.labeled.menu.vertical.blue.inverted { background: " + savedColor + " !important; } .ui.labeled.menu.vertical.blue.inverted .item { background: " + savedColor + " !important; } .main-menu .ui.labeled.menu.vertical.blue.inverted .item.active { background: rgba(230, 230, 230, 0.45) !important; } .main-menu .ui.menu .sub-items .item.active { background: rgba(230, 230, 230, 0.55) !important; }";
}
} catch (e) {
console.log("Failed to apply saved theme color:", e);
}
})();
</script>
</head>
<body>
<div>
<!-- 顶部导航 -->
<div class="ui menu top-nav blue inverted small borderless" v-cloak="">
<a href="/dashboard" class="item">
<i class="ui icon leaf" v-if="teaLogoFileId == 0"></i><img v-if="teaLogoFileId > 0"
:src="'/ui/image/' + teaLogoFileId" style="width: auto;height: 1.6em" /> &nbsp;
{{teaTitle}}&nbsp;<sup v-if="teaShowVersion">v{{teaVersion}}</sup> &nbsp;
</a>
<div class="right menu">
<a href="/messages" class="item" :class="{active:teaMenu == 'message'}">
<span v-if="globalMessageBadge > 0" class="blink hover-span"><i
class="icon bell"></i><span>消息({{globalMessageBadge}})</span></span>
<span v-if="globalMessageBadge == 0" class="hover-span"><i class="icon bell disabled"></i><span
class="disabled">消息(0)</span></span>
</a>
<a href="/settings/profile" class="item">
<i class="icon user" v-if="teaUserAvatar.length == 0"></i>
<img class="avatar" alt="" :src="teaUserAvatar" v-if="teaUserAvatar.length > 0" />
<span class="hover-span"><span class="disabled">{{teaUsername}}</span></span>
</a>
<a href="/docs" class="item" :class="{active: teaMenu == 'docs'}"><i class="icon file"></i><span
class="hover-span"><span>文档</span></span></a>
<!-- 自定义主题颜色 -->
<theme-color-picker></theme-color-picker>
<a href="/" class="item" v-show="teaShowIndexPage">
<i class="icon home"></i><span class="hover-span"><span>首页</span></span>
</a>
<a :href="Tea.url('logout')" class="item" title="安全退出登录"><i class="icon sign out"></i>
<span class="hover-span"><span class="disabled">退出</span></span>
</a>
</div>
</div>
<!-- 左侧主菜单 -->
<div class="main-menu" v-cloak="">
<div class="ui labeled menu vertical blue inverted tiny borderless">
<div class="item"></div>
<!--<a :href="Tea.url('dashboard')" class="item" :class="{active:teaMenu == 'dashboard'}">
<i class="ui dashboard icon"></i>
<span>仪表板</span>
</a>-->
<!-- 模块 -->
<div v-for="module in teaModules">
<a class="item" :href="Tea.url(module.code)"
:class="{active:teaMenu == module.code && teaSubMenu.length == 0, separator:module.code.length == 0}"
:style="(teaMenu == module.code && teaSubMenu.length == 0) ? 'background: rgba(230, 230, 230, 0.45) !important;' : ''">
<span v-if="module.code.length > 0">
<i class="window restore outline icon" v-if="module.icon == null"></i>
<i class="ui icon" v-if="module.icon != null" :class="module.icon"></i>
<span>{{module.name}}</span>
</span>
</a>
<div v-if="teaMenu == module.code" class="sub-items">
<a class="item" v-for="subItem in module.subItems" :href="subItem.url"
:class="{active:subItem.code == teaSubMenu}"
:style="(subItem.code == teaSubMenu) ? 'background: rgba(230, 230, 230, 0.55) !important;' : ''"
v-if="subItem.isOn == null || subItem.isOn === true">{{subItem.name}}<i
class="icon angle right"
v-if="subItem.name != '-' && subItem.code == teaSubMenu"></i></a>
</div>
</div>
</div>
</div>
<!-- 右侧主操作栏 -->
<div class="main"
:class="{'without-menu':teaSubMenus.menus == null || teaSubMenus.menus.length == 0 || (teaSubMenus.menus.length == 1 && teaSubMenus.menus[0].alwaysActive), 'without-secondary-menu':teaSubMenus.alwaysMenu == null || teaSubMenus.alwaysMenu.items.length <= 1, 'without-footer':!teaShowPageFooter}"
v-cloak="">
<!-- 操作菜单 -->
<div class="ui top menu tabular tab-menu small" v-if="teaTabbar.length > 0">
<a class="item" v-for="item in teaTabbar" :class="{'active':item.active,right:item.right}"
:href="item.url">
<var>{{item.name}}<span v-if="item.subName.length > 0">({{item.subName}})</span><i
class="icon small" :class="item.icon" v-if="item.icon != null && item.icon.length > 0"></i>
</var>
</a>
</div>
<!-- 功能区 -->
{$TEA.VIEW}
</div>
<!-- 底部 -->
<div id="footer" class="ui menu inverted light-blue borderless small"
v-if="teaShowPageFooter && teaPageFooterHTML.length == 0" v-cloak>
<a class="item" title="点击进入检查版本更新页面">{{teaName}} v{{teaVersion}}</a>
</div>
<div id="footer" class="ui menu inverted light-blue borderless small"
v-if="teaShowPageFooter && teaPageFooterHTML.length > 0" v-html="teaPageFooterHTML" v-cloak> </div>
</div>
{$echo "footer"}
</body>
</html>