Spring Boot圖書管理系統項目實戰-5.讀者管理

導航:

pre:  4.基礎信息管理

next:6.圖書管理

 

只挑重點的講,具體的請看項目源碼。

1.項目源碼

需要的朋友請給個贊,並留下郵箱,給你們發!

 

2.頁面設計

 

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <title>讀者管理</title>
    <link rel="stylesheet" href="/static/layui/css/layui.css" th:href="@{/static/layui/css/layui.css}">

</head>

<body>
<!-- 內容主體區域 -->
<div>
    <table id="tb-bookReader" lay-filter="tb-bookReader"></table>
</div>

<!--編輯表單-->
<div class="layui-row" id="editBookReader" style="display:none;">
    <div class="layui-col-md10">
        <form class="layui-form layui-from-pane" id="saveBookReader" style="margin-top:20px">

            <div class="layui-form-item">
                <label class="layui-form-label">讀者編碼</label>
                <div class="layui-input-block">
                    <input type="text" name="code" id="code" required lay-verify="required" autocomplete="off"
                           class="layui-input">
                </div>
            </div>

            <input type="hidden" name="id" id="id">

            <div class="layui-form-item">
                <label class="layui-form-label">讀者姓名</label>
                <div class="layui-input-block">
                    <input type="text" name="name" id="name" required lay-verify="required" autocomplete="off"
                           class="layui-input">
                </div>
            </div>

            <div class="layui-form-item">
                <label class="layui-form-label">性別</label>
                <div class="layui-input-block">
                    <input type="radio"  id="male" name="sex" value="男" title="男">
                    <input type="radio"  id="female" name="sex" value="女" title="女">
                </div>
            </div>

            <div class="layui-form-item">
                <label class="layui-form-label">聯繫電話</label>
                <div class="layui-input-block">
                    <input type="text" name="phone" id="phone" required lay-verify="required" autocomplete="off"
                           class="layui-input">
                </div>
            </div>

            <div class="layui-form-item" style="margin-top:40px" id="check">
                <div class="layui-input-block">
                    <button class="layui-btn  layui-btn-submit " lay-submit="" lay-filter="saveBookReader">保存</button>
                    <!--<button type="reset" class="layui-btn layui-btn-primary">重置</button>-->
                </div>
            </div>
        </form>
    </div>
</div>

<script type="text/html" id="bookReader-toolbar">
    <div class="layui-btn-container">
        <button class="layui-btn layui-btn-sm" lay-event="add"><i class="layui-icon">&#xe608;</i>新增</button>
        <button class="layui-btn layui-btn-sm layui-btn-danger" lay-event="remove"><i class="layui-icon">&#xe640;</i>刪除
        </button>
    </div>
</script>

<script type="text/html" id="barOps">
    <a class="layui-btn layui-btn-sm" lay-event="edit"><i class="layui-icon">&#xe642;</i> </a>
</script>

<script src="/static/js/jquery-1.11.3.min.js" th:src="@{/static/js/jquery-1.11.3.min.js}"></script>
<script src="/static/layui/layui.all.js" th:src="@{static/layui/layui.all.js}"></script>
<script src="/static/js/util.js" th:src="@{/static/js/util.js}"></script>

<!--ctx-->
<script th:replace="~{fragment::ctx}"/>

