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

698 lines
25 KiB
JavaScript
Raw Normal View History

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) {
2022-04-06 22:39:55 +08:00
// 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();
});
})();
}];