BeX5的组织管理中某些人可能是一人多岗的,功能中可能需要默认就按照指定岗位获取相关的数据
平台默认的是在功能树上打开功能的时候选择岗位,如果想要在登录的时候就直接按照选择的岗位登录,参考如下:
说明
login.w的路径:/UI2/portal/base/login/login.w
login.js的路径:/UI2/portal/base/login/login.js
base.js的路径:/UI2/portal/base/base.js
推荐用扩展空间去修改
1.在login.w中添加data1用来存储岗位信息,data的autoLoad设置为false
<div component="$UI/system/components/justep/data/data" autoLoad="false" xid="data1" idColumn="SID" onCustomRefresh="data1CustomRefresh"> <column name="SID" type="String" xid="xid1"/> <column name="SFID" type="String" xid="xid2"/> <column name="SFNAME" type="String" xid="xid3"/> </div>
2.在data的onCustomRefresh事件中给data加载岗位数据
获取岗位数据要用到登录输入的用户名去过滤,由于是在登录前获取的,所有不能用bizData或者biz层的action去返回数据,需要自己定义.j获取数据并返回
本例定义的.j是/UI2/portal/base/login/selectPerson.j
import java.io.IOException; import java.sql.Connection; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Statement; import javax.naming.Context; import javax.naming.InitialContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.sql.DataSource; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; public class SelectPerson extends com.justep.ui.impl.JProcessorImpl { public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取传过来的登录的用户 String code = request.getParameter("code"); response.setCharacterEncoding("UTF-8"); response.addHeader("Access-Control-Allow-Origin", "*"); response.getWriter().write(query(code)); response.flushBuffer(); } public static String query(String code) { Connection conn = null; // 创建用于连接数据库的Connection对象 DataSource ds = null; ResultSet rs = null; JSONArray array = new JSONArray(); try { Context initContext = new InitialContext(); Context envContext = (Context) initContext.lookup("java:/comp/env"); ds = (DataSource) envContext.lookup("system"); conn = ds.getConnection(); Statement stmt = conn.createStatement(); // 根据登录的用户设置where条件获取相关岗位的信息 String sql = "SELECT o.SID ,o.SFID , o.SFName FROM SA_OPOrg o" + " WHERE (o.SVALIDSTATE = 1) AND (o.SPERSONID = " + "(select p.sID from SA_OPPerson p left join SA_OPOrg mo on p.SMAINORGID = mo.sID " + "WHERE (UPPER(p.SLOGINNAME) = UPPER('" + code + "') OR UPPER(p.SCODE) = UPPER('" + code + "')) AND (p.SVALIDSTATE = 1)))"; rs = stmt.executeQuery(sql); ResultSetMetaData metaData = rs.getMetaData(); int columnCount = metaData.getColumnCount(); // 遍历ResultSet中的每条数据,把数据用json存储 while (rs.next()) { JSONObject jsonObj = new JSONObject(); for (int i = 1; i <= columnCount; i++) { String columnName = metaData.getColumnLabel(i); String value = rs.getString(columnName); jsonObj.put(columnName, value); } array.add(jsonObj); } rs.close(); stmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } return array.toString(); } }
.j的调用如下
Model.prototype.data1CustomRefresh = function(event) { var personData = this.comp("data1"); //获取输入的用户名 var name = this.comp('name').val(); if (name == undefined) { alert("请填写用户名"); } else { $.ajax({ async : false, type : 'POST', dataType : 'json', url : '/x5/UI2/portal/base/login/selectPerson.j', data : { code : name //把获取的用户名做参数传给.j }, error : function(error, status, text) { alert("获取数据失败") }, success : function(result) { personData.loadData(result); } }); } };
3.由于可能用不同的用户切换登录,所以需要在login.w中用户名的input的onChange事件中把data中的数据清了,然后重新加载
<div class="form-group" xid="formGroup1"> <div class="col" xid="col3"> <div component="$UI/system/components/justep/labelEdit/labelEdit" class="x-label-edit x-label30" xid="labelEdit1"> <label class="x-label" xid="label1"><![CDATA[选择岗位]]></label> <select component="$UI/system/components/justep/select/select" class="form-control x-edit" xid="select1" bind-options="data1" bind-optionsValue="SFID" bind-optionsLabel="SFNAME" onChange="select1Change"/> </div> </div> </div>
5.在login.js的model的勾选函数中定义一个实例变量this.person用来记录选择的岗位
var Model = function() { this.callParent(); this.person = ""; };
6.在添加的选择岗位的select组件的onChange事件中把选择的值,赋值给this.person
Model.prototype.select1Change = function(event) { this.person = event.value; };
7.在login.js的login方法(Model.prototype.login = function() {)的实现把this.person的值拼接到登录相关的参数上
这个设置是功能树加载的只是这个岗位有权限的功能,不加这个设置,功能树中就是所有功能有权限的
if (client) urlParams.client = client; if (this.person) urlParams.executor = this.person;
8.在login.js的login方法(跟7是同一个方法)中的this.comp(“receiver”).windowEnsure(result.data),在其前面把this.person的值放到result.data
// 对话框返回数据 result.data["executor"] = this.person; this.comp("receiver").windowEnsure(result.data);
9.在base.js的setPortalContext方法中找到context.data = data;在前面加上executor的设置
if(data.executor){ executor = data.executor; } context.data = data;
其中8和9是设置当前上下文中的执行者信息
评一波