ajun 4 лет назад
Родитель
Сommit
bb29870e4b

+ 7 - 13
app/Filters/WorkOrderFilters.php

@@ -72,7 +72,11 @@ class WorkOrderFilters
             $this->id(explode(',',$this->params['data']));
 
         if (!isset($this->params['owner'])){
-            $this->getOrderQuery()->whereIn('owner_id', app('UserService')->getPermittingOwnerIds(Auth::user())??[]);
+            if(Gate::allows('订单管理-工单处理-客服编辑') || Gate::allows('订单管理-工单处理-承运商编辑')){
+
+            }else if(Gate::allows('订单管理-工单处理-货主编辑')){
+                $this->queryBuilder->whereIn('owner_id', app('UserService')->getPermittingOwnerIds(Auth::user())??[]);
+            }
         }
 
         $this->afterFilter();
@@ -117,21 +121,12 @@ class WorkOrderFilters
     public function beforeApply()
     {
         if ($this->orderPackageQuery){
-            $this->getOrderQuery()->whereIn('id',$this->orderPackageQuery);
+            $this->queryBuilder->whereIn('order_id',$this->orderPackageQuery);
         }
 
         if ($this->orderQuery) {
             $this->queryBuilder->whereIn('order_id',$this->orderQuery);
         }
-
-        // 审核 默认为 待审核
-//        if (isset($this->params['is_review'])){
-//            $this->queryBuilder->where('status','2');
-//            $this->queryBuilder->whereHas('orderIssue')->orderBydesc('work_orders.created_at');
-//        } else {
-//            $work_order_query = WorkOrder::query()->select('id')->where('status','2')->whereHas('orderIssue');
-//            $this->queryBuilder->whereNotIn('id',$work_order_query);
-//        }
     }
 
     public function getOrderQuery(): Builder
@@ -226,8 +221,7 @@ class WorkOrderFilters
     // 承运商筛选
     public function logistic($logistic)
     {
-        $orderQuery = $this->getOrderQuery()->whereIn('id',WorkOrder::query()->select('order_id'));
-        $this->searchWay($orderQuery,$logistic,'logistic_id');
+        $this->searchWay($this->queryBuilder,$logistic,'logistic_id');
     }
 
     public function grad($grad)

+ 7 - 0
app/Http/Controllers/TestController.php

@@ -705,4 +705,11 @@ sql;
         $service = app('OwnerStoreOutFeeReportService');
         $service->recordReport(null, [2]);
     }
+
+    public function syncOrderIssue()
+    {
+        /** @var OrderIssue $orderIssue */
+        $orderIssue = OrderIssue::query()->find('48798');
+        $orderIssue->syncRejectingStatus();
+    }
 }

+ 53 - 0
app/Http/Controllers/WorkOrderController.php

@@ -6,6 +6,7 @@ use App\Filters\WorkOrderFilters;
 use App\Http\Requests\WorkOrder\WorkOrderRequest;
 use App\Logistic;
 use App\OrderIssue;
+use App\Services\WorkOrderCommoditiesService;
 use App\Services\WorkOrderService;
 use App\WorkOrder;
 use Illuminate\Http\Request;
@@ -171,4 +172,56 @@ class WorkOrderController extends Controller
         return ['success'=> true];
     }
 
+    public function ownerUpdateCommoditiesApi(Request $request,WorkOrderCommoditiesService  $commoditiesService): array
+    {
+        if (Gate::denies('订单管理-工单处理-货主编辑')){
+            return  ['success' => false,'message' => '没有对应权限'];
+        }
+        /** @var WorkOrder $workOrder */
+        $workOrder = WorkOrder::query()->find($request->input('id'));
+        if (!$workOrder)return  ['success' => false,'message' => '参数异常'];
+        $commoditiesService->updateWorkOrderCommoditiesByJsonArray($workOrder,$request->input('commodities'));
+
+        $workOrder->loadDefaultWith();
+
+        $workOrder->changeStatus('宝时处理');
+
+        return ['success' => true, 'data' => $workOrder];
+    }
+
+    public function logisticUpdateCommoditiesApi(Request $request,WorkOrderCommoditiesService  $commoditiesService): array
+    {
+        if (Gate::denies('订单管理-工单处理-承运商编辑')){
+            return  ['success' => false,'message' => '没有对应权限'];
+        }
+        /** @var WorkOrder $workOrder */
+        $workOrder = WorkOrder::query()->find($request->input('id'));
+
+        if (!$workOrder)return  ['success' => false,'message' => '参数异常'];
+
+        $commoditiesService->updateWorkOrderCommoditiesByJsonArray($workOrder,$request->input('commodities'));
+
+        $workOrder->loadDefaultWith();
+
+        $workOrder->changeStatus('宝时处理');
+
+        return ['success' => true, 'data' => $workOrder];
+    }
+
+    public function logisticEndApi(Request $request,WorkOrderService  $service): array
+    {
+        if (Gate::denies('订单管理-工单处理-承运商编辑')){
+            return  ['success' => false,'message' => '没有对应权限'];
+        }
+
+        /** @var WorkOrder $workOrder */
+        $workOrder = WorkOrder::query()->find($request->input('id'));
+        if (!$workOrder) return  ['success' => false,'message' => '参数错误,刷新重试'];
+        $service->logisticEnd($workOrder);
+
+        $workOrder->loadDefaultWith();
+
+        return ['success' => true,'data' => $workOrder];
+    }
+
 }

