wg-basic/module-activiti/src/main/resources/static/editor-app/configuration/properties-oa-node-manage-controller.js

698 lines
25 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 modelJson = $scope.editor.getJSON();
console.log(modelJson);
var childShapes = modelJson.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.assignee;
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 () {
var assignee = $scope.oaNodeManage.assignee;
// 验证输入内容是否设置
if(assignee.nodeType === 'normal') {
if(assignee.assigneeType === 'appoint') {
if(assignee.assigneeCount === 'single') {
if(!assignee.assignee) {
top.dialog.msg('请选择代理人');
return;
}
}
if(assignee.assigneeCount === 'candidate') {
if(!assignee.candidates) {
top.dialog.msg('请选择候选人');
return;
}
}
}
}
if(assignee.nodeType === 'multiple') {
if(assignee.multipleType === 'parallel') {
if(assignee.completeCondition === 'customPass') {
if(!assignee.completeCount) {
top.dialog.msg('请输入完成条件中的通过人数');
return;
}
}
}
if(assignee.assigneeType === 'appoint') {
if(!assignee.multipleAssignees) {
top.dialog.msg('请选择(多实例)代理人');
return;
}
}
}
if(assignee.autoAssignType === 'scope') {
if(assignee.departmentType === 'appoint') {
if(!assignee.departments && !assignee.roles && !assignee.positions) {
top.dialog.msg('请选择部门、角色、职位中的至少一个类型');
return;
}
}
if(assignee.departmentType === 'belong') {
if(!assignee.roles && !assignee.positions) {
top.dialog.msg('请选择角色、职位中的至少一个类型');
return;
}
}
}
if(assignee.assigneeType === 'auto') {
if(assignee.autoAssignType === 'quick') {
if(assignee.quickAssignee === 'previousNStepAssigneeSubordinatePosition') {
if(!assignee.previousNStep) {
top.dialog.msg('请确认获取前哪一步的代理人');
return;
}
}
}
}
$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();
});
})();
}];