<script>
    var element, layer, laydate, table, form;

    $(function () {
        // 使用模塊
        layui.use(['element', 'layer', 'laydate', 'table', 'form'], function () {
            element = layui.element;
            layer = layui.layer;
            laydate = layui.laydate;
            table = layui.table;
            form = layui.form;
        });

        form.on('radio',function (data) {
            $("input[name='sex']").prop("checked",false);
            $(data.elem).prop("checked",true);
        });


        //第一個實例
        var userTable = table.render({
            elem: '#tb-bookReader'
            , height: 515
            , url: ctx+'api/bookReader/getPageResult' //數據接口
            , page: true //開啓分頁
            , toolbar: '#bookReader-toolbar'
            /*,request: {
                pageName: 'pageNo' //頁碼的參數名稱,默認:page
                ,limitName: 'pageSize' //每頁數據量的參數名,默認:limit
            }
            , response: {
                statusName: 'code', //規定返回的狀態碼字段爲code
                statusCode: 200 //規定成功的狀態碼爲200,默認爲0
            }
            , parseData: function (res) {
                 return {
                     "code": res.code, //解析接口狀態
                     "msg": res.msg, //解析提示文本
                     "count": res.records, //解析數據長度
                     "data": res.rows //解析數據列表
                 }
             }*/
            , cols: [
                [ //表頭
                {type: 'checkbox', fixed: 'left'}
                , {field: 'id', title: 'ID', width: 80, sort: true, fixed: 'left',hide:true}
                , {field: 'code', title: '讀者編碼'}
                , {field: 'name', title: '讀者姓名'}
                , {field: 'sex', title: '性別'}
                , {field: 'phone', title: '聯繫電話'}
                , {fixed: 'right', title: '操作', toolbar: '#barOps', width: 120}
            ]
            ]
        });

        //監聽表單提交
        // 修改
        form.on('submit(saveBookReader)', function (data) {
            //layer.alert(JSON.stringify(data.field));
            data.field.sex=$('#sex input[checked]').attr('title');

            data.field.sex=$("#male").prop("checked")==true?$("#male").attr("title"):$("#female").attr("title");

            $.ajax({
                url: ctx+'api/bookReader/save',
                type: 'POST',
                contentType: "application/json",
                dataType: "json",
                data: JSON.stringify(data.field),
                success: function (result) {
                    if (result.code == 200) {
                        // layer.msg("修改成功!", {icon: 6});
                        cleanForm("#saveBookReader");
                        if(data.field.id.length>0){
                            layer.closeAll();//關閉所有的彈出層
                        }
                        userTable.reload();
                    }else {
                        layer.alert(result.message);
                    }
                }
            });

            return false;

        });

        //工具欄事件
        table.on('toolbar(tb-bookReader)', function (obj) {
            var checkStatus = table.checkStatus(obj.config.id);
            var checkData = checkStatus.data;
            var ids = [];
            switch (obj.event) {
                // 新增
                case 'add':
                    cleanForm("#saveBookReader");
                    $("#male").prop("checked",true);
                    $("#female").prop("checked",false);

                    form.render();

                    layer.open({
                        type: 1,
                        offset: '10px',
                        title: "新增讀者",
                        area: ['500px', '400px'],
                        content: $("#editBookReader")
                    });
                    break;
                // 刪除
                case 'remove':
                    if (checkData.length == 0) {
                        layer.alert('請選擇要操作的行');
                    } else {
                        layer.confirm('確定要刪除嗎?', function (index) {
                            for (var i = 0; i < checkData.length; i++) {
                                ids.push(checkData[i].id);
                            }
                            //layer.alert(JSON.stringify(ids));
                            $.ajax({
                                url: ctx+'api/bookReader/remove',
                                type: 'POST',
                                contentType: "application/json",
                                dataType: "json",
                                data: JSON.stringify(ids),
                                success: function (result) {
                                    if (result.code == 200) {
                                        setTimeout(function () {
                                            layer.closeAll();//關閉所有的彈出層
                                            userTable.reload();
                                        }, 300);
                                    }else {
                                        layer.msg("操作失敗!", {icon: 5});
                                    }
                                }
                            });
                        });
                    }
                    break;
                case 'getCheckData':
                    layer.alert(JSON.stringify(data));
                    break;
                case 'getCheckLength':
                    var data = checkStatus.data;
                    layer.msg('選中了:' + data.length + ' 個');
                    break;
                case 'isAll':
                    layer.msg(checkStatus.isAll ? '全選' : '未全選')
                    break;
            }
            ;
        });

        // 監聽工具條
        table.on('tool(tb-bookReader)', function (obj) {
            var data = obj.data;
            // 修改
            if (obj.event === 'edit') {
                $("#name").val(data.name);
                $("#code").val(data.code);
                $("#id").val(data.id);
                $("#phone").val(data.phone);

                if(data.sex=='男'){
                    $("#male").prop("checked",true);
                    $("#female").prop("checked",false);
                }
                if(data.sex=='女'){
                    $("#male").prop("checked",false);
                    $("#female").prop("checked",true);
                }

                form.render(); //更新全部

                layer.open({
                    type: 1,
                    offset: '10px',
                    title: "修改讀者",
                    area: ['500px', '400px'],
                    content: $("#editBookReader")
                });
            }
        });
    });



