天天看點

EasyUI+JavaWeb獎助學金管理系統[17]-問題回報功能開發

1. 本章任務

前期已完成以下功能開發:

登入

背景管理首頁面

獎助學金項目管理

機構管理

人員管理

角色權限管理

今天來開發問題回報功能。問題回報是指學生提出回報問題,并且檢視回報問題的答複資訊(管理者負責答複問題)。

此處涉及兩個頁面:學生問題回報頁面questionAsk.html,管理者問題答複頁面questionReply.html。

2. 添加菜單

首先在WebContent目錄下添加兩個頁面questionAsk.html和questionReply.html。

然後在Menu表添加兩個菜單:

INSERT INTO `scholar-system`.`menu`(`id`, `name`, `path`) VALUES (5, '問題回報', 'questionAsk.html');

INSERT INTO `scholar-system`.`menu`(`id`, `name`, `path`) VALUES (6, '問題答複', 'questionReply.html');

1

2

最後還需要通過管理者的權限管理頁面,為管理者角色添加問題答複權限,為學生角色添加問題回報權限。

3. 學生問題回報開發

首先學生需要能分頁檢視自己回報的問題,此處就是一個普通的分頁查詢,需要注意的一點是在查詢時需要攜帶目前登入使用者的資訊,因為學生隻能檢視自己回報的問題。然後學生可以送出問題,在問題回報表中新增一條記錄即可。

修改questionAsk.html代碼:

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
        <link rel="stylesheet" type="text/css" href="easyui/themes/default/easyui.css">
        <link rel="stylesheet" type="text/css" href="easyui/themes/icon.css">
        <link rel="stylesheet" type="text/css" href="css/main.css">
        <script type="text/javascript" src="easyui/jquery.min.js"></script>
        <script type="text/javascript" src="easyui/jquery.easyui.min.js"></script>
        <script type="text/javascript" src="easyui/locale/easyui-lang-zh_CN.js"></script>
    </head>

    <body>
        <div class="tool-box">
            <a id="btn" onclick="btnAddClick()" href="#" class="easyui-linkbutton" data-options="iconCls:'icon-add'">回報問題</a>
        </div>
        <table id="mainTable" title="已回報問題清單" class="easyui-datagrid" url="CoreServlet?method=getQuestionPage" pagination="true"
         singleSelect="true" fitColumns="true">
            <thead>
                <tr>
                    <th data-options="field:'id',width:50">序号</th>
                    <th data-options="field:'userName',width:50">回報人</th>
                    <th data-options="field:'departName',width:50">所屬班級</th>
                    <th data-options="field:'content',width:100">問題内容</th>
                    <th data-options="field:'reply',width:100">問題答複</th>
                </tr>
            </thead>
        </table>
        <!-- 新增彈窗 -->
        <div id="dialog-add" class="easyui-dialog" title="問題回報" data-options="iconCls:'icon-ok',closed:'true'" style="width: 600px; height: 400px; padding: 10px">
            <table>
                <tr>
                    <td>回報内容:</td>
                    <td><input id="add-content" class="easyui-textbox" style="width: 200px"></td>
                </tr>
                <tr>
                    <td></td>
                    <td><a id="btn" onclick="btnAddSubmit()" href="#" class="easyui-linkbutton">儲存</a></td>
                </tr>
            </table>
        </div>
    </body>
    <script>
        // 新增點選
        function btnAddClick() {
            $('#dialog-add').dialog('open');
        }
        // 新增儲存
        function btnAddSubmit() {
            var param = {
                content: $("#add-content").val()
            }
            $.ajax({
                url: "CoreServlet?method=questionSubmit",
                type: "post",
                dataType: "json",
                data: param,
                success: function(res) {
                    console.log(res);
                    if (res.code == 0) { //成功則重新整理表格
                        $('#mainTable').datagrid('reload');
                        $('#dialog-add').dialog('close');
                    } else { //提示錯誤資訊
                        alert(res.msg);
                    }
                },
            });
        }
    </script>
</html>
修改CoreServlet:

// 擷取問題清單
        else if (method.equals("getQuestionPage")) {
            if (loginUser.getRole().equals("schoolmaster")) {// 管理者檢視全部問題
                QuestionDao questionDao = new QuestionDao();
                total = questionDao.getCount();
                result.setTotal(total);
                result.setRows(questionDao.getPage(page, rows));
            } else if (loginUser.getRole().equals("student")) {// 學生檢視自己送出的問題
                QuestionDao questionDao = new QuestionDao();
                total = questionDao.getCount(loginUser.getId());
                result.setTotal(total);
                result.setRows(questionDao.getPage(page, rows, loginUser.getId()));
            }
        }
        // 送出問題
        else if (method.equals("questionSubmit")) {
            // 擷取機構資訊
            DepartDao departDao = new DepartDao();
            Depart depart = departDao.getById(loginUser.getDepartId());
            // 組裝問題資訊
            Question question = new Question();
            question.setUserId(loginUser.getId());
            question.setUserName(loginUser.getUserName());
            question.setDepartId(depart.getId());
            question.setDepartName(depart.getName());
            question.setContent(request.getParameter("content"));
            // 插入資料庫
            QuestionDao questionDao = new QuestionDao();
            questionDao.insert(question);
            result.setCode(0);
            result.setMsg("操作成功");
        }

修改QuestionDao:

    /**
     * 擷取數量
     */
    public int getCount() throws Exception {
        Connection conn = ConnectionUtils.getConnection();
        String sql = "select count(id) from question ";
        QueryRunner runner = new QueryRunner();
        Number number = (Number) runner.query(conn, sql, new ScalarHandler());
        int value = number.intValue();
        ConnectionUtils.releaseConnection(conn);
        return value;
    }

    /**
     * 分頁查詢
     */
    public List<Question> getPage(int page, int rows) throws Exception {
        Connection conn = ConnectionUtils.getConnection();
        String sql = "select * from question limit ?,?";
        QueryRunner runner = new QueryRunner();
        Object[] params = { (page - 1) * rows };
        List<Question> questions = runner.query(conn, sql, new BeanListHandler<Question>(Question.class), params);
        ConnectionUtils.releaseConnection(conn);
        return questions;
    }

    /**
     * 擷取數量(通過userId)
     */
    public int getCount(String userId) throws Exception {
        Connection conn = ConnectionUtils.getConnection();
        String sql = "select count(id) from question where userId=?";
        QueryRunner runner = new QueryRunner();
        Object[] params = { userId };
        Number number = (Number) runner.query(conn, sql, new ScalarHandler(), params);
        int value = number.intValue();
        ConnectionUtils.releaseConnection(conn);
        return value;
    }

    /**
     * 分頁查詢(通過userId)
     */
    public List<Question> getPage(int page, int rows, String userId) throws Exception {
        Connection conn = ConnectionUtils.getConnection();
        String sql = "select * from question where userId=? limit ?,?";
        QueryRunner runner = new QueryRunner();
        Object[] params = { userId,(page - 1) * rows, rows };
        List<Question> questions = runner.query(conn, sql, new BeanListHandler<Question>(Question.class), params);
        ConnectionUtils.releaseConnection(conn);
        return questions;
    }      

4. 管理者問題答複功能開發

其實管理者功能答複,首先是顯示所有問題的分頁清單,然後就是可以編輯其中一個問題的reply屬性。

沒有什麼新的功能,感興趣的可以直接去看源碼。

5. 總結

問題回報和問題答複其實就是一個變通版本的分頁查詢、新增、修改功能。需要根據登入人員的角色查詢/處理不同的資料庫資料而已。