Jeecg代碼搬磚聖地第一篇(代碼生成與權限分配)


問題描述

進口部要完成一票進口報關單的增刪改查,操作員張三登錄只能增刪改張三的報關單,操作員李四登錄只能增刪改李四的報關單,部門主管王五登錄能查看張三和李四的報關單,但不能修改刪除。操作員能提交報關單至領導審批,部門主管能審批報關單。

已知條件:

報關單主體信息(dec_main):進口日期(ie_date),合同協議號(contr_no),報關單號(entry_id),申報單位(agent_name),業務編號(client_no),收貨人(trade_name),收貨人手機號(phone) ,郵箱(email);報關單表體商品信息(dec_list):商品編碼(goods_code),商品中文名(goods_name),商品申報要素(goods_comment),數量(qty),外鍵(fid)。其中主體和表體是一對多關系。

附加要求:

業務狀態包含待提交,待審核,已審核,審核不通過,默認待提交;收貨人手機號是手機校驗必填,郵箱是郵箱校驗不必填,商品的數量是數量校驗不必填;部門主管無需看到收貨人手機號與郵箱信息。

解決方案:

       1.啟動項目並用admin登錄。

     2.在系統管理---->數據字典里,添加新的數據字典業務狀態decstate,在查看類型里分別添加4個子類型待提交(1),待審核(2),已審核(3),審核不通過(4)如下圖。

 

 

       3.在在線開發------>online表單里創建表單,表名為dec_main,表類型為主表,增加數據庫字段(默認的10個字段不需要修改),同時流程狀態默認值賦1 ,在頁面屬性里,進口日期

      的控件類型選擇日期格式,在校驗字典里,所屬部門的字典Table填寫t_s_depart,字典Code填寫id,字典Text填寫departname,流程狀態的字典code輸入decstate,同時手機

        號碼的驗證規則為手機號碼校驗必填選中,郵箱的驗證規則為電子郵件。提交表單確定並同步數據庫

       4.在在線開發------>online表單里創建表單,表名為dec_list,表類型為附表,增加數據庫字段,在外鍵里,增加外鍵字段的主表名(dec_main),主表字段(id)屬性,提交表單確定並同步數據庫。

       5.在在線開發里,選中表名為dec_main的記錄,然后選則按鈕代碼生成生成代碼拷貝到項目里。

       6.代碼調整

        6.1 新增提交審核功能

<t:dgToolBar title="提交審核"  icon="icon-redo" url="decMainController.do?submitcheck"   funname="submitcheck"></t:dgToolBar>

          其他title為名字,icon為圖標樣式,可查看鏈接地址https://www.cnblogs.com/xujiating/p/12023617.html,url為后台的路徑,funname為前端js方法。

          前端js方法代碼如下

function submitcheck(title,url,gname) {
                gridname=gname;
                var ids = [];
                var rows = $("#"+gname).datagrid('getSelections');
                if (rows.length > 0) {
                    $.dialog.setting.zIndex = getzIndex(true);
                    $.dialog.confirm('你確定提交審核嗎?', function(r) {
                       if (r) {
                            for ( var i = 0; i < rows.length; i++) {
                                ids.push(rows[i].id);
                            }
                            $.ajax({
                                url : url,
                                type : 'post',
                                data : {
                                    ids : ids.join(',')
                                },
                                cache : false,
                                success : function(data) {
                                    var d = $.parseJSON(data);
                                    if (d.success) {
                                        var msg = d.msg;
                                        tip(msg);
                                        reloadTable();
                                        $("#"+gname).datagrid('unselectAll');
                                        ids='';
                                    }
                                }
                            });
                        }
                    });
                } else {
                    tip("請選擇需要提交審核數據");
                }
            }
 

          后台submitcheck方法代碼如下

        

 @RequestMapping(params = "submitcheck")
        @ResponseBody
        public AjaxJson submitcheck(String ids,HttpServletRequest request){
            AjaxJson j = new AjaxJson();
            String message = "報關單提交審核成功";
            try{
                for(String id:ids.split(",")){
                    DecMainEntity decMain = systemService.getEntity(DecMainEntity.class,
                    id
                    );
                    decMain.setBpmStatus("1");
                    systemService.addLog(message, Globals.Log_Type_DEL, Globals.Log_Leavel_INFO);
                }
            }catch(Exception e){
                e.printStackTrace();
                message = "報關單提交審核失敗";
                throw new BusinessException(e.getMessage());
            }
            j.setMsg(message);
            return j;
        }

 

        6.2新增審核功能

