仿钉钉流程设计器- 简化多人审批方式

This commit is contained in:
jason 2024-06-14 11:10:25 +08:00
parent cab9553235
commit d5a7ae1865
3 changed files with 21 additions and 34 deletions

View File

@ -75,7 +75,7 @@ const addNode = (type: number) => {
type: NodeType.USER_TASK_NODE, type: NodeType.USER_TASK_NODE,
// //
attributes: { attributes: {
approveMethod: ApproveMethodType.SINGLE_PERSON_APPROVE, approveMethod: ApproveMethodType.RRANDOM_SELECT_ONE_APPROVE,
candidateStrategy: CandidateStrategy.USER, candidateStrategy: CandidateStrategy.USER,
candidateParam: undefined, candidateParam: undefined,
fieldsPermission: undefined, fieldsPermission: undefined,

View File

@ -95,35 +95,27 @@ export enum ConditionConfigType {
*/ */
RULE = 2 RULE = 2
} }
// 审批方式类型 用于审批节点 // 多人审批方式类型 用于审批节点
export enum ApproveMethodType { export enum ApproveMethodType {
/** /**
* *
*/ */
SINGLE_PERSON_APPROVE = 1, RRANDOM_SELECT_ONE_APPROVE = 1,
/**
* ()
*/
ALL_APPROVE = 2,
/** /**
* () * ()
*/ */
APPROVE_BY_RATIO = 3, APPROVE_BY_RATIO = 2,
/** /**
* () * ()
*/ */
ANY_APPROVE_ALL_REJECT = 4, ANY_APPROVE = 3,
/**
* ()
*/
ANY_APPROVE = 5,
/** /**
* *
*/ */
SEQUENTIAL_APPROVE = 6 SEQUENTIAL_APPROVE = 4
} }
@ -216,11 +208,9 @@ NODE_DEFAULT_NAME.set(NodeType.COPY_TASK_NODE, '抄送人')
NODE_DEFAULT_NAME.set(NodeType.CONDITION_NODE, '条件') NODE_DEFAULT_NAME.set(NodeType.CONDITION_NODE, '条件')
export const APPROVE_METHODS: DictDataVO [] = [ export const APPROVE_METHODS: DictDataVO [] = [
{ label: '单人审批', value: ApproveMethodType.SINGLE_PERSON_APPROVE }, { label: '随机挑选一人审批', value: ApproveMethodType.RRANDOM_SELECT_ONE_APPROVE },
{ label: '多人会签(需所有审批人同意)', value: ApproveMethodType.ALL_APPROVE },
{ label: '多人会签(按通过比例%)', value: ApproveMethodType.APPROVE_BY_RATIO }, { label: '多人会签(按通过比例%)', value: ApproveMethodType.APPROVE_BY_RATIO },
{ label: '多人会签(通过只需一人,拒绝需要全员)', value: ApproveMethodType.ANY_APPROVE_ALL_REJECT }, { label: '多人或签(一人通过或拒绝)', value: ApproveMethodType.ANY_APPROVE },
{ label: '多人或签(一名审批人通过即可)', value: ApproveMethodType.ANY_APPROVE },
{ label: '依次审批(按顺序依次审批)', value: ApproveMethodType.SEQUENTIAL_APPROVE } { label: '依次审批(按顺序依次审批)', value: ApproveMethodType.SEQUENTIAL_APPROVE }
] ]

View File

@ -143,7 +143,7 @@
style="width: 100%" style="width: 100%"
/> />
</el-form-item> </el-form-item>
<el-form-item label="审批方式" prop="approveMethod"> <el-form-item label="多人审批方式" prop="approveMethod">
<el-radio-group <el-radio-group
v-model="currentNode.attributes.approveMethod" v-model="currentNode.attributes.approveMethod"
@change="approveMethodChanged" @change="approveMethodChanged"
@ -154,7 +154,7 @@
:value="item.value" :value="item.value"
:label="item.value" :label="item.value"
:disabled=" :disabled="
item.value !== ApproveMethodType.SINGLE_PERSON_APPROVE && item.value !== ApproveMethodType.RRANDOM_SELECT_ONE_APPROVE &&
notAllowedMultiApprovers notAllowedMultiApprovers
" "
> >
@ -163,7 +163,7 @@
<el-input-number <el-input-number
v-model="currentNode.attributes.approveRatio" v-model="currentNode.attributes.approveRatio"
:min="10" :min="10"
:max="99" :max="100"
:step="10" :step="10"
size="small" size="small"
v-if="item.value === ApproveMethodType.APPROVE_BY_RATIO && currentNode.attributes.approveMethod === ApproveMethodType.APPROVE_BY_RATIO" v-if="item.value === ApproveMethodType.APPROVE_BY_RATIO && currentNode.attributes.approveMethod === ApproveMethodType.APPROVE_BY_RATIO"
@ -504,7 +504,7 @@ defineExpose({ open, setCurrentNode }) // 暴露方法给父组件
const changeCandidateStrategy = () => { const changeCandidateStrategy = () => {
candidateParamArray.value = [] candidateParamArray.value = []
currentNode.value.attributes.approveMethod = ApproveMethodType.SINGLE_PERSON_APPROVE currentNode.value.attributes.approveMethod = ApproveMethodType.RRANDOM_SELECT_ONE_APPROVE
if ( if (
currentNode.value.attributes.candidateStrategy === CandidateStrategy.START_USER || currentNode.value.attributes.candidateStrategy === CandidateStrategy.START_USER ||
currentNode.value.attributes.candidateStrategy === CandidateStrategy.USER currentNode.value.attributes.candidateStrategy === CandidateStrategy.USER
@ -520,7 +520,7 @@ const changedCandidateUsers = () => {
candidateParamArray.value?.length <= 1 && candidateParamArray.value?.length <= 1 &&
currentNode.value.attributes?.candidateStrategy === CandidateStrategy.USER currentNode.value.attributes?.candidateStrategy === CandidateStrategy.USER
) { ) {
currentNode.value.attributes.approveMethod = ApproveMethodType.SINGLE_PERSON_APPROVE currentNode.value.attributes.approveMethod = ApproveMethodType.RRANDOM_SELECT_ONE_APPROVE
currentNode.value.attributes.rejectHandler.type = RejectHandlerType.FINISH_PROCESS currentNode.value.attributes.rejectHandler.type = RejectHandlerType.FINISH_PROCESS
notAllowedMultiApprovers.value = true notAllowedMultiApprovers.value = true
} else { } else {
@ -541,7 +541,7 @@ const blurEvent = () => {
} }
const approveMethodChanged = () => { const approveMethodChanged = () => {
const approveMethod = currentNode.value.attributes?.approveMethod const approveMethod = currentNode.value.attributes?.approveMethod
if ( approveMethod === ApproveMethodType.ANY_APPROVE_ALL_REJECT || approveMethod === ApproveMethodType.APPROVE_BY_RATIO) { if ( approveMethod === ApproveMethodType.APPROVE_BY_RATIO) {
currentNode.value.attributes.rejectHandler.type = currentNode.value.attributes.rejectHandler.type =
RejectHandlerType.FINISH_PROCESS_BY_REJECT_RATIO RejectHandlerType.FINISH_PROCESS_BY_REJECT_RATIO
} else { } else {
@ -549,7 +549,7 @@ const approveMethodChanged = () => {
} }
if (approveMethod === ApproveMethodType.APPROVE_BY_RATIO) { if (approveMethod === ApproveMethodType.APPROVE_BY_RATIO) {
currentNode.value.attributes.approveRatio = 50; currentNode.value.attributes.approveRatio = 100;
} }
} }
const rejectHandlerOptionDisabled = computed(() => { const rejectHandlerOptionDisabled = computed(() => {
@ -557,15 +557,12 @@ const rejectHandlerOptionDisabled = computed(() => {
const approveMethod = currentNode.value.attributes?.approveMethod const approveMethod = currentNode.value.attributes?.approveMethod
if ( if (
val === RejectHandlerType.FINISH_PROCESS_BY_REJECT_RATIO && val === RejectHandlerType.FINISH_PROCESS_BY_REJECT_RATIO &&
approveMethod !== ApproveMethodType.APPROVE_BY_RATIO && approveMethod !== ApproveMethodType.APPROVE_BY_RATIO
approveMethod !== ApproveMethodType.ANY_APPROVE_ALL_REJECT
) { ) {
return true return true
} }
if ( if ( approveMethod === ApproveMethodType.APPROVE_BY_RATIO
approveMethod === ApproveMethodType.ANY_APPROVE_ALL_REJECT && && val !== RejectHandlerType.FINISH_PROCESS_BY_REJECT_RATIO) {
val === RejectHandlerType.FINISH_PROCESS
) {
return true return true
} }