hwh
2024-06-28 08a515946d6763b26746d593af76a8af9b1b4076
操作日志
9个文件已修改
2个文件已添加
1518 ■■■■ 已修改文件
HTML/js/public.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/BaseSetting/LogOperation.html 402 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/SystemSettings/LogOperation.html 411 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/WareHouseSetting/LogOperation.html 342 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Model/ModelVm/LogVm/OperationInputVm.cs 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Model/ModelVm/LogVm/OperationVm.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Utility/Extension/SqlSugarPagedExtensions.cs 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/LogServer/OperationSysServer.cs 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/SysServer/RoleRightServer.cs 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.IBLL/ILogServer/IOperationSysServer.cs 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Wms/Controllers/BasisController.cs 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/js/public.js
@@ -332,4 +332,13 @@
          }
      }
  });
}
var FnParseData = function (res) {
  return {
    "code": res.code == 200 ? 0 : res.code, // 解析接口状态
    "msg": res.msg, // 解析提示文本
    "count": res.data.Total, // 解析数据长度
    "data": res.data.Items // 解析数据列表
  };
}
HTML/views/BaseSetting/LogOperation.html
@@ -1,229 +1,207 @@
<!DOCTYPE html>
<html>
    <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, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
        <link rel="stylesheet" href="../../layuiadmin/layui/css/layui.css" media="all">
        <link rel="stylesheet" href="../../layuiadmin/style/admin.css" media="all">
        <script>
            // 这里是需要在页面渲染之前执行的代码
            document.addEventListener("DOMContentLoaded", function() {
                //获取table默认显示数
                pageCntFirst();
            });
          </script>
    </head>
    <body id="body">
        <div class="layui-fluid" style="padding-bottom: 0;">
            <div class="layui-card">
                <div class="layui-form layui-card-header layuiadmin-card-header-auto" style="border-bottom:1px solid #CCC" id="top">
                    <div class="layui-form-item" >
                        <div class="layui-inline">
                            <label class="layui-form-label">菜单号</label>
                            <div class="layui-input-inline">
                                <input type="text" id="MenuNo" name="MenuNo" placeholder="请输入菜单号" autocomplete="off" class="layui-input">
                            </div>
                        </div>
                        <div class="layui-inline">
                            <label class="layui-form-label">菜单名称</label>
                            <div class="layui-input-inline">
                                <input type="text" id="MenuName" name="MenuName" placeholder="请输入菜单名称" autocomplete="off" class="layui-input">
                            </div>
                        </div>
                        <div class="layui-inline">
                            <label class="layui-form-label">操作内容</label>
                            <div class="layui-input-inline">
                                <input type="text" id="Msg" name="Msg" placeholder="请输入操作内容" autocomplete="off" class="layui-input">
                            </div>
                        </div>
                        <div class="layui-inline">
                            <label class="layui-form-label" style="width: 45px;">类型</label>
                            <div class="layui-input-inline">
                                <select name="Type" id="Type" lay-verify="" lay-search >
                                    <option value=""></option>
                                </select>
                            </div>
                        </div>
                        <div class="layui-inline">
                            <button class="layui-btn layui-btn-sm layuiadmin-btn-list" lay-submit lay-filter="LAY-app-contlist-search">
                                <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>搜索
                            </button>
<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, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <link rel="stylesheet" href="../../layuiadmin/layui/css/layui.css" media="all">
    <link rel="stylesheet" href="../../layuiadmin/style/admin.css" media="all">
    <script>
        // 这里是需要在页面渲染之前执行的代码
        document.addEventListener("DOMContentLoaded", function () {
            //获取table默认显示数
            pageCntFirst();
        });
    </script>