<t:dgToolBar title="審核"  icon="icon-ok" url="decMainController.do?gocheck"   funname="check"></t:dgToolBar>

          前台js方法

function check(title,url, id,width,height,isRestful) {
        gridname=id;
        var rowsData = $('#'+id).datagrid('getSelections');
        if (!rowsData || rowsData.length==0) {
            tip($.i18n.prop('edit.selectItem'));
            return;
        }
        if (rowsData.length>1) {
            tip($.i18n.prop('edit.selectOneItem'));
            return;
        }
        if(isRestful!='undefined'&&isRestful){
            url += '/'+rowsData[0].id;
        }else{
            url += '&id='+rowsData[0].id;
        }
        createwindow(title,url,width,height);
    }
 
 function createwindow(title, addurl,width,height) {
        //--author:zhoujf---------date:20180718---------for:彈出窗口大小控制問題
        if(width=="100%" || height=="100%"){
            width = window.top.document.body.offsetWidth;
            height =window.top.document.body.offsetHeight-100;
        }else{
            width = isRealNum(width)?width:700;
            height = isRealNum(height)?height:400;
            width=parseInt(width);
            height=parseInt(height);
        }
$.dialog({
//--author:zhoujf---------date:20180718---------for:彈出窗口大小控制問題 //--author:JueYue---------date:20140427---------for:彈出bug修改,設置了zindex()函數 /*W.*/$.dialog({//使用W,即為使用頂級頁面作為openner,造成打開的次級窗口獲取不到關聯的主窗口 content: 'url:'+addurl, lock : true, width:width, zIndex:getzIndex(), height:height, parent:windowapi, title:title, opacity : 0.3, cache:false, ok: function(){ iframe = this.iframe.contentWindow; saveObj(); return false; }, okVal: $.i18n.prop('dialog.submit'), cancelVal: $.i18n.prop('dialog.close'), cancel: true /*為true等價於function(){}*/ }); //--author:JueYue---------date:20140427---------for:彈出bug修改,設置了zindex()函數 }

          后台java方法

@RequestMapping(params = "goCheck")
    public ModelAndView goCheck( HttpServletRequest request) {
        logger.info("----審核-----");
        String id=request.getParameter("id");
        if (StringUtil.isNotEmpty(id)) {
            JeecgDemoEntity jeecgDemo = jeecgDemoService.getEntity(JeecgDemoEntity.class, id);
            request.setAttribute("jeecgDemoPage", jeecgDemo);
        }
        return new ModelAndView("com/jeecg/demo/jeecgDemo-check");
        
    }

@RequestMapping(params = "doCheck")
    @ResponseBody
    public AjaxJson doCheck(String content,String id,String status) {
        logger.info("-------審核意見:"+content);//demo簡單作打印,實際項目可酌情處理
        String message = null;
        AjaxJson j = new AjaxJson();
        JeecgDemoEntity jeecgDemo = systemService.getEntity(JeecgDemoEntity.class, id);
        message = "審核成功";
        try{
            jeecgDemo.setStatus(status);
            this.jeecgDemoService.updateEntitie(jeecgDemo);
            systemService.addLog(message, Globals.Log_Type_UPDATE, Globals.Log_Leavel_INFO);
        }catch(Exception e){
            e.printStackTrace();
            message = "審核失敗";
            throw new BusinessException(e.getMessage());
        }
        j.setMsg(message);
        return j;
    }

          跳轉的jsp頁面

    <t:formvalid formid="formobj" dialog="true" usePlugin="password" layout="table" action="jeecgListDemoController.do?doCheck" >
                    <input id="id" name="id" type="hidden" value="${jeecgDemoPage.id }">
        <table style="width:320px;" cellpadding="0" cellspacing="1" class="formtable">
                    <tr>
                        <td align="right">
                            <label class="Validform_label">
                                是否通過:
                            </label>
                        </td>
                        <td class="value">
                                    <t:dictSelect field="status" type="radio" typeGroupCode="sf_yn" defaultVal="Y" hasLabel="false" ></t:dictSelect>     
                            <span class="Validform_checktip"></span>
                            <label class="Validform_label" style="display: none;"></label>
                        </td>
                    </tr>
                    <tr>
                        <td align="right">
                            <label class="Validform_label">
                                審核意見:
                            </label>
                        </td>
                        <td class="value">
                                    <textarea name="content" rows="6" cols="36"></textarea>
                            <span class="Validform_checktip"></span>
                        </td>
                    </tr>
            </table>
        </t:formvalid>

 

        6.3界面權限設置:

          在webpage--->com-jeecg-decmain的decMainList界面里,將收貨人手機號和郵箱嵌在t:hasPermission標簽下,代碼如下:

            <t:hasPermission code="phone_email">
              <t:dgCol title="收貨人手機號" field="phone" queryMode="single" width="120"></t:dgCol>
              <t:dgCol title="郵箱" field="email" queryMode="single" width="120"></t:dgCol>
            </t:hasPermission>

          同時將刪除,錄入,編輯,查看,提交審核,審核加個operationCode屬性,代碼如下

            <t:dgToolBar title="錄入" icon="icon-add" url="decMainController.do?goAdd"  operationCode="add" funname="add" width="100%" height="100%">
            </
t:dgToolBar>

          在webpage--->com-jeecg-decmain的decMain-update界面里,將收貨人手機號和郵箱嵌在t:hasPermission標簽下,代碼如下

            

<t:hasPermission code="phone_email">
        <tr>
            <td align="right">
                <label class="Validform_label">收貨人手機號:</label>
            </td>
            <td class="value">
                  <input id="phone" name="phone" type="text" maxlength="32" style="width: 150px" class="inputxt"  datatype="m" ignore="checked"  value='${decMainPage.phone}'/>
                <span class="Validform_checktip"></span>
                <label class="Validform_label" style="display: none;">收貨人手機號</label>
            </td>
            <td align="right">
                <label class="Validform_label">郵箱:</label>
            </td>
            <td class="value">
                  <input id="email" name="email" type="text" maxlength="32" style="width: 150px" class="inputxt"  datatype="e" ignore="ignore"  value='${decMainPage.email}'/>
                <span class="Validform_checktip"></span>
                <label class="Validform_label" style="display: none;">郵箱</label>
            </td>
        </tr>
        </t:hasPermission>

 

 

       6.在系統管理----菜單管理里新增菜單進口業務,在進口業務里新增子菜單業務查詢,配置菜單地址decMainController.do?list,同時新增頁面控件權限錄入(add),編輯(update),刪除(delete),

      查看(detail),提交審核(submitcheck),審核(check);在里面新增權限菜單,路徑為decMainController.do?datagrid,同時新增數據權限只能看到自己的createBy等於#{sys_user_code},

      能看到本部門及以下的sysOrgCode模糊#{sys_org_code};新增業務查詢查看權限菜單,路徑為decMainController.do?goUpdate,同時新增頁面控件名稱看到手機號和郵箱(phone_email);

      詳細對應規則https://www.cnblogs.com/xujiating/p/11981875.html

       7.在系統管理----->角色管理里新增兩個角色,進口操作員和進口管理員,其中,進口操作員分配進口業務---業務查詢的錄入,編輯,刪除,提交審核功能,進口業務----業務查詢權限的只能

      看到自己的功能;進口管理員分配進口業務---業務查詢的查看功能,進口業務----業務查詢權限的登錄人看到下級的功能。

       8.在系統管理---->組織機構管理里,新增進口部,同時在系統管理---->用戶管理里,新增用戶張三,李四,王五,張三,李四的角色是進口操作員,王五的角色是進口管理員,部門同屬進口部。

 

 博主微信xjt199561,歡迎技術交流!

      

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM