.Net Core3.1 MVC + EF Core+ AutoFac+LayUI+Sqlserver的框架搭建--------权限控制

    用户表:

 

 

 角色表:

 

 

 菜单表:

 

 

 操作按钮表:

 

 

 角色菜单表:

 

 

 菜单按钮操作表:

 

 

 部门表:

 

 

 系统首页:

@using Core.Net.Common.Core.Net.Core.Cookies;
@{
    UserModel uModel = UserHelper.GetCurrent();
    if (uModel == null || uModel.UserId == 0)
    {
        this.Context.Response.Redirect("/SystemManage/Manage/Login");
        return;
    }
}
<!doctype html>
<html class="x-admin-sm">
<head>
    <meta charset="UTF-8">
    <title>秦歌项目管理系统2.0</title>
    <meta name="renderer" content="webkit|ie-comp|ie-stand">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8" />
    <meta http-equiv="Cache-Control" content="no-siteapp" />
    <link rel="stylesheet" href="/xadmin/css/font.css">
    <link rel="stylesheet" href="/xadmin/css/xadmin.css">
    <!-- <link rel="stylesheet" href="./css/theme5.css"> -->
    <script src="/xadmin/lib/layui/layui.js" charset="utf-8"></script>
    <script type="text/javascript" src="/xadmin/js/xadmin.js"></script>
    <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
    <!--[if lt IE 9]>
      <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
      <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
    <![endif]-->
    <script>
        // 是否开启刷新记忆tab功能
        // var is_remember = false;
    </script>
</head>
<body class="index">
    <!-- 顶部开始 -->
    <div class="container">
        <div class="logo">
            <a href="/">标题</a>
        </div>
        <div class="left_open">
            <a><i title="展开左侧栏" class="iconfont">&#xe699;</i></a>
        </div>
        <ul class="layui-nav left fast-add" lay-filter="">
            <li class="layui-nav-item">
                <a href="javascript:;">+新增</a>
                <dl class="layui-nav-child">
                    <!-- 二级菜单 -->
                    <dd>
                        <a onclick="xadmin.open('最大化','http://www.baidu.com','','',true)">
                            <i class="iconfont">&#xe6a2;</i>弹出最大化
                        </a>
                    </dd>

                </dl>
            </li>
        </ul>
        <ul class="layui-nav right" lay-filter="">
            <li class="layui-nav-item">
                <a href="javascript:;">@uModel.UserName</a>
                <dl class="layui-nav-child">
                    <!-- 二级菜单 -->
                    <dd>
                        <a onclick="def_Open('', '/systemmanager/User/UserInfo/@UserHelper.GetUserId()',550,600)">个人信息</a>
                    </dd>
                    <dd>
                        <a onclick="def_Open('修改密码','/systemmanager/User/EditPassword',550,300)">修改密码</a>
                    </dd>
                    <dd>
                        <a onclick="LogOut()">退出</a>
                    </dd>
                </dl>
            </li>
            <li class="layui-nav-item to-index">
                <a href="/">前台首页</a>
            </li>
        </ul>
    </div>
    <!-- 顶部结束 -->
    <!-- 中部开始 -->
    <!-- 左侧菜单开始 -->
    <div class="left-nav">
        <div id="side-nav">
            <ul id="nav">
                @foreach (var item in Core.Net.Web.Common.DropdownHelper.GetNavList(uModel.RoleId))
                {
                    if (item.item.Count > 0)
                    {
                        <li class="layui-nav-itemed">
                            <a href="javascript:;">
                                <i class="iconfont left-nav-li" lay-tips="@item.MenuName">&#xe6b8;</i>
                                <cite>
                                    @item.MenuName
                                </cite>
                                <i class="iconfont nav_right">&#xe697;</i>
                            </a>
                            @foreach (var item1 in item.item)
                            {
                                <ul class="sub-menu">
                                    <li>
                                        <a onclick="xadmin.add_tab('@item1.MenuName', '@item1.MenuUrl', true)">
                                            <i class="iconfont">&#xe70b;</i>
                                            <cite>@item1.MenuName</cite>
                                        </a>
                                    </li>
                                </ul>
                            }

                        </li>
                    }
                }
            </ul>
        </div>
    </div>
    <!-- <div class="x-slide_left"></div> -->
    <!-- 左侧菜单结束 -->
    <!-- 右侧主体开始 -->
    <div class="page-content">
        <div class="layui-tab tab" lay-filter="xbs_tab" lay-allowclose="false">
            <ul class="layui-tab-title">
                <li class="home">
                    <i class="layui-icon">&#xe68e;</i>我的桌面
                </li>
            </ul>
            <div class="layui-unselect layui-form-select layui-form-selected" id="tab_right">
                <dl>
                    <dd data-type="this">关闭当前</dd>
                    <dd data-type="other">关闭其它</dd>
                    <dd data-type="all">关闭全部</dd>
                </dl>
            </div>
            <div class="layui-tab-content">
                <div class="layui-tab-item layui-show">
                    <iframe src='' frameborder="0" scrolling="yes" class="x-iframe"></iframe>
                </div>

            </div>
            <div id="tab_show"></div>
        </div>
    </div>
    <style>
        #warn {
            position: fixed;
            top: 0px;
            left: 0px;
            right: 0px;
            bottom: 0px;
            margin: auto;
        }
    </style>
 
    <div id="test" style="display: none; padding: 20px;">
        <form class="layui-form">
            <div class="layui-form-item">
                <label class="layui-form-label">账号:</label>
                <div class="layui-input-block">
                    <input type="text" value="@uModel.UserName" name="title" lay-verify="title" readonly="readonly" class="layui-input">
                </div>
            </div>

        </form>
    </div>
    <div class="page-content-bg"></div>

    <style id="theme_style"></style>
    <!-- 右侧主体结束 -->


</body>
</html>
<script>
    function def_Open(showtitle, url, w, h) {
        xadmin.open(showtitle, url, w, h);
    }
</script>
<script>
    function Open() {
        layer.open({
            title: '自定义页面层',
            type: 1,
            skin: 'layui-layer-rim',
            area: ['1000px', '580px'],
            content: $('#test11111'),
            btn: '确定',
            maxmin: true,
            minStack: false, //最小化不堆叠在左下角
            id: 'page1', //定义 ID,防止重复弹出
            min: function (layero, index) {

                layer.msg('阻止了默认的最小化');
                layer.style(index, { top: 'auto', bottom: 0 });

                return false;
            }
        });
    }
