基於easyUI實現許可權管理系統(四)——用戶管理

来源:http://www.cnblogs.com/Mr-kevin/archive/2017/03/25/6618362.html
-Advertisement-
Play Games

此文章是基於 EasyUI+Knockout實現經典表單的查看、編輯 一. 準備工作 1. 點擊此下載相關文件,並把文件放到 ims 工程對應的文件夾下 二. 相關文件介紹 1. user.jsp:用戶管理界面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 ...


此文章是基於

    EasyUI+Knockout實現經典表單的查看、編輯

 

一. 準備工作

  1. 點擊此下載相關文件,並把文件放到 ims 工程對應的文件夾下

 

二. 相關文件介紹

  1. user.jsp:用戶管理界面

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
 <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>用戶管理</title>
    <%@ include file="/common/head.jsp"%>
    <style type="text/css">
        div#navigation{background:white}
        div#wrapper{float:right;width:100%;margin-left:-185px}
        div#content{margin-left:185px}
        div#navigation{float:left;width:180px}
        .datagrid-cell a{color:black;}
        .datagrid-cell a:hover{color:red;}
    </style>
 </head>
 <body>
     <div id="container">
        <div id="wrapper">
            <div id="content">
                <div class="toolbar">
                    <a href="#" plain="true" class="easyui-linkbutton" icon="icon-arrow_refresh" title="刷新" data-bind="click:refreshClick">刷新</a>
                    <a href="#" plain="true" class="easyui-linkbutton" icon="icon-add" title="新增" data-bind="click:addClick">新增</a>
                    <a href="#" plain="true" class="easyui-linkbutton" icon="icon-edit" data-bind="click:editClick" title="編輯">編輯</a>
                    <a href="#" plain="true" class="easyui-linkbutton" icon="icon-cross" title="刪除" data-bind="click:deleteClick">刪除</a>
                    <a href="#" plain="true" class="easyui-linkbutton" icon="icon-save" data-bind="click:saveClick" title="保存">保存</a>
                    <a href="#" plain="true" class="easyui-linkbutton" icon="icon-key" data-bind="click:passwordClick" title="重置密碼">重置密碼</a>
                </div>
                
                <table id="gridlist" data-bind="datagrid:grid">
                     <thead>  
                        <tr>  
                            <th field="id"  hidden="true"></th>
                            <th field="userCode"            sortable="true" align="left"    width="70"  editor="{type:'validatebox',options:{required:true}}"  >用戶編碼   </th>  
                            <th field="userName"            sortable="true" align="left"    width="80"  editor="{type:'validatebox',options:{required:true}}"  >用戶名稱     </th>  
                            <th field="emailAddr"            sortable="true" align="left"    width="80"  editor="{type:'validatebox',options:{required:true}}"  >郵箱地址     </th>
                            <th field="phoneNum"            sortable="true" align="left"    width="80"  editor="{type:'validatebox',options:{required:true}}"  >聯繫號碼     </th>
                            <th field="description"         sortable="true" align="left"    width="180" editor="text"  >描述說明   </th>  
                            <th field="isEnable"            sortable="true" align="center"    width="70" formatter="com.formatCheckbox"  editor="{type:'checkbox',options:{on:1,off:0}}">是否啟用   </th>  
                            <th field="loginCount"          sortable="true" align="right"    width="60" >登陸次數       </th>  
                            <th field="lastLoginDate"       sortable="true" align="center"    width="120" formatter="com.formatTime"  >最後登陸時間   </th>   
                            <th field="permit" align="center"    width="270" formatter="formatterButton"> 操作     </th> 
                        </tr>                            
                    </thead>      
                </table> 
            </div>
        </div>
        
        <div id="navigation">
            <div title="組織機構" style="width: 180px;" class="easyui-panel" data-options="title: '組織機構', iconCls: 'icon-org', height: $(window).height() - 4 ">
                <ul data-bind="easyuiTree:tree"></ul>
            </div>
        </div>
    </div>
    
    <script type="text/html" id="setorganize-template">
        <div style="margin:5px;">
            <div style="border-bottom:1px solid #CCC; margin-bottom:5px;">
                <span id="role_name" class="icon32 icon-user-edit32" style="padding-left:48px;font-weight:bold; font-size:14px;color:#666;" data-bind="text:userName">劉會勝</span> 
            </div>
            <div> 所屬機構:</div>
            <div class="listview" style="height:315px;overflow:auto;"></div>
        </div>
        <div style="text-align:center;">
            <a class="easyui-linkbutton" data-options="iconCls:'icon-ok'" data-bind="click:confirmClick" href="javascript:void(0)"  >確定</a>  
            <a class="easyui-linkbutton" data-options="iconCls:'icon-cancel'" data-bind="click:cancelClick" href="javascript:void(0)">取消</a> 
        </div>
    </script>
    
    <script type="text/html" id="setrole-template">
        <style type="text/css">
            .listview{ margin:0 !important;}
            .listview li{width:100px !important;background-color:skyblue !important;float:left;margin:3px;}
        </style>
        <div style="margin:5px;height:370px;overflow:auto;"  >
            <div style="border-bottom:1px solid #CCC; margin-bottom:5px;">
                <span class="icon32 icon-user-edit32" style="padding-left:48px;font-weight:bold; font-size:14px;color:#666;" data-bind="text:userName">劉會勝</span> 
            </div>
            <div> 擁有角色(請點擊勾選):</div>
            <div class="metrouicss">
                <ul class="listview"></ul>
            </div>
        </div>
        <div style="text-align:center;">
            <a class="easyui-linkbutton" data-options="iconCls:'icon-ok'" data-bind="click:confirmClick" href="javascript:void(0)"  >確定</a>  
            <a class="easyui-linkbutton" data-options="iconCls:'icon-cancel'" data-bind="click:cancelClick" href="javascript:void(0)">取消</a> 
        </div>
    </script>
            
    <%@ include file="/common/foot.jsp"%>
    <script src="viewModel/sys/user.js"></script>
    <script src="viewModel/sys/organizeTreeGraph.js"></script>
    <script type="text/javascript">
           using(['validatebox','messager','dialog']);
        ko.bindingViewModel(new viewModel());
        var formatterButton = function (value, row) {
            var dataStr = JSON.stringify({id:row.id,userName:row.userName,_isnew:row._isnew});
            var html = '<a href="javascript:;" onclick=\'setOrganize(' + dataStr + ')\'><span class="icon icon-org">&nbsp;</span>[設置機構]</a>';
            html += '<a href="javascript:;" onclick=\'setRole(' + dataStr + ')\' style="margin-left:10px"><span class="icon icon-group">&nbsp;</span>[設置角色]</a>';
            return html;
        };
    </script>
 </body>