+ 20 - 2
app/Services/WorkOrderCommoditiesService.php

@@ -17,13 +17,13 @@ class WorkOrderCommoditiesService
     {
         $obj = json_decode($json);
         $workOrder->commodities()->create([
-//            'work_order_id' => $workOrder['id'],
             'commodity_id' => $obj->commodity_id ?? '',
             'sku' => $obj->sku,
             'amount' => $obj->amount ?? '',
+            'logistic_number' => $obj->logistic_number ?? '',
             'abnormal_amount' => $obj->abnormal_amount ?? '',
             'check_amount' => $obj->check_amount ?? '',
-            'abnormal_result' => $commodity->id ?? '',
+            'check_result' => $obj->check_result ?? '',
             'process_result' => $commodity->process_result ?? '',
         ]);
     }
@@ -39,4 +39,22 @@ class WorkOrderCommoditiesService
             $this->createWorkOrderCommodityByJson($workOrder, $json);
         }
     }
+
+    public function updateWorkOrderCommoditiesByJsonArray(WorkOrder $workOrder, $array)
+    {
+        foreach ($array as $json) {
+            $this->updateWorkOrderCommoditiesByJson($workOrder, $json);
+        }
+    }
+
+    public function updateWorkOrderCommoditiesByJson(WorkOrder $workOrder, $json)
+    {
+        $obj = json_decode($json);
+        $workOrder->commodities()->where('id', $obj->id)->update([
+            'check_amount' => $obj->check_amount ?? '',
+            'check_result' => $obj->check_result ?? '',
+            'process_result' => $obj->process_result ?? '',
+        ]);
+    }
+
 }

+ 26 - 14
app/Services/WorkOrderService.php

@@ -76,7 +76,6 @@ class WorkOrderService
             'order_issue_type_id' => $orderIssueType->id,
             'uniquely_tag' => $order->code,
             'status' => 0,
-//            'work_order_status' => 1
         ]);
         $workOrder->notification();
         return $workOrder;
@@ -115,21 +114,21 @@ class WorkOrderService
 
         $remark = $param['remark'] ?? '';
 
-        $workOrderImageService = app('WorkOrderImageService');
-
         $workOrder = $this->createAndNotification($order, $orderIssueType, $remark);
 
-        $workOrderImageService->createWorkOrderPackageImages($workOrder, $param['packageImages']);
+        $imageService = app('WorkOrderImageService');
+
+        $imageService->createWorkOrderPackageImages($workOrder, $param['packageImages']);
 
-        $workOrderImageService->createWorkOrderCommodityImages($workOrder, $param['commodityImages']);
+        $imageService->createWorkOrderCommodityImages($workOrder, $param['commodityImages']);
 
-        $workOrderImageService->createWorkOrderDealImages($workOrder, $param['dealImages']);
+        $imageService->createWorkOrderDealImages($workOrder, $param['dealImages']);
 
         app('WorkOrderDetailService')->createWorkOrderDetail($workOrder, $param);
 
         app('WorkOrderCommoditiesService')->createWorkOrderCommoditiesByJsonArray($workOrder, $param['commodities']); // 登记商品信息
 
-        $workOrder->update(['status' => 2]); // 标记信息已填写
+        $workOrder->changeStatus('承运商处理');
 
         return $workOrder;
     }
@@ -142,7 +141,9 @@ class WorkOrderService
         $orderIssueType = OrderIssueType::query()->firstOrCreate(['name' => '快递异常']);
         $order = Order::query()->where('code', $param['order_no'])->first();
         $remark = $param['remark'] ?? '';
