public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { output.TagName = "div"; output.TagMode = TagMode.StartTagAndEndTag; Id = string.IsNullOrEmpty(Id) ? Guid.NewGuid().ToNoSplitString() : Id; output.Attributes.Add("id", "top" + Id); output.Attributes.Add("class", "layui-row donotuse_fill"); if (Items.Model is List <TreeSelectListItem> mm) { if (AutoLoad && string.IsNullOrEmpty(AutoLoadUrl)) { AutoLoadUrl = GetFirstNodeUrl(mm); } var inside = await output.GetChildContentAsync(); var insideContent = inside.GetContent(); string cusmtomclick = ""; if (string.IsNullOrEmpty(ClickFunc)) { Regex r = new Regex("(.*?)option = {"); var m = r.Match(insideContent); if (m.Success) { var gridid = m.Groups[1].Value.Trim(); Regex r2 = new Regex($"(.*?) = table.render\\({gridid}option\\);"); var m2 = r2.Match(insideContent); if (m2.Success) { var gridvar = m2.Groups[1].Value.Trim(); cusmtomclick = $@" layui.table.reload('{gridid}',{{where: $.extend({gridvar}.config.where,{{'{IdField?.Name ?? "notsetid"}':data.data.id, '{LevelField?.Name ?? "notsetlevel"}':data.data.level }}) }}) "; } } else if (string.IsNullOrEmpty(insideContent)) { cusmtomclick = $"if(data.data.href!=null && data.data.href!=''){{ff.LoadPage1(data.data.href,'div_{Id}');}}"; } } else { cusmtomclick = $"{FormatFuncName(ClickFunc)};"; } List <LayuiTreeItem> treeitems = GetLayuiTree(mm); var onclick = $@" ,click: function(data){{ var ele = data.elem.find('.layui-tree-entry:first'); if(last{Id} != null){{ last{Id}.css('background-color',''); last{Id}.find('.layui-tree-txt').css('color',''); }} if(last{Id} === ele){{ last{Id} = null; }} else{{ ele.css('background-color','#5fb878'); ele.find('.layui-tree-txt').css('color','#fff'); last{Id} = ele; }} {cusmtomclick} }}"; var script = $@" <div id=""div{Id}outer"" class=""layui-col-md2 donotuse_pdiv"" style=""padding-right:10px;border-right:solid 1px #aaa;""> <div id=""div{Id}"" class=""donotuse_fill"" style=""overflow:auto;height:10px;""> </div> </div> <div id=""div_{Id}"" style=""box-sizing:border-box"" class=""layui-col-md10 donotuse_pdiv"">{insideContent}</div> <script> layui.use(['tree'],function(){{ var last{Id} = null; layui.tree.render({{ id:'tree{Id}',elem: '#div{Id}',onlyIconControl:true, showCheckbox:false,showLine:{ShowLine.ToString().ToLower()} {onclick} ,data: {JsonConvert.SerializeObject(treeitems)} }}); {(string.IsNullOrEmpty(AutoLoadUrl) ? string.Empty : $"ff.LoadPage1('{AutoLoadUrl}','div_{Id}');")} }})
public override void Process(TagHelperContext context, TagHelperOutput output) { bool MultiSelect = false; var type = Field.Metadata.ModelType; if (type.IsArray || (type.IsGenericType && typeof(List <>).IsAssignableFrom(type.GetGenericTypeDefinition())))// Array or List { MultiSelect = true; } string oncheck = ""; string onclick = ""; if (MultiSelect != true) { var formid = ""; if (context.Items.ContainsKey("formid")) { formid = $",'{context.Items["formid"]}form'"; } onclick = $@" ,click: function(data){{ var ele = data.elem.find('.layui-tree-entry:first'); if(last{Id} != null){{ last{Id}.css('background-color',''); last{Id}.find('.layui-tree-txt').css('color',''); }} $('#tree{Id}hidden').html(''); if(last{Id} === ele){{ last{Id} = null; }} else{{ ele.css('background-color','#5fb878'); ele.find('.layui-tree-txt').css('color','#fff'); $('#tree{Id}hidden').append(""<input type='hidden' name='{Field?.Name}' value='""+data.data.id+""'/>""); last{Id} = ele; }} {FormatFuncName(CheckFunc)}; }}"; } else { onclick = $@" ,click: function(data){{ {FormatFuncName(ClickFunc)}; }}"; } oncheck = $@" ,oncheck: function(data){{ if(loaded{Id} == false) return; var checkData = layui.tree.getChecked('tree{Id}'); var ids = ff.getTreeChecked(checkData); $('#tree{Id}hidden').html(''); for(var i=0;i<ids.length;i++){{ $('#tree{Id}hidden').append(""<input type='hidden' name='{Field?.Name}' value='""+ids[i]+""'/>""); }} {FormatFuncName(CheckFunc)}; }}"; output.TagName = "div"; output.Attributes.Add("id", "div" + Id); output.TagMode = TagMode.StartTagAndEndTag; Id = string.IsNullOrEmpty(Id) ? Guid.NewGuid().ToNoSplitString() : Id; if (Items.Model is List <TreeSelectListItem> mm) { List <object> vals = new List <object>(); if (Field?.Model != null) { if (MultiSelect == true) { foreach (var item in Field.Model as dynamic) { vals.Add(item.ToString()); } } else { vals.Add(Field.Model.ToString()); } } List <LayuiTreeItem> treeitems = GetLayuiTree(mm, vals); var script = $@" <script> var last{Id} = null; var loaded{Id} = false; layui.tree.render({{ id:'tree{Id}',elem: '#div{Id}',onlyIconControl:{(!MultiSelect).ToString().ToLower()}, showCheckbox:{MultiSelect.ToString().ToLower()},showLine:{ShowLine.ToString().ToLower()} ,data: {JsonConvert.SerializeObject(treeitems)} {oncheck} {onclick} }}); loaded{Id} = true; </script> "; output.PostElement.AppendHtml(script); string hidden = $"<p id='tree{Id}hidden'>"; if (Field?.Model != null) { if (MultiSelect == true) { foreach (var item in Field.Model as dynamic) { hidden += $@" <input type='hidden' name='{Field?.Name}' value='{item.ToString()}'/>"; } } else { hidden += $"<input type='hidden' name='{Field?.Name}' value='{Field.Model}'/>"; hidden += $@" <script> alert('start'); var selected = $(""div[data-id='{Field.Model.ToString()}']""); var selected2 = selected.find('.layui-tree-entry:first'); selected2.css('background-color','#5fb878'); selected2.find('.layui-tree-txt').css('color','#fff'); last{Id} = selected2; </script> "; } hidden += " </p>"; } output.PostElement.AppendHtml(hidden); } else { output.Content.SetContent("无法绑定Tree,items参数必须设定为类型为List<ITreeData<>>的值"); } base.Process(context, output); }