</html>
View Code

  

  2. user.js:實現用戶管理功能、列表,設置機構、設置角色功能

function viewModel() {
    var self = this;
    
    this.refreshClick=function(){
        window.location.reload();
    };
    
    this.addClick=function(){
        self.gridEdit.addnew({});
    };
    
    this.editClick=function(){
        var row = self.grid.datagrid('getSelected');
        var index = self.grid.datagrid('getRowIndex',row);
        self.gridEdit.begin(index,row);
    };
    
    this.deleteClick=function(){
        self.gridEdit.deleterow();
    };
    
    this.saveClick = function () {
        self.gridEdit.ended();
        var post = {};
        post.list = self.gridEdit.getChanges(['id', 'userCode', 'userName', 'emailAddr', 'phoneNum', 'materialCode', 'description', 'isEnable']);
        if (self.gridEdit.ended() && post.list._changed) {
            com.ajax({
                url: rootPath+'/sys/user!edit.do',
                data: ko.toJSON(post),
                success: function (d) {
                    com.message('success', '保存成功!');
                    self.gridEdit.accept();
                }
            });
        }
    };
    
    this.passwordClick = function () {
        var row = self.grid.datagrid('getSelected');
        if (!row) return com.message('warning', '請先選擇一個用戶!');
        com.message('confirm', '確定要把選中用戶的密碼重置為<span style="color:red">用戶名</span>嗎?', function (b) {
            if (b) {
                com.ajax({
                    type: 'POST',
                    url: rootPath+'/sys/user!postResetPassword.do?userId=' + row.id,
                    success: function () {
                        com.message('success', '密碼已重置成功!');
                    }
                });
            }
        });
    };
    
    this.grid = {
        size: { w: 189, h: 40 },
        url: rootPath+'/sys/user!list.do',
        queryParams: ko.observable(),
        pagination: true,
        customLoad: false
    };
    this.gridEdit = new com.editGridViewModel(this.grid);
    this.grid.onDblClickRow = self.gridEdit.begin;
    this.grid.onClickRow = self.gridEdit.ended;
    this.grid.OnAfterCreateEditor =function(editors,row){
        if (row._isnew == undefined ) 
            com.readOnlyHandler('input')(editors.userCode.target,true);
    };
    
    this.tree = {
        method:'GET',
        url:rootPath+'/sys/organize!get.do',
        loadFilter:function(d){
            var filter = utils.filterProperties(d,['id','organizeName as text','parentId as pid']);
            return utils.toTreeData(filter,'id','pid','children');
        },
        onSelect:function(node){
            self.grid.queryParams({organizeId:node.id});
        }
    };
}

