var OaNodeManageCtrl = ['$scope', '$modal', '$timeout', '$translate', function ($scope, $modal, $timeout, $translate) { var opts = { template: 'editor-app/configuration/properties/oa-node-manage-popup.html?version=' + Date.now(), backdrop: 'static', keyboard: false, scope: $scope }; $modal(opts); }]; var OaNodeManagePopupCtrl = ['$scope', '$timeout', '$http', function ($scope, $timeout, $http) { console.log($scope.selectedItem); // console.log($scope.editor); // console.log($scope.editor.modelMetaData.model.childShapes); // console.log($scope.stencilItemGroups) // 获取流程中的配置 var model = $scope.editor.modelMetaData.model; var childShapes = model.childShapes; // 关联到的属性 var multiInstanceType = $scope.selectedItem.properties[7]; var multiInstanceCollection = $scope.selectedItem.properties[9]; var multiInstanceVariable = $scope.selectedItem.properties[10]; var multiInstanceCondition = $scope.selectedItem.properties[11]; var assigneeProperty = $scope.selectedItem.properties[13]; var taskListenerProperty = $scope.selectedItem.properties[16]; // 初始化 var startNode; $scope.oaNodeManage = { assignee: { nodeType: 'normal', assigneeCount: 'single', assignee: '', assigneeName: '', candidates: '', candidateNames: '', multipleType: 'parallel', completeCondition: 'allPass', completeCount: 1, multipleAssignees: '', multipleAssigneeNames: '', assigneeType: 'appoint', autoAssignType: 'scope', departmentType: 'appoint', departments: '', departmentNames: '', roles: '', roleNames: '', positions: '', positionNames: '', quickAssignee: 'starter', previousNStep: 1 }, formId: '', formFields: [], oaUserTaskListeners: [] } // 添加用户任务监听器 function addOaUserTaskListener(event, className, expression, delegateExpression) { var implementation = ''; if (className) { implementation = className; } else if (expression) { implementation = expression; } else if (delegateExpression) { implementation = delegateExpression; } $scope.oaNodeManage.oaUserTaskListeners.push({ event: event, implementation: implementation, className: className ? className : '', expression: expression ? expression : '', delegateExpression: delegateExpression ? delegateExpression : '' }); } /** * 判断监听器是否存在 * @param event * @param className */ function isListenerExist(event, className) { for (var i = 0, item; item = $scope.oaNodeManage.oaUserTaskListeners[i++];) { if (item.event == event && item.className == className) { return true; } } return false; } $scope.addOaUserTaskCreateListener = function () { var event = 'create', className = '', expression = '', delegateExpression = '${oaUserTaskCreateListener}'; if (isListenerExist(event, className)) { top.dialog.msg('监听器已经存在'); return; } addOaUserTaskListener(event, className, expression, delegateExpression); } $scope.addOaUserTaskAssignmentListener = function () { var event = 'assignment', className = '', expression = '', delegateExpression = '${oaUserTaskAssignmentListener}'; if (isListenerExist(event, className)) { top.dialog.msg('监听器已经存在'); return; } addOaUserTaskListener(event, className, expression, delegateExpression); } $scope.addOaUserTaskDeleteListener = function () { var event = 'delete', className = '', expression = '', delegateExpression = '${oaUserTaskDeleteListener}'; if (isListenerExist(event, className)) { top.dialog.msg('监听器已经存在'); return; } addOaUserTaskListener(event, className, expression, delegateExpression); } // 上移用户任务监听器 $scope.moveOaUserTaskListenerUp = function (index) { var prevIndex = index - 1; var temp = $scope.oaNodeManage.oaUserTaskListeners[index]; $scope.oaNodeManage.oaUserTaskListeners.splice(index, 1); $timeout(function () { $scope.oaNodeManage.oaUserTaskListeners.splice(prevIndex, 0, temp); }, 10); } // 下移用户任务监听器 $scope.moveOaUserTaskListenerDown = function (index) { var nextIndex = index + 1; var temp = $scope.oaNodeManage.oaUserTaskListeners[index]; $scope.oaNodeManage.oaUserTaskListeners.splice(index, 1); $timeout(function () { $scope.oaNodeManage.oaUserTaskListeners.splice(nextIndex, 0, temp); }, 10); } // 删除用户任务监听器 $scope.deleteOaUserTaskListener = function (index) { $scope.oaNodeManage.oaUserTaskListeners.splice(index, 1); } $scope.checkCompleteCount = function() { var assignee = $scope.oaNodeManage.assignee; if(!assignee.completeCount) { assignee.completeCount = 1; return; } if(assignee.completeCount < 1) { assignee.completeCount = 1; } } $scope.checkPreviousNStep = function() { var assignee = $scope.oaNodeManage.assignee; if(!assignee.previousNStep) { assignee.previousNStep = 1; return; } if(assignee.previousNStep < 1) { assignee.previousNStep = 1; } } // 选择用户 $scope.selectAssignee = function () { var assignee = $scope.oaNodeManage.assignee; top.dialog.dialogData.selectedUserIds = assignee.multipleAssignees; top.dialog.open({ url: top.restAjax.path('route/department/user/select-user', []), title: '选择代理人【单选】', width: '500px', height: '500px', closeBtn: 0, onClose: function () { var selectedUsers = top.dialog.dialogData.selectedDepartmentUsers; // 这里写处理逻辑 if (selectedUsers && selectedUsers.length > 0) { if (selectedUsers.length > 1) { top.dialog.msg('只能选择一位代理人'); return; } assignee.assignee = selectedUsers[0].userId; assignee.assigneeName = selectedUsers[0].userName; } else { assignee.assignee = ''; assignee.assigneeName = ''; } top.dialog.dialogData.selectedDepartmentUsers = []; $scope.$apply(); } }) } // 选择候选人 $scope.selectCandidates = function () { var assignee = $scope.oaNodeManage.assignee; top.dialog.dialogData.selectedUserIds = assignee.candidates ? assignee.candidates.replace(/,/g, '_') : ''; top.dialog.open({ url: top.restAjax.path('route/department/user/select-user', []), title: '选择候选人【多选】', width: '500px', height: '500px', closeBtn: 0, onClose: function () { var selectedUsers = top.dialog.dialogData.selectedDepartmentUsers; // 这里写处理逻辑 if (selectedUsers && selectedUsers.length > 0) { var candidates = ''; var candidateNames = ''; for (var i = 0, item; item = selectedUsers[i++];) { if (candidates.length) { candidates += ','; candidateNames += ','; } candidates += item.userId; candidateNames += item.userName; } assignee.candidates = candidates; assignee.candidateNames = candidateNames; } else { assignee.candidates = ''; assignee.candidateNames = ''; } top.dialog.dialogData.selectedDepartmentUsers = []; $scope.$apply(); } }) } // 选择多实例代理人 $scope.selectMultipleAssignee = function () { var assignee = $scope.oaNodeManage.assignee; top.dialog.dialogData.selectedUserIds = assignee.multipleAssignees ? assignee.multipleAssignees.replace(/,/g, '_') : ''; top.dialog.open({ url: top.restAjax.path('route/department/user/select-user', []), title: '选择多实例代理人【多选】', width: '500px', height: '500px', closeBtn: 0, onClose: function () { var selectedUsers = top.dialog.dialogData.selectedDepartmentUsers; // 这里写处理逻辑 if (selectedUsers && selectedUsers.length > 0) { var multipleAssignees = ''; var multipleAssigneeNames = ''; for (var i = 0, item; item = selectedUsers[i++];) { if (multipleAssignees.length) { multipleAssignees += ','; multipleAssigneeNames += ','; } multipleAssignees += item.userId; multipleAssigneeNames += item.userName; } assignee.multipleAssignees = multipleAssignees; assignee.multipleAssigneeNames = multipleAssigneeNames; } else { assignee.multipleAssignees = ''; assignee.multipleAssigneeNames = ''; } top.dialog.dialogData.selectedDepartmentUsers = []; $scope.$apply(); } }) } // 选择部门 $scope.selectDepartments = function () { var assignee = $scope.oaNodeManage.assignee; top.dialog.dialogData.checkedDepartmentIds = !assignee.departments ? [] : assignee.departments.split(','); top.dialog.open({ url: top.restAjax.path('route/department/list-tree-check', []), title: '选择组织部门【多选】', width: '400px', height: '400px', onClose: function () { var checkedDepartmentNodes = top.dialog.dialogData.checkedDepartmentNodes; if (checkedDepartmentNodes && checkedDepartmentNodes.length > 0) { var departments = ''; var departmentNames = ''; for (var i = 0, item; item = checkedDepartmentNodes[i++];) { if (departments.length > 0) { departments += ','; departmentNames += ','; } departments += item.id; departmentNames += item.name; } assignee.departments = departments; assignee.departmentNames = departmentNames; } else { assignee.departments = ''; assignee.departmentNames = ''; } top.dialog.dialogData.checkedDepartmentNodes = []; $scope.$apply(); } }); } // 选择角色 $scope.selectRoles = function () { var assignee = $scope.oaNodeManage.assignee; top.dialog.dialogData.checkedRoleIds = !assignee.roles ? [] : assignee.roles.split(','); top.dialog.open({ url: top.restAjax.path('route/role/list-tree-check', []), title: '选择角色【多选】', width: '400px', height: '400px', onClose: function () { var checkedRoleNodes = top.dialog.dialogData.checkedRoleNodes; if (checkedRoleNodes && checkedRoleNodes.length > 0) { var roles = ''; var roleNames = ''; for (var i = 0, item; item = checkedRoleNodes[i++];) { if (roles.length > 0) { roles += ','; roleNames += ','; } roles += item.id; roleNames += item.name; } assignee.roles = roles; assignee.roleNames = roleNames; } else { assignee.roles = ''; assignee.roleNames = ''; } top.dialog.dialogData.checkedRoleNodes = []; $scope.$apply(); } }); } // 选择职位 $scope.selectPositions = function () { var assignee = $scope.oaNodeManage.assignee; top.dialog.dialogData.checkedPositionIds = !assignee.positions ? [] : assignee.positions.split(','); top.dialog.open({ url: top.restAjax.path('route/position/list-tree-check', []), title: '选择职位【多选】', width: '400px', height: '400px', onClose: function () { var checkedPositionNodes = top.dialog.dialogData.checkedPositionNodes; if (checkedPositionNodes && checkedPositionNodes.length > 0) { var positions = ''; var positionNames = ''; for (var i = 0, item; item = checkedPositionNodes[i++];) { if (positions.length > 0) { positions += ','; positionNames += ','; } positions += item.id; positionNames += item.name; } assignee.positions = positions; assignee.positionNames = positionNames; } else { assignee.positions = ''; assignee.positionNames = ''; } top.dialog.dialogData.checkedPositionNodes = []; $scope.$apply(); } }); } // 更新代理人与候选人信息 function updateAssignment() { // 更新手动指定单选代理人 function updateAssignee() { assigneeProperty.value = {}; assigneeProperty.value.assignment = { assignee: $scope.oaNodeManage.assignee.assignee, candidateUsers: [] } $scope.updatePropertyInModel(assigneeProperty); } // 更新手动指定多选候选人 function updateCandidate() { assigneeProperty.value = {}; assigneeProperty.value.assignment = { candidateUsers: [] }; var candidates = $scope.oaNodeManage.assignee.candidates.split(','); for (var i = 0, item; item = candidates[i++];) { if (!item) { continue; } assigneeProperty.value.assignment.candidateUsers.push({ value: item }) } $scope.updatePropertyInModel(assigneeProperty); } // 更新手动指定多个候选人 function updateCandidates() { assigneeProperty.value = {}; assigneeProperty.value.assignment = { candidateUsers: [{value: '${candidates}'}] }; } /** * 更新多实例 */ function updateMultipleInstance() { $scope.updatePropertyInModel(multiInstanceType); $scope.updatePropertyInModel(multiInstanceCollection); $scope.updatePropertyInModel(multiInstanceVariable); $scope.updatePropertyInModel(multiInstanceCondition); } /** * 更新并行 */ function updateParallel() { multiInstanceType.value = $scope.oaNodeManage.assignee.multipleType; multiInstanceCollection.value = '${multipleAssignees}'; multiInstanceVariable.value = 'multipleAssignees'; if (assignee.completeCondition === 'allPass') { // 全部通过 multiInstanceCondition.value = '${nrOfCompletedInstances == nrOfInstances}' } else if (assignee.completeCondition === 'singlePass') { // 单人通过 multiInstanceCondition.value = '${nrOfCompletedInstances == 1}' } else if (assignee.completeCondition === 'customPass') { // 通过多少人 multiInstanceCondition.value = '${nrOfCompletedInstances == '+ assignee.completeCount +'}' } else { top.dialog.msg('多实例(完成)通过条件错误'); return; } updateMultipleInstance(); } /** * 更新串行 */ function updateSequential() { multiInstanceType.value = $scope.oaNodeManage.assignee.multipleType; multiInstanceCollection.value = '${assigneeList}'; multiInstanceVariable.value = 'assignee'; multiInstanceCondition.value = ''; updateMultipleInstance(); } /** * 清空代理人候选人 */ function clearAssigneeAndCandidate() { assigneeProperty.value = {}; $scope.updatePropertyInModel(assigneeProperty); } /** * 清空多实例配置 */ function clearMultipleInstance() { multiInstanceType.value = ''; multiInstanceCollection.value = ''; multiInstanceVariable.value = ''; multiInstanceCondition.value = ''; updateMultipleInstance(); } var assignee = $scope.oaNodeManage.assignee; // 普通节点 if (assignee.nodeType === 'normal') { // 清空多实例选项 clearMultipleInstance(); // 手动指定 if (assignee.assigneeType === 'appoint') { // 单选 if (assignee.assigneeCount === 'single') { updateAssignee(); return; } // 多选 if (assignee.assigneeCount === 'candidate') { updateCandidate(); return; } return; } // 自动获取 if (assignee.assigneeType === 'auto') { updateCandidates(); return; } return; } if (assignee.nodeType === 'multiple') { // 清空代理人选项 clearAssigneeAndCandidate(); // 并行 if (assignee.multipleType === 'parallel') { updateParallel(); return; } if(assignee.multipleType === 'sequential') { updateSequential(); return; } } } /** * 更新任务监听器列表 */ function updateTaskListener() { taskListenerProperty.value = {} taskListenerProperty.value.taskListeners = $scope.oaNodeManage.oaUserTaskListeners; $scope.updatePropertyInModel(taskListenerProperty); } // Click handler for save button $scope.save = function () { $scope.property.value = {}; $scope.property.value = $scope.oaNodeManage; $scope.updatePropertyInModel($scope.property); updateAssignment(); updateTaskListener(); $scope.close(); }; $scope.cancel = function () { $scope.close(); }; // Close button handler $scope.close = function () { assigneeProperty.mode = 'read'; taskListenerProperty.mode = 'read'; $scope.property.mode = 'read'; $scope.$hide(); }; function initOaNodeManage() { if ($scope.property.value) { $scope.oaNodeManage = EDITOR.UTIL.deepClone($scope.property.value); } } // 初始化开始节点 function initStartNode() { for (var i = 0, node; node = childShapes[i++];) { if (node.stencil.id == 'StartNoneEvent') { startNode = node; break; } } if (!startNode) { top.dialog.msg('未找到开始节点,无法设置OA节点'); $scope.close(); return; } } // 初始化oaUserTaskCompleteListener function initOaUserTaskCompleteListener() { if ($scope.property.value) { return; } var event = 'complete', className = '', expression = '', delegateExpression = '${oaUserTaskCompleteListener}'; if (isListenerExist(event, className)) { top.dialog.msg('监听器已经存在'); return; } addOaUserTaskListener(event, className, expression, delegateExpression); } // 初始化form表单ID function initFormId(callback) { $scope.oaNodeManage.formId = startNode.properties.formkeydefinition; if (!$scope.oaNodeManage.formId) { top.dialog.msg('开始节点未绑定表单,无法设置OA节点'); $timeout(function () { $scope.close(); }, 10) return; } callback(); } // 初始化form表单 function initFormField() { $http.get('api/form-field/list/form-id/' + $scope.oaNodeManage.formId).then(function (response) { var formFields = []; for (var i = 0, formField; formField = response.data[i++];) { var isVisible = true; var isEditable = true; for (var j = 0, item; item = $scope.oaNodeManage.formFields[j++];) { if (formField.fieldId === item.fieldId) { isVisible = item.isVisible; isEditable = item.isEditable; } } formFields.push({ fieldId: formField.fieldId, fieldName: formField.fieldName, fieldExplain: formField.fieldExplain, fieldTag: formField.fieldTag, fieldType: formField.fieldType, isVisible: isVisible, isEditable: isEditable }) } $scope.oaNodeManage.formFields = formFields; }, function (response) { top.dialog.msg(response.data.msg); }) } // 初始化 (function () { initOaNodeManage(); initStartNode(); initOaUserTaskCompleteListener(); initFormId(function () { initFormField(); }); })(); }];