增加UserTask的OA节点管理,关闭模态框点击背景关闭,处理逻辑与问题
This commit is contained in:
parent
bce7a083a1
commit
56d880b459
@ -8,11 +8,14 @@ import org.activiti.engine.delegate.DelegateExecution;
|
|||||||
import org.activiti.engine.delegate.DelegateTask;
|
import org.activiti.engine.delegate.DelegateTask;
|
||||||
import org.activiti.engine.delegate.JavaDelegate;
|
import org.activiti.engine.delegate.JavaDelegate;
|
||||||
import org.activiti.engine.delegate.TaskListener;
|
import org.activiti.engine.delegate.TaskListener;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -29,6 +32,7 @@ public class OaUserTaskCompleteListener implements TaskListener, JavaDelegate {
|
|||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private RuntimeService runtimeService;
|
private RuntimeService runtimeService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private IActivitiModelService activitiModelService;
|
private IActivitiModelService activitiModelService;
|
||||||
@Autowired
|
@Autowired
|
||||||
@ -38,11 +42,42 @@ public class OaUserTaskCompleteListener implements TaskListener, JavaDelegate {
|
|||||||
public void notify(DelegateTask delegateTask) {
|
public void notify(DelegateTask delegateTask) {
|
||||||
LOG.debug(">>>> userTask complete");
|
LOG.debug(">>>> userTask complete");
|
||||||
Map<String, Object> variables = delegateTask.getVariables();
|
Map<String, Object> variables = delegateTask.getVariables();
|
||||||
|
|
||||||
|
|
||||||
LOG.debug("查询表单数据:variables: {}", variables);
|
LOG.debug("查询表单数据:variables: {}", variables);
|
||||||
UserTask nextUserTask = activitiModelService.getNextUserTask(delegateTask.getTaskDefinitionKey(), delegateTask.getProcessDefinitionId(), variables);
|
UserTask nextUserTask = activitiModelService.getNextUserTask(delegateTask.getTaskDefinitionKey(), delegateTask.getProcessDefinitionId(), variables);
|
||||||
// 1、nrOfInstances 该会签环节中总共有多少个实例 2、nrOfActiveInstances 当前活动的实例的数量,即还没有 完成的实例数量。 3、nrOfCompletedInstances 已经完成的实例的数量
|
if (nextUserTask != null) {
|
||||||
|
if (StringUtils.equals(nextUserTask.getName(), "任务3")) {
|
||||||
|
// nextUserTask.setAssignee("${signUser}");
|
||||||
|
// MultiInstanceLoopCharacteristics characteristics = new MultiInstanceLoopCharacteristics();
|
||||||
|
// characteristics.setInputDataItem("signUsers");
|
||||||
|
// characteristics.setElementVariable("signUser");
|
||||||
|
// characteristics.setSequential(false);
|
||||||
|
// characteristics.setCompletionCondition("${nrOfCompletedInstances==nrOfInstances}");
|
||||||
|
// nextUserTask.setLoopCharacteristics(characteristics);
|
||||||
|
|
||||||
// 设置会签
|
List<String> signUsers = new ArrayList<>();
|
||||||
|
signUsers.add("1");
|
||||||
|
signUsers.add("e48e9c4a-995e-4061-abcd-a3c260c11333");
|
||||||
|
|
||||||
|
// runtimeService.setVariable(delegateTask.getExecutionId(), "signUsers", signUsers);
|
||||||
|
delegateTask.setVariable("signUsers", signUsers);
|
||||||
|
} else {
|
||||||
|
nextUserTask.setAssignee("1");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(DelegateExecution execution) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 1、nrOfInstances 该会签环节中总共有多少个实例 2、nrOfActiveInstances 当前活动的实例的数量,即还没有 完成的实例数量。 3、nrOfCompletedInstances 已经完成的实例的数量
|
||||||
|
|
||||||
|
// 设置会签
|
||||||
// // 获取多实例配置
|
// // 获取多实例配置
|
||||||
// MultiInstanceLoopCharacteristics characteristics = new MultiInstanceLoopCharacteristics();
|
// MultiInstanceLoopCharacteristics characteristics = new MultiInstanceLoopCharacteristics();
|
||||||
// // 设置集合变量,统一设置成users
|
// // 设置集合变量,统一设置成users
|
||||||
@ -57,8 +92,8 @@ public class OaUserTaskCompleteListener implements TaskListener, JavaDelegate {
|
|||||||
// userTask.setLoopCharacteristics(characteristics);
|
// userTask.setLoopCharacteristics(characteristics);
|
||||||
|
|
||||||
|
|
||||||
// 清空会签
|
// 清空会签
|
||||||
// 获取多实例配置
|
// 获取多实例配置
|
||||||
// MultiInstanceLoopCharacteristics characteristics = userTask.getLoopCharacteristics();
|
// MultiInstanceLoopCharacteristics characteristics = userTask.getLoopCharacteristics();
|
||||||
// if (characteristics != null) {
|
// if (characteristics != null) {
|
||||||
// // 清空集合
|
// // 清空集合
|
||||||
@ -70,13 +105,5 @@ public class OaUserTaskCompleteListener implements TaskListener, JavaDelegate {
|
|||||||
// // 清空条件
|
// // 清空条件
|
||||||
// characteristics.setCompletionCondition("");
|
// characteristics.setCompletionCondition("");
|
||||||
// }
|
// }
|
||||||
if (nextUserTask != null) {
|
|
||||||
nextUserTask.setAssignee("1");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void execute(DelegateExecution execution) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -172,7 +172,7 @@ public class ActivitiServiceImpl extends DefaultBaseService implements IActiviti
|
|||||||
if (formPO == null) {
|
if (formPO == null) {
|
||||||
throw new SystemException("表单不存在");
|
throw new SystemException("表单不存在");
|
||||||
}
|
}
|
||||||
List<FormFieldPO> formFieldPOs = formFieldService.listPO(formPO.getFormId());
|
List<FormFieldPO> formFieldPOs = formFieldService.listPOByFormId(formPO.getFormId());
|
||||||
if (formFieldPOs.isEmpty()) {
|
if (formFieldPOs.isEmpty()) {
|
||||||
throw new SystemException("表单字段为空");
|
throw new SystemException("表单字段为空");
|
||||||
}
|
}
|
||||||
|
@ -25,6 +25,8 @@ var KisBpmAssignmentCtrl = ['$scope', '$modal', function ($scope, $modal) {
|
|||||||
// Config for the modal window
|
// Config for the modal window
|
||||||
var opts = {
|
var opts = {
|
||||||
template: 'editor-app/configuration/properties/assignment-popup.html?version=' + Date.now(),
|
template: 'editor-app/configuration/properties/assignment-popup.html?version=' + Date.now(),
|
||||||
|
backdrop: 'static',
|
||||||
|
keyboard: false,
|
||||||
scope: $scope
|
scope: $scope
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -26,6 +26,8 @@ var KisBpmConditionExpressionCtrl = [ '$scope', '$modal', function($scope, $moda
|
|||||||
// Config for the modal window
|
// Config for the modal window
|
||||||
var opts = {
|
var opts = {
|
||||||
template: 'static/editor-app/configuration/properties/condition-expression-popup.html?version=' + Date.now(),
|
template: 'static/editor-app/configuration/properties/condition-expression-popup.html?version=' + Date.now(),
|
||||||
|
backdrop: 'static',
|
||||||
|
keyboard: false,
|
||||||
scope: $scope
|
scope: $scope
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -26,6 +26,8 @@ var KisBpmEventListenersCtrl = [ '$scope', '$modal', '$timeout', '$translate', f
|
|||||||
// Config for the modal window
|
// Config for the modal window
|
||||||
var opts = {
|
var opts = {
|
||||||
template: 'editor-app/configuration/properties/event-listeners-popup.html?version=' + Date.now(),
|
template: 'editor-app/configuration/properties/event-listeners-popup.html?version=' + Date.now(),
|
||||||
|
backdrop: 'static',
|
||||||
|
keyboard: false,
|
||||||
scope: $scope
|
scope: $scope
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -26,6 +26,8 @@ var KisBpmExecutionListenersCtrl = [ '$scope', '$modal', '$timeout', '$translate
|
|||||||
// Config for the modal window
|
// Config for the modal window
|
||||||
var opts = {
|
var opts = {
|
||||||
template: 'editor-app/configuration/properties/execution-listeners-popup.html?version=' + Date.now(),
|
template: 'editor-app/configuration/properties/execution-listeners-popup.html?version=' + Date.now(),
|
||||||
|
backdrop: 'static',
|
||||||
|
keyboard: false,
|
||||||
scope: $scope
|
scope: $scope
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -26,6 +26,8 @@ var KisBpmFieldsCtrl = [ '$scope', '$modal', '$timeout', '$translate', function(
|
|||||||
// Config for the modal window
|
// Config for the modal window
|
||||||
var opts = {
|
var opts = {
|
||||||
template: 'editor-app/configuration/properties/fields-popup.html',
|
template: 'editor-app/configuration/properties/fields-popup.html',
|
||||||
|
backdrop: 'static',
|
||||||
|
keyboard: false,
|
||||||
scope: $scope
|
scope: $scope
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -26,6 +26,8 @@ var KisBpmFormPropertiesCtrl = [ '$scope', '$modal', '$timeout', '$translate', f
|
|||||||
// Config for the modal window
|
// Config for the modal window
|
||||||
var opts = {
|
var opts = {
|
||||||
template: 'editor-app/configuration/properties/form-properties-popup.html?version=' + Date.now(),
|
template: 'editor-app/configuration/properties/form-properties-popup.html?version=' + Date.now(),
|
||||||
|
backdrop: 'static',
|
||||||
|
keyboard: false,
|
||||||
scope: $scope
|
scope: $scope
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -23,6 +23,8 @@
|
|||||||
var FormSelectWriteController = ['$scope', '$modal', function($scope, $modal) {
|
var FormSelectWriteController = ['$scope', '$modal', function($scope, $modal) {
|
||||||
$modal({
|
$modal({
|
||||||
template: 'editor-app/configuration/properties/form-select-template.html?version=' + Date.now(),
|
template: 'editor-app/configuration/properties/form-select-template.html?version=' + Date.now(),
|
||||||
|
backdrop: 'static',
|
||||||
|
keyboard: false,
|
||||||
scope: $scope
|
scope: $scope
|
||||||
});
|
});
|
||||||
}];
|
}];
|
||||||
|
@ -26,6 +26,8 @@ var KisBpmInParametersCtrl = [ '$scope', '$modal', '$timeout', '$translate', fun
|
|||||||
// Config for the modal window
|
// Config for the modal window
|
||||||
var opts = {
|
var opts = {
|
||||||
template: 'editor-app/configuration/properties/in-parameters-popup.html?version=' + Date.now(),
|
template: 'editor-app/configuration/properties/in-parameters-popup.html?version=' + Date.now(),
|
||||||
|
backdrop: 'static',
|
||||||
|
keyboard: false,
|
||||||
scope: $scope
|
scope: $scope
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -26,6 +26,8 @@ angular.module('activitiModeler').controller('ActivitiMessageDefinitionsCtrl', [
|
|||||||
// Config for the modal window
|
// Config for the modal window
|
||||||
var opts = {
|
var opts = {
|
||||||
template: 'editor-app/configuration/properties/message-definitions-popup.html?version=' + Date.now(),
|
template: 'editor-app/configuration/properties/message-definitions-popup.html?version=' + Date.now(),
|
||||||
|
backdrop: 'static',
|
||||||
|
keyboard: false,
|
||||||
scope: $scope
|
scope: $scope
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -0,0 +1,244 @@
|
|||||||
|
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 taskListenerProperty = $scope.selectedItem.properties[16];
|
||||||
|
|
||||||
|
// 初始化
|
||||||
|
var startNode;
|
||||||
|
$scope.oaNodeManage = {
|
||||||
|
assignee: {
|
||||||
|
nodeType: 'normal',
|
||||||
|
assigneeType: '',
|
||||||
|
assigneeCount: 0,
|
||||||
|
assignee: '',
|
||||||
|
autoAssignType: '',
|
||||||
|
departmentType: '',
|
||||||
|
departments: '',
|
||||||
|
roles: '',
|
||||||
|
positions: '',
|
||||||
|
quickAssignee: '',
|
||||||
|
signType: '',
|
||||||
|
signUsers: '',
|
||||||
|
completeCondition: '',
|
||||||
|
completeCount: 0
|
||||||
|
},
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Click handler for save button
|
||||||
|
$scope.save = function () {
|
||||||
|
|
||||||
|
$scope.property.value = {};
|
||||||
|
$scope.property.value = $scope.oaNodeManage;
|
||||||
|
$scope.updatePropertyInModel($scope.property);
|
||||||
|
|
||||||
|
// 更新任务监听器列表
|
||||||
|
taskListenerProperty.value = {}
|
||||||
|
taskListenerProperty.value.taskListeners = $scope.oaNodeManage.oaUserTaskListeners;
|
||||||
|
$scope.updatePropertyInModel(taskListenerProperty);
|
||||||
|
$scope.close();
|
||||||
|
};
|
||||||
|
|
||||||
|
$scope.cancel = function () {
|
||||||
|
$scope.close();
|
||||||
|
};
|
||||||
|
|
||||||
|
// Close button handler
|
||||||
|
$scope.close = function () {
|
||||||
|
taskListenerProperty.mode = 'read';
|
||||||
|
$scope.property.mode = 'read';
|
||||||
|
$scope.$hide();
|
||||||
|
};
|
||||||
|
|
||||||
|
function initOaNodeManage() {
|
||||||
|
if($scope.property.value) {
|
||||||
|
$scope.oaNodeManage = $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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 初始化form表单ID
|
||||||
|
function initFormId() {
|
||||||
|
$scope.oaNodeManage.formId = startNode.properties.formkeydefinition;
|
||||||
|
if(!$scope.oaNodeManage.formId) {
|
||||||
|
top.dialog.msg('开始节点未绑定表单,无法设置OA节点');
|
||||||
|
$scope.close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 初始化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);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 初始化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);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 初始化
|
||||||
|
(function() {
|
||||||
|
initOaNodeManage();
|
||||||
|
initStartNode();
|
||||||
|
initFormId();
|
||||||
|
initFormField();
|
||||||
|
initOaUserTaskCompleteListener();
|
||||||
|
})();
|
||||||
|
|
||||||
|
}];
|
@ -26,6 +26,8 @@ var KisBpmSequenceFlowOrderCtrl = [ '$scope', '$modal', '$timeout', '$translate'
|
|||||||
// Config for the modal window
|
// Config for the modal window
|
||||||
var opts = {
|
var opts = {
|
||||||
template: 'editor-app/configuration/properties/sequenceflow-order-popup.html?version=' + Date.now(),
|
template: 'editor-app/configuration/properties/sequenceflow-order-popup.html?version=' + Date.now(),
|
||||||
|
backdrop: 'static',
|
||||||
|
keyboard: false,
|
||||||
scope: $scope
|
scope: $scope
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -22,6 +22,8 @@ angular.module('activitiModeler').controller('ActivitiSignalDefinitionsCtrl', ['
|
|||||||
// Config for the modal window
|
// Config for the modal window
|
||||||
var opts = {
|
var opts = {
|
||||||
template: 'editor-app/configuration/properties/signal-definitions-popup.html?version=' + Date.now(),
|
template: 'editor-app/configuration/properties/signal-definitions-popup.html?version=' + Date.now(),
|
||||||
|
backdrop: 'static',
|
||||||
|
keyboard: false,
|
||||||
scope: $scope
|
scope: $scope
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -21,11 +21,13 @@
|
|||||||
* Task listeners
|
* Task listeners
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var KisBpmTaskListenersCtrl = [ '$scope', '$modal', '$timeout', '$translate', function($scope, $modal, $timeout, $translate) {
|
var KisBpmTaskListenersCtrl = ['$scope', '$modal', '$timeout', '$translate', function ($scope, $modal, $timeout, $translate) {
|
||||||
|
|
||||||
// Config for the modal window
|
// Config for the modal window
|
||||||
var opts = {
|
var opts = {
|
||||||
template: 'editor-app/configuration/properties/task-listeners-popup.html?version=' + Date.now(),
|
template: 'editor-app/configuration/properties/task-listeners-popup.html?version=' + Date.now(),
|
||||||
|
backdrop: 'static',
|
||||||
|
keyboard: false,
|
||||||
scope: $scope
|
scope: $scope
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -33,37 +35,28 @@ var KisBpmTaskListenersCtrl = [ '$scope', '$modal', '$timeout', '$translate', fu
|
|||||||
$modal(opts);
|
$modal(opts);
|
||||||
}];
|
}];
|
||||||
|
|
||||||
var KisBpmTaskListenersPopupCtrl = [ '$scope', '$timeout', '$q', '$translate', function($scope, $timeout, $q, $translate) {
|
var KisBpmTaskListenersPopupCtrl = ['$scope', '$timeout', '$q', '$translate', function ($scope, $timeout, $q, $translate) {
|
||||||
|
|
||||||
// Put json representing form properties on scope
|
// Put json representing form properties on scope
|
||||||
if ($scope.property.value !== undefined && $scope.property.value !== null
|
if ($scope.property.value !== undefined && $scope.property.value !== null
|
||||||
&& $scope.property.value.taskListeners !== undefined
|
&& $scope.property.value.taskListeners !== undefined
|
||||||
&& $scope.property.value.taskListeners !== null) {
|
&& $scope.property.value.taskListeners !== null) {
|
||||||
|
|
||||||
if ($scope.property.value.taskListeners.constructor == String)
|
if ($scope.property.value.taskListeners.constructor == String) {
|
||||||
{
|
|
||||||
$scope.taskListeners = JSON.parse($scope.property.value.taskListeners);
|
$scope.taskListeners = JSON.parse($scope.property.value.taskListeners);
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
// Note that we clone the json object rather then setting it directly,
|
// Note that we clone the json object rather then setting it directly,
|
||||||
// this to cope with the fact that the user can click the cancel button and no changes should have happened
|
// this to cope with the fact that the user can click the cancel button and no changes should have happened
|
||||||
$scope.taskListeners = angular.copy($scope.property.value.taskListeners);
|
$scope.taskListeners = angular.copy($scope.property.value.taskListeners);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var i = 0; i < $scope.taskListeners.length; i++)
|
for (var i = 0; i < $scope.taskListeners.length; i++) {
|
||||||
{
|
|
||||||
var taskListener = $scope.taskListeners[i];
|
var taskListener = $scope.taskListeners[i];
|
||||||
if (taskListener.className !== undefined && taskListener.className !== '')
|
if (taskListener.className !== undefined && taskListener.className !== '') {
|
||||||
{
|
|
||||||
taskListener.implementation = taskListener.className;
|
taskListener.implementation = taskListener.className;
|
||||||
}
|
} else if (taskListener.expression !== undefined && taskListener.expression !== '') {
|
||||||
else if (taskListener.expression !== undefined && taskListener.expression !== '')
|
|
||||||
{
|
|
||||||
taskListener.implementation = taskListener.expression;
|
taskListener.implementation = taskListener.expression;
|
||||||
}
|
} else if (taskListener.delegateExpression !== undefined && taskListener.delegateExpression !== '') {
|
||||||
else if (taskListener.delegateExpression !== undefined && taskListener.delegateExpression !== '')
|
|
||||||
{
|
|
||||||
taskListener.implementation = taskListener.delegateExpression;
|
taskListener.implementation = taskListener.delegateExpression;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -75,14 +68,14 @@ var KisBpmTaskListenersPopupCtrl = [ '$scope', '$timeout', '$q', '$translate', f
|
|||||||
$scope.selectedListeners = [];
|
$scope.selectedListeners = [];
|
||||||
$scope.selectedFields = [];
|
$scope.selectedFields = [];
|
||||||
$scope.translationsRetrieved = false;
|
$scope.translationsRetrieved = false;
|
||||||
|
|
||||||
$scope.labels = {};
|
$scope.labels = {};
|
||||||
|
|
||||||
var eventPromise = $translate('PROPERTY.TASKLISTENERS.EVENT');
|
var eventPromise = $translate('PROPERTY.TASKLISTENERS.EVENT');
|
||||||
var implementationPromise = $translate('PROPERTY.TASKLISTENERS.FIELDS.IMPLEMENTATION');
|
var implementationPromise = $translate('PROPERTY.TASKLISTENERS.FIELDS.IMPLEMENTATION');
|
||||||
var namePromise = $translate('PROPERTY.TASKLISTENERS.FIELDS.NAME');
|
var namePromise = $translate('PROPERTY.TASKLISTENERS.FIELDS.NAME');
|
||||||
|
|
||||||
$q.all([eventPromise, implementationPromise, namePromise]).then(function(results) {
|
$q.all([eventPromise, implementationPromise, namePromise]).then(function (results) {
|
||||||
$scope.labels.eventLabel = results[0];
|
$scope.labels.eventLabel = results[0];
|
||||||
$scope.labels.implementationLabel = results[1];
|
$scope.labels.implementationLabel = results[1];
|
||||||
$scope.labels.nameLabel = results[2];
|
$scope.labels.nameLabel = results[2];
|
||||||
@ -94,90 +87,75 @@ var KisBpmTaskListenersPopupCtrl = [ '$scope', '$timeout', '$q', '$translate', f
|
|||||||
enableRowReordering: true,
|
enableRowReordering: true,
|
||||||
headerRowHeight: 28,
|
headerRowHeight: 28,
|
||||||
multiSelect: false,
|
multiSelect: false,
|
||||||
keepLastSelected : false,
|
keepLastSelected: false,
|
||||||
selectedItems: $scope.selectedListeners,
|
selectedItems: $scope.selectedListeners,
|
||||||
afterSelectionChange: function (rowItem, event) {
|
afterSelectionChange: function (rowItem, event) {
|
||||||
$scope.selectedFields.length = 0;
|
$scope.selectedFields.length = 0;
|
||||||
if ($scope.selectedListeners.length > 0)
|
if ($scope.selectedListeners.length > 0) {
|
||||||
{
|
|
||||||
var fields = $scope.selectedListeners[0].fields;
|
var fields = $scope.selectedListeners[0].fields;
|
||||||
if (fields !== undefined && fields !== null)
|
if (fields !== undefined && fields !== null) {
|
||||||
{
|
for (var i = 0; i < fields.length; i++) {
|
||||||
for (var i = 0; i < fields.length; i++)
|
|
||||||
{
|
|
||||||
var field = fields[i];
|
var field = fields[i];
|
||||||
if (field.stringValue !== undefined && field.stringValue !== '')
|
if (field.stringValue !== undefined && field.stringValue !== '') {
|
||||||
{
|
|
||||||
field.implementation = field.stringValue;
|
field.implementation = field.stringValue;
|
||||||
}
|
} else if (field.expression !== undefined && field.expression !== '') {
|
||||||
else if (field.expression !== undefined && field.expression !== '')
|
|
||||||
{
|
|
||||||
field.implementation = field.expression;
|
field.implementation = field.expression;
|
||||||
}
|
} else if (field.string !== undefined && field.string !== '') {
|
||||||
else if (field.string !== undefined && field.string !== '')
|
|
||||||
{
|
|
||||||
field.implementation = field.string;
|
field.implementation = field.string;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
columnDefs: [{ field: 'event', displayName: $scope.labels.eventLabel },
|
columnDefs: [{field: 'event', displayName: $scope.labels.eventLabel},
|
||||||
{ field: 'implementation', displayName: $scope.labels.implementationLabel}]
|
{field: 'implementation', displayName: $scope.labels.implementationLabel}]
|
||||||
};
|
};
|
||||||
|
|
||||||
// Config for field grid
|
// Config for field grid
|
||||||
$scope.gridFieldOptions = {
|
$scope.gridFieldOptions = {
|
||||||
data: 'selectedListeners[0].fields',
|
data: 'selectedListeners[0].fields',
|
||||||
enableRowReordering: true,
|
enableRowReordering: true,
|
||||||
headerRowHeight: 28,
|
headerRowHeight: 28,
|
||||||
multiSelect: false,
|
multiSelect: false,
|
||||||
keepLastSelected : false,
|
keepLastSelected: false,
|
||||||
selectedItems: $scope.selectedFields,
|
selectedItems: $scope.selectedFields,
|
||||||
columnDefs: [{ field: 'name', displayName: $scope.labels.name },
|
columnDefs: [{field: 'name', displayName: $scope.labels.name},
|
||||||
{ field: 'implementation', displayName: $scope.labels.implementationLabel}]
|
{field: 'implementation', displayName: $scope.labels.implementationLabel}]
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
$scope.listenerDetailsChanged = function() {
|
$scope.listenerDetailsChanged = function () {
|
||||||
if ($scope.selectedListeners[0].className !== '')
|
if ($scope.selectedListeners[0].className !== '') {
|
||||||
{
|
|
||||||
$scope.selectedListeners[0].implementation = $scope.selectedListeners[0].className;
|
$scope.selectedListeners[0].implementation = $scope.selectedListeners[0].className;
|
||||||
}
|
} else if ($scope.selectedListeners[0].expression !== '') {
|
||||||
else if ($scope.selectedListeners[0].expression !== '')
|
|
||||||
{
|
|
||||||
$scope.selectedListeners[0].implementation = $scope.selectedListeners[0].expression;
|
$scope.selectedListeners[0].implementation = $scope.selectedListeners[0].expression;
|
||||||
}
|
} else if ($scope.selectedListeners[0].delegateExpression !== '') {
|
||||||
else if ($scope.selectedListeners[0].delegateExpression !== '')
|
|
||||||
{
|
|
||||||
$scope.selectedListeners[0].implementation = $scope.selectedListeners[0].delegateExpression;
|
$scope.selectedListeners[0].implementation = $scope.selectedListeners[0].delegateExpression;
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
$scope.selectedListeners[0].implementation = '';
|
$scope.selectedListeners[0].implementation = '';
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
function addListener(event, className, expression, delegateExpression) {
|
function addListener(event, className, expression, delegateExpression) {
|
||||||
var implementation = '';
|
var implementation = '';
|
||||||
if(className) {
|
if (className) {
|
||||||
implementation = className;
|
implementation = className;
|
||||||
} else if(expression) {
|
} else if (expression) {
|
||||||
implementation = expression;
|
implementation = expression;
|
||||||
} else if(delegateExpression) {
|
} else if (delegateExpression) {
|
||||||
implementation = delegateExpression;
|
implementation = delegateExpression;
|
||||||
}
|
}
|
||||||
$scope.taskListeners.push({
|
$scope.taskListeners.push({
|
||||||
event : event,
|
event: event,
|
||||||
implementation : implementation,
|
implementation: implementation,
|
||||||
className : className ? className : '',
|
className: className ? className : '',
|
||||||
expression: expression ? expression : '',
|
expression: expression ? expression : '',
|
||||||
delegateExpression: delegateExpression ? delegateExpression : ''
|
delegateExpression: delegateExpression ? delegateExpression : ''
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Click handler for add button
|
// Click handler for add button
|
||||||
$scope.addNewListener = function() {
|
$scope.addNewListener = function () {
|
||||||
addListener('create');
|
addListener('create');
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -187,8 +165,8 @@ var KisBpmTaskListenersPopupCtrl = [ '$scope', '$timeout', '$q', '$translate', f
|
|||||||
* @param className
|
* @param className
|
||||||
*/
|
*/
|
||||||
function isListenerExist(event, className) {
|
function isListenerExist(event, className) {
|
||||||
for(var i = 0, item; item = $scope.taskListeners[i++]; ) {
|
for (var i = 0, item; item = $scope.taskListeners[i++];) {
|
||||||
if(item.event == event && item.className == className) {
|
if (item.event == event && item.className == className) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -196,45 +174,45 @@ var KisBpmTaskListenersPopupCtrl = [ '$scope', '$timeout', '$q', '$translate', f
|
|||||||
}
|
}
|
||||||
|
|
||||||
// quick add listener
|
// quick add listener
|
||||||
$scope.addOaUserTaskCreateListener = function() {
|
$scope.addOaUserTaskCreateListener = function () {
|
||||||
var event = 'create',
|
var event = 'create',
|
||||||
className = '',
|
className = '',
|
||||||
expression = '',
|
expression = '',
|
||||||
delegateExpression = '${oaUserTaskCreateListener}';
|
delegateExpression = '${oaUserTaskCreateListener}';
|
||||||
if(isListenerExist(event, className)) {
|
if (isListenerExist(event, className)) {
|
||||||
top.dialog.msg('监听器已经存在');
|
top.dialog.msg('监听器已经存在');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
addListener(event, className, expression, delegateExpression);
|
addListener(event, className, expression, delegateExpression);
|
||||||
}
|
}
|
||||||
$scope.addOaUserTaskCompleteListener = function() {
|
$scope.addOaUserTaskCompleteListener = function () {
|
||||||
var event = 'complete',
|
var event = 'complete',
|
||||||
className = '',
|
className = '',
|
||||||
expression = '',
|
expression = '',
|
||||||
delegateExpression = '${oaUserTaskCompleteListener}';
|
delegateExpression = '${oaUserTaskCompleteListener}';
|
||||||
if(isListenerExist(event, className)) {
|
if (isListenerExist(event, className)) {
|
||||||
top.dialog.msg('监听器已经存在');
|
top.dialog.msg('监听器已经存在');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
addListener(event, className, expression, delegateExpression);
|
addListener(event, className, expression, delegateExpression);
|
||||||
}
|
}
|
||||||
$scope.addOaUserTaskAssignmentListener = function() {
|
$scope.addOaUserTaskAssignmentListener = function () {
|
||||||
var event = 'assignment',
|
var event = 'assignment',
|
||||||
className = '',
|
className = '',
|
||||||
expression = '',
|
expression = '',
|
||||||
delegateExpression = '${oaUserTaskAssignmentListener}';
|
delegateExpression = '${oaUserTaskAssignmentListener}';
|
||||||
if(isListenerExist(event, className)) {
|
if (isListenerExist(event, className)) {
|
||||||
top.dialog.msg('监听器已经存在');
|
top.dialog.msg('监听器已经存在');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
addListener(event, className, expression, delegateExpression);
|
addListener(event, className, expression, delegateExpression);
|
||||||
}
|
}
|
||||||
$scope.addOaUserTaskDeleteListener = function() {
|
$scope.addOaUserTaskDeleteListener = function () {
|
||||||
var event = 'delete',
|
var event = 'delete',
|
||||||
className = '',
|
className = '',
|
||||||
expression = '',
|
expression = '',
|
||||||
delegateExpression = '${oaUserTaskDeleteListener}';
|
delegateExpression = '${oaUserTaskDeleteListener}';
|
||||||
if(isListenerExist(event, className)) {
|
if (isListenerExist(event, className)) {
|
||||||
top.dialog.msg('监听器已经存在');
|
top.dialog.msg('监听器已经存在');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -242,7 +220,7 @@ var KisBpmTaskListenersPopupCtrl = [ '$scope', '$timeout', '$q', '$translate', f
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Click handler for remove button
|
// Click handler for remove button
|
||||||
$scope.removeListener = function() {
|
$scope.removeListener = function () {
|
||||||
if ($scope.selectedListeners.length > 0) {
|
if ($scope.selectedListeners.length > 0) {
|
||||||
var index = $scope.taskListeners.indexOf($scope.selectedListeners[0]);
|
var index = $scope.taskListeners.indexOf($scope.selectedListeners[0]);
|
||||||
$scope.gridOptions.selectItem(index, false);
|
$scope.gridOptions.selectItem(index, false);
|
||||||
@ -258,7 +236,7 @@ var KisBpmTaskListenersPopupCtrl = [ '$scope', '$timeout', '$q', '$translate', f
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Click handler for up button
|
// Click handler for up button
|
||||||
$scope.moveListenerUp = function() {
|
$scope.moveListenerUp = function () {
|
||||||
if ($scope.selectedListeners.length > 0) {
|
if ($scope.selectedListeners.length > 0) {
|
||||||
var index = $scope.taskListeners.indexOf($scope.selectedListeners[0]);
|
var index = $scope.taskListeners.indexOf($scope.selectedListeners[0]);
|
||||||
if (index != 0) { // If it's the first, no moving up of course
|
if (index != 0) { // If it's the first, no moving up of course
|
||||||
@ -266,7 +244,7 @@ var KisBpmTaskListenersPopupCtrl = [ '$scope', '$timeout', '$q', '$translate', f
|
|||||||
var prevIndex = index - 1;
|
var prevIndex = index - 1;
|
||||||
var temp = $scope.taskListeners[index];
|
var temp = $scope.taskListeners[index];
|
||||||
$scope.taskListeners.splice(index, 1);
|
$scope.taskListeners.splice(index, 1);
|
||||||
$timeout(function() {
|
$timeout(function () {
|
||||||
$scope.taskListeners.splice(prevIndex, 0, temp);
|
$scope.taskListeners.splice(prevIndex, 0, temp);
|
||||||
}, 100);
|
}, 100);
|
||||||
}
|
}
|
||||||
@ -274,7 +252,7 @@ var KisBpmTaskListenersPopupCtrl = [ '$scope', '$timeout', '$q', '$translate', f
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Click handler for down button
|
// Click handler for down button
|
||||||
$scope.moveListenerDown = function() {
|
$scope.moveListenerDown = function () {
|
||||||
if ($scope.selectedListeners.length > 0) {
|
if ($scope.selectedListeners.length > 0) {
|
||||||
var index = $scope.taskListeners.indexOf($scope.selectedListeners[0]);
|
var index = $scope.taskListeners.indexOf($scope.selectedListeners[0]);
|
||||||
if (index != $scope.taskListeners.length - 1) { // If it's the last element, no moving down of course
|
if (index != $scope.taskListeners.length - 1) { // If it's the last element, no moving down of course
|
||||||
@ -282,51 +260,44 @@ var KisBpmTaskListenersPopupCtrl = [ '$scope', '$timeout', '$q', '$translate', f
|
|||||||
var nextIndex = index + 1;
|
var nextIndex = index + 1;
|
||||||
var temp = $scope.taskListeners[index];
|
var temp = $scope.taskListeners[index];
|
||||||
$scope.taskListeners.splice(index, 1);
|
$scope.taskListeners.splice(index, 1);
|
||||||
$timeout(function(){
|
$timeout(function () {
|
||||||
$scope.taskListeners.splice(nextIndex, 0, temp);
|
$scope.taskListeners.splice(nextIndex, 0, temp);
|
||||||
}, 100);
|
}, 100);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.fieldDetailsChanged = function() {
|
$scope.fieldDetailsChanged = function () {
|
||||||
if ($scope.selectedFields[0].stringValue != '')
|
if ($scope.selectedFields[0].stringValue != '') {
|
||||||
{
|
|
||||||
$scope.selectedFields[0].implementation = $scope.selectedFields[0].stringValue;
|
$scope.selectedFields[0].implementation = $scope.selectedFields[0].stringValue;
|
||||||
}
|
} else if ($scope.selectedFields[0].expression != '') {
|
||||||
else if ($scope.selectedFields[0].expression != '')
|
|
||||||
{
|
|
||||||
$scope.selectedFields[0].implementation = $scope.selectedFields[0].expression;
|
$scope.selectedFields[0].implementation = $scope.selectedFields[0].expression;
|
||||||
}
|
} else if ($scope.selectedFields[0].string != '') {
|
||||||
else if ($scope.selectedFields[0].string != '')
|
|
||||||
{
|
|
||||||
$scope.selectedFields[0].implementation = $scope.selectedFields[0].string;
|
$scope.selectedFields[0].implementation = $scope.selectedFields[0].string;
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
$scope.selectedFields[0].implementation = '';
|
$scope.selectedFields[0].implementation = '';
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Click handler for add button
|
// Click handler for add button
|
||||||
$scope.addNewField = function() {
|
$scope.addNewField = function () {
|
||||||
if ($scope.selectedListeners.length > 0)
|
if ($scope.selectedListeners.length > 0) {
|
||||||
{
|
if ($scope.selectedListeners[0].fields == undefined) {
|
||||||
if ($scope.selectedListeners[0].fields == undefined)
|
|
||||||
{
|
|
||||||
$scope.selectedListeners[0].fields = [];
|
$scope.selectedListeners[0].fields = [];
|
||||||
}
|
}
|
||||||
$scope.selectedListeners[0].fields.push({ name : 'fieldName',
|
$scope.selectedListeners[0].fields.push({
|
||||||
implementation : '',
|
name: 'fieldName',
|
||||||
stringValue : '',
|
implementation: '',
|
||||||
|
stringValue: '',
|
||||||
expression: '',
|
expression: '',
|
||||||
string: ''});
|
string: ''
|
||||||
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Click handler for remove button
|
// Click handler for remove button
|
||||||
$scope.removeField = function() {
|
$scope.removeField = function () {
|
||||||
if ($scope.selectedFields.length > 0) {
|
if ($scope.selectedFields.length > 0) {
|
||||||
var index = $scope.selectedListeners[0].fields.indexOf($scope.selectedFields[0]);
|
var index = $scope.selectedListeners[0].fields.indexOf($scope.selectedFields[0]);
|
||||||
$scope.gridFieldOptions.selectItem(index, false);
|
$scope.gridFieldOptions.selectItem(index, false);
|
||||||
@ -342,14 +313,14 @@ var KisBpmTaskListenersPopupCtrl = [ '$scope', '$timeout', '$q', '$translate', f
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Click handler for up button
|
// Click handler for up button
|
||||||
$scope.moveFieldUp = function() {
|
$scope.moveFieldUp = function () {
|
||||||
if ($scope.selectedFields.length > 0) {
|
if ($scope.selectedFields.length > 0) {
|
||||||
var index = $scope.selectedListeners[0].fields.indexOf($scope.selectedFields[0]);
|
var index = $scope.selectedListeners[0].fields.indexOf($scope.selectedFields[0]);
|
||||||
if (index != 0) { // If it's the first, no moving up of course
|
if (index != 0) { // If it's the first, no moving up of course
|
||||||
// Reason for funny way of swapping, see https://github.com/angular-ui/ng-grid/issues/272
|
// Reason for funny way of swapping, see https://github.com/angular-ui/ng-grid/issues/272
|
||||||
var temp = $scope.selectedListeners[0].fields[index];
|
var temp = $scope.selectedListeners[0].fields[index];
|
||||||
$scope.selectedListeners[0].fields.splice(index, 1);
|
$scope.selectedListeners[0].fields.splice(index, 1);
|
||||||
$timeout(function(){
|
$timeout(function () {
|
||||||
$scope.selectedListeners[0].fields.splice(index + -1, 0, temp);
|
$scope.selectedListeners[0].fields.splice(index + -1, 0, temp);
|
||||||
}, 100);
|
}, 100);
|
||||||
|
|
||||||
@ -358,14 +329,14 @@ var KisBpmTaskListenersPopupCtrl = [ '$scope', '$timeout', '$q', '$translate', f
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Click handler for down button
|
// Click handler for down button
|
||||||
$scope.moveFieldDown = function() {
|
$scope.moveFieldDown = function () {
|
||||||
if ($scope.selectedFields.length > 0) {
|
if ($scope.selectedFields.length > 0) {
|
||||||
var index = $scope.selectedListeners[0].fields.indexOf($scope.selectedFields[0]);
|
var index = $scope.selectedListeners[0].fields.indexOf($scope.selectedFields[0]);
|
||||||
if (index != $scope.selectedListeners[0].fields.length - 1) { // If it's the last element, no moving down of course
|
if (index != $scope.selectedListeners[0].fields.length - 1) { // If it's the last element, no moving down of course
|
||||||
// Reason for funny way of swapping, see https://github.com/angular-ui/ng-grid/issues/272
|
// Reason for funny way of swapping, see https://github.com/angular-ui/ng-grid/issues/272
|
||||||
var temp = $scope.selectedListeners[0].fields[index];
|
var temp = $scope.selectedListeners[0].fields[index];
|
||||||
$scope.selectedListeners[0].fields.splice(index, 1);
|
$scope.selectedListeners[0].fields.splice(index, 1);
|
||||||
$timeout(function(){
|
$timeout(function () {
|
||||||
$scope.selectedListeners[0].fields.splice(index + 1, 0, temp);
|
$scope.selectedListeners[0].fields.splice(index + 1, 0, temp);
|
||||||
}, 100);
|
}, 100);
|
||||||
|
|
||||||
@ -374,7 +345,7 @@ var KisBpmTaskListenersPopupCtrl = [ '$scope', '$timeout', '$q', '$translate', f
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Click handler for save button
|
// Click handler for save button
|
||||||
$scope.save = function() {
|
$scope.save = function () {
|
||||||
|
|
||||||
if ($scope.taskListeners.length > 0) {
|
if ($scope.taskListeners.length > 0) {
|
||||||
$scope.property.value = {};
|
$scope.property.value = {};
|
||||||
@ -387,12 +358,12 @@ var KisBpmTaskListenersPopupCtrl = [ '$scope', '$timeout', '$q', '$translate', f
|
|||||||
$scope.close();
|
$scope.close();
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.cancel = function() {
|
$scope.cancel = function () {
|
||||||
$scope.close();
|
$scope.close();
|
||||||
};
|
};
|
||||||
|
|
||||||
// Close button handler
|
// Close button handler
|
||||||
$scope.close = function() {
|
$scope.close = function () {
|
||||||
$scope.property.mode = 'read';
|
$scope.property.mode = 'read';
|
||||||
$scope.$hide();
|
$scope.$hide();
|
||||||
};
|
};
|
||||||
|
@ -99,5 +99,9 @@ KISBPM.PROPERTY_CONFIG =
|
|||||||
"formkeydefinition": {
|
"formkeydefinition": {
|
||||||
"readModeTemplateUrl": "editor-app/configuration/properties/form-select-display-template.html",
|
"readModeTemplateUrl": "editor-app/configuration/properties/form-select-display-template.html",
|
||||||
"writeModeTemplateUrl": "editor-app/configuration/properties/form-select-write-template.html"
|
"writeModeTemplateUrl": "editor-app/configuration/properties/form-select-write-template.html"
|
||||||
|
},
|
||||||
|
"oanodemanage": {
|
||||||
|
"readModeTemplateUrl": "editor-app/configuration/properties/oa-node-manage-display-template.html",
|
||||||
|
"writeModeTemplateUrl": "editor-app/configuration/properties/oa-node-manage-write-template.html"
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -0,0 +1,2 @@
|
|||||||
|
<span ng-if="property.value">点击编辑节点信息</span>
|
||||||
|
<span ng-if="!property.value">点击设置节点信息</span>
|
@ -0,0 +1,362 @@
|
|||||||
|
<div class="modal" ng-controller="OaNodeManagePopupCtrl">
|
||||||
|
|
||||||
|
<div class="modal-dialog modal-wide">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal" aria-hidden="true" ng-click="close()">×</button>
|
||||||
|
<h2>OA节点管理</h2>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<ul class="nav nav-tabs" role="tablist">
|
||||||
|
<li class="active">
|
||||||
|
<a href="#nodeConfig" aria-controls="home" role="tab" data-toggle="tab"><h5>代理人配置</h5></a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="#buttonConfig" aria-controls="profile" role="tab" data-toggle="tab"><h5>按钮配置</h5></a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="#formFieldConfig" aria-controls="profile" role="tab" data-toggle="tab"><h5>表单字段配置</h5></a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="#listenerConfig" aria-controls="profile" role="tab" data-toggle="tab"><h5>监听器配置</h5></a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<div class="tab-content">
|
||||||
|
<div role="tabpanel" class="tab-pane active" id="nodeConfig" style="padding: 15px 0;">
|
||||||
|
<table class="table table-bordered table-hover">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<h5>节点类型</h5>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<div>
|
||||||
|
<label class="radio-inline">
|
||||||
|
<input ng-model="oaNodeManage.assignee.nodeType" type="radio" name="nodeType" value="normal"> 普通节点
|
||||||
|
</label>
|
||||||
|
<label class="radio-inline">
|
||||||
|
<input ng-model="oaNodeManage.assignee.nodeType" type="radio" name="nodeType" value="sign"> 会签节点
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<!-- 普通节点 start -->
|
||||||
|
<tr ng-if="oaNodeManage.assignee.nodeType == 'normal'">
|
||||||
|
<td>
|
||||||
|
<h5>代理人类型</h5>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr ng-if="oaNodeManage.assignee.nodeType == 'normal'">
|
||||||
|
<td>
|
||||||
|
<div>
|
||||||
|
<label class="radio-inline">
|
||||||
|
<input ng-model="oaNodeManage.assignee.assigneeType" type="radio" name="assigneeType" value="appoint"> 手动指定
|
||||||
|
</label>
|
||||||
|
<label class="radio-inline">
|
||||||
|
<input ng-model="oaNodeManage.assignee.assigneeType" type="radio" name="assigneeType" value="auto"> 自动获取
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<!-- 手动指定代理人 start -->
|
||||||
|
<tr ng-if="oaNodeManage.assignee.nodeType == 'normal' && oaNodeManage.assignee.assigneeType == 'appoint'">
|
||||||
|
<td>
|
||||||
|
<h5>代理人数量</h5>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr ng-if="oaNodeManage.assignee.nodeType == 'normal' && oaNodeManage.assignee.assigneeType == 'appoint'">
|
||||||
|
<td>
|
||||||
|
<div>
|
||||||
|
<label class="radio-inline">
|
||||||
|
<input ng-model="oaNodeManage.assignee.assigneeCount" type="radio" name="assigneeCount" value="single"> 单人
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr ng-if="oaNodeManage.assignee.nodeType == 'normal' && oaNodeManage.assignee.assigneeType == 'appoint' && oaNodeManage.assignee.assigneeCount == 'single'">
|
||||||
|
<td>
|
||||||
|
<h5>选择代理人</h5>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr ng-if="oaNodeManage.assignee.nodeType == 'normal' && oaNodeManage.assignee.assigneeType == 'appoint' && oaNodeManage.assignee.assigneeCount == 'single'">
|
||||||
|
<td>
|
||||||
|
<input ng-model="oaNodeManage.assignee.assignee" type="hidden" name="assignee">
|
||||||
|
<button type="button">选择</button>
|
||||||
|
<span>用户1</span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<!-- 手动指定代理人 end -->
|
||||||
|
<!-- 自动获取代理人 start -->
|
||||||
|
<tr ng-if="oaNodeManage.assignee.nodeType == 'normal' && oaNodeManage.assignee.assigneeType == 'auto'">
|
||||||
|
<td>
|
||||||
|
<h5>自动方式</h5>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr ng-if="oaNodeManage.assignee.nodeType == 'normal' && oaNodeManage.assignee.assigneeType == 'auto'">
|
||||||
|
<td>
|
||||||
|
<div>
|
||||||
|
<label class="radio-inline">
|
||||||
|
<input ng-model="oaNodeManage.assignee.autoAssignType" type="radio" name="autoAssignType" value="scope"> 范围指定
|
||||||
|
</label>
|
||||||
|
<label class="radio-inline">
|
||||||
|
<input ng-model="oaNodeManage.assignee.autoAssignType" type="radio" name="autoAssignType" value="quick"> 快捷指定
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr ng-if="oaNodeManage.assignee.nodeType == 'normal' && oaNodeManage.assignee.assigneeType == 'auto' && oaNodeManage.assignee.autoAssignType == 'scope'">
|
||||||
|
<td>
|
||||||
|
<h5>部门类型</h5>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr ng-if="oaNodeManage.assignee.nodeType == 'normal' && oaNodeManage.assignee.assigneeType == 'auto' && oaNodeManage.assignee.autoAssignType == 'scope'">
|
||||||
|
<td>
|
||||||
|
<div>
|
||||||
|
<label class="radio-inline">
|
||||||
|
<input ng-model="oaNodeManage.assignee.departmentType" type="radio" name="departmentType" value="appoint"> 指定
|
||||||
|
</label>
|
||||||
|
<label class="radio-inline">
|
||||||
|
<input ng-model="oaNodeManage.assignee.departmentType" type="radio" name="departmentType" value="belong"> 所在部门
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr ng-if="oaNodeManage.assignee.nodeType == 'normal' && oaNodeManage.assignee.assigneeType == 'auto' && oaNodeManage.assignee.autoAssignType == 'scope' && oaNodeManage.assignee.departmentType == 'appoint'">
|
||||||
|
<td>
|
||||||
|
<h5>选择部门</h5>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr ng-if="oaNodeManage.assignee.nodeType == 'normal' && oaNodeManage.assignee.assigneeType == 'auto' && oaNodeManage.assignee.autoAssignType == 'scope' && oaNodeManage.assignee.departmentType == 'appoint'">
|
||||||
|
<td>
|
||||||
|
<input ng-model="oaNodeManage.assignee.departments" type="hidden" name="departments">
|
||||||
|
<button type="button">选择</button>
|
||||||
|
<span>部门</span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr ng-if="oaNodeManage.assignee.nodeType == 'normal' && oaNodeManage.assignee.assigneeType == 'auto' && oaNodeManage.assignee.autoAssignType == 'scope'">
|
||||||
|
<td>
|
||||||
|
<h5>选择角色</h5>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr ng-if="oaNodeManage.assignee.nodeType == 'normal' && oaNodeManage.assignee.assigneeType == 'auto' && oaNodeManage.assignee.autoAssignType == 'scope'">
|
||||||
|
<td>
|
||||||
|
<input ng-model="oaNodeManage.assignee.roles" type="hidden" name="roles">
|
||||||
|
<button type="button">选择</button>
|
||||||
|
<span>角色1</span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr ng-if="oaNodeManage.assignee.nodeType == 'normal' && oaNodeManage.assignee.assigneeType == 'auto' && oaNodeManage.assignee.autoAssignType == 'scope'">
|
||||||
|
<td>
|
||||||
|
<h5>选择职位</h5>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr ng-if="oaNodeManage.assignee.nodeType == 'normal' && oaNodeManage.assignee.assigneeType == 'auto' && oaNodeManage.assignee.autoAssignType == 'scope'">
|
||||||
|
<td>
|
||||||
|
<input ng-model="oaNodeManage.assignee.positions" type="hidden" name="positions">
|
||||||
|
<button type="button">选择</button>
|
||||||
|
<span>职位1</span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr ng-if="oaNodeManage.assignee.nodeType == 'normal' && oaNodeManage.assignee.assigneeType == 'auto' && oaNodeManage.assignee.autoAssignType == 'quick'">
|
||||||
|
<td>
|
||||||
|
<h5>快捷代理人</h5>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr ng-if="oaNodeManage.assignee.nodeType == 'normal' && oaNodeManage.assignee.assigneeType == 'auto' && oaNodeManage.assignee.autoAssignType == 'quick'">
|
||||||
|
<td>
|
||||||
|
<div class="radio">
|
||||||
|
<label>
|
||||||
|
<input ng-model="oaNodeManage.assignee.quickAssignee" type="radio" name="quickAssignee" value="starter">
|
||||||
|
发起人
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="radio">
|
||||||
|
<label>
|
||||||
|
<input ng-model="oaNodeManage.assignee.quickAssignee" type="radio" name="quickAssignee" value="starterSuperiorPosition"> 发起人上级岗位
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="radio">
|
||||||
|
<label>
|
||||||
|
<input ng-model="oaNodeManage.assignee.quickAssignee" type="radio" name="quickAssignee" value="previousStepAssigneeSubordinatePosition"> 上一步代理人下级岗位
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="radio">
|
||||||
|
<label>
|
||||||
|
<input ng-model="oaNodeManage.assignee.quickAssignee" type="radio" name="quickAssignee" value="previousStepAssigneeSuperiorPosition"> 上一步代理人上级岗位
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="radio">
|
||||||
|
<label>
|
||||||
|
<input ng-model="oaNodeManage.assignee.quickAssignee" type="radio" name="quickAssignee" value="previousStepAssigneeSameDepartment"> 上一步代理人同部门
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="radio">
|
||||||
|
<label>
|
||||||
|
<input ng-model="oaNodeManage.assignee.quickAssignee" type="radio" name="quickAssignee" value="previousNStepAssigneeSubordinatePosition"> 上 <input type="number" step="1" name="previousNStep" ng-disabled="oaNodeManage.assignee.quickAssignee != 'previousNStepAssigneeSubordinatePosition'"> 步代理人
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<!-- 自动获取代理人 end -->
|
||||||
|
<!-- 普通节点 end -->
|
||||||
|
<!-- 会签节点 start -->
|
||||||
|
<tr ng-if="oaNodeManage.assignee.nodeType == 'sign'">
|
||||||
|
<td>
|
||||||
|
<h5>会签类型</h5>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr ng-if="oaNodeManage.assignee.nodeType == 'sign'">
|
||||||
|
<td>
|
||||||
|
<div>
|
||||||
|
<label class="radio-inline">
|
||||||
|
<input ng-model="oaNodeManage.assignee.signType" type="radio" name="signType" value="parallel"> 并行
|
||||||
|
</label>
|
||||||
|
<label class="radio-inline">
|
||||||
|
<input ng-model="oaNodeManage.assignee.signType" type="radio" name="signType" value="sequential"> 串行
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr ng-if="oaNodeManage.assignee.nodeType == 'sign' && oaNodeManage.assignee.signType == 'parallel'">
|
||||||
|
<td>
|
||||||
|
<h5>会签人列表</h5>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr ng-if="oaNodeManage.assignee.nodeType == 'sign' && oaNodeManage.assignee.signType == 'parallel'">
|
||||||
|
<td>
|
||||||
|
<input ng-model="oaNodeManage.assignee.signUsers" type="hidden" name="signUsers">
|
||||||
|
<button type="button">选择</button>
|
||||||
|
<span>用户1,用户2</span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<!-- 并行 start -->
|
||||||
|
<tr ng-if="oaNodeManage.assignee.nodeType == 'sign' && oaNodeManage.assignee.signType == 'parallel'">
|
||||||
|
<td>
|
||||||
|
<h5>完成(通过)条件</h5>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr ng-if="oaNodeManage.assignee.nodeType == 'sign' && oaNodeManage.assignee.signType == 'parallel'">
|
||||||
|
<td>
|
||||||
|
<div>
|
||||||
|
<label class="radio-inline">
|
||||||
|
<input ng-model="oaNodeManage.assignee.completeCondition" type="radio" name="completeCondition" value="allPass" checked> 全部通过
|
||||||
|
</label>
|
||||||
|
<label class="radio-inline">
|
||||||
|
<input ng-model="oaNodeManage.assignee.completeCondition" type="radio" name="completeCondition" value="singlePass"> 单人通过
|
||||||
|
</label>
|
||||||
|
<label class="radio-inline">
|
||||||
|
<input ng-model="oaNodeManage.assignee.completeCondition" type="radio" name="completeCondition" value="customPass"> 通过
|
||||||
|
</label>
|
||||||
|
<input ng-model="oaNodeManage.assignee.completeCount" type="number" step="1" name="completeCount" ng-disabled="oaNodeManage.assignee.completeCondition != 'customPass'"> 人
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<!-- 并行 end -->
|
||||||
|
<!-- 会签节点 end -->
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div role="tabpanel" class="tab-pane" id="buttonConfig" style="padding: 15px 0;"></div>
|
||||||
|
<div role="tabpanel" class="tab-pane" id="formFieldConfig" style="padding: 15px 0;">
|
||||||
|
<table class="table table-bordered table-hover">
|
||||||
|
<colgroup>
|
||||||
|
<col width="60">
|
||||||
|
<col>
|
||||||
|
<col>
|
||||||
|
<col>
|
||||||
|
<col>
|
||||||
|
<col width="60">
|
||||||
|
<col width="60">
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th class="text-center">序号</th>
|
||||||
|
<th>字段名</th>
|
||||||
|
<th>字段描述</th>
|
||||||
|
<th>字段标签</th>
|
||||||
|
<th>字段类型</th>
|
||||||
|
<th class="text-center">可见</th>
|
||||||
|
<th class="text-center">可操作</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr ng-repeat="formField in oaNodeManage.formFields">
|
||||||
|
<td class="text-center">{{$index + 1}}</td>
|
||||||
|
<td>{{formField.fieldName}}</td>
|
||||||
|
<td>{{formField.fieldExplain}}</td>
|
||||||
|
<td>{{formField.fieldTag}}</td>
|
||||||
|
<td>{{formField.fieldType}}</td>
|
||||||
|
<td class="text-center">
|
||||||
|
<input type="checkbox" ng-model="formField.isVisible">
|
||||||
|
</td>
|
||||||
|
<td class="text-center">
|
||||||
|
<input type="checkbox" ng-model="formField.isEditable">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div role="tabpanel" class="tab-pane" id="listenerConfig" style="padding: 15px 0;">
|
||||||
|
<table class="table table-bordered table-hover" style="margin-bottom: -1px;">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<span class="btn btn-primary btn-sm" ng-click="addOaUserTaskCreateListener()">任务创建</span>
|
||||||
|
<span class="btn btn-success btn-sm" ng-click="addOaUserTaskAssignmentListener()">代理人设置</span>
|
||||||
|
<span class="btn btn-warning btn-sm" ng-click="addOaUserTaskDeleteListener()">任务删除</span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<table class="table table-bordered table-hover">
|
||||||
|
<colgroup>
|
||||||
|
<col width="100">
|
||||||
|
<col width="200">
|
||||||
|
<col>
|
||||||
|
<col width="115">
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>事件名称</th>
|
||||||
|
<th>事件类型</th>
|
||||||
|
<th>业务类</th>
|
||||||
|
<th>操作</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr ng-repeat="oaUserTaskListener in oaNodeManage.oaUserTaskListeners">
|
||||||
|
<td ng-if="oaUserTaskListener.event == 'create'">任务创建</td>
|
||||||
|
<td ng-if="oaUserTaskListener.event == 'complete'">代理人设置</td>
|
||||||
|
<td ng-if="oaUserTaskListener.event == 'assignment'">任务完成</td>
|
||||||
|
<td ng-if="oaUserTaskListener.event == 'delete'">任务删除</td>
|
||||||
|
<td>{{oaUserTaskListener.event}}</td>
|
||||||
|
<td>{{oaUserTaskListener.delegateExpression}}</td>
|
||||||
|
<td>
|
||||||
|
<span class="btn btn-primary btn-xs" ng-click="moveOaUserTaskListenerUp($index)"><i class="glyphicon glyphicon-arrow-up"></i></span>
|
||||||
|
<span class="btn btn-primary btn-xs" ng-click="moveOaUserTaskListenerDown($index)"><i class="glyphicon glyphicon-arrow-down"></i></span>
|
||||||
|
<span class="btn btn-danger btn-xs" ng-click="deleteOaUserTaskListener($index)" ng-if="oaUserTaskListener.event != 'complete'"><i class="glyphicon glyphicon-minus"></i></span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button ng-click="cancel()" class="btn btn-primary" translate>ACTION.CANCEL</button>
|
||||||
|
<button ng-click="save()" class="btn btn-primary" translate>ACTION.SAVE</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
@ -0,0 +1 @@
|
|||||||
|
<span ng-controller="OaNodeManageCtrl"></span>
|
@ -26,6 +26,7 @@ KISBPM.TOOLBAR = {
|
|||||||
top.dialog.confirm('确定保存吗?', function (index) {
|
top.dialog.confirm('确定保存吗?', function (index) {
|
||||||
top.dialog.close(index);
|
top.dialog.close(index);
|
||||||
var json = scope.editor.getJSON();
|
var json = scope.editor.getJSON();
|
||||||
|
console.log(json)
|
||||||
if(!json.properties.name) {
|
if(!json.properties.name) {
|
||||||
top.dialog.msg('流程的 元素名称 不能为空');
|
top.dialog.msg('流程的 元素名称 不能为空');
|
||||||
return;
|
return;
|
||||||
@ -53,13 +54,16 @@ KISBPM.TOOLBAR = {
|
|||||||
}
|
}
|
||||||
// Parse dom to string
|
// Parse dom to string
|
||||||
var svgDOM = DataManager.serialize(svgClone);
|
var svgDOM = DataManager.serialize(svgClone);
|
||||||
|
|
||||||
var modelMetaData = scope.editor.getModelMetaData();
|
var modelMetaData = scope.editor.getModelMetaData();
|
||||||
|
|
||||||
|
// 构建oaNodeManages管理列表
|
||||||
|
|
||||||
var params = {
|
var params = {
|
||||||
jsonXml: json,
|
jsonXml: json,
|
||||||
svgXml: svgDOM,
|
svgXml: svgDOM,
|
||||||
name: modelMetaData.name,
|
name: modelMetaData.name,
|
||||||
description: modelMetaData.description
|
description: modelMetaData.description,
|
||||||
|
oaNodeManages: []
|
||||||
};
|
};
|
||||||
var loadLayerIndex;
|
var loadLayerIndex;
|
||||||
top.restAjax.put(KISBPM.URL.putModel(modelMetaData.modelId), params, null, function (code, data) {
|
top.restAjax.put(KISBPM.URL.putModel(modelMetaData.modelId), params, null, function (code, data) {
|
||||||
|
@ -119,7 +119,7 @@
|
|||||||
ng-class="{'clear' : $index%2 == 0}">
|
ng-class="{'clear' : $index%2 == 0}">
|
||||||
<span class="title" ng-if="!property.hidden">{{ property.title }} :</span>
|
<span class="title" ng-if="!property.hidden">{{ property.title }} :</span>
|
||||||
<span class="title-removed" ng-if="property.hidden"><i>{{ property.title }} ({{'PROPERTY.REMOVED' | translate}}) :</i></span>
|
<span class="title-removed" ng-if="property.hidden"><i>{{ property.title }} ({{'PROPERTY.REMOVED' | translate}}) :</i></span>
|
||||||
<span class="value">
|
<span class="value">
|
||||||
<ng-include src="getPropertyTemplateUrl($index)" ng-if="!property.hasReadWriteMode"></ng-include>
|
<ng-include src="getPropertyTemplateUrl($index)" ng-if="!property.hasReadWriteMode"></ng-include>
|
||||||
<ng-include src="getPropertyReadModeTemplateUrl($index)" ng-if="property.hasReadWriteMode && property.mode == 'read'"></ng-include>
|
<ng-include src="getPropertyReadModeTemplateUrl($index)" ng-if="property.hasReadWriteMode && property.mode == 'read'"></ng-include>
|
||||||
<ng-include src="getPropertyWriteModeTemplateUrl($index)" ng-if="property.hasReadWriteMode && property.mode == 'write'"></ng-include>
|
<ng-include src="getPropertyWriteModeTemplateUrl($index)" ng-if="property.hasReadWriteMode && property.mode == 'write'"></ng-include>
|
||||||
|
@ -199,6 +199,19 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "oanodemanagepackage",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "oanodemanage",
|
||||||
|
"type": "oanodemanage",
|
||||||
|
"title": "OA节点管理",
|
||||||
|
"value": "",
|
||||||
|
"description": "OA节点功能管理",
|
||||||
|
"popular": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "duedatedefinitionpackage",
|
"name": "duedatedefinitionpackage",
|
||||||
"properties": [
|
"properties": [
|
||||||
@ -1078,6 +1091,7 @@
|
|||||||
"活动列表"
|
"活动列表"
|
||||||
],
|
],
|
||||||
"propertyPackages": [
|
"propertyPackages": [
|
||||||
|
"oanodemanagepackage",
|
||||||
"overrideidpackage",
|
"overrideidpackage",
|
||||||
"namepackage",
|
"namepackage",
|
||||||
"documentationpackage",
|
"documentationpackage",
|
||||||
|
@ -117,7 +117,8 @@
|
|||||||
<script src="editor-app/configuration/properties-message-definitions-controller.js" type="text/javascript"></script>
|
<script src="editor-app/configuration/properties-message-definitions-controller.js" type="text/javascript"></script>
|
||||||
<script src="editor-app/configuration/properties-message-scope-controller.js" type="text/javascript"></script>
|
<script src="editor-app/configuration/properties-message-scope-controller.js" type="text/javascript"></script>
|
||||||
<script src="editor-app/configuration/properties-form-select-controller.js" type="text/javascript"></script>
|
<script src="editor-app/configuration/properties-form-select-controller.js" type="text/javascript"></script>
|
||||||
|
<script src="editor-app/configuration/properties-oa-node-manage-controller.js" type="text/javascript"></script>
|
||||||
|
|
||||||
<script src="editor-app/configuration/toolbar.js" type="text/javascript"></script>
|
<script src="editor-app/configuration/toolbar.js" type="text/javascript"></script>
|
||||||
<script src="editor-app/configuration/toolbar-custom-actions.js" type="text/javascript"></script>
|
<script src="editor-app/configuration/toolbar-custom-actions.js" type="text/javascript"></script>
|
||||||
|
|
||||||
|
@ -0,0 +1,42 @@
|
|||||||
|
package ink.wgink.module.form.controller.api.design;
|
||||||
|
|
||||||
|
import ink.wgink.common.base.DefaultBaseController;
|
||||||
|
import ink.wgink.interfaces.consts.ISystemConstant;
|
||||||
|
import ink.wgink.module.form.pojo.dtos.design.FormFieldDTO;
|
||||||
|
import ink.wgink.module.form.service.design.IFormFieldService;
|
||||||
|
import ink.wgink.pojo.result.ErrorResult;
|
||||||
|
import io.swagger.annotations.*;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ClassName: FormController
|
||||||
|
* @Description: 表单
|
||||||
|
* @Author: wanggeng
|
||||||
|
* @Date: 2022/3/10 7:38 AM
|
||||||
|
* @Version: 1.0
|
||||||
|
*/
|
||||||
|
@Api(tags = ISystemConstant.API_TAGS_SYSTEM_PREFIX + "表单")
|
||||||
|
@RestController
|
||||||
|
@RequestMapping(ISystemConstant.API_PREFIX + "/form-field")
|
||||||
|
public class FormFieldController extends DefaultBaseController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IFormFieldService formFieldService;
|
||||||
|
|
||||||
|
@ApiOperation(value = "字段列表", notes = "字段列表接口")
|
||||||
|
@ApiImplicitParams({
|
||||||
|
@ApiImplicitParam(name = "formId", value = "表单ID", paramType = "path")
|
||||||
|
})
|
||||||
|
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
|
||||||
|
@GetMapping("list/form-id/{formId}")
|
||||||
|
public List<FormFieldDTO> listByFormId(@PathVariable("formId") String formId) {
|
||||||
|
return formFieldService.listByFormId(formId);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -83,6 +83,13 @@ public interface IFormFieldService {
|
|||||||
*/
|
*/
|
||||||
List<FormFieldDTO> list(Map<String, Object> params);
|
List<FormFieldDTO> list(Map<String, Object> params);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 列表
|
||||||
|
* @param formId 表单ID
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<FormFieldDTO> listByFormId(String formId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 列表
|
* 列表
|
||||||
*
|
*
|
||||||
@ -97,7 +104,7 @@ public interface IFormFieldService {
|
|||||||
* @param formId
|
* @param formId
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
List<FormFieldPO> listPO(String formId);
|
List<FormFieldPO> listPOByFormId(String formId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分页列表
|
* 分页列表
|
||||||
|
@ -86,6 +86,13 @@ public class FormFieldServiceImpl extends DefaultBaseService implements IFormFie
|
|||||||
return formFieldDao.list(params);
|
return formFieldDao.list(params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<FormFieldDTO> listByFormId(String formId) {
|
||||||
|
Map<String, Object> params = getHashMap(2);
|
||||||
|
params.put("formId", formId);
|
||||||
|
return list(params);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<FormFieldPO> listPO(Map<String, Object> params) {
|
public List<FormFieldPO> listPO(Map<String, Object> params) {
|
||||||
params = params == null ? getHashMap(2) : params;
|
params = params == null ? getHashMap(2) : params;
|
||||||
@ -93,7 +100,7 @@ public class FormFieldServiceImpl extends DefaultBaseService implements IFormFie
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<FormFieldPO> listPO(String formId) {
|
public List<FormFieldPO> listPOByFormId(String formId) {
|
||||||
Map<String, Object> params = getHashMap(2);
|
Map<String, Object> params = getHashMap(2);
|
||||||
params.put("formId", formId);
|
params.put("formId", formId);
|
||||||
return listPO(params);
|
return listPO(params);
|
||||||
|
Loading…
Reference in New Issue
Block a user