var setOrganize = function (row) {
    if (row._isnew) 
        return com.message('warning', '請先保存再設置機構!');
  
    com.dialog({
        title: "設置機構",
        width: 600,
        height: 450,
        html:"#setorganize-template",
        viewModel:function(w){
            var that = this;
            this.userName = ko.observable(row.userName);
            this.graph = ko.observable();
            com.ajax({
                type: 'GET',
                url: rootPath+'/sys/organize!getOrganizeWithUserCheck.do?userId=' + row.id,
                success: function (d) {
                    var ul = w.find(".listview");
                    var treeData = utils.toTreeData(d, "id", "parentId", "children");
                    var tb = renderTreeGraph(treeData)[0].outerHTML;  
                    ul.append(tb);
                    ul.find(".td-node").each(function () {
                        var checked = $(this).data("node").checked;
                        $(this).prepend(com.formatCheckbox(checked)).css({ "background-color": "#f6f6ff", "color": checked=='0' ? "" : "#FF0000" });
                    }).click(function () {
                        var $this = $(this), checked = $this.find("img").attr("value");
                        var img2 = $(com.formatCheckbox(checked=='true'?'0':'1'));
                        $this.find("img").attr("src", img2.attr("src")).attr("value", img2.attr("value"));
                        $this.css({ "background-color": "#f6f6ff", "color": checked=='true' ? "" : "#FF0000" });
                    });                    
                }
            });

            this.confirmClick = function () {
                var organizes = [];
                w.find("img[value=true]").each(function () {
                    organizes.push({organizeId:$(this).parent().data("node").id});
                });
                com.ajax({
                    url: rootPath+'/sys/user!editUserOrganizes.do?userId=' + row.id,
                    data: ko.toJSON(organizes),
                    success: function (d) {
                        that.cancelClick();
                        com.message('success', '保存成功!');
                    }
                });
            };
            this.cancelClick = function () {
                w.dialog('close');
            };
        }
    });
};

var setRole = function (row) {
    if (row._isnew)
        return com.message('warning', '請先保存再設置角色!');

    com.dialog({
        title: "設置角色",
        width: 600,
        height: 450,
        html: "#setrole-template",
        viewModel: function (w) {
            var thisRole = this;
            this.userName = ko.observable(row.userName);
            com.loadCss(rootPath+'/content/css/metro/css/modern.css', parent.document);
            com.ajax({
                type: 'GET',
                url: rootPath+'/sys/role!getRoleWithUserCheck.do?userId=' + row.id,
                success: function (d) {
                    var ul = w.find(".listview");
                    for (var i in d)
                        ul.append(utils.formatString('<li role="{0}" class="{2}">{1}</li>',d[i].id,d[i].roleName,d[i].checked=='1'?'selected':''));
                    ul.find("li").click(function () {
                        if ($(this).hasClass('selected'))
                            $(this).removeClass('selected');
                        else
                            $(this).addClass('selected');
                    });
                }
            });
            this.confirmClick = function () {
                var roles = [];
                w.find("li.selected").each(function () {
                    roles.push({ roleId: $(this).attr('role') });
                });
                com.ajax({
                    url: rootPath+'/sys/user!editUserRoles.do?userId=' + row.id,
                  

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 作為一個學習NHibernate的新手,經常會遇到各種各樣的奇葩問題,其實這些問題的出現恰恰說明瞭我們技術的不足,將這些問題記錄下來加以總結相信對我們進一步的學習有很大的幫助。 在將封裝好的數據插入到資料庫里,運行到提交事務的時候,出現了“OracleParameterCollection 的 Co ...
  • svn 鎖的處理: 問題: 1:當用戶在work copy1 中把某個文件或者文件夾鎖住後,刪除了這個工作區,重新取下來work copy2,再操作該文件的時候就報錯說,該文件已經被鎖住,必須先解鎖,但是之前的工作區已經被刪除,無法解鎖; 2:當某用戶 鎖了一個文件或文件夾後,離職了,機器上交了,後... ...
  • 編程時經常需要檢查一系列條件,並據此決定採取什麼措施。在Python中,if語句讓我們能夠檢查程式的當前狀態,並據此採取相應的措施。 5.1 一個簡單的示例 下麵是一個簡短的示例,演示瞭如何使用if語句來正確地處理特殊情形。假設我們有一個汽車列表,並想將其中每輛汽車的名稱列印出來。對於大多數汽車,都 ...
  • [1]概述 [2]配置 [3]基本語法 [4]變數 [5]變數調節器 [6]內置函數 ...
  • 今天想測試java的System的類,沒想到居然出錯了。在同一個包下的java文件System全錯,而其他包中的System沒錯。上網查了下資料,原來我是重定義了System類,覆蓋了原來的System類導致原System類中的屬性和方法不能使用。 從圖中可以看到我定義的公有類是System,覆蓋原 ...
  • 字元串 在java中,字元串被作為String類型的對象處理。String類位於java.lang包中,預設情況下,該包被自動導入所有的程式。 創建String對象的方法: String對象創建後不能被修改,是不可變的,所謂的修改其實是創建了新的對象,所指向的記憶體空間不同。 如果需要一個可以改變的字 ...
  • 一、準備所需的jar包 1.1所需jar包 1.Spring框架jar包 2.Mybatis框架jar包 3.Spring的AOP事務jar包 4.Mybatis整合Spring中間件jar包 5.aspectj框架jar包 6.aop聯盟jar包 7.資料庫驅動jar包 8.數據源c3p0所需ja ...
  • 額,,,, 前幾天,剛開始玩力熱實驗, 卻沒想到,平時愛玩的實驗誤差分析的不確定度竟然計算那麼複雜,連夜寫了一段代碼, (大佬勿噴,物理專業的小白剛自學,應該也沒人看。。。) 為了以後我用著方便,都寫成了函數塊,接下來會隨著實驗作業和Java的學習,繼續完善 (現在,不明白的是,兩組數,在定義的函數 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...