Procházet zdrojové kódy

问题件添加 工单筛选和标记

ajun před 4 roky
rodič
revize
787a8d6fa7

+ 19 - 1
app/Filters/OrderIssueFilters.php

@@ -14,6 +14,7 @@ use App\OrderPackageCommodities;
 use App\RejectedBill;
 use App\RejectedBillItem;
 use App\Shop;
+use App\WorkOrder;
 use Carbon\Carbon;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
@@ -32,6 +33,7 @@ class OrderIssueFilters
     protected $rejectedBillItemQuery;
     protected $orderIssueProcessLogQuery;
     protected $shopQuery;
+    protected $workOrderQuery;
     protected $filters = [
         'log_content',
         'is_imported',
@@ -69,7 +71,8 @@ class OrderIssueFilters
         'archive_at_end',
         'result_explain',
         'is_intercept',
-        'orderCode'
+        'orderCode',
+        'is_work_order',
     ];
     protected $array_filter;
     protected $params = [];
@@ -144,6 +147,12 @@ class OrderIssueFilters
         return $this->shopQuery;
     }
 
+    private function getWorkOrderQuery(){
+        if(!$this->workOrderQuery)
+            $this->workOrderQuery = WorkOrder::query()->selectRaw('order_id');
+        return $this->workOrderQuery;
+    }
+
     public function apply($builder)
     {
         $this->queryBuilder = $builder;
@@ -211,6 +220,9 @@ class OrderIssueFilters
 
         if($this->orderIssueProcessLogQuery)
             $this->queryBuilder->whereIn('order_issues.id',$this->orderIssueProcessLogQuery);
+
+        if ($this->workOrderQuery)
+            $this->queryBuilder->whereIn('order_issues.order_id',$this->workOrderQuery);
     }
 
     private function isSearchLike($str)
@@ -468,4 +480,10 @@ class OrderIssueFilters
         $this->getOrderQuery();
         $this->searchWay($this->getOrderQuery(),$orderCode,'orders.code');
     }
+
+    // 是否有对应工单
+    public function is_work_order($is_work_order)
+    {
+        if ($is_work_order) $this->getWorkOrderQuery();
+    }
 }

+ 2 - 1
app/Http/Controllers/OrderIssueController.php

@@ -36,13 +36,14 @@ use Oursdreams\Export\Export;
 class OrderIssueController extends Controller
 {
 
-    public function index(Request $request, OrderIssueFilters $filter)
+    public function index(Request $request, OrderIssueFilters $filter,OrderIssueService $service)
     {
         if (!Gate::allows('订单管理-问题件-查询')) {
             return redirect(url('/'));
         }
         $owners = app(OwnerService::class)->getAuthorizedOwners();
         $orderIssues = OrderIssue::query()->filter($filter)->defaultWith()->paginate($request['paginate'] ?? 50);
+        $service->tagWorkOrder($orderIssues);
         $orderIssueType = OrderIssueType::all();
         $qualityLabel = QualityLabel::all();
         $logistics = Logistic::all();

+ 15 - 0
app/Services/OrderIssueService.php

@@ -12,6 +12,7 @@ use App\OrderIssueType;
 use App\OrderPackage;
 use App\Order;
 use App\RejectedBill;
+use App\WorkOrder;
 use Carbon\Carbon;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
@@ -448,5 +449,19 @@ class OrderIssueService
         if (!$order_package) return;
         OrderIssue::query()->where('order_id',$order_package->order_id)->update(['is_intercept' => 1]);
     }
+
+    public function tagWorkOrder(&$orderIssues)
+    {
+        $orderIds = data_get($orderIssues->items(),'*.order_id');
+        $workOrders = WorkOrder::query()->whereIn('order_id',$orderIds)->get();
+        $tags = [];
+        $workOrders->each(function($workOrder)use(&$tags){
+            $tags[$workOrder->order_id] = true;
+        });
+        foreach ($orderIssues as &$orderIssue) {
+            if (array_key_exists($orderIssue->order_id,$tags))$orderIssue->is_work_order = true;
+            else $orderIssue->is_work_order = false;
+        }
+    }
 }
 

+ 10 - 1
resources/views/order/issue/index.blade.php

@@ -207,8 +207,16 @@
                             </div>
                         </td>
                         <td class="child-layer-1 text-nowrap">
-                            @{{index+1}}
+                            <span>@{{index+1}}</span>
                             <span class="text-muted" v-show="orderIssue.finance_confirm === '是'">财务确认</span>
+                            <br v-if="orderIssue.finance_confirm">
+                            @can('订单管理-工单处理')
+                            <a :href="'{{url("order/workOrder/index")}}'+'?client_code='+orderIssue.order.client_code" target="order/workOrder/index">
+                                <span v-show="orderIssue['is_work_order']" class="badge badge-primary">工单</span>
+                            </a>
+                            @else
+                                <span v-show="orderIssue['is_work_order']" class="badge badge-primary">工单</span>
+                            @endcan
                         </td>
                         <td class="child-layer-1">
                             @{{ orderIssue.id }}
@@ -1218,6 +1226,7 @@
                             @endcannot
                         {name: 'is_handle', type: 'checkbox', tip: '是否已处理', data: [{name: 'ture', value: '已解决'}]},
                         {name: 'is_intercept', type: 'checkbox', tip: '是否已拦截', data: [{name: 'ture', value: '已拦截'}]},
+                        {name: 'is_work_order', type: 'checkbox', tip: '是否有对应工单', data: [{name: 'ture', value: '有对应工单'}]},
                     ]
                 ];
                 this.form = new query({