feat: 封装Suggest模糊选择控件
This commit is contained in:
parent
5f9a93b218
commit
6c97ca5039
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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; } = "搜索";
|
||||
}
|
|
@ -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>
|
Loading…
Reference in New Issue