阶段性提交

This commit is contained in:
GoEdgeLab
2020-07-22 22:19:39 +08:00
parent cc971be504
commit b984b68089
143 changed files with 22667 additions and 37 deletions
+598
View File
@@ -0,0 +1,598 @@
/** 通用 **/
.clear {
clear: both;
}
.hidden {
display: none;
}
pre {
white-space: pre-wrap;
}
a.disabled,
a.disabled:hover,
a.disabled:active,
span.disabled {
color: #ccc !important;
}
a.enabled,
span.enabled,
span.green {
color: #21ba45;
}
span.grey,
label.grey,
p.grey {
color: grey !important;
}
p.grey {
margin-top: 0.8em;
}
span.red,
pre.red {
color: #db2828;
}
pre:not(.CodeMirror-line) {
font-family: Lato, 'Helvetica Neue', Arial, Helvetica, sans-serif !important;
}
tbody {
background: transparent;
}
.table.width30 {
width: 30em !important;
}
.table.width35 {
width: 35em !important;
}
.table.width40 {
width: 40em !important;
}
.table th,
.table td {
font-size: 0.9em !important;
}
p.comment,
div.comment {
color: rgba(0, 0, 0, 0.3);
padding-top: 0.4em;
}
p.comment em,
div.comment em {
font-style: italic !important;
}
.truncate {
white-space: nowrap;
-ms-text-overflow: ellipsis;
overflow: hidden;
text-overflow: ellipsis;
}
div.margin,
p.margin {
margin-top: 1em;
}
/** 操作按钮容器 **/
.op.one {
width: 4em;
}
.op.two {
width: 7.4em;
}
.op.three {
width: 9em;
}
.op.four {
width: 10em;
}
/** 主菜单 **/
.main-menu .ui.menu {
width: 9.5em !important;
border-radius: 0 !important;
}
@media screen and (max-width: 512px) {
.main-menu .ui.menu {
width: 3.6em !important;
}
.main-menu .ui.menu .item {
padding-top: 2em;
padding-bottom: 2.4em;
}
.main-menu .ui.menu .item span {
display: none;
}
}
.main-menu .ui.labeled.icon.menu .item {
font-size: 0.9em;
}
/** 扩展UI **/
.field.text {
padding: .5em;
}
/** body **/
@keyframes blink {
from {
opacity: 0.1;
}
to {
opacity: 0.8;
}
}
body .ui.menu .item .blink {
animation: blink 1s infinite;
}
body.expanded .main-menu {
display: none;
}
body.expanded .sub-menu {
display: none;
}
body.expanded .main {
left: 1em;
}
/** 布局相关 */
.top-nav {
border-radius: 0 !important;
position: fixed;
width: 100%;
z-index: 1000;
overflow-x: auto;
background: #276ac6 !important;
}
.top-nav::-webkit-scrollbar {
height: 2px;
}
.top-nav img.avatar {
width: 1.6em !important;
height: 1.6em !important;
padding: 0.2em;
background: #fff;
border-radius: 0.9em;
margin-right: 0.5em !important;
}
.top-nav em {
font-style: normal;
font-size: 0.9em;
padding-left: 0.2em;
}
/** 顶部菜单 **/
.top-secondary-menu {
position: fixed;
top: 2.6em;
left: 8.2em;
right: 0;
z-index: 100;
background: white;
}
.top-secondary-menu .menu {
margin-top: 0 !important;
margin-bottom: 0 !important;
border-radius: 0 !important;
}
.top-secondary-menu .menu var {
font-style: normal;
}
.top-secondary-menu .divider {
margin-top: 0 !important;
margin-bottom: 0 !important;
}
@media screen and (max-width: 512px) {
.top-secondary-menu {
left: 4em;
}
}
/** 右侧主操作区 **/
.main {
position: absolute;
left: 22em;
top: 5.6em;
padding-bottom: 5em;
padding-right: 1em;
right: 1em;
}
@media screen and (max-width: 512px) {
.main {
left: 4em;
}
}
.main.without-menu {
left: 9em;
}
.main.without-secondary-menu {
top: 2.9em;
}
@media screen and (max-width: 512px) {
.main.without-menu {
left: 4em;
}
}
.main table td.title {
width: 10em;
}
.main table td.middle-title {
width: 14em;
}
.main table td {
vertical-align: top;
}
.main table td.color-border {
border-left: 1px #276ac6 solid !important;
}
.main table td.vertical-top {
vertical-align: top;
}
.main table td.vertical-middle {
vertical-align: middle;
}
.main table td[colspan="2"] a {
font-weight: normal;
}
.main table td em {
font-weight: normal;
font-style: normal;
font-size: 0.9em;
}
.main h3 {
font-weight: normal;
margin-top: 1em !important;
}
.main h3 span {
font-size: 0.8em;
}
.main h3 span.label {
color: #6435c9;
}
.main h3 a {
margin-left: 1em;
font-size: 14px !important;
right: 1em;
}
.main h3 a::before {
content: "[";
}
.main h3 a::after {
content: "]";
}
.main h4 {
font-weight: normal;
}
.main td span.small {
font-size: 0.8em;
}
.main .button.mini {
font-size: 0.8em;
padding: 0.2em;
margin-left: 1em;
}
.main-menu {
position: fixed;
/**top: 1.05em;**/
top: 2em;
bottom: 0;
overflow-y: auto;
background: #276ac6 !important;
z-index: 10;
}
.main-menu .menu {
background: #276ac6 !important;
}
.main-menu::-webkit-scrollbar {
width: 2px;
}
.main .tab-menu {
margin-top: 1em !important;
margin-bottom: 0 !important;
}
.main .tab-menu .item {
padding: 1em !important;
}
.main .tab-menu .item var {
font-style: normal;
}
.main .tab-menu .item span {
font-size: 0.8em;
padding-left: 0.3em;
}
@media screen and (max-width: 512px) {
.main .tab-menu {
overflow-x: auto;
overflow-y: hidden;
}
.main .tab-menu::-webkit-scrollbar {
height: 4px;
}
}
.main .go-top-btn {
position: fixed;
right: 2.6em;
bottom: 2em;
font-size: 2em;
line-height: 1.4em;
border-radius: 1em;
z-index: 999999;
background: white;
}
/** 子菜单 **/
.main.without-menu .sub-menu {
display: none;
}
.sub-menu {
position: fixed;
left: 8em;
width: 12.5em;
top: 3em;
bottom: 2.8em;
}
.sub-menu .menus-box {
overflow-y: auto;
position: absolute;
top: 0;
bottom: 0;
right: 0;
left: 0;
padding-right: 0.4em !important;
}
.sub-menu .menus-box::-webkit-scrollbar {
width: 4px;
height: 4px;
}
.sub-menu .menu {
max-width: 12em !important;
border-right: 0 !important;
}
@media screen and (max-width: 512px) {
.sub-menu {
position: relative;
width: 100%;
left: 0;
top: 0;
}
.sub-menu .menus-box {
position: relative !important;
}
.sub-menu .menu {
width: 100% !important;
max-width: 30em !important;
}
.sub-menu .menus-box .menu .item {
width: 100% !important;
max-width: 30em !important;
}
}
.sub-menu .menu .item.active {
font-weight: normal !important;
outline: none !important;
}
.sub-menu .menu .item:not(.header) {
padding-top: 0.7em !important;
padding-bottom: 0.7em !important;
}
.sub-menu .menu .item:not(.header) span {
font-size: 0.8em;
display: block;
margin-top: 0.6em !important;
line-height: 1.5;
}
.sub-menu .menu .item:not(.active):hover {
background: rgba(0, 0, 0, 0.05) !important;
border-top: 1px white solid !important;
border-bottom: 1px white solid !important;
margin-top: -1px !important;
margin-bottom: -1px !important;
}
.sub-menu .menu .item.active {
background: rgba(0, 0, 0, 0.05) !important;
}
.sub-menu .menu .item var {
font-style: normal;
}
.sub-menu .menu .item:not(.active) var.grey {
color: grey;
}
.sub-menu .menu .item span:not(.green) {
color: grey;
}
.sub-menu .menu .item span.red {
color: #db2828 !important;
}
.sub-menu .menus-box .menu .item.header {
padding-right: 0.2em !important;
cursor: pointer;
}
.sub-menu .menus-box .menu .item.header span {
font-weight: normal;
color: grey;
font-size: 0.8em;
}
.sub-menu .menus-box .menu a {
display: block;
word-break: break-all;
line-height: 1.6 !important;
}
.sub-menu .menus-box .menu .item .menu {
margin-top: 0 !important;
}
.sub-menu .fourth-menu {
margin-left: 1.2em;
}
.sub-menu .fourth-menu .icon,
.sub-menu .third-menu .icon {
float: left !important;
}
/** 右侧文本子菜单 **/
.text.menu {
overflow-x: auto;
}
.text.menu::-webkit-scrollbar {
width: 4px;
height: 4px;
}
/** 脚部相关样式 **/
#footer {
position: fixed;
bottom: 0;
text-align: left;
color: gray;
width: 100%;
border-radius: 0 !important;
z-index: 10;
overflow-x: auto;
}
#footer::-webkit-scrollbar {
height: 2px;
}
#footer a {
font-size: 0.9em;
}
#footer a form {
display: none;
}
#footer a:hover span,
#footer a:active span {
display: none;
}
#footer a:hover form,
#footer a:active form {
display: block;
}
#footer form input {
padding: 0;
margin: 0;
}
#footer-outer-box {
z-index: 999999;
position: fixed;
left: 0;
top: 0;
right: 0;
background: rgba(0, 0, 0, 0.8);
bottom: 2.6em;
}
#footer-outer-box .qrcode {
width: 20em;
position: absolute;
top: 50%;
left: 50%;
margin-top: -14em;
margin-left: -10em;
}
#footer-outer-box .qrcode img {
width: 100%;
}
#footer-outer-box .qrcode a {
position: absolute;
right: 0.5em;
top: 0.5em;
}
@media screen and (max-width: 512px) {
#footer-outer-box .qrcode {
margin-left: 0;
left: 3.5em;
}
}
/** Vue **/
[v-cloak] {
display: none !important;
}
/** auto complete **/
.autocomplete-box .menu {
background: #eee !important;
}
.autocomplete-box .menu::-webkit-scrollbar {
width: 4px;
}
.autocomplete-box .menu .item {
border-top: none !important;
}
/** column **/
@media screen and (max-width: 512px) {
.column:not(.one) {
width: 100% !important;
}
}
/** label **/
label[for] {
cursor: pointer !important;
}
label.blue {
color: #2185d0 !important;
}
/** Menu **/
.first-menu .menu.text {
margin-top: 0 !important;
margin-bottom: 0 !important;
}
.first-menu .divider {
margin-top: 0 !important;
margin-bottom: 0 !important;
}
.second-menu .menu.text {
margin-top: 0 !important;
margin-bottom: 0 !important;
}
.second-menu .menu.text em {
font-style: normal;
}
.second-menu .divider {
margin-top: 0 !important;
}
.menu a {
outline: none;
}
/** var **/
span.olive,
var.olive {
color: #b5cc18 !important;
}
var.dash {
border-bottom: 1px dashed grey;
}
/** Message **/
.message .gopher {
width: 30px;
margin-right: 10px;
}
/** checkbox **/
.checkbox label a,
.checkbox label {
font-size: 0.8em !important;
}
/** page **/
.page {
margin-top: 1em;
border-left: 1px solid #ddd;
}
.page a {
display: inline-block;
background: #fafafa;
color: #666;
padding: 6px 12px;
margin: 0;
font-size: 0.9em;
border: 1px solid #ddd;
border-left: 0;
}
.page a.active {
background: #2185d0 !important;
color: white;
}
.page a:hover {
background: #eee;
}
/** popup **/
.swal2-html-container {
overflow-x: hidden;
}
.swal2-close,
.swal2-close:focus {
border: 0;
}
.swal2-confirm:focus,
.swal2-cancel:focus {
border: 3px #ddd solid !important;
}
.swal2-confirm,
.swal2-cancel {
border: 3px #fff solid !important;
}
.swal2-cancel {
margin-left: 2em !important;
}
/*# sourceMappingURL=@layout.css.map */
File diff suppressed because one or more lines are too long
+86
View File
@@ -0,0 +1,86 @@
<!DOCTYPE html>
<html>
<head>
<title>{$.teaTitle}管理员系统</title>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=0">
<link rel="shortcut icon" href="/images/favicon.png"/>
<link rel="stylesheet" type="text/css" href="/_/@default/@layout.css" media="all"/>
{$TEA.SEMANTIC}
{$TEA.VUE}
{$echo "header"}
<script type="text/javascript" src="/_/@default/@layout.js"></script>
<script type="text/javascript" src="/ui/components.js?v=1.0.0"></script>
<script type="text/javascript" src="/js/utils.js"></script>
<script type="text/javascript" src="/js/sweetalert2/dist/sweetalert2.all.min.js"></script>
</head>
<body>
<div>
<!-- 顶部导航 -->
<div class="ui menu top-nav blue inverted small borderless" v-cloak="">
<a href="/" class="item">
<i class="ui icon globe"></i> &nbsp; {{teaName}}管理员系统 &nbsp;
</a>
<div class="right menu">
<a href="/monitor/messages" class="item" v-if="teaBadge > 0"><span :class="{'blink':teaBadge > 0}"><i class="icon bell"></i>告警({{teaBadge}}) </span></a>
<a href="/settings" class="item" :class="{active: teaMenu == 'settings'}">
<i class="icon user" v-if="teaUserAvatar.length == 0"></i>
<img class="avatar" alt="" :src="teaUserAvatar" v-if="teaUserAvatar.length > 0"/>
{{teaUsername}}
</a>
<a :href="Tea.url('logout')" class="item" title="安全退出登录"><i class="icon sign out"></i>退出</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>-->
<!-- 模块 -->
<a v-for="module in teaModules" class="item" :href="Tea.url(module.code)" :class="{active:teaMenu == module.code}">
<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.menuName}}</span>
</a>
</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}" v-cloak="">
<!-- 左侧子菜单 -->
<div class="sub-menu" v-if="teaSubMenus.menus != null && teaSubMenus.menus.length > 0">
<div class="menus-box">
<div class="ui secondary menu vertical borderless blue pointing small" v-cloak="" v-for="menu in teaSubMenus.menus" v-if="!menu.alwaysActive">
<p class="item header" v-if="menu.name.length > 0 && !menu.alwaysActive" @click.prevent="showSubMenu(menu)">
<var v-html="menu.name"></var> <!--<span v-if="!menu.alwaysActive">({{menu.countNormalItems}})</span>--><!--<i class="icon angle" :class="{up:menu.isActive,down:!menu.isActive}" v-if="!menu.alwaysActive"></i>-->
</p>
<a :href="item.url" class="item" :class="{active:item.isActive,sortable:item.isSortable}" v-for="item in menu.items" v-show="true" :data-id="item.id"><var class="grey">{{item.name}}</var><sup v-if="item.supName.length > 0">&nbsp; {{item.supName}}</sup><span v-if="item.subName != null && item.subName.length > 0" :class="item.subColor">{{item.subName}}</span><i v-if="item.icon != null && item.icon.length > 0" :class="'ui icon ' + item.icon"></i>
</a>
</div>
</div>
</div>
<!-- 操作菜单 -->
<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}" :href="item.url">
<var>{{item.name}}<span v-if="item.subName.length > 0">({{item.subName}})</span> &nbsp;<i class="icon small" :class="item.icon" v-if="item.icon != null"></i> </var>
</a>
</div>
<!-- 功能区 -->
{$TEA.VIEW}
</div>
</div>
{$echo "footer"}
</body>
</html>
+66
View File
@@ -0,0 +1,66 @@
Tea.context(function () {
this.moreOptionsVisible = false;
this.$delay(function () {
if (this.$refs.focus != null) {
this.$refs.focus.focus();
}
});
/**
* 左侧子菜单
*/
this.showSubMenu = function (menu) {
if (menu.alwaysActive) {
return;
}
if (this.teaSubMenus.menus != null && this.teaSubMenus.menus.length > 0) {
this.teaSubMenus.menus.$each(function (k, v) {
if (menu.id == v.id) {
return;
}
v.isActive = false;
});
}
menu.isActive = !menu.isActive;
};
});
window.NotifySuccess = function (message, url, params) {
if (typeof (url) == "string" && url.length > 0) {
if (url[0] != "/") {
url = Tea.url(url, params);
}
}
return function () {
teaweb.success(message, function () {
window.location = url;
});
};
};
window.NotifyDelete = function (message, url, params) {
teaweb.confirm(message, function () {
Tea.Vue.$post(url)
.params(params)
.refresh();
});
};
window.NotifyPopup = function (resp) {
window.parent.teaweb.popupFinish(resp);
};
window.ChangePageSize = function (size) {
let url = window.location.toString();
if (url.indexOf("pageSize") > 0) {
url = url.replace(/pageSize=\d+/g, "pageSize=" + size);
} else {
if (url.indexOf("?") > 0) {
url += "&pageSize=" + size;
} else {
url += "?pageSize=" + size;
}
}
window.location = url;
};
+722
View File
@@ -0,0 +1,722 @@
/** 通用 **/
.clear {
clear: both;
}
.hidden {
display: none;
}
pre {
white-space: pre-wrap;
}
a.disabled, a.disabled:hover, a.disabled:active, span.disabled {
color: #ccc !important;
}
a.enabled, span.enabled, span.green {
color: #21ba45;
}
span.grey, label.grey, p.grey {
color: grey !important;
}
p.grey {
margin-top: 0.8em;
}
span.red, pre.red {
color: #db2828;
}
pre:not(.CodeMirror-line) {
font-family: Lato, 'Helvetica Neue', Arial, Helvetica, sans-serif !important;
}
tbody {
background: transparent;
}
.table.width30 {
width: 30em !important;
}
.table.width35 {
width: 35em !important;
}
.table.width40 {
width: 40em !important;
}
.table th, .table td {
font-size: 0.9em !important;
}
p.comment, div.comment {
color: rgba(0, 0, 0, 0.3);
padding-top: 0.4em;
}
p.comment em, div.comment em {
font-style: italic !important;
}
.truncate {
white-space: nowrap;
-ms-text-overflow: ellipsis;
overflow: hidden;
text-overflow: ellipsis;
}
div.margin, p.margin {
margin-top: 1em;
}
/** 操作按钮容器 **/
.op.one {
width: 4em;
}
.op.two {
width: 7.4em;
}
.op.three {
width: 9em;
}
.op.four {
width: 10em;
}
/** 主菜单 **/
.main-menu .ui.menu {
width: 9.5em !important;
border-radius: 0 !important;
}
@media screen and (max-width: 512px) {
.main-menu .ui.menu {
width: 3.6em !important;
}
.main-menu .ui.menu .item {
padding-top: 2em;
padding-bottom: 2.4em;
}
.main-menu .ui.menu .item span {
display: none;
}
}
.main-menu .ui.labeled.icon.menu .item {
font-size: 0.9em;
}
.main-menu .ui.menu .item {
}
/** 扩展UI **/
.field.text {
padding: .5em;
}
/** body **/
@keyframes blink {
from {
opacity: 0.1;
}
to {
opacity: 0.8;
}
}
body .ui.menu .item .blink {
animation: blink 1s infinite;
}
body.expanded .main-menu {
display: none;
}
body.expanded .sub-menu {
display: none;
}
body.expanded .main {
left: 1em;
}
/** 布局相关 */
.top-nav {
border-radius: 0 !important;
position: fixed;
width: 100%;
z-index: 1000;
overflow-x: auto;
background: #276ac6 !important;
}
.top-nav::-webkit-scrollbar {
height: 2px;
}
.top-nav img.avatar {
width: 1.6em !important;
height: 1.6em !important;
padding: 0.2em;
background: #fff;
border-radius: 0.9em;
margin-right: 0.5em !important;
}
.top-nav em {
font-style: normal;
font-size: 0.9em;
padding-left: 0.2em;
}
/** 顶部菜单 **/
.top-secondary-menu {
position: fixed;
top: 2.6em;
left: 8.2em;
right: 0;
z-index: 100;
background: white;
}
.top-secondary-menu .menu {
margin-top: 0 !important;
margin-bottom: 0 !important;
border-radius: 0 !important;
}
.top-secondary-menu .menu var {
font-style: normal;
}
.top-secondary-menu .divider {
margin-top: 0 !important;
margin-bottom: 0 !important;
}
@media screen and (max-width: 512px) {
.top-secondary-menu {
left: 4em;
}
}
/** 右侧主操作区 **/
.main {
position: absolute;
left: 22em;
top: 5.6em;
padding-bottom: 5em;
padding-right: 1em;
right: 1em;
}
@media screen and (max-width: 512px) {
.main {
left: 4em;
}
}
.main.without-menu {
left: 9em;
}
.main.without-secondary-menu {
top: 2.9em;
}
@media screen and (max-width: 512px) {
.main.without-menu {
left: 4em;
}
}
.main table td.title {
width: 10em;
}
.main table td.middle-title {
width: 14em;
}
.main table td {
vertical-align: top;
}
.main table td.color-border {
border-left: 1px #276ac6 solid !important;
}
.main table td.vertical-top {
vertical-align: top;
}
.main table td.vertical-middle {
vertical-align: middle;
}
.main table td[colspan="2"] a {
font-weight: normal;
}
.main table td em {
font-weight: normal;
font-style: normal;
font-size: 0.9em;
}
.main h3 {
font-weight: normal;
margin-top: 1em !important;
}
.main h3 span {
font-size: 0.8em;
}
.main h3 span.label {
color: #6435c9;
}
.main h3 a {
margin-left: 1em;
font-size: 14px !important;
right: 1em;
}
.main h3 a::before {
content: "[";
}
.main h3 a::after {
content: "]";
}
.main h4 {
font-weight: normal;
}
.main td span.small {
font-size: 0.8em;
}
.main .button.mini {
font-size: 0.8em;
padding: 0.2em;
margin-left: 1em;
}
.main-menu {
position: fixed;
/**top: 1.05em;**/
top: 2em;
bottom: 0;
overflow-y: auto;
background: #276ac6 !important;
z-index: 10;
}
.main-menu .menu {
background: #276ac6 !important;
}
.main-menu::-webkit-scrollbar {
width: 2px;
}
.main .tab-menu {
margin-top: 1em !important;
margin-bottom: 0 !important;
}
.main .tab-menu .item {
padding: 1em !important;
}
.main .tab-menu .item var {
font-style: normal;
}
.main .tab-menu .item span {
font-size: 0.8em;
padding-left: 0.3em;
}
@media screen and (max-width: 512px) {
.main .tab-menu {
overflow-x: auto;
overflow-y: hidden;
}
.main .tab-menu::-webkit-scrollbar {
height: 4px;
}
}
.main .go-top-btn {
position: fixed;
right: 2.6em;
bottom: 2em;
font-size: 2em;
line-height: 1.4em;
border-radius: 1em;
z-index: 999999;
background: white;
}
/** 子菜单 **/
.main.without-menu .sub-menu {
display: none;
}
.sub-menu {
position: fixed;
left: 8em;
width: 12.5em;
top: 3em;
bottom: 2.8em;
}
.sub-menu .menus-box {
overflow-y: auto;
position: absolute;
top: 0;
bottom: 0;
right: 0;
left: 0;
padding-right: 0.4em !important;
}
.sub-menu .menus-box::-webkit-scrollbar {
width: 4px;
height: 4px;
}
.sub-menu .menu {
max-width: 12em !important;
border-right: 0 !important;
}
@media screen and (max-width: 512px) {
.sub-menu {
position: relative;
width: 100%;
left: 0;
top: 0;
}
.sub-menu .menus-box {
position: relative !important;
}
.sub-menu .menu {
width: 100% !important;
max-width: 30em !important;
}
.sub-menu .menus-box .menu .item {
width: 100% !important;
max-width: 30em !important;
}
}
.sub-menu .menu .item.active {
font-weight: normal !important;
outline: none !important;
}
.sub-menu .menu .item:not(.header) {
padding-top: 0.7em !important;
padding-bottom: 0.7em !important;
}
.sub-menu .menu .item:not(.header) span {
font-size: 0.8em;
display: block;
margin-top: 0.6em !important;
line-height: 1.5;
}
.sub-menu .menu .item:not(.active):hover {
background: rgba(0, 0, 0, 0.05) !important;
border-top: 1px white solid !important;
border-bottom: 1px white solid !important;
margin-top: -1px !important;
margin-bottom: -1px !important;
}
.sub-menu .menu .item.active {
background: rgba(0, 0, 0, 0.05) !important;
}
.sub-menu .menu .item var {
font-style: normal;
}
.sub-menu .menu .item:not(.active) var.grey {
color: grey;
}
.sub-menu .menu .item span:not(.green) {
color: grey;
}
.sub-menu .menu .item span.red {
color: #db2828 !important;
}
.sub-menu .menus-box .menu .item.header {
padding-right: 0.2em !important;
cursor: pointer;
}
.sub-menu .menus-box .menu .item.header span {
font-weight: normal;
color: grey;
font-size: 0.8em;
}
.sub-menu .menus-box .menu a {
display: block;
word-break: break-all;
line-height: 1.6 !important;
}
.sub-menu .menus-box .menu .item .menu {
margin-top: 0 !important;
}
.sub-menu .fourth-menu {
margin-left: 1.2em;
}
.sub-menu .fourth-menu .icon, .sub-menu .third-menu .icon {
float: left !important;
}
/** 右侧文本子菜单 **/
.text.menu {
overflow-x: auto;
}
.text.menu::-webkit-scrollbar {
width: 4px;
height: 4px;
}
/** 脚部相关样式 **/
#footer {
position: fixed;
bottom: 0;
text-align: left;
color: gray;
width: 100%;
border-radius: 0 !important;
z-index: 10;
overflow-x: auto;
}
#footer::-webkit-scrollbar {
height: 2px;
}
#footer a {
font-size: 0.9em;
}
#footer a form {
display: none;
}
#footer a:hover span, #footer a:active span {
display: none;
}
#footer a:hover form, #footer a:active form {
display: block;
}
#footer form input {
padding: 0;
margin: 0;
}
#footer-outer-box {
z-index: 999999;
position: fixed;
left: 0;
top: 0;
right: 0;
background: rgba(0, 0, 0, 0.8);
bottom: 2.6em;
}
#footer-outer-box .qrcode {
width: 20em;
position: absolute;
top: 50%;
left: 50%;
margin-top: -14em;
margin-left: -10em;
}
#footer-outer-box .qrcode img {
width: 100%;
}
#footer-outer-box .qrcode a {
position: absolute;
right: 0.5em;
top: 0.5em;
}
@media screen and (max-width: 512px) {
#footer-outer-box .qrcode {
margin-left: 0;
left: 3.5em;
}
}
/** Vue **/
[v-cloak] {
display: none !important;
}
/** auto complete **/
.autocomplete-box .menu {
background: #eee !important;
}
.autocomplete-box .menu::-webkit-scrollbar {
width: 4px;
}
.autocomplete-box .menu .item {
border-top: none !important;
}
select {
}
/** column **/
@media screen and (max-width: 512px) {
.column:not(.one) {
width: 100% !important;
}
}
/** label **/
label[for] {
cursor: pointer !important;
}
label.blue {
color: #2185d0 !important;
}
/** Menu **/
.first-menu .menu.text {
margin-top: 0 !important;
margin-bottom: 0 !important;
}
.first-menu .divider {
margin-top: 0 !important;
margin-bottom: 0 !important;
}
.second-menu .menu.text {
margin-top: 0 !important;
margin-bottom: 0 !important;
}
.second-menu .menu.text em {
font-style: normal;
}
.second-menu .divider {
margin-top: 0 !important;
}
.menu a {
outline: none;
}
/** var **/
span.olive, var.olive {
color: #b5cc18 !important;
}
var.dash {
border-bottom: 1px dashed grey;
}
/** Message **/
.message .gopher {
width: 30px;
margin-right: 10px;
}
/** checkbox **/
.checkbox label a, .checkbox label {
font-size: 0.8em !important;
}
/** page **/
.page {
margin-top: 1em;
border-left: 1px solid #ddd;
a {
display: inline-block;
background: #fafafa;
color: #666;
padding: 6px 12px;
margin: 0;
font-size: 0.9em;
border: 1px solid #ddd;
border-left: 0;
}
a.active {
background: #2185d0 !important;
color: white;
}
a:hover {
background: #eee;
}
}
/** popup **/
.swal2-html-container {
overflow-x: hidden;
}
.swal2-close, .swal2-close:focus {
border: 0;
}
.swal2-confirm:focus, .swal2-cancel:focus {
border: 3px #ddd solid !important;
}
.swal2-confirm, .swal2-cancel {
border: 3px #fff solid !important;
}
.swal2-cancel {
margin-left: 2em !important;
}
+290
View File
@@ -0,0 +1,290 @@
/** 通用 **/
.clear {
clear: both;
}
.hidden {
display: none;
}
pre {
white-space: pre-wrap;
}
a.disabled,
a.disabled:hover,
a.disabled:active,
span.disabled {
color: #ccc !important;
}
a.enabled,
span.enabled,
span.green {
color: #21ba45;
}
span.grey,
label.grey,
p.grey {
color: grey !important;
}
p.grey {
margin-top: 0.8em;
}
span.red,
pre.red {
color: #db2828;
}
pre:not(.CodeMirror-line) {
font-family: Lato, 'Helvetica Neue', Arial, Helvetica, sans-serif !important;
}
tbody {
background: transparent;
}
.table.width30 {
width: 30em !important;
}
.table.width35 {
width: 35em !important;
}
.table.width40 {
width: 40em !important;
}
.table th,
.table td {
font-size: 0.9em !important;
}
p.comment,
div.comment {
color: rgba(0, 0, 0, 0.3);
padding-top: 0.4em;
}
p.comment em,
div.comment em {
font-style: italic !important;
}
.truncate {
white-space: nowrap;
-ms-text-overflow: ellipsis;
overflow: hidden;
text-overflow: ellipsis;
}
div.margin,
p.margin {
margin-top: 1em;
}
/** 操作按钮容器 **/
.op.one {
width: 4em;
}
.op.two {
width: 7.4em;
}
.op.three {
width: 9em;
}
.op.four {
width: 10em;
}
/** 扩展UI **/
.field.text {
padding: .5em;
}
/** 右侧主操作区 **/
.main {
position: absolute;
left: 22em;
top: 5.6em;
padding-bottom: 5em;
padding-right: 1em;
right: 1em;
}
@media screen and (max-width: 512px) {
.main {
left: 4em;
}
}
.main.without-menu {
left: 9em;
}
.main.without-secondary-menu {
top: 2.9em;
}
@media screen and (max-width: 512px) {
.main.without-menu {
left: 4em;
}
}
.main table td.title {
width: 10em;
}
.main table td.middle-title {
width: 14em;
}
.main table td {
vertical-align: top;
}
.main table td.color-border {
border-left: 1px #276ac6 solid !important;
}
.main table td.vertical-top {
vertical-align: top;
}
.main table td.vertical-middle {
vertical-align: middle;
}
.main table td[colspan="2"] a {
font-weight: normal;
}
.main table td em {
font-weight: normal;
font-style: normal;
font-size: 0.9em;
}
.main h3 {
font-weight: normal;
margin-top: 0.5em !important;
}
.main h3 span {
font-size: 0.8em;
}
.main h3 span.label {
color: #6435c9;
}
.main h3 a {
margin-left: 1em;
font-size: 14px !important;
right: 1em;
}
.main h3 a::before {
content: "[";
}
.main h3 a::after {
content: "]";
}
.main h4 {
font-weight: normal;
}
.main td span.small {
font-size: 0.8em;
}
.main .button.mini {
font-size: 0.8em;
padding: 0.2em;
margin-left: 1em;
}
/** 右侧文本子菜单 **/
.text.menu {
overflow-x: auto;
}
.text.menu::-webkit-scrollbar {
width: 4px;
height: 4px;
}
/** Vue **/
[v-cloak] {
display: none !important;
}
/** auto complete **/
.autocomplete-box .menu {
background: #eee !important;
}
.autocomplete-box .menu::-webkit-scrollbar {
width: 4px;
}
.autocomplete-box .menu .item {
border-top: none !important;
}
/** column **/
@media screen and (max-width: 512px) {
.column:not(.one) {
width: 100% !important;
}
}
/** label **/
label[for] {
cursor: pointer !important;
}
label.blue {
color: #2185d0 !important;
}
td .label.tiny {
padding: 2px;
font-size: 0.9em;
}
/** Menu **/
.first-menu .menu.text {
margin-top: 0 !important;
margin-bottom: 0 !important;
}
.first-menu .divider {
margin-top: 0 !important;
margin-bottom: 0 !important;
}
.second-menu .menu.text {
margin-top: 0 !important;
margin-bottom: 0 !important;
}
.second-menu .menu.text em {
font-style: normal;
}
.second-menu .divider {
margin-top: 0 !important;
}
.menu a {
outline: none;
}
/** var **/
span.olive,
var.olive {
color: #b5cc18 !important;
}
var.dash {
border-bottom: 1px dashed grey;
}
/** Message **/
.message .gopher {
width: 30px;
margin-right: 10px;
}
/** checkbox **/
.checkbox label a,
.checkbox label {
font-size: 0.8em !important;
}
/** page **/
.page {
margin-top: 1em;
border-left: 1px solid #ddd;
}
.page a {
display: inline-block;
background: #fafafa;
color: #666;
padding: 6px 12px;
margin: 0;
font-size: 0.9em;
border: 1px solid #ddd;
border-left: 0;
}
.page a.active {
background: #2185d0 !important;
color: white;
}
.page a:hover {
background: #eee;
}
/** popup **/
.swal2-html-container {
overflow-x: hidden;
}
.swal2-confirm:focus,
.swal2-cancel:focus,
.swal2-close:focus {
border: 3px #ddd solid !important;
}
.swal2-confirm,
.swal2-cancel,
.swal2-close {
border: 3px #fff solid !important;
}
.swal2-cancel {
margin-left: 2em !important;
}
/*# sourceMappingURL=@layout_popup.css.map */
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["@layout_popup.less"],"names":[],"mappings":"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","file":"@layout_popup.css"}
+40
View File
@@ -0,0 +1,40 @@
<!DOCTYPE html>
<html>
<head>
<title>{$.teaTitle}控制台</title>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=0">
<link rel="shortcut icon" href="/images/favicon.png"/>
<link rel="stylesheet" type="text/css" href="/_/@default/@layout_popup.css" media="all"/>
<link rel="stylesheet" type="text/css" href="/css/semantic.iframe.min.css?v=bRafhK" media="all"/>
{$TEA.VUE}
{$echo "header"}
<script type="text/javascript" src="/_/@default/@layout.js"></script>
<script type="text/javascript" src="/ui/components.js"></script>
<script type="text/javascript" src="/js/utils.js"></script>
<script type="text/javascript" src="/js/sweetalert2/dist/sweetalert2.all.min.js"></script>
<style type="text/css">
.main {
left: 0;
top: 0;
bottom: 0;
right: 0;
overflow-y: auto;
padding-bottom: 0em;
}
.main::-webkit-scrollbar {
width: 4px;
}
</style>
</head>
<body>
<div class="main">
<!-- 功能区 -->
{$TEA.VIEW}
</div>
</body>
</html>
+347
View File
@@ -0,0 +1,347 @@
/** 通用 **/
.clear {
clear: both;
}
.hidden {
display: none;
}
pre {
white-space: pre-wrap;
}
a.disabled, a.disabled:hover, a.disabled:active, span.disabled {
color: #ccc !important;
}
a.enabled, span.enabled, span.green {
color: #21ba45;
}
span.grey, label.grey, p.grey {
color: grey !important;
}
p.grey {
margin-top: 0.8em;
}
span.red, pre.red {
color: #db2828;
}
pre:not(.CodeMirror-line) {
font-family: Lato, 'Helvetica Neue', Arial, Helvetica, sans-serif !important;
}
tbody {
background: transparent;
}
.table.width30 {
width: 30em !important;
}
.table.width35 {
width: 35em !important;
}
.table.width40 {
width: 40em !important;
}
.table th, .table td {
font-size: 0.9em !important;
}
p.comment, div.comment {
color: rgba(0, 0, 0, 0.3);
padding-top: 0.4em;
}
p.comment em, div.comment em {
font-style: italic !important;
}
.truncate {
white-space: nowrap;
-ms-text-overflow: ellipsis;
overflow: hidden;
text-overflow: ellipsis;
}
div.margin, p.margin {
margin-top: 1em;
}
/** 操作按钮容器 **/
.op.one {
width: 4em;
}
.op.two {
width: 7.4em;
}
.op.three {
width: 9em;
}
.op.four {
width: 10em;
}
/** 扩展UI **/
.field.text {
padding: .5em;
}
/** 右侧主操作区 **/
.main {
position: absolute;
left: 22em;
top: 5.6em;
padding-bottom: 5em;
padding-right: 1em;
right: 1em;
}
@media screen and (max-width: 512px) {
.main {
left: 4em;
}
}
.main.without-menu {
left: 9em;
}
.main.without-secondary-menu {
top: 2.9em;
}
@media screen and (max-width: 512px) {
.main.without-menu {
left: 4em;
}
}
.main table td.title {
width: 10em;
}
.main table td.middle-title {
width: 14em;
}
.main table td {
vertical-align: top;
}
.main table td.color-border {
border-left: 1px #276ac6 solid !important;
}
.main table td.vertical-top {
vertical-align: top;
}
.main table td.vertical-middle {
vertical-align: middle;
}
.main table td[colspan="2"] a {
font-weight: normal;
}
.main table td em {
font-weight: normal;
font-style: normal;
font-size: 0.9em;
}
.main h3 {
font-weight: normal;
margin-top: 0.5em !important;
}
.main h3 span {
font-size: 0.8em;
}
.main h3 span.label {
color: #6435c9;
}
.main h3 a {
margin-left: 1em;
font-size: 14px !important;
right: 1em;
}
.main h3 a::before {
content: "[";
}
.main h3 a::after {
content: "]";
}
.main h4 {
font-weight: normal;
}
.main td span.small {
font-size: 0.8em;
}
.main .button.mini {
font-size: 0.8em;
padding: 0.2em;
margin-left: 1em;
}
/** 右侧文本子菜单 **/
.text.menu {
overflow-x: auto;
}
.text.menu::-webkit-scrollbar {
width: 4px;
height: 4px;
}
/** Vue **/
[v-cloak] {
display: none !important;
}
/** auto complete **/
.autocomplete-box .menu {
background: #eee !important;
}
.autocomplete-box .menu::-webkit-scrollbar {
width: 4px;
}
.autocomplete-box .menu .item {
border-top: none !important;
}
select {
}
/** column **/
@media screen and (max-width: 512px) {
.column:not(.one) {
width: 100% !important;
}
}
/** label **/
label[for] {
cursor: pointer !important;
}
label.blue {
color: #2185d0 !important;
}
td .label.tiny {
padding: 2px;
font-size: 0.9em;
}
/** Menu **/
.first-menu .menu.text {
margin-top: 0 !important;
margin-bottom: 0 !important;
}
.first-menu .divider {
margin-top: 0 !important;
margin-bottom: 0 !important;
}
.second-menu .menu.text {
margin-top: 0 !important;
margin-bottom: 0 !important;
}
.second-menu .menu.text em {
font-style: normal;
}
.second-menu .divider {
margin-top: 0 !important;
}
.menu a {
outline: none;
}
/** var **/
span.olive, var.olive {
color: #b5cc18 !important;
}
var.dash {
border-bottom: 1px dashed grey;
}
/** Message **/
.message .gopher {
width: 30px;
margin-right: 10px;
}
/** checkbox **/
.checkbox label a, .checkbox label {
font-size: 0.8em !important;
}
/** page **/
.page {
margin-top: 1em;
border-left: 1px solid #ddd;
a {
display: inline-block;
background: #fafafa;
color: #666;
padding: 6px 12px;
margin: 0;
font-size: 0.9em;
border: 1px solid #ddd;
border-left: 0;
}
a.active {
background: #2185d0 !important;
color: white;
}
a:hover {
background: #eee;
}
}
/** popup **/
.swal2-html-container {
overflow-x: hidden;
}
.swal2-confirm:focus, .swal2-cancel:focus, .swal2-close:focus {
border: 3px #ddd solid !important;
}
.swal2-confirm, .swal2-cancel, .swal2-close {
border: 3px #fff solid !important;
}
.swal2-cancel {
margin-left: 2em !important;
}
+1
View File
@@ -0,0 +1 @@
<!-- 预留的菜单位置 -->
+38
View File
@@ -0,0 +1,38 @@
.form-box {
position: fixed;
top: 2.5em;
bottom: 0;
left: 0;
right: 0;
}
form {
position: fixed;
width: 21em;
top: 50%;
left: 50%;
margin-left: -10em;
margin-top: -16em;
}
form .header {
text-align: center;
font-size: 1em !important;
}
form p {
font-size: 0.8em;
margin-top: 0.3em;
margin-bottom: 0;
font-weight: normal;
padding: 0;
}
form .comment {
margin-top: 0.5em;
padding: 0.5em;
color: gray;
}
@media screen and (max-width: 512px) {
form {
width: 80%;
margin-left: -40%;
}
}
/*# sourceMappingURL=index.css.map */
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["index.less"],"names":[],"mappings":"AAAA;EACI,eAAA;EACA,UAAA;EACA,SAAA;EACA,OAAA;EACA,QAAA;;AAGJ;EACI,eAAA;EACA,WAAA;EACA,QAAA;EACA,SAAA;EACA,kBAAA;EACA,iBAAA;;AANJ,IAQC;EACC,kBAAA;EACA,yBAAA;;AAVF,IAaC;EACC,gBAAA;EACA,iBAAA;EACA,gBAAA;EACA,mBAAA;EACA,UAAA;;AAlBF,IAqBC;EACC,iBAAA;EACA,cAAA;EACA,WAAA;;AASD,mBALoC;EACjC;IACI,UAAA;IACA,iBAAA","file":"index.css"}
+58
View File
@@ -0,0 +1,58 @@
<!doctype html>
<html lang="zh">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<link rel="shortcut icon" href="/images/favicon.png"/>
<title>登录Edge管理员系统</title>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=0">
{$TEA.VUE}
{$TEA.SEMANTIC}
<script type="text/javascript" src="/js/md5.min.js"></script>
<script type="text/javascript" src="/js/utils.js"></script>
<script type="text/javascript" src="/js/sweetalert2/dist/sweetalert2.all.min.js"></script>
</head>
<body>
<div>
{$template "/menu"}
<div class="form-box">
<form class="ui form" data-tea-action="$" data-tea-before="submitBefore" data-tea-done="submitDone" data-tea-success="submitSuccess" autocomplete="off">
<input type="hidden" name="password" v-model="passwordMd5"/>
<input type="hidden" name="token" v-model="token"/>
<div class="ui segment stacked">
<div class="ui header">
登录Edge管理员系统
</div>
<div class="ui field">
<div class="ui left icon input">
<i class="ui user icon"></i>
<input type="text" name="username" v-model="username" placeholder="请输入用户名" maxlength="200" ref="usernameRef"/>
</div>
</div>
<div class="ui field">
<div class="ui left icon input">
<i class="ui lock icon"></i>
<input type="password" v-model="password" placeholder="请输入密码" maxlength="200" @input="changePassword()" ref="passwordRef"/>
</div>
</div>
<div class="ui field">
<a href="" @click.prevent="showMoreOptions()">更多选项 <i class="icon angle" :class="{down:!moreOptionsVisible, up:moreOptionsVisible}"></i> </a>
</div>
<div class="ui field" v-show="moreOptionsVisible">
<div class="ui checkbox">
<input type="checkbox" name="remember" value="1" checked="checked"/>
<label>在这个电脑上记住登录(14天)</label>
</div>
</div>
<button class="ui button primary fluid" type="submit" v-if="!isSubmitting">登录</button>
<button class="ui button primary fluid disabled" type="submit" v-if="isSubmitting">登录中...</button>
</div>
</form>
</div>
</div>
</body>
</html>
+39
View File
@@ -0,0 +1,39 @@
Tea.context(function () {
this.username = "";
this.password = "";
this.passwordMd5 = "";
this.encodedFrom = window.encodeURIComponent(this.from);
this.isSubmitting = false;
this.$delay(function () {
this.$find("form input[name='username']").focus();
this.changePassword();
});
this.changePassword = function () {
this.passwordMd5 = md5(this.password.trim());
};
// 更多选项
this.moreOptionsVisible = false;
this.showMoreOptions = function () {
this.moreOptionsVisible = !this.moreOptionsVisible;
};
this.submitBefore = function () {
this.isSubmitting = true;
};
this.submitDone = function () {
this.isSubmitting = false;
};
this.submitSuccess = function () {
if (this.from.length == 0) {
window.location = "/dashboard";
} else {
window.location = this.from;
}
};
});
+42
View File
@@ -0,0 +1,42 @@
.form-box {
position: fixed;
top: 2.5em;
bottom: 0;
left: 0;
right: 0;
}
form {
position: fixed;
width: 21em;
top: 50%;
left: 50%;
margin-left: -10em;
margin-top: -16em;
.header {
text-align: center;
font-size: 1em !important;
}
p {
font-size: 0.8em;
margin-top: 0.3em;
margin-bottom: 0;
font-weight: normal;
padding: 0;
}
.comment {
margin-top: 0.5em;
padding: 0.5em;
color: gray;
}
}
@media screen and (max-width: 512px) {
form {
width: 80%;
margin-left: -40%;
}
}
+4
View File
@@ -0,0 +1,4 @@
<first-menu>
<menu-item href="/nodes" code="index">节点列表</menu-item>
<menu-item href="/nodes/create" code="create">创建节点</menu-item>
</first-menu>
+28
View File
@@ -0,0 +1,28 @@
{$layout}
{$template "menu"}
<form class="ui form" data-tea-action="$" data-tea-success="success">
<table class="ui table definition selectable">
<tr>
<td class="title">节点名称 *</td>
<td>
<input type="text" name="name" maxlength="50" ref="focus"/>
</td>
</tr>
<tr>
<td>所属集群</td>
<td>
<select class="ui dropdown" name="clusterId" style="width:10em">
<option v-for="cluster in clusters" :value="cluster.id">{{cluster.name}}</option>
</select>
</td>
</tr>
<tr>
<td>SSH登录授权</td>
<td>
</td>
</tr>
</table>
<submit-btn></submit-btn>
</form>
+6
View File
@@ -0,0 +1,6 @@
{$layout}
{$template "menu"}
<table class="ui table selectable">
</table>
+4
View File
@@ -0,0 +1,4 @@
<first-menu>
<menu-item code="index">服务列表</menu-item>
<menu-item code="create">创建服务</menu-item>
</first-menu>
+3
View File
@@ -0,0 +1,3 @@
{$layout}
{$template "menu"}
+3
View File
@@ -0,0 +1,3 @@
{$layout}
<p class="comment">暂未开通此功能。</p>