</script>
<script>
    function LogOut() {
        $.ajax({
            type: "post",
            url: "/systemmanager/Login/LogOut",
           success: function (msg) {
                if (msg == "1") {
                    window.location.href = "/systemmanager/Login/Index";
                }
            }
        });
    }
</script>
DropdownHelper通用类:

 

 

using Core.Net.Common.Core.Net.Core;
using Core.Net.Common.Core.Net.Core.Cookies;
using Core.Net.Common.Core.Net.Data;
using Core.Net.Model.System;
using Microsoft.AspNetCore.Mvc.Rendering;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using static Core.Net.Common.Core.Net.Core.JsonHelper;

namespace Core.Net.Web.Common
{
    public class DropdownHelper
    {
        /// <summary>
        /// 部门下拉框
        /// </summary>
        /// <returns></returns>
        public static IEnumerable<SelectListItem> GetDepartList()
        {
            return GetList("DepartName", "DepartId", "where IsUse=1", "CoreNetSystemDepart", "请选择部门");
        }
        /// <summary>
        /// 角色下拉框
        /// </summary>
        /// <returns></returns>
        public static IEnumerable<SelectListItem> GetRoleList()
        {
            return GetList("RoleName", "RoleId", "where IsUse=1", "CoreNetSystemRole", "请选择角色");
        }
        /// <summary>
        /// 数据库表名下拉框
        /// </summary>
        /// <returns></returns>
        public static IEnumerable<SelectListItem> GetTableList()
        {
            
            return GetList("DepartName", "DepartId", "where IsUse=1", "CoreNetSystemDepart", "请选择部门");
        }
        /// <summary>
        /// 获取一级菜单,也就是一级导航栏列表
        /// </summary>
        /// <returns></returns>
        public static IEnumerable<SelectListItem> GetMenuList()
        {
            return GetList("MenuName", "MenuId", "where PMenuId=0", "CoreNetSystemMenu", "请选择父菜单");
        }
        /// <summary>
        /// 任务调度,获取任务列表
        /// </summary>
        /// <returns></returns>
        public static IEnumerable<SelectListItem> GetTaskList()
        {
            return GetList("TaskName", "SetId", " where IsUse=1", "CoreNetSystemQuartZSet", "请选择任务名称");
        }
        /// <summary>
        /// 获取菜单左侧树形列表对象
        /// </summary>
        /// <returns></returns>
        public static string GetOneLayerJson()
        {
           DataTable dtlist= SqlHelper.Query("select MenuId as id,PMenuId as pId,MenuName as title from CoreNetSystemMenu where PMenuId=0");
            string str = dtlist.ToJson();
            return dtlist.ToJson().TrimEnd(']').TrimStart('[');
        }
        /// <summary>
        /// 获取字典左侧的树形列表对象
        /// </summary>
        /// <returns></returns>
        public static string GetOneDictionary()
        {
            DataTable dtlist = SqlHelper.Query("select DicId as id,PDicId as pId,PDicName as title from CoreNetSystemDictionaryItem where PDicId=0 ");
            string str = dtlist.ToJson();
            return dtlist.ToJson().TrimEnd(']').TrimStart('[');
        }

        /// <summary>
        /// 首页导航栏的权限
        /// </summary>
        /// <returns></returns>
        public static List<NavMenu> GetNavList(int RoleId)
        {
            //获取菜单列表
            DataTable oneNav = SqlHelper.Query("SELECT*FROM CoreNetSystemMenu where IsUse=1 order by Sort asc");
            //获取角色权限列表
            DataTable twoNav = SqlHelper.Query("select a.PMenuId,a.MenuId,a.MenuName,a.MenuUrl,b.OperateIdString from CoreNetSystemMenu a,CoreNetSystemRoleOrMenu b where a.MenuId=b.MenuId and b.RoleId="+ RoleId+" order by b.Sort asc");
            List<CoreNetSystemMenu> oneNavDrop = ModelConvertHelper<CoreNetSystemMenu>.ConvertToModel(oneNav);
            List<MenuItem> twoNavDrop= ModelConvertHelper<MenuItem>.ConvertToModel(twoNav);
            List<NavMenu> navlist = new List<NavMenu>();
            foreach (var item1 in oneNavDrop)
            {
                if (item1.PMenuId==0)
                {
                    NavMenu navMenu = new NavMenu();
                    navMenu.MenuId = item1.MenuId;
                    navMenu.MenuName = item1.MenuName;
                    foreach (var item2 in twoNavDrop)
                    {  
                        if (item1.MenuId== item2.PMenuId)
                        { 
                            NavItem item = new NavItem();
                            item.MenuId = item2.MenuId;
                            item.MenuName = item2.MenuName;
                            item.MenuUrl =item2.MenuUrl;
                            navMenu.item.Add(item);
                        }
                    }
                
                    navlist.Add(navMenu);
                }
            }
            return navlist;

        }
     
