|
|
@@ -0,0 +1,45 @@
|
|
|
+import { ApprovalWay, IProcessAccount, ProcessStatus } from '@sc/types';
|
|
|
+import { isArray } from 'lodash';
|
|
|
+
|
|
|
+// 获取流程某个环节审批状态
|
|
|
+export const getProcessStatus = (approvalWay: ApprovalWay, accounts: IProcessAccount[] | IProcessAccount) => {
|
|
|
+ if (!isArray(accounts)) {
|
|
|
+ return accounts.status;
|
|
|
+ }
|
|
|
+ // 若为上报审批,则流程状态直接为 success
|
|
|
+ if (approvalWay === ApprovalWay.REPORT) return ProcessStatus.APPROVED;
|
|
|
+ // 指定用户
|
|
|
+ if (approvalWay === ApprovalWay.ACCOUNT) {
|
|
|
+ const { status } = accounts[0];
|
|
|
+ if (status === ProcessStatus.ACTIVATING) return ProcessStatus.ACTIVATING;
|
|
|
+ if (status === ProcessStatus.APPROVED) return ProcessStatus.APPROVED;
|
|
|
+ if (status === ProcessStatus.FAILED) return ProcessStatus.FAILED;
|
|
|
+ return ProcessStatus.WAITING;
|
|
|
+ }
|
|
|
+ // 会签 或者 依次审批
|
|
|
+ if (approvalWay === ApprovalWay.JOINTLYSIGN || approvalWay === ApprovalWay.ORDERAPPROVAL) {
|
|
|
+ // 只要有一个人审批回退,即失败
|
|
|
+ if (accounts.some(account => account.status === ProcessStatus.FAILED)) return ProcessStatus.FAILED;
|
|
|
+ // 所有人都通过,即成功
|
|
|
+ if (accounts.every(account => account.status === ProcessStatus.APPROVED)) return ProcessStatus.APPROVED;
|
|
|
+ // 所有人都等待, 即等待
|
|
|
+ if (accounts.every(account => account.status === ProcessStatus.WAITING)) return ProcessStatus.WAITING;
|
|
|
+ // 否则正在进行
|
|
|
+ return ProcessStatus.ACTIVATING;
|
|
|
+ }
|
|
|
+ // 或签
|
|
|
+ if (approvalWay === ApprovalWay.ORSIGN) {
|
|
|
+ // 只要有一个人审批回退,即失败
|
|
|
+ if (accounts.some(account => account.status === ProcessStatus.FAILED)) return ProcessStatus.FAILED;
|
|
|
+ // 只要有一个人审批通过,即成功
|
|
|
+ if (accounts.some(account => account.status === ProcessStatus.APPROVED)) return ProcessStatus.APPROVED;
|
|
|
+ // 所有人都等待, 即等待
|
|
|
+ if (accounts.every(account => account.status === ProcessStatus.WAITING)) return ProcessStatus.WAITING;
|
|
|
+ // 否则正在进行
|
|
|
+ return ProcessStatus.ACTIVATING;
|
|
|
+ }
|
|
|
+ // 默认等待
|
|
|
+ return ProcessStatus.WAITING;
|
|
|
+};
|
|
|
+
|
|
|
+export const a = 1;
|