問題描述:
進口部要完成一票進口報關單的增刪改查,操作員張三登錄只能增刪改張三的報關單,操作員李四登錄只能增刪改李四的報關單,部門主管王五登錄能查看張三和李四的報關單,但不能修改刪除。操作員能提交報關單至領導審批,部門主管能審批報關單。
已知條件:
報關單主體信息(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};新增
7.在系統管理----->角色管理里新增兩個角色,進口操作員和進口管理員,其中,進口操作員分配進口業務---業務查詢的錄入,編輯,刪除,提交審核功能,進口業務----業務查詢權限的只能
看到自己的功能;進口管理員分配進口業務---業務查詢的查看功能,進口業務----業務查詢權限的登錄人看到下級的功能。
8.在系統管理---->組織機構管理里,新增進口部,同時在系統管理---->用戶管理里,新增用戶張三,李四,王五,張三,李四的角色是進口操作員,王五的角色是進口管理員,部門同屬進口部。
博主微信xjt199561,歡迎技術交流!