Publish: 发布新版本V1.0
|
@ -153,3 +153,6 @@ Dotfuscated/
|
|||
*/UpdateServer/v*
|
||||
*/UpdateServer/*.dll
|
||||
*/UpdateServer/*.exe
|
||||
|
||||
#uploader
|
||||
uploader/
|
|
@ -0,0 +1 @@
|
|||
请不要删除此目录
|
|
@ -0,0 +1,14 @@
|
|||
using Longbow.Web.Mvc;
|
||||
using System;
|
||||
|
||||
namespace Bootstrap.Admin
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
|
||||
class BAAuthorizeAttribute : LgbAuthorizeAttribute
|
||||
{
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
using Bootstrap.DataAccess;
|
||||
using Longbow.Caching;
|
||||
using Longbow.ExceptionManagement;
|
||||
using Longbow.ExceptionManagement.Configuration;
|
||||
using System;
|
||||
using System.Collections.Specialized;
|
||||
|
||||
namespace Bootstrap.Admin
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public class DBPublisher : IExceptionPublisher
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="ex"></param>
|
||||
/// <param name="additionalInfo"></param>
|
||||
/// <param name="publisherElement"></param>
|
||||
public void Publish(Exception ex, NameValueCollection additionalInfo, ExceptionPublisherElement publisherElement)
|
||||
{
|
||||
if (publisherElement.Mode == PublisherMode.Off) return;
|
||||
ExceptionHelper.Log(ex, additionalInfo);
|
||||
CacheManager.Clear();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
using Bootstrap.Security.Mvc;
|
||||
using Longbow.Web.Mvc;
|
||||
using System;
|
||||
using System.Web.Mvc;
|
||||
|
||||
namespace Bootstrap.Admin
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public static class FilterConfig
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="filters"></param>
|
||||
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
|
||||
{
|
||||
if (filters == null) throw new ArgumentNullException("filters");
|
||||
filters.Add(new LgbHandleErrorAttribute());
|
||||
filters.Add(new BAAuthorizeAttribute());
|
||||
}
|
||||
}
|
||||
}
|
|
@ -12,7 +12,7 @@ namespace Bootstrap.Admin
|
|||
routes.MapRoute(
|
||||
name: "Default",
|
||||
url: "{controller}/{action}/{id}",
|
||||
defaults: new { controller = "Admin", action = "Index", id = UrlParameter.Optional }
|
||||
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
using System.Web.Http;
|
||||
using Bootstrap.Security.Mvc;
|
||||
using System.Web.Http;
|
||||
|
||||
namespace Bootstrap.Admin
|
||||
{
|
||||
|
@ -7,7 +8,7 @@ namespace Bootstrap.Admin
|
|||
public static void Register(HttpConfiguration config)
|
||||
{
|
||||
// Web API configuration and services
|
||||
|
||||
config.Filters.Add(new BAAPIAuthorizaAttribute());
|
||||
// Web API routes
|
||||
config.MapHttpAttributeRoutes();
|
||||
|
||||
|
@ -16,6 +17,9 @@ namespace Bootstrap.Admin
|
|||
routeTemplate: "api/{controller}/{id}",
|
||||
defaults: new { id = RouteParameter.Optional }
|
||||
);
|
||||
|
||||
var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings;
|
||||
json.DateFormatString = "yyyy'-'MM'-'dd' 'HH':'mm':'ss";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />
|
||||
<Import Project="..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" />
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
|
@ -43,8 +41,17 @@
|
|||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Bootstrap.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=c20f2177a7066899, processorArchitecture=MSIL" />
|
||||
<Reference Include="Bootstrap.Security.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=c20f2177a7066899, processorArchitecture=MSIL" />
|
||||
<Reference Include="Longbow, Version=3.0.0.0, Culture=neutral, PublicKeyToken=c20f2177a7066899, processorArchitecture=MSIL" />
|
||||
<Reference Include="Longbow.ExceptionManagement, Version=3.0.0.0, Culture=neutral, PublicKeyToken=c20f2177a7066899, processorArchitecture=MSIL" />
|
||||
<Reference Include="Longbow.V4, Version=4.0.0.0, Culture=neutral, PublicKeyToken=c20f2177a7066899, processorArchitecture=MSIL" />
|
||||
<Reference Include="Longbow.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=c20f2177a7066899, processorArchitecture=MSIL" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Net.Http" />
|
||||
<Reference Include="System.Web.DynamicData" />
|
||||
<Reference Include="System.Web.Entity" />
|
||||
|
@ -85,9 +92,6 @@
|
|||
<Reference Include="System.Web.Mvc">
|
||||
<HintPath>..\packages\Microsoft.AspNet.Mvc.5.2.3\lib\net45\System.Web.Mvc.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Newtonsoft.Json">
|
||||
<HintPath>..\packages\Newtonsoft.Json.6.0.4\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Net.Http.Formatting">
|
||||
<HintPath>..\packages\Microsoft.AspNet.WebApi.Client.5.2.3\lib\net45\System.Net.Http.Formatting.dll</HintPath>
|
||||
</Reference>
|
||||
|
@ -99,62 +103,139 @@
|
|||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Content\css\admin.css" />
|
||||
<Content Include="Content\css\blue.css" />
|
||||
<Content Include="Content\css\fix.css" />
|
||||
<Content Include="Content\css\font-awesome.css" />
|
||||
<Content Include="Content\css\bootstrap-table.css" />
|
||||
<Content Include="Content\css\bootstrap-table.min.css" />
|
||||
<Content Include="Content\css\bootstrap-theme.css" />
|
||||
<Content Include="Content\css\bootstrap-theme.min.css" />
|
||||
<Content Include="Content\css\bootstrap.css" />
|
||||
<Content Include="Content\css\bootstrap.min.css" />
|
||||
<Content Include="Content\images\arrow-up.png" />
|
||||
<Content Include="Content\images\avatar1_small.jpg" />
|
||||
<Content Include="Content\images\glyphicons-halflings-white.png" />
|
||||
<Content Include="Content\images\glyphicons-halflings.png" />
|
||||
<Content Include="App_Data\ErrorLog\Readme.txt" />
|
||||
<Content Include="Content\bootstrap-theme.css" />
|
||||
<Content Include="Content\bootstrap-theme.min.css" />
|
||||
<Content Include="Content\bootstrap.css" />
|
||||
<Content Include="Content\bootstrap.min.css" />
|
||||
<Content Include="Content\api.css" />
|
||||
<Content Include="Content\bootstrap-datetimepicker.css" />
|
||||
<Content Include="Content\bootstrap-datetimepicker.min.css" />
|
||||
<Content Include="Content\fileinput.css" />
|
||||
<Content Include="Content\fileinput.min.css" />
|
||||
<Content Include="Content\IE8.css" />
|
||||
<Content Include="Content\images\bg2.jpg" />
|
||||
<Content Include="Content\images\bg4.jpg" />
|
||||
<Content Include="Content\images\bg3.png" />
|
||||
<Content Include="Content\login-responsive.css" />
|
||||
<Content Include="Content\nprogress.css" />
|
||||
<Content Include="Content\font-awesome.css" />
|
||||
<Content Include="Content\font-awesome.min.css" />
|
||||
<Content Include="Content\html\api.html" />
|
||||
<Content Include="Content\images\error_icon.png" />
|
||||
<Content Include="favicon.ico" />
|
||||
<Content Include="Content\admin-responsive.css" />
|
||||
<Content Include="Content\admin.css" />
|
||||
<Content Include="Content\blue.css" />
|
||||
<Content Include="Content\fa.css" />
|
||||
<Content Include="Content\bootstrap-table.css" />
|
||||
<Content Include="Content\bootstrap-table.min.css" />
|
||||
<Content Include="Content\jquery.nestable.css" />
|
||||
<Content Include="Content\lock.css" />
|
||||
<Content Include="Content\login.css" />
|
||||
<Content Include="Content\register.css" />
|
||||
<Content Include="Content\tasks.css" />
|
||||
<Content Include="Content\html\RegResult.html" />
|
||||
<Content Include="Content\images\bg.jpg" />
|
||||
<Content Include="Content\images\loading-sm.gif" />
|
||||
<Content Include="Content\images\loading.gif" />
|
||||
<Content Include="Content\images\lock-bg.jpg" />
|
||||
<Content Include="Content\images\logo.jpg" />
|
||||
<Content Include="Content\images\logo1.jpg" />
|
||||
<Content Include="Content\images\logo2.jpg" />
|
||||
<Content Include="Content\images\logo3.jpg" />
|
||||
<Content Include="Content\images\logo4.jpg" />
|
||||
<Content Include="Content\images\logo5.jpg" />
|
||||
<Content Include="Content\images\logo6.jpg" />
|
||||
<Content Include="Content\images\uploader\Admin.jpg" />
|
||||
<Content Include="Content\images\uploader\default.jpg" />
|
||||
<Content Include="Content\images\uploader\readme.txt" />
|
||||
<Content Include="Content\site-responsive.css" />
|
||||
<Content Include="Content\images\error.png" />
|
||||
<Content Include="Content\images\nav-expand.png" />
|
||||
<Content Include="Content\images\search-icon.png" />
|
||||
<Content Include="Content\css\site.css" />
|
||||
<Content Include="Content\css\sweetalert.css" />
|
||||
<Content Include="Content\fonts\glyphicons-halflings-regular.svg" />
|
||||
<Content Include="Content\js\common-scripts.js" />
|
||||
<Content Include="Content\js\jquery.dcjqaccordion.2.7.js" />
|
||||
<Content Include="Content\js\jquery.nicescroll.min.js" />
|
||||
<Content Include="Content\js\jquery.scrollTo.js" />
|
||||
<Content Include="Content\js\jquery.scrollTo.min.js" />
|
||||
<Content Include="Content\js\longbow.dataentity.js" />
|
||||
<Content Include="Content\site.css" />
|
||||
<Content Include="Content\sweetalert.css" />
|
||||
<Content Include="Content\images\success.png" />
|
||||
<Content Include="fonts\fontawesome-webfont.svg" />
|
||||
<Content Include="fonts\glyphicons-halflings-regular.svg" />
|
||||
<Content Include="Global.asax" />
|
||||
<Content Include="Content\fonts\glyphicons-halflings-regular.woff2" />
|
||||
<Content Include="Content\fonts\glyphicons-halflings-regular.woff" />
|
||||
<Content Include="Content\fonts\glyphicons-halflings-regular.ttf" />
|
||||
<Content Include="Content\fonts\glyphicons-halflings-regular.eot" />
|
||||
<Content Include="Content\css\bootstrap.min.css.map" />
|
||||
<Content Include="Content\css\bootstrap.css.map" />
|
||||
<Content Include="Content\css\bootstrap-theme.min.css.map" />
|
||||
<Content Include="Content\css\bootstrap-theme.css.map" />
|
||||
<Content Include="Content\js\additional-methods.js" />
|
||||
<Content Include="Content\js\additional-methods.min.js" />
|
||||
<Content Include="Content\js\bootstrap-table-zh-CN.js" />
|
||||
<Content Include="Content\js\bootstrap-table-zh-CN.min.js" />
|
||||
<Content Include="Content\js\bootstrap-table.js" />
|
||||
<Content Include="Content\js\bootstrap-table.min.js" />
|
||||
<Content Include="Content\js\bootstrap.js" />
|
||||
<Content Include="Content\js\bootstrap.min.js" />
|
||||
<Content Include="Content\js\jquery.validate.js" />
|
||||
<Content Include="Content\js\jquery.validate.min.js" />
|
||||
<Content Include="Content\js\Longbow.Common.js" />
|
||||
<Content Include="Content\js\messages_zh.js" />
|
||||
<Content Include="Content\js\messages_zh.min.js" />
|
||||
<Content Include="Scripts\additional-methods.js" />
|
||||
<Content Include="Scripts\additional-methods.min.js" />
|
||||
<Content Include="Scripts\bootstrap-datetimepicker.js" />
|
||||
<Content Include="Scripts\bootstrap-datetimepicker.min.js" />
|
||||
<Content Include="Scripts\bootstrap-datetimepicker.zh-CN.js" />
|
||||
<Content Include="Scripts\bootstrap-table-zh-CN.js" />
|
||||
<Content Include="Scripts\bootstrap-table-zh-CN.min.js" />
|
||||
<Content Include="Scripts\bootstrap-table.js" />
|
||||
<Content Include="Scripts\bootstrap-table.min.js" />
|
||||
<Content Include="Scripts\bootstrap.js" />
|
||||
<Content Include="Scripts\bootstrap.min.js" />
|
||||
<Content Include="Scripts\bootstrap3-typeahead.js" />
|
||||
<Content Include="Scripts\bootstrap3-typeahead.min.js" />
|
||||
<Content Include="Scripts\common-scripts.js" />
|
||||
<Content Include="Scripts\Content.js" />
|
||||
<Content Include="Scripts\Dicts.js" />
|
||||
<Content Include="Scripts\Exceptions.js" />
|
||||
<Content Include="Scripts\fileinput.js" />
|
||||
<Content Include="Scripts\fileinput.min.js" />
|
||||
<Content Include="Scripts\fileinput.zh.js" />
|
||||
<Content Include="Scripts\framework.js" />
|
||||
<Content Include="Scripts\Groups.js" />
|
||||
<Content Include="Scripts\icon.js" />
|
||||
<Content Include="Scripts\Profiles.js" />
|
||||
<Content Include="fonts\glyphicons-halflings-regular.woff2" />
|
||||
<Content Include="fonts\glyphicons-halflings-regular.woff" />
|
||||
<Content Include="fonts\glyphicons-halflings-regular.ttf" />
|
||||
<Content Include="fonts\glyphicons-halflings-regular.eot" />
|
||||
<Content Include="Content\bootstrap.min.css.map" />
|
||||
<Content Include="Content\bootstrap.css.map" />
|
||||
<Content Include="Content\bootstrap-theme.min.css.map" />
|
||||
<Content Include="Content\bootstrap-theme.css.map" />
|
||||
<Content Include="fonts\FontAwesome.otf" />
|
||||
<Content Include="fonts\fontawesome-webfont.woff2" />
|
||||
<Content Include="fonts\fontawesome-webfont.woff" />
|
||||
<Content Include="fonts\fontawesome-webfont.ttf" />
|
||||
<Content Include="fonts\fontawesome-webfont.eot" />
|
||||
<None Include="Scripts\jquery-3.1.1.intellisense.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.slim.js" />
|
||||
<Content Include="Scripts\jquery-3.1.1.slim.min.js" />
|
||||
<None Include="Scripts\jquery.validate-vsdoc.js" />
|
||||
<Content Include="Scripts\jquery.dcjqaccordion.2.7.js" />
|
||||
<Content Include="Scripts\jquery.nestable.js" />
|
||||
<Content Include="Scripts\jquery.nicescroll.min.js" />
|
||||
<Content Include="Scripts\jquery.scrollTo.js" />
|
||||
<Content Include="Scripts\jquery.scrollTo.min.js" />
|
||||
<Content Include="Scripts\jquery.validate.js" />
|
||||
<Content Include="Scripts\jquery.validate.min.js" />
|
||||
<Content Include="Scripts\lock.js" />
|
||||
<Content Include="Scripts\log.js" />
|
||||
<Content Include="Scripts\Login.js" />
|
||||
<Content Include="Scripts\Terminals.js" />
|
||||
<Content Include="Content\js\jquery-1.10.2.js" />
|
||||
<Content Include="Content\js\jquery-1.10.2.min.js" />
|
||||
<Content Include="Content\js\sweetalert.js" />
|
||||
<Content Include="Content\js\sweetalert.min.js" />
|
||||
<None Include="Content\js\_references.js" />
|
||||
<Content Include="Content\js\framework.js" />
|
||||
<Content Include="Web.config" />
|
||||
<Content Include="Scripts\Logs.js" />
|
||||
<Content Include="Scripts\Longbow.Common.js" />
|
||||
<Content Include="Scripts\longbow.dataentity.js" />
|
||||
<Content Include="Scripts\Menus.js" />
|
||||
<Content Include="Scripts\message.js" />
|
||||
<Content Include="Scripts\messages_zh.js" />
|
||||
<Content Include="Scripts\messages_zh.min.js" />
|
||||
<Content Include="Scripts\noti.js" />
|
||||
<Content Include="Scripts\nprogress.js" />
|
||||
<Content Include="Scripts\Settings.js" />
|
||||
<Content Include="Scripts\register.js" />
|
||||
<Content Include="Scripts\Roles.js" />
|
||||
<Content Include="Scripts\sweetalert.js" />
|
||||
<Content Include="Scripts\sweetalert.min.js" />
|
||||
<Content Include="Scripts\tasks.js" />
|
||||
<Content Include="Scripts\apidoc.js" />
|
||||
<Content Include="Scripts\Users.js" />
|
||||
<Content Include="packages.config" />
|
||||
<Content Include="Scripts\jquery-3.1.1.slim.min.map" />
|
||||
<Content Include="Scripts\jquery-3.1.1.min.map" />
|
||||
<Content Include="Views\Shared\Readme.txt" />
|
||||
<Content Include="Web.config">
|
||||
<SubType>Designer</SubType>
|
||||
</Content>
|
||||
<Content Include="Views\Shared\_Layout.cshtml" />
|
||||
<Content Include="Views\Home\Index.cshtml" />
|
||||
</ItemGroup>
|
||||
|
@ -162,32 +243,46 @@
|
|||
<Compile Include="..\bldver.cs">
|
||||
<Link>bldver.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="App_Start\DBPublisher.cs" />
|
||||
<Compile Include="App_Start\FilterConfig.cs" />
|
||||
<Compile Include="App_Start\RouteConfig.cs" />
|
||||
<Compile Include="App_Start\WebApiConfig.cs" />
|
||||
<Compile Include="Controllers\AdminController.cs" />
|
||||
<Compile Include="Controllers\DictsController.cs" />
|
||||
<Compile Include="Controllers\ExceptionsController.cs" />
|
||||
<Compile Include="Controllers\GroupsController.cs" />
|
||||
<Compile Include="Controllers\HomeController.cs" />
|
||||
<Compile Include="Controllers\RulesController.cs" />
|
||||
<Compile Include="Controllers\TerminalsController.cs" />
|
||||
<Compile Include="Controllers\ProfilesController.cs" />
|
||||
<Compile Include="Controllers\LoginController.cs" />
|
||||
<Compile Include="Controllers\LogsController.cs" />
|
||||
<Compile Include="Controllers\MenusController.cs" />
|
||||
<Compile Include="Controllers\MessagesController.cs" />
|
||||
<Compile Include="Controllers\NotificationsController.cs" />
|
||||
<Compile Include="Controllers\SettingsController.cs" />
|
||||
<Compile Include="Controllers\RolesController.cs" />
|
||||
<Compile Include="Controllers\TasksController.cs" />
|
||||
<Compile Include="Controllers\UsersController.cs" />
|
||||
<Compile Include="Global.asax.cs">
|
||||
<DependentUpon>Global.asax</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Models\ProfilesModel.cs" />
|
||||
<Compile Include="Models\LockModel.cs" />
|
||||
<Compile Include="Models\MessageCountModel.cs" />
|
||||
<Compile Include="Models\QueryDictOption.cs" />
|
||||
<Compile Include="Models\QueryExceptionOption.cs" />
|
||||
<Compile Include="Models\QueryGroupOption.cs" />
|
||||
<Compile Include="Models\QueryLogOption.cs" />
|
||||
<Compile Include="Models\QueryMenuOption.cs" />
|
||||
<Compile Include="Models\QueryRoleOption.cs" />
|
||||
<Compile Include="Models\QueryUserOption.cs" />
|
||||
<Compile Include="Models\HeaderBarModel.cs" />
|
||||
<Compile Include="Models\LoginModel.cs" />
|
||||
<Compile Include="Models\ModelBase.cs" />
|
||||
<Compile Include="Models\NavigatorBarModel.cs" />
|
||||
<Compile Include="Models\PaginationOption.cs" />
|
||||
<Compile Include="Models\TerminalsModel.cs" />
|
||||
<Compile Include="Models\UserModel.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Views\web.config" />
|
||||
<Content Include="packages.config" />
|
||||
<Content Include="Views\Home\Terminals.cshtml" />
|
||||
<Content Include="Views\Home\Rules.cshtml" />
|
||||
<Content Include="Content\fonts\fontawesome-webfont.ttf" />
|
||||
<Content Include="Content\fonts\fontawesome-webfont.woff" />
|
||||
<Content Include="Views\Shared\_Fix.cshtml" />
|
||||
<Content Include="Views\Shared\_Normal.cshtml" />
|
||||
<Content Include="Views\Shared\_Admin.cshtml" />
|
||||
<Content Include="Views\Admin\Index.cshtml" />
|
||||
|
@ -197,6 +292,37 @@
|
|||
<Content Include="Views\_ViewStart.cshtml" />
|
||||
<Content Include="Views\Shared\Header.cshtml" />
|
||||
<Content Include="Views\Shared\Navigator.cshtml" />
|
||||
<Content Include="Views\Home\Login.cshtml" />
|
||||
<Content Include="Views\Shared\UnAuthorized.cshtml" />
|
||||
<Content Include="Views\Shared\AwesomeIcon.cshtml" />
|
||||
<Content Include="Views\Admin\FAIcon.cshtml" />
|
||||
<Content Include="Views\Admin\Groups.cshtml" />
|
||||
<Content Include="Views\Admin\Roles.cshtml" />
|
||||
<Content Include="Views\Admin\Menus.cshtml" />
|
||||
<Content Include="Views\Admin\Dicts.cshtml" />
|
||||
<Content Include="Views\Shared\RoleConfig.cshtml" />
|
||||
<Content Include="Views\Shared\IconView.cshtml" />
|
||||
<Content Include="Views\Shared\UserConfig.cshtml" />
|
||||
<Content Include="Views\Shared\GroupConfig.cshtml" />
|
||||
<Content Include="Views\Admin\Logs.cshtml" />
|
||||
<Content Include="Views\Admin\Settings.cshtml" />
|
||||
<Content Include="Views\Shared\Footer.cshtml" />
|
||||
<Content Include="Views\Shared\MenuTree.cshtml" />
|
||||
<Content Include="Views\Shared\NavigatorConfig.cshtml" />
|
||||
<Content Include="Views\Shared\SubNavigation.cshtml" />
|
||||
<Content Include="Views\Home\Lock.cshtml" />
|
||||
<Content Include="Views\Home\Register.cshtml" />
|
||||
<Content Include="Views\Admin\Notifications.cshtml" />
|
||||
<Content Include="Views\Admin\Profiles.cshtml" />
|
||||
<Content Include="Views\Admin\Exceptions.cshtml" />
|
||||
<Content Include="Views\Admin\Messages.cshtml" />
|
||||
<Content Include="Views\Admin\Tasks.cshtml" />
|
||||
<Content Include="Views\Admin\Mobile.cshtml" />
|
||||
<Content Include="Views\Shared\_Mobile.cshtml" />
|
||||
<Content Include="Views\Home\Mobile.cshtml" />
|
||||
<Content Include="Views\Shared\SubMenu.cshtml" />
|
||||
<Content Include="Views\Admin\Api.cshtml" />
|
||||
<Content Include="Views\Shared\_ButtonBarGroup.cshtml" />
|
||||
<None Include="Web.Debug.config">
|
||||
<DependentUpon>Web.config</DependentUpon>
|
||||
</None>
|
||||
|
@ -204,9 +330,7 @@
|
|||
<DependentUpon>Web.config</DependentUpon>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="App_Data\" />
|
||||
</ItemGroup>
|
||||
<ItemGroup />
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Bootstrap.DataAccess\Bootstrap.DataAccess.csproj">
|
||||
<Project>{af16ca71-b8c6-4f51-b38c-0c0300fdebd7}</Project>
|
||||
|
@ -247,13 +371,6 @@
|
|||
</FlavorProperties>
|
||||
</VisualStudio>
|
||||
</ProjectExtensions>
|
||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||
<PropertyGroup>
|
||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||
</PropertyGroup>
|
||||
<Error Condition="!Exists('..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props'))" />
|
||||
<Error Condition="!Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props'))" />
|
||||
</Target>
|
||||
<PropertyGroup>
|
||||
<PostBuildEvent>cscript /Nologo $(SolutionDir)Scripts\Publish.vbs $(TargetDir) $(TargetName) $(TargetExt) $(SolutionDir) $(OutDir) $(ConfigurationName)</PostBuildEvent>
|
||||
</PropertyGroup>
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
.alert {
|
||||
position: absolute;
|
||||
top: 15px;
|
||||
left: 15px;
|
||||
right: 15px;
|
||||
z-index: 100;
|
||||
}
|
||||
|
||||
.alert div {
|
||||
display: inline-block;
|
||||
}
|
|
@ -0,0 +1,101 @@
|
|||
@media (min-width: 375px) {
|
||||
.hidden-375 {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.toolbar .dropdown-menu a {
|
||||
padding: 0 20px;
|
||||
border-left: solid 1px #aeb2b7;
|
||||
}
|
||||
|
||||
.toolbar .dropdown-menu a:first-child {
|
||||
border-left: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 568px) {
|
||||
.toolbar {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.bs-bars {
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.sidebar {
|
||||
top: 94px;
|
||||
bottom: 40px;
|
||||
position: absolute;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.form-group .form-control-url {
|
||||
width: 442px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 769px) {
|
||||
.sidebar {
|
||||
display: block;
|
||||
width: 210px;
|
||||
}
|
||||
|
||||
.main-content {
|
||||
margin-left: 210px;
|
||||
transition: none;
|
||||
}
|
||||
|
||||
.main-content.open {
|
||||
display: block;
|
||||
}
|
||||
|
||||
aside {
|
||||
transition: none;
|
||||
transform: none;
|
||||
top: 0;
|
||||
right: auto;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 940px) {
|
||||
.hidden-tb {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.modal-dialog {
|
||||
width: 900px;
|
||||
}
|
||||
|
||||
.form-group .form-control-url {
|
||||
width: 742px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-height: 672px) {
|
||||
.sidebar {
|
||||
top: 94px;
|
||||
bottom: 40px;
|
||||
position: absolute;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.main-content {
|
||||
position: fixed;
|
||||
overflow: auto;
|
||||
transition: none;
|
||||
}
|
||||
|
||||
.main-content.open {
|
||||
display: block;
|
||||
}
|
||||
|
||||
aside {
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.aside.open {
|
||||
transform: translate(0);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,544 @@
|
|||
.lgbDropdown {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.logfile {
|
||||
color: #d41404;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.logfile:focus, .logfile:active, .logfile:hover {
|
||||
color: red;
|
||||
}
|
||||
|
||||
.logfile span {
|
||||
margin-left: 4px;
|
||||
}
|
||||
|
||||
.logTs, .logSql, .logDbExcep {
|
||||
color: red;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.logExcep {
|
||||
color: #337ab7;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.logMsg {
|
||||
color: #ce2520;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.hidden-tb, .hidden-375 {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.clearcache {
|
||||
position: absolute;
|
||||
right: 60px;
|
||||
font-size: 17px;
|
||||
color: #d9534f;
|
||||
margin-top: -1px;
|
||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
|
||||
}
|
||||
|
||||
.clearcache:hover, .clearcache:focus {
|
||||
color: #c12e2a;
|
||||
}
|
||||
|
||||
.clearcache:active:hover {
|
||||
color: #ac2925;
|
||||
}
|
||||
|
||||
|
||||
.form-inline .form-group {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.form-inline .form-group .control-label {
|
||||
margin-right: 10px;
|
||||
width: 80px;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.modal-dialog .modal-body, .panel-body {
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
.modal-dialog .modal-body .form-inline .form-group input[type="text"], .modal-dialog .modal-body .form-inline .form-group input[type="password"] {
|
||||
padding-right: 30px;
|
||||
}
|
||||
|
||||
.btn:focus, .btn:active:focus {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.btn span:last-child {
|
||||
margin-left: 4px;
|
||||
}
|
||||
|
||||
.modal .modal-dialog {
|
||||
padding: 0 15px;
|
||||
}
|
||||
|
||||
.modal.file-zoom-dialog .modal-dialog {
|
||||
max-width: none;
|
||||
}
|
||||
|
||||
.modal-header {
|
||||
background-color: #f5f5f5;
|
||||
border-top-left-radius: 6px;
|
||||
border-top-right-radius: 6px;
|
||||
padding: 10px 15px;
|
||||
}
|
||||
|
||||
.modal-header .close {
|
||||
margin-top: 1px;
|
||||
}
|
||||
|
||||
.modal-body .checkbox {
|
||||
min-width: 190px;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.modal-footer {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.modal-footer .btn {
|
||||
padding-left: 22px;
|
||||
padding-right: 22px;
|
||||
}
|
||||
|
||||
.has-error input {
|
||||
background-repeat: no-repeat;
|
||||
background-image: url('images/error.png');
|
||||
background-position: right 8px center;
|
||||
}
|
||||
|
||||
.has-error .input-group-btn button, .has-error .input-group-btn button:active:focus {
|
||||
border-color: #a94442;
|
||||
}
|
||||
|
||||
.has-success input {
|
||||
background-repeat: no-repeat;
|
||||
background-image: url('images/success.png');
|
||||
background-position: right 8px center;
|
||||
}
|
||||
|
||||
.has-success .input-group-btn button, .has-success .input-group-btn button:active:focus {
|
||||
border-color: #3c763d;
|
||||
}
|
||||
|
||||
.main-content {
|
||||
transition: all .4s ease-in-out;
|
||||
padding: 15px 15px 0 15px;
|
||||
margin-left: 0;
|
||||
height: auto;
|
||||
left: 0;
|
||||
bottom: 40px;
|
||||
right: 0;
|
||||
top: 94px;
|
||||
}
|
||||
|
||||
.main-content.open {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.main-content.closed {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.main-content > .panel:last-child .panel-body {
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
.main-content > .panel > .panel-body > .modal-footer {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
aside {
|
||||
transition: transform .4s ease-in-out;
|
||||
transform: translate(-100%);
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
top: 94px;
|
||||
bottom: 40px;
|
||||
left: 0;
|
||||
right: 0;
|
||||
z-index: 5;
|
||||
}
|
||||
|
||||
aside.open {
|
||||
transform: translate(0);
|
||||
}
|
||||
|
||||
.sidebar {
|
||||
display: none;
|
||||
overflow-y: auto;
|
||||
width: 100%;
|
||||
z-index: 5;
|
||||
background: #2a3542;
|
||||
}
|
||||
|
||||
.sidebar ul li a {
|
||||
padding-right: 25px;
|
||||
}
|
||||
|
||||
.sidebar .sub-menu > .sub li {
|
||||
padding-left: 32px;
|
||||
}
|
||||
|
||||
.sidebar ul li {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
ul.sidebar-menu {
|
||||
padding: 20px 0 15px 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
ul.sidebar-menu, ul.sidebar-menu li ul.sub {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
ul.sidebar-menu .dcjq-icon {
|
||||
height: 17px;
|
||||
width: 17px;
|
||||
display: inline-block;
|
||||
background: url(images/nav-expand.png) no-repeat;
|
||||
background-position: top;
|
||||
position: absolute;
|
||||
right: 10px;
|
||||
top: 15px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
ul.sidebar-menu .active .dcjq-icon {
|
||||
background-position: bottom;
|
||||
}
|
||||
|
||||
ul.sidebar-menu li {
|
||||
line-height: 20px;
|
||||
margin-bottom: 5px;
|
||||
margin-left: 10px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
ul.sidebar-menu li a.active i {
|
||||
color: #FF6C60;
|
||||
}
|
||||
|
||||
ul.sidebar-menu li a i {
|
||||
font-size: 15px;
|
||||
width: 22px;
|
||||
}
|
||||
|
||||
ul.sidebar-menu li a {
|
||||
color: #aeb2b7;
|
||||
text-decoration: none;
|
||||
display: block;
|
||||
padding: 15px 0 15px 10px;
|
||||
font-size: 12px;
|
||||
outline: none;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
ul.sidebar-menu li a.active, ul.sidebar-menu li a:hover, ul.sidebar-menu li a:focus {
|
||||
background: #35404d;
|
||||
color: #fff;
|
||||
display: block;
|
||||
border-radius: 4px;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
ul.sidebar-menu li ul.sub li a:hover, ul.sidebar-menu li ul.sub li.active a {
|
||||
color: #FF6C60;
|
||||
transition: all 0.3s ease;
|
||||
display: block;
|
||||
}
|
||||
|
||||
ul.sidebar-menu li ul.sub li {
|
||||
background: #35404D;
|
||||
margin-bottom: 0;
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
ul.sidebar-menu li ul.sub li:last-child {
|
||||
border-radius: 0 0 4px 4px;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
|
||||
ul.sidebar-menu li ul.sub li a {
|
||||
font-size: 12px;
|
||||
padding: 6px 0;
|
||||
line-height: 35px;
|
||||
height: 35px;
|
||||
transition: all 0.3s ease;
|
||||
color: #aeb2b7;
|
||||
}
|
||||
|
||||
/*Modal Dialog Checkbox*/
|
||||
.modal-body .checkbox {
|
||||
padding: 0;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.modal-body .checkbox label {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
.modal-body .checkbox label input[type='checkbox'] {
|
||||
margin: 0 4px 0 0;
|
||||
vertical-align: middle;
|
||||
position: relative;
|
||||
top: -1px;
|
||||
}
|
||||
|
||||
.modal-body .affix {
|
||||
position: fixed;
|
||||
bottom: 95px;
|
||||
right: 50px;
|
||||
}
|
||||
|
||||
.modal-body .affix a {
|
||||
font-size: 20px;
|
||||
margin-top: 16px;
|
||||
}
|
||||
|
||||
.bs-bars {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.toolbar {
|
||||
position: relative;
|
||||
margin-top: 10px;
|
||||
margin-bottom: 10px;
|
||||
line-height: 34px;
|
||||
}
|
||||
|
||||
.toolbar .dropdown-menu {
|
||||
margin-top: 4px;
|
||||
min-width: inherit;
|
||||
}
|
||||
|
||||
.toolbar .dropdown-menu a {
|
||||
border-left: none;
|
||||
padding: 0 8px;
|
||||
display: table-cell;
|
||||
color: #504d4d;
|
||||
}
|
||||
|
||||
.toolbar .dropdown-menu a:first-child {
|
||||
padding-left: 16px;
|
||||
}
|
||||
|
||||
.toolbar .dropdown-menu a:last-child {
|
||||
padding-right: 16px;
|
||||
}
|
||||
|
||||
.toolbar .dropdown-menu a:hover {
|
||||
color: #235e90;
|
||||
}
|
||||
|
||||
/*cache*/
|
||||
.panel .fa-refresh {
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
.bootstrap-select .dropdown-menu {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.bootstrap-select .dropdown-menu > li > a {
|
||||
padding-top: 7px;
|
||||
padding-bottom: 7px;
|
||||
}
|
||||
|
||||
input[type="datetime"] {
|
||||
min-width: 220px;
|
||||
}
|
||||
|
||||
/*Messages*/
|
||||
.mail-box {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
display: table;
|
||||
table-layout: fixed;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.mail-box aside {
|
||||
display: table-cell;
|
||||
float: none;
|
||||
height: 100%;
|
||||
padding: 0;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.mail-box .sm-side {
|
||||
width: 25%;
|
||||
background: #e5e8ef;
|
||||
border-radius: 4px 0 0 4px;
|
||||
}
|
||||
|
||||
.mail-box .sm-side .user-head {
|
||||
background: #00a8b3;
|
||||
border-radius: 4px 0 0 0;
|
||||
padding: 10px;
|
||||
color: #fff;
|
||||
min-height: 80px;
|
||||
}
|
||||
|
||||
.mail-box .sm-side .user-head .inbox-avatar {
|
||||
width: 65px;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.mail-box .sm-side .user-head .inbox-avatar img {
|
||||
height: 65px;
|
||||
border-radius: 4px;
|
||||
border: 0;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.mail-box .sm-side .user-head .user-name {
|
||||
display: inline-block;
|
||||
margin: 0 0 0 10px;
|
||||
}
|
||||
|
||||
.mail-box .sm-side .user-head .user-name h5 {
|
||||
font-size: 14px;
|
||||
margin-top: 15px;
|
||||
margin-bottom: 0;
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
.mail-box .sm-side .user-head .user-name h5 a {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.mail-box .sm-side .inbox-body, .mail-box .lg-side .inbox-body {
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.mail-box .sm-side .inbox-body .btn-compose {
|
||||
background: #ff6c60;
|
||||
padding: 12px 0;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.mail-box .sm-side .inbox-body .btn-compose:hover {
|
||||
background: #f5675c;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.mail-box .sm-side ul.inbox-nav {
|
||||
display: inline-block;
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.mail-box .sm-side ul.inbox-nav li {
|
||||
display: inline-block;
|
||||
line-height: 45px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.mail-box .sm-side ul.inbox-nav li a {
|
||||
color: #6a6a6a;
|
||||
line-height: 45px;
|
||||
width: 100%;
|
||||
display: inline-block;
|
||||
padding: 0 20px;
|
||||
}
|
||||
|
||||
.mail-box .sm-side ul.inbox-nav li a:hover, .mail-box .sm-side ul.inbox-nav li.active a, .mail-box .sm-side ul.inbox-nav li a:focus {
|
||||
color: #6a6a6a;
|
||||
background: #d5d7de;
|
||||
}
|
||||
|
||||
.mail-box .sm-side ul.inbox-nav li a .label {
|
||||
margin-top: 13px;
|
||||
padding: 0.5em 0.8em;
|
||||
}
|
||||
|
||||
.mail-box .sm-side ul.inbox-nav li a i {
|
||||
width: 18px;
|
||||
}
|
||||
|
||||
.mail-box .lg-side {
|
||||
width: 75%;
|
||||
background: #fff;
|
||||
border-radius: 0 4px 4px 0;
|
||||
}
|
||||
|
||||
.mail-box .lg-side .inbox-head {
|
||||
padding: 12px;
|
||||
background: #41cac0;
|
||||
color: #fff;
|
||||
border-radius: 0 4px 0 0;
|
||||
min-height: 80px;
|
||||
}
|
||||
|
||||
.mail-box .lg-side .table-inbox {
|
||||
border: 1px solid #d3d3d3;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.mail-box .lg-side .table-inbox .unread td {
|
||||
font-weight: 600;
|
||||
background: #f7f7f7;
|
||||
}
|
||||
|
||||
.mail-box .lg-side .table-inbox tr td {
|
||||
padding: 12px;
|
||||
}
|
||||
|
||||
.mail-box .lg-side .table-inbox tr td .fa-star.inbox-started, .mail-box .lg-side .table-inbox tr td .fa-star:hover {
|
||||
color: #f78a09;
|
||||
}
|
||||
|
||||
.mail-box .lg-side .table-inbox tr td:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.dropdown-menu {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.dropdown-menu li a {
|
||||
padding: 6px 20px;
|
||||
}
|
||||
|
||||
.dropdown-menu .divider {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/*Bootstrap Table BUG */
|
||||
.fixed-table-loading {
|
||||
padding-top: 5px;
|
||||
}
|
||||
|
||||
.bootstrap-table {
|
||||
padding-bottom: 15px;
|
||||
}
|
||||
|
||||
.bootstrap-table .fixed-table-body .table {
|
||||
border-bottom: none;
|
||||
}
|
||||
/*Bootstrap Table BUG END*/
|
||||
|
||||
.input-group.form_date span {
|
||||
border-left: none;
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
h3 {
|
||||
margin-top: 0;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.btn {
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
.control-label {
|
||||
width: 80px;
|
||||
}
|
||||
|
||||
.main-content {
|
||||
padding: 15px;
|
||||
}
|
||||
|
||||
.main-content > section:not(:first-child) {
|
||||
padding-top: 10px;
|
||||
}
|
||||
|
||||
.main-content > section > div {
|
||||
line-height: 26px;
|
||||
}
|
||||
|
||||
.main-content > section > div > div {
|
||||
display: inline-block;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.test {
|
||||
display: none;
|
||||
padding: 10px 0 0 0;
|
||||
color: #5cb85c;
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
|
|
@ -0,0 +1,418 @@
|
|||
/*!
|
||||
* Datetimepicker for Bootstrap
|
||||
*
|
||||
* Copyright 2012 Stefan Petre
|
||||
* Improvements by Andrew Rowls
|
||||
* Licensed under the Apache License v2.0
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
*/
|
||||
.datetimepicker {
|
||||
padding: 4px;
|
||||
margin-top: 1px;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
direction: ltr;
|
||||
}
|
||||
|
||||
.datetimepicker-inline {
|
||||
width: 220px;
|
||||
}
|
||||
|
||||
.datetimepicker.datetimepicker-rtl {
|
||||
direction: rtl;
|
||||
}
|
||||
|
||||
.datetimepicker.datetimepicker-rtl table tr td span {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.datetimepicker-dropdown, .datetimepicker-dropdown-left {
|
||||
top: 0;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
[class*=" datetimepicker-dropdown"]:before {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
border-left: 7px solid transparent;
|
||||
border-right: 7px solid transparent;
|
||||
border-bottom: 7px solid #cccccc;
|
||||
border-bottom-color: rgba(0, 0, 0, 0.2);
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
[class*=" datetimepicker-dropdown"]:after {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
border-left: 6px solid transparent;
|
||||
border-right: 6px solid transparent;
|
||||
border-bottom: 6px solid #ffffff;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
[class*=" datetimepicker-dropdown-top"]:before {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
border-left: 7px solid transparent;
|
||||
border-right: 7px solid transparent;
|
||||
border-top: 7px solid #cccccc;
|
||||
border-top-color: rgba(0, 0, 0, 0.2);
|
||||
border-bottom: 0;
|
||||
}
|
||||
|
||||
[class*=" datetimepicker-dropdown-top"]:after {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
border-left: 6px solid transparent;
|
||||
border-right: 6px solid transparent;
|
||||
border-top: 6px solid #ffffff;
|
||||
border-bottom: 0;
|
||||
}
|
||||
|
||||
.datetimepicker-dropdown-bottom-left:before {
|
||||
top: -7px;
|
||||
right: 6px;
|
||||
}
|
||||
|
||||
.datetimepicker-dropdown-bottom-left:after {
|
||||
top: -6px;
|
||||
right: 7px;
|
||||
}
|
||||
|
||||
.datetimepicker-dropdown-bottom-right:before {
|
||||
top: -7px;
|
||||
left: 6px;
|
||||
}
|
||||
|
||||
.datetimepicker-dropdown-bottom-right:after {
|
||||
top: -6px;
|
||||
left: 7px;
|
||||
}
|
||||
|
||||
.datetimepicker-dropdown-top-left:before {
|
||||
bottom: -7px;
|
||||
right: 6px;
|
||||
}
|
||||
|
||||
.datetimepicker-dropdown-top-left:after {
|
||||
bottom: -6px;
|
||||
right: 7px;
|
||||
}
|
||||
|
||||
.datetimepicker-dropdown-top-right:before {
|
||||
bottom: -7px;
|
||||
left: 6px;
|
||||
}
|
||||
|
||||
.datetimepicker-dropdown-top-right:after {
|
||||
bottom: -6px;
|
||||
left: 7px;
|
||||
}
|
||||
|
||||
.datetimepicker > div {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.datetimepicker.minutes div.datetimepicker-minutes {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.datetimepicker.hours div.datetimepicker-hours {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.datetimepicker.days div.datetimepicker-days {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.datetimepicker.months div.datetimepicker-months {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.datetimepicker.years div.datetimepicker-years {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.datetimepicker table {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.datetimepicker td,
|
||||
.datetimepicker th {
|
||||
text-align: center;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.table-striped .datetimepicker table tr td,
|
||||
.table-striped .datetimepicker table tr th {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.datetimepicker table tr td.minute:hover {
|
||||
background: #eeeeee;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.datetimepicker table tr td.hour:hover {
|
||||
background: #eeeeee;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.datetimepicker table tr td.day:hover {
|
||||
background: #eeeeee;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.datetimepicker table tr td.old,
|
||||
.datetimepicker table tr td.new {
|
||||
color: #999999;
|
||||
}
|
||||
|
||||
.datetimepicker table tr td.disabled,
|
||||
.datetimepicker table tr td.disabled:hover {
|
||||
background: none;
|
||||
color: #999999;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.datetimepicker table tr td.today,
|
||||
.datetimepicker table tr td.today:hover,
|
||||
.datetimepicker table tr td.today.disabled,
|
||||
.datetimepicker table tr td.today.disabled:hover {
|
||||
background-color: #fde19a;
|
||||
background-image: -moz-linear-gradient(top, #fdd49a, #fdf59a);
|
||||
background-image: -ms-linear-gradient(top, #fdd49a, #fdf59a);
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdd49a), to(#fdf59a));
|
||||
background-image: -webkit-linear-gradient(top, #fdd49a, #fdf59a);
|
||||
background-image: -o-linear-gradient(top, #fdd49a, #fdf59a);
|
||||
background-image: linear-gradient(top, #fdd49a, #fdf59a);
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a', endColorstr='#fdf59a', GradientType=0);
|
||||
border-color: #fdf59a #fdf59a #fbed50;
|
||||
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
|
||||
}
|
||||
|
||||
.datetimepicker table tr td.today:hover,
|
||||
.datetimepicker table tr td.today:hover:hover,
|
||||
.datetimepicker table tr td.today.disabled:hover,
|
||||
.datetimepicker table tr td.today.disabled:hover:hover,
|
||||
.datetimepicker table tr td.today:active,
|
||||
.datetimepicker table tr td.today:hover:active,
|
||||
.datetimepicker table tr td.today.disabled:active,
|
||||
.datetimepicker table tr td.today.disabled:hover:active,
|
||||
.datetimepicker table tr td.today.active,
|
||||
.datetimepicker table tr td.today:hover.active,
|
||||
.datetimepicker table tr td.today.disabled.active,
|
||||
.datetimepicker table tr td.today.disabled:hover.active,
|
||||
.datetimepicker table tr td.today.disabled,
|
||||
.datetimepicker table tr td.today:hover.disabled,
|
||||
.datetimepicker table tr td.today.disabled.disabled,
|
||||
.datetimepicker table tr td.today.disabled:hover.disabled,
|
||||
.datetimepicker table tr td.today[disabled],
|
||||
.datetimepicker table tr td.today:hover[disabled],
|
||||
.datetimepicker table tr td.today.disabled[disabled],
|
||||
.datetimepicker table tr td.today.disabled:hover[disabled] {
|
||||
background-color: #fdf59a;
|
||||
}
|
||||
|
||||
.datetimepicker table tr td.today:active,
|
||||
.datetimepicker table tr td.today:hover:active,
|
||||
.datetimepicker table tr td.today.disabled:active,
|
||||
.datetimepicker table tr td.today.disabled:hover:active,
|
||||
.datetimepicker table tr td.today.active,
|
||||
.datetimepicker table tr td.today:hover.active,
|
||||
.datetimepicker table tr td.today.disabled.active,
|
||||
.datetimepicker table tr td.today.disabled:hover.active {
|
||||
background-color: #fbf069;
|
||||
}
|
||||
|
||||
.datetimepicker table tr td.active,
|
||||
.datetimepicker table tr td.active:hover,
|
||||
.datetimepicker table tr td.active.disabled,
|
||||
.datetimepicker table tr td.active.disabled:hover {
|
||||
background-color: #006dcc;
|
||||
background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
|
||||
background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
|
||||
background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
|
||||
background-image: -o-linear-gradient(top, #0088cc, #0044cc);
|
||||
background-image: linear-gradient(top, #0088cc, #0044cc);
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
|
||||
border-color: #0044cc #0044cc #002a80;
|
||||
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
|
||||
color: #ffffff;
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
||||
}
|
||||
|
||||
.datetimepicker table tr td.active:hover,
|
||||
.datetimepicker table tr td.active:hover:hover,
|
||||
.datetimepicker table tr td.active.disabled:hover,
|
||||
.datetimepicker table tr td.active.disabled:hover:hover,
|
||||
.datetimepicker table tr td.active:active,
|
||||
.datetimepicker table tr td.active:hover:active,
|
||||
.datetimepicker table tr td.active.disabled:active,
|
||||
.datetimepicker table tr td.active.disabled:hover:active,
|
||||
.datetimepicker table tr td.active.active,
|
||||
.datetimepicker table tr td.active:hover.active,
|
||||
.datetimepicker table tr td.active.disabled.active,
|
||||
.datetimepicker table tr td.active.disabled:hover.active,
|
||||
.datetimepicker table tr td.active.disabled,
|
||||
.datetimepicker table tr td.active:hover.disabled,
|
||||
.datetimepicker table tr td.active.disabled.disabled,
|
||||
.datetimepicker table tr td.active.disabled:hover.disabled,
|
||||
.datetimepicker table tr td.active[disabled],
|
||||
.datetimepicker table tr td.active:hover[disabled],
|
||||
.datetimepicker table tr td.active.disabled[disabled],
|
||||
.datetimepicker table tr td.active.disabled:hover[disabled] {
|
||||
background-color: #0044cc;
|
||||
}
|
||||
|
||||
.datetimepicker table tr td.active:active,
|
||||
.datetimepicker table tr td.active:hover:active,
|
||||
.datetimepicker table tr td.active.disabled:active,
|
||||
.datetimepicker table tr td.active.disabled:hover:active,
|
||||
.datetimepicker table tr td.active.active,
|
||||
.datetimepicker table tr td.active:hover.active,
|
||||
.datetimepicker table tr td.active.disabled.active,
|
||||
.datetimepicker table tr td.active.disabled:hover.active {
|
||||
background-color: #003399;
|
||||
}
|
||||
|
||||
.datetimepicker table tr td span {
|
||||
display: block;
|
||||
width: 23%;
|
||||
height: 54px;
|
||||
line-height: 54px;
|
||||
float: left;
|
||||
margin: 1%;
|
||||
cursor: pointer;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.datetimepicker .datetimepicker-hours span {
|
||||
height: 26px;
|
||||
line-height: 26px;
|
||||
}
|
||||
|
||||
.datetimepicker .datetimepicker-hours table tr td span.hour_am,
|
||||
.datetimepicker .datetimepicker-hours table tr td span.hour_pm {
|
||||
width: 14.6%;
|
||||
}
|
||||
|
||||
.datetimepicker .datetimepicker-hours fieldset legend,
|
||||
.datetimepicker .datetimepicker-minutes fieldset legend {
|
||||
margin-bottom: inherit;
|
||||
line-height: 30px;
|
||||
}
|
||||
|
||||
.datetimepicker .datetimepicker-minutes span {
|
||||
height: 26px;
|
||||
line-height: 26px;
|
||||
}
|
||||
|
||||
.datetimepicker table tr td span:hover {
|
||||
background: #eeeeee;
|
||||
}
|
||||
|
||||
.datetimepicker table tr td span.disabled,
|
||||
.datetimepicker table tr td span.disabled:hover {
|
||||
background: none;
|
||||
color: #999999;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.datetimepicker table tr td span.active,
|
||||
.datetimepicker table tr td span.active:hover,
|
||||
.datetimepicker table tr td span.active.disabled,
|
||||
.datetimepicker table tr td span.active.disabled:hover {
|
||||
background-color: #006dcc;
|
||||
background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
|
||||
background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
|
||||
background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
|
||||
background-image: -o-linear-gradient(top, #0088cc, #0044cc);
|
||||
background-image: linear-gradient(top, #0088cc, #0044cc);
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
|
||||
border-color: #0044cc #0044cc #002a80;
|
||||
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
|
||||
color: #ffffff;
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
||||
}
|
||||
|
||||
.datetimepicker table tr td span.active:hover,
|
||||
.datetimepicker table tr td span.active:hover:hover,
|
||||
.datetimepicker table tr td span.active.disabled:hover,
|
||||
.datetimepicker table tr td span.active.disabled:hover:hover,
|
||||
.datetimepicker table tr td span.active:active,
|
||||
.datetimepicker table tr td span.active:hover:active,
|
||||
.datetimepicker table tr td span.active.disabled:active,
|
||||
.datetimepicker table tr td span.active.disabled:hover:active,
|
||||
.datetimepicker table tr td span.active.active,
|
||||
.datetimepicker table tr td span.active:hover.active,
|
||||
.datetimepicker table tr td span.active.disabled.active,
|
||||
.datetimepicker table tr td span.active.disabled:hover.active,
|
||||
.datetimepicker table tr td span.active.disabled,
|
||||
.datetimepicker table tr td span.active:hover.disabled,
|
||||
.datetimepicker table tr td span.active.disabled.disabled,
|
||||
.datetimepicker table tr td span.active.disabled:hover.disabled,
|
||||
.datetimepicker table tr td span.active[disabled],
|
||||
.datetimepicker table tr td span.active:hover[disabled],
|
||||
.datetimepicker table tr td span.active.disabled[disabled],
|
||||
.datetimepicker table tr td span.active.disabled:hover[disabled] {
|
||||
background-color: #0044cc;
|
||||
}
|
||||
|
||||
.datetimepicker table tr td span.active:active,
|
||||
.datetimepicker table tr td span.active:hover:active,
|
||||
.datetimepicker table tr td span.active.disabled:active,
|
||||
.datetimepicker table tr td span.active.disabled:hover:active,
|
||||
.datetimepicker table tr td span.active.active,
|
||||
.datetimepicker table tr td span.active:hover.active,
|
||||
.datetimepicker table tr td span.active.disabled.active,
|
||||
.datetimepicker table tr td span.active.disabled:hover.active {
|
||||
background-color: #003399;
|
||||
}
|
||||
|
||||
.datetimepicker table tr td span.old {
|
||||
color: #999999;
|
||||
}
|
||||
|
||||
.datetimepicker th.switch {
|
||||
width: 145px;
|
||||
}
|
||||
|
||||
.datetimepicker th span.glyphicon {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.datetimepicker thead tr:first-child th,
|
||||
.datetimepicker tfoot th {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.datetimepicker thead tr:first-child th:hover,
|
||||
.datetimepicker tfoot th:hover {
|
||||
background: #eeeeee;
|
||||
}
|
||||
|
||||
.input-append.date .add-on i,
|
||||
.input-prepend.date .add-on i,
|
||||
.input-group.date .input-group-addon span {
|
||||
cursor: pointer;
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
}
|
|
@ -1,137 +0,0 @@
|
|||
#sidebar {
|
||||
width: 210px;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 40px;
|
||||
background: #2a3542;
|
||||
overflow-y: scroll;
|
||||
outline: none;
|
||||
margin-top: 94px;
|
||||
}
|
||||
|
||||
#sidebar .sub-menu > .sub li {
|
||||
padding-left: 32px;
|
||||
}
|
||||
|
||||
#sidebar ul li {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
ul.sidebar-menu {
|
||||
margin-top: 20px !important;
|
||||
}
|
||||
|
||||
ul.sidebar-menu, ul.sidebar-menu li ul.sub {
|
||||
margin: -2px 0 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
ul.sidebar-menu ul li {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
ul.sidebar-menu .dcjq-icon {
|
||||
height: 17px;
|
||||
width: 17px;
|
||||
display: inline-block;
|
||||
background: url(../images/nav-expand.png) no-repeat top;
|
||||
border-radius: 3px;
|
||||
-moz-border-radius: 3px;
|
||||
-webkit-border-radius: 3px;
|
||||
position: absolute;
|
||||
right: 10px;
|
||||
top: 15px;
|
||||
}
|
||||
|
||||
ul.sidebar-menu .active .dcjq-icon {
|
||||
background: url(../images/nav-expand.png) no-repeat bottom;
|
||||
border-radius: 3px;
|
||||
-moz-border-radius: 3px;
|
||||
-webkit-border-radius: 3px;
|
||||
}
|
||||
|
||||
ul.sidebar-menu li {
|
||||
line-height: 20px !important;
|
||||
margin-bottom: 5px;
|
||||
margin-left: 10px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
ul.sidebar-menu li a.active i {
|
||||
color: #FF6C60;
|
||||
}
|
||||
|
||||
ul.sidebar-menu li a i {
|
||||
font-size: 15px;
|
||||
padding-right: 6px;
|
||||
}
|
||||
|
||||
ul.sidebar-menu li.sub-menu {
|
||||
line-height: 15px;
|
||||
}
|
||||
|
||||
ul.sidebar-menu li a {
|
||||
color: #aeb2b7;
|
||||
text-decoration: none;
|
||||
display: block;
|
||||
padding: 15px 0 15px 10px;
|
||||
font-size: 12px;
|
||||
outline: none;
|
||||
-webkit-transition: all 0.3s ease;
|
||||
-moz-transition: all 0.3s ease;
|
||||
-o-transition: all 0.3s ease;
|
||||
-ms-transition: all 0.3s ease;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
ul.sidebar-menu li a.active, ul.sidebar-menu li a:hover, ul.sidebar-menu li a:focus {
|
||||
background: #35404d;
|
||||
color: #fff;
|
||||
display: block;
|
||||
border-radius: 4px;
|
||||
-webkit-border-radius: 4px;
|
||||
-webkit-transition: all 0.3s ease;
|
||||
-moz-transition: all 0.3s ease;
|
||||
-o-transition: all 0.3s ease;
|
||||
-ms-transition: all 0.3s ease;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
ul.sidebar-menu li ul.sub li a:hover, ul.sidebar-menu li ul.sub li.active a {
|
||||
color: #FF6C60;
|
||||
-webkit-transition: all 0.3s ease;
|
||||
-moz-transition: all 0.3s ease;
|
||||
-o-transition: all 0.3s ease;
|
||||
-ms-transition: all 0.3s ease;
|
||||
transition: all 0.3s ease;
|
||||
display: block;
|
||||
}
|
||||
|
||||
ul.sidebar-menu li ul.sub li {
|
||||
background: #35404D;
|
||||
margin-bottom: 0;
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
ul.sidebar-menu li ul.sub li:last-child {
|
||||
border-radius: 0 0 4px 4px;
|
||||
-webkit-border-radius: 0 0 4px 4px;
|
||||
}
|
||||
|
||||
ul.sidebar-menu li ul.sub li a {
|
||||
font-size: 12px;
|
||||
padding: 6px 0;
|
||||
line-height: 35px;
|
||||
height: 35px;
|
||||
-webkit-transition: all 0.3s ease;
|
||||
-moz-transition: all 0.3s ease;
|
||||
-o-transition: all 0.3s ease;
|
||||
-ms-transition: all 0.3s ease;
|
||||
transition: all 0.3s ease;
|
||||
color: #aeb2b7;
|
||||
}
|
||||
|
||||
.row {
|
||||
margin-left: 210px;
|
||||
}
|
|
@ -1,46 +0,0 @@
|
|||
body {
|
||||
}
|
||||
|
||||
.form-control {
|
||||
border: solid 1px #41cac0;
|
||||
}
|
||||
|
||||
.panel-default {
|
||||
border-color: #41cac0;
|
||||
}
|
||||
|
||||
.panel-default > .panel-heading{
|
||||
border-color: #41cac0;
|
||||
}
|
||||
|
||||
.body-header {
|
||||
border-color: #41cac0;
|
||||
}
|
||||
|
||||
.lgbBreadcrumb {
|
||||
border-color: #41cac0;
|
||||
}
|
||||
|
||||
.breadcrumb > li + li:before {
|
||||
color: #41cac0;
|
||||
}
|
||||
|
||||
ul.top-menu > li > a {
|
||||
border-color: #41cac0 !important;
|
||||
}
|
||||
|
||||
ul.top-menu > li > a:hover {
|
||||
border-color: #3c763d !important;
|
||||
}
|
||||
|
||||
ul.top-menu > li > a:focus {
|
||||
border-color: #3c763d !important;
|
||||
}
|
||||
|
||||
.dropdown-menu.logout {
|
||||
border: 1px solid #41cac0 !important;
|
||||
}
|
||||
|
||||
.dropdown-menu.logout > li:nth-child(5) {
|
||||
border-top: solid 1px #41cac0;
|
||||
}
|
|
@ -1,22 +0,0 @@
|
|||
html, body {
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.row {
|
||||
position: fixed;
|
||||
overflow: auto;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 40px;
|
||||
padding-top: 16px;
|
||||
}
|
||||
|
||||
.site-footer {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
z-index: 50;
|
||||
}
|
|
@ -1,470 +0,0 @@
|
|||
body {
|
||||
color: #797979;
|
||||
background: #f1f2f7;
|
||||
font-family: 'Open Sans', sans-serif;
|
||||
padding: 0px !important;
|
||||
margin: 0px !important;
|
||||
font-size: 13px;
|
||||
text-rendering: optimizeLegibility;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-font-smoothing: antialiased;
|
||||
}
|
||||
|
||||
ul li {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.btn {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
a, a:hover, a:focus {
|
||||
text-decoration: none;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
div button span {
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
.body-content {
|
||||
margin-top: 108px;
|
||||
}
|
||||
|
||||
.row {
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
margin-top: 92px;
|
||||
}
|
||||
|
||||
.header, .footer {
|
||||
min-height: 60px;
|
||||
padding: 0 15px;
|
||||
}
|
||||
|
||||
.header {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
z-index: 1002;
|
||||
height: 94px;
|
||||
border-color: #ddd;
|
||||
border-width: 0 0 1px 0;
|
||||
border-style: solid;
|
||||
}
|
||||
|
||||
.white-bg {
|
||||
background: #fff;
|
||||
border-bottom: 1px solid #f1f2f7;
|
||||
}
|
||||
|
||||
a.logo {
|
||||
font-size: 21px;
|
||||
color: #2e2e2e;
|
||||
float: left;
|
||||
margin-top: 15px;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
a.logo:hover, a.logo:focus {
|
||||
text-decoration: none;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
a.logo span {
|
||||
color: #FF6C60;
|
||||
}
|
||||
|
||||
.sidebar-toggle-box {
|
||||
float: left;
|
||||
padding-right: 15px;
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.sidebar-toggle-box .fa-bars {
|
||||
cursor: pointer;
|
||||
display: inline-block;
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
.site-footer {
|
||||
background: #5b6e84;
|
||||
color: #fff;
|
||||
padding: 10px 0;
|
||||
}
|
||||
|
||||
.go-top {
|
||||
margin-right: 1%;
|
||||
float: right;
|
||||
background: rgba(255,255,255,.5);
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
border-radius: 50%;
|
||||
-webkit-border-radius: 50%;
|
||||
}
|
||||
|
||||
.go-top:hover {
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
.go-top i {
|
||||
color: #2A3542;
|
||||
}
|
||||
|
||||
.top-nav {
|
||||
margin-top: 7px;
|
||||
}
|
||||
|
||||
.top-nav li.dropdown .dropdown-menu {
|
||||
float: right;
|
||||
right: 0;
|
||||
left: auto;
|
||||
}
|
||||
|
||||
.top-nav .username {
|
||||
font-size: 13px;
|
||||
color: #555555;
|
||||
}
|
||||
|
||||
.top-nav ul.top-menu > li > a {
|
||||
border: 1px solid #eeeeee;
|
||||
border-radius: 4px;
|
||||
-webkit-border-radius: 4px;
|
||||
padding: 6px;
|
||||
background: none;
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.top-nav ul.top-menu > li {
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.top-nav ul.top-menu > li > a:hover, .top-nav ul.top-menu > li > a:focus {
|
||||
border: 1px solid #F1F2F7;
|
||||
background: #F1F2F7;
|
||||
}
|
||||
|
||||
.top-nav ul.top-menu > li > a > img {
|
||||
height: 29px;
|
||||
width: 29px;
|
||||
}
|
||||
|
||||
.top-nav .dropdown-menu.extended.logout {
|
||||
top: 50px;
|
||||
}
|
||||
|
||||
.top-nav .nav .caret {
|
||||
border-bottom-color: #A4AABA;
|
||||
border-top-color: #A4AABA;
|
||||
}
|
||||
|
||||
.top-nav ul.top-menu > li > a:hover .caret {
|
||||
border-bottom-color: #000;
|
||||
border-top-color: #000;
|
||||
}
|
||||
|
||||
.top-nav ul.top-menu > li .dropdown-menu.logout {
|
||||
width: 268px !important;
|
||||
}
|
||||
|
||||
.nav > li, ul.top-menu > li {
|
||||
float: left;
|
||||
}
|
||||
|
||||
ul.top-menu > li > a {
|
||||
color: #666666;
|
||||
font-size: 16px;
|
||||
border-radius: 4px;
|
||||
-webkit-border-radius: 4px;
|
||||
border: 1px solid #f0f0f8 !important;
|
||||
padding: 2px 6px;
|
||||
margin-right: 15px;
|
||||
}
|
||||
|
||||
ul.top-menu > li > a:hover, ul.top-menu > li > a:focus {
|
||||
border: 1px solid #f0f0f8 !important;
|
||||
background-color: #fff !important;
|
||||
border-color: #f0f0f8 !important;
|
||||
text-decoration: none;
|
||||
border-radius: 4px;
|
||||
-webkit-border-radius: 4px;
|
||||
color: #2E2E2E !important;
|
||||
}
|
||||
|
||||
.search {
|
||||
margin-top: 6px;
|
||||
width: 20px;
|
||||
-webkit-transition: all .3s ease;
|
||||
-moz-transition: all .3s ease;
|
||||
-ms-transition: all .3s ease;
|
||||
-o-transition: all .3s ease;
|
||||
transition: all .3s ease;
|
||||
border: 1px solid #fff;
|
||||
box-shadow: none;
|
||||
background: url("../images/search-icon.png") no-repeat 10px 8px;
|
||||
padding: 0 5px 0 35px;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.search:focus {
|
||||
margin-top: 5px;
|
||||
width: 180px;
|
||||
border: 1px solid #eaeaea;
|
||||
box-shadow: none;
|
||||
-webkit-transition: all .3s ease;
|
||||
-moz-transition: all .3s ease;
|
||||
-ms-transition: all .3s ease;
|
||||
-o-transition: all .3s ease;
|
||||
transition: all .3s ease;
|
||||
color: #c8c8c8;
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
.log-arrow-up {
|
||||
background: url("../images/arrow-up.png") no-repeat;
|
||||
width: 20px;
|
||||
height: 11px;
|
||||
position: absolute;
|
||||
right: 20px;
|
||||
top: -10px;
|
||||
}
|
||||
|
||||
.dropdown-menu.extended li a {
|
||||
border-bottom: 1px solid #EBEBEB !important;
|
||||
font-size: 12px;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.dropdown-menu.extended li a {
|
||||
padding: 15px 10px !important;
|
||||
width: 100%;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.dropdown-menu.extended li a:hover {
|
||||
background-color: #F7F8F9 !important;
|
||||
color: #2E2E2E;
|
||||
}
|
||||
|
||||
.dropdown-menu.extended {
|
||||
max-width: 300px !important;
|
||||
min-width: 160px !important;
|
||||
top: 42px;
|
||||
width: 235px !important;
|
||||
padding: 0;
|
||||
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.176) !important;
|
||||
border: none !important;
|
||||
border-radius: 4px;
|
||||
-webkit-border-radius: 4px;
|
||||
}
|
||||
|
||||
.dropdown-menu.extended.logout > li {
|
||||
float: left;
|
||||
text-align: center;
|
||||
width: 33.3%;
|
||||
}
|
||||
|
||||
.dropdown-menu.extended.logout > li:last-child {
|
||||
float: left;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
background: #a9d96c;
|
||||
border-radius: 0 0 3px 3px;
|
||||
}
|
||||
|
||||
.dropdown-menu.extended.logout > li:last-child > a, .dropdown-menu.extended.logout > li:last-child > a:hover {
|
||||
color: #fff;
|
||||
border-bottom: none !important;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.dropdown-menu.extended.logout > li:last-child > a:hover > i {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.dropdown-menu.extended.logout > li > a {
|
||||
color: #a4abbb;
|
||||
border-bottom: none !important;
|
||||
}
|
||||
|
||||
.dropdown-menu.extended.logout > li > a:hover {
|
||||
background: none !important;
|
||||
}
|
||||
|
||||
.dropdown-menu.extended.logout > li > a:hover i {
|
||||
color: #50c8ea;
|
||||
}
|
||||
|
||||
.dropdown-menu.extended.logout > li > a i {
|
||||
font-size: 17px;
|
||||
}
|
||||
|
||||
.dropdown-menu.extended.logout > li > a > i {
|
||||
display: block;
|
||||
}
|
||||
|
||||
@media screen and (-webkit-min-device-pixel-ratio:0) {
|
||||
/* Safari and Chrome */
|
||||
.dropdown-menu.extended {
|
||||
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.176) !important;
|
||||
}
|
||||
}
|
||||
|
||||
/*Login*/
|
||||
.form-signin {
|
||||
width: 330px;
|
||||
max-width: 330px;
|
||||
margin: 0 auto;
|
||||
background: #fff;
|
||||
border-radius: 5px;
|
||||
-webkit-border-radius: 5px;
|
||||
border: solid 1px #ddd;
|
||||
}
|
||||
|
||||
.form-signin h2.form-signin-heading {
|
||||
margin: 0;
|
||||
padding: 20px 15px;
|
||||
text-align: center;
|
||||
background: #41cac0;
|
||||
border-radius: 5px 5px 0 0;
|
||||
-webkit-border-radius: 5px 5px 0 0;
|
||||
color: #fff;
|
||||
font-size: 18px;
|
||||
text-transform: uppercase;
|
||||
font-weight: 300;
|
||||
font-family: 'Open Sans', sans-serif;
|
||||
}
|
||||
|
||||
.form-signin div.login-wrap {
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.form-signin div.input-group {
|
||||
margin-bottom: 15px;
|
||||
border-radius: 5px;
|
||||
-webkit-border-radius: 5px;
|
||||
border: 1px solid #eaeaea;
|
||||
box-shadow: none;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.form-signin div.input-group > span {
|
||||
top: 0;
|
||||
background-color: #5bc0de;
|
||||
}
|
||||
|
||||
.form-signin div.input-group > span, div.input-group > input {
|
||||
border-color: #5bc0de;
|
||||
}
|
||||
|
||||
.form-signin .btn-login {
|
||||
background: #f67a6e;
|
||||
color: #fff;
|
||||
text-transform: uppercase;
|
||||
font-weight: 300;
|
||||
font-family: 'Open Sans', sans-serif;
|
||||
box-shadow: 0 4px #e56b60;
|
||||
margin-bottom: 20px;
|
||||
outline: none !important;
|
||||
}
|
||||
|
||||
.form-signin .checkbox {
|
||||
padding-left: 24px;
|
||||
}
|
||||
|
||||
.form-signin .checkbox > input {
|
||||
top: -1px;
|
||||
}
|
||||
|
||||
.form-signin .checkbox > label {
|
||||
padding-left: 4px;
|
||||
}
|
||||
|
||||
/*end login*/
|
||||
|
||||
/*bootstrap table 下边距*/
|
||||
.table-body {
|
||||
padding: 0px 8px;
|
||||
}
|
||||
|
||||
.terminal-form-group {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.terminal-dialog {
|
||||
width: 800px;
|
||||
}
|
||||
|
||||
.terminal-close {
|
||||
margin-top: 4px !important;
|
||||
}
|
||||
|
||||
.terminal-dialog-header {
|
||||
background-color: #f5f5f5;
|
||||
border-top-left-radius: 6px;
|
||||
border-top-right-radius: 6px;
|
||||
}
|
||||
|
||||
.terminal-pannel {
|
||||
padding-bottom: 10px;
|
||||
margin-bottom: 38px;
|
||||
}
|
||||
|
||||
.fixed-table-loading {
|
||||
padding-top: 5px;
|
||||
}
|
||||
|
||||
input.error {
|
||||
border-color: red;
|
||||
}
|
||||
|
||||
input.valid {
|
||||
border-color: green;
|
||||
}
|
||||
|
||||
.container-fluid {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
.navbar-default {
|
||||
background-color: #fff;
|
||||
border-color: #fff;
|
||||
}
|
||||
|
||||
.navbar-collapse {
|
||||
margin-left: 0;
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
.lgbMenu {
|
||||
float: left;
|
||||
padding-top: 4px;
|
||||
padding-left: 6px;
|
||||
}
|
||||
|
||||
.lgbBreadcrumb {
|
||||
position: absolute;
|
||||
top: 56px;
|
||||
left: 15px;
|
||||
right: 15px;
|
||||
border-color: #ddd;
|
||||
border-width: 1px 0 0 0;
|
||||
border-style: solid;
|
||||
}
|
||||
|
||||
.lgbBreadcrumb > ul {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.lgbBreadcrumb > ul > li.active {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.lgbBreadcrumb > ul > li.load {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.lgbBreadcrumb > ul > li > a > i {
|
||||
padding-right: 6px;
|
||||
}
|
|
@ -0,0 +1,277 @@
|
|||
.fa-icons > section {
|
||||
padding-top: 1px;
|
||||
}
|
||||
|
||||
.page-header {
|
||||
margin-top: 16px;
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
|
||||
.fa-target {
|
||||
height: 16px;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.fa-nav {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.fa-nav h2 {
|
||||
background: #FF6C60;
|
||||
color: #fff;
|
||||
margin-top: 0;
|
||||
padding: 10px 15px;
|
||||
font-size: 16px;
|
||||
border-radius: 4px;
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
.fa-nav ul {
|
||||
top: 44px;
|
||||
bottom: 0;
|
||||
position: absolute;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.fa-nav ul li {
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
|
||||
.fa-nav ul li.active a {
|
||||
color: #7a7a7a;
|
||||
border-left: 4px solid #5bc0de;
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
.fa-nav ul li a {
|
||||
color: #999797;
|
||||
border-left: 4px solid #d3d7dd;
|
||||
padding-left: 10px;
|
||||
padding-top: 3px;
|
||||
padding-bottom: 3px;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.fa-nav ul li a:hover {
|
||||
color: #999797;
|
||||
border-left: 4px solid #d9534f;
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
.form-group .input-group .input-group-btn .btn i {
|
||||
color: #187c9a;
|
||||
width: 22px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.form-group .input-group .input-group-btn .btn i.fa-remove {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.icon-content {
|
||||
position: fixed;
|
||||
top: 15px;
|
||||
left: 15px;
|
||||
bottom: 15px;
|
||||
right: 15px;
|
||||
z-index: 1051;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.icon-content .fa-nav {
|
||||
right: 46px;
|
||||
top: 86px;
|
||||
bottom: 100px;
|
||||
}
|
||||
|
||||
.icon-content .modal-body {
|
||||
position: fixed;
|
||||
left: 18px;
|
||||
right: 16px;
|
||||
top: 62px;
|
||||
bottom: 80px;
|
||||
overflow: auto;
|
||||
max-height: inherit;
|
||||
height: inherit;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
}
|
||||
|
||||
.icon-content .modal-body .loadIconView {
|
||||
text-align: center;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.icon-content .modal-body .loadIconView span {
|
||||
margin-left: 6px;
|
||||
}
|
||||
|
||||
.icon-content .modal-footer {
|
||||
position: fixed;
|
||||
left: 16px;
|
||||
right: 16px;
|
||||
bottom: 15px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.icon-content .modal-footer span {
|
||||
vertical-align: middle;
|
||||
font-size: 14px;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.icon-content .modal-footer i {
|
||||
vertical-align: middle;
|
||||
font-size: 22px;
|
||||
margin: 0 4px 0 8px;
|
||||
text-align: center;
|
||||
color: #337ab7;
|
||||
display: inline-block;
|
||||
border: solid 1px;
|
||||
padding: 3px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.fontawesome-icon-list .fa-hover a {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
line-height: 32px;
|
||||
padding-left: 10px;
|
||||
display: block;
|
||||
color: #222;
|
||||
height: 32px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.fontawesome-icon-list .fa-hover a:hover {
|
||||
background-color: #1d9d74;
|
||||
color: #fff;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.fontawesome-icon-list .fa-hover a .fa {
|
||||
width: 32px;
|
||||
font-size: 14px;
|
||||
display: inline-block;
|
||||
text-align: right;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.fontawesome-icon-list .fa-hover a:hover .fa {
|
||||
font-size: 28px;
|
||||
vertical-align: -6px;
|
||||
}
|
||||
|
||||
.fontawesome-icon-list ul {
|
||||
display: block;
|
||||
margin-left: -28px;
|
||||
}
|
||||
|
||||
.fontawesome-icon-list ul li {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
line-height: 32px;
|
||||
padding-left: 10px;
|
||||
list-style: none;
|
||||
float: left;
|
||||
padding-right: 15px;
|
||||
padding-top: 2px;
|
||||
padding-bottom: 4px;
|
||||
height: 32px;
|
||||
vertical-align: middle;
|
||||
color: #222;
|
||||
}
|
||||
|
||||
.fontawesome-icon-list ul li:hover {
|
||||
background-color: #1d9d74;
|
||||
color: #fff;
|
||||
text-decoration: none;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.fontawesome-icon-list ul li:hover span:nth-child(1) {
|
||||
font-size: 28px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.fontawesome-icon-list ul li span:nth-child(1) {
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.menu-content {
|
||||
display: none;
|
||||
z-index: 1051;
|
||||
}
|
||||
|
||||
.menu-content .modal-body {
|
||||
overflow-y: auto;
|
||||
max-height: 180px;
|
||||
padding-bottom: 15px;
|
||||
}
|
||||
|
||||
.menu-content .dd {
|
||||
max-width: inherit;
|
||||
}
|
||||
|
||||
.icon-content .modal-footer span {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@media (min-width: 375px) {
|
||||
.icon-content .modal-footer span {
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.fa-nav {
|
||||
display: block;
|
||||
position: fixed;
|
||||
top: 130px;
|
||||
right: 32px;
|
||||
width: 140px;
|
||||
bottom: 70px;
|
||||
}
|
||||
|
||||
.fa-icons {
|
||||
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;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,401 @@
|
|||
/*!
|
||||
* bootstrap-fileinput v4.3.6
|
||||
* http://plugins.krajee.com/file-input
|
||||
*
|
||||
* Author: Kartik Visweswaran
|
||||
* Copyright: 2014 - 2016, Kartik Visweswaran, Krajee.com
|
||||
*
|
||||
* Licensed under the BSD 3-Clause
|
||||
* https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md
|
||||
*/
|
||||
.file-loading {
|
||||
top: 0;
|
||||
right: 0;
|
||||
width: 25px;
|
||||
height: 25px;
|
||||
font-size: 999px;
|
||||
text-align: right;
|
||||
color: #fff;
|
||||
background: transparent url('images/loading.gif') top left no-repeat;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.file-object {
|
||||
margin: 0 0 -5px 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.btn-file {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.btn-file input[type=file] {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
min-width: 100%;
|
||||
min-height: 100%;
|
||||
text-align: right;
|
||||
opacity: 0;
|
||||
background: none repeat scroll 0 0 transparent;
|
||||
cursor: inherit;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.file-caption-name {
|
||||
display: inline-block;
|
||||
overflow: hidden;
|
||||
height: 20px;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.input-group-lg .file-caption-name {
|
||||
height: 25px;
|
||||
}
|
||||
|
||||
.file-zoom-dialog {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.file-error-message {
|
||||
color: #a94442;
|
||||
background-color: #f2dede;
|
||||
margin: 5px;
|
||||
border: 1px solid #ebccd1;
|
||||
border-radius: 4px;
|
||||
padding: 15px;
|
||||
}
|
||||
|
||||
.file-error-message pre, .file-error-message ul {
|
||||
margin: 0;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.file-error-message pre {
|
||||
margin: 5px 0;
|
||||
}
|
||||
|
||||
.file-caption-disabled {
|
||||
background-color: #EEEEEE;
|
||||
cursor: not-allowed;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.file-preview {
|
||||
border-radius: 5px;
|
||||
border: 1px solid #ddd;
|
||||
padding: 5px;
|
||||
width: 100%;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.file-preview-frame {
|
||||
position: relative;
|
||||
display: table;
|
||||
margin: 8px;
|
||||
height: 160px;
|
||||
border: 1px solid #ddd;
|
||||
box-shadow: 1px 1px 5px 0 #a2958a;
|
||||
padding: 6px;
|
||||
float: left;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.file-preview-frame:not(.file-preview-error):hover {
|
||||
box-shadow: 3px 3px 5px 0 #333;
|
||||
}
|
||||
|
||||
.file-preview-image {
|
||||
vertical-align: middle;
|
||||
image-orientation: from-image;
|
||||
}
|
||||
|
||||
.file-preview-text {
|
||||
display: block;
|
||||
color: #428bca;
|
||||
border: 1px solid #ddd;
|
||||
font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
|
||||
outline: none;
|
||||
padding: 8px;
|
||||
resize: none;
|
||||
}
|
||||
|
||||
.file-preview-html {
|
||||
border: 1px solid #ddd;
|
||||
padding: 8px;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.file-zoom-dialog .file-preview-text {
|
||||
font-size: 1.2em;
|
||||
}
|
||||
|
||||
.file-preview-other {
|
||||
left: 0;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
margin: auto;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.file-preview-other:hover {
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
.file-actions, .file-other-error {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.file-other-icon {
|
||||
font-size: 4.8em;
|
||||
}
|
||||
|
||||
/* noinspection CssOverwrittenProperties */
|
||||
.file-zoom-dialog .file-other-icon {
|
||||
font-size: 8em;
|
||||
font-size: 55vmin;
|
||||
}
|
||||
|
||||
.file-input-new .file-preview, .file-input-new .close, .file-input-new .glyphicon-file,
|
||||
.file-input-new .fileinput-remove-button, .file-input-new .fileinput-upload-button,
|
||||
.file-input-ajax-new .fileinput-remove-button, .file-input-ajax-new .fileinput-upload-button {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.file-caption-main {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.file-input-ajax-new .no-browse .input-group-btn,
|
||||
.file-input-new .no-browse .input-group-btn {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.file-input-ajax-new .no-browse .form-control,
|
||||
.file-input-new .no-browse .form-control {
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-right-radius: 4px;
|
||||
}
|
||||
|
||||
.file-thumb-loading {
|
||||
background: transparent url('images/loading.gif') no-repeat scroll center center content-box !important;
|
||||
}
|
||||
|
||||
.file-actions {
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
.file-footer-buttons {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.file-upload-indicator {
|
||||
display: inline;
|
||||
cursor: default;
|
||||
opacity: 0.8;
|
||||
width: 60%;
|
||||
}
|
||||
|
||||
.file-upload-indicator:hover {
|
||||
font-weight: bold;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.file-footer-caption {
|
||||
display: block;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
width: 160px;
|
||||
text-align: center;
|
||||
padding-top: 4px;
|
||||
font-size: 11px;
|
||||
color: #777;
|
||||
margin: 5px auto;
|
||||
}
|
||||
|
||||
.file-preview-error {
|
||||
opacity: 0.65;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.file-preview-frame:not(.file-preview-error) .file-footer-caption:hover {
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.file-drop-zone {
|
||||
border: 1px dashed #aaa;
|
||||
border-radius: 4px;
|
||||
height: 100%;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
margin: 12px 15px 12px 12px;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.file-drop-zone-title {
|
||||
color: #aaa;
|
||||
font-size: 1.6em;
|
||||
padding: 85px 10px;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.file-preview .clickable,
|
||||
.clickable .file-drop-zone-title {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.file-drop-zone.clickable:hover {
|
||||
border: 2px dashed #999;
|
||||
}
|
||||
|
||||
.file-drop-zone.clickable:focus {
|
||||
border: 2px solid #5acde2;
|
||||
}
|
||||
|
||||
.file-drop-zone .file-preview-thumbnails {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.file-highlighted {
|
||||
border: 2px dashed #999 !important;
|
||||
background-color: #f0f0f0;
|
||||
}
|
||||
|
||||
.file-uploading {
|
||||
background: url('../images/loading-sm.gif') no-repeat center bottom 10px;
|
||||
opacity: 0.65;
|
||||
}
|
||||
|
||||
.file-thumb-progress {
|
||||
height: 10px;
|
||||
}
|
||||
|
||||
.file-thumb-progress .progress, .file-thumb-progress .progress-bar {
|
||||
height: 10px;
|
||||
font-size: 9px;
|
||||
line-height: 10px;
|
||||
}
|
||||
|
||||
.file-thumbnail-footer {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.file-thumb-progress {
|
||||
position: absolute;
|
||||
top: 35px;
|
||||
left: 0;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.file-zoom-fullscreen.modal {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.file-zoom-fullscreen .modal-dialog {
|
||||
position: fixed;
|
||||
margin: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.file-zoom-fullscreen .modal-content {
|
||||
border-radius: 0;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.file-zoom-fullscreen .modal-body {
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.file-zoom-dialog .modal-body {
|
||||
position: relative !important;
|
||||
}
|
||||
|
||||
.file-zoom-dialog .btn-navigate {
|
||||
position: absolute;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
background: transparent;
|
||||
text-decoration: none;
|
||||
outline: none;
|
||||
opacity: 0.7;
|
||||
top: 45%;
|
||||
font-size: 4em;
|
||||
color: #1c94c4;
|
||||
}
|
||||
|
||||
.file-zoom-dialog .floating-buttons {
|
||||
position: absolute;
|
||||
top: 5px;
|
||||
right: 10px;
|
||||
}
|
||||
|
||||
.floating-buttons, .floating-buttons .btn {
|
||||
z-index: 3000;
|
||||
}
|
||||
|
||||
.file-zoom-dialog .kv-zoom-actions .btn,
|
||||
.floating-buttons .btn {
|
||||
margin-left: 3px;
|
||||
}
|
||||
|
||||
.file-zoom-dialog .btn-navigate:not([disabled]):hover,
|
||||
.file-zoom-dialog .btn-navigate:not([disabled]):focus {
|
||||
outline: none;
|
||||
box-shadow: none;
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.file-zoom-dialog .btn-navigate[disabled] {
|
||||
opacity: 0.3;
|
||||
}
|
||||
|
||||
.file-zoom-dialog .btn-prev {
|
||||
left: 1px;
|
||||
}
|
||||
|
||||
.file-zoom-dialog .btn-next {
|
||||
right: 1px;
|
||||
}
|
||||
|
||||
.file-drag-handle {
|
||||
display: inline;
|
||||
margin-right: 2px;
|
||||
font-size: 16px;
|
||||
cursor: move;
|
||||
cursor: -webkit-grabbing;
|
||||
}
|
||||
|
||||
.file-drag-handle:hover {
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
.file-zoom-content {
|
||||
height: 480px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.file-preview-initial.sortable-chosen {
|
||||
background-color: #d9edf7;
|
||||
}
|
||||
|
||||
.file-preview-frame.sortable-ghost {
|
||||
background-color: #eee;
|
||||
}
|
||||
|
||||
/* IE 10 fix */
|
||||
.btn-file ::-ms-browse {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="zh-cn">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>注册成功</title>
|
||||
<link rel="shortcut icon" href="../../favicon.ico" />
|
||||
<!-- 新 Bootstrap 核心 CSS 文件 -->
|
||||
<link href="../css/bootstrap.css" rel="stylesheet">
|
||||
<link href="../css/bootstrap-theme.css" rel="stylesheet">
|
||||
<style type="text/css">
|
||||
body {
|
||||
background: #02bac6 url("images/lock-bg.jpg");
|
||||
background-size: cover;
|
||||
background-repeat: repeat;
|
||||
}
|
||||
|
||||
.container {
|
||||
margin-top: 30px;
|
||||
}
|
||||
|
||||
h2 {
|
||||
margin: 15px auto;
|
||||
color: green;
|
||||
}
|
||||
|
||||
div a {
|
||||
display: block;
|
||||
margin-top: 15px;
|
||||
color: green;
|
||||
text-decoration: none;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container" align="center">
|
||||
<h2>注册成功</h2>
|
||||
<div>
|
||||
<div>
|
||||
你需要等待管理员的审核
|
||||
</div>
|
||||
<div>
|
||||
才能开启账号,请耐心等待
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<a href="../../Home/Login">返回登陆页</a>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,39 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="zh-cn">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>接口文档</title>
|
||||
<!-- 新 Bootstrap 核心 CSS 文件 -->
|
||||
<link href="../bootstrap.css" rel="stylesheet">
|
||||
<link href="../bootstrap-theme.css" rel="stylesheet">
|
||||
<link href="../api.css" rel="stylesheet">
|
||||
<!--[if lte IE 9 ]>
|
||||
<link href="../IE8.css" rel="stylesheet" />
|
||||
<![endif]-->
|
||||
</head>
|
||||
<body id="main-content" class="main-content">
|
||||
<!--[if lte IE 9 ]>
|
||||
<div id="ieAlert" class="alert alert-danger alert-dismissible">
|
||||
<div>你的浏览器版本太低,不能完美的支持本系统,请升级到至少IE9 <a href="../IE/IE9.exe" target="_blank">速速点击下载</a> !</div>
|
||||
<button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">×</span><span class="sr-only">关闭</span></button>
|
||||
</div>
|
||||
<![endif]-->
|
||||
<section>
|
||||
<div><h3>接口返回值定义</h3></div>
|
||||
<div><label class="control-label">布尔值:</label><div>成功返回True,失败返回False</div></div>
|
||||
<div><label class="control-label">对象:</label><div>Json字符串</div></div>
|
||||
</section>
|
||||
<section>
|
||||
<div><h3>接口请求定义</h3></div>
|
||||
<div><label class="control-label">内容类型</label><div>Content-Type:application/json; charset=utf-8</div></div>
|
||||
<div><label class="control-label">授权Token</label><div>Token:362a4733-341a-464d-ab12-e01554338839</div></div>
|
||||
</section>
|
||||
<!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->
|
||||
<script src="../../Scripts/jquery-3.1.1.js"></script>
|
||||
<!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
|
||||
<script src="../../Scripts/bootstrap.js"></script>
|
||||
<script src="../../Scripts/apidoc.js"></script>
|
||||
</body>
|
||||
</html>
|
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 106 KiB |
After Width: | Height: | Size: 27 KiB |
After Width: | Height: | Size: 45 KiB |
After Width: | Height: | Size: 385 KiB |
After Width: | Height: | Size: 288 B |
After Width: | Height: | Size: 60 KiB |
Before Width: | Height: | Size: 8.6 KiB |
Before Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 2.6 KiB |
After Width: | Height: | Size: 847 B |
After Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 288 B |
After Width: | Height: | Size: 7.3 KiB |
After Width: | Height: | Size: 7.0 KiB |
|
@ -0,0 +1 @@
|
|||
请不要删除此目录
|
|
@ -0,0 +1,258 @@
|
|||
/**
|
||||
* Nestable
|
||||
*/
|
||||
|
||||
.dd {
|
||||
position: relative;
|
||||
display: block;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
max-width: 600px;
|
||||
list-style: none;
|
||||
font-size: 13px;
|
||||
line-height: 20px;
|
||||
}
|
||||
|
||||
.dd-list {
|
||||
display: block;
|
||||
position: relative;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.dd-list .dd-list {
|
||||
padding-left: 30px;
|
||||
}
|
||||
|
||||
.dd-collapsed .dd-list {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.dd-item,
|
||||
.dd-empty,
|
||||
.dd-placeholder {
|
||||
display: block;
|
||||
position: relative;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
min-height: 20px;
|
||||
font-size: 13px;
|
||||
line-height: 20px;
|
||||
}
|
||||
|
||||
.dd-handle {
|
||||
display: block;
|
||||
height: 30px;
|
||||
margin: 5px 0;
|
||||
padding: 5px 10px;
|
||||
cursor: move;
|
||||
color: #333;
|
||||
text-decoration: none;
|
||||
font-weight: bold;
|
||||
border: 1px solid #ccc;
|
||||
background: #F5F5F5;
|
||||
background: -webkit-linear-gradient(top, #fafafa 0%, #eee 100%);
|
||||
background: -moz-linear-gradient(top, #fafafa 0%, #eee 100%);
|
||||
background: linear-gradient(top, #fafafa 0%, #eee 100%);
|
||||
border-radius: 3px;
|
||||
box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
}
|
||||
|
||||
.dd-handle:hover {
|
||||
color: #2ea8e5;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.dd-item > button {
|
||||
display: block;
|
||||
position: relative;
|
||||
cursor: pointer;
|
||||
float: left;
|
||||
width: 25px;
|
||||
height: 20px;
|
||||
margin: 5px 0;
|
||||
padding: 0;
|
||||
text-indent: 100%;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
border: 0;
|
||||
background: transparent;
|
||||
font-size: 12px;
|
||||
line-height: 1;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.dd-item > button:before {
|
||||
content: '+';
|
||||
display: block;
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
text-indent: 0;
|
||||
}
|
||||
|
||||
.dd-item > button[data-action="collapse"]:before {
|
||||
content: '-';
|
||||
}
|
||||
|
||||
.dd-placeholder,
|
||||
.dd-empty {
|
||||
margin: 5px 0;
|
||||
padding: 0;
|
||||
min-height: 30px;
|
||||
background: #f2fbff;
|
||||
border: 1px dashed #b6bcbf;
|
||||
box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
}
|
||||
|
||||
.dd-empty {
|
||||
border: 1px dashed #bbb;
|
||||
min-height: 100px;
|
||||
background-color: #e5e5e5;
|
||||
background-image: -webkit-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff), -webkit-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff);
|
||||
background-image: -moz-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff), -moz-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff);
|
||||
background-image: linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff), linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff);
|
||||
background-size: 60px 60px;
|
||||
background-position: 0 0, 30px 30px;
|
||||
}
|
||||
|
||||
.dd-dragel {
|
||||
position: absolute;
|
||||
pointer-events: none;
|
||||
z-index: 9999;
|
||||
}
|
||||
|
||||
.dd-dragel > .dd-item .dd-handle {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.dd-dragel .dd-handle {
|
||||
-webkit-box-shadow: 2px 4px 6px 0 rgba(0,0,0,.1);
|
||||
box-shadow: 2px 4px 6px 0 rgba(0,0,0,.1);
|
||||
}
|
||||
|
||||
|
||||
.dd3-content {
|
||||
display: block;
|
||||
height: 30px;
|
||||
margin: 5px 0;
|
||||
padding: 5px 10px 5px 40px;
|
||||
color: #333;
|
||||
text-decoration: none;
|
||||
font-weight: bold;
|
||||
border: 1px solid #ccc;
|
||||
background: #F5F5F5;
|
||||
background: -webkit-linear-gradient(top, #fafafa 0%, #eee 100%);
|
||||
background: -moz-linear-gradient(top, #fafafa 0%, #eee 100%);
|
||||
background: linear-gradient(top, #fafafa 0%, #eee 100%);
|
||||
box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
border-radius: 3px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.dd3-content:hover {
|
||||
color: #2ea8e5;
|
||||
background: #d5d5d5;
|
||||
}
|
||||
|
||||
.dd3-content label {
|
||||
display: block;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.dd3-content label span {
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.dd3-content label span.active {
|
||||
color: darkred;
|
||||
}
|
||||
|
||||
.dd3-content label span i {
|
||||
width: 22px;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.dd3-content label input {
|
||||
margin-right: 10px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.dd3-content > span {
|
||||
position: absolute;
|
||||
top: 6px;
|
||||
}
|
||||
|
||||
.dd3-content .menuOrder {
|
||||
right: 15px;
|
||||
}
|
||||
|
||||
.dd3-content .menuType {
|
||||
right: 45px;
|
||||
}
|
||||
|
||||
@media (max-width: 480px) {
|
||||
.dd3-content .menuType {
|
||||
display: none;
|
||||
}
|
||||
|
||||
li[data-category="1"] .dd3-content .menuOrder {
|
||||
color: green;
|
||||
}
|
||||
}
|
||||
|
||||
li[data-category="1"] .dd3-content .menuType {
|
||||
color: green;
|
||||
}
|
||||
|
||||
.dd-dragel > .dd3-item > .dd3-content {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.dd3-item > button {
|
||||
margin-left: 30px;
|
||||
}
|
||||
|
||||
.dd3-handle {
|
||||
position: absolute;
|
||||
margin: 0;
|
||||
left: 0;
|
||||
top: 0;
|
||||
cursor: pointer;
|
||||
width: 30px;
|
||||
text-indent: 100%;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
border: 1px solid #ccc;
|
||||
background: #d5d5d5;
|
||||
background: -webkit-linear-gradient(top, #ddd 0%, #bbb 100%);
|
||||
background: -moz-linear-gradient(top, #ddd 0%, #bbb 100%);
|
||||
background: linear-gradient(top, #ddd 0%, #bbb 100%);
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
}
|
||||
|
||||
.dd3-handle:before {
|
||||
content: '≡';
|
||||
display: block;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 3px;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
text-indent: 0;
|
||||
color: #fff;
|
||||
font-size: 20px;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.dd3-handle:hover {
|
||||
/*background: #404040;*/
|
||||
background: #5cb85c;
|
||||
border: 1px solid #404040;
|
||||
}
|
|
@ -1,105 +0,0 @@
|
|||
/// <reference path="jquery-1.10.2.js" />
|
||||
|
||||
(function ($) {
|
||||
// 增加Array扩展
|
||||
if (!$.isFunction(Array.prototype.filter)) {
|
||||
Array.prototype.filter = function (callback, thisObject) {
|
||||
if ($.isFunction(callback)) {
|
||||
var res = new Array();
|
||||
for (var i = 0; i < this.length; i++) {
|
||||
callback.call(thisObject, this[i], i, this) && res.push(this[i]);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
// 增加String扩展
|
||||
if (!$.isFunction(String.prototype.trim)) {
|
||||
String.prototype.trim = function () {
|
||||
if (this == null) return "";
|
||||
var trimLeft = /^\s+/, trimRight = /\s+$/;
|
||||
return this.replace(trimLeft, "").replace(trimRight, "");
|
||||
};
|
||||
}
|
||||
|
||||
// 扩展Date
|
||||
if (!$.isFunction(Date.prototype.format)) {
|
||||
Date.prototype.format = function (format) {
|
||||
var o = {
|
||||
"M+": this.getMonth() + 1,
|
||||
"d+": this.getDate(),
|
||||
"h+": this.getHours() % 12 == 0 ? 12 : this.getHours() % 12,
|
||||
"H+": this.getHours(),
|
||||
"m+": this.getMinutes(),
|
||||
"s+": this.getSeconds(),
|
||||
"q+": Math.floor((this.getMonth() + 3) / 3),
|
||||
"S": this.getMilliseconds()
|
||||
};
|
||||
var week = {
|
||||
0: "日",
|
||||
1: "一",
|
||||
2: "二",
|
||||
3: "三",
|
||||
4: "四",
|
||||
5: "五",
|
||||
6: "六"
|
||||
};
|
||||
|
||||
if (/(y+)/.test(format))
|
||||
format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
|
||||
|
||||
if (/(E+)/.test(format))
|
||||
format = format.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? "星期" : "周") : "") + week[this.getDay()]);
|
||||
|
||||
for (var k in o)
|
||||
if (new RegExp("(" + k + ")").test(format))
|
||||
format = format.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
|
||||
return format;
|
||||
};
|
||||
}
|
||||
|
||||
// 扩展format
|
||||
$.extend({
|
||||
"format": function (source, params) {
|
||||
if (params === undefined) {
|
||||
return source;
|
||||
}
|
||||
if (arguments.length > 2 && params.constructor !== Array) {
|
||||
params = $.makeArray(arguments).slice(1);
|
||||
}
|
||||
if (params.constructor !== Array) {
|
||||
params = [params];
|
||||
}
|
||||
$.each(params, function (i, n) {
|
||||
source = source.replace(new RegExp("\\{" + i + "\\}", "g"), function () {
|
||||
return n;
|
||||
});
|
||||
});
|
||||
return source;
|
||||
}
|
||||
});
|
||||
|
||||
$.fn.extend({
|
||||
"autoCenter": function () {
|
||||
var that = this;
|
||||
var getHeight = function () {
|
||||
return ($(window).height() - $(that).outerHeight()) / 2 + $(document).scrollTop();
|
||||
}
|
||||
$(window).resize(function () {
|
||||
$(that).css({
|
||||
marginTop: getHeight()
|
||||
});
|
||||
});
|
||||
that.animate({ marginTop: "+=" + getHeight() });
|
||||
}
|
||||
});
|
||||
})(jQuery);
|
||||
|
||||
$(function () {
|
||||
if ($.isFunction($.validator)) {
|
||||
jQuery.validator.addMethod("ip", function (value, element) {
|
||||
return this.optional(element) || /^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$/.test(value);
|
||||
}, "请填写正确的IP地址");
|
||||
}
|
||||
});
|
|
@ -1,80 +0,0 @@
|
|||
/*---LEFT BAR ACCORDION----*/
|
||||
$(function () {
|
||||
$('#nav-accordion').dcAccordion({
|
||||
eventType: 'click',
|
||||
autoClose: true,
|
||||
saveState: true,
|
||||
disableLink: true,
|
||||
speed: 'slow',
|
||||
showCount: false,
|
||||
autoExpand: true,
|
||||
// cookie: 'dcjq-accordion-1',
|
||||
classExpand: 'dcjq-current-parent'
|
||||
});
|
||||
//$.slidebars();
|
||||
|
||||
// sidebar toggle
|
||||
function responsiveView() {
|
||||
var wSize = $(window).width();
|
||||
if (wSize <= 768) {
|
||||
$('#container').addClass('sidebar-close');
|
||||
$('#sidebar > ul').hide();
|
||||
}
|
||||
|
||||
if (wSize > 768) {
|
||||
$('#container').removeClass('sidebar-close');
|
||||
$('#sidebar > ul').show();
|
||||
}
|
||||
}
|
||||
$(window).on('load', responsiveView);
|
||||
$(window).on('resize', responsiveView);
|
||||
});
|
||||
|
||||
(function ($) {
|
||||
|
||||
// sidebar dropdown menu auto scrolling
|
||||
$('#sidebar .sub-menu > a').click(function () {
|
||||
var o = ($(this).offset());
|
||||
diff = 300 - o.top;
|
||||
if (diff > 0)
|
||||
$("#sidebar").scrollTo("-=" + Math.abs(diff), 500);
|
||||
else
|
||||
$("#sidebar").scrollTo("+=" + Math.abs(diff), 500);
|
||||
});
|
||||
|
||||
$('.fa-bars').click(function () {
|
||||
|
||||
if ($('#sidebar > ul').is(":visible") === true) {
|
||||
$('#main-content').css({
|
||||
'margin-left': '0px'
|
||||
});
|
||||
$('#sidebar').css({
|
||||
'margin-left': '-210px'
|
||||
});
|
||||
$('#sidebar > ul').hide();
|
||||
$("#container").addClass("sidebar-closed");
|
||||
} else {
|
||||
$('#main-content').css({
|
||||
'margin-left': '210px'
|
||||
});
|
||||
$('#sidebar > ul').show();
|
||||
$('#sidebar').css({
|
||||
'margin-left': '0'
|
||||
});
|
||||
$("#container").removeClass("sidebar-closed");
|
||||
}
|
||||
});
|
||||
|
||||
// custom scrollbar
|
||||
$("#sidebar").niceScroll({ styler: "fb", cursorcolor: "#e8403f", cursorwidth: '3', cursorborderradius: '10px', background: '#404040', spacebarenabled: false, cursorborder: '', scrollspeed: 60 });
|
||||
|
||||
//$("html").niceScroll({styler:"fb",cursorcolor:"#e8403f", cursorwidth: '6', cursorborderradius: '10px', background: '#404040', spacebarenabled:false, cursorborder: '', zindex: '1000', scrollspeed: 100, mousescrollstep: 60});
|
||||
|
||||
$(".table-responsive").niceScroll({ styler: "fb", cursorcolor: "#e8403f", cursorwidth: '6', cursorborderradius: '10px', background: '#404040', spacebarenabled: false, cursorborder: '', zindex: '1000', horizrailenabled: true });
|
||||
|
||||
// tool tips
|
||||
$('.tooltips').tooltip();
|
||||
|
||||
// popovers
|
||||
$('.popovers').popover();
|
||||
})(jQuery);
|
|
@ -1,153 +0,0 @@
|
|||
(function ($) {
|
||||
ExtenderChecker = function (options) {
|
||||
var that = this;
|
||||
this.options = $.extend({}, ExtenderChecker.settings, options);
|
||||
|
||||
this.dataEntity = options.dataEntity;
|
||||
if (!(this.dataEntity instanceof DataEntity) && window.console) {
|
||||
window.console.log('初始化参数中没有DataEntity实例');
|
||||
}
|
||||
|
||||
// handler click event
|
||||
for (name in this.options.click) {
|
||||
var source = $("#" + this.options.click[name]);
|
||||
source.data('click', name);
|
||||
$("#" + this.options.click[name]).click(function () {
|
||||
var method = $(this).data('click');
|
||||
ExtenderChecker.prototype[method].apply(that);
|
||||
});
|
||||
}
|
||||
|
||||
// handler modal window show event
|
||||
if (this.options.modal.constructor === String) {
|
||||
$('#' + this.options.modal).on('show.bs.modal', function (e) {
|
||||
if (that.options.validateForm.constructor === String) {
|
||||
var v = $('#' + that.options.validateForm).validate();
|
||||
v.currentElements.each(function () { $(this).popover('destroy'); })
|
||||
v.resetForm();
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
ExtenderChecker.VERSION = "1.0";
|
||||
ExtenderChecker.Author = "Argo Zhang";
|
||||
ExtenderChecker.Email = "argo@163.com";
|
||||
|
||||
ExtenderChecker.settings = {
|
||||
url: undefined,
|
||||
bootstrapTable: 'table',
|
||||
validateForm: 'dataForm',
|
||||
modal: 'dialogNew',
|
||||
click: {}
|
||||
}
|
||||
|
||||
ExtenderChecker.idFormatter = function (value, row, index) {
|
||||
return "<a class='edit' href='javascript:void(0)'>" + value + "</a>";
|
||||
};
|
||||
|
||||
ExtenderChecker.prototype = {
|
||||
constructor: ExtenderChecker,
|
||||
|
||||
query: function () {
|
||||
if (this.options.bootstrapTable.constructor === String) $(this.options.bootstrapTable).bootstrapTable('refresh');
|
||||
},
|
||||
|
||||
create: function () {
|
||||
this.dataEntity.reset();
|
||||
if (this.options.modal.constructor === String) $('#' + this.options.modal).modal("show");
|
||||
if (this.options.bootstrapTable.constructor === String) $(this.options.bootstrapTable).bootstrapTable('uncheckAll');
|
||||
},
|
||||
|
||||
edit: function () {
|
||||
options = this.options;
|
||||
if (options.bootstrapTable.constructor !== String) return;
|
||||
var arrselections = $(options.bootstrapTable).bootstrapTable('getSelections');
|
||||
if (arrselections.length == 0) {
|
||||
swal('请选择要编辑的条目', "编辑操作", "warning");
|
||||
}
|
||||
else if (arrselections.length > 1) {
|
||||
swal('请选择一个要编辑的条目', "编辑操作", "warning");
|
||||
}
|
||||
else {
|
||||
this.dataEntity.load(arrselections[0]);
|
||||
if (options.modal.constructor === String) $('#' + options.modal).modal("show");
|
||||
}
|
||||
},
|
||||
|
||||
del: function () {
|
||||
var options = this.options;
|
||||
if (options.bootstrapTable.constructor !== String) return;
|
||||
var arrselections = $(options.bootstrapTable).bootstrapTable('getSelections');
|
||||
if (arrselections.length == 0) {
|
||||
swal('请选择要删除的条目', "删除操作", "warning");
|
||||
return;
|
||||
}
|
||||
else {
|
||||
swal({
|
||||
title: "您确定要删除吗?",
|
||||
text: "删除操作",
|
||||
type: "warning",
|
||||
showCancelButton: true,
|
||||
closeOnConfirm: true,
|
||||
confirmButtonText: "是的,我要删除",
|
||||
confirmButtonColor: "#d9534f",
|
||||
cancelButtonText: "取消"
|
||||
}, function () {
|
||||
var iDs = arrselections.map(function (element, index) { return element.ID }).join(",");
|
||||
$.ajax({
|
||||
url: options.url,
|
||||
data: { "": iDs },
|
||||
type: 'DELETE',
|
||||
success: function (result) {
|
||||
if (result) setTimeout(function () { swal("成功!", "删除数据", "success"); $(options.bootstrapTable).bootstrapTable('refresh'); }, 100);
|
||||
else setTimeout(function () { swal("失败", "删除数据", "error"); }, 200);
|
||||
},
|
||||
error: function (XMLHttpRequest, textStatus, errorThrown) {
|
||||
swal("失败", "删除数据", "error");
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
save: function () {
|
||||
var options = $.extend({}, this.options, { data: this.dataEntity.get() });
|
||||
if (options.validateForm.constructor === String && !$("#" + options.validateForm).valid()) return;
|
||||
$.ajax({
|
||||
url: options.url,
|
||||
data: options.data,
|
||||
type: 'POST',
|
||||
success: function (result) {
|
||||
if (result) {
|
||||
if ($.isFunction(options.success)) options.success(options.data);
|
||||
if (options.bootstrapTable.constructor === String && options.data.ID.constructor === String) {
|
||||
// 更新表格
|
||||
if (options.data.ID > 0) {
|
||||
var allTableData = $(options.bootstrapTable).bootstrapTable('getData');
|
||||
for (index = 0; index < allTableData.length; index++) {
|
||||
var temp = allTableData[index];
|
||||
if (temp.ID == options.data.ID) {
|
||||
$(options.bootstrapTable).bootstrapTable('updateRow', { index: index, row: $.extend(temp, options.data) });
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
$(options.bootstrapTable).bootstrapTable('refresh');
|
||||
}
|
||||
}
|
||||
if (options.modal.constructor === String) $('#' + options.modal).modal("hide");
|
||||
swal("成功", "保存数据", "success");
|
||||
}
|
||||
else {
|
||||
swal("失败", "保存数据", "error");
|
||||
}
|
||||
},
|
||||
error: function (XMLHttpRequest, textStatus, errorThrown) {
|
||||
swal("失败", "保存数据失败", "error");
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
})(jQuery);
|
|
@ -1,29 +0,0 @@
|
|||
(function ($) {
|
||||
DataEntity = function (options) {
|
||||
this.options = $.extend({ map: {} }, options);
|
||||
};
|
||||
|
||||
DataEntity.VERSION = "1.0";
|
||||
DataEntity.Author = "Argo Zhang";
|
||||
DataEntity.Email = "argo@163.com";
|
||||
|
||||
DataEntity.prototype = {
|
||||
load: function (value) {
|
||||
for (name in this.options.map) {
|
||||
$("#" + this.options.map[name]).val(value[name]);
|
||||
}
|
||||
},
|
||||
reset: function () {
|
||||
for (name in this.options.map) {
|
||||
$("#" + this.options.map[name]).val("");
|
||||
}
|
||||
},
|
||||
get: function () {
|
||||
var target = {};
|
||||
for (name in this.options.map) {
|
||||
target[name] = $("#" + this.options.map[name]).val();
|
||||
}
|
||||
return target;
|
||||
}
|
||||
}
|
||||
}(jQuery));
|
|
@ -0,0 +1,104 @@
|
|||
.lock-screen {
|
||||
background: #02bac6 url("images/lock-bg.jpg");
|
||||
background-size: cover;
|
||||
background-repeat: repeat;
|
||||
}
|
||||
|
||||
.lock-wrapper {
|
||||
margin: 6% auto;
|
||||
max-width: 330px;
|
||||
}
|
||||
|
||||
.lock-box {
|
||||
background: rgba(255,255,255,.3);
|
||||
padding: 20px;
|
||||
border-radius: 10px;
|
||||
-webkit-border-radius: 10px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.lock-box .form-group {
|
||||
float: inherit !important;
|
||||
}
|
||||
|
||||
.lock-wrapper img {
|
||||
border-radius: 50%;
|
||||
-webkit-border-radius: 50%;
|
||||
border: 5px solid #fff;
|
||||
width: 250px;
|
||||
height: 250px;
|
||||
}
|
||||
|
||||
.lock-wrapper h1 {
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
font-size: 18px;
|
||||
text-transform: uppercase;
|
||||
padding: 20px 0 0 0;
|
||||
}
|
||||
|
||||
.lock-wrapper .locked {
|
||||
margin-bottom: 20px;
|
||||
display: inline-block;
|
||||
color: #026f7a;
|
||||
}
|
||||
|
||||
.btn-lock, .btn-lock:hover {
|
||||
background: #02b5c2;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.lock-input {
|
||||
width: 83%;
|
||||
border: none;
|
||||
float: left;
|
||||
margin-right: 3px;
|
||||
}
|
||||
|
||||
#time {
|
||||
width: 100%;
|
||||
color: #fff;
|
||||
font-size: 60px;
|
||||
display: inline-block;
|
||||
text-align: center;
|
||||
font-family: 'Open Sans', sans-serif;
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
.btn-lock, .btn-lock:hover {
|
||||
background: #02b5c2;
|
||||
color: #fff;
|
||||
outline: none !important;
|
||||
border-color: #2e6da4;
|
||||
border-left: none;
|
||||
}
|
||||
|
||||
.has-error .btn-lock {
|
||||
color: #a94442;
|
||||
background-color: #f2dede;
|
||||
border-color: #a94442;
|
||||
}
|
||||
|
||||
.has-success .btn-lock {
|
||||
color: #3c763d;
|
||||
background-color: #dff0d8;
|
||||
border-color: #3c763d;
|
||||
}
|
||||
|
||||
div.input-group span {
|
||||
top: 0;
|
||||
background: #02b5c2;
|
||||
border-color: #2e6da4;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
div.input-group input, div.input-group input:hover, div.input-group input:focus {
|
||||
border-color: #2e6da4;
|
||||
border-left: none;
|
||||
border-right: none;
|
||||
}
|
||||
|
||||
div.input-group input.error {
|
||||
background-color: #dcc4c4;
|
||||
border-color: #e21717;
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
@media (min-width: 375px) {
|
||||
.form-signin {
|
||||
width: 320px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
body {
|
||||
background: url('images/bg2.jpg') fixed repeat;
|
||||
}
|
||||
|
||||
.container {
|
||||
background: url('images/bg3.png') no-repeat;
|
||||
background-size: contain;
|
||||
width: 704px;
|
||||
height: 404px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.form-signin {
|
||||
border: none;
|
||||
background: none;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.form-signin .form-signin-heading {
|
||||
background: none;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.form-signin .input-group {
|
||||
border: solid 1px #286090;
|
||||
}
|
||||
|
||||
.login-wrap {
|
||||
margin: 30px 0 0 370px;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,91 @@
|
|||
body {
|
||||
background: url('images/bg4.jpg') fixed repeat;
|
||||
}
|
||||
|
||||
.form-signin {
|
||||
margin: 0 auto;
|
||||
border-radius: 5px;
|
||||
border: solid 1px #1a88a9;
|
||||
background: rgba(255, 255, 255, 0.23);
|
||||
}
|
||||
|
||||
.form-signin .form-signin-heading {
|
||||
margin: 0;
|
||||
padding: 15px;
|
||||
text-align: center;
|
||||
background: rgba(0, 0, 0, 0.57);
|
||||
border-radius: 5px 5px 0 0;
|
||||
color: #fff;
|
||||
font-size: 34px;
|
||||
text-transform: uppercase;
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
.form-signin .login-wrap {
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.form-signin .login-wrap .login-footer {
|
||||
padding-bottom: 15px;
|
||||
}
|
||||
|
||||
.form-signin .login-wrap .login-footer .login-create {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.form-signin .login-wrap .login-footer .login-reset {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.form-signin .input-group {
|
||||
margin-bottom: 15px;
|
||||
border-radius: 5px;
|
||||
border: 1px solid #089dc9;
|
||||
box-shadow: none;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.form-signin .input-group > span {
|
||||
top: 0;
|
||||
background-color: #5bc0de;
|
||||
}
|
||||
|
||||
.form-signin .form-control, .form-signin .input-group span {
|
||||
border: none;
|
||||
}
|
||||
|
||||
.form-signin .has-success .input-group {
|
||||
border: solid 1px #3c763d;
|
||||
}
|
||||
|
||||
.form-signin .has-error .input-group {
|
||||
border: solid 1px #a94442;
|
||||
}
|
||||
|
||||
.form-signin .form-control, .form-signin .form-control:focus {
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.form-signin .btn-login {
|
||||
background: #f67a6e;
|
||||
color: #fff;
|
||||
text-transform: uppercase;
|
||||
font-weight: 300;
|
||||
font-family: 'Open Sans', sans-serif;
|
||||
box-shadow: 0 4px #e56b60;
|
||||
margin-bottom: 20px;
|
||||
outline: none !important;
|
||||
}
|
||||
|
||||
.form-signin .checkbox {
|
||||
padding-left: 24px;
|
||||
}
|
||||
|
||||
.form-signin .checkbox > input {
|
||||
top: -1px;
|
||||
}
|
||||
|
||||
.form-signin .checkbox > label {
|
||||
padding-left: 4px;
|
||||
color: #333;
|
||||
}
|
|
@ -0,0 +1,79 @@
|
|||
/* Make clicks pass-through */
|
||||
#nprogress {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
#nprogress .bar {
|
||||
background: #29d;
|
||||
position: fixed;
|
||||
z-index: 1031;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 2px;
|
||||
}
|
||||
|
||||
/* Fancy blur effect */
|
||||
#nprogress .peg {
|
||||
display: block;
|
||||
position: absolute;
|
||||
right: 0px;
|
||||
width: 100px;
|
||||
height: 100%;
|
||||
box-shadow: 0 0 10px #29d, 0 0 5px #29d;
|
||||
opacity: 1.0;
|
||||
-webkit-transform: rotate(3deg) translate(0px, -4px);
|
||||
-ms-transform: rotate(3deg) translate(0px, -4px);
|
||||
transform: rotate(3deg) translate(0px, -4px);
|
||||
}
|
||||
|
||||
/* Remove these to get rid of the spinner */
|
||||
#nprogress .spinner {
|
||||
display: block;
|
||||
position: fixed;
|
||||
z-index: 1031;
|
||||
top: 19px;
|
||||
right: 17px;
|
||||
}
|
||||
|
||||
#nprogress .spinner-icon {
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
box-sizing: border-box;
|
||||
border: solid 2px transparent;
|
||||
border-top-color: #29d;
|
||||
border-left-color: #29d;
|
||||
border-radius: 50%;
|
||||
-webkit-animation: nprogress-spinner 400ms linear infinite;
|
||||
animation: nprogress-spinner 400ms linear infinite;
|
||||
}
|
||||
|
||||
.nprogress-custom-parent {
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.nprogress-custom-parent #nprogress .spinner,
|
||||
.nprogress-custom-parent #nprogress .bar {
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
@-webkit-keyframes nprogress-spinner {
|
||||
0% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
-webkit-transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes nprogress-spinner {
|
||||
0% {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,174 @@
|
|||
header h2 {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
h3 {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
ol {
|
||||
display: block;
|
||||
list-style-type: decimal;
|
||||
-webkit-margin-before: 1em;
|
||||
-webkit-margin-after: 1em;
|
||||
-webkit-margin-start: 0px;
|
||||
-webkit-margin-end: 0px;
|
||||
-webkit-padding-start: 40px;
|
||||
}
|
||||
|
||||
.has-error input {
|
||||
background-repeat: no-repeat;
|
||||
background-image: url('images/error.png');
|
||||
background-position: right 8px center;
|
||||
}
|
||||
|
||||
.has-success input {
|
||||
background-repeat: no-repeat;
|
||||
background-image: url('images/success.png');
|
||||
background-position: right 8px center;
|
||||
}
|
||||
|
||||
.setup-wrapper {
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
form input {
|
||||
padding-right: 30px !important;
|
||||
}
|
||||
|
||||
.setup-header {
|
||||
margin: 0 auto;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.setup-main, .setup-confirm {
|
||||
float: left;
|
||||
width: 450px;
|
||||
}
|
||||
|
||||
.setup-confirm {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.setup-confirm h4 {
|
||||
padding: 6px 0;
|
||||
}
|
||||
|
||||
.setup-main span {
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.setup-main .input-group {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.setup-secondary {
|
||||
display: inline-block;
|
||||
float: right;
|
||||
width: 250px;
|
||||
margin-top: 70px;
|
||||
}
|
||||
|
||||
.setup-info-module {
|
||||
margin-bottom: 30px;
|
||||
background-color: #fff;
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 3px;
|
||||
box-shadow: 0 1px 3px rgba(0,0,0,0.075);
|
||||
}
|
||||
|
||||
.setup-info-module h4 {
|
||||
padding: 15px;
|
||||
margin-bottom: 15px;
|
||||
overflow: hidden;
|
||||
border-bottom: 1px solid #ddd;
|
||||
margin-top: 0;
|
||||
background-color: #5cb85c;
|
||||
color: #000;
|
||||
border-top-left-radius: 3px;
|
||||
border-top-right-radius: 3px;
|
||||
}
|
||||
|
||||
.features-list {
|
||||
padding: 0 15px 15px;
|
||||
margin: 0;
|
||||
font-size: 14px;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.features-list li:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.features-list li {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.features-list li strong {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.features-list li i {
|
||||
margin-right: 5px;
|
||||
color: #60b044;
|
||||
}
|
||||
|
||||
.features-list .list-divider {
|
||||
margin: 15px -15px;
|
||||
border-top: 1px solid #eee;
|
||||
}
|
||||
|
||||
.steps {
|
||||
display: table;
|
||||
width: 100%;
|
||||
padding: 0;
|
||||
margin: 30px auto 0;
|
||||
overflow: hidden;
|
||||
list-style: none;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 3px;
|
||||
box-shadow: 0 1px 3px rgba(0,0,0,0.05);
|
||||
}
|
||||
|
||||
.steps li:first-child {
|
||||
border-left: 0;
|
||||
}
|
||||
|
||||
.steps li.current {
|
||||
color: #000;
|
||||
background-color: #5cb85c;
|
||||
}
|
||||
|
||||
.steps li {
|
||||
display: table-cell;
|
||||
width: 50%;
|
||||
padding: 10px 15px;
|
||||
color: #ccc;
|
||||
cursor: default;
|
||||
background-color: #fafafa;
|
||||
border-left: 1px solid #ddd;
|
||||
}
|
||||
|
||||
.steps li .step {
|
||||
display: block;
|
||||
}
|
||||
|
||||
@media (max-width: 767px) {
|
||||
.steps {
|
||||
display: inherit;
|
||||
}
|
||||
|
||||
.steps li {
|
||||
display: inherit;
|
||||
width: inherit;
|
||||
}
|
||||
|
||||
.setup-secondary {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.setup-main, .setup-confirm {
|
||||
float: inherit;
|
||||
width: inherit;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
@media (min-width: 568px) {
|
||||
.notify-row {
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 736px) {
|
||||
.sidebar-toggle-box span {
|
||||
display: inline;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
html, body {
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.header, .site-footer {
|
||||
position: fixed;
|
||||
}
|
||||
|
||||
.main-content {
|
||||
position: fixed;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.form-horizontal .control-label {
|
||||
text-align: left;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-height: 672px) {
|
||||
html, body {
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.header, .site-footer {
|
||||
position: fixed;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,504 @@
|
|||
body {
|
||||
color: #797979;
|
||||
background: #f1f2f7;
|
||||
font-family: 'Open Sans', sans-serif;
|
||||
font-size: 13px;
|
||||
text-rendering: optimizeLegibility;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
}
|
||||
|
||||
ul li {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
a, a:hover, a:focus {
|
||||
text-decoration: none;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.dropdown-menu {
|
||||
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.176);
|
||||
}
|
||||
|
||||
.card-view:not(:last-child) {
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
|
||||
.header {
|
||||
padding: 0 15px;
|
||||
height: 94px;
|
||||
background: #fff;
|
||||
border-bottom: 1px solid #f1f2f7;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
z-index: 50;
|
||||
}
|
||||
|
||||
.header a {
|
||||
transition: all .25s linear;
|
||||
}
|
||||
|
||||
.header > .dropdown {
|
||||
margin-top: 7px;
|
||||
float: right;
|
||||
}
|
||||
|
||||
|
||||
.header > .dropdown > a {
|
||||
border: 1px solid #eee;
|
||||
border-radius: 4px;
|
||||
padding: 6px;
|
||||
background: none;
|
||||
margin-right: 0;
|
||||
display: block;
|
||||
white-space: nowrap;
|
||||
color: #777;
|
||||
}
|
||||
|
||||
.header > .dropdown > a:hover, .header > .dropdown.open > a, .notify-row > li > a:hover {
|
||||
border: 1px solid #777;
|
||||
color: #333
|
||||
}
|
||||
|
||||
.header > .dropdown > a span {
|
||||
font-size: 13px;
|
||||
display: inline-block;
|
||||
min-width: 18px;
|
||||
}
|
||||
|
||||
.header > .dropdown > a img {
|
||||
height: 29px;
|
||||
width: 29px;
|
||||
}
|
||||
|
||||
.header > .dropdown .dropdown-menu {
|
||||
width: 268px;
|
||||
top: 50px;
|
||||
left: auto;
|
||||
right: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.header > .dropdown .dropdown-menu li {
|
||||
text-align: center;
|
||||
width: 33.3%;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.header > .dropdown .dropdown-menu li:first-child {
|
||||
border-color: transparent transparent #e8e8e8;
|
||||
border-bottom-color: #e8e8e8;
|
||||
border-top-color: #e8e8e8;
|
||||
border-style: solid;
|
||||
border-width: 0 7px 7px;
|
||||
position: absolute;
|
||||
right: 20px;
|
||||
top: -8px;
|
||||
width: 0;
|
||||
}
|
||||
|
||||
.header > .dropdown .dropdown-menu li:last-child {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.header > .dropdown .dropdown-menu li:last-child a {
|
||||
color: #ca3a39;
|
||||
border-radius: 0 0 3px 3px;
|
||||
background: #a9d96c;
|
||||
background-image: linear-gradient(to bottom, #a9d96c 0%, #799e51 100%);
|
||||
}
|
||||
|
||||
.header > .dropdown .dropdown-menu li:last-child a:hover {
|
||||
color: #d20100;
|
||||
background: #6d9046;
|
||||
background-image: linear-gradient(to bottom, #a9d96c 0%, #6d9046 100%);
|
||||
}
|
||||
|
||||
.header > .dropdown .dropdown-menu li a {
|
||||
color: #777;
|
||||
padding: 15px 10px;
|
||||
}
|
||||
|
||||
.header > .dropdown .dropdown-menu li a:hover {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.header > .dropdown .dropdown-menu li a i {
|
||||
font-size: 17px;
|
||||
display: block;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.header > .dropdown .dropdown-menu li a .badge {
|
||||
position: absolute;
|
||||
right: 20px;
|
||||
top: 4px;
|
||||
background: #5cb85c;
|
||||
}
|
||||
|
||||
/*Title*/
|
||||
.sidebar-toggle-box {
|
||||
font-size: 21px;
|
||||
color: #333;
|
||||
float: left;
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
.sidebar-toggle-box span, .notify-row {
|
||||
display: none;
|
||||
}
|
||||
/*end title*/
|
||||
|
||||
.site-footer {
|
||||
background: #5b6e84;
|
||||
color: #fff;
|
||||
padding: 10px 4px;
|
||||
height: 40px;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.go-top {
|
||||
background: rgba(255,255,255,.5);
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
border-radius: 50%;
|
||||
-webkit-border-radius: 50%;
|
||||
position: absolute;
|
||||
right: 10px;
|
||||
}
|
||||
|
||||
.go-top:hover {
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
.go-top i {
|
||||
color: #2A3542;
|
||||
}
|
||||
|
||||
/*notify bar*/
|
||||
.notify-row {
|
||||
margin-top: 20px;
|
||||
padding-left: 20px;
|
||||
}
|
||||
|
||||
.notify-row .bg-success, .notify-row .dropdown-menu.tasks-bar li p {
|
||||
background: #a9d86e;
|
||||
}
|
||||
|
||||
.notify-row .bg-important, .notify-row .dropdown-menu.inbox li p {
|
||||
background: #ff6c60;
|
||||
}
|
||||
|
||||
.notify-row .bg-user, .notify-row .dropdown-menu.users li p {
|
||||
background: #5cb85c;
|
||||
}
|
||||
|
||||
.notify-row .bg-warning, .notify-row .dropdown-menu.notification li p {
|
||||
background: #FCB322;
|
||||
}
|
||||
|
||||
.notify-row .bg-db, .notify-row .dropdown-menu.dbs li p {
|
||||
background: #d03633;
|
||||
}
|
||||
|
||||
.notify-row > li {
|
||||
float: left;
|
||||
position: relative;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.notify-row > li > a {
|
||||
color: #666666;
|
||||
border-radius: 4px;
|
||||
-webkit-border-radius: 4px;
|
||||
font-size: 16px;
|
||||
border: 1px solid #f0f0f8;
|
||||
padding: 2px 6px;
|
||||
margin-right: 15px;
|
||||
}
|
||||
|
||||
.notify-row > li > a .badge {
|
||||
position: absolute;
|
||||
top: -10px;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.notify-row .dropdown-menu {
|
||||
float: left;
|
||||
max-width: 300px;
|
||||
min-width: 160px;
|
||||
top: 32px;
|
||||
left: -74px;
|
||||
width: 235px;
|
||||
padding: 0;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.notify-row .dropdown-menu .notify-arrow {
|
||||
border-style: solid;
|
||||
border-width: 0 9px 9px;
|
||||
height: 0;
|
||||
margin-top: 0;
|
||||
opacity: 0;
|
||||
position: absolute;
|
||||
left: 80px;
|
||||
top: -18px;
|
||||
transition: all 0.25s ease 0s;
|
||||
width: 0;
|
||||
z-index: 10;
|
||||
margin-top: 10px;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.notify-row .dropdown-menu .notify-arrow.notify-arrow-green {
|
||||
border-color: transparent transparent #a9d86e;
|
||||
border-bottom-color: #a9d86e;
|
||||
border-top-color: #a9d86e;
|
||||
}
|
||||
|
||||
.notify-row .dropdown-menu .notify-arrow.notify-arrow-yellow {
|
||||
border-color: transparent transparent #FCB322;
|
||||
border-bottom-color: #FCB322;
|
||||
border-top-color: #FCB322;
|
||||
}
|
||||
|
||||
.notify-row .dropdown-menu .notify-arrow.notify-arrow-red {
|
||||
border-color: transparent transparent #ff6c60;
|
||||
border-bottom-color: #ff6c60;
|
||||
border-top-color: #ff6c60;
|
||||
}
|
||||
|
||||
.notify-row .dropdown-menu .notify-arrow.notify-arrow-db {
|
||||
border-color: transparent transparent #d03633;
|
||||
border-bottom-color: #d03633;
|
||||
border-top-color: #d03633;
|
||||
}
|
||||
|
||||
.notify-row .dropdown-menu .notify-arrow.notify-arrow-user {
|
||||
border-color: transparent transparent #5cb85c;
|
||||
border-bottom-color: #5cb85c;
|
||||
border-top-color: #5cb85c;
|
||||
}
|
||||
|
||||
.notify-row .dropdown-menu li:last-child a {
|
||||
border-bottom: 0;
|
||||
border-radius: 0 0 4px 4px;
|
||||
}
|
||||
|
||||
.notify-row .dropdown-menu li a {
|
||||
border-bottom: 1px solid #EBEBEB;
|
||||
font-size: 12px;
|
||||
list-style: none;
|
||||
padding: 15px 10px;
|
||||
}
|
||||
|
||||
.notify-row .dropdown-menu li a:hover {
|
||||
color: #222;
|
||||
}
|
||||
|
||||
.notify-row .dropdown-menu p {
|
||||
color: #fff;
|
||||
margin: 0;
|
||||
padding: 10px;
|
||||
border-radius: 4px 4px 0px 0px;
|
||||
-webkit-border-radius: 4px 4px 0px 0px;
|
||||
}
|
||||
|
||||
.notify-row .dropdown-menu .content {
|
||||
position: absolute;
|
||||
left: 36px;
|
||||
right: 44px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.notify-row .dropdown-menu .label {
|
||||
display: inline-block;
|
||||
height: 18px;
|
||||
width: 20px;
|
||||
padding: 5px;
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
.notify-row .dropdown-menu .small {
|
||||
font-size: 10px;
|
||||
font-style: italic;
|
||||
font-weight: bold;
|
||||
float: right;
|
||||
padding-top: 2px;
|
||||
}
|
||||
|
||||
.notify-row .dropdown-menu.tasks-bar .desc {
|
||||
font-size: 13px;
|
||||
font-weight: normal;
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.notify-row .dropdown-menu.tasks-bar .percent {
|
||||
display: inline-block;
|
||||
float: right;
|
||||
font-size: 13px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.notify-row .dropdown-menu.tasks-bar .progress {
|
||||
margin-top: 4px;
|
||||
height: 10px;
|
||||
margin-right: 34px;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.notify-row .dropdown-menu.inbox .photo img {
|
||||
border-radius: 2px 2px 2px 2px;
|
||||
float: left;
|
||||
height: 42px;
|
||||
margin-right: 4px;
|
||||
width: 42px;
|
||||
border: solid 1px #EBEBEB;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.notify-row .dropdown-menu.inbox .subject {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.notify-row .dropdown-menu.inbox .subject .from {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.notify-row .dropdown-menu.inbox .subject .time {
|
||||
font-size: 11px;
|
||||
font-style: italic;
|
||||
font-weight: bold;
|
||||
float: right;
|
||||
}
|
||||
|
||||
.notify-row .dropdown-menu.inbox .message {
|
||||
font-size: 11px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
position: absolute;
|
||||
right: 6px;
|
||||
left: 56px;
|
||||
margin-top: 2px;
|
||||
}
|
||||
|
||||
.dropdown-menu.menu {
|
||||
top: 50px;
|
||||
left: 6px;
|
||||
margin-right: 15px;
|
||||
min-height: 160px;
|
||||
min-width: 280px;
|
||||
}
|
||||
|
||||
.dropdown-menu.menu .arrow-up {
|
||||
left: 8px;
|
||||
top: -10px;
|
||||
}
|
||||
|
||||
.dropdown-menu.menu .menu-submenu {
|
||||
padding: 0 16px;
|
||||
}
|
||||
|
||||
.dropdown-menu.menu .menu-submenu ul {
|
||||
float: left;
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
.dropdown-menu.menu .menu-submenu li p {
|
||||
color: #323232;
|
||||
font-size: 14px;
|
||||
text-transform: none;
|
||||
font-weight: bold;
|
||||
border-bottom: solid 1px #a9d86e;
|
||||
padding: 10px 0 4px 0;
|
||||
margin-bottom: 14px;
|
||||
}
|
||||
|
||||
.dropdown-menu.menu .menu-submenu li a {
|
||||
margin-bottom: 15px;
|
||||
display: inline-block;
|
||||
color: #323232;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.dropdown-menu.menu .menu-submenu li a.active, .dropdown-menu.menu .menu-submenu li p.active {
|
||||
color: #0376d8;
|
||||
}
|
||||
|
||||
.dropdown-menu.menu .menu-submenu li a:hover {
|
||||
color: #2e6da4;
|
||||
}
|
||||
|
||||
.dropdown-menu.menu .menu-submenu li a i {
|
||||
padding-right: 6px;
|
||||
}
|
||||
/*end*/
|
||||
ul.breadcrumb {
|
||||
position: absolute;
|
||||
top: 56px;
|
||||
left: 15px;
|
||||
right: 15px;
|
||||
border-color: #ddd;
|
||||
border-width: 1px 0 0 0;
|
||||
border-style: solid;
|
||||
background-color: transparent;
|
||||
border-top-left-radius: 0;
|
||||
border-top-right-radius: 0;
|
||||
}
|
||||
|
||||
ul.breadcrumb > li.active {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
ul.breadcrumb > li.load {
|
||||
display: none;
|
||||
}
|
||||
|
||||
ul.breadcrumb > li > a > i {
|
||||
padding-right: 6px;
|
||||
}
|
||||
|
||||
.content-body {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
bottom: 40px;
|
||||
right: 0;
|
||||
top: 94px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.content-body iframe {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.welcome-bg {
|
||||
background-image: url('images/bg.jpg');
|
||||
background-size: 100% 100%;
|
||||
}
|
||||
|
||||
.tooltip-inner {
|
||||
max-width: 768px;
|
||||
}
|
||||
|
||||
.tooltip.has-error .tooltip-inner {
|
||||
background-color: #a94442;
|
||||
}
|
||||
|
||||
.tooltip.has-error .tooltip-arrow {
|
||||
border-top-color: #a94442;
|
||||
}
|
|
@ -0,0 +1,263 @@
|
|||
/*--------------Tasks Widget--------------*/
|
||||
.task-content {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.tasks-widget .task-content:after {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.tasks-widget .task-footer {
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
.tasks-widget .task-footer:after,
|
||||
.tasks-widget .task-footer:before {
|
||||
content: "";
|
||||
display: table;
|
||||
line-height: 0;
|
||||
}
|
||||
|
||||
.tasks-widget .task-footer:after {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.tasks-widget .task-list {
|
||||
padding: 0;
|
||||
margin: 0 0 20px 0;
|
||||
}
|
||||
|
||||
.tasks-widget .task-list > li {
|
||||
position: relative;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.tasks-widget .task-list li.last-line {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.tasks-widget .task-list li > .task-bell {
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.tasks-widget .task-list li > .task-checkbox {
|
||||
float: left;
|
||||
width: 30px;
|
||||
}
|
||||
|
||||
.tasks-widget .task-list li > .task-title {
|
||||
overflow: hidden;
|
||||
height: 46px;
|
||||
}
|
||||
|
||||
.tasks-widget .task-list li > .task-title .task-value {
|
||||
position: absolute;
|
||||
left: 190px;
|
||||
right: 40px;
|
||||
top: 15px;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.tasks-widget .task-list li > .task-title span {
|
||||
display: inline-block;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.tasks-widget .task-list li > .task-title .badge {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
top: -19px;
|
||||
left: -12px;
|
||||
}
|
||||
|
||||
.tasks-widget .task-list li > .task-title .label-success {
|
||||
background-color: #5cb85c;
|
||||
}
|
||||
|
||||
.tasks-widget .task-list li > .task-title .hidden-phone {
|
||||
padding-top: 12px;
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
.tasks-widget .task-list li > .task-title .hidden-phone button.btn-xs {
|
||||
font-size: 12px;
|
||||
line-height: 1.5;
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
.tasks-widget .task-list li > .task-title .hidden-phone a.btn-xs {
|
||||
padding: 4px 5px;
|
||||
}
|
||||
|
||||
.tasks-widget .task-list li > .task-config {
|
||||
position: absolute;
|
||||
top: 10px;
|
||||
right: 10px;
|
||||
}
|
||||
|
||||
.tasks-widget .task-list li .task-title.notifi .task-title-sp {
|
||||
max-width: 80px;
|
||||
}
|
||||
|
||||
.tasks-widget .task-list li .task-title.notifi .task-value {
|
||||
left: 120px;
|
||||
right: 190px;
|
||||
}
|
||||
|
||||
.tasks-widget .task-list li .task-title.notifi .task-time {
|
||||
position: absolute;
|
||||
right: 66px;
|
||||
top: 15px;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.tasks-widget .task-list li .task-title .task-title-sp {
|
||||
margin-right: 5px;
|
||||
max-width: 150px;
|
||||
padding-top: 15px;
|
||||
}
|
||||
|
||||
.tasks-widget .task-list li.task-done .task-title-sp {
|
||||
text-decoration: line-through;
|
||||
color: #bbbbbb;
|
||||
}
|
||||
|
||||
.tasks-widget .task-list li.task-done {
|
||||
background: #f6f6f6;
|
||||
}
|
||||
|
||||
.tasks-widget .task-list li.task-done:hover {
|
||||
background: #f4f4f4;
|
||||
}
|
||||
|
||||
.tasks-widget .task-list li:hover {
|
||||
background: #f9f9f9;
|
||||
}
|
||||
|
||||
.tasks-widget .task-list li .task-config {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.tasks-widget .task-list li:hover > .task-config {
|
||||
display: block;
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
|
||||
.tasks-widget .task-list li i {
|
||||
position: absolute;
|
||||
left: 6px;
|
||||
padding: 17px 10px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#sortable {
|
||||
list-style-type: none;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.ui-sortable > li {
|
||||
padding-left: 35px;
|
||||
position: relative;
|
||||
background: #f5f6f8;
|
||||
margin-bottom: 2px;
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.ui-sortable li.title {
|
||||
font-size: 14px;
|
||||
color: #0077de;
|
||||
background-color: #b5f1b6;
|
||||
padding: 10px 15px;
|
||||
}
|
||||
|
||||
.ui-sortable li.title:hover {
|
||||
background-color: #b5f1b6;
|
||||
}
|
||||
|
||||
.ui-sortable li.title:first-child {
|
||||
border-radius: 4px 4px 0 0;
|
||||
}
|
||||
|
||||
.ui-sortable li.list-primary {
|
||||
border-left: 3px solid #41CAC0;
|
||||
}
|
||||
|
||||
.ui-sortable li.list-success {
|
||||
border-left: 3px solid #78CD51;
|
||||
}
|
||||
|
||||
.ui-sortable li.list-danger {
|
||||
border-left: 3px solid #FF6C60;
|
||||
}
|
||||
|
||||
.ui-sortable li.list-warning {
|
||||
border-left: 3px solid #F1C500;
|
||||
}
|
||||
|
||||
.ui-sortable li.list-info {
|
||||
border-left: 3px solid #58C9F3;
|
||||
}
|
||||
|
||||
.ui-sortable li.list-inverse {
|
||||
border-left: 3px solid #BEC3C7;
|
||||
}
|
||||
|
||||
.ui-sortable li.list-default {
|
||||
border-left: 3px solid #BEC3C7;
|
||||
}
|
||||
|
||||
.ui-sortable li.list-Exception {
|
||||
border-left: 3px solid red;
|
||||
}
|
||||
|
||||
.ui-sortable li.list-Message {
|
||||
border-left: 3px solid #00ff00;
|
||||
}
|
||||
|
||||
.ui-sortable li.list-Task {
|
||||
border-left: 3px solid #2083a0;
|
||||
}
|
||||
|
||||
.ui-sortable li.list-Notification {
|
||||
border-left: 3px solid #b7d8e2;
|
||||
}
|
||||
|
||||
.task-header {
|
||||
font-size: 14px !important;
|
||||
font-weight: 600;
|
||||
background-color: #5cb85c !important;
|
||||
color: #fff;
|
||||
border-top-left-radius: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
}
|
||||
|
||||
.task-oper {
|
||||
padding-top: 15px;
|
||||
padding-right: 20px;
|
||||
}
|
||||
|
||||
@media (max-width: 548px) {
|
||||
.tasks-widget .task-list li .task-title.notifi .task-value {
|
||||
right: 66px;
|
||||
}
|
||||
|
||||
.tasks-widget .task-list li .task-title.notifi .task-time {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 320px) {
|
||||
|
||||
.tasks-widget .task-config-btn {
|
||||
float: inherit;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.tasks-widget .task-list-projects li > .label {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
}
|
|
@ -1,29 +1,152 @@
|
|||
using Bootstrap.Admin.Models;
|
||||
using Bootstrap.DataAccess;
|
||||
using System.Web.Mvc;
|
||||
|
||||
namespace Bootstrap.Admin.Controllers
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public class AdminController : Controller
|
||||
{
|
||||
// GET: Admin
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public ActionResult Index()
|
||||
{
|
||||
var v = new ModelBase();
|
||||
v.Header = new HeaderBarModel();
|
||||
v.Header.UserName = "Argo Zhang";
|
||||
v.Navigator = new NavigatorBarModel();
|
||||
return View(v);
|
||||
return View(new NavigatorBarModel("~/Admin/Index"));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public ActionResult Users()
|
||||
{
|
||||
var v = new UserModel();
|
||||
v.Header = new HeaderBarModel();
|
||||
v.Header.UserName = "Argo Zhang";
|
||||
v.Header.BreadcrumbName = "用户管理";
|
||||
v.Navigator = new NavigatorBarModel();
|
||||
return View(v);
|
||||
return View(new NavigatorBarModel("~/Admin/Users"));
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public ActionResult Groups()
|
||||
{
|
||||
return View(new NavigatorBarModel("~/Admin/Groups"));
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public ActionResult Dicts()
|
||||
{
|
||||
return View(new NavigatorBarModel("~/Admin/Dicts"));
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public ActionResult Roles()
|
||||
{
|
||||
return View(new NavigatorBarModel("~/Admin/Roles"));
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public ActionResult Menus()
|
||||
{
|
||||
return View(new NavigatorBarModel("~/Admin/Menus"));
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public ActionResult Logs()
|
||||
{
|
||||
return View(new NavigatorBarModel("~/Admin/Logs"));
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public ActionResult FAIcon()
|
||||
{
|
||||
return View(new NavigatorBarModel("~/Admin/FAIcon"));
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[OutputCache(CacheProfile = "IconView")]
|
||||
public PartialViewResult IconView()
|
||||
{
|
||||
Response.Cache.SetOmitVaryStar(true);
|
||||
return PartialView("IconView");
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public ActionResult Settings()
|
||||
{
|
||||
return View(new NavigatorBarModel("~/Admin/Settings"));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public ActionResult Notifications()
|
||||
{
|
||||
return View(new NavigatorBarModel("~/Admin/Notifications"));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public ActionResult Profiles()
|
||||
{
|
||||
return View(new ProfilesModel("~/Admin/Profiles"));
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public ActionResult Exceptions()
|
||||
{
|
||||
return View(new NavigatorBarModel("~/Admin/Exceptions"));
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public ActionResult Messages()
|
||||
{
|
||||
return View(new NavigatorBarModel("~/Admin/Messages"));
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public ActionResult Tasks()
|
||||
{
|
||||
return View(new NavigatorBarModel("~/Admin/Tasks"));
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public ActionResult Mobile()
|
||||
{
|
||||
return View(new NavigatorBarModel("~/Admin/Mobile"));
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public ActionResult Api()
|
||||
{
|
||||
return View(new NavigatorBarModel("~/Admin/Api"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,81 @@
|
|||
using Bootstrap.Admin.Models;
|
||||
using Bootstrap.DataAccess;
|
||||
using Longbow.Security.Principal;
|
||||
using Longbow.Web.Mvc;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web.Http;
|
||||
|
||||
namespace Bootstrap.Admin.Controllers
|
||||
{
|
||||
public class DictsController : ApiController
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
public QueryData<Dict> Get([FromUri]QueryDictOption value)
|
||||
{
|
||||
return value.RetrieveData();
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
public Dict Get(int id)
|
||||
{
|
||||
return DictHelper.RetrieveDicts().FirstOrDefault(t => t.Id == id);
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
[HttpPost]
|
||||
public bool Post([FromBody]Dict value)
|
||||
{
|
||||
return DictHelper.SaveDict(value);
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
[AllowAnonymous]
|
||||
public IEnumerable<Dict> Post(int id, [FromBody]JObject value)
|
||||
{
|
||||
IEnumerable<Dict> ret = new List<Dict>();
|
||||
dynamic json = value;
|
||||
switch ((string)json.type)
|
||||
{
|
||||
case "category":
|
||||
ret = DictHelper.RetrieveCategories();
|
||||
break;
|
||||
case "css":
|
||||
ret = DictHelper.RetrieveWebCss();
|
||||
break;
|
||||
case "activeCss":
|
||||
ret = DictHelper.RetrieveActiveCss();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
[HttpDelete]
|
||||
public object Delete([FromBody]string value)
|
||||
{
|
||||
if (!LgbPrincipal.IsAdmin(User)) return new { result = false, msg = "当前用户权限不够" };
|
||||
var result = DictHelper.DeleteDict(value);
|
||||
return new { result = result, msg = result ? "成功!" : "失败" };
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
using Bootstrap.Admin.Models;
|
||||
using Bootstrap.DataAccess;
|
||||
using Longbow.Web.Mvc;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Web;
|
||||
using System.Web.Http;
|
||||
|
||||
namespace Bootstrap.Admin.Controllers
|
||||
{
|
||||
public class ExceptionsController : ApiController
|
||||
{
|
||||
/// <summary>
|
||||
/// 显示所有异常
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
public QueryData<Exceptions> Get([FromUri]QueryExceptionOption value)
|
||||
{
|
||||
return value.RetrieveData();
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public IEnumerable<string> Post()
|
||||
{
|
||||
var filePath = HttpContext.Current.Server.MapPath("~/App_Data/ErrorLog");
|
||||
return Directory.GetFiles(filePath)
|
||||
.Where(f => Path.GetExtension(f).Equals(".log", System.StringComparison.OrdinalIgnoreCase))
|
||||
.Select(f => Path.GetFileNameWithoutExtension(f)).OrderByDescending(s => s);
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPut]
|
||||
public string Put([FromBody]string fileName)
|
||||
{
|
||||
var logName = HttpContext.Current.Server.MapPath(string.Format("~/App_Data/ErrorLog/{0}.log", fileName));
|
||||
if (!File.Exists(logName)) return "无此日志文件";
|
||||
StringBuilder sb = new StringBuilder();
|
||||
using (StreamReader reader = new StreamReader(logName))
|
||||
{
|
||||
while (!reader.EndOfStream)
|
||||
{
|
||||
var line = reader.ReadLine().Replace("<", "<").Replace(">", ">");
|
||||
if (line == "General Information ") sb.AppendFormat("<h4><b>{0}</b></h4>", line);
|
||||
else if (line.StartsWith("TimeStamp:")) sb.AppendFormat("<div class='logTs'>{0}</div>", line);
|
||||
else if (line.EndsWith("Exception Information")) sb.AppendFormat("<div class='logExcep'>{0}</div>", line);
|
||||
else if (line.StartsWith("Message:")) sb.AppendFormat("<div class='logMsg'>{0}</div>", line);
|
||||
else if (line.StartsWith("ErrorSql:")) sb.AppendFormat("<div class='logSql'>{0}</div>", line);
|
||||
else if (line.StartsWith("Exception Type: Longbow.Data.DBAccessException")) sb.AppendFormat("<div class='logDbExcep'>{0}</div>", line);
|
||||
else if (line.StartsWith("StackTrace Information")) sb.AppendFormat("<b>{0}</b><br>", line);
|
||||
else sb.AppendFormat("{0}<br>", line);
|
||||
};
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,101 @@
|
|||
using Bootstrap.Admin.Models;
|
||||
using Bootstrap.DataAccess;
|
||||
using Longbow.Web.Mvc;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web.Http;
|
||||
|
||||
namespace Bootstrap.Admin.Controllers
|
||||
{
|
||||
public class GroupsController : ApiController
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
public QueryData<Group> Get([FromUri]QueryGroupOption value)
|
||||
{
|
||||
return value.RetrieveData();
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
public Group Get(int id)
|
||||
{
|
||||
return GroupHelper.RetrieveGroups().FirstOrDefault(t => t.Id == id);
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
[HttpPost]
|
||||
public bool Post([FromBody]Group value)
|
||||
{
|
||||
return GroupHelper.SaveGroup(value);
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
[HttpDelete]
|
||||
public bool Delete([FromBody]string value)
|
||||
{
|
||||
return GroupHelper.DeleteGroup(value);
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public IEnumerable<Group> Post(int id, [FromBody]JObject value)
|
||||
{
|
||||
var ret = new List<Group>();
|
||||
dynamic json = value;
|
||||
switch ((string)json.type)
|
||||
{
|
||||
case "user":
|
||||
ret = GroupHelper.RetrieveGroupsByUserId(id).ToList();
|
||||
break;
|
||||
case "role":
|
||||
ret = GroupHelper.RetrieveGroupsByRoleId(id).ToList();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPut]
|
||||
public bool Put(int id, [FromBody]JObject value)
|
||||
{
|
||||
var ret = false;
|
||||
dynamic json = value;
|
||||
string groupIds = json.groupIds;
|
||||
switch ((string)json.type)
|
||||
{
|
||||
case "user":
|
||||
ret = GroupHelper.SaveGroupsByUserId(id, groupIds);
|
||||
break;
|
||||
case "role":
|
||||
ret = GroupHelper.SaveGroupsByRoleId(id, groupIds);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,23 +1,74 @@
|
|||
using System.Web.Mvc;
|
||||
using Bootstrap.Admin.Models;
|
||||
using Bootstrap.DataAccess;
|
||||
using Bootstrap.Security;
|
||||
using Longbow.Security.Principal;
|
||||
using System.Web.Mvc;
|
||||
using System.Web.Security;
|
||||
|
||||
namespace Bootstrap.Admin.Controllers
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public class HomeController : Controller
|
||||
{
|
||||
// GET: Home
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public ActionResult Index()
|
||||
{
|
||||
return View();
|
||||
var v = new HeaderBarModel { HomeUrl = DictHelper.RetrieveHomeUrl() };
|
||||
return v.HomeUrl.StartsWith("~/") ? (ActionResult)View(v) : Redirect(v.HomeUrl);
|
||||
}
|
||||
public ActionResult Rules()
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public ActionResult Lock()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
public ActionResult Terminals()
|
||||
FormsAuthentication.SignOut();
|
||||
var user = UserHelper.RetrieveUsersByName(User.Identity.Name);
|
||||
return View(new LockModel
|
||||
{
|
||||
return View();
|
||||
UserName = user.UserName,
|
||||
DisplayName = user.DisplayName,
|
||||
ReturnUrl = Url.Encode(Request.UrlReferrer == null ? FormsAuthentication.DefaultUrl : Request.UrlReferrer.AbsoluteUri)
|
||||
});
|
||||
}
|
||||
public ActionResult Login()
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="login"></param>
|
||||
/// <returns></returns>
|
||||
[AllowAnonymous]
|
||||
public ActionResult Login(LoginModel login)
|
||||
{
|
||||
FormsAuthentication.SignOut();
|
||||
if (!string.IsNullOrEmpty(login.UserName) && (LgbPrincipal.Authenticate(login.UserName, login.Password) || BootstrapUser.Authenticate(login.UserName, login.Password)))
|
||||
{
|
||||
FormsAuthentication.RedirectFromLoginPage(login.UserName, login.Remember == "true");
|
||||
return new EmptyResult();
|
||||
}
|
||||
return View(login);
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[AllowAnonymous]
|
||||
public ActionResult Register(User p)
|
||||
{
|
||||
if (string.IsNullOrEmpty(p.UserName) || string.IsNullOrEmpty(p.Password) || string.IsNullOrEmpty(p.DisplayName) || string.IsNullOrEmpty(p.Description)) return View();
|
||||
p.UserStatus = 1;
|
||||
return UserHelper.SaveUser(p) ? (ActionResult)Redirect("~/Content/html/RegResult.html") : View();
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[AllowAnonymous]
|
||||
public ActionResult Mobile()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
|
|
|
@ -0,0 +1,57 @@
|
|||
using Bootstrap.Security;
|
||||
using Bootstrap.Security.Mvc;
|
||||
using Longbow.Caching;
|
||||
using Longbow.Security.Principal;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Web.Http;
|
||||
using System.Web.Security;
|
||||
|
||||
namespace Bootstrap.Admin.Controllers
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public class LoginController : ApiController
|
||||
{
|
||||
[HttpGet]
|
||||
public LoginInfo Get()
|
||||
{
|
||||
var token = Request.Headers.GetValues("Token").First();
|
||||
return new LoginInfo() { UserName = User.Identity.Name, Token = token };
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
[AllowAnonymous]
|
||||
[HttpPost]
|
||||
public LoginInfo Post([FromBody]JObject value)
|
||||
{
|
||||
dynamic user = value;
|
||||
string userName = user.userName;
|
||||
string password = user.password;
|
||||
if (LgbPrincipal.Authenticate(userName, password) || BootstrapUser.Authenticate(userName, password))
|
||||
{
|
||||
var interval = int.Parse(Math.Round(FormsAuthentication.Timeout.TotalSeconds).ToString(CultureInfo.InvariantCulture));
|
||||
var token = CacheManager.AddOrUpdate(string.Format("WebApi-{0}", userName), interval, k => new LoginInfo() { UserName = userName, Token = Guid.NewGuid().ToString() }, (k, info) => info, "WebApi 数据缓存");
|
||||
CacheManager.AddOrUpdate(token.Token, interval, k => token, (k, info) => info, "Token 数据缓存");
|
||||
return token;
|
||||
}
|
||||
return new LoginInfo() { UserName = userName };
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[AllowAnonymous]
|
||||
[HttpOptions]
|
||||
public string Options()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
using Bootstrap.Admin.Models;
|
||||
using Bootstrap.DataAccess;
|
||||
using Longbow.Web.Mvc;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
using System.Web.Http;
|
||||
|
||||
namespace Bootstrap.Admin.Controllers
|
||||
{
|
||||
public class LogsController : ApiController
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
public QueryData<Log> Get([FromUri]QueryLogOption value)
|
||||
{
|
||||
return value.RetrieveData();
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
public Log Get(int id)
|
||||
{
|
||||
return LogHelper.RetrieveLogs().FirstOrDefault(t => t.Id == id);
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public bool Post([FromBody]Log value)
|
||||
{
|
||||
var request = HttpContext.Current.Request;
|
||||
value.ClientAgent = request.UserAgent;
|
||||
value.ClientIp = request.UserHostAddress;
|
||||
value.UserName = HttpContext.Current.User.Identity.Name;
|
||||
return LogHelper.SaveLog(value);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,76 @@
|
|||
using Bootstrap.Admin.Models;
|
||||
using Bootstrap.DataAccess;
|
||||
using Longbow.Web.Mvc;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web.Http;
|
||||
|
||||
namespace Bootstrap.Admin.Controllers
|
||||
{
|
||||
public class MenusController : ApiController
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
public QueryData<Menu> Get([FromUri]QueryMenuOption value)
|
||||
{
|
||||
return value.RetrieveData(User.Identity.Name);
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
[HttpPost]
|
||||
public bool Post([FromBody]Menu value)
|
||||
{
|
||||
return MenuHelper.SaveMenu(value);
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
[HttpDelete]
|
||||
public bool Delete([FromBody]string value)
|
||||
{
|
||||
return MenuHelper.DeleteMenu(value);
|
||||
}
|
||||
[HttpPost]
|
||||
public IEnumerable<Menu> Post(int id, [FromBody]JObject value)
|
||||
{
|
||||
var ret = new List<Menu>();
|
||||
dynamic json = value;
|
||||
switch ((string)json.type)
|
||||
{
|
||||
case "role":
|
||||
ret = MenuHelper.RetrieveMenusByRoleId(id).ToList();
|
||||
break;
|
||||
case "user":
|
||||
ret = MenuHelper.RetrieveAllMenusByUserName(User.Identity.Name).ToList();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
[HttpPut]
|
||||
public bool Put(int id, [FromBody]JObject value)
|
||||
{
|
||||
var ret = false;
|
||||
dynamic json = value;
|
||||
string menuIds = json.menuIds.ToString();
|
||||
switch ((string)json.type)
|
||||
{
|
||||
case "role":
|
||||
ret = MenuHelper.SaveMenusByRoleId(id, menuIds);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
using Bootstrap.Admin.Models;
|
||||
using Bootstrap.DataAccess;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web.Http;
|
||||
|
||||
|
||||
namespace Bootstrap.Admin.Controllers
|
||||
{
|
||||
public class MessagesController : ApiController
|
||||
{
|
||||
/// <summary>
|
||||
/// 根据Id返回不同的消息列表
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
public IEnumerable<Message> Get(string id)
|
||||
{
|
||||
var ret = new List<Message>();
|
||||
switch (id)
|
||||
{
|
||||
case "inbox":
|
||||
ret = MessageHelper.Inbox(User.Identity.Name).ToList();
|
||||
break;
|
||||
case "sendmail":
|
||||
ret = MessageHelper.SendMail(User.Identity.Name).ToList();
|
||||
break;
|
||||
case "mark":
|
||||
ret = MessageHelper.Mark(User.Identity.Name).ToList();
|
||||
break;
|
||||
case "trash":
|
||||
ret = MessageHelper.Trash(User.Identity.Name).ToList();
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 返回各个消息列表的文件个数
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
public MessageCountModel Get()
|
||||
{
|
||||
var mcm = new MessageCountModel
|
||||
{
|
||||
InboxCount = MessageHelper.Inbox(User.Identity.Name).Count(),
|
||||
SendmailCount = MessageHelper.SendMail(User.Identity.Name).Count(),
|
||||
MarkCount = MessageHelper.Mark(User.Identity.Name).Count(),
|
||||
TrashCount = MessageHelper.Trash(User.Identity.Name).Count()
|
||||
};
|
||||
return mcm;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,136 @@
|
|||
using Bootstrap.DataAccess;
|
||||
using System.Collections.Generic;
|
||||
using System.Web.Http;
|
||||
using System.Linq;
|
||||
using System;
|
||||
|
||||
namespace Bootstrap.Admin.Controllers
|
||||
{
|
||||
public class NotificationsController : ApiController
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
public Notifications Get()
|
||||
{
|
||||
var ret = new Notifications();
|
||||
// New Users
|
||||
var user = UserHelper.RetrieveNewUsers();
|
||||
ret.Users = user.Take(6).ToList();
|
||||
ret.Users.AsParallel().ForAll(n =>
|
||||
{
|
||||
var ts = DateTime.Now - n.RegisterTime;
|
||||
if (ts.TotalMinutes < 5) n.Period = "刚刚";
|
||||
else if (ts.Days > 0) n.Period = string.Format("{0}天", ts.Days);
|
||||
else if (ts.Hours > 0) n.Period = string.Format("{0}小时", ts.Hours);
|
||||
else if (ts.Minutes > 0) n.Period = string.Format("{0}分钟", ts.Minutes);
|
||||
});
|
||||
ret.NewUsersCount = user.Count();
|
||||
|
||||
// Tasks
|
||||
var task = TaskHelper.RetrieveTasks();
|
||||
ret.Tasks = task.Take(6).ToList();
|
||||
ret.TasksCount = task.Count();
|
||||
|
||||
//Message
|
||||
var message = MessageHelper.RetrieveMessagesHeader(User.Identity.Name);
|
||||
ret.Messages = message.Take(6).ToList();
|
||||
ret.Messages.AsParallel().ForAll(m => m.FromIcon = Url.Content(m.FromIcon));
|
||||
ret.MessagesCount = message.Count();
|
||||
|
||||
//Apps
|
||||
var apps = ExceptionHelper.RetrieveExceptions().Where(n => n.ExceptionType != "Longbow.Data.DBAccessException");
|
||||
ret.Apps = apps.Take(6).ToList();
|
||||
ret.Apps.AsParallel().ForAll(n =>
|
||||
{
|
||||
n.ExceptionType = n.ExceptionType.Split('.').Last();
|
||||
var ts = DateTime.Now - n.LogTime;
|
||||
if (ts.TotalMinutes < 5) n.Period = "刚刚";
|
||||
else if (ts.Days > 0) n.Period = string.Format("{0}天", ts.Days);
|
||||
else if (ts.Hours > 0) n.Period = string.Format("{0}小时", ts.Hours);
|
||||
else if (ts.Minutes > 0) n.Period = string.Format("{0}分钟", ts.Minutes);
|
||||
});
|
||||
ret.AppExceptionsCount = apps.Count();
|
||||
|
||||
//Dbs
|
||||
var dbs = ExceptionHelper.RetrieveExceptions().Where(n => n.ExceptionType == "Longbow.Data.DBAccessException");
|
||||
ret.Dbs = dbs.Take(6).ToList();
|
||||
ret.Dbs.AsParallel().ForAll(n =>
|
||||
{
|
||||
var ts = DateTime.Now - n.LogTime;
|
||||
if (ts.TotalMinutes < 5) n.Period = "刚刚";
|
||||
else if (ts.Days > 0) n.Period = string.Format("{0}天", ts.Days);
|
||||
else if (ts.Hours > 0) n.Period = string.Format("{0}小时", ts.Hours);
|
||||
else if (ts.Minutes > 0) n.Period = string.Format("{0}分钟", ts.Minutes);
|
||||
});
|
||||
ret.DbExceptionsCount = dbs.Count();
|
||||
return ret;
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
public Notifications Get(string id)
|
||||
{
|
||||
var ret = new Notifications();
|
||||
if (id == "newusers" || id == "all") ret.Users = UserHelper.RetrieveNewUsers().OrderByDescending(u => u.RegisterTime).ToList();
|
||||
return ret;
|
||||
}
|
||||
|
||||
public class Notifications
|
||||
{
|
||||
public Notifications()
|
||||
{
|
||||
Users = new List<User>();
|
||||
Apps = new List<Exceptions>();
|
||||
Dbs = new List<Exceptions>();
|
||||
Tasks = new List<Task>();
|
||||
Messages = new List<Message>();
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public List<User> Users { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public List<Exceptions> Apps { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public List<Exceptions> Dbs { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public List<Task> Tasks { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public List<Message> Messages { get; set; }
|
||||
/// <summary>
|
||||
/// 获得/设置 消息数量
|
||||
/// </summary>
|
||||
public int MessagesCount { get; set; }
|
||||
/// <summary>
|
||||
/// 获得/设置 新用户数量
|
||||
/// </summary>
|
||||
public int NewUsersCount { get; set; }
|
||||
/// <summary>
|
||||
/// 获取/设置 任务数量
|
||||
/// </summary>
|
||||
public int TasksCount { get; set; }
|
||||
/// <summary>
|
||||
/// 获取/设置 应用程序错误数量
|
||||
/// </summary>
|
||||
public int AppExceptionsCount { get; set; }
|
||||
/// <summary>
|
||||
/// 获取/设置 数据库错误数量
|
||||
/// </summary>
|
||||
public int DbExceptionsCount { get; set; }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,45 @@
|
|||
using Bootstrap.DataAccess;
|
||||
using Longbow.ExceptionManagement;
|
||||
using Longbow.Security.Principal;
|
||||
using System;
|
||||
using System.Collections.Specialized;
|
||||
using System.IO;
|
||||
using System.Web;
|
||||
using System.Web.Http;
|
||||
|
||||
namespace Bootstrap.Admin.Controllers
|
||||
{
|
||||
public class ProfilesController : ApiController
|
||||
{
|
||||
[HttpPost]
|
||||
public string Post()
|
||||
{
|
||||
var ret = string.Empty;
|
||||
var userName = User.Identity.Name;
|
||||
if (LgbPrincipal.IsWebAdmin(userName)) userName = "default";
|
||||
var files = HttpContext.Current.Request.Files;
|
||||
if (files.Count > 0)
|
||||
{
|
||||
var webSiteUrl = DictHelper.RetrieveIconFolderPath().Code;
|
||||
var fileName = string.Format("{0}{1}", userName, Path.GetExtension(files[0].FileName));
|
||||
var fileUrl = string.Format("{0}{1}", webSiteUrl, fileName);
|
||||
var filePath = HttpContext.Current.Server.MapPath(fileUrl);
|
||||
var fileFolder = Path.GetDirectoryName(filePath);
|
||||
try
|
||||
{
|
||||
if (!Directory.Exists(fileFolder)) Directory.CreateDirectory(fileFolder);
|
||||
files[0].SaveAs(filePath);
|
||||
ret = string.Format("{0}?q={1}", Url.Content(fileUrl), DateTime.Now.Ticks);
|
||||
UserHelper.SaveUserIconByName(userName, fileName);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
var nv = new NameValueCollection();
|
||||
nv.Add("UpLoadFileName", filePath);
|
||||
ExceptionManager.Publish(ex, nv);
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,98 @@
|
|||
using Bootstrap.Admin.Models;
|
||||
using Bootstrap.DataAccess;
|
||||
using Longbow.Web.Mvc;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web.Http;
|
||||
|
||||
|
||||
namespace Bootstrap.Admin.Controllers
|
||||
{
|
||||
public class RolesController : ApiController
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
public QueryData<Role> Get([FromUri]QueryRoleOption value)
|
||||
{
|
||||
return value.RetrieveData();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public IEnumerable<Role> Post(int id, [FromBody]JObject value)
|
||||
{
|
||||
var ret = new List<Role>();
|
||||
dynamic json = value;
|
||||
switch ((string)json.type)
|
||||
{
|
||||
case "user":
|
||||
ret = RoleHelper.RetrieveRolesByUserId(id).ToList();
|
||||
break;
|
||||
case "group":
|
||||
ret = RoleHelper.RetrieveRolesByGroupId(id).ToList();
|
||||
break;
|
||||
case "menu":
|
||||
ret = RoleHelper.RetrieveRolesByMenuId(id).ToList();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/// <summary>根据GroupID获取
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPut]
|
||||
public bool Put(int id, [FromBody]JObject value)
|
||||
{
|
||||
var ret = false;
|
||||
dynamic json = value;
|
||||
string roleIds = json.roleIds;
|
||||
switch ((string)json.type)
|
||||
{
|
||||
case "user":
|
||||
ret = RoleHelper.SaveRolesByUserId(id, roleIds);
|
||||
break;
|
||||
case "group":
|
||||
ret = RoleHelper.SaveRolesByGroupId(id, roleIds);
|
||||
break;
|
||||
case "menu":
|
||||
ret = RoleHelper.SavaRolesByMenuId(id, roleIds);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
[HttpPost]
|
||||
public bool Post([FromBody]Role value)
|
||||
{
|
||||
return RoleHelper.SaveRole(value);
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
[HttpDelete]
|
||||
public bool Delete([FromBody]string value)
|
||||
{
|
||||
return RoleHelper.DeleteRole(value);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,35 +0,0 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Web.Http;
|
||||
|
||||
namespace Bootstrap.Admin.Controllers
|
||||
{
|
||||
public class RulesController : ApiController
|
||||
{
|
||||
// GET api/<controller>
|
||||
public IEnumerable<string> Get()
|
||||
{
|
||||
return new string[] { "value1", "value2" };
|
||||
}
|
||||
|
||||
// GET api/<controller>/5
|
||||
public string Get(int id)
|
||||
{
|
||||
return "value";
|
||||
}
|
||||
|
||||
// POST api/<controller>
|
||||
public void Post([FromBody]string value)
|
||||
{
|
||||
}
|
||||
|
||||
// PUT api/<controller>/5
|
||||
public void Put(int id, [FromBody]string value)
|
||||
{
|
||||
}
|
||||
|
||||
// DELETE api/<controller>/5
|
||||
public void Delete(int id)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
using Bootstrap.DataAccess;
|
||||
using Longbow.Caching.Configuration;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web.Http;
|
||||
|
||||
namespace Bootstrap.Admin.Controllers
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public class SettingsController : ApiController
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public bool Post([FromBody]JObject value)
|
||||
{
|
||||
//保存个性化设置
|
||||
dynamic json = value;
|
||||
return DictHelper.SaveSettings((string)json.name, (string)json.code, (string)json.category);
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
[HttpGet]
|
||||
public IEnumerable<CacheListElement> Get([FromUri]JObject value)
|
||||
{
|
||||
var section = CacheListSection.GetSection();
|
||||
return section.Items.Where(item => item.Enabled);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
using Bootstrap.DataAccess;
|
||||
using System.Collections.Generic;
|
||||
using System.Web.Http;
|
||||
|
||||
namespace Bootstrap.Admin.Controllers
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public class TasksController : ApiController
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
public IEnumerable<Task> Get()
|
||||
{
|
||||
return TaskHelper.RetrieveTasks();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,48 +0,0 @@
|
|||
using Bootstrap.Admin.Models;
|
||||
using Bootstrap.DataAccess;
|
||||
using System.Linq;
|
||||
using System.Web.Http;
|
||||
|
||||
namespace Bootstrap.Admin.Controllers
|
||||
{
|
||||
public class TerminalsController : ApiController
|
||||
{
|
||||
// GET api/<controller>
|
||||
[HttpGet]
|
||||
public TerminalsModel Get([FromUri]TerminalsPageOption value)
|
||||
{
|
||||
var ret = new TerminalsModel();
|
||||
ret.RetrieveTerminals(value);
|
||||
return ret;
|
||||
}
|
||||
|
||||
// GET api/<controller>/5
|
||||
[HttpGet]
|
||||
public Terminal Get(int id)
|
||||
{
|
||||
return TerminalHelper.RetrieveTerminals(string.Empty).FirstOrDefault(t => t.ID == id);
|
||||
}
|
||||
|
||||
// POST api/<controller>
|
||||
[HttpPost]
|
||||
public bool Post([FromBody]Terminal value)
|
||||
{
|
||||
return TerminalHelper.SaveTerminal(value);
|
||||
}
|
||||
|
||||
// PUT api/<controller>/5
|
||||
[HttpPut]
|
||||
public bool Put(int id, [FromBody]Terminal value)
|
||||
{
|
||||
return TerminalHelper.SaveTerminal(value);
|
||||
}
|
||||
|
||||
// DELETE api/<controller>/5
|
||||
[HttpDelete]
|
||||
public bool Delete([FromBody]string value)
|
||||
{
|
||||
TerminalHelper.DeleteTerminal(value);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,40 +1,153 @@
|
|||
using Bootstrap.Admin.Models;
|
||||
using Bootstrap.DataAccess;
|
||||
using Longbow.Security.Principal;
|
||||
using Longbow.Web.Mvc;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web.Http;
|
||||
|
||||
namespace Bootstrap.Admin.Controllers
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public class UsersController : ApiController
|
||||
{
|
||||
// GET api/<controller>
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
public UserModel Get()
|
||||
public QueryData<User> Get([FromUri]QueryUserOption value)
|
||||
{
|
||||
return new UserModel()
|
||||
return value.RetrieveData();
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPut]
|
||||
public bool Put([FromBody]User value)
|
||||
{
|
||||
};
|
||||
}
|
||||
|
||||
// GET api/<controller>/5
|
||||
public string Get(int id)
|
||||
if (value.UserStatus == 9)
|
||||
{
|
||||
return "value";
|
||||
// vlaidate userName
|
||||
return UserHelper.RetrieveUsersByName(value.UserName) == null;
|
||||
}
|
||||
|
||||
// POST api/<controller>
|
||||
public void Post([FromBody]string value)
|
||||
var ret = false;
|
||||
if (value.UserName.Equals(User.Identity.Name, System.StringComparison.OrdinalIgnoreCase) || LgbPrincipal.IsAdmin(User))
|
||||
{
|
||||
if (value.UserStatus == 1)
|
||||
ret = UserHelper.SaveUserInfoByName(value);
|
||||
else if (value.UserStatus == 2)
|
||||
ret = UserHelper.ChangePassword(value);
|
||||
}
|
||||
|
||||
// PUT api/<controller>/5
|
||||
public void Put(int id, [FromBody]string value)
|
||||
return ret;
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public IEnumerable<User> Post(int id, [FromBody]JObject value)
|
||||
{
|
||||
}
|
||||
|
||||
// DELETE api/<controller>/5
|
||||
public void Delete(int id)
|
||||
var ret = new List<User>();
|
||||
dynamic json = value;
|
||||
switch ((string)json.type)
|
||||
{
|
||||
case "role":
|
||||
ret = UserHelper.RetrieveUsersByRoleId(id).ToList();
|
||||
break;
|
||||
case "group":
|
||||
ret = UserHelper.RetrieveUsersByGroupId(id).ToList();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="userName"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
public User Get(string userName)
|
||||
{
|
||||
return UserHelper.RetrieveUsersByName(userName);
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
[HttpPost]
|
||||
public bool Post([FromBody]User value)
|
||||
{
|
||||
value.Description = string.Format("管理员{0}创建用户", User.Identity.Name);
|
||||
value.ApprovedBy = User.Identity.Name;
|
||||
return UserHelper.SaveUser(value);
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPut]
|
||||
public bool Put(int id, [FromBody]JObject value)
|
||||
{
|
||||
var ret = false;
|
||||
dynamic json = value;
|
||||
string userIds = json.userIds;
|
||||
switch ((string)json.type)
|
||||
{
|
||||
case "role":
|
||||
ret = UserHelper.SaveUsersByRoleId(id, userIds);
|
||||
break;
|
||||
case "group":
|
||||
ret = UserHelper.SaveUsersByGroupId(id, userIds);
|
||||
break;
|
||||
case "user":
|
||||
// 此时 userIds 存储的信息是操作结果 1 标示同意 0 标示拒绝
|
||||
var user = new User() { Id = id, UserStatus = 2 };
|
||||
if (userIds == "1")
|
||||
{
|
||||
user.ApprovedBy = User.Identity.Name;
|
||||
}
|
||||
else
|
||||
{
|
||||
user.RejectedReason = "无原因";
|
||||
user.RejectedBy = User.Identity.Name;
|
||||
}
|
||||
ret = UserHelper.SaveUser(user);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
[HttpDelete]
|
||||
public bool Delete([FromBody]string value)
|
||||
{
|
||||
return UserHelper.DeleteUser(value);
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[AllowAnonymous]
|
||||
[HttpOptions]
|
||||
public string Options()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,8 +1,8 @@
|
|||
using System;
|
||||
using System.Web;
|
||||
using System.Web.Http;
|
||||
using System.Web.Mvc;
|
||||
using System.Web.Routing;
|
||||
using System.Web.Http;
|
||||
|
||||
namespace Bootstrap.Admin
|
||||
{
|
||||
|
@ -14,6 +14,7 @@ namespace Bootstrap.Admin
|
|||
AreaRegistration.RegisterAllAreas();
|
||||
GlobalConfiguration.Configure(WebApiConfig.Register);
|
||||
RouteConfig.RegisterRoutes(RouteTable.Routes);
|
||||
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,17 +1,37 @@
|
|||
namespace Bootstrap.Admin.Models
|
||||
using Bootstrap.DataAccess;
|
||||
using System.Web;
|
||||
|
||||
namespace Bootstrap.Admin.Models
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public class HeaderBarModel
|
||||
public class HeaderBarModel : ModelBase
|
||||
{
|
||||
public HeaderBarModel()
|
||||
{
|
||||
var user = UserHelper.RetrieveUsersByName(HttpContext.Current.User.Identity.Name);
|
||||
Icon = user.Icon;
|
||||
DisplayName = user.DisplayName;
|
||||
UserName = user.UserName;
|
||||
UserId = user.Id;
|
||||
}
|
||||
public string UserName { get; private set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string UserName { get; set; }
|
||||
public int UserId { get; private set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string BreadcrumbName { get; set; }
|
||||
public string DisplayName { get; private set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string HomeUrl { get; set; }
|
||||
/// <summary>
|
||||
/// 获得/设置 用户头像地址
|
||||
/// </summary>
|
||||
public string Icon { get; private set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
namespace Bootstrap.Admin.Models
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public class LockModel : LoginModel
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string DisplayName { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string ReturnUrl { get; set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
namespace Bootstrap.Admin.Models
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public class LoginModel : ModelBase
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string UserName { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string Password { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string Remember { get; set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
namespace Bootstrap.Admin.Models
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public class MessageCountModel
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public int InboxCount { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public int SendmailCount { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public int MarkCount { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public int TrashCount { get; set; }
|
||||
}
|
||||
}
|
|
@ -1,5 +1,4 @@
|
|||
using Bootstrap.DataAccess;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Bootstrap.Admin.Models
|
||||
{
|
||||
|
@ -11,10 +10,18 @@ namespace Bootstrap.Admin.Models
|
|||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public HeaderBarModel Header { get; set; }
|
||||
public ModelBase()
|
||||
{
|
||||
Title = DictHelper.RetrieveWebTitle();
|
||||
Footer = DictHelper.RetrieveWebFooter();
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public NavigatorBarModel Navigator { get; set; }
|
||||
public string Title { get; private set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string Footer { get; private set; }
|
||||
}
|
||||
}
|
|
@ -1,17 +1,36 @@
|
|||
using Bootstrap.DataAccess;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace Bootstrap.Admin.Models
|
||||
{
|
||||
public class NavigatorBarModel
|
||||
public class NavigatorBarModel : HeaderBarModel
|
||||
{
|
||||
public NavigatorBarModel()
|
||||
public NavigatorBarModel(string url)
|
||||
{
|
||||
Navigator = Menu.RetrieveMenus();
|
||||
Navigations = MenuHelper.RetrieveNavigationsByUserName(UserName).Where(m => m.IsResource == 0);
|
||||
Applications = DictHelper.RetrieveApps();
|
||||
ActiveMenu(null, Navigations.ToList(), url);
|
||||
HomeUrl = "~/Admin/Index";
|
||||
}
|
||||
|
||||
private void ActiveMenu(Menu parent, List<Menu> 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>
|
||||
public List<Menu> Navigator { get; set; }
|
||||
public IEnumerable<Menu> Navigations { get; private set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public IEnumerable<KeyValuePair<string, string>> Applications { get; private set; }
|
||||
}
|
||||
}
|
|
@ -1,29 +0,0 @@
|
|||
namespace Bootstrap.Admin.Models
|
||||
{
|
||||
/// <summary>
|
||||
/// 分页配置项类
|
||||
/// </summary>
|
||||
public class PaginationOption
|
||||
{
|
||||
/// <summary>
|
||||
/// 获得/设置 每页显示行数
|
||||
/// </summary>
|
||||
public int Limit { get; set; }
|
||||
/// <summary>
|
||||
/// 获得/设置 当前页数
|
||||
/// </summary>
|
||||
public int Offset { get; set; }
|
||||
/// <summary>
|
||||
/// 获得/设置 排序列名称
|
||||
/// </summary>
|
||||
public string Sort { get; set; }
|
||||
/// <summary>
|
||||
/// 获得/设置 排序方式 asc/desc
|
||||
/// </summary>
|
||||
public string Order { get; set; }
|
||||
/// <summary>
|
||||
/// 获得/设置 搜索内容
|
||||
/// </summary>
|
||||
public string Search { get; set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
using System.IO;
|
||||
using System.Web;
|
||||
|
||||
namespace Bootstrap.Admin.Models
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public class ProfilesModel : NavigatorBarModel
|
||||
{
|
||||
/// <summary>
|
||||
/// 获得/设置 头像文件大小
|
||||
/// </summary>
|
||||
public long Size { get; private set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="url"></param>
|
||||
public ProfilesModel(string url) : base(url)
|
||||
{
|
||||
var fileName = HttpContext.Current.Server.MapPath(Icon);
|
||||
if (File.Exists(fileName))
|
||||
{
|
||||
Size = new FileInfo(fileName).Length;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|