        /// <summary>
        /// 获取菜单操作的string对象,这个RoleId=1是超级管理员,这里有二级管理员,他们可以在超级管理元分配的权限下,在次对自己下面的人进行用户权限的配置,而超级管理员,它无视任何权限
///规则,拥有所有权限。
/// </summary> /// <returns></returns> public static List<RoleLimit> GetRoleOrMenuString(int RoleId) { List<RoleLimit> list = new List<RoleLimit>(); DataTable operation = SqlHelper.Query(" SELECT OperationId,OperationName FROM CoreNetSystemOperation"); bool IsAdd = false; DataTable menulist = null; if (RoleId == 0) { IsAdd = true; RoleId = UserHelper.GetRoleId(); } if (RoleId == 1) { menulist = SqlHelper.Query(" select a.MenuId ,OperateString=isnull(STUFF((SELECT ','+cast(OperationId as varchar) FROM CoreNetSystemMenuOrOperate where MenuId=a.MenuId FOR XML PATH(''),TYPE).value('.','NVARCHAR(MAX)'),1,1,''),''),a.MenuName from CoreNetSystemMenu a where PMenuId>0"); } else { menulist = SqlHelper.Query(" select a.MenuId ,OperateString=isnull(STUFF((SELECT ','+cast(OperationId as varchar) FROM CoreNetSystemMenuOrOperate where MenuId=a.MenuId FOR XML PATH(''),TYPE).value('.','NVARCHAR(MAX)'),1,1,''),''),a.MenuName from CoreNetSystemMenu a where a.IsUse=1 and PMenuId>0"); } if (IsAdd) { foreach (DataRow item1 in menulist.Rows) { RoleLimit limit = new RoleLimit(); limit.MenuId = int.Parse(item1["MenuId"].ToString()); limit.MenuName = item1["MenuName"].ToString(); if (item1["OperateString"].ToString().Length > 0) { string[] arr = item1["OperateString"].ToString().Split(','); for (int i = 0; i < arr.Length; i++) { RoleItem it = new RoleItem(); it.OperationId = int.Parse(arr[i]); it.IsCheck = 0; it.OperationName = getName(arr[i], operation); limit.Item.Add(it); } } list.Add(limit); } } else { DataTable rolelist = SqlHelper.Query("SELECT RoleId, MenuId, OperateIdString FROM CoreNetSystemRoleOrMenu where RoleId = " + RoleId); foreach (DataRow item1 in menulist.Rows) { RoleLimit limit = new RoleLimit(); limit.MenuId = int.Parse(item1["MenuId"].ToString()); limit.MenuName = item1["MenuName"].ToString(); if (item1["OperateString"].ToString().Length > 0) { string[] arr1 = item1["OperateString"].ToString().Split(','); bool isOne = false; string operateitem = ""; foreach (DataRow item2 in rolelist.Rows) { if (item1["MenuId"].ToString() == item2["MenuId"].ToString()) { isOne = true; operateitem = item2["OperateIdString"].ToString(); } } if (isOne == true) { if (operateitem.Length > 0) { string[] arr2 = operateitem.Split(','); bool ischeck = false; for (int i = 0; i < arr1.Length; i++) { RoleItem it = new RoleItem(); it.OperationId = int.Parse(arr1[i]); for (int j = 0; j < arr2.Length; j++) { if (arr1[i] == arr2[j]) { ischeck = true; } } if (ischeck == true) { it.IsCheck = 1; ischeck = false; } else { it.IsCheck = 0; } it.OperationName = getName(arr1[i], operation); limit.Item.Add(it); } } } else { for (int i = 0; i < arr1.Length; i++) { RoleItem it = new RoleItem(); it.OperationId = int.Parse(arr1[i]); it.IsCheck = 0; it.OperationName = getName(arr1[i], operation); limit.Item.Add(it); } } } else { } list.Add(limit); } } return list; } public static string getName(string OperateId,DataTable dt) { string name = ""; foreach (DataRow item in dt.Rows) { if (item["OperationId"].ToString()==OperateId) { name = item["OperationName"].ToString(); } } return name; } /// <summary> /// 获取所有一级模块列表 /// </summary> /// <returns></returns> public static IEnumerable<SelectListItem> GetList(string name,string value,string where,string tablename, string DefaultTitle) { string sql = "select " + name + " as name," + value + " as value from "+tablename+" " + where; DataTable dtlist = SqlHelper.Query(sql); IQueryable<Dropdown> dropdowns = ModelConvertHelper<Dropdown>.ConvertToModel(dtlist).AsQueryable(); return new[] { new SelectListItem { Text = DefaultTitle, Value = "0" } }.Concat( from d in dropdowns select new SelectListItem { Text = d.name, Value = d.value.ToString() }) ; } } //下拉框模型 public class Dropdown { public int value { get; set; } public string name { get; set; } } /// <summary> /// 控制权限的模型 /// </summary> public class RoleLimit { public int MenuId { get; set; } public string MenuName { get; set; } public List<RoleItem> Item = new List<RoleItem>(); } /// <summary> /// 控制权限的子模型 /// </summary> public class RoleItem { public int OperationId { get; set; } public int IsCheck { get; set; } public string OperationName { get; set; } } /// <summary> /// 首页左侧导航栏菜单权限模型 /// </summary> public class NavMenu { public int MenuId { get; set; } public string MenuName { get; set; } public List<NavItem> item = new List<NavItem>(); } public class NavItem { public int MenuId { get; set; } public string MenuName { get; set; } public string MenuUrl { get; set; } public string MenuOperate { get; set; } } public class MenuItem { public int PMenuId { get; set; } public int MenuId { get; set; } public string MenuName { get; set; } public string MenuUrl { get; set; } } }

按钮权限的控制UIButton:

using Core.Net.Common.Core.Net.Core.Cookies;
using Core.Net.Common.Core.Net.Data;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using static Core.Net.Common.Core.Net.Core.JsonHelper;

namespace Core.Net.Web.Common
{
    /// <summary>
    /// 用户按钮操作权限控制中心
    /// </summary>
    public class UIButton
    {
        //定义一个数组用来存储单个操作按钮
        public static List<OperateItem> list;
        public static void  getCurrentPageAuth(string url)
        {
            if (UserHelper.GetCurrent().RoleId!=1)
            {
                  //获取当前角色在当前页面的操作id字符串
            DataTable dt = SqlHelper.Query("select b.OperateIdString from CoreNetSystemMenu a,CoreNetSystemRoleOrMenu b where a.MenuUrl='"+url.Trim()+"' and b.RoleId="+UserHelper.GetRoleId()+" and a.MenuId=b.MenuId");
            if (dt.Rows[0]["OperateIdString"].ToString().Length>0)
             { 
                 list = ModelConvertHelper<OperateItem>.ConvertToModel(SqlHelper.Query("SELECT OperationEName as item FROM CoreNetSystemOperation where OperationId in(" + dt.Rows[0]["OperateIdString"].ToString() + ")"));
                
              }
            }
           
          
        }
        /// <summary>
        /// 添加按钮操作
        /// </summary>
        /// <param name="operateName">按钮操作字符串</param>
        /// <param name="title">标题</param>
        /// <param name="url">url路径</param>
        /// <param name="width">弹框的宽度</param>
        /// <param name="height">弹框的高度</param>
        /// <returns></returns>
        public static string GetAdd(string operateName, string title,string url,int width,int height)
        {
            //超级管理员无视权限
            if (UserHelper.GetCurrent().RoleId==1)
            {
                return "<button  class=\"layui-btn\" onclick=\"def_Open('" + title + "','" + url.Trim() + "'," + width + "," + height + ")\"><i class=\"layui-icon\"></i>添加</button>";
            }
            if (list.Count>0)
            {
                foreach (var item in list)
                {
                    if (item.item==operateName)
                    {
                        return "<button  class=\"layui-btn\" onclick=\"def_Open('" + title + "','" + url.Trim() + "'," + width + "," + height + ")\"><i class=\"layui-icon\"></i>添加</button>";

                    }
                }

            }
          
            return "";
            
        }
        /// <summary>
        /// 编辑按钮操作
        /// </summary>
        /// <param name="operateName">按钮字符名称</param>
        /// <param name="title">弹框标题</param>
        /// <param name="url">url路径</param>
        /// <param name="width">弹框的宽度</param>
        /// <param name="height">弹框的高度</param>
        /// <returns></returns>
        public static string GetEdit(string operateName,string title, string url, int width, int height)
        {
            //超级管理员无视权限
            if (UserHelper.GetCurrent().RoleId==1)
            {
                return " <a lay-event=\"edit\" title=\"编辑\" onclick=\"def_Open('" + title + "', '" + url.Trim() + "'," + width + "," + height + ")\" href=\"javascript:; \"><i class=\"layui-icon\" style=\"margin-right:10px\">&#xe642;</i></a>";

            }
            if (list.Count > 0)
            {
                foreach (var item in list)
                {
                    if (item.item == operateName)
                    {
                        return " <a lay-event=\"edit\" title=\"编辑\" onclick=\"def_Open('" + title + "', '" + url.Trim() + "'," + width + "," + height + ")\" href=\"javascript:; \"><i class=\"layui-icon\" style=\"margin-right:10px\">&#xe642;</i></a>";

                    }
                }

            }

            return "";
        }
        /// <summary>
        // 单个删除操作按钮
        /// </summary>
        /// <param name="operateName">按钮字符名称</param>
        /// <param name="url">url路径</param>
        /// <param name="IdString">主键ID</param>
        /// <returns></returns>
        public static string GetDel(string operateName, string url, string IdString)
        {
            //超级管理员无视权限
            if (UserHelper.GetCurrent().RoleId==1)
            {
                return "<a lay-event=\"del\"  title=\"删除\" onclick=\"def_Del('确定删除','" + url + "/Delete?id={{" + IdString + "}}','')\" id=\"del{{" + IdString + "}}\" lay-suburl=\"" + url + "/Del\" href=\"javascript:;\"><i class=\"layui-icon\" style=\"margin-right:10px\">&#xe640;</i></a>";

            }
            if (list.Count > 0)
            {
                foreach (var item in list)
                {
                    if (item.item == operateName)
                    {
                        return "<a lay-event=\"del\"  title=\"删除\" onclick=\"def_Del('确定删除','" + url + "/Delete?id={{" + IdString + "}}','')\" id=\"del{{" + IdString + "}}\" lay-suburl=\"" + url + "/Del\" href=\"javascript:;\"><i class=\"layui-icon\" style=\"margin-right:10px\">&#xe640;</i></a>";

                    }
                }

            }

            return "";
        }
        /// <summary>
        /// 批量删除按钮
        /// </summary>
        /// <param name="operateName">按钮名称字符</param>
        /// <param name="url">url路径</param>
        /// <param name="IdString">主键ID</param>
        /// <returns></returns>
        public static string GetDelAll(string operateName, string url, string IdString)
        {
            //超级管理员无视权限
            if (UserHelper.GetCurrent().RoleId==1)
            {
                return "<button  class=\"layui-btn layui-btn-danger\" onclick=\"def_DelAll('" + url + "/DeleteAll', '" + IdString + "')\"><i class=\"layui-icon\"></i>批量删除</button>";

            }
            if (list.Count > 0)
            {
                foreach (var item in list)
                {
                    if (item.item == operateName)
                    {
                        return "<button  class=\"layui-btn layui-btn-danger\" onclick=\"def_DelAll('" + url + "/DeleteAll', '" + IdString + "')\"><i class=\"layui-icon\"></i>批量删除</button>";

                    }
                }

            }

            return "";
        }
        public class OperateItem
        {
            public string item { get; set; }
        }
       
    }
}

通用搜索栏,因为每个页面都会存在搜索功能,如果每个页面都要重新去添加,太操蛋了,所以干脆封装一下,需要哪些条件可以直接去就行了,如果没有满足的条件可以直接在通用类里面添加就行了。

using Core.Net.Common.Core.Net.Core.Cookies;
using Core.Net.Common.Core.Net.Data;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using static Core.Net.Common.Core.Net.Core.JsonHelper;

namespace Core.Net.Web.Common
{
    public class UISearch
    {
        /// <summary>
        /// 获取搜索条件
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
       public static string getSearch(UIModel model)
        {
           
            string UIString = "";
            UIString += getStartString(model.url);
            for (int i = 0; i < model.items.Length; i++)
            {
                UIString += getUICenter(model.items[i]);
            }
            UIString += getEndString();
            return UIString;
        } 
        private static string getUICenter(int item)
        {
            string UIString = "";
            switch (item)
            {
                case 1:
                   UIString=  getAreaList();
                    break;
                case 2:
                   UIString = getDrolist("部门", "CoreNetSystemDepart", "DepartId", "DepartName", "where IsUse=1");
                    break;
                case 3:
                    UIString = getInput("用户名称", "InputName", "");
                    break;
                case 4:
                    UIString = getDrolist("用户", "CoreNetSystemUser", "UserId", "RealName", "where IsUse=1");
                    break;
                default:
                
                    break;
            }
            return UIString; 
        }
       /// <summary>
       /// 获取搜索页面html头半部分
       /// </summary>
       /// <returns></returns>
        private static string getStartString(string url)
        {
            
           return "<div class=\"layui-col-md12\"><div class=\"layui-card\"><div class=\"layui-card-body\"><form class=\"layui-form\" id=\"searchform\" style=\"margin-top:2px\"action=\"" + url+"\">";
        }
        /// <summary>
        /// 获取搜索页面html尾半部分
        /// </summary>
        /// <returns></returns>
        private static string getEndString()
        {
            return "<div class=\"layui-inline layui-show-xs-block\" style=\"margin-left: 20px\"><button class=\"layui-btn\" id=\"tijiao\" onclick=\"def_Search('searchform'); return false; \"><i class=\"layui-icon\">&#xe615;</i></button></div></form></div></div></div>";
        }
        /// <summary>
        /// Id=1表示获取区域下拉列表
        /// </summary>
        /// <returns></returns>
        private static string getAreaList()
        {
            string UIString = "";
            UIString+= "<a style=\"font-size: 10pt; \"> &nbsp区域:</a>";
            UIString += "<div class=\"layui-input-inline layui-show-xs-block\" style=\"width: 105px; height: 30px; \"> <select name=\"provid\" id=\"provid\" lay-filter=\"provid\"><option value=\"410000\" selected>河南省</option></select></div>";
            UIString += "<div class=\"layui-input-inline layui-show-xs-block\" style=\"width: 105px; height: 30px; \"><select name=\"cityid\" id=\"cityid\" lay-filter=\"cityid\"></select></div>";
            UIString += " <div class=\"layui-input-inline layui-show-xs-block\" style=\"width: 105px; height: 30px; \"><select name=\"areaid\" id=\"areaid\" lay-filter=\"areaid\"></select></div>";
            return UIString;
        }
        /// <summary>
        /// 获取下拉列表的通用方法
        /// </summary>
        /// <param name="title">标题</param>
        /// <param name="tablename">数据库表名</param>
        /// <param name="value">下拉框value值</param>
        /// <param name="name">下拉框name值</param>
        /// <param name="where">sql语句where查询条件</param>
        /// <returns>html字符串代码</returns>
        private static string getDrolist(string title,string tablename,string value,string name, string where)
        {
            string UIString = "";
            List<Item> items = ModelConvertHelper<Item>.ConvertToModel(SqlHelper.Query("select " + value + " as value,"+name+" as name from " + tablename + " " + where));
            UIString += "<a style=\"font-size: 10pt; margin-left: 20px\">" + title + ":</a>";
            UIString += " <div class=\"layui-input-inline layui-show-xs-block\" style=\"width: 105px; height: 30px; \">";
            UIString += " <select name=\""+name+"\" id=\""+name+"\" lay-filter=\""+name+"\">";
            UIString += "<option value=\"0\">请选择</option>";
            foreach (var item in items)
            {
                UIString += "<option value=\"" + item.value + "\">" + item.name + "</option>";
            }
            UIString += " </select></div>";
            return UIString;
        }
        /// <summary>
        /// 拼接部门下拉框【个人信息】
        /// </summary>
        /// <param name="title">标题</param>
        /// <param name="tablename">数据库表名</param>
        /// <param name="value">下拉框value值</param>
        /// <param name="name">下拉框name值</param>
        /// <param name="Type">查询类型《1、部门;2、角色》</param>
        /// <returns></returns>
        public static string getSelectOption(string tablename, string value, string name, int Type)
        {
            string where = "";
            switch (Type)
            {
                case 1: //1、查询部门【后台赋值】
                    where = "where IsUse=1 and DepartId="+ UserHelper.GetDepart();
                    break;
                case 2: //2、查询角色【后台赋值】
                    where = "where IsUse=1 and RoleId=" + UserHelper.GetRoleId();
                    break;
                default:

                    break;
            }
            string UIString = "";
            List<Item> items = ModelConvertHelper<Item>.ConvertToModel(SqlHelper.Query("select " + value + " as value,"+name+" as name from " + tablename + " " + where));
            foreach (var item in items)
            {
                UIString += "<option selected=\"selected\" value=\"" + item.value + "\">" + item.name + "</option>";
            }
            return UIString;
        }
        /// <summary>
        /// 获取输入框或者一个时间选择框通用方法
        /// </summary>
        /// <param name="title">标题</param>
        /// <param name="value">输入框Id和name的值</param>
        /// <param name="strTime">输入框默认值</param>
        /// <returns></returns>
        private static string getInput(string title,string value,string strTime)
        {
            string UIString = "";
            UIString += "<a style=\"font-size: 10pt; margin-left: 20px\">" + title + ":</a>";
            UIString += "<div class=\"layui-input-inline layui-show-xs-block\" style=\"width: 105px; height: 30px; \">";
            UIString += "<input class=\"layui-input\" autocomplete=\"off\" value=\"" + strTime + "\" name=\"" + value + "\" id=\"" + value + "\">";
            UIString += "</div>";
            return UIString;
        }
        /// <summary>
        /// 获取两个时间格式的通用类
        /// </summary>
        /// <param name="title">标题</param>
        /// <param name="value1">第一个时间的id和name值</param>
        /// <param name="value2">第二个时间的id和name值</param>
        /// <param name="startTime">第一个时间的默认时间值</param>
        /// <param name="endTime">第二个时间的默认时间值</param>
        /// <returns></returns>
       private static string getInput(string title, string value1,string value2,string startTime,string endTime)
        {
            string UIString = "";
            UIString += "<a style=\"font-size: 10pt; margin-left: 20px\">" + title + ":</a>";
            UIString += "<div class=\"layui-input-inline layui-show-xs-block\" style=\"width: 105px; height: 30px; \">";
            UIString += "<input class=\"layui-input\" autocomplete=\"off\" value=\"" + startTime + "\" name=\"" + value1 + "\" id=\"" +value1 + "\">";
            UIString += "<input class=\"layui-input\" autocomplete=\"off\" value=\"" + endTime + "\" name=\"" + value2 + "\" id=\"" + value2 + "\">";
            UIString += "</div>";
            return UIString;
        }
    }
    public class Item
    {
        public int value { get; set; }
        public string name { get; set; }
    }
    public class UIModel
    {  public string url { get; set; }
        public int[] items { get; set; }
        public UIModel(string url,int[] items)
        {
            this.url = url;
            this.items = items;
        }
      
    }
   
}

下面来用一个功能来对按钮权限控制进行实际测试,以部门表为例:

 

 

 

DepartController.cs 控制器:

using Core.Net.Common.Core.Net.Core;
using Core.Net.IServices;
using Core.Net.Model.System;
using Core.Net.Web.Common;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace Core.Net.Web.Areas.SystemManager.Controllers
{
    [Area("SystemManager")]
    public class DepartController : BaseController
    {
        private readonly ICoreNetSystemDepartServiecs _coreNetSystemDepartServiecs;
        public DepartController(ICoreNetSystemDepartServiecs coreNetSystemDepartServiecs)
        {
            _coreNetSystemDepartServiecs = coreNetSystemDepartServiecs;
        }
        public IActionResult JsonList()
        {
            int pageSize = ConvertHelper.SafeRequest("limit", 20, Request);//每页显示个数
            int nowPage = ConvertHelper.SafeRequest("page", 1, Request);//当前页码
            PageModel page = PageModelInstance.GetInstance(pageSize, nowPage);
            var listData =_coreNetSystemDepartServiecs.FindList(page, "DepartId", true);
            return Content("{ \"code\":0,\"msg\":\"\",\"count\":\"" + page.RecordCount+ "\",\"data\":" + listData.ToJson() + "}");
        }

        [HttpGet]
        public ActionResult Edit()
        {
            int Id = ConvertHelper.SafeParse(RouteData.Values["id"] as string, 0);
            if (Id > 0)
            {
                return View(_coreNetSystemDepartServiecs.FindEntity("DepartId", Id));
            }
            else
            {
                //ViewData["pvalue"] = sPValue; // 和Model 的列名相同,等同于给下拉列表赋值
                return View();
            }
        }
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit(CoreNetSystemDepart model)
        {
            ModelState.Remove("DepartId");
            if (ModelState.IsValid)
            {

                if (model.DepartId > 0)
                {
                    CoreNetSystemDepart oldModel =_coreNetSystemDepartServiecs.FindEntity("DepartId", model.DepartId);
                    oldModel.DepartName = model.DepartName;
                    oldModel.IsUse = model.IsUse;
                    oldModel.UpdateTime = DateTime.Now;
                    return OperateResult(_coreNetSystemDepartServiecs.Update(oldModel), "修改成功", "修改失败", "/SystemManager/Depart/list");
                }
                else
                {
                    model.AddTime = DateTime.Now;
                    return OperateResult(_coreNetSystemDepartServiecs.Insert(model), "新增成功", "新增失败", "/SystemManager/Depart/list");
                }
            }
            else
            {
                return OperateResult(0, "", "填写数据有误", "");
            }

        }
        [HttpPost]
        public JsonResult Delete(int id)
        {
            return OperateResult(_coreNetSystemDepartServiecs.Delete("DepartId", id), "删除成功", "删除失败", "");
        }

        [HttpPost]
        public JsonResult DeleteAll()
        {
            string idStr = Request.Form["checklist"];
            if (idStr == null || idStr.Length < 1) return OperateResult(0, "", "请选择要删除的数据", "");

            int nCount = 0;
            string[] idList = idStr.Split(',');
            foreach (string id in idList)
            {
                if (_coreNetSystemDepartServiecs.Delete("DepartId", ConvertHelper.SafeParse(id, 0)) > 0)
                {
                    nCount += 1;
                }
            }
            return OperateResult(nCount, nCount + "条数据删除成功", "删除失败", "");
        }

        [HttpPost]
        public IActionResult Swich(int id, int state)
        {
            CoreNetSystemDepart oldModel =_coreNetSystemDepartServiecs.FindEntity("DepartId", id);
            oldModel.IsUse = state;
            oldModel.UpdateTime = DateTime.Now;
            int count = _coreNetSystemDepartServiecs.Update(oldModel);
            return Content(count.ToString());
        }
    }
}

List.cs:

@using Core.Net.Web.Common;
@{
    Layout = "~/Views/Shared/_LayouList.cshtml";
    UIButton.getCurrentPageAuth("/SystemManager/Depart/list");
}
<div class="layui-fluid">
    <div class="layui-row layui-col-space15">
        <div class="layui-col-md12">
            <div class="layui-card">
                <div class="layui-card-header">
                    @Html.Raw(UIButton.GetAdd("add", "添加部门", "/SystemManager/Depart/Edit", 420, 210))
                    @Html.Raw(UIButton.GetDelAll("deleteall", "/SystemManager/Depart", "DepartId"))                   
                </div>
                <div class="layui-card-body " id="list">
                    <table class="layui-table" lay-data="{ url:'/SystemManager/Depart/JsonList', page:true,limit:20, id:'listtable',text:{none:'暂无数据'}}" lay-filter="listtable">
                        <thead>
                            <tr>
                                <th lay-data="{checkbox:true}"></th>
                                <th lay-data="{field:'DepartId'}">部门ID</th>
                                <th lay-data="{field:'DepartName'}">部门名称</th>
                                <th lay-data="{field:'IsUse',templet:StateShow}">是否启用</th>
                                <th lay-data="{field:'AddTime'}">添加时间</th>
                                <th lay-data="{field:'UpdateTime'}">更新时间</th>
                                <th lay-data="{fixed: 'right', align:'center', toolbar: '#operatebar'}">操作</th>
                            </tr>
                        </thead>
                    </table>
                </div>
                <script type="text/html" id="operatebar">
                    @Html.Raw(UIButton.GetEdit("edit", "编辑", "/SystemManager/Depart/Edit/{{d.DepartId}}", 420, 210))
                    @Html.Raw(UIButton.GetDel("delete", "/SystemManager/Depart", "d.DepartId"))
                </script>
            </div>
        </div>
    </div>
</div>


<script type="text/html" id="StateShow">
    {{#  if(d.IsUse==1){ }}
    <input type="checkbox" name="status" lay-skin="switch" checked lay-text="启用|禁用" value={{ d.DepartId}} lay-filter="status">
    {{#  } else { }}
    <input type="checkbox" name="status" lay-skin="switch" lay-text="启用|禁用" value={{ d.DepartId}} lay-filter="status">
    {{#  } }}
</script>
<script>
    layui.use(['table', 'layer', 'jquery', 'form'], function () {
        var layer = layui.layer,
            $ = layui.jquery,
            form = layui.form;

        //动态开启和关闭用户的启用蛇者
        form.on('switch(status)', function (data) {
            // 得到开关的value值,实际是需要修改的ID值。
            var id = data.value;
            var status = this.checked ? '1' : '0';
            var index;
            $.ajax({
                type: 'POST',
                url: '/SystemManager/Depart/Swich',
                data: { "id": id, "state": status },
                beforeSend: function () {
                    index = layer.msg('正在切换中,请稍候', { icon: 16, time: false, shade: 0.8 });
                },
                error: function (data) {
                    console.log(data);
                    layer.msg('数据异常,操作失败!');
                },
                success: function (data) {
                    if (data == "1") {
                        setTimeout(function () {
                            layer.close(index);
                            layer.msg('操作成功!');
                        }, 2000);
                    } else {
                        console.log(data);
                        layer.msg('数据异常,操作失败!');
                    }
                },
                dataType: 'JSON'
            });

        });
    });
</script>

Edit.cs:

@model Core.Net.Model.System.CoreNetSystemDepart;
@using Core.Net.Common.Core.Net.Core;
@{
    Layout = "~/Views/Shared/_LayoutEdit.cshtml";
    int Id = ConvertHelper.SafeParse(ViewContext.RouteData.Values["id"] as string, 0);   
}
<div class="layui-fluid"style="background-color: #FFFAFA">
    <div class="layui-row" >
        @using (Html.BeginForm("Edit", "Depart", FormMethod.Post, new { id = "form1", @class = "layui-form", @action = "/SystemManager/Depart/Edit/", @ajax = false }))
        {
            @Html.AntiForgeryToken()
            @Html.HiddenFor(model => model.DepartId)

            <div class="layui-form-item">
                <label for="DepartName" class="layui-form-label">部门名称</label>
                <div class="layui-input-inline">
                    @Html.TextBoxFor(m => m.DepartName, null, new Dictionary<string, object> { { "class", "layui-input" }, { "lay-verify", "required" } })
                </div>
            </div>
            <div class="layui-form-item">
                <label for="IsUse" class="layui-form-label">是否启用</label>
                <div class="layui-input-inline">
                    @Html.RadioButtonFor(m => m.IsUse, "1", new { @checked = true, @title = "" })
                    @Html.RadioButtonFor(m => m.IsUse, "0", new { @title = "" })
                </div>
            </div>
            <div class="layui-form-item">
                <label for="L_repass" class="layui-form-label">
                </label>
                <button class="layui-btn" lay-filter="add" lay-submit="">
                    提交
                </button>
            </div>
        }
    </div>
</div>

注意:list,edit中已经引入了LayouList和LayouEdit母版页了

红色部分就是对按钮权限的控制。

  在对通用搜索栏进行实际使用:

 

 

 UserLogController.cs:

using Consul;
using Core.Net.Common.Core.Net.Core;
using Core.Net.Common.Core.Net.Core.Consul;
using Core.Net.Common.Core.Net.Core.Nlog4;
using Core.Net.Common.Core.Net.Core.Security;
using Core.Net.IServices;
using Core.Net.Model.System;
using Core.Net.Web.Common;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace Core.Net.Web.Areas.SystemManager.Controllers
{
    [Area("SystemManager")]
    public class UserLogController : BaseController
    {
        public static int index;
        private readonly ICoreNetSystemUserServices _coreNetSystemUserServiecs;
        private readonly ICoreNetSystemUserLogServices _coreNetSystemUserLogServiecs;
        public UserLogController(ICoreNetSystemUserServices coreNetSystemUserServiecs,
            ICoreNetSystemUserLogServices coreNetSystemUserLogServiecs
            )
        {
            _coreNetSystemUserServiecs = coreNetSystemUserServiecs;
            _coreNetSystemUserLogServiecs = coreNetSystemUserLogServiecs;


        }
        public IActionResult JsonList()
        {
            int pageSize = ConvertHelper.SafeRequest("limit", 20, Request);//每页显示个数
            int nowPage = ConvertHelper.SafeRequest("page", 1, Request);//当前页码
            PageModel page = PageModelInstance.GetInstance(pageSize, nowPage);
            int UserId = ConvertHelper.SafeRequest("RealName", 0, Request);//当前页码
            int RecordCount = 0;
            var listData = _coreNetSystemUserLogServiecs.CoreNetSystemUserLog_GetList(UserId, pageSize, nowPage, out RecordCount);
            //string str = demo();
            return Content("{ \"code\":0,\"msg\":\"\",\"count\":\"" + RecordCount + "\",\"data\":" + listData.ToJson() + "}");
        }
        /// <summary>
        /// consul客户端测试
        /// </summary>
        /// <returns></returns>
        public string demo()
        {
            #region 分布式架构           

            #region  通过 Consul 服务发现来执行服务实例。ZooKeeper
            //发现服务
            string url = "http://CoreNet/api/Login/Index";

            ConsulClient client = new ConsulClient(config =>
            {
                config.Address = new Uri("http://localhost:8500/");
                config.Datacenter = "dc1";
            });
            var response = client.Agent.Services().Result.Response;
            foreach (var item in response)
            {
                Console.WriteLine("*************************************************************");
                Console.WriteLine(item.Key);
                var service = item.Value;
                Console.WriteLine($"{service.Address}--{service.Port}--{service.Service}");
                Console.WriteLine("*************************************************************");
            }
            Uri uri = new Uri(url);
            string groupName = uri.Host;
            AgentService agentService = null;

            var serviceDirectory = response.Where(s => s.Value.Service.Equals(groupName, StringComparison.OrdinalIgnoreCase)).ToArray();
            //{//1、 写死的
            //    agentService = serviceDirectory[0].Value;
            //}
            {
                //2、轮询
                if (index >= 10000)
                {
                    index = 0;
                }
                agentService = serviceDirectory[index++ % serviceDirectory.Length].Value;
            }
            // {//3、随机
            //     var indexResult = new Random(index++).Next(0, serviceDirectory.Length);
            //     agentService = serviceDirectory[indexResult].Value;
            //}
            url = $"{uri.Scheme}://{agentService.Address}:{agentService.Port}{uri.PathAndQuery}";


            #endregion

            string content = ConsulHttpRequest.InvokeAPI(url);


            #endregion
            return content;

        }
        [HttpGet]
        public ActionResult Edit()
        {
            int Id = ConvertHelper.SafeParse(RouteData.Values["id"] as string, 0);
            if (Id > 0)
            {
                return View(_coreNetSystemUserServiecs.FindEntity("UserId", Id));
            }
            else
            {
                //ViewData["pvalue"] = sPValue; // 和Model 的列名相同,等同于给下拉列表赋值
                return View();
            }
        }
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit(CoreNetSystemUser model)
        {
            ModelState.Remove("UserId");
            if (ModelState.IsValid)
            {
                if (model.DepartId == 0)
                {
                    return OperateResult(0, "", "请选择部门!", "");
                }
                if (model.RoleId == 0)
                {
                    return OperateResult(0, "", "请选择角色!", "");
                }
                List< CoreNetSystemUser> userlist = _coreNetSystemUserServiecs.GetTEntityList(p=>p.UserName==model.UserName);
                if (userlist.Count>1)
                {
                    return OperateResult(0, "", "账号已经存在!", "");
                }
                if (model.UserId > 0)
                {

                    CoreNetSystemUser oldModel = _coreNetSystemUserServiecs.FindEntity("UserId", model.UserId);
                    
                   
                    oldModel.UserName = model.UserName;
                    oldModel.RealName = model.RealName;
                    oldModel.RoleId = model.RoleId;
                    oldModel.DepartId = model.DepartId;
                    oldModel.IsUse = model.IsUse;
                    oldModel.UpdateTime = DateTime.Now;
                    return OperateResult(_coreNetSystemUserServiecs.Update(oldModel), "修改成功", "修改失败", "/SystemManager/User/list");
                }
                else
                {
                    model.Passward= Md5.Md5Upper32(model.Passward);
                    model.AddTime = DateTime.Now;
                    return OperateResult(_coreNetSystemUserServiecs.Insert(model), "新增成功", "新增失败", "/SystemManager/User/list");
                }
            }
            else
            {
                return OperateResult(0, "", "填写数据有误", "");
            }

        }
        [HttpPost]
        public JsonResult Delete(int id)
        {
            return OperateResult(_coreNetSystemUserServiecs.Delete("UserId", id), "删除成功", "删除失败", "");
        }

        [HttpPost]
        public JsonResult DeleteAll()
        {
            string idStr = Request.Form["checklist"];
            if (idStr == null || idStr.Length < 1) return OperateResult(0, "", "请选择要删除的数据", "");

            int nCount = 0;
            string[] idList = idStr.Split(',');
            foreach (string id in idList)
            {
                if (_coreNetSystemUserServiecs.Delete("UserId", ConvertHelper.SafeParse(id, 0)) > 0)
                {
                    nCount += 1;
                }
            }
            return OperateResult(nCount, nCount + "条数据删除成功", "删除失败", "");
        }
        [HttpPost]
        public IActionResult Swich(int id,int state)
        {
            CoreNetSystemUser oldModel = _coreNetSystemUserServiecs.FindEntity("UserId",id);
            oldModel.IsUse = state;
            oldModel.UpdateTime = DateTime.Now;
            int count=_coreNetSystemUserServiecs.Update(oldModel);
            return Content(count.ToString());
        }
      
    }
}

List:

@model Core.Net.Model.System.CoreNetSystemUser;
@using Core.Net.Web.Common;
@{
    Layout = "~/Views/Shared/_LayouList.cshtml";
    ViewData["UIModel"] = new UIModel("/SystemManager/UserLog/JsonList", new int[] { 4 });//这个数组中的数字对应的Search.cshtml里面的注释的ID表示的含义。
}
<div class="layui-fluid">
    <div class="layui-row layui-col-space15">
        @Html.Partial("UISearch", ViewData["UIModel"])
        <div class="layui-col-md12">

            <div class="layui-card">

                <div class="layui-card-body " id="list">
                    <table class="layui-table" lay-data="{ url:'/SystemManager/UserLog/JsonList', page:true,limit:20, id:'listtable',text:{none:'暂无数据'}}" lay-filter="listtable">
                        <thead>
                            <tr>
                                <th lay-data="{checkbox:true}"></th>
                                <th lay-data="{field:'UserName'}">用户名</th>
                                <th lay-data="{field:'RealName'}">真实姓名</th>
                                <th lay-data="{field:'LoginType',templet:LoginType}">登录类型</th>
                                <th lay-data="{field:'UserIP'}">登录Ip</th>
                                <th lay-data="{field:'LoginTime'}">登录时间</th>
                            </tr>
                        </thead>
                    </table>
                </div>
            </div>
        </div>
    </div>
</div>
<script>
    function LoginType(data) {
        if (data.LoginType == 1) {
            return "Pc客户端登录";
        }
        else {
            return "App客户端登录";
        }
    }
</script>

注意上面的红色部分,就是通用搜索栏的封装。

通用搜索栏我自定义了一个单独的模块,然后用  ViewData["UIModel"] = new UIModel("/SystemManager/UserLog/JsonList", new int[] { 4 });赋值,

用@Html.Partial("UISearch", ViewData["UIModel"]) 加载:

 

 

 

UISearch.cshtml:

@using Core.Net.Web.Common;
@Html.Raw(UISearch.getSearch(ViewData["UIModel"] as UIModel))
@*
ID=1:区域下拉框     这里的ID对应的就是通用封装类UISearch.cs可不是UISearch.cshtml
ID=2:部门下拉框
ID=3:文本框
*@
<script src="~/UpFile/CityList.js?t=@DateTime.Now.ToString(" yyyyMMddhhmmss")"></script>//这个是城市列表的js,用于做省市区三级联动的。如果不需要,只要传入ID加载就行了。
<script type="text/javascript">
    layui.use(['layer', 'jquery', 'form', 'laydate'], function () {
        var layer = layui.layer,
            $ = layui.jquery,
            form = layui.form;
        //年月选择器
        var laydate = layui.laydate;
        laydate.render({
            elem: '#endTime'
            , type: 'month'
            , change: function (value, date, endDate) {

                $("#endTime").val(value);
                if ($(".layui-laydate").length) {
                    $(".layui-laydate").remove();
                }
            }
        });
        laydate.render({
            elem: '#startTime'
            , type: 'month'
            , change: function (value, date, endDate) {
                $("#startTime").val(value);
                if ($(".layui-laydate").length) {
                    $(".layui-laydate").remove();
                }
            }
        });
      
        //区域选择器,初始化城市,默认初始化河南省下所有城市
        var cityarr = provinceList[0].children;
        var proviceid = 410000;
        $('#cityid').empty();
        $('#cityid').append(new Option("请选择城市", 0));
        for (var i = 0; i < cityarr.length; i++) {
            if (cityarr[i].pId == proviceid) {
                $('#cityid').append(new Option(cityarr[i].title, cityarr[i].id));// 下拉菜单里添加元素
            }
        }
        //城市选择变化时
        form.on('select(cityid)', function (data) {
            cityChange(data.value);
            form.render();//下拉菜单渲染 把内容加载进去
        });
        function cityChange(data) {
            if (data == 0) {
                $('#areaid').empty();
                $('#areaid').append(new Option("请选择县区", 0));
            }
            var cityarr = provinceList[0].children;
            for (var i = 0; i < cityarr.length; i++) {
                if (cityarr[i].id == data) {
                    $('#areaid').empty();
                    $('#areaid').append(new Option("请选择县区", 0));
                    for (var j = 0; j < cityarr[i].children.length; j++) {
                        $('#areaid').append(new Option(cityarr[i].children[j].title, cityarr[i].children[j].id));// 下拉菜单里添加元素
                    }
                }
            }
        }
        form.render();//下拉菜单渲染 把内容加载进去
    });
</script>

效果:

 

 这里一个基本的架构已经搭建起来了。目前位置,已经可以根据当前的架构完成相应的功能模块了。

 

 

posted @ 2021-11-12 11:35  代码如风~~~  阅读(406)  评论(0编辑  收藏  举报