基于.net webapi 搭建的项目后台管理框架(1)

.net 6.0+webapi+mysql5.7+layui前后端分离实现。

wwwroot 放置前端文件

创建AccountController 实现对用户的增删改查。

using HcyWebAPI.Models;
using Microsoft.AspNetCore.Mvc;
using static HcyWebAPI.Controllers.Params.AccountParams;

namespace HcyWebAPI.Controllers
{
    [ApiController]
    [Route("api/account/")]
    public class AccountController : ControllerBase
    {
        private readonly MyDbContext _context = new MyDbContext();

        /// <summary>
        /// 查询所有用户 根据条件
        /// </summary>
        /// <param name="params"></param>
        /// <returns></returns>
        [HttpPost]
        [Route("list")]
        public Models.ResultMsg GetAccountList(AccountListParams @params)
        {
            Models.ResultMsg resultMsg = new Models.ResultMsg();
            Models.ResultDataInfo resultDataInfo = new Models.ResultDataInfo();
            Func<Models.Account, bool> whereLam = (p => true);
            if (@params.username!=null&&@params.username != "")
            {
                whereLam = p => p.Username.Contains(@params.username);
            }
            if (@params.deptId != 0) { 
               whereLam= (p => [email protected]);
            }

            var temp = _context.Account.Where(whereLam)
                                     .OrderBy(p => p.Id)
                                     .Skip(@params.pageSize * (@params.pageIndex - 1))  //跳过多少
                                     .Take(@params.pageSize)                            //取多少
                                     .ToList();
            var count = _context.Account.Count(whereLam);
            //最后转为集合

            resultDataInfo.data = temp;
            resultDataInfo.total = count;
            resultMsg.data = resultDataInfo;
            return resultMsg;
        }

        /// <summary>
        /// 查询用户 根据指定ID
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        [HttpGet]
        [Route("list/{id}")]
        public Models.Account? GetAccountById(int id)
        {
            int count = _context.Account.Count(b => b.Id == id);
            if (count == 0)
                return null;
            var person = _context.Account.Single(b => b.Id == id);
            List<Models.Account> peopleList = new List<Models.Account>();
            peopleList.Add(person);
            return person;
        }

        /// <summary>
        /// 删除用户 指定ID 
        /// </summary>
        /// <param name="account"></param>
        /// <returns></returns>
        [HttpPost]
        [Route("del")]
        public ResultMsg DeleteAccout(Models.Account account)
        {
            ResultMsg resultMsg = new ResultMsg();
            var temp = _context.Account.Single(p => p.Id == account.Id);
            _context.Account.Remove(temp);
            int result = _context.SaveChanges();
            resultMsg.data = result;
            return resultMsg;
        }

        /// <summary>
        /// 修改用户信息
        /// </summary>
        /// <param name="account"></param>
        /// <returns></returns>
        [HttpPost]
        [Route("update")]
        public ResultMsg UpdateAccount(Models.Account account)
        {
            ResultMsg resultMsg=new ResultMsg();
            _context.Update(account);
            int result = _context.SaveChanges();
            resultMsg.data = result;
            return resultMsg;
        }

    }
}

再wwwroot 下创建 accountList.html前端文件管理页: 

1. 实现查询功能。

2. 实现分页功能。

3. 实现删除功能。

4. 实现修改功能。(修改功能包括双击单元格就能修改)

