完善流程引擎前端OA节点管理功能
This commit is contained in:
parent
ae44fe6a2a
commit
b16e720feb
@ -3,6 +3,7 @@ package ink.wgink.module.activiti.dao.oa;
|
||||
import ink.wgink.exceptions.RemoveException;
|
||||
import ink.wgink.exceptions.SaveException;
|
||||
import ink.wgink.exceptions.UpdateException;
|
||||
import ink.wgink.interfaces.init.IInitBaseTable;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.Map;
|
||||
@ -15,7 +16,7 @@ import java.util.Map;
|
||||
* @Version: 1.0
|
||||
*/
|
||||
@Repository
|
||||
public interface INodeAssigneeDao {
|
||||
public interface INodeAssigneeDao extends IInitBaseTable {
|
||||
|
||||
/**
|
||||
* 新增
|
||||
|
@ -55,6 +55,8 @@ public class AssigneeVO {
|
||||
private String positionNames;
|
||||
@ApiModelProperty(name = "quickAssignee", value = "快速代理人")
|
||||
private String quickAssignee;
|
||||
@ApiModelProperty(name = "previousNStep", value = "前N步")
|
||||
private Integer previousNStep;
|
||||
|
||||
public String getNodeType() {
|
||||
return nodeType == null ? "" : nodeType.trim();
|
||||
@ -224,52 +226,39 @@ public class AssigneeVO {
|
||||
this.quickAssignee = quickAssignee;
|
||||
}
|
||||
|
||||
public Integer getPreviousNStep() {
|
||||
return previousNStep;
|
||||
}
|
||||
|
||||
public void setPreviousNStep(Integer previousNStep) {
|
||||
this.previousNStep = previousNStep;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
final StringBuilder sb = new StringBuilder("{");
|
||||
sb.append("\"nodeType\":\"")
|
||||
.append(nodeType).append('\"');
|
||||
sb.append(",\"assigneeCount\":\"")
|
||||
.append(assigneeCount).append('\"');
|
||||
sb.append(",\"assignee\":\"")
|
||||
.append(assignee).append('\"');
|
||||
sb.append(",\"assigneeName\":\"")
|
||||
.append(assigneeName).append('\"');
|
||||
sb.append(",\"candidates\":\"")
|
||||
.append(candidates).append('\"');
|
||||
sb.append(",\"candidateNames\":\"")
|
||||
.append(candidateNames).append('\"');
|
||||
sb.append(",\"multipleType\":\"")
|
||||
.append(multipleType).append('\"');
|
||||
sb.append(",\"completeCondition\":\"")
|
||||
.append(completeCondition).append('\"');
|
||||
sb.append(",\"completeCount\":")
|
||||
.append(completeCount);
|
||||
sb.append(",\"multipleAssignees\":\"")
|
||||
.append(multipleAssignees).append('\"');
|
||||
sb.append(",\"multipleAssigneeNames\":\"")
|
||||
.append(multipleAssigneeNames).append('\"');
|
||||
sb.append(",\"assigneeType\":\"")
|
||||
.append(assigneeType).append('\"');
|
||||
sb.append(",\"autoAssignType\":\"")
|
||||
.append(autoAssignType).append('\"');
|
||||
sb.append(",\"departmentType\":\"")
|
||||
.append(departmentType).append('\"');
|
||||
sb.append(",\"departments\":\"")
|
||||
.append(departments).append('\"');
|
||||
sb.append(",\"departmentNames\":\"")
|
||||
.append(departmentNames).append('\"');
|
||||
sb.append(",\"roles\":\"")
|
||||
.append(roles).append('\"');
|
||||
sb.append(",\"roleNames\":\"")
|
||||
.append(roleNames).append('\"');
|
||||
sb.append(",\"positions\":\"")
|
||||
.append(positions).append('\"');
|
||||
sb.append(",\"positionNames\":\"")
|
||||
.append(positionNames).append('\"');
|
||||
sb.append(",\"quickAssignee\":\"")
|
||||
.append(quickAssignee).append('\"');
|
||||
sb.append('}');
|
||||
return sb.toString();
|
||||
return "AssigneeVO{" +
|
||||
"nodeType='" + nodeType + '\'' +
|
||||
", assigneeCount='" + assigneeCount + '\'' +
|
||||
", assignee='" + assignee + '\'' +
|
||||
", assigneeName='" + assigneeName + '\'' +
|
||||
", candidates='" + candidates + '\'' +
|
||||
", candidateNames='" + candidateNames + '\'' +
|
||||
", multipleType='" + multipleType + '\'' +
|
||||
", completeCondition='" + completeCondition + '\'' +
|
||||
", completeCount=" + completeCount +
|
||||
", multipleAssignees='" + multipleAssignees + '\'' +
|
||||
", multipleAssigneeNames='" + multipleAssigneeNames + '\'' +
|
||||
", assigneeType='" + assigneeType + '\'' +
|
||||
", autoAssignType='" + autoAssignType + '\'' +
|
||||
", departmentType='" + departmentType + '\'' +
|
||||
", departments='" + departments + '\'' +
|
||||
", departmentNames='" + departmentNames + '\'' +
|
||||
", roles='" + roles + '\'' +
|
||||
", roleNames='" + roleNames + '\'' +
|
||||
", positions='" + positions + '\'' +
|
||||
", positionNames='" + positionNames + '\'' +
|
||||
", quickAssignee='" + quickAssignee + '\'' +
|
||||
", previousNStep=" + previousNStep +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
|
@ -64,7 +64,8 @@
|
||||
role_names,
|
||||
positions,
|
||||
position_names,
|
||||
quick_assignee
|
||||
quick_assignee,
|
||||
previous_n_step
|
||||
) VALUES(
|
||||
#{nodeFieldId},
|
||||
#{modelId},
|
||||
@ -91,7 +92,8 @@
|
||||
#{roleNames},
|
||||
#{positions},
|
||||
#{positionNames},
|
||||
#{quickAssignee}
|
||||
#{quickAssignee},
|
||||
#{previousNStep}
|
||||
)
|
||||
</insert>
|
||||
|
||||
|
@ -17,6 +17,10 @@ var OaNodeManagePopupCtrl = ['$scope', '$timeout', '$http', function ($scope, $t
|
||||
var model = $scope.editor.modelMetaData.model;
|
||||
var childShapes = model.childShapes;
|
||||
// 关联到的属性
|
||||
var multiInstanceType = $scope.selectedItem.properties[7];
|
||||
var multiInstanceCollection = $scope.selectedItem.properties[9];
|
||||
var multiInstanceVariable = $scope.selectedItem.properties[10];
|
||||
var multiInstanceCondition = $scope.selectedItem.properties[11];
|
||||
var assigneeProperty = $scope.selectedItem.properties[13];
|
||||
var taskListenerProperty = $scope.selectedItem.properties[16];
|
||||
|
||||
@ -25,26 +29,27 @@ var OaNodeManagePopupCtrl = ['$scope', '$timeout', '$http', function ($scope, $t
|
||||
$scope.oaNodeManage = {
|
||||
assignee: {
|
||||
nodeType: 'normal',
|
||||
assigneeCount: '',
|
||||
assigneeCount: 'single',
|
||||
assignee: '',
|
||||
assigneeName: '',
|
||||
candidates: '',
|
||||
candidateNames: '',
|
||||
multipleType: 'parallel',
|
||||
completeCondition: 'allPass',
|
||||
completeCount: 0,
|
||||
completeCount: 1,
|
||||
multipleAssignees: '',
|
||||
multipleAssigneeNames: '',
|
||||
assigneeType: '',
|
||||
autoAssignType: '',
|
||||
departmentType: '',
|
||||
assigneeType: 'appoint',
|
||||
autoAssignType: 'scope',
|
||||
departmentType: 'appoint',
|
||||
departments: '',
|
||||
departmentNames: '',
|
||||
roles: '',
|
||||
roleNames: '',
|
||||
positions: '',
|
||||
positionNames: '',
|
||||
quickAssignee: '',
|
||||
quickAssignee: 'starter',
|
||||
previousNStep: 1
|
||||
},
|
||||
formId: '',
|
||||
formFields: [],
|
||||
@ -140,6 +145,28 @@ var OaNodeManagePopupCtrl = ['$scope', '$timeout', '$http', function ($scope, $t
|
||||
$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;
|
||||
@ -366,6 +393,7 @@ var OaNodeManagePopupCtrl = ['$scope', '$timeout', '$http', function ($scope, $t
|
||||
value: item
|
||||
})
|
||||
}
|
||||
$scope.updatePropertyInModel(assigneeProperty);
|
||||
}
|
||||
|
||||
// 更新手动指定多个候选人
|
||||
@ -376,9 +404,75 @@ var OaNodeManagePopupCtrl = ['$scope', '$timeout', '$http', function ($scope, $t
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新多实例
|
||||
*/
|
||||
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') {
|
||||
// 单选
|
||||
@ -401,6 +495,20 @@ var OaNodeManagePopupCtrl = ['$scope', '$timeout', '$http', function ($scope, $t
|
||||
return;
|
||||
}
|
||||
|
||||
if (assignee.nodeType === 'multiple') {
|
||||
// 清空代理人选项
|
||||
clearAssigneeAndCandidate();
|
||||
// 并行
|
||||
if (assignee.multipleType === 'parallel') {
|
||||
updateParallel();
|
||||
return;
|
||||
}
|
||||
if(assignee.multipleType === 'sequential') {
|
||||
updateSequential();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@ -417,8 +525,6 @@ var OaNodeManagePopupCtrl = ['$scope', '$timeout', '$http', function ($scope, $t
|
||||
$scope.property.value = {};
|
||||
$scope.property.value = $scope.oaNodeManage;
|
||||
$scope.updatePropertyInModel($scope.property);
|
||||
console.log($scope.property)
|
||||
|
||||
|
||||
updateAssignment();
|
||||
updateTaskListener();
|
||||
|
@ -11,9 +11,9 @@
|
||||
<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="#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>
|
||||
@ -80,7 +80,7 @@
|
||||
<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'"> 人
|
||||
<input ng-model="oaNodeManage.assignee.completeCount" type="number" step="1" name="completeCount" ng-change="checkCompleteCount()" ng-disabled="oaNodeManage.assignee.completeCondition != 'customPass'" style="width: 60px;"> 人
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@ -282,7 +282,7 @@
|
||||
</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'"> 步代理人
|
||||
<input ng-model="oaNodeManage.assignee.quickAssignee" type="radio" name="quickAssignee" value="previousNStepAssigneeSubordinatePosition"> 上 <input type="number" step="1" name="previousNStep" ng-model="oaNodeManage.assignee.previousNStep" ng-change="checkPreviousNStep()" ng-disabled="oaNodeManage.assignee.quickAssignee != 'previousNStepAssigneeSubordinatePosition'" style="width: 60px;"> 步代理人
|
||||
</label>
|
||||
</div>
|
||||
</td>
|
||||
@ -291,7 +291,7 @@
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div role="tabpanel" class="tab-pane" id="buttonConfig" style="padding: 15px 0;"></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>
|
||||
|
Loading…
Reference in New Issue
Block a user