예제 #1
0
        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}');")}
}})
예제 #2
0
        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);
        }