Publish:针对云心理发布版本,使用Longbow.Utility 2015组件库,针对Reference

This commit is contained in:
Argo-MacBookPro 2018-05-05 14:31:03 +08:00
parent 35190af759
commit 2a151d6183
62 changed files with 847 additions and 334 deletions

View File

@ -1,4 +1,5 @@
using Bootstrap.DataAccess; using Bootstrap.DataAccess;
using Longbow.Caching;
using Longbow.ExceptionManagement; using Longbow.ExceptionManagement;
using Longbow.ExceptionManagement.Configuration; using Longbow.ExceptionManagement.Configuration;
using System; using System;
@ -21,6 +22,8 @@ namespace Bootstrap.Admin
{ {
if (publisherElement.Mode == PublisherMode.Off) return; if (publisherElement.Mode == PublisherMode.Off) return;
ExceptionHelper.Log(ex, additionalInfo); ExceptionHelper.Log(ex, additionalInfo);
CacheManager.Clear(k => k == ExceptionHelper.RetrieveExceptionsDataKey);
NotificationHelper.MessagePool.Add(new MessageBody() { Category = "Notification", Message = ex.Message });
} }
} }
} }

View File

@ -123,6 +123,8 @@
<Content Include="Content\font-awesome.min.css" /> <Content Include="Content\font-awesome.min.css" />
<Content Include="Content\html\api.html" /> <Content Include="Content\html\api.html" />
<Content Include="Content\images\error_icon.png" /> <Content Include="Content\images\error_icon.png" />
<Content Include="Content\toastr.css" />
<Content Include="Content\toastr.min.css" />
<Content Include="favicon.ico" /> <Content Include="favicon.ico" />
<Content Include="Content\admin-responsive.css" /> <Content Include="Content\admin-responsive.css" />
<Content Include="Content\admin.css" /> <Content Include="Content\admin.css" />
@ -196,6 +198,9 @@
<Content Include="fonts\fontawesome-webfont.woff" /> <Content Include="fonts\fontawesome-webfont.woff" />
<Content Include="fonts\fontawesome-webfont.ttf" /> <Content Include="fonts\fontawesome-webfont.ttf" />
<Content Include="fonts\fontawesome-webfont.eot" /> <Content Include="fonts\fontawesome-webfont.eot" />
<Content Include="..\..\Keys\Longbow.Utility.snk">
<Link>Longbow.Utility.snk</Link>
</Content>
<None Include="Scripts\jquery-3.1.1.intellisense.js" /> <None Include="Scripts\jquery-3.1.1.intellisense.js" />
<Content Include="Scripts\jquery-3.1.1.js" /> <Content Include="Scripts\jquery-3.1.1.js" />
<Content Include="Scripts\jquery-3.1.1.min.js" /> <Content Include="Scripts\jquery-3.1.1.min.js" />
@ -228,6 +233,7 @@
<Content Include="Scripts\sweetalert.min.js" /> <Content Include="Scripts\sweetalert.min.js" />
<Content Include="Scripts\tasks.js" /> <Content Include="Scripts\tasks.js" />
<Content Include="Scripts\apidoc.js" /> <Content Include="Scripts\apidoc.js" />
<Content Include="Scripts\toastr.min.js" />
<Content Include="Scripts\Users.js" /> <Content Include="Scripts\Users.js" />
<Content Include="packages.config" /> <Content Include="packages.config" />
<Content Include="Scripts\jquery-3.1.1.slim.min.map" /> <Content Include="Scripts\jquery-3.1.1.slim.min.map" />
@ -262,6 +268,7 @@
<Compile Include="Controllers\RolesController.cs" /> <Compile Include="Controllers\RolesController.cs" />
<Compile Include="Controllers\TasksController.cs" /> <Compile Include="Controllers\TasksController.cs" />
<Compile Include="Controllers\UsersController.cs" /> <Compile Include="Controllers\UsersController.cs" />
<Compile Include="Controllers\WSController.cs" />
<Compile Include="Global.asax.cs"> <Compile Include="Global.asax.cs">
<DependentUpon>Global.asax</DependentUpon> <DependentUpon>Global.asax</DependentUpon>
</Compile> </Compile>
@ -286,7 +293,6 @@
<Content Include="Views\Shared\_Normal.cshtml" /> <Content Include="Views\Shared\_Normal.cshtml" />
<Content Include="Views\Shared\_Admin.cshtml" /> <Content Include="Views\Shared\_Admin.cshtml" />
<Content Include="Views\Admin\Index.cshtml" /> <Content Include="Views\Admin\Index.cshtml" />
<Content Include="Longbow.Utility.snk" />
<Content Include="Views\Shared\_Default.cshtml" /> <Content Include="Views\Shared\_Default.cshtml" />
<Content Include="Views\Admin\Users.cshtml" /> <Content Include="Views\Admin\Users.cshtml" />
<Content Include="Views\_ViewStart.cshtml" /> <Content Include="Views\_ViewStart.cshtml" />
@ -307,7 +313,6 @@
<Content Include="Views\Admin\Logs.cshtml" /> <Content Include="Views\Admin\Logs.cshtml" />
<Content Include="Views\Admin\Settings.cshtml" /> <Content Include="Views\Admin\Settings.cshtml" />
<Content Include="Views\Shared\Footer.cshtml" /> <Content Include="Views\Shared\Footer.cshtml" />
<Content Include="Views\Shared\MenuTree.cshtml" />
<Content Include="Views\Shared\NavigatorConfig.cshtml" /> <Content Include="Views\Shared\NavigatorConfig.cshtml" />
<Content Include="Views\Shared\SubNavigation.cshtml" /> <Content Include="Views\Shared\SubNavigation.cshtml" />
<Content Include="Views\Home\Lock.cshtml" /> <Content Include="Views\Home\Lock.cshtml" />
@ -323,6 +328,7 @@
<Content Include="Views\Shared\SubMenu.cshtml" /> <Content Include="Views\Shared\SubMenu.cshtml" />
<Content Include="Views\Admin\Api.cshtml" /> <Content Include="Views\Admin\Api.cshtml" />
<Content Include="Views\Shared\_ButtonBarGroup.cshtml" /> <Content Include="Views\Shared\_ButtonBarGroup.cshtml" />
<Content Include="Scripts\toastr.js.map" />
<None Include="Web.Debug.config"> <None Include="Web.Debug.config">
<DependentUpon>Web.config</DependentUpon> <DependentUpon>Web.config</DependentUpon>
</None> </None>
@ -345,7 +351,7 @@
<SignAssembly>true</SignAssembly> <SignAssembly>true</SignAssembly>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<AssemblyOriginatorKeyFile>Longbow.Utility.snk</AssemblyOriginatorKeyFile> <AssemblyOriginatorKeyFile>..\..\Keys\Longbow.Utility.snk</AssemblyOriginatorKeyFile>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<DelaySign>true</DelaySign> <DelaySign>true</DelaySign>

View File

@ -25,7 +25,7 @@
@media (min-width: 768px) { @media (min-width: 768px) {
.sidebar { .sidebar {
top: 94px; top: 98px;
bottom: 40px; bottom: 40px;
position: absolute; position: absolute;
overflow: auto; overflow: auto;
@ -73,9 +73,39 @@
} }
} }
@media (min-height: 414px) {
.modal .modal-body {
max-height: 200px;
}
}
@media (min-height: 568px) {
.modal .modal-body {
max-height: 350px;
}
}
@media (min-height: 667px) {
.modal .modal-body {
max-height: 450px;
}
}
@media (min-height: 736px) {
.modal .modal-body {
max-height: 510px;
}
}
@media (min-height: 768px) {
.modal .modal-body {
max-height: 540px;
}
}
@media (min-height: 672px) { @media (min-height: 672px) {
.sidebar { .sidebar {
top: 94px; top: 98px;
bottom: 40px; bottom: 40px;
position: absolute; position: absolute;
overflow: auto; overflow: auto;

View File

@ -2,17 +2,9 @@
display: inline-block; display: inline-block;
} }
.logfile { .lgbDropdown .dropdown-menu > li > a:hover {
color: #d41404; background: #007AC0;
white-space: nowrap; color: #fff;
}
.logfile:focus, .logfile:active, .logfile:hover {
color: red;
}
.logfile span {
margin-left: 4px;
} }
.logTs, .logSql, .logDbExcep { .logTs, .logSql, .logDbExcep {
@ -51,7 +43,6 @@
color: #ac2925; color: #ac2925;
} }
.form-inline .form-group { .form-inline .form-group {
margin-bottom: 15px; margin-bottom: 15px;
} }
@ -65,6 +56,7 @@
vertical-align: middle; vertical-align: middle;
} }
.modal-dialog .modal-body, .panel-body { .modal-dialog .modal-body, .panel-body {
padding-bottom: 0; padding-bottom: 0;
} }
@ -85,6 +77,12 @@
padding: 0 15px; padding: 0 15px;
} }
.modal .modal-body {
max-height: 164px;
overflow: auto;
-webkit-overflow-scrolling: touch;
}
.modal.file-zoom-dialog .modal-dialog { .modal.file-zoom-dialog .modal-dialog {
max-width: none; max-width: none;
} }
@ -100,7 +98,7 @@
margin-top: 1px; margin-top: 1px;
} }
.modal-body .checkbox { .modal-body .checkbox, .modal-body .radio {
min-width: 190px; min-width: 190px;
overflow: hidden; overflow: hidden;
white-space: nowrap; white-space: nowrap;
@ -144,7 +142,7 @@
left: 0; left: 0;
bottom: 40px; bottom: 40px;
right: 0; right: 0;
top: 94px; top: 98px;
} }
.main-content.open { .main-content.open {
@ -168,7 +166,7 @@ aside {
transform: translate(-100%); transform: translate(-100%);
height: 100%; height: 100%;
position: absolute; position: absolute;
top: 94px; top: 98px;
bottom: 40px; bottom: 40px;
left: 0; left: 0;
right: 0; right: 0;
@ -257,16 +255,16 @@ aside {
} }
/*Modal Dialog Checkbox*/ /*Modal Dialog Checkbox*/
.modal-body .checkbox { .modal-body .checkbox, .modal-dialog .radio {
padding: 0; padding: 0;
margin-top: 0; margin-top: 0;
} }
.modal-body .checkbox label { .modal-body .checkbox label, .modal-body .radio label {
padding-left: 0; padding-left: 0;
} }
.modal-body .checkbox label input[type='checkbox'] { .modal-body .checkbox label input[type='checkbox'], .modal-body .radio label input[type='radio'] {
margin: 0 4px 0 0; margin: 0 4px 0 0;
vertical-align: middle; vertical-align: middle;
position: relative; position: relative;
@ -302,7 +300,7 @@ aside {
.toolbar .dropdown-menu a { .toolbar .dropdown-menu a {
border-left: none; border-left: none;
padding: 0 8px; padding: 0 14px;
display: table-cell; display: table-cell;
color: #504d4d; color: #504d4d;
} }
@ -488,3 +486,7 @@ input[type="datetime"] {
.input-group.form_date span { .input-group.form_date span {
border-left: none; border-left: none;
} }
.barTable {
padding: 5px 15px 15px 15px;
}

View File

@ -8,7 +8,6 @@
} }
.fa-target { .fa-target {
height: 16px;
display: block; display: block;
} }
@ -85,14 +84,12 @@
} }
.icon-content .modal-body { .icon-content .modal-body {
position: fixed; position: absolute;
left: 18px; left: 0;
right: 16px; right: 0;
top: 62px; top: 46px;
bottom: 80px; bottom: 65px;
overflow: auto; overflow: auto;
max-height: inherit;
height: inherit;
-webkit-overflow-scrolling: touch; -webkit-overflow-scrolling: touch;
} }
@ -106,10 +103,10 @@
} }
.icon-content .modal-footer { .icon-content .modal-footer {
position: fixed; position: absolute;
left: 16px; left: 0;
right: 16px; right: 0;
bottom: 15px; bottom: 0;
white-space: nowrap; white-space: nowrap;
} }
@ -131,6 +128,27 @@
border-radius: 4px; border-radius: 4px;
} }
.icon-content .modal-footer span {
display: none;
}
.icon-content .dd {
max-width: 100%;
margin-bottom: 20px;
}
.modal .modal-dialog .icon-content {
position: static;
}
.modal .modal-dialog .icon-content .modal-body {
position: static;
}
.modal .modal-dialog .icon-content .modal-footer {
position: static;
}
.fontawesome-icon-list .fa-hover a { .fontawesome-icon-list .fa-hover a {
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
@ -200,23 +218,33 @@
margin-right: 10px; margin-right: 10px;
} }
.menu-content { .logitem {
display: none; overflow: hidden;
z-index: 1051; text-overflow: ellipsis;
} }
.menu-content .modal-body { .logfile {
overflow-y: auto; color: #d41404;
max-height: 180px; white-space: nowrap;
padding-bottom: 15px; }
.logfile:focus, .logfile:active, .logfile:hover {
color: red;
} }
.menu-content .dd { .logfile span {
max-width: inherit; margin-left: 4px;
} }
.icon-content .modal-footer span { .modal-header > h4 {
display: none; overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
margin-right: 20px;
}
.ex-content {
word-break: break-all;
} }
@media (min-width: 375px) { @media (min-width: 375px) {
@ -239,39 +267,3 @@
margin-right: 160px; margin-right: 160px;
} }
} }
@media (min-height: 375px) {
.menu-content .modal-body {
max-height: 240px;
}
}
@media (min-height: 414px) {
.menu-content .modal-body {
max-height: 280px;
}
}
@media (min-height: 568px) {
.menu-content .modal-body {
max-height: 430px;
}
}
@media (min-height: 667px) {
.menu-content .modal-body {
max-height: 530px;
}
}
@media (min-height: 736px) {
.menu-content .modal-body {
max-height: 600px;
}
}
@media (min-height: 768px) {
.menu-content .modal-body {
max-height: 630px;
}
}