-        return $this->createAndNotification($order, $orderIssueType, $remark);
+        $workOrder =  $this->createAndNotification($order, $orderIssueType, $remark);
+        $workOrder->changeStatus('承运商处理');
+        return $workOrder;
     }
 
     /***
@@ -155,7 +156,8 @@ class WorkOrderService
         $remark = $param['remark'] ?? '';
 
         $workOrder = $this->createAndNotification($order, $orderIssueType, $remark);
-//        $workOrder->update(['work_order_status' => ]); // 标记信息已填写
+
+        $workOrder->changeStatus('承运商处理');
 
         return $workOrder;
     }
@@ -180,7 +182,9 @@ class WorkOrderService
         $order = Order::query()->where('code', $param['order_no'])->first();
         $remark = $param['remark'] ?? '';
         $workOrder = $this->createAndNotification($order, $orderIssueType, $remark);
-        $workOrder->update(['work_order_status' => 1]); // 标记信息未填写
+
+        $workOrder->changeStatus('货主处理');
+
         return $workOrder;
     }
 
@@ -190,13 +194,21 @@ class WorkOrderService
     public function fillLossWorkOrder(WorkOrder $workOrder, $param): WorkOrder
     {
         $workOrder->saveWorkOrderDetail($param);        // 收方信息 丢件价值 补发单号
-        $workOrder->addDealImage($param['dealImages']); // 交易截图
-        $workOrder->addRefundImage($param['refundImages'] ?? []); // 退款截图
-        $workOrder->update(['work_order_status' => 2]); // 标记信息填写
-        $workOrder->loadDefaultWith();
+        /** @var WorkOrderImageService $imageService */
+        $imageService = app(WorkOrderImageService::class);
+        $imageService->createWorkOrderDealImages($workOrder,$param['dealImages']);
+        $imageService->createWorkOrderPackageImages($workOrder,$param['dealImages'] ?? []);
+        $workOrder->changeStatus(['承运商处理']);
         return $workOrder;
     }
 
