Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Pig
提交
0f086a4a
P
Pig
项目概览
int
/
Pig
上一次同步 12 个月
通知
8
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Pig
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
0f086a4a
编写于
6月 24, 2020
作者:
P
pig666
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
🔖
Releasing / Version tags. 2.8
上级
a060f8d7
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
7 addition
and
1 deletion
+7
-1
.gitignore
.gitignore
+0
-1
pig-visual/pig-sentinel-dashboard/src/main/webapp/resources/dist/css/app.css
...inel-dashboard/src/main/webapp/resources/dist/css/app.css
+5
-0
pig-visual/pig-sentinel-dashboard/src/main/webapp/resources/dist/js/app.js
...ntinel-dashboard/src/main/webapp/resources/dist/js/app.js
+1
-0
pig-visual/pig-sentinel-dashboard/src/main/webapp/resources/dist/js/app.vendor.js
...dashboard/src/main/webapp/resources/dist/js/app.vendor.js
+1
-0
未找到文件。
.gitignore
浏览文件 @
0f086a4a
...
...
@@ -24,7 +24,6 @@ rebel.xml
nbproject/private/
build/
nbbuild/
dist/
nbdist/
.nb-gradle/
...
...
pig-visual/pig-sentinel-dashboard/src/main/webapp/resources/dist/css/app.css
0 → 100755
浏览文件 @
0f086a4a
.chat
,
.timeline
{
list-style
:
none
}
#loading-bar
,
#loading-bar-spinner
{
pointer-events
:
none
;
-webkit-pointer-events
:
none
;
-webkit-transition
:
350ms
linear
all
;
-moz-transition
:
350ms
linear
all
;
-o-transition
:
350ms
linear
all
;
transition
:
350ms
linear
all
}
#loading-bar-spinner
.ng-enter
,
#loading-bar-spinner
.ng-leave.ng-leave-active
,
#loading-bar
.ng-enter
,
#loading-bar
.ng-leave.ng-leave-active
{
opacity
:
0
}
#loading-bar-spinner
.ng-enter.ng-enter-active
,
#loading-bar-spinner
.ng-leave
,
#loading-bar
.ng-enter.ng-enter-active
,
#loading-bar
.ng-leave
{
opacity
:
1
}
#loading-bar
.bar
{
-webkit-transition
:
width
350ms
;
-moz-transition
:
width
350ms
;
-o-transition
:
width
350ms
;
transition
:
width
350ms
;
background
:
#29d
;
position
:
fixed
;
z-index
:
10002
;
top
:
0
;
left
:
0
;
width
:
100%
;
height
:
2px
;
border-bottom-right-radius
:
1px
;
border-top-right-radius
:
1px
}
#loading-bar
.peg
{
position
:
absolute
;
width
:
70px
;
right
:
0
;
top
:
0
;
height
:
2px
;
opacity
:
.45
;
-moz-box-shadow
:
#29d
1px
0
6px
1px
;
-ms-box-shadow
:
#29d
1px
0
6px
1px
;
-webkit-box-shadow
:
#29d
1px
0
6px
1px
;
box-shadow
:
#29d
1px
0
6px
1px
;
-moz-border-radius
:
100%
;
-webkit-border-radius
:
100%
;
border-radius
:
100%
}
#loading-bar-spinner
{
display
:
block
;
position
:
fixed
;
z-index
:
10002
;
top
:
10px
;
left
:
10px
}
#loading-bar-spinner
.spinner-icon
{
width
:
14px
;
height
:
14px
;
border
:
2px
solid
transparent
;
border-top-color
:
#29d
;
border-left-color
:
#29d
;
border-radius
:
50%
;
-webkit-animation
:
loading-bar-spinner
.4s
linear
infinite
;
-moz-animation
:
loading-bar-spinner
.4s
linear
infinite
;
-ms-animation
:
loading-bar-spinner
.4s
linear
infinite
;
-o-animation
:
loading-bar-spinner
.4s
linear
infinite
;
animation
:
loading-bar-spinner
.4s
linear
infinite
}
@-webkit-keyframes
loading-bar-spinner
{
0
%
{
-webkit-transform
:
rotate
(
0
);
transform
:
rotate
(
0
)}
100
%
{
-webkit-transform
:
rotate
(
360deg
);
transform
:
rotate
(
360deg
)}}
@-moz-keyframes
loading-bar-spinner
{
0
%
{
-moz-transform
:
rotate
(
0
);
transform
:
rotate
(
0
)}
100
%
{
-moz-transform
:
rotate
(
360deg
);
transform
:
rotate
(
360deg
)}}
@-o-keyframes
loading-bar-spinner
{
0
%
{
-o-transform
:
rotate
(
0
);
transform
:
rotate
(
0
)}
100
%
{
-o-transform
:
rotate
(
360deg
);
transform
:
rotate
(
360deg
)}}
@-ms-keyframes
loading-bar-spinner
{
0
%
{
-ms-transform
:
rotate
(
0
);
transform
:
rotate
(
0
)}
100
%
{
-ms-transform
:
rotate
(
360deg
);
transform
:
rotate
(
360deg
)}}
@keyframes
loading-bar-spinner
{
0
%
{
transform
:
rotate
(
0
)}
100
%
{
transform
:
rotate
(
360deg
)}}
.bootstrap-switch
{
display
:
inline-block
;
direction
:
ltr
;
cursor
:
pointer
;
border-radius
:
4px
;
border
:
1px
solid
#ccc
;
position
:
relative
;
text-align
:
left
;
overflow
:
hidden
;
line-height
:
8px
;
z-index
:
0
;
-webkit-user-select
:
none
;
-moz-user-select
:
none
;
-ms-user-select
:
none
;
user-select
:
none
;
vertical-align
:
middle
;
-webkit-transition
:
border-color
ease-in-out
.15s
,
box-shadow
ease-in-out
.15s
;
-o-transition
:
border-color
ease-in-out
.15s
,
box-shadow
ease-in-out
.15s
;
transition
:
border-color
ease-in-out
.15s
,
box-shadow
ease-in-out
.15s
}
.bootstrap-switch
.bootstrap-switch-container
{
display
:
inline-block
;
top
:
0
;
border-radius
:
4px
;
-webkit-transform
:
translate3d
(
0
,
0
,
0
);
transform
:
translate3d
(
0
,
0
,
0
)}
.bootstrap-switch
.bootstrap-switch-handle-off
,
.bootstrap-switch
.bootstrap-switch-handle-on
,
.bootstrap-switch
.bootstrap-switch-label
{
-webkit-box-sizing
:
border-box
;
-moz-box-sizing
:
border-box
;
box-sizing
:
border-box
;
cursor
:
pointer
;
display
:
table-cell
;
vertical-align
:
middle
;
padding
:
6px
12px
;
font-size
:
14px
;
line-height
:
20px
}
.bootstrap-switch
.bootstrap-switch-handle-off
,
.bootstrap-switch
.bootstrap-switch-handle-on
{
text-align
:
center
;
z-index
:
1
}
.bootstrap-switch
.bootstrap-switch-handle-off.bootstrap-switch-primary
,
.bootstrap-switch
.bootstrap-switch-handle-on.bootstrap-switch-primary
{
color
:
#fff
;
background
:
#337ab7
}
.bootstrap-switch
.bootstrap-switch-handle-off.bootstrap-switch-info
,
.bootstrap-switch
.bootstrap-switch-handle-on.bootstrap-switch-info
{
color
:
#fff
;
background
:
#5bc0de
}
.bootstrap-switch
.bootstrap-switch-handle-off.bootstrap-switch-warning
,
.bootstrap-switch
.bootstrap-switch-handle-on.bootstrap-switch-warning
{
background
:
#f0ad4e
;
color
:
#fff
}
.bootstrap-switch
.bootstrap-switch-handle-off.bootstrap-switch-danger
,
.bootstrap-switch
.bootstrap-switch-handle-on.bootstrap-switch-danger
{
color
:
#fff
;
background
:
#d9534f
}
.bootstrap-switch
.bootstrap-switch-handle-off.bootstrap-switch-default
,
.bootstrap-switch
.bootstrap-switch-handle-on.bootstrap-switch-default
{
color
:
#000
;
background
:
#eee
}
.bootstrap-switch
.bootstrap-switch-label
{
text-align
:
center
;
margin-top
:
-1px
;
margin-bottom
:
-1px
;
z-index
:
100
;
color
:
#333
;
background
:
#fff
}
.bootstrap-switch
span
::before
{
content
:
"\200b"
}
.bootstrap-switch
.bootstrap-switch-handle-on
{
border-bottom-left-radius
:
3px
;
border-top-left-radius
:
3px
}
.bootstrap-switch
.bootstrap-switch-handle-off
{
border-bottom-right-radius
:
3px
;
border-top-right-radius
:
3px
}
.bootstrap-switch
input
[
type
=
radio
],
.bootstrap-switch
input
[
type
=
checkbox
]
{
position
:
absolute
!important
;
top
:
0
;
left
:
0
;
margin
:
0
;
z-index
:
-1
;
opacity
:
0
;
filter
:
alpha
(
opacity
=
0
);
visibility
:
hidden
}
.bootstrap-switch.bootstrap-switch-mini
.bootstrap-switch-handle-off
,
.bootstrap-switch.bootstrap-switch-mini
.bootstrap-switch-handle-on
,
.bootstrap-switch.bootstrap-switch-mini
.bootstrap-switch-label
{
padding
:
1px
5px
;
font-size
:
12px
;
line-height
:
1.5
}
.bootstrap-switch.bootstrap-switch-small
.bootstrap-switch-handle-off
,
.bootstrap-switch.bootstrap-switch-small
.bootstrap-switch-handle-on
,
.bootstrap-switch.bootstrap-switch-small
.bootstrap-switch-label
{
padding
:
5px
10px
;
font-size
:
12px
;
line-height
:
1.5
}
.bootstrap-switch.bootstrap-switch-large
.bootstrap-switch-handle-off
,
.bootstrap-switch.bootstrap-switch-large
.bootstrap-switch-handle-on
,
.bootstrap-switch.bootstrap-switch-large
.bootstrap-switch-label
{
padding
:
6px
16px
;
font-size
:
18px
;
line-height
:
1.3333333
}
.bootstrap-switch.bootstrap-switch-disabled
,
.bootstrap-switch.bootstrap-switch-indeterminate
,
.bootstrap-switch.bootstrap-switch-readonly
{
cursor
:
default
!important
}
.bootstrap-switch.bootstrap-switch-disabled
.bootstrap-switch-handle-off
,
.bootstrap-switch.bootstrap-switch-disabled
.bootstrap-switch-handle-on
,
.bootstrap-switch.bootstrap-switch-disabled
.bootstrap-switch-label
,
.bootstrap-switch.bootstrap-switch-indeterminate
.bootstrap-switch-handle-off
,
.bootstrap-switch.bootstrap-switch-indeterminate
.bootstrap-switch-handle-on
,
.bootstrap-switch.bootstrap-switch-indeterminate
.bootstrap-switch-label
,
.bootstrap-switch.bootstrap-switch-readonly
.bootstrap-switch-handle-off
,
.bootstrap-switch.bootstrap-switch-readonly
.bootstrap-switch-handle-on
,
.bootstrap-switch.bootstrap-switch-readonly
.bootstrap-switch-label
{
opacity
:
.5
;
filter
:
alpha
(
opacity
=
50
);
cursor
:
default
!important
}
.bootstrap-switch.bootstrap-switch-animate
.bootstrap-switch-container
{
-webkit-transition
:
margin-left
.5s
;
-o-transition
:
margin-left
.5s
;
transition
:
margin-left
.5s
}
.bootstrap-switch.bootstrap-switch-inverse
.bootstrap-switch-handle-on
{
border-radius
:
0
3px
3px
0
}
.bootstrap-switch.bootstrap-switch-inverse
.bootstrap-switch-handle-off
{
border-radius
:
3px
0
0
3px
}
.bootstrap-switch.bootstrap-switch-focused
{
border-color
:
#66afe9
;
outline
:
0
;
-webkit-box-shadow
:
inset
0
1px
1px
rgba
(
0
,
0
,
0
,
.075
),
0
0
8px
rgba
(
102
,
175
,
233
,
.6
);
box-shadow
:
inset
0
1px
1px
rgba
(
0
,
0
,
0
,
.075
),
0
0
8px
rgba
(
102
,
175
,
233
,
.6
)}
.bootstrap-switch.bootstrap-switch-inverse.bootstrap-switch-off
.bootstrap-switch-label
,
.bootstrap-switch.bootstrap-switch-on
.bootstrap-switch-label
{
border-bottom-right-radius
:
3px
;
border-top-right-radius
:
3px
}
.bootstrap-switch.bootstrap-switch-inverse.bootstrap-switch-on
.bootstrap-switch-label
,
.bootstrap-switch.bootstrap-switch-off
.bootstrap-switch-label
{
border-bottom-left-radius
:
3px
;
border-top-left-radius
:
3px
}
.ngdialog
,
.ngdialog-overlay
{
position
:
fixed
;
top
:
0
;
right
:
0
;
bottom
:
0
;
left
:
0
}
@-webkit-keyframes
ngdialog-fadeout
{
0
%
{
opacity
:
1
}
100
%
{
opacity
:
0
}}
@keyframes
ngdialog-fadeout
{
0
%
{
opacity
:
1
}
100
%
{
opacity
:
0
}}
@-webkit-keyframes
ngdialog-fadein
{
0
%
{
opacity
:
0
}
100
%
{
opacity
:
1
}}
@keyframes
ngdialog-fadein
{
0
%
{
opacity
:
0
}
100
%
{
opacity
:
1
}}
.ngdialog
{
box-sizing
:
border-box
;
overflow
:
auto
;
-webkit-overflow-scrolling
:
touch
;
z-index
:
10000
}
.ngdialog
*,
.ngdialog
:after
,
.ngdialog
:before
{
box-sizing
:
inherit
}
.ngdialog.ngdialog-disabled-animation
,
.ngdialog.ngdialog-disabled-animation
.ngdialog-content
,
.ngdialog.ngdialog-disabled-animation
.ngdialog-overlay
{
-webkit-animation
:
none
!important
;
animation
:
none
!important
}
.ngdialog-overlay
{
background
:
rgba
(
0
,
0
,
0
,
.4
);
-webkit-backface-visibility
:
hidden
;
-webkit-animation
:
ngdialog-fadein
.5s
;
animation
:
ngdialog-fadein
.5s
}
.ngdialog-no-overlay
{
pointer-events
:
none
}
.ngdialog.ngdialog-closing
.ngdialog-overlay
{
-webkit-backface-visibility
:
hidden
;
-webkit-animation
:
ngdialog-fadeout
.5s
;
animation
:
ngdialog-fadeout
.5s
}
.ngdialog-content
{
background
:
#fff
;
-webkit-backface-visibility
:
hidden
;
-webkit-animation
:
ngdialog-fadein
.5s
;
animation
:
ngdialog-fadein
.5s
;
pointer-events
:
all
}
.ngdialog.ngdialog-closing
.ngdialog-content
{
-webkit-backface-visibility
:
hidden
;
-webkit-animation
:
ngdialog-fadeout
.5s
;
animation
:
ngdialog-fadeout
.5s
}
.ngdialog-close
:before
{
font-family
:
Helvetica
,
Arial
,
sans-serif
;
content
:
'\00D7'
;
cursor
:
pointer
}
body
.ngdialog-open
,
html
.ngdialog-open
{
overflow
:
hidden
}
@-webkit-keyframes
ngdialog-flyin
{
0
%
{
opacity
:
0
;
-webkit-transform
:
translateY
(
-40px
);
transform
:
translateY
(
-40px
)}
100
%
{
opacity
:
1
;
-webkit-transform
:
translateY
(
0
);
transform
:
translateY
(
0
)}}
@keyframes
ngdialog-flyin
{
0
%
{
opacity
:
0
;
-webkit-transform
:
translateY
(
-40px
);
transform
:
translateY
(
-40px
)}
100
%
{
opacity
:
1
;
-webkit-transform
:
translateY
(
0
);
transform
:
translateY
(
0
)}}
@-webkit-keyframes
ngdialog-flyout
{
0
%
{
opacity
:
1
;
-webkit-transform
:
translateY
(
0
);
transform
:
translateY
(
0
)}
100
%
{
opacity
:
0
;
-webkit-transform
:
translateY
(
-40px
);
transform
:
translateY
(
-40px
)}}
@keyframes
ngdialog-flyout
{
0
%
{
opacity
:
1
;
-webkit-transform
:
translateY
(
0
);
transform
:
translateY
(
0
)}
100
%
{
opacity
:
0
;
-webkit-transform
:
translateY
(
-40px
);
transform
:
translateY
(
-40px
)}}
.ngdialog.ngdialog-theme-default
{
padding-bottom
:
160px
;
padding-top
:
160px
}
.ngdialog.ngdialog-theme-default.ngdialog-closing
.ngdialog-content
{
-webkit-animation
:
ngdialog-flyout
.5s
;
animation
:
ngdialog-flyout
.5s
}
.ngdialog.ngdialog-theme-default
.ngdialog-content
{
-webkit-animation
:
ngdialog-flyin
.5s
;
animation
:
ngdialog-flyin
.5s
;
background
:
#f0f0f0
;
border-radius
:
5px
;
color
:
#444
;
font-family
:
Helvetica
,
sans-serif
;
font-size
:
1.1em
;
line-height
:
1.5em
;
margin
:
0
auto
;
max-width
:
100%
;
padding
:
1em
;
position
:
relative
;
width
:
450px
}
.ngdialog.ngdialog-theme-default
.ngdialog-close
{
border-radius
:
5px
;
cursor
:
pointer
;
position
:
absolute
;
right
:
0
;
top
:
0
}
.ngdialog.ngdialog-theme-default
.ngdialog-close
:before
{
background
:
0
0
;
border-radius
:
3px
;
color
:
#bbb
;
content
:
'\00D7'
;
font-size
:
26px
;
font-weight
:
400
;
height
:
30px
;
line-height
:
26px
;
position
:
absolute
;
right
:
3px
;
text-align
:
center
;
top
:
3px
;
width
:
30px
}
.ngdialog.ngdialog-theme-default
.ngdialog-close
:active:before
,
.ngdialog.ngdialog-theme-default
.ngdialog-close
:hover:before
{
color
:
#777
}
.ngdialog.ngdialog-theme-default
.ngdialog-message
{
margin-bottom
:
.5em
}
.ngdialog.ngdialog-theme-default
.ngdialog-input
{
margin-bottom
:
1em
}
.ngdialog.ngdialog-theme-default
.ngdialog-input
input
[
type
=
text
],
.ngdialog.ngdialog-theme-default
.ngdialog-input
input
[
type
=
password
],
.ngdialog.ngdialog-theme-default
.ngdialog-input
input
[
type
=
email
],
.ngdialog.ngdialog-theme-default
.ngdialog-input
input
[
type
=
url
],
.ngdialog.ngdialog-theme-default
.ngdialog-input
textarea
{
background
:
#fff
;
border
:
0
;
border-radius
:
3px
;
font-family
:
inherit
;
font-size
:
inherit
;
font-weight
:
inherit
;
margin
:
0
0
.25em
;
min-height
:
2.5em
;
padding
:
.25em
.67em
;
width
:
100%
}
.ngdialog.ngdialog-theme-default
.ngdialog-input
input
[
type
=
text
]
:focus
,
.ngdialog.ngdialog-theme-default
.ngdialog-input
input
[
type
=
password
]
:focus
,
.ngdialog.ngdialog-theme-default
.ngdialog-input
input
[
type
=
email
]
:focus
,
.ngdialog.ngdialog-theme-default
.ngdialog-input
input
[
type
=
url
]
:focus
,
.ngdialog.ngdialog-theme-default
.ngdialog-input
textarea
:focus
{
box-shadow
:
inset
0
0
0
2px
#8dbdf1
;
outline
:
0
}
.ngdialog.ngdialog-theme-default
.ngdialog-buttons
:after
{
content
:
''
;
display
:
table
;
clear
:
both
}
.ngdialog.ngdialog-theme-default
.ngdialog-button
{
border
:
0
;
border-radius
:
3px
;
cursor
:
pointer
;
float
:
right
;
font-family
:
inherit
;
font-size
:
.8em
;
letter-spacing
:
.1em
;
line-height
:
1em
;
margin
:
0
0
0
.5em
;
padding
:
.75em
2em
;
text-transform
:
uppercase
}
.ngdialog.ngdialog-theme-default
.ngdialog-button
:focus
{
-webkit-animation
:
ngdialog-pulse
1.1s
infinite
;
animation
:
ngdialog-pulse
1.1s
infinite
;
outline
:
0
}
.btn
:active
,
.btn
:focus
,
.selectize-input
>
input
:focus
{
outline
:
0
!important
}
@media
(
max-width
:
568px
){
.ngdialog.ngdialog-theme-default
.ngdialog-button
:focus
{
-webkit-animation
:
none
;
animation
:
none
}}
.ngdialog.ngdialog-theme-default
.ngdialog-button.ngdialog-button-primary
{
background
:
#3288e6
;
color
:
#fff
}
.ngdialog.ngdialog-theme-default
.ngdialog-button.ngdialog-button-secondary
{
background
:
#e0e0e0
;
color
:
#777
}
.datetimepicker
{
border-radius
:
4px
;
direction
:
ltr
;
display
:
block
;
margin-top
:
1px
;
-webkit-user-select
:
none
;
-moz-user-select
:
none
;
-ms-user-select
:
none
;
user-select
:
none
;
width
:
320px
}
.datetimepicker
>
div
{
display
:
none
}
.datetimepicker
.hour
,
.datetimepicker
.minute
{
height
:
34px
;
line-height
:
34px
;
margin
:
0
;
width
:
25%
}
.datetimepicker
.table
{
margin
:
0
}
.datetimepicker
.table
td
,
.datetimepicker
.table
th
{
border
:
0
;
border-radius
:
4px
;
height
:
20px
;
text-align
:
center
}
.datetimepicker
.day
:hover
,
.datetimepicker
.hour
:hover
,
.datetimepicker
.left
:hover
,
.datetimepicker
.minute
:hover
,
.datetimepicker
.right
:hover
,
.datetimepicker
.switch
:hover
{
background
:
#eee
;
cursor
:
pointer
}
.datetimepicker
.disabled
,
.datetimepicker
.disabled
:hover
{
background
:
0
0
;
color
:
#ebebeb
;
cursor
:
default
}
.datetimepicker
.active
,
.datetimepicker
.active.disabled
,
.datetimepicker
.active.disabled
:hover
,
.datetimepicker
.active
:hover
{
background-color
:
#04c
;
background-image
:
linear-gradient
(
to
bottom
,
#08c
,
#04c
);
background-repeat
:
repeat-x
;
border-color
:
#04c
#04c
#002a80
;
color
:
#fff
;
filter
:
progid
:
dximagetransform
.
microsoft
.
gradient
(
startColorstr
=
'#08c'
,
endColorstr
=
'#04c'
,
GradientType
=
0
);
text-shadow
:
0
-1px
0
rgba
(
0
,
0
,
0
,
.25
)}
.datetimepicker
.current
,
.datetimepicker
.current.disabled
,
.datetimepicker
.current.disabled
:hover
,
.datetimepicker
.current
:hover
{
background-color
:
#e5e5e5
}
.datetimepicker
.active.active
,
.datetimepicker
.active.disabled
,
.datetimepicker
.active.disabled.active
,
.datetimepicker
.active.disabled.disabled
,
.datetimepicker
.active.disabled
:active
,
.datetimepicker
.active.disabled
:hover
,
.datetimepicker
.active.disabled
:hover
.active
,
.datetimepicker
.active.disabled
:hover
.disabled
,
.datetimepicker
.active.disabled
:hover:active
,
.datetimepicker
.active.disabled
:hover:hover
,
.datetimepicker
.active
:active
,
.datetimepicker
.active
:hover
,
.datetimepicker
.active
:hover
.active
,
.datetimepicker
.active
:hover
.disabled
,
.datetimepicker
.active
:hover:active
,
.datetimepicker
.active
:hover:hover
,
.datetimepicker
span
.active.disabled
:hover
[
disabled
],
.datetimepicker
span
.active.disabled
[
disabled
],
.datetimepicker
span
.active
:hover
[
disabled
],
.datetimepicker
span
.active
[
disabled
],
.datetimepicker
td
.active.disabled
:hover
[
disabled
],
.datetimepicker
td
.active.disabled
[
disabled
],
.datetimepicker
td
.active
:hover
[
disabled
],
.datetimepicker
td
.active
[
disabled
]
{
background-color
:
#04c
}
.datetimepicker
span
{
border-radius
:
4px
;
cursor
:
pointer
;
display
:
block
;
float
:
left
;
height
:
54px
;
line-height
:
54px
;
margin
:
1%
;
width
:
23%
}
.datetimepicker
span
:hover
{
background
:
#eee
}
.datetimepicker
.future
,
.datetimepicker
.past
{
color
:
#999
}
.ui-notification
{
position
:
fixed
;
z-index
:
9999
;
width
:
300px
;
-webkit-transition
:
all
ease
.5s
;
-o-transition
:
all
ease
.5s
;
transition
:
all
ease
.5s
;
color
:
#fff
;
border-radius
:
0
;
background
:
#337ab7
;
box-shadow
:
5px
5px
10px
rgba
(
0
,
0
,
0
,
.3
)}
.ui-notification.clickable
{
cursor
:
pointer
}
.ui-notification.clickable
:hover
{
opacity
:
.7
}
.ui-notification.killed
{
-webkit-transition
:
opacity
ease
1s
;
-o-transition
:
opacity
ease
1s
;
transition
:
opacity
ease
1s
;
opacity
:
0
}
.ui-notification
>
h3
{
font-size
:
14px
;
font-weight
:
700
;
display
:
block
;
margin
:
10px
10px
0
;
padding
:
0
0
5px
;
text-align
:
left
;
border-bottom
:
1px
solid
rgba
(
255
,
255
,
255
,
.3
)}
.ui-notification
a
{
color
:
#fff
}
.ui-notification
a
:hover
{
text-decoration
:
underline
}
.ui-notification
>
.message
{
margin
:
10px
}
.ui-notification.warning
{
color
:
#fff
;
background
:
#f0ad4e
}
.ui-notification.error
{
color
:
#fff
;
background
:
#d9534f
}
.ui-notification.success
{
color
:
#fff
;
background
:
#5cb85c
}
.ui-notification.info
{
color
:
#fff
;
background
:
#5bc0de
}
table
.rz-table
{
table-layout
:
fixed
;
border-collapse
:
collapse
}
table
.rz-table
th
{
position
:
relative
;
min-width
:
25px
}
table
.rz-table
th
.rz-handle
{
width
:
10px
;
height
:
100%
;
position
:
absolute
;
top
:
0
;
right
:
0
;
cursor
:
ew-resize
!important
}
table
.rz-table
th
.rz-handle.rz-handle-active
{
border-right
:
1px
dotted
#000
}
.selectize-control.plugin-drag_drop.multi
>
.selectize-input
>
div
.ui-sortable-placeholder
{
visibility
:
visible
!important
;
background
:
#f2f2f2
!important
;
background
:
rgba
(
0
,
0
,
0
,
.06
)
!important
;
border
:
0
!important
;
-webkit-box-shadow
:
inset
0
0
12px
4px
#fff
;
box-shadow
:
inset
0
0
12px
4px
#fff
}
.selectize-control.plugin-drag_drop
.ui-sortable-placeholder
::after
{
content
:
'!'
;
visibility
:
hidden
}
.selectize-control.plugin-drag_drop
.ui-sortable-helper
{
-webkit-box-shadow
:
0
2px
5px
rgba
(
0
,
0
,
0
,
.2
);
box-shadow
:
0
2px
5px
rgba
(
0
,
0
,
0
,
.2
)}
.selectize-dropdown-header
{
position
:
relative
;
padding
:
5px
8px
;
border-bottom
:
1px
solid
#d0d0d0
;
background
:
#f8f8f8
;
-webkit-border-radius
:
3px
3px
0
0
;
-moz-border-radius
:
3px
3px
0
0
;
border-radius
:
3px
3px
0
0
}
.selectize-dropdown-header-close
{
position
:
absolute
;
right
:
8px
;
top
:
50%
;
color
:
#303030
;
opacity
:
.4
;
margin-top
:
-12px
;
line-height
:
20px
;
font-size
:
20px
!important
}
.selectize-dropdown-header-close
:hover
{
color
:
#000
}
.selectize-dropdown.plugin-optgroup_columns
.optgroup
{
border-right
:
1px
solid
#f2f2f2
;
border-top
:
0
none
;
float
:
left
;
-webkit-box-sizing
:
border-box
;
-moz-box-sizing
:
border-box
;
box-sizing
:
border-box
}
.selectize-control.plugin-remove_button
[
data-value
]
.remove
,
.selectize-input
{
-webkit-box-sizing
:
border-box
;
-moz-box-sizing
:
border-box
;
display
:
inline-block
}
.selectize-dropdown.plugin-optgroup_columns
.optgroup
:last-child
{
border-right
:
0
none
}
.selectize-dropdown.plugin-optgroup_columns
.optgroup
:before
{
display
:
none
}
.selectize-dropdown.plugin-optgroup_columns
.optgroup-header
{
border-top
:
0
none
}
.selectize-control.plugin-remove_button
[
data-value
]
{
position
:
relative
;
padding-right
:
24px
!important
}
.selectize-control.plugin-remove_button
[
data-value
]
.remove
{
z-index
:
1
;
position
:
absolute
;
top
:
0
;
right
:
0
;
bottom
:
0
;
width
:
17px
;
text-align
:
center
;
font-weight
:
700
;
font-size
:
12px
;
color
:
inherit
;
text-decoration
:
none
;
vertical-align
:
middle
;
padding
:
2px
0
0
;
border-left
:
1px
solid
#d0d0d0
;
-webkit-border-radius
:
0
2px
2px
0
;
-moz-border-radius
:
0
2px
2px
0
;
border-radius
:
0
2px
2px
0
;
box-sizing
:
border-box
}
.selectize-control.plugin-remove_button
[
data-value
]
.remove
:hover
{
background
:
rgba
(
0
,
0
,
0
,
.05
)}
.selectize-control.plugin-remove_button
[
data-value
]
.active
.remove
{
border-left-color
:
#cacaca
}
.selectize-control.plugin-remove_button
.disabled
[
data-value
]
.remove
:hover
{
background
:
0
0
}
.selectize-control.plugin-remove_button
.disabled
[
data-value
]
.remove
{
border-left-color
:
#fff
}
.selectize-control.plugin-remove_button
.remove-single
{
position
:
absolute
;
right
:
0
;
top
:
0
;
font-size
:
23px
}
.selectize-control
,
.selectize-input
{
position
:
relative
}
.selectize-dropdown
,
.selectize-input
,
.selectize-input
input
{
color
:
#303030
;
font-family
:
inherit
;
font-size
:
13px
;
line-height
:
18px
;
-webkit-font-smoothing
:
inherit
}
.selectize-control.single
.selectize-input.input-active
,
.selectize-input
{
background
:
#fff
;
cursor
:
text
;
display
:
inline-block
}
.selectize-input
{
border
:
1px
solid
#d0d0d0
;
padding
:
8px
;
width
:
100%
;
overflow
:
hidden
;
z-index
:
1
;
box-sizing
:
border-box
;
-webkit-box-shadow
:
inset
0
1px
1px
rgba
(
0
,
0
,
0
,
.1
);
box-shadow
:
inset
0
1px
1px
rgba
(
0
,
0
,
0
,
.1
);
-webkit-border-radius
:
3px
;
-moz-border-radius
:
3px
;
border-radius
:
3px
}
.selectize-control.multi
.selectize-input.has-items
{
padding
:
6px
8px
3px
}
.selectize-input.full
{
background-color
:
#fff
}
.selectize-input.disabled
,
.selectize-input.disabled
*
{
cursor
:
default
!important
}
.selectize-input.focus
{
-webkit-box-shadow
:
inset
0
1px
2px
rgba
(
0
,
0
,
0
,
.15
);
box-shadow
:
inset
0
1px
2px
rgba
(
0
,
0
,
0
,
.15
)}
.selectize-input.dropdown-active
{
-webkit-border-radius
:
3px
3px
0
0
;
-moz-border-radius
:
3px
3px
0
0
;
border-radius
:
3px
3px
0
0
}
.selectize-input
>*
{
vertical-align
:
baseline
;
display
:
-moz-inline-stack
;
display
:
inline-block
;
zoom
:
1
}
.selectize-control.multi
.selectize-input
>
div
{
cursor
:
pointer
;
margin
:
0
3px
3px
0
;
padding
:
2px
6px
;
background
:
#f2f2f2
;
color
:
#303030
;
border
:
0
solid
#d0d0d0
}
.selectize-control.multi
.selectize-input
>
div
.active
{
background
:
#e8e8e8
;
color
:
#303030
;
border
:
0
solid
#cacaca
}
.selectize-control.multi
.selectize-input.disabled
>
div
,
.selectize-control.multi
.selectize-input.disabled
>
div
.active
{
color
:
#7d7d7d
;
background
:
#fff
;
border
:
0
solid
#fff
}
.selectize-input
>
input
{
display
:
inline-block
!important
;
padding
:
0
!important
;
min-height
:
0
!important
;
max-height
:
none
!important
;
max-width
:
100%
!important
;
margin
:
0
2px
0
0
!important
;
text-indent
:
0
!important
;
border
:
0
!important
;
background
:
0
0
!important
;
line-height
:
inherit
!important
;
-webkit-user-select
:
auto
!important
;
-webkit-box-shadow
:
none
!important
;
box-shadow
:
none
!important
}
.selectize-input
>
input
::-ms-clear
{
display
:
none
}
.selectize-input
::after
{
content
:
' '
;
display
:
block
;
clear
:
left
}
.selectize-input.dropdown-active
::before
{
content
:
' '
;
display
:
block
;
position
:
absolute
;
background
:
#f0f0f0
;
height
:
1px
;
bottom
:
0
;
left
:
0
;
right
:
0
}
.selectize-dropdown
{
position
:
absolute
;
z-index
:
10
;
border
:
1px
solid
#d0d0d0
;
background
:
#fff
;
margin
:
-1px
0
0
;
border-top
:
0
none
;
-webkit-box-sizing
:
border-box
;
-moz-box-sizing
:
border-box
;
box-sizing
:
border-box
;
-webkit-box-shadow
:
0
1px
3px
rgba
(
0
,
0
,
0
,
.1
);
box-shadow
:
0
1px
3px
rgba
(
0
,
0
,
0
,
.1
);
-webkit-border-radius
:
0
0
3px
3px
;
-moz-border-radius
:
0
0
3px
3px
;
border-radius
:
0
0
3px
3px
}
.selectize-dropdown
[
data-selectable
]
{
cursor
:
pointer
;
overflow
:
hidden
}
.selectize-dropdown
[
data-selectable
]
.highlight
{
background
:
rgba
(
125
,
168
,
208
,
.2
);
-webkit-border-radius
:
1px
;
-moz-border-radius
:
1px
;
border-radius
:
1px
}
.selectize-dropdown
.optgroup-header
,
.selectize-dropdown
.option
{
padding
:
5px
8px
}
.selectize-dropdown
.option
,
.selectize-dropdown
[
data-disabled
],
.selectize-dropdown
[
data-disabled
]
[
data-selectable
]
.option
{
cursor
:
inherit
;
opacity
:
.5
}
.selectize-dropdown
[
data-selectable
]
.option
{
opacity
:
1
}
.selectize-dropdown
.optgroup
:first-child
.optgroup-header
{
border-top
:
0
none
}
.selectize-dropdown
.optgroup-header
{
color
:
#303030
;
background
:
#fff
;
cursor
:
default
}
.selectize-dropdown
.active
{
background-color
:
#f5fafd
;
color
:
#495c68
}
.selectize-dropdown
.active.create
{
color
:
#495c68
}
.selectize-dropdown
.create
{
color
:
rgba
(
48
,
48
,
48
,
.5
)}
.selectize-dropdown-content
{
overflow-y
:
auto
;
overflow-x
:
hidden
;
max-height
:
200px
;
-webkit-overflow-scrolling
:
touch
}
.selectize-control.single
.selectize-input
,
.selectize-control.single
.selectize-input
input
{
cursor
:
pointer
}
.selectize-control.single
.selectize-input.input-active
,
.selectize-control.single
.selectize-input.input-active
input
{
cursor
:
text
}
.selectize-control.single
.selectize-input
:after
{
content
:
' '
;
display
:
block
;
position
:
absolute
;
top
:
50%
;
right
:
15px
;
margin-top
:
-3px
;
width
:
0
;
height
:
0
;
border-style
:
solid
;
border-width
:
5px
5px
0
;
border-color
:
grey
transparent
transparent
}
.selectize-control.single
.selectize-input.dropdown-active
:after
{
margin-top
:
-4px
;
border-width
:
0
5px
5px
;
border-color
:
transparent
transparent
grey
}
.selectize-control.rtl.single
.selectize-input
:after
{
left
:
15px
;
right
:
auto
}
.selectize-control.rtl
.selectize-input
>
input
{
margin
:
0
4px
0
-2px
!important
}
.selectize-control
.selectize-input.disabled
{
opacity
:
.5
;
background-color
:
#fafafa
}
/*!
* Start Bootstrap - SB Admin 2 Bootstrap Admin Theme (http://startbootstrap.com)
* Code licensed under the Apache License v2.0.
* For details, see http://www.apache.org/licenses/LICENSE-2.0.
*/
body
{
background-color
:
#f8f8f8
}
.example
{
padding
:
.625rem
1.825rem
.625rem
2.5rem
;
border
:
1px
dashed
#ccc
;
position
:
relative
;
margin
:
0
0
.625rem
;
background-color
:
#fff
}
dl
dd
,
dl
dt
{
line-height
:
1.25rem
}
dl
dt
{
font-style
:
normal
;
font-weight
:
700
}
dl
dd
{
margin-left
:
.9375rem
}
dl
.horizontal
dt
{
float
:
left
;
width
:
10rem
;
overflow
:
hidden
;
clear
:
left
;
text-align
:
right
;
text-overflow
:
ellipsis
;
white-space
:
nowrap
}
dl
.horizontal
dd
{
margin-left
:
11.25rem
}
#wrapper
{
width
:
100%
}
#page-wrapper
{
min-height
:
568px
;
background-color
:
#fff
}
@media
(
min-width
:
768px
){
#page-wrapper
{
position
:
inherit
;
margin
:
0
0
0
250px
;
padding
:
0
30px
;
border-left
:
1px
solid
#e7e7e7
}}
.navbar-top-links
{
margin-right
:
0
}
.navbar-top-links
li
{
display
:
inline-block
}
.flot-chart
,
.navbar-top-links
.dropdown-menu
li
{
display
:
block
}
.navbar-top-links
li
:last-child
{
margin-right
:
15px
}
.navbar-top-links
li
a
{
padding
:
15px
;
min-height
:
50px
}
.navbar-top-links
.dropdown-menu
li
:last-child
{
margin-right
:
0
}
.navbar-top-links
.dropdown-menu
li
a
{
padding
:
3px
20px
;
min-height
:
0
}
.navbar-top-links
.dropdown-menu
li
a
div
{
white-space
:
normal
}
.navbar-top-links
.dropdown-alerts
,
.navbar-top-links
.dropdown-messages
,
.navbar-top-links
.dropdown-tasks
{
width
:
310px
;
min-width
:
0
}
.navbar-top-links
.dropdown-messages
{
margin-left
:
5px
}
.navbar-top-links
.dropdown-tasks
{
margin-left
:
-59px
}
.navbar-top-links
.dropdown-alerts
{
margin-left
:
-123px
}
.navbar-top-links
.dropdown-user
{
right
:
0
;
left
:
auto
}
.sidebar
.sidebar-search
{
padding
:
15px
}
.sidebar
ul
li
{
border-bottom
:
1px
solid
#e7e7e7
}
.sidebar
ul
li
a
.active
{
background-color
:
#fff
;
color
:
#fff
}
.sidebar
.arrow
{
float
:
right
}
.sidebar
.fa.arrow
:before
{
content
:
"\f104"
}
.sidebar
.active
>
a
>
.fa.arrow
:before
{
content
:
"\f107"
}
.sidebar
.nav-second-level
li
,
.sidebar
.nav-third-level
li
{
border-bottom
:
0
!important
}
.sidebar
.nav-second-level
li
a
{
padding-left
:
37px
}
.sidebar
.nav-third-level
li
a
{
padding-left
:
52px
}
@media
(
min-width
:
768px
){
.sidebar
{
z-index
:
1
;
position
:
absolute
;
width
:
250px
;
margin-top
:
51px
}
.navbar-top-links
.dropdown-alerts
,
.navbar-top-links
.dropdown-messages
,
.navbar-top-links
.dropdown-tasks
{
margin-left
:
auto
}}
.btn-outline
{
color
:
inherit
;
background-color
:
transparent
;
transition
:
all
.5s
}
.btn-primary.btn-outline
{
color
:
#428bca
}
.btn-success.btn-outline
{
color
:
#5cb85c
}
.btn-info.btn-outline
{
color
:
#5bc0de
}
.btn-warning.btn-outline
{
color
:
#f0ad4e
}
.btn-danger.btn-outline
{
color
:
#d9534f
}
.btn-danger.btn-outline
:hover
,
.btn-info.btn-outline
:hover
,
.btn-primary.btn-outline
:hover
,
.btn-success.btn-outline
:hover
,
.btn-warning.btn-outline
:hover
{
color
:
#fff
}
.chat
{
margin
:
0
;
padding
:
0
}
.chat
li
{
margin-bottom
:
10px
;
padding-bottom
:
5px
;
border-bottom
:
1px
dotted
#999
}
.chat
li
.left
.chat-body
{
margin-left
:
60px
}
.chat
li
.right
.chat-body
{
margin-right
:
60px
}
.chat
li
.chat-body
p
{
margin
:
0
}
.chat
.glyphicon
,
.panel
.slidedown
.glyphicon
{
margin-right
:
5px
}
.chat-panel
.panel-body
{
height
:
350px
;
overflow-y
:
scroll
}
.login-panel
{
margin-top
:
25%
}
.flot-chart
{
height
:
400px
}
.flot-chart-content
{
width
:
100%
;
height
:
100%
}
.dataTables_wrapper
{
position
:
relative
;
clear
:
both
}
table
.dataTable
thead
.sorting
,
table
.dataTable
thead
.sorting_asc
,
table
.dataTable
thead
.sorting_asc_disabled
,
table
.dataTable
thead
.sorting_desc
,
table
.dataTable
thead
.sorting_desc_disabled
{
background
:
0
0
}
table
.dataTable
thead
.sorting_asc
:after
{
content
:
"\f0de"
;
float
:
right
;
font-family
:
fontawesome
}
table
.dataTable
thead
.sorting_desc
:after
{
content
:
"\f0dd"
;
float
:
right
;
font-family
:
fontawesome
}
table
.dataTable
thead
.sorting
:after
{
content
:
"\f0dc"
;
float
:
right
;
font-family
:
fontawesome
;
color
:
rgba
(
50
,
50
,
50
,
.5
)}
.btn-circle
{
width
:
30px
;
height
:
30px
;
padding
:
6px
0
;
border-radius
:
15px
;
text-align
:
center
;
font-size
:
12px
;
line-height
:
1.428571429
}
.btn-circle.btn-lg
{
width
:
50px
;
height
:
50px
;
padding
:
10px
16px
;
border-radius
:
25px
;
font-size
:
18px
;
line-height
:
1.33
}
.btn-circle.btn-xl
{
width
:
70px
;
height
:
70px
;
padding
:
10px
16px
;
border-radius
:
35px
;
font-size
:
24px
;
line-height
:
1.33
}
.show-grid
[
class
^=
col-
]
{
padding-top
:
10px
;
padding-bottom
:
10px
;
border
:
1px
solid
#ddd
;
background-color
:
#eee
!important
}
.show-grid
{
margin
:
15px
0
}
.huge
{
font-size
:
40px
}
.panel-green
{
border-color
:
#5cb85c
}
.panel-green
.panel-heading
{
border-color
:
#5cb85c
;
color
:
#fff
;
background-color
:
#5cb85c
}
.panel-green
a
{
color
:
#5cb85c
}
.panel-green
a
:hover
{
color
:
#3d8b3d
}
.panel-red
{
border-color
:
#d9534f
}
.panel-red
.panel-heading
{
border-color
:
#d9534f
;
color
:
#fff
;
background-color
:
#d9534f
}
.panel-red
a
{
color
:
#d9534f
}
.panel-red
a
:hover
{
color
:
#b52b27
}
.panel-yellow
{
border-color
:
#f0ad4e
}
.panel-yellow
.panel-heading
{
border-color
:
#f0ad4e
;
color
:
#fff
;
background-color
:
#f0ad4e
}
.panel-yellow
a
{
color
:
#f0ad4e
}
.panel-yellow
a
:hover
{
color
:
#df8a13
}
.timeline
{
position
:
relative
;
padding
:
20px
0
}
.timeline
:before
{
content
:
" "
;
position
:
absolute
;
top
:
0
;
bottom
:
0
;
left
:
50%
;
width
:
3px
;
margin-left
:
-1.5px
;
background-color
:
#eee
}
.timeline
>
li
{
position
:
relative
;
margin-bottom
:
20px
}
.timeline
>
li
:after
,
.timeline
>
li
:before
{
content
:
" "
;
display
:
table
}
.timeline
>
li
:after
{
clear
:
both
}
.timeline
>
li
>
.timeline-panel
{
float
:
left
;
position
:
relative
;
width
:
46%
;
padding
:
20px
;
border
:
1px
solid
#d4d4d4
;
border-radius
:
2px
;
-webkit-box-shadow
:
0
1px
6px
rgba
(
0
,
0
,
0
,
.175
);
box-shadow
:
0
1px
6px
rgba
(
0
,
0
,
0
,
.175
)}
.timeline
>
li
>
.timeline-panel
:before
{
content
:
" "
;
display
:
inline-block
;
position
:
absolute
;
top
:
26px
;
right
:
-15px
;
border-top
:
15px
solid
transparent
;
border-right
:
0
solid
#ccc
;
border-bottom
:
15px
solid
transparent
;
border-left
:
15px
solid
#ccc
}
.timeline
>
li
>
.timeline-panel
:after
{
content
:
" "
;
display
:
inline-block
;
position
:
absolute
;
top
:
27px
;
right
:
-14px
;
border-top
:
14px
solid
transparent
;
border-right
:
0
solid
#fff
;
border-bottom
:
14px
solid
transparent
;
border-left
:
14px
solid
#fff
}
.timeline
>
li
>
.timeline-badge
{
z-index
:
100
;
position
:
absolute
;
top
:
16px
;
left
:
50%
;
width
:
50px
;
height
:
50px
;
margin-left
:
-25px
;
border-radius
:
50%
;
text-align
:
center
;
font-size
:
1.4em
;
line-height
:
50px
;
color
:
#fff
;
background-color
:
#999
}
.timeline
>
li
.timeline-inverted
>
.timeline-panel
{
float
:
right
}
.timeline
>
li
.timeline-inverted
>
.timeline-panel
:before
{
right
:
auto
;
left
:
-15px
;
border-right-width
:
15px
;
border-left-width
:
0
}
.timeline
>
li
.timeline-inverted
>
.timeline-panel
:after
{
right
:
auto
;
left
:
-14px
;
border-right-width
:
14px
;
border-left-width
:
0
}
.timeline-badge.primary
{
background-color
:
#2e6da4
!important
}
.timeline-badge.success
{
background-color
:
#3f903f
!important
}
.timeline-badge.warning
{
background-color
:
#f0ad4e
!important
}
.timeline-badge.danger
{
background-color
:
#d9534f
!important
}
.timeline-badge.info
{
background-color
:
#5bc0de
!important
}
.timeline-title
{
margin-top
:
0
;
color
:
inherit
}
.timeline-body
>
p
,
.timeline-body
>
ul
{
margin-bottom
:
0
}
.timeline-body
>
p
+
p
{
margin-top
:
5px
}
@media
(
max-width
:
767px
){
ul
.timeline
:before
{
left
:
40px
}
ul
.timeline
>
li
>
.timeline-panel
{
width
:
calc
(
100%
-
90px
);
width
:
-moz-calc
(
100%
-
90px
);
width
:
-webkit-calc
(
100%
-
90px
);
float
:
right
}
ul
.timeline
>
li
>
.timeline-badge
{
top
:
16px
;
left
:
15px
;
margin-left
:
0
}
ul
.timeline
>
li
>
.timeline-panel
:before
{
right
:
auto
;
left
:
-15px
;
border-right-width
:
15px
;
border-left-width
:
0
}
ul
.timeline
>
li
>
.timeline-panel
:after
{
right
:
auto
;
left
:
-14px
;
border-right-width
:
14px
;
border-left-width
:
0
}}
.header
,
.jumbotron
{
border-bottom
:
1px
solid
#e5e5e5
}
.btn
{
height
:
32px
}
.width-200
{
max-width
:
200px
}
.width-300
,
.witdh-300
{
max-width
:
300px
}
body
{
padding
:
0
}
.footer
,
.header
,
.marketing
{
padding-left
:
15px
;
padding-right
:
15px
}
.header
{
margin-bottom
:
10px
}
.header
h3
{
margin-top
:
0
;
margin-bottom
:
0
;
line-height
:
40px
;
padding-bottom
:
19px
}
.card
.detail
,
.card
.detail-brand
{
line-height
:
98px
;
text-align
:
center
}
.footer
{
padding-top
:
19px
;
color
:
#777
;
border-top
:
1px
solid
#e5e5e5
}
.container-narrow
>
hr
{
margin
:
30px
0
}
.jumbotron
{
text-align
:
center
}
.jumbotron
.btn
{
font-size
:
21px
;
padding
:
14px
24px
}
.marketing
{
margin
:
40px
0
}
.marketing
p
+
h4
{
margin-top
:
28px
}
@media
screen
and
(
min-width
:
768px
){
.container
{
width
:
inherit
;
margin-left
:
60px
;
margin-right
:
5px
}
.footer
,
.header
,
.marketing
{
padding-left
:
0
;
padding-right
:
0
}
.header
{
margin-bottom
:
30px
}
.jumbotron
{
border-bottom
:
0
}}
.navbar-inverse
.navbar-nav
>
li
>
a
{
color
:
#b0ddce
;
font-size
:
15px
}
.navbar-inverse
.navbar-nav
>
.open
>
a
,
.navbar-inverse
.navbar-nav
>
.open
>
a
:focus
,
.navbar-inverse
.navbar-nav
>
.open
>
a
:hover
{
background-color
:
#1b926c
}
@media
(
min-width
:
900px
){
.navbar-right
,
.navbar-right
~
.navbar-right
{
margin-right
:
0
}
.navbar-left
{
float
:
left
!important
}
.navbar-right
{
float
:
right
!important
}}
.dropdown-menu
{
min-width
:
100px
!important
}
.nav-sidebar
li
.active
a
{
background
:
#DDD
}
.dropdown-menu
>
li
>
a
:focus
,
.dropdown-menu
>
li
>
a
:hover
{
background
:
#1d9d74
;
color
:
#fff
}
.broadcast-message
,
.broadcast-message-preview
{
padding
:
10px
;
text-align
:
center
;
background
:
#555
;
color
:
#BBB
;
margin-top
:
50px
}
.card
{
position
:
relative
;
border
:
1px
solid
#d9d9d9
;
color
:
#666
;
background-color
:
#fff
;
width
:
100%
;
border-radius
:
5px
}
.card
.card-header
,
.tools-header
{
border-top-left-radius
:
4px
;
border-top-right-radius
:
4px
}
.card
.card-header
{
padding
:
9px
0
;
height
:
40px
;
background
:
#555
;
color
:
#fff
;
text-align
:
center
}
.card
.card-body
{
padding
:
12px
10px
}
.card
.card-footer
{
height
:
20px
;
font-size
:
10px
;
color
:
#777
;
margin
:
-15px
20px
5px
}
.card
.detail-brand
{
float
:
left
;
width
:
30%
;
font-size
:
30px
;
color
:
#fff
}
.card
.default
{
background
:
#1d9d74
}
.card
.info
{
background
:
#6EBEE7
}
.card
.warn
{
background
:
#ED7F54
}
.card
.danger
{
background
:
#6583BE
}
.card
.detail
.text-default
{
color
:
#1d9d74
}
.card
.detail
.text-info
{
color
:
#6EBEE7
}
.card
.detail
.text-warn
{
color
:
#ED7F54
}
.card
.detail
.text-danger
{
color
:
#6583BE
}
.card
.detail
{
float
:
right
;
width
:
70%
}
.card
.detail
.text
{
font-size
:
12px
}
.card
.detail
.number
{
font-size
:
30px
;
font-weight
:
500
}
.h100
{
height
:
100px
}
.inline
{
display
:
inline
}
.separator
{
height
:
1px
;
background-color
:
#e5e5e5
;
margin-top
:
10px
}
.card
>
.card-body
>
table
>
tbody
>
tr
>
td
,
.card
>
.card-body
>
table
>
thead
>
tr
>
td
{
word-wrap
:
break-word
;
word-break
:
break-all
}
.card
>
.card-body
>
table
>
thead
>
tr
>
td
{
font-weight
:
500
;
font-size
:
13px
;
text-align
:
center
}
.card
>
.card-body
>
table
>
thead
>
tr
>
td
>
span
{
font-weight
:
500
;
font-size
:
10px
}
.card
>
.card-body
>
table
>
tbody
>
tr
>
td
{
font-size
:
12px
;
text-align
:
center
}
.card
>
.card-body
>
table
>
tbody
>
tr
>
td
>
a
{
color
:
#666
}
.thumbnails
>
.card
>
.card-body
>
table
>
tbody
>
tr
>
td
,
.thumbnails
>
.card
>
.card-body
>
table
>
thead
>
tr
>
td
{
font-size
:
12px
;
color
:
#777
;
word-wrap
:
break-word
;
word-break
:
break-all
}
.thumbnails
>
.card
>
.card-body
>
table
>
thead
>
tr
>
td
:nth-child
(
n
+
2
)
{
text-align
:
center
}
.thumbnails
>
.card
>
.card-body
>
table
>
tbody
>
tr
>
td
:nth-child
(
n
+
2
)
{
font-weight
:
700
;
text-align
:
center
}
.thumbnails
>
.card
>
.card-body
>
table
>
tbody
>
tr
>
td
:nth-child
(
1
),
.thumbnails
>
.card
>
.card-body
>
table
>
thead
>
tr
>
td
:nth-child
(
1
)
{
text-align
:
left
}
.tools-header
{
background
:
#f5f5f5
;
padding
:
9px
0
;
height
:
40px
}
.tools-header
.brand
{
font-size
:
13px
;
margin
:
2px
10px
;
font-weight
:
700
;
float
:
left
}
.tools-header
.brand
>
a
{
color
:
#666
}
.tools-header
>
a
,
.tools-header
>
button
,
.tools-header
>
select
{
float
:
right
;
max-width
:
80px
;
margin
:
1px
10px
;
height
:
25px
;
padding
:
0
10px
;
line-height
:
25px
;
color
:
#666
}
.tools-header
.paged
{
margin-right
:
0
}
.btn.btn-danger-tag
{
color
:
#fff
;
background-color
:
#d9534f
;
border-color
:
#d43f3a
;
line-height
:
1px
;
font-size
:
11px
;
padding
:
4px
}
.btn.btn-danger
{
color
:
#333
;
background-color
:
#fff
;
border-color
:
#ccc
}
.btn.btn-danger
:active
,
.btn.btn-danger
:focus
,
.btn.btn-danger
:hover
{
color
:
#d9534f
;
border-color
:
#d9534f
;
background
:
#fff
}
.form-control
{
height
:
32px
}
.input-label
:before
{
display
:
inline-block
;
content
:
"*"
;
color
:
#f44336
;
font-family
:
SimSun
;
font-size
:
12px
;
-webkit-transform
:
TranslateX
(
-10px
);
-ms-transform
:
TranslateX
(
-10px
);
transform
:
TranslateX
(
-10px
)}
.badge-main
,
.label.label-main
{
color
:
#fff
;
background-color
:
#1d9d74
;
border-color
:
#1d9d74
}
.bootstrap-tagsinput
{
background-color
:
#fff
;
border
:
1px
solid
#ccc
;
box-shadow
:
inset
0
1px
1px
rgba
(
0
,
0
,
0
,
.075
);
display
:
inline-block
;
padding
:
4px
6px
;
color
:
#555
;
vertical-align
:
middle
;
border-radius
:
4px
;
width
:
85%
;
height
:
100px
;
line-height
:
20px
;
cursor
:
text
}
.bootstrap-tagsinput
>
.dropdown-menu
{
min-width
:
40px
;
font-size
:
12px
}
.bootstrap-tagsinput
>
.dropdown-menu
>
.active
>
a
,
.bootstrap-tagsinput
>
.dropdown-menu
>
.active
>
a
:focus
,
.bootstrap-tagsinput
>
.dropdown-menu
>
.active
>
a
:hover
{
background-image
:
-webkit-linear-gradient
(
top
,
#1d9d74
0
,
#1d9d74
100%
);
background-image
:
-o-linear-gradient
(
top
,
#1d9d74
0
,
#1d9d74
100%
);
background-image
:
-webkit-gradient
(
linear
,
left
top
,
left
bottom
,
from
(
#1d9d74
),
to
(
#1d9d74
));
background-image
:
linear-gradient
(
to
bottom
,
#1d9d74
0
,
#1d9d74
100%
);
filter
:
progid
:
DXImageTransform
.
Microsoft
.
gradient
(
startColorstr
=
'#1d9d74'
,
endColorstr
=
'#1d9d74'
,
GradientType
=
0
);
background-repeat
:
repeat-x
;
color
:
#fff
;
text-decoration
:
none
;
outline
:
0
;
background-color
:
#1d9d74
}
.inputs-header
{
padding
:
9px
0
;
height
:
50px
;
border-top-left-radius
:
4px
;
border-top-right-radius
:
4px
}
.inputs-header
.brand
{
font-size
:
13px
;
margin
:
2px
10px
;
font-weight
:
700
;
float
:
left
}
.inputs-header
.brand
>
a
{
color
:
#666
}
.inputs-header
>
input
{
float
:
right
;
margin
:
1px
10px
;
height
:
30px
;
padding
:
0
10px
;
color
:
#666
}
.inputs-header
>
a
{
float
:
right
;
margin
:
1px
10px
;
height
:
30px
;
padding
:
5
5px
}
.inputs-header
>
select
{
float
:
right
;
max-width
:
80px
;
margin
:
1px
10px
;
padding
:
0
10px
;
color
:
#666
;
height
:
25px
;
font-size
:
12px
}
.witdh-150
{
max-width
:
150px
}
.witdh-200
{
max-width
:
200px
}
.card.highlight
{
border-color
:
#d9534f
}
.card
.pagination-footer
{
height
:
40px
;
font-size
:
10px
;
color
:
#777
;
margin
:
-15px
20px
5px
}
.card
.pagination-footer
.tools
{
font-size
:
12px
;
margin
:
11px
20px
11px
0
;
float
:
right
;
display
:
inline
}
.card
>
.pagination-footer
>
.tools
>
span
>
input
{
height
:
25px
;
max-width
:
50px
;
display
:
inline
}
.pagination
{
display
:
inline-block
;
padding-left
:
0
;
margin
:
8px
0
;
float
:
right
;
border-radius
:
4px
}
.pagination
>
a
{
margin-right
:
5px
;
height
:
28px
;
width
:
28px
;
padding
:
5px
0
}
.datepicker
>
.table
>
tbody
>
tr
>
td
,
.datepicker
>
.table
>
thead
>
tr
>
td
,
.timepicker
>
.table
>
tbody
>
tr
>
td
,
.timepicker
>
.table
>
thead
>
tr
>
td
{
padding
:
5px
3px
}
.datepicker
>
.table
>
tbody
>
tr
>
td
>
.btn
,
.datepicker
>
.table
>
thead
>
tr
>
td
>
.btn
,
.timepicker
>
.table
>
tbody
>
tr
>
td
>
.btn
,
.timepicker
>
.table
>
thead
>
tr
>
td
>
.btn
{
border
:
1px
solid
#FFFDFD
}
.datepicker
>
.table
>
tbody
>
tr
>
td
>
.btn-default
:active
,
.datepicker
>
.table
>
tbody
>
tr
>
td
>
.btn-default
:focus
,
.datepicker
>
.table
>
tbody
>
tr
>
td
>
.btn-default
:hover
,
.datepicker
>
.table
>
thead
>
tr
>
td
>
.btn-default
:active
,
.datepicker
>
.table
>
thead
>
tr
>
td
>
.btn-default
:focus
,
.datepicker
>
.table
>
thead
>
tr
>
td
>
.btn-default
:hover
,
.timepicker
>
.table
>
tbody
>
tr
>
td
>
.btn-default
:active
,
.timepicker
>
.table
>
tbody
>
tr
>
td
>
.btn-default
:focus
,
.timepicker
>
.table
>
tbody
>
tr
>
td
>
.btn-default
:hover
,
.timepicker
>
.table
>
thead
>
tr
>
td
>
.btn-default
:active
,
.timepicker
>
.table
>
thead
>
tr
>
td
>
.btn-default
:focus
,
.timepicker
>
.table
>
thead
>
tr
>
td
>
.btn-default
:hover
{
color
:
#1d9d74
;
border-color
:
#1d9d74
;
background
:
#fff
}
.datepicker
>
.table
>
tbody
>
tr
>
td
>
a
,
.datepicker
>
.table
>
thead
>
tr
>
td
>
a
,
.timepicker
>
.table
>
tbody
>
tr
>
td
>
a
,
.timepicker
>
.table
>
thead
>
tr
>
td
>
a
{
height
:
25px
;
width
:
25px
;
padding
:
3px
0
}
.datepicker
>
.table
>
tbody
>
tr
:first-child
>
td
>
a
{
padding
:
4px
0
}
.datepicker
>
.table
>
tbody
>
tr
>
td
>
a
.btn.active
,
.datepicker
>
.table
>
thead
>
tr
>
td
>
a
.btn.active
,
.timepicker
>
.table
>
tbody
>
tr
>
td
>
a
.btn.active
,
.timepicker
>
.table
>
thead
>
tr
>
td
>
a
.btn.active
{
color
:
#1d9d74
;
border-color
:
#1d9d74
;
background
:
#fff
;
box-shadow
:
inset
0
0
0
rgba
(
0
,
0
,
0
,
.125
)}
.datepicker
>
.table
>
thead
>
tr
>
td
:not
(
:first-child
)
:last-child
>
a
,
.timepicker
>
.table
>
thead
>
tr
>
td
:not
(
:first-child
)
:last-child
>
a
{
height
:
25px
;
width
:
50px
;
padding
:
5px
0
}
.datepicker
>
.table
>
tbody
>
tr
>
td
>
a
,
.timepicker
>
.table
>
tbody
>
tr
>
td
>
a
{
margin-left
:
8px
}
.sortorder
:after
{
content
:
'\25b2'
}
.sortorder.reverse
:after
{
content
:
'\25bc'
}
.input-control
select
{
-moz-appearance
:
none
;
-webkit-appearance
:
none
;
appearance
:
none
;
position
:
relative
;
border
:
1px
solid
#d9d9d9
;
width
:
100%
;
height
:
100%
;
padding
:
.3125rem
;
z-index
:
0
}
.navbar-inverse
{
background-color
:
#337ab7
;
border-color
:
#337ab7
}
.sidebar
{
z-index
:
1
;
width
:
220px
;
top
:
0
;
left
:
0
;
height
:
100%
}
#page-wrapper
{
position
:
inherit
;
margin
:
70px
0
0
220px
;
padding
:
12px
30px
;
border-left
:
0
solid
#e7e7e7
}
.sidebar
.sidebar-nav.navbar-collapse
{
background-color
:
#F5F5F5
;
position
:
relative
;
color
:
#000
;
width
:
100%
;
padding
:
0
;
margin
:
0
;
list-style
:
none
inside
}
.sidebar
a
{
color
:
#555
}
.sidebar
ul
li
:hover
{
color
:
red
}
.form-control
{
border-radius
:
8px
}
.form-control
:focus
,
.highlight-border
{
border-color
:
#337ab7
;
box-shadow
:
0
0
0
rgba
(
0
,
0
,
0
,
.075
)
inset
,
0
0
0
rgba
(
29
,
157
,
116
,
1
)}
.btn-outline-primary.focus
,
.btn-outline-primary
:focus
,
.btn-outline-primary
:not
(
:disabled
)
:not
(
.disabled
)
.active
:focus
,
.btn-outline-primary
:not
(
:disabled
)
:not
(
.disabled
)
:active:focus
,
.show
>
.btn-outline-primary.dropdown-toggle
:focus
{
box-shadow
:
0
0
0
.2rem
rgba
(
0
,
123
,
255
,
.5
)}
.browsehappy
{
margin
:
.2em
0
;
background
:
#ccc
;
color
:
#000
;
padding
:
.2em
0
}
.btn.btn-main
{
color
:
#fff
;
background-color
:
#337ab7
;
border-color
:
#337ab7
}
.btn-default-inverse
,
.btn-default-inverse
:focus
,
.btn-default-inverse
:hover
,
.btn-default
:active
{
color
:
#337ab7
;
border-color
:
#337ab7
;
background
:
#fff
}
.btn-danger-inverse
,
.btn-danger-inverse
:focus
,
.btn-danger-inverse
:hover
,
.btn-danger
:active
{
color
:
#d9534f
;
border-color
:
#d9534f
;
background
:
#fff
}
.btn-tab-active
,
.btn-tab-active
:focus
,
.btn-tab-active
:hover
,
.btn-tab-default
:active
,
.btn-tab-default
:focus
,
.btn-tab-default
:hover
{
color
:
#337ab7
;
border-color
:
#337ab7
;
background
:
#fff
;
font-weight
:
600
}
.btn-tab-default
{
color
:
#777
;
background
:
#fff
;
font-weight
:
600
}
.pagination
>
.btn.active
{
color
:
#fff
;
background-color
:
#337ab7
;
border-color
:
#337ab7
}
.btn-default
:active
,
.btn-default
:focus
,
.btn-default
:hover
{
color
:
#337ab7
;
border-color
:
#337ab7
;
background
:
#fff
}
.bootstrap-switch.bootstrap-switch-on
{
border-color
:
#337ab7
}
.bootstrap-switch
.bootstrap-switch-handle-off.bootstrap-switch-success
,
.bootstrap-switch
.bootstrap-switch-handle-on.bootstrap-switch-success
{
color
:
#fff
;
background
:
#337ab7
}
.selectize-input-200
>
.selectize-input
{
min-width
:
200px
;
border-color
:
#337ab7
}
.btn-outline-primary
{
color
:
#007bff
;
background-color
:
transparent
;
background-image
:
none
;
border-color
:
#007bff
}
.btn-outline-primary
:hover
{
color
:
#fff
;
background-color
:
#007bff
;
border-color
:
#007bff
}
.btn-outline-primary.disabled
,
.btn-outline-primary
:disabled
{
color
:
#007bff
;
background-color
:
transparent
}
.btn-outline-primary
:not
(
:disabled
)
:not
(
.disabled
)
.active
,
.btn-outline-primary
:not
(
:disabled
)
:not
(
.disabled
)
:active
,
.show
>
.btn-outline-primary.dropdown-toggle
{
color
:
#fff
;
background-color
:
#007bff
;
border-color
:
#007bff
}
.btn-outline-secondary.focus
,
.btn-outline-secondary
:focus
,
.btn-outline-secondary
:not
(
:disabled
)
:not
(
.disabled
)
.active
:focus
,
.btn-outline-secondary
:not
(
:disabled
)
:not
(
.disabled
)
:active:focus
,
.show
>
.btn-outline-secondary.dropdown-toggle
:focus
{
box-shadow
:
0
0
0
.2rem
rgba
(
108
,
117
,
125
,
.5
)}
.btn-outline-secondary
{
color
:
#6c757d
;
background-color
:
transparent
;
background-image
:
none
;
border-color
:
#6c757d
}
.btn-outline-secondary
:hover
{
color
:
#fff
;
background-color
:
#6c757d
;
border-color
:
#6c757d
}
.btn-outline-secondary.disabled
,
.btn-outline-secondary
:disabled
{
color
:
#6c757d
;
background-color
:
transparent
}
.btn-outline-secondary
:not
(
:disabled
)
:not
(
.disabled
)
.active
,
.btn-outline-secondary
:not
(
:disabled
)
:not
(
.disabled
)
:active
,
.show
>
.btn-outline-secondary.dropdown-toggle
{
color
:
#fff
;
background-color
:
#6c757d
;
border-color
:
#6c757d
}
.btn-outline-success.focus
,
.btn-outline-success
:focus
,
.btn-outline-success
:not
(
:disabled
)
:not
(
.disabled
)
.active
:focus
,
.btn-outline-success
:not
(
:disabled
)
:not
(
.disabled
)
:active:focus
,
.show
>
.btn-outline-success.dropdown-toggle
:focus
{
box-shadow
:
0
0
0
.2rem
rgba
(
40
,
167
,
69
,
.5
)}
.btn-outline-success
{
color
:
#28a745
;
background-color
:
transparent
;
background-image
:
none
;
border-color
:
#28a745
}
.btn-outline-success
:hover
{
color
:
#fff
;
background-color
:
#28a745
;
border-color
:
#28a745
}
.btn-outline-success.disabled
,
.btn-outline-success
:disabled
{
color
:
#28a745
;
background-color
:
transparent
}
.btn-outline-success
:not
(
:disabled
)
:not
(
.disabled
)
.active
,
.btn-outline-success
:not
(
:disabled
)
:not
(
.disabled
)
:active
,
.show
>
.btn-outline-success.dropdown-toggle
{
color
:
#fff
;
background-color
:
#28a745
;
border-color
:
#28a745
}
.btn-outline-info.focus
,
.btn-outline-info
:focus
,
.btn-outline-info
:not
(
:disabled
)
:not
(
.disabled
)
.active
:focus
,
.btn-outline-info
:not
(
:disabled
)
:not
(
.disabled
)
:active:focus
,
.show
>
.btn-outline-info.dropdown-toggle
:focus
{
box-shadow
:
0
0
0
.2rem
rgba
(
23
,
162
,
184
,
.5
)}
.btn-outline-info
{
color
:
#17a2b8
;
background-color
:
transparent
;
background-image
:
none
;
border-color
:
#17a2b8
}
.btn-outline-info
:hover
{
color
:
#fff
;
background-color
:
#17a2b8
;
border-color
:
#17a2b8
}
.btn-outline-info.disabled
,
.btn-outline-info
:disabled
{
color
:
#17a2b8
;
background-color
:
transparent
}
.btn-outline-info
:not
(
:disabled
)
:not
(
.disabled
)
.active
,
.btn-outline-info
:not
(
:disabled
)
:not
(
.disabled
)
:active
,
.show
>
.btn-outline-info.dropdown-toggle
{
color
:
#fff
;
background-color
:
#17a2b8
;
border-color
:
#17a2b8
}
.btn-outline-warning.focus
,
.btn-outline-warning
:focus
,
.btn-outline-warning
:not
(
:disabled
)
:not
(
.disabled
)
.active
:focus
,
.btn-outline-warning
:not
(
:disabled
)
:not
(
.disabled
)
:active:focus
,
.show
>
.btn-outline-warning.dropdown-toggle
:focus
{
box-shadow
:
0
0
0
.2rem
rgba
(
255
,
193
,
7
,
.5
)}
.btn-outline-warning
{
color
:
#ffc107
;
background-color
:
transparent
;
background-image
:
none
;
border-color
:
#ffc107
}
.btn-outline-warning
:hover
{
color
:
#212529
;
background-color
:
#ffc107
;
border-color
:
#ffc107
}
.btn-outline-warning.disabled
,
.btn-outline-warning
:disabled
{
color
:
#ffc107
;
background-color
:
transparent
}
.btn-outline-warning
:not
(
:disabled
)
:not
(
.disabled
)
.active
,
.btn-outline-warning
:not
(
:disabled
)
:not
(
.disabled
)
:active
,
.show
>
.btn-outline-warning.dropdown-toggle
{
color
:
#212529
;
background-color
:
#ffc107
;
border-color
:
#ffc107
}
.btn-outline-danger.focus
,
.btn-outline-danger
:focus
,
.btn-outline-danger
:not
(
:disabled
)
:not
(
.disabled
)
.active
:focus
,
.btn-outline-danger
:not
(
:disabled
)
:not
(
.disabled
)
:active:focus
,
.show
>
.btn-outline-danger.dropdown-toggle
:focus
{
box-shadow
:
0
0
0
.2rem
rgba
(
220
,
53
,
69
,
.5
)}
.btn-outline-danger
{
color
:
#dc3545
;
background-color
:
transparent
;
background-image
:
none
;
border-color
:
#dc3545
}
.btn-outline-danger
:hover
{
color
:
#fff
;
background-color
:
#dc3545
;
border-color
:
#dc3545
}
.btn-outline-danger.disabled
,
.btn-outline-danger
:disabled
{
color
:
#dc3545
;
background-color
:
transparent
}
.btn-outline-danger
:not
(
:disabled
)
:not
(
.disabled
)
.active
,
.btn-outline-danger
:not
(
:disabled
)
:not
(
.disabled
)
:active
,
.show
>
.btn-outline-danger.dropdown-toggle
{
color
:
#fff
;
background-color
:
#dc3545
;
border-color
:
#dc3545
}
.btn-outline-light.focus
,
.btn-outline-light
:focus
,
.btn-outline-light
:not
(
:disabled
)
:not
(
.disabled
)
.active
:focus
,
.btn-outline-light
:not
(
:disabled
)
:not
(
.disabled
)
:active:focus
,
.show
>
.btn-outline-light.dropdown-toggle
:focus
{
box-shadow
:
0
0
0
.2rem
rgba
(
248
,
249
,
250
,
.5
)}
.btn-outline-light
{
color
:
#f8f9fa
;
background-color
:
transparent
;
background-image
:
none
;
border-color
:
#f8f9fa
}
.btn-outline-light
:hover
{
color
:
#212529
;
background-color
:
#f8f9fa
;
border-color
:
#f8f9fa
}
.btn-outline-light.disabled
,
.btn-outline-light
:disabled
{
color
:
#f8f9fa
;
background-color
:
transparent
}
.btn-outline-light
:not
(
:disabled
)
:not
(
.disabled
)
.active
,
.btn-outline-light
:not
(
:disabled
)
:not
(
.disabled
)
:active
,
.show
>
.btn-outline-light.dropdown-toggle
{
color
:
#212529
;
background-color
:
#f8f9fa
;
border-color
:
#f8f9fa
}
.btn-outline-dark.focus
,
.btn-outline-dark
:focus
,
.btn-outline-dark
:not
(
:disabled
)
:not
(
.disabled
)
.active
:focus
,
.btn-outline-dark
:not
(
:disabled
)
:not
(
.disabled
)
:active:focus
,
.show
>
.btn-outline-dark.dropdown-toggle
:focus
{
box-shadow
:
0
0
0
.2rem
rgba
(
52
,
58
,
64
,
.5
)}
.btn-outline-dark
{
color
:
#343a40
;
background-color
:
transparent
;
background-image
:
none
;
border-color
:
#343a40
}
.btn-outline-dark
:hover
{
color
:
#fff
;
background-color
:
#343a40
;
border-color
:
#343a40
}
.btn-outline-dark.disabled
,
.btn-outline-dark
:disabled
{
color
:
#343a40
;
background-color
:
transparent
}
.btn-outline-dark
:not
(
:disabled
)
:not
(
.disabled
)
.active
,
.btn-outline-dark
:not
(
:disabled
)
:not
(
.disabled
)
:active
,
.show
>
.btn-outline-dark.dropdown-toggle
{
color
:
#fff
;
background-color
:
#343a40
;
border-color
:
#343a40
}
\ No newline at end of file
pig-visual/pig-sentinel-dashboard/src/main/webapp/resources/dist/js/app.js
0 → 100755
浏览文件 @
0f086a4a
"
use strict
"
;
var
app
;
angular
.
module
(
"
sentinelDashboardApp
"
,[
"
oc.lazyLoad
"
,
"
ui.router
"
,
"
ui.bootstrap
"
,
"
angular-loading-bar
"
,
"
ngDialog
"
,
"
ui.bootstrap.datetimepicker
"
,
"
ui-notification
"
,
"
rzTable
"
,
"
angular-clipboard
"
,
"
selectize
"
,
"
angularUtils.directives.dirPagination
"
]).
factory
(
"
AuthInterceptor
"
,[
"
$window
"
,
"
$state
"
,
function
(
t
,
r
){
return
{
responseError
:
function
(
e
){
return
401
===
e
.
status
&&
(
t
.
localStorage
.
removeItem
(
"
session_sentinel_admin
"
),
r
.
go
(
"
login
"
)),
e
},
response
:
function
(
e
){
return
e
},
request
:
function
(
e
){
return
e
},
requestError
:
function
(
e
){
return
e
}}}]).
config
([
"
$stateProvider
"
,
"
$urlRouterProvider
"
,
"
$ocLazyLoadProvider
"
,
"
$httpProvider
"
,
function
(
e
,
t
,
r
,
a
){
a
.
interceptors
.
push
(
"
AuthInterceptor
"
),
r
.
config
({
debug
:
!
1
,
events
:
!
0
}),
t
.
otherwise
(
"
/dashboard/home
"
),
e
.
state
(
"
login
"
,{
url
:
"
/login
"
,
templateUrl
:
"
app/views/login.html
"
,
controller
:
"
LoginCtl
"
,
resolve
:{
loadMyFiles
:[
"
$ocLazyLoad
"
,
function
(
e
){
return
e
.
load
({
name
:
"
sentinelDashboardApp
"
,
files
:[
"
app/scripts/controllers/login.js
"
]})}]}}).
state
(
"
dashboard
"
,{
url
:
"
/dashboard
"
,
templateUrl
:
"
app/views/dashboard/main.html
"
,
resolve
:{
loadMyDirectives
:[
"
$ocLazyLoad
"
,
function
(
e
){
return
e
.
load
({
name
:
"
sentinelDashboardApp
"
,
files
:[
"
app/scripts/directives/header/header.js
"
,
"
app/scripts/directives/sidebar/sidebar.js
"
,
"
app/scripts/directives/sidebar/sidebar-search/sidebar-search.js
"
]})}]}}).
state
(
"
dashboard.home
"
,{
url
:
"
/home
"
,
templateUrl
:
"
app/views/dashboard/home.html
"
,
resolve
:{
loadMyFiles
:[
"
$ocLazyLoad
"
,
function
(
e
){
return
e
.
load
({
name
:
"
sentinelDashboardApp
"
,
files
:[
"
app/scripts/controllers/main.js
"
]})}]}}).
state
(
"
dashboard.flowV1
"
,{
templateUrl
:
"
app/views/flow_v1.html
"
,
url
:
"
/flow/:app
"
,
controller
:
"
FlowControllerV1
"
,
resolve
:{
loadMyFiles
:[
"
$ocLazyLoad
"
,
function
(
e
){
return
e
.
load
({
name
:
"
sentinelDashboardApp
"
,
files
:[
"
app/scripts/controllers/flow_v1.js
"
]})}]}}).
state
(
"
dashboard.flow
"
,{
templateUrl
:
"
app/views/flow_v2.html
"
,
url
:
"
/v2/flow/:app
"
,
controller
:
"
FlowControllerV2
"
,
resolve
:{
loadMyFiles
:[
"
$ocLazyLoad
"
,
function
(
e
){
return
e
.
load
({
name
:
"
sentinelDashboardApp
"
,
files
:[
"
app/scripts/controllers/flow_v2.js
"
]})}]}}).
state
(
"
dashboard.paramFlow
"
,{
templateUrl
:
"
app/views/param_flow.html
"
,
url
:
"
/paramFlow/:app
"
,
controller
:
"
ParamFlowController
"
,
resolve
:{
loadMyFiles
:[
"
$ocLazyLoad
"
,
function
(
e
){
return
e
.
load
({
name
:
"
sentinelDashboardApp
"
,
files
:[
"
app/scripts/controllers/param_flow.js
"
]})}]}}).
state
(
"
dashboard.clusterAppAssignManage
"
,{
templateUrl
:
"
app/views/cluster_app_assign_manage.html
"
,
url
:
"
/cluster/assign_manage/:app
"
,
controller
:
"
SentinelClusterAppAssignManageController
"
,
resolve
:{
loadMyFiles
:[
"
$ocLazyLoad
"
,
function
(
e
){
return
e
.
load
({
name
:
"
sentinelDashboardApp
"
,
files
:[
"
app/scripts/controllers/cluster_app_assign_manage.js
"
]})}]}}).
state
(
"
dashboard.clusterAppServerList
"
,{
templateUrl
:
"
app/views/cluster_app_server_list.html
"
,
url
:
"
/cluster/server/:app
"
,
controller
:
"
SentinelClusterAppServerListController
"
,
resolve
:{
loadMyFiles
:[
"
$ocLazyLoad
"
,
function
(
e
){
return
e
.
load
({
name
:
"
sentinelDashboardApp
"
,
files
:[
"
app/scripts/controllers/cluster_app_server_list.js
"
]})}]}}).
state
(
"
dashboard.clusterAppClientList
"
,{
templateUrl
:
"
app/views/cluster_app_client_list.html
"
,
url
:
"
/cluster/client/:app
"
,
controller
:
"
SentinelClusterAppTokenClientListController
"
,
resolve
:{
loadMyFiles
:[
"
$ocLazyLoad
"
,
function
(
e
){
return
e
.
load
({
name
:
"
sentinelDashboardApp
"
,
files
:[
"
app/scripts/controllers/cluster_app_token_client_list.js
"
]})}]}}).
state
(
"
dashboard.clusterSingle
"
,{
templateUrl
:
"
app/views/cluster_single_config.html
"
,
url
:
"
/cluster/single/:app
"
,
controller
:
"
SentinelClusterSingleController
"
,
resolve
:{
loadMyFiles
:[
"
$ocLazyLoad
"
,
function
(
e
){
return
e
.
load
({
name
:
"
sentinelDashboardApp
"
,
files
:[
"
app/scripts/controllers/cluster_single.js
"
]})}]}}).
state
(
"
dashboard.authority
"
,{
templateUrl
:
"
app/views/authority.html
"
,
url
:
"
/authority/:app
"
,
controller
:
"
AuthorityRuleController
"
,
resolve
:{
loadMyFiles
:[
"
$ocLazyLoad
"
,
function
(
e
){
return
e
.
load
({
name
:
"
sentinelDashboardApp
"
,
files
:[
"
app/scripts/controllers/authority.js
"
]})}]}}).
state
(
"
dashboard.degrade
"
,{
templateUrl
:
"
app/views/degrade.html
"
,
url
:
"
/degrade/:app
"
,
controller
:
"
DegradeCtl
"
,
resolve
:{
loadMyFiles
:[
"
$ocLazyLoad
"
,
function
(
e
){
return
e
.
load
({
name
:
"
sentinelDashboardApp
"
,
files
:[
"
app/scripts/controllers/degrade.js
"
]})}]}}).
state
(
"
dashboard.system
"
,{
templateUrl
:
"
app/views/system.html
"
,
url
:
"
/system/:app
"
,
controller
:
"
SystemCtl
"
,
resolve
:{
loadMyFiles
:[
"
$ocLazyLoad
"
,
function
(
e
){
return
e
.
load
({
name
:
"
sentinelDashboardApp
"
,
files
:[
"
app/scripts/controllers/system.js
"
]})}]}}).
state
(
"
dashboard.machine
"
,{
templateUrl
:
"
app/views/machine.html
"
,
url
:
"
/app/:app
"
,
controller
:
"
MachineCtl
"
,
resolve
:{
loadMyFiles
:[
"
$ocLazyLoad
"
,
function
(
e
){
return
e
.
load
({
name
:
"
sentinelDashboardApp
"
,
files
:[
"
app/scripts/controllers/machine.js
"
]})}]}}).
state
(
"
dashboard.identity
"
,{
templateUrl
:
"
app/views/identity.html
"
,
url
:
"
/identity/:app
"
,
controller
:
"
IdentityCtl
"
,
resolve
:{
loadMyFiles
:[
"
$ocLazyLoad
"
,
function
(
e
){
return
e
.
load
({
name
:
"
sentinelDashboardApp
"
,
files
:[
"
app/scripts/controllers/identity.js
"
]})}]}}).
state
(
"
dashboard.gatewayIdentity
"
,{
templateUrl
:
"
app/views/gateway/identity.html
"
,
url
:
"
/gateway/identity/:app
"
,
controller
:
"
GatewayIdentityCtl
"
,
resolve
:{
loadMyFiles
:[
"
$ocLazyLoad
"
,
function
(
e
){
return
e
.
load
({
name
:
"
sentinelDashboardApp
"
,
files
:[
"
app/scripts/controllers/gateway/identity.js
"
]})}]}}).
state
(
"
dashboard.metric
"
,{
templateUrl
:
"
app/views/metric.html
"
,
url
:
"
/metric/:app
"
,
controller
:
"
MetricCtl
"
,
resolve
:{
loadMyFiles
:[
"
$ocLazyLoad
"
,
function
(
e
){
return
e
.
load
({
name
:
"
sentinelDashboardApp
"
,
files
:[
"
app/scripts/controllers/metric.js
"
]})}]}}).
state
(
"
dashboard.gatewayApi
"
,{
templateUrl
:
"
app/views/gateway/api.html
"
,
url
:
"
/gateway/api/:app
"
,
controller
:
"
GatewayApiCtl
"
,
resolve
:{
loadMyFiles
:[
"
$ocLazyLoad
"
,
function
(
e
){
return
e
.
load
({
name
:
"
sentinelDashboardApp
"
,
files
:[
"
app/scripts/controllers/gateway/api.js
"
]})}]}}).
state
(
"
dashboard.gatewayFlow
"
,{
templateUrl
:
"
app/views/gateway/flow.html
"
,
url
:
"
/gateway/flow/:app
"
,
controller
:
"
GatewayFlowCtl
"
,
resolve
:{
loadMyFiles
:[
"
$ocLazyLoad
"
,
function
(
e
){
return
e
.
load
({
name
:
"
sentinelDashboardApp
"
,
files
:[
"
app/scripts/controllers/gateway/flow.js
"
]})}]}})}]),(
app
=
angular
.
module
(
"
sentinelDashboardApp
"
)).
filter
(
"
range
"
,[
function
(){
return
function
(
e
,
t
){
if
(
isNaN
(
t
)
||
t
<=
0
)
return
[];
e
=
[];
for
(
var
r
=
1
;
r
<=
t
;
r
++
)
e
.
push
(
r
);
return
e
}}]),(
app
=
angular
.
module
(
"
sentinelDashboardApp
"
)).
service
(
"
VersionService
"
,[
"
$http
"
,
function
(
e
){
this
.
version
=
function
(){
return
e
({
url
:
"
/version
"
,
method
:
"
GET
"
})}}]),(
app
=
angular
.
module
(
"
sentinelDashboardApp
"
)).
service
(
"
AuthService
"
,[
"
$http
"
,
function
(
t
){
this
.
check
=
function
(){
return
t
({
url
:
"
/auth/check
"
,
method
:
"
POST
"
})},
this
.
login
=
function
(
e
){
return
t
({
url
:
"
/auth/login
"
,
params
:
e
,
method
:
"
POST
"
})},
this
.
logout
=
function
(){
return
t
({
url
:
"
/auth/logout
"
,
method
:
"
POST
"
})}}]),(
app
=
angular
.
module
(
"
sentinelDashboardApp
"
)).
service
(
"
AppService
"
,[
"
$http
"
,
function
(
e
){
this
.
getApps
=
function
(){
return
e
({
url
:
"
app/briefinfos.json
"
,
method
:
"
GET
"
})}}]),(
app
=
angular
.
module
(
"
sentinelDashboardApp
"
)).
service
(
"
FlowServiceV1
"
,[
"
$http
"
,
function
(
a
){
function
t
(
e
){
return
void
0
===
e
||
""
===
e
||
isNaN
(
e
)
||
e
<=
0
}
this
.
queryMachineRules
=
function
(
e
,
t
,
r
){
return
a
({
url
:
"
/v1/flow/rules
"
,
params
:{
app
:
e
,
ip
:
t
,
port
:
r
},
method
:
"
GET
"
})},
this
.
newRule
=
function
(
e
){
e
.
resource
,
e
.
limitApp
,
e
.
grade
,
e
.
count
,
e
.
strategy
,
e
.
refResource
,
e
.
controlBehavior
,
e
.
warmUpPeriodSec
,
e
.
maxQueueingTimeMs
,
e
.
app
,
e
.
ip
,
e
.
port
;
return
a
({
url
:
"
/v1/flow/rule
"
,
data
:
e
,
method
:
"
POST
"
})},
this
.
saveRule
=
function
(
e
){
var
t
=
{
id
:
e
.
id
,
resource
:
e
.
resource
,
limitApp
:
e
.
limitApp
,
grade
:
e
.
grade
,
count
:
e
.
count
,
strategy
:
e
.
strategy
,
refResource
:
e
.
refResource
,
controlBehavior
:
e
.
controlBehavior
,
warmUpPeriodSec
:
e
.
warmUpPeriodSec
,
maxQueueingTimeMs
:
e
.
maxQueueingTimeMs
};
return
a
({
url
:
"
/v1/flow/save.json
"
,
params
:
t
,
method
:
"
PUT
"
})},
this
.
deleteRule
=
function
(
e
){
var
t
=
{
id
:
e
.
id
,
app
:
e
.
app
};
return
a
({
url
:
"
/v1/flow/delete.json
"
,
params
:
t
,
method
:
"
DELETE
"
})},
this
.
checkRuleValid
=
function
(
e
){
return
void
0
===
e
.
resource
||
""
===
e
.
resource
?(
alert
(
"
资源名称不能为空
"
),
!
1
):
void
0
===
e
.
count
||
e
.
count
<
0
?(
alert
(
"
限流阈值必须大于等于 0
"
),
!
1
):
void
0
===
e
.
strategy
||
e
.
strategy
<
0
?(
alert
(
"
无效的流控模式
"
),
!
1
):
1
!=
e
.
strategy
&&
2
!=
e
.
strategy
||
void
0
!==
e
.
refResource
&&
""
!=
e
.
refResource
?
void
0
===
e
.
controlBehavior
||
e
.
controlBehavior
<
0
?(
alert
(
"
无效的流控整形方式
"
),
!
1
):
1
==
e
.
controlBehavior
&&
t
(
e
.
warmUpPeriodSec
)?(
alert
(
"
预热时长必须大于 0
"
),
!
1
):
2
==
e
.
controlBehavior
&&
t
(
e
.
maxQueueingTimeMs
)?(
alert
(
"
排队超时时间必须大于 0
"
),
!
1
):
!
e
.
clusterMode
||
void
0
!==
e
.
clusterConfig
&&
void
0
!==
e
.
clusterConfig
.
thresholdType
||
(
alert
(
"
集群限流配置不正确
"
),
!
1
):(
alert
(
"
请填写关联资源或入口
"
),
!
1
)}}]),(
app
=
angular
.
module
(
"
sentinelDashboardApp
"
)).
service
(
"
FlowServiceV2
"
,[
"
$http
"
,
function
(
a
){
function
t
(
e
){
return
void
0
===
e
||
""
===
e
||
isNaN
(
e
)
||
e
<=
0
}
this
.
queryMachineRules
=
function
(
e
,
t
,
r
){
return
a
({
url
:
"
/v2/flow/rules
"
,
params
:{
app
:
e
,
ip
:
t
,
port
:
r
},
method
:
"
GET
"
})},
this
.
newRule
=
function
(
e
){
return
a
({
url
:
"
/v2/flow/rule
"
,
data
:
e
,
method
:
"
POST
"
})},
this
.
saveRule
=
function
(
e
){
return
a
({
url
:
"
/v2/flow/rule/
"
+
e
.
id
,
data
:
e
,
method
:
"
PUT
"
})},
this
.
deleteRule
=
function
(
e
){
return
a
({
url
:
"
/v2/flow/rule/
"
+
e
.
id
,
method
:
"
DELETE
"
})},
this
.
checkRuleValid
=
function
(
e
){
return
void
0
===
e
.
resource
||
""
===
e
.
resource
?(
alert
(
"
资源名称不能为空
"
),
!
1
):
void
0
===
e
.
count
||
e
.
count
<
0
?(
alert
(
"
限流阈值必须大于等于 0
"
),
!
1
):
void
0
===
e
.
strategy
||
e
.
strategy
<
0
?(
alert
(
"
无效的流控模式
"
),
!
1
):
1
!=
e
.
strategy
&&
2
!=
e
.
strategy
||
void
0
!==
e
.
refResource
&&
""
!=
e
.
refResource
?
void
0
===
e
.
controlBehavior
||
e
.
controlBehavior
<
0
?(
alert
(
"
无效的流控整形方式
"
),
!
1
):
1
==
e
.
controlBehavior
&&
t
(
e
.
warmUpPeriodSec
)?(
alert
(
"
预热时长必须大于 0
"
),
!
1
):
2
==
e
.
controlBehavior
&&
t
(
e
.
maxQueueingTimeMs
)?(
alert
(
"
排队超时时间必须大于 0
"
),
!
1
):
!
e
.
clusterMode
||
void
0
!==
e
.
clusterConfig
&&
void
0
!==
e
.
clusterConfig
.
thresholdType
||
(
alert
(
"
集群限流配置不正确
"
),
!
1
):(
alert
(
"
请填写关联资源或入口
"
),
!
1
)}}]),(
app
=
angular
.
module
(
"
sentinelDashboardApp
"
)).
service
(
"
DegradeService
"
,[
"
$http
"
,
function
(
a
){
this
.
queryMachineRules
=
function
(
e
,
t
,
r
){
return
a
({
url
:
"
degrade/rules.json
"
,
params
:{
app
:
e
,
ip
:
t
,
port
:
r
},
method
:
"
GET
"
})},
this
.
newRule
=
function
(
e
){
var
t
=
{
id
:
e
.
id
,
resource
:
e
.
resource
,
limitApp
:
e
.
limitApp
,
count
:
e
.
count
,
timeWindow
:
e
.
timeWindow
,
grade
:
e
.
grade
,
app
:
e
.
app
,
ip
:
e
.
ip
,
port
:
e
.
port
};
return
a
({
url
:
"
/degrade/new.json
"
,
params
:
t
,
method
:
"
GET
"
})},
this
.
saveRule
=
function
(
e
){
var
t
=
{
id
:
e
.
id
,
resource
:
e
.
resource
,
limitApp
:
e
.
limitApp
,
grade
:
e
.
grade
,
count
:
e
.
count
,
timeWindow
:
e
.
timeWindow
};
return
a
({
url
:
"
/degrade/save.json
"
,
params
:
t
,
method
:
"
GET
"
})},
this
.
deleteRule
=
function
(
e
){
var
t
=
{
id
:
e
.
id
,
app
:
e
.
app
};
return
a
({
url
:
"
/degrade/delete.json
"
,
params
:
t
,
method
:
"
GET
"
})},
this
.
checkRuleValid
=
function
(
e
){
return
void
0
===
e
.
resource
||
""
===
e
.
resource
?(
alert
(
"
资源名称不能为空
"
),
!
1
):
void
0
===
e
.
grade
||
e
.
grade
<
0
?(
alert
(
"
未知的降级策略
"
),
!
1
):
void
0
===
e
.
count
||
""
===
e
.
count
||
e
.
count
<
0
?(
alert
(
"
降级阈值不能为空或小于 0
"
),
!
1
):
void
0
===
e
.
timeWindow
||
""
===
e
.
timeWindow
||
e
.
timeWindow
<=
0
?(
alert
(
"
降级时间窗口必须大于 0
"
),
!
1
):
!
(
1
==
e
.
grade
&&
1
<
e
.
count
)
||
(
alert
(
"
异常比率超出范围:[0.0 - 1.0]
"
),
!
1
)}}]),(
app
=
angular
.
module
(
"
sentinelDashboardApp
"
)).
service
(
"
SystemService
"
,[
"
$http
"
,
function
(
a
){
this
.
queryMachineRules
=
function
(
e
,
t
,
r
){
return
a
({
url
:
"
system/rules.json
"
,
params
:{
app
:
e
,
ip
:
t
,
port
:
r
},
method
:
"
GET
"
})},
this
.
newRule
=
function
(
e
){
var
t
=
{
app
:
e
.
app
,
ip
:
e
.
ip
,
port
:
e
.
port
};
return
0
==
e
.
grade
?
t
.
highestSystemLoad
=
e
.
highestSystemLoad
:
1
==
e
.
grade
?
t
.
avgRt
=
e
.
avgRt
:
2
==
e
.
grade
?
t
.
maxThread
=
e
.
maxThread
:
3
==
e
.
grade
?
t
.
qps
=
e
.
qps
:
4
==
e
.
grade
&&
(
t
.
highestCpuUsage
=
e
.
highestCpuUsage
),
a
({
url
:
"
/system/new.json
"
,
params
:
t
,
method
:
"
GET
"
})},
this
.
saveRule
=
function
(
e
){
var
t
=
{
id
:
e
.
id
};
return
0
==
e
.
grade
?
t
.
highestSystemLoad
=
e
.
highestSystemLoad
:
1
==
e
.
grade
?
t
.
avgRt
=
e
.
avgRt
:
2
==
e
.
grade
?
t
.
maxThread
=
e
.
maxThread
:
3
==
e
.
grade
?
t
.
qps
=
e
.
qps
:
4
==
e
.
grade
&&
(
t
.
highestCpuUsage
=
e
.
highestCpuUsage
),
a
({
url
:
"
/system/save.json
"
,
params
:
t
,
method
:
"
GET
"
})},
this
.
deleteRule
=
function
(
e
){
var
t
=
{
id
:
e
.
id
,
app
:
e
.
app
};
return
a
({
url
:
"
/system/delete.json
"
,
params
:
t
,
method
:
"
GET
"
})}}]),(
app
=
angular
.
module
(
"
sentinelDashboardApp
"
)).
service
(
"
MachineService
"
,[
"
$http
"
,
"
$httpParamSerializerJQLike
"
,
function
(
a
,
o
){
this
.
getAppMachines
=
function
(
e
){
return
a
({
url
:
"
app/
"
+
e
+
"
/machines.json
"
,
method
:
"
GET
"
})},
this
.
removeAppMachine
=
function
(
e
,
t
,
r
){
return
a
({
url
:
"
app/
"
+
e
+
"
/machine/remove.json
"
,
method
:
"
POST
"
,
headers
:{
"
Content-type
"
:
"
application/x-www-form-urlencoded; charset=UTF-8
"
},
data
:
o
({
ip
:
t
,
port
:
r
})})}}]),(
app
=
angular
.
module
(
"
sentinelDashboardApp
"
)).
service
(
"
IdentityService
"
,[
"
$http
"
,
function
(
a
){
this
.
fetchIdentityOfMachine
=
function
(
e
,
t
,
r
){
return
a
({
url
:
"
resource/machineResource.json
"
,
params
:{
ip
:
e
,
port
:
t
,
searchKey
:
r
},
method
:
"
GET
"
})},
this
.
fetchClusterNodeOfMachine
=
function
(
e
,
t
,
r
){
return
a
({
url
:
"
resource/machineResource.json
"
,
params
:{
ip
:
e
,
port
:
t
,
type
:
"
cluster
"
,
searchKey
:
r
},
method
:
"
GET
"
})}}]),(
app
=
angular
.
module
(
"
sentinelDashboardApp
"
)).
service
(
"
MetricService
"
,[
"
$http
"
,
function
(
l
){
this
.
queryAppSortedIdentities
=
function
(
e
){
return
l
({
url
:
"
/metric/queryTopResourceMetric.json
"
,
params
:
e
,
method
:
"
GET
"
})},
this
.
queryByAppAndIdentity
=
function
(
e
){
return
l
({
url
:
"
/metric/queryByAppAndResource.json
"
,
params
:
e
,
method
:
"
GET
"
})},
this
.
queryByMachineAndIdentity
=
function
(
e
,
t
,
r
,
a
,
o
){
var
i
=
{
ip
:
e
,
port
:
t
,
identity
:
r
,
startTime
:
a
.
getTime
(),
endTime
:
o
.
getTime
()};
return
l
({
url
:
"
/metric/queryByAppAndResource.json
"
,
params
:
i
,
method
:
"
GET
"
})}}]),
angular
.
module
(
"
sentinelDashboardApp
"
).
service
(
"
ParamFlowService
"
,[
"
$http
"
,
function
(
a
){
function
o
(
e
){
return
!
(
"
int
"
!==
(
r
=
e
.
classType
)
&&
"
double
"
!==
r
&&
"
float
"
!==
r
&&
"
long
"
!==
r
&&
"
short
"
!==
r
||
void
0
!==
(
t
=
e
.
object
)
&&
""
!==
t
&&!
isNaN
(
t
))
||
(
!!
(
"
byte
"
===
e
.
classType
&&
(
a
=
e
.
object
,
o
=-
128
,
i
=
127
,
void
0
===
a
||
""
===
a
||
isNaN
(
a
)
||
a
<
o
||
i
<
a
))
||
(
void
0
===
e
.
object
||
void
0
===
e
.
classType
||
(
void
0
===
(
l
=
e
.
count
)
||
""
===
l
||
isNaN
(
l
)
||
l
<
0
)));
var
t
,
r
,
a
,
o
,
i
,
l
}
this
.
queryMachineRules
=
function
(
e
,
t
,
r
){
return
a
({
url
:
"
/paramFlow/rules
"
,
params
:{
app
:
e
,
ip
:
t
,
port
:
r
},
method
:
"
GET
"
})},
this
.
addNewRule
=
function
(
e
){
return
a
({
url
:
"
/paramFlow/rule
"
,
data
:
e
,
method
:
"
POST
"
})},
this
.
saveRule
=
function
(
e
){
return
a
({
url
:
"
/paramFlow/rule/
"
+
e
.
id
,
data
:
e
,
method
:
"
PUT
"
})},
this
.
deleteRule
=
function
(
e
){
return
a
({
url
:
"
/paramFlow/rule/
"
+
e
.
id
,
method
:
"
DELETE
"
})},
this
.
checkRuleValid
=
function
(
e
){
if
(
!
e
.
resource
||
""
===
e
.
resource
)
return
alert
(
"
资源名称不能为空
"
),
!
1
;
if
(
1
!=
e
.
grade
)
return
alert
(
"
未知的限流模式
"
),
!
1
;
if
(
e
.
count
<
0
)
return
alert
(
"
限流阈值必须大于等于 0
"
),
!
1
;
if
(
void
0
===
e
.
paramIdx
||
""
===
e
.
paramIdx
||
isNaN
(
e
.
paramIdx
)
||
e
.
paramIdx
<
0
)
return
alert
(
"
热点参数索引必须大于等于 0
"
),
!
1
;
if
(
void
0
!==
e
.
paramFlowItemList
)
for
(
var
t
=
0
;
t
<
e
.
paramFlowItemList
.
length
;
t
++
){
var
r
=
e
.
paramFlowItemList
[
t
];
if
(
o
(
r
))
return
alert
(
"
热点参数例外项不合法,请检查值和类型是否正确:参数为
"
+
r
.
object
+
"
, 类型为
"
+
r
.
classType
+
"
, 限流阈值为
"
+
r
.
count
),
!
1
}
return
!
0
}}]),
angular
.
module
(
"
sentinelDashboardApp
"
).
service
(
"
AuthorityRuleService
"
,[
"
$http
"
,
function
(
a
){
this
.
queryMachineRules
=
function
(
e
,
t
,
r
){
return
a
({
url
:
"
/authority/rules
"
,
params
:{
app
:
e
,
ip
:
t
,
port
:
r
},
method
:
"
GET
"
})},
this
.
addNewRule
=
function
(
e
){
return
a
({
url
:
"
/authority/rule
"
,
data
:
e
,
method
:
"
POST
"
})},
this
.
saveRule
=
function
(
e
){
return
a
({
url
:
"
/authority/rule/
"
+
e
.
id
,
data
:
e
,
method
:
"
PUT
"
})},
this
.
deleteRule
=
function
(
e
){
return
a
({
url
:
"
/authority/rule/
"
+
e
.
id
,
method
:
"
DELETE
"
})},
this
.
checkRuleValid
=
function
(
e
){
return
void
0
===
e
.
resource
||
""
===
e
.
resource
?(
alert
(
"
资源名称不能为空
"
),
!
1
):
void
0
===
e
.
limitApp
||
""
===
e
.
limitApp
?(
alert
(
"
流控针对应用不能为空
"
),
!
1
):
void
0
!==
e
.
strategy
||
(
alert
(
"
必须选择黑白名单模式
"
),
!
1
)}}]),
angular
.
module
(
"
sentinelDashboardApp
"
).
service
(
"
ClusterStateService
"
,[
"
$http
"
,
function
(
a
){
this
.
fetchClusterUniversalStateSingle
=
function
(
e
,
t
,
r
){
return
a
({
url
:
"
/cluster/state_single
"
,
params
:{
app
:
e
,
ip
:
t
,
port
:
r
},
method
:
"
GET
"
})},
this
.
fetchClusterUniversalStateOfApp
=
function
(
e
){
return
a
({
url
:
"
/cluster/state/
"
+
e
,
method
:
"
GET
"
})},
this
.
fetchClusterServerStateOfApp
=
function
(
e
){
return
a
({
url
:
"
/cluster/server_state/
"
+
e
,
method
:
"
GET
"
})},
this
.
fetchClusterClientStateOfApp
=
function
(
e
){
return
a
({
url
:
"
/cluster/client_state/
"
+
e
,
method
:
"
GET
"
})},
this
.
modifyClusterConfig
=
function
(
e
){
return
a
({
url
:
"
/cluster/config/modify_single
"
,
data
:
e
,
method
:
"
POST
"
})},
this
.
applyClusterFullAssignOfApp
=
function
(
e
,
t
){
return
a
({
url
:
"
/cluster/assign/all_server/
"
+
e
,
data
:
t
,
method
:
"
POST
"
})},
this
.
applyClusterSingleServerAssignOfApp
=
function
(
e
,
t
){
return
a
({
url
:
"
/cluster/assign/single_server/
"
+
e
,
data
:
t
,
method
:
"
POST
"
})},
this
.
applyClusterServerBatchUnbind
=
function
(
e
,
t
){
return
a
({
url
:
"
/cluster/assign/unbind_server/
"
+
e
,
data
:
t
,
method
:
"
POST
"
})}}]),(
app
=
angular
.
module
(
"
sentinelDashboardApp
"
)).
service
(
"
GatewayApiService
"
,[
"
$http
"
,
function
(
a
){
this
.
queryApis
=
function
(
e
,
t
,
r
){
return
a
({
url
:
"
/gateway/api/list.json
"
,
params
:{
app
:
e
,
ip
:
t
,
port
:
r
},
method
:
"
GET
"
})},
this
.
newApi
=
function
(
e
){
return
a
({
url
:
"
/gateway/api/new.json
"
,
data
:
e
,
method
:
"
POST
"
})},
this
.
saveApi
=
function
(
e
){
return
a
({
url
:
"
/gateway/api/save.json
"
,
data
:
e
,
method
:
"
POST
"
})},
this
.
deleteApi
=
function
(
e
){
var
t
=
{
id
:
e
.
id
,
app
:
e
.
app
};
return
a
({
url
:
"
/gateway/api/delete.json
"
,
params
:
t
,
method
:
"
POST
"
})},
this
.
checkApiValid
=
function
(
e
,
t
){
if
(
void
0
===
e
.
apiName
||
""
===
e
.
apiName
)
return
alert
(
"
API名称不能为空
"
),
!
1
;
if
(
null
==
e
.
predicateItems
||
0
===
e
.
predicateItems
.
length
)
return
alert
(
"
至少有一个匹配规则
"
),
!
1
;
for
(
var
r
=
0
;
r
<
e
.
predicateItems
.
length
;
r
++
){
var
a
=
e
.
predicateItems
[
r
].
pattern
;
if
(
void
0
===
a
||
""
===
a
)
return
alert
(
"
匹配串不能为空,请检查
"
),
!
1
}
return
-
1
===
t
.
indexOf
(
e
.
apiName
)
||
(
alert
(
"
API名称(
"
+
e
.
apiName
+
"
)已存在
"
),
!
1
)}}]),(
app
=
angular
.
module
(
"
sentinelDashboardApp
"
)).
service
(
"
GatewayFlowService
"
,[
"
$http
"
,
function
(
a
){
this
.
queryRules
=
function
(
e
,
t
,
r
){
return
a
({
url
:
"
/gateway/flow/list.json
"
,
params
:{
app
:
e
,
ip
:
t
,
port
:
r
},
method
:
"
GET
"
})},
this
.
newRule
=
function
(
e
){
return
a
({
url
:
"
/gateway/flow/new.json
"
,
data
:
e
,
method
:
"
POST
"
})},
this
.
saveRule
=
function
(
e
){
return
a
({
url
:
"
/gateway/flow/save.json
"
,
data
:
e
,
method
:
"
POST
"
})},
this
.
deleteRule
=
function
(
e
){
var
t
=
{
id
:
e
.
id
,
app
:
e
.
app
};
return
a
({
url
:
"
/gateway/flow/delete.json
"
,
params
:
t
,
method
:
"
POST
"
})},
this
.
checkRuleValid
=
function
(
e
){
if
(
void
0
===
e
.
resource
||
""
===
e
.
resource
)
return
alert
(
"
API名称不能为空
"
),
!
1
;
if
(
null
!=
e
.
paramItem
&&
(
2
==
e
.
paramItem
.
parseStrategy
||
3
==
e
.
paramItem
.
parseStrategy
||
4
==
e
.
paramItem
.
parseStrategy
)){
if
(
void
0
===
e
.
paramItem
.
fieldName
||
""
===
e
.
paramItem
.
fieldName
)
return
alert
(
"
当参数属性为Header、URL参数、Cookie时,参数名称不能为空
"
),
!
1
;
if
(
""
===
e
.
paramItem
.
pattern
)
return
alert
(
"
匹配串不能为空
"
),
!
1
}
return
!
(
void
0
===
e
.
count
||
e
.
count
<
0
)
||
(
alert
((
1
===
e
.
grade
?
"
QPS阈值
"
:
"
线程数
"
)
+
"
必须大于等于 0
"
),
!
1
)}}]);
\ No newline at end of file
pig-visual/pig-sentinel-dashboard/src/main/webapp/resources/dist/js/app.vendor.js
0 → 100755
浏览文件 @
0f086a4a
因为 它太大了无法显示 source diff 。你可以改为
查看blob
。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录