.Net Core3.1 MVC + EF Core+ AutoFac+LayUI+Sqlserver的框架搭建--------layui框架

         前端架构用layui,虽然layui官网已经下架了,可能以后也不会在更新了,但是也不能否认,layui的影响力,他的确很好用。好用归好用,但是以后项目的前端框架可能会用vue,elementUI去做了,毕竟一个框架一直没有新的血液注入,迟早也会没落的。哎,不废话了,直接进入主题:

       嵌入layui架构:

   

 

 列表展示母版页_layouList,编辑母版页_layouEdit:

 

 _LayoutList:

<!DOCTYPE html>
<html class="x-admin-sm">
<head>
    <meta charset="UTF-8">
    <title>标题</title>
    <meta name="renderer" content="webkit">
    <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" />
    <link href="~/xadmin/css/xadmin.css" rel="stylesheet" />
    <link href="~/xadmin/css/font.css" rel="stylesheet" />
    <script src="/xadmin/lib/layui/layui.js" charset="utf-8"></script>
    <script type="text/javascript" src="/xadmin/js/xadmin.js"></script>
    <script src="~/xadmin/js/jquery.min.js"></script>
    <style>
        .layui-table-body {
            overflow: hidden;
        }
    </style>
    <!--[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]-->
</head>
<body>
    @RenderBody()
    <script>
        // 列表初始化
        var table;
        layui.use(['table', 'jquery'], function () {
            $ = layui.$;
            table = layui.table;
        })
        //1、通用无刷新搜索 formId 搜索form表单
        function def_Search(formId) {
            table.reload('listtable', {
                page: {//重新从第 1 页开始
                    curr: 1
                }
                , where: form2JsonString(formId)
            });
        }
        //2、通用打开 showtitle 弹框名称, url 目标页, 宽度  高度
        function def_Open(showtitle, url, w, h) {
            xadmin.open(showtitle, url, w, h);
        }
        //3、通用删除 showtitle 弹框提示, url 目标页  data 参数
        function def_Del(showtitle, url, data) {
            layer.confirm('确认要删除吗?', function (index) {
                $.ajax({
                    url: url,
                    data: data,
                    type: "post",
                    success: function (res) {
                        var returnres = $.parseJSON(res);
                        if (returnres.status == 1) {
                            layer.msg(returnres.msg, {
                                icon: 1, time: 2000, end: function () {
                                    window.location.reload();
                                }
                            });
                        } else {
                            layer.msg("删除失败", { icon: 5 });
                        }
                    }
                });
            });
        }
        //4、通用批量删除   url 目标页  , idname 删除所需数据源列名
        function def_DelAll(url, dataname) {
            var checklist = '';
            var checkdata = layui.table.checkStatus('listtable').data;
            for (i = 0; i < checkdata.length; i++) {
                checklist = checklist + ',' + checkdata[i][dataname];
            }
            checklist = checklist.substr(1);
            if (checklist.length == 0) {
                layer.open({
                    title: '提示',
                    content: '请选择要删除信息'
                });
                return false;
            }
            layer.confirm('确定要删除所选信息吗?', {
                time: 20000, //20s后自动关闭
                btn: ['确定', '取消'],
                yes: function (index) {
                    layer.close(index);
                    $.ajax({
                        type: 'post',
                        url: url,
                        data: { checklist: checklist },
                        dataType: 'json',
                        success: function (data) {
                            var returnres = $.parseJSON(data);
                            if (returnres.status == "1") {
                                layer.msg(returnres.msg, {
                                    icon: 1, time: 2000, end: function () {
                                        window.location.reload();
                                    }
                                });
                            } else {
                                layer.msg(returnres.msg, {
                                    icon: 1, time: 2000, end: function () {
                                        window.location.reload();
                                    }
                                });
                            }
                        }
                    });
                }
            });
        }

        /** 表单序列化成json对象  */
        function form2JsonString(formId) {
            var paramArray = $('#' + formId).serializeArray();
            var jsonObj = {};
            $(paramArray).each(function () {
                jsonObj[this.name] = this.value;
            });
            return jsonObj;
        }

      
       
    </script>