+
+    public function logisticEnd(WorkOrder $workOrder)
+    {
+        $workOrder->changeStatus('完成');
+    }
+
+
     /**
      * 工单审核
      * @param $wordOrder

+ 2 - 1
app/WorkOrder.php

@@ -46,6 +46,7 @@ class WorkOrder extends Model
             '宝时处理' => 1,
             '货主处理' => 2,
             '承运商处理' => 3,
+            '完成' => 4,
         ],
 //        'work_order_status' => [
 //            '' => 0,
@@ -251,7 +252,7 @@ class WorkOrder extends Model
     public function loadDefaultWith()
     {
         $this->loadMissing(['type', 'owner', 'logistic', 'issueType', 'creator', 'details', 'commodities.commodity',
-            'baoShiLog.creator',
+            'processLogs.creator',
             'images.uploadFile',
             'reviewer',
             'order.packages',

+ 2 - 1
app/WorkOrderCommodities.php

@@ -18,10 +18,11 @@ class WorkOrderCommodities extends Model
         'work_order_id',
         'commodity_id',
         'sku',
+        'logistic_number',  // 快递单号数量
         'check_amount',     // 复核数量
         'abnormal_amount',  // 异常数量
         'amount',           // 订单数量
-        'abnormal_result',  // 异常结果
+        'check_result',     // 核实结果
         'process_result',   // 处理结果
     ];
 

+ 9 - 4
database/migrations/2021_10_26_132927_add_colunms_to_work_order_commodities.php

@@ -14,10 +14,14 @@ class AddColunmsToWorkOrderCommodities extends Migration
     public function up()
     {
         Schema::table('work_order_commodities', function (Blueprint $table) {
-            $table->string('abnormal_result')->comment('异常结果');
+            $table->string('logistic_number')->comment('快递单号');
+
+
+            $table->string('check_result')->comment('核实结果');
             $table->string('process_result')->comment('处理结果');
-            $table->integer('check_amount')->comment('核实结果');
-            $table->integer('abnormal_amount')->comment('异常结果');
+
+            $table->integer('check_amount')->comment('核实数量');
+            $table->integer('abnormal_amount')->comment('异常数量');
         });
     }
 
@@ -29,8 +33,9 @@ class AddColunmsToWorkOrderCommodities extends Migration
     public function down()
     {
         Schema::table('work_order_commodities', function (Blueprint $table) {
-            $table->dropColumn('abnormal_result');
+            $table->dropColumn('check_result');
             $table->dropColumn('process_result');
+            $table->dropColumn('logistic_number');
             $table->dropColumn('check_amount');
             $table->dropColumn('abnormal_amount');
         });

+ 5 - 1
resources/views/order/index/_work_order_modal.blade.php

@@ -136,6 +136,7 @@
                             <tr>
                                 <td class="text-center">快递单号</td>
                                 <td class="text-center">商品条码</td>
+                                <td class="text-center">异常类型</td>
                                 <td class="text-center">商品名称</td>
                                 <td class="text-center">订单数量</td>
                                 <td class="text-center">异常数量</td>
@@ -146,10 +147,13 @@
                             <tr v-for="(commodity,i) in workOrder.commodities">
                                 <td><span v-text="commodity.logistic_number"></span></td>
                                 <td><span v-text="commodity.sku"></span></td>
+                                <td>
+                                    <span v-text="commodity.sku" :data="commodity.abnormal_type = '破损'">破损</span>
+                                    <span v-text="commodity.sku" :data="commodity.abnormal_type = '错漏发'">错漏发</span>
+                                </td>
                                 <td><span v-text="commodity.name"></span></td>
                                 <td><span v-text="commodity.amount"></span></td>
                                 <td>
-
                                     <input type="number" class="form-control form-control-sm" v-model="commodity.abnormal_amount">
                                 </td>
                                 <td>

+ 2 - 0
resources/views/order/index/delivering.blade.php

@@ -1344,6 +1344,8 @@
                              sku:commodity.sku,
                              amount:commodity.amount,
                              commodity_id:commodity['commodity_id'],
+                             abnormal_type:commodity['abnormal_type'],
+                             logistic_number:commodity['logistic_number'],
                              abnormal_amount:commodity['abnormal_amount'],
                          };
                          formData.append('commodities[]',JSON.stringify(item)) ;

+ 72 - 0
resources/views/order/workOrder/_baoshi_fill_work_order.blade.php

@@ -0,0 +1,72 @@
+{{--快递处理丢件工单--}}
+<div class="modal fade " id="logistic-fill-work-order-modal" tabindex="-1" role="dialog" aria-labelledby="checkModalLabel"
+     aria-hidden="true">
+    <div class="modal-dialog modal-xl modal-dialog-centered">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title" id="logistic-work-order-modal">丢件工单</h5>
+                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                    <span aria-hidden="true">&times;</span>
+                </button>
+            </div>
+            <div class="modal-body">
+                <div>
+                    <table class="table">
+                        <thead>
+                        <tr>
+                            <td>快递单号</td>
+                            <td>商品</td>
+                            <td>商品条码</td>
+                            <td>订单数量</td>
+                            <td>异常数量</td>
+                            <td>核实数量</td>
+                            <td v-if="fillWorkOrder && (fillWorkOrder.issue_type_name === '错漏发')">核实结果</td>
+                            <td>处理结果</td>
+                        </tr>
+                        </thead>
+                        <tbody>
+                        <tr v-for="(item) in fillWorkOrder?.commodities || [] ">
+                            <td>
+                                <span v-text="item.logistic_number"></span>
+                            </td>
+                            <td>
+                                <span v-text="item?.commodity?.name || ''"></span>
+                            </td>
+                            <td>
+                                <span v-text="item?.commodity?.sku || ''"></span>
+                            </td>
+                            <td>
+                                <span v-text="item.amount"></span>
+                            </td>
+                            <td>
+                                <span v-text="item.abnormal_amount"></span>
+                            </td>
+                            <td>
+                                <input type="number" class="form-control form-control-sm" v-model="item.check_amount">
+                            </td>
+                            <td>
+                                <select class="form-control form-control-sm" v-model="item.check_result" v-if=" fillWorkOrder && (fillWorkOrder.issue_type_name === '错漏发')">
+                                    <option v-for="type in ['核实少发','核实多发','核实未错漏发']" :value="type" v-text="type"></option>
+                                </select>
+
+                                <select name="" id=""></select>
+                            </td>
+                            <td>
+                                <select class="form-control form-control-sm" v-model="item.process_result">
+                                    <option
+                                        v-for="type in (['少发','多发','多发,客户退回','少发,不补发','核实未错漏发'])"
+                                        :value="type" v-text="type"></option>
+                                </select>
+                            </td>
+                        </tr>
+                        </tbody>
+                    </table>
+                </div>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-outline-primary" @click="logisticUpdateCommodities">提交</button>
+            </div>
+        </div>
+    </div>
+</div>

+ 78 - 0
resources/views/order/workOrder/_logistic_fill_work_order.blade.php

@@ -0,0 +1,78 @@
+{{--快递处理丢件工单--}}
+<div class="modal fade " id="logistic-fill-work-order-modal" tabindex="-1" role="dialog" aria-labelledby="checkModalLabel"
+     aria-hidden="true">
+    <div class="modal-dialog modal-xl modal-dialog-centered">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title" id="logistic-work-order-modal">丢件工单</h5>
+                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                    <span aria-hidden="true">&times;</span>
+                </button>
+            </div>
+            <div class="modal-body">
+                <div>
+                    <table class="table">
+                        <thead>
+                        <tr>
+                            <td>快递单号</td>
+                            <td>商品</td>
+                            <td>商品条码</td>
+                            <td>订单数量</td>
+                            <td>异常数量</td>
+                            <td>核实数量</td>
+                            <td >核实结果</td>
+                            <td>处理结果</td>
+                        </tr>
+                        </thead>
+                        <tbody v-if="fillWorkOrder">
+                        <tr v-for="(item) in fillWorkOrder?.commodities || [] ">
+                            <td>
+                                <span v-text="item.logistic_number"></span>
+                            </td>
+                            <td>
+                                <span v-text="item?.commodity?.name || ''"></span>
+                            </td>
+                            <td>
+                                <span v-text="item?.commodity?.sku || ''"></span>
+                            </td>
+                            <td>
+                                <span v-text="item.amount"></span>
+                            </td>
+                            <td>
+                                <span v-text="item.abnormal_amount"></span>
+                            </td>
+                            <td>
+                                <input type="number" class="form-control form-control-sm" v-model="item.check_amount">
+                            </td>
+                            <td >
+                                <select class="form-control form-control-sm"
+                                        v-if="fillWorkOrder.issue_type_name === '破损'"
+                                        v-model="item.check_result" >
+                                    <option v-for="type in ['核实破损','核实未破损']" :value="type" v-text="type"></option>
+                                </select>
+
+                                <select class="form-control form-control-sm"
+                                        v-if="['快递异常','快递丢件'].includes(fillWorkOrder.issue_type_name)"
+                                        v-model="item.check_result" >
+                                    <option v-for="type in ['已拦截']" :value="type" v-text="type"></option>
+                                </select>
+                            </td>
+                            <td>
+                                <select class="form-control form-control-sm" v-model="item.process_result">
+                                    <option
+                                        v-for="type in (['赔偿','不赔偿'])"
+                                        :value="type" v-text="type"></option>
+                                </select>
+                            </td>
+                        </tr>
+                        </tbody>
+                    </table>
+                </div>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-outline-primary" @click="logisticUpdateCommodities">提交</button>
+            </div>
+        </div>
+    </div>
+</div>

+ 65 - 0
resources/views/order/workOrder/_owner_fill_work_order.blade.php

@@ -0,0 +1,65 @@
+{{--快递处理丢件工单--}}
+<div class="modal fade " id="fill-damaged-work-order-modal" tabindex="-1" role="dialog" aria-labelledby="checkModalLabel"
+     aria-hidden="true">
+    <div class="modal-dialog modal-xl modal-dialog-centered">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title" id="damaged-work-order-modal">丢件工单</h5>
+                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                    <span aria-hidden="true">&times;</span>
+                </button>
+            </div>
+            <div class="modal-body">
+                <div>
+                    <table class="table">
+                        <thead>
+                        <tr>
+                            <td>快递单号</td>
+                            <td>商品</td>
+                            <td>商品条码</td>
+                            <td>工单类型</td>
+                            <td>订单数量</td>
+                            <td>异常数量</td>
+                            <td></td>
+                            <td>处理结果</td>
+                        </tr>
+                        </thead>
+                        <tbody>
+                        <tr v-for="item in  workOrder.commodities">
+                            <td>
+                                <span v-text="item.logistic_number"></span>
+                            </td>
+                            <td>
+                                <span v-text="item?.commodity?.name || ''"></span>
+                            </td>
+                            <td>
+                                <span v-text="item?.commodity?.sku || ''"></span>
+                            </td>
+                            <td>
+                                <span v-text="item.amount"></span>
+                            </td>
+                            <td>
+                                <span v-text="item.abnormal_amount"></span>
+                            </td>
+                            <td>
+                                <select v-model="item.process_result">
+                                    <option
+                                        v-for="type in (['赔偿','不赔偿'])"
+                                        :value="type" v-text="type"></option>
+                                </select>
+                            </td>
+                        </tr>
+                        </tbody>
+                    </table>
+                </div>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭
+                </button>
+                {{--填充工单--}}
+                <button type="button" class="btn btn-outline-primary" @click="updateLossWorkOrder">提交
+                </button>
+            </div>
+        </div>
+    </div>
+</div>

+ 26 - 10
resources/views/order/workOrder/_work_order_details.blade.php

@@ -1,4 +1,3 @@
-{{-- 工单详情 --}}
 <div v-if="item.details.length > 0" class="alert alert-light mb-0">
     <div class="header-alert">
         <span class="text-monospace">工单详情</span>
@@ -16,7 +15,7 @@
             <div class="card-body row col-12 mb-0 pb-0"
                  v-for="(detail,i) in item.details">
                 {{-- 快递丢件工单详情 --}}
-                <div v-if="item['issue_type']['name'] === '快递丢件'">
+                <div v-if="item.issue_type_name === '快递丢件'">
                     <div v-if="detail.logistic_number">
                         <span class="mr-3">丢件快递单号:</span>
                         <span class="text-truncate"
@@ -40,7 +39,7 @@
                 </div>
 
                 {{-- 破损工单详情 --}}
-                <div v-if="item['issue_type']['name'] === '破损'">
+                <div v-if="item.issue_type_name === '破损'">
                     <div>
                         <div>
                             <span class="mr-3">破损sku数:</span>
@@ -61,13 +60,13 @@
                 </div>
                 {{-- 交易截图 --}}
                 <div class="row"
-                     v-if="item['deal_images'] && item['deal_images'].length > 0">
+                     v-if="item.deal_images && item.deal_images.length > 0">
                     <div class="col-12">
                         <hr>
                         <span class="text-monospace" v-text="'交易截图'"></span>
                     </div>
                     <div class="card-body col-sm-6"
-                         v-for="(dealImage,i) in item['deal_images']">
+                         v-for="(dealImage,i) in item.deal_images">
                         <div class="">
                             <a  target="_blank"
                                 v-if="dealImage.upload_file"
@@ -81,13 +80,13 @@
                 </div>
                 {{-- 退款截图 --}}
                 <div class="row"
-                     v-if="item['refund_image'] && item['refund_image'].length > 0">
+                     v-if="item.refund_image && item.refund_image.length > 0">
                     <div class="col-12">
                         <hr>
                         <span class="text-monospace" v-text="'退款截图'"></span>
                     </div>
                     <div class="card-body col-sm-6"
-                         v-for="(refundImage,i) in item['refund_images']">
+                         v-for="(refundImage,i) in item.refund_images">
                         <a target="_blank"
                            v-if="refundImage.upload_file"
                            :href="filePrefix+refundImage.upload_file.url + '.'+refundImage.upload_file.type">
@@ -136,11 +135,10 @@
             </div>
 
             {{-- 破损商品详情 --}}
-            <div class="row"
-                 v-if="item['issue_type']['name'] === '破损'">
+            <div class="row">
                 <div class="col-12">
                     <hr>
-                    <div class="text-monospace">破损商品详情</div>
+                    <div class="text-monospace">异常商品详情</div>
                 </div>
                 <div class="card-body col-12"
                      v-for="(commodity,i) in item.commodities">
@@ -158,6 +156,24 @@
                         <span class="text-truncate"
                               v-text="commodity.amount"></span>
                     </div>
+                    <div>
+                        <span class="mr-3">异常:</span>
+                        <span class="text-truncate"
+                              v-text="commodity.abnormal_type"></span>
+                    </div>
+
+                    <div>
+                        <span class="mr-3">核实:</span>
+                        <span class="text-truncate"
+                              v-text="commodity.abnormal_type"></span>
+                    </div>
+
+                    <div>
+                        <span class="mr-3">处理结果</span>
+                        <span class="text-truncate"
+                              v-text="commodity.abnormal_type"></span>
+                    </div>
+
                 </div>
             </div>
         </div>

+ 103 - 33
resources/views/order/workOrder/index.blade.php

@@ -55,35 +55,48 @@
                                                 @click="createOrderIssue(item,true)">生成问题件
                                         </button>
                                     @endcan
-                                    @can('订单管理-工单处理-审核')
-                                        <button class="btn btn-sm btn-outline-success"
-                                                v-show="item.status !== '已处理'"
-                                                @click="review(item,i)">审核
-                                        </button>
-                                    @endcan
                                     @can('订单管理-工单处理-货主编辑')
-                                        <button class="btn btn-sm btn-outline-secondary"
-                                                v-if="item['issue_type']['name'] ==='快递丢件'"
-                                                @click="showFillModel(item,i)">信息填充
+                                        <button class="btn btn-sm btn-outline-primary"
+                                                v-if="item.issue_type_name === '快递丢件' && item.status === '快递处理'"
+                                                @click="ownerFillWorkOrder(item,i)">
+                                            信息填充
                                         </button>
                                     @endcan
                                     @can('订单管理-工单处理-承运商编辑')
-                                        <button class="btn btn-sm btn-outline-secondary"
-                                                v-if="['快递丢件','破损'].includes(item['issue_type']['name'])"
-                                                @click="showEditLog(item,i,2)">快递处理
+                                        <button class="btn btn-sm btn-outline-primary"
+                                                v-if="['快递丢件','破损','快递异常'].includes(item.issue_type_name) && item.status ==='承运商处理'"
+                                                @click="logisticFillWorkOrder(item,i)">
+                                            快递处理
                                         </button>
+                                            <button class="btn btn-sm btn-outline-primary"
+                                                v-if="['拦截','信息更改'].includes(item.issue_type_name) && item.status ==='承运商处理'"
+                                                @click="logisticEndWorkOrder(item,i)">
+                                                快递处理
+                                            </button>
                                     @endcan
                                     @can('订单管理-工单处理-宝时编辑')
+                                        <button class="btn btn-sm btn-outline-primary"
+                                                v-if="['错漏发'].includes(item.issue_type_name) && item.status ==='宝时处理'">
+                                            宝时处理
+                                        </button>
+                                        <button class="btn btn-sm btn-outline-secondary"
+                                                v-if="['快递丢件','破损'].includes(item.issue_type_name) && item.status ==='宝时处理'"
+                                                @click="showEditLog(item,i,1)">
+                                            宝时处理
+                                        </button>
+
                                         <button class="btn btn-sm btn-outline-secondary"
-                                                v-if="['快递丢件','破损'].includes(item['issue_type']['name'])"
-                                                @click="showEditLog(item,i,1)">宝时处理
+                                                v-if="['快递丢件','破损'].includes(item.issue_type_name)"
+                                        >
+                                            宝时处理
                                         </button>
+
                                     @endcan
                                 </td>
                                 <td>
                                     @can('订单管理-工单处理-审核')
                                         <select class="form-control form-control-sm"
-                                                :disabled="item.review_at || item.is_issue_order"
+                                                :disabled="item.status === '完成'"
                                                 :value="item.order_issue_type_id"
                                                 @change="changeIssueType(item,$event)">
                                             <option value="0"></option>
@@ -93,7 +106,7 @@
                                             </option>
                                         </select>
                                     @else
-                                        <span v-text="item['issue_type'] ?.name"></span>
+                                        <span v-text="item.issue_type_name"></span>
                                     @endcan
                                 </td>
                                 <td>
@@ -106,7 +119,7 @@
                                     <span v-text="item?.owner?.name || ''"></span>
                                 </td>
                                 <td>
-                                    <span v-text="item?.order?.client_no || ''"></span>
+                                    <span v-text="item?.order?.client_code || ''"></span>
                                 </td>
                                 <td>
                                     <div v-for="data in (item?.order?.packages || [])">
@@ -125,18 +138,32 @@
                                 <td>
                                     <span v-text="item.remark"></span>
                                 </td>
-                                <td>
-                                    @can('订单管理-工单处理-删除')
-                                        <div class="alert alert-light col-2 d-inline-block p-0">
-                                            <button class="btn btn-sm btn-outline-danger">删除</button>
+                                <td class="container">
+                                    <div class="row">
+                                        @can('订单管理-工单处理-删除')
+                                            <div class="col-2 m-0 p-0">
+                                                <div class="alert alert-light mb-0">
+                                                    <div class="header-alert">
+                                                        <span class="text-monospace">&nbsp;</span>
+                                                        <button type="button"
+                                                                class="btn btn-sm btn-outline-danger float-left">
+                                                            删除
+                                                        </button>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                        @endcan
+                                        <div class="col-6 m-0 ">
+                                            @include('order.workOrder._work_order_details')
+                                        </div>
+                                        <div @can('订单管理-工单处理-删除') class="col-4 p-0"
+                                             @else class="col-6 p-0" @endcan>
+                                            <div class="alert alert-light mb-0">
+                                                <span class="text-monospace">处理日志</span>
+                                            </div>
                                         </div>
-                                    @endcan
-                                    <div  class="col-6 d-inline-block p-0">
-                                        @include('order.workOrder._work_order_details')
-                                    </div>
-                                    <div @can('订单管理-工单处理-删除') class="col-4 p-0 d-inline-block" @else class="col-1 d-inline-block p-0" @endcan>
-                                        处理日志
                                     </div>
+
                                 </td>
                         </template>
                         </tbody>
@@ -148,6 +175,9 @@
                 @include('order.workOrder._edit_issue_type')
             @endcan
             @include('order.workOrder._fill_loss_work_order')
+            @include('order.workOrder._baoshi_fill_work_order')
+            @include('order.workOrder._logistic_fill_work_order')
+            @include('order.workOrder._owner_fill_work_order')
             @include('order.workOrder._edit_process_log')
         </div>
     </div>
@@ -202,7 +232,6 @@
                 ],
                 workOrder: {
                     id: null,
-                    index: null,
                     reissue_logistic_number: null, // 补发单号
                     logistic_number: null, // 丢件快递单号
                     refundImages: [], // 退款图
@@ -218,6 +247,7 @@
                     remark: null,
                     indemnitor: null, // 赔偿方
                 },
+                fillWorkOrder: null,
                 workOrderStatus: ['创建', '信息已填写', '快递已处理', '工单完成'],
                 selectTr: null,
                 selectOrderPackage: null,
@@ -227,6 +257,7 @@
                 selectDetailId: null,
                 selectOrderIssue: null,
                 selectIssueType: '',
+                selectIndex: null,  // 选中工单
                 filePrefix: "{{asset("/storage")}}",
             },
             mounted() {
@@ -348,11 +379,11 @@
                     workOrder.refund_images = this.filterItem(workOrder.images, 'type', 4);
                 },
                 groupLogs(workOrder) {
-                    // workOrder.package_images = this.filterItem(workOrder.images,'type',1);
-                    // workOrder.commodity_images = this.filterItem(workOrder.images,'type',2);
+
                 },
                 sortOrder(workOrder) {
                     this.groupImages(workOrder);
+                    workOrder.issue_type_name = workOrder?.issue_type?.name || '';
                     if (workOrder['order_issue']) {
                         workOrder.result_explain = workOrder['order_issue'].result_explain;
                         if (workOrder['order_issue']['issue_type']) {
@@ -494,7 +525,6 @@
                             if (item) message += `${logistic_name}  ${logistic_number}  ${order_adder}\n`;
                         }
                     });
-
                     message = message.trim('\n') + ' ——拦截\n';
                     return message;
                 },
@@ -521,7 +551,6 @@
                     let message = '';
                     if (!item.order.packages) return message;
                     let {order, remark} = item.order;
-                    console.log(order);
                     let {consignee_name, consignee_phone, province, city, district, address} = order;
                     let adder = `${consignee_name}  ${consignee_phone}  ${province}  ${city}  ${district}  ${address}`;
                     order.packages.forEach(p => {
@@ -667,7 +696,7 @@
                 },
                 clearWorkOrder(item = null, index = null) {
                     this.workOrder.id = item ? item.id : null;
-                    this.workOrder.index = index ? index : null;
+                    this.selectIndex = index ? index : null;
                     this.workOrder.reissue_logistic_number = null; // 补发单号
                     this.workOrder.logistic_number = null; // 补发单号
                     this.workOrder.dealImages = []; // 交易图
@@ -870,6 +899,47 @@
                         };
                     });
                 },
+                logisticFillWorkOrder(item, index) {
+                    this.fillWorkOrder = JSON.parse(JSON.stringify(item));
+                    this.selectIndex = index;
+                    $("#logistic-fill-work-order-modal").modal('show');
+                },
+                logisticUpdateCommodities() {
+                    let url = "{{route("workOrder.commodity.logisticUpdateApi")}}";
+                    let formData = new FormData();
+                    formData.append('id', this.fillWorkOrder.id);
+                    this.fillWorkOrder.commodities.forEach(e => {
+                        formData.append("commodities[]", JSON.stringify(e));
+                    });
+                    window.axios.post(url, formData, {'Content-Type': 'multipart/form-data'})
+                        .then(res => {
+                            if (res.data.success) {
+                                this.sortOrder(res.data.data);
+                                this.$set(this.workOrders, this.selectIndex, res.data.data);
+                                window.tempTip.showSuccess('修改成功');
+                            } else {
+                                window.tempTip.show(res.data?.message || '');
+                            }
+                        }).catch(err => {
+                        window.tempTip.show(err);
+                    })
+
+                },
+                logisticEndWorkOrder(item,index){
+                    // 拦截,信息更改的工单处理
+                    let url = "{{route("workOrder.logistic.endApi")}}";
+                    window.axios.post(url,{id:item.id}).then(res=>{
+                        if (res.data.success){
+                            window.tempTip.showSuccess('工单已处理');
+                            this.sortOrder(res.data.data);
+                            this.$set(this.workOrders,index,res.data.data);
+                        } else {
+                            window.tempTip.show(res.data?.message || '工单处理异常刷新后重试');
+                        }
+                    }).catch(err=>{
+                        window.tempTip.show(err || '工单处理异常刷新后重试');
+                    });
+                }
             },
         });
     </script>

+ 6 - 0
routes/apiLocal.php

@@ -285,6 +285,12 @@ Route::prefix('workOrder')->group(function(){
     Route::post('batchUpdateIssueType','WorkOrderController@batchUpdateIssueTypeApi')->name('workOrder.batchUpdateIssueTypeApi'); // 修改问题类型
     Route::delete('/{id}','WorkOrderController@destroyApi')->name('workOrder.destroyApi');
 
+    Route::post('logistic/end',"WorkOrderController@logisticEndApi")->name('workOrder.logistic.endApi');
+    Route::prefix('commodity')->group(function(){
+        Route::post("updateCommodities","WorkOrderController@ownerUpdateCommoditiesApi")->name("workOrder.commodity.ownerUpdateApi");
+        Route::post("updateCommodities","WorkOrderController@ownerUpdateCommoditiesApi")->name("workOrder.commodity.logisticUpdateApi");
+    });
+
     Route::prefix('process')->group(function (){
         Route::post('log/logistic','WorkOrderProcessLogController@logisticStoreApi')->name('workOrderProcessLog.logisticLogApi');
         Route::post('log','WorkOrderProcessLogController@storeApi')->name('workOrderProcessLog.LogApi');