feat: 封装Suggest模糊选择控件

This commit is contained in:
大石头 2023-05-15 18:21:29 +08:00
parent 5f9a93b218
commit 6c97ca5039
4 changed files with 99 additions and 1 deletions

View File

@ -77,7 +77,6 @@
<Compile Include="..\NewLife.CubeNC\ViewModels\LoginConfigModel.cs" Link="ViewModels\LoginConfigModel.cs" />
<Compile Include="..\NewLife.CubeNC\ViewModels\MenuTree.cs" Link="ViewModels\MenuTree.cs" />
<Compile Include="..\NewLife.CubeNC\ViewModels\SearchField.cs" Link="ViewModels\SearchField.cs" />
<Compile Include="..\NewLife.CubeNC\ViewModels\SelectUserModel.cs" Link="ViewModels\SelectUserModel.cs" />
<Compile Include="..\NewLife.CubeNC\ViewModels\ViewKinds.cs" Link="ViewModels\ViewKinds.cs" />
<Compile Include="..\NewLife.CubeNC\WebMiddleware\TenantMiddleware.cs" Link="WebMiddleware\TenantMiddleware.cs" />
</ItemGroup>

View File

@ -169,4 +169,10 @@
</None>
<None Include="..\NewLife.Cube\Entity\xcodetool.exe" Link="Entity\xcodetool.exe" />
</ItemGroup>
<ItemGroup>
<Content Update="Views\Shared\_Suggest.cshtml">
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</Content>
</ItemGroup>
</Project>

View File

@ -0,0 +1,29 @@
namespace NewLife.Cube.ViewModels;
/// <summary>选择建议选择控件所使用的模型</summary>
public class SuggestModel
{
/// <summary>控件标识</summary>
public String Id { get; set; }
/// <summary>数值。未设置时根据Id从Request中取</summary>
public String Value { get; set; }
/// <summary>显示值</summary>
public String ShowValue { get; set; }
/// <summary>接口地址。最后可以是key=,用于接收关键字</summary>
public String Url { get; set; }
/// <summary>字段列表。名称与显示名</summary>
public IDictionary<String, String> Fields { get; set; }
/// <summary>标识字段。大小写必须跟名称列表一致</summary>
public String IdField { get; set; } = "id";
/// <summary>名称字段。大小写必须跟名称列表一致</summary>
public String NameField { get; set; } = "name";
/// <summary>占位文本</summary>
public String PlaceHolder { get; set; } = "搜索";
}

View File

@ -0,0 +1,64 @@
@model SuggestModel
@using NewLife;
@using NewLife.Serialization;
@using NewLife.Web;
@using XCode;
@using System.Linq;
@using NewLife.Cube.ViewModels;
@{
var id = Model.Id;
var page = ViewBag.Page as Pager;
var val = Model.Value;
if (val.IsNullOrEmpty()) val = page[id];
var set = NewLife.Cube.CubeSetting.Current;
var res = set.ResourceUrl;
if (String.IsNullOrEmpty(res)) res = "/Content";
res = res.TrimEnd('/');
}
<div class="form-group" style="position:relative">
<div class="col-lg-12">
<div class="input-group">
<input type="hidden" name="@id" id="@id" value="@val" />
<input type="text" class="form-control" id="@(id)_select" placeholder="@Model.PlaceHolder" value="@Model.ShowValue">
<div class="input-group-btn">
<ul class="dropdown-menu dropdown-menu-right" role="menu"></ul>
</div>
</div>
</div>
</div>
<script src="@res/bootstrap-suggest.js"></script>
<script type="text/javascript">
$(function () {
$("#@(id)_select").bsSuggest({
url: "@Model.Url",
getDataMethod:"url",
effectiveFieldsAlias: @Html.Raw(Model.Fields.ToJson()),
ignorecase: true,
showHeader: true,
delayUntilKeyup: true, //获取数据的方式为 firstByUrl 时,延迟到有输入/获取到焦点时才请求数据
hideOnSelect: true,
idField: "@Model.IdField",
showBtn: false,
keyField: "@Model.NameField",
clearable: true,
searchingTip: '搜索中...',
allowNoKeyword: true,
delay: 500,
emptyTip: '无数据',
containerValueId: '@id',
fnProcessData: function (result) {
dt = {};
dt.value = result.data;
return dt;
}
}).on('onSetSelectValue', function (e, keyword, data) {
$('#@id').val(keyword.id);
}).on('onUnsetSelectValue', function () {
$('#@id').val('');
});
});
</script>