Просмотр исходного кода

feat(wise-cost-util): 增加判断流程环节状态公用方法

zhangweicheng 4 лет назад
Родитель
Сommit
315aae5d98
3 измененных файлов с 48 добавлено и 2 удалено
  1. 2 2
      wise-cost-util/package.json
  2. 1 0
      wise-cost-util/src/index.ts
  3. 45 0
      wise-cost-util/src/process.ts

+ 2 - 2
wise-cost-util/package.json

@@ -1,6 +1,6 @@
 {
   "name": "@sc/wise-cost-util",
-  "version": "1.0.6",
+  "version": "1.0.7",
   "description": "wise-cost项目前后端业务通用工具包",
   "main": "./dist/index.cjs.js",
   "module": "./dist/index.esm.js",
@@ -20,7 +20,7 @@
   "devDependencies": {
     "@commitlint/cli": "^11.0.0",
     "@commitlint/config-conventional": "^11.0.0",
-    "@sc/types": "^1.0.28",
+    "@sc/types": "^1.0.30",
     "@types/chai": "^4.2.14",
     "@types/lodash": "^4.14.168",
     "@types/mocha": "^8.0.4",

+ 1 - 0
wise-cost-util/src/index.ts

@@ -3,3 +3,4 @@ export * from './rationAss';
 export * from './glj';
 export * from './cptLib';
 export * from './material';
+export * from './process';

+ 45 - 0
wise-cost-util/src/process.ts

@@ -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;