企业门户V2定制-组织及用户扩展
场景描述
增加在组织管理功能中维护的组织和人员的数据项
实现思路
- 增加组织扩展表,人员扩展表
- 在dialog/组织详情、人员详情页面中增加表单组件,绑定扩展表的数据列
实现步骤
1. 开启门户定制
使用租户管理员登录系统,在“应用/服务管理”企业门户V2,开启门户定制(详细操作步骤可参考 门户V2调试)
2. 添加服务模块uaax
打开架构,从市场下载服务模板组件,将服务模板添加到架构图中,服务模板名称为uaax
在服务模块的deploy目录下的几个def文件中,加环境变量UAAX_ENABLED,如果使用本地ide,重新连接云端后,需要重新打开eclipse
<property name="UAAX_ENABLED" env="UAAX_ENABLED" value="true" readonly="true">
<label label = "UAAX_ENABLED"/>
</property>
3. 添加新的端
如果要在设计器中给服务模块添加数据集,可以通过添加一个新的端来实现。在高级页面中,点击多模块多端配置拓展。添加子项目,服务标识填入uaax。
4. 添加组织扩展表
切换到新建的端,添加扩展表。组织扩展表名为orgsx,主键为id,列标识全小写
注意数据库表名必须填写
5. 添加人员扩展表
人员扩展表名为usersx,主键为id,列标识全小写
注意数据库表名必须填写
6. 设置扩展表在其他端可见
在model\service\uaax\目录下添加config目录,在config目录下添加export.json文件,内容如下
[
{
"path":"uaax/usersx.data.m",
"editData":true,
"editLabel":false
},{
"path":"uaax/orgsx.data.m",
"editData":true,
"editLabel":false
}
]
在export.json文件中定义的数据集,在其他端可见
7.新增门户自定义组件
进入企业门户云端开发后,打开市场组件“门户自定义”,并开启组件定制
在“\UI2\comp\portalConfig\components\portalConfig”组件目录下,新增page/opm目录,将组织及用户管理相关页面放在这里。组织及用户详细页面请参考下面2项操作步骤
8. 修改组织管理及详情页面
新建“组织详情”继承页面
添加组织扩展表,设置自动模式为自动加载无数据新增
设置过滤条件为:主键 等于(支持空字符串) 页面参数.组织ID
在设计页面上新增自定义字段
在js中,添加getOrgsxInfo方法获取扩展信息,扩展信息返回一个json,key为列名,value为数据;添加checkOrgsxInputValid方法判断输入是否合法,用于单击确定按钮前的校验。并重新定义确定事件,实现相应功能,代码示例如下图所示import Page from "$UI/opm-pcx/dialog/orgDetail.user"; import {message} from "antd"; export default class IndexPage extends Page { constructor(...args){ super(...args); } //获取组织扩展信息 getOrgsxInfo=()=>{ let orgxData=this.comp("orgxData"); let row=orgxData.getCurrentRow().toJson({ format: "simple" }); delete row.id return row; } //校验扩展信息是否合法 checkOrgsxInputValid=()=>{ let orgxData=this.comp("orgxData"); if(!orgxData.valid()){ message.error(orgxData.validInfo(true)); return false; } return true; } //确认请求 insertOrgAndPerson = async () => { let self = this; let orgData = this.comp("orgData"); let parentID = this.params.parentRow ? this.params.parentRow.id : ""; //获取扩展信息 let orgExtData=this.getOrgsxInfo(); let orgs = [{ "id": orgData.getValue("id") ? orgData.getValue("id") : OpmUtils.createOpmUUID(), "code" : orgData.getValue("code"), "name" : orgData.getValue("name"), "type" : orgData.getValue("type"), "active" : orgData.getValue("active"), "parentID": parentID, "extend":orgExtData }]; if(parentID == "" && this.comp("pageData").getValue("assignRole")=="1"){ //先判断有没有组织用户角色,如果没有则添加该角色 let roleData = this.comp("roleData"); await roleData.refreshData(); if(roleData.count()==0){ roleData.newData({defaultValues:[{ "id": "org_user", "code": "org_user", "type": "biz", "name": self.convertI18n("组织用户"), "parentRoleCodes": "wait_task_compact,wait_task,portal_contact", "parentRoleNames": self.convertI18n("待办任务(紧凑),待办任务,通讯录功能角色"), "active": "1", "version": "0", "createdBy": "system", "createdDate": new Date(), "lastModifiedBy": "system", "lastModifiedDate": new Date() }]}); await roleData.saveData(); } orgs[0].addRoles = ["org_user"]; await self.postOrgs(orgs); }else{ await this.postOrgs(orgs); } } //确认 onOkBtnClick = (event) => { let checkResult=this.checkInputValid()&&this.checkOrgsxInputValid(); if(!checkResult){ return; } this.insertOrgAndPerson(); } }
- 修改组织管理页面
同样新建“组织管理”继承页面,具体操作可参考上一步。
选择“组织”数据集,设置与组织扩展表的关联查询
在设计器中添加表格字段
9. 修改用户管理及人员详情页面
新建“人员详情”继承页面,详细操作请参考上面组织部分
添加组织扩展表,设置自动模式为自动加载无数据新增
设置过滤条件为:主键 等于(支持空字符串) 页面参数.人员ID
在设计页面上新增自定义字段
在js中,添加getUsersxInfo方法获取扩展信息,扩展信息返回一个json,key为列名,value为数据;添加checkUsersxInputValid方法判断输入是否合法,用于单击确定按钮前的校验。重新定义“确定”事件,实现相应功能,代码示例如下图所示import Page from "$UI/opm-pcx/dialog/psmDetail.user"; import {message} from "antd"; import OpmUtils from "$UI/opm-pcx/js/opmUtil"; export default class IndexPage extends Page { constructor(...args){ super(...args); } //获取组织扩展信息 getUsersxInfo=()=>{ let usersxData=this.comp("usersxData"); let birthday=usersxData.getValue("birthday").toString(); return {birthday}; } //校验扩展信息是否合法 checkUsersxInputValid=()=>{ let usersxData=this.comp("usersxData"); if(!usersxData.valid()){ message.error(usersxData.validInfo(true)); return false; } return true; } insertOrgAndPerson = async () => { //loadingBar.start(); var self = this; //如果选择了岗位角色,上级组织是岗位角色,否则是上级组织 var personData = this.comp("personData"); var posID = personData.getValue("posID"); var deptID = personData.getValue("deptID"); this.comp("pageData").setValue("parentID", deptID); var parentID; var parentCode; if (posID) {//选择了岗位角色,需要在部门下创建岗位 var posCode = personData.getValue("posCode"); var deptCode = personData.getValue("deptCode"); parentID = posID + "@" + deptID; parentCode = posCode + "@" + deptCode; var orgs = [{ "id": parentID, "code": parentCode, "name": personData.getValue("posName"), "type": "pos", "parentID": deptID, "addRoles": [posID] }]; } else { parentID = deptID; parentCode = deptCode; } if (!parentID) parentID = ''; var newAuthorities = personData.getValue("authorities") || ""; var users = [{ "id": personData.getValue("id"), "username": personData.getValue("username"), "name": personData.getValue("name"), "phoneNumber": personData.getValue("phoneNumber"), "email": personData.getValue("email"), "active": personData.getValue("active"), "verified": personData.getValue("verified"), "data4": personData.getValue("data4"),//QQ "data5": personData.getValue("data5"),//微博 "data8": personData.getValue("data8"),//分机号 "address": personData.getValue("data9"),//地址 "position": personData.getValue("data10"),//职位 "description": personData.getValue("description"),//备注 "data15": personData.getValue("data15"),//性别 "data17": personData.getValue("data17"),//生日 "hiredate": personData.getValue("data18"),//入职时间 "avatarUrl": personData.getValue("avatarUrl"),//头像data18 "signature": personData.getValue("signature"),//电子签名 "idcard": personData.getValue("idcard"),//身份证号 "authorities": newAuthorities,//用户类型 "extdata1": personData.getValue("extdata1"), "extdata2": personData.getValue("extdata2"), "extdata3": personData.getValue("extdata3"), "extend":this.getUsersxInfo()//获取扩展用户信息 }]; var password = personData.getValue("password"); if (password && this.params.openMode == "new") { users[0].password = uaa.encodePassword(password); } if (newAuthorities != this.originAuthorities) {//用户类型对应角色 if (newAuthorities) { users[0].addRoles = [newAuthorities]; } if (this.originAuthorities != "") { users[0].deleteRoles = [this.originAuthorities]; } } if (this.params.userType != "external") {//组织内用户 users[0].mainOrg = parentID; users[0].type = "org"; if (this.params.openMode == "new" || parentID != this.originParentID) { users[0].addOrgs = [parentID];//为''是根人员 if (this.originParentID != undefined) { users[0].deleteOrgs = [this.originParentID]; } } } if (this.comp("configData").getValue("useUserSortNumber")) {//人员序号 users[0].sortNumber = personData.getValue("sortNumber"); } //users[0].extend = this.getUsersxInfo(); try { await OpmUtils.postOrgs(self, orgs, users) if (self.params.openMode == "new") { if (password) { self.comp("pageData").setValue("password", password); } else { self.comp("pageData").setValue("password", self.convertI18n("aSDF1@#$或自定义默认密码")); } } self.comp("commonOperation").okclose("pageData"); //组织名称修改后,更新authorize表和opm_manageorgs表,postOrgs实现 } catch (e) { message.error(self.convertI18n("保存人员数据失败:") + e); } } //确定 onOkBtnClick = (event) => { let checkResult=this.checkInputValid()&&this.checkUsersxInputValid(); if(!checkResult){ return; } this.insertOrgAndPerson(); } }
- 修改用户管理页面
同样新建“用户管理”继承页面,具体操作可参考上一步。
选择“用户”数据集,设置与人员扩展表的关联查询
在设计器中添加表格字段
到此自定义内容全部完成,仅需在测试后,重新发布企业门户即可
10. 配置自定义菜单(仅可在部署环境中操作)
- 打开“应用资源管理”页面,在企业门户V2服务“组织用户管理”菜单下,新增新的“组织管理及用户管理”
- 在“功能树配置”下桌面端,新增上述添加的2个菜单即可