</head>
<body id="body">
    <div class="layui-fluid" style="padding-bottom: 0;">
        <div class="layui-card">
            <div class="layui-form layui-card-header layuiadmin-card-header-auto" style="border-bottom:1px solid #CCC"
                id="top">
                <div class="layui-form-item">
                    <div class="layui-inline">
                        <label class="layui-form-label">菜单号</label>
                        <div class="layui-input-inline">
                            <input type="text" id="MenuNo" name="MenuNo" placeholder="请输入菜单号" autocomplete="off"
                                class="layui-input">
                        </div>
                    </div>
                </div>
                <div id="center"></div>
                <div class="layui-card-body">
                    <table id="LAY-app-content-list" lay-filter="LAY-app-content-list"></table>
                    <div class="layui-inline">
                        <label class="layui-form-label">菜单名称</label>
                        <div class="layui-input-inline">
                            <input type="text" id="MenuName" name="MenuName" placeholder="请输入菜单名称" autocomplete="off"
                                class="layui-input">
                        </div>
                    </div>
                    <div class="layui-inline">
                        <label class="layui-form-label">操作内容</label>
                        <div class="layui-input-inline">
                            <input type="text" id="Msg" name="Msg" placeholder="请输入操作内容" autocomplete="off"
                                class="layui-input">
                        </div>
                    </div>
                    <div class="layui-inline">
                        <label class="layui-form-label" style="width: 45px;">类型</label>
                        <div class="layui-input-inline">
                            <select name="Type" id="Type" lay-verify="" lay-search>
                                <option value=""></option>
                            </select>
                        </div>
                    </div>
                    <div class="layui-inline">
                        <button class="layui-btn layui-btn-sm layuiadmin-btn-list" lay-submit
                            lay-filter="LAY-app-contlist-search">
                            <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>搜索
                        </button>
                    </div>
                </div>
            </div>
            <div id="center"></div>
            <div class="layui-card-body">
                <table id="LAY-app-content-list" lay-filter="LAY-app-content-list"></table>
            </div>
        </div>
        <script src="../../layuiadmin/layui/layui.js"></script>
        <script src="../../js/public.js"></script>
        <script src="../../js/jquery-3.5.1.min.js"></script>
        <script src="../../js/jquery.cookie.js"></script>
        <script>
            layui.config({
                base: '../../layuiadmin/' //静态资源所在路径
            }).extend({
                index: 'lib/index' //主入口模块
            }).use(['index', 'table', 'laypage', 'layer'], function() {
                var table = layui.table,
                    form = layui.form,
                    laypage = layui.laypage,
                    layer = layui.layer;
    </div>
    <script src="../../layuiadmin/layui/layui.js"></script>
    <script src="../../js/public.js"></script>
    <script src="../../js/jquery-3.5.1.min.js"></script>
    <script src="../../js/jquery.cookie.js"></script>
    <script>
        layui.config({
            base: '../../layuiadmin/' //静态资源所在路径
        }).extend({
            index: 'lib/index' //主入口模块
        }).use(['index', 'table', 'laypage', 'layer'], function () {
            var table = layui.table,
                form = layui.form,
                laypage = layui.laypage,
                layer = layui.layer;
                    var h1 = GetTableHeight();
                    refreshTable("", "", "", "","");
                    var tableIns;
            var h1 = GetTableHeight();
            var tableIns;
                //获取类型菜单下拉
                sendData(IP + '/Basis/GetDicTypeList?DicName=操作类型',{},'get',function(res){
                    if (res.code == 0) //成功
                    {
                        for (var i = 0; i < res.data.length; i++)
                        {
                            $("#Type").append('<option value =' + res.data[i].Id + '>' + res.data[i].DictName + '</option>');
                        }
                        form.render('select');
            //获取类型菜单下拉
            sendData(IP + '/Basis/GetDicTypeList?DicName=操作类型', {}, 'get', function (res) {
                if (res.code == 200) //成功
                {
                    for (var i = 0; i < res.data.length; i++) {
                        $("#Type").append('<option value =' + res.data[i].Id + '>' + res.data[i].DictName + '</option>');
                    }
                    else //不成功
                    {
                        layer.msg('获取类型菜单信息失败!', {
                            icon: 2,
                            time: 2000 //2秒关闭(如果不配置,默认是3秒)
                        }, function() {});
                    }
                });
                function refreshTable(MenuName, Type, Msg, MenuNo,ParentNo) {
                    var param = {
                        MenuName: MenuName,
                        Type: Type,
                        Msg: Msg,
                        MenuNo: MenuNo,
                        ParentNo: ParentNo,
                    };
                    ParentNo = '基础信息'; //模块名称
                    var url  = "/Basis/GetSysOperationList?MenuName="+MenuName+"&&Type="+Type+"&&Msg="+Msg+"&&MenuNo="+MenuNo+"&&ParentNo="+ParentNo;
                    sendData(IP + url, {}, 'get', function(res) {
                        console.log(res.data)
                        if (res.code == 0) //成功
                        {
                            var list = res.data;
                            $.extend(infoOptions, {
                                data: list
                            });
                            infoOptions.page = {
                                curr: 1
                            }
                            tableIns = table.render(infoOptions);
                        }
                        else //不成功
                        {
                            layer.msg('获取日志列表信息失败!', {
                                icon: 2,
                                time: 2000 //2秒关闭(如果不配置,默认是3秒)
                            }, function() {});
                        }
                    });
                    form.render('select');
                }
                var xml = '';
                function getchiled(data, mainId) {
                    if (data)
                    {
                        var list = data.filter(item => item.ParentId == mainId);
                        if (list)
                        {
                            for (var i = 0; i < list.length; i++)
                            {
                                var id = list[i].Id;
                                //查询有无子菜单
                                var count = data.filter(item => item.ParentId == id).length;
                                if (count > 0)
                                {
                                    xml = xml + '<dd>' + '<a href="javascript:;">' + list[i].Name + '</a>' + '<dl class="layui-nav-child">';
                                    getchiled(data, id);
                                    xml = xml + '</dl></dd>';
                                }
                                else
                                {
                                    xml = xml + '<dd>' + '<a lay-href="' + list[i].Url + '">' + list[i].Name + '</a>' + '</dd>';
                                }
                            }
                        }
                else //不成功
                {
                    layer.msg('获取类型菜单信息失败!', {
                        icon: 2,
                        time: 2000 //2秒关闭(如果不配置,默认是3秒)
                    }, function () { });
                }
            });
            var TotalColsArr = [[
                {
                    title: '序号', type: 'numbers', fixed: 'left', width: 65
                },
                {
                    field: 'ParentNo', title: '模块号', align: 'center', fixed: 'left', width: 80
                },
                {
                    field: 'MenuNo', title: '菜单号', align: 'center', fixed: 'left', width: 80
                },
                {
                    field: 'MenuName', title: '菜单名称', align: 'center', width: 190
                },
                {
                    field: 'FkNo', title: '数据编号', align: 'center', width: 180
                },
                {
                    field: 'TypeName', title: '类型', align: 'center', width: 100
                },
                {
                    field: 'Msg', title: '操作内容', align: 'center'
                },
                {
                    field: 'CreateUserName', title: '操作人', align: 'center', width: 120
                },
                {
                    field: 'CreateTime', title: '操作时间', align: 'center', width: 160,
                    templet: function (d) {
                        return formatDate(d.CreateTime);
                    }
                }
                var infoOptions = {
                    elem: '#LAY-app-content-list',
                    height: h1,
                    id: 'LAY-app-content-list',
                    page: true,
                    limit: pageCnt,
                    limits: pageLimits,
                    even: true,
                    cols:
                    [[
                        {
                            title: '序号', type: 'numbers', fixed: 'left', width:65
                        },
                        {
                            field: 'ParentNo', title: '模块号', align: 'center', fixed: 'left', width:80
                        },
                        {
                            field: 'MenuNo', title: '菜单号', align: 'center', fixed: 'left', width:80
                        },
                        {
                            field: 'MenuName', title: '菜单名称', align: 'center', width:190
                        },
                        {
                            field: 'FkNo', title: '数据编号', align: 'center', width:180
                        },
                        {
                            field: 'TypeName', title: '类型', align: 'center', width:100
                        },
                        {
                            field: 'Msg', title: '操作内容', align: 'center'
                        },
                        {
                            field: 'CreateUserName', title: '操作人', align: 'center', width:120
                        },
                        {
                            field: 'CreateTime', title: '操作时间', align: 'center', width:160,
                            templet: function (d) {
                                return formatDate(d.CreateTime);
                            }
            ]];
            var TotalColsSysArr = encodeURIComponent(encodeURIComponent(JSON.stringify(TotalColsArr)))//将表头数据进行url编码
            function objectToQueryString(obj) {
                var queryString = '';
                for (var key in obj) {
                    if (obj.hasOwnProperty(key)) {
                        if (queryString.length > 0) {
                            queryString += '&';
                        }
                    ]]
                };
                //监听搜索
                form.on('submit(LAY-app-contlist-search)', function(data) {
                    console.log(data)
                    var MenuName = data.field.MenuName;
                    var Type = data.field.Type;
                    var Msg = data.field.Msg;
                    var MenuNo = data.field.MenuNo;
                    //MenuName, Type, Msg, MenuNo,ParentNo
                    refreshTable(MenuName, Type, Msg, MenuNo);
                });
                        queryString += encodeURIComponent(key) + '=' + encodeURIComponent(obj[key]);
                    }
                }
                return queryString;
            }
            // 创建渲染实例
            tableIns = table.render({
                elem: '#LAY-app-content-list',
                url: IP + "/Basis/GetSysOperationList",
                method: 'post',
                height: GetTableHeight(),
                id: 'LAY-app-content-list',
                where: {
                    MenuName: $("#MenuName").val(),
                    Type: $("#Type").val(),
                    Msg: $("#Msg").val(),
                    MenuNo: $("#MenuNo").val(),
                    ParentNo: '基础信息',
                },
                parseData: FnParseData,
                contentType: 'application/json',
                defaultToolbar: [],
                headers: { ToKen: $.cookie('token') },
                page: true,
                even: true,
                limit: pageCnt,
                limits: pageLimits,
                cellMinWidth: 60,
                done: function (res) {
                    //自定义列宽
                    SetTableColW('LAY-app-content-list', 'Basis/GetSysOperationList', TotalColsSysArr);
                },
                cols: TotalColsArr
            });
                var doing = true;
                $('.layui-btn.layuiadmin-btn-list').on('click', function() {
                    var type = $(this).data('type');
                    active[type] ? active[type].call(this) : '';
            //监听搜索
            form.on('submit(LAY-app-contlist-search)', function (data) {
                table.reload('LAY-app-content-list', {
                    where: {
                        MenuName: $("#MenuName").val(),
                        Type: $("#Type").val(),
                        Msg: $("#Msg").val(),
                        MenuNo: $("#MenuNo").val(),
                        ParentNo: '基础信息',
                    }
                });
            });
        </script>
    </body>
</html>
            var doing = true;
            $('.layui-btn.layuiadmin-btn-list').on('click', function () {
                var type = $(this).data('type');
                active[type] ? active[type].call(this) : '';
            });
        });
    </script>
</body>
</html>
HTML/views/SystemSettings/LogOperation.html
@@ -1,228 +1,207 @@
<!DOCTYPE html>
<html>
    <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, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
        <link rel="stylesheet" href="../../layuiadmin/layui/css/layui.css" media="all">
        <link rel="stylesheet" href="../../layuiadmin/style/admin.css" media="all">
        <script>
            // 这里是需要在页面渲染之前执行的代码
            document.addEventListener("DOMContentLoaded", function() {
                //获取table默认显示数
                pageCntFirst();
            });
          </script>
    </head>
    <body id="body">
        <div class="layui-fluid" style="padding-bottom: 0; ">
            <div class="layui-card">
                <div class="layui-form layui-card-header layuiadmin-card-header-auto" style="border-bottom:1px solid #CCC" id="top">
                    <div class="layui-form-item" >
                        <div class="layui-inline">
                            <label class="layui-form-label">菜单号</label>
                            <div class="layui-input-inline">
                                <input type="text" id="MenuNo" name="MenuNo" placeholder="请输入菜单号" autocomplete="off" class="layui-input">
                            </div>
                        </div>
                        <div class="layui-inline">
                            <label class="layui-form-label">菜单名称</label>
                            <div class="layui-input-inline">
                                <input type="text" id="MenuName" name="MenuName" placeholder="请输入菜单名称" autocomplete="off" class="layui-input">
                            </div>
                        </div>
                        <div class="layui-inline">
                            <label class="layui-form-label">操作内容</label>
                            <div class="layui-input-inline">
                                <input type="text" id="Msg" name="Msg" placeholder="请输入操作内容" autocomplete="off" class="layui-input">
                            </div>
                        </div>
                        <div class="layui-inline">
                            <label class="layui-form-label" style="width: 45px;">类型</label>
                            <div class="layui-input-inline">
                                <select name="Type" id="Type" lay-verify="" lay-search >
                                    <option value=""></option>
                                </select>
                            </div>
                        </div>
                        <div class="layui-inline">
                            <button class="layui-btn layui-btn-sm layuiadmin-btn-list" lay-submit lay-filter="LAY-app-contlist-search">
                                <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>搜索
                            </button>
<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, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <link rel="stylesheet" href="../../layuiadmin/layui/css/layui.css" media="all">
    <link rel="stylesheet" href="../../layuiadmin/style/admin.css" media="all">
    <script>
        // 这里是需要在页面渲染之前执行的代码
        document.addEventListener("DOMContentLoaded", function () {
            //获取table默认显示数
            pageCntFirst();
        });
    </script>
</head>
<body id="body">
    <div class="layui-fluid" style="padding-bottom: 0;">
        <div class="layui-card">
            <div class="layui-form layui-card-header layuiadmin-card-header-auto" style="border-bottom:1px solid #CCC"
                id="top">
                <div class="layui-form-item">
                    <div class="layui-inline">
                        <label class="layui-form-label">菜单号</label>
                        <div class="layui-input-inline">
                            <input type="text" id="MenuNo" name="MenuNo" placeholder="请输入菜单号" autocomplete="off"
                                class="layui-input">
                        </div>
                    </div>
                </div>
                <div id="center"></div>
                <div class="layui-card-body">
                    <table id="LAY-app-content-list" lay-filter="LAY-app-content-list"></table>
                    <div class="layui-inline">
                        <label class="layui-form-label">菜单名称</label>
                        <div class="layui-input-inline">
                            <input type="text" id="MenuName" name="MenuName" placeholder="请输入菜单名称" autocomplete="off"
                                class="layui-input">
                        </div>
                    </div>
                    <div class="layui-inline">
                        <label class="layui-form-label">操作内容</label>
                        <div class="layui-input-inline">
                            <input type="text" id="Msg" name="Msg" placeholder="请输入操作内容" autocomplete="off"
                                class="layui-input">
                        </div>
                    </div>
                    <div class="layui-inline">
                        <label class="layui-form-label" style="width: 45px;">类型</label>
                        <div class="layui-input-inline">
                            <select name="Type" id="Type" lay-verify="" lay-search>
                                <option value=""></option>
                            </select>
                        </div>
                    </div>
                    <div class="layui-inline">
                        <button class="layui-btn layui-btn-sm layuiadmin-btn-list" lay-submit
                            lay-filter="LAY-app-contlist-search">
                            <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>搜索
                        </button>
                    </div>
                </div>
            </div>
            <div id="center"></div>
            <div class="layui-card-body">
                <table id="LAY-app-content-list" lay-filter="LAY-app-content-list"></table>
            </div>
        </div>
        <script src="../../layuiadmin/layui/layui.js"></script>
        <script src="../../js/public.js"></script>
        <script src="../../js/jquery-3.5.1.min.js"></script>
        <script src="../../js/jquery.cookie.js"></script>
        <script>
            layui.config({
                base: '../../layuiadmin/' //静态资源所在路径
            }).extend({
                index: 'lib/index' //主入口模块
            }).use(['index', 'table', 'laypage', 'layer'], function() {
                var table = layui.table,
                    form = layui.form,
                    laypage = layui.laypage,
                    layer = layui.layer;
                    var h1 = GetTableHeight();
                    refreshTable("", "", "", "","");
                    var tableIns;
    </div>
    <script src="../../layuiadmin/layui/layui.js"></script>
    <script src="../../js/public.js"></script>
    <script src="../../js/jquery-3.5.1.min.js"></script>
    <script src="../../js/jquery.cookie.js"></script>
    <script>
        layui.config({
            base: '../../layuiadmin/' //静态资源所在路径
        }).extend({
            index: 'lib/index' //主入口模块
        }).use(['index', 'table', 'laypage', 'layer'], function () {
            var table = layui.table,
                form = layui.form,
                laypage = layui.laypage,
                layer = layui.layer;
                //获取类型菜单下拉
                sendData(IP + '/Basis/GetDicTypeList?DicName=操作类型',{},'get',function(res){
                    if (res.code == 0) //成功
                    {
                        for (var i = 0; i < res.data.length; i++)
                        {
                            $("#Type").append('<option value =' + res.data[i].Id + '>' + res.data[i].DictName + '</option>');
                        }
                        form.render('select');
            var h1 = GetTableHeight();
            var tableIns;
            //获取类型菜单下拉
            sendData(IP + '/Basis/GetDicTypeList?DicName=操作类型', {}, 'get', function (res) {
                if (res.code == 200) //成功
                {
                    for (var i = 0; i < res.data.length; i++) {
                        $("#Type").append('<option value =' + res.data[i].Id + '>' + res.data[i].DictName + '</option>');
                    }
                    else //不成功
                    {
                        layer.msg('获取类型菜单信息失败!', {
                            icon: 2,
                            time: 2000 //2秒关闭(如果不配置,默认是3秒)
                        }, function() {});
                    }
                });
                function refreshTable(MenuName, Type, Msg, MenuNo,ParentNo) {
                    var param = {
                        MenuName: MenuName,
                        Type: Type,
                        Msg: Msg,
                        MenuNo: MenuNo,
                        ParentNo: ParentNo,
                    };
                    ParentNo = '系统设置'; //模块名称
                    var url  = "/Basis/GetSysOperationList?MenuName="+MenuName+"&&Type="+Type+"&&Msg="+Msg+"&&MenuNo="+MenuNo+"&&ParentNo="+ParentNo;
                    sendData(IP + url, {}, 'get', function(res) {
                        // console.log(res.data)
                        if (res.code == 0) //成功
                        {
                            var list = res.data;
                            $.extend(infoOptions, {
                                data: list
                            });
                            infoOptions.page = {
                                curr: 1
                            }
                            tableIns = table.render(infoOptions);
                        }
                        else //不成功
                        {
                            layer.msg('获取日志列表信息失败!', {
                                icon: 2,
                                time: 2000 //2秒关闭(如果不配置,默认是3秒)
                            }, function() {});
                        }
                    });
                    form.render('select');
                }
                var xml = '';
                function getchiled(data, mainId) {
                    if (data)
                    {
                        var list = data.filter(item => item.ParentId == mainId);
                        if (list)
                        {
                            for (var i = 0; i < list.length; i++)
                            {
                                var id = list[i].Id;
                                //查询有无子菜单
                                var count = data.filter(item => item.ParentId == id).length;
                                if (count > 0)
                                {
                                    xml = xml + '<dd>' + '<a href="javascript:;">' + list[i].Name + '</a>' + '<dl class="layui-nav-child">';
                                    getchiled(data, id);
                                    xml = xml + '</dl></dd>';
                                }
                                else
                                {
                                    xml = xml + '<dd>' + '<a lay-href="' + list[i].Url + '">' + list[i].Name + '</a>' + '</dd>';
                                }
                            }
                        }
                    }
                else //不成功
                {
                    layer.msg('获取类型菜单信息失败!', {
                        icon: 2,
                        time: 2000 //2秒关闭(如果不配置,默认是3秒)
                    }, function () { });
                }
                var infoOptions = {
                    elem: '#LAY-app-content-list',
                    height: h1,
                    id: 'LAY-app-content-list',
                    page: true,
                    limit: pageCnt,
                    limits: pageLimits,
                    even: true,
                    cols:
                    [[
                        {
                            title: '序号', type: 'numbers', fixed: 'left', width:65
                        },
                        {
                            field: 'ParentNo', title: '模块号', align: 'center', fixed: 'left', width:80
                        },
                        {
                            field: 'MenuNo', title: '菜单号', align: 'center', fixed: 'left', width:80
                        },
                        {
                            field: 'MenuName', title: '菜单名称', align: 'center', width:190
                        },
                        {
                            field: 'FkNo', title: '数据编号', align: 'center', width:180
                        },
                        {
                            field: 'TypeName', title: '类型', align: 'center', width:100
                        },
                        {
                            field: 'Msg', title: '操作内容', align: 'center'
                        },
                        {
                            field: 'CreateUserName', title: '操作人', align: 'center', width: 120
                        },
                        {
                            field: 'CreateTime', title: '操作时间', align: 'center', width:160,
                            templet: function (d) {
                                return formatDate(d.CreateTime);
                            }
                        }
                    ]]
                };
                //监听搜索
                form.on('submit(LAY-app-contlist-search)', function(data) {
                    // console.log(data)
                    var MenuName = data.field.MenuName;
                    var Type = data.field.Type;
                    var Msg = data.field.Msg;
                    var MenuNo = data.field.MenuNo;
                    //MenuName, Type, Msg, MenuNo,ParentNo
                    refreshTable(MenuName, Type, Msg, MenuNo);
                });
                var doing = true;
                // $('.layui-btn.layuiadmin-btn-list').on('click', function() {
                //     var type = $(this).data('type');
                //     active[type] ? active[type].call(this) : '';
                // });
            });
        </script>
    </body>
</html>
            var TotalColsArr = [[
                {
                    title: '序号', type: 'numbers', fixed: 'left', width: 65
                },
                {
                    field: 'ParentNo', title: '模块号', align: 'center', fixed: 'left', width: 80
                },
                {
                    field: 'MenuNo', title: '菜单号', align: 'center', fixed: 'left', width: 80
                },
                {
                    field: 'MenuName', title: '菜单名称', align: 'center', width: 190
                },
                {
                    field: 'FkNo', title: '数据编号', align: 'center', width: 180
                },
                {
                    field: 'TypeName', title: '类型', align: 'center', width: 100
                },
                {
                    field: 'Msg', title: '操作内容', align: 'center'
                },
                {
                    field: 'CreateUserName', title: '操作人', align: 'center', width: 120
                },
                {
                    field: 'CreateTime', title: '操作时间', align: 'center', width: 160,
                    templet: function (d) {
                        return formatDate(d.CreateTime);
                    }
                }
            ]];
            var TotalColsSysArr = encodeURIComponent(encodeURIComponent(JSON.stringify(TotalColsArr)))//将表头数据进行url编码
            function objectToQueryString(obj) {
                var queryString = '';
                for (var key in obj) {
                    if (obj.hasOwnProperty(key)) {
                        if (queryString.length > 0) {
                            queryString += '&';
                        }
                        queryString += encodeURIComponent(key) + '=' + encodeURIComponent(obj[key]);
                    }
                }
                return queryString;
            }
            // 创建渲染实例
            tableIns = table.render({
                elem: '#LAY-app-content-list',
                url: IP + "/Basis/GetSysOperationList",
                method: 'post',
                height: GetTableHeight(),
                id: 'LAY-app-content-list',
                where: {
                    MenuName: $("#MenuName").val(),
                    Type: $("#Type").val(),
                    Msg: $("#Msg").val(),
                    MenuNo: $("#MenuNo").val(),
                    ParentNo: '系统设置',
                },
                parseData: FnParseData,
                contentType: 'application/json',
                defaultToolbar: [],
                headers: { ToKen: $.cookie('token') },
                page: true,
                even: true,
                limit: pageCnt,
                limits: pageLimits,
                cellMinWidth: 60,
                done: function (res) {
                    //自定义列宽
                    SetTableColW('LAY-app-content-list', 'Basis/GetSysOperationList', TotalColsSysArr);
                },
                cols: TotalColsArr
            });
            //监听搜索
            form.on('submit(LAY-app-contlist-search)', function (data) {
                table.reload('LAY-app-content-list', {
                    where: {
                        MenuName: $("#MenuName").val(),
                        Type: $("#Type").val(),
                        Msg: $("#Msg").val(),
                        MenuNo: $("#MenuNo").val(),
                        ParentNo: '系统设置',
                    }
                });
            });
            var doing = true;
            $('.layui-btn.layuiadmin-btn-list').on('click', function () {
                var type = $(this).data('type');
                active[type] ? active[type].call(this) : '';
            });
        });
    </script>
</body>
</html>
HTML/views/WareHouseSetting/LogOperation.html
@@ -1,223 +1,207 @@
<!DOCTYPE html>
<html>
    <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, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
        <link rel="stylesheet" href="../../layuiadmin/layui/css/layui.css" media="all">
        <link rel="stylesheet" href="../../layuiadmin/style/admin.css" media="all">
        <script>
            // 这里是需要在页面渲染之前执行的代码
            document.addEventListener("DOMContentLoaded", function() {
                //获取table默认显示数
                pageCntFirst();
            });
          </script>
    </head>
    <body>
        <div class="layui-card" style="padding-bottom: 0">
            <div class="layui-form layui-card-header layuiadmin-card-header-auto" style="border-bottom:1px solid #CCC">
                <div class="layui-form-item" >
<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, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <link rel="stylesheet" href="../../layuiadmin/layui/css/layui.css" media="all">
    <link rel="stylesheet" href="../../layuiadmin/style/admin.css" media="all">
    <script>
        // 这里是需要在页面渲染之前执行的代码
        document.addEventListener("DOMContentLoaded", function () {
            //获取table默认显示数
            pageCntFirst();
        });
    </script>
</head>
<body id="body">
    <div class="layui-fluid" style="padding-bottom: 0;">
        <div class="layui-card">
            <div class="layui-form layui-card-header layuiadmin-card-header-auto" style="border-bottom:1px solid #CCC"
                id="top">
                <div class="layui-form-item">
                    <div class="layui-inline">
                        <label class="layui-form-label">菜单号</label>
                        <div class="layui-input-inline">
                            <input type="text" id="MenuNo" name="MenuNo" placeholder="请输入菜单号" autocomplete="off" class="layui-input">
                            <input type="text" id="MenuNo" name="MenuNo" placeholder="请输入菜单号" autocomplete="off"
                                class="layui-input">
                        </div>
                    </div>
                    <div class="layui-inline">
                        <label class="layui-form-label">菜单名称</label>
                        <div class="layui-input-inline">
                            <input type="text" id="MenuName" name="MenuName" placeholder="请输入菜单名称" autocomplete="off" class="layui-input">
                            <input type="text" id="MenuName" name="MenuName" placeholder="请输入菜单名称" autocomplete="off"
                                class="layui-input">
                        </div>
                    </div>
                    <div class="layui-inline">
                        <label class="layui-form-label">操作内容</label>
                        <div class="layui-input-inline">
                            <input type="text" id="Msg" name="Msg" placeholder="请输入操作内容" autocomplete="off" class="layui-input">
                            <input type="text" id="Msg" name="Msg" placeholder="请输入操作内容" autocomplete="off"
                                class="layui-input">
                        </div>
                    </div>
                    <div class="layui-inline">
                        <label class="layui-form-label" style="width: 45px;">类型</label>
                        <div class="layui-input-inline">
                            <select name="Type" id="Type" lay-verify="" lay-search >
                            <select name="Type" id="Type" lay-verify="" lay-search>
                                <option value=""></option>
                            </select>
                        </div>
                    </div>
                    <div class="layui-inline">
                        <button class="layui-btn layui-btn-sm layuiadmin-btn-list" lay-submit lay-filter="LAY-app-contlist-search">
                        <button class="layui-btn layui-btn-sm layuiadmin-btn-list" lay-submit
                            lay-filter="LAY-app-contlist-search">
                            <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>搜索
                        </button>
                    </div>
                </div>
            </div>
            <div id="center"></div>
            <div class="layui-card-body">
                <table id="LAY-app-content-list" lay-filter="LAY-app-content-list"></table>
            </div>
        </div>
        <script src="../../layuiadmin/layui/layui.js"></script>
        <script src="../../js/public.js"></script>
        <script src="../../js/jquery-3.5.1.min.js"></script>
        <script src="../../js/jquery.cookie.js"></script>
        <script>
            layui.config({
                base: '../../layuiadmin/' //静态资源所在路径
            }).extend({
                index: 'lib/index' //主入口模块
            }).use(['index', 'table', 'laypage', 'layer'], function() {
                var table = layui.table,
                    form = layui.form,
                    laypage = layui.laypage,
                    layer = layui.layer;
    </div>
    <script src="../../layuiadmin/layui/layui.js"></script>
    <script src="../../js/public.js"></script>
    <script src="../../js/jquery-3.5.1.min.js"></script>
    <script src="../../js/jquery.cookie.js"></script>
    <script>
        layui.config({
            base: '../../layuiadmin/' //静态资源所在路径
        }).extend({
            index: 'lib/index' //主入口模块
        }).use(['index', 'table', 'laypage', 'layer'], function () {
            var table = layui.table,
                form = layui.form,
                laypage = layui.laypage,
                layer = layui.layer;
                    refreshTable("", "", "", "","");
                    var tableIns;
            var h1 = GetTableHeight();
            var tableIns;
                //获取类型菜单下拉
                sendData(IP + '/Basis/GetDicTypeList?DicName=操作类型',{},'get',function(res){
                    if (res.code == 0) //成功
                    {
                        for (var i = 0; i < res.data.length; i++)
                        {
                            $("#Type").append('<option value =' + res.data[i].Id + '>' + res.data[i].DictName + '</option>');
                        }
                        form.render('select');
            //获取类型菜单下拉
            sendData(IP + '/Basis/GetDicTypeList?DicName=操作类型', {}, 'get', function (res) {
                if (res.code == 200) //成功
                {
                    for (var i = 0; i < res.data.length; i++) {
                        $("#Type").append('<option value =' + res.data[i].Id + '>' + res.data[i].DictName + '</option>');
                    }
                    else //不成功
                    {
                        layer.msg('获取类型菜单信息失败!', {
                            icon: 2,
                            time: 2000 //2秒关闭(如果不配置,默认是3秒)
                        }, function() {});
                    }
                });
                function refreshTable(MenuName, Type, Msg, MenuNo,ParentNo) {
                    var param = {
                        MenuName: MenuName,
                        Type: Type,
                        Msg: Msg,
                        MenuNo: MenuNo,
                        ParentNo: ParentNo,
                    };
                    ParentNo = '仓库设置'; //模块名称
                    var url  = "/Basis/GetSysOperationList?MenuName="+MenuName+"&&Type="+Type+"&&Msg="+Msg+"&&MenuNo="+MenuNo+"&&ParentNo="+ParentNo;
                    sendData(IP + url, {}, 'get', function(res) {
                        console.log(res.data)
                        if (res.code == 0) //成功
                        {
                            var list = res.data;
                            $.extend(infoOptions, {
                                data: list
                            });
                            infoOptions.page = {
                                curr: 1
                            }
                            tableIns = table.render(infoOptions);
                        }
                        else //不成功
                        {
                            layer.msg('获取日志列表信息失败!', {
                                icon: 2,
                                time: 2000 //2秒关闭(如果不配置,默认是3秒)
                            }, function() {});
                        }
                    });
                    form.render('select');
                }
                var xml = '';
                function getchiled(data, mainId) {
                    if (data)
                    {
                        var list = data.filter(item => item.ParentId == mainId);
                        if (list)
                        {
                            for (var i = 0; i < list.length; i++)
                            {
                                var id = list[i].Id;
                                //查询有无子菜单
                                var count = data.filter(item => item.ParentId == id).length;
                                if (count > 0)
                                {
                                    xml = xml + '<dd>' + '<a href="javascript:;">' + list[i].Name + '</a>' + '<dl class="layui-nav-child">';
                                    getchiled(data, id);
                                    xml = xml + '</dl></dd>';
                                }
                                else
                                {
                                    xml = xml + '<dd>' + '<a lay-href="' + list[i].Url + '">' + list[i].Name + '</a>' + '</dd>';
                                }
                            }
                        }
                else //不成功
                {
                    layer.msg('获取类型菜单信息失败!', {
                        icon: 2,
                        time: 2000 //2秒关闭(如果不配置,默认是3秒)
                    }, function () { });
                }
            });
            var TotalColsArr = [[
                {
                    title: '序号', type: 'numbers', fixed: 'left', width: 65
                },
                {
                    field: 'ParentNo', title: '模块号', align: 'center', fixed: 'left', width: 80
                },
                {
                    field: 'MenuNo', title: '菜单号', align: 'center', fixed: 'left', width: 80
                },
                {
                    field: 'MenuName', title: '菜单名称', align: 'center', width: 190
                },
                {
                    field: 'FkNo', title: '数据编号', align: 'center', width: 180
                },
                {
                    field: 'TypeName', title: '类型', align: 'center', width: 100
                },
                {
                    field: 'Msg', title: '操作内容', align: 'center'
                },
                {
                    field: 'CreateUserName', title: '操作人', align: 'center', width: 120
                },
                {
                    field: 'CreateTime', title: '操作时间', align: 'center', width: 160,
                    templet: function (d) {
                        return formatDate(d.CreateTime);
                    }
                }
                var infoOptions = {
                    elem: '#LAY-app-content-list',
                    height: 'full-88',
                    id: 'LAY-app-content-list',
                    page: true,
                    limit: pageCnt,
                    limits: pageLimits,
                    even: true,
                    cols:
                    [[
                        {
                            title: '序号', type: 'numbers', fixed: 'left', width:65
                        },
                        {
                            field: 'ParentNo', title: '模块号', align: 'center', fixed: 'left', width:80
                        },
                        {
                            field: 'MenuNo', title: '菜单号', align: 'center', fixed: 'left', width:80
                        },
                        {
                            field: 'MenuName', title: '菜单名称', align: 'center', width:190
                        },
                        {
                            field: 'FkNo', title: '数据编号', align: 'center', width:180
                        },
                        {
                            field: 'TypeName', title: '类型', align: 'center', width:100
                        },
                        {
                            field: 'Msg', title: '操作内容', align: 'center'
                        },
                        {
                            field: 'CreateUserName', title: '操作人', align: 'center', width: 120
                        },
                        {
                            field: 'CreateTime', title: '操作时间', align: 'center', width:160,
                            templet: function (d) {
                                return formatDate(d.CreateTime);
                            }
            ]];
            var TotalColsSysArr = encodeURIComponent(encodeURIComponent(JSON.stringify(TotalColsArr)))//将表头数据进行url编码
            function objectToQueryString(obj) {
                var queryString = '';
                for (var key in obj) {
                    if (obj.hasOwnProperty(key)) {
                        if (queryString.length > 0) {
                            queryString += '&';
                        }
                    ]]
                };
                //监听搜索
                form.on('submit(LAY-app-contlist-search)', function(data) {
                    console.log(data)
                    var MenuName = data.field.MenuName;
                    var Type = data.field.Type;
                    var Msg = data.field.Msg;
                    var MenuNo = data.field.MenuNo;
                    //MenuName, Type, Msg, MenuNo,ParentNo
                    refreshTable(MenuName, Type, Msg, MenuNo);
                });
                        queryString += encodeURIComponent(key) + '=' + encodeURIComponent(obj[key]);
                    }
                }
                return queryString;
            }
            // 创建渲染实例
            tableIns = table.render({
                elem: '#LAY-app-content-list',
                url: IP + "/Basis/GetSysOperationList",
                method: 'post',
                height: GetTableHeight(),
                id: 'LAY-app-content-list',
                where: {
                    MenuName: $("#MenuName").val(),
                    Type: $("#Type").val(),
                    Msg: $("#Msg").val(),
                    MenuNo: $("#MenuNo").val(),
                    ParentNo: '仓库设置',
                },
                parseData: FnParseData,
                contentType: 'application/json',
                defaultToolbar: [],
                headers: { ToKen: $.cookie('token') },
                page: true,
                even: true,
                limit: pageCnt,
                limits: pageLimits,
                cellMinWidth: 60,
                done: function (res) {
                    //自定义列宽
                    SetTableColW('LAY-app-content-list', 'Basis/GetSysOperationList', TotalColsSysArr);
                },
                cols: TotalColsArr
            });
                var doing = true;
                $('.layui-btn.layuiadmin-btn-list').on('click', function() {
                    var type = $(this).data('type');
                    active[type] ? active[type].call(this) : '';
            //监听搜索
            form.on('submit(LAY-app-contlist-search)', function (data) {
                table.reload('LAY-app-content-list', {
                    where: {
                        MenuName: $("#MenuName").val(),
                        Type: $("#Type").val(),
                        Msg: $("#Msg").val(),
                        MenuNo: $("#MenuNo").val(),
                        ParentNo: '仓库设置',
                    }
                });
            });
        </script>
    </body>
</html>
            var doing = true;
            $('.layui-btn.layuiadmin-btn-list').on('click', function () {
                var type = $(this).data('type');
                active[type] ? active[type].call(this) : '';
            });
        });
    </script>
</body>
</html>
Wms/Model/ModelVm/LogVm/OperationInputVm.cs
New file
@@ -0,0 +1,64 @@
using System;
namespace Model.ModelVm.LogVm
{
    public class OperationInputVm
    {
        public int Id { get; set; }
        /// <summary>
        /// 模块号
        /// </summary>
        public string ParentNo { get; set; }
        /// <summary>
        /// 模块号
        /// </summary>
        public string ParentName { get; set; }
        /// <summary>
        /// 菜单号
        /// </summary>
        public string MenuNo { get; set; }
        /// <summary>
        /// 菜单名称
        /// </summary>
        public string MenuName { get; set; }
        /// <summary>
        /// 数据编号 菜单表.编号
        /// </summary>
        public string FkNo { get; set; }
        /// <summary>
        /// 类型ID 添加 修改 删除 停用 启用
        /// </summary>
        public string Type { get; set; }
        /// <summary>
        /// 类型名称
        /// </summary>
        public string TypeName { get; set; }
        /// <summary>
        /// 操作内容
        /// </summary>
        public string Msg { get; set; }
        /// <summary>
        /// 创建日期
        /// </summary>
        public DateTime CreateTime { get; set; }
        /// <summary>
        /// 更新日期
        /// </summary>
        public string UpdateTime { get; set; }
        /// <summary>
        /// 创建人
        /// </summary>
        public int CreateUser { get; set; }
        /// <summary>
        /// 创建人
        /// </summary>
        public string CreateUserName { get; set; }
        /// <summary>
        /// 更新人
        /// </summary>
        public string UpdateUserName { get; set; }
    }
}
Wms/Model/ModelVm/LogVm/OperationVm.cs
@@ -6,6 +6,8 @@
{
    public class GetOperationVm:IndexPage
    {
        public string MenuNo { get; set; }
        public string ParentNo { get; set; }
        public string MenuName { get; set; }
        public string Type { get; set; }
        public string Msg { get; set; }
Wms/Utility/Extension/SqlSugarPagedExtensions.cs
New file
@@ -0,0 +1,52 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
namespace Utility
{
    public class SqlSugarPagedList<TEntity> where TEntity : new()
    {
        /// <summary>
        /// 总条数
        /// </summary>
        public int Total { get; set; }
        /// <summary>
        /// 总页数
        /// </summary>
        public int TotalPages { get; set; }
        /// <summary>
        /// 当前页集合
        /// </summary>
        public IEnumerable<TEntity> Items { get; set; }
    }
    /// <summary>
    /// 分页拓展类
    /// </summary>
    public static class SqlSugarPagedExtensions
    {
        /// <summary>
        /// 分页拓展
        /// </summary>
        /// <param name="query"><see cref="ISugarQueryable{TEntity}"/>对象</param>
        /// <param name="pageIndex">当前页码,从1开始</param>
        /// <param name="pageSize">页码容量</param>
        /// <returns></returns>
        public static async Task<SqlSugarPagedList<TEntity>> ToPagedListAsync<TEntity>(this ISugarQueryable<TEntity> query, int pageIndex, int pageSize)
            where TEntity : new()
        {
            RefAsync<int> total = 0;
            var items = await query.ToPageListAsync(pageIndex, pageSize, total);
            var totalPages = pageSize > 0 ? (int)Math.Ceiling(total / (double)pageSize) : 0;
            return new SqlSugarPagedList<TEntity>
            {
                Items = items,
                Total = total,
                TotalPages = totalPages,
            };
        }
    }
}
Wms/WMS.BLL/LogServer/OperationSysServer.cs
@@ -6,7 +6,9 @@
using System.Threading.Tasks;
using AutoMapper;
using Model.ModelDto.LogDto;
using Model.ModelVm.LogVm;
using SqlSugar;
using Utility;
using WMS.DAL;
using WMS.Entity.Context;
using WMS.Entity.LogEntity;
@@ -21,67 +23,18 @@
        private readonly IOperationSysRepository _operation;
        private readonly IMapper _mapper;
        private static readonly SqlSugarScope Db = DataContext.Db;
        private readonly UserManager _userManager;
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="operation">日志</param>
        /// <param name="mapper">automapper</param>
        public OperationSysServer(IOperationSysRepository operation, IMapper mapper) : base(Db)
        public OperationSysServer(IOperationSysRepository operation, IMapper mapper, UserManager userManager) : base(Db)
        {
            _operation = operation; //日志
            _mapper = mapper; //automapper
            _userManager = userManager;
        }
        ///// <summary>
        ///// 查询操作日志
        ///// </summary>
        ///// <param name="menuName">菜单名称</param>
        ///// <param name="type">类型</param>
        ///// <param name="msg">内容</param>
        ///// <param name="startTime">开始日期</param>
        ///// <param name="endTime">结束日期</param>
        ///// <param name="page"></param>
        ///// <param name="limit"></param>
        ///// <param name="count"></param>
        ///// <returns></returns>
        //public List<OperationDto> GetOperationSysList(string menuName, string type, string msg, string startTime, string endTime, int page, int limit, out int count)
        //{
        //    try
        //    {
        //        Expression<Func<LogOperationSys, bool>> item = Expressionable.Create<LogOperationSys>()
        //            .AndIF(!string.IsNullOrWhiteSpace(menuName), it => it.MenuName.Contains(menuName.Trim()))
        //            .AndIF(!string.IsNullOrWhiteSpace(type), it => it.Type == type)
        //            .AndIF(!string.IsNullOrWhiteSpace(msg), it => it.Msg.Contains(msg.Trim()))
        //            .AndIF(!string.IsNullOrWhiteSpace(startTime), it => it.CreateTime >= Convert.ToDateTime(startTime))
        //            .AndIF(!string.IsNullOrWhiteSpace(endTime), it => it.CreateTime <= Convert.ToDateTime(startTime).AddDays(1))
        //            .ToExpression();//注意 这一句 不能少
        //        var data = GetAllWhereAsync(item)
        //            .Includes(x => x.TypeInfo)
        //            .Includes(x => x.CreateUserInfo)
        //            .Includes(x => x.UpdateUserInfo).ToList();
        //        count = data.Count;
        //        return data.Select(m => new OperationDto()
        //        {
        //            Id = m.Id,
        //            ParentNo = m.ParentNo,
        //            MenuNo = m.MenuNo,
        //            MenuName = m.MenuName,
        //            FkNo = m.FkNo,
        //            Type = m.TypeInfo == null ? "" : m.TypeInfo.DictName,
        //            Msg = m.Msg,
        //            CreateTime = m.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"),
        //            CreateUserName = m.CreateUserInfo == null ? "" : m.CreateUserInfo.UserName,
        //            UpdateTime = m.UpdateTime == null ? "" : ((DateTime)m.UpdateTime).ToString("yyyy-MM-dd HH:mm:ss"),
        //            UpdateUserName = m.UpdateUserInfo == null ? "" : m.UpdateUserInfo.UserName
        //        }).ToList();
        //    }
        //    catch (Exception e)
        //    {
        //        throw new Exception(e.Message);
        //    }
        //}
        /// <summary>
        /// 添加操作日志
@@ -133,10 +86,25 @@
        /// <param name="menuNo">菜单号</param>
        /// <param name="parentNo">模块号</param>
        /// <returns></returns>
        public List<OperationDto> GetSysOperationList(string menuName, string type, string msg, string menuNo, string parentNo)
        public async Task<SqlSugarPagedList<OperationDto>> GetSysOperationList(GetOperationVm model)
        {
            List<OperationDto> operationlist = _operation.GetSysOperationList(menuName, type, msg, menuNo, parentNo);
            return operationlist;
            return await Db.Queryable<LogOperationSys>()
                           .LeftJoin<SysUserInfor>((a, b) => a.CreateUser == b.Id)
                           .LeftJoin<SysFunctionMenu>((a, b, c) => a.ParentNo == c.MenuNo)
                           .LeftJoin<SysDictionary>((a, b, c, d) => SqlFunc.ToInt32(a.Type) == d.Id)
                           .Where(a => a.IsDel == "0")
                           .WhereIF(!string.IsNullOrEmpty(model.MenuName), a => a.MenuName.Contains(model.MenuName))
                           .WhereIF(!string.IsNullOrEmpty(model.Type), a => a.Type == model.Type)
                           .WhereIF(!string.IsNullOrEmpty(model.Msg), a => a.Msg.Contains(model.Msg))
                           .WhereIF(!string.IsNullOrEmpty(model.MenuNo), a => a.MenuNo == model.MenuNo)
                           .Where((a, b, c, d) => a.ParentNo == SqlFunc.Subqueryable<SysFunctionMenu>().Where(e => e.IsDel == "0" && e.MenuName == model.ParentNo).Select(e => e.MenuNo))
                           .Select<OperationDto>((a, b, c, d) => new OperationDto()
                           {
                               Id = a.Id,
                               CreateUserName = b.RealName,
                               TypeName = d.DictName,
                           }, true)
                           .ToPagedListAsync(model.Page, model.Limit);
        }
        /// <summary>
@@ -154,8 +122,8 @@
            //捕获异常
            try
            {
                var parentNo = _operation.GetMenuList(parentName).MenuNo;
                var menuNo = _operation.GetMenuList(menuName).MenuNo;
                var parentNo = (await Db.Queryable<SysFunctionMenu>().FirstAsync(s => s.MenuName == parentName && s.IsDel == "0"))?.MenuNo;
                var menuNo = (await Db.Queryable<SysFunctionMenu>().FirstAsync(s => s.MenuName == menuName && s.IsDel == "0"))?.MenuNo;
                int i = await _operation.InsertOperation(parentNo, menuNo, parentName + "-" + menuName, fkNo, type, msg, createuser);
                return i;
            }
@@ -165,16 +133,36 @@
                throw new Exception("新增操作日志异常", ex);
            }
        }
        /// <summary>
        /// 新增系统操作日志
        /// </summary>
        /// <param name="parentName">模块号</param>
        /// <param name="menuName">菜单号</param>
        /// <param name="fkNo">数据编号</param>
        /// <param name="type">操作类型</param>
        /// <param name="msg">操作内容</param>
        /// <param name="createuser">创建人</param>
        /// <returns></returns>
        public async Task<int> InsertOperation(OperationInputVm input)
        {
            input.ParentNo = (await Db.Queryable<SysFunctionMenu>().FirstAsync(s => s.MenuName == input.ParentName && s.IsDel == "0"))?.MenuNo;
            input.MenuNo = (await Db.Queryable<SysFunctionMenu>().FirstAsync(s => s.MenuName == input.MenuName && s.IsDel == "0"))?.MenuNo;
            input.Type = (await Db.Queryable<SysDictionary>().FirstAsync(s => s.DictName == input.TypeName && s.IsDel == "0"))?.Id.ToString();
            input.CreateUser = _userManager.UserId;
            input.CreateTime = DateTime.Now;
            return await Db.Insertable<LogOperationSys>(input).ExecuteCommandAsync();
        }
        /// <summary>
        /// 获取类型菜单
        /// </summary>
        /// <param name="dicName">字典名称</param>
        /// <returns></returns>
        public List<SysDictionary> GetDicTypeList(string dicName)
        public async Task<List<SysDictionary>> GetDicTypeList(string dicName)
        {
            List<SysDictionary> diclist = _operation.GetDicTypeList( dicName);
            return diclist;
            return await Db.Queryable<SysDictionary>()
                           .Where(s => s.IsDel == "0")
                           .Where(s => s.ParentNo == SqlFunc.Subqueryable<SysDictionary>().Where(c => c.DictName == dicName).Select(c => c.DictNo))
                           .ToListAsync();
        }
    }
}
Wms/WMS.BLL/SysServer/RoleRightServer.cs
@@ -25,16 +25,14 @@
        /// <summary>
        /// 依赖注入
        /// </summary>
        public IRoleRightRepository _rolerights { get; set; }
        private static readonly SqlSugarScope Db = DataContext.Db;
        private readonly UserManager _userManager;
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="roles"></param>
        public RoleRightServer(IRoleRightRepository rolerights, UserManager userManager)
        public RoleRightServer(UserManager userManager)
        {
            _rolerights = rolerights;
            _userManager = userManager;
        }
Wms/WMS.IBLL/ILogServer/IOperationSysServer.cs
@@ -3,6 +3,8 @@
using System.Text;
using System.Threading.Tasks;
using Model.ModelDto.LogDto;
using Model.ModelVm.LogVm;
using Utility;
using WMS.Entity.LogEntity;
using WMS.Entity.SysEntity;
@@ -47,7 +49,7 @@
        /// <param name="menuno">菜单号</param>
        /// <param name="parentno">模块号</param>
        /// <returns></returns>
        List<OperationDto> GetSysOperationList(string menuname, string type, string msg, string menuno, string parentno);
        Task<SqlSugarPagedList<OperationDto>> GetSysOperationList(GetOperationVm model);
        /// <summary>
        /// 新增系统操作日志
@@ -61,11 +63,12 @@
        /// <returns></returns>
        Task<int> InsertOperation(string parentName, string menuName, string fkNo, string type, string msg, int createuser);
        Task<int> InsertOperation(OperationInputVm input);
        /// <summary>
        /// 获取类型菜单
        /// </summary>
        /// <param name="dicName">字典名称</param>
        /// <returns></returns>
        List<SysDictionary> GetDicTypeList(string dicName);
        Task<List<SysDictionary>> GetDicTypeList(string dicName);
    }
}
Wms/Wms/Controllers/BasisController.cs
@@ -21,6 +21,7 @@
using System.Data;
using Model.ModelDto.LogDto;
using Utility;
using Model.ModelVm.LogVm;
namespace Wms.Controllers
{
@@ -119,11 +120,18 @@
        /// <exception cref="System.Exception">捕获异常</exception>
        [HttpPost]
        [ServiceFilter(typeof(ApiResponseActionFilter))]
        [UnitOfWork]
        public async Task InsertUserinfo(UserInfoDto UserInfoDto)
        {
            await _userInforServer.InsertUserInfo(UserInfoDto);
            await _operation.InsertOperation("系统设置", "用户管理", UserInfoDto.UserNo, "添加", "添加用户信息 用户号:" + UserInfoDto.UserNo, _userManager.UserId);
            await _operation.InsertOperation(new OperationInputVm()
            {
                ParentName = "系统设置",
                MenuName = "用户管理",
                FkNo = UserInfoDto.UserNo,
                TypeName = "添加",
                Msg = "添加用户信息 用户号:" + UserInfoDto.UserNo
            });
        }
@@ -135,12 +143,20 @@
        /// <exception cref="System.Exception">异常</exception>
        [HttpGet]
        [ServiceFilter(typeof(ApiResponseActionFilter))]
        [UnitOfWork]
        public async Task DeleteUserInfo(int userids)
        {
            //获取用户信息
            SysUserInfor user = await _userInforServer.GetUserInfoById(userids);
            await _userInforServer.DeleteUserinfo(user);
            await _operation.InsertOperation("系统设置", "用户管理", user.UserNo, "删除", "删除用户信息 用户号:" + user.UserNo, _userManager.UserId);
            await _operation.InsertOperation(new OperationInputVm()
            {
                ParentName = "系统设置",
                MenuName = "用户管理",
                FkNo = user.UserNo,
                TypeName = "删除",
                Msg = "删除用户信息 用户号:" + user.UserNo
            });
        }
@@ -152,11 +168,18 @@
        /// <exception cref="System.Exception">捕获异常</exception>
        [HttpPost]
        [ServiceFilter(typeof(ApiResponseActionFilter))]
        [UnitOfWork]
        public async Task UpdateUserinfo(UserInfoDto userdto)
        {
            await _userInforServer.UpdateUserinfo(userdto);
            await _operation.InsertOperation("系统设置", "用户管理", userdto.UserNo, "修改", "修改用户信息 用户号:" + userdto.UserNo, _userManager.UserId);
            await _operation.InsertOperation(new OperationInputVm()
            {
                ParentName = "系统设置",
                MenuName = "用户管理",
                FkNo = userdto.UserNo,
                TypeName = "编辑",
                Msg = "修改用户信息 用户号:" + userdto.UserNo
            });
        }
@@ -183,20 +206,13 @@
            //获取当前操作用户id
            SysUserInfor user = await _userInforServer.GetUserInfoById(_userManager.UserId);
            if (user == null)
            {
                throw Oops.Bah("找不到用户信息");
            }
            if (user.PassWord != pwdOld)
            {
                throw Oops.Bah("原密码不正确");
            }
            else
            {
                //修改密码
                int i = await _userInforServer.UptUserPassWord(pwdNew, _userManager.UserId);
                if (i <= 0)
                    throw Oops.Bah("修改密码失败");
            }
            //修改密码
            int i = await _userInforServer.UptUserPassWord(pwdNew, _userManager.UserId);
            if (i <= 0)
                throw Oops.Bah("修改密码失败");
        }
        /// <summary>
        /// x天后提醒用户修改密码
@@ -251,8 +267,14 @@
        public async Task InsertRoleInfo(RoleDto roledto)
        {
            await _rolesServer.InsertRoleInfo(roledto);
            await _operation.InsertOperation("系统设置", "角色权限", roledto.RoleNo, "添加", "添加角色信息 角色号:" + roledto.RoleNo, _userManager.UserId);
            await _operation.InsertOperation(new OperationInputVm()
            {
                ParentName = "系统设置",
                MenuName = "角色权限",
                FkNo = roledto.RoleNo,
                TypeName = "添加",
                Msg = "添加角色信息 角色号:" + roledto.RoleNo
            });
        }
        /// <summary>
@@ -269,7 +291,14 @@
            //根据角色id获取角色信息
            SysRoles role = await _rolesServer.GetRoleInfoById(roleids);
            await _rolesServer.DeleteRoleInfo(role);
            await _operation.InsertOperation("系统设置", "角色权限", role.RoleNo, "删除", "删除角色信息 角色号:" + role.RoleNo, _userManager.UserId);
            await _operation.InsertOperation(new OperationInputVm()
            {
                ParentName = "系统设置",
                MenuName = "角色权限",
                FkNo = role.RoleNo,
                TypeName = "删除",
                Msg = "删除角色信息 角色号:" + role.RoleNo
            });
        }
        /// <summary>
@@ -284,7 +313,14 @@
        public async Task UpdateRolesInfo(SysRoles role)
        {
            await _rolesServer.UpdateRoleInfo(role);
            await _operation.InsertOperation("系统设置", "角色权限", role.RoleNo, "修改", "修改角色信息 角色号:" + role.RoleNo, _userManager.UserId);
            await _operation.InsertOperation(new OperationInputVm()
            {
                ParentName = "系统设置",
                MenuName = "角色权限",
                FkNo = role.RoleNo,
                TypeName = "编辑",
                Msg = "修改角色信息 角色号:" + role.RoleNo
            });
        }
        #endregion
@@ -365,8 +401,14 @@
            SysRoles roles = await _rolesServer.GetRoleInfoById(id);
            //保存角色权限信息
            await _roleRightServer.InsertRoleRight(MenuNo, roles.RoleNo);
            await _operation.InsertOperation("系统设置", "角色权限", roles.RoleNo, "修改", "分配角色权限 角色号:" + roles.RoleNo, _userManager.UserId);
            await _operation.InsertOperation(new OperationInputVm()
            {
                ParentName = "系统设置",
                MenuName = "角色权限",
                FkNo = roles.RoleNo,
                TypeName = "编辑",
                Msg = "分配角色权限 角色号:" + roles.RoleNo
            });
        }
        #endregion
@@ -2051,22 +2093,12 @@
        /// <summary>
        /// 获取操作日志信息列表
        /// </summary>
        /// <param name="menuName">菜单名称</param>
        /// <param name="type">操作类型</param>
        /// <param name="msg">操作内容</param>
        /// <param name="menuNo">菜单号</param>
        /// <param name="parentNo">模块号</param>
        /// <returns></returns>
        [HttpGet]
        public IActionResult GetSysOperationList(string menuName, string type, string msg, string menuNo, string parentNo)
        [HttpPost]
        [ServiceFilter(typeof(ApiResponseActionFilter))]
        public async Task<SqlSugarPagedList<OperationDto>> GetSysOperationList(GetOperationVm model)
        {
            List<OperationDto> operation = _operation.GetSysOperationList(menuName, type, msg, menuNo, parentNo);
            return Ok(new
            {
                data = operation,
                code = 0,
                msg = "成功"
            });
            return await _operation.GetSysOperationList(model);
        }
        /// <summary>
@@ -2075,15 +2107,10 @@
        /// <param name="dicName">字典名称</param>
        /// <returns></returns>
        [HttpGet]
        public IActionResult GetDicTypeList(string dicName)
        [ServiceFilter(typeof(ApiResponseActionFilter))]
        public async Task<List<SysDictionary>> GetDicTypeList(string dicName)
        {
            List<SysDictionary> diclist = _operation.GetDicTypeList(dicName);
            return Ok(new
            {
                data = diclist,
                code = 0,
                msg = "成功"
            });
            return await _operation.GetDicTypeList(dicName);
        }
        #endregion