增加工程:增加Client工程,作为其他工程模板
|
@ -0,0 +1,18 @@
|
||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>netstandard2.0</TargetFramework>
|
||||||
|
<SignAssembly>true</SignAssembly>
|
||||||
|
<AssemblyOriginatorKeyFile>..\Keys\Longbow.Utility.snk</AssemblyOriginatorKeyFile>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="..\Keys\Longbow.Utility.snk" Link="Longbow.Utility.snk" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Bootstrap.Security" Version="1.0.4" />
|
||||||
|
<PackageReference Include="Longbow.Web" Version="1.0.1" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
|
@ -0,0 +1,18 @@
|
||||||
|
using Longbow.Data;
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Bootstrap.Client.DataAccess
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public static class DBAccessManager
|
||||||
|
{
|
||||||
|
private static readonly Lazy<IDBAccess> db = new Lazy<IDBAccess>(() => DBAccessFactory.CreateDB("ba"), true);
|
||||||
|
|
||||||
|
public static IDBAccess SqlDBAccess
|
||||||
|
{
|
||||||
|
get { return db.Value; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,72 @@
|
||||||
|
using Bootstrap.Security;
|
||||||
|
using Longbow.Configuration;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace Bootstrap.Client.DataAccess
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public static class DictHelper
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static string RetrieveProfilesUrl()
|
||||||
|
{
|
||||||
|
return RetrieveAppName("个人中心地址");
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static string RetrieveSettingsUrl()
|
||||||
|
{
|
||||||
|
return RetrieveAppName("系统设置地址");
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static string RetrieveTitle()
|
||||||
|
{
|
||||||
|
return RetrieveAppName("网站标题");
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static string RetrieveFooter()
|
||||||
|
{
|
||||||
|
return RetrieveAppName("网站页脚");
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
private static IEnumerable<BootstrapDict> RetrieveDicts()
|
||||||
|
{
|
||||||
|
return BootstrapDict.RetrieveDicts();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string RetrieveAppName(string name, string defaultValue = "未设置")
|
||||||
|
{
|
||||||
|
var dicts = BootstrapDict.RetrieveDicts();
|
||||||
|
var platName = dicts.FirstOrDefault(d => d.Category == "应用程序" && d.Code == ConfigurationManager.AppSettings["AppId"]).Name;
|
||||||
|
return dicts.FirstOrDefault(d => d.Category == platName && d.Name == name)?.Code ?? $"{name}{defaultValue}";
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 获得网站设置中的当前样式
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static string RetrieveActiveTheme()
|
||||||
|
{
|
||||||
|
var data = RetrieveDicts();
|
||||||
|
var theme = data.Where(d => d.Name == "使用样式" && d.Category == "当前样式" && d.Define == 0).FirstOrDefault();
|
||||||
|
return theme == null ? string.Empty : (theme.Code.Equals("site.css", StringComparison.OrdinalIgnoreCase) ? string.Empty : theme.Code);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,19 +0,0 @@
|
||||||
using System.Web.Mvc;
|
|
||||||
using System.Web.Routing;
|
|
||||||
|
|
||||||
namespace Bootstrap.Client
|
|
||||||
{
|
|
||||||
public class RouteConfig
|
|
||||||
{
|
|
||||||
public static void RegisterRoutes(RouteCollection routes)
|
|
||||||
{
|
|
||||||
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
|
|
||||||
|
|
||||||
routes.MapRoute(
|
|
||||||
name: "Default",
|
|
||||||
url: "{controller}/{action}/{id}",
|
|
||||||
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,21 +0,0 @@
|
||||||
using System.Web.Http;
|
|
||||||
|
|
||||||
namespace Bootstrap.Client
|
|
||||||
{
|
|
||||||
public static class WebApiConfig
|
|
||||||
{
|
|
||||||
public static void Register(HttpConfiguration config)
|
|
||||||
{
|
|
||||||
// Web API configuration and services
|
|
||||||
|
|
||||||
// Web API routes
|
|
||||||
config.MapHttpAttributeRoutes();
|
|
||||||
|
|
||||||
config.Routes.MapHttpRoute(
|
|
||||||
name: "DefaultApi",
|
|
||||||
routeTemplate: "api/{controller}/{id}",
|
|
||||||
defaults: new { id = RouteParameter.Optional }
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,172 +1,25 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||||
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
<TargetFramework>netcoreapp2.1</TargetFramework>
|
||||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
<SignAssembly>true</SignAssembly>
|
||||||
<ProductVersion>
|
<AssemblyOriginatorKeyFile>..\Keys\Longbow.Utility.snk</AssemblyOriginatorKeyFile>
|
||||||
</ProductVersion>
|
<MvcRazorCompileOnPublish>true</MvcRazorCompileOnPublish>
|
||||||
<SchemaVersion>2.0</SchemaVersion>
|
|
||||||
<ProjectGuid>{6B261B2C-9E70-467C-BE76-13C0E280A683}</ProjectGuid>
|
|
||||||
<ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
|
|
||||||
<OutputType>Library</OutputType>
|
|
||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
|
||||||
<RootNamespace>Bootstrap.Client</RootNamespace>
|
|
||||||
<AssemblyName>Bootstrap.Client</AssemblyName>
|
|
||||||
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
|
||||||
<UseIISExpress>true</UseIISExpress>
|
|
||||||
<IISExpressSSLPort />
|
|
||||||
<IISExpressAnonymousAuthentication />
|
|
||||||
<IISExpressWindowsAuthentication />
|
|
||||||
<IISExpressUseClassicPipelineMode />
|
|
||||||
<UseGlobalApplicationHostFile />
|
|
||||||
<NuGetPackageImportStamp>
|
|
||||||
</NuGetPackageImportStamp>
|
|
||||||
<Use64BitIISExpress />
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
|
||||||
<DebugSymbols>true</DebugSymbols>
|
|
||||||
<DebugType>full</DebugType>
|
|
||||||
<Optimize>false</Optimize>
|
|
||||||
<OutputPath>bin\</OutputPath>
|
|
||||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
|
||||||
<DebugType>pdbonly</DebugType>
|
|
||||||
<Optimize>true</Optimize>
|
|
||||||
<OutputPath>bin\</OutputPath>
|
|
||||||
<DefineConstants>TRACE</DefineConstants>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="Bootstrap.Security.Mvc, Version=4.1.0.0, Culture=neutral, PublicKeyToken=c20f2177a7066899, processorArchitecture=MSIL" />
|
<PackageReference Include="Bootstrap.Security.Mvc" Version="1.0.1" />
|
||||||
<Reference Include="Microsoft.CSharp" />
|
<PackageReference Include="Longbow.Logging" Version="1.0.2" />
|
||||||
<Reference Include="Newtonsoft.Json">
|
<PackageReference Include="Longbow.Web" Version="1.0.1" />
|
||||||
<HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
|
<PackageReference Include="Microsoft.AspNetCore.App" />
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Net.Http" />
|
|
||||||
<Reference Include="System.Web.DynamicData" />
|
|
||||||
<Reference Include="System.Web.Entity" />
|
|
||||||
<Reference Include="System.Web.ApplicationServices" />
|
|
||||||
<Reference Include="System.ComponentModel.DataAnnotations" />
|
|
||||||
<Reference Include="System" />
|
|
||||||
<Reference Include="System.Data" />
|
|
||||||
<Reference Include="System.Core" />
|
|
||||||
<Reference Include="System.Data.DataSetExtensions" />
|
|
||||||
<Reference Include="System.Web.Extensions" />
|
|
||||||
<Reference Include="System.Xml.Linq" />
|
|
||||||
<Reference Include="System.Drawing" />
|
|
||||||
<Reference Include="System.Web" />
|
|
||||||
<Reference Include="System.Xml" />
|
|
||||||
<Reference Include="System.Configuration" />
|
|
||||||
<Reference Include="System.Web.Services" />
|
|
||||||
<Reference Include="System.EnterpriseServices" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="System.Web.Razor">
|
<None Include="..\Keys\Longbow.Utility.snk" Link="Longbow.Utility.snk" />
|
||||||
<HintPath>..\packages\Microsoft.AspNet.Razor.3.2.3\lib\net45\System.Web.Razor.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Web.Webpages">
|
|
||||||
<HintPath>..\packages\Microsoft.AspNet.Webpages.3.2.3\lib\net45\System.Web.Webpages.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Web.Webpages.Deployment">
|
|
||||||
<HintPath>..\packages\Microsoft.AspNet.Webpages.3.2.3\lib\net45\System.Web.Webpages.Deployment.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Web.Webpages.Razor">
|
|
||||||
<HintPath>..\packages\Microsoft.AspNet.Webpages.3.2.3\lib\net45\System.Web.Webpages.Razor.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Web.Helpers">
|
|
||||||
<HintPath>..\packages\Microsoft.AspNet.Webpages.3.2.3\lib\net45\System.Web.Helpers.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Microsoft.Web.Infrastructure">
|
|
||||||
<HintPath>..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Web.Mvc">
|
|
||||||
<HintPath>..\packages\Microsoft.AspNet.Mvc.5.2.3\lib\net45\System.Web.Mvc.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>
|
|
||||||
<Reference Include="System.Web.Http">
|
|
||||||
<HintPath>..\packages\Microsoft.AspNet.WebApi.Core.5.2.3\lib\net45\System.Web.Http.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Web.Http.WebHost">
|
|
||||||
<HintPath>..\packages\Microsoft.AspNet.WebApi.WebHost.5.2.3\lib\net45\System.Web.Http.WebHost.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Content Include="Content\css\api.css" />
|
<ProjectReference Include="..\Bootstrap.Client.DataAccess\Bootstrap.Client.DataAccess.csproj" />
|
||||||
<Content Include="Content\css\bootstrap-theme.css" />
|
|
||||||
<Content Include="Content\css\bootstrap.css" />
|
|
||||||
<Content Include="Content\js\bootstrap.js" />
|
|
||||||
<Content Include="Content\js\jquery-1.10.2.js" />
|
|
||||||
<Content Include="Global.asax" />
|
|
||||||
<Content Include="Login\Login.html" />
|
|
||||||
<Content Include="Scripts\apidoc.js" />
|
|
||||||
<Content Include="Content\html\api.html" />
|
|
||||||
<Content Include="Web.config">
|
|
||||||
<SubType>Designer</SubType>
|
|
||||||
</Content>
|
|
||||||
<Content Include="Views\Shared\_Layout.cshtml" />
|
|
||||||
<Content Include="Views\Home\Index.cshtml" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
|
||||||
<Compile Include="App_Start\RouteConfig.cs" />
|
|
||||||
<Compile Include="App_Start\WebApiConfig.cs" />
|
|
||||||
<Compile Include="Controllers\HomeController.cs" />
|
|
||||||
<Compile Include="Global.asax.cs">
|
|
||||||
<DependentUpon>Global.asax</DependentUpon>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Content Include="Views\web.config" />
|
|
||||||
<Content Include="packages.config" />
|
|
||||||
<None Include="Web.Debug.config">
|
|
||||||
<DependentUpon>Web.config</DependentUpon>
|
|
||||||
</None>
|
|
||||||
<None Include="Web.Release.config">
|
|
||||||
<DependentUpon>Web.config</DependentUpon>
|
|
||||||
</None>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Folder Include="App_Data\" />
|
|
||||||
<Folder Include="Models\" />
|
|
||||||
</ItemGroup>
|
|
||||||
<PropertyGroup>
|
|
||||||
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
|
|
||||||
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
|
||||||
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
|
|
||||||
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
|
|
||||||
<ProjectExtensions>
|
|
||||||
<VisualStudio>
|
|
||||||
<FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
|
|
||||||
<WebProjectProperties>
|
|
||||||
<UseIIS>True</UseIIS>
|
|
||||||
<AutoAssignPort>True</AutoAssignPort>
|
|
||||||
<DevelopmentServerPort>53737</DevelopmentServerPort>
|
|
||||||
<DevelopmentServerVPath>/</DevelopmentServerVPath>
|
|
||||||
<IISUrl>http://localhost:3600</IISUrl>
|
|
||||||
<NTLMAuthentication>False</NTLMAuthentication>
|
|
||||||
<UseCustomServer>False</UseCustomServer>
|
|
||||||
<CustomServerUrl>
|
|
||||||
</CustomServerUrl>
|
|
||||||
<SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>
|
|
||||||
</WebProjectProperties>
|
|
||||||
</FlavorProperties>
|
|
||||||
</VisualStudio>
|
|
||||||
</ProjectExtensions>
|
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
|
||||||
Other similar extension points exist, see Microsoft.Common.targets.
|
|
||||||
<Target Name="BeforeBuild">
|
|
||||||
</Target>
|
|
||||||
<Target Name="AfterBuild">
|
|
||||||
</Target>
|
|
||||||
-->
|
|
||||||
</Project>
|
</Project>
|
|
@ -1,35 +0,0 @@
|
||||||
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;
|
|
||||||
}
|
|
|
@ -1,587 +0,0 @@
|
||||||
/*!
|
|
||||||
* Bootstrap v3.3.7 (http://getbootstrap.com)
|
|
||||||
* Copyright 2011-2016 Twitter, Inc.
|
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
|
||||||
*/
|
|
||||||
.btn-default,
|
|
||||||
.btn-primary,
|
|
||||||
.btn-success,
|
|
||||||
.btn-info,
|
|
||||||
.btn-warning,
|
|
||||||
.btn-danger {
|
|
||||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
|
|
||||||
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
|
|
||||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
|
|
||||||
}
|
|
||||||
.btn-default:active,
|
|
||||||
.btn-primary:active,
|
|
||||||
.btn-success:active,
|
|
||||||
.btn-info:active,
|
|
||||||
.btn-warning:active,
|
|
||||||
.btn-danger:active,
|
|
||||||
.btn-default.active,
|
|
||||||
.btn-primary.active,
|
|
||||||
.btn-success.active,
|
|
||||||
.btn-info.active,
|
|
||||||
.btn-warning.active,
|
|
||||||
.btn-danger.active {
|
|
||||||
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
|
|
||||||
box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
|
|
||||||
}
|
|
||||||
.btn-default.disabled,
|
|
||||||
.btn-primary.disabled,
|
|
||||||
.btn-success.disabled,
|
|
||||||
.btn-info.disabled,
|
|
||||||
.btn-warning.disabled,
|
|
||||||
.btn-danger.disabled,
|
|
||||||
.btn-default[disabled],
|
|
||||||
.btn-primary[disabled],
|
|
||||||
.btn-success[disabled],
|
|
||||||
.btn-info[disabled],
|
|
||||||
.btn-warning[disabled],
|
|
||||||
.btn-danger[disabled],
|
|
||||||
fieldset[disabled] .btn-default,
|
|
||||||
fieldset[disabled] .btn-primary,
|
|
||||||
fieldset[disabled] .btn-success,
|
|
||||||
fieldset[disabled] .btn-info,
|
|
||||||
fieldset[disabled] .btn-warning,
|
|
||||||
fieldset[disabled] .btn-danger {
|
|
||||||
-webkit-box-shadow: none;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
.btn-default .badge,
|
|
||||||
.btn-primary .badge,
|
|
||||||
.btn-success .badge,
|
|
||||||
.btn-info .badge,
|
|
||||||
.btn-warning .badge,
|
|
||||||
.btn-danger .badge {
|
|
||||||
text-shadow: none;
|
|
||||||
}
|
|
||||||
.btn:active,
|
|
||||||
.btn.active {
|
|
||||||
background-image: none;
|
|
||||||
}
|
|
||||||
.btn-default {
|
|
||||||
text-shadow: 0 1px 0 #fff;
|
|
||||||
background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
|
|
||||||
background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
|
|
||||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
|
|
||||||
background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
border-color: #dbdbdb;
|
|
||||||
border-color: #ccc;
|
|
||||||
}
|
|
||||||
.btn-default:hover,
|
|
||||||
.btn-default:focus {
|
|
||||||
background-color: #e0e0e0;
|
|
||||||
background-position: 0 -15px;
|
|
||||||
}
|
|
||||||
.btn-default:active,
|
|
||||||
.btn-default.active {
|
|
||||||
background-color: #e0e0e0;
|
|
||||||
border-color: #dbdbdb;
|
|
||||||
}
|
|
||||||
.btn-default.disabled,
|
|
||||||
.btn-default[disabled],
|
|
||||||
fieldset[disabled] .btn-default,
|
|
||||||
.btn-default.disabled:hover,
|
|
||||||
.btn-default[disabled]:hover,
|
|
||||||
fieldset[disabled] .btn-default:hover,
|
|
||||||
.btn-default.disabled:focus,
|
|
||||||
.btn-default[disabled]:focus,
|
|
||||||
fieldset[disabled] .btn-default:focus,
|
|
||||||
.btn-default.disabled.focus,
|
|
||||||
.btn-default[disabled].focus,
|
|
||||||
fieldset[disabled] .btn-default.focus,
|
|
||||||
.btn-default.disabled:active,
|
|
||||||
.btn-default[disabled]:active,
|
|
||||||
fieldset[disabled] .btn-default:active,
|
|
||||||
.btn-default.disabled.active,
|
|
||||||
.btn-default[disabled].active,
|
|
||||||
fieldset[disabled] .btn-default.active {
|
|
||||||
background-color: #e0e0e0;
|
|
||||||
background-image: none;
|
|
||||||
}
|
|
||||||
.btn-primary {
|
|
||||||
background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);
|
|
||||||
background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);
|
|
||||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));
|
|
||||||
background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
border-color: #245580;
|
|
||||||
}
|
|
||||||
.btn-primary:hover,
|
|
||||||
.btn-primary:focus {
|
|
||||||
background-color: #265a88;
|
|
||||||
background-position: 0 -15px;
|
|
||||||
}
|
|
||||||
.btn-primary:active,
|
|
||||||
.btn-primary.active {
|
|
||||||
background-color: #265a88;
|
|
||||||
border-color: #245580;
|
|
||||||
}
|
|
||||||
.btn-primary.disabled,
|
|
||||||
.btn-primary[disabled],
|
|
||||||
fieldset[disabled] .btn-primary,
|
|
||||||
.btn-primary.disabled:hover,
|
|
||||||
.btn-primary[disabled]:hover,
|
|
||||||
fieldset[disabled] .btn-primary:hover,
|
|
||||||
.btn-primary.disabled:focus,
|
|
||||||
.btn-primary[disabled]:focus,
|
|
||||||
fieldset[disabled] .btn-primary:focus,
|
|
||||||
.btn-primary.disabled.focus,
|
|
||||||
.btn-primary[disabled].focus,
|
|
||||||
fieldset[disabled] .btn-primary.focus,
|
|
||||||
.btn-primary.disabled:active,
|
|
||||||
.btn-primary[disabled]:active,
|
|
||||||
fieldset[disabled] .btn-primary:active,
|
|
||||||
.btn-primary.disabled.active,
|
|
||||||
.btn-primary[disabled].active,
|
|
||||||
fieldset[disabled] .btn-primary.active {
|
|
||||||
background-color: #265a88;
|
|
||||||
background-image: none;
|
|
||||||
}
|
|
||||||
.btn-success {
|
|
||||||
background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
|
|
||||||
background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
|
|
||||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
|
|
||||||
background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
border-color: #3e8f3e;
|
|
||||||
}
|
|
||||||
.btn-success:hover,
|
|
||||||
.btn-success:focus {
|
|
||||||
background-color: #419641;
|
|
||||||
background-position: 0 -15px;
|
|
||||||
}
|
|
||||||
.btn-success:active,
|
|
||||||
.btn-success.active {
|
|
||||||
background-color: #419641;
|
|
||||||
border-color: #3e8f3e;
|
|
||||||
}
|
|
||||||
.btn-success.disabled,
|
|
||||||
.btn-success[disabled],
|
|
||||||
fieldset[disabled] .btn-success,
|
|
||||||
.btn-success.disabled:hover,
|
|
||||||
.btn-success[disabled]:hover,
|
|
||||||
fieldset[disabled] .btn-success:hover,
|
|
||||||
.btn-success.disabled:focus,
|
|
||||||
.btn-success[disabled]:focus,
|
|
||||||
fieldset[disabled] .btn-success:focus,
|
|
||||||
.btn-success.disabled.focus,
|
|
||||||
.btn-success[disabled].focus,
|
|
||||||
fieldset[disabled] .btn-success.focus,
|
|
||||||
.btn-success.disabled:active,
|
|
||||||
.btn-success[disabled]:active,
|
|
||||||
fieldset[disabled] .btn-success:active,
|
|
||||||
.btn-success.disabled.active,
|
|
||||||
.btn-success[disabled].active,
|
|
||||||
fieldset[disabled] .btn-success.active {
|
|
||||||
background-color: #419641;
|
|
||||||
background-image: none;
|
|
||||||
}
|
|
||||||
.btn-info {
|
|
||||||
background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
|
|
||||||
background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
|
|
||||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
|
|
||||||
background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
border-color: #28a4c9;
|
|
||||||
}
|
|
||||||
.btn-info:hover,
|
|
||||||
.btn-info:focus {
|
|
||||||
background-color: #2aabd2;
|
|
||||||
background-position: 0 -15px;
|
|
||||||
}
|
|
||||||
.btn-info:active,
|
|
||||||
.btn-info.active {
|
|
||||||
background-color: #2aabd2;
|
|
||||||
border-color: #28a4c9;
|
|
||||||
}
|
|
||||||
.btn-info.disabled,
|
|
||||||
.btn-info[disabled],
|
|
||||||
fieldset[disabled] .btn-info,
|
|
||||||
.btn-info.disabled:hover,
|
|
||||||
.btn-info[disabled]:hover,
|
|
||||||
fieldset[disabled] .btn-info:hover,
|
|
||||||
.btn-info.disabled:focus,
|
|
||||||
.btn-info[disabled]:focus,
|
|
||||||
fieldset[disabled] .btn-info:focus,
|
|
||||||
.btn-info.disabled.focus,
|
|
||||||
.btn-info[disabled].focus,
|
|
||||||
fieldset[disabled] .btn-info.focus,
|
|
||||||
.btn-info.disabled:active,
|
|
||||||
.btn-info[disabled]:active,
|
|
||||||
fieldset[disabled] .btn-info:active,
|
|
||||||
.btn-info.disabled.active,
|
|
||||||
.btn-info[disabled].active,
|
|
||||||
fieldset[disabled] .btn-info.active {
|
|
||||||
background-color: #2aabd2;
|
|
||||||
background-image: none;
|
|
||||||
}
|
|
||||||
.btn-warning {
|
|
||||||
background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
|
|
||||||
background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
|
|
||||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
|
|
||||||
background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
border-color: #e38d13;
|
|
||||||
}
|
|
||||||
.btn-warning:hover,
|
|
||||||
.btn-warning:focus {
|
|
||||||
background-color: #eb9316;
|
|
||||||
background-position: 0 -15px;
|
|
||||||
}
|
|
||||||
.btn-warning:active,
|
|
||||||
.btn-warning.active {
|
|
||||||
background-color: #eb9316;
|
|
||||||
border-color: #e38d13;
|
|
||||||
}
|
|
||||||
.btn-warning.disabled,
|
|
||||||
.btn-warning[disabled],
|
|
||||||
fieldset[disabled] .btn-warning,
|
|
||||||
.btn-warning.disabled:hover,
|
|
||||||
.btn-warning[disabled]:hover,
|
|
||||||
fieldset[disabled] .btn-warning:hover,
|
|
||||||
.btn-warning.disabled:focus,
|
|
||||||
.btn-warning[disabled]:focus,
|
|
||||||
fieldset[disabled] .btn-warning:focus,
|
|
||||||
.btn-warning.disabled.focus,
|
|
||||||
.btn-warning[disabled].focus,
|
|
||||||
fieldset[disabled] .btn-warning.focus,
|
|
||||||
.btn-warning.disabled:active,
|
|
||||||
.btn-warning[disabled]:active,
|
|
||||||
fieldset[disabled] .btn-warning:active,
|
|
||||||
.btn-warning.disabled.active,
|
|
||||||
.btn-warning[disabled].active,
|
|
||||||
fieldset[disabled] .btn-warning.active {
|
|
||||||
background-color: #eb9316;
|
|
||||||
background-image: none;
|
|
||||||
}
|
|
||||||
.btn-danger {
|
|
||||||
background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
|
|
||||||
background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
|
|
||||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
|
|
||||||
background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
border-color: #b92c28;
|
|
||||||
}
|
|
||||||
.btn-danger:hover,
|
|
||||||
.btn-danger:focus {
|
|
||||||
background-color: #c12e2a;
|
|
||||||
background-position: 0 -15px;
|
|
||||||
}
|
|
||||||
.btn-danger:active,
|
|
||||||
.btn-danger.active {
|
|
||||||
background-color: #c12e2a;
|
|
||||||
border-color: #b92c28;
|
|
||||||
}
|
|
||||||
.btn-danger.disabled,
|
|
||||||
.btn-danger[disabled],
|
|
||||||
fieldset[disabled] .btn-danger,
|
|
||||||
.btn-danger.disabled:hover,
|
|
||||||
.btn-danger[disabled]:hover,
|
|
||||||
fieldset[disabled] .btn-danger:hover,
|
|
||||||
.btn-danger.disabled:focus,
|
|
||||||
.btn-danger[disabled]:focus,
|
|
||||||
fieldset[disabled] .btn-danger:focus,
|
|
||||||
.btn-danger.disabled.focus,
|
|
||||||
.btn-danger[disabled].focus,
|
|
||||||
fieldset[disabled] .btn-danger.focus,
|
|
||||||
.btn-danger.disabled:active,
|
|
||||||
.btn-danger[disabled]:active,
|
|
||||||
fieldset[disabled] .btn-danger:active,
|
|
||||||
.btn-danger.disabled.active,
|
|
||||||
.btn-danger[disabled].active,
|
|
||||||
fieldset[disabled] .btn-danger.active {
|
|
||||||
background-color: #c12e2a;
|
|
||||||
background-image: none;
|
|
||||||
}
|
|
||||||
.thumbnail,
|
|
||||||
.img-thumbnail {
|
|
||||||
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
|
|
||||||
box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
|
|
||||||
}
|
|
||||||
.dropdown-menu > li > a:hover,
|
|
||||||
.dropdown-menu > li > a:focus {
|
|
||||||
background-color: #e8e8e8;
|
|
||||||
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
|
|
||||||
background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
|
|
||||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
|
|
||||||
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
}
|
|
||||||
.dropdown-menu > .active > a,
|
|
||||||
.dropdown-menu > .active > a:hover,
|
|
||||||
.dropdown-menu > .active > a:focus {
|
|
||||||
background-color: #2e6da4;
|
|
||||||
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
|
|
||||||
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
|
|
||||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
|
|
||||||
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
}
|
|
||||||
.navbar-default {
|
|
||||||
background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
|
|
||||||
background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
|
|
||||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
|
|
||||||
background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
border-radius: 4px;
|
|
||||||
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
|
|
||||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
|
|
||||||
}
|
|
||||||
.navbar-default .navbar-nav > .open > a,
|
|
||||||
.navbar-default .navbar-nav > .active > a {
|
|
||||||
background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
|
|
||||||
background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
|
|
||||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
|
|
||||||
background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
|
|
||||||
box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
|
|
||||||
}
|
|
||||||
.navbar-brand,
|
|
||||||
.navbar-nav > li > a {
|
|
||||||
text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
|
|
||||||
}
|
|
||||||
.navbar-inverse {
|
|
||||||
background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
|
|
||||||
background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
|
|
||||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
|
|
||||||
background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
border-radius: 4px;
|
|
||||||
}
|
|
||||||
.navbar-inverse .navbar-nav > .open > a,
|
|
||||||
.navbar-inverse .navbar-nav > .active > a {
|
|
||||||
background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);
|
|
||||||
background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
|
|
||||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
|
|
||||||
background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
|
|
||||||
box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
|
|
||||||
}
|
|
||||||
.navbar-inverse .navbar-brand,
|
|
||||||
.navbar-inverse .navbar-nav > li > a {
|
|
||||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
|
|
||||||
}
|
|
||||||
.navbar-static-top,
|
|
||||||
.navbar-fixed-top,
|
|
||||||
.navbar-fixed-bottom {
|
|
||||||
border-radius: 0;
|
|
||||||
}
|
|
||||||
@media (max-width: 767px) {
|
|
||||||
.navbar .navbar-nav .open .dropdown-menu > .active > a,
|
|
||||||
.navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
|
|
||||||
.navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
|
|
||||||
color: #fff;
|
|
||||||
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
|
|
||||||
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
|
|
||||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
|
|
||||||
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.alert {
|
|
||||||
text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
|
|
||||||
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
|
|
||||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
|
|
||||||
}
|
|
||||||
.alert-success {
|
|
||||||
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
|
|
||||||
background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
|
|
||||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
|
|
||||||
background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
border-color: #b2dba1;
|
|
||||||
}
|
|
||||||
.alert-info {
|
|
||||||
background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
|
|
||||||
background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
|
|
||||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
|
|
||||||
background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
border-color: #9acfea;
|
|
||||||
}
|
|
||||||
.alert-warning {
|
|
||||||
background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
|
|
||||||
background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
|
|
||||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
|
|
||||||
background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
border-color: #f5e79e;
|
|
||||||
}
|
|
||||||
.alert-danger {
|
|
||||||
background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
|
|
||||||
background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
|
|
||||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
|
|
||||||
background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
border-color: #dca7a7;
|
|
||||||
}
|
|
||||||
.progress {
|
|
||||||
background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
|
|
||||||
background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
|
|
||||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
|
|
||||||
background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
}
|
|
||||||
.progress-bar {
|
|
||||||
background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);
|
|
||||||
background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);
|
|
||||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));
|
|
||||||
background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
}
|
|
||||||
.progress-bar-success {
|
|
||||||
background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
|
|
||||||
background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
|
|
||||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
|
|
||||||
background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
}
|
|
||||||
.progress-bar-info {
|
|
||||||
background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
|
|
||||||
background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
|
|
||||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
|
|
||||||
background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
}
|
|
||||||
.progress-bar-warning {
|
|
||||||
background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
|
|
||||||
background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
|
|
||||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
|
|
||||||
background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
}
|
|
||||||
.progress-bar-danger {
|
|
||||||
background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
|
|
||||||
background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
|
|
||||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
|
|
||||||
background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
}
|
|
||||||
.progress-bar-striped {
|
|
||||||
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
|
|
||||||
background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
|
|
||||||
background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
|
|
||||||
}
|
|
||||||
.list-group {
|
|
||||||
border-radius: 4px;
|
|
||||||
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
|
|
||||||
box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
|
|
||||||
}
|
|
||||||
.list-group-item.active,
|
|
||||||
.list-group-item.active:hover,
|
|
||||||
.list-group-item.active:focus {
|
|
||||||
text-shadow: 0 -1px 0 #286090;
|
|
||||||
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);
|
|
||||||
background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);
|
|
||||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));
|
|
||||||
background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
border-color: #2b669a;
|
|
||||||
}
|
|
||||||
.list-group-item.active .badge,
|
|
||||||
.list-group-item.active:hover .badge,
|
|
||||||
.list-group-item.active:focus .badge {
|
|
||||||
text-shadow: none;
|
|
||||||
}
|
|
||||||
.panel {
|
|
||||||
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
|
|
||||||
box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
|
|
||||||
}
|
|
||||||
.panel-default > .panel-heading {
|
|
||||||
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
|
|
||||||
background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
|
|
||||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
|
|
||||||
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
}
|
|
||||||
.panel-primary > .panel-heading {
|
|
||||||
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
|
|
||||||
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
|
|
||||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
|
|
||||||
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
}
|
|
||||||
.panel-success > .panel-heading {
|
|
||||||
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
|
|
||||||
background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
|
|
||||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
|
|
||||||
background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
}
|
|
||||||
.panel-info > .panel-heading {
|
|
||||||
background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
|
|
||||||
background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
|
|
||||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
|
|
||||||
background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
}
|
|
||||||
.panel-warning > .panel-heading {
|
|
||||||
background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
|
|
||||||
background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
|
|
||||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
|
|
||||||
background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
}
|
|
||||||
.panel-danger > .panel-heading {
|
|
||||||
background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
|
|
||||||
background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
|
|
||||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
|
|
||||||
background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
}
|
|
||||||
.well {
|
|
||||||
background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
|
|
||||||
background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
|
|
||||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
|
|
||||||
background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
border-color: #dcdcdc;
|
|
||||||
-webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
|
|
||||||
box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
|
|
||||||
}
|
|
||||||
/*# sourceMappingURL=bootstrap-theme.css.map */
|
|
|
@ -1,39 +0,0 @@
|
||||||
<!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="../css/bootstrap.css" rel="stylesheet">
|
|
||||||
<link href="../css/bootstrap-theme.css" rel="stylesheet">
|
|
||||||
<link href="../css/api.css" rel="stylesheet">
|
|
||||||
<!--[if lte IE 9 ]>
|
|
||||||
<link href="../Content/css/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="../js/jquery-1.10.2.js"></script>
|
|
||||||
<!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
|
|
||||||
<script src="../js/bootstrap.js"></script>
|
|
||||||
<script src="../../Scripts/apidoc.js"></script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
using Longbow.Configuration;
|
||||||
|
using Microsoft.AspNetCore.Authentication.Cookies;
|
||||||
|
using Microsoft.AspNetCore.Authorization;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Web;
|
||||||
|
|
||||||
|
namespace Bootstrap.Client.Controllers
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Account controller.
|
||||||
|
/// </summary>
|
||||||
|
[AllowAnonymous]
|
||||||
|
public class AccountController : Controller
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public ActionResult Login()
|
||||||
|
{
|
||||||
|
var originUrl = Request.Query[CookieAuthenticationDefaults.ReturnUrlParameter].FirstOrDefault();
|
||||||
|
if (!string.IsNullOrEmpty(originUrl)) originUrl = $"?{CookieAuthenticationDefaults.ReturnUrlParameter}={HttpUtility.UrlEncode(originUrl)}";
|
||||||
|
return Redirect($"{ConfigurationManager.AppSettings["AuthHost"]}{CookieAuthenticationDefaults.LoginPath}{originUrl}");
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Logout this instance.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>The logout.</returns>
|
||||||
|
public IActionResult Logout()
|
||||||
|
{
|
||||||
|
return Redirect($"{ConfigurationManager.AppSettings["AuthHost"]}{CookieAuthenticationDefaults.LogoutPath}");
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Accesses the denied.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>The denied.</returns>
|
||||||
|
[ResponseCache(Duration = 600)]
|
||||||
|
public ActionResult AccessDenied()
|
||||||
|
{
|
||||||
|
return View();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,13 +1,32 @@
|
||||||
using System.Web.Mvc;
|
using Bootstrap.Client.Models;
|
||||||
|
using Microsoft.AspNetCore.Authorization;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using System.Diagnostics;
|
||||||
|
|
||||||
namespace Bootstrap.Client.Controllers
|
namespace Bootstrap.Client.Controllers
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
public class HomeController : Controller
|
public class HomeController : Controller
|
||||||
{
|
{
|
||||||
// GET: Home
|
/// <summary>
|
||||||
public ActionResult Index()
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public IActionResult Index()
|
||||||
{
|
{
|
||||||
return View();
|
return View(new NavigatorBarModel(this));
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
|
||||||
|
[AllowAnonymous]
|
||||||
|
public IActionResult Error(int id)
|
||||||
|
{
|
||||||
|
return id == 404 ? View("NotFound") : View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,65 +0,0 @@
|
||||||
using Bootstrap.Models;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net;
|
|
||||||
using System.Net.Http;
|
|
||||||
using System.Web.Http;
|
|
||||||
using System.Web.Mvc;
|
|
||||||
|
|
||||||
namespace Bootstrap.Controllers
|
|
||||||
{
|
|
||||||
public class TestController : ApiController
|
|
||||||
{
|
|
||||||
// GET api/<controller>
|
|
||||||
public Dummy Get(int limit, int offset, string name, string price, string sort, string order)
|
|
||||||
{
|
|
||||||
var p = new TerminalsModel();
|
|
||||||
var ret = new List<TerminalsModel>();
|
|
||||||
Random rnd = new Random();
|
|
||||||
for (int index = 1; index < 1000; index++)
|
|
||||||
{
|
|
||||||
ret.Add(new TerminalsModel() { Id = index.ToString(), Name = string.Format("Argo-{0:D4}", index), Price = index.ToString() });
|
|
||||||
}
|
|
||||||
if (!string.IsNullOrEmpty(name)) ret = ret.Where(n => n.Name.Contains(name)).ToList();
|
|
||||||
if (!string.IsNullOrEmpty(price)) ret = ret.Where(n => n.Price.Contains(price)).ToList();
|
|
||||||
if (!string.IsNullOrEmpty(sort))
|
|
||||||
{
|
|
||||||
if (sort.Equals("Name")) { ret = order == "desc" ? ret.OrderByDescending(n => n.Name).ToList() : ret.OrderBy(n => n.Name).ToList(); }
|
|
||||||
if (sort.Equals("Price")) { ret = order == "desc" ? ret.OrderByDescending(n => n.Price).ToList() : ret.OrderBy(n => n.Price).ToList(); }
|
|
||||||
}
|
|
||||||
var total = ret.Count;
|
|
||||||
var rows = ret.Skip(offset).Take(limit).ToList();
|
|
||||||
return new Dummy() { total = total, rows = rows };
|
|
||||||
}
|
|
||||||
|
|
||||||
public class Dummy
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
// GET api/<controller>/5
|
|
||||||
public string Get(int id)
|
|
||||||
{
|
|
||||||
return "value";
|
|
||||||
}
|
|
||||||
|
|
||||||
// POST api/<controller>
|
|
||||||
public string Post([FromBody]string value)
|
|
||||||
{
|
|
||||||
return "value";
|
|
||||||
}
|
|
||||||
|
|
||||||
// PUT api/<controller>/5
|
|
||||||
public void Put(int id, [FromBody]string value)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
[System.Web.Mvc.HttpDelete]
|
|
||||||
// DELETE api/<controller>/5
|
|
||||||
public void Delete(int id)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1 +0,0 @@
|
||||||
<%@ Application Codebehind="Global.asax.cs" Inherits="Bootstrap.Client.Global" Language="C#" %>
|
|
|
@ -1,19 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.Web;
|
|
||||||
using System.Web.Http;
|
|
||||||
using System.Web.Mvc;
|
|
||||||
using System.Web.Routing;
|
|
||||||
|
|
||||||
namespace Bootstrap.Client
|
|
||||||
{
|
|
||||||
public class Global : HttpApplication
|
|
||||||
{
|
|
||||||
void Application_Start(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
// Code that runs on application startup
|
|
||||||
AreaRegistration.RegisterAllAreas();
|
|
||||||
GlobalConfiguration.Configure(WebApiConfig.Register);
|
|
||||||
RouteConfig.RegisterRoutes(RouteTable.Routes);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,10 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
||||||
<head>
|
|
||||||
<title></title>
|
|
||||||
<meta http-equiv="refresh" content="1; url=http://localhost:53233/Home/Login" />
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,11 +1,17 @@
|
||||||
using System;
|
|
||||||
|
|
||||||
namespace Bootstrap.Client.Models
|
namespace Bootstrap.Client.Models
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
public class ErrorViewModel
|
public class ErrorViewModel
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
public string RequestId { get; set; }
|
public string RequestId { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
|
public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,47 @@
|
||||||
|
using Bootstrap.Client.DataAccess;
|
||||||
|
using Bootstrap.Security;
|
||||||
|
using System.Security.Principal;
|
||||||
|
|
||||||
|
namespace Bootstrap.Client.Models
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public class HeaderBarModel : ModelBase
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="identity"></param>
|
||||||
|
public HeaderBarModel(IIdentity identity)
|
||||||
|
{
|
||||||
|
var user = BootstrapUser.RetrieveUserByUserName(identity.Name);
|
||||||
|
Icon = user.Icon;
|
||||||
|
DisplayName = user.DisplayName;
|
||||||
|
UserName = user.UserName;
|
||||||
|
SettingsUrl = DictHelper.RetrieveSettingsUrl();
|
||||||
|
ProfilesUrl = DictHelper.RetrieveProfilesUrl();
|
||||||
|
if (!string.IsNullOrEmpty(user.Css)) Theme = user.Css;
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public string UserName { get; }
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public string DisplayName { get; }
|
||||||
|
/// <summary>
|
||||||
|
/// 获得/设置 用户头像地址
|
||||||
|
/// </summary>
|
||||||
|
public string Icon { get; }
|
||||||
|
/// <summary>
|
||||||
|
/// 获得/设置 设置网址
|
||||||
|
/// </summary>
|
||||||
|
public string SettingsUrl { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 获得/设置 个人中心网址
|
||||||
|
/// </summary>
|
||||||
|
public string ProfilesUrl { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
using Bootstrap.Client.DataAccess;
|
||||||
|
|
||||||
|
namespace Bootstrap.Client.Models
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public class ModelBase
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public ModelBase()
|
||||||
|
{
|
||||||
|
Title = DictHelper.RetrieveTitle();
|
||||||
|
Footer = DictHelper.RetrieveFooter();
|
||||||
|
Theme = DictHelper.RetrieveActiveTheme();
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public string Title { get; private set; }
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public string Footer { get; private set; }
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public string Theme { get; protected set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
using Bootstrap.Security;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace Bootstrap.Client.Models
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public class NavigatorBarModel : HeaderBarModel
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="controller"></param>
|
||||||
|
public NavigatorBarModel(ControllerBase controller) : base(controller.User.Identity)
|
||||||
|
{
|
||||||
|
Navigations = BootstrapMenu.RetrieveAppMenus(UserName, $"~/{controller.ControllerContext.ActionDescriptor.ControllerName}/{controller.ControllerContext.ActionDescriptor.ActionName}");
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public IEnumerable<BootstrapMenu> Navigations { get; private set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,36 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.Reflection;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
|
|
||||||
// General Information about an assembly is controlled through the following
|
|
||||||
// set of attributes. Change these attribute values to modify the information
|
|
||||||
// associated with an assembly.
|
|
||||||
[assembly: AssemblyTitle("Bootstrap Client")]
|
|
||||||
[assembly: AssemblyDescription("")]
|
|
||||||
[assembly: AssemblyConfiguration("")]
|
|
||||||
[assembly: AssemblyCompany("")]
|
|
||||||
[assembly: AssemblyProduct("Bootstrap Client Demo")]
|
|
||||||
[assembly: AssemblyCopyright("Copyright © 2016")]
|
|
||||||
[assembly: AssemblyTrademark("")]
|
|
||||||
[assembly: AssemblyCulture("")]
|
|
||||||
|
|
||||||
// Setting ComVisible to false makes the types in this assembly not visible
|
|
||||||
// to COM components. If you need to access a type in this assembly from
|
|
||||||
// COM, set the ComVisible attribute to true on that type.
|
|
||||||
[assembly: ComVisible(false)]
|
|
||||||
[assembly: CLSCompliant(true)]
|
|
||||||
|
|
||||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
|
||||||
[assembly: Guid("D77FF1C6-E112-486F-88C2-C473420AE316")]
|
|
||||||
|
|
||||||
// Version information for an assembly consists of the following four values:
|
|
||||||
//
|
|
||||||
// Major Version
|
|
||||||
// Minor Version
|
|
||||||
// Build Number
|
|
||||||
// Revision
|
|
||||||
//
|
|
||||||
// You can specify all the values or you can default the Revision and Build Numbers
|
|
||||||
// by using the '*' as shown below:
|
|
||||||
[assembly: AssemblyVersion("1.0.0.0")]
|
|
||||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
|
|
@ -1,10 +1,10 @@
|
||||||
{
|
{
|
||||||
"iisSettings": {
|
"iisSettings": {
|
||||||
"windowsAuthentication": false,
|
"windowsAuthentication": false,
|
||||||
"anonymousAuthentication": true,
|
"anonymousAuthentication": true,
|
||||||
"iisExpress": {
|
"iisExpress": {
|
||||||
"applicationUrl": "http://localhost:49185",
|
"applicationUrl": "http://localhost:49185",
|
||||||
"sslPort": 44323
|
"sslPort": 0
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"profiles": {
|
"profiles": {
|
||||||
|
@ -12,16 +12,17 @@
|
||||||
"commandName": "IISExpress",
|
"commandName": "IISExpress",
|
||||||
"launchBrowser": true,
|
"launchBrowser": true,
|
||||||
"environmentVariables": {
|
"environmentVariables": {
|
||||||
|
"DOTNET_USE_POLLING_FILE_WATCHER": "true",
|
||||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"BootstrapAdmin.Client": {
|
"Bootstrap.Client": {
|
||||||
"commandName": "Project",
|
"commandName": "Project",
|
||||||
"launchBrowser": true,
|
"launchBrowser": true,
|
||||||
"applicationUrl": "https://localhost:5001;http://localhost:5000",
|
|
||||||
"environmentVariables": {
|
"environmentVariables": {
|
||||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||||
}
|
},
|
||||||
|
"applicationUrl": "https://localhost:5001;http://localhost:5000"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,125 +0,0 @@
|
||||||
$(function () {
|
|
||||||
$.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;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
var ajax = function (options) {
|
|
||||||
options = $.extend({
|
|
||||||
test: false,
|
|
||||||
div: undefined,
|
|
||||||
anonymous: false,
|
|
||||||
title: '未录入',
|
|
||||||
url: '',
|
|
||||||
method: 'get',
|
|
||||||
data: '',
|
|
||||||
headers: {},
|
|
||||||
success: function (result) {
|
|
||||||
},
|
|
||||||
error: function (textStatus, errorThrown) {
|
|
||||||
}
|
|
||||||
}, options);
|
|
||||||
if (options.url == '') {
|
|
||||||
document.writeln("请求地址丢失!");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
$.ajax({
|
|
||||||
url: 'http://localhost:53233/' + options.url,
|
|
||||||
data: options.data,
|
|
||||||
type: options.method,
|
|
||||||
headers: options.headers,
|
|
||||||
success: function (result) {
|
|
||||||
if (!options.test) {
|
|
||||||
var $body = $('#main-content');
|
|
||||||
$body.append('<section></section>');
|
|
||||||
var $section = $body.find('section').last();
|
|
||||||
$section.append($.format('<h3>{0}</h3>', options.title));
|
|
||||||
$section.append($.format('<div><label class="control-label">请求地址</label><div>{0}</div></div>', options.url));
|
|
||||||
$section.append($.format('<div><label class="control-label">允许匿名</label><div>{0}</div></div>', options.anonymous ? "允许" : "不允许"));
|
|
||||||
$section.append($.format('<div><label class="control-label">Headers</label><div>{0}</div></div>', JSON.stringify(options.headers)));
|
|
||||||
$section.append($.format('<div><label class="control-label">HTTP方法</label><div>{0}</div></div>', options.method));
|
|
||||||
$section.append($.format('<div><label class="control-label">传递参数</label><div>{0}</div></div>', JSON.stringify(options.data)));
|
|
||||||
$section.append($.format('<div><label class="control-label">返回值</label><div>{0}</div></div>', JSON.stringify(result)));
|
|
||||||
$section.append('<div><label class="control-label">试一试</label></div>');
|
|
||||||
$section.append($.format('<div class="input-group"><input type="text" class="form-control" value=\'{1}\' data-val=\'{0}\' /><span class="input-group-btn"><button class="btn btn-default btn-success" type="button">试一试</button></span></div>', JSON.stringify(options), JSON.stringify(options.data)));
|
|
||||||
$section.append('<div class="test"></div>')
|
|
||||||
options.success(result);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (options.div) {
|
|
||||||
options.div.html($.format('<label class="control-label">测试结果:</label><div>{0}</div>', JSON.stringify(result))).show();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
error: function (XMLHttpRequest, textStatus, errorThrown) {
|
|
||||||
var $body = $('body');
|
|
||||||
var $section = $body.find('section').last();
|
|
||||||
$section.append($.format('<div><label class="control-label">错误参数</label><div>textStatus:{0}</div><div>', textStatus));
|
|
||||||
$section.append($.format('<div><label class="control-label">错误参数</label><div>errorThrown:{0}</div><div>', errorThrown));
|
|
||||||
options.error(textStatus, errorThrown);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
$('body').on('click', 'button', function () {
|
|
||||||
var $input = $(this).parent().prev();
|
|
||||||
var options = $.extend(JSON.parse($input.attr('data-val')), { data: JSON.parse($input.val()) }, { test: true, div: $(this).parent().parent().next() });
|
|
||||||
ajax(options);
|
|
||||||
});
|
|
||||||
|
|
||||||
// 接口调用
|
|
||||||
ajax({
|
|
||||||
title: '用户登陆调用接口',
|
|
||||||
anonymous: true,
|
|
||||||
url: 'api/login', method: 'POST', data: { userName: 'Test', password: '1' }, success: function (result) {
|
|
||||||
var token = result.Token;
|
|
||||||
ajax({
|
|
||||||
title: '用户登陆信息接口', url: 'api/login', headers: { "Token": token },
|
|
||||||
method: 'GET'
|
|
||||||
});
|
|
||||||
ajax({
|
|
||||||
title: '指定用户信息接口', url: 'api/Users', headers: { Token: token },
|
|
||||||
method: 'GET', data: { userName: "Test" }
|
|
||||||
});
|
|
||||||
ajax({
|
|
||||||
title: '检查当前用户名是否可用接口', url: 'api/Users', headers: { Token: token },
|
|
||||||
method: 'PUT', data: { UserName: "101", UserStatus: 9 }
|
|
||||||
});
|
|
||||||
ajax({
|
|
||||||
title: '更改用户显示名称接口', url: 'api/Users', headers: { Token: token },
|
|
||||||
method: 'PUT', data: { UserName: "101", UserStatus: 1, DisplayName: "1010" }
|
|
||||||
});
|
|
||||||
ajax({
|
|
||||||
title: '更改用户密码接口', url: 'api/Users', headers: { Token: token },
|
|
||||||
method: 'PUT', data: { UserName: "101", UserStatus: 2, Password: "1", NewPassword: "2" }
|
|
||||||
});
|
|
||||||
ajax({
|
|
||||||
title: '新建用户接口', url: 'api/Users', headers: { Token: token },
|
|
||||||
method: 'POST', data: { ID: 0, UserName: "102", Password: "1", DisplayName: "102" }
|
|
||||||
});
|
|
||||||
ajax({
|
|
||||||
title: '更新用户接口', url: 'api/Users', headers: { Token: token },
|
|
||||||
method: 'POST', data: { ID: 21, UserName: "102", Password: "1", DisplayName: "102" }
|
|
||||||
});
|
|
||||||
ajax({
|
|
||||||
title: '删除用户接口', url: 'api/Users', headers: { Token: token },
|
|
||||||
method: 'DELETE', data: { "": "50,51" }
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
|
@ -1,9 +1,22 @@
|
||||||
using Microsoft.AspNetCore.Builder;
|
using Bootstrap.Security.Filter;
|
||||||
|
using Bootstrap.Security.Middleware;
|
||||||
|
using Longbow.Cache;
|
||||||
|
using Longbow.Cache.Middleware;
|
||||||
|
using Longbow.Configuration;
|
||||||
|
using Longbow.Data;
|
||||||
|
using Longbow.Logging;
|
||||||
|
using Longbow.Web;
|
||||||
|
using Longbow.Web.WebSockets;
|
||||||
|
using Microsoft.AspNetCore.Authentication.Cookies;
|
||||||
|
using Microsoft.AspNetCore.Builder;
|
||||||
|
using Microsoft.AspNetCore.DataProtection;
|
||||||
using Microsoft.AspNetCore.Hosting;
|
using Microsoft.AspNetCore.Hosting;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Configuration;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
namespace Bootstrap.Client
|
namespace Bootstrap.Client
|
||||||
{
|
{
|
||||||
|
@ -25,8 +38,22 @@ namespace Bootstrap.Client
|
||||||
options.CheckConsentNeeded = context => true;
|
options.CheckConsentNeeded = context => true;
|
||||||
options.MinimumSameSitePolicy = SameSiteMode.None;
|
options.MinimumSameSitePolicy = SameSiteMode.None;
|
||||||
});
|
});
|
||||||
|
services.AddCors();
|
||||||
|
services.AddLogging(builder => builder.AddFileLogger());
|
||||||
|
services.AddConfigurationManager();
|
||||||
|
services.AddCacheManager();
|
||||||
|
services.AddDBAccessFactory();
|
||||||
|
var dataProtectionBuilder = services.AddDataProtection(op => op.ApplicationDiscriminator = Configuration["ApplicationDiscriminator"])
|
||||||
|
.SetApplicationName(Configuration["ApplicationName"])
|
||||||
|
.PersistKeysToFileSystem(new DirectoryInfo(Configuration["KeyPath"]));
|
||||||
|
if (Configuration["DisableAutomaticKeyGeneration"] == "True") dataProtectionBuilder.DisableAutomaticKeyGeneration();
|
||||||
|
|
||||||
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
|
services.AddMvc(options =>
|
||||||
|
{
|
||||||
|
options.Filters.Add<BootstrapAdminAuthorizeFilter>();
|
||||||
|
options.Filters.Add<ExceptionFilter>();
|
||||||
|
}).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
|
||||||
|
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(options => options.Cookie.Path = "/");
|
||||||
}
|
}
|
||||||
|
|
||||||
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
|
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
|
||||||
|
@ -42,10 +69,15 @@ namespace Bootstrap.Client
|
||||||
app.UseHsts();
|
app.UseHsts();
|
||||||
}
|
}
|
||||||
|
|
||||||
app.UseHttpsRedirection();
|
app.UseStatusCodePagesWithReExecute("/Home/Error/{0}");
|
||||||
|
app.UseCors(builder => builder.WithOrigins(Configuration["AllowOrigins"].Split(',', StringSplitOptions.RemoveEmptyEntries)).AllowAnyHeader().AllowAnyMethod().AllowCredentials());
|
||||||
|
//app.UseHttpsRedirection();
|
||||||
app.UseStaticFiles();
|
app.UseStaticFiles();
|
||||||
app.UseCookiePolicy();
|
app.UseCookiePolicy();
|
||||||
|
app.UseAuthentication();
|
||||||
|
app.UseBootstrapAdminAuthorization();
|
||||||
|
app.UseWebSocketHandler(options => options.UseAuthentication = true);
|
||||||
|
app.UseCacheManagerCorsHandler();
|
||||||
app.UseMvc(routes =>
|
app.UseMvc(routes =>
|
||||||
{
|
{
|
||||||
routes.MapRoute(
|
routes.MapRoute(
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
@model ErrorViewModel
|
@model ErrorViewModel
|
||||||
@{
|
@{
|
||||||
ViewData["Title"] = "Error";
|
ViewData["Title"] = "Error";
|
||||||
|
Layout = "_Root";
|
||||||
}
|
}
|
||||||
|
|
||||||
<h1 class="text-danger">Error.</h1>
|
<h1 class="text-danger">Error.</h1>
|
|
@ -1,10 +1,3 @@
|
||||||
@{
|
@{
|
||||||
ViewBag.Title = "前台测试首页";
|
ViewData["Title"] = "Home Page";
|
||||||
Layout = "~/Views/Shared/_Layout.cshtml";
|
|
||||||
}
|
}
|
||||||
@section css {
|
|
||||||
}
|
|
||||||
@section javascript {
|
|
||||||
}
|
|
||||||
<div style="height: 1000px; background-color: #77af77">我就是一个测试页面</div>
|
|
||||||
<div>Bottom</div>
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
@{
|
||||||
|
ViewBag.Title = "资源未找到";
|
||||||
|
Layout = "_Root";
|
||||||
|
}
|
||||||
|
@section css {
|
||||||
|
<link href="~/css/error.css" rel="stylesheet" />
|
||||||
|
}
|
||||||
|
@section Javascript {
|
||||||
|
<script src="~/js/error.js"></script>
|
||||||
|
}
|
||||||
|
<section class="error-wrapper">
|
||||||
|
<img src="~/images/404_icon.png" />
|
||||||
|
<h1>请求资源未找到</h1>
|
||||||
|
<h3>相关错误信息已经记录到日志中,请登录服务器查看</h3>
|
||||||
|
<br />
|
||||||
|
<a href="~/Home/Index" target="_top">返回首页</a>
|
||||||
|
</section>
|
|
@ -0,0 +1,17 @@
|
||||||
|
@{
|
||||||
|
ViewBag.Title = "未授权请求";
|
||||||
|
Layout = "_Root";
|
||||||
|
}
|
||||||
|
@section css {
|
||||||
|
<link href="~/css/error.css" rel="stylesheet" />
|
||||||
|
}
|
||||||
|
@section Javascript {
|
||||||
|
<script src="~/js/error.js"></script>
|
||||||
|
}
|
||||||
|
<section class="error-wrapper">
|
||||||
|
<img src="~/images/error_icon.png" />
|
||||||
|
<h1>网页拒绝访问</h1>
|
||||||
|
<h3>您无权访问本页面请联系网站管理员授权后再查看</h3>
|
||||||
|
<br />
|
||||||
|
<a href="~/Home/Index" target="_top">返回首页</a>
|
||||||
|
</section>
|
|
@ -0,0 +1,7 @@
|
||||||
|
@model ModelBase
|
||||||
|
<footer class="site-footer position-fixed">
|
||||||
|
<span id="websiteFooter">@Model.Footer</span>
|
||||||
|
<a id="gotoTop" href="#" class="go-top" title="返回顶部" data-toggle="tooltip" data-placement="left">
|
||||||
|
<i class="fa fa-angle-up"></i>
|
||||||
|
</a>
|
||||||
|
</footer>
|
|
@ -0,0 +1,59 @@
|
||||||
|
@model NavigatorBarModel
|
||||||
|
<header class="header">
|
||||||
|
<div class="bg">
|
||||||
|
<div class="cloud">
|
||||||
|
<div class="d-flex align-items-center bird">
|
||||||
|
<a id="navbar" href="#" class="sidebar-toggle-box">
|
||||||
|
<i class="fa fa-bars"></i>
|
||||||
|
<span id="websiteTitle">@Model.Title</span>
|
||||||
|
</a>
|
||||||
|
<div class="nav">
|
||||||
|
</div>
|
||||||
|
<div class="dropdown userinfo">
|
||||||
|
<a data-toggle="dropdown" class="dropdown-toggle shadow-default" href="#">
|
||||||
|
<img id="headerIcon" alt="" src="@Url.Content(Model.Icon)">
|
||||||
|
<span id="userDisplayName" data-userName="@Model.UserName" class="username text-truncate d-inline-block">@Model.DisplayName</span>
|
||||||
|
</a>
|
||||||
|
<div class="dropdown-menu dropdown-menu-right">
|
||||||
|
<div class="dropdown-item">
|
||||||
|
<a href="@Model.ProfilesUrl"><i class=" fa fa-suitcase"></i>个人中心</a>
|
||||||
|
<a href="@Model.SettingsUrl"><i class="fa fa-cog"></i>设置</a>
|
||||||
|
<a href="#"><i class="fa fa-bell"></i>通知<span id="logoutNoti" class="badge badge-pill badge-success"></span></a>
|
||||||
|
</div>
|
||||||
|
<div class="dropdown-item">
|
||||||
|
<a href="~/Account/Logout"><i class="fa fa-key"></i>注销</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<nav class="navbar navbar-expand navbar-light d-none d-md-flex">
|
||||||
|
<div class="collapse navbar-collapse" id="navMenu">
|
||||||
|
<div class="navbar-nav">
|
||||||
|
@foreach (var menu in Model.Navigations)
|
||||||
|
{
|
||||||
|
@if (menu.Menus.Count() > 0)
|
||||||
|
{
|
||||||
|
<div class="nav-item dropdown @menu.Active">
|
||||||
|
<a class="nav-link dropdown-toggle" data-toggle="dropdown" role="button" href="#">@menu.Name</a>
|
||||||
|
@await Html.PartialAsync("Menu", menu.Menus)
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<div class="nav-item @menu.Active">
|
||||||
|
<a class="nav-link" target="@menu.Target" href="@Url.Content(menu.Url)">@menu.Name</a>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<nav aria-label="breadcrumb">
|
||||||
|
<div class="breadcrumb">
|
||||||
|
<div class="breadcrumb-item"><a href="~/Home/Index"><i class="fa fa-home"></i>首页</a></div>
|
||||||
|
<div class="breadcrumb-item d-none" id="breadNav"></div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
</header>
|
|
@ -0,0 +1,7 @@
|
||||||
|
@model IEnumerable<Bootstrap.Security.BootstrapMenu>
|
||||||
|
<div class="dropdown-menu">
|
||||||
|
@foreach (var menu in Model)
|
||||||
|
{
|
||||||
|
<a href="@Url.Content(menu.Url)" class="dropdown-item @menu.Active" target="@menu.Target"><i class="@menu.Icon"></i><span>@menu.Name</span></a>
|
||||||
|
}
|
||||||
|
</div>
|
|
@ -0,0 +1,13 @@
|
||||||
|
@model NavigatorBarModel
|
||||||
|
<aside>
|
||||||
|
<div id="sidebar" class="sidebar">
|
||||||
|
<!-- sidebar menu start-->
|
||||||
|
<ul class="sidebar-menu">
|
||||||
|
@foreach (var menu in Model.Navigations)
|
||||||
|
{
|
||||||
|
@await Html.PartialAsync("SubMenu", menu)
|
||||||
|
}
|
||||||
|
</ul>
|
||||||
|
<!-- sidebar menu end-->
|
||||||
|
</div>
|
||||||
|
</aside>
|
|
@ -0,0 +1,8 @@
|
||||||
|
@model Bootstrap.Security.BootstrapMenu
|
||||||
|
<li class="sub-menu">
|
||||||
|
<a href="@Url.Content(Model.Url)" class="@Model.Active" target="@Model.Target"><i class="@Model.Icon"></i>@Model.Name</a>
|
||||||
|
@if (Model.Menus.Count() > 0)
|
||||||
|
{
|
||||||
|
@await Html.PartialAsync("SubNavigation", Model.Menus)
|
||||||
|
}
|
||||||
|
</li>
|
|
@ -0,0 +1,7 @@
|
||||||
|
@model IEnumerable<Bootstrap.Security.BootstrapMenu>
|
||||||
|
<ul class="sub" style="display: none;">
|
||||||
|
@foreach (var menu in Model)
|
||||||
|
{
|
||||||
|
@await Html.PartialAsync("SubMenu", menu)
|
||||||
|
}
|
||||||
|
</ul>
|
|
@ -1,41 +0,0 @@
|
||||||
@using Microsoft.AspNetCore.Http.Features
|
|
||||||
|
|
||||||
@{
|
|
||||||
var consentFeature = Context.Features.Get<ITrackingConsentFeature>();
|
|
||||||
var showBanner = !consentFeature?.CanTrack ?? false;
|
|
||||||
var cookieString = consentFeature?.CreateConsentCookie();
|
|
||||||
}
|
|
||||||
|
|
||||||
@if (showBanner)
|
|
||||||
{
|
|
||||||
<nav id="cookieConsent" class="navbar navbar-default navbar-fixed-top" role="alert">
|
|
||||||
<div class="container">
|
|
||||||
<div class="navbar-header">
|
|
||||||
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#cookieConsent .navbar-collapse">
|
|
||||||
<span class="sr-only">Toggle cookie consent banner</span>
|
|
||||||
<span class="icon-bar"></span>
|
|
||||||
<span class="icon-bar"></span>
|
|
||||||
<span class="icon-bar"></span>
|
|
||||||
</button>
|
|
||||||
<span class="navbar-brand"><span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span></span>
|
|
||||||
</div>
|
|
||||||
<div class="collapse navbar-collapse">
|
|
||||||
<p class="navbar-text">
|
|
||||||
Use this space to summarize your privacy and cookie use policy.
|
|
||||||
</p>
|
|
||||||
<div class="navbar-right">
|
|
||||||
<a asp-controller="Home" asp-action="Privacy" class="btn btn-info navbar-btn">Learn More</a>
|
|
||||||
<button type="button" class="btn btn-default navbar-btn" data-cookie-string="@cookieString">Accept</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</nav>
|
|
||||||
<script>
|
|
||||||
(function () {
|
|
||||||
document.querySelector("#cookieConsent button[data-cookie-string]").addEventListener("click", function (el) {
|
|
||||||
document.cookie = el.target.dataset.cookieString;
|
|
||||||
document.querySelector("#cookieConsent").classList.add("hidden");
|
|
||||||
}, false);
|
|
||||||
})();
|
|
||||||
</script>
|
|
||||||
}
|
|
|
@ -1,15 +1,49 @@
|
||||||
<!DOCTYPE html>
|
@model ModelBase
|
||||||
<html lang="zh-cn">
|
@{
|
||||||
<head>
|
Layout = "_Root";
|
||||||
<meta charset="utf-8">
|
}
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
@section css {
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<environment include="Development">
|
||||||
<title>@ViewBag.Title</title>
|
<link href="~/css/bootstrap.css" rel="stylesheet">
|
||||||
<!-- 新 Bootstrap 核心 CSS 文件 -->
|
<link href="~/css/font-awesome.css" rel="stylesheet" />
|
||||||
|
<link href="~/css/toastr.css" rel="stylesheet" />
|
||||||
|
</environment>
|
||||||
|
<environment exclude="Development">
|
||||||
|
<link href="~/css/bootstrap.min.css" rel="stylesheet">
|
||||||
|
<link href="~/css/font-awesome.min.css" rel="stylesheet" />
|
||||||
|
<link href="~/css/toastr.min.css" rel="stylesheet" />
|
||||||
|
</environment>
|
||||||
@RenderSection("css", false)
|
@RenderSection("css", false)
|
||||||
</head>
|
<link href="~/css/theme.css" rel="stylesheet" />
|
||||||
<body>
|
<link href="~/css/theme-responsive.css" rel="stylesheet" />
|
||||||
@RenderBody()
|
<link href="~/css/site.css" rel="stylesheet" />
|
||||||
|
<link href="~/css/site-responsive.css" rel="stylesheet" />
|
||||||
|
@if (!string.IsNullOrEmpty(Model.Theme))
|
||||||
|
{
|
||||||
|
<link href="~/css/@Model.Theme" rel="stylesheet" />
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@section javascript {
|
||||||
|
<environment include="Development">
|
||||||
|
<script src="~/js/bootstrap.bundle.js"></script>
|
||||||
|
<script src="~/js/jquery.scrollTo.js"></script>
|
||||||
|
<script src="~/js/jquery.nicescroll.js"></script>
|
||||||
|
</environment>
|
||||||
|
<environment exclude="Development">
|
||||||
|
<script src="~/js/bootstrap.bundle.min.js"></script>
|
||||||
|
<script src="~/js/jquery.scrollTo.min.js"></script>
|
||||||
|
<script src="~/js/jquery.nicescroll.min.js"></script>
|
||||||
|
</environment>
|
||||||
|
<script src="~/js/toastr.min.js"></script>
|
||||||
|
<script src="~/js/longbow.common.js"></script>
|
||||||
|
<script src="~/js/jquery.dcjqaccordion.2.7.js"></script>
|
||||||
|
<script src="~/js/common-scripts.js"></script>
|
||||||
@RenderSection("Javascript", false)
|
@RenderSection("Javascript", false)
|
||||||
</body>
|
}
|
||||||
</html>
|
@await Html.PartialAsync("Header")
|
||||||
|
@await Html.PartialAsync("navigator")
|
||||||
|
<section class="container-fluid">
|
||||||
|
@RenderBody()
|
||||||
|
</section>
|
||||||
|
@await Html.PartialAsync("Footer")
|
||||||
|
@RenderSection("modal", false)
|
|
@ -0,0 +1,31 @@
|
||||||
|
<!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, shrink-to-fit=no">
|
||||||
|
<title>@ViewBag.Title</title>
|
||||||
|
@RenderSection("css", false)
|
||||||
|
<!--[if lt IE 10 ]>
|
||||||
|
<link href="../css/IE8.css" rel="stylesheet" />
|
||||||
|
<![endif]-->
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<!--[if lt IE 10 ]>
|
||||||
|
<div id="ieAlert" class="alert alert-danger alert-dismissible">
|
||||||
|
<div>你的浏览器版本太低,不能完美的支持本系统,请升级到至少IE10 <a href="../IE/IE10.exe" target="_blank">本地下载</a> <a href="https://support.microsoft.com/zh-cn/help/17621/internet-explorer-downloads" target="_blank">微软下载</a>,或者使用Chrome浏览器 <a href="../Software/ChromeSetup.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]-->
|
||||||
|
@RenderBody()
|
||||||
|
<a id="pathBase" href="~/" hidden></a>
|
||||||
|
<!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->
|
||||||
|
<environment include="Development">
|
||||||
|
<script src="~/js/jquery-3.3.1.js"></script>
|
||||||
|
</environment>
|
||||||
|
<environment exclude="Development">
|
||||||
|
<script src="~/js/jquery-3.3.1.min.js"></script>
|
||||||
|
</environment>
|
||||||
|
@RenderSection("Javascript", false)
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -1,18 +0,0 @@
|
||||||
<environment include="Development">
|
|
||||||
<script src="~/lib/jquery-validation/dist/jquery.validate.js"></script>
|
|
||||||
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"></script>
|
|
||||||
</environment>
|
|
||||||
<environment exclude="Development">
|
|
||||||
<script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.17.0/jquery.validate.min.js"
|
|
||||||
asp-fallback-src="~/lib/jquery-validation/dist/jquery.validate.min.js"
|
|
||||||
asp-fallback-test="window.jQuery && window.jQuery.validator"
|
|
||||||
crossorigin="anonymous"
|
|
||||||
integrity="sha384-rZfj/ogBloos6wzLGpPkkOr/gpkBNLZ6b6yLy4o+ok+t/SAKlL5mvXLr0OXNi1Hp">
|
|
||||||
</script>
|
|
||||||
<script src="https://ajax.aspnetcdn.com/ajax/jquery.validation.unobtrusive/3.2.9/jquery.validate.unobtrusive.min.js"
|
|
||||||
asp-fallback-src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"
|
|
||||||
asp-fallback-test="window.jQuery && window.jQuery.validator && window.jQuery.validator.unobtrusive"
|
|
||||||
crossorigin="anonymous"
|
|
||||||
integrity="sha384-ifv0TYDWxBHzvAk2Z0n8R434FL1Rlv/Av18DXE43N/1rvHyOG4izKst0f2iSLdds">
|
|
||||||
</script>
|
|
||||||
</environment>
|
|
|
@ -1,42 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
|
|
||||||
<configuration>
|
|
||||||
<configSections>
|
|
||||||
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
|
|
||||||
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
|
|
||||||
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
|
|
||||||
</sectionGroup>
|
|
||||||
</configSections>
|
|
||||||
|
|
||||||
<system.web.webPages.razor>
|
|
||||||
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
|
|
||||||
<pages pageBaseType="System.Web.Mvc.WebViewPage">
|
|
||||||
<namespaces>
|
|
||||||
<add namespace="System.Web.Mvc" />
|
|
||||||
<add namespace="System.Web.Mvc.Ajax" />
|
|
||||||
<add namespace="System.Web.Mvc.Html" />
|
|
||||||
<add namespace="System.Web.Routing" />
|
|
||||||
<add namespace="Bootstrap" />
|
|
||||||
</namespaces>
|
|
||||||
</pages>
|
|
||||||
</system.web.webPages.razor>
|
|
||||||
|
|
||||||
<appSettings>
|
|
||||||
<add key="webpages:Enabled" value="false" />
|
|
||||||
</appSettings>
|
|
||||||
|
|
||||||
<system.webServer>
|
|
||||||
<handlers>
|
|
||||||
<remove name="BlockViewHandler"/>
|
|
||||||
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
|
|
||||||
</handlers>
|
|
||||||
</system.webServer>
|
|
||||||
|
|
||||||
<system.web>
|
|
||||||
<compilation>
|
|
||||||
<assemblies>
|
|
||||||
<add assembly="System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
|
|
||||||
</assemblies>
|
|
||||||
</compilation>
|
|
||||||
</system.web>
|
|
||||||
</configuration>
|
|
|
@ -1,30 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
|
|
||||||
<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->
|
|
||||||
|
|
||||||
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
|
|
||||||
<!--
|
|
||||||
In the example below, the "SetAttributes" transform will change the value of
|
|
||||||
"connectionString" to use "ReleaseSQLServer" only when the "Match" locator
|
|
||||||
finds an attribute "name" that has a value of "MyDB".
|
|
||||||
|
|
||||||
<connectionStrings>
|
|
||||||
<add name="MyDB"
|
|
||||||
connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True"
|
|
||||||
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
|
|
||||||
</connectionStrings>
|
|
||||||
-->
|
|
||||||
<system.web>
|
|
||||||
<!--
|
|
||||||
In the example below, the "Replace" transform will replace the entire
|
|
||||||
<customErrors> section of your web.config file.
|
|
||||||
Note that because there is only one customErrors section under the
|
|
||||||
<system.web> node, there is no need to use the "xdt:Locator" attribute.
|
|
||||||
|
|
||||||
<customErrors defaultRedirect="GenericError.htm"
|
|
||||||
mode="RemoteOnly" xdt:Transform="Replace">
|
|
||||||
<error statusCode="500" redirect="InternalError.htm"/>
|
|
||||||
</customErrors>
|
|
||||||
-->
|
|
||||||
</system.web>
|
|
||||||
</configuration>
|
|
|
@ -1,31 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
|
|
||||||
<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->
|
|
||||||
|
|
||||||
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
|
|
||||||
<!--
|
|
||||||
In the example below, the "SetAttributes" transform will change the value of
|
|
||||||
"connectionString" to use "ReleaseSQLServer" only when the "Match" locator
|
|
||||||
finds an attribute "name" that has a value of "MyDB".
|
|
||||||
|
|
||||||
<connectionStrings>
|
|
||||||
<add name="MyDB"
|
|
||||||
connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True"
|
|
||||||
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
|
|
||||||
</connectionStrings>
|
|
||||||
-->
|
|
||||||
<system.web>
|
|
||||||
<compilation xdt:Transform="RemoveAttributes(debug)" />
|
|
||||||
<!--
|
|
||||||
In the example below, the "Replace" transform will replace the entire
|
|
||||||
<customErrors> section of your web.config file.
|
|
||||||
Note that because there is only one customErrors section under the
|
|
||||||
<system.web> node, there is no need to use the "xdt:Locator" attribute.
|
|
||||||
|
|
||||||
<customErrors defaultRedirect="GenericError.htm"
|
|
||||||
mode="RemoteOnly" xdt:Transform="Replace">
|
|
||||||
<error statusCode="500" redirect="InternalError.htm"/>
|
|
||||||
</customErrors>
|
|
||||||
-->
|
|
||||||
</system.web>
|
|
||||||
</configuration>
|
|
|
@ -1,91 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!--
|
|
||||||
For more information on how to configure your ASP.NET application, please visit
|
|
||||||
http://go.microsoft.com/fwlink/?LinkId=169433
|
|
||||||
-->
|
|
||||||
<configuration>
|
|
||||||
<appSettings>
|
|
||||||
<add key="webpages:Version" value="3.0.0.0"/>
|
|
||||||
<add key="webpages:Enabled" value="false"/>
|
|
||||||
<add key="PreserveLoginUrl" value="true"/>
|
|
||||||
<add key="ClientValidationEnabled" value="true"/>
|
|
||||||
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
|
|
||||||
<add key="SimulatorBA" value="false"/>
|
|
||||||
</appSettings>
|
|
||||||
|
|
||||||
<connectionStrings>
|
|
||||||
<add name="SQL" providerName="System.Data.SqlClient" connectionString="Data Source=.;Initial Catalog=ExtendedChecker;User ID=sa;Password=sa"/>
|
|
||||||
<add name="ba" providerName="System.Data.SqlClient" connectionString="Data Source=.;Initial Catalog=BootstrapAdmin;User ID=sa;Password=sa"/>
|
|
||||||
</connectionStrings>
|
|
||||||
|
|
||||||
<system.web>
|
|
||||||
<compilation debug="true" targetFramework="4.5"/>
|
|
||||||
<httpRuntime targetFramework="4.5"/>
|
|
||||||
<pages>
|
|
||||||
<namespaces>
|
|
||||||
<add namespace="System.Web.Helpers"/>
|
|
||||||
<add namespace="System.Web.Mvc"/>
|
|
||||||
<add namespace="System.Web.Mvc.Ajax"/>
|
|
||||||
<add namespace="System.Web.Mvc.Html"/>
|
|
||||||
<add namespace="System.Web.Routing"/>
|
|
||||||
<add namespace="System.Web.WebPages"/>
|
|
||||||
</namespaces>
|
|
||||||
</pages>
|
|
||||||
<httpModules>
|
|
||||||
</httpModules>
|
|
||||||
</system.web>
|
|
||||||
|
|
||||||
<system.webServer>
|
|
||||||
<validation validateIntegratedModeConfiguration="false"/>
|
|
||||||
<handlers>
|
|
||||||
<remove name="ExtensionlessUrlHandler-Integrated-4.0"/>
|
|
||||||
<remove name="OPTIONSVerbHandler"/>
|
|
||||||
<remove name="TRACEVerbHandler"/>
|
|
||||||
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler"
|
|
||||||
preCondition="integratedMode,runtimeVersionv4.0"/>
|
|
||||||
</handlers>
|
|
||||||
<modules>
|
|
||||||
<add name="ExceptionManagement" type="Longbow.ExceptionManagement.ExceptionManagementModule, Longbow.ExceptionManagement"/>
|
|
||||||
</modules>
|
|
||||||
</system.webServer>
|
|
||||||
|
|
||||||
<runtime>
|
|
||||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed"/>
|
|
||||||
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0"/>
|
|
||||||
</dependentAssembly>
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35"/>
|
|
||||||
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
|
|
||||||
</dependentAssembly>
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
|
|
||||||
<bindingRedirect oldVersion="1.0.0.0-5.2.0.0" newVersion="5.2.0.0"/>
|
|
||||||
</dependentAssembly>
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="System.Web.Optimization" publicKeyToken="31bf3856ad364e35"/>
|
|
||||||
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="1.1.0.0"/>
|
|
||||||
</dependentAssembly>
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35"/>
|
|
||||||
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
|
|
||||||
</dependentAssembly>
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35"/>
|
|
||||||
<bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234"/>
|
|
||||||
</dependentAssembly>
|
|
||||||
</assemblyBinding>
|
|
||||||
</runtime>
|
|
||||||
|
|
||||||
<system.codedom>
|
|
||||||
<compilers>
|
|
||||||
<compiler language="c#;cs;csharp" extension=".cs"
|
|
||||||
type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
|
|
||||||
warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/>
|
|
||||||
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb"
|
|
||||||
type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
|
|
||||||
warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+"/>
|
|
||||||
</compilers>
|
|
||||||
</system.codedom>
|
|
||||||
</configuration>
|
|
|
@ -1,9 +1,45 @@
|
||||||
{
|
{
|
||||||
"Logging": {
|
"Logging": {
|
||||||
|
"IncludeScopes": false,
|
||||||
"LogLevel": {
|
"LogLevel": {
|
||||||
"Default": "Debug",
|
"Default": "Debug",
|
||||||
"System": "Information",
|
"System": "Information",
|
||||||
"Microsoft": "Information"
|
"Microsoft": "Information"
|
||||||
|
},
|
||||||
|
"LgbFile": {
|
||||||
|
"IncludeScopes": true,
|
||||||
|
"LogLevel": {
|
||||||
|
"Default": "Error"
|
||||||
|
},
|
||||||
|
"FileName": "Error\\Log.log",
|
||||||
|
"MaxFileCount": 1
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"ConnectionStrings": {
|
||||||
|
"ba": "Data Source=.;Initial Catalog=BootstrapAdmin;User ID=sa;Password=sa"
|
||||||
|
},
|
||||||
|
"AuthHost": "http://localhost:50852",
|
||||||
|
"KeyPath": "..\\keys",
|
||||||
|
"DisableAutomaticKeyGeneration": true,
|
||||||
|
"AllowOrigins": "http://localhost:50852",
|
||||||
|
"KeepExceptionsPeriod": 1,
|
||||||
|
"KeepLogsPeriod": 1,
|
||||||
|
"LongbowCache": {
|
||||||
|
"CorsItems": [
|
||||||
|
{
|
||||||
|
"Enabled": false,
|
||||||
|
"Name": "ba",
|
||||||
|
"Url": "http://localhost:50852/CacheList.axd",
|
||||||
|
"Desc": "后台管理数据缓存接口",
|
||||||
|
"Self": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Enabled": false,
|
||||||
|
"Name": "AppName",
|
||||||
|
"Url": "http://localhost/WebConsole/CacheList.axd",
|
||||||
|
"Desc": "自定义系统",
|
||||||
|
"Self": false
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,98 @@
|
||||||
{
|
{
|
||||||
"Logging": {
|
"Logging": {
|
||||||
|
"IncludeScopes": false,
|
||||||
"LogLevel": {
|
"LogLevel": {
|
||||||
"Default": "Warning"
|
"Default": "Warning"
|
||||||
|
},
|
||||||
|
"LgbFile": {
|
||||||
|
"IncludeScopes": true,
|
||||||
|
"LogLevel": {
|
||||||
|
"Default": "Error"
|
||||||
|
},
|
||||||
|
"FileName": "Error\\Log.log"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"AllowedHosts": "*"
|
"ConnectionStrings": {
|
||||||
|
"sql": "Data Source=.;Initial Catalog=BootstrapAdmin;User ID=sa;Password=sa",
|
||||||
|
"ba": "Data Source=.;Initial Catalog=BootstrapAdmin;User ID=sa;Password=sa"
|
||||||
|
},
|
||||||
|
"AppId": 4,
|
||||||
|
"AuthHost": "http://localhost:50852",
|
||||||
|
"TokenValidateOption": {
|
||||||
|
"Issuer": "BA",
|
||||||
|
"Audience": "api",
|
||||||
|
"Expires": 5,
|
||||||
|
"SecurityKey": "BootstrapAdmin-V1.1"
|
||||||
|
},
|
||||||
|
"TokenValidateAuthorizateOption": "Role",
|
||||||
|
"ApplicationName": "__bd__",
|
||||||
|
"ApplicationDiscriminator": "BootstrapAdmin",
|
||||||
|
"KeyPath": "D:\\App\\Web-App\\keys",
|
||||||
|
"DisableAutomaticKeyGeneration": true,
|
||||||
|
"AllowOrigins": "http://localhost,http://10.15.63.218",
|
||||||
|
"KeepExceptionsPeriod": 12,
|
||||||
|
"KeepLogsPeriod": 12,
|
||||||
|
"LongbowCache": {
|
||||||
|
"Enabled": true,
|
||||||
|
"CorsItems": [
|
||||||
|
{
|
||||||
|
"Enabled": true,
|
||||||
|
"Name": "ba",
|
||||||
|
"Url": "CacheList.axd",
|
||||||
|
"Desc": "后台管理数据缓存接口",
|
||||||
|
"Self": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Enabled": true,
|
||||||
|
"Name": "AppName",
|
||||||
|
"Url": "http://localhost/WebConsole/CacheList.axd",
|
||||||
|
"Desc": "自定义系统",
|
||||||
|
"Self": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"CacheItems": [
|
||||||
|
{
|
||||||
|
"Enabled": true,
|
||||||
|
"Key": "BootstrapAdminAuthorizeFilter-RetrieveRolesByUrl",
|
||||||
|
"Interval": 600,
|
||||||
|
"SlidingExpiration": true,
|
||||||
|
"Desc": "通过菜单获得所有角色数据"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Enabled": true,
|
||||||
|
"Key": "BootstrapAdminGroupMiddleware-RetrieveGroupsByUserName",
|
||||||
|
"Interval": 600,
|
||||||
|
"SlidingExpiration": true,
|
||||||
|
"Desc": "指定用户所有组数据缓存"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Enabled": true,
|
||||||
|
"Key": "BootstrapAdminRoleMiddleware-RetrieveRolesByUserName",
|
||||||
|
"Interval": 600,
|
||||||
|
"SlidingExpiration": true,
|
||||||
|
"Desc": "指定用户角色数据缓存"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Enabled": true,
|
||||||
|
"Key": "BootstrapDict-RetrieveDicts",
|
||||||
|
"Interval": 600,
|
||||||
|
"SlidingExpiration": true,
|
||||||
|
"Desc": "所有字典数据缓存"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Enabled": true,
|
||||||
|
"Key": "BootstrapMenu-RetrieveMenusByUserName",
|
||||||
|
"Interval": 600,
|
||||||
|
"SlidingExpiration": true,
|
||||||
|
"Desc": "用户所有菜单数据缓存"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Enabled": true,
|
||||||
|
"Key": "BootstrapUser-RetrieveUsersByName",
|
||||||
|
"Interval": 600,
|
||||||
|
"SlidingExpiration": true,
|
||||||
|
"Desc": "登录用户数据"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<packages>
|
|
||||||
<package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net45" />
|
|
||||||
<package id="Microsoft.AspNet.Razor" version="3.2.3" targetFramework="net45" />
|
|
||||||
<package id="Microsoft.AspNet.WebApi" version="5.2.3" targetFramework="net45" />
|
|
||||||
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net45" />
|
|
||||||
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net45" />
|
|
||||||
<package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.3" targetFramework="net45" />
|
|
||||||
<package id="Microsoft.AspNet.WebPages" version="3.2.3" targetFramework="net45" />
|
|
||||||
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.3" targetFramework="net45" />
|
|
||||||
<package id="Microsoft.Net.Compilers" version="2.0.1" targetFramework="net45" developmentDependency="true" />
|
|
||||||
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" />
|
|
||||||
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net45" />
|
|
||||||
</packages>
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
body {
|
||||||
|
}
|
|
@ -0,0 +1,56 @@
|
||||||
|
a {
|
||||||
|
color: #337ab7
|
||||||
|
}
|
||||||
|
|
||||||
|
.header {
|
||||||
|
border-bottom-color: #5198cb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-light .navbar-nav .nav-link {
|
||||||
|
padding: 3px 8px;
|
||||||
|
color: #337ab7;
|
||||||
|
transition: color .3s linear;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-light .navbar-nav .nav-link:hover, .nav-link .navbar-nav .active > .nav-link:hover {
|
||||||
|
color: #0056b3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-item.active, .dropdown-item:active {
|
||||||
|
color: rgba(0, 0, 0, 0.9);
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-item:hover, .dropdown-item:active, .dropdown-item.active {
|
||||||
|
background-color: #77afd5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.userinfo .dropdown-item:hover {
|
||||||
|
background-color: #f8f9fa;
|
||||||
|
}
|
||||||
|
|
||||||
|
.breadcrumb, .pagination-detail {
|
||||||
|
color: #337ab7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card {
|
||||||
|
border: 1px solid #5198cb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-header, .modal-header {
|
||||||
|
background-color: #5899c8;
|
||||||
|
border-color: #3581b8;
|
||||||
|
color: #fff;
|
||||||
|
border-radius: 4px 4px 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-header a, .modal-header a {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.close {
|
||||||
|
text-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-footer {
|
||||||
|
border-top-color: #5198cb;
|
||||||
|
}
|
|
@ -0,0 +1,306 @@
|
||||||
|
/**
|
||||||
|
* @author zhixin wen <wenzhixin2010@gmail.com>
|
||||||
|
* version: 1.11.0
|
||||||
|
* https://github.com/wenzhixin/bootstrap-table/
|
||||||
|
*/
|
||||||
|
|
||||||
|
.bootstrap-table .table {
|
||||||
|
margin-bottom: 0 !important;
|
||||||
|
border-bottom: 1px solid #dddddd;
|
||||||
|
border-collapse: collapse !important;
|
||||||
|
border-radius: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bootstrap-table .table:not(.table-condensed),
|
||||||
|
.bootstrap-table .table:not(.table-condensed) > tbody > tr > th,
|
||||||
|
.bootstrap-table .table:not(.table-condensed) > tfoot > tr > th,
|
||||||
|
.bootstrap-table .table:not(.table-condensed) > thead > tr > td,
|
||||||
|
.bootstrap-table .table:not(.table-condensed) > tbody > tr > td,
|
||||||
|
.bootstrap-table .table:not(.table-condensed) > tfoot > tr > td {
|
||||||
|
padding: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bootstrap-table .table.table-no-bordered > thead > tr > th,
|
||||||
|
.bootstrap-table .table.table-no-bordered > tbody > tr > td {
|
||||||
|
border-right: 2px solid transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bootstrap-table .table.table-no-bordered > tbody > tr > td:last-child {
|
||||||
|
border-right: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-container {
|
||||||
|
position: relative;
|
||||||
|
clear: both;
|
||||||
|
border: 1px solid #dddddd;
|
||||||
|
border-radius: 4px;
|
||||||
|
-webkit-border-radius: 4px;
|
||||||
|
-moz-border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-container.table-no-bordered {
|
||||||
|
border: 1px solid transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-footer,
|
||||||
|
.fixed-table-header {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-footer {
|
||||||
|
border-top: 1px solid #dddddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-body {
|
||||||
|
overflow-x: auto;
|
||||||
|
overflow-y: auto;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-container table {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-container thead th {
|
||||||
|
height: 0;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
border-left: 1px solid #dddddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-container thead th:focus {
|
||||||
|
outline: 0 solid transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-container thead th:first-child {
|
||||||
|
border-left: none;
|
||||||
|
border-top-left-radius: 4px;
|
||||||
|
-webkit-border-top-left-radius: 4px;
|
||||||
|
-moz-border-radius-topleft: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-container thead th .th-inner,
|
||||||
|
.fixed-table-container tbody td .th-inner {
|
||||||
|
padding: 8px;
|
||||||
|
line-height: 24px;
|
||||||
|
vertical-align: top;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-container thead th .sortable {
|
||||||
|
cursor: pointer;
|
||||||
|
background-position: right;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
padding-right: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-container thead th .both {
|
||||||
|
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAQAAADYWf5HAAAAkElEQVQoz7X QMQ5AQBCF4dWQSJxC5wwax1Cq1e7BAdxD5SL+Tq/QCM1oNiJidwox0355mXnG/DrEtIQ6azioNZQxI0ykPhTQIwhCR+BmBYtlK7kLJYwWCcJA9M4qdrZrd8pPjZWPtOqdRQy320YSV17OatFC4euts6z39GYMKRPCTKY9UnPQ6P+GtMRfGtPnBCiqhAeJPmkqAAAAAElFTkSuQmCC');
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-container thead th .asc {
|
||||||
|
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZ0lEQVQ4y2NgGLKgquEuFxBPAGI2ahhWCsS/gDibUoO0gPgxEP8H4ttArEyuQYxAPBdqEAxPBImTY5gjEL9DM+wTENuQahAvEO9DMwiGdwAxOymGJQLxTyD+jgWDxCMZRsEoGAVoAADeemwtPcZI2wAAAABJRU5ErkJggg==');
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-container thead th .desc {
|
||||||
|
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZUlEQVQ4y2NgGAWjYBSggaqGu5FA/BOIv2PBIPFEUgxjB+IdQPwfC94HxLykus4GiD+hGfQOiB3J8SojEE9EM2wuSJzcsFMG4ttQgx4DsRalkZENxL+AuJQaMcsGxBOAmGvopk8AVz1sLZgg0bsAAAAASUVORK5CYII= ');
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-container th.detail {
|
||||||
|
width: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-container tbody td {
|
||||||
|
border-left: 1px solid #dddddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-container tbody tr:first-child td {
|
||||||
|
border-top: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-container tbody td:first-child {
|
||||||
|
border-left: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* the same color with .active */
|
||||||
|
.fixed-table-container tbody .selected td {
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-container .bs-checkbox {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-container .bs-checkbox .th-inner {
|
||||||
|
padding: 8px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-container input[type="radio"],
|
||||||
|
.fixed-table-container input[type="checkbox"] {
|
||||||
|
margin: 0 auto !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-container .no-records-found {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-pagination div.pagination,
|
||||||
|
.fixed-table-pagination .pagination-detail {
|
||||||
|
margin-top: 10px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-pagination div.pagination .pagination {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-pagination .pagination a {
|
||||||
|
padding: 6px 12px;
|
||||||
|
line-height: 1.428571429;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-pagination .pagination-info {
|
||||||
|
line-height: 34px;
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-pagination .btn-group {
|
||||||
|
position: relative;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-pagination .dropup .dropdown-menu {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-pagination .page-list {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-toolbar .columns-left {
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-toolbar .columns-right {
|
||||||
|
margin-left: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-toolbar .columns label {
|
||||||
|
display: block;
|
||||||
|
padding: 3px 20px;
|
||||||
|
clear: both;
|
||||||
|
font-weight: normal;
|
||||||
|
line-height: 1.428571429;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-toolbar .bs-bars,
|
||||||
|
.fixed-table-toolbar .search,
|
||||||
|
.fixed-table-toolbar .columns {
|
||||||
|
position: relative;
|
||||||
|
margin-top: 10px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
line-height: 34px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-pagination li.disabled a {
|
||||||
|
pointer-events: none;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-loading {
|
||||||
|
display: none;
|
||||||
|
position: absolute;
|
||||||
|
top: 42px;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
z-index: 99;
|
||||||
|
background-color: #fff;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-body .card-view .title {
|
||||||
|
font-weight: bold;
|
||||||
|
display: inline-block;
|
||||||
|
min-width: 30%;
|
||||||
|
text-align: left !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* support bootstrap 2 */
|
||||||
|
.fixed-table-body thead th .th-inner {
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.table th, .table td {
|
||||||
|
vertical-align: middle;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-toolbar .dropdown-menu {
|
||||||
|
text-align: left;
|
||||||
|
max-height: 300px;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-toolbar .btn-group > .btn-group {
|
||||||
|
display: inline-block;
|
||||||
|
margin-left: -1px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-toolbar .btn-group > .btn-group > .btn {
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-toolbar .btn-group > .btn-group:first-child > .btn {
|
||||||
|
border-top-left-radius: 4px;
|
||||||
|
border-bottom-left-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-toolbar .btn-group > .btn-group:last-child > .btn {
|
||||||
|
border-top-right-radius: 4px;
|
||||||
|
border-bottom-right-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bootstrap-table .table > thead > tr > th {
|
||||||
|
vertical-align: bottom;
|
||||||
|
border-bottom: 1px solid #ddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* support bootstrap 3 */
|
||||||
|
.bootstrap-table .table thead > tr > th {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bootstrap-table .fixed-table-footer tbody > tr > td {
|
||||||
|
padding: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bootstrap-table .fixed-table-footer .table {
|
||||||
|
border-bottom: none;
|
||||||
|
border-radius: 0;
|
||||||
|
padding: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pull-right .dropdown-menu {
|
||||||
|
right: 0;
|
||||||
|
left: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* calculate scrollbar width */
|
||||||
|
p.fixed-table-scroll-inner {
|
||||||
|
width: 100%;
|
||||||
|
height: 200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.fixed-table-scroll-outer {
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
visibility: hidden;
|
||||||
|
width: 200px;
|
||||||
|
height: 150px;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
body {
|
||||||
|
background: #8075c6;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
width: 150px;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.error-wrapper {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.error-wrapper p {
|
||||||
|
padding-top: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a, a:hover, a:focus {
|
||||||
|
text-decoration: none;
|
||||||
|
outline: none;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 300;
|
||||||
|
color: #fff;
|
||||||
|
}
|
|
@ -0,0 +1,56 @@
|
||||||
|
@media (min-width: 568px) {
|
||||||
|
.sidebar-toggle-box span {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cache-item > :nth-child(2) {
|
||||||
|
flex: 0 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cache-item > :nth-child(3) {
|
||||||
|
display: block;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 667px) {
|
||||||
|
.header .nav {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 768px) {
|
||||||
|
html, body {
|
||||||
|
height: 100%;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-toggle-box {
|
||||||
|
flex: 0 1 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header .nav {
|
||||||
|
flex: 1 1 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.site-footer {
|
||||||
|
position: fixed;
|
||||||
|
}
|
||||||
|
|
||||||
|
aside {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-height: 672px) {
|
||||||
|
html, body {
|
||||||
|
height: 100%;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.site-footer {
|
||||||
|
position: fixed;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,37 +1,463 @@
|
||||||
/* Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification\
|
html {
|
||||||
for details on configuring this project to bundle and minify static web assets. */
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
padding-top: 50px;
|
color: #797979;
|
||||||
padding-bottom: 20px;
|
background: #f1f2f7;
|
||||||
|
text-rendering: optimizeLegibility;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
-webkit-overflow-scrolling: touch;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Wrapping element */
|
aside {
|
||||||
/* Set some basic padding to keep content from hitting the edges */
|
transition: transform .4s ease-in-out;
|
||||||
.body-content {
|
transform: translate(-100%);
|
||||||
padding-left: 15px;
|
position: absolute;
|
||||||
padding-right: 15px;
|
top: 92px;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
height: auto;
|
||||||
|
z-index: 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Carousel */
|
aside.open {
|
||||||
.carousel-caption p {
|
transform: translate(0);
|
||||||
font-size: 20px;
|
}
|
||||||
line-height: 1.4;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Make .svg files in the carousel display properly in older browsers */
|
.sidebar {
|
||||||
.carousel-inner .item img[src$=".svg"] {
|
overflow: auto;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
z-index: 5;
|
||||||
|
height: 100%;
|
||||||
|
background: #2a3542;
|
||||||
|
background-image: url('../images/bird.png');
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: 96% 98%;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* QR code generator */
|
.sidebar-menu {
|
||||||
#qrCode {
|
padding: 20px 0;
|
||||||
margin: 15px;
|
margin-bottom: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Hide/rearrange for smaller screens */
|
.sidebar-menu .dcjq-icon {
|
||||||
@media screen and (max-width: 767px) {
|
height: 17px;
|
||||||
/* Hide captions */
|
width: 17px;
|
||||||
.carousel-caption {
|
display: inline-block;
|
||||||
|
background: url(../images/nav-expand.png) no-repeat;
|
||||||
|
float: right;
|
||||||
|
margin-top: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-menu .active .dcjq-icon {
|
||||||
|
background-position: bottom;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-menu li {
|
||||||
|
margin: 5px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-menu li a {
|
||||||
|
color: #aeb2b7;
|
||||||
|
display: block;
|
||||||
|
padding: 15px 10px;
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-menu li a:hover, .sidebar-menu li a:focus {
|
||||||
|
background: #35404d;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-menu li a.active {
|
||||||
|
color: #FF6C60;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-menu li a i {
|
||||||
|
width: 22px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-menu li .sub {
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-menu li .sub li a:hover, .sidebar-menu li .sub li.active a {
|
||||||
|
color: #FF6C60;
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-menu li .sub li {
|
||||||
|
background: #35404D;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0 10px 0 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-menu li .sub li:last-child {
|
||||||
|
border-radius: 0 0 4px 4px;
|
||||||
|
padding-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-menu li .sub li a {
|
||||||
|
padding: 12px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul li {
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-body .dd {
|
||||||
|
margin-bottom: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a, a:hover, a:focus {
|
||||||
|
text-decoration: none;
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-menu a {
|
||||||
|
transition: all .3s linear;
|
||||||
|
padding: 6px 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-menu .divider {
|
||||||
|
margin: 1px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*Title*/
|
||||||
|
.sidebar-toggle-box {
|
||||||
|
font-size: 1.25rem;
|
||||||
|
color: #eee;
|
||||||
|
flex: 1 1 auto;
|
||||||
|
padding: 12px 0;
|
||||||
|
transition: color .3s linear;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-toggle-box span {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.sidebar-toggle-box:hover {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header {
|
||||||
|
background: #fff;
|
||||||
|
border-bottom: 1px solid #ccc;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header .bg {
|
||||||
|
background-image: linear-gradient(to bottom, #196eac 0,#7fb4d9 100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.header .cloud {
|
||||||
|
background-image: url('../images/bg4.png');
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: 98% -28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header .bird {
|
||||||
|
background-image: url('../images/bird.png');
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: right top;
|
||||||
|
padding: 0 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header .nav {
|
||||||
|
display: none;
|
||||||
|
margin-left: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header .nav .dropdown {
|
||||||
|
margin-right: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header .badge {
|
||||||
|
position: absolute;
|
||||||
|
right: -6px;
|
||||||
|
top: -14px;
|
||||||
|
opacity: 0.8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-item.active, .dropdown-item:active {
|
||||||
|
color: rgba(0, 0, 0, 0.9);
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-item:hover, .dropdown-item:active, .dropdown-item.active {
|
||||||
|
background-color: rgba(0, 0, 0, 0.05);
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-item span {
|
||||||
|
margin-left: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav .dropdown-menu {
|
||||||
|
width: 235px;
|
||||||
|
border: none;
|
||||||
|
margin-left: -74px;
|
||||||
|
margin-top: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav .dropdown-arrow {
|
||||||
|
border-style: solid;
|
||||||
|
border-width: 0 9px 9px;
|
||||||
|
position: absolute;
|
||||||
|
left: 85px;
|
||||||
|
top: -9px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav .dropdown-header {
|
||||||
|
color: #fff;
|
||||||
|
padding: 10px;
|
||||||
|
border-radius: 4px 4px 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav .dropdown-footer {
|
||||||
|
padding: 6px 0;
|
||||||
|
background-color: rgba(0, 0, 0, 0.1);
|
||||||
|
border-bottom-left-radius: 4px;
|
||||||
|
border-bottom-right-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav .dropdown-item {
|
||||||
|
display: flex;
|
||||||
|
border-bottom: 1px solid #EBEBEB;
|
||||||
|
padding: 10px 12px;
|
||||||
|
font-size: 0.75rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav .dropdown-item:nth-of-type(odd), .cache-item:nth-of-type(odd) {
|
||||||
|
background-color: rgba(0, 0, 0, 0.05);
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav .dropdown-item:hover {
|
||||||
|
background-color: #93c9e8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav .dropdown-item > :nth-child(2) {
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
display: inline-block;
|
||||||
|
flex: 1 1 auto;
|
||||||
|
padding: 0 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav .dropdown-item .small {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-link {
|
||||||
|
transition: color .25s linear;
|
||||||
|
}
|
||||||
|
|
||||||
|
.userinfo img {
|
||||||
|
height: 29px;
|
||||||
|
width: 29px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.userinfo .dropdown-toggle {
|
||||||
|
display: block;
|
||||||
|
padding: 6px;
|
||||||
|
border: 1px solid rgba(204, 204, 204, 0.5);
|
||||||
|
border-radius: 4px;
|
||||||
|
color: #eee;
|
||||||
|
transition: all .25s linear;
|
||||||
|
}
|
||||||
|
|
||||||
|
.userinfo .dropdown-toggle:after {
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
.userinfo .dropdown-toggle:hover {
|
||||||
|
color: #fff;
|
||||||
|
border: 1px solid #fff !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.userinfo .dropdown-item {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
width: 270px;
|
||||||
|
padding: 0;
|
||||||
|
justify-content: space-around;
|
||||||
|
}
|
||||||
|
|
||||||
|
.userinfo .dropdown-item a {
|
||||||
|
text-align: center;
|
||||||
|
color: #777;
|
||||||
|
padding: 15px 10px;
|
||||||
|
flex: 1 1 33.333%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.userinfo .dropdown-item a i {
|
||||||
|
font-size: 1.025rem;
|
||||||
|
display: block;
|
||||||
|
margin-bottom: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.userinfo .dropdown-item:last-child {
|
||||||
|
border-radius: 0 0 4px 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.userinfo .dropdown-item:last-child a {
|
||||||
|
color: #ca3a39;
|
||||||
|
border-radius: 0 0 0.15rem 0.15rem;
|
||||||
|
background: #a9d96c;
|
||||||
|
background-image: linear-gradient(to bottom, #a9d96c 0%, #799e51 100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.userinfo .username {
|
||||||
|
max-width: 90px;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
.userinfo .badge {
|
||||||
|
left: 234px;
|
||||||
|
right: auto;
|
||||||
|
top: 6px;
|
||||||
|
}
|
||||||
|
/*end title*/
|
||||||
|
|
||||||
|
.site-footer {
|
||||||
|
background: #5b6e84;
|
||||||
|
color: #fff;
|
||||||
|
padding: 10px 4px;
|
||||||
|
height: 40px;
|
||||||
|
left: 0;
|
||||||
|
bottom: 0;
|
||||||
|
right: 0;
|
||||||
|
z-index: 1;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.site-footer > span {
|
||||||
|
flex: 1 1 auto;
|
||||||
|
text-align: center;
|
||||||
|
margin-left: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.go-top {
|
||||||
|
background: rgba(255,255,255,.5);
|
||||||
|
width: 20px;
|
||||||
|
height: 20px;
|
||||||
|
border-radius: 50%;
|
||||||
|
-webkit-border-radius: 50%;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
margin-right: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.go-top:hover {
|
||||||
|
background-color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.go-top i {
|
||||||
|
color: #2A3542;
|
||||||
|
}
|
||||||
|
/*notify bar*/
|
||||||
|
|
||||||
|
.breadcrumb {
|
||||||
|
border-top: solid 1px #ddd;
|
||||||
|
background-color: transparent;
|
||||||
|
border-radius: 0;
|
||||||
|
padding: 8px 10px;
|
||||||
|
margin: 0 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.breadcrumb i {
|
||||||
|
padding-right: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-body {
|
||||||
|
position: fixed;
|
||||||
|
left: 0;
|
||||||
|
bottom: 40px;
|
||||||
|
right: 0;
|
||||||
|
top: 98px;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-body iframe {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcome-bg {
|
||||||
|
background-image: url('../images/bg.jpg');
|
||||||
|
background-size: 100% 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*bs v4.1.3*/
|
||||||
|
label.dropdown-item:first-child {
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cache-title {
|
||||||
|
font-weight: bold;
|
||||||
|
color: #0077de;
|
||||||
|
background-color: #b5f1b6;
|
||||||
|
padding: 12px 15px;
|
||||||
|
border-radius: 4px 4px 0 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cache-item {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding: 10px 4px;
|
||||||
|
border-bottom: 1px solid #EBEBEB;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cache-item:last-child {
|
||||||
|
border-bottom: none;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cache-item > :not(:first-child) {
|
||||||
|
margin-left: 10px;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cache-item > :nth-child(2) {
|
||||||
|
flex: 1 1 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cache-item > :nth-child(2) span:not(.badge) {
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
display: inline-block;
|
||||||
|
width: 152px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cache-item > :nth-child(3) {
|
||||||
|
flex: 1 1 auto;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cache-item + .cache-title {
|
||||||
|
margin-top: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cache-item .badge {
|
||||||
|
position: relative;
|
||||||
|
top: -8px;
|
||||||
|
margin-left: 0;
|
||||||
|
line-height: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cache-item .btn, td .btn:not(.btn-lg) {
|
||||||
|
margin-left: 5px;
|
||||||
|
font-size: 0.75rem;
|
||||||
|
padding: 1px 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-img {
|
||||||
|
max-width: 258px;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
body{padding-top:50px;padding-bottom:20px}.body-content{padding-left:15px;padding-right:15px}.carousel-caption p{font-size:20px;line-height:1.4}.carousel-inner .item img[src$=".svg"]{width:100%}#qrCode{margin:15px}@media screen and (max-width:767px){.carousel-caption{display:none}}
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
@media (min-width: 375px) {
|
||||||
|
.form-check-input + span, .form-check-input + label {
|
||||||
|
max-width: 146px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 568px) {
|
||||||
|
.toolbar {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bs-bars {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 576px) {
|
||||||
|
.form-group .form-control-url {
|
||||||
|
width: calc(100% - 90px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-inline .control-label {
|
||||||
|
padding-top: 6px;
|
||||||
|
padding-bottom: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-lg {
|
||||||
|
max-width: calc(90%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-fill {
|
||||||
|
width: auto;
|
||||||
|
align-self: flex-end;
|
||||||
|
margin-bottom: 2px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 940px) {
|
||||||
|
.btn span:last-child {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-check-input + span, .form-check-input + label {
|
||||||
|
max-width: 192px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 992px) {
|
||||||
|
.modal-lg {
|
||||||
|
max-width: 900px;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,238 @@
|
||||||
|
body, .form-control, .dropdown-menu, .btn:not(.btn-lg), .input-group-text {
|
||||||
|
font-size: 0.875rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-control:focus {
|
||||||
|
border-color: #66afe9;
|
||||||
|
-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102,175,233,.6);
|
||||||
|
box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102,175,233,.6);
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-group .btn:focus, .btn-group .btn:focus, .page-link:focus {
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-group .btn:not(.btn-secondary):not(.btn-primary):not(.btn-warning):not(.btn-info):not(.btn-danger) {
|
||||||
|
background-color: #e9ecef;
|
||||||
|
border-color: #ced4da;
|
||||||
|
}
|
||||||
|
|
||||||
|
.close:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-divider {
|
||||||
|
margin: 0.125rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-fill {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tooltip-inner {
|
||||||
|
max-width: 768px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-invalid .tooltip-inner {
|
||||||
|
background-color: #dc3545;
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-invalid .arrow:before {
|
||||||
|
border-top-color: #dc3545;
|
||||||
|
border-bottom-color: #dc3545;
|
||||||
|
}
|
||||||
|
|
||||||
|
input.is-invalid {
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-image: url('../images/error.png');
|
||||||
|
background-position: right 8px center;
|
||||||
|
}
|
||||||
|
|
||||||
|
input.is-valid {
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-image: url('../images/success.png');
|
||||||
|
background-position: right 8px center;
|
||||||
|
}
|
||||||
|
|
||||||
|
input.pending {
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-image: url(../img/loading-sm.gif);
|
||||||
|
background-position: right 8px center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.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;
|
||||||
|
justify-content: flex-start;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-header {
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
padding: 10px 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-body, .card-body {
|
||||||
|
padding: 15px 15px 0 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-footer .btn span:last-child {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-header a {
|
||||||
|
color: #797979;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn span:last-child {
|
||||||
|
margin-left: 4px;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-check-label {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-check-input + span, .form-check-input + label {
|
||||||
|
max-width: 98px;
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*Bootstrap Table BUG */
|
||||||
|
.bootstrap-table .table thead > tr > th {
|
||||||
|
border-top: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-toolbar .bs-bars, .fixed-table-toolbar .search, .fixed-table-toolbar .columns {
|
||||||
|
line-height: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.table-condensed > thead > tr > th, .table-condensed > tbody > tr > th, .table-condensed > tfoot > tr > th, .table-condensed > thead > tr > td, .table-condensed > tbody > tr > td, .table-condensed > tfoot > tr > td {
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datetimepicker table tr td span {
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-view:not(:last-child) {
|
||||||
|
margin-bottom: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-loading {
|
||||||
|
padding: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bootstrap-table {
|
||||||
|
margin-bottom: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bootstrap-table .fixed-table-body .table {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card {
|
||||||
|
margin-bottom: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-body .bootstrap-table {
|
||||||
|
margin-top: -10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-table-toolbar .dropdown-menu {
|
||||||
|
min-width: unset;
|
||||||
|
}
|
||||||
|
/*Bootstrap Table BUG END*/
|
||||||
|
|
||||||
|
.file-drop-zone.clickable:hover {
|
||||||
|
border: 1px dashed #999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-row, .row {
|
||||||
|
flex: 1 1 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-toggle="LgbValidate"] input[type="text"], [data-toggle="LgbValidate"] input[type="password"] {
|
||||||
|
padding-right: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus, .was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus {
|
||||||
|
border-color: #dc3545;
|
||||||
|
box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(220, 53, 69,.6);
|
||||||
|
}
|
||||||
|
|
||||||
|
.was-validated .form-control:valid:focus, .form-control.is-valid:focus, .was-validated .custom-select:valid:focus, .custom-select.is-valid:focus {
|
||||||
|
border-color: #28a745;
|
||||||
|
box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(40, 167, 69,.6);
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-menu {
|
||||||
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.176);
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.arrow-primary {
|
||||||
|
border-color: transparent transparent #007bff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.arrow-success {
|
||||||
|
border-color: transparent transparent #28a745;
|
||||||
|
}
|
||||||
|
|
||||||
|
.arrow-info {
|
||||||
|
border-color: transparent transparent #17a2b8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.arrow-warning {
|
||||||
|
border-color: transparent transparent #ffc107;
|
||||||
|
}
|
||||||
|
|
||||||
|
.arrow-danger {
|
||||||
|
border-color: transparent transparent #dc3545;
|
||||||
|
}
|
||||||
|
|
||||||
|
.shadow-primary:hover {
|
||||||
|
-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(0, 123, 255, 0.5);
|
||||||
|
box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(0, 123, 255, 0.5);
|
||||||
|
border-color: #007bff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.shadow-success:hover {
|
||||||
|
-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(40, 167, 69, 0.5);
|
||||||
|
box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(40, 167, 69, 0.5);
|
||||||
|
border-color: #28a745;
|
||||||
|
}
|
||||||
|
|
||||||
|
.shadow-info:hover {
|
||||||
|
-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(23, 162, 184, 0.5);
|
||||||
|
box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(23, 162, 184, 0.5);
|
||||||
|
border-color: #17a2b8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.shadow-warning:hover {
|
||||||
|
-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(255, 193, 7, 0.5);
|
||||||
|
box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(255, 193, 7, 0.5);
|
||||||
|
border-color: #ffc107;
|
||||||
|
}
|
||||||
|
|
||||||
|
.shadow-danger:hover {
|
||||||
|
border: 1px solid #dc3545;
|
||||||
|
-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(220, 53, 69, 0.5);
|
||||||
|
box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(220, 53, 69, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
.shadow-default, .shadow-default:hover {
|
||||||
|
border: 1px solid #337ab7;
|
||||||
|
color: #333;
|
||||||
|
-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102,175,233,.6);
|
||||||
|
box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102,175,233,.6);
|
||||||
|
}
|
|
@ -0,0 +1,233 @@
|
||||||
|
/*
|
||||||
|
* Note that this is toastr v2.1.3, the "latest" version in url has no more maintenance,
|
||||||
|
* please go to https://cdnjs.com/libraries/toastr.js and pick a certain version you want to use,
|
||||||
|
* make sure you copy the url from the website since the url may change between versions.
|
||||||
|
* */
|
||||||
|
.toast-title {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.toast-message {
|
||||||
|
-ms-word-wrap: break-word;
|
||||||
|
word-wrap: break-word;
|
||||||
|
}
|
||||||
|
.toast-message a,
|
||||||
|
.toast-message label {
|
||||||
|
color: #FFFFFF;
|
||||||
|
}
|
||||||
|
.toast-message a:hover {
|
||||||
|
color: #CCCCCC;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.toast-close-button {
|
||||||
|
position: relative;
|
||||||
|
right: -0.3em;
|
||||||
|
top: -0.3em;
|
||||||
|
float: right;
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #FFFFFF;
|
||||||
|
-webkit-text-shadow: 0 1px 0 #ffffff;
|
||||||
|
text-shadow: 0 1px 0 #ffffff;
|
||||||
|
opacity: 0.8;
|
||||||
|
-ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);
|
||||||
|
filter: alpha(opacity=80);
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
|
.toast-close-button:hover,
|
||||||
|
.toast-close-button:focus {
|
||||||
|
color: #000000;
|
||||||
|
text-decoration: none;
|
||||||
|
cursor: pointer;
|
||||||
|
opacity: 0.4;
|
||||||
|
-ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=40);
|
||||||
|
filter: alpha(opacity=40);
|
||||||
|
}
|
||||||
|
.rtl .toast-close-button {
|
||||||
|
left: -0.3em;
|
||||||
|
float: left;
|
||||||
|
right: 0.3em;
|
||||||
|
}
|
||||||
|
/*Additional properties for button version
|
||||||
|
iOS requires the button element instead of an anchor tag.
|
||||||
|
If you want the anchor version, it requires `href="#"`.*/
|
||||||
|
button.toast-close-button {
|
||||||
|
padding: 0;
|
||||||
|
cursor: pointer;
|
||||||
|
background: transparent;
|
||||||
|
border: 0;
|
||||||
|
-webkit-appearance: none;
|
||||||
|
}
|
||||||
|
.toast-top-center {
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.toast-bottom-center {
|
||||||
|
bottom: 0;
|
||||||
|
right: 0;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.toast-top-full-width {
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.toast-bottom-full-width {
|
||||||
|
bottom: 0;
|
||||||
|
right: 0;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.toast-top-left {
|
||||||
|
top: 12px;
|
||||||
|
left: 12px;
|
||||||
|
}
|
||||||
|
.toast-top-right {
|
||||||
|
top: 12px;
|
||||||
|
right: 12px;
|
||||||
|
}
|
||||||
|
.toast-bottom-right {
|
||||||
|
right: 12px;
|
||||||
|
bottom: 12px;
|
||||||
|
}
|
||||||
|
.toast-bottom-left {
|
||||||
|
bottom: 12px;
|
||||||
|
left: 12px;
|
||||||
|
}
|
||||||
|
#toast-container {
|
||||||
|
position: fixed;
|
||||||
|
z-index: 999999;
|
||||||
|
pointer-events: none;
|
||||||
|
/*overrides*/
|
||||||
|
}
|
||||||
|
#toast-container * {
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
#toast-container > div {
|
||||||
|
position: relative;
|
||||||
|
pointer-events: auto;
|
||||||
|
overflow: hidden;
|
||||||
|
margin: 0 0 6px;
|
||||||
|
padding: 15px 15px 15px 50px;
|
||||||
|
width: 300px;
|
||||||
|
-moz-border-radius: 3px 3px 3px 3px;
|
||||||
|
-webkit-border-radius: 3px 3px 3px 3px;
|
||||||
|
border-radius: 3px 3px 3px 3px;
|
||||||
|
background-position: 15px center;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
-moz-box-shadow: 0 0 12px #999999;
|
||||||
|
-webkit-box-shadow: 0 0 12px #999999;
|
||||||
|
box-shadow: 0 0 12px #999999;
|
||||||
|
color: #FFFFFF;
|
||||||
|
opacity: 0.8;
|
||||||
|
-ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);
|
||||||
|
filter: alpha(opacity=80);
|
||||||
|
}
|
||||||
|
#toast-container > div.rtl {
|
||||||
|
direction: rtl;
|
||||||
|
padding: 15px 50px 15px 15px;
|
||||||
|
background-position: right 15px center;
|
||||||
|
}
|
||||||
|
#toast-container > div:hover {
|
||||||
|
-moz-box-shadow: 0 0 12px #000000;
|
||||||
|
-webkit-box-shadow: 0 0 12px #000000;
|
||||||
|
box-shadow: 0 0 12px #000000;
|
||||||
|
opacity: 1;
|
||||||
|
-ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
|
||||||
|
filter: alpha(opacity=100);
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
#toast-container > .toast-info {
|
||||||
|
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=") !important;
|
||||||
|
}
|
||||||
|
#toast-container > .toast-error {
|
||||||
|
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=") !important;
|
||||||
|
}
|
||||||
|
#toast-container > .toast-success {
|
||||||
|
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==") !important;
|
||||||
|
}
|
||||||
|
#toast-container > .toast-warning {
|
||||||
|
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=") !important;
|
||||||
|
}
|
||||||
|
#toast-container.toast-top-center > div,
|
||||||
|
#toast-container.toast-bottom-center > div {
|
||||||
|
width: 300px;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
#toast-container.toast-top-full-width > div,
|
||||||
|
#toast-container.toast-bottom-full-width > div {
|
||||||
|
width: 96%;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
.toast {
|
||||||
|
background-color: #030303;
|
||||||
|
}
|
||||||
|
.toast-success {
|
||||||
|
background-color: #51A351;
|
||||||
|
}
|
||||||
|
.toast-error {
|
||||||
|
background-color: #BD362F;
|
||||||
|
}
|
||||||
|
.toast-info {
|
||||||
|
background-color: #2F96B4;
|
||||||
|
}
|
||||||
|
.toast-warning {
|
||||||
|
background-color: #F89406;
|
||||||
|
}
|
||||||
|
.toast-progress {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
bottom: 0;
|
||||||
|
height: 4px;
|
||||||
|
background-color: #000000;
|
||||||
|
opacity: 0.4;
|
||||||
|
-ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=40);
|
||||||
|
filter: alpha(opacity=40);
|
||||||
|
}
|
||||||
|
/*Responsive Design*/
|
||||||
|
@media all and (max-width: 240px) {
|
||||||
|
#toast-container > div {
|
||||||
|
padding: 8px 8px 8px 50px;
|
||||||
|
width: 11em;
|
||||||
|
}
|
||||||
|
#toast-container > div.rtl {
|
||||||
|
padding: 8px 50px 8px 8px;
|
||||||
|
}
|
||||||
|
#toast-container .toast-close-button {
|
||||||
|
right: -0.2em;
|
||||||
|
top: -0.2em;
|
||||||
|
}
|
||||||
|
#toast-container .rtl .toast-close-button {
|
||||||
|
left: -0.2em;
|
||||||
|
right: 0.2em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media all and (min-width: 241px) and (max-width: 480px) {
|
||||||
|
#toast-container > div {
|
||||||
|
padding: 8px 8px 8px 50px;
|
||||||
|
width: 18em;
|
||||||
|
}
|
||||||
|
#toast-container > div.rtl {
|
||||||
|
padding: 8px 50px 8px 8px;
|
||||||
|
}
|
||||||
|
#toast-container .toast-close-button {
|
||||||
|
right: -0.2em;
|
||||||
|
top: -0.2em;
|
||||||
|
}
|
||||||
|
#toast-container .rtl .toast-close-button {
|
||||||
|
left: -0.2em;
|
||||||
|
right: 0.2em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media all and (min-width: 481px) and (max-width: 768px) {
|
||||||
|
#toast-container > div {
|
||||||
|
padding: 15px 15px 15px 50px;
|
||||||
|
width: 25em;
|
||||||
|
}
|
||||||
|
#toast-container > div.rtl {
|
||||||
|
padding: 15px 50px 15px 15px;
|
||||||
|
}
|
||||||
|
}
|
After Width: | Height: | Size: 434 KiB |
After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 9.5 KiB |
Before Width: | Height: | Size: 8.2 KiB |
Before Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 7.4 KiB |
After Width: | Height: | Size: 491 B |
After Width: | Height: | Size: 288 B |
After Width: | Height: | Size: 60 KiB |
After Width: | Height: | Size: 973 B |
After Width: | Height: | Size: 7.0 KiB |
|
@ -0,0 +1,46 @@
|
||||||
|
/**
|
||||||
|
* Bootstrap Table Chinese translation
|
||||||
|
* Author: Zhixin Wen<wenzhixin2010@gmail.com>
|
||||||
|
*/
|
||||||
|
(function ($) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
$.fn.bootstrapTable.locales['zh-CN'] = {
|
||||||
|
formatLoadingMessage: function () {
|
||||||
|
return '正在努力地加载数据中,请稍候……';
|
||||||
|
},
|
||||||
|
formatRecordsPerPage: function (pageNumber) {
|
||||||
|
return '每页显示 ' + pageNumber + ' 条记录';
|
||||||
|
},
|
||||||
|
formatShowingRows: function (pageFrom, pageTo, totalRows) {
|
||||||
|
return '显示第 ' + pageFrom + ' 到第 ' + pageTo + ' 条记录,总共 ' + totalRows + ' 条记录';
|
||||||
|
},
|
||||||
|
formatSearch: function () {
|
||||||
|
return '搜索';
|
||||||
|
},
|
||||||
|
formatNoMatches: function () {
|
||||||
|
return '没有找到匹配的记录';
|
||||||
|
},
|
||||||
|
formatPaginationSwitch: function () {
|
||||||
|
return '隐藏/显示分页';
|
||||||
|
},
|
||||||
|
formatRefresh: function () {
|
||||||
|
return '刷新';
|
||||||
|
},
|
||||||
|
formatToggle: function () {
|
||||||
|
return '切换';
|
||||||
|
},
|
||||||
|
formatColumns: function () {
|
||||||
|
return '列';
|
||||||
|
},
|
||||||
|
formatExport: function () {
|
||||||
|
return '导出数据';
|
||||||
|
},
|
||||||
|
formatClearFilters: function () {
|
||||||
|
return '清空过滤';
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['zh-CN']);
|
||||||
|
|
||||||
|
})(jQuery);
|
|
@ -0,0 +1,7 @@
|
||||||
|
/*
|
||||||
|
* bootstrap-table - v1.12.1 - 2018-03-12
|
||||||
|
* https://github.com/wenzhixin/bootstrap-table
|
||||||
|
* Copyright (c) 2018 zhixin wen
|
||||||
|
* Licensed MIT License
|
||||||
|
*/
|
||||||
|
!function(a){"use strict";a.fn.bootstrapTable.locales["zh-CN"]={formatLoadingMessage:function(){return"正在努力地加载数据中,请稍候……"},formatRecordsPerPage:function(a){return"每页显示 "+a+" 条记录"},formatShowingRows:function(a,b,c){return"显示第 "+a+" 到第 "+b+" 条记录,总共 "+c+" 条记录"},formatSearch:function(){return"搜索"},formatNoMatches:function(){return"没有找到匹配的记录"},formatPaginationSwitch:function(){return"隐藏/显示分页"},formatRefresh:function(){return"刷新"},formatToggle:function(){return"切换"},formatColumns:function(){return"列"},formatExport:function(){return"导出数据"},formatClearFilters:function(){return"清空过滤"}},a.extend(a.fn.bootstrapTable.defaults,a.fn.bootstrapTable.locales["zh-CN"])}(jQuery);
|
|
@ -0,0 +1,68 @@
|
||||||
|
$(function () {
|
||||||
|
toastr.options = {
|
||||||
|
"closeButton": true,
|
||||||
|
"debug": false,
|
||||||
|
"progressBar": true,
|
||||||
|
"positionClass": "toast-bottom-right",
|
||||||
|
"onclick": null,
|
||||||
|
"showDuration": "600",
|
||||||
|
"hideDuration": "2000",
|
||||||
|
"timeOut": "4000",
|
||||||
|
"extendedTimeOut": "1000",
|
||||||
|
"showEasing": "swing",
|
||||||
|
"hideEasing": "linear",
|
||||||
|
"showMethod": "fadeIn",
|
||||||
|
"hideMethod": "fadeOut"
|
||||||
|
};
|
||||||
|
|
||||||
|
var $sidebar = $("#sidebar");
|
||||||
|
var $sideMenu = $sidebar.find('.sidebar-menu');
|
||||||
|
var $breadNav = $('#breadNav');
|
||||||
|
|
||||||
|
$sideMenu.dcAccordion({
|
||||||
|
autoExpand: true
|
||||||
|
});
|
||||||
|
|
||||||
|
// custom scrollbar
|
||||||
|
if (!$.browser.versions.ios) $sidebar.niceScroll({ cursorcolor: "#e8403f", cursorwidth: '3px', background: '#2a3542', spacebarenabled: false, cursorborder: '' });
|
||||||
|
|
||||||
|
$("#gotoTop").on('click', function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
$('body').animate({
|
||||||
|
scrollTop: 0
|
||||||
|
}, 200);
|
||||||
|
});
|
||||||
|
|
||||||
|
// breadcrumb
|
||||||
|
var arch = $sideMenu.find('a.active').last();
|
||||||
|
if (arch.text() !== "") $breadNav.removeClass('d-none').text(arch.text());
|
||||||
|
|
||||||
|
// sidebar scroll animate
|
||||||
|
var top = (arch.offset() || { top: 0 }).top;
|
||||||
|
if (top > 0) {
|
||||||
|
var middle = $('header').outerHeight() + $sidebar.outerHeight() / 2;
|
||||||
|
if (top > middle) $sidebar.animate({ scrollTop: top + arch.outerHeight() / 2 - middle }, 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
$sidebar.on('click', 'a.dcjq-parent', function () {
|
||||||
|
var o = $(this).offset();
|
||||||
|
diff = 110 - o.top;
|
||||||
|
if (diff > 0)
|
||||||
|
$sidebar.scrollTo("-=" + Math.abs(diff), 500);
|
||||||
|
else
|
||||||
|
$sidebar.scrollTo("+=" + Math.abs(diff), 500);
|
||||||
|
|
||||||
|
// resize nicscroll
|
||||||
|
$sidebar.getNiceScroll().resize();
|
||||||
|
});
|
||||||
|
|
||||||
|
$('.sidebar-toggle-box').on('click', function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
if ($(window).width() < 768) $sidebar.parent().toggleClass('open');
|
||||||
|
});
|
||||||
|
|
||||||
|
$('[data-toggle="dropdown"].dropdown-select').dropdown('select');
|
||||||
|
|
||||||
|
// tooltip
|
||||||
|
$('[data-toggle="tooltip"]').tooltip();
|
||||||
|
});
|
|
@ -0,0 +1,15 @@
|
||||||
|
$(function () {
|
||||||
|
$.fn.extend({
|
||||||
|
autoCenter: function () {
|
||||||
|
var that = this;
|
||||||
|
var getHeight = function () {
|
||||||
|
return Math.max(0, ($(window).height() - that.outerHeight()) / 2 + $(document).scrollTop());
|
||||||
|
};
|
||||||
|
$(window).resize(function () {
|
||||||
|
that.css({ marginTop: getHeight() });
|
||||||
|
});
|
||||||
|
that.css({ marginTop: getHeight(), transition: "all .5s linear" });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$('.error-wrapper').autoCenter();
|
||||||
|
});
|
|
@ -0,0 +1,225 @@
|
||||||
|
/*
|
||||||
|
* DC jQuery Vertical Accordion Menu - jQuery vertical accordion menu plugin
|
||||||
|
* Copyright (c) 2011 Design Chemical
|
||||||
|
*
|
||||||
|
* Dual licensed under the MIT and GPL licenses:
|
||||||
|
* http://www.opensource.org/licenses/mit-license.php
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
(function($){
|
||||||
|
|
||||||
|
$.fn.dcAccordion = function(options) {
|
||||||
|
|
||||||
|
//set default options
|
||||||
|
var defaults = {
|
||||||
|
classParent : 'dcjq-parent',
|
||||||
|
classActive : 'active',
|
||||||
|
classArrow : 'dcjq-icon',
|
||||||
|
classCount : 'dcjq-count',
|
||||||
|
classExpand : 'dcjq-current-parent',
|
||||||
|
eventType : 'click',
|
||||||
|
hoverDelay : 300,
|
||||||
|
menuClose : true,
|
||||||
|
autoClose : true,
|
||||||
|
autoExpand : false,
|
||||||
|
speed : 'slow',
|
||||||
|
saveState : true,
|
||||||
|
disableLink : true,
|
||||||
|
showCount : false,
|
||||||
|
// cookie : 'dcjq-accordion'
|
||||||
|
};
|
||||||
|
|
||||||
|
//call in the default otions
|
||||||
|
var options = $.extend(defaults, options);
|
||||||
|
|
||||||
|
this.each(function(options){
|
||||||
|
|
||||||
|
var obj = this;
|
||||||
|
setUpAccordion();
|
||||||
|
// if(defaults.saveState == true){
|
||||||
|
// checkCookie(defaults.cookie, obj);
|
||||||
|
// }
|
||||||
|
if(defaults.autoExpand == true){
|
||||||
|
$('li.'+defaults.classExpand+' > a').addClass(defaults.classActive);
|
||||||
|
}
|
||||||
|
resetAccordion();
|
||||||
|
|
||||||
|
if(defaults.eventType == 'hover'){
|
||||||
|
|
||||||
|
var config = {
|
||||||
|
sensitivity: 2, // number = sensitivity threshold (must be 1 or higher)
|
||||||
|
interval: defaults.hoverDelay, // number = milliseconds for onMouseOver polling interval
|
||||||
|
over: linkOver, // function = onMouseOver callback (REQUIRED)
|
||||||
|
timeout: defaults.hoverDelay, // number = milliseconds delay before onMouseOut
|
||||||
|
out: linkOut // function = onMouseOut callback (REQUIRED)
|
||||||
|
};
|
||||||
|
|
||||||
|
$('li a',obj).hoverIntent(config);
|
||||||
|
var configMenu = {
|
||||||
|
sensitivity: 2, // number = sensitivity threshold (must be 1 or higher)
|
||||||
|
interval: 1000, // number = milliseconds for onMouseOver polling interval
|
||||||
|
over: menuOver, // function = onMouseOver callback (REQUIRED)
|
||||||
|
timeout: 1000, // number = milliseconds delay before onMouseOut
|
||||||
|
out: menuOut // function = onMouseOut callback (REQUIRED)
|
||||||
|
};
|
||||||
|
|
||||||
|
$(obj).hoverIntent(configMenu);
|
||||||
|
|
||||||
|
// Disable parent links
|
||||||
|
if(defaults.disableLink == true){
|
||||||
|
|
||||||
|
$('li a',obj).click(function(e){
|
||||||
|
if($(this).siblings('ul').length >0){
|
||||||
|
e.preventDefault();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$('li a',obj).click(function(e){
|
||||||
|
|
||||||
|
$activeLi = $(this).parent('li');
|
||||||
|
$parentsLi = $activeLi.parents('li');
|
||||||
|
$parentsUl = $activeLi.parents('ul');
|
||||||
|
|
||||||
|
// Prevent browsing to link if has child links
|
||||||
|
if(defaults.disableLink == true){
|
||||||
|
if($(this).siblings('ul').length >0){
|
||||||
|
e.preventDefault();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Auto close sibling menus
|
||||||
|
if(defaults.autoClose == true){
|
||||||
|
autoCloseAccordion($parentsLi, $parentsUl);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($('> ul',$activeLi).is(':visible')){
|
||||||
|
$('ul',$activeLi).slideUp(defaults.speed);
|
||||||
|
$('a',$activeLi).removeClass(defaults.classActive);
|
||||||
|
} else {
|
||||||
|
$(this).siblings('ul').slideToggle(defaults.speed);
|
||||||
|
$('> a',$activeLi).addClass(defaults.classActive);
|
||||||
|
}
|
||||||
|
|
||||||
|
// // Write cookie if save state is on
|
||||||
|
// if(defaults.saveState == true){
|
||||||
|
// createCookie(defaults.cookie, obj);
|
||||||
|
// }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set up accordion
|
||||||
|
function setUpAccordion(){
|
||||||
|
|
||||||
|
$arrow = '<span class="'+defaults.classArrow+'"></span>';
|
||||||
|
var classParentLi = defaults.classParent+'-li';
|
||||||
|
$('> ul',obj).show();
|
||||||
|
$('li',obj).each(function(){
|
||||||
|
if($('> ul',this).length > 0){
|
||||||
|
$(this).addClass(classParentLi);
|
||||||
|
$('> a',this).addClass(defaults.classParent).append($arrow);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$('> ul',obj).hide();
|
||||||
|
if(defaults.showCount == true){
|
||||||
|
$('li.'+classParentLi,obj).each(function(){
|
||||||
|
if(defaults.disableLink == true){
|
||||||
|
var getCount = parseInt($('ul a:not(.'+defaults.classParent+')',this).length);
|
||||||
|
} else {
|
||||||
|
var getCount = parseInt($('ul a',this).length);
|
||||||
|
}
|
||||||
|
$('> a',this).append(' <span class="'+defaults.classCount+'">'+getCount+'</span>');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function linkOver(){
|
||||||
|
|
||||||
|
$activeLi = $(this).parent('li');
|
||||||
|
$parentsLi = $activeLi.parents('li');
|
||||||
|
$parentsUl = $activeLi.parents('ul');
|
||||||
|
|
||||||
|
// Auto close sibling menus
|
||||||
|
if(defaults.autoClose == true){
|
||||||
|
autoCloseAccordion($parentsLi, $parentsUl);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($('> ul',$activeLi).is(':visible')){
|
||||||
|
$('ul',$activeLi).slideUp(defaults.speed);
|
||||||
|
$('a',$activeLi).removeClass(defaults.classActive);
|
||||||
|
} else {
|
||||||
|
$(this).siblings('ul').slideToggle(defaults.speed);
|
||||||
|
$('> a',$activeLi).addClass(defaults.classActive);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write cookie if save state is on
|
||||||
|
if(defaults.saveState == true){
|
||||||
|
createCookie(defaults.cookie, obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function linkOut(){
|
||||||
|
}
|
||||||
|
|
||||||
|
function menuOver(){
|
||||||
|
}
|
||||||
|
|
||||||
|
function menuOut(){
|
||||||
|
|
||||||
|
if(defaults.menuClose == true){
|
||||||
|
$('ul',obj).slideUp(defaults.speed);
|
||||||
|
// Reset active links
|
||||||
|
$('a',obj).removeClass(defaults.classActive);
|
||||||
|
createCookie(defaults.cookie, obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Auto-Close Open Menu Items
|
||||||
|
function autoCloseAccordion($parentsLi, $parentsUl){
|
||||||
|
$('ul',obj).not($parentsUl).slideUp(defaults.speed);
|
||||||
|
// Reset active links
|
||||||
|
$('a',obj).removeClass(defaults.classActive);
|
||||||
|
$('> a',$parentsLi).addClass(defaults.classActive);
|
||||||
|
}
|
||||||
|
// Reset accordion using active links
|
||||||
|
function resetAccordion(){
|
||||||
|
$('ul',obj).hide();
|
||||||
|
$allActiveLi = $('a.'+defaults.classActive,obj);
|
||||||
|
$allActiveLi.siblings('ul').show();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Retrieve cookie value and set active items
|
||||||
|
// function checkCookie(cookieId, obj){
|
||||||
|
// var cookieVal = $.cookie(cookieId);
|
||||||
|
// if(cookieVal != null){
|
||||||
|
// // create array from cookie string
|
||||||
|
// var activeArray = cookieVal.split(',');
|
||||||
|
// $.each(activeArray, function(index,value){
|
||||||
|
// var $cookieLi = $('li:eq('+value+')',obj);
|
||||||
|
// $('> a',$cookieLi).addClass(defaults.classActive);
|
||||||
|
// var $parentsLi = $cookieLi.parents('li');
|
||||||
|
// $('> a',$parentsLi).addClass(defaults.classActive);
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// Write cookie
|
||||||
|
// function createCookie(cookieId, obj){
|
||||||
|
// var activeIndex = [];
|
||||||
|
// // Create array of active items index value
|
||||||
|
// $('li a.'+defaults.classActive,obj).each(function(i){
|
||||||
|
// var $arrayItem = $(this).parent('li');
|
||||||
|
// var itemIndex = $('li',obj).index($arrayItem);
|
||||||
|
// activeIndex.push(itemIndex);
|
||||||
|
// });
|
||||||
|
// // Store in cookie
|
||||||
|
// $.cookie(cookieId, activeIndex, { path: '/' });
|
||||||
|
// }
|
||||||
|
};
|
||||||
|
})(jQuery);
|
|
@ -0,0 +1,210 @@
|
||||||
|
/*!
|
||||||
|
* jQuery.scrollTo
|
||||||
|
* Copyright (c) 2007-2015 Ariel Flesler - aflesler ○ gmail • com | http://flesler.blogspot.com
|
||||||
|
* Licensed under MIT
|
||||||
|
* http://flesler.blogspot.com/2007/10/jqueryscrollto.html
|
||||||
|
* @projectDescription Lightweight, cross-browser and highly customizable animated scrolling with jQuery
|
||||||
|
* @author Ariel Flesler
|
||||||
|
* @version 2.1.2
|
||||||
|
*/
|
||||||
|
; (function (factory) {
|
||||||
|
'use strict';
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD
|
||||||
|
define(['jquery'], factory);
|
||||||
|
} else if (typeof module !== 'undefined' && module.exports) {
|
||||||
|
// CommonJS
|
||||||
|
module.exports = factory(require('jquery'));
|
||||||
|
} else {
|
||||||
|
// Global
|
||||||
|
factory(jQuery);
|
||||||
|
}
|
||||||
|
})(function ($) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var $scrollTo = $.scrollTo = function (target, duration, settings) {
|
||||||
|
return $(window).scrollTo(target, duration, settings);
|
||||||
|
};
|
||||||
|
|
||||||
|
$scrollTo.defaults = {
|
||||||
|
axis: 'xy',
|
||||||
|
duration: 0,
|
||||||
|
limit: true
|
||||||
|
};
|
||||||
|
|
||||||
|
function isWin(elem) {
|
||||||
|
return !elem.nodeName ||
|
||||||
|
$.inArray(elem.nodeName.toLowerCase(), ['iframe', '#document', 'html', 'body']) !== -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
$.fn.scrollTo = function (target, duration, settings) {
|
||||||
|
if (typeof duration === 'object') {
|
||||||
|
settings = duration;
|
||||||
|
duration = 0;
|
||||||
|
}
|
||||||
|
if (typeof settings === 'function') {
|
||||||
|
settings = { onAfter: settings };
|
||||||
|
}
|
||||||
|
if (target === 'max') {
|
||||||
|
target = 9e9;
|
||||||
|
}
|
||||||
|
|
||||||
|
settings = $.extend({}, $scrollTo.defaults, settings);
|
||||||
|
// Speed is still recognized for backwards compatibility
|
||||||
|
duration = duration || settings.duration;
|
||||||
|
// Make sure the settings are given right
|
||||||
|
var queue = settings.queue && settings.axis.length > 1;
|
||||||
|
if (queue) {
|
||||||
|
// Let's keep the overall duration
|
||||||
|
duration /= 2;
|
||||||
|
}
|
||||||
|
settings.offset = both(settings.offset);
|
||||||
|
settings.over = both(settings.over);
|
||||||
|
|
||||||
|
return this.each(function () {
|
||||||
|
// Null target yields nothing, just like jQuery does
|
||||||
|
if (target === null) return;
|
||||||
|
|
||||||
|
var win = isWin(this),
|
||||||
|
elem = win ? this.contentWindow || window : this,
|
||||||
|
$elem = $(elem),
|
||||||
|
targ = target,
|
||||||
|
attr = {},
|
||||||
|
toff;
|
||||||
|
|
||||||
|
switch (typeof targ) {
|
||||||
|
// A number will pass the regex
|
||||||
|
case 'number':
|
||||||
|
case 'string':
|
||||||
|
if (/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(targ)) {
|
||||||
|
targ = both(targ);
|
||||||
|
// We are done
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// Relative/Absolute selector
|
||||||
|
targ = win ? $(targ) : $(targ, elem);
|
||||||
|
/* falls through */
|
||||||
|
case 'object':
|
||||||
|
if (targ.length === 0) return;
|
||||||
|
// DOMElement / jQuery
|
||||||
|
if (targ.is || targ.style) {
|
||||||
|
// Get the real position of the target
|
||||||
|
toff = (targ = $(targ)).offset();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var offset = $.isFunction(settings.offset) && settings.offset(elem, targ) || settings.offset;
|
||||||
|
|
||||||
|
$.each(settings.axis.split(''), function (i, axis) {
|
||||||
|
var Pos = axis === 'x' ? 'Left' : 'Top',
|
||||||
|
pos = Pos.toLowerCase(),
|
||||||
|
key = 'scroll' + Pos,
|
||||||
|
prev = $elem[key](),
|
||||||
|
max = $scrollTo.max(elem, axis);
|
||||||
|
|
||||||
|
if (toff) {// jQuery / DOMElement
|
||||||
|
attr[key] = toff[pos] + (win ? 0 : prev - $elem.offset()[pos]);
|
||||||
|
|
||||||
|
// If it's a dom element, reduce the margin
|
||||||
|
if (settings.margin) {
|
||||||
|
attr[key] -= parseInt(targ.css('margin' + Pos), 10) || 0;
|
||||||
|
attr[key] -= parseInt(targ.css('border' + Pos + 'Width'), 10) || 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
attr[key] += offset[pos] || 0;
|
||||||
|
|
||||||
|
if (settings.over[pos]) {
|
||||||
|
// Scroll to a fraction of its width/height
|
||||||
|
attr[key] += targ[axis === 'x' ? 'width' : 'height']() * settings.over[pos];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
var val = targ[pos];
|
||||||
|
// Handle percentage values
|
||||||
|
attr[key] = val.slice && val.slice(-1) === '%' ?
|
||||||
|
parseFloat(val) / 100 * max
|
||||||
|
: val;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Number or 'number'
|
||||||
|
if (settings.limit && /^\d+$/.test(attr[key])) {
|
||||||
|
// Check the limits
|
||||||
|
attr[key] = attr[key] <= 0 ? 0 : Math.min(attr[key], max);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Don't waste time animating, if there's no need.
|
||||||
|
if (!i && settings.axis.length > 1) {
|
||||||
|
if (prev === attr[key]) {
|
||||||
|
// No animation needed
|
||||||
|
attr = {};
|
||||||
|
} else if (queue) {
|
||||||
|
// Intermediate animation
|
||||||
|
animate(settings.onAfterFirst);
|
||||||
|
// Don't animate this axis again in the next iteration.
|
||||||
|
attr = {};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
animate(settings.onAfter);
|
||||||
|
|
||||||
|
function animate(callback) {
|
||||||
|
var opts = $.extend({}, settings, {
|
||||||
|
// The queue setting conflicts with animate()
|
||||||
|
// Force it to always be true
|
||||||
|
queue: true,
|
||||||
|
duration: duration,
|
||||||
|
complete: callback && function () {
|
||||||
|
callback.call(elem, targ, settings);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$elem.animate(attr, opts);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// Max scrolling position, works on quirks mode
|
||||||
|
// It only fails (not too badly) on IE, quirks mode.
|
||||||
|
$scrollTo.max = function (elem, axis) {
|
||||||
|
var Dim = axis === 'x' ? 'Width' : 'Height',
|
||||||
|
scroll = 'scroll' + Dim;
|
||||||
|
|
||||||
|
if (!isWin(elem))
|
||||||
|
return elem[scroll] - $(elem)[Dim.toLowerCase()]();
|
||||||
|
|
||||||
|
var size = 'client' + Dim,
|
||||||
|
doc = elem.ownerDocument || elem.document,
|
||||||
|
html = doc.documentElement,
|
||||||
|
body = doc.body;
|
||||||
|
|
||||||
|
return Math.max(html[scroll], body[scroll]) - Math.min(html[size], body[size]);
|
||||||
|
};
|
||||||
|
|
||||||
|
function both(val) {
|
||||||
|
return $.isFunction(val) || $.isPlainObject(val) ? val : { top: val, left: val };
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add special hooks so that window scroll properties can be animated
|
||||||
|
$.Tween.propHooks.scrollLeft =
|
||||||
|
$.Tween.propHooks.scrollTop = {
|
||||||
|
get: function (t) {
|
||||||
|
return $(t.elem)[t.prop]();
|
||||||
|
},
|
||||||
|
set: function (t) {
|
||||||
|
var curr = this.get(t);
|
||||||
|
// If interrupt is true and user scrolled, stop animating
|
||||||
|
if (t.options.interrupt && t._last && t._last !== curr) {
|
||||||
|
return $(t.elem).stop();
|
||||||
|
}
|
||||||
|
var next = Math.round(t.now);
|
||||||
|
// Don't waste CPU
|
||||||
|
// Browsers don't render floating point scroll
|
||||||
|
if (curr !== next) {
|
||||||
|
$(t.elem)[t.prop](next);
|
||||||
|
t._last = this.get(t);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// AMD requirement
|
||||||
|
return $scrollTo;
|
||||||
|
});
|
|
@ -0,0 +1,7 @@
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2007-2013 Ariel Flesler - aflesler<a>gmail<d>com | http://flesler.blogspot.com
|
||||||
|
* Dual licensed under MIT and GPL.
|
||||||
|
* @author Ariel Flesler
|
||||||
|
* @version 1.4.6
|
||||||
|
*/
|
||||||
|
;(function($){var h=$.scrollTo=function(a,b,c){$(window).scrollTo(a,b,c)};h.defaults={axis:'xy',duration:parseFloat($.fn.jquery)>=1.3?0:1,limit:true};h.window=function(a){return $(window)._scrollable()};$.fn._scrollable=function(){return this.map(function(){var a=this,isWin=!a.nodeName||$.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!isWin)return a;var b=(a.contentWindow||a).document||a.ownerDocument||a;return/webkit/i.test(navigator.userAgent)||b.compatMode=='BackCompat'?b.body:b.documentElement})};$.fn.scrollTo=function(e,f,g){if(typeof f=='object'){g=f;f=0}if(typeof g=='function')g={onAfter:g};if(e=='max')e=9e9;g=$.extend({},h.defaults,g);f=f||g.duration;g.queue=g.queue&&g.axis.length>1;if(g.queue)f/=2;g.offset=both(g.offset);g.over=both(g.over);return this._scrollable().each(function(){if(e==null)return;var d=this,$elem=$(d),targ=e,toff,attr={},win=$elem.is('html,body');switch(typeof targ){case'number':case'string':if(/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(targ)){targ=both(targ);break}targ=$(targ,this);if(!targ.length)return;case'object':if(targ.is||targ.style)toff=(targ=$(targ)).offset()}$.each(g.axis.split(''),function(i,a){var b=a=='x'?'Left':'Top',pos=b.toLowerCase(),key='scroll'+b,old=d[key],max=h.max(d,a);if(toff){attr[key]=toff[pos]+(win?0:old-$elem.offset()[pos]);if(g.margin){attr[key]-=parseInt(targ.css('margin'+b))||0;attr[key]-=parseInt(targ.css('border'+b+'Width'))||0}attr[key]+=g.offset[pos]||0;if(g.over[pos])attr[key]+=targ[a=='x'?'width':'height']()*g.over[pos]}else{var c=targ[pos];attr[key]=c.slice&&c.slice(-1)=='%'?parseFloat(c)/100*max:c}if(g.limit&&/^\d+$/.test(attr[key]))attr[key]=attr[key]<=0?0:Math.min(attr[key],max);if(!i&&g.queue){if(old!=attr[key])animate(g.onAfterFirst);delete attr[key]}});animate(g.onAfter);function animate(a){$elem.animate(attr,f,g.easing,a&&function(){a.call(this,targ,g)})}}).end()};h.max=function(a,b){var c=b=='x'?'Width':'Height',scroll='scroll'+c;if(!$(a).is('html,body'))return a[scroll]-$(a)[c.toLowerCase()]();var d='client'+c,html=a.ownerDocument.documentElement,body=a.ownerDocument.body;return Math.max(html[scroll],body[scroll])-Math.min(html[d],body[d])};function both(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);
|
|
@ -0,0 +1,404 @@
|
||||||
|
(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;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// enhance window.console.log
|
||||||
|
if (!window.console) {
|
||||||
|
window.console = {
|
||||||
|
log: function () {
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
window.console = window.console || {};
|
||||||
|
console.log || (console.log = opera.postError);
|
||||||
|
|
||||||
|
// client
|
||||||
|
jQuery.browser = {
|
||||||
|
versions: function () {
|
||||||
|
var u = navigator.userAgent;
|
||||||
|
return { //移动终端浏览器版本信息
|
||||||
|
trident: u.indexOf('Trident') > -1, //IE内核
|
||||||
|
presto: u.indexOf('Presto') > -1, //opera内核
|
||||||
|
webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核
|
||||||
|
gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') === -1, //火狐内核
|
||||||
|
mobile: !!u.match(/AppleWebKit.*Mobile.*/), //是否为移动终端
|
||||||
|
ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端
|
||||||
|
android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android终端或uc浏览器
|
||||||
|
iPhone: u.indexOf('iPhone') > -1, //是否为iPhone或者QQHD浏览器
|
||||||
|
iPod: u.indexOf('iPod') > -1, //是否为iPod或者QQHD浏览器
|
||||||
|
iPad: u.indexOf('iPad') > -1, //是否iPad
|
||||||
|
webApp: u.indexOf('Safari') === -1 //是否web应该程序,没有头部与底部
|
||||||
|
};
|
||||||
|
}(),
|
||||||
|
language: (navigator.browserLanguage || navigator.language).toLowerCase()
|
||||||
|
};
|
||||||
|
|
||||||
|
$.extend({
|
||||||
|
bc: function (options) {
|
||||||
|
options = $.extend({
|
||||||
|
id: "",
|
||||||
|
url: "",
|
||||||
|
data: {},
|
||||||
|
htmlTemplate: '<div class="form-group col-md-3 col-sm-4 col-6"><div class="form-check"><label class="form-check-label" title="{3}" data-toggle="tooltip"><input type="checkbox" class="form-check-input" value="{0}" {2}/><span>{1}</span></label></div></div>',
|
||||||
|
title: "",
|
||||||
|
modal: false,
|
||||||
|
loading: false,
|
||||||
|
loadingTimeout: 10000,
|
||||||
|
callback: false,
|
||||||
|
cors: false,
|
||||||
|
contentType: 'application/json',
|
||||||
|
dataType: 'json',
|
||||||
|
method: 'get'
|
||||||
|
}, options);
|
||||||
|
|
||||||
|
if (!options.url || options.url === "") {
|
||||||
|
toastr.error('参数错误: 未设置请求地址Url');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options.loading && options.modal) {
|
||||||
|
$(options.modal).find('.close').addClass('hidden');
|
||||||
|
$(options.modal).modal('show');
|
||||||
|
setTimeout(function () {
|
||||||
|
$(options.modal).find('.close').removeClass('hidden');
|
||||||
|
}, options.loadingTimeout);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var data = options.method === 'get' ? options.data : JSON.stringify(options.data);
|
||||||
|
var url = options.id !== '' ? options.url + '/' + options.id : options.url;
|
||||||
|
if (options.query) {
|
||||||
|
var qs = [];
|
||||||
|
for (var key in options.query) {
|
||||||
|
qs.push($.format("{0}={1}", key, options.query[key]));
|
||||||
|
}
|
||||||
|
url = url + "?" + qs.join('&');
|
||||||
|
}
|
||||||
|
var ajaxSettings = {
|
||||||
|
url: $.formatUrl(url),
|
||||||
|
data: data,
|
||||||
|
method: options.method,
|
||||||
|
contentType: options.contentType,
|
||||||
|
dataType: options.dataType,
|
||||||
|
crossDomain: false,
|
||||||
|
success: function (result) {
|
||||||
|
success(result);
|
||||||
|
},
|
||||||
|
error: function (XMLHttpRequest, textStatus, errorThrown) {
|
||||||
|
success(false);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
if (options.cors) $.extend(ajaxSettings, {
|
||||||
|
xhrFields: { withCredentials: true },
|
||||||
|
crossDomain: true
|
||||||
|
});
|
||||||
|
$.ajax(ajaxSettings);
|
||||||
|
|
||||||
|
function success(result) {
|
||||||
|
if ($.isFunction(options.callback)) {
|
||||||
|
options.callback.call(options, result);
|
||||||
|
}
|
||||||
|
if (options.modal && (result || options.loading)) {
|
||||||
|
$(options.modal).modal('hide');
|
||||||
|
}
|
||||||
|
if (options.title) toastr[result ? 'success' : 'error'](options.title + (result ? "成功" : "失败"));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
lgbSwal: function (options) {
|
||||||
|
if ($.isFunction(swal)) {
|
||||||
|
swal($.extend({ html: true, showConfirmButton: false, showCancelButton: false, timer: 1000, title: '未设置', type: "success" }, options));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
getUID: function (prefix) {
|
||||||
|
if (!prefix) prefix = 'lgb';
|
||||||
|
do prefix += ~~(Math.random() * 1000000);
|
||||||
|
while (document.getElementById(prefix));
|
||||||
|
return prefix;
|
||||||
|
},
|
||||||
|
fullScreenStatus: function fullScreenStatus(value) {
|
||||||
|
if (value !== undefined) window.fullscreen = value;
|
||||||
|
return document.fullscreen ||
|
||||||
|
document.mozFullScreen ||
|
||||||
|
document.webkitIsFullScreen || window.fullscreen ||
|
||||||
|
false;
|
||||||
|
},
|
||||||
|
formatter: function (key) {
|
||||||
|
if (!this[key]) {
|
||||||
|
this[key] = {};
|
||||||
|
var that = this;
|
||||||
|
$.each($('#' + key).children(), function (index, element) {
|
||||||
|
that[key][$(element).attr('value')] = $(element).text();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
},
|
||||||
|
formatUrl: function (url) {
|
||||||
|
if (!url) return url;
|
||||||
|
if (url.substr(0, 4) === "http") return url;
|
||||||
|
var base = $('#pathBase').attr('href');
|
||||||
|
return base + url;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
window.lgbSwal = $.lgbSwal;
|
||||||
|
|
||||||
|
$.fn.extend({
|
||||||
|
fixCollapse: function () {
|
||||||
|
var $root = this;
|
||||||
|
var $collapse = $root.find('a[data-toggle="collapse"]:visible');
|
||||||
|
$collapse.each(function () {
|
||||||
|
var $this = $(this);
|
||||||
|
if ($this.attr('href') !== '#') return;
|
||||||
|
var $target = $this.parent().next();
|
||||||
|
var tId = $.getUID('collapse');
|
||||||
|
$target.attr('id', tId);
|
||||||
|
$this.attr('href', '#' + tId);
|
||||||
|
});
|
||||||
|
return this;
|
||||||
|
},
|
||||||
|
adjustDialog: function () {
|
||||||
|
var $modal_dialog = this;
|
||||||
|
var m_top = Math.max(0, ($(window).height() - $modal_dialog.height()) / 2);
|
||||||
|
$modal_dialog.css({ 'margin': m_top + 'px auto' });
|
||||||
|
return this;
|
||||||
|
},
|
||||||
|
autoCenter: function (options) {
|
||||||
|
options = $.extend({ top: 0 }, options);
|
||||||
|
var that = this;
|
||||||
|
var defaultVal = parseFloat(that.css('marginTop').replace('px', ''));
|
||||||
|
var getHeight = function () {
|
||||||
|
return Math.max(defaultVal, ($(window).height() - options.top - that.outerHeight()) / 2 + $(document).scrollTop());
|
||||||
|
};
|
||||||
|
$(window).resize(function () {
|
||||||
|
that.css({ marginTop: getHeight() });
|
||||||
|
});
|
||||||
|
that.css({ marginTop: getHeight(), transition: "all .5s linear" });
|
||||||
|
return this;
|
||||||
|
},
|
||||||
|
footer: function (options) {
|
||||||
|
if ($(window).width() >= 768) { return this.addClass('position-fixed'); }
|
||||||
|
var op = $.extend({ header: "header", content: ".main-content" }, options);
|
||||||
|
return $(op.header).outerHeight() + $(op.content).outerHeight() + this.outerHeight() > $(window).height() ? this.removeClass('position-fixed') : this.addClass('position-fixed');
|
||||||
|
},
|
||||||
|
lgbTable: function (options) {
|
||||||
|
var bsa = new DataTable($.extend(options.dataBinder, { url: options.url }));
|
||||||
|
|
||||||
|
var settings = $.extend({
|
||||||
|
url: options.url,
|
||||||
|
checkbox: true,
|
||||||
|
edit: true,
|
||||||
|
editTitle: "编辑",
|
||||||
|
editField: "Id",
|
||||||
|
queryButton: false
|
||||||
|
}, options.smartTable);
|
||||||
|
if (settings.edit) settings.columns.unshift({
|
||||||
|
title: settings.editTitle,
|
||||||
|
field: settings.editField,
|
||||||
|
events: bsa.idEvents(),
|
||||||
|
formatter: function (value, row, index) {
|
||||||
|
return "<a class='edit' title='" + value + "' href='javascript:void(0)'>" + this.title + "</a>";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (settings.checkbox) settings.columns.unshift({ checkbox: true });
|
||||||
|
return this.smartTable(settings);
|
||||||
|
},
|
||||||
|
smartTable: function (options) {
|
||||||
|
var settings = $.extend({
|
||||||
|
toolbar: '#toolbar', //工具按钮用哪个容器
|
||||||
|
striped: true, //是否显示行间隔色
|
||||||
|
cache: false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
|
||||||
|
pagination: true, //是否显示分页(*)
|
||||||
|
sortOrder: "asc", //排序方式
|
||||||
|
sidePagination: "server", //分页方式:client客户端分页,server服务端分页(*)
|
||||||
|
pageNumber: 1, //初始化加载第一页,默认第一页
|
||||||
|
pageSize: 20, //每页的记录行数(*)
|
||||||
|
pageList: [20, 40, 80, 120], //可供选择的每页的行数(*)
|
||||||
|
showColumns: true, //是否显示所有的列
|
||||||
|
showRefresh: true, //是否显示刷新按钮
|
||||||
|
showToggle: true, //是否显示详细视图和列表视图的切换按钮
|
||||||
|
cardView: $(window).width() < 768, //是否显示详细视图
|
||||||
|
footer: '.site-footer',
|
||||||
|
queryButton: '#btn_query',
|
||||||
|
onLoadSuccess: function () {
|
||||||
|
$(settings.footer).footer();
|
||||||
|
}
|
||||||
|
}, options);
|
||||||
|
settings.url = $.formatUrl(settings.url);
|
||||||
|
this.bootstrapTable(settings);
|
||||||
|
$(settings.toolbar).removeClass('d-none').find('.toolbar').on('click', 'a', function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
$('#' + $(this).attr('id').replace('tb_', 'btn_')).trigger("click");
|
||||||
|
}).insertBefore(this.parents('.bootstrap-table').find('.fixed-table-toolbar > .bs-bars'));
|
||||||
|
if (settings.queryButton) {
|
||||||
|
$(settings.queryButton).on('click', this, function (e) {
|
||||||
|
e.data.bootstrapTable('refresh');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
},
|
||||||
|
msgHandler: function (options) {
|
||||||
|
var settings = {
|
||||||
|
url: 'api/WS',
|
||||||
|
interval: 10000,
|
||||||
|
sendMessage: '',
|
||||||
|
timerHandler: null,
|
||||||
|
onopen: function (e) { },
|
||||||
|
onmessage: function (e) { },
|
||||||
|
onclose: function (e) { },
|
||||||
|
errorHandler: function (e) { if (toastr && $.isFunction(toastr.error)) toastr.error("连接服务器失败!", "系统错误"); },
|
||||||
|
loop: function () {
|
||||||
|
var that = this;
|
||||||
|
var uri = window.location.protocol + "//" + window.location.host + $.formatUrl(settings.url);
|
||||||
|
$.bc({
|
||||||
|
url: uri,
|
||||||
|
id: this.sendMessage,
|
||||||
|
method: "post",
|
||||||
|
callback: function (result) {
|
||||||
|
if (!result) {
|
||||||
|
that.errorHandler.call(that.target);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
that.onmessage.call(that.target, { data: JSON.stringify(result) });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (this.timerHandler !== null) clearTimeout(this.timerHandler);
|
||||||
|
this.timerHandler = setTimeout(function () { that.loop(); }, that.interval);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
$.extend(settings, options, { target: this });
|
||||||
|
settings.loop();
|
||||||
|
return this;
|
||||||
|
},
|
||||||
|
socketHandler: function (options) {
|
||||||
|
// WebSocket消息处理方法
|
||||||
|
var settings = {
|
||||||
|
url: 'WS',
|
||||||
|
interval: 30000,
|
||||||
|
sendMessage: 'keepalive',
|
||||||
|
timerHandler: null,
|
||||||
|
onopen: function (e) { },
|
||||||
|
onerror: function (e) { },
|
||||||
|
errorHandler: function (e) { if (window.toastr && $.isFunction(window.toastr.error)) toastr.error("连接服务器失败!", "系统错误"); },
|
||||||
|
onmessage: function (e) { },
|
||||||
|
onclose: function (e) { },
|
||||||
|
loop: function (socket) {
|
||||||
|
var that = this;
|
||||||
|
if (socket.readyState === 1) {
|
||||||
|
socket.send(this.sendMessage);
|
||||||
|
if (this.timerHandler !== null) clearTimeout(this.timerHandler);
|
||||||
|
this.timerHandler = setTimeout(function () { that.loop(socket); }, that.interval);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.errorHandler();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
$.extend(settings, options, { target: this });
|
||||||
|
var uri = "ws://" + window.location.host + $.formatUrl(settings.url);
|
||||||
|
var socket = new WebSocket(uri);
|
||||||
|
socket.onopen = function (e) { settings.onopen.call(settings.target, e); settings.loop(socket); };
|
||||||
|
socket.onerror = function (e) {
|
||||||
|
settings.onerror.call(settings.target, e);
|
||||||
|
settings.target.msgHandler(options);
|
||||||
|
};
|
||||||
|
socket.onmessage = function (e) { settings.onmessage.call(settings.target, e); };
|
||||||
|
socket.onclose = function (e) { settings.onclose.call(settings.target, e); };
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
//extend dropdown method
|
||||||
|
$.extend($.fn.dropdown.Constructor.prototype, {
|
||||||
|
val: function () {
|
||||||
|
var $element = $(this._element);
|
||||||
|
var $op = $(this._menu).find('[data-val="' + $element.val() + '"]:first');
|
||||||
|
$element.text($op.text());
|
||||||
|
},
|
||||||
|
select: function () {
|
||||||
|
var $element = $(this._element);
|
||||||
|
$(this._menu).on('click', 'a', function (event) {
|
||||||
|
event.preventDefault();
|
||||||
|
var $op = $(this);
|
||||||
|
$element.text($op.text()).val($op.attr('data-val'));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})(jQuery);
|