View File

@ -7,11 +7,11 @@
<title>注册成功</title> <title>注册成功</title>
<link rel="shortcut icon" href="../../favicon.ico" /> <link rel="shortcut icon" href="../../favicon.ico" />
<!-- 新 Bootstrap 核心 CSS 文件 --> <!-- 新 Bootstrap 核心 CSS 文件 -->
<link href="../css/bootstrap.css" rel="stylesheet"> <link href="../bootstrap.css" rel="stylesheet">
<link href="../css/bootstrap-theme.css" rel="stylesheet"> <link href="../bootstrap-theme.css" rel="stylesheet">
<style type="text/css"> <style type="text/css">
body { body {
background: #02bac6 url("images/lock-bg.jpg"); background: #02bac6 url("../images/lock-bg.jpg");
background-size: cover; background-size: cover;
background-repeat: repeat; background-repeat: repeat;
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 38 KiB

View File

@ -7,7 +7,6 @@
display: block; display: block;
margin: 0; margin: 0;
padding: 0; padding: 0;
max-width: 600px;
list-style: none; list-style: none;
font-size: 13px; font-size: 13px;
line-height: 20px; line-height: 20px;
@ -176,6 +175,8 @@
.dd3-content label span i { .dd3-content label span i {
width: 22px; width: 22px;
display: inline-block; display: inline-block;
text-align: center;
margin-right: 4px;
} }
.dd3-content label input { .dd3-content label input {

View File

@ -16,7 +16,7 @@
background: rgba(0, 0, 0, 0.57); background: rgba(0, 0, 0, 0.57);
border-radius: 5px 5px 0 0; border-radius: 5px 5px 0 0;
color: #fff; color: #fff;
font-size: 34px; font-size: 32px;
text-transform: uppercase; text-transform: uppercase;
font-weight: 300; font-weight: 300;
} }

View File

@ -4,13 +4,13 @@
} }
#nprogress .bar { #nprogress .bar {
background: #29d; background: #673AB7;
position: fixed; position: fixed;
z-index: 1031; z-index: 1031;
top: 0; top: 0;
left: 0; left: 0;
width: 100%; width: 100%;
height: 2px; height: 4px;
} }
/* Fancy blur effect */ /* Fancy blur effect */
@ -32,7 +32,7 @@
display: block; display: block;
position: fixed; position: fixed;
z-index: 1031; z-index: 1031;
top: 19px; top: 22px;
right: 17px; right: 17px;
} }

View File

@ -16,8 +16,13 @@
overflow: hidden; overflow: hidden;
} }
.header {
border-bottom: none;
}
.header, .site-footer { .header, .site-footer {
position: fixed; position: fixed;
z-index: 10;
} }
.main-content { .main-content {
@ -38,5 +43,6 @@
.header, .site-footer { .header, .site-footer {
position: fixed; position: fixed;
z-index: 10;
} }
} }

View File

@ -23,23 +23,37 @@ a, a:hover, a:focus {
.dropdown-menu { .dropdown-menu {
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.176); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.176);
padding: 0;
} }
.dropdown-menu > li > a {
padding: 6px 20px;
}
.dropdown-menu .divider {
margin: 1px 0;
}
.card-view:not(:last-child) { .card-view:not(:last-child) {
margin-bottom: 6px; margin-bottom: 6px;
} }
.header { .header {
padding: 0 15px; padding: 0 15px;
height: 94px; height: 98px;
background: #fff; background: #fff;
border-bottom: 1px solid #f1f2f7; border-bottom: 1px solid #ddd;
top: 0; top: 0;
left: 0; left: 0;
right: 0; right: 0;
z-index: 50;
} }
.header .bg {
background-color: #337ab7;
height: 4px;
margin: 0 -15px;
}
.header a { .header a {
transition: all .25s linear; transition: all .25s linear;
} }
@ -49,7 +63,6 @@ a, a:hover, a:focus {
float: right; float: right;
} }
.header > .dropdown > a { .header > .dropdown > a {
border: 1px solid #eee; border: 1px solid #eee;
border-radius: 4px; border-radius: 4px;
@ -81,7 +94,6 @@ a, a:hover, a:focus {
top: 50px; top: 50px;
left: auto; left: auto;
right: 0; right: 0;
padding: 0;
} }
.header > .dropdown .dropdown-menu li { .header > .dropdown .dropdown-menu li {
@ -163,7 +175,6 @@ a, a:hover, a:focus {
bottom: 0; bottom: 0;
right: 0; right: 0;
white-space: nowrap; white-space: nowrap;
z-index: 5;
} }
.go-top { .go-top {
@ -239,7 +250,6 @@ a, a:hover, a:focus {
top: 32px; top: 32px;
left: -74px; left: -74px;
width: 235px; width: 235px;
padding: 0;
border: none; border: none;
} }
@ -401,12 +411,11 @@ a, a:hover, a:focus {
.breadcrumb { .breadcrumb {
position: absolute; position: absolute;
top: 56px; top: 60px;
left: 15px; left: 15px;
right: 15px; right: 15px;
border-color: #ddd; border: solid 1px #ddd;
border-width: 1px 0 0 0; border-width: 1px 0 0 0;
border-style: solid;
background-color: transparent; background-color: transparent;
border-top-left-radius: 0; border-top-left-radius: 0;
border-top-right-radius: 0; border-top-right-radius: 0;
@ -429,7 +438,7 @@ a, a:hover, a:focus {
left: 0; left: 0;
bottom: 40px; bottom: 40px;
right: 0; right: 0;
top: 94px; top: 98px;
overflow: hidden; overflow: hidden;
} }

View File

@ -53,9 +53,9 @@
.tasks-widget .task-list li > .task-title .task-value { .tasks-widget .task-list li > .task-title .task-value {
position: absolute; position: absolute;
left: 190px; left: 190px;
right: 62px; right: 84px;
top: 15px; top: 15px;
display: inline-block; display: none;
} }
.tasks-widget .task-list li > .task-title span { .tasks-widget .task-list li > .task-title span {
@ -121,7 +121,7 @@
.tasks-widget .task-list li .task-title .task-title-sp { .tasks-widget .task-list li .task-title .task-title-sp {
margin-right: 5px; margin-right: 5px;
max-width: 150px; max-width: 120px;
padding-top: 15px; padding-top: 15px;
} }
@ -255,14 +255,8 @@
} }
} }
@media only screen and (max-width: 320px) { @media (min-width: 375px) {
.tasks-widget .task-list li > .task-title .task-value {
.tasks-widget .task-config-btn { display: inline-block;
float: inherit;
display: block;
}
.tasks-widget .task-list-projects li > .label {
margin-bottom: 5px;
} }
} }

View File

@ -0,0 +1,228 @@
.toast-title {
font-weight: bold;
}
.toast-message {
-ms-word-wrap: break-word;
word-wrap: break-word;
}
.toast-message a,
.toast-message label {
color: #FFFFFF;
}
.toast-message a:hover {
color: #CCCCCC;
text-decoration: none;
}
.toast-close-button {
position: relative;
right: -0.3em;
top: -0.3em;
float: right;
font-size: 20px;
font-weight: bold;
color: #FFFFFF;
-webkit-text-shadow: 0 1px 0 #ffffff;
text-shadow: 0 1px 0 #ffffff;
opacity: 0.8;
-ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);
filter: alpha(opacity=80);
line-height: 1;
}
.toast-close-button:hover,
.toast-close-button:focus {
color: #000000;
text-decoration: none;
cursor: pointer;
opacity: 0.4;
-ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=40);
filter: alpha(opacity=40);
}
.rtl .toast-close-button {
left: -0.3em;
float: left;
right: 0.3em;
}
/*Additional properties for button version
iOS requires the button element instead of an anchor tag.
If you want the anchor version, it requires `href="#"`.*/
button.toast-close-button {
padding: 0;
cursor: pointer;
background: transparent;
border: 0;
-webkit-appearance: none;
}
.toast-top-center {
top: 0;
right: 0;
width: 100%;
}
.toast-bottom-center {
bottom: 0;
right: 0;
width: 100%;
}
.toast-top-full-width {
top: 0;
right: 0;
width: 100%;
}
.toast-bottom-full-width {
bottom: 0;
right: 0;
width: 100%;
}
.toast-top-left {
top: 12px;
left: 12px;
}
.toast-top-right {
top: 12px;
right: 12px;
}
.toast-bottom-right {
right: 12px;
bottom: 12px;
}
.toast-bottom-left {
bottom: 12px;
left: 12px;
}
#toast-container {
position: fixed;
z-index: 999999;
pointer-events: none;
/*overrides*/
}
#toast-container * {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
#toast-container > div {
position: relative;
pointer-events: auto;
overflow: hidden;
margin: 0 0 6px;
padding: 15px 15px 15px 50px;
width: 300px;
-moz-border-radius: 3px 3px 3px 3px;
-webkit-border-radius: 3px 3px 3px 3px;
border-radius: 3px 3px 3px 3px;
background-position: 15px center;
background-repeat: no-repeat;
-moz-box-shadow: 0 0 12px #999999;
-webkit-box-shadow: 0 0 12px #999999;
box-shadow: 0 0 12px #999999;
color: #FFFFFF;
opacity: 0.8;
-ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);
filter: alpha(opacity=80);
}
#toast-container > div.rtl {
direction: rtl;
padding: 15px 50px 15px 15px;
background-position: right 15px center;
}
#toast-container > div:hover {
-moz-box-shadow: 0 0 12px #000000;
-webkit-box-shadow: 0 0 12px #000000;
box-shadow: 0 0 12px #000000;
opacity: 1;
-ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
filter: alpha(opacity=100);
cursor: pointer;
}
#toast-container > .toast-info {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=") !important;
}
#toast-container > .toast-error {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=") !important;
}
#toast-container > .toast-success {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==") !important;
}
#toast-container > .toast-warning {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=") !important;
}
#toast-container.toast-top-center > div,
#toast-container.toast-bottom-center > div {
width: 300px;
margin-left: auto;
margin-right: auto;
}
#toast-container.toast-top-full-width > div,
#toast-container.toast-bottom-full-width > div {
width: 96%;
margin-left: auto;
margin-right: auto;
}
.toast {
background-color: #030303;
}
.toast-success {
background-color: #51A351;
}
.toast-error {
background-color: #BD362F;
}
.toast-info {
background-color: #2F96B4;
}
.toast-warning {
background-color: #F89406;
}
.toast-progress {
position: absolute;
left: 0;
bottom: 0;
height: 4px;
background-color: #000000;
opacity: 0.4;
-ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=40);
filter: alpha(opacity=40);
}
/*Responsive Design*/
@media all and (max-width: 240px) {
#toast-container > div {
padding: 8px 8px 8px 50px;
width: 11em;
}
#toast-container > div.rtl {
padding: 8px 50px 8px 8px;
}
#toast-container .toast-close-button {
right: -0.2em;
top: -0.2em;
}
#toast-container .rtl .toast-close-button {
left: -0.2em;
right: 0.2em;
}
}
@media all and (min-width: 241px) and (max-width: 480px) {
#toast-container > div {
padding: 8px 8px 8px 50px;
width: 18em;
}
#toast-container > div.rtl {
padding: 8px 50px 8px 8px;
}
#toast-container .toast-close-button {
right: -0.2em;
top: -0.2em;
}
#toast-container .rtl .toast-close-button {
left: -0.2em;
right: 0.2em;
}
}
@media all and (min-width: 481px) and (max-width: 768px) {
#toast-container > div {
padding: 15px 15px 15px 50px;
width: 25em;
}
#toast-container > div.rtl {
padding: 15px 50px 15px 15px;
}
}

File diff suppressed because one or more lines are too long

View File

@ -77,6 +77,7 @@ namespace Bootstrap.Admin.Controllers
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
[OutputCache(CacheProfile = "IconView")] [OutputCache(CacheProfile = "IconView")]
[AllowAnonymous]
public PartialViewResult IconView() public PartialViewResult IconView()
{ {
Response.Cache.SetOmitVaryStar(true); Response.Cache.SetOmitVaryStar(true);

View File

@ -32,10 +32,14 @@ namespace Bootstrap.Admin.Controllers
[HttpPut] [HttpPut]
public bool Put([FromBody]User value) public bool Put([FromBody]User value)
{ {
if(value.UserStatus == 3)
{
return UserHelper.SaveUserCssByName(value.UserName, value.Css);
}
if (value.UserStatus == 9) if (value.UserStatus == 9)
{ {
// vlaidate userName // vlaidate userName
return BootstrapUser.RetrieveUserByUserName(value.UserName) == null; return BootstrapUser.RetrieveUserByUserName(value.UserName) == null && !UserHelper.RetrieveNewUsers().Any(u => u.UserName == value.UserName);
} }
var ret = false; var ret = false;
if (value.UserName.Equals(User.Identity.Name, System.StringComparison.OrdinalIgnoreCase) || LgbPrincipal.IsAdmin(User)) if (value.UserName.Equals(User.Identity.Name, System.StringComparison.OrdinalIgnoreCase) || LgbPrincipal.IsAdmin(User))

View File

@ -0,0 +1,21 @@
using Bootstrap.DataAccess;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
namespace Bootstrap.Admin.Controllers
{
public class WSController : ApiController
{
/// <summary>
///
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
[HttpGet]
public List<MessageBody> Get()
{
return NotificationHelper.MessagePool.ToList();
}
}
}

Binary file not shown.

View File

@ -15,6 +15,7 @@ namespace Bootstrap.Admin.Models
Icon = user.Icon; Icon = user.Icon;
DisplayName = user.DisplayName; DisplayName = user.DisplayName;
UserName = user.UserName; UserName = user.UserName;
Css = user.Css;
} }
public string UserName { get; private set; } public string UserName { get; private set; }
/// <summary> /// <summary>
@ -29,5 +30,9 @@ namespace Bootstrap.Admin.Models
/// 获得/设置 用户头像地址 /// 获得/设置 用户头像地址
/// </summary> /// </summary>
public string Icon { get; private set; } public string Icon { get; private set; }
/// <summary>
///
/// </summary>
public string Css { get; private set; }
} }
} }

