本文的目的是:将整合到系统中的activiti流程编辑器中任务节点的候选人和候选组输入框修改为弹出选择框,因为系统中有用户管理模块,所有的用户都要调用用户管理模块的接口,不能使用手动输入的方式。 备注:本文中所涉及的所有文件均可在文末的云盘中找到,包括修改的文件和添加的文件。
1、找到html文件:process-editor\editor-app\configuration\properties\assignment-popup.html 添加文件中红框部分的代码: 注:ng-click是此节点的点击事件,ng-value是此节点显示的值。 2、在文件夹process-editor\editor-app\configuration\properties\中添加文件: assignment-candidateGroup.html assignment-popup-popup.html 这两个文件一个是选择用户的模态框,一个是选择组的模态框。文件在文末的云盘中,这是我写的两个比较简单的界面,大家可根据需要自行修改或重新编写。 3、找到js文件:process-editor\editor-app\configuration\properties-assignment-controller.js 添加代码: ①在此处添加红色代码 ②在上图所示ctrl中添加代码块:
//Open the dialog to select users $scope.choseAssignment = function(flag) { var opts = { template: 'editor-app/configuration/properties/assignment-popup-popup.html?version=' + Date.now(), scope: $scope }; $scope.choseAssignmentFlag = flag; // Open the dialog $modal(opts); } //Open the dialog to select candidateGroups $scope.choseCandidateGroups = function(){ var opts = { template: 'editor-app/configuration/properties/assignment-candidateGroup.html?version=' + Date.now(), scope: $scope }; // Open the dialog $modal(opts); } //因新打开的界面上选定的数据要传输到当前modal中,所以使用此方式,这是angular.js中子窗口向父窗口传输数据的方式 $scope.$on('choseAssigneesStr', function(event,data){ $scope.assignment.candidateUsers[0].value = data; }); $scope.$on('choseAssigneeStr', function(event,data){ $scope.assignment.assignee = data; }); $scope.$on('choseCandidateGroupsStr', function(event,data){ $scope.assignment.candidateGroups[0].value = data; });③在①的ctrl之外添加代码块:
//用户选择模态框的控制器 var KisBpmChoseAssignmentCtrl = ['$scope', '$http', function($scope, $http) { //初始化左边菜单栏数据,并触发第一个菜单的点击事件 var roles = []; var initId; $scope.getAllRoles = function (successCallback) { $http({ method: 'get', headers: {'Accept': 'application/json', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}, url: '[URL]'}) //此处是获取所需角色的URL .success(function (data, status, headers, config) { //根据需要处理数据,将其封装成List<json>格式的数据,json中包含id和name(注:json中的数据可根据需要自行增删) var obj = data.obj.object; for (var i=0; i<obj.length; i++) { if (i==0) { initId = obj[i].id + ""; $scope.getAllAccountByRole(initId); } roles.push({id:obj[i].id,name:obj[i].name}); } //将封装好的roles数据赋值给全局变量roles $scope.roles = roles; }) .error(function (data, status, headers, config) { }); }; $scope.getAllRoles(function(){}); $scope.getAllAccountByRole = function(value) { $http({ method: 'get', headers: {'Accept': 'application/json', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}, url: '[URL]'+value}) //根据roleId获取当前组的用户数据的URL,value为roleId .success(function (data, status, headers, config) { //封装数据 var obj = data.obj; if (data != null) { var accounts = []; for (var i=0; i<obj.length; i++) { accounts.push({id:obj[i].id, code : obj[i].employeeCode, name : obj[i].userName, index:i}); } $scope.accounts=accounts; } }) .error(function (data, status, headers, config) { }); }; // Close button handler $scope.close = function() { $scope.$hide(); }; $scope.formData = {}; $scope.candidateUser={}; //Save Data $scope.save = function() { if ($scope.choseAssignmentFlag == "assignee") { var choseAssignee = $scope.formData.assignee; //子窗口向父窗口传输数据 $scope.$emit('choseAssigneeStr', choseAssignee); } else if ($scope.choseAssignmentFlag == "assignees") { var choseAssignees = $scope.accounts; var choseAssigneesStr = ""; for (var i=0;i<choseAssignees.length; i++) { if (choseAssignees[i].selected) { choseAssigneesStr += choseAssignees[i].id + ","; } } choseAssigneesStr = choseAssigneesStr.substring(0,choseAssigneesStr.length-1); //子窗口向父窗口传输数据 $scope.$emit('choseAssigneesStr', choseAssigneesStr); } $scope.close(); }; $scope.selectAll = function($event) { var checkbox = $event.target; var choseAssignees = $scope.accounts; for (var i=0;i<choseAssignees.length; i++) { if (checkbox.checked) { choseAssignees[i].selected = true; } else { choseAssignees[i].selected = false; } } $scope.accounts = choseAssignees; } }]; //组选择模态框的控制器 var KisBpmChoseCandidateGroupsCtrl = ['$scope', '$http', function($scope, $http) { var candidateGroups = []; $scope.getAllRoles = function (successCallback) { $http({ method: 'get', headers: {'Accept': 'application/json', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}, url: '/role/list'}) .success(function (data, status, headers, config) { var obj = data.obj.object; for (var i=0; i<obj.length; i++) { candidateGroups.push({id:obj[i].id,name:obj[i].name,description:obj[i].description}); } $scope.candidateGroups = candidateGroups; }) .error(function (data, status, headers, config) { }); }; $scope.getAllRoles(function() { }); //关闭按钮的点击事件 // Close button handler $scope.close = function() { $scope.$hide(); }; //保存按钮的点击事件 $scope.save = function() { var choseCandidateGroups = $scope.candidateGroups; var choseCandidateGroupsStr = ""; for (var i=0;i<choseCandidateGroups.length; i++) { if (choseCandidateGroups[i].selected) { choseCandidateGroupsStr += choseCandidateGroups[i].id + ","; } } choseCandidateGroupsStr = choseCandidateGroupsStr.substring(0,choseCandidateGroupsStr.length-1); //子窗口向父窗口传输数据 $scope.$emit('choseCandidateGroupsStr', choseCandidateGroupsStr); $scope.close(); } //全选框的点击事件 $scope.selectAll = function($event) { var checkbox = $event.target; var candidateGroups = $scope.candidateGroups; for (var i=0;i<candidateGroups.length; i++) { if (checkbox.checked) { candidateGroups[i].selected = true; } else { candidateGroups[i].selected = false; } } $scope.candidateGroups = candidateGroups; } }];4、修改后点击任务派遣效果如图:
点击任务执行人或候选人的输入框效果如图:
点击候选组的输入框的效果如图:
备注:百度云盘:http://pan.baidu.com/s/1kUPPqsB