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是设置当前上下文中的执行者信息

评一波