View File

@ -1,8 +1,6 @@
using Bootstrap.DataAccess; using Bootstrap.DataAccess;
using Bootstrap.Security; using Bootstrap.Security;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
namespace Bootstrap.Admin.Models namespace Bootstrap.Admin.Models
{ {
@ -10,21 +8,10 @@ namespace Bootstrap.Admin.Models
{ {
public NavigatorBarModel(string url) public NavigatorBarModel(string url)
{ {
Navigations = BootstrapMenu.RetrieveSystemMenus(UserName); Navigations = BootstrapMenu.RetrieveSystemMenus(UserName, url);
Applications = DictHelper.RetrieveApps(); Applications = DictHelper.RetrieveApps();
ActiveMenu(null, Navigations.ToList(), url);
HomeUrl = "~/Admin/Index"; HomeUrl = "~/Admin/Index";
} }
private void ActiveMenu(BootstrapMenu parent, List<BootstrapMenu> menus, string url)
{
menus.ForEach(m =>
{
m.Active = m.Url.Equals(url, StringComparison.OrdinalIgnoreCase) ? "active" : "";
ActiveMenu(m, m.Menus.ToList(), url);
if (parent != null && m.Active != "") parent.Active = m.Active;
});
}
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>

View File

@ -1,4 +1,7 @@
using System.IO; using Bootstrap.DataAccess;
using Bootstrap.Security;
using System.Collections.Generic;
using System.IO;
using System.Web; using System.Web;
namespace Bootstrap.Admin.Models namespace Bootstrap.Admin.Models
@ -13,16 +16,23 @@ namespace Bootstrap.Admin.Models
/// </summary> /// </summary>
public long Size { get; private set; } public long Size { get; private set; }
/// <summary> /// <summary>
/// 获得 系统配置的所有样式表
/// </summary>
public IEnumerable<BootstrapDict> Csss { get; private set; }
/// <summary>
/// ///
/// </summary> /// </summary>
/// <param name="url"></param> /// <param name="url"></param>
public ProfilesModel(string url) : base(url) public ProfilesModel(string url)
: base(url)
{ {
var fileName = HttpContext.Current.Server.MapPath(Icon); var fileName = HttpContext.Current.Server.MapPath(Icon);
if (File.Exists(fileName)) if (File.Exists(fileName))
{ {
Size = new FileInfo(fileName).Length; Size = new FileInfo(fileName).Length;
} }
Csss = DictHelper.RetrieveWebCss();
} }
} }
} }

View File

@ -19,7 +19,7 @@
queryParams: function (params) { return $.extend(params, { category: $('#txt_dict_cate').val(), name: $("#txt_dict_name").val(), define: $("#txt_dict_define").val() }); }, queryParams: function (params) { return $.extend(params, { category: $('#txt_dict_cate').val(), name: $("#txt_dict_name").val(), define: $("#txt_dict_define").val() }); },
columns: [ columns: [
{ checkbox: true }, { checkbox: true },
{ title: "Id", field: "Id", events: bsa.idEvents(), formatter: BootstrapAdmin.idFormatter }, { title: "编辑", field: "Id", events: bsa.idEvents(), formatter: BootstrapAdmin.idFormatter },
{ title: "字典标签", field: "Category", sortable: true }, { title: "字典标签", field: "Category", sortable: true },
{ title: "字典名称", field: "Name", sortable: true }, { title: "字典名称", field: "Name", sortable: true },
{ title: "字典代码", field: "Code", sortable: true }, { title: "字典代码", field: "Code", sortable: true },

View File

@ -42,12 +42,12 @@
Id: "", url: Exceptions.url, swal: false, Id: "", url: Exceptions.url, swal: false,
callback: function (result) { callback: function (result) {
var html = result.map(function (ele) { var html = result.map(function (ele) {
return $.format('<div class="form-group col-lg-3 col-md-3 col-sm-4 col-xs-6"><a class="logfile" href="#"><i class="fa fa-file-text-o"></i><span>{0}</span></a></div>', ele); return $.format('<div class="form-group col-lg-3 col-md-3 col-sm-4 col-xs-6 logitem"><a class="logfile" title="{0}" href="#"><i class="fa fa-file-text-o"></i><span>{0}</span></a></div>', ele);
}).join(''); }).join('');
$dataForm.children('div').html(html); $dataForm.children('div').html(html);
$dialog.modal('show');
} }
}); });
$dialog.modal('show');
}); });
$dialog.on('click', 'a', function () { $dialog.on('click', 'a', function () {

View File

@ -79,7 +79,7 @@
sortName: 'GroupName', sortName: 'GroupName',
queryParams: function (params) { return $.extend(params, { groupName: $("#txt_search_name").val(), description: $("#txt_group_desc").val() }); }, //传递参数(* queryParams: function (params) { return $.extend(params, { groupName: $("#txt_search_name").val(), description: $("#txt_group_desc").val() }); }, //传递参数(*
columns: [{ checkbox: true }, columns: [{ checkbox: true },
{ title: "Id", field: "Id", events: bsa.idEvents(), formatter: BootstrapAdmin.idFormatter }, { title: "编辑", field: "Id", events: bsa.idEvents(), formatter: BootstrapAdmin.idFormatter },
{ title: "部门名称", field: "GroupName", sortable: true }, { title: "部门名称", field: "GroupName", sortable: true },
{ title: "部门描述", field: "Description", sortable: false } { title: "部门描述", field: "Description", sortable: false }
] ]

View File

@ -140,7 +140,7 @@
success(result); success(result);
}, },
error: function (XMLHttpRequest, textStatus, errorThrown) { error: function (XMLHttpRequest, textStatus, errorThrown) {
if ($.isFunction(data.callback)) data.callback(false); if (XMLHttpRequest.responseJSON) lgbSwal({ title: errorThrown, text: XMLHttpRequest.responseJSON.Message, type: 'error' });
} }
}); });
} }
@ -159,7 +159,7 @@
}, },
lgbSwal: function (options) { lgbSwal: function (options) {
if ($.isFunction(swal)) { if ($.isFunction(swal)) {
swal($.extend({ showConfirmButton: false, showCancelButton: false, timer: 800, title: '未设置', type: "success" }, options)); swal($.extend({ showConfirmButton: false, showCancelButton: false, timer: 1000, title: '未设置', type: "success" }, options));
} }
} }
}); });

View File

@ -1,9 +1,9 @@
$(function () { $(function () {
var $dialog = $('#dialogNew'); var $dialog = $('#dialogNew');
var $pickIcon = $('#pickIcon'); var $pickIcon = $('#pickIcon');
var $dialogNew = $dialog.find('div.modal-dialog'); var $dialogNew = $dialog;
var $dialogIcon = $('#dialogIcon'); var $dialogIcon = $('#dialogIcon');
var $dialogMenu = $('#dialogSubMenu').find('.modal-content'); var $dialogMenu = $('#dialogMenu');
var $dialogRole = $('#dialogRole'); var $dialogRole = $('#dialogRole');
var $dialogRoleHeader = $('#myRoleModalLabel'); var $dialogRoleHeader = $('#myRoleModalLabel');
var $dialogRoleForm = $('#roleForm'); var $dialogRoleForm = $('#roleForm');
@ -18,7 +18,7 @@
var initNestMenu = function () { var initNestMenu = function () {
$nestMenuInput = $nestMenu.find('div.dd3-content'); $nestMenuInput = $nestMenu.find('div.dd3-content');
$nestMenuInput.find('label:first').hide(); $nestMenuInput.children('.checkbox').hide();
} }
var bsa = new BootstrapAdmin({ var bsa = new BootstrapAdmin({
@ -82,7 +82,7 @@
queryParams: function (params) { return $.extend(params, { parentName: $('#txt_parent_menus_name').val(), name: $("#txt_menus_name").val(), category: $('#sel_menus_category').val(), isresource: $('#sel_menus_res').val() }); }, //传递参数(* queryParams: function (params) { return $.extend(params, { parentName: $('#txt_parent_menus_name').val(), name: $("#txt_menus_name").val(), category: $('#sel_menus_category').val(), isresource: $('#sel_menus_res').val() }); }, //传递参数(*
columns: [ columns: [
{ checkbox: true }, { checkbox: true },
{ title: "Id", field: "Id", events: bsa.idEvents(), formatter: BootstrapAdmin.idFormatter }, { title: "编辑", field: "Id", events: bsa.idEvents(), formatter: BootstrapAdmin.idFormatter },
{ title: "父级菜单", field: "ParentName", sortable: true }, { title: "父级菜单", field: "ParentName", sortable: true },
{ title: "菜单名称", field: "Name", sortable: true }, { title: "菜单名称", field: "Name", sortable: true },
{ title: "菜单序号", field: "Order", sortable: true }, { title: "菜单序号", field: "Order", sortable: true },
@ -178,7 +178,6 @@
// 排序按钮 // 排序按钮
$('#btnMenuOrder').on('click', function () { $('#btnMenuOrder').on('click', function () {
$dialogNew.hide();
$btnSubmitMenu.data('type', 'order'); $btnSubmitMenu.data('type', 'order');
$nestMenuInput.find('label:last').find('input').hide(); $nestMenuInput.find('label:last').find('input').hide();
$nestMenu.find('li.dd-item').hide().remove('[data-id="0"]'); $nestMenu.find('li.dd-item').hide().remove('[data-id="0"]');
@ -193,27 +192,24 @@
$nestMenu.find('ol.dd-list:first').append($.format('<li class="dd-item dd3-item" data-id="0" data-order="10" data-category="{1}"><div class="dd-handle dd3-handle"></div><div class="dd3-content"><label><span>{0}</span></label></div></li>', menuName, menuCate)); $nestMenu.find('ol.dd-list:first').append($.format('<li class="dd-item dd3-item" data-id="0" data-order="10" data-category="{1}"><div class="dd-handle dd3-handle"></div><div class="dd3-content"><label><span>{0}</span></label></div></li>', menuName, menuCate));
} }
$nestMenu.find('li[data-id="' + did + '"] > div.dd3-content span').addClass('active'); $nestMenu.find('li[data-id="' + did + '"] > div.dd3-content span').addClass('active');
$dialogMenu.show().adjustDialog(); $dialogNew.hide();
$dialogMenu.modal('show');
}); });
// 选择父节点按钮 // 选择父节点按钮
$('#btnMenuParent').on('click', function () { $('#btnMenuParent').on('click', function () {
$dialogNew.hide();
$btnSubmitMenu.data('type', 'parent'); $btnSubmitMenu.data('type', 'parent');
$nestMenuInput.find('label:last').find('input').show(); $nestMenuInput.find('label:last').find('input').show();
$nestMenu.find('li.dd-item').hide().remove('[data-id="0"]'); $nestMenu.find('li.dd-item').hide().remove('[data-id="0"]');
$nestMenu.find('li[data-category="' + $category.val() + '"]').show(); $nestMenu.find('li[data-category="' + $category.val() + '"]').show();
$dialogMenu.show().adjustDialog(); $dialogNew.hide();
$dialogMenu.modal('show');
}); });
$dialogMenu.find('div.modal-header, div.modal-footer').on('click', 'button', function () { $dialogMenu.on('hidden.bs.modal', function () { $dialogNew.show().find('.modal-dialog').adjustDialog(); });
// remove active css
$nestMenu.find('li span').removeClass('active');
$dialogMenu.hide();
$dialogNew.show();
});
$btnSubmitMenu.on('click', function () { $btnSubmitMenu.on('click', function () {
$nestMenu.find('li span').removeClass('active');
var type = $(this).data('type'); var type = $(this).data('type');
switch (type) { switch (type) {
case "parent": case "parent":
@ -264,8 +260,11 @@
}); });
$(window).on('resize.bs.modal', function () { $(window).on('resize.bs.modal', function () {
if ($dialogMenu.is(':visible')) { if ($dialogMenu.is(':visible') && ($(window).width() >= 768 || $(window).height() >= 672)) {
$dialogMenu.adjustDialog(); $dialogMenu.adjustDialog();
} }
else {
$dialogMenu.css({ margin: "0" });
}
}); });
}); });

View File

@ -26,8 +26,8 @@
maxlength: 50 maxlength: 50
} }
}, { }, {
button: ['btnSaveDisplayName'] button: ['btnSaveDisplayName']
}); });
$('#passwordDataForm').autoValidate({ $('#passwordDataForm').autoValidate({
currentPassword: { currentPassword: {
required: true, required: true,
@ -43,8 +43,8 @@
maxlength: 50 maxlength: 50
} }
}, { }, {
button: ['btnSavePassword'] button: ['btnSavePassword']
}); });
var bsa = new BootstrapAdmin({ var bsa = new BootstrapAdmin({
url: Profiles.url, url: Profiles.url,
@ -54,7 +54,8 @@
Password: "currentPassword", Password: "currentPassword",
NewPassword: "newPassword", NewPassword: "newPassword",
DisplayName: "displayName", DisplayName: "displayName",
UserName: "userName" UserName: "userName",
Css: "css"
} }
}), }),
click: { click: {
@ -81,6 +82,12 @@
}); });
} }
} }
}, {
id: 'btnSaveCss',
click: function (row, data) {
data.UserStatus = 3;
$.bc({ url: User.url, method: "PUT", data: data, title: "保存样式" });
}
}] }]
} }
}); });

View File

@ -16,7 +16,7 @@
url: Role.url, url: Role.url,
dataEntity: new DataEntity({ dataEntity: new DataEntity({
map: { map: {
ID: "roleID", Id: "roleID",
RoleName: "roleName", RoleName: "roleName",
Description: "roleDesc" Description: "roleDesc"
} }
@ -120,10 +120,11 @@
url: Role.url, //请求后台的URL* url: Role.url, //请求后台的URL*
sortName: 'RoleName', sortName: 'RoleName',
queryParams: function (params) { return $.extend(params, { roleName: $("#txt_search_name").val(), description: $("#txt_role_desc").val() }); }, //传递参数(* queryParams: function (params) { return $.extend(params, { roleName: $("#txt_search_name").val(), description: $("#txt_role_desc").val() }); }, //传递参数(*
columns: [{ checkbox: true }, columns: [
{ title: "Id", field: "Id", events: bsa.idEvents(), formatter: BootstrapAdmin.idFormatter }, { checkbox: true },
{ title: "角色名称", field: "RoleName", sortable: true }, { title: "编辑", field: "Id", events: bsa.idEvents(), formatter: BootstrapAdmin.idFormatter },
{ title: "角色描述", field: "Description", sortable: false } { title: "角色名称", field: "RoleName", sortable: true },
{ title: "角色描述", field: "Description", sortable: false }
] ]
}); });
@ -143,6 +144,6 @@
if (child.hasClass('dd-list')) { if (child.hasClass('dd-list')) {
child.find(':checkbox').prop('checked', val); child.find(':checkbox').prop('checked', val);
} }
}).find('label:last').hide(); }).children('.radio').hide();
}); });
}); });

View File

@ -57,16 +57,14 @@
id: 'cssSave', id: 'cssSave',
click: function (row, data) { click: function (row, data) {
var cssDefine = $('#dictCssDefine').val(); var cssDefine = $('#dictCssDefine').val();
if (cssDefine) { $.bc({
$.bc({ url: Settings.url, data: { name: '使用样式', code: cssDefine, category: '当前样式' }, title: '网站样式',
url: Settings.url, data: { name: '使用样式', code: cssDefine, category: '当前样式' }, title: '网站样式', callback: function (result) {
callback: function (result) { if (result) {
if (result) { window.setTimeout(function () { window.location.reload(true); }, 1000);
window.setTimeout(function () { window.location.reload(true); }, 1000);
}
} }
}); }
} });
} }
}] }]
} }
@ -145,7 +143,7 @@
default: default:
break; break;
} }
return $.format(html, ele.Interval, ele.Key, ele.Desc, ele.Value, css, options.url, Math.max(0, ele.Interval - Math.round((new Date() - new Date(ele.CreateTime)) / 1000))); return $.format(html, ele.Interval, ele.Key, ele.Desc, ele.Value, css, options.url, Math.max(0, ele.Interval - Math.round((new Date() - new Date(ele.CreateTime.replace(/-/g, '/'))) / 1000)));
}).join(''); }).join('');
$sortable.append($.format('<li class="title">{0}-{1}</li>', options.item.Desc, options.item.Key)); $sortable.append($.format('<li class="title">{0}-{1}</li>', options.item.Desc, options.item.Key));
$sortable.append(content); $sortable.append(content);
@ -167,7 +165,7 @@
Id: 1, url: Dicts.url, data: { type: 'css' }, swal: false, Id: 1, url: Dicts.url, data: { type: 'css' }, swal: false,
callback: function (result) { callback: function (result) {
var html = result.map(function (ele, index) { return $.format('<li><a href="#" data-val="{1}">{0}</a></li>', ele.Name, ele.Code); }).join(''); var html = result.map(function (ele, index) { return $.format('<li><a href="#" data-val="{1}">{0}</a></li>', ele.Name, ele.Code); }).join('');
$('#cssContainer').html(html); $('#cssContainer').append(html);
$.bc({ $.bc({
Id: 1, url: Dicts.url, data: { type: 'activeCss' }, swal: false, Id: 1, url: Dicts.url, data: { type: 'activeCss' }, swal: false,
callback: function (result) { callback: function (result) {

View File

@ -94,7 +94,7 @@
queryParams: function (params) { return $.extend(params, { name: $("#txt_search_name").val(), displayName: $('#txt_display_name').val() }); }, //传递参数(* queryParams: function (params) { return $.extend(params, { name: $("#txt_search_name").val(), displayName: $('#txt_display_name').val() }); }, //传递参数(*
columns: [ columns: [
{ checkbox: true }, { checkbox: true },
{ title: "Id", field: "Id", events: bsa.idEvents(), formatter: BootstrapAdmin.idFormatter }, { title: "编辑", field: "Id", events: bsa.idEvents(), formatter: BootstrapAdmin.idFormatter },
{ title: "登陆名称", field: "UserName", sortable: true }, { title: "登陆名称", field: "UserName", sortable: true },
{ title: "显示名称", field: "DisplayName", sortable: true }, { title: "显示名称", field: "DisplayName", sortable: true },
{ title: "注册时间", field: "RegisterTime", sortable: true }, { title: "注册时间", field: "RegisterTime", sortable: true },

View File

@ -3,10 +3,10 @@
var html = ""; var html = "";
$.each(menus, function (index, menu) { $.each(menus, function (index, menu) {
if (menu.Menus.length == 0) { if (menu.Menus.length == 0) {
html += $.format('<li class="dd-item dd3-item" data-id="{0}" data-order="{4}" data-category="{3}"><div class="dd-handle dd3-handle"></div><div class="dd3-content"><label><input type="checkbox" value="{0}"><span><i class="{1}"></i>{2}</span></label><label><input type="radio" name="menu" value="{0}"><span><i class="{1}"></i>{2}</span></label><span class="menuType">{5}</span><span class="menuOrder">{4}</span></div></li>', menu.Id, menu.Icon, menu.Name, menu.Category, menu.Order, menu.CategoryName); html += $.format('<li class="dd-item dd3-item" data-id="{0}" data-order="{4}" data-category="{3}"><div class="dd-handle dd3-handle"></div><div class="dd3-content"><div class="checkbox"><label><input type="checkbox" value="{0}"><span><i class="{1}"></i>{2}</span></label></div><div class="radio"><label><input type="radio" name="menu" value="{0}"><span><i class="{1}"></i>{2}</span></label></div><span class="menuType">{5}</span><span class="menuOrder">{4}</span></div></li>', menu.Id, menu.Icon, menu.Name, menu.Category, menu.Order, menu.CategoryName);
} }
else { else {
html += $.format('<li class="dd-item dd3-item" data-id="{0}" data-order="{5}" data-category="{3}"><div class="dd-handle dd3-handle"></div><div class="dd3-content"><label><input type="checkbox" value="{0}"><span><i class="{1}"></i>{2}</span></label><label><input type="radio" name="menu" value="{0}"><span><i class="{1}"></i>{2}</span></label><span class="menuType">{6}</span><span class="menuOrder">{5}</span></div><ol class="dd-list">{4}</ol></li>', menu.Id, menu.Icon, menu.Name, menu.Category, cascadeSubMenu(menu.Menus), menu.Order, menu.CategoryName); html += $.format('<li class="dd-item dd3-item" data-id="{0}" data-order="{5}" data-category="{3}"><div class="dd-handle dd3-handle"></div><div class="dd3-content"><div class="checkbox"><label><input type="checkbox" value="{0}"><span><i class="{1}"></i>{2}</span></label></div><div class="radio"><label><input type="radio" name="menu" value="{0}"><span><i class="{1}"></i>{2}</span></label></div><span class="menuType">{6}</span><span class="menuOrder">{5}</span></div><ol class="dd-list">{4}</ol></li>', menu.Id, menu.Icon, menu.Name, menu.Category, cascadeSubMenu(menu.Menus), menu.Order, menu.CategoryName);
} }
}); });
return html; return html;
@ -15,7 +15,7 @@
var cascadeSubMenu = function (menus) { var cascadeSubMenu = function (menus) {
var html = "" var html = ""
$.each(menus, function (index, menu) { $.each(menus, function (index, menu) {
html += $.format('<li class="dd-item dd3-item" data-id="{0}" data-order="{4}" data-category="{3}"><div class="dd-handle dd3-handle"></div><div class="dd3-content"><label><input type="checkbox" value="{0}"><span><i class="{1}"></i>{2}</span></label><label><input type="radio" name="menu" value="{0}"><span><i class="{1}"></i>{2}</span></label><span class="menuType">{5}</span><span class="menuOrder">{4}</span></div></li>', menu.Id, menu.Icon, menu.Name, menu.Category, menu.Order, menu.CategoryName); html += $.format('<li class="dd-item dd3-item" data-id="{0}" data-order="{4}" data-category="{3}"><div class="dd-handle dd3-handle"></div><div class="dd3-content"><div class="checkbox"><label><input type="checkbox" value="{0}"><span><i class="{1}"></i>{2}</span></label></div><div class="radio"><label><input type="radio" name="menu" value="{0}"><span><i class="{1}"></i>{2}</span></label></div><span class="menuType">{5}</span><span class="menuOrder">{4}</span></div></li>', menu.Id, menu.Icon, menu.Name, menu.Category, menu.Order, menu.CategoryName);
}); });
return html; return html;
}; };
@ -33,11 +33,128 @@
callback(); callback();
} }
}); });
},
resetWidget: function () {
var widgets = $(this).children('li');
widgets.each(function () {
var widget = $(this).children('ul');
if (widget.children().length === 3) return;
var last = widget.children(':last');
while (widget.children().length > 3) {
widget.children(':eq(2)').remove();
}
});
return $(this);
}
});
$.extend({
pullNotification: function () {
if ($('.notify-row').length == 0) return;
setTimeout(function () {
NProgress.status = true;
NProgress.configure({ trickle: false });
$.bc({
url: '../api/WS',
method: 'GET',
swal: false,
callback: function (result) {
NProgress.status = false;
for (index in result) {
var cate = result[index].Category;
var msg = result[index].Message;
switch (cate) {
case "Notification":
toastr.error(msg, "应用程序出现错误");
break;
case "Users":
toastr.info(msg, "新用户注册");
break;
}
};
if (result.length > 0) $.reloadWidget();
$.pullNotification();
}
});
}, 5000);
},
reloadWidget: function () {
if ($('.notify-row').length == 0) return;
$.bc({
url: Notifications.url,
swal: false,
method: 'GET',
callback: function (result) {
$('#logoutNoti').text(result.NewUsersCount);
$('.notify-row').resetWidget();
// tasks
// new users
$('#msgHeaderTask').text(result.TasksCount);
$('#msgHeaderTaskBadge').text(result.TasksCount);
var htmlUserTemplate = '<li><a href="../Admin/Tasks?id={3}"><span class="desc">{0}-{2}</span><span class="percent">{1}%</span></span><div class="progress progress-striped"><div class="progress-bar" role="progressbar" aria-valuenow="{1}" aria-valuemin="0" aria-valuemax="100" style="width: {1}%"><span class="sr-only">{1}% 完成</span></div></div></a></li>';
var html = result.Tasks.map(function (u) {
return $.format(htmlUserTemplate, u.TaskName, u.TaskProgress, u.AssignDisplayName, u.Id);
}).join('');
$(html).insertAfter($('#msgHeaderTaskContent'));
// new users
$('#msgHeaderUser').text(result.NewUsersCount);
$('#msgHeaderUserBadge').text(result.NewUsersCount);
htmlUserTemplate = '<li><a href="../Admin/Notifications"><span class="label label-success"><i class="fa fa-plus"></i></span><div title="{2}" class="content">{1}({0})</div><span class="small italic">{3}</span></a></li>';
html = result.Users.map(function (u) {
return $.format(htmlUserTemplate, u.UserName, u.DisplayName, u.Description, u.Period);
}).join('');
$(html).insertAfter($('#msgHeaderUserContent'));
// apps
$('#msgHeaderApp').text(result.AppExceptionsCount);
$('#msgHeaderAppBadge').text(result.AppExceptionsCount);
htmlUserTemplate = '<li><a href="../Admin/Exceptions"><span class="label label-warning"><i class="fa fa-bug"></i></span><div title="{1}" class="content">{0}</div><span class="small italic">{2}</span></a></li>';
html = result.Apps.map(function (u) {
return $.format(htmlUserTemplate, u.ExceptionType, u.Message, u.Period);
}).join('');
$(html).insertAfter($('#msgHeaderAppContent'));
// dbs
$('#msgHeaderDb').text(result.DbExceptionsCount);
$('#msgHeaderDbBadge').text(result.DbExceptionsCount);
htmlUserTemplate = '<li><a href="../Admin/Exceptions"><span class="label label-danger"><i class="fa fa-bolt"></i></span><div title="{1}" class="content">{0}</div><span class="small italic">{2}</span></a></li>';
html = result.Dbs.map(function (u) {
return $.format(htmlUserTemplate, u.ErrorPage, u.Message, u.Period);
}).join('');
$(html).insertAfter($('#msgHeaderDbContent'));
// messages
$('#msgHeaderMsg').text(result.MessagesCount);
$('#msgHeaderMsgBadge').text(result.MessagesCount);
htmlUserTemplate = '<li><a href="../Admin/Messages?id={0}"><span class="photo"><img alt="avatar" src="{1}"></span><span class="subject"><span class="from">{2}</span><span class="time">{4}</span></span><span class="message" title="{5}">{3}</span></a></li>';
html = result.Messages.map(function (u) {
return $.format(htmlUserTemplate, u.Id, u.FromIcon, u.FromDisplayName, u.Title, u.Period, u.Content);
}).join('');
$(html).insertAfter($('#msgHeaderMsgContent'));
}
});
} }
}); });
})(jQuery); })(jQuery);
$(function () { $(function () {
toastr.options = {
"closeButton": true,
"debug": false,
"progressBar": true,
"positionClass": "toast-bottom-right",
"onclick": null,
"showDuration": "600",
"hideDuration": "2000",
"timeOut": "5000",
"extendedTimeOut": "1000",
"showEasing": "swing",
"hideEasing": "linear",
"showMethod": "fadeIn",
"hideMethod": "fadeOut"
}
var $sidebar = $("#sidebar"); var $sidebar = $("#sidebar");
var $main = $('#main-content'); var $main = $('#main-content');
var $breadNav = $('#breadNav'); var $breadNav = $('#breadNav');
@ -90,58 +207,6 @@ $(function () {
$('.lgbDropdown').lgbDropdown(); $('.lgbDropdown').lgbDropdown();
// load widget data // load widget data
$.bc({ $.reloadWidget();
url: Notifications.url, $.pullNotification();
swal: false,
method: 'GET',
callback: function (result) {
$('#logoutNoti').text(result.NewUsersCount);
// tasks
// new users
$('#msgHeaderTask').text(result.TasksCount);
$('#msgHeaderTaskBadge').text(result.TasksCount);
var htmlUserTemplate = '<li><a href="../Admin/Tasks?id={3}"><span class="desc">{0}-{2}</span><span class="percent">{1}%</span></span><div class="progress progress-striped"><div class="progress-bar" role="progressbar" aria-valuenow="{1}" aria-valuemin="0" aria-valuemax="100" style="width: {1}%"><span class="sr-only">{1}% 完成</span></div></div></a></li>';
var html = result.Tasks.map(function (u) {
return $.format(htmlUserTemplate, u.TaskName, u.TaskProgress, u.AssignDisplayName, u.Id);
}).join('');
$(html).insertAfter($('#msgHeaderTaskContent'));
// new users
$('#msgHeaderUser').text(result.NewUsersCount);
$('#msgHeaderUserBadge').text(result.NewUsersCount);
htmlUserTemplate = '<li><a href="../Admin/Notifications"><span class="label label-success"><i class="fa fa-plus"></i></span><div title="{2}" class="content">{1}({0})</div><span class="small italic">{3}</span></a></li>';
html = result.Users.map(function (u) {
return $.format(htmlUserTemplate, u.UserName, u.DisplayName, u.Description, u.Period);
}).join('');
$(html).insertAfter($('#msgHeaderUserContent'));
// apps
$('#msgHeaderApp').text(result.AppExceptionsCount);
$('#msgHeaderAppBadge').text(result.AppExceptionsCount);
htmlUserTemplate = '<li><a href="../Admin/Exceptions"><span class="label label-warning"><i class="fa fa-bug"></i></span><div title="{1}" class="content">{0}</div><span class="small italic">{2}</span></a></li>';
html = result.Apps.map(function (u) {
return $.format(htmlUserTemplate, u.ExceptionType, u.Message, u.Period);
}).join('');
$(html).insertAfter($('#msgHeaderAppContent'));
// dbs
$('#msgHeaderDb').text(result.DbExceptionsCount);
$('#msgHeaderDbBadge').text(result.DbExceptionsCount);
htmlUserTemplate = '<li><a href="../Admin/Exceptions"><span class="label label-danger"><i class="fa fa-bolt"></i></span><div title="{1}" class="content">{0}</div><span class="small italic">{2}</span></a></li>';
html = result.Dbs.map(function (u) {
return $.format(htmlUserTemplate, u.ErrorPage, u.Message, u.Period);
}).join('');
$(html).insertAfter($('#msgHeaderDbContent'));
// messages
$('#msgHeaderMsg').text(result.MessagesCount);
$('#msgHeaderMsgBadge').text(result.MessagesCount);
htmlUserTemplate = '<li><a href="../Admin/Messages?id={0}"><span class="photo"><img alt="avatar" src="{1}"></span><span class="subject"><span class="from">{2}</span><span class="time">{4}</span></span><span class="message" title="{5}">{3}</span></a></li>';
html = result.Messages.map(function (u) {
return $.format(htmlUserTemplate, u.Id, u.FromIcon, u.FromDisplayName, u.Title, u.Period, u.Content);
}).join('');
$(html).insertAfter($('#msgHeaderMsgContent'));
}
});
}); });

View File

@ -69,7 +69,7 @@
}; };
BootstrapAdmin.idFormatter = function (value, row, index) { BootstrapAdmin.idFormatter = function (value, row, index) {
return "<a class='edit' href='javascript:void(0)'>" + value + "</a>"; return "<a class='edit' title='" + value + "' href='javascript:void(0)'>编辑</a>";
}; };
BootstrapAdmin.prototype = { BootstrapAdmin.prototype = {

File diff suppressed because one or more lines are too long

2
Bootstrap.Admin/Scripts/toastr.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -21,7 +21,7 @@
<div class="panel-body"> <div class="panel-body">
<form class="form-inline" role="form"> <form class="form-inline" role="form">
<div class="row"> <div class="row">
<div class="form-group col-xs-12 col-sm-6 col-md-5 col-lg-5"> <div class="form-group col-lg-5">
<label class="control-label" for="txt_operate_start">起始时间</label> <label class="control-label" for="txt_operate_start">起始时间</label>
<div class="input-group date form_date"> <div class="input-group date form_date">
<input id="txt_operate_start" class="form-control" size="16" type="text" value="" readonly> <input id="txt_operate_start" class="form-control" size="16" type="text" value="" readonly>
@ -29,7 +29,7 @@
<span class="input-group-addon"><span class="glyphicon glyphicon-th"></span></span> <span class="input-group-addon"><span class="glyphicon glyphicon-th"></span></span>
</div> </div>
</div> </div>
<div class="form-group col-xs-12 col-sm-6 col-md-5 col-lg-5"> <div class="form-group col-lg-5">
<label class="control-label" for="txt_operate_end">终止时间</label> <label class="control-label" for="txt_operate_end">终止时间</label>
<div class="input-group date form_date"> <div class="input-group date form_date">
<input id="txt_operate_end" class="form-control" size="16" type="text" value="" readonly> <input id="txt_operate_end" class="form-control" size="16" type="text" value="" readonly>
@ -37,7 +37,7 @@
<span class="input-group-addon"><span class="glyphicon glyphicon-th"></span></span> <span class="input-group-addon"><span class="glyphicon glyphicon-th"></span></span>
</div> </div>
</div> </div>
<div class="form-group col-xs-12 col-sm-12 col-md-2 col-lg-2"> <div class="form-group col-lg-2">
<label class="sr-only"></label> <label class="sr-only"></label>
<button type="button" id="btn_query" class="btn btn-primary form-control"><i class="fa fa-search" aria-hidden="true"></i><span>查询</span></button> <button type="button" id="btn_query" class="btn btn-primary form-control"><i class="fa fa-search" aria-hidden="true"></i><span>查询</span></button>
</div> </div>
@ -60,7 +60,7 @@
<div class="panel-heading"> <div class="panel-heading">
查询结果 查询结果
</div> </div>
<div class="panel-body"> <div class="panel-body barTable">
<table></table> <table></table>
</div> </div>
</div> </div>
@ -94,7 +94,7 @@
<div><a href="#fa-top" class="fa fa-arrow-circle-up"></a></div> <div><a href="#fa-top" class="fa fa-arrow-circle-up"></a></div>
<div><a href="#fa-bottom" class="fa fa-arrow-circle-down"></a></div> <div><a href="#fa-bottom" class="fa fa-arrow-circle-down"></a></div>
</div> </div>
<div id="dataFormDetail"><div class="text-center"><i class="fa fa-spinner fa-pulse fa-3x fa-fw"></i></div></div> <div id="dataFormDetail" class="ex-content"><div class="text-center"><i class="fa fa-spinner fa-pulse fa-3x fa-fw"></i></div></div>
<i id="fa-bottom" class="fa-target"></i> <i id="fa-bottom" class="fa-target"></i>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">

View File

@ -9,15 +9,15 @@
@section query { @section query {
<form class="form-inline" role="form"> <form class="form-inline" role="form">
<div class="row"> <div class="row">
<div class="form-group col-lg-5"> <div class="form-group col-md-5">
<label class="control-label" for="txt_search_name">部门名称</label> <label class="control-label" for="txt_search_name">部门名称</label>
<input type="text" class="form-control" id="txt_search_name" /> <input type="text" class="form-control" id="txt_search_name" />
</div> </div>
<div class="form-group col-lg-5"> <div class="form-group col-md-5">
<label class="control-label" for="txt_group_desc">部门描述</label> <label class="control-label" for="txt_group_desc">部门描述</label>
<input type="text" class="form-control" id="txt_group_desc" /> <input type="text" class="form-control" id="txt_group_desc" />
</div> </div>
<div class="form-group col-lg-2"> <div class="form-group col-md-2">
<button type="button" id="btn_query" class="btn btn-primary form-control"><i class="fa fa-search" aria-hidden="true"></i><span>查询</span></button> <button type="button" id="btn_query" class="btn btn-primary form-control"><i class="fa fa-search" aria-hidden="true"></i><span>查询</span></button>
</div> </div>
</div> </div>
@ -47,11 +47,11 @@
<div class="modal-body"> <div class="modal-body">
<form class="form-inline" id="dataForm" name="dataForm" role="form"> <form class="form-inline" id="dataForm" name="dataForm" role="form">
<div class="row"> <div class="row">
<div class="form-group col-lg-6"> <div class="form-group col-sm-6">
<label class="control-label" for="groupName">部门名称</label> <label class="control-label" for="groupName">部门名称</label>
<input type="text" class="form-control" id="groupName" name="groupName" placeholder="不可为空50字以内" maxlength="50" /> <input type="text" class="form-control" id="groupName" name="groupName" placeholder="不可为空50字以内" maxlength="50" />
</div> </div>
<div class="form-group col-lg-6"> <div class="form-group col-sm-6">
<input type="text" class="form-control hidden" id="groupID" name="groupID" /> <input type="text" class="form-control hidden" id="groupID" name="groupID" />
<label class="control-label" for="groupDesc">部门描述</label> <label class="control-label" for="groupDesc">部门描述</label>
<input type="text" class="form-control" id="groupDesc" name="groupDesc" placeholder="描述信息(可为空)50字以内" maxlength="50" /> <input type="text" class="form-control" id="groupDesc" name="groupDesc" placeholder="描述信息(可为空)50字以内" maxlength="50" />

View File

@ -11,6 +11,7 @@
.main-content h4 { .main-content h4 {
color: #fff; color: #fff;
margin-top: 0;
} }
</style> </style>
} }
@ -21,4 +22,4 @@
}); });
</script> </script>
} }
<div><h4>欢迎使用后台管理</h4></div> <h4>欢迎使用后台管理</h4>