<!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,target-densitydpi=low-dpi" />-->
        <link rel="stylesheet" href="./css/font.css">
        <link rel="stylesheet" href="./css/xadmin.css">
        <script src="./lib/layui/layui.js" charset="utf-8"></script>
        <script type="text/javascript" src="./js/xadmin.js"></script>
        <script type="text/javascript" src="./js/jquery.min.js"></script>
        <script type="text/javascript" src="./data/sensor.js"></script>
        <!--[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>
        <div class="x-nav">
            <span class="layui-breadcrumb">
                <a href="">首页</a>
                <a href="">账户列表</a>
                <a>
                    <cite>账户列表</cite></a>
            </span>
            <a class="layui-btn layui-btn-small" style="line-height:1.6em;margin-top:3px;float:right" onclick="location.reload()" title="刷新">
                <i class="layui-icon layui-icon-refresh" style="line-height:30px"></i>
            </a>
        </div>
        <div class="layui-fluid">
            <div class="layui-row layui-col-space15">
                <div class="layui-col-md12">
                    <div class="layui-card">
<!--                        <div class="layui-card-body ">-->
<!--                            <form class="layui-form layui-col-space5">-->
<!--                                <div class="layui-inline layui-show-xs-block">-->
<!--                                    <input class="layui-input" autocomplete="off" placeholder="开始日" name="start" id="start"></div>-->
<!--                                <div class="layui-inline layui-show-xs-block">-->
<!--                                    <input class="layui-input" autocomplete="off" placeholder="截止日" name="end" id="end"></div>-->
<!--                                <div class="layui-inline layui-show-xs-block">-->
<!--                                    <input type="text" name="username" placeholder="请输入用户名" autocomplete="off" class="layui-input"></div>-->
<!--                                <div class="layui-inline layui-show-xs-block">-->
<!--                                    <button class="layui-btn" lay-submit="" lay-filter="sreach">-->
<!--                                        <i class="layui-icon">&#xe615;</i></button>-->
<!--                                </div>-->
<!--                            </form>-->
<!--                        </div>-->
                        <div class="layui-card-body ">
<!--                            <table class="layui-table" lay-data="{url:'./user.json',page:true,toolbar: '#toolbarDemo',id:'test'}" lay-filter="test">-->
<!--                                <thead>-->
<!--                                    <tr>-->
<!--                                        <th lay-data="{type:'checkbox'}">ID</th>-->
<!--                                        <th lay-data="{field:'pid', width:80, sort: true}">ID</th>-->
<!--                                        <th lay-data="{field:'deviceId', width:120, sort: true, edit: 'text'}">设备标识</th>-->
<!--                                        <th lay-data="{field:'deviceIp', edit: 'text', minWidth: 150}">设备IP</th>-->
<!--                                        <th lay-data="{field:'deviceLocation', width:80,templet: '#switchTpl'}">位置信息</th>-->
<!--                                        <th lay-data="{field:'city', edit: 'text', minWidth: 100}">城市</th>-->
<!--                                        <th lay-data="{field:'experience', sort: true, edit: 'text'}">积分</th>-->
<!--                                        <th lay-data="{field:'dw_xinzhi',templet: function(d){ return d.dw_xinzhi.titel;}}">学校</th></tr>-->
<!--                                </thead>-->
<!--                            </table>-->
                            地点: <select id="select_address" style="width: 100px;height: 20px">
                                    <option value="0">请选择</option>
                            </select>
                            用户名:<input type="text" id="input_username" placeholder="请输入要查询的用户名" />
                            <div class="layui-inline layui-show-xs-block">
                                <button class="layui-btn" lay-submit="" lay-filter="sreach" onclick="searchInfo()">
                                    <i class="layui-icon">&#xe615;</i></button>
                            </div>
                            <table id="demo" class="layui-table" lay-filter="test_table" ></table>
                            <div id="test1"></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>

    </body>
    <script type="text/html" id="toolbarDemo">
        <div class = "layui-btn-container" >
<!--            <button class = "layui-btn layui-btn-sm" lay-event = "getCheckData" > 获取选中行数据 </button>-->
<!--            <button class="layui-btn layui-btn-sm" lay-event="getCheckLength">获取选中数目</button >-->
<!--            <button class = "layui-btn layui-btn-sm" lay-event = "isAll" > 验证是否全选</button>-->
            <button class = "layui-btn layui-btn-danger"   lay-event = "delete" > 删除</button>
            {
   
   {# if(d.active==1){ }}
                 <button class = "layui-btn layui-btn-sm"   lay-event = "updateWarningInfo" > 确定</button>
            {
   
   {# } }}
        </div >
    </script>

    <script type="text/javascript">

        // setInterval(function(){
        //    // initData();
        // },1000);

        $(function () {
             initSelectData();
             searchInfo();
        });

        function searchInfo(){
            initData();
        }

        function  initSelectData() {
            var dataSensor = sensorServer.getDeptList({ "pageIndex": 1,"pageSize":1000});
            if (dataSensor!=null) {
                let optionList="";
                for(let i=0;i<dataSensor.data.length;i++){
                    optionList+="<option value='"+dataSensor.data[i].id+"'>"+dataSensor.data[i].deptName+"</option>";
                }
                $("#select_address").append(optionList);
            }
        }

        //请求数据
        function getData(page,limit) {
            var resultData;
            let sensorPid = ""; //$("#select_address").val();
            let username = $("#input_username").val();
            var params = { "pageIndex": page, "pageSize": limit, "username": username }
            resultData = sensorServer.getAccountList(params);
            return resultData;
        }

        function refData(dataList){
            //var dataList=dataArraygetData(page,limit).data;
            layui.use('table', function () {
                var table = layui.table;
                //第一个实例
                table.render({
                    elem: '#demo'
                    ,height: 450
                    ,data: dataList
                    ,limit:dataList.length
                    //page:false
                    ,cols: [[ //表头
                        { field: 'id', title: '编号', width: 80, sort: true, fixed: 'left' }
                        , { field: 'username', title: '名字', edit: 'text' }
                        , { field: 'password', title: '密码', edit: 'text'}
                        , {field: '', title: '编辑', width: 250, sort: true, toolbar:'#toolbarDemo',fixed: 'right'}
                    ]],
                    loading:true,
                    done:function (res, curr, count) {
                        //$("[data-field='active']").children().each(function(){
                        //    if($(this).text()==1){
                        //        $(this).text("未阅")
                        //    }else if($(this).text()==0){
                        //        $(this).text("阅读并处理")
                        //    }
                        //});
                    },
                    parseData:function(res){
                        return {
                            "code" : res.code, //解析接口状态
                            "msg" : res.msg, //解析提示文本
                            "data" : res.data //解析数据列表
                        }
                    }
                });

                //监听单元格编辑
                 table.on('edit(test_table)',
                     function (obj) {
                         var value = obj.value //得到修改后的值
                             ,
                             data = obj.data //得到所在行所有键值
                             ,
                             field = obj.field; //得到字段
                         layer.msg('[ID: ' + data.id + '] ' + field + ' 字段更改为:' + value);
                         var jsonResult = sensorServer.updateAccount(obj.data);
                         if (jsonResult == 1) {
                             layer.msg('修改成功!', { icon: 1, time: 1000 });
                         } else {
                             layer.msg('修改失败!', { icon: 2, time: 1000 });
                         }
                     });

                //监听行单击事件(双击事件为:rowDouble)
                // table.on('row(test_table)', function(obj){
                //     var data = obj.data;
                //     layer.alert(JSON.stringify(data), {
                //         title: '当前行数据:'
                //     });
                //
                //     //标注选中样式
                //     obj.tr.addClass('layui-table-click').siblings().removeClass('layui-table-click');
                // });

                //列里的工具栏
                table.on('tool(test_table)',
                    function(obj) {
                        //var checkStatus = table.checkStatus(obj.config.pid);
                        switch (obj.event) {
                            case 'delete':
                                layer.msg('data:'+obj.data.pid);
                                del(obj);
                                break;
                            case 'updateWarningInfo':
                                layer.msg('data:'+obj.data.pid);
                                updateWarningInfo(obj);
                                break;
                        };
                    });
            });
        }

        function initData() {
            var initData=getData(1,10);
            var total=initData.total;
            var dataList=initData.data;
            layui.use('table', function(){
                var laypage = layui.laypage;
                //执行一个laypage实例
                laypage.render({
                    elem: 'test1' //注意,这里的 test1 是 ID,不用加 # 号
                    ,count: total //数据总数,从服务端得到
                    //,limit:10
                    ,limits:[10,20,30]
                    ,curr:1
                    ,group:5
                    ,layout: ['prev', 'page', 'next','limit','refresh','skip','count']
                    ,jump: function(obj, first){
                        //obj包含了当前分页的所有参数,比如:
                        console.log(obj.curr); //得到当前页,以便向服务端请求对应页的数据。
                        console.log(obj.limit); //得到每页显示的条数
                        //首次不执行
                        if(!first){
                            refData(getData(obj.curr,obj.limit).data);
                        }else{
                            refData(dataList);
                        }

                    }
                });
            });
        }

        //删除
        function del(obj) {
            var params = obj.data;
            var resultData = sensorServer.delAccount(params);
            if (resultData == 1) {
                location.reload();
            } else {
                layer.msg('删除失败!', { icon: 1, time: 1000 });
            }
        }

        function  updateWarningInfo(obj){
            obj.data.active=0;
            msg="确认已阅读此警示,并进行相关处理吗?";
            layer.confirm(msg,function(index){
                var jsonResult = sensorServer.updateWarningInfo(obj.data);
                layer.msg('已设置!',{icon:1,time:1000});
                location.reload();
            });
        }

    </script>


</html>

猜你喜欢

转载自blog.csdn.net/u010919083/article/details/129800087