zoukankan      html  css  js  c++  java
  • ExtJS+DWR+Spring+Hibernate开发HRMS(4)

    现在我们就来看看我们的页面设计部分。首先是登陆页面logon.jsp:

    <%@ page language="java" pageEncoding="utf-8"%>

    <html>

           <head>

                  <title>HR Manager Project</title>

                  <meta http-equiv="pragma" content="no-cache">

                  <meta http-equiv="cache-control" content="no-cache">

                  <link rel="stylesheet" type="text/css" href="resources/css/ext-all.css" />

                  <link rel="stylesheet" type="text/css" href="resources/css/common.css" />

                  <script type="text/javascript" src="resources/js/ext-base.js"></script>

                  <script type="text/javascript" src="resources/js/ext-all.js"></script>

                  <script type="text/javascript">

                         Ext.onReady(function(){

                                Ext.get("logon").on("click", function(){

                                       if(Ext.getDom("userName").value==""){

                                              Ext.MessageBox.alert('提示', '请输入用户名!',function(){

                                                     Ext.get("userName").focus();

                                              });

                                              return;

                                       }

                                       if(Ext.getDom("passWord").value==""){

                                              Ext.MessageBox.alert('提示', '请输入密码!',function(){

                                                     Ext.get("passWord").focus();

                                              });

                                              return;

                                       }

                                      

                                       var msg = Ext.get('msg');

                                       msg.load({

                                              url: 'logon.hr',

                                              params: 'userName='+Ext.getDom("userName").value+'&passWord='+Ext.getDom("passWord").value,

                                              text: '正在登陆...',

                                              callback: function(oElement) {

                                                     if(oElement.dom.innerHTML=="success"){

                                                            oElement.dom.innerHTML="<font color='green'>验证成功,,请稍候...</font>";

                                                            window.setTimeout("window.location='index.jsp'", 200);

                                                     }

                               }

                                       });

                                       msg.show();

                             });

                            

                             Ext.get("close").on("click",function(){

                             Ext.MessageBox.confirm('提示', '你确定要退出系统么?', function(button){

                                     if(button=='yes'){

                                            window.close();

                                     }

                             });

                             });

                            

                         });

                  </script>

           </head>

           <body class="logon-body">

                  <table class="logon-body-table">

                         <tr class="logon-body-table-tr">

                                <td class="logon-body-table-tr-td">

                                       <div class="logon-body-table-tr-td-div">

                                              <div class="logon-body-table-tr-td-div-div">

                                                     用户名&nbsp;:&nbsp;

                                                     <input type="text" id="userName" size="20" />

                                              </div>

                                              <div class="logon-body-table-tr-td-div-div">

                                                     密 码&nbsp;:&nbsp;

                                                     <input type="password" id="passWord" size="22" />

                                              </div>

                                              <div align="right" class="logon-body-table-tr-td-div-div">

                                                     <button id="logon">

                                                            登 陆

                                                     </button>

                                                     &nbsp;&nbsp;&nbsp;&nbsp;

                                                     <button id="close">

                                                            关 闭

                                                     </button>

                                                     &nbsp;&nbsp;&nbsp;&nbsp;

                                              </div>

                                              <div id="msg" align="right"

                                                     class="logon-body-table-tr-td-div-message">

                                              </div>

                                       </div>

                                </td>

                         </tr>

                  </table>

           </body>

    </html>

    下面是主页面index.jsp,主要用ExtJs构建,登陆成功后就可以进入,主要分为3个模块,员工管理,机构管理和用户管理。在员工管理里面,我们实现了对员工的CRUD并且分页显示员工信息:

    <%@ page language="java" pageEncoding="utf-8"%>

    <html>

           <head>

                  <title>HR Manager</title>

                  <meta http-equiv="pragma" content="no-cache">

                  <meta http-equiv="cache-control" content="no-cache">

                  <link rel="stylesheet" type="text/css" href="resources/css/ext-all.css" />

                  <link rel="stylesheet" type="text/css" href="resources/css/common.css" />

                  <script type="text/javascript" src="resources/js/ext-base.js"></script>

                  <script type="text/javascript" src="resources/js/ext-all.js"></script>

                  <style type="text/css">

    .x-panel-body p {

           margin: 5px;

    }

    .x-column-layout-ct .x-panel {

           margin-bottom: 5px;

    }

    .x-column-layout-ct .x-panel-dd-spacer {

           margin-bottom: 5px;

    }

    .user {

           background-image: url(resources/icons/user.gif) !important;

    }

    .unit {

           background-image: url(resources/icons/application_view_list.png)

                  !important;

    }

    .settings {

           background-image: url(resources/icons/cog.png) !important;

    }

    .tabs {

           background-image: url(resources/icons/tabs.gif ) !important;

    }

    .munuList {

           list-style: square;

           padding-left: 30px;

           margin-top: 10px;

           color: #000000;

           font-size: 12px;

           text-decoration: underline;

           cursor: hand;

    }

    #main-panel td {

           padding: 5px;

    }

    </style>

           </head>

           <body>

                  <script type="text/javascript">

                      //create main tabpanel

                      var contentPanel=new Ext.TabPanel({

                   id:"tabPanel",

                       region:'center',

                       deferredRender:false,

                       activeTab:0,

                       iconCls: 'tabs',

                       items:[{

                           contentEl:'center',

                           title: '主页',

                           autoScroll:true

                       }]

                    });

               Ext.onReady(function(){

                         Ext.state.Manager.setProvider(new Ext.state.CookieProvider());

                        

                        

                         //init main page framework

                         var viewport = new Ext.Viewport({

                              layout:'border',

                              items:[{

                                        region: 'north',

                                        html: '<img src="resources/images/head.jpg" >',

                                         split:true,

                               height: 90,

                        minSize: 100,

                        maxSize: 200,

                        collapsible: true,

                        title:'HR Manager Project',

                        margin:'0 0 0 0'

                                        //border: false,

                                        //layout:"absolute"

                                    },{

                                  region:'west',

                                  id:'west-panel',

                                  title:'菜单栏',

                                  split:true,

                                  200,

                                  minSize: 175,

                                  maxSize: 400,

                                  collapsible: true,

                                  margins:'0 0 5 5',

                                  cmargins:'0 5 5 5',

                                  layout:'accordion',

                                  layoutConfig:{

                                      animate:true

                                  },

                                  items: [{

                                      title:'人员管理',

                                      html: Ext.getDom('userMenus').innerHTML,

                                      autoScroll:true,

                                      border:false,

                                      iconCls:'user'

                                  },{

                                      title:'机构管理',

                                      html: Ext.getDom('unitMenus').innerHTML,

                                      border:false,

                                      autoScroll:true,

                                      iconCls:'unit'

                                  },{

                                      title:'系统设置',

                                      html: Ext.getDom('settingMenus').innerHTML,

                                      border:false,

                                      autoScroll:true,

                                      iconCls:'settings'

                                  }]

                              },contentPanel]

                          });

                         

                          //init main page tables

                          var panel = new Ext.Panel({

                           id:'main-panel',

                           baseCls:'x-plain',

                           renderTo: Ext.get("center"),

                           layout:'table',

                           layoutConfig: {columns:2},

                           defaults: {frame:true, 395, height: 300},

                           items:[{

                               title:'公告信息',

                               colspan:2,

                               collapsible:true,

                               800,

                               contentEl:'afficheDiv'

                           },{

                               title:'人事信息',

                               contentEl:'personDiv'

                              

                           },{

                               title:'机构信息',

                               contentEl:'unitDiv'

                           }]

                       });

                          //clear temp elements.

                             Ext.getDom("menus").innerHTML="";

                      });

                      //定义菜单导航函数  

    function onClickMenuItem(node)

    {

    var n = contentPanel.getComponent(node.id);

    if (!n) { ////判断是否已经打开该面板

    n = contentPanel.add({

    'id':node.id,

    'title':node.innerHTML,

    closable:true,

    autoLoad:{url:'tabFrame.jsp?url='+node.href, callback: this.initSearch, scope: this, scripts:true} //通过autoLoad属性载入目标页,如果要用到脚本,必须加上scripts属性

    });

    }

    contentPanel.setActiveTab(n);

    }           

                  </script>

                  <div id="menus">

                         <div id="userMenus">

                                <ul class="munuList">

                                       <li>

                                              <span id="person" href="person/default.jsp"

                                                     onclick="onClickMenuItem(this)">人员信息</span>

                                       </li>

                                </ul>

                         </div>

                         <div id="unitMenus">

                                <ul class="munuList">

                                       <li>

                                              <span id="unit" href="unit/default.jsp"

                                                     onclick="onClickMenuItem(this)">机构信息</span>

                                       </li>

                                </ul>

                         </div>

                         <div id="settingMenus">

                                <ul class="munuList">

                                       <li>

                                              <span id="userManager" href="system/default.jsp"

                                                     onclick="onClickMenuItem(this)">用户管理</span>

                                       </li>

                                </ul>

                         </div>

                  </div>

                  <div id="center">

                  </div>

                  <div id="afficheDiv">

                         <p>

                                尊敬的

                                <font color=green><B>${user.userName}</B> </font> 用户,欢迎您使用人力资源管理系统.

                         </p>

                         <p>

                                添加公告信息...

                         </p>

                  </div>

                  <div id="personDiv">

                         <p>

                                添加人事信息...

                         </p>

                  </div>

                  <div id="unitDiv">

                         <p>

                                添加机构信息...

                         </p>

                  </div>

           </body>

    </html>

    上面是我们整个应用的主要视图界面,当我们增加一个模块的操作时,只是在主显示区增加一个面板,里面会自动加载tabFrame.jsp:

    <%@ page language="java" pageEncoding="utf-8"%>

    <IFRAME SRC="<%=request.getParameter("url")%>" width="100%" height="100%" frameborder="0"></IFRAME>

    大家看到,里面只有一个公共的浮动框架,用来容纳真正的页面资源。以person为例,当点击左边菜单栏里的人员管理,真正出现在右边选项面板上的页面资源是person/default.jsp:

    <%@ page language="java"  pageEncoding="utf-8"%>

    <html>

           <head>

                  <title>HR Manager Project - base on SSH Framework</title>

                  <meta http-equiv="pragma" content="no-cache">

                  <meta http-equiv="cache-control" content="no-cache">

                  <link rel="stylesheet" type="text/css" href="../resources/css/ext-all.css" />

                 

                  <script type="text/javascript" src="../dwr/engine.js"></script>

                  <script type="text/javascript" src="../dwr/util.js"></script>

                  <script type="text/javascript" src="../dwr/interface/personController.js"></script>

                  <script type="text/javascript" src="../dwr/interface/unitController.js"></script>

                 

                  <script type="text/javascript" src="../resources/js/ext-base.js"></script>

                  <script type="text/javascript" src="../resources/js/ext-all.js"></script>

                  <script type="text/javascript" src="../resources/js/person_init.js"></script>

                 

                  <style type="text/css">

                         body {

                       margin:5px;

                       font-size:12px;

                   }

                         body .x-panel {

                       margin:5px;

                   }

                         body .x-panel {

                       margin-bottom:20px;

                   }

                   .icon-grid {

                       background-image:url(../resources/icons/grid.png) !important;

                   }

                   #button-grid .x-panel-body {

                       border:1px solid #99bbe8;

                       border-top:0 none;

                   }

                   .add {

                       background-image:url(../resources/icons/add.gif) !important;

                   }

                   .option {

                       background-image:url(../resources/icons/plugin.gif) !important;

                   }

                   .remove {

                       background-image:url(../resources/icons/delete.gif) !important;

                   }

                   .save {

                       background-image:url(../resources/icons/save.gif) !important;

                   }

                  </style>

                 

                  <script type="text/javascript">

                  </script>

           </head>

           <body>

                  <div id="add-window" class="x-hidden">

                      <div class="x-window-header">添加人员信息</div>

                      <div id="content"></div>

                  </div>

           </body>

    </html>

    里面用到很多js,其中有DWR和ExtJS两个Ajax库的。还有我们自己写的整个模块的核心js文件为/resources/js/person_init.js,在这里提醒下大家,所有的文件引用一定要注意路径。person_init.js完整代码如下:

    var ds;

    var grid;

    var form;

    var win;

    Ext.onReady(function() {

                         // get All unit Name for comboBox.

                         unitController.getRecords(function(data) {

                                              if (data != null) {

                                                     var list = [];

                                                     for (var i = 0; i < data.length; i++) {

                                                            list[i] = [data[i].name, data[i].name,

                                                                          data[i].description];

                                                     }

                                                     Ext.grid.unitComboBoxItems = list;

                                                     initData();

                                              }

                                       });

                  });

    function initData() {

           ds = new Ext.data.Store({

                                // proxy: new Ext.data.MemoryProxy(jsondata),

                                proxy : new Ext.data.HttpProxy({

                                                     url : '../person.hr?action=list'

                                              }),

                                reader : new Ext.data.JsonReader({

                                                     totalProperty : 'totalProperty',

                                                     root : 'root'

                                              }, [{

                                                                   name : 'id'

                                                            }, {

                                                                   name : 'name'

                                                            }, {

                                                                   name : 'age'

                                                            }, {

                                                                   name : 'gender'

                                                            }, {

                                                                   name : 'unitName'

                                                            }, {

                                                                   name : 'telephone'

                                                            }, {

                                                                   name : 'address'

                                                            }])

                         });

           ds.load({

                                params : {

                                       start : 0,

                                       limit : 10

                                }

                         });

           initGrid();

    }

    function getInsertForm() {

           if(!form){

                 

    form = new Ext.FormPanel({

                                labelWidth : 75,

                                url : '../person.hr',

                                frame : true,

                                bodyStyle : 'padding:5px 5px 0',

                                width : 340,

                                defaults : {

                                       width : 230

                                },

                                defaultType : 'textfield',

                                standardSubmit : true,

                                items : [{

                                                     fieldLabel : '姓名',

                                                     name : 'name',

                                                     allowBlank : false

                                              }, {

                                                     fieldLabel : '年龄',

                                                     name : 'age'

                                              }, new Ext.form.ComboBox({

                                                                   fieldLabel : '性别',

                                                                   hiddenName : 'gender',

                                                                   store : new Ext.data.SimpleStore({

                                                                                        fields : ['abbr', 'state'],

                                                                                        data : [['男', '男'], ['女', '女']]

                                                                                 }),

                                                                   valueField : 'abbr',

                                                                   displayField : 'state',

                                                                   mode : 'local',

                                                                   triggerAction : 'all',

                                                                   emptyText : '请选择一个性别',

                                                                   forceSelection : true,

                                                                   selectOnFocus : true,

                                                                   editable : false

                                                            }), new Ext.form.ComboBox({

                                                                   fieldLabel : '机构名称',

                                                                   hiddenName : 'unitName',

                                                                   store : new Ext.data.SimpleStore({

                                                                                        fields : ['abbr', 'state'],

                                                                                        data : Ext.grid.unitComboBoxItems

                                                                                 }),

                                                                   valueField : 'abbr',

                                                                   displayField : 'state',

                                                                   typeAhead : true,

                                                                   mode : 'local',

                                                                   triggerAction : 'all',

                                                                   emptyText : '请选择一个单位名',

                                                                   selectOnFocus : true,

                                                                   editable : false

                                                            }), {

                                                     fieldLabel : '电话',

                                                     name : 'telephone'

                                              }, {

                                                     fieldLabel : '地址',

                                                     name : 'address'

                                              }]

                         });

           }

           return form;

    }

    function getUpdateForm() {

           win.title = '编辑员工信息';

           if(!form){

           form =  new Ext.FormPanel({

                                labelWidth : 75,

                                url : '../person.hr',

                                frame : true,

                                bodyStyle : 'padding:5px 5px 0',

                                width : 340,

                                defaults : {

                                       width : 230

                                },

                                defaultType : 'textfield',

                                standardSubmit : true,

                                items : [{

                                                     fieldLabel : 'id',

                                                     name : 'id',

                                                     readOnly : true

                                              }, {

                                                     fieldLabel : '姓名',

                                                     name : 'name',

                                                     allowBlank : false

                                              }, {

                                                     fieldLabel : '年龄',

                                                     name : 'age'

                                              }, new Ext.form.ComboBox({

                                                                   fieldLabel : '性别',

                                                                   hiddenName : 'gender',

                                                                   store : new Ext.data.SimpleStore({

                                                                                        fields : ['abbr', 'state'],

                                                                                        data : [['男', '男'],

                                                                                                      ['女', '女']]

                                                                                 }),

                                                                   valueField : 'abbr',

                                                                   displayField : 'state',

                                                                   typeAhead : true,

                                                                   mode : 'local',

                                                                   triggerAction : 'all',

                                                                   emptyText : '请选择性别',

                                                                   forceSelection : true,

                                                                   selectOnFocus : true,

                                                                   editable : false

                                                            }), new Ext.form.ComboBox({

                                                                   fieldLabel : '机构名称',

                                                                   hiddenName : 'unitName',

                                                                   store : new Ext.data.SimpleStore({

                                                                                        fields : ['abbr', 'state'],

                                                                                        data : Ext.grid.unitComboBoxItems

                                                                                 }),

                                                                   valueField : 'abbr',

                                                                   displayField : 'state',

                                                                   typeAhead : true,

                                                                   mode : 'local',

                                                                   triggerAction : 'all',

                                                                   emptyText : '请选择机构.',

                                                                   selectOnFocus : true,

                                                                   editable : false

                                                            }), {

                                                     fieldLabel : '电话',

                                                     name : 'telephone'

                                              }, {

                                                     fieldLabel : '地址',

                                                     name : 'address'

                                              }]

                         });

           }

           return form;

    }

    function initGrid() {

           Ext.QuickTips.init();

           var xg = Ext.grid;

           // //////////////////////////////////////////////////////////////////////////////////////

           // form

           // //////////////////////////////////////////////////////////////////////////////////////

           if (!form) {

                  form = getInsertForm();

           }

           // //////////////////////////////////////////////////////////////////////////////////////

           // win

           // //////////////////////////////////////////////////////////////////////////////////////

           if (!win) {

                  win = new Ext.Window({

                                       el : 'add-window',

                                       layout : 'fit',

                                       width : 380,

                                       height : 280,

                                       closeAction : 'hide',

                                       plain : true,

                                       items : form,

                                       buttons : [{

                                              text : '保存',

                                              handler : function() {

                                                     form.getForm().submit({

                                                            failure : function(retForm, retAction) {

                                                                   if (retAction.result

                                                                                 && retAction.result == '1') {

                                                                          Ext.MessageBox.alert('提示', '保存数据成功!');

                                                                          win.hide();

                                                                          grid.destroy();

                                                                          initData();

                                                                   } else if (retAction.result

                                                                                 && retAction.result == 'error') {

                                                                          Ext.MessageBox.alert('提示', '保存数据失败!');

                                                                   } else {

                                                                          Ext.MessageBox.alert('提示', '保存数据出错!');

                                                                   }

                                                            },

                                                            waitMsg : '保存数据...'

                                                     });

                                              }

                                       }, {

                                              text : '清空',

                                              handler : function() {

                                                     form.getForm().reset();

                                              }

                                       }, {

                                              text : '关闭',

                                              handler : function() {

                                                     win.hide();

                                              }

                                       }]

                                });

           }

           // ////////////////////////////////////////////////////////////////////////////////

           // Grid

           // //////////////////////////////////////////////////////////////////////////////////////

           var sm = new xg.CheckboxSelectionModel();

           grid = new xg.GridPanel({

                  id : 'button-grid',

                  ds : ds,

                  cm : new xg.ColumnModel([sm, {

                                       id : 'id',

                                       header : "员工号",

                                       width : 30,

                                       sortable : true,

                                       dataIndex : 'id'

                                }, {

                                       header : "姓名",

                                       width : 40,

                                       sortable : true,

                                       dataIndex : 'name'

                                }, {

                                       header : "年龄",

                                       width : 10,

                                       sortable : true,

                                       dataIndex : 'age'

                                }, {

                                       header : "性别",

                                       width : 10,

                                       sortable : true,

                                       dataIndex : 'gender'

                                }, {

                                       header : "所属机构",

                                       width : 40,

                                       sortable : true,

                                       dataIndex : 'unitName'

                                }, {

                                       header : "联系电话",

                                       width : 20,

                                       sortable : true,

                                       dataIndex : 'telephone'

                                }, {

                                       header : "家庭地址",

                                       width : 50,

                                       sortable : true,

                                       dataIndex : 'address'

                                }]),

                  sm : sm,

                  stripeRows : true,

                  viewConfig : {

                         forceFit : true

                  },

                  // inline toolbars

                  tbar : [{

                                       text : '添加',

                                       tooltip : '添加一条人员信息',

                                       iconCls : 'add',

                                       onClick : function() {

                                              // update form to insert form

                                              form = getInsertForm();

                                              var items = new Ext.util.MixedCollection();

                                              items.add("form", form);

                                              win.items = items;

                                              win.show(this);

                                              form.getForm().reset();

                                       }

                                }, '-', {

                                       text : '修改',

                                       tooltip : '修改一条人员信息',

                                       iconCls : 'option',

                                       onClick : function() {

                                              if (sm.getCount() == 1) {

                                                     // update form to insert form

                                                     form = getUpdateForm();

                                                     var items = new Ext.util.MixedCollection();

                                                     items.add("form", form);

                                                     win.items = items;

                                                     win.show(this);

                                                     form.getForm().reset();

                                                     form.getForm().loadRecord(sm.getSelected());

                                              } else {

                                                     Ext.MessageBox.alert('提示', '请选择一条记录!');

                                              }

                                       }

                                }, '-', {

                                       text : '删除',

                                       tooltip : '删除选择的人员信息',

                                       iconCls : 'remove',

                                       onClick : function() {

                                              if (sm.hasSelection()) {

                                                     Ext.MessageBox.confirm('提示', '你确定要删除这些人员么?',

                                                                   function(button) {

                                                                          if (button == 'yes') {

                                                                                 var list = sm.getSelections();

                                                                                 var rList = [];

                                                                                 for (var i = 0; i < list.length; i++) {

                                                                                        rList[i] = list[i].data["id"];

                                                                                 }

                                                                                 personController.removeRecords(

                                                                                               rList, function(data) {

                                                                                                      if (data > 0) {

                                                                                                             Ext.MessageBox

                                                                                                                           .alert(

                                                                                                                                         '提示',

                                                                                                                                         "删除"

                                                                                                                                                       + data

                                                                                                                                                       + '条数据成功!');

                                                                                                             grid.destroy();

                                                                                                             initData();

                                                                                                      } else {

                                                                                                             Ext.MessageBox

                                                                                                                           .alert(

                                                                                                                                         '提示',

                                                                                                                                         "删除数据失败!");

                                                                                                      }

                                                                                               });

                                                                          }

                                                                   });

                                              } else {

                                                     Ext.MessageBox.alert('提示', "请至少选择一条记录!");

                                              }

                                       }

                                }],

                  bbar : new Ext.PagingToolbar({

                                       pageSize : 10,

                                       store : ds,

                                       displayInfo : true,

                                       displayMsg : '显示第 {0} 条到 {1} 条记录,一共 {2} 条',

                                       emptyMsg : "没有记录"

                                }),

                  width : 815,

                  autoHeight : true,

                  // frame:true,

                  title : '人员信息列表',

                  iconCls : 'icon-grid',

                  renderTo : document.body

           });

    };

           上面是我们整个ExtJS应用的关键代码,它构建了窗口,表单,表格,分页栏等主要ExtJS的组件,指明了页面加载后需要动态获取的数据,为表单和按钮动态添加了异步访问服务器的事件。这里的代码希望大家好好研读。还有两个模块的JSP和JS文件和上面人员管理模块雷同,我这里就不列出来了。大家理解了之后可以自己试着写一下。这样,我们整个HRMS应用就已经构建完毕。下一篇文章我们来做一个总结。

  • 相关阅读:
    2020牛客暑期多校训练营(第三场)
    2020牛客暑期多校训练营(第二场)
    C# 获取枚举类型中所有描述信息 Xinner
    XPath Xinner
    02kubeadm安装
    thinkphp6:访问redis6(thinkphp 6.0.9/php 8.0.14)
    npm8.3.0 安装@vue/cli 4.5.15
    linux(ubuntu 21.10): php8.0.14:安装phpredis以访问redis(phpredis5.3.5)
    linux(ubuntu21.10):apt方式安装redis6.0.15
    阿里云何万青:南坡VS北坡,阿里云高性能计算行业实践
  • 原文地址:https://www.cnblogs.com/hannover/p/1563688.html
Copyright © 2011-2022 走看看