View File

@ -26,7 +26,7 @@
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="form-group col-xs-12 col-sm-6 col-md-5"> <div class="form-group col-sm-6 col-lg-5">
<label class="control-label" for="txt_operate_start">起始时间</label> <label class="control-label" for="txt_operate_start">起始时间</label>
<div class="input-group date form_date"> <div class="input-group date form_date">
<input id="txt_operate_start" class="form-control" size="16" type="text" value="" readonly> <input id="txt_operate_start" class="form-control" size="16" type="text" value="" readonly>
@ -34,7 +34,7 @@
<span class="input-group-addon"><span class="glyphicon glyphicon-th"></span></span> <span class="input-group-addon"><span class="glyphicon glyphicon-th"></span></span>
</div> </div>
</div> </div>
<div class="form-group col-xs-12 col-sm-6 col-md-5"> <div class="form-group col-sm-6 col-lg-5">
<label class="control-label" for="txt_operate_end">终止时间</label> <label class="control-label" for="txt_operate_end">终止时间</label>
<div class="input-group date form_date"> <div class="input-group date form_date">
<input id="txt_operate_end" class="form-control" size="16" type="text" value="" readonly> <input id="txt_operate_end" class="form-control" size="16" type="text" value="" readonly>
@ -42,7 +42,7 @@
<span class="input-group-addon"><span class="glyphicon glyphicon-th"></span></span> <span class="input-group-addon"><span class="glyphicon glyphicon-th"></span></span>
</div> </div>
</div> </div>
<div class="form-group col-xs-12 col-sm-12 col-md-2"> <div class="form-group col-lg-2">
<label class="sr-only"></label> <label class="sr-only"></label>
<button type="button" id="btn_query" class="btn btn-primary form-control"><i class="fa fa-search" aria-hidden="true"></i><span>查询</span></button> <button type="button" id="btn_query" class="btn btn-primary form-control"><i class="fa fa-search" aria-hidden="true"></i><span>查询</span></button>
</div> </div>
@ -54,7 +54,7 @@
<div class="panel-heading"> <div class="panel-heading">
查询结果 查询结果
</div> </div>
<div class="panel-body"> <div class="panel-body barTable">
<table></table> <table></table>
</div> </div>
</div> </div>

View File

@ -14,15 +14,15 @@
@section query { @section query {
<form class="form-inline" role="form"> <form class="form-inline" role="form">
<div class="row"> <div class="row">
<div class="form-group col-sm-6 col-md-3"> <div class="form-group col-sm-12 col-md-6 col-lg-5">
<label class="control-label" for="txt_menus_name">菜单名称</label> <label class="control-label" for="txt_menus_name">菜单名称</label>
<input type="text" class="form-control" id="txt_menus_name" /> <input type="text" class="form-control" id="txt_menus_name" />
</div> </div>
<div class="form-group col-sm-6 col-md-3"> <div class="form-group col-sm-12 col-md-6 col-lg-5">
<label class="control-label" for="txt_parent_menus_name">父级菜单</label> <label class="control-label" for="txt_parent_menus_name">父级菜单</label>
<input type="text" class="form-control" id="txt_parent_menus_name" /> <input type="text" class="form-control" id="txt_parent_menus_name" />
</div> </div>
<div class="form-group col-sm-6 col-md-2"> <div class="form-group col-sm-6 col-md-6 col-lg-5">
<label class="control-label" for="sel_menus_category">菜单类别</label> <label class="control-label" for="sel_menus_category">菜单类别</label>
<div class="dropdown lgbDropdown"> <div class="dropdown lgbDropdown">
<a id="sel_menus_category" class="btn btn-success" data-toggle="dropdown"> <a id="sel_menus_category" class="btn btn-success" data-toggle="dropdown">
@ -37,7 +37,7 @@
</ul> </ul>
</div> </div>
</div> </div>
<div class="form-group col-sm-6 col-md-2"> <div class="form-group col-sm-6 col-md-6 col-lg-5">
<label class="control-label" for="sel_menus_category">菜单类型</label> <label class="control-label" for="sel_menus_category">菜单类型</label>
<div class="dropdown lgbDropdown"> <div class="dropdown lgbDropdown">
<a id="sel_menus_res" class="btn btn-success" data-toggle="dropdown"> <a id="sel_menus_res" class="btn btn-success" data-toggle="dropdown">
@ -52,7 +52,7 @@
</ul> </ul>
</div> </div>
</div> </div>
<div class="form-group col-xs-12 col-sm-1"> <div class="form-group col-lg-2">
<button type="button" id="btn_query" class="btn btn-primary form-control"><i class="fa fa-search" aria-hidden="true"></i><span>查询</span></button> <button type="button" id="btn_query" class="btn btn-primary form-control"><i class="fa fa-search" aria-hidden="true"></i><span>查询</span></button>
</div> </div>
</div> </div>
@ -200,5 +200,5 @@
<button type="button" class="btn btn-primary" id="btnSubmitIcon">保存</button> <button type="button" class="btn btn-primary" id="btnSubmitIcon">保存</button>
</div> </div>
</div> </div>
@Html.Partial("MenuTree") @Html.Partial("NavigatorConfig")
} }