</script>
</body>

</html>

3.讀者管理service

/**
 * @Description: 讀者服務
 * @Author laoxu
 * @Date 2019/5/2 9:26
 **/
@Service
public class BookReaderService extends AbstractService {
    public void add(BookReader entity) {
        //String username = SecurityUtil.getLoginUser();
        insert("bookReaderMapper.insert",entity);
    }

    public void modify(BookReader entity) {
        update("bookReaderMapper.update",entity);
    }

    public void remove(Long id) {
        delete("bookReaderMapper.delete",id);
    }

    public void removes(Long[] ids) {
        delete("bookReaderMapper.deletes",ids);
    }

    public BookReader get(Long id) {
        return selectOne("bookReaderMapper.select",id);
    }

    public List<BookReader> getParentList(Long id) {
        return selectList("bookReaderMapper.selectParentList",id);
    }

    public int count(Map<String, Object> param) {
        return selectOne("bookReaderMapper.count",param);
    }

    public List<BookReader> getList(Map<String, Object> param) {
        return selectList("bookReaderMapper.selectList",param);
    }

    public List<BookReader> getPageResult(Map<String, Object> param) {
        return selectList("bookReaderMapper.selectPageResult",param);
    }


    public int checkCode(BookReader entity){
        return selectOne("bookReaderMapper.countCode",entity);
    }

}

4.讀者管理controller

/**
 * @Description: 讀者控制器
 * @Author laoxu
 * @Date 2019/5/2 10:16
 **/
@RestController
@RequestMapping("/api/bookReader")
public class BookReaderController {
    @Autowired
    BookReaderService bookReaderService;

    /**
     * 保存(新增/修改)
     *
     * @param entity
     * @return
     */
    @PostMapping("/save")
    public Result<String> modify(@RequestBody BookReader entity) {
        int count = bookReaderService.checkCode(entity);
        if(count>0){
            return ResultUtil.fail("編碼已存在!");
        }
        if(entity.getId()!=null){
            bookReaderService.modify(entity);
        }else{
            bookReaderService.add(entity);
        }

        return ResultUtil.ok();
    }


    @PostMapping("/remove")
    public Result<String> remove(@RequestBody Long[] ids) {
        bookReaderService.removes(ids);
        return ResultUtil.ok();
    }

    @GetMapping("/get")
    public Result<BookReader> get(@RequestParam("id") Long id) {
        BookReader entity = bookReaderService.get(id);

        return ResultUtil.ok(entity);
    }

    @GetMapping("/list")
    public ResultBean<List<BookReader>> list(){
        List<BookReader> entities = bookReaderService.getList(null);
        return new ResultBean(0, "查詢成功", entities.size(), entities);
    }

    @GetMapping("/getPageResult")
    public ResultBean<List<BookReader>> getPageResult(
            @RequestParam(defaultValue = "1") Integer page,
            @RequestParam(defaultValue = "10") Integer limit) {

        Map<String, Object> param = new HashMap<>();
        // 統計記錄數
        int totalRows = bookReaderService.count(param);
        // 計算起始行號
        int offset = (page - 1) * limit;
        int rows = limit;

        param.put("offset", offset);
        param.put("rows", rows);

        // 獲取當前頁結果集
        List<BookReader> entities = bookReaderService.getPageResult(param);

        ResultBean result = new ResultBean(0, "查詢成功", totalRows, entities);

        return result;

    }
}

 

 

需要源碼的朋友留下郵箱:)

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章