首页 > 技术文章 > Jeecg代码搬砖圣地第一篇(代码生成与权限分配)

xujiating 2019-12-12 11:08 原文

问题描述

进口部要完成一票进口报关单的增删改查,操作员张三登录只能增删改张三的报关单,操作员李四登录只能增删改李四的报关单,部门主管王五登录能查看张三和李四的报关单,但不能修改删除。操作员能提交报关单至领导审批,部门主管能审批报关单。

已知条件:

报关单主体信息(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,欢迎技术交流!

      

 

推荐阅读