View File

@ -4,11 +4,9 @@
Layout = "~/Views/Shared/_Admin.cshtml"; Layout = "~/Views/Shared/_Admin.cshtml";
} }
@section Javascript { @section Javascript {
<script src="~/Scripts/sweetalert.js"></script>
<script src="~/Scripts/noti.js"></script> <script src="~/Scripts/noti.js"></script>
} }
@section css { @section css {
<link href="~/Content/sweetalert.css" rel="stylesheet" />
<link href="~/Content/tasks.css" rel="stylesheet" /> <link href="~/Content/tasks.css" rel="stylesheet" />
} }
<div class="panel panel-default"> <div class="panel panel-default">

View File

@ -5,7 +5,6 @@
} }
@section Javascript { @section Javascript {
<script src="~/Scripts/longbow.dataentity.js"></script> <script src="~/Scripts/longbow.dataentity.js"></script>
<script src="~/Scripts/sweetalert.js"></script>
<script src="~/Scripts/fileinput.js"></script> <script src="~/Scripts/fileinput.js"></script>
<script src="~/Scripts/fileinput.zh.js"></script> <script src="~/Scripts/fileinput.zh.js"></script>
<script src="~/Scripts/jquery.validate.js"></script> <script src="~/Scripts/jquery.validate.js"></script>
@ -13,7 +12,6 @@
<script src="~/scripts/Profiles.js"></script> <script src="~/scripts/Profiles.js"></script>
} }
@section css { @section css {
<link href="~/Content/sweetalert.css" rel="stylesheet" />
<link href="~/Content/tasks.css" rel="stylesheet" /> <link href="~/Content/tasks.css" rel="stylesheet" />
<link href="~/Content/fileinput.css" rel="stylesheet" /> <link href="~/Content/fileinput.css" rel="stylesheet" />
} }
@ -42,15 +40,17 @@
<div class="panel-body"> <div class="panel-body">
<form id="passwordDataForm" name="passwordDataForm" class="form-inline" role="form"> <form id="passwordDataForm" name="passwordDataForm" class="form-inline" role="form">
<div class="row"> <div class="row">
<div class="form-group col-md-4 col-xs-12"> <div class="form-group col-xs-12">
<label class="control-label" for="currentPassword">原密码: </label> <label class="control-label" for="currentPassword">原密码: </label>
<input type="password" class="form-control" id="currentPassword" name="currentPassword" placeholder="原密码50字以内" maxlength="50" /> <input type="password" class="form-control" id="currentPassword" name="currentPassword" placeholder="原密码50字以内" maxlength="50" />
</div> </div>
<div class="form-group col-md-4 col-sm-6 col-xs-12"> </div>
<div class="row">
<div class="form-group col-sm-6 col-xs-12">
<label class="control-label" for="newPassword">新密码: </label> <label class="control-label" for="newPassword">新密码: </label>
<input type="password" class="form-control" id="newPassword" name="newPassword" placeholder="新密码50字以内" maxlength="50" /> <input type="password" class="form-control" id="newPassword" name="newPassword" placeholder="新密码50字以内" maxlength="50" />
</div> </div>
<div class="form-group col-md-4 col-sm-6 col-xs-12"> <div class="form-group col-sm-6 col-xs-12">
<label class="control-label" for="confirmPassword">确认密码: </label> <label class="control-label" for="confirmPassword">确认密码: </label>
<input type="password" class="form-control" id="confirmPassword" name="confirmPassword" placeholder="与新密码一致50字以内" maxlength="50" /> <input type="password" class="form-control" id="confirmPassword" name="confirmPassword" placeholder="与新密码一致50字以内" maxlength="50" />
</div> </div>
@ -61,6 +61,35 @@
</div> </div>
</div> </div>
</div> </div>
<div class="panel panel-default">
<div class="panel-heading">网站皮肤</div>
<div class="panel-body">
<form id="infoDataForm" name="cssDataForm" class="form-inline" role="form">
<div class="row">
<div class="form-group col-xs-12">
<label class="control-label" for="userName">样式</label>
<select id="css" class="select form-control">
<option value="">默认样式</option>
@foreach (var css in Model.Csss)
{
if (css.Code == Model.Css)
{
<option selected value="@css.Code">@css.Name</option>
}
else
{
<option value="@css.Code">@css.Name</option>
}
}
</select>
</div>
</div>
</form>
<div class="modal-footer">
<button id="btnSaveCss" class="btn btn-default" type="button" disabled data-admin="@LgbPrincipal.IsWebAdmin(User.Identity.Name)"><i class="fa fa-save"></i><span>保存</span></button>
</div>
</div>
</div>
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading">修改头像</div> <div class="panel-heading">修改头像</div>
<div class="panel-body"> <div class="panel-body">

View File

@ -15,15 +15,15 @@
@section query { @section query {
<form class="form-inline" role="form"> <form class="form-inline" role="form">
<div class="row"> <div class="row">
<div class="form-group col-lg-5"> <div class="form-group col-md-5">
<label class="control-label" for="txt_search_name">角色名称</label> <label class="control-label" for="txt_search_name">角色名称</label>
<input type="text" class="form-control" id="txt_search_name" /> <input type="text" class="form-control" id="txt_search_name" />
</div> </div>
<div class="form-group col-lg-5"> <div class="form-group col-md-5">
<label class="control-label" for="txt_role_desc">角色描述</label> <label class="control-label" for="txt_role_desc">角色描述</label>
<input type="text" class="form-control" id="txt_role_desc" /> <input type="text" class="form-control" id="txt_role_desc" />
</div> </div>
<div class="form-group col-lg-2"> <div class="form-group col-md-2">
<button type="button" id="btn_query" class="btn btn-primary form-control"><i class="fa fa-search" aria-hidden="true"></i><span>查询</span></button> <button type="button" id="btn_query" class="btn btn-primary form-control"><i class="fa fa-search" aria-hidden="true"></i><span>查询</span></button>
</div> </div>
</div> </div>
@ -57,11 +57,11 @@
<div class="modal-body"> <div class="modal-body">
<form class="form-inline" id="dataForm" name="dataForm" role="form"> <form class="form-inline" id="dataForm" name="dataForm" role="form">
<div class="row"> <div class="row">
<div class="form-group col-lg-6"> <div class="form-group col-sm-6">
<label class="control-label" for="roleName">角色名称</label> <label class="control-label" for="roleName">角色名称</label>
<input type="text" class="form-control" id="roleName" name="roleName" placeholder="不可为空50字以内" maxlength="50" /> <input type="text" class="form-control" id="roleName" name="roleName" placeholder="不可为空50字以内" maxlength="50" />
</div> </div>
<div class="form-group col-lg-6"> <div class="form-group col-sm-6">
<input type="text" class="form-control hidden" id="roleID" name="roleID" /> <input type="text" class="form-control hidden" id="roleID" name="roleID" />
<label class="control-label" for="roleDesc">角色描述</label> <label class="control-label" for="roleDesc">角色描述</label>
<input type="text" class="form-control" id="roleDesc" name="roleDesc" placeholder="描述信息(可为空)50字以内" maxlength="50" /> <input type="text" class="form-control" id="roleDesc" name="roleDesc" placeholder="描述信息(可为空)50字以内" maxlength="50" />

View File

@ -5,13 +5,11 @@
} }
@section Javascript { @section Javascript {
<script src="~/Scripts/longbow.dataentity.js"></script> <script src="~/Scripts/longbow.dataentity.js"></script>
<script src="~/Scripts/sweetalert.js"></script>
<script src="~/Scripts/jquery.validate.js"></script> <script src="~/Scripts/jquery.validate.js"></script>
<script src="~/Scripts/messages_zh.js"></script> <script src="~/Scripts/messages_zh.js"></script>
<script src="~/Scripts/Settings.js"></script> <script src="~/Scripts/Settings.js"></script>
} }
@section css { @section css {
<link href="~/Content/sweetalert.css" rel="stylesheet" />
<link href="~/Content/tasks.css" rel="stylesheet" /> <link href="~/Content/tasks.css" rel="stylesheet" />
} }
<div class="panel panel-default"> <div class="panel panel-default">
@ -48,12 +46,12 @@
<div class="form-group col-xs-12"> <div class="form-group col-xs-12">
<label class="control-label">网站样式</label> <label class="control-label">网站样式</label>
<div class="dropdown lgbDropdown"> <div class="dropdown lgbDropdown">
<a id="dictCssDefine" class="btn btn-success" data-toggle="dropdown" data-default-val="site.css"> <a id="dictCssDefine" class="btn btn-success" data-toggle="dropdown" data-default-val="">
<span>默认样式</span> <span>默认样式</span>
<span class="caret"></span> <span class="caret"></span>
</a> </a>
<ul class="dropdown-menu" role="menu" id="cssContainer"> <ul class="dropdown-menu" role="menu" id="cssContainer">
<li><a href="#" data-val="site.css">默认样式</a></li> <li><a href="#" data-val="">默认样式</a></li>
</ul> </ul>
</div> </div>
<button class="btn btn-default pull-right" type="button" id="cssSave">保存</button> <button class="btn btn-default pull-right" type="button" id="cssSave">保存</button>

View File

@ -4,11 +4,9 @@
Layout = "~/Views/Shared/_Admin.cshtml"; Layout = "~/Views/Shared/_Admin.cshtml";
} }
@section Javascript { @section Javascript {
<script src="~/Scripts/sweetalert.js"></script>
<script src="~/Scripts/tasks.js"></script> <script src="~/Scripts/tasks.js"></script>
} }
@section css { @section css {
<link href="~/Content/sweetalert.css" rel="stylesheet" />
<link href="~/Content/tasks.css" rel="stylesheet" /> <link href="~/Content/tasks.css" rel="stylesheet" />
} }
<div class="panel panel-default"> <div class="panel panel-default">

View File

@ -9,15 +9,15 @@
@section query { @section query {
<form class="form-inline" role="form"> <form class="form-inline" role="form">
<div class="row"> <div class="row">
<div class="form-group col-lg-5"> <div class="form-group col-md-5">
<label class="control-label" for="txt_search_name">登陆名称</label> <label class="control-label" for="txt_search_name">登陆名称</label>
<input type="text" class="form-control" id="txt_search_name" /> <input type="text" class="form-control" id="txt_search_name" />
</div> </div>
<div class="form-group col-lg-5"> <div class="form-group col-md-5">
<label class="control-label" for="txt_display_name">显示名称</label> <label class="control-label" for="txt_display_name">显示名称</label>
<input type="text" class="form-control" id="txt_display_name" /> <input type="text" class="form-control" id="txt_display_name" />
</div> </div>
<div class="form-group col-lg-2"> <div class="form-group col-md-2">
<button type="button" id="btn_query" class="btn btn-primary form-control"><i class="fa fa-search" aria-hidden="true"></i><span>查询</span></button> <button type="button" id="btn_query" class="btn btn-primary form-control"><i class="fa fa-search" aria-hidden="true"></i><span>查询</span></button>
</div> </div>
</div> </div>
@ -47,20 +47,20 @@
<div class="modal-body"> <div class="modal-body">
<form class="form-inline" id="dataForm" name="dataForm" role="form"> <form class="form-inline" id="dataForm" name="dataForm" role="form">
<div class="row"> <div class="row">
<div class="form-group col-lg-6"> <div class="form-group col-sm-6">
<label class="control-label" for="userName">登陆名称</label> <label class="control-label" for="userName">登陆名称</label>
<input type="text" class="form-control" id="userName" name="userName" placeholder="不可为空50字以内" maxlength="50" /> <input type="text" class="form-control" id="userName" name="userName" placeholder="不可为空50字以内" maxlength="50" />
</div> </div>
<div class="form-group col-lg-6"> <div class="form-group col-sm-6">
<input type="text" class="form-control hidden" id="userID" name="userID" /> <input type="text" class="form-control hidden" id="userID" name="userID" />
<label class="control-label" for="userName">显示名称</label> <label class="control-label" for="userName">显示名称</label>
<input type="text" class="form-control" id="displayName" name="displayName" placeholder="不可为空50字以内" maxlength="50" /> <input type="text" class="form-control" id="displayName" name="displayName" placeholder="不可为空50字以内" maxlength="50" />
</div> </div>
<div class="form-group col-lg-6"> <div class="form-group col-sm-6">
<label class="control-label" for="password">登录密码</label> <label class="control-label" for="password">登录密码</label>
<input type="password" class="form-control" id="password" name="password" placeholder="不可为空50字以内" maxlength="50" /> <input type="password" class="form-control" id="password" name="password" placeholder="不可为空50字以内" maxlength="50" />
</div> </div>
<div class="form-group col-lg-6"> <div class="form-group col-sm-6">
<label class="control-label" for="confirm">确认密码</label> <label class="control-label" for="confirm">确认密码</label>
<input type="password" class="form-control" id="confirm" name="confirm" placeholder="与登陆密码一致50字以内" maxlength="50" /> <input type="password" class="form-control" id="confirm" name="confirm" placeholder="与登陆密码一致50字以内" maxlength="50" />
</div> </div>

View File

@ -1,5 +1,7 @@
@model HeaderBarModel @model HeaderBarModel
<header class="header"> <header class="header">
<div class="bg">
</div>
<a id="navbar" href="#" class="sidebar-toggle-box"> <a id="navbar" href="#" class="sidebar-toggle-box">
<i class="fa fa-bars"></i> <i class="fa fa-bars"></i>
<span id="websiteTitle">@Model.Title</span> <span id="websiteTitle">@Model.Title</span>

View File

@ -1,3 +1,19 @@
<div class="modal fade" id="dialogMenu" tabindex="-1" role="dialog" data-backdrop="static" aria-labelledby="myMenuModalLabel" aria-hidden="true"> <div class="modal fade" id="dialogMenu" tabindex="-1" role="dialog" data-backdrop="static" aria-labelledby="myMenuModalLabel" aria-hidden="true">
@Html.Partial("MenuTree") <div id="dialogSubMenu" class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title" id="myMenuModalLabel">请选择菜单</h4>
</div>
<div class="modal-body">
<div class="dd" id="nestable_menu">
<ol class="dd-list"></ol>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
<button type="button" class="btn btn-primary" data-dismiss="modal" id="btnSubmitMenu">保存</button>
</div>
</div>
</div>
</div> </div>

View File

@ -2,16 +2,20 @@
Layout = "~/Views/Shared/_Layout.cshtml"; Layout = "~/Views/Shared/_Layout.cshtml";
} }
@section css { @section css {
<link href="~/Content/sweetalert.css" rel="stylesheet" />
<link href="~/Content/toastr.css" rel="stylesheet" />
<link href="~/Content/admin.css" rel="stylesheet" /> <link href="~/Content/admin.css" rel="stylesheet" />
<link href="~/Content/admin-responsive.css" rel="stylesheet" /> <link href="~/Content/admin-responsive.css" rel="stylesheet" />
@RenderSection("css", false) @RenderSection("css", false)
} }
@section javascript { @section javascript {
<script src="~/Scripts/sweetalert.js"></script>
<script src="~/Scripts/jquery.dcjqaccordion.2.7.js"></script> <script src="~/Scripts/jquery.dcjqaccordion.2.7.js"></script>
<script src="~/Scripts/jquery.scrollTo.js"></script> <script src="~/Scripts/jquery.scrollTo.js"></script>
<script src="~/Scripts/jquery.nicescroll.min.js"></script> <script src="~/Scripts/jquery.nicescroll.min.js"></script>
<script src="~/Scripts/common-scripts.js"></script> <script src="~/Scripts/common-scripts.js"></script>
<script src="~/Scripts/log.js"></script> <script src="~/Scripts/log.js"></script>
<script src="~/Scripts/toastr.min.js"></script>
<script src="~/Scripts/framework.js"></script> <script src="~/Scripts/framework.js"></script>
@RenderSection("Javascript", false) @RenderSection("Javascript", false)
} }

View File

@ -3,12 +3,10 @@
} }
@section css { @section css {
<link href="~/Content/bootstrap-table.css" rel="stylesheet" /> <link href="~/Content/bootstrap-table.css" rel="stylesheet" />
<link href="~/Content/sweetalert.css" rel="stylesheet" />
@RenderSection("css", false) @RenderSection("css", false)
} }
@section javascript { @section javascript {
<script src="~/Scripts/longbow.dataentity.js"></script> <script src="~/Scripts/longbow.dataentity.js"></script>
<script src="~/Scripts/sweetalert.js"></script>
<script src="~/Scripts/bootstrap-table.js"></script> <script src="~/Scripts/bootstrap-table.js"></script>
<script src="~/Scripts/bootstrap-table-zh-CN.js"></script> <script src="~/Scripts/bootstrap-table-zh-CN.js"></script>
<script src="~/Scripts/jquery.validate.js"></script> <script src="~/Scripts/jquery.validate.js"></script>
@ -49,7 +47,7 @@
<div id="panelResultHeader" class="panel-heading"> <div id="panelResultHeader" class="panel-heading">
查询结果 查询结果
</div> </div>
<div class="panel-body"> <div class="panel-body barTable">
<table></table> <table></table>
</div> </div>
</div> </div>

View File

@ -27,6 +27,13 @@
</connectionStrings> </connectionStrings>
<cacheManager> <cacheManager>
<add key="BootstrapAdminPrincipal-RetrieveRoles" interval="600" desc="系统所有角色列表数据" />
<add key="BootstrapAdminPrincipal-RetrieveRolesByUrl" interval="600" desc="指定菜单的角色数据缓存" />
<add key="BootstrapAdminPrincipal-RetrieveRolesByUserName" interval="600" desc="指定用户名角色数据缓存" />
<add key="BootstrapMenu-RetrieveMenus" interval="600" desc="所有菜单数据缓存" />
<add key="BootstrapDict-RetrieveDicts" interval="600" desc="所有字典数据缓存" />
<add key="BootstrapUser-RetrieveUsers" interval="600" desc="所有用户数据缓存" />
<add key="BootstrapUser-RetrieveUsersByName" interval="600" desc="指定用户数据缓存" />
<add key="UserHelper-RetrieveNewUsers" interval="30" desc="新用户数据缓存" /> <add key="UserHelper-RetrieveNewUsers" interval="30" desc="新用户数据缓存" />
<add key="MenuHelper-RetrieveMenusByRoleId" interval="600" desc="角色菜单信息缓存" /> <add key="MenuHelper-RetrieveMenusByRoleId" interval="600" desc="角色菜单信息缓存" />
<add key="RoleHelper-RetrieveRoles" interval="600" desc="所有角色数据缓存" /> <add key="RoleHelper-RetrieveRoles" interval="600" desc="所有角色数据缓存" />
@ -42,15 +49,6 @@
<add key="ExceptionHelper-RetrieveExceptions" interval="600" desc="程序异常数据缓存" /> <add key="ExceptionHelper-RetrieveExceptions" interval="600" desc="程序异常数据缓存" />
<add key="MessageHelper-RetrieveMessages" interval="600" desc="站内消息数据缓存" /> <add key="MessageHelper-RetrieveMessages" interval="600" desc="站内消息数据缓存" />
<add key="TaskHelper-RetrieveTasks" interval="600" desc="所有任务数据缓存" /> <add key="TaskHelper-RetrieveTasks" interval="600" desc="所有任务数据缓存" />
<add key="BootstrapAdminPrincipal-RetrieveAllRoles" interval="600" desc="系统所有角色列表数据" />
<add key="BootstrapAdminPrincipal-RetrieveRolesByUrl" interval="600" desc="指定菜单的角色数据缓存" />
<add key="BootstrapAdminPrincipal-RetrieveRolesByUserName" interval="600" desc="指定用户名角色数据缓存" />
<add key="BootstrapAdminPrincipal-RetrieveAllGroups-BA" interval="600" desc="系统所有用户组列表数据" />
<add key="BootstrapAdminPrincipal-RetrieveGroupsByUserName" interval="600" desc="通过用户获得用户组数据" />
<add key="BootstrapMenu-RetrieveMenus" interval="600" desc="所有菜单数据缓存" />
<add key="BootstrapDict-RetrieveDicts" interval="600" desc="所有字典数据缓存" />
<add key="BootstrapUser-RetrieveUsers" interval="600" desc="所有用户数据缓存" />
<add key="BootstrapUser-RetrieveUsersByName" interval="600" desc="指定用户数据缓存" />
<add key="BootstrapUser-RetrieveUsersByRoleId" interval="600" desc="指定角色用户数据缓存" /> <add key="BootstrapUser-RetrieveUsersByRoleId" interval="600" desc="指定角色用户数据缓存" />
<add key="BootstrapUser-RetrieveUsersByGroupId" interval="600" desc="指定组用户数据缓存" /> <add key="BootstrapUser-RetrieveUsersByGroupId" interval="600" desc="指定组用户数据缓存" />
<add key="WebApi" interval="21600" desc="WebApi 数据缓存" /> <add key="WebApi" interval="21600" desc="WebApi 数据缓存" />
@ -60,7 +58,7 @@
<cacheManagerList> <cacheManagerList>
<add key="bd" url="http://localhost:53233/CacheList.axd?cacheKey={0}" desc="系统缓存模块" /> <add key="bd" url="http://localhost:53233/CacheList.axd?cacheKey={0}" desc="系统缓存模块" />
<add key="bccs" url="http://localhost:3609/CacheList.axd?cacheKey={0}" desc="集控系统缓存模块" /> <add key="bccs" url="http://localhost:49823/CacheList.axd?cacheKey={0}" desc="集控系统缓存模块" />
<add key="cps" url="http://localhost:43112/CacheList.axd?cacheKey={0}" desc="云心理后台缓存" /> <add key="cps" url="http://localhost:43112/CacheList.axd?cacheKey={0}" desc="云心理后台缓存" />
</cacheManagerList> </cacheManagerList>

View File

@ -9,7 +9,7 @@
<AppDesignerFolder>Properties</AppDesignerFolder> <AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Bootstrap.DataAccess</RootNamespace> <RootNamespace>Bootstrap.DataAccess</RootNamespace>
<AssemblyName>Bootstrap.DataAccess</AssemblyName> <AssemblyName>Bootstrap.DataAccess</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion> <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment> <FileAlignment>512</FileAlignment>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
@ -33,7 +33,7 @@
<SignAssembly>true</SignAssembly> <SignAssembly>true</SignAssembly>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<AssemblyOriginatorKeyFile>Longbow.Utility.snk</AssemblyOriginatorKeyFile> <AssemblyOriginatorKeyFile>..\..\Keys\Longbow.Utility.snk</AssemblyOriginatorKeyFile>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<DelaySign>true</DelaySign> <DelaySign>true</DelaySign>
@ -80,8 +80,10 @@
<Compile Include="UserHelper.cs" /> <Compile Include="UserHelper.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="..\..\Keys\Longbow.Utility.snk">
<Link>Longbow.Utility.snk</Link>
</None>
<None Include="ClassDiagram1.cd" /> <None Include="ClassDiagram1.cd" />
<None Include="Longbow.Utility.snk" />
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup> <PropertyGroup>

View File

@ -1,11 +1,9 @@
using Bootstrap.Security; using Bootstrap.Security;
using Longbow.Caching; using Longbow.Caching;
using Longbow.Caching.Configuration; using Longbow.Caching.Configuration;
using Longbow.ExceptionManagement;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Net;
namespace Bootstrap.DataAccess namespace Bootstrap.DataAccess
{ {
@ -31,9 +29,11 @@ namespace Bootstrap.DataAccess
{ {
cacheKeys.Add(string.Format("{0}-{1}", UserHelper.RetrieveUsersByRoleIdDataKey, id)); cacheKeys.Add(string.Format("{0}-{1}", UserHelper.RetrieveUsersByRoleIdDataKey, id));
cacheKeys.Add(string.Format("{0}-{1}", GroupHelper.RetrieveGroupsByRoleIdDataKey, id)); cacheKeys.Add(string.Format("{0}-{1}", GroupHelper.RetrieveGroupsByRoleIdDataKey, id));
cacheKeys.Add(string.Format("{0}-{1}", MenuHelper.RetrieveMenusByRoleIdDataKey, id));
}); });
cacheKeys.Add(RoleHelper.RetrieveRolesDataKey + "*"); cacheKeys.Add(RoleHelper.RetrieveRolesDataKey + "*");
cacheKeys.Add(BootstrapMenu.RetrieveMenusDataKey + "*"); cacheKeys.Add(BootstrapMenu.RetrieveMenusDataKey + "*");
cacheKeys.Add(BootstrapAdminRolePrincipal.RetrieveAllRolesDataKey + "*");
} }
if (userIds != null) if (userIds != null)
{ {
@ -55,6 +55,7 @@ namespace Bootstrap.DataAccess
}); });
cacheKeys.Add(GroupHelper.RetrieveGroupsDataKey + "*"); cacheKeys.Add(GroupHelper.RetrieveGroupsDataKey + "*");
cacheKeys.Add(BootstrapMenu.RetrieveMenusDataKey + "*"); cacheKeys.Add(BootstrapMenu.RetrieveMenusDataKey + "*");
cacheKeys.Add(BootstrapAdminRolePrincipal.RetrieveAllRolesDataKey + "*");
} }
if (menuIds != null) if (menuIds != null)
{ {
@ -62,6 +63,7 @@ namespace Bootstrap.DataAccess
{ {
cacheKeys.Add(string.Format("{0}-{1}", RoleHelper.RetrieveRolesByMenuIdDataKey, id)); cacheKeys.Add(string.Format("{0}-{1}", RoleHelper.RetrieveRolesByMenuIdDataKey, id));
}); });
cacheKeys.Add(MenuHelper.RetrieveMenusByRoleIdDataKey + "*");
cacheKeys.Add(BootstrapMenu.RetrieveMenusDataKey + "*"); cacheKeys.Add(BootstrapMenu.RetrieveMenusDataKey + "*");
} }
if (dictIds != null) if (dictIds != null)
@ -81,29 +83,25 @@ namespace Bootstrap.DataAccess
cacheKeys.Add(ExceptionHelper.RetrieveExceptionsDataKey + "*"); cacheKeys.Add(ExceptionHelper.RetrieveExceptionsDataKey + "*");
} }
cacheKeys.AsParallel().ForAll(key => CacheManager.Clear(k => key.EndsWith("*") ? k.Contains(key.TrimEnd('*')) : k.Equals(key))); ClearCache(cacheKeys);
System.Threading.Tasks.Task.Factory.StartNew(() => }
{ /// <summary>
var section = CacheListSection.GetSection(); ///
section.Items.Where(item => item.Enabled).Skip(1).AsParallel().ForAll(ele => /// </summary>
{ /// <param name="key"></param>
try internal static void ClearCache(string key)
{ {
using (var client = new WebClient()) CacheManager.Clear(k => key.EndsWith("*") ? k.Contains(key.TrimEnd('*')) : key == k);
{ CacheListSection.ClearCache(key);
cacheKeys.ForEach(k => client.OpenRead(string.Format(ele.Url, k))); }
} /// <summary>
} ///
catch (Exception ex) /// </summary>
{ /// <param name="keys"></param>
System.Collections.Specialized.NameValueCollection nv = new System.Collections.Specialized.NameValueCollection(); internal static void ClearCache(IEnumerable<string> keys)
nv["ErrorPage"] = ele.Url; {
nv["UserId"] = "system"; CacheManager.Clear(k => keys.Any(key => key.EndsWith("*") ? k.Contains(key.TrimEnd('*')) : key == k));
nv["UserIp"] = "::1"; CacheListSection.ClearCache(keys);
ExceptionManager.Publish(ex, nv);
}
});
});
} }
} }
} }

View File

@ -160,7 +160,7 @@ namespace Bootstrap.DataAccess
return (settings.FirstOrDefault(d => d.Name == "网站页脚" && d.Category == "网站设置" && d.Define == 0) ?? new BootstrapDict() { Code = "2016 © 通用后台管理系统" }).Code; return (settings.FirstOrDefault(d => d.Name == "网站页脚" && d.Category == "网站设置" && d.Define == 0) ?? new BootstrapDict() { Code = "2016 © 通用后台管理系统" }).Code;
} }
/// <summary> /// <summary>
/// /// 获得系统中配置的可以使用的网站样式
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
public static IEnumerable<BootstrapDict> RetrieveWebCss() public static IEnumerable<BootstrapDict> RetrieveWebCss()
@ -169,7 +169,7 @@ namespace Bootstrap.DataAccess
return data.Where(d => d.Category == "网站样式"); return data.Where(d => d.Category == "网站样式");
} }
/// <summary> /// <summary>
/// /// 获得网站设置中的当前样式
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
public static IEnumerable<BootstrapDict> RetrieveActiveCss() public static IEnumerable<BootstrapDict> RetrieveActiveCss()

View File

@ -14,7 +14,10 @@ namespace Bootstrap.DataAccess
/// </summary> /// </summary>
public static class ExceptionHelper public static class ExceptionHelper
{ {
internal const string RetrieveExceptionsDataKey = "ExceptionHelper-RetrieveExceptions"; /// <summary>
///
/// </summary>
public static readonly string RetrieveExceptionsDataKey = "ExceptionHelper-RetrieveExceptions";
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
@ -32,7 +35,7 @@ namespace Bootstrap.DataAccess
cmd.Parameters.Add(DBAccessManager.SqlDBAccess.CreateParameter("@AppDomainName", AppDomain.CurrentDomain.FriendlyName)); cmd.Parameters.Add(DBAccessManager.SqlDBAccess.CreateParameter("@AppDomainName", AppDomain.CurrentDomain.FriendlyName));
cmd.Parameters.Add(DBAccessManager.SqlDBAccess.CreateParameter("@ErrorPage", additionalInfo["ErrorPage"])); cmd.Parameters.Add(DBAccessManager.SqlDBAccess.CreateParameter("@ErrorPage", additionalInfo["ErrorPage"]));
cmd.Parameters.Add(DBAccessManager.SqlDBAccess.CreateParameter("@UserID", DBAccess.ToDBValue(additionalInfo["UserId"]))); cmd.Parameters.Add(DBAccessManager.SqlDBAccess.CreateParameter("@UserID", DBAccess.ToDBValue(additionalInfo["UserId"])));
cmd.Parameters.Add(DBAccessManager.SqlDBAccess.CreateParameter("@UserIp", additionalInfo["UserIp"])); cmd.Parameters.Add(DBAccessManager.SqlDBAccess.CreateParameter("@UserIp", DBAccess.ToDBValue(additionalInfo["UserIp"])));
cmd.Parameters.Add(DBAccessManager.SqlDBAccess.CreateParameter("@ExceptionType", ex.GetType().FullName)); cmd.Parameters.Add(DBAccessManager.SqlDBAccess.CreateParameter("@ExceptionType", ex.GetType().FullName));
cmd.Parameters.Add(DBAccessManager.SqlDBAccess.CreateParameter("@Message", ex.Message)); cmd.Parameters.Add(DBAccessManager.SqlDBAccess.CreateParameter("@Message", ex.Message));
cmd.Parameters.Add(DBAccessManager.SqlDBAccess.CreateParameter("@StackTrace", DBAccess.ToDBValue(ex.StackTrace), ParameterDirection.Input)); cmd.Parameters.Add(DBAccessManager.SqlDBAccess.CreateParameter("@StackTrace", DBAccess.ToDBValue(ex.StackTrace), ParameterDirection.Input));
@ -68,8 +71,8 @@ namespace Bootstrap.DataAccess
Id = (int)reader[0], Id = (int)reader[0],
AppDomainName = (string)reader[1], AppDomainName = (string)reader[1],
ErrorPage = (string)reader[2], ErrorPage = (string)reader[2],
UserId = (string)reader[3], UserId = reader.IsDBNull(3) ? string.Empty : (string)reader[3],
UserIp = (string)reader[4], UserIp = reader.IsDBNull(4) ? string.Empty : (string)reader[4],
ExceptionType = (string)reader[5], ExceptionType = (string)reader[5],
Message = (string)reader[6], Message = (string)reader[6],
StackTrace = (string)reader[7], StackTrace = (string)reader[7],

View File

@ -16,7 +16,10 @@ namespace Bootstrap.DataAccess
/// </summary> /// </summary>
public static class MenuHelper public static class MenuHelper
{ {
private const string RetrieveMenusByRoleIdDataKey = "MenuHelper-RetrieveMenusByRoleId"; /// <summary>
///
/// </summary>
internal const string RetrieveMenusByRoleIdDataKey = "MenuHelper-RetrieveMenusByRoleId";
/// <summary> /// <summary>
/// 删除菜单信息 /// 删除菜单信息
/// </summary> /// </summary>

View File

@ -2,10 +2,13 @@
using Longbow.Caching; using Longbow.Caching;
using Longbow.ExceptionManagement; using Longbow.ExceptionManagement;
using System; using System;
using System.Collections.Concurrent;
using System.Collections.Generic; using System.Collections.Generic;
using System.Data; using System.Data;
using System.Data.Common; using System.Data.Common;
using System.Linq; using System.Linq;
using System.Net.WebSockets;
using System.Threading;
namespace Bootstrap.DataAccess namespace Bootstrap.DataAccess
{ {
@ -14,8 +17,15 @@ namespace Bootstrap.DataAccess
/// </summary> /// </summary>
public static class NotificationHelper public static class NotificationHelper
{ {
/// <summary>
///
/// </summary>
internal const string RetrieveNotificationsDataKey = "NotificationHelper-RetrieveNotifications"; internal const string RetrieveNotificationsDataKey = "NotificationHelper-RetrieveNotifications";
/// <summary> /// <summary>
///
/// </summary>
public static readonly ConcurrentBag<MessageBody> MessagePool = new ConcurrentBag<MessageBody>();
/// <summary>
/// 新用户注册的通知的面板显示 /// 新用户注册的通知的面板显示
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
@ -113,4 +123,57 @@ namespace Bootstrap.DataAccess
return ret; return ret;
} }
} }
/// <summary>
///
/// </summary>
public class MessageBody : IDisposable
{
/// <summary>
///
/// </summary>
public MessageBody()
{
timer = new Timer(state =>
{
var msg = this;
NotificationHelper.MessagePool.TryTake(out msg);
}, null, 5000, Timeout.Infinite);
}
private Timer timer = null;
/// <summary>
///
/// </summary>
public string Message { get; set; }
/// <summary>
///
/// </summary>
public string Category { get; set; }
/// <summary>
///
/// </summary>
/// <returns></returns>
public override string ToString()
{
return string.Format("{0};{1}-{2}", Category, Message);
}
private void Dispose(bool disposing)
{
if (disposing)
{
if (timer != null)
{
timer.Dispose();
timer = null;
}
}
}
/// <summary>
///
/// </summary>
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
}
} }

View File

@ -41,7 +41,7 @@ namespace Bootstrap.DataAccess
/// </summary> /// </summary>
public string Description { get; set; } public string Description { get; set; }
/// <summary> /// <summary>
/// 获得/设置 用户当前状态 0 表示管理员注册用户 1 表示用户自己注册 2 表示管理员批复 9 表示前台remote validate /// 获得/设置 用户当前状态 0 表示管理员注册用户 1 表示用户自己注册 2 表示管理员批复 3 表示更改个人皮肤 9 表示前台remote validate
/// </summary> /// </summary>
public int UserStatus { get; set; } public int UserStatus { get; set; }
/// <summary> /// <summary>

View File

@ -145,6 +145,7 @@ namespace Bootstrap.DataAccess
} }
CacheCleanUtility.ClearCache(userIds: p.Id == 0 ? string.Empty : p.Id.ToString()); CacheCleanUtility.ClearCache(userIds: p.Id == 0 ? string.Empty : p.Id.ToString());
ret = true; ret = true;
if (p.UserStatus == 1) NotificationHelper.MessagePool.Add(new MessageBody() { Category = "Users", Message = string.Format("{0}-{1}", p.UserName, p.Description) });
} }
catch (DbException ex) catch (DbException ex)
{ {
@ -326,7 +327,35 @@ namespace Bootstrap.DataAccess
cmd.Parameters.Add(DBAccessManager.SqlDBAccess.CreateParameter("@userName", userName)); cmd.Parameters.Add(DBAccessManager.SqlDBAccess.CreateParameter("@userName", userName));
DBAccessManager.SqlDBAccess.ExecuteNonQuery(cmd); DBAccessManager.SqlDBAccess.ExecuteNonQuery(cmd);
string key = string.Format("{0}-{1}", RetrieveUsersByNameDataKey, userName); string key = string.Format("{0}-{1}", RetrieveUsersByNameDataKey, userName);
CacheManager.Clear(k => key == k); CacheCleanUtility.ClearCache(key);
ret = true;
}
}
catch (Exception ex)
{
ExceptionManager.Publish(ex);
}
return ret;
}
/// <summary>
/// 根据用户名更改用户皮肤
/// </summary>
/// <param name="userName"></param>
/// <param name="cssName"></param>
/// <returns></returns>
public static bool SaveUserCssByName(string userName, string cssName)
{
bool ret = false;
try
{
string sql = "Update Users set Css = @cssName where UserName = @userName";
using (DbCommand cmd = DBAccessManager.SqlDBAccess.CreateCommand(CommandType.Text, sql))
{
cmd.Parameters.Add(DBAccessManager.SqlDBAccess.CreateParameter("@cssName", DBAccess.ToDBValue(cssName)));
cmd.Parameters.Add(DBAccessManager.SqlDBAccess.CreateParameter("@userName", userName));
DBAccessManager.SqlDBAccess.ExecuteNonQuery(cmd);
string key = string.Format("{0}-{1}", RetrieveUsersByNameDataKey, userName);
CacheCleanUtility.ClearCache(key);
ret = true; ret = true;
} }
} }

View File

@ -25,9 +25,8 @@ INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'消息状
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'消息标签', N'一般', N'0', 0) INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'消息标签', N'一般', N'0', 0)
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'消息标签', N'紧要', N'1', 0) INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'消息标签', N'紧要', N'1', 0)
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'头像地址', N'头像路径', N'~/Content/images/uploader/', 0) INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'头像地址', N'头像路径', N'~/Content/images/uploader/', 0)
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'网站样式', N'默认样式', N'site.css', 0)
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'网站样式', N'蓝色样式', N'blue.css', 0) INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'网站样式', N'蓝色样式', N'blue.css', 0)
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'当前样式', N'使用样式', N'site.css', 0) INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'当前样式', N'使用样式', N'blue.css', 0)
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'网站设置', N'前台首页', N'~/Home/Index', 0) INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'网站设置', N'前台首页', N'~/Home/Index', 0)
DELETE FROM Navigations DELETE FROM Navigations

View File

@ -29,6 +29,7 @@ CREATE TABLE [dbo].[Users](
[RejectedTime] [datetime] NULL, [RejectedTime] [datetime] NULL,
[RejectedReason] [nvarchar](50) NULL, [RejectedReason] [nvarchar](50) NULL,
[Icon] [varchar](50) NOT NULL, [Icon] [varchar](50) NOT NULL,
[Css] [varchar](50) NULL,
CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED
( (
[ID] ASC [ID] ASC
@ -258,8 +259,8 @@ CREATE TABLE [dbo].[Exceptions](
[ID] [int] IDENTITY(1,1) NOT NULL, [ID] [int] IDENTITY(1,1) NOT NULL,
[AppDomainName] [varchar](50) NOT NULL, [AppDomainName] [varchar](50) NOT NULL,
[ErrorPage] [varchar](50) NOT NULL, [ErrorPage] [varchar](50) NOT NULL,
[UserID] [varchar](50) NOT NULL, [UserID] [varchar](50) NULL,
[UserIp] [varchar](15) NOT NULL, [UserIp] [varchar](15) NULL,
[ExceptionType] [nvarchar](max) NOT NULL, [ExceptionType] [nvarchar](max) NOT NULL,
[Message] [nvarchar](max) NOT NULL, [Message] [nvarchar](max) NOT NULL,
[StackTrace] [nvarchar](max) NULL, [StackTrace] [nvarchar](max) NULL,