feat: 支持 SearchText 参数传递给页面

This commit is contained in:
Argo Zhang 2020-01-23 16:00:58 +08:00
parent 09a3523432
commit a0c249719a
No known key found for this signature in database
GPG Key ID: 152E398953DDF19F
10 changed files with 84 additions and 43 deletions

View File

@ -34,7 +34,7 @@ namespace Bootstrap.Admin.Components
/// 查询按钮回调方法
/// </summary>
[Parameter]
public Func<int, int, QueryData<TItem>>? OnQuery { get; set; }
public Func<int, int, string, QueryData<TItem>>? OnQuery { get; set; }
/// <summary>
/// 获得/设置 TableHeader 实例
@ -171,7 +171,8 @@ namespace Bootstrap.Admin.Components
/// </summary>
/// <param name="pageIndex"></param>
/// <param name="pageItems"></param>
/// <param name="searchText"></param>
/// <returns></returns>
protected QueryData<TItem> QueryData(int pageIndex, int pageItems) => OnQuery?.Invoke(pageIndex, pageItems) ?? new QueryData<TItem>();
protected QueryData<TItem> QueryData(int pageIndex, int pageItems, string searchText) => OnQuery?.Invoke(pageIndex, pageItems, searchText) ?? new QueryData<TItem>();
}
}

View File

@ -135,7 +135,7 @@ namespace Bootstrap.Admin.Components
/// 点击翻页回调方法
/// </summary>
[Parameter]
public Func<int, int, QueryData<TItem>>? OnQuery { get; set; }
public Func<int, int, string, QueryData<TItem>>? OnQuery { get; set; }
/// <summary>
/// 新建按钮回调方法
@ -230,7 +230,7 @@ namespace Bootstrap.Admin.Components
if (OnAdd != null) EditModel = OnAdd.Invoke();
if (OnQuery != null)
{
var queryData = OnQuery.Invoke(1, DefaultPageItems);
var queryData = OnQuery.Invoke(1, DefaultPageItems, SearchText);
Items = queryData.Items;
TotalCount = queryData.TotalCount;
}
@ -241,11 +241,8 @@ namespace Bootstrap.Admin.Components
/// </summary>
protected override async System.Threading.Tasks.Task OnAfterRenderAsync(bool firstRender)
{
if (FixedHeader)
{
// 调用客户端脚本 resetWith
await JSRuntime.InitTableAsync(RetrieveId(), firstRender);
}
// 调用客户端脚本
await JSRuntime.InitTableAsync(RetrieveId(), firstRender);
}
/// <summary>
@ -367,7 +364,7 @@ namespace Bootstrap.Admin.Components
/// </summary>
protected void Query()
{
if (OnQuery != null) Query(OnQuery.Invoke(PageIndex, PageItems));
if (OnQuery != null) Query(OnQuery.Invoke(PageIndex, PageItems, SearchText));
}
/// <summary>
@ -443,5 +440,26 @@ namespace Bootstrap.Admin.Components
PageIndex = 1;
Query();
}
/// <summary>
/// 获得/设置 搜索关键字
/// </summary>
[Parameter]
public string SearchText { get; set; } = "";
/// <summary>
/// 获得/设置 搜索关键字改变事件
/// </summary>
[Parameter]
public EventCallback<string> SearchTextChanged { get; set; }
/// <summary>
/// 重置搜索按钮调用此方法
/// </summary>
protected void ClearSearchClick()
{
SearchText = "";
Query();
}
}
}

View File

@ -34,12 +34,14 @@ namespace Bootstrap.Pages.Admin.Components
/// </summary>
/// <param name="pageIndex">页码</param>
/// <param name="pageItems">每页显示数据条目数量</param>
protected override QueryData<BootstrapDict> Query(int pageIndex, int pageItems)
/// <param name="searchText"></param>
protected override QueryData<BootstrapDict> Query(int pageIndex, int pageItems, string searchText)
{
var data = DataAccess.DictHelper.RetrieveDicts();
if (QueryModel.Define != -1) data = data.Where(d => d.Define == QueryModel.Define);
if (!string.IsNullOrEmpty(QueryModel.Name)) data = data.Where(d => d.Name.Contains(QueryModel.Name, StringComparison.OrdinalIgnoreCase));
if (!string.IsNullOrEmpty(QueryModel.Category)) data = data.Where(d => d.Category.Contains(QueryModel.Category, StringComparison.OrdinalIgnoreCase));
if (!string.IsNullOrEmpty(searchText)) data = data.Where(d => d.Category.Contains(searchText, StringComparison.OrdinalIgnoreCase) || d.Name.Contains(searchText, StringComparison.OrdinalIgnoreCase) || d.Code.Contains(searchText, StringComparison.OrdinalIgnoreCase));
var totalCount = data.Count();
var items = data.Skip((pageIndex - 1) * pageItems).Take(pageItems);
return new QueryData<BootstrapDict>() { Items = items, TotalCount = totalCount, PageIndex = pageIndex, PageItems = pageItems };
@ -54,11 +56,11 @@ namespace Bootstrap.Pages.Admin.Components
/// 删除方法
/// </summary>
protected override bool Delete(IEnumerable<BootstrapDict> items) => DataAccess.DictHelper.Delete(items.Select(item => item.Id ?? ""));
/// <summary>
/// 重置搜索方法
/// </summary>
protected void ResetSearch()
protected void ResetSearch()
{
QueryModel.Define = -1;
QueryModel.Category = "";

View File

@ -16,7 +16,8 @@ namespace Bootstrap.Pages.Admin.Components
/// </summary>
/// <param name="pageIndex">页码</param>
/// <param name="pageItems">每页显示数据条目数量</param>
protected override QueryData<Group> Query(int pageIndex, int pageItems)
/// <param name="searchText"></param>
protected override QueryData<Group> Query(int pageIndex, int pageItems, string searchText)
{
var data = GroupHelper.Retrieves();
if (!string.IsNullOrEmpty(QueryModel.GroupName)) data = data.Where(d => d.GroupName.Contains(QueryModel.GroupName, StringComparison.OrdinalIgnoreCase));

View File

@ -115,7 +115,8 @@ namespace Bootstrap.Pages.Admin.Components
/// </summary>
/// <param name="pageIndex">页码</param>
/// <param name="pageItems">每页显示数据条目数量</param>
protected override QueryData<BootstrapMenu> Query(int pageIndex, int pageItems)
/// <param name="searchText"></param>
protected override QueryData<BootstrapMenu> Query(int pageIndex, int pageItems, string searchText)
{
var data = MenuHelper.RetrieveMenusByUserName(UserName);
if (!string.IsNullOrEmpty(QueryModel.Name)) data = data.Where(d => d.Name.Contains(QueryModel.Name, StringComparison.OrdinalIgnoreCase));

View File

@ -26,7 +26,8 @@ namespace Bootstrap.Pages.Admin.Components
/// </summary>
/// <param name="pageIndex">页码</param>
/// <param name="pageItems">每页显示数据条目数量</param>
protected abstract QueryData<TItem> Query(int pageIndex, int pageItems);
/// <param name="searchText"></param>
protected abstract QueryData<TItem> Query(int pageIndex, int pageItems, string searchText);
/// <summary>
/// OnParametersSet 方法

View File

@ -16,7 +16,8 @@ namespace Bootstrap.Pages.Admin.Components
/// </summary>
/// <param name="pageIndex">页码</param>
/// <param name="pageItems">每页显示数据条目数量</param>
protected override QueryData<Role> Query(int pageIndex, int pageItems)
/// <param name="searchText"></param>
protected override QueryData<Role> Query(int pageIndex, int pageItems, string searchText)
{
var data = RoleHelper.Retrieves();
if (!string.IsNullOrEmpty(QueryModel.RoleName)) data = data.Where(d => d.RoleName.Contains(QueryModel.RoleName, StringComparison.OrdinalIgnoreCase));

View File

@ -16,7 +16,8 @@ namespace Bootstrap.Pages.Admin.Components
/// </summary>
/// <param name="pageIndex">页码</param>
/// <param name="pageItems">每页显示数据条目数量</param>
protected override QueryData<User> Query(int pageIndex, int pageItems)
/// <param name="searchText"></param>
protected override QueryData<User> Query(int pageIndex, int pageItems, string searchText)
{
var data = UserHelper.Retrieves();
if (!string.IsNullOrEmpty(QueryModel.UserName)) data = data.Where(d => d.UserName.Contains(QueryModel.UserName, StringComparison.OrdinalIgnoreCase));

View File

@ -19,12 +19,12 @@
</div>
<div class="float-right @(ShowSearch ? "search btn-group" : "search btn-group d-none")">
<div class="input-group">
<input class="form-control search-input" type="text" placeholder="搜索" />
<input class="form-control search-input" type="text" placeholder="搜索" @bind="SearchText" />
<div class="input-group-append">
<button class="btn btn-secondary" type="button" title="搜索">
<button class="btn btn-secondary" type="button" title="搜索" @onclick="SearchClick">
<i class="fa fa-search"></i><span>搜索</span>
</button>
<button class="btn btn-secondary" type="button" title="清空过滤">
<button class="btn btn-secondary" type="button" title="清空过滤" @onclick="ClearSearchClick">
<i class="fa fa-trash"></i> <span>清空过滤</span>
</button>
<button class="btn btn-secondary" type="button" title="高级搜索" @onclick="AdvancedSearchClick">
@ -59,7 +59,7 @@
</thead>
</table>
</div>
<div class="fixed-table-body visible">
<div class="fixed-table-body invisible">
<table class="table table-bordered table-hover table-selected" id="@RetrieveId()">
<thead>
<tr>

View File

@ -168,31 +168,46 @@
var $table = $('#' + id);
var $fixedBody = $table.parents('.fixed-table-body');
if (firstRender) {
// calc height
$.resetTableHeight($fixedBody);
// 固定表头设置
if ($fixedBody.length === 1) {
if (firstRender) {
// calc height
$.resetTableHeight($fixedBody);
// modify scroll
$table.parent().overlayScrollbars({
className: 'os-theme-dark',
scrollbars: {
autoHide: 'leave',
autoHideDelay: 100
}
});
// modify scroll
$table.parent().overlayScrollbars({
className: 'os-theme-dark',
scrollbars: {
autoHide: 'leave',
autoHideDelay: 100
}
});
}
var $tableContainer = $table.parents('.table-wrapper');
var $tableHeader = $tableContainer.find('.fixed-table-header table');
$.resetTableWidth($table, $tableHeader);
if (firstRender) {
$tableContainer.find('.fixed-table-body').removeClass('invisible');
$(window).on('resize', function () {
$.resetTableWidth($table, $tableHeader);
$.resetTableHeight($fixedBody);
});
}
}
var $tableContainer = $table.parents('.table-wrapper');
var $tableHeader = $tableContainer.find('.fixed-table-header table');
$.resetTableWidth($table, $tableHeader);
// set search toolbar
if (firstRender) {
$tableContainer.find('.fixed-table-body').removeClass('invisible');
$(window).on('resize', function () {
$.resetTableWidth($table, $tableHeader);
$.resetTableHeight($fixedBody);
});
var $search = $table.parents('.bootstrap-table').find('.fixed-table-toolbar').find('.search');
if ($search.length === 1) {
$searchInput = $search.find('.search-input').tooltip({
sanitize: false,
title: '<div class="search-input-tooltip">输入任意字符串全局搜索 </br> <kbd>Enter</kbd> 搜索 <kbd>ESC</kbd> 清除搜索</div>',
html: true
});
}
}
}
});