Browse Source

审批流节点支持不同审批模式

moell 8 months ago
parent
commit
d1824f2639

+ 7 - 3
app/Http/Controllers/API/ApprovalFlowController.php

@@ -25,7 +25,9 @@ class ApprovalFlowController extends Controller
     {
         $nodes = $this->getApprovalNodes($request);
 
-        $limitObject = $request->get("object_type") && $request->get("object_id") && in_array($request->get("type"), [ApprovalFlowType::TASK->value]);
+        $limitObject = $request->get("object_type")
+            && $request->get("object_id")
+            && in_array($request->get("type"), [ApprovalFlowType::TASK->value]);
 
         $exists = ApprovalFlow::query()->where("type", $request->type)
             ->when(
@@ -62,7 +64,7 @@ class ApprovalFlowController extends Controller
 
             throw_validation_if($userCount != count($node['approval_users']), "The selected approver does not exist");
 
-            $nodes[$node['level']] = $node;
+            $nodes[$node['level']] = collect($node)->only(['name', 'approval_users', 'approval_mode', 'level'])->toArray();
         }
 
         throw_validation_if(max(array_keys($nodes)) != count($nodes), "The level field is incorrect");
@@ -87,7 +89,9 @@ class ApprovalFlowController extends Controller
                 sort($oldNodeUsers);
                 sort($nowNodeUsers);
 
-                if (implode(',', $oldNodeUsers) != implode(',', $nowNodeUsers)) {
+                if (implode(',', $oldNodeUsers) != implode(',', $nowNodeUsers)
+                    || $node['approval_mode'] != $nodes[$node['level']]['approval_mode']
+                ) {
                     $nodeIsChange = true;
                     break;
                 }

+ 5 - 0
app/Http/Requests/API/ApprovalFlow/CreateOrUpdateRequest.php

@@ -2,6 +2,7 @@
 
 namespace App\Http\Requests\API\ApprovalFlow;
 
+use App\Models\Enums\ApprovalMode;
 use App\Models\Enums\ApprovalFlowObjectType;
 use App\Models\Enums\ApprovalFlowType;
 use Illuminate\Foundation\Http\FormRequest;
@@ -35,6 +36,10 @@ class CreateOrUpdateRequest extends FormRequest
             "nodes.*.name" => "required",
             "nodes.*.approval_users" => "required|array",
             "nodes.*.level" => "required|numeric",
+            "nodes.*.approval_mode" => [
+                'required',
+                new Enum(ApprovalMode::class),
+            ]
         ];
 
         if ($this->method() == "POST") {

+ 15 - 0
app/Models/Enums/ApprovalMode.php

@@ -0,0 +1,15 @@
+<?php
+
+namespace App\Models\Enums;
+
+/**
+ * 定义参考 https://m.dingtalk.com/qidian/help-detail-1060751213
+ */
+enum ApprovalMode: int
+{
+    case ALTERNATIVE_APPROVAL = 1; //或签
+
+    case SEQUENTIAL_APPROVAL = 2; //依次审批
+
+    case COUNTERSIGNATURE = 3;  //会签
+}