</body>
</html>

_LayouEdit:

<!DOCTYPE html>
<html class="x-admin-sm">

<head>
    <meta charset="UTF-8">
    <title>标题</title>
    <meta name="renderer" content="webkit">
    <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" />
    <link rel="stylesheet" href="/xadmin/css/font.css">
    <link rel="stylesheet" href="/xadmin/css/xadmin.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]-->
    <style>
        .layui-form-item {
            margin-bottom: 5px;
        }
    </style>
</head>
<body>
    <script type="text/javascript">
    //表单初始化

        layui.use(['form', 'layer'],
            function () {
                $ = layui.jquery;
                var form = layui.form,
                    layer = layui.layer;

                //自定义验证规则
                form.verify({
                    nikename: function (value) {
                        if (value.length < 5) {
                            return '昵称至少得5个字符啊';
                        }
                    },
                    pass: [/(.+){6,12}$/, '密码必须6到12位'],
                    repass: function (value) {
                        if ($('#L_pass').val() != $('#L_repass').val()) {
                            return '两次密码不一致';
                        }
                    }
                });

                //监听提交
                form.on('submit(add)',
                    function (data) {
                        $.ajax({
                            url: data.form.action,
                            data: data.field,
                            type: "post",
                            success: function (res) {
                                var returnres = $.parseJSON(res);
                                layer.msg(returnres.msg, {
                                    icon: 1, time: 2000, end: function () {
                                        if (returnres.status > 0 && returnres.url.length > 0) {
                                            if (returnres.noparent == 1) {
                                                window.location.href = returnres.url;
                                            } else {
                                                window.parent.location.href = returnres.url;
                                            }
                                        }
                                    }
                                });
                            }
                        });
                        return false;
                    });
            });
    </script>
    @RenderBody()

</body>
</html>

定义一个控制器BaseController,所有控制器都继承该控制器

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace Core.Net.Web.Common
{
    public class BaseController : Controller
    {
        public IActionResult List()
        {
            return View();
        }

        #region  页面处理结果返回封装
        /// <summary>
        /// 返回添加、编辑等处理结果提示栏,result 大于0代表成功,0为失败
        /// </summary>
        /// <param name="result">操作返回数据值</param>
        /// <param name="msg">返回消息</param>
        /// <param name="url">需要跳转Url,为空不跳转</param>
        /// <param name="noparent">0表示默认父类页面跳转,1 当前页面跳转</param>
        /// <returns></returns>
        protected virtual JsonResult OperateResult(int result, string msgSuccess, string msgFail, string url, int noParent = 0)
        {
            if (result > 0)
            {
                return Json("{\"status\":" + 1 + ",\"msg\":\"" + msgSuccess + "\",\"url\":\"" + url + "\",\"noparent\":" + noParent + "}");
            }
            else
            {
                return Json("{\"status\":" + 0 + ",\"msg\":\"" + msgFail + "\",\"url\":\"" + url + "\",\"noparent\":" + noParent + "}");
            }
        }
        #endregion



        #region 底层封装Cookie操作

        /// <summary>
        /// 设置本地cookie
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>  
        /// <param name="minutes">过期时长,单位:分钟</param>      
        protected void SetCookies(string key, string value, int minutes = 120)
        {
            HttpContext.Response.Cookies.Append(key, value, new CookieOptions
            {
                Expires = DateTime.Now.AddMinutes(minutes)
            });
        }

        /// <summary>
        /// 获取cookies
        /// </summary>
        /// <param name="key"></param>
        /// <returns>返回对应的值</returns>
        protected string GetCookies(string key)
        {
            HttpContext.Request.Cookies.TryGetValue(key, out string value);
            if (string.IsNullOrEmpty(value))
                value = string.Empty;
            return value;
        }

        /// <summary>
        /// 删除指定的cookie
        /// </summary>
        /// <param name="key"></param>
        protected void DeleteCookies(string key)
        {
            HttpContext.Response.Cookies.Delete(key);
        }

        #endregion
    }
}

到这里前端架构已经完全嵌入工程中了,下一篇就从登录开始再到权限一步一步把架构架起来。

 

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