Merge branch 'dev'
This commit is contained in:
commit
118864f50c
|
@ -87,6 +87,10 @@
|
|||
<label class="control-label" for="cardTitle">固定表头</label>
|
||||
<Toggle @bind-Value="@Model.FixedTableHeader" OnText="固定" OffText="跟随"></Toggle>
|
||||
</div>
|
||||
<div class="form-group col-6">
|
||||
<label class="control-label" for="cardTitle">健康检查</label>
|
||||
<Toggle @bind-Value="@Model.EnableHealth" OnText="开启" OffText="关闭"></Toggle>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer text-right">
|
||||
|
|
|
@ -72,6 +72,7 @@ namespace Bootstrap.Admin.Pages.Views.Admin.Components
|
|||
Model.EnableBlazor = DictHelper.RetrieveEnableBlazor();
|
||||
Model.FixedTableHeader = DictHelper.RetrieveFixedTableHeader();
|
||||
Model.Themes = DictHelper.RetrieveThemes();
|
||||
Model.EnableHealth = DictHelper.RetrieveHealth();
|
||||
|
||||
Model.IPLocators = new SelectedItem[] { new SelectedItem() { Text = "未设置", Value = "None" } }.Union(DictHelper.RetireveLocators().Select(d => new SelectedItem()
|
||||
{
|
||||
|
@ -372,6 +373,11 @@ namespace Bootstrap.Admin.Pages.Views.Admin.Components
|
|||
/// 获得 系统是否为演示模式
|
||||
/// </summary>
|
||||
public bool EnableDemo { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获得 系统是否允许健康检查
|
||||
/// </summary>
|
||||
public bool EnableHealth { get; set; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
using PetaPoco;
|
||||
using Bootstrap.Security.Mvc;
|
||||
using Longbow.Data;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using PetaPoco;
|
||||
using System;
|
||||
using System.Collections.Specialized;
|
||||
|
||||
|
@ -21,5 +24,30 @@ namespace Bootstrap.Client.DataAccess
|
|||
db.ExceptionThrown += (sender, args) => args.Exception.Log(new NameValueCollection() { ["LastCmd"] = db.LastCommand });
|
||||
return db;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 创建 Sqlite 类型的 IDatabase 实例
|
||||
/// </summary>
|
||||
/// <param name="connectionName">配置文件中配置的数据库连接字符串名称</param>
|
||||
/// <param name="keepAlive">是否保持连接,默认为 false</param>
|
||||
/// <returns></returns>
|
||||
public static IDatabase CreateSqlite(string? connectionName = "client", bool keepAlive = false)
|
||||
{
|
||||
// 此方法为演示同时连接不同的数据库操作
|
||||
|
||||
// 此处注释为获取连接字符串的不同方法
|
||||
//var conn = Bootstrap.Security.Mvc.BootstrapAppContext.Configuration["ConnectionStrings:client"];
|
||||
//var conn = Bootstrap.Security.Mvc.BootstrapAppContext.Configuration.GetSection("ConnectionStrings").GetValue("client", "");
|
||||
|
||||
var conn = BootstrapAppContext.Configuration.GetConnectionString(connectionName);
|
||||
var db = Longbow.Data.DbManager.Create(new DatabaseOption()
|
||||
{
|
||||
ProviderName = DatabaseProviderType.SQLite,
|
||||
ConnectionString = conn,
|
||||
KeepAlive = keepAlive
|
||||
});
|
||||
db.ExceptionThrown += (sender, args) => args.Exception.Log(new NameValueCollection() { ["LastCmd"] = db.LastCommand });
|
||||
return db;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
using PetaPoco;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Bootstrap.Client.DataAccess
|
||||
{
|
||||
/// <summary>
|
||||
/// 示例实体类
|
||||
/// </summary>
|
||||
[TableName("Dummy")]
|
||||
[PrimaryKey("Id", AutoIncrement = true)]
|
||||
public class Dummy
|
||||
{
|
||||
/// <summary>
|
||||
/// 获得/设置 数据库主键 ID 列值
|
||||
/// </summary>
|
||||
public string? Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获得/设置 数据库 Item1 列
|
||||
/// </summary>
|
||||
public string Item1 { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// 获得/设置 数据库 Item2 列
|
||||
/// </summary>
|
||||
public string Item2 { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// 获得/设置 数据库 Item3 列
|
||||
/// </summary>
|
||||
public int Item3 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 通过当前用户名获得所有菜单
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public virtual IEnumerable<Dummy> Retrieves()
|
||||
{
|
||||
using var db = DbManager.Create("client");
|
||||
return db.Fetch<Dummy>();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,47 @@
|
|||
using Longbow.Data;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Bootstrap.Client.DataAccess
|
||||
{
|
||||
/// <summary>
|
||||
/// 示例操作帮助类
|
||||
/// </summary>
|
||||
public static class DummyHelper
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取数据库中所有 Dummy 表数据
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static IEnumerable<Dummy> Retrieves()
|
||||
{
|
||||
// 此处启用智能切换数据库功能
|
||||
return DbContextManager.Create<Dummy>()?.Retrieves() ?? new Dummy[0];
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 保存 Dummy 实例到数据库中
|
||||
/// </summary>
|
||||
/// <param name="dummy"></param>
|
||||
/// <returns></returns>
|
||||
public static bool Save(Dummy dummy)
|
||||
{
|
||||
// 此处未启用智能
|
||||
using var db = DbManager.Create("client");
|
||||
db.Save(dummy);
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 删除指定 ID 的 Dummy 数据
|
||||
/// </summary>
|
||||
/// <param name="ids"></param>
|
||||
/// <returns></returns>
|
||||
public static bool Delete(IEnumerable<string> ids)
|
||||
{
|
||||
// 此处使用指定 Sqlite 数据方法执行数据库操作 演示同一个程序操作多个数据库的场景
|
||||
using var db = DbManager.CreateSqlite("client");
|
||||
db.Delete<Dummy>("where Id in (@ids)", new { ids });
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
Binary file not shown.
|
@ -0,0 +1,40 @@
|
|||
using Bootstrap.Client.DataAccess;
|
||||
using Bootstrap.Client.Query;
|
||||
using Longbow.Web.Mvc;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Bootstrap.Admin.Controllers.Api
|
||||
{
|
||||
/// <summary>
|
||||
/// Dummy 表维护控制器
|
||||
/// </summary>
|
||||
[Route("api/[controller]")]
|
||||
[Authorize]
|
||||
[ApiController]
|
||||
public class DummyController : ControllerBase
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取所有 Dummy 表数据方法
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
public QueryData<Dummy> Get([FromQuery]QueryDummyOption value) => value.Retrieves();
|
||||
|
||||
/// <summary>
|
||||
/// 保存方法
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
[HttpPost]
|
||||
public bool Post([FromBody]Dummy value) => DummyHelper.Save(value);
|
||||
|
||||
/// <summary>
|
||||
/// 删除指定 ID 集合的 Dummy 数据
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
[HttpDelete]
|
||||
public bool Delete([FromBody]IEnumerable<string> value) => DummyHelper.Delete(value);
|
||||
}
|
||||
}
|
|
@ -23,6 +23,12 @@ namespace Bootstrap.Client.Controllers
|
|||
return View(new NavigatorBarModel(this));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 演示视图
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public IActionResult Dummy() => View(new NavigatorBarModel(this));
|
||||
|
||||
/// <summary>
|
||||
/// About 视图
|
||||
/// </summary>
|
||||
|
|
|
@ -0,0 +1,76 @@
|
|||
using Bootstrap.Client.DataAccess;
|
||||
using Longbow.Web.Mvc;
|
||||
using System;
|
||||
using System.Linq;
|
||||
|
||||
namespace Bootstrap.Client.Query
|
||||
{
|
||||
/// <summary>
|
||||
/// 演示例子查询类
|
||||
/// </summary>
|
||||
public class QueryDummyOption : PaginationOption
|
||||
{
|
||||
/// <summary>
|
||||
/// 获得/设置 查询条件1
|
||||
/// </summary>
|
||||
public string? Item1 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获得/设置 查询条件2
|
||||
/// </summary>
|
||||
public string? Item2 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获得/设置 查询条件3
|
||||
/// </summary>
|
||||
/// <remark>数据库定义此字段为数值型,查询类为何定义为 string? 类型?因为这里可以设置为全部</remark>
|
||||
public string? Item3 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 字典表查询
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public QueryData<Dummy> Retrieves()
|
||||
{
|
||||
if (string.IsNullOrEmpty(Order)) Order = "asc";
|
||||
if (string.IsNullOrEmpty(Sort)) Sort = "Item1";
|
||||
|
||||
var data = DummyHelper.Retrieves();
|
||||
if (!string.IsNullOrEmpty(Item1))
|
||||
{
|
||||
data = data.Where(t => t.Item1.Contains(Item1, StringComparison.OrdinalIgnoreCase));
|
||||
}
|
||||
if (!string.IsNullOrEmpty(Item2))
|
||||
{
|
||||
data = data.Where(t => t.Item2.Contains(Item2, StringComparison.OrdinalIgnoreCase));
|
||||
}
|
||||
if (!string.IsNullOrEmpty(Item3))
|
||||
{
|
||||
// 此列为数值型
|
||||
data = data.Where(t => t.Item3.ToString() == Item3);
|
||||
}
|
||||
if (!string.IsNullOrEmpty(Search))
|
||||
{
|
||||
// 处理快捷搜索文本条件
|
||||
data = data.Where(t => t.Item1.Contains(Search, StringComparison.OrdinalIgnoreCase) || t.Item2.Contains(Search, StringComparison.OrdinalIgnoreCase));
|
||||
}
|
||||
var ret = new QueryData<Dummy>();
|
||||
ret.total = data.Count();
|
||||
// 通过option.Sort属性判断对那列进行排序
|
||||
switch (Sort)
|
||||
{
|
||||
case "Item1":
|
||||
data = Order == "asc" ? data.OrderBy(t => t.Item1) : data.OrderByDescending(t => t.Item1);
|
||||
break;
|
||||
case "Item2":
|
||||
data = Order == "asc" ? data.OrderBy(t => t.Item2) : data.OrderByDescending(t => t.Item2);
|
||||
break;
|
||||
case "Item3":
|
||||
data = Order == "asc" ? data.OrderBy(t => t.Item3) : data.OrderByDescending(t => t.Item3);
|
||||
break;
|
||||
}
|
||||
ret.rows = data.Skip(Offset).Take(Limit);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,64 @@
|
|||
@model NavigatorBarModel
|
||||
@{
|
||||
ViewData["Title"] = "演示视图";
|
||||
Layout = "_Default";
|
||||
}
|
||||
@section css {
|
||||
<link href="~/lib/longbow-select/longbow-select.css" rel="stylesheet" />
|
||||
}
|
||||
@section javascript {
|
||||
<script src="~/lib/longbow-select/longbow-select.js"></script>
|
||||
<script src="~/js/dummy.js"></script>
|
||||
}
|
||||
@section query {
|
||||
<form class="form-inline">
|
||||
<div class="row">
|
||||
<div class="form-group col-12">
|
||||
<label class="control-label" for="item_query_1">演示属性1</label>
|
||||
<input type="text" class="form-control" id="item_query_1" data-provide="typeahead" data-default-val="" />
|
||||
</div>
|
||||
<div class="form-group col-12">
|
||||
<label class="control-label" for="item_query_2">演示属性2</label>
|
||||
<input type="text" class="form-control" id="item_query_2" data-default-val="" />
|
||||
</div>
|
||||
<div class="form-group col-12">
|
||||
<label class="control-label" for="item_query_3">演示属性3</label>
|
||||
<input class="form-control" data-toggle="lgbSelect" data-default-val="" />
|
||||
<select data-toggle="lgbSelect" class="d-none" id="item_query_3">
|
||||
<option value="">全部</option>
|
||||
<option value="0">系统使用</option>
|
||||
<option value="1">自定义</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
}
|
||||
@section modal {
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="myModalLabel">演示视图编辑窗口</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form class="form-inline">
|
||||
<div class="row">
|
||||
<input type="hidden" id="dummyID" />
|
||||
<div class="form-group col-sm-6">
|
||||
<label class="control-label" for="item1">演示属性1</label>
|
||||
<input type="text" class="form-control" id="item1" placeholder="不可为空,50字以内" maxlength="50" data-valid="true" />
|
||||
</div>
|
||||
<div class="form-group col-sm-6">
|
||||
<label class="control-label" for="item2">演示属性2</label>
|
||||
<input type="text" class="form-control" id="item2" placeholder="不可为空,50字以内" maxlength="50" data-valid="true" />
|
||||
</div>
|
||||
<div class="form-group col-sm-6">
|
||||
<label class="control-label" for="item3">演示属性3</label>
|
||||
<input class="form-control" data-toggle="lgbSelect" />
|
||||
<select data-toggle="lgbSelect" class="d-none" data-default-val="1" id="item3">
|
||||
<option value="0">系统使用</option>
|
||||
<option value="1">自定义</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
}
|
|
@ -0,0 +1,116 @@
|
|||
@{
|
||||
Layout = "_Layout";
|
||||
}
|
||||
@section css {
|
||||
<environment include="Development">
|
||||
<link href="~/lib/bootstrap-table/bootstrap-table.css" rel="stylesheet" />
|
||||
<link href="~/lib/toastr.js/toastr.css" rel="stylesheet" />
|
||||
<link href="~/lib/sweetalert/sweetalert2.css" rel="stylesheet" />
|
||||
<link href="~/lib/overlayscrollbars/OverlayScrollbars.css" rel="stylesheet" />
|
||||
</environment>
|
||||
<environment exclude="Development">
|
||||
<link href="~/lib/bootstrap-table/bootstrap-table.min.css" rel="stylesheet" />
|
||||
<link href="~/lib/toastr.js/toastr.min.css" rel="stylesheet" />
|
||||
<link href="~/lib/sweetalert/sweetalert2.min.css" rel="stylesheet" />
|
||||
<link href="~/lib/overlayscrollbars/OverlayScrollbars.min.css" rel="stylesheet" />
|
||||
</environment>
|
||||
<link href="~/lib/longbow-checkbox/longbow-checkbox.css" rel="stylesheet" />
|
||||
@RenderSection("css", false)
|
||||
}
|
||||
@section javascript {
|
||||
<environment include="Development">
|
||||
<script src="~/lib/overlayscrollbars/jquery.overlayScrollbars.js"></script>
|
||||
<script src="~/lib/signalr/dist/browser/signalr.js"></script>
|
||||
<script src="~/lib/sweetalert/sweetalert2.js"></script>
|
||||
<script src="~/lib/bootstrap-table/bootstrap-table.js"></script>
|
||||
<script src="~/lib/bootstrap-table/extensions/export/bootstrap-table-export.js"></script>
|
||||
<script src="~/lib/bootstrap-table/locale/bootstrap-table-zh-CN.js"></script>
|
||||
<script src="~/lib/tablexport/tableExport.js"></script>
|
||||
<script src="~/lib/validate/jquery.validate.js"></script>
|
||||
<script src="~/lib/validate/localization/messages_zh.js"></script>
|
||||
</environment>
|
||||
<environment exclude="Development">
|
||||
<script src="~/lib/overlayscrollbars/jquery.overlayScrollbars.min.js"></script>
|
||||
<script src="~/lib/signalr/dist/browser/signalr.min.js"></script>
|
||||
<script src="~/lib/sweetalert/sweetalert2.min.js"></script>
|
||||
<script src="~/lib/bootstrap-table/bootstrap-table.min.js"></script>
|
||||
<script src="~/lib/bootstrap-table/extensions/export/bootstrap-table-export.min.js"></script>
|
||||
<script src="~/lib/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
|
||||
<script src="~/lib/tablexport/tableExport.min.js"></script>
|
||||
<script src="~/lib/validate/jquery.validate.min.js"></script>
|
||||
<script src="~/lib/validate/localization/messages_zh.min.js"></script>
|
||||
</environment>
|
||||
<script src="~/lib/toastr.js/toastr.min.js"></script>
|
||||
<script src="~/lib/longbow-checkbox/longbow-checkbox.js"></script>
|
||||
<script src="~/lib/longbow/longbow.dataentity.js" asp-append-version="true"></script>
|
||||
<script src="~/lib/longbow/longbow.validate.js" asp-append-version="true"></script>
|
||||
@RenderSection("javascript", false)
|
||||
}
|
||||
<div id="toolbar" class="d-none">
|
||||
<div class="gear btn-group">
|
||||
<button class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" type="button"><i class="fa fa-gear"></i></button>
|
||||
<div class="dropdown-menu">
|
||||
<a id="tb_add" href="#" title="新增" asp-auth="add"><i class="fa fa-plus"></i></a>
|
||||
<a id="tb_delete" href="#" title="删除" asp-auth="del"><i class="fa fa-remove"></i></a>
|
||||
<a id="tb_edit" href="#" title="编辑" asp-auth="edit"><i class="fa fa-pencil"></i></a>
|
||||
@await RenderSectionAsync("gear", false)
|
||||
</div>
|
||||
</div>
|
||||
<div class="toolbar btn-group">
|
||||
<button id="btn_add" type="button" class="btn btn-success" asp-auth="add"><i class="fa fa-plus" aria-hidden="true"></i><span>新增</span></button>
|
||||
<button id="btn_delete" type="button" class="btn btn-danger" asp-auth="del"><i class="fa fa-remove" aria-hidden="true"></i><span>删除</span></button>
|
||||
<button id="btn_edit" type="button" class="btn btn-primary" asp-auth="edit"><i class="fa fa-pencil" aria-hidden="true"></i><span>编辑</span></button>
|
||||
@RenderSection("toolbar", false)
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
查询结果
|
||||
</div>
|
||||
<div class="card-body">
|
||||
@await RenderSectionAsync("cardbody", false)
|
||||
<table data-Header="scroll"></table>
|
||||
</div>
|
||||
</div>
|
||||
<div id="tableButtons" class="d-none">
|
||||
<div class='btn-group'>
|
||||
<button class='edit btn btn-sm btn-success' asp-auth="edit"><i class='fa fa-edit'></i><span>编辑</span></button>
|
||||
<button class='del btn btn-sm btn-danger' asp-auth="del"><i class='fa fa-remove'></i><span>删除</span></button>
|
||||
@RenderSection("tableButtons", false)
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal fade" id="dialogNew" tabindex="-1" role="dialog" data-backdrop="static" aria-labelledby="myModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered modal-lg" role="document">
|
||||
<div class="modal-content" data-toggle="LgbValidate" data-valid-button="#btnSubmit" data-valid-modal="#dialogNew">
|
||||
@RenderSection("modal", false)
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">
|
||||
<i class="fa fa-times"></i>
|
||||
<span>关闭</span>
|
||||
</button>
|
||||
<button type="button" class="btn btn-primary" id="btnSubmit">
|
||||
<i class="fa fa-save"></i>
|
||||
<span>保存</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal fade" id="dialogAdvancedSearch" tabindex="-1" role="dialog" data-backdrop="static" aria-labelledby="mySearchModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="mySearchModalLabel">查询条件</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
</div>
|
||||
<div class="modal-body modal-query">
|
||||
@RenderSection("query", false)
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" id="btn_reset" class="btn btn-info btn-fill"><i class="fa fa-trash-o" aria-hidden="true"></i><span>重置</span></button>
|
||||
<button type="button" id="btn_query" class="btn btn-primary btn-fill"><i class="fa fa-search" aria-hidden="true"></i><span>查询</span></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@RenderBody()
|
|
@ -42,7 +42,7 @@
|
|||
@RenderSection("javascript", false)
|
||||
}
|
||||
@await Html.PartialAsync("Header")
|
||||
@await Html.PartialAsync("navigator")
|
||||
@await Html.PartialAsync("Navigator")
|
||||
<section class="container-fluid">
|
||||
<div class="main-header">
|
||||
<ol class="breadcrumb">
|
||||
|
@ -53,4 +53,3 @@
|
|||
@RenderBody()
|
||||
</section>
|
||||
@await Html.PartialAsync("Footer")
|
||||
@RenderSection("modal", false)
|
|
@ -15,9 +15,15 @@
|
|||
"MaxFileCount": 1
|
||||
}
|
||||
},
|
||||
"AllowOrigins": "http://localhost:50852",
|
||||
"SimulateUserName": "Admin",
|
||||
"BootstrapAdminAuthenticationOptions": {
|
||||
"AuthHost": "http://localhost:50852",
|
||||
"KeyPath": "..\\..\\admin\\keys"
|
||||
},
|
||||
"ConnectionStrings": {
|
||||
"ba": "Data Source=.;Initial Catalog=BootstrapAdmin;User ID=sa;Password=sa",
|
||||
"client": "Data Source=.;Initial Catalog=BootstrapAdmin;User ID=sa;Password=sa"
|
||||
"client": "Data Source=Client.db;"
|
||||
},
|
||||
"DB": [
|
||||
{
|
||||
|
@ -48,11 +54,6 @@
|
|||
}
|
||||
}
|
||||
],
|
||||
"SimulateUserName": "Admin",
|
||||
"BootstrapAdminAuthenticationOptions": {
|
||||
"AuthHost": "http://localhost:50852",
|
||||
"KeyPath": "..\\..\\admin\\keys"
|
||||
},
|
||||
"SmtpClient": {
|
||||
"Host": "smtp.163.com",
|
||||
"Port": 587,
|
||||
|
@ -61,7 +62,6 @@
|
|||
"From": "honeywell_mes@163.com",
|
||||
"To": "argo@163.com"
|
||||
},
|
||||
"AllowOrigins": "http://localhost:50852",
|
||||
"LongbowCache": {
|
||||
"Enabled": true,
|
||||
"CacheItems": [
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
},
|
||||
"ConnectionStrings": {
|
||||
"ba": "Data Source=.;Initial Catalog=BootstrapAdmin;User ID=sa;Password=sa",
|
||||
"client": "Data Source=.;Initial Catalog=BootstrapAdmin;User ID=sa;Password=sa"
|
||||
"client": "Data Source=Client.db;"
|
||||
},
|
||||
"DB": [
|
||||
{
|
||||
|
|
|
@ -61,3 +61,13 @@ aside {
|
|||
color: #fff;
|
||||
border: 1px solid #fff;
|
||||
}
|
||||
|
||||
.tooltip-inner .search-input-tooltip {
|
||||
font-size: 0.75rem;
|
||||
}
|
||||
|
||||
.tooltip-inner .search-input-tooltip kbd {
|
||||
display: inline-block;
|
||||
background: #17a2b8;
|
||||
padding: 1px 6px;
|
||||
}
|
||||
|
|
|
@ -130,6 +130,12 @@
|
|||
}
|
||||
}
|
||||
|
||||
@media (min-width: 1120px) {
|
||||
.bootstrap-table .fixed-table-toolbar .columns button i + span, .bootstrap-table .fixed-table-toolbar .search button i + span {
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 1200px) {
|
||||
.modal-xl {
|
||||
max-width: 1100px;
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
body {
|
||||
color: #797979;
|
||||
background: #f1f2f7;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
}
|
||||
|
||||
|
@ -121,6 +120,10 @@ aside .bg, aside .nav-brand, aside .nav-header, .header .nav, .userinfo .dropdow
|
|||
flex: 1 1 33.333%;
|
||||
}
|
||||
|
||||
.userinfo .dropdown-item a:hover {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.userinfo .dropdown-item a i {
|
||||
font-size: 1.025rem;
|
||||
display: block;
|
||||
|
@ -167,6 +170,15 @@ aside .bg, aside .nav-brand, aside .nav-header, .header .nav, .userinfo .dropdow
|
|||
transition: all .25s linear;
|
||||
}
|
||||
|
||||
.header .nav .dropdown .dropdown-blazor {
|
||||
padding: 2px 4px;
|
||||
}
|
||||
|
||||
.header .nav .dropdown-blazor img {
|
||||
width: 28px;
|
||||
margin-top: 1px;
|
||||
}
|
||||
|
||||
.nav .dropdown-menu {
|
||||
width: 235px;
|
||||
border: none;
|
||||
|
@ -432,7 +444,7 @@ footer {
|
|||
outline: none;
|
||||
}
|
||||
|
||||
.dropdown-select + .dropdown-menu a:hover {
|
||||
.dropdown-select + .dropdown-menu a:hover, .dropdown-select + .dropdown-menu .dropdown-item:hover {
|
||||
background: #007AC0;
|
||||
color: #fff;
|
||||
}
|
||||
|
@ -441,12 +453,16 @@ footer {
|
|||
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.176);
|
||||
}
|
||||
|
||||
.dropdown-menu a {
|
||||
.dropdown-menu a, .dropdown-select + .dropdown-menu .dropdown-item {
|
||||
transition: all .25s linear;
|
||||
padding: 6px 20px;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.dropdown-select + .dropdown-menu .dropdown-item {
|
||||
color: #007bff;
|
||||
}
|
||||
|
||||
.dropdown-divider {
|
||||
margin: 0.125rem 0;
|
||||
}
|
||||
|
@ -519,10 +535,6 @@ input.pending {
|
|||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.modal-body, .card-body {
|
||||
padding: 15px 15px 0 15px;
|
||||
}
|
||||
|
||||
.modal-body-fixed {
|
||||
max-height: calc(54vh);
|
||||
overflow-y: auto;
|
||||
|
@ -552,7 +564,7 @@ input.pending {
|
|||
padding: 0.5rem 1rem;
|
||||
}
|
||||
|
||||
.card .card-header a {
|
||||
.card .card-header a:not([data-toggle="popover"]) {
|
||||
color: #797979;
|
||||
}
|
||||
|
||||
|
@ -580,8 +592,8 @@ input.pending {
|
|||
margin-left: 6px;
|
||||
}
|
||||
|
||||
.card-body .bootstrap-table {
|
||||
margin-top: -10px;
|
||||
.card .modal-footer {
|
||||
padding: 0.5rem 0rem;
|
||||
}
|
||||
|
||||
.no-card-header .card-header {
|
||||
|
@ -715,22 +727,18 @@ input.pending {
|
|||
background-color: rgba(0,0,0,.05);
|
||||
}
|
||||
|
||||
.bootstrap-table .fixed-table-container .fixed-table-body {
|
||||
border-radius: 4px;
|
||||
.bootstrap-table .fixed-table-container .fixed-table-body .table .bs-checkbox label {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.bootstrap-table .fixed-table-container .fixed-table-body .table .bs-checkbox label {
|
||||
margin-bottom: 0;
|
||||
.bootstrap-table .fixed-table-container .fixed-table-body .table .bs-checkbox label input[type='checkbox'] {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.bootstrap-table .fixed-table-container .fixed-table-body .table .bs-checkbox label input[type='checkbox'] {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.bootstrap-table .fixed-table-container .fixed-table-body .table td .btn:not(.btn-lg) {
|
||||
font-size: 0.75rem;
|
||||
padding: 1px 5px;
|
||||
}
|
||||
.bootstrap-table .fixed-table-container .fixed-table-body .table td .btn:not(.btn-lg) {
|
||||
font-size: 0.75rem;
|
||||
padding: 1px 5px;
|
||||
}
|
||||
|
||||
.bootstrap-table .fixed-table-container .table tbody tr.selected td {
|
||||
background-color: rgba(0, 0, 0, 0.03);
|
||||
|
@ -750,6 +758,10 @@ input.pending {
|
|||
padding: 6px 20px;
|
||||
}
|
||||
|
||||
.bootstrap-table .fixed-table-toolbar .columns button i + span, .bootstrap-table .fixed-table-toolbar .search button i + span {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.fixed-table-toolbar .dropdown-menu {
|
||||
min-width: unset;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
$(function () {
|
||||
$('table').lgbTable({
|
||||
url: 'api/Dummy',
|
||||
dataBinder: {
|
||||
map: {
|
||||
Id: "#dummyID",
|
||||
Item1: "#item1",
|
||||
Item2: "#item2",
|
||||
Item3: "#item3"
|
||||
}
|
||||
},
|
||||
smartTable: {
|
||||
sortName: 'item1',
|
||||
queryParams: function (params) {
|
||||
return $.extend(params, {
|
||||
item1: $('#item_query_1').val(),
|
||||
item2: $("#item_query_2").val(),
|
||||
item3: $("#item_query_3").val()
|
||||
});
|
||||
},
|
||||
columns: [
|
||||
{ title: "示例属性1", field: "Item1", sortable: true },
|
||||
{ title: "示例属性2", field: "Item2", sortable: true },
|
||||
{ title: "示例属性3", field: "Item3", sortable: true, formatter: function (value) { return value === 0 ? "系统使用" : "自定义"; } }
|
||||
],
|
||||
exportOptions: {
|
||||
fileName: "下载示例文件",
|
||||
ignoreColumn: [0, 5]
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
|
@ -90,7 +90,7 @@
|
|||
};
|
||||
|
||||
$.extend({
|
||||
"format": function (source, params) {
|
||||
format: function (source, params) {
|
||||
if (params === undefined || params === null) {
|
||||
return null;
|
||||
}
|
||||
|
@ -125,6 +125,19 @@
|
|||
document.webkitIsFullScreen || window.fullscreen ||
|
||||
false;
|
||||
},
|
||||
remoteValidate: function (url, method) {
|
||||
if (method === undefined) method = 'get';
|
||||
var check = false;
|
||||
jQuery[method]({
|
||||
url: $.formatUrl(url),
|
||||
async: false,
|
||||
cache: false,
|
||||
success: function (result) {
|
||||
check = result
|
||||
}
|
||||
});
|
||||
return check;
|
||||
},
|
||||
bc: function (options) {
|
||||
options = $.extend({
|
||||
id: "",
|
||||
|
@ -298,7 +311,7 @@
|
|||
return this;
|
||||
},
|
||||
lgbTable: function (options) {
|
||||
var bsa = new DataTable($.extend(options.dataBinder, { url: options.url }));
|
||||
var bsa = new DataTable($.extend(options.dataBinder, { url: options.url, bootstrapTable: this }));
|
||||
|
||||
var settings = $.extend(true, {
|
||||
url: options.url,
|
||||
|
@ -340,12 +353,34 @@
|
|||
pageList: [20, 40, 80, 120], //可供选择的每页的行数(*)
|
||||
showExport: true,
|
||||
exportTypes: ['csv', 'txt', 'excel'],
|
||||
advancedSearchModal: '#dialogAdvancedSearch',
|
||||
minHeight: 400,
|
||||
height: undefined,
|
||||
calcHeight: undefined,
|
||||
search: true,
|
||||
tableContainer: '.main-content',
|
||||
searchOnEnterKey: false,
|
||||
searchTimeOut: 0,
|
||||
showSearchClearButton: true,
|
||||
showAdvancedSearchButton: true,
|
||||
showButtonText: true,
|
||||
showSearchButton: true, //是否显示搜索按钮
|
||||
showColumns: true, //是否显示所有的列
|
||||
showRefresh: true, //是否显示刷新按钮
|
||||
showToggle: true, //是否显示详细视图和列表视图的切换按钮
|
||||
cardView: $(window).width() < 768, //是否显示详细视图
|
||||
queryButton: '#btn_query',
|
||||
onLoadSuccess: function (data) {
|
||||
// 设置 数据库 滚动条
|
||||
if (settings.height !== undefined) {
|
||||
$('.bootstrap-table .fixed-table-body').overlayScrollbars({
|
||||
className: 'os-theme-dark',
|
||||
scrollbars: {
|
||||
autoHide: 'leave',
|
||||
autoHideDelay: 100
|
||||
}
|
||||
});
|
||||
}
|
||||
$.footer();
|
||||
if (data.IsSuccess === false) {
|
||||
toastr.error(data.HttpResult.Message, data.HttpResult.Name);
|
||||
|
@ -370,7 +405,97 @@
|
|||
}
|
||||
}
|
||||
});
|
||||
|
||||
if (settings.search) {
|
||||
// 自动收集 SearchText
|
||||
var queryParams = settings.queryParams || function (params) { };
|
||||
|
||||
settings.queryParams = function (params) {
|
||||
return $.extend({}, queryParams(params), { search: $('.bootstrap-table .fixed-table-toolbar .search-input').val() });
|
||||
}
|
||||
|
||||
// 支持键盘回车搜索
|
||||
$(document).on('keyup', '.bootstrap-table .fixed-table-toolbar .search-input', this, function (event) {
|
||||
if (event.keyCode === 13) {
|
||||
// ENTER
|
||||
var $buttons = $(this).next();
|
||||
var $search = $buttons.find('[name="search"]');
|
||||
if ($search.length === 1) {
|
||||
$search.trigger('click');
|
||||
}
|
||||
else {
|
||||
// 无搜索按钮是使用 refresh 方法
|
||||
event.data.bootstrapTable('refresh');
|
||||
}
|
||||
}
|
||||
else if (event.keyCode === 27) {
|
||||
// ESC
|
||||
event.data.bootstrapTable('resetSearch');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 判断是否固定表头 小屏幕禁止固定表头功能
|
||||
var fixHeader = this.attr('data-header') === 'fixed' && $(window).width() >= 768;
|
||||
var $tabContainer = $(settings.tableContainer);
|
||||
if (fixHeader && settings.height === undefined) {
|
||||
var calcPrevHeight = function (element) {
|
||||
var height = 0;
|
||||
while (element.length === 1) {
|
||||
if (element.is(":visible")) height += element.outerHeight(true);
|
||||
element = element.prev();
|
||||
}
|
||||
return height;
|
||||
}
|
||||
|
||||
var calcParentHeight = function (element) {
|
||||
var height = 0;
|
||||
while (element.length === 1) {
|
||||
// 跳过 tableContainer
|
||||
if (['SELECTION', 'BODY', settings.tableContainer].filter(function (v) {
|
||||
return v === element.attr('nodeName') || element.hasClass(v) || element.attr('id');
|
||||
}).length > 0) {
|
||||
break;
|
||||
}
|
||||
height += calcPrevHeight(element.prev());
|
||||
element = element.parent();
|
||||
}
|
||||
return height;
|
||||
}
|
||||
|
||||
if (settings.calcHeight === undefined) {
|
||||
settings.calcHeight = function (element) {
|
||||
var marginHeight = 0;
|
||||
if ($tabContainer.length === 1) {
|
||||
marginHeight = ($tabContainer.outerHeight() - $tabContainer.height()) * 2;
|
||||
|
||||
// 计算 table 控件前元素高度
|
||||
var $prev = element.prev();
|
||||
marginHeight += calcPrevHeight($prev);
|
||||
marginHeight += calcParentHeight(element.parent());
|
||||
}
|
||||
return Math.max(settings.minHeight, $(window).height() - $('header').outerHeight(true) - $('footer').outerHeight(true) - marginHeight - 15 - 10);
|
||||
};
|
||||
}
|
||||
|
||||
// 设置最小高度为
|
||||
settings.height = settings.calcHeight(this);
|
||||
|
||||
// 设置 onresize 事件
|
||||
$(window).on('resize', this, function (event) {
|
||||
event.data.bootstrapTable('resetView', { height: settings.calcHeight(event.data.parents('.bootstrap-table')) });
|
||||
});
|
||||
}
|
||||
|
||||
// 加载数据
|
||||
this.bootstrapTable(settings);
|
||||
|
||||
// 如果固定表头 禁止容器滚动条出现
|
||||
if (fixHeader && $tabContainer.length > 0) {
|
||||
$tabContainer.addClass('overflow-hidden');
|
||||
}
|
||||
|
||||
// 格式化工具栏
|
||||
$('.bootstrap-table .fixed-table-toolbar .columns .export .dropdown-menu').addClass("dropdown-menu-right");
|
||||
var $gear = $(settings.toolbar).removeClass('d-none').find('.gear');
|
||||
if ($gear.find('.dropdown-menu > a').length === 0) $gear.addClass('d-none');
|
||||
|
@ -380,9 +505,60 @@
|
|||
});
|
||||
if (settings.queryButton) {
|
||||
$(settings.queryButton).on('click', this, function (e) {
|
||||
// fix bug: 翻页后再更改查询条件导致页码未更改数据为空
|
||||
// 更改页码为 1 即可
|
||||
// https://gitee.com/LongbowEnterprise/BootstrapAdmin/issues/I1A739
|
||||
var options = e.data.data('bootstrap.table').options;
|
||||
options.pageNumber = 1;
|
||||
e.data.bootstrapTable('refresh');
|
||||
});
|
||||
}
|
||||
|
||||
// 增加 Tooltip
|
||||
if (settings.search) {
|
||||
$('.bootstrap-table .fixed-table-toolbar .search-input').tooltip({
|
||||
sanitize: false,
|
||||
title: '<div class="search-input-tooltip">输入任意字符串全局搜索 </br> <kbd>Enter</kbd> 搜索 <kbd>ESC</kbd> 清除搜索</div>',
|
||||
html: true
|
||||
});
|
||||
|
||||
// 生成高级查询按钮
|
||||
if (settings.showAdvancedSearchButton) {
|
||||
// template
|
||||
var $advancedSearchButtonHtml = $('<button class="btn btn-secondary" type="button" name="advancedSearch" title="高级搜索"><i class="fa fa-search-plus"></i><span>高级搜索</span></button>');
|
||||
$advancedSearchButtonHtml.insertAfter($('.bootstrap-table .fixed-table-toolbar .search [name="clearSearch"]')).on('click', function () {
|
||||
// 弹出高级查询对话框
|
||||
$(settings.advancedSearchModal).modal('show');
|
||||
});
|
||||
|
||||
// 高级搜索有值时颜色为红色
|
||||
$(settings.advancedSearchModal).on('hide.bs.modal', function () {
|
||||
var $modal = $(this)
|
||||
var hasValue = false;
|
||||
$modal.find('[data-default-val]').each(function (index, element) {
|
||||
var $ele = $(element);
|
||||
var val = $ele.attr('data-default-val');
|
||||
if ($ele.prop('nodeName') === 'INPUT') {
|
||||
if ($ele.hasClass('form-select-input')) {
|
||||
hasValue = $ele.prev().val() !== val;
|
||||
}
|
||||
else {
|
||||
hasValue = $ele.val() !== val;
|
||||
}
|
||||
}
|
||||
if (hasValue) return false;
|
||||
});
|
||||
|
||||
if (hasValue) $advancedSearchButtonHtml.removeClass('btn-secondary').addClass('btn-primary');
|
||||
else $advancedSearchButtonHtml.removeClass('btn-primary').addClass('btn-secondary');
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// fix bug 移除 Toolbar 按钮 Title 中的 Html
|
||||
$('.bootstrap-table .fixed-table-toolbar button[title]').each(function (index, element) {
|
||||
element.title = element.title.replace('<span>', '').replace('</span>', '');
|
||||
});
|
||||
return this;
|
||||
},
|
||||
lgbPopover: function (options) {
|
||||
|
@ -451,15 +627,21 @@
|
|||
lgbInfo: function (option) {
|
||||
this.each(function () {
|
||||
var $element = $(this);
|
||||
$element.append($.format('<a href="#" tabindex="-1" role="button" data-toggle="popover"><i class="fa fa-question-circle"></i></a>'));
|
||||
$element.append($('<a href="#" tabindex="-1" role="button" data-toggle="popover"><i class="fa fa-question-circle"></i></a>'));
|
||||
});
|
||||
var container = this.attr('data-container') || '#dialogNew';
|
||||
this.find('[data-toggle="popover"]').popover($.extend({
|
||||
var container = this.attr('data-container') || 'body';
|
||||
this.find('[data-toggle="popover"]').on('click', function (event) { event.preventDefault(); }).popover($.extend({
|
||||
title: function () {
|
||||
return $(this).parent().text();
|
||||
}, content: function () {
|
||||
},
|
||||
content: function () {
|
||||
return $(this).parent().attr('data-content');
|
||||
}, trigger: 'focus', html: true, container: container, placement: function () {
|
||||
},
|
||||
trigger: 'focus',
|
||||
html: false,
|
||||
sanitize: true,
|
||||
container: container,
|
||||
placement: function () {
|
||||
return $(this.element).parent().attr('data-placement') || 'auto';
|
||||
}
|
||||
}, option));
|
||||
|
@ -489,21 +671,23 @@
|
|||
});
|
||||
|
||||
//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'));
|
||||
});
|
||||
}
|
||||
});
|
||||
if ($.fn.dropdown) {
|
||||
$.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'));
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$(function () {
|
||||
// fix bug bootstrap-table 1.14.2 showToggle
|
||||
|
@ -511,6 +695,68 @@
|
|||
$.extend($.fn.bootstrapTable.defaults.icons, {
|
||||
refresh: 'fa-refresh'
|
||||
});
|
||||
|
||||
// fix bug bootstrap-table showButtonText support mobile
|
||||
// argo at 2020-01-18
|
||||
$.extend($.fn.bootstrapTable.defaults, {
|
||||
formatClearSearch: function formatClearSearch() {
|
||||
return '<span>清空过滤</span>';
|
||||
},
|
||||
formatSearch: function formatSearch() {
|
||||
return '搜索';
|
||||
},
|
||||
formatNoMatches: function formatNoMatches() {
|
||||
return '<span>没有找到匹配的记录</span>';
|
||||
},
|
||||
formatPaginationSwitch: function formatPaginationSwitch() {
|
||||
return '<span>隐藏/显示分页</span>';
|
||||
},
|
||||
formatPaginationSwitchDown: function formatPaginationSwitchDown() {
|
||||
return '<span>显示分页</span>';
|
||||
},
|
||||
formatPaginationSwitchUp: function formatPaginationSwitchUp() {
|
||||
return '<span>隐藏分页</span>';
|
||||
},
|
||||
formatRefresh: function formatRefresh() {
|
||||
return '<span>刷新</span>';
|
||||
},
|
||||
formatToggle: function formatToggle() {
|
||||
return '<span>切换</span>';
|
||||
},
|
||||
formatToggleOn: function formatToggleOn() {
|
||||
return '<span>显示卡片视图</span>';
|
||||
},
|
||||
formatToggleOff: function formatToggleOff() {
|
||||
return '<span>隐藏卡片视图</span>';
|
||||
},
|
||||
formatColumns: function formatColumns() {
|
||||
return '<span>列</span>';
|
||||
},
|
||||
formatColumnsToggleAll: function formatColumnsToggleAll() {
|
||||
return '<span>切换所有</span>';
|
||||
},
|
||||
formatFullscreen: function formatFullscreen() {
|
||||
return '<span>全屏</span>';
|
||||
},
|
||||
formatAllRows: function formatAllRows() {
|
||||
return '<span>所有</span>';
|
||||
},
|
||||
formatAutoRefresh: function formatAutoRefresh() {
|
||||
return '<span>自动刷新</span>';
|
||||
},
|
||||
formatExport: function formatExport() {
|
||||
return '<span>导出数据</span>';
|
||||
},
|
||||
formatJumpTo: function formatJumpTo() {
|
||||
return '<span>跳转</span>';
|
||||
},
|
||||
formatAdvancedSearch: function formatAdvancedSearch() {
|
||||
return '<span>高级搜索</span>';
|
||||
},
|
||||
formatAdvancedCloseButton: function formatAdvancedCloseButton() {
|
||||
return '<span>关闭</span>';
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// extend bootstrap-toggle
|
||||
|
@ -519,13 +765,13 @@
|
|||
var oldFunc = toggle.prototype.render;
|
||||
toggle.prototype.render = function () {
|
||||
var defaultVal = this.$element.attr('data-default-val') || '';
|
||||
if (defaultVal === '') this.$element.prop('checked', true);
|
||||
if (defaultVal === "True") this.$element.prop('checked', true);
|
||||
oldFunc.call(this);
|
||||
this.$toggle.on('touchend', function (e) {
|
||||
$(this).trigger('click.bs.toggle');
|
||||
e.preventDefault();
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
if (window.NProgress) {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
(function ($) {
|
||||
var findIdField = function (tableName) {
|
||||
var idField = $(tableName).bootstrapTable("getOptions").idField;
|
||||
var idField = tableName.bootstrapTable("getOptions").idField;
|
||||
if (idField === undefined) idField = "Id";
|
||||
return idField;
|
||||
};
|
||||
|
@ -68,8 +68,12 @@
|
|||
}
|
||||
else if (dv !== undefined && ctl.val() === "") target[name] = dv;
|
||||
else target[name] = ctl.val();
|
||||
if (target[name] === "true" || target[name] === "True") target[name] = true;
|
||||
if (target[name] === "false" || target[name] === "False") target[name] = false;
|
||||
|
||||
// check boolean value
|
||||
if (ctl.attr('data-bool') === 'true') {
|
||||
if (target[name] === "true" || target[name] === "True") target[name] = true;
|
||||
if (target[name] === "false" || target[name] === "False") target[name] = false;
|
||||
}
|
||||
}
|
||||
return target;
|
||||
}
|
||||
|
@ -93,8 +97,8 @@
|
|||
$(cId).on('click', { handler: this.options.events[cId] }, function (e) {
|
||||
var options = that.options;
|
||||
var row = {};
|
||||
if (options.bootstrapTable && options.bootstrapTable.constructor === String) {
|
||||
var arrselections = $(options.bootstrapTable).bootstrapTable('getSelections');
|
||||
if (options.bootstrapTable !== null) {
|
||||
var arrselections = options.bootstrapTable.bootstrapTable('getSelections');
|
||||
if (arrselections.length === 0) {
|
||||
lgbSwal({ title: '请选择要编辑的数据', type: "warning" });
|
||||
return;
|
||||
|
@ -114,25 +118,55 @@
|
|||
|
||||
DataTable.settings = {
|
||||
url: undefined,
|
||||
bootstrapTable: 'table',
|
||||
bootstrapTable: null,
|
||||
treegridParentId: 'ParentId',
|
||||
modal: '#dialogNew',
|
||||
click: {
|
||||
'#btn_query': function (element) {
|
||||
if (this.options.bootstrapTable.constructor === String) $(this.options.bootstrapTable).bootstrapTable('refresh');
|
||||
if (this.options.bootstrapTable !== null) {
|
||||
var options = this.options.bootstrapTable.bootstrapTable('getOptions');
|
||||
if (options.advancedSearchModal) {
|
||||
$(options.advancedSearchModal).modal('hide');
|
||||
}
|
||||
// fix bug: 翻页后再更改查询条件导致页码未更改数据为空
|
||||
// 更改页码为 1 即可
|
||||
// https://gitee.com/LongbowEnterprise/BootstrapAdmin/issues/I1A739
|
||||
var options = this.options.bootstrapTable.data('bootstrap.table').options;
|
||||
options.pageNumber = 1;
|
||||
this.options.bootstrapTable.bootstrapTable('refresh');
|
||||
}
|
||||
handlerCallback.call(this, null, element, { oper: 'query' });
|
||||
},
|
||||
'#btn_reset': function () {
|
||||
if (this.options.bootstrapTable !== null) {
|
||||
var options = this.options.bootstrapTable.bootstrapTable('getOptions');
|
||||
if (options.advancedSearchModal) {
|
||||
$(options.advancedSearchModal).find('[data-default-val]').each(function (index, element) {
|
||||
var $ele = $(element);
|
||||
var val = $ele.attr('data-default-val');
|
||||
if ($ele.prop('nodeName') === 'INPUT') {
|
||||
if ($ele.hasClass('form-select-input')) {
|
||||
$ele.prev().lgbSelect('val', val);
|
||||
}
|
||||
else {
|
||||
$ele.val(val);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
'#btn_add': function (element) {
|
||||
this.dataEntity.reset();
|
||||
if (this.options.modal.constructor === String) $(this.options.modal).modal("show");
|
||||
if (this.options.bootstrapTable.constructor === String) $(this.options.bootstrapTable).bootstrapTable('uncheckAll');
|
||||
if (this.options.bootstrapTable !== null) this.options.bootstrapTable.bootstrapTable('uncheckAll');
|
||||
handlerCallback.call(this, null, element, { oper: 'create' });
|
||||
},
|
||||
'#btn_edit': function (element) {
|
||||
var options = this.options;
|
||||
var data = {};
|
||||
if (options.bootstrapTable.constructor === String) {
|
||||
var arrselections = $(options.bootstrapTable).bootstrapTable('getSelections');
|
||||
if (options.bootstrapTable !== null) {
|
||||
var arrselections = options.bootstrapTable.bootstrapTable('getSelections');
|
||||
if (arrselections.length === 0) {
|
||||
lgbSwal({ title: '请选择要编辑的数据', type: "warning" });
|
||||
return;
|
||||
|
@ -152,8 +186,8 @@
|
|||
'#btn_delete': function (element) {
|
||||
var that = this;
|
||||
var options = this.options;
|
||||
if (options.bootstrapTable.constructor === String) {
|
||||
var arrselections = $(options.bootstrapTable).bootstrapTable('getSelections');
|
||||
if (options.bootstrapTable !== null) {
|
||||
var arrselections = options.bootstrapTable.bootstrapTable('getSelections');
|
||||
if (arrselections.length === 0) {
|
||||
lgbSwal({ title: '请选择要删除的数据', type: "warning" });
|
||||
return;
|
||||
|
@ -166,7 +200,7 @@
|
|||
$.bc({
|
||||
url: options.url, data: iDs, method: 'delete', title: options.delTitle, logData: arrselections,
|
||||
callback: function (result) {
|
||||
if (result) $(options.bootstrapTable).bootstrapTable('refresh');
|
||||
if (result) options.bootstrapTable.bootstrapTable('refresh');
|
||||
handlerCallback.call(that, null, element, { oper: 'del', success: result, data: arrselections });
|
||||
}
|
||||
});
|
||||
|
@ -182,8 +216,8 @@
|
|||
url: options.url, data: options.data, title: options.saveTitle, modal: options.modal, method: "post",
|
||||
callback: function (result) {
|
||||
if (result) {
|
||||
$(options.bootstrapTable).bootstrapTable('refresh');
|
||||
handlerCallback.call(that, null, element, { oper: 'save', success: result, data: options.data });
|
||||
options.bootstrapTable.bootstrapTable('refresh');
|
||||
handlerCallback.call(that, null, element, { oper: 'save', success: result, data: [options.data] });
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -205,8 +239,8 @@
|
|||
return {
|
||||
'click .edit': function (e, value, row, index) {
|
||||
op.dataEntity.load(row);
|
||||
$(op.table).bootstrapTable('uncheckAll');
|
||||
$(op.table).bootstrapTable('check', index);
|
||||
op.table.bootstrapTable('uncheckAll');
|
||||
op.table.bootstrapTable('check', index);
|
||||
handlerCallback.call(op.src, null, e, { oper: 'edit', data: row });
|
||||
$(op.modal).modal("show");
|
||||
},
|
||||
|
@ -221,14 +255,16 @@
|
|||
var idField = findIdField(op.table);
|
||||
var idValue = row[idField];
|
||||
|
||||
var nodes = $(op.table).bootstrapTable('getData').filter(function (row, index, data) {
|
||||
return idValue == row[op.treegridParentId];
|
||||
});
|
||||
if ($.isArray(nodes) && nodes.length > 0) {
|
||||
$.each(nodes, function (index, element) {
|
||||
data.push($.extend({}, element));
|
||||
if (idValue != undefined) {
|
||||
var nodes = op.table.bootstrapTable('getData').filter(function (row, index, data) {
|
||||
return idValue == row[op.treegridParentId];
|
||||
});
|
||||
text = "本删除项含有级联子项目</br>您确定要删除 <span class='text-danger font-weight-bold'>" + row.Name + "</span> 以及子项目吗?";
|
||||
if ($.isArray(nodes) && nodes.length > 0) {
|
||||
$.each(nodes, function (index, element) {
|
||||
data.push($.extend({}, element));
|
||||
});
|
||||
text = "本删除项含有级联子项目</br>您确定要删除 <span class='text-danger font-weight-bold'>" + row.Name + "</span> 以及子项目吗?";
|
||||
}
|
||||
}
|
||||
swal($.extend({}, swalDeleteOptions, { html: text })).then(function (result) {
|
||||
if (result.value) {
|
||||
|
@ -239,7 +275,7 @@
|
|||
$.bc({
|
||||
url: op.url, data: iDs, method: 'delete', title: '删除数据', logData: data,
|
||||
callback: function (result) {
|
||||
if (result) $(op.table).bootstrapTable('refresh');
|
||||
if (result) op.table.bootstrapTable('refresh');
|
||||
handlerCallback.call(op.src, null, e, { oper: 'del', success: result, data: data });
|
||||
}
|
||||
});
|
||||
|
|
|
@ -104,9 +104,32 @@
|
|||
}
|
||||
});
|
||||
if (this.options.modal) {
|
||||
// 关闭 modal 时移除所有验证信息
|
||||
$(this.options.modal).on('show.bs.modal', function (e) {
|
||||
that.reset();
|
||||
});
|
||||
|
||||
// bs bug 弹窗内控件值更改后再次点击关闭按钮是 hide.bs.modal 事件不被触发
|
||||
// 兼容 键盘事件 ESC
|
||||
var dismissTooltip = function (e) {
|
||||
// 移除残留 tooltip
|
||||
var $modal = $(that.options.modal)
|
||||
$modal.find('[aria-describedby]').each(function (index, ele) {
|
||||
var tooltipId = $(ele).attr('aria-describedby');
|
||||
var $tooltip = $('#' + tooltipId);
|
||||
if ($tooltip.length === 1) {
|
||||
$tooltip.tooltip('dispose');
|
||||
}
|
||||
});
|
||||
};
|
||||
$(this.options.modal).on('click', '[data-dismiss="modal"]', dismissTooltip);
|
||||
$(this.options.modal).on('keydown', function (event) {
|
||||
// ESC
|
||||
if (event.which === 27) {
|
||||
event.preventDefault();
|
||||
dismissTooltip(event);
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -278,6 +301,17 @@
|
|||
|
||||
$(function () {
|
||||
if ($.isFunction($.validator)) {
|
||||
$.validator.addMethod("equalTo", function (value, element, param) {
|
||||
var target = $(param);
|
||||
if (this.settings.onfocusout && target.not(".validate-equalTo-blur").length) {
|
||||
target.addClass("validate-equalTo-blur").on("blur.validate-equalTo", function () {
|
||||
var validator = $(element).parents('[data-toggle="LgbValidate"]').data('lgb.Validate');
|
||||
validator.validElement(element);
|
||||
});
|
||||
}
|
||||
return value === target.val();
|
||||
});
|
||||
|
||||
$.validator.addMethod("ip", function (value, element) {
|
||||
return this.optional(element) || /^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$/.test(value);
|
||||
}, "请填写正确的IP地址");
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,84 @@
|
|||
/*
|
||||
tableExport.jquery.plugin
|
||||
|
||||
Version 1.10.1
|
||||
|
||||
Copyright (c) 2015-2018 hhurz, https://github.com/hhurz
|
||||
|
||||
Original Work Copyright (c) 2014 Giri Raj
|
||||
|
||||
Licensed under the MIT License
|
||||
*/
|
||||
var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(c,l,u){c instanceof String&&(c=String(c));for(var w=c.length,x=0;x<w;x++){var P=c[x];if(l.call(u,P,x,c))return{i:x,v:P}}return{i:-1,v:void 0}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(c,l,u){c!=Array.prototype&&c!=Object.prototype&&(c[l]=u.value)};
|
||||
$jscomp.getGlobal=function(c){return"undefined"!=typeof window&&window===c?c:"undefined"!=typeof global&&null!=global?global:c};$jscomp.global=$jscomp.getGlobal(this);$jscomp.polyfill=function(c,l,u,w){if(l){u=$jscomp.global;c=c.split(".");for(w=0;w<c.length-1;w++){var x=c[w];x in u||(u[x]={});u=u[x]}c=c[c.length-1];w=u[c];l=l(w);l!=w&&null!=l&&$jscomp.defineProperty(u,c,{configurable:!0,writable:!0,value:l})}};
|
||||
$jscomp.polyfill("Array.prototype.find",function(c){return c?c:function(c,u){return $jscomp.findInternal(this,c,u).v}},"es6","es3");
|
||||
(function(c){c.fn.tableExport=function(l){function u(b){var d=[];x(b,"thead").each(function(){d.push.apply(d,x(c(this),a.theadSelector).toArray())});return d}function w(b){var d=[];x(b,"tbody").each(function(){d.push.apply(d,x(c(this),a.tbodySelector).toArray())});a.tfootSelector.length&&x(b,"tfoot").each(function(){d.push.apply(d,x(c(this),a.tfootSelector).toArray())});return d}function x(b,d){var a=b[0].tagName,g=b.parents(a).length;return b.find(d).filter(function(){return g===c(this).closest(a).parents(a).length})}
|
||||
function P(b){var d=[];c(b).find("thead").first().find("th").each(function(b,a){void 0!==c(a).attr("data-field")?d[b]=c(a).attr("data-field"):d[b]=b.toString()});return d}function Q(b){var d="undefined"!==typeof b[0].cellIndex,a="undefined"!==typeof b[0].rowIndex,g=d||a?Ea(b):b.is(":visible"),h=b.data("tableexport-display");d&&"none"!==h&&"always"!==h&&(b=c(b[0].parentNode),a="undefined"!==typeof b[0].rowIndex,h=b.data("tableexport-display"));a&&"none"!==h&&"always"!==h&&(h=b.closest("table").data("tableexport-display"));
|
||||
return"none"!==h&&(!0===g||"always"===h)}function Ea(b){var d=[];U&&(d=I.filter(function(){var d=!1;this.nodeType===b[0].nodeType&&("undefined"!==typeof this.rowIndex&&this.rowIndex===b[0].rowIndex?d=!0:"undefined"!==typeof this.cellIndex&&this.cellIndex===b[0].cellIndex&&"undefined"!==typeof this.parentNode.rowIndex&&"undefined"!==typeof b[0].parentNode.rowIndex&&this.parentNode.rowIndex===b[0].parentNode.rowIndex&&(d=!0));return d}));return!1===U||0===d.length}function Fa(b,d,f){var g=!1;Q(b)?0<
|
||||
a.ignoreColumn.length&&(-1!==c.inArray(f,a.ignoreColumn)||-1!==c.inArray(f-d,a.ignoreColumn)||R.length>f&&"undefined"!==typeof R[f]&&-1!==c.inArray(R[f],a.ignoreColumn))&&(g=!0):g=!0;return g}function D(b,d,f,g,h){if("function"===typeof h){var k=!1;"function"===typeof a.onIgnoreRow&&(k=a.onIgnoreRow(c(b),f));if(!1===k&&-1===c.inArray(f,a.ignoreRow)&&-1===c.inArray(f-g,a.ignoreRow)&&Q(c(b))){var y=x(c(b),d),q=0;y.each(function(b){var d=c(this),a,g=S(this),k=T(this);c.each(F,function(){if(f>=this.s.r&&
|
||||
f<=this.e.r&&q>=this.s.c&&q<=this.e.c)for(a=0;a<=this.e.c-this.s.c;++a)h(null,f,q++)});if(!1===Fa(d,y.length,b)){if(k||g)g=g||1,F.push({s:{r:f,c:q},e:{r:f+(k||1)-1,c:q+g-1}});h(this,f,q++)}if(g)for(a=0;a<g-1;++a)h(null,f,q++)});c.each(F,function(){if(f>=this.s.r&&f<=this.e.r&&q>=this.s.c&&q<=this.e.c)for(aa=0;aa<=this.e.c-this.s.c;++aa)h(null,f,q++)})}}}function pa(b,d,a,c){if("undefined"!==typeof c.images&&(a=c.images[a],"undefined"!==typeof a)){var h=b.width/b.height,f=d.width/d.height,g=b.width,
|
||||
q=b.height,e=19.049976/25.4,l=0;f<=h?(q=Math.min(b.height,d.height),g=d.width*q/d.height):f>h&&(g=Math.min(b.width,d.width),q=d.height*g/d.width);g*=e;q*=e;q<b.height&&(l=(b.height-q)/2);try{c.doc.addImage(a.src,b.textPos.x,b.y+l,g,q)}catch(Ka){}b.textPos.x+=g}}function qa(b,d){if("string"===a.outputMode)return b.output();if("base64"===a.outputMode)return J(b.output());if("window"===a.outputMode)window.URL=window.URL||window.webkitURL,window.open(window.URL.createObjectURL(b.output("blob")));else try{var c=
|
||||
b.output("blob");saveAs(c,a.fileName+".pdf")}catch(g){G(a.fileName+".pdf","data:application/pdf"+(d?"":";base64")+",",d?b.output("blob"):b.output())}}function ra(b,a,c){var d=0;"undefined"!==typeof c&&(d=c.colspan);if(0<=d){for(var h=b.width,f=b.textPos.x,y=a.table.columns.indexOf(a.column),q=1;q<d;q++)h+=a.table.columns[y+q].width;1<d&&("right"===b.styles.halign?f=b.textPos.x+h-b.width:"center"===b.styles.halign&&(f=b.textPos.x+(h-b.width)/2));b.width=h;b.textPos.x=f;"undefined"!==typeof c&&1<c.rowspan&&
|
||||
(b.height*=c.rowspan);if("middle"===b.styles.valign||"bottom"===b.styles.valign)c=("string"===typeof b.text?b.text.split(/\r\n|\r|\n/g):b.text).length||1,2<c&&(b.textPos.y-=(2-1.15)/2*a.row.styles.fontSize*(c-2)/3);return!0}return!1}function sa(b,a,f){"undefined"!==typeof b&&null!==b&&(b.hasAttribute("data-tableexport-canvas")?(a=(new Date).getTime(),c(b).attr("data-tableexport-canvas",a),f.images[a]={url:'[data-tableexport-canvas="'+a+'"]',src:null}):"undefined"!==a&&null!=a&&a.each(function(){if(c(this).is("img")){var a=
|
||||
ta(this.src);f.images[a]={url:this.src,src:this.src}}sa(b,c(this).children(),f)}))}function Ga(b,a){function d(b){if(b.url)if(b.src){var d=new Image;g=++h;d.crossOrigin="Anonymous";d.onerror=d.onload=function(){if(d.complete&&(0===d.src.indexOf("data:image/")&&(d.width=b.width||d.width||0,d.height=b.height||d.height||0),d.width+d.height)){var c=document.createElement("canvas"),f=c.getContext("2d");c.width=d.width;c.height=d.height;f.drawImage(d,0,0);b.src=c.toDataURL("image/png")}--h||a(g)};d.src=
|
||||
b.url}else{var f=c(b.url);f.length&&(g=++h,html2canvas(f[0]).then(function(d){b.src=d.toDataURL("image/png");--h||a(g)}))}}var g=0,h=0;if("undefined"!==typeof b.images)for(var k in b.images)b.images.hasOwnProperty(k)&&d(b.images[k]);(b=h)||(a(g),b=void 0);return b}function ua(b,d,f){d.each(function(){if(c(this).is("div")){var d=ba(K(this,"background-color"),[255,255,255]),h=ba(K(this,"border-top-color"),[0,0,0]),k=ca(this,"border-top-width",a.jspdf.unit),y=this.getBoundingClientRect(),q=this.offsetLeft*
|
||||
f.dw,e=this.offsetTop*f.dh,l=y.width*f.dw;y=y.height*f.dh;f.doc.setDrawColor.apply(void 0,h);f.doc.setFillColor.apply(void 0,d);f.doc.setLineWidth(k);f.doc.rect(b.x+q,b.y+e,l,y,k?"FD":"F")}else c(this).is("img")&&(d=ta(this.src),pa(b,this,d,f));ua(b,c(this).children(),f)})}function va(b,d,f){if("function"===typeof f.onAutotableText)f.onAutotableText(f.doc,b,d);else{var g=b.textPos.x,h=b.textPos.y,k={halign:b.styles.halign,valign:b.styles.valign};if(d.length){for(d=d[0];d.previousSibling;)d=d.previousSibling;
|
||||
for(var y=!1,q=!1;d;){var e=d.innerText||d.textContent||"",l=e.length&&" "===e[0]?" ":"",m=1<e.length&&" "===e[e.length-1]?" ":"";!0!==a.preserve.leadingWS&&(e=l+ha(e));!0!==a.preserve.trailingWS&&(e=ia(e)+m);c(d).is("br")&&(g=b.textPos.x,h+=f.doc.internal.getFontSize());c(d).is("b")?y=!0:c(d).is("i")&&(q=!0);(y||q)&&f.doc.setFontType(y&&q?"bolditalic":y?"bold":"italic");if(l=f.doc.getStringUnitWidth(e)*f.doc.internal.getFontSize()){"linebreak"===b.styles.overflow&&g>b.textPos.x&&g+l>b.textPos.x+
|
||||
b.width&&(0<=".,!%*;:=-".indexOf(e.charAt(0))&&(m=e.charAt(0),l=f.doc.getStringUnitWidth(m)*f.doc.internal.getFontSize(),g+l<=b.textPos.x+b.width&&(f.doc.autoTableText(m,g,h,k),e=e.substring(1,e.length)),l=f.doc.getStringUnitWidth(e)*f.doc.internal.getFontSize()),g=b.textPos.x,h+=f.doc.internal.getFontSize());if("visible"!==b.styles.overflow)for(;e.length&&g+l>b.textPos.x+b.width;)e=e.substring(0,e.length-1),l=f.doc.getStringUnitWidth(e)*f.doc.internal.getFontSize();f.doc.autoTableText(e,g,h,k);g+=
|
||||
l}if(y||q)c(d).is("b")?y=!1:c(d).is("i")&&(q=!1),f.doc.setFontType(y||q?y?"bold":"italic":"normal");d=d.nextSibling}b.textPos.x=g;b.textPos.y=h}else f.doc.autoTableText(b.text,b.textPos.x,b.textPos.y,k)}}function da(b,a,c){return null==b?"":b.toString().replace(new RegExp(null==a?"":a.toString().replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1"),"g"),c)}function ha(b){return null==b?"":b.toString().replace(/^\s+/,"")}function ia(b){return null==b?"":b.toString().replace(/\s+$/,"")}function ja(b){b=da(b||
|
||||
"0",a.numbers.html.thousandsSeparator,"");b=da(b,a.numbers.html.decimalMark,".");return"number"===typeof b||!1!==jQuery.isNumeric(b)?b:!1}function Ha(b){-1<b.indexOf("%")?(b=ja(b.replace(/%/g,"")),!1!==b&&(b/=100)):b=!1;return b}function B(b,d,f){var g="";if(null!==b){var h=c(b);if(h[0].hasAttribute("data-tableexport-canvas"))var k="";else if(h[0].hasAttribute("data-tableexport-value"))k=(k=h.data("tableexport-value"))?k+"":"";else if(k=h.html(),"function"===typeof a.onCellHtmlData)k=a.onCellHtmlData(h,
|
||||
d,f,k);else if(""!==k){var e=c.parseHTML(k),q=0,l=0;k="";c.each(e,function(){if(c(this).is("input"))k+=h.find("input").eq(q++).val();else if(c(this).is("select"))k+=h.find("select option:selected").eq(l++).text();else if(c(this).is("br"))k+="<br>";else if("undefined"===typeof c(this).html())k+=c(this).text();else if(void 0===jQuery().bootstrapTable||!0!==c(this).hasClass("filterControl")&&0===c(b).parents(".detail-view").length)k+=c(this).html()})}if(!0===a.htmlContent)g=c.trim(k);else if(k&&""!==
|
||||
k)if(""!==c(b).data("tableexport-cellformat")){var m=k.replace(/\n/g,"\u2028").replace(/(<\s*br([^>]*)>)/gi,"\u2060"),n=c("<div/>").html(m).contents();e=!1;m="";c.each(n.text().split("\u2028"),function(b,d){0<b&&(m+=" ");!0!==a.preserve.leadingWS&&(d=ha(d));m+=!0!==a.preserve.trailingWS?ia(d):d});c.each(m.split("\u2060"),function(b,d){0<b&&(g+="\n");!0!==a.preserve.leadingWS&&(d=ha(d));!0!==a.preserve.trailingWS&&(d=ia(d));g+=d.replace(/\u00AD/g,"")});g=g.replace(/\u00A0/g," ");if("json"===a.type||
|
||||
"excel"===a.type&&"xmlss"===a.mso.fileFormat||!1===a.numbers.output)e=ja(g),!1!==e&&(g=Number(e));else if(a.numbers.html.decimalMark!==a.numbers.output.decimalMark||a.numbers.html.thousandsSeparator!==a.numbers.output.thousandsSeparator)if(e=ja(g),!1!==e){n=(""+e.substr(0>e?1:0)).split(".");1===n.length&&(n[1]="");var p=3<n[0].length?n[0].length%3:0;g=(0>e?"-":"")+(a.numbers.output.thousandsSeparator?(p?n[0].substr(0,p)+a.numbers.output.thousandsSeparator:"")+n[0].substr(p).replace(/(\d{3})(?=\d)/g,
|
||||
"$1"+a.numbers.output.thousandsSeparator):n[0])+(n[1].length?a.numbers.output.decimalMark+n[1]:"")}}else g=k;!0===a.escape&&(g=escape(g));"function"===typeof a.onCellData&&(g=a.onCellData(h,d,f,g))}return g}function wa(b){return 0<b.length&&!0===a.preventInjection&&0<="=+-@".indexOf(b.charAt(0))?"'"+b:b}function Ia(b,a,c){return a+"-"+c.toLowerCase()}function ba(b,a){(b=/^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/.exec(b))&&(a=[parseInt(b[1]),parseInt(b[2]),parseInt(b[3])]);return a}function xa(b){var a=
|
||||
K(b,"text-align"),c=K(b,"font-weight"),g=K(b,"font-style"),h="";"start"===a&&(a="rtl"===K(b,"direction")?"right":"left");700<=c&&(h="bold");"italic"===g&&(h+=g);""===h&&(h="normal");a={style:{align:a,bcolor:ba(K(b,"background-color"),[255,255,255]),color:ba(K(b,"color"),[0,0,0]),fstyle:h},colspan:S(b),rowspan:T(b)};null!==b&&(b=b.getBoundingClientRect(),a.rect={width:b.width,height:b.height});return a}function S(b){var a=c(b).data("tableexport-colspan");"undefined"===typeof a&&c(b).is("[colspan]")&&
|
||||
(a=c(b).attr("colspan"));return parseInt(a)||0}function T(b){var a=c(b).data("tableexport-rowspan");"undefined"===typeof a&&c(b).is("[rowspan]")&&(a=c(b).attr("rowspan"));return parseInt(a)||0}function K(b,a){try{return window.getComputedStyle?(a=a.replace(/([a-z])([A-Z])/,Ia),window.getComputedStyle(b,null).getPropertyValue(a)):b.currentStyle?b.currentStyle[a]:b.style[a]}catch(f){}return""}function ca(b,a,c){a=K(b,a).match(/\d+/);if(null!==a){a=a[0];b=b.parentElement;var d=document.createElement("div");
|
||||
d.style.overflow="hidden";d.style.visibility="hidden";b.appendChild(d);d.style.width=100+c;c=100/d.offsetWidth;b.removeChild(d);return a*c}return 0}function ka(){if(!(this instanceof ka))return new ka;this.SheetNames=[];this.Sheets={}}function ya(b){for(var a=new ArrayBuffer(b.length),c=new Uint8Array(a),g=0;g!==b.length;++g)c[g]=b.charCodeAt(g)&255;return a}function Ja(b){for(var a={},c={s:{c:1E7,r:1E7},e:{c:0,r:0}},g=0;g!==b.length;++g)for(var h=0;h!==b[g].length;++h){c.s.r>g&&(c.s.r=g);c.s.c>h&&
|
||||
(c.s.c=h);c.e.r<g&&(c.e.r=g);c.e.c<h&&(c.e.c=h);var k={v:b[g][h]};if(null!==k.v){var e=XLSX.utils.encode_cell({c:h,r:g});if("number"===typeof k.v)k.t="n";else if("boolean"===typeof k.v)k.t="b";else if(k.v instanceof Date){k.t="n";k.z=XLSX.SSF._table[14];var q=k;var l=(Date.parse(k.v)-new Date(Date.UTC(1899,11,30)))/864E5;q.v=l}else k.t="s";a[e]=k}}1E7>c.s.c&&(a["!ref"]=XLSX.utils.encode_range(c));return a}function ta(b){var a=0,c;if(0===b.length)return a;var g=0;for(c=b.length;g<c;g++){var h=b.charCodeAt(g);
|
||||
a=(a<<5)-a+h;a|=0}return a}function G(b,a,c){var d=window.navigator.userAgent;if(!1!==b&&window.navigator.msSaveOrOpenBlob)window.navigator.msSaveOrOpenBlob(new Blob([c]),b);else if(!1!==b&&(0<d.indexOf("MSIE ")||d.match(/Trident.*rv\:11\./))){if(a=document.createElement("iframe")){document.body.appendChild(a);a.setAttribute("style","display:none");a.contentDocument.open("txt/plain","replace");a.contentDocument.write(c);a.contentDocument.close();a.contentDocument.focus();switch(b.substr(b.lastIndexOf(".")+
|
||||
1)){case "doc":case "json":case "png":case "pdf":case "xls":case "xlsx":b+=".txt"}a.contentDocument.execCommand("SaveAs",!0,b);document.body.removeChild(a)}}else{var h=document.createElement("a");if(h){var k=null;h.style.display="none";!1!==b?h.download=b:h.target="_blank";"object"===typeof c?(window.URL=window.URL||window.webkitURL,b=[],b.push(c),k=window.URL.createObjectURL(new Blob(b,{type:a})),h.href=k):0<=a.toLowerCase().indexOf("base64,")?h.href=a+J(c):h.href=a+encodeURIComponent(c);document.body.appendChild(h);
|
||||
if(document.createEvent)null===ea&&(ea=document.createEvent("MouseEvents")),ea.initEvent("click",!0,!1),h.dispatchEvent(ea);else if(document.createEventObject)h.fireEvent("onclick");else if("function"===typeof h.onclick)h.onclick();setTimeout(function(){k&&window.URL.revokeObjectURL(k);document.body.removeChild(h)},100)}}}function J(a){var b,c="",g=0;if("string"===typeof a){a=a.replace(/\x0d\x0a/g,"\n");var h="";for(b=0;b<a.length;b++){var k=a.charCodeAt(b);128>k?h+=String.fromCharCode(k):(127<k&&
|
||||
2048>k?h+=String.fromCharCode(k>>6|192):(h+=String.fromCharCode(k>>12|224),h+=String.fromCharCode(k>>6&63|128)),h+=String.fromCharCode(k&63|128))}a=h}for(;g<a.length;){var e=a.charCodeAt(g++);h=a.charCodeAt(g++);b=a.charCodeAt(g++);k=e>>2;e=(e&3)<<4|h>>4;var q=(h&15)<<2|b>>6;var l=b&63;isNaN(h)?q=l=64:isNaN(b)&&(l=64);c=c+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(k)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(e)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(q)+
|
||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(l)}return c}var a={csvEnclosure:'"',csvSeparator:",",csvUseBOM:!0,displayTableName:!1,escape:!1,exportHiddenCells:!1,fileName:"tableExport",htmlContent:!1,ignoreColumn:[],ignoreRow:[],jsonScope:"all",jspdf:{orientation:"p",unit:"pt",format:"a4",margins:{left:20,right:10,top:10,bottom:10},onDocCreated:null,autotable:{styles:{cellPadding:2,rowHeight:12,fontSize:8,fillColor:255,textColor:50,fontStyle:"normal",overflow:"ellipsize",
|
||||
halign:"inherit",valign:"middle"},headerStyles:{fillColor:[52,73,94],textColor:255,fontStyle:"bold",halign:"inherit",valign:"middle"},alternateRowStyles:{fillColor:245},tableExport:{doc:null,onAfterAutotable:null,onBeforeAutotable:null,onAutotableText:null,onTable:null,outputImages:!0}}},mso:{fileFormat:"xlshtml",onMsoNumberFormat:null,pageFormat:"a4",pageOrientation:"portrait",rtl:!1,styles:[],worksheetName:""},numbers:{html:{decimalMark:".",thousandsSeparator:","},output:{decimalMark:".",thousandsSeparator:","}},
|
||||
onCellData:null,onCellHtmlData:null,onIgnoreRow:null,outputMode:"file",pdfmake:{enabled:!1,docDefinition:{pageOrientation:"portrait",defaultStyle:{font:"Roboto"}},fonts:{}},preserve:{leadingWS:!1,trailingWS:!1},preventInjection:!0,tbodySelector:"tr",tfootSelector:"tr",theadSelector:"tr",tableName:"Table",type:"csv"},L={a0:[2383.94,3370.39],a1:[1683.78,2383.94],a2:[1190.55,1683.78],a3:[841.89,1190.55],a4:[595.28,841.89],a5:[419.53,595.28],a6:[297.64,419.53],a7:[209.76,297.64],a8:[147.4,209.76],a9:[104.88,
|
||||
147.4],a10:[73.7,104.88],b0:[2834.65,4008.19],b1:[2004.09,2834.65],b2:[1417.32,2004.09],b3:[1000.63,1417.32],b4:[708.66,1000.63],b5:[498.9,708.66],b6:[354.33,498.9],b7:[249.45,354.33],b8:[175.75,249.45],b9:[124.72,175.75],b10:[87.87,124.72],c0:[2599.37,3676.54],c1:[1836.85,2599.37],c2:[1298.27,1836.85],c3:[918.43,1298.27],c4:[649.13,918.43],c5:[459.21,649.13],c6:[323.15,459.21],c7:[229.61,323.15],c8:[161.57,229.61],c9:[113.39,161.57],c10:[79.37,113.39],dl:[311.81,623.62],letter:[612,792],"government-letter":[576,
|
||||
756],legal:[612,1008],"junior-legal":[576,360],ledger:[1224,792],tabloid:[792,1224],"credit-card":[153,243]},v=this,ea=null,r=[],t=[],n=0,p="",R=[],F=[],I=[],U=!1;c.extend(!0,a,l);"xlsx"===a.type&&(a.mso.fileFormat=a.type,a.type="excel");"undefined"!==typeof a.excelFileFormat&&"undefined"===a.mso.fileFormat&&(a.mso.fileFormat=a.excelFileFormat);"undefined"!==typeof a.excelPageFormat&&"undefined"===a.mso.pageFormat&&(a.mso.pageFormat=a.excelPageFormat);"undefined"!==typeof a.excelPageOrientation&&
|
||||
"undefined"===a.mso.pageOrientation&&(a.mso.pageOrientation=a.excelPageOrientation);"undefined"!==typeof a.excelRTL&&"undefined"===a.mso.rtl&&(a.mso.rtl=a.excelRTL);"undefined"!==typeof a.excelstyles&&"undefined"===a.mso.styles&&(a.mso.styles=a.excelstyles);"undefined"!==typeof a.onMsoNumberFormat&&"undefined"===a.mso.onMsoNumberFormat&&(a.mso.onMsoNumberFormat=a.onMsoNumberFormat);"undefined"!==typeof a.worksheetName&&"undefined"===a.mso.worksheetName&&(a.mso.worksheetName=a.worksheetName);a.mso.pageOrientation=
|
||||
"l"===a.mso.pageOrientation.substr(0,1)?"landscape":"portrait";R=P(v);if("csv"===a.type||"tsv"===a.type||"txt"===a.type){var M="",X=0;F=[];n=0;var la=function(b,d,f){b.each(function(){p="";D(this,d,n,f+b.length,function(b,c,d){var h=p,k="";if(null!==b)if(b=B(b,c,d),c=null===b||""===b?"":b.toString(),"tsv"===a.type)b instanceof Date&&b.toLocaleString(),k=da(c,"\t"," ");else if(b instanceof Date)k=a.csvEnclosure+b.toLocaleString()+a.csvEnclosure;else if(k=wa(c),k=da(k,a.csvEnclosure,a.csvEnclosure+
|
||||
a.csvEnclosure),0<=k.indexOf(a.csvSeparator)||/[\r\n ]/g.test(k))k=a.csvEnclosure+k+a.csvEnclosure;p=h+(k+("tsv"===a.type?"\t":a.csvSeparator))});p=c.trim(p).substring(0,p.length-1);0<p.length&&(0<M.length&&(M+="\n"),M+=p);n++});return b.length};X+=la(c(v).find("thead").first().find(a.theadSelector),"th,td",X);x(c(v),"tbody").each(function(){X+=la(x(c(this),a.tbodySelector),"td,th",X)});a.tfootSelector.length&&la(c(v).find("tfoot").first().find(a.tfootSelector),"td,th",X);M+="\n";if("string"===a.outputMode)return M;
|
||||
if("base64"===a.outputMode)return J(M);if("window"===a.outputMode){G(!1,"data:text/"+("csv"===a.type?"csv":"plain")+";charset=utf-8,",M);return}try{var C=new Blob([M],{type:"text/"+("csv"===a.type?"csv":"plain")+";charset=utf-8"});saveAs(C,a.fileName+"."+a.type,"csv"!==a.type||!1===a.csvUseBOM)}catch(b){G(a.fileName+"."+a.type,"data:text/"+("csv"===a.type?"csv":"plain")+";charset=utf-8,"+("csv"===a.type&&a.csvUseBOM?"\ufeff":""),M)}}else if("sql"===a.type){n=0;F=[];var z="INSERT INTO `"+a.tableName+
|
||||
"` (";r=u(c(v));c(r).each(function(){D(this,"th,td",n,r.length,function(a,c,f){z+="'"+B(a,c,f)+"',"});n++;z=c.trim(z).substring(0,z.length-1)});z+=") VALUES ";t=w(c(v));c(t).each(function(){p="";D(this,"td,th",n,r.length+t.length,function(a,c,f){p+="'"+B(a,c,f)+"',"});3<p.length&&(z+="("+p,z=c.trim(z).substring(0,z.length-1),z+="),");n++});z=c.trim(z).substring(0,z.length-1);z+=";";if("string"===a.outputMode)return z;if("base64"===a.outputMode)return J(z);try{C=new Blob([z],{type:"text/plain;charset=utf-8"}),
|
||||
saveAs(C,a.fileName+".sql")}catch(b){G(a.fileName+".sql","data:application/sql;charset=utf-8,",z)}}else if("json"===a.type){var V=[];F=[];r=u(c(v));c(r).each(function(){var a=[];D(this,"th,td",n,r.length,function(b,c,g){a.push(B(b,c,g))});V.push(a)});var ma=[];t=w(c(v));c(t).each(function(){var a={},d=0;D(this,"td,th",n,r.length+t.length,function(b,c,h){V.length?a[V[V.length-1][d]]=B(b,c,h):a[d]=B(b,c,h);d++});!1===c.isEmptyObject(a)&&ma.push(a);n++});l="";l="head"===a.jsonScope?JSON.stringify(V):
|
||||
"data"===a.jsonScope?JSON.stringify(ma):JSON.stringify({header:V,data:ma});if("string"===a.outputMode)return l;if("base64"===a.outputMode)return J(l);try{C=new Blob([l],{type:"application/json;charset=utf-8"}),saveAs(C,a.fileName+".json")}catch(b){G(a.fileName+".json","data:application/json;charset=utf-8;base64,",l)}}else if("xml"===a.type){n=0;F=[];var N='<?xml version="1.0" encoding="utf-8"?>';N+="<tabledata><fields>";r=u(c(v));c(r).each(function(){D(this,"th,td",n,r.length,function(a,c,f){N+="<field>"+
|
||||
B(a,c,f)+"</field>"});n++});N+="</fields><data>";var za=1;t=w(c(v));c(t).each(function(){var a=1;p="";D(this,"td,th",n,r.length+t.length,function(b,c,g){p+="<column-"+a+">"+B(b,c,g)+"</column-"+a+">";a++});0<p.length&&"<column-1></column-1>"!==p&&(N+='<row id="'+za+'">'+p+"</row>",za++);n++});N+="</data></tabledata>";if("string"===a.outputMode)return N;if("base64"===a.outputMode)return J(N);try{C=new Blob([N],{type:"application/xml;charset=utf-8"}),saveAs(C,a.fileName+".xml")}catch(b){G(a.fileName+
|
||||
".xml","data:application/xml;charset=utf-8;base64,",N)}}else if("excel"===a.type&&"xmlss"===a.mso.fileFormat){var na=[],E=[];c(v).filter(function(){return Q(c(this))}).each(function(){function b(a,b,d){var h=[];c(a).each(function(){var b=0,k=0;p="";D(this,"td,th",n,d+a.length,function(a,d,f){if(null!==a){var g="";d=B(a,d,f);f="String";if(!1!==jQuery.isNumeric(d))f="Number";else{var e=Ha(d);!1!==e&&(d=e,f="Number",g+=' ss:StyleID="pct1"')}"Number"!==f&&(d=d.replace(/\n/g,"<br>"));e=S(a);a=T(a);c.each(h,
|
||||
function(){if(n>=this.s.r&&n<=this.e.r&&k>=this.s.c&&k<=this.e.c)for(var a=0;a<=this.e.c-this.s.c;++a)k++,b++});if(a||e)a=a||1,e=e||1,h.push({s:{r:n,c:k},e:{r:n+a-1,c:k+e-1}});1<e&&(g+=' ss:MergeAcross="'+(e-1)+'"',k+=e-1);1<a&&(g+=' ss:MergeDown="'+(a-1)+'" ss:StyleID="rsp1"');0<b&&(g+=' ss:Index="'+(k+1)+'"',b=0);p+="<Cell"+g+'><Data ss:Type="'+f+'">'+c("<div />").text(d).html()+"</Data></Cell>\r";k++}});0<p.length&&(H+='<Row ss:AutoFitHeight="0">\r'+p+"</Row>\r");n++});return a.length}var d=c(this),
|
||||
f="";"string"===typeof a.mso.worksheetName&&a.mso.worksheetName.length?f=a.mso.worksheetName+" "+(E.length+1):"undefined"!==typeof a.mso.worksheetName[E.length]&&(f=a.mso.worksheetName[E.length]);f.length||(f=d.find("caption").text()||"");f.length||(f="Table "+(E.length+1));f=c.trim(f.replace(/[\\\/[\]*:?'"]/g,"").substring(0,31));E.push(c("<div />").text(f).html());!1===a.exportHiddenCells&&(I=d.find("tr, th, td").filter(":hidden"),U=0<I.length);n=0;R=P(this);H="<Table>\r";var g=b(u(d),"th,td",g);
|
||||
b(w(d),"td,th",g);H+="</Table>\r";na.push(H)});l={};for(var A={},m,O,W=0,aa=E.length;W<aa;W++)m=E[W],O=l[m],O=l[m]=null==O?1:O+1,2===O&&(E[A[m]]=E[A[m]].substring(0,29)+"-1"),1<l[m]?E[W]=E[W].substring(0,29)+"-"+l[m]:A[m]=W;l='<?xml version="1.0" encoding="UTF-8"?>\r<?mso-application progid="Excel.Sheet"?>\r<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"\r xmlns:o="urn:schemas-microsoft-com:office:office"\r xmlns:x="urn:schemas-microsoft-com:office:excel"\r xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"\r xmlns:html="http://www.w3.org/TR/REC-html40">\r<DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">\r <Created>'+
|
||||
(new Date).toISOString()+'</Created>\r</DocumentProperties>\r<OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">\r <AllowPNG/>\r</OfficeDocumentSettings>\r<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">\r <WindowHeight>9000</WindowHeight>\r <WindowWidth>13860</WindowWidth>\r <WindowTopX>0</WindowTopX>\r <WindowTopY>0</WindowTopY>\r <ProtectStructure>False</ProtectStructure>\r <ProtectWindows>False</ProtectWindows>\r</ExcelWorkbook>\r<Styles>\r <Style ss:ID="Default" ss:Name="Normal">\r <Alignment ss:Vertical="Bottom"/>\r <Borders/>\r <Font/>\r <Interior/>\r <NumberFormat/>\r <Protection/>\r </Style>\r <Style ss:ID="rsp1">\r <Alignment ss:Vertical="Center"/>\r </Style>\r <Style ss:ID="pct1">\r <NumberFormat ss:Format="Percent"/>\r </Style>\r</Styles>\r';
|
||||
for(A=0;A<na.length;A++)l+='<Worksheet ss:Name="'+E[A]+'" ss:RightToLeft="'+(a.mso.rtl?"1":"0")+'">\r'+na[A],l=a.mso.rtl?l+'<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">\r<DisplayRightToLeft/>\r</WorksheetOptions>\r':l+'<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel"/>\r',l+="</Worksheet>\r";l+="</Workbook>\r";if("string"===a.outputMode)return l;if("base64"===a.outputMode)return J(l);try{C=new Blob([l],{type:"application/xml;charset=utf-8"}),saveAs(C,a.fileName+
|
||||
".xml")}catch(b){G(a.fileName+".xml","data:application/xml;charset=utf-8;base64,",l)}}else if("excel"===a.type&&"xlsx"===a.mso.fileFormat){var Aa=[],oa=[];n=0;t=u(c(v));t.push.apply(t,w(c(v)));c(t).each(function(){var b=[];D(this,"th,td",n,t.length,function(d,f,g){if("undefined"!==typeof d&&null!==d){g=B(d,f,g);f=S(d);d=T(d);c.each(oa,function(){if(n>=this.s.r&&n<=this.e.r&&b.length>=this.s.c&&b.length<=this.e.c)for(var a=0;a<=this.e.c-this.s.c;++a)b.push(null)});if(d||f)f=f||1,oa.push({s:{r:n,c:b.length},
|
||||
e:{r:n+(d||1)-1,c:b.length+f-1}});"function"!==typeof a.onCellData&&""!==g&&g===+g&&(g=+g);b.push(""!==g?g:null);if(f)for(d=0;d<f-1;++d)b.push(null)}});Aa.push(b);n++});l=new ka;A=Ja(Aa);A["!merges"]=oa;XLSX.utils.book_append_sheet(l,A,a.mso.worksheetName);l=XLSX.write(l,{type:"binary",bookType:a.mso.fileFormat,bookSST:!1});try{C=new Blob([ya(l)],{type:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8"}),saveAs(C,a.fileName+"."+a.mso.fileFormat)}catch(b){G(a.fileName+
|
||||
"."+a.mso.fileFormat,"data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8,",ya(l))}}else if("excel"===a.type||"xls"===a.type||"word"===a.type||"doc"===a.type){l="excel"===a.type||"xls"===a.type?"excel":"word";A="excel"===l?"xls":"doc";m='xmlns:x="urn:schemas-microsoft-com:office:'+l+'"';var H="",Y="";c(v).filter(function(){return Q(c(this))}).each(function(){var b=c(this);""===Y&&(Y=a.mso.worksheetName||b.find("caption").text()||"Table",Y=c.trim(Y.replace(/[\\\/[\]*:?'"]/g,
|
||||
"").substring(0,31)));!1===a.exportHiddenCells&&(I=b.find("tr, th, td").filter(":hidden"),U=0<I.length);n=0;F=[];R=P(this);H+="<table><thead>";r=u(b);c(r).each(function(){p="";D(this,"th,td",n,r.length,function(b,f,g){if(null!==b){var d="";p+="<th";for(var k in a.mso.styles)if(a.mso.styles.hasOwnProperty(k)){var e=c(b).css(a.mso.styles[k]);""!==e&&"0px none rgb(0, 0, 0)"!==e&&"rgba(0, 0, 0, 0)"!==e&&(d+=""===d?'style="':";",d+=a.mso.styles[k]+":"+e)}""!==d&&(p+=" "+d+'"');d=S(b);0<d&&(p+=' colspan="'+
|
||||
d+'"');d=T(b);0<d&&(p+=' rowspan="'+d+'"');p+=">"+B(b,f,g)+"</th>"}});0<p.length&&(H+="<tr>"+p+"</tr>");n++});H+="</thead><tbody>";t=w(b);c(t).each(function(){var b=c(this);p="";D(this,"td,th",n,r.length+t.length,function(d,e,h){if(null!==d){var k=B(d,e,h),g="",f=c(d).data("tableexport-msonumberformat");"undefined"===typeof f&&"function"===typeof a.mso.onMsoNumberFormat&&(f=a.mso.onMsoNumberFormat(d,e,h));"undefined"!==typeof f&&""!==f&&(g="style=\"mso-number-format:'"+f+"'");for(var l in a.mso.styles)a.mso.styles.hasOwnProperty(l)&&
|
||||
(f=c(d).css(a.mso.styles[l]),""===f&&(f=b.css(a.mso.styles[l])),""!==f&&"0px none rgb(0, 0, 0)"!==f&&"rgba(0, 0, 0, 0)"!==f&&(g+=""===g?'style="':";",g+=a.mso.styles[l]+":"+f));p+="<td";""!==g&&(p+=" "+g+'"');e=S(d);0<e&&(p+=' colspan="'+e+'"');d=T(d);0<d&&(p+=' rowspan="'+d+'"');"string"===typeof k&&""!==k&&(k=wa(k),k=k.replace(/\n/g,"<br>"));p+=">"+k+"</td>"}});0<p.length&&(H+="<tr>"+p+"</tr>");n++});a.displayTableName&&(H+="<tr><td></td></tr><tr><td></td></tr><tr><td>"+B(c("<p>"+a.tableName+"</p>"))+
|
||||
"</td></tr>");H+="</tbody></table>"});m='<html xmlns:o="urn:schemas-microsoft-com:office:office" '+m+' xmlns="http://www.w3.org/TR/REC-html40">'+('<meta http-equiv="content-type" content="application/vnd.ms-'+l+'; charset=UTF-8">')+"<head>";"excel"===l&&(m+="\x3c!--[if gte mso 9]>",m+="<xml>",m+="<x:ExcelWorkbook>",m+="<x:ExcelWorksheets>",m+="<x:ExcelWorksheet>",m+="<x:Name>",m+=Y,m+="</x:Name>",m+="<x:WorksheetOptions>",m+="<x:DisplayGridlines/>",a.mso.rtl&&(m+="<x:DisplayRightToLeft/>"),m+="</x:WorksheetOptions>",
|
||||
m+="</x:ExcelWorksheet>",m+="</x:ExcelWorksheets>",m+="</x:ExcelWorkbook>",m+="</xml>",m+="<![endif]--\x3e");m+="<style>";m+="@page { size:"+a.mso.pageOrientation+"; mso-page-orientation:"+a.mso.pageOrientation+"; }";m+="@page Section1 {size:"+L[a.mso.pageFormat][0]+"pt "+L[a.mso.pageFormat][1]+"pt";m+="; margin:1.0in 1.25in 1.0in 1.25in;mso-header-margin:.5in;mso-footer-margin:.5in;mso-paper-source:0;}";m+="div.Section1 {page:Section1;}";m+="@page Section2 {size:"+L[a.mso.pageFormat][1]+"pt "+L[a.mso.pageFormat][0]+
|
||||
"pt";m+=";mso-page-orientation:"+a.mso.pageOrientation+";margin:1.25in 1.0in 1.25in 1.0in;mso-header-margin:.5in;mso-footer-margin:.5in;mso-paper-source:0;}";m+="div.Section2 {page:Section2;}";m+="br {mso-data-placement:same-cell;}";m+="</style>";m+="</head>";m+="<body>";m+='<div class="Section'+("landscape"===a.mso.pageOrientation?"2":"1")+'">';m+=H;m+="</div>";m+="</body>";m+="</html>";if("string"===a.outputMode)return m;if("base64"===a.outputMode)return J(m);try{C=new Blob([m],{type:"application/vnd.ms-"+
|
||||
a.type}),saveAs(C,a.fileName+"."+A)}catch(b){G(a.fileName+"."+A,"data:application/vnd.ms-"+l+";base64,",m)}}else if("png"===a.type)html2canvas(c(v)[0]).then(function(b){b=b.toDataURL();for(var c=atob(b.substring(22)),e=new ArrayBuffer(c.length),g=new Uint8Array(e),h=0;h<c.length;h++)g[h]=c.charCodeAt(h);if("string"===a.outputMode)return c;if("base64"===a.outputMode)return J(b);if("window"===a.outputMode)window.open(b);else try{C=new Blob([e],{type:"image/png"}),saveAs(C,a.fileName+".png")}catch(k){G(a.fileName+
|
||||
".png","data:image/png,",C)}});else if("pdf"===a.type)if(!0===a.pdfmake.enabled){l=[];var Ba=[];n=0;F=[];A=function(a,d,e){var b=0;c(a).each(function(){var a=[];D(this,d,n,e,function(b,c,d){if("undefined"!==typeof b&&null!==b){var h=S(b),k=T(b);b=B(b,c,d)||" ";1<h||1<k?a.push({colSpan:h||1,rowSpan:k||1,text:b}):a.push(b)}else a.push(" ")});a.length&&Ba.push(a);b<a.length&&(b=a.length);n++});return b};r=u(c(this));m=A(r,"th,td",r.length);for(O=l.length;O<m;O++)l.push("*");t=w(c(this));A(t,"th,td",
|
||||
r.length+t.length);l={content:[{table:{headerRows:r.length,widths:l,body:Ba}}]};c.extend(!0,l,a.pdfmake.docDefinition);pdfMake.fonts={Roboto:{normal:"Roboto-Regular.ttf",bold:"Roboto-Medium.ttf",italics:"Roboto-Italic.ttf",bolditalics:"Roboto-MediumItalic.ttf"}};c.extend(!0,pdfMake.fonts,a.pdfmake.fonts);pdfMake.createPdf(l).getBuffer(function(b){try{var c=new Blob([b],{type:"application/pdf"});saveAs(c,a.fileName+".pdf")}catch(f){G(a.fileName+".pdf","application/pdf",b)}})}else if(!1===a.jspdf.autotable){l=
|
||||
{dim:{w:ca(c(v).first().get(0),"width","mm"),h:ca(c(v).first().get(0),"height","mm")},pagesplit:!1};var Ca=new jsPDF(a.jspdf.orientation,a.jspdf.unit,a.jspdf.format);Ca.addHTML(c(v).first(),a.jspdf.margins.left,a.jspdf.margins.top,l,function(){qa(Ca,!1)})}else{var e=a.jspdf.autotable.tableExport;if("string"===typeof a.jspdf.format&&"bestfit"===a.jspdf.format.toLowerCase()){var fa="",Z="",Da=0;c(v).each(function(){if(Q(c(this))){var a=ca(c(this).get(0),"width","pt");if(a>Da){a>L.a0[0]&&(fa="a0",Z=
|
||||
"l");for(var d in L)L.hasOwnProperty(d)&&L[d][1]>a&&(fa=d,Z="l",L[d][0]>a&&(Z="p"));Da=a}}});a.jspdf.format=""===fa?"a4":fa;a.jspdf.orientation=""===Z?"w":Z}if(null==e.doc&&(e.doc=new jsPDF(a.jspdf.orientation,a.jspdf.unit,a.jspdf.format),"function"===typeof a.jspdf.onDocCreated))a.jspdf.onDocCreated(e.doc);!0===e.outputImages&&(e.images={});"undefined"!==typeof e.images&&(c(v).filter(function(){return Q(c(this))}).each(function(){var b=0;F=[];!1===a.exportHiddenCells&&(I=c(this).find("tr, th, td").filter(":hidden"),
|
||||
U=0<I.length);r=u(c(this));t=w(c(this));c(t).each(function(){D(this,"td,th",r.length+b,r.length+t.length,function(a){sa(a,c(a).children(),e)});b++})}),r=[],t=[]);Ga(e,function(){c(v).filter(function(){return Q(c(this))}).each(function(){var b;n=0;F=[];!1===a.exportHiddenCells&&(I=c(this).find("tr, th, td").filter(":hidden"),U=0<I.length);R=P(this);e.columns=[];e.rows=[];e.teCells={};if("function"===typeof e.onTable&&!1===e.onTable(c(this),a))return!0;a.jspdf.autotable.tableExport=null;var d=c.extend(!0,
|
||||
{},a.jspdf.autotable);a.jspdf.autotable.tableExport=e;d.margin={};c.extend(!0,d.margin,a.jspdf.margins);d.tableExport=e;"function"!==typeof d.beforePageContent&&(d.beforePageContent=function(a){if(1===a.pageCount){var b=a.table.rows.concat(a.table.headerRow);c.each(b,function(){0<this.height&&(this.height+=(2-1.15)/2*this.styles.fontSize,a.table.height+=(2-1.15)/2*this.styles.fontSize)})}});"function"!==typeof d.createdHeaderCell&&(d.createdHeaderCell=function(a,b){a.styles=c.extend({},b.row.styles);
|
||||
if("undefined"!==typeof e.columns[b.column.dataKey]){var h=e.columns[b.column.dataKey];if("undefined"!==typeof h.rect){a.contentWidth=h.rect.width;if("undefined"===typeof e.heightRatio||0===e.heightRatio){var k=b.row.raw[b.column.dataKey].rowspan?b.row.raw[b.column.dataKey].rect.height/b.row.raw[b.column.dataKey].rowspan:b.row.raw[b.column.dataKey].rect.height;e.heightRatio=a.styles.rowHeight/k}k=b.row.raw[b.column.dataKey].rect.height*e.heightRatio;k>a.styles.rowHeight&&(a.styles.rowHeight=k)}a.styles.halign=
|
||||
"inherit"===d.headerStyles.halign?"center":d.headerStyles.halign;a.styles.valign=d.headerStyles.valign;"undefined"!==typeof h.style&&!0!==h.style.hidden&&("inherit"===d.headerStyles.halign&&(a.styles.halign=h.style.align),"inherit"===d.styles.fillColor&&(a.styles.fillColor=h.style.bcolor),"inherit"===d.styles.textColor&&(a.styles.textColor=h.style.color),"inherit"===d.styles.fontStyle&&(a.styles.fontStyle=h.style.fstyle))}});"function"!==typeof d.createdCell&&(d.createdCell=function(a,b){b=e.teCells[b.row.index+
|
||||
":"+b.column.dataKey];a.styles.halign="inherit"===d.styles.halign?"center":d.styles.halign;a.styles.valign=d.styles.valign;"undefined"!==typeof b&&"undefined"!==typeof b.style&&!0!==b.style.hidden&&("inherit"===d.styles.halign&&(a.styles.halign=b.style.align),"inherit"===d.styles.fillColor&&(a.styles.fillColor=b.style.bcolor),"inherit"===d.styles.textColor&&(a.styles.textColor=b.style.color),"inherit"===d.styles.fontStyle&&(a.styles.fontStyle=b.style.fstyle))});"function"!==typeof d.drawHeaderCell&&
|
||||
(d.drawHeaderCell=function(a,b){var c=e.columns[b.column.dataKey];return(!0!==c.style.hasOwnProperty("hidden")||!0!==c.style.hidden)&&0<=c.rowIndex?ra(a,b,c):!1});"function"!==typeof d.drawCell&&(d.drawCell=function(a,b){var d=e.teCells[b.row.index+":"+b.column.dataKey];if(!0!==("undefined"!==typeof d&&"undefined"!==typeof d.elements&&d.elements.length&&d.elements[0].hasAttribute("data-tableexport-canvas"))){if(ra(a,b,d))if(e.doc.rect(a.x,a.y,a.width,a.height,a.styles.fillStyle),"undefined"!==typeof d&&
|
||||
"undefined"!==typeof d.elements&&d.elements.length){b=a.height/d.rect.height;if(b>e.dh||"undefined"===typeof e.dh)e.dh=b;e.dw=a.width/d.rect.width;b=a.textPos.y;ua(a,d.elements,e);a.textPos.y=b;va(a,d.elements,e)}else va(a,{},e)}else d=d.elements[0],b=c(d).attr("data-tableexport-canvas"),pa(a,d,b,e);return!1});e.headerrows=[];r=u(c(this));c(r).each(function(){b=0;e.headerrows[n]=[];D(this,"th,td",n,r.length,function(a,c,d){var f=xa(a);f.title=B(a,c,d);f.key=b++;f.rowIndex=n;e.headerrows[n].push(f)});
|
||||
n++});if(0<n)for(var f=n-1;0<=f;)c.each(e.headerrows[f],function(){var a=this;0<f&&null===this.rect&&(a=e.headerrows[f-1][this.key]);null!==a&&0<=a.rowIndex&&(!0!==a.style.hasOwnProperty("hidden")||!0!==a.style.hidden)&&e.columns.push(a)}),f=0<e.columns.length?-1:f-1;var g=0;t=[];t=w(c(this));c(t).each(function(){var a=[];b=0;D(this,"td,th",n,r.length+t.length,function(d,f,h){if("undefined"===typeof e.columns[b]){var k={title:"",key:b,style:{hidden:!0}};e.columns.push(k)}"undefined"!==typeof d&&null!==
|
||||
d?(k=xa(d),k.elements=d.hasAttribute("data-tableexport-canvas")?c(d):c(d).children()):(k=c.extend(!0,{},e.teCells[g+":"+(b-1)]),k.colspan=-1);e.teCells[g+":"+b++]=k;a.push(B(d,f,h))});a.length&&(e.rows.push(a),g++);n++});if("function"===typeof e.onBeforeAutotable)e.onBeforeAutotable(c(this),e.columns,e.rows,d);e.doc.autoTable(e.columns,e.rows,d);if("function"===typeof e.onAfterAutotable)e.onAfterAutotable(c(this),d);a.jspdf.autotable.startY=e.doc.autoTableEndPosY()+d.margin.top});qa(e.doc,"undefined"!==
|
||||
typeof e.images&&!1===jQuery.isEmptyObject(e.images));"undefined"!==typeof e.headerrows&&(e.headerrows.length=0);"undefined"!==typeof e.columns&&(e.columns.length=0);"undefined"!==typeof e.rows&&(e.rows.length=0);delete e.doc;e.doc=null})}return this}})(jQuery);
|
Loading…
Reference in New Issue