ソースを参照

工单修改本版 6.4版

ajun 4 年 前
コミット
5798d2502d
33 ファイル変更4713 行追加1294 行削除
  1. 8 1
      app/Filters/WorkOrderFilters.php
  2. 17 0
      app/Http/Controllers/TestController.php
  3. 18 0
      app/Http/Controllers/WorkOrderDamageController.php
  4. 19 4
      app/Http/Controllers/WorkOrderExpressAbnormalController.php
  5. 33 4
      app/Http/Controllers/WorkOrderInformationChangeController.php
  6. 21 2
      app/Http/Controllers/WorkOrderInterceptController.php
  7. 3 4
      app/Http/Controllers/WorkOrderLossController.php
  8. 44 4
      app/Http/Controllers/WorkOrderMistakeController.php
  9. 1 1
      app/OracleBasSKU.php
  10. 1 1
      app/OracleDOCASNDetail.php
  11. 22 4
      app/Services/WorkOrderCommoditiesService.php
  12. 32 16
      app/Services/WorkOrderDamageService.php
  13. 19 2
      app/Services/WorkOrderDetailService.php
  14. 29 19
      app/Services/WorkOrderExpressAbnormalService.php
  15. 7 0
      app/Services/WorkOrderImageService.php
  16. 25 12
      app/Services/WorkOrderInformationChangeService.php
  17. 19 17
      app/Services/WorkOrderInterceptService.php
  18. 10 16
      app/Services/WorkOrderLossService.php
  19. 51 20
      app/Services/WorkOrderMistakeService.php
  20. 39 27
      app/Services/WorkOrderService.php
  21. 84 11
      app/WorkOrder.php
  22. 32 23
      app/WorkOrderCommodities.php
  23. 66 1
      app/WorkOrderDetail.php
  24. 65 0
      database/migrations/2021_12_03_110027_work_orders_and_work_order_details_add_current_status.php
  25. 84 33
      resources/views/order/index/_work_order_modal.blade.php
  26. 89 54
      resources/views/order/index/delivering.blade.php
  27. 670 126
      resources/views/order/workOrder/_bao_shi_review_modal.blade.php
  28. 222 74
      resources/views/order/workOrder/_logistic_fill_work_order_modal.blade.php
  29. 800 184
      resources/views/order/workOrder/_owner_fill_work_order_modal.blade.php
  30. 112 50
      resources/views/order/workOrder/_work_order_details.blade.php
  31. 514 0
      resources/views/order/workOrder/_work_order_show.blade.php
  32. 1545 580
      resources/views/order/workOrder/index.blade.php
  33. 12 4
      routes/apiLocal.php

+ 8 - 1
app/Filters/WorkOrderFilters.php

@@ -39,7 +39,8 @@ class WorkOrderFilters
         'owner',
         'client_code',
         'is_end',
-        'status'
+        'status',
+        'process_progress'
     ];
     protected $array_filter;
     protected $params = [];
@@ -279,6 +280,12 @@ class WorkOrderFilters
     {
         $this->searchWay($this->getOrderQuery(), $client_code, 'orders.client_code');
     }
+
+    public function process_progress($process_progress)
+    {
+        $this->searchWay($this->queryBuilder,$process_progress,'work_order.process_progress');
+    }
+
     public function status($status){
         $status_list = [];
         if ($status == '承运商处理'){

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

@@ -82,6 +82,7 @@ use App\Services\OrderPackageCommoditiesService;
 use App\Services\OrderPackageReceivedSyncService;
 use App\Services\OrderPackageService;
 use App\Services\OrderService;
+use App\Services\OrderTrackingService;
 use App\Services\OwnerFeeTotalService;
 use App\Services\OwnerLogisticFeeReportService;
 use App\Services\OwnerPriceOperationService;
@@ -92,6 +93,7 @@ use App\Services\ReplenishmentService;
 use App\Services\ReviewService;
 use App\Services\StationService;
 use App\Services\StorageService;
+use App\Services\StoreItemService;
 use App\Services\StoreService;
 use App\Services\SyriusTaskService;
 use App\Services\WorkOrderService;
@@ -857,4 +859,19 @@ sql;
     public function  workOrder(){
         dd(route('workOrder.damage.storeApi'));
     }
+
+    public function asnTest(){
+        $service = new StoreItemService();
+        $docAsns = OracleDOCASNHeader::query()->whereIn('asnno',['ASN2112080434','ASN2112080435'])->get();
+        $storeItems = $service->getAsnDetailsByAsnHerder($docAsns);
+        dd($storeItems);
+    }
+
+    public function testSyncOrder(){
+        $order_no = 'SO211124008523';
+        $service = new OracleDOCOrderHeaderService();
+        $order_headers = $service->getQuery()->where('OrderNo',$order_no)->get();
+        $order_tracking_service = new OrderTrackingService();
+        $order_tracking_service->createByWmsOrderHeader($order_headers);
+    }
 }

+ 18 - 0
app/Http/Controllers/WorkOrderDamageController.php

@@ -37,6 +37,24 @@ class WorkOrderDamageController extends Controller
         }
     }
 
+    /**
+     * 编辑已处理文件
+     * @param Request $request
+     * @return array
+     */
+    public function ownerEditApi(Request $request): array
+    {
+        if (Gate::denies('订单管理-工单处理-货主编辑'))
+            return ['success' => false, 'message' => '没有对应权限'];
+        $detail = WorkOrderDetail::query()->with('workOrder')->find($request->input('detail_id'));
+        $workOrder = $detail->workOrder;
+        if (!$detail || !$workOrder) return ['success' => false,'message' => '参数异常'];
+        else if(in_array($detail->status,['完成','宝时终审'])) return ['success' => false,'message' => '处理失败,刷新当前页面重试'];
+        $this->service->ownerEdit($detail,$request->all());
+        $workOrder->loadDefaultWith();
+        return ['success' => true,'data' => $workOrder];
+    }
+
     public function logisticHandleApi(Request $request): array
     {
         if (Gate::denies('订单管理-工单处理-承运商编辑'))

+ 19 - 4
app/Http/Controllers/WorkOrderExpressAbnormalController.php

@@ -31,18 +31,33 @@ class WorkOrderExpressAbnormalController extends Controller
         return ['success' => true];
     }
 
+    public function ownerEditApi(Request $request): array
+    {
+        if (Gate::denies('订单管理-工单处理-货主编辑'))
+            return ['success' => false, 'message' => '没有对应权限'];
+        $detail = WorkOrderDetail::query()->with('workOrder')->find($request->input('detail_id'));
+        $workOrder = $detail->workOrder;
+        if (!$detail || !$workOrder) return ['success' => false, 'message' => '参数异常'];
+        else if (in_array($detail->status,['完成','宝时终审'])) return ['success' => false, 'message' => '工单已完成,请刷新重试'];
+        $this->service->ownerEdit($detail,$request->all());
+        $workOrder->loadDefaultWith();
+        return ['success' => true, 'data' => $workOrder];
+    }
+
     public function logisticHandleApi(Request $request): array
     {
         if (Gate::denies('订单管理-工单处理-承运商编辑'))
             return ['success' => false, 'message' => '没有对应权限'];
         $detail = WorkOrderDetail::query()->with('workOrder')->find($request->input('detail_id'));
         $workOrder = $detail->workOrder;
-        if (!$detail || !$workOrder) return ['success' => false,'message' => '参数异常'];
-        $this->service->logisticHandle($detail,$request->all());
+        if (!$detail || !$workOrder) return ['success' => false, 'message' => '参数异常'];
+        else if ($detail->status == '完成') return ['success' => false, 'message' => '工单已完成,请刷新重试'];
+        $this->service->logisticHandle($detail, $request->all());
         $workOrder->loadDefaultWith();
-        return ['success' => true,'data' => $workOrder];
+        return ['success' => true, 'data' => $workOrder];
     }
 
+
     public function baoShiReviewApi(Request $request): array
     {
         if (Gate::denies('订单管理-工单处理-宝时编辑'))
@@ -50,7 +65,7 @@ class WorkOrderExpressAbnormalController extends Controller
         $detail = WorkOrderDetail::query()->with('workOrder')->find($request->input('detail_id'));
         $workOrder = $detail->workOrder;
         if (!$detail || !$workOrder) return ['success' => false,'message' => '参数异常'];
-        $this->service->baoShiReviewDamage($detail,$request->all());
+        $this->service->baoShiReviewExpressAbnormal($detail,$request->all());
         $workOrder->loadDefaultWith();
         return ['success' => true,'data' => $workOrder];
     }

+ 33 - 4
app/Http/Controllers/WorkOrderInformationChangeController.php

@@ -5,6 +5,7 @@ namespace App\Http\Controllers;
 use App\Services\OrderService;
 use App\Services\WorkOrderInformationChangeService;
 use App\WorkOrderDetail;
+
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Gate;
 
@@ -16,6 +17,7 @@ class WorkOrderInformationChangeController extends Controller
      */
     private $service;
     private $orderService;
+
     public function __construct()
     {
         $this->service = app('WorkOrderInformationChangeService');
@@ -26,22 +28,49 @@ class WorkOrderInformationChangeController extends Controller
     {
         if (Gate::denies('订单管理-订单-生成工单'))
             return ['success' => false, 'message' => '没有对应权限'];
-        $orderNo = $request->input('order_no','');
+        $orderNo = $request->input('order_no', '');
         $this->orderService->syncOrderByCodes([$orderNo]);
         $this->service->store($request->all());
         return ['success' => true];
     }
 
+    public function ownerEditApi(Request $request): array
+    {
+        if (Gate::denies('订单管理-工单处理-货主编辑'))
+            return ['success' => false, 'message' => '没有对应权限'];
+        $detail = WorkOrderDetail::query()->find($request->input('detail_id'));
+        if (!$detail) {
+            return ['success' => false, 'message' => '参数异常'];
+        } else if($detail->status == '完成') return ['success' => false, 'message' => '工单已完成,请刷新重试'];
+        $this->service->ownerEdit($detail, $request->all());
+        $data = $this->service->getDefaultWith($detail->work_order_id);
+        return ['success' => true, 'data' => $data];
+    }
+
     public function logisticHandlerApi(Request $request): array
     {
         if (Gate::denies('订单管理-工单处理-承运商编辑'))
             return ['success' => false, 'message' => '没有对应权限'];
         $detail = WorkOrderDetail::query()->find($request->input('detail_id'));
-        if (!$detail){
+
+        if (!$detail) {
+            return ['success' => false, 'message' => '参数异常'];
+        } else if($detail->status == '完成') return ['success' => false, 'message' => '工单已完成,请刷新重试'];
+        $this->service->logisticHandler($detail, $request->all());
+        $data = $this->service->getDefaultWith($detail->work_order_id);
+        return ['success' => true, 'data' => $data];
+    }
+
+    public function baoShiReviewApi(Request $request): array
+    {
+        if (Gate::denies('订单管理-工单处理-宝时编辑'))
+            return ['success' => false, 'message' => '没有对应权限'];
+        $detail = WorkOrderDetail::query()->find($request->input('detail_id'));
+        if (!$detail) {
             return ['success' => false, 'message' => '参数异常'];
         }
-        $this->service->endInformationChange($detail);
+        $this->service->baoShiReviewInformationChange($detail, $request->all());
         $data = $this->service->getDefaultWith($detail->work_order_id);
-        return ['success' => true,'data' => $data];
+        return ['success' => true, 'data' => $data];
     }
 }

+ 21 - 2
app/Http/Controllers/WorkOrderInterceptController.php

@@ -33,11 +33,30 @@ class WorkOrderInterceptController extends Controller
         return ['success' => true];
     }
 
-    public function logisticHandlerApi(Request $request):array{
+    public function logisticHandlerApi(Request $request):array
+    {
         if (Gate::denies('订单管理-工单处理-承运商编辑'))
             return ['success' => false, 'message' => '没有对应权限'];
         $detail = WorkOrderDetail::query()->find($request->input('detail_id'));
-        $this->service->endIntercept($detail);
+        $workOrder = $detail->workOrder;
+
+        if (!$detail || !$workOrder) return ['success' => false,'message' => '参数异常'];
+        if($detail->status === '完成') return ['success' => false, 'message' => '工单已完成,请刷新重试'];
+
+        $this->service->logisticHandler($detail,$request->all());
+        $data = $this->service->getDefaultWith($detail->work_order_id);
+        return ['success' => true,'data' => $data];
+    }
+
+    public function baoShiReviewApi(Request $request):array
+    {
+        if (Gate::denies('订单管理-工单处理-宝时编辑'))
+            return ['success' => false, 'message' => '没有对应权限'];
+        $detail = WorkOrderDetail::query()->find($request->input('detail_id'));
+        if (!$detail){
+            return ['success' => false, 'message' => '参数异常'];
+        }
+        $this->service->baoShiReviewIntercept($detail,$request->all());
         $data = $this->service->getDefaultWith($detail->work_order_id);
         return ['success' => true,'data' => $data];
     }

+ 3 - 4
app/Http/Controllers/WorkOrderLossController.php

@@ -38,8 +38,11 @@ class WorkOrderLossController extends Controller
         if (Gate::denies('订单管理-工单处理-货主编辑'))
             return ['success' => false, 'message' => '没有对应权限'];
         $detail = WorkOrderDetail::query()->find($request->input('detail_id'));
+        $workOrder = $detail->workOrder;
         if (!$detail){
             return ['success' => false, 'message' => '参数异常'];
+        } else if ($workOrder->status == '完成'){
+            return ['success' => false, 'message' => '当前订单已完成,刷新当前页面重试'];
         }
         $this->service->ownerFillDetail($detail,$request->all());
         $data = $this->service->getDefaultWith($detail->work_order_id);
@@ -58,8 +61,4 @@ class WorkOrderLossController extends Controller
         $workOrder->loadDefaultWith();
         return ['success' => true,'data' => $workOrder];
     }
-
-
-
-
 }

+ 44 - 4
app/Http/Controllers/WorkOrderMistakeController.php

@@ -31,27 +31,67 @@ class WorkOrderMistakeController extends Controller
         return ['success' => true];
     }
 
-    public function baoShiReviewApi(Request $request): array
+    public function ownerEditApi(Request $request): array
+    {
+        if (Gate::denies('订单管理-工单处理-货主编辑'))
+            return ['success' => false, 'message' => '没有对应权限'];
+        $detail = WorkOrderDetail::query()->with('workOrder')->find($request->input('detail_id'));
+        $workOrder = $detail->workOrder;
+        if (!$detail || !$workOrder) return ['success' => false,'message' => '参数异常'];
+        if ($detail->status ==='完成') return ['success' => false,'message' => '处理失败,刷新当前页面重试'];
+        $this->service->ownerEdit($detail,$request->all());
+        $workOrder->loadDefaultWith();
+        return ['success' => true,'data' => $workOrder];
+    }
+
+    public function baoShiHandleApi(Request $request): array
     {
         if (Gate::denies('订单管理-工单处理-宝时编辑'))
             return ['success' => false, 'message' => '没有对应权限'];
         $detail = WorkOrderDetail::query()->with('workOrder')->find($request->input('detail_id'));
         $workOrder = $detail->workOrder;
         if (!$detail || !$workOrder) return ['success' => false,'message' => '参数异常'];
-        $this->service->baoShiReview($detail,$request->all());
+        if ($detail->status ==='完成' || $detail->status === '宝时终审') return ['success' => false,'message' => '处理失败,刷新当前页面重试'];
+        $this->service->baoShiReviewMistake($detail,$request->all());
         $workOrder->loadDefaultWith();
         return ['success' => true,'data' => $workOrder];
 
     }
 
-    public function ownerReviewAndEndApi(Request $request): array
+    public function ownerHandleApi(Request $request): array
+    {
+        if (Gate::denies('订单管理-工单处理-货主编辑'))
+            return ['success' => false, 'message' => '没有对应权限'];
+        $detail = WorkOrderDetail::query()->with('workOrder')->find($request->input('detail_id'));
+        $workOrder = $detail->workOrder;
+        if (!$detail || !$workOrder) return ['success' => false,'message' => '参数异常'];
+        if ($detail->status ==='完成') return ['success' => false,'message' => '处理失败,刷新当前页面重试'];
+        $this->service->ownerReviewMistake($detail,$request->all());
+        $workOrder->loadDefaultWith();
+        return ['success' => true,'data' => $workOrder];
+    }
+
+    public function ownerEndEditApi(Request $request): array
+    {
+        if (Gate::denies('订单管理-工单处理-货主编辑'))
+            return ['success' => false, 'message' => '没有对应权限'];
+        $detail = WorkOrderDetail::query()->with('workOrder')->find($request->input('detail_id'));
+        $workOrder = $detail->workOrder;
+        if (!$detail || !$workOrder) return ['success' => false,'message' => '参数异常'];
+        if ($detail->status ==='完成') return ['success' => false,'message' => '处理失败,刷新当前页面重试'];
+        $this->service->ownerEndEdit($detail,$request->all());
+        $workOrder->loadDefaultWith();
+        return ['success' => true,'data' => $workOrder];
+    }
+
+    public function baoShiReviewApi(Request $request): array
     {
         if (Gate::denies('订单管理-工单处理-宝时编辑'))
             return ['success' => false, 'message' => '没有对应权限'];
         $detail = WorkOrderDetail::query()->with('workOrder')->find($request->input('detail_id'));
         $workOrder = $detail->workOrder;
         if (!$detail || !$workOrder) return ['success' => false,'message' => '参数异常'];
-        $this->service->ownerReviewAndEnd($detail,$request->all());
+        $this->service->baoShiReview($detail,$request->all());
         $workOrder->loadDefaultWith();
         return ['success' => true,'data' => $workOrder];
     }

+ 1 - 1
app/OracleBasSKU.php

@@ -12,7 +12,7 @@ use App\Traits\ModelTimeFormat;
 use App\Traits\ModelLogChanging;
 class OracleBasSKU extends Model
 {
-    use \Awobaz\Compoships\Compoships;
+//    use \Awobaz\Compoships\Compoships;
     use ModelLogChanging;
 
     use ModelTimeFormat;

+ 1 - 1
app/OracleDOCASNDetail.php

@@ -9,7 +9,7 @@ use App\Traits\ModelLogChanging;
 
 class OracleDOCASNDetail extends Model
 {
-    use \Awobaz\Compoships\Compoships;
+//    use \Awobaz\Compoships\Compoships;
     use ModelLogChanging;
 
     use ModelTimeFormat;

+ 22 - 4
app/Services/WorkOrderCommoditiesService.php

@@ -3,7 +3,6 @@
 namespace App\Services;
 
 use App\Traits\ServiceAppAop;
-use App\WorkOrder;
 use App\WorkOrderCommodities;
 use App\WorkOrderDetail;
 
@@ -20,17 +19,20 @@ class WorkOrderCommoditiesService
             'work_order_id' => $detail->work_order_id ?? '',
             'work_order_detail_id' =>$detail->id ?? '',
             'commodity_id' => $obj->commodity_id ?? '',
-            'sku' => $obj->sku,
+            'sku' => $obj->sku ?? '',
             'amount' => $obj->amount ?? '',
             'price' => $obj->price ?? '',
             'logistic_number' => $obj->logistic_number ?? '',
             'abnormal_amount' => $obj->abnormal_amount ?? '',
             'check_amount' => $obj->check_amount ?? '',
             'bao_shi_check_amount' => $obj->bao_shi_check_amount ?? '',
+            'reissue_logistic_number' => $obj->reissue_logistic_number ?? '',
+            'store_in_number' => $obj->store_in_number ?? '',
             'check_result' => $obj->check_result ?? '',
             'process_result' => $obj->process_result ?? '',
             'abnormal_type' => $obj->abnormal_type ?? '',
             'issue_type' => $detail->order_issue_type_id ?? '',
+            'out_order_number' => $detail->out_order_number ?? '',
         ]);
     }
 
@@ -67,25 +69,41 @@ class WorkOrderCommoditiesService
         $detail->commodities()->where('id', $obj->id)->update([
             'check_amount' => $obj->check_amount ?? '',
             'bao_shi_check_amount' => $obj->bao_shi_check_amount ?? '',
+            'abnormal_amount' => $obj->abnormal_amount ?? '',
+            'abnormal_type' => $obj->abnormal_type ?? '',
             'check_result' => $obj->check_result ?? '',
+            'price' => $obj->price ?? '',
             'process_result' => $obj->process_result ?? '',
             'process_result_info' => $obj->process_result_info ?? '',
+            'reissue_logistic_number' => $obj->reissue_logistic_number ?? '',       // 补发单号
+            'store_in_amount' => $obj->store_in_amount ?? '',                       // 入库数量
+            'store_in_number' => $obj->store_in_number ?? '',                       // 入库单号
+            'out_order_number' => $obj->out_order_number ?? '',                       // 入库单号
+            'end_handle_result' => $obj->end_handle_result ?? '',                       // 最终处理
         ]);
     }
 
+    public function deleteCommodities($detail,$delete_ids)
+    {
+        if (!$delete_ids) return ;
+        WorkOrderCommodities::query()->where('work_order_detail_id',$detail->id)->whereIn('id',$delete_ids)->delete();
+    }
+
     /**
+     * 标记为未完成历史标记
      * @param WorkOrderDetail $detail
      */
     public function undoneTag(WorkOrderDetail $detail)
-    {   // 标记为未完成历史标记
+    {
         $detail->commodities()->update(['tag' => 2]);
     }
 
     /**
+     * 标记为完成
      * @param WorkOrderDetail $detail
      */
     public function endDetail(WorkOrderDetail $detail)
-    {    // 标记为完成
+    {
         $detail->commodities()->update(['tag' => 1]);
     }
 }

+ 32 - 16
app/Services/WorkOrderDamageService.php

@@ -2,6 +2,8 @@
 
 namespace App\Services;
 
+use App\WorkOrderDetail;
+
 /**
  * 处理 破损 工单
  * Class WorkOrderDamageService
@@ -13,19 +15,17 @@ class WorkOrderDamageService extends WorkOrderService
      * @var WorkOrderLogService $logService
      * @var WorkOrderDetailService $detailService
      * @var OrderIssueTypeService $issueTypeService
-     * @var OrderService $orderService
      */
     private $logService;
     private $detailService;
     private $issueTypeService;
-    private $orderService;
+
     public function __construct()
     {
         parent::__construct();
         $this->logService = app('WorkOrderLogService');
         $this->detailService = app('WorkOrderDetailService');
         $this->issueTypeService = app('OrderIssueTypeService');
-        $this->orderService = app('OrderService');
     }
 
     /*
@@ -35,32 +35,48 @@ class WorkOrderDamageService extends WorkOrderService
      * 3: 宝时终审
      */
 
-    public function store($params){
+    public function store($params)
+    {
         $issueType = $this->issueTypeService->firstOrCreate(['name' => '破损']);
-        $order = $this->orderService->first(['code' => $params['order_no']]);
+        $order = $this->syncOrder($params['order_no']);
         $workOrder = $this->createAndNotification($order, $issueType, $params['remark'] ?? '');
+        $workOrder->change('承运商处理','商家创建','');
         $detail = $this->detailService->createWorkOrderDetail($workOrder, $params);
+        $detail->change('承运商处理','商家创建','');
+
         $this->logService->createLog($detail, '创建', '创建工单');
-        $workOrder->changeStatus('承运商处理');
-        $detail->changeStatus('宝时处理');
     }
 
-    public function logisticHandle($detail,$params)
+    /**
+     * 货主编辑以创建工单
+     * @param WorkOrderDetail $detail
+     * @param $params
+     */
+    public function ownerEdit(WorkOrderDetail $detail,$params)
+    {
+        $this->detailService->updateDetail($detail, $params);
+        $detail->change('承运商处理','商家创建','');
+        $detail->workOrder->change('承运商处理','商家创建','');
+        $this->logService->createLog($detail, '处理', '货主编辑');
+
+    }
+
+    public function logisticHandle(WorkOrderDetail $detail, $params)
     {
-        $this->detailService->updateDetail($detail,$params);
-        $detail->changeStatus('宝时终审');
+        $this->detailService->updateDetail($detail, $params);
+        $detail->change('宝时终审', $params['process_progress'],'承运商处理');
+        $detail->workOrder->change('宝时终审', $params['process_progress'],'承运商处理');
         $detail->workOrder->clearWorkOrderStatus();
-        $detail->workOrder->changeStatus('宝时终审');
         $this->logService->createLog($detail, '处理', '承运商处理');
     }
 
-    public function baoShiReviewDamage($detail,$params)
+    public function baoShiReviewDamage(WorkOrderDetail $detail, $params)
     {
-        $this->detailService->updateDetail($detail,$params);
-        $this->logService->createLog($detail, '终审', '终审');
+        $this->detailService->updateDetail($detail, $params);
+        $this->logService->createLog($detail, '终审', '宝时终审');
         $this->logService->createLog($detail, '完结', '完结');
-        $detail->changeStatus('完成');
-        $detail->workOrder->changeStatus('完成');
+        $detail->change('完成', $params['process_progress'],'宝时终审');
+        $detail->workOrder->change('完成', $params['process_progress'],'宝时终审');
         $this->detailService->endDetail($detail);
     }
 

+ 19 - 2
app/Services/WorkOrderDetailService.php

@@ -32,6 +32,7 @@ class WorkOrderDetailService
         $param  = (new WorkOrderDetail($params))->getAttributes();
         $param['order_issue_type_id'] = $workOrder['order_issue_type_id'];
         $param['remark'] = $workOrder['remark'];
+        $param['process_progress'] = $workOrder['process_progress'];
         $detail = $workOrder->details()->create($param);
         $this->commodityService->createWorkOrderCommoditiesByJsonArray($detail, $params['commodities'] ?? []);
         $this->imageService->createWorkOrderImages($detail,$params);
@@ -47,8 +48,14 @@ class WorkOrderDetailService
     {
         $param = (new WorkOrderDetail($params))->getAttributes();
         $detail->update($param);
+        $is_edit = $params['is_edit'] ?? false;
         $this->imageService->createWorkOrderImages($detail, $params);                                                   // 图片信息
-        $this->commodityService->createWorkOrderCommoditiesByJsonArray($detail, $params['commodities'] ?? []);          // 商品信息
+        if (!$is_edit){
+            $this->commodityService->createWorkOrderCommoditiesByJsonArray($detail, $params['commodities'] ?? []);          // 商品信息
+        } else {
+            $this->commodityService->updateWorkOrderCommoditiesByJsonArray($detail, $params['commodities'] ?? []);
+            $this->commodityService->deleteCommodities($detail,$params['delete_commodity_ids'] ?? []);
+        }
     }
 
     /**
@@ -67,7 +74,17 @@ class WorkOrderDetailService
     {
         $param = (new WorkOrderDetail($params))->getAttributes();
         $detail->update($param);
-        $this->commodityService->updateWorkOrderCommoditiesByJsonArray($detail,$params['commodities'] ?? []);
+        $is_edit = $params['is_edit'] ?? false;
+        if ($is_edit){
+            $this->commodityService->createWorkOrderCommoditiesByJsonArray($detail,$params['commodities'] ?? []);
+            $this->commodityService->updateWorkOrderCommoditiesByJsonArray($detail,$params['update_commodities'] ?? []);
+            $this->commodityService->deleteCommodities($detail,$params['delete_commodity_ids']??[]);
+            $this->imageService->createWorkOrderImages($detail,$params);
+            $this->imageService->deleteImages($detail,$params['delete_image_ids']??[]);
+
+        } else {
+            $this->commodityService->updateWorkOrderCommoditiesByJsonArray($detail,$params['commodities'] ?? []);
+        }
     }
 
     /**

+ 29 - 19
app/Services/WorkOrderExpressAbnormalService.php

@@ -2,31 +2,28 @@
 
 namespace App\Services;
 
+/**
+ * 处理 快递异常 工单
+ */
+use App\WorkOrderDetail;
 
-///**
-// * 处理 快递异常 工单
-// */
-class WorkOrderExpressAbnormalService
+class WorkOrderExpressAbnormalService extends WorkOrderService
 {
     /**
      * @var WorkOrderLogService $logService
      * @var WorkOrderDetailService $detailService
      * @var OrderIssueTypeService $issueTypeService
      * @var OrderService $orderService
-     * @var WorkOrderService $workOrderService
      */
     private $logService;
     private $detailService;
     private $issueTypeService;
-    private $orderService;
-    private $workOrderService;
     public function __construct()
     {
+        parent::__construct();
         $this->logService = app('WorkOrderLogService');
         $this->detailService = app('WorkOrderDetailService');
         $this->issueTypeService = app('OrderIssueTypeService');
-        $this->orderService = app('OrderService');
-        $this->workOrderService = app('WorkOrderService');
     }
 
     /*
@@ -38,32 +35,45 @@ class WorkOrderExpressAbnormalService
 
     public function store($params)
     {
-        $order = $this->orderService->first(['code' => $params['order_no']]);
+        $order = $this->syncOrder($params['order_no']);
         $issueType = $this->issueTypeService->firstOrCreate(['name' => '快递异常']);
-        $workOrder = $this->workOrderService->createOrResetWorkOrder($order, $issueType, $params['remark'] ?? '');
+
+        $workOrder = $this->createOrResetWorkOrder($order, $issueType, $params['remark'] ?? '',$params['type']);
+        $workOrder->change('承运商处理','商家创建','');
+
         $detail = $this->detailService->createWorkOrderDetail($workOrder, $params);
-        $workOrder->changeStatus('承运商处理');
-        $detail->changeStatus('宝时处理');
+        $detail->change('承运商处理','商家创建','');
+
         $this->logService->createLog($detail, '创建', '创建工单');
     }
 
-    public function logisticHandle($detail,$params)
+    public function ownerEdit(WorkOrderDetail $detail,$params)
     {
         $this->detailService->updateDetail($detail,$params);
-        $detail->changeStatus('宝时终审');
         $detail->workOrder->clearWorkOrderStatus();
-        $detail->workOrder->changeStatus('宝时终审');
+        $detail->change('承运商处理','商家创建','');
+        $detail->workOrder->change('承运商处理','商家创建','');
+        $this->logService->createLog($detail, '处理', '商家编辑');
+    }
+
+    public function logisticHandle(WorkOrderDetail $detail,$params)
+    {
+        $this->detailService->updateDetail($detail,$params);
+        $detail->workOrder->clearWorkOrderStatus();
+        $detail->change('宝时终审',$params['process_progress'],'承运商处理');
+        $detail->workOrder->change('宝时终审',$params['process_progress'],'承运商处理');
         $this->logService->createLog($detail, '处理', '承运商处理');
     }
 
-    public function end($detail,$params)
+    public function baoShiReviewExpressAbnormal(WorkOrderDetail $detail,$params)
     {
         $this->detailService->updateDetail($detail,$params);
         $this->logService->createLog($detail, '终审', '终审');
         $this->logService->createLog($detail, '完结', '完结');
-        $detail->changeStatus('完成');
-        $detail->workOrder->changeStatus('完成');
+        $detail->change('完成',$params['process_progress'],'宝时终审');
+        $detail->workOrder->change('完成',$params['process_progress'],'宝时终审');
         $this->detailService->endDetail($detail);
+
     }
 
 }

+ 7 - 0
app/Services/WorkOrderImageService.php

@@ -121,7 +121,14 @@ class WorkOrderImageService
         $commodity_images = $params['commodityImages'] ?? [];
         $deal_images = $params['dealImages'] ?? [];
         $refund_images = $params['refundImages'] ?? [];
+        $delete_ids= $params['delete_image_ids'] ?? [];
         $this->createImages($detail, $package_images, $commodity_images, $deal_images, $refund_images);
+        if ($delete_ids) $this->deleteImages($detail,$delete_ids);
+    }
+    public function deleteImages($detail,$delete_ids)
+    {
+        if (!$delete_ids)return;
+        WorkOrderImage::query()->where('work_order_detail_id',$detail->id)->whereIn('id',$delete_ids)->delete();
     }
 
     /**

+ 25 - 12
app/Services/WorkOrderInformationChangeService.php

@@ -2,7 +2,6 @@
 
 namespace App\Services;
 
-use App\WorkOrder;
 use App\WorkOrderDetail;
 
 /**
@@ -16,19 +15,16 @@ class WorkOrderInformationChangeService extends WorkOrderService
      * @var WorkOrderLogService $logService
      * @var WorkOrderDetailService $detailService
      * @var OrderIssueTypeService $issueTypeService
-     * @var OrderService $orderService
      */
     private $logService;
     private $detailService;
     private $issueTypeService;
-    private $orderService;
     public function __construct()
     {
         parent::__construct();
         $this->logService = app('WorkOrderLogService');
         $this->detailService = app('WorkOrderDetailService');
         $this->issueTypeService = app('OrderIssueTypeService');
-        $this->orderService = app('OrderService');
     }
 
     /*
@@ -41,21 +37,38 @@ class WorkOrderInformationChangeService extends WorkOrderService
     public function store($params)
     {
         $issueType = $this->issueTypeService->firstOrCreate(['name' => '信息更改']);
-        $order = $this->orderService->first(['code' => $params['order_no']]);
+        $order = $this->syncOrder($params['order_no']);
         $workOrder = $this->createAndNotification($order, $issueType, $params['remark'] ?? '');
+        $workOrder->change('承运商处理','商家创建','');
+
         $detail = $this->detailService->createWorkOrderDetail($workOrder, $params);
-        $workOrder->changeStatus('承运商处理');
-        $detail->changeStatus('承运商处理');
+        $detail->change('承运商处理','商家创建','');
         $this->logService->createLog($detail, '创建', '创建工单');
     }
 
-    public function endInformationChange(WorkOrderDetail $detail)
+    public function ownerEdit(WorkOrderDetail $detail,$params)
     {
-        $this->logService->createLog($detail, '完结', '运商完结');
-        $detail->changeStatus('完成');
+        $this->logService->createLog($detail, '处理', '商家编辑');
+        $detail->update(['remark' => $params['remark']]);
+        $detail->workOrder->update(['remark' => $params['remark']]);
+    }
+
+    public function logisticHandler(WorkOrderDetail $detail,$params){
+        $this->logService->createLog($detail, '处理', '承运商处理');
         $detail->workOrder->clearWorkOrderStatus();
-        $detail->workOrder->changeStatus('完成');
-        $this->detailService->endDetail($detail);
 
+        $detail->change('宝时终审',$params['process_progress'],'承运商处理');
+        $detail->workOrder->change('宝时终审',$params['process_progress'],'承运商处理');
+    }
+
+
+    public function baoShiReviewInformationChange(WorkOrderDetail $detail,$params)
+    {
+        $this->logService->createLog($detail, '完结', '宝时完结');
+
+        $detail->change('完成',$params['process_progress'],'宝时终审');
+        $detail->workOrder->change('完成',$params['process_progress'],'宝时终审');
+
+        $this->detailService->endDetail($detail);
     }
 }

+ 19 - 17
app/Services/WorkOrderInterceptService.php

@@ -16,13 +16,10 @@ class WorkOrderInterceptService extends WorkOrderService
      * @var WorkOrderLogService $logService
      * @var WorkOrderDetailService $detailService
      * @var OrderIssueTypeService $issueTypeService
-     * @var OrderService $orderService
      */
     private $logService;
     private $detailService;
     private $issueTypeService;
-    private $orderService;
-    private $workOrderService;
 
     public function __construct()
     {
@@ -30,37 +27,42 @@ class WorkOrderInterceptService extends WorkOrderService
         $this->logService = app('WorkOrderLogService');
         $this->detailService = app('WorkOrderDetailService');
         $this->issueTypeService = app('OrderIssueTypeService');
-        $this->orderService = app('OrderService');
-        $this->workOrderService = app('WorkOrderService');
     }
 
     /*
     * 拦截工单处理流程
     * 1:创建
-    * 2:承运商处理完结
+    * 2:承运商处理   [已处理,已签收];
+    * 3:宝时终审     [拦截成功,拦截失败]
     */
 
 
     public function store($params)
     {
         $issueType = $this->issueTypeService->firstOrCreate(['name' => '拦截']);
-        $order = $this->orderService->first(['code' => $params['orderNos']]);
-        $workOrder = $this->workOrderService->createAndNotification($order, $issueType, $param['remark'] ?? '');
-        $workOrder->changeStatus('承运商处理');
+        $order = $this->syncOrder($params['orderNos']);
+        $workOrder = $this->createAndNotification($order, $issueType, $params['remark'] ?? '');
+        $workOrder->change('承运商处理','商家创建','');
         $detail = $this->detailService->createWorkOrderDetail($workOrder, $params);
+        $detail->change('承运商处理','商家创建','');
         $this->logService->createLog($detail, '创建', '创建');
-        $workOrder->changeStatus('承运商处理');
     }
 
+    public function logisticHandler(WorkOrderDetail $detail,$params)
+    {
+        $detail->change('宝时终审',$params['process_progress'],'承运商处理');
+        $detail->workOrder->change('宝时终审',$params['process_progress'],'承运商处理');
+        $detail->workOrder->clearWorkOrderStatus();                     // 清除创建标记
+        $this->logService->createLog($detail, '处理', '承运商处理');
+    }
 
-    // 完结拦截工单
-    public function endIntercept(WorkOrderDetail $detail)
+    public function baoShiReviewIntercept(WorkOrderDetail $detail,$params)
     {
-        $this->logService->createLog($detail, '完结', '承运商完结');
-        $detail->changeStatus('完成');
-        $detail->workOrder->clearWorkOrderStatus();
-        $detail->workOrder->changeStatus('完成');
-        $this->detailService->endDetail($detail);
+        $this->logService->createLog($detail, '完结', '宝时完结');
+        $detail->change('完成',$params['process_progress'],'宝时终审');
+        $detail->workOrder->change('完成',$params['process_progress'],'宝时终审');
+        $detail->workOrder->clearWorkOrderStatus();                     // 清除创建标记
+        $this->detailService->endDetail($detail);                       // 标记为处理过
     }
 
 }

+ 10 - 16
app/Services/WorkOrderLossService.php

@@ -18,14 +18,10 @@ class WorkOrderLossService extends WorkOrderService
      * @var WorkOrderLogService $logService
      * @var WorkOrderDetailService $detailService
      * @var OrderIssueTypeService $issueTypeService
-     * @var OrderService $orderService
-     * @var WorkOrderService $workOrderService
      */
     private $logService;
     private $detailService;
     private $issueTypeService;
-    private $orderService;
-    private $workOrderService;
 
     public function __construct()
     {
@@ -33,8 +29,6 @@ class WorkOrderLossService extends WorkOrderService
         $this->logService = app('WorkOrderLogService');
         $this->detailService = app('WorkOrderDetailService');
         $this->issueTypeService = app('OrderIssueTypeService');
-        $this->orderService = app('OrderService');
-        $this->workOrderService = app('WorkOrderService');
     }
 
    /*
@@ -48,31 +42,31 @@ class WorkOrderLossService extends WorkOrderService
     public function store($params)
     {
         $orderIssueType = $this->issueTypeService->firstOrCreate(['name' => '快递丢件']);
-        $order = $this->orderService->first(['code' => $params['order_no']]);
-        $workOrder = $this->workOrderService->createAndNotification($order, $orderIssueType, $params['remark'] ?? '');
+        $order = $this->syncOrder($params['order_no']);
+        $workOrder = $this->createAndNotification($order, $orderIssueType, $params['remark'] ?? '','宝时创建');
         $detail = $this->detailService->createWorkOrderDetail($workOrder, $params);
-        $workOrder->changeStatus('货主处理');
-        $detail->changeStatus('货主处理');
+        $workOrder->change('货主处理','宝时创建','');
+        $detail->change('货主处理','宝时创建','');
         $this->logService->createLog($detail, '创建', '创建工单');
     }
 
     // 商家填充商品信息
-    public function ownerFillDetail($detail,$params)
+    public function ownerFillDetail(WorkOrderDetail $detail,$params)
     {
         $this->detailService->fillLossDetail($detail, $params);
-        $detail->changeStatus('宝时终审');
-        $detail->workOrder->changeStatus('宝时终审');
         $detail->workOrder->clearWorkOrderStatus();
+        $detail->change('宝时终审','待终审','货主处理');
+        $detail->workOrder->change('宝时终审','待终审','货主处理');
         $this->logService->createLog($detail, '处理', '填充丢件信息');
     }
 
     // 宝时审核
-    public function baoShiReviewLoss($detail,$params)
+    public function baoShiReviewLoss(WorkOrderDetail $detail,$params)
     {
         $this->logService->createLog($detail, '完结', '宝时完结');
         $this->detailService->updateLossDetail($detail,$params);
-        $detail->changeStatus('完成');
-        $detail->workOrder->changeStatus('完成');
+        $detail->change('完成','完结',"宝时终审");
+        $detail->workOrder->change('完成','完结',"宝时终审");
         $this->detailService->endDetail($detail);
     }
 }

+ 51 - 20
app/Services/WorkOrderMistakeService.php

@@ -2,7 +2,6 @@
 
 namespace App\Services;
 
-use App\WorkOrder;
 use App\WorkOrderDetail;
 
 /**
@@ -10,27 +9,23 @@ use App\WorkOrderDetail;
  * Class WorkOrderMistakeService
  * @package App\Services
  */
-class WorkOrderMistakeService
+class WorkOrderMistakeService extends WorkOrderService
 {
     /**
      * @var WorkOrderLogService $logService
      * @var WorkOrderDetailService $detailService
      * @var OrderIssueTypeService $issueTypeService
-     * @var OrderService $orderService
      * @var WorkOrderService $workOrderService
      */
     private $logService;
     private $detailService;
     private $issueTypeService;
-    private $orderService;
-    private $workOrderService;
     public function __construct()
     {
+        parent::__construct();
         $this->logService = app('WorkOrderLogService');
         $this->detailService = app('WorkOrderDetailService');
         $this->issueTypeService = app('OrderIssueTypeService');
-        $this->orderService = app('OrderService');
-        $this->workOrderService = app('WorkOrderService');
     }
     /*
      * 错漏发处理流程
@@ -42,31 +37,67 @@ class WorkOrderMistakeService
     public function store($params)
     {
         $issueType = $this->issueTypeService->firstOrCreate(['name' => '错漏发']);
-        $order = $this->orderService->first(['code' => $params['order_no']]);
-        $workOrder = $this->workOrderService->createAndNotification($order, $issueType, $params['remark'] ?? '');
+        $order = $this->syncOrder($params['order_no']);
+        $workOrder = $this->createAndNotification($order, $issueType, $params['remark'] ?? '','商家已创建');
         $detail = $this->detailService->createWorkOrderDetail($workOrder, $params);
-        $this->logService->createLog($detail, '创建', '创建');
-        $workOrder->changeStatus('宝时处理');
-        $detail->changeStatus('宝时处理');
+        $this->logService->createLog($detail, '创建','商家创建');
+        $workOrder->change('宝时处理','商家创建','');
+        $detail->change('宝时处理','商家创建','');
     }
 
-    public function baoShiReview(WorkOrderDetail $detail,$params)
+    /**
+     * 创建工单后的修改操作 货主
+     * @param WorkOrderDetail $detail
+     * @param $params
+     */
+    public function ownerEdit(WorkOrderDetail $detail,$params)
+    {
+        $this->detailService->updateDetail($detail,$params);
+        $detail->change('宝时处理','商家创建','');
+        $detail->workOrder->change('宝时处理','商家创建','');
+        $this->logService->createLog($detail, '处理','商家修改');
+    }
+
+    public function baoShiReviewMistake(WorkOrderDetail $detail,$params)
     {
         $this->detailService->updateDetail($detail,$params);
-        $detail->changeStatus('待货主完结');
-        $detail->workOrder->clearWorkOrderStatus();
-        $detail->workOrder->changeStatus('待货主完结');
+        $detail->change('货主处理','已核实','宝时处理');
+        $detail->workOrder->change('货主处理','已核实','宝时处理');
+        $detail->workOrder->clearWorkOrderStatus();     // 清除创建标记
         $this->logService->createLog($detail, '处理', '承运商处理');
     }
 
-    public function ownerReviewAndEnd(WorkOrderDetail $detail,$params)
+    public function ownerReviewMistake(WorkOrderDetail $detail,$params)
     {
         $this->detailService->updateDetail($detail,$params);
+
+        $detail->change('宝时终审',$params['process_progress'],'货主处理');
+        $detail->workOrder->change('宝时终审',$params['process_progress'],'货主处理');
+
         $this->logService->createLog($detail, '处理', '货主处理');
-        $this->logService->createLog($detail, '完结', '货主完结');
-        $detail->changeStatus('完成');
-        $detail->workOrder->changeStatus('完成');
+    }
+
+    public function ownerEndEdit(WorkOrderDetail $detail,$params)
+    {
+        $this->detailService->updateDetail($detail,$params);
+
+        $detail->change('宝时终审',$params['process_progress'],'货主处理');
+        $detail->workOrder->change('宝时终审',$params['process_progress'],'货主处理');
+
+        $this->logService->createLog($detail, '处理', '货主编辑');
+    }
+
+    public function baoShiReview($detail,$params)
+    {
+        $this->detailService->updateDetail($detail,$params);
+        $this->logService->createLog($detail,'完结','宝时完结');
+
+        $detail->change('完成',$params['process_progress'],'宝时终审');
+        $detail->workOrder->change('完成',$params['process_progress'],'宝时终审');
+
         $this->detailService->endDetail($detail);
     }
 
+
+
 }

+ 39 - 27
app/Services/WorkOrderService.php

@@ -51,10 +51,10 @@ class WorkOrderService
      */
     public function getIssueType()
     {
-        if (Gate::allows('订单管理-工单处理-客服编辑')){
-            return OrderIssueType::query()->whereIn('name', ['拦截', '信息更改', '其他', '快递异常', '错漏发', '破损', '快递丢件'])->get();
+        if (Gate::allows('订单管理-工单处理-客服编辑')) {
+            return OrderIssueType::query()->whereIn('name', ['拦截', '信息更改', '快递异常', '错漏发', '破损', '快递丢件'])->get();
         } else if (Gate::allows('订单管理-工单处理-货主编辑')) {
-            return OrderIssueType::query()->whereIn('name', ['拦截', '信息更改', '其他', '快递异常', '错漏发', '破损',])->get();
+            return OrderIssueType::query()->whereIn('name', ['拦截', '信息更改', '快递异常', '错漏发', '破损',])->get();
         } else if (Gate::allows('订单管理-工单处理-承运商编辑')) {
             return OrderIssueType::query()->whereIn('name', ['拦截', '信息更改', '破损', '快递异常'])->get();
         }
@@ -62,7 +62,7 @@ class WorkOrderService
     }
 
 
-    public function createOrResetWorkOrder($order, $issueType, $remark)
+    public function createOrResetWorkOrder($order, $issueType, $remark, $process_progress = '商家创建')
     {
         $user = Auth::user();
         $workOrder = WorkOrder::query()->where('order_id', $order->id)->orderByDesc('created_at')->first();
@@ -74,6 +74,9 @@ class WorkOrderService
                 'creator_id' => $user['id'] ?? '',
                 'status' => 0,
                 'work_order_status' => 1,
+                'process_progress' => $process_progress,
+                'type' => $process_progress,
+                'last_handler_id' => $user['id'] ?? '',
             ]);
             return $workOrder;
         }
@@ -88,13 +91,16 @@ class WorkOrderService
             'uniquely_tag' => $order->code,
             'status' => 0,
             'work_order_status' => 1,
+            'process_progress' => $process_progress,
+            'type' => $process_progress,
+            'last_handler_id' => $user['id'] ?? '',
         ]);
     }
 
-    public function createAndNotification($order, $orderIssueType, $remark): WorkOrder
+    public function createAndNotification($order, $orderIssueType, $remark, $process_progress = '商家创建'): WorkOrder
     {
         /** @var WorkOrder $workOrder */
-        $workOrder = $this->createOrResetWorkOrder($order, $orderIssueType, $remark);
+        $workOrder = $this->createOrResetWorkOrder($order, $orderIssueType, $remark, $process_progress);
 
         $workOrder->notification();
 
@@ -109,7 +115,7 @@ class WorkOrderService
     public function end(WorkOrder $workOrder, WorkOrderDetail $detail)
     {
         $this->detailService->endDetail($detail);
-        $this->logService->createLog($detail,'完结', '完结工单');
+        $this->logService->createLog($detail, '完结', '完结工单');
         $workOrder->clearWorkOrderStatus();
         $workOrder->changeStatus('完成');
     }
@@ -120,7 +126,7 @@ class WorkOrderService
      */
     public function logisticEnd(WorkOrder $workOrder, WorkOrderDetail $detail)
     {
-        $this->logService->createLog($detail,'完结', '承运商完结工单');
+        $this->logService->createLog($detail, '完结', '承运商完结工单');
         $this->detailService->endDetail($detail);
         $workOrder->clearWorkOrderStatus();
         $workOrder->changeStatus('完成');
@@ -133,7 +139,8 @@ class WorkOrderService
         return $item;
     }
 
-    public function getDefaultWith($id){
+    public function getDefaultWith($id)
+    {
         return WorkOrder::query()->defaultWith()->find($id);
     }
 
@@ -153,24 +160,24 @@ class WorkOrderService
         return ['success' => true, 'data' => $workOrders->first()];
     }
 
-    /**
-     * 终审
-     * @param WorkOrder $workOrder
-     * @param WorkOrderDetail $detail
-     * @param $params
-     */
-    public function baoShiReview(WorkOrder $workOrder,WorkOrderDetail $detail, $params)
-    {
-        $user = Auth::user();
-
-        $workOrder->update(['reviewer_id' => $user['id'], 'review_at' => Carbon::now(), 'status' => '5']);
-
-        $this->commoditiesService->updateWorkOrderCommoditiesByJsonArray($detail, $params);
-
-        $this->logService->createLog($detail,'终审', '终审完成');
-
-        $this->detailService->endDetail($detail);
-    }
+//    /**
+//     * 终审
+//     * @param WorkOrder $workOrder
+//     * @param WorkOrderDetail $detail
+//     * @param $params
+//     */
+//    public function baoShiReview(WorkOrder $workOrder,WorkOrderDetail $detail, $params)
+//    {
+//        $user = Auth::user();
+//
+//        $workOrder->update(['reviewer_id' => $user['id'], 'review_at' => Carbon::now(), 'status' => '5']);
+//
+//        $this->commoditiesService->updateWorkOrderCommoditiesByJsonArray($detail, $params);
+//
+//        $this->logService->createLog($detail,'终审', '终审完成');
+//
+//        $this->detailService->endDetail($detail);
+//    }
 
     /**
      * 批量审核工单
@@ -301,4 +308,9 @@ class WorkOrderService
             }
         })->get();
     }
+
+    public function syncOrder($order_no)
+    {
+        return $this->orderService->first(['code' => $order_no]);
+    }
 }

+ 84 - 11
app/WorkOrder.php

@@ -18,25 +18,46 @@ use Illuminate\Support\Facades\Gate;
 
 class WorkOrder extends Model
 {
-    use ModelLogChanging;
     use ModelTimeFormat;
     use SoftDeletes;
 
     // 工单 信息
     protected $fillable = [
+        'order_id',                 // 订单id
         'owner_id',                 // 货主
         'logistic_id',              // 承运商
-        'order_issue_type_id',      // 问题件类型
-        'status',                   // 审核状态
         'creator_id',               // 创建人
         'reviewer_id',              // 审核人
+        'last_handler_id',          // 上一个处理人
+        'order_issue_type_id',      // 问题件类型
+        'process_progress',         // 处理进度 -----------------------------------
+                                    // 拦截:       承运商->[已处理,已签收]         宝时审核->[拦截成功,拦截失败]
+                                    // 信息更改:    承运商->[已处理,无法更改]       宝时审核->[更改成功,更改失败]
+                                    // 快递异常:    承运商->[已处理,已拦截]         宝时审核->[丢件赔偿,签收成功]
+                                    // 错漏发:      宝时处理->[已核实]            商家处理->[补发,不补发]
+                                    // 破损:       承运商->[核实全部破损,核实部分破损,核实未破损]   宝时终审->[核实全部破损,核实部分破损,核实未破损]
+                                    // 快递丢件:    待商家处理   待终审 完结
+                                    // -----------------------------------
+        'type',                     // 快递异常填写:在途异常,签收未收到
+        'status',                   // 审核状态
         'review_at',                // 审核时间
-        'order_id',                 // 订单id
         'uniquely_tag',             // 唯一标识
         'remark',                   // 工单信息描述
         'work_order_status',        // 1 为创建状态 0 为处理状态
     ];
 
+    static public $process_progress = [
+        '已处理','已签收',         // 拦截      承运商
+        '拦截成功','拦截失败',      //          宝时处理
+        '已处理','无法更改',       // 信息更改   承运商
+        '更改成功','更改失败',      //          宝时处理
+        '已处理','已拦截',        // 快递异常   承运商
+        '丢件赔偿','签收成功',      //          宝时处理
+        '已核实',                  // 错漏发   宝时处理
+        '补发','不补发',           //          商家处理
+        ''
+    ];
+
     static public $enums = [
         'status' => [
             '' => 0,
@@ -47,7 +68,15 @@ class WorkOrder extends Model
             '完成' => 5,
             '待货主完结' => 6,
         ],
-
+        'last_status' => [
+            '' => 0,
+            '宝时处理' => 1,
+            '货主处理' => 2,
+            '承运商处理' => 3,
+            '宝时终审' => 4,
+            '完成' => 5,
+            '待货主完结' => 6,
+        ],
     ];
 
     function __construct(array $attributes = [])
@@ -74,6 +103,22 @@ class WorkOrder extends Model
         }
     }
 
+    public function getLastStatusAttribute($value)
+    {
+        if (!$value) return '';
+        return self::$enums['last_status'][$value];
+    }
+
+    public function setLastStatusAttribute($value)
+    {
+        if (!$value) return;
+        if (is_numeric($value)) {
+            $this->attributes['last_status'] = $value;
+        } else {
+            $this->attributes['last_status'] = self::$enums['last_status'][$value];
+        }
+    }
+
     // 关联订单
     public function order(): BelongsTo
     {
@@ -98,17 +143,17 @@ class WorkOrder extends Model
         return $this->belongsTo(User::class, 'creator_id');
     }
 
+    public function lastHandler(): BelongsTo
+    {
+        return $this->belongsTo(User::class,'last_handler_id');
+    }
+
     // 审核人
     public function reviewer(): BelongsTo
     {
         return $this->belongsTo(User::class, 'reviewer_id');
     }
 
-    // 工单类型
-    public function type(): BelongsTo
-    {
-        return $this->BelongsTo(WorkOrderType::class, 'work_order_type_id');
-    }
 
     // 生成问题件类型
     public function issueType(): BelongsTo
@@ -140,7 +185,7 @@ class WorkOrder extends Model
 
     public function defaultWith(): array
     {
-        return  ['type', 'owner', 'logistic', 'issueType', 'creator', 'details' => function ($query) {
+        return  ['owner', 'logistic', 'issueType', 'creator', 'lastHandler','details' => function ($query) {
             return $query->with('commodities.commodity', 'logs.creator', 'images.uploadFile','issueType');
         },
             'reviewer',
@@ -186,12 +231,40 @@ class WorkOrder extends Model
         $this->update(['status' => 5,'work_order_status' => 0]);
     }
 
+    /**
+     * 工单状态
+     */
     public function changeStatus($status)
     {
         $this->status = $status;
         $this->update();
     }
 
+    /**
+     * 处理进度
+     */
+    public function changeProcessProgress($process_progress){
+        $this->update(['process_progress' => $process_progress]);
+    }
+
+    /**
+     * 工单状态 and 处理状态 and 处理人
+     * @param $status
+     * @param $process_progress
+     * @param $last_status
+     */
+    public function change($status,$process_progress,$last_status){
+        $user = Auth::user();
+        $this->last_status = $last_status;
+        $this->status = $status;
+        $this->process_progress = $process_progress;
+        $this->last_handler_id = $user['id'] ?? '';
+        $this->update();
+    }
+
+    /**
+     * 清除创建标记
+     */
     public function clearWorkOrderStatus(){
         $this->update(['work_order_status' => 0]);
     }

+ 32 - 23
app/WorkOrderCommodities.php

@@ -5,7 +5,6 @@ namespace App;
 use App\Traits\ModelTimeFormat;
 use Illuminate\Database\Eloquent\Model;
 
-use App\Traits\ModelLogChanging;
 use Illuminate\Database\Eloquent\Relations\BelongsTo;
 
 class WorkOrderCommodities extends Model
@@ -14,28 +13,38 @@ class WorkOrderCommodities extends Model
 
     protected $fillable = [
         'work_order_id',
-        'work_order_detail_id', // 工单详情
-        'tag',                 // 当前工单状态
-        'commodity_id',
-        'price',                // 商品价值
-        'sku',                  // 商品条码
-        'logistic_number',      // 快递单号数量
-        'check_amount',         // 承运商核实数量 (承运商核实商品数量)
-        'bao_shi_check_amount', // 宝时复核数量 (宝时核实商品数量)
-        'issue_type',           // 异常类型   (对应工单异常类型)
-        'abnormal_type',        // 问题类型  (商品问题类型)
-        'abnormal_amount',      // 异常数量  (默认为订单数量) 错漏发 (客户实收数量)
-        'amount',               // 订单数量  (原订单商品数量)
-        'check_result',         // 核实结果  (核实 承运商)
-        'process_result',       // 处理结果  终审填充(破损:[赔偿,不赔偿] 错漏发:[少发,多发,’多发,客户退回‘,’少发,不补发‘,核实未错漏发])
-        'process_result_info',  // 处理结果详情 -----------------------------------
-                                // (错漏发: string 为选项类型 与 process_result 相关
-                                //      1.【少发】宝时补发(商家不做单)
-                                //      2.【多发,客户买下】商家做出库单(物流选自提,宝时不发货)
-                                //      3.【多发,客户退回】1.客户自行退回(提供退回单号) 2.宝时上门取件(提供寄件信息,地址,联系人,电话)
-                                //      4.【少发,不补发】商家做入库单,选择明细和数量
-                                //      5.【核实未错漏发】)
-                                // -----------------------------------
+        'work_order_detail_id',     // 工单详情
+        'commodity_id',             // 商品
+        'price',                    // 商品价值 单价
+        'sku',                      // 商品条码
+        'logistic_number',          // 快递单号or
+        'reissue_logistic_number',  // 补发单号 或 补发订单号
+        'out_order_number',         // 出库订单
+        'store_in_number',          // 入库单
+        'store_in_amount',          // 入库数
+        'check_amount',             // 承运商核实数量 (承运商核实商品数量)
+        'bao_shi_check_amount',     // 宝时复核数量 (宝时核实商品数量)
+        'issue_type',               // 异常类型   (对应工单异常类型)
+        'abnormal_type',            // 问题类型  (商品问题类型)
+        'abnormal_amount',          // 异常数量  (默认为订单数量) 错漏发 (客户实收数量)
+        'amount',                   // 订单数量  (原订单商品数量)
+        'check_result',             // 核实结果  (核实 承运商)-----------------------------------
+        'process_result',           // 处理结果  终审填充(破损:[赔偿,不赔偿] 错漏发:[少发,多发,’多发,客户退回‘,’少发,不补发‘,核实未错漏发])
+        'process_result_info',      // 处理结果详情 -----------------------------------
+                                    // 错漏发: string 为选项类型 与 process_result 相关
+                                    //      1.【少发】宝时补发(商家不做单)
+                                    //              宝时终审时填写 补发单号
+                                    //      2.【多发,客户买下】商家做出库单(物流选自提,宝时不发货)
+                                    //              需要待商家填写补发单号{填写出库单}
+                                    //      3.【多发,客户退回】1.客户自行退回(提供退回单号)
+                                    //                  {填写退回单号}
+                                    //      2.宝时上门取件(提供寄件信息,地址,联系人,电话)
+                                    //      4.【少发,不补发】商家做入库单,选择明细和数量
+                                    //              待商家处理完结时 需填写 入库单单号,入库数量,宝时终审时需要填写“已完成入库”,
+                                    //      5.【核实未错漏发】
+                                    // -----------------------------------
+        'end_handle_result',       // 错漏发时添加:
+        'tag',                      // 当前工单标记
     ];
 
     static public $enums = [

+ 66 - 1
app/WorkOrderDetail.php

@@ -8,6 +8,7 @@ use Illuminate\Database\Eloquent\Model;
 use App\Traits\ModelLogChanging;
 use Illuminate\Database\Eloquent\Relations\BelongsTo;
 use Illuminate\Database\Eloquent\Relations\HasMany;
+use Illuminate\Support\Facades\Auth;
 
 class WorkOrderDetail extends Model
 {
@@ -17,15 +18,26 @@ class WorkOrderDetail extends Model
     protected $fillable = [
         'work_order_id',
         'order_issue_type_id',      // 工单异常类型
+        'type',                     // 工单
         'price',                    // 商品价值
         'sku_amount',               // 破损sku数
-        'receive_address',          // 收方信息
+        'type',                     // 快递异常填写:在途异常,签收未收到
+        'last_handler_id',             // 上一个处理人
         'reissue_logistic_number',  // 补发单号
         'return_logistic_number',   // 退回单号 (错漏发:商家填写) (破损:创建时填写)
+        'process_progress',         // 处理进度 -----------------------------------
+                                    // 拦截:       承运商->[已处理,已签收]         宝时审核->[拦截成功,拦截失败]
+                                    // 信息更改:    承运商->[已处理,无法更改]       宝时审核->[更改成功,更改失败]
+                                    // 快递异常:    承运商->[已处理,已拦截]         宝时审核->[丢件赔偿,签收成功]
+                                    // 错漏发:      宝时处理->[已核实]            商家处理->[补发,不补发]
+                                    // 破损:       承运商->[核实全部破损,核实部分破损,核实未破损]   宝时终审->[核实全部破损,核实部分破损,核实未破损]
+                                    // 快递丢件:    待商家处理   待终审 完结
+                                    // -----------------------------------
         'logistic_number',          // 快递单号
         'status',                   // 当前状态
         'remark',                   // 创建工单时的问题标记
         'tag',                      // 标记当前工单是否为历史标记
+        'receive_address',          // 收方信息
         'return_address',           // 退回单 寄件人地址
         'return_phone',             // 退回单 寄件人联系号码
         'return_name',              // 退回单 寄件人姓名
@@ -41,11 +53,26 @@ class WorkOrderDetail extends Model
             '完成' => 5,
             '待货主完结' => 6,
         ],
+        'last_status' => [
+            '' => 0,
+            '宝时处理' => 1,
+            '货主处理' => 2,
+            '承运商处理' => 3,
+            '宝时终审' => 4,
+            '完成' => 5,
+            '待货主完结' => 6,
+        ],
         'tag' => [
             '创建' => 0,
             '完成' => 1,
             '标记' => 2,
         ],
+        'last_handler' => [
+            '' => 0,
+            '商家' => 1,
+            '承运商' => 2,
+            '宝时' => 3,
+        ]
     ];
 
     function __construct(array $attributes = [])
@@ -89,6 +116,22 @@ class WorkOrderDetail extends Model
         }
     }
 
+    public function getLastStatusAttribute($value)
+    {
+        if (!$value) return '';
+        return self::$enums['last_status'][$value];
+    }
+
+    public function setLastStatusAttribute($value)
+    {
+        if (!$value) return;
+        if (is_numeric($value)) {
+            $this->attributes['last_status'] = $value;
+        } else {
+            $this->attributes['last_status'] = self::$enums['last_status'][$value];
+        }
+    }
+
     public function workOrder(): BelongsTo
     {
         return $this->belongsTo(WorkOrder::class);
@@ -154,4 +197,26 @@ class WorkOrderDetail extends Model
         $this->status = $status;
         $this->update();
     }
+
+    public function changeProcessProgress($process_progress)
+    {
+        $this->update(['process_progress' => $process_progress]);
+    }
+
+    /**
+     * 工单状态 and 处理状态
+     * @param $status
+     * @param $process_progress
+     * @param $last_status
+     */
+    public function change($status,$process_progress,$last_status)
+    {
+        $user =Auth::user();
+        $this->status = $status;
+        $this->last_status = $last_status;
+        $this->process_progress = $process_progress;
+        $this->last_handler_id = $user['id'] ?? '';
+        $this->update();
+    }
+
 }

+ 65 - 0
database/migrations/2021_12_03_110027_work_orders_and_work_order_details_add_current_status.php

@@ -0,0 +1,65 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class WorkOrdersAndWorkOrderDetailsAddCurrentStatus extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('work_orders', function (Blueprint $table) {
+            $table->string('process_progress')->comment('处理进度');
+            $table->integer('last_handler_id')->comment('上一个处理人');
+            $table->integer('last_status')->comment('上一个状态');
+            $table->string('type')->comment('类型');
+        });
+        Schema::table('work_order_details', function (Blueprint $table) {
+            $table->string('process_progress')->comment('处理进度');
+            $table->integer('last_handler_id')->comment('上一个处理人');
+            $table->integer('last_status')->comment('上一个状态');
+            $table->string('type')->comment('类型');
+        });
+        Schema::table('work_order_commodities',function(Blueprint $table){
+            $table->string('reissue_logistic_number')->nullable()->comment('补发单号');
+            $table->string('store_in_number')->nullable()->comment('入库单号');
+            $table->integer('store_in_amount')->nullable()->comment('入库数量');
+            $table->string('out_order_number')->nullable()->comment('出库单');
+            $table->string('end_handle_result')->nullable()->comment('宝时最终确认');
+        });
+
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('work_orders', function (Blueprint $table) {
+            $table->dropColumn('process_progress');
+            $table->dropColumn('last_handler_id');
+            $table->dropColumn('last_status');
+            $table->dropColumn('type');
+        });
+        Schema::table('work_order_details', function (Blueprint $table) {
+            $table->dropColumn('process_progress');
+            $table->dropColumn('last_handler_id');
+            $table->dropColumn('last_status');
+            $table->dropColumn('type');
+        });
+        Schema::table('work_order_commodities',function(Blueprint $table){
+            $table->dropColumn('reissue_logistic_number');
+            $table->dropColumn('store_in_number');
+            $table->dropColumn('store_in_amount');
+            $table->dropColumn('out_order_number');
+            $table->dropColumn('end_handle_result');
+        });
+    }
+}

+ 84 - 33
resources/views/order/index/_work_order_modal.blade.php

@@ -31,16 +31,7 @@
                     </div>
                 </div>
 
-                {{--破损商品价格--}}
-                <div class="form-group row" v-if="'破损' === workOrder.orderIssueType">
-                    <label for="work-order-price" class="col-sm-2 col-form-label text-right text-primary">
-                        破损商品价值
-                    </label>
-                    <div class="col-sm-10">
-                        <input type="number" id="work-order-price" class="form-control" v-model="workOrder.price"
-                               placeholder="破损商品价值自动计算" disabled>
-                    </div>
-                </div>
+
                 {{--退回单号--}}
                 <div class="form-group row" v-if="'破损' === workOrder.orderIssueType">
                     <label for="work-order-logistic-number"
@@ -55,7 +46,11 @@
                 {{--信息更改--}}
                 <div class="form-group row" v-if="['信息更改'].includes(workOrder.orderIssueType) ">
                     <hr>
-                    <label for="order_issue_type" class="col-sm-2 col-form-label text-right">新的收方信息</label>
+                    <label for="order_issue_type"
+                           class="col-sm-2 col-form-label text-right text-primary">
+                        <span class="text-danger">*</span>
+                        新的收方信息
+                    </label>
                     <div class="col-sm-10">
                         <textarea class="form-control" name="" id="remake_info" cols="30" rows="5"
                                   v-model="workOrder.remark.info"></textarea>
@@ -64,7 +59,10 @@
 
                 <hr v-if="'破损' === workOrder.orderIssueType">
                 <div class="form-group row" v-if="'破损' === workOrder.orderIssueType">
-                    <label for="package-image" class="col-sm-2 col-form-label text-right text-primary">外包装图片</label>
+                    <label for="package-image" class="col-sm-2 col-form-label text-right text-primary">
+                        <span class="text-danger">*</span>
+                        外包装图片
+                    </label>
                     <div class="col-sm-10">
                         <div class="h-auto border border-secondary" id="package-image" style="min-height: 75px"
                              contenteditable="true"
@@ -86,7 +84,10 @@
 
                 <hr v-if="'破损' === workOrder.orderIssueType">
                 <div class="form-group row" v-if="'破损' === workOrder.orderIssueType">
-                    <label for="commodity-image" class="col-sm-2 col-form-label text-right text-primary">内物破损图片</label>
+                    <label for="commodity-image" class="col-sm-2 col-form-label text-right text-primary">
+                        <span class="text-danger">*</span>
+                        内物破损图片
+                    </label>
                     <div class="col-sm-10">
                         <div class="h-auto border border-secondary" id="commodity-image" style="min-height: 75px"
                              contenteditable="true"
@@ -107,8 +108,38 @@
                 </div>
 
                 <hr v-if=" ['破损','快递异常'].includes(workOrder.orderIssueType)">
+
+                {{-- 快递异常 类型 --}}
+                <div  class="form-group row"
+                      v-if="'快递异常' === workOrder.orderIssueType">
+                    <label for="remake_info" class="col-sm-2 col-form-label text-right text-primary">
+                        <span class="text-danger">*</span>
+                        异常类型
+                    </label>
+                    <div class="col-sm-10">
+                        <select class="form-control" v-model="workOrder.type">
+                            <option v-for="item in expressAbnormalTypes" :value="item" v-text="item"></option>
+                        </select>
+                    </div>
+                </div>
+
+                {{--破损商品价格--}}
+                <div class="form-group row" v-if="'破损' === workOrder.orderIssueType">
+                    <label for="work-order-price" class="col-sm-2 col-form-label text-right text-primary">
+                        <span class="text-danger">*</span>
+                        破损商品总价
+                    </label>
+                    <div class="col-sm-10">
+                        <input type="number" id="work-order-price" class="form-control" v-model="workOrder.price"
+                               placeholder="破损商品价值自动计算" disabled>
+                    </div>
+                </div>
+
                 <div class="form-group row" v-if="['破损','快递异常'].includes(workOrder.orderIssueType) ">
-                    <label for="deal-image" class="col-sm-2 col-form-label text-right text-primary">交易截图</label>
+                    <label for="deal-image" class="col-sm-2 col-form-label text-right text-primary">
+                        <span class="text-danger">*</span>
+                        交易截图
+                    </label>
                     <div class="col-sm-10">
                         <div><span class="text-primary">需带有付款时间,快递单号,内物详情和实付款的交易截图</span></div>
                         <div class="border border-secondary h-auto" id="deal-image" style="min-height: 75px"
@@ -132,26 +163,46 @@
                 <hr v-if="['破损','错漏发','快递异常'].includes(workOrder.orderIssueType)">
                 <div class="form-group row" v-if="['破损','错漏发','快递异常'].includes(workOrder.orderIssueType)">
                     <label for="work-order-sku-amount"
-                           class="col-sm-2 col-form-label text-right text-primary">商品信息</label>
+                           class="col-sm-2 col-form-label text-right text-primary">
+                        <span v-if="'快递异常' === workOrder.orderIssueType">快递单号</span>
+                        <span v-else>商品信息</span>
+                    </label>
                     <div class="col-sm-10">
-                        <table class="table table-sm table-active table-grid-row">
-                            <thead>
-                            <tr>
+                        <table class="table table-bordered table-grid-row table-sm table-hover"  >
+                            <thead class="">
+                            <tr v-if="'快递异常' === workOrder.orderIssueType" class="text-center">
+                                <td>快递单号</td>
+                                <td>勾选</td>
+                            </tr>
+                            <tr v-else>
                                 <td>快递单号</td>
                                 <td>商品条码</td>
-                                <td v-if="['破损',].includes(workOrder.orderIssueType)">异常类型</td>
+                                <td v-if="['破损'].includes(workOrder.orderIssueType)">异常类型</td>
                                 <td>商品名称</td>
                                 <td>订单数量</td>
-                                <td v-if="'破损' === workOrder.orderIssueType" class="text-right">破损商品价</td>
-                                <td v-if="'错漏发' === workOrder.orderIssueType" class="text-right">异常类型</td>
+                                <td v-if="'破损' === workOrder.orderIssueType">破损商品价</td>
+                                <td v-if="'错漏发' === workOrder.orderIssueType">异常类型</td>
                                 <td class="text-center"><span
-                                        v-text="workOrder.orderIssueType === '错漏发' ? '客户实收数量' : '异常数量'"></span></td>
-                                <td></td>
+                                        v-text="workOrder.orderIssueType === '错漏发' ? '客户实收数量' : '异常数量'"></span>
+                                </td>
                             </tr>
                             </thead>
-                            <tbody>
-                            <tr v-for="(commodity,i) in workOrder.commodities" class="text-center">
-                                <td v-if="commodity.count" v-text="commodity.logistic_number" class="align-middle border border-left border-bottom" :rowspan="commodity.count">
+                            <tbody v-if="'快递异常' === workOrder.orderIssueType" class="text-center">
+                                <tr v-for="(item,i) in workOrder.commodities">
+                                    <td v-text="item.logistic_number"></td>
+                                    <td>
+                                        <div class="form-check" >
+                                            <input class="form-check-input" type="checkbox" :id="'logistic_number_'+i" v-model="item.selected">
+                                            <label class="form-check-label" :for="'logistic_number_'+i">
+                                            </label>
+                                        </div>
+                                    </td>
+                                </tr>
+                            </tbody>
+                            <tbody v-else>
+                            <tr  v-for="(commodity,i) in workOrder.commodities" class="text-center">
+                                <td v-if="commodity.count" v-text="commodity.logistic_number"
+                                    class="align-middle border border-left border-bottom" :rowspan="commodity.count">
                                 </td>
                                 <td v-text="commodity.sku"></td>
                                 <td v-if="['破损',].includes(workOrder.orderIssueType)">
@@ -160,28 +211,28 @@
                                 </td>
                                 <td v-text="commodity.name"></td>
                                 <td v-text="commodity.amount"></td>
-                                <td  v-if="'破损' === workOrder.orderIssueType">
+                                <td v-if="'破损' === workOrder.orderIssueType">
                                     <input type="number" class="form-control form-control-sm" v-model="commodity.price"
                                            v-show="commodity.abnormal_amount !== '0'"
                                            @input="sunPrice">
                                 </td>
                                 <td v-if="'错漏发' === workOrder.orderIssueType" v-text="commodity.abnormal_type">
                                 </td>
-                                <td class="text-right">
+                                <td >
                                     <input type="number" class="form-control form-control-sm"
                                            v-model="commodity.abnormal_amount"
                                            @input="computeAbnormalType(commodity)">
                                 </td>
-                                <td class="text-right">
-                                    <button type="button" class="close" @click="workOrder.commodities.splice(i,1),sunPrice">
+                                <td >
+                                    <button type="button" class="close"
+                                            @click="workOrder.commodities.splice(i,1),sunPrice,groupByLogisticNumber(workOrder.commodities)">
                                         <span aria-hidden="true" class="text-danger">&times;</span>
                                     </button>
                                 </td>
-                                <td>
-                                </td>
-                            </tr>
+                                </tr>
                             </tbody>
                         </table>
+
                         <div v-if="workOrder.orderIssueType === '错漏发'">
                             <table class="table table-sm table-grid-row table-hover mb-0">
                                 <tr>

+ 89 - 54
resources/views/order/index/delivering.blade.php

@@ -388,15 +388,15 @@
                 workOrder: {
                     types:
                         @can("订单管理-工单处理-客服编辑")
-                            ['拦截', '信息更改', '其他', '快递异常', '错漏发', '破损', '快递丢件']
+                            ['拦截', '信息更改', '快递异常', '错漏发', '破损', '快递丢件']
                         @elsecan("订单管理-工单处理-货主编辑")
-                            ['拦截', '信息更改', '其他', '快递异常', '错漏发', '破损']
+                            ['拦截', '信息更改', '快递异常', '错漏发', '破损']
                         @else
                             ['']
                         @endcan
                         ,
                     orderIssueType: 0,
-                    grad: 1,
+                    type:null,          // 快递异常时填写
                     remark: {
                         name: null,     // 联系人
                         phone: null,    // 联系号码
@@ -413,12 +413,7 @@
                     logistic_number: null, // 快递单号
                     price: null,
                 },
-                grads: [
-                    {name: '一般', value: '1'},
-                    {name: '重要', value: '2'},
-                    {name: '紧急', value: '3'},
-                    {name: '重要且紧急', value: '4'},
-                ],
+                expressAbnormalTypes:['在途异常','签收未收到'],
                 exeSign: {},
                 workOrderInfos:[],
                 workOrderIndex:null,
@@ -1270,7 +1265,6 @@
                     $("#intercept-modal").modal('show');
                 },
                 showInterceptModel() {
-                    this.workOrder.grad = 1;
                     if (checkData.length < 1) {
                         window.tempTip.setDuration(1500);
                         window.tempTip.show('未选中任何订单');
@@ -1278,6 +1272,7 @@
                     }
                     this.workOrder.orderIssueType = null;
                     this.workOrder.price = null;
+                    this.workOrder.type = null;
                     this.workOrder.refundImages = [];
                     this.workOrder.packageImages = [];
                     this.workOrder.commodityImages = [];
@@ -1353,9 +1348,16 @@
                     if (data.length > 1){
                         window.tempTip.setIndex(1999);
                         window.tempTip.show('信息修改仅支持单个订单修改');
+                        return ;
+                    }
+                    data = data[0];
+                    if (!data.remark){
+                        window.tempTip.setIndex(1999);
+                        window.tempTip.show('收方信息不能为空');
+                        return ;
                     }
                     let url = "{{route('workOrder.informationChange.storeApi')}}";
-                    this.createWorkOrder(data[0],url);
+                    this.createWorkOrder(data,url);
                 },
                 createLossWorkOrder(){  // 快递丢件
                     let data = this.getCreateWorkOrderData();
@@ -1371,9 +1373,18 @@
                     let formData = new FormData();
                     formData.append('order_no', data[0]['order_no']);
                     formData.append('remark', this.workOrder.remark ?  this.workOrder.remark.info : '');
+                    formData.append('type', this.workOrder.type);
+                    formData.append('process_progress', this.workOrder.type);
                     let dealImages = this.getImages(this.workOrder.dealImages);
                     this.setFormDataImagePrefix(formData, 'dealImages', dealImages);
-                    this.setFormDataCommodities(formData);
+                    let res = this.setFormDataCommodities(formData);
+                    console.log(res);
+                    if (!res){
+                        window.tempTip.setIndex(2000);
+                        window.tempTip.setDuration(1500);
+                        window.tempTip.show('请勾选快递单号!');
+                        return
+                    }
                     let url = "{{route('workOrder.expressAbnormal.storeApi')}}";
                     this.createWorkOrder(formData, url);
                 },
@@ -1387,13 +1398,19 @@
                     }
                     let dealImages = this.getImages(this.workOrder.dealImages);
                     this.setFormDataImagePrefix(formData, 'dealImages', dealImages);
-                    this.setFormDataCommodities(formData);
+                    let res = this.setFormDataCommodities(formData);
+                    if (!res){
+                        window.tempTip.setIndex(2000);
+                        window.tempTip.setDuration(1500);
+                        window.tempTip.show('检查是否所有商品为为错漏发');
+                        return
+                    }
                     let url = "{{route('workOrder.mistake.storeApi')}}";
                     this.createWorkOrder(formData, url);
                 },
                 createDefaultWorkOrder() {              // 其他
                     let data = this.getCreateWorkOrderData();
-                    this.createWorkOrder(data);
+                        this.createWorkOrder(data);
                 },
                 createDamagedWorkOrder() { //破损工单创建
                     let packageImages = this.getImages(this.workOrder.packageImages);                   // 外包装破损图片
@@ -1427,26 +1444,42 @@
                         formData.append('logistic_number', data[0]['logistic_number']);
                     }
                     formData.append('price', this.workOrder.price);
-
                     this.setFormDataImagePrefix(formData,'packageImages',packageImages);
                     this.setFormDataImagePrefix(formData,'commodityImages',commodityImages);
                     this.setFormDataImagePrefix(formData,'dealImages',dealImages);
+                    this.workOrder.commodities = this.workOrder.commodities.filter(e=>{
+                        return Number(e.abnormal_amount) > 0;
+                    });
                     this.setFormDataCommodities(formData);
                     return formData;
                 },
                 setFormDataCommodities(formData){
-                     this.workOrder.commodities.map(commodity=>{
-                         let item = {
-                             sku:commodity.sku,
-                             amount:commodity.amount,
-                             commodity_id:commodity['commodity_id'],
-                             logistic_number:commodity['logistic_number'],
-                             abnormal_amount:commodity['abnormal_amount'],
-                             abnormal_type:commodity['abnormal_type'],
-                             price:commodity['price'],
-                         };
-                         formData.append('commodities[]',JSON.stringify(item)) ;
+                    let {orderIssueType} = this.workOrder;
+                    let commodities= this.workOrder.commodities.filter(e=>{
+                        if('错漏发' === orderIssueType){
+                            return e.amount !== e.abnormal_amount;
+                        } else if('快递异常' === orderIssueType){
+                            return e.selected;
+                        }
+                        return true;
+                    }).map(e=>{
+                        let {abnormal_type,sku,amount,abnormal_amount,logistic_number,commodity_id,price} = e;
+                        return {
+                            sku:sku,
+                            amount:amount,
+                            commodity_id:commodity_id,
+                            logistic_number:logistic_number,
+                            abnormal_amount:abnormal_amount,
+                            abnormal_type:abnormal_type,
+                            price:price,
+                        };
                     });
+                    if ('错漏发'  === orderIssueType && commodities.length === 0) return false;
+                    else if ('快递异常' ===  orderIssueType && commodities.length === 0) return false;
+                    commodities.forEach(e=>{
+                        formData.append('commodities[]',JSON.stringify(e));
+                    })
+                    return true;
                 },
                 setFormDataImagePrefix(formData, prefix, images) {
                     images.forEach((item) => {
@@ -1534,7 +1567,6 @@
                     let url = '{{url('apiLocal/workOrder/editOrderReceiveInfo')}}';
                     let data = {
                         order_nos: checkData[0],
-                        grad: this.grad,
                         remake: `${this.remark.name} ${this.remark.phone} ${this.remark.province} ${this.remark.city} ${this.remark.city} ${this.remark.district} ${this.remark.adder}`,
                     };
                     window.tempTip.setIndex('1999');
@@ -1647,39 +1679,43 @@
                     let data = {orderNo:checkData[0]};
                     window.axios.post(url,data).then(res=>{
                         if (res.data.success){
+                            if(this.workOrder.orderIssueType === '快递异常'){
+                                let logistic_numbers = res.data.data.map(e=>e.logistic_number);
+                                let array = Array.from(new Set(logistic_numbers));
+                                array = array.map(e=>{return {logistic_number:e,selected:false}});
+                                this.workOrder.commodities = array;
+                                return ;
+                            }
                             let commodities =  res.data.data.map(item=>{
                                 item.abnormal_amount = item.amount;
                                 item.abnormal_type = this.workOrder.orderIssueType === '错漏发' ? '未错漏发' : '';
                                 item.price = 0;
                                 return item;
                             });
-                            let index = 0;
-                            let logistic_number = commodities[0]['logistic_number'];
-                            let count = 0;
-                            for(let i = 0; i < commodities.length;i++){
-                                let cur_logistic_number = commodities[i]['logistic_number'];
-                                if (i === commodities.length - 1 && cur_logistic_number === logistic_number){
-                                    count ++;
-                                    commodities[index]['count'] = count;
-                                    break;
-                                }
-                                if (logistic_number === cur_logistic_number){
-                                    count++;
-                                } else if (logistic_number !== cur_logistic_number){
-                                    commodities[index]['count'] = count;
-                                    index = i;
-                                    count = 1;
-                                }
-                                if (i === commodities.length - 1){
-                                    commodities[index]['count'] = count;
-                                }
-                            }
+                            this.groupByLogisticNumber(commodities);
                             this.workOrder.commodities = commodities;
                         } else {
                         }
                     }).catch(err=>{
                     })
                 },
+                groupByLogisticNumber(commodities){
+                    let index = 0;
+                    let logistic_number = commodities[0]['logistic_number'];
+                    let count = 0;
+                    for(let i = 0; i < commodities.length;i++){
+                        let cur_logistic_number = commodities[i]['logistic_number'];
+                        if (cur_logistic_number === logistic_number){
+                            count ++;
+                            commodities[index]['count'] = count;
+                        } else if (cur_logistic_number !== logistic_number){
+                            logistic_number = cur_logistic_number;
+                            commodities[index]['count'] = count;
+                            index = i ;count = 1;
+                            commodities[index]['count'] = count;
+                        }
+                    }
+                },
                 pasteImage(event,imageArray){
                     for (let i = 0; i < event.clipboardData.items.length; i++) {
                         let item = event.clipboardData.items[i];
@@ -1848,6 +1884,7 @@
                     });
                 },
                 computeAbnormalType(item){
+                    this.sunPrice();
                     if (this.workOrder.orderIssueType !=='错漏发') return;
                     let abnormal_amount = Number(item.abnormal_amount);     // 客户实收数量
                     let amount = Number(item.amount);
@@ -1855,18 +1892,16 @@
                 },
                 sunPrice(){
                     this.workOrder.price = this.workOrder.commodities.reduce((prev,cur)=>{
-                        return prev +  Number(cur.price);
+                        return prev +  Number(cur.price) * Number(cur.abnormal_amount);
                     },0);
                 },
                 checkExpressAbnormalWorkOrder(){    // 校验 快递异常问题
                     window.tempTip.setIndex(1999);
                     window.tempTip.setDuration(1500);
-                    let message = null
-                    let items = this.workOrder.commodities.filter(item=>{
-                        return Number(item.abnormal_amount) === 0;
-                    });
-                    if (items.length > 0)message = '请填写快递异常数量!';
+                    let message = null;
+                    if (this.workOrder.commodities.length === 0)message = '快递单号为空';
                     if (this.workOrder.dealImages.length === 0) message = '交易截图为必须项!';
+                    if (!this.workOrder.type) message = '快递异常类型不能为空';
                     if (message){
                         window.tempTip.show(message);
                         return false;

+ 670 - 126
resources/views/order/workOrder/_bao_shi_review_modal.blade.php

@@ -1,35 +1,178 @@
-{{--快递处理丢件工单--}}
-<div class="modal fade " id="bao-shi-review-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="bao-shi-work-order-modal">终审(宝时)<span
-                        v-text="baoShiEditWorkOrder ? baoShiEditWorkOrder.issue_type_name :'' "></span></h5>
-                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
-                    <span aria-hidden="true">&times;</span>
-                </button>
+<el-dialog :visible.sync="dialogShowBaoShiVisible" width="75%">
+    <div slot="title">
+        <span v-if="'宝时终审' === baoShiEditWorkOrder.status">终审(宝时)</span>
+        <span v-else-if="'宝时处理' === baoShiEditWorkOrder.status">处理(宝时)
+                    </span>
+        <span
+            v-text="baoShiEditWorkOrder ? baoShiEditWorkOrder.issue_type_name :'' "></span>
+    </div>
+
+    <template v-if="baoShiEditWorkOrder">
+
+        <template
+             v-if="['拦截','信息更改'].includes(baoShiEditWorkOrder.issue_type_name)">
+            <div class="form-group row">
+                <label for="process_progress" class="col-sm-2 col-form-label text-right text-primary">
+                    <span class="text-danger">*</span>
+                    处理
+                </label>
+                <div class="col-sm-10">
+                    <select class="form-control" v-model="baoShiEditWorkOrder.process_progress">
+                        <option v-for="item in getBaoShiProcessProgress()"
+                                :value="item" v-text="item"></option>
+                    </select>
+                </div>
+            </div>
+        </template>
+
+        <template
+             v-else-if="'快递丢件' === baoShiEditWorkOrder.issue_type_name">
+            <div>
+                <table class="table border">
+                    <thead>
+                    <tr>
+                        <th>快递单号</th>
+                        <th>商品</th>
+                        <th>商品条码</th>
+                        <th>订单数量</th>
+                        <th>异常数量</th>
+                        <th>宝时审核数量</th>
+                        <th>处理结果</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    <tr v-for="(item) in (baoShiEditWorkOrder ? baoShiEditWorkOrder.commodities :  []) "
+                        class="border border-bottom">
+                        <td v-if="item.count" v-text="item.logistic_number"
+                            class="align-middle border border-left border-bottom" :rowspan="item.count">
+                        </td>
+                        <td v-text="item.commodity? item.commodity.name : ''">
+                            <span></span>
+                        </td>
+                        <td v-text="item.commodity? item.commodity.sku : ''">
+                        </td>
+                        <td v-text="item.amount">
+                        </td>
+                        <td v-text="item.abnormal_amount">
+                        </td>
+                        <td>
+                            <input type="number" class="form-control form-control-sm"
+                                   v-model="item.bao_shi_check_amount">
+                        </td>
+                        <td>
+                            <select class="form-control form-control-sm"
+                                    v-if="'快递丢件' === baoShiEditWorkOrder.issue_type_name"
+                                    v-model="item.process_result">
+                                <option
+                                    v-for="type in getBaoShiProcessResults()"
+                                    :value="type" v-text="type"></option>
+                            </select>
+                        </td>
+                    </tr>
+                    </tbody>
+                </table>
+            </div>
+        </template>
+
+        <template v-else-if="'破损' === baoShiEditWorkOrder.issue_type_name">
+            <div>
+                <table class="table border">
+                    <thead>
+                    <tr>
+                        <th>快递单号</th>
+                        <th>商品</th>
+                        <th>商品条码</th>
+                        <th>订单数量</th>
+                        <th>异常数量</th>
+                        <th>破损商品价值</th>
+                        <th>承运商核实数量</th>
+                        <th>宝时审核数量</th>
+                        <th>处理结果</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    <tr v-for="(item) in (baoShiEditWorkOrder ? baoShiEditWorkOrder.commodities :  [])"
+                        class="border border-bottom">
+                        <td v-if="item.count" v-text="item.logistic_number"
+                            class="align-middle border border-left border-bottom" :rowspan="item.count">
+                        </td>
+                        <td v-text="item.commodity? item.commodity.name : ''"></td>
+                        <td v-text="item.commodity? item.commodity.sku : ''"></td>
+                        <td v-text="item.amount"></td>
+                        <td v-text="item.abnormal_amount"></td>
+                        <td v-text="item.price"></td>
+                        <td v-text="item.check_amount"></td>
+                        <td>
+                            <input type="number" class="form-control form-control-sm"
+                                   v-model="item.bao_shi_check_amount"
+                                   @input="baoShiDamageWorkOrderAuto(item)">
+                        </td>
+                        <td>
+                            <select class="form-control form-control-sm" v-model="item.process_result">
+                                <option
+                                    v-for="type in getBaoShiProcessResults()"
+                                    :value="type" v-text="type"></option>
+                            </select>
+                        </td>
+                    </tr>
+                    </tbody>
+                </table>
             </div>
-            <div class="modal-body p-0" v-if="baoShiEditWorkOrder && baoShiEditWorkOrder.issue_type_name === '快递丢件'">
+        </template>
+
+        <template
+             v-else-if="'快递异常' === baoShiEditWorkOrder.issue_type_name">
+            <div>
+                <table class="table border text-center">
+                    <thead>
+                    <tr>
+                        <th>快递单号</th>
+                        <th>承运商核实</th>
+                        <th>宝时处理结果</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    <tr v-for="(item) in baoShiEditWorkOrder.commodities" class="border border-bottom">
+                        <td v-text="item.logistic_number"></td>
+                        <td v-text="item.check_result"></td>
+                        <td>
+                            <select class="form-control" v-model="item.process_result"
+                                    @change="baoShiChangeExpressAbnormal(item)">
+                                <option
+                                    v-for="type in getBaoShiProcessResults()"
+                                    :value="type" v-text="type"></option>
+                            </select>
+                        </td>
+                    </tr>
+                    </tbody>
+                </table>
+            </div>
+
+        </template>
+
+        <template v-else-if="'错漏发' === baoShiEditWorkOrder.issue_type_name">
+            <template
+                 v-if="'宝时处理' === baoShiEditWorkOrder.status  ">
                 <div>
-                    <table class="table text-center">
+                    <table class="table table-sm table-bordered table-hover">
                         <thead>
                         <tr>
-                            <td>快递单号</td>
-                            <td>商品</td>
-                            <td>商品条码</td>
-                            <td>订单数量</td>
-                            <td>异常数量</td>
-                            <td>宝时审核数量</td>
-                            <td>处理结果</td>
+                            <th>快递单号</th>
+                            <th>商品</th>
+                            <th>商品条码</th>
+                            <th>订单数量</th>
+                            <th>异常数量</th>
+                            <th>宝时审核数量</th>
+                            <th>审核结果</th>
                         </tr>
                         </thead>
                         <tbody>
-                        <tr v-for="(item) in (baoShiEditWorkOrder ? baoShiEditWorkOrder.commodities :  []) " class="border border-bottom">
-                            <td v-if="item.count" v-text="item.logistic_number" class="align-middle border border-left border-bottom" :rowspan="item.count">
+                        <tr v-for="(item) in (baoShiEditWorkOrder.commodities ? baoShiEditWorkOrder.commodities :  [])"
+                            class="border ">
+                            <td v-if="item.count" v-text="item.logistic_number"
+                                class="align-middle border border-right" :rowspan="item.count">
                             </td>
                             <td v-text="item.commodity? item.commodity.name : ''">
-                                <span></span>
                             </td>
                             <td v-text="item.commodity? item.commodity.sku : ''">
                             </td>
@@ -39,14 +182,14 @@
                             </td>
                             <td>
                                 <input type="number" class="form-control form-control-sm"
-                                       v-model="item.bao_shi_check_amount">
+                                       v-model="item.bao_shi_check_amount"
+                                       @input="computeBaoShiMistakeCheckResult(item)">
                             </td>
                             <td>
-                                <select class="form-control form-control-sm"
-                                        v-if="'快递丢件' === baoShiEditWorkOrder.issue_type_name"
-                                        v-model="item.process_result">
+                                <select class="form-control form-control-sm" v-model="item.check_result"
+                                        disabled>
                                     <option
-                                        v-for="type in lossProcessResults"
+                                        v-for="type in getBaoShiProcessResults(item)"
                                         :value="type" v-text="type"></option>
                                 </select>
                             </td>
@@ -54,117 +197,274 @@
                         </tbody>
                     </table>
                 </div>
-            </div>
-
-            <div class="modal-body p-0" v-if="baoShiEditWorkOrder &&  '破损' === baoShiEditWorkOrder.issue_type_name" >
+            </template>
+            <template
+                 v-if="'宝时终审' === baoShiEditWorkOrder.status">
                 <div>
-                    <table class="table text-center">
+                    <table class="table table-sm table-bordered">
                         <thead>
                         <tr>
-                            <td>快递单号</td>
-                            <td>商品</td>
-                            <td>商品条码</td>
-                            <td>订单数量</td>
-                            <td>异常数量</td>
-                            <td>破损商品价值</td>
-                            <td>承运商核实数量</td>
-                            <td>宝时审核数量</td>
-                            <td>处理结果</td>
+                            <th>快递单号</th>
+                            <th>商品</th>
+                            <th>商品条码</th>
+                            <th>订单数量</th>
+                            <th>异常数量</th>
+                            <th>审核数量</th>
+                            <th>审核结果</th>
+                            <th>复核结果</th>
+                            <th>复核处理</th>
+                            <th>最终处理结果</th>
                         </tr>
                         </thead>
                         <tbody>
-                        <tr v-for="(item) in (baoShiEditWorkOrder ? baoShiEditWorkOrder.commodities :  [])" class="border border-bottom">
-                            <td v-if="item.count" v-text="item.logistic_number" class="align-middle border border-left border-bottom" :rowspan="item.count">
-                            </td>
-                            <td v-text="item.commodity? item.commodity.name : ''"></td>
-                            <td v-text="item.commodity? item.commodity.sku : ''"></td>
-                            <td v-text="item.amount"></td>
-                            <td v-text="item.abnormal_amount"></td>
-                            <td v-text="item.price"></td>
-                            <td v-text="item.check_amount"></td>
-                            <td>
-                                <input type="number" class="form-control form-control-sm"
-                                       v-model="item.bao_shi_check_amount">
-                            </td>
-                            <td>
-                                <select class="form-control form-control-sm" v-model="item.process_result">
-                                    <option
-                                        v-for="type in damagedProcessResults"
-                                        :value="type" v-text="type"></option>
-                                </select>
-                            </td>
-                        </tr>
+                        <template
+                            v-for="(item) in (baoShiEditWorkOrder.commodities ? baoShiEditWorkOrder.commodities :  [])">
+                            <tr>
+                                <td class="align-middle border border-right"
+                                    v-if="item.count" v-text="item.logistic_number"
+                                    :rowspan="item.count">
+                                </td>
+                                <td v-text="item.commodity? item.commodity.name : ''" class="text-wrap"></td>
+                                <td v-text="item.commodity? item.commodity.sku : ''"></td>
+                                <td v-text="item.amount"></td>
+                                <td v-text="item.abnormal_amount"></td>
+                                <td v-text="item.bao_shi_check_amount"></td>
+                                <td v-text="item.check_result"></td>
+                                <td v-text="item.process_result" class="text-wrap"></td>
+                                <td v-text="item.process_result_info" class="text-wrap"></td>
+                                <td>
+                                    <select name="" id="" class="form-control form-control-sm"
+                                            @change="baoShiAutoComputeMistakeProcessProcess,baoShiGroupCommodities(baoShiEditWorkOrder.commodities)"
+                                            v-model="item.end_handle_result">
+                                        <option v-for="type in getBaoShiEndHandleResult(item)" :value="type"
+                                                v-text="type"></option>
+                                    </select>
+                                </td>
+                            </tr>
+                            <tr v-if="hasReissueLogisticNumber(item)">
+                                <td colspan="9">
+                                    <div class="row">
+                                        <label class="col-form-label text-right col-sm-4">补发快递单号</label>
+                                        <div class="form-inline col-sm-8 row">
+                                            <input type="text" class="form-control form-control-sm col-12"
+                                                   v-model="item.reissue_logistic_number">
+                                        </div>
+                                    </div>
+                                </td>
+                            </tr>
+                            <tr v-if="hasOutInNumber(item)" class="bg-light">
+                                <td colspan="9">
+                                    <div class="row">
+                                        <label class="col-form-label col-4 text-right">补发订单号:</label>
+                                        <label class="col-form-label col-8 text-left text-monospace text-success"
+                                               v-text="item.out_order_number"></label>
+                                    </div>
+
+                                </td>
+                            </tr>
+                            <tr v-if="hasStoreNumber(item)">
+                                <td colspan="5">
+                                    <div class="row">
+                                        <label for="" class="col-form-label col-3 text-right">入库单号</label>
+                                        <label for="" class="col-form-label col-8 text-monospace text-success"
+                                               v-text="item.store_in_number"></label>
+                                    </div>
+
+                                </td>
+                                <td colspan="4">
+                                    <div class="row">
+                                        <label for="" class="col-form-label col-3 text-right">入库数量</label>
+                                        <label for="" class="col-form-label col-8 text-monospace"
+                                               v-text="item.store_in_amount"></label>
+                                    </div>
+                                </td>
+                            </tr>
+
+                        </template>
                         </tbody>
                     </table>
                 </div>
-            </div>
+            </template>
+        </template>
+    </template>
+    <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogShowBaoShiVisible = false">关 闭</el-button>
+        <el-button type="primary" @click="baoShiEdit">
+            <span v-if="'错漏发' === baoShiEditWorkOrder.issue_type_name">提交</span>
+            <span v-else>终审</span>
+        </el-button>
+    </div>
+</el-dialog>
 
+<el-dialog :visible.sync="dialogEditBaoShiVisible" width="75%">
+    <div slot="title">
+        重新编辑(宝时)
+        <span v-text="baoShiEditWorkOrder ? baoShiEditWorkOrder.issue_type_name :'' "></span>
+    </div>
 
-            <div class="modal-body p-0" v-if="baoShiEditWorkOrder &&  '快递异常' === baoShiEditWorkOrder.issue_type_name">
-                <div>
-                    <table class="table text-center">
-                        <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 (baoShiEditWorkOrder ? baoShiEditWorkOrder.commodities :  [])" class="border border-bottom">
-                            <td v-if="item.count" v-text="item.logistic_number" class="align-middle border border-left border-bottom" :rowspan="item.count">
-                            </td>
-                            <td v-text="item.commodity? item.commodity.name : ''"></td>
-                            <td v-text="item.commodity? item.commodity.sku : ''"></td>
-                            <td v-text="item.amount"></td>
-                            <td v-text="item.abnormal_amount"></td>
-                            <td v-text="item.check_amount">
-                            </td>
-                            <td>
-                                <input type="number" class="form-control form-control-sm"
-                                       v-model="item.bao_shi_check_amount">
-                            </td>
-                            <td>
-                                <select class="form-control form-control-sm" v-model="item.process_result">
-                                    <option
-                                        v-for="type in expressAbnormalProcessResults"
-                                        :value="type" v-text="type"></option>
-                                </select>
-                            </td>
-                        </tr>
-                        </tbody>
-                    </table>
+    <template v-if="baoShiEditWorkOrder">
+
+        <template
+             v-if="['拦截','信息更改'].includes(baoShiEditWorkOrder.issue_type_name)">
+            <div class="form-group row">
+                <label for="process_progress" class="col-sm-2 col-form-label text-right text-primary">
+                    <span class="text-danger">*</span>
+                    处理
+                </label>
+                <div class="col-sm-10">
+                    <select class="form-control" v-model="baoShiEditWorkOrder.process_progress">
+                        <option v-for="item in getBaoShiProcessProgress()"
+                                :value="item" v-text="item"></option>
+                    </select>
                 </div>
             </div>
+        </template>
 
+        <template
+             v-else-if="'快递丢件' === baoShiEditWorkOrder.issue_type_name">
+            <div>
+                <table class="table border">
+                    <thead>
+                    <tr>
+                        <th>快递单号</th>
+                        <th>商品</th>
+                        <th>商品条码</th>
+                        <th>订单数量</th>
+                        <th>异常数量</th>
+                        <th>宝时审核数量</th>
+                        <th>处理结果</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    <tr v-for="(item) in (baoShiEditWorkOrder ? baoShiEditWorkOrder.commodities :  []) "
+                        class="border border-bottom">
+                        <td v-if="item.count" v-text="item.logistic_number"
+                            class="align-middle border border-left border-bottom" :rowspan="item.count">
+                        </td>
+                        <td v-text="item.commodity? item.commodity.name : ''">
+                        </td>
+                        <td v-text="item.commodity? item.commodity.sku : ''">
+                        </td>
+                        <td v-text="item.amount">
+                        </td>
+                        <td v-text="item.abnormal_amount">
+                        </td>
+                        <td>
+                            <input type="number" class="form-control form-control-sm"
+                                   v-model="item.bao_shi_check_amount">
+                        </td>
+                        <td>
+                            <select class="form-control form-control-sm"
+                                    v-if="'快递丢件' === baoShiEditWorkOrder.issue_type_name"
+                                    v-model="item.process_result">
+                                <option
+                                    v-for="type in getBaoShiProcessResults()"
+                                    :value="type" v-text="type"></option>
+                            </select>
+                        </td>
+                    </tr>
+                    </tbody>
+                </table>
+            </div>
+        </template>
 
+        <template
+             v-else-if="'破损' === baoShiEditWorkOrder.issue_type_name">
+            <div>
+                <table class="table border">
+                    <thead>
+                    <tr>
+                        <th>快递单号</th>
+                        <th>商品</th>
+                        <th>商品条码</th>
+                        <th>订单数量</th>
+                        <th>异常数量</th>
+                        <th>破损商品价值</th>
+                        <th>承运商核实数量</th>
+                        <th>宝时审核数量</th>
+                        <th>处理结果</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    <tr v-for="(item) in (baoShiEditWorkOrder ? baoShiEditWorkOrder.commodities :  [])"
+                        class="border border-bottom">
+                        <td v-if="item.count" v-text="item.logistic_number"
+                            class="align-middle border border-left border-bottom" :rowspan="item.count">
+                        </td>
+                        <td class="text-wrap" v-text="item.commodity? item.commodity.name : ''"></td>
+                        <td class="text-wrap" v-text="item.commodity? item.commodity.sku : ''"></td>
+                        <td v-text="item.amount"></td>
+                        <td class="text-wrap" v-text="item.abnormal_amount"></td>
+                        <td v-text="item.price"></td>
+                        <td class="text-wrap" v-text="item.check_amount"></td>
+                        <td>
+                            <input type="number" class="form-control form-control-sm"
+                                   v-model="item.bao_shi_check_amount"
+                                   @input="baoShiDamageWorkOrderAuto(item)">
+                        </td>
+                        <td>
+                            <select class="form-control form-control-sm" v-model="item.process_result">
+                                <option
+                                    v-for="type in getBaoShiProcessResults()"
+                                    :value="type" v-text="type"></option>
+                            </select>
+                        </td>
+                    </tr>
+                    </tbody>
+                </table>
+            </div>
+        </template>
+
+        <template
+             v-else-if="'快递异常' === baoShiEditWorkOrder.issue_type_name">
+            <div>
+                <table class="table border text-center">
+                    <thead>
+                    <tr>
+                        <th>快递单号</th>
+                        <th>宝时处理结果</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    <tr v-for="(item) in baoShiEditWorkOrder.commodities" class="border border-bottom">
+                        <td v-text="item.logistic_number"></td>
+                        <td>
+                            <select class="form-control" v-model="item.process_result"
+                                    @change="baoShiChangeExpressAbnormal(item)">
+                                <option
+                                    v-for="type in getBaoShiProcessResults()"
+                                    :value="type" v-text="type"></option>
+                            </select>
+                        </td>
+                    </tr>
+                    </tbody>
+                </table>
+            </div>
 
+        </template>
 
-            <div class="modal-body p-0" v-if="baoShiEditWorkOrder &&  '错漏发' === baoShiEditWorkOrder.issue_type_name">
+        <template v-else-if="'错漏发' === baoShiEditWorkOrder.issue_type_name">
+            <div class=" ">
                 <div>
-                    <table class="table text-center">
+                    <table class="table table-sm table-hover table-bordered">
                         <thead>
                         <tr>
-                            <td>快递单号</td>
-                            <td>商品</td>
-                            <td>商品条码</td>
-                            <td>订单数量</td>
-                            <td>异常数量</td>
-                            <td>宝时审核数量</td>
-                            <td>审核结果</td>
+                            <th>快递单号</th>
+                            <th>商品</th>
+                            <th>商品条码</th>
+                            <th>订单数量</th>
+                            <th>异常数量</th>
+                            <th>宝时审核数量</th>
+                            <th>审核结果</th>
                         </tr>
                         </thead>
                         <tbody>
-                        <tr v-for="(item) in (baoShiEditWorkOrder ? baoShiEditWorkOrder.commodities :  [])" class="border border-bottom">
-                            <td v-if="item.count" v-text="item.logistic_number" class="align-middle border border-left border-bottom" :rowspan="item.count">
+                        <tr v-for="(item) in (baoShiEditWorkOrder.commodities ? baoShiEditWorkOrder.commodities :  [])"
+                            class="border ">
+                            <td v-if="item.count" v-text="item.logistic_number"
+                                class="align-middle border border-right" :rowspan="item.count">
                             </td>
                             <td v-text="item.commodity? item.commodity.name : ''">
-                                <span></span>
                             </td>
                             <td v-text="item.commodity? item.commodity.sku : ''">
                             </td>
@@ -175,12 +475,13 @@
                             <td>
                                 <input type="number" class="form-control form-control-sm"
                                        v-model="item.bao_shi_check_amount"
-                                       @input="computeBaoShiCheckResult(item)">
+                                       @input="computeBaoShiMistakeCheckResult(item)">
                             </td>
                             <td>
-                                <select class="form-control form-control-sm" v-model="item.check_result" disabled>
+                                <select class="form-control form-control-sm" v-model="item.check_result"
+                                        disabled>
                                     <option
-                                        v-for="type in mistakeResults"
+                                        v-for="type in getBaoShiProcessResults()"
                                         :value="type" v-text="type"></option>
                                 </select>
                             </td>
@@ -189,13 +490,256 @@
                     </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="baoShiEdit">
-                    <span v-if="'错漏发' === baoShiEditWorkOrder.issue_type_name">提交</span>
-                    <span v-else>终审</span>
-                </button>
-            </div>
-        </div>
+
+        </template>
+    </template>
+
+    <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogEditBaoShiVisible = false">关 闭</el-button>
+        <el-button type="primary" @click="baoShiEdit">
+            <span v-if="'错漏发' === baoShiEditWorkOrder.issue_type_name">提交</span>
+            <span v-else>终审</span>
+        </el-button>
     </div>
-</div>
+
+</el-dialog>
+
+{{--快递处理丢件工单--}}
+{{--<div class="modal fade " id="bao-shi-review-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="bao-shi-work-order-modal">--}}
+{{--                    <span v-if="'宝时终审' === baoShiEditWorkOrder.status">终审(宝时)</span>--}}
+{{--                    <span v-else-if="'宝时处理' === baoShiEditWorkOrder.status">处理(宝时)--}}
+{{--                    </span>--}}
+{{--                    <span--}}
+{{--                        v-text="baoShiEditWorkOrder ? baoShiEditWorkOrder.issue_type_name :'' "></span>--}}
+{{--                </h5>--}}
+{{--                <button type="button" class="close" data-dismiss="modal" aria-label="Close">--}}
+{{--                    <span aria-hidden="true">&times;</span>--}}
+{{--                </button>--}}
+{{--            </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="baoShiEdit">--}}
+{{--                    <span v-if="'错漏发' === baoShiEditWorkOrder.issue_type_name">提交</span>--}}
+{{--                    <span v-else>终审</span>--}}
+{{--                </button>--}}
+{{--            </div>--}}
+{{--        </div>--}}
+{{--    </div>--}}
+{{--</div>--}}
+
+
+{{--<div class="modal fade " id="bao-shi-edit-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="bao-shi-edit">重新编辑(宝时)<span--}}
+{{--                        v-text="baoShiEditWorkOrder ? baoShiEditWorkOrder.issue_type_name :'' "></span></h5>--}}
+{{--                <button type="button" class="close" data-dismiss="modal" aria-label="Close">--}}
+{{--                    <span aria-hidden="true">&times;</span>--}}
+{{--                </button>--}}
+{{--            </div>--}}
+{{--            <template v-if="baoShiEditWorkOrder">--}}
+
+{{--                <div class=" "--}}
+{{--                     v-if="['拦截','信息更改'].includes(baoShiEditWorkOrder.issue_type_name)">--}}
+{{--                    <div class="form-group row">--}}
+{{--                        <label for="process_progress" class="col-sm-2 col-form-label text-right text-primary">--}}
+{{--                            <span class="text-danger">*</span>--}}
+{{--                            处理--}}
+{{--                        </label>--}}
+{{--                        <div class="col-sm-10">--}}
+{{--                            <select class="form-control" v-model="baoShiEditWorkOrder.process_progress">--}}
+{{--                                <option v-for="item in getBaoShiProcessProgress()"--}}
+{{--                                        :value="item" v-text="item"></option>--}}
+{{--                            </select>--}}
+{{--                        </div>--}}
+{{--                    </div>--}}
+{{--                </div>--}}
+
+{{--                <div class=" "--}}
+{{--                     v-else-if="'快递丢件' === baoShiEditWorkOrder.issue_type_name">--}}
+{{--                    <div>--}}
+{{--                        <table class="table border">--}}
+{{--                            <thead>--}}
+{{--                            <tr>--}}
+{{--                                <th>快递单号</th>--}}
+{{--                                <th>商品</th>--}}
+{{--                                <th>商品条码</th>--}}
+{{--                                <th>订单数量</th>--}}
+{{--                                <th>异常数量</th>--}}
+{{--                                <th>宝时审核数量</th>--}}
+{{--                                <th>处理结果</th>--}}
+{{--                            </tr>--}}
+{{--                            </thead>--}}
+{{--                            <tbody>--}}
+{{--                            <tr v-for="(item) in (baoShiEditWorkOrder ? baoShiEditWorkOrder.commodities :  []) "--}}
+{{--                                class="border border-bottom">--}}
+{{--                                <td v-if="item.count" v-text="item.logistic_number"--}}
+{{--                                    class="align-middle border border-left border-bottom" :rowspan="item.count">--}}
+{{--                                </td>--}}
+{{--                                <td v-text="item.commodity? item.commodity.name : ''">--}}
+{{--                                </td>--}}
+{{--                                <td v-text="item.commodity? item.commodity.sku : ''">--}}
+{{--                                </td>--}}
+{{--                                <td v-text="item.amount">--}}
+{{--                                </td>--}}
+{{--                                <td v-text="item.abnormal_amount">--}}
+{{--                                </td>--}}
+{{--                                <td>--}}
+{{--                                    <input type="number" class="form-control form-control-sm"--}}
+{{--                                           v-model="item.bao_shi_check_amount">--}}
+{{--                                </td>--}}
+{{--                                <td>--}}
+{{--                                    <select class="form-control form-control-sm"--}}
+{{--                                            v-if="'快递丢件' === baoShiEditWorkOrder.issue_type_name"--}}
+{{--                                            v-model="item.process_result">--}}
+{{--                                        <option--}}
+{{--                                            v-for="type in getBaoShiProcessResults()"--}}
+{{--                                            :value="type" v-text="type"></option>--}}
+{{--                                    </select>--}}
+{{--                                </td>--}}
+{{--                            </tr>--}}
+{{--                            </tbody>--}}
+{{--                        </table>--}}
+{{--                    </div>--}}
+{{--                </div>--}}
+
+{{--                <div class=" "--}}
+{{--                     v-else-if="'破损' === baoShiEditWorkOrder.issue_type_name">--}}
+{{--                    <div>--}}
+{{--                        <table class="table border">--}}
+{{--                            <thead>--}}
+{{--                            <tr>--}}
+{{--                                <th>快递单号</th>--}}
+{{--                                <th>商品</th>--}}
+{{--                                <th>商品条码</th>--}}
+{{--                                <th>订单数量</th>--}}
+{{--                                <th>异常数量</th>--}}
+{{--                                <th>破损商品价值</th>--}}
+{{--                                <th>承运商核实数量</th>--}}
+{{--                                <th>宝时审核数量</th>--}}
+{{--                                <th>处理结果</th>--}}
+{{--                            </tr>--}}
+{{--                            </thead>--}}
+{{--                            <tbody>--}}
+{{--                            <tr v-for="(item) in (baoShiEditWorkOrder ? baoShiEditWorkOrder.commodities :  [])"--}}
+{{--                                class="border border-bottom">--}}
+{{--                                <td v-if="item.count" v-text="item.logistic_number"--}}
+{{--                                    class="align-middle border border-left border-bottom" :rowspan="item.count">--}}
+{{--                                </td>--}}
+{{--                                <td class="text-wrap" v-text="item.commodity? item.commodity.name : ''"></td>--}}
+{{--                                <td class="text-wrap" v-text="item.commodity? item.commodity.sku : ''"></td>--}}
+{{--                                <td v-text="item.amount"></td>--}}
+{{--                                <td class="text-wrap" v-text="item.abnormal_amount"></td>--}}
+{{--                                <td v-text="item.price"></td>--}}
+{{--                                <td class="text-wrap" v-text="item.check_amount"></td>--}}
+{{--                                <td>--}}
+{{--                                    <input type="number" class="form-control form-control-sm"--}}
+{{--                                           v-model="item.bao_shi_check_amount"--}}
+{{--                                           @input="baoShiDamageWorkOrderAuto(item)">--}}
+{{--                                </td>--}}
+{{--                                <td>--}}
+{{--                                    <select class="form-control form-control-sm" v-model="item.process_result">--}}
+{{--                                        <option--}}
+{{--                                            v-for="type in getBaoShiProcessResults()"--}}
+{{--                                            :value="type" v-text="type"></option>--}}
+{{--                                    </select>--}}
+{{--                                </td>--}}
+{{--                            </tr>--}}
+{{--                            </tbody>--}}
+{{--                        </table>--}}
+{{--                    </div>--}}
+{{--                </div>--}}
+{{--                <div class=" "--}}
+{{--                     v-else-if="'快递异常' === baoShiEditWorkOrder.issue_type_name">--}}
+{{--                    <div>--}}
+{{--                        <table class="table border text-center">--}}
+{{--                            <thead>--}}
+{{--                            <tr>--}}
+{{--                                <th>快递单号</th>--}}
+{{--                                <th>宝时处理结果</th>--}}
+{{--                            </tr>--}}
+{{--                            </thead>--}}
+{{--                            <tbody>--}}
+{{--                            <tr v-for="(item) in baoShiEditWorkOrder.commodities" class="border border-bottom">--}}
+{{--                                <td v-text="item.logistic_number"></td>--}}
+{{--                                <td>--}}
+{{--                                    <select class="form-control" v-model="item.process_result"--}}
+{{--                                            @change="baoShiChangeExpressAbnormal(item)">--}}
+{{--                                        <option--}}
+{{--                                            v-for="type in getBaoShiProcessResults()"--}}
+{{--                                            :value="type" v-text="type"></option>--}}
+{{--                                    </select>--}}
+{{--                                </td>--}}
+{{--                            </tr>--}}
+{{--                            </tbody>--}}
+{{--                        </table>--}}
+{{--                    </div>--}}
+
+{{--                </div>--}}
+
+{{--                <template v-else-if="'错漏发' === baoShiEditWorkOrder.issue_type_name">--}}
+{{--                    <div class=" ">--}}
+{{--                        <div>--}}
+{{--                            <table class="table table-sm table-hover table-bordered">--}}
+{{--                                <thead>--}}
+{{--                                <tr>--}}
+{{--                                    <th>快递单号</th>--}}
+{{--                                    <th>商品</th>--}}
+{{--                                    <th>商品条码</th>--}}
+{{--                                    <th>订单数量</th>--}}
+{{--                                    <th>异常数量</th>--}}
+{{--                                    <th>宝时审核数量</th>--}}
+{{--                                    <th>审核结果</th>--}}
+{{--                                </tr>--}}
+{{--                                </thead>--}}
+{{--                                <tbody>--}}
+{{--                                <tr v-for="(item) in (baoShiEditWorkOrder.commodities ? baoShiEditWorkOrder.commodities :  [])"--}}
+{{--                                    class="border ">--}}
+{{--                                    <td v-if="item.count" v-text="item.logistic_number"--}}
+{{--                                        class="align-middle border border-right" :rowspan="item.count">--}}
+{{--                                    </td>--}}
+{{--                                    <td v-text="item.commodity? item.commodity.name : ''">--}}
+{{--                                    </td>--}}
+{{--                                    <td v-text="item.commodity? item.commodity.sku : ''">--}}
+{{--                                    </td>--}}
+{{--                                    <td v-text="item.amount">--}}
+{{--                                    </td>--}}
+{{--                                    <td v-text="item.abnormal_amount">--}}
+{{--                                    </td>--}}
+{{--                                    <td>--}}
+{{--                                        <input type="number" class="form-control form-control-sm"--}}
+{{--                                               v-model="item.bao_shi_check_amount"--}}
+{{--                                               @input="computeBaoShiMistakeCheckResult(item)">--}}
+{{--                                    </td>--}}
+{{--                                    <td>--}}
+{{--                                        <select class="form-control form-control-sm" v-model="item.check_result"--}}
+{{--                                                disabled>--}}
+{{--                                            <option--}}
+{{--                                                v-for="type in getBaoShiProcessResults()"--}}
+{{--                                                :value="type" v-text="type"></option>--}}
+{{--                                        </select>--}}
+{{--                                    </td>--}}
+{{--                                </tr>--}}
+{{--                                </tbody>--}}
+{{--                            </table>--}}
+{{--                        </div>--}}
+{{--                    </div>--}}
+
+{{--                </template>--}}
+{{--            </template>--}}
+{{--            <div class="modal-footer">--}}
+{{--                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>--}}
+{{--                <button type="button" class="btn btn-outline-primary" @click="baoShiEdit">--}}
+{{--                    提交--}}
+{{--                </button>--}}
+{{--            </div>--}}
+{{--        </div>--}}
+{{--    </div>--}}
+{{--</div>--}}

+ 222 - 74
resources/views/order/workOrder/_logistic_fill_work_order_modal.blade.php

@@ -1,80 +1,228 @@
-{{--快递处理丢件工单--}}
-<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" v-if="logisticEditWorkOrder">
-                    <span v-text="logisticEditWorkOrder.issue_type_name + '工单'+'(承运商)'">
-                    </span>
-                </h5>
-                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
-                    <span aria-hidden="true">&times;</span>
-                </button>
+<el-dialog :visible.sync="dialogShowLogisticVisible" width="70%">
+    <span slot="title" v-text="logisticEditWorkOrder.issue_type_name + '工单'+'(承运商)'">
+    </span>
+
+    <template v-if="logisticEditWorkOrder">
+        <template v-if="'拦截' === logisticEditWorkOrder.issue_type_name">
+            <div class="form-group row">
+                <label class="col-sm-2 col-form-label text-primary text-right">
+                    <span class="text-danger">*</span>
+                    处理
+                </label>
+                <div class="col-sm-10">
+                    <select class="form-control form-control-sm" v-model="logisticEditWorkOrder.process_progress">
+                        <option
+                            v-for="item in getLogisticProcessProgress()"
+                            :value="item" v-text="item"></option>
+                    </select>
+                </div>
             </div>
-            <div class="modal-body p-0" v-if="logisticEditWorkOrder">
-                <div>
-                    <table class="table">
-                        <thead>
-                        <tr class="text-center">
-                            <td>快递单号</td>
-                            <td>商品</td>
-                            <td>商品条码</td>
-                            <td>订单数量</td>
-                            <td>异常数量</td>
-                            <td>核实数量</td>
-                            <td>核实结果</td>
-                        </tr>
-                        </thead>
-                        <tbody v-if="logisticEditWorkOrder" class="text-center">
-                        <tr v-for="(item) in (logisticEditWorkOrder.commodities ?  logisticEditWorkOrder.commodities : []) " class="border border-bottom">
-                            <td v-if="item.count" v-text="item.logistic_number" class="align-middle border border-left border-bottom" :rowspan="item.count">
-                            </td>
-                            <td>
-                                <span v-text="item.commodity ? item.commodity.name : ''"></span>
-                            </td>
-                            <td>
-                                <span v-text="item.commodity ? item.commodity.sku : ''"></span>
-                            </td>
-                            <td v-text="item.amount">
-                            </td>
-                            <td v-text="item.abnormal_amount">
-                            </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="'破损' === logisticEditWorkOrder.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="'快递异常' === logisticEditWorkOrder.issue_type_name"
-                                        v-model="item.check_result">
-                                    <option v-for="type in expressAbnormalLogisticProcessResults" :value="type"
-                                            v-text="type"></option>
-                                </select>
+        </template>
 
-                                <select class="form-control form-control-sm"
-                                        v-if="'快递丢件' === logisticEditWorkOrder.issue_type_name"
-                                        v-model="item.check_result">
-                                    <option
-                                        v-for="type in (['赔偿','不赔偿'])"
-                                        :value="type" v-text="type"></option>
-                                </select>
-                            </td>
-                        </tr>
-                        </tbody>
-                    </table>
+        <template v-else-if="'信息更改' === logisticEditWorkOrder.issue_type_name">
+            <div class="form-group row">
+                <label class="col-sm-2 col-form-label text-primary text-right">
+                    <span class="text-danger">*</span>
+                    处理
+                </label>
+                <div class="col-sm-10">
+                    <select class="form-control form-control-sm" v-model="logisticEditWorkOrder.process_progress">
+                        <option
+                            v-for="item in getLogisticProcessProgress()"
+                            :value="item" v-text="item"></option>
+                    </select>
                 </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="logisticEdit">提交</button>
+        </template>
+
+        <template v-else-if="'破损' === logisticEditWorkOrder.issue_type_name">
+            <div>
+                <table class="table table-sm table-bordered">
+                    <thead>
+                    <tr class="text-center">
+                        <th>快递单号</th>
+                        <th>商品</th>
+                        <th>商品条码</th>
+                        <th>订单数量</th>
+                        <th>异常数量</th>
+                        <th>破损商品单价</th>
+                        <th>核实数量</th>
+                        <th>核实结果</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    <tr v-for="item in logisticEditWorkOrder.commodities">
+                        <td v-if="item.count" v-text="item.logistic_number"
+                            class="border border-right align-middle"
+                            :rowspan="item.count">
+                        </td>
+                        <td class="text-wrap" v-text="item.commodity ? item.commodity.name : ''"></td>
+                        <td class="text-wrap" v-text="item.commodity ? item.commodity.sku : ''"></td>
+                        <td v-text="item.amount"></td>
+                        <td v-text="item.abnormal_amount"></td>
+                        <td v-text="item.price"></td>
+                        <td>
+                            <input type="number" class="form-control form-control-sm"
+                                   v-model="item.check_amount" @input="logisticDamageWorkOrderAuto(item)">
+                        </td>
+                        <td>
+                            <select class="form-control form-control-sm" v-model="item.check_result">
+                                <option v-for="check_result in getLogisticCheckResult()"
+                                        :value="check_result" v-text="check_result"></option>
+                            </select>
+                        </td>
+                    </tr>
+                    </tbody>
+                </table>
+            </div>
+        </template>
+
+        <template v-else-if="'快递异常' === logisticEditWorkOrder.issue_type_name">
+            <div>
+                <table class="table border text-center">
+                    <thead>
+                    <tr>
+                        <th>快递单号</th>
+                        <th>核实结果</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    <tr v-for="item in logisticEditWorkOrder.commodities">
+                        <td v-text="item.logistic_number">
+                        </td>
+                        <td>
+                            <select class="form-control form-control-sm"
+                                    v-model="item.check_result"
+                                    @change="logisticChangeExpressAbnormal(item)">
+                                <option v-for="checkResult in getLogisticCheckResult()" :value="checkResult"
+                                        v-text="checkResult">
+                                </option>
+                            </select>
+                        </td>
+                    </tr>
+                    </tbody>
+                </table>
             </div>
-        </div>
+        </template>
+    </template>
+
+
+    <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogShowLogisticVisible = false">关 闭</el-button>
+        <el-button type="primary" @click="logisticEdit">提交</el-button>
+    </div>
+</el-dialog>
+
+<el-dialog :visible.sync="dialogEditLogisticVisible" width="70%">
+    <span slot="title" v-text="logisticEditWorkOrder.issue_type_name + '工单'+'(承运商编辑)'">
+    </span>
+    <template v-if="logisticEditWorkOrder">
+        <template v-if="'拦截' === logisticEditWorkOrder.issue_type_name">
+            <div class="form-group row">
+                <label class="col-sm-2 col-form-label text-primary text-right">
+                    <span class="text-danger">*</span>
+                    处理
+                </label>
+                <div class="col-sm-10">
+                    <select class="form-control form-control-sm" v-model="logisticEditWorkOrder.process_progress">
+                        <option
+                            v-for="item in getLogisticProcessProgress()"
+                            :value="item" v-text="item"></option>
+                    </select>
+                </div>
+            </div>
+        </template>
+
+        <template v-else-if="'信息更改' === logisticEditWorkOrder.issue_type_name">
+            <div class="form-group row">
+                <label class="col-sm-2 col-form-label text-primary text-right">
+                    <span class="text-danger">*</span>
+                    处理
+                </label>
+                <div class="col-sm-10">
+                    <select class="form-control form-control-sm" v-model="logisticEditWorkOrder.process_progress">
+                        <option
+                            v-for="item in getLogisticProcessProgress()"
+                            :value="item" v-text="item"></option>
+                    </select>
+                </div>
+            </div>
+        </template>
+
+        <template v-else-if="'破损' === logisticEditWorkOrder.issue_type_name">
+            <div>
+                <table class="table border">
+                    <thead>
+                    <tr class="text-center">
+                        <th>快递单号</th>
+                        <th>商品</th>
+                        <th>商品条码</th>
+                        <th>订单数量</th>
+                        <th>异常数量</th>
+                        <th>破损商品单价</th>
+                        <th>核实数量</th>
+                        <th>核实结果</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    <tr v-for="item in logisticEditWorkOrder.commodities">
+                        <td v-if="item.count" v-text="item.logistic_number"
+                            class="border border-right align-middle"
+                            :rowspan="item.count">
+                        </td>
+                        <td v-text="item.commodity ? item.commodity.name : ''"></td>
+                        <td v-text="item.commodity ? item.commodity.sku : ''"></td>
+                        <td v-text="item.amount"></td>
+                        <td v-text="item.abnormal_amount"></td>
+                        <td v-text="item.price"></td>
+                        <td>
+                            <input type="number" class="form-control form-control-sm"
+                                   v-model="item.check_amount" @input="logisticDamageWorkOrderAuto(item)">
+                        </td>
+                        <td>
+                            <select class="form-control form-control-sm" v-model="item.check_result" disabled>
+                                <option v-for="check_result in getLogisticCheckResult()"
+                                        :value="check_result" v-text="check_result"></option>
+                            </select>
+                        </td>
+                        <td></td>
+                    </tr>
+                    </tbody>
+                </table>
+            </div>
+        </template>
+
+        <template v-else-if="'快递异常' === logisticEditWorkOrder.issue_type_name">
+            <div>
+                <table class="table border text-center">
+                    <thead>
+                    <tr>
+                        <th>快递单号</th>
+                        <th>核实结果</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    <tr v-for="item in logisticEditWorkOrder.commodities">
+                        <td v-text="item.logistic_number">
+                        </td>
+                        <td>
+                            <select class="form-control form-control-sm"
+                                    v-model="item.check_result"
+                                    @change="logisticChangeExpressAbnormal(item)">
+                                <option v-for="checkResult in getLogisticCheckResult()" :value="checkResult"
+                                        v-text="checkResult">
+                                </option>
+                            </select>
+                        </td>
+                    </tr>
+                    </tbody>
+                </table>
+            </div>
+        </template>
+    </template>
+
+    <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogEditLogisticVisible = false">关 闭</el-button>
+        <el-button type="primary" @click="logisticEdit">提交</el-button>
     </div>
-</div>
+</el-dialog>

+ 800 - 184
resources/views/order/workOrder/_owner_fill_work_order_modal.blade.php

@@ -1,233 +1,849 @@
-{{--快递丢件 处理--}}
-<div class="modal fade " id="owner-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" v-if="ownerEditWorKOrder">
-            <div class="modal-header">
-                <h5 class="modal-title" id="checkModalLabel">
-                    <span v-if="'快递丢件' === ownerEditWorKOrder.issue_type_name ">信息填写(货主)</span>
-                    <span v-else-if="'错漏发' === ownerEditWorKOrder.issue_type_name">错漏发填写(货主)</span>
-                </h5>
-                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
-                    <span aria-hidden="true">&times;</span>
-                </button>
-            </div>
-            <div class="modal-body" v-if="'货主处理' === ownerEditWorKOrder.status && '快递丢件' === ownerEditWorKOrder.issue_type_name">
-                <div class="modal-body">
-                    <div class="form-group row">
-                        <div class="col-sm-2"></div>
-                        <div class="col-sm-10  text-primary">
-                            补发单号,退款成功截图 二选一
+<el-dialog title="工单详情" :visible.sync="dialogShowOwnerVisible" width="70%">
+    <div slot="title">
+        <span v-if="'快递丢件' === ownerEditWorkOrder.issue_type_name ">信息填写(货主)</span>
+        <span v-else-if="'错漏发' === ownerEditWorkOrder.issue_type_name">错漏发填写(货主)</span>
+    </div>
+
+    <template v-if="ownerEditWorkOrder">
+        <template v-if="'快递丢件' === ownerEditWorkOrder.issue_type_name">
+            <div class="form-group row">
+                <hr>
+                <label for="order_issue_type" class="col-sm-2 col-form-label text-right">收方信息</label>
+                <div class="col-sm-10">
+                        <textarea class="form-control form-control-sm" name="" id="remake_info" cols="30" rows="2"
+                                  v-model="ownerEditWorkOrder.remake"></textarea>
+                </div>
+            </div>
+            <hr>
+            <div class="form-group row">
+                <label for="work-order-price" class="col-sm-2 col-form-label text-right text-primary">
+                    <span class="text-danger">*</span>
+                    商品总价值
+                </label>
+                <div class="col-sm-10">
+                    <input type="number" id="work-order-price" class="form-control form-control-sm"
+                           v-model="ownerEditWorkOrder.price"
+                           placeholder="丢件商品总价值">
+                </div>
+            </div>
+            <div class="form-group row">
+                <label for="deal-image" class="col-sm-2 col-form-label text-right text-primary">
+                    <span class="text-danger">*</span>
+                    交易截图
+                </label>
+                <div class="col-sm-10">
+                    <div><span class="text-primary">需带有付款时间,快递单号,内物详情和实付款的交易截图</span></div>
+                    <div class="border border-secondary h-auto" id="deal-image" style="min-height: 75px"
+                         contenteditable="true"
+                         @paste="pasteImage($event,ownerEditWorkOrder.dealImages)">
+                        <div v-for="(image,i) in ownerEditWorkOrder.dealImages"
+                             class="d-inline-block col-4 position-relative card">
+                            <div class="card-body">
+                                <img :src="image.src" class="card-img-top" :alt="image.file.name">
+                                <div class="float-right position-relative">
+                                    <button type="button" class="btn btn-sm btn-outline-danger"
+                                            @click="spliceImage(i,ownerEditWorkOrder.dealImages)">取消
+                                    </button>
+                                </div>
+                            </div>
                         </div>
                     </div>
-                    {{--破损商品价格--}}
-                    <div class="form-group row">
-                        <label for="work-order-price"
-                               class="col-sm-2 col-form-label text-right text-primary">丢件商品总价值</label>
-                        <div class="col-sm-10">
-                            <input type="number" id="work-order-price" class="form-control"
-                                   v-model="ownerEditWorKOrder.price"
-                                   disabled
-                                   placeholder="填写丢件商品价值后自动计算">
+                </div>
+            </div>
+            <hr>
+            <div class="form-group row">
+                <label for="refund-image"
+                       class="col-sm-2 col-form-label text-right text-primary">
+                    <span class="text-danger">*</span>
+                    <span>退款成功截图<br/>或补发单号</span>
+                </label>
+                <div class="col-sm-10">
+                    <div class="border border-secondary h-auto" id="refund-image" style="min-height: 75px"
+                         contenteditable="true"
+                         @paste="pasteRefundImagesOrReissueLogisticNumber($event,ownerEditWorkOrder.refundImages)"
+                         ref="refund-image-reissue_logistic_number"
+                         @input="editReissueLogisticNumber">
+                        <div v-for="(image,i) in ownerEditWorkOrder.refundImages"
+                             contenteditable="false"
+                             class="d-inline-block col-4 position-relative card">
+                            <div class="card-body">
+                                <img :src="image.src" class="card-img-top" :alt="image.file.name">
+                                <div class="float-right position-relative">
+                                    <button type="button" class="btn btn-sm btn-outline-danger"
+                                            @click="spliceImage(i,ownerEditWorkOrder.refundImages)">取消
+                                    </button>
+                                </div>
+                            </div>
                         </div>
                     </div>
-                    {{--快递单号--}}
-                    <div class="form-group row">
-                        <label for="work-order-logistic-number"
-                               class="col-sm-2 col-form-label text-right">丢件快递单号</label>
-                        <div class="col-sm-10">
-                            <input type="text" id="work-order-logistic-number" class="form-control"
-                                   v-model="ownerEditWorKOrder['logistic_number']" placeholder="快递单号">
-                        </div>
+                </div>
+            </div>
+            <hr>
+            <div>
+                <table class="table table-sm table-hover table-bordered">
+                    <thead>
+                    <tr>
+                        <th>快递单号</th>
+                        <th>商品</th>
+                        <th>商品条码</th>
+                        <th>订单数量</th>
+                        <th>异常数量</th>
+                        <th></th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    <tr v-for="(item,i) in  ownerEditWorkOrder.commodities" class="border border-bottom">
+                        <td v-if="item.count" v-text="item.logistic_number"
+                            class="align-middle border border-left border-bottom" :rowspan="item.count">
+                        </td>
+                        <td v-text="item.name">
+                        </td>
+                        <td v-text="item.sku">
+                        </td>
+                        <td v-text="item.amount">
+                        </td>
+                        <td>
+                            <input type="number" class="form-control form-control-sm"
+                                   v-model="item.abnormal_amount">
+                        </td>
+                        <td>
+                            <button type="button" class="close"
+                                    @click="ownerEditWorkOrder.commodities.splice(i,1),sumPrice(ownerEditWorkOrder),countByCommodities(ownerEditWorkOrder.commodities)">
+                                <span aria-hidden="true" class="text-danger">&times;</span>
+                            </button>
+                        </td>
+                    </tr>
+                    </tbody>
+                </table>
+            </div>
+        </template>
+
+        <template v-else-if="'错漏发' === ownerEditWorkOrder.issue_type_name">
+            <div>
+                <table class="table table-sm table-bordered table-hover">
+                    <thead>
+                    <tr>
+                        <th>快递单号</th>
+                        <th>商品</th>
+                        <th>商品条码</th>
+                        <th>订单数量</th>
+                        <th>异常数量</th>
+                        <th>宝时复核数量</th>
+                        <th>复核结果</th>
+                        <th>处理</th>
+                        <th>处理详情</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    <template v-for="(item,i) in  ownerEditWorkOrder.commodities">
+                        <tr>
+                            <td v-if="item.count" v-text="item.logistic_number"
+                                class="align-middle border border-left border-bottom" :rowspan="item.count">
+                            </td>
+                            <td v-text="item.commodity  ? item.commodity.name : ''"></td>
+                            <td v-text="item.sku"></td>
+                            <td v-text="item.amount"></td>
+                            <td v-text="item.abnormal_amount"></td>
+                            <td v-text="item.bao_shi_check_amount"></td>
+                            <td v-text="item.check_result"></td>
+                            <td>
+                                <select class="form-control form-control-sm" v-model="item.process_result"
+                                        @change="item.process_result_info = '' ,countCommoditiesByLogisticNumber(ownerEditWorkOrder.commodities,item)">
+                                    <option v-for="item in getProcessResult(item.check_result,item)" :value="item"
+                                            v-text="item"></option>
+                                </select>
+                            </td>
+                            <td>
+                                <select class="form-control form-control-sm" v-model="item.process_result_info"
+                                        @change="ownerGroupCommodities(ownerEditWorkOrder.commodities)">
+                                    <option
+                                        v-for="item in getOwnerMistakeProcessResultInfo(item.process_result,item)"
+                                        :value="item"
+                                        v-text="item"></option>
+                                </select>
+                            </td>
+                        </tr>
+                        <tr v-if="hasStoreNumber(item)">
+                            <td colspan="5">
+                                <div class="row">
+                                    <label class="col-form-label col-sm-4 text-right">入库单号</label>
+                                    <div class="col-sm-8 form-inline">
+                                        <input type="text" class="form-control form-control-sm col-12"
+                                               v-model="item.store_in_number"
+                                               placeholder="入库单号"
+                                               @input="autoComputeStoreInAmount(item)">
+                                    </div>
+                                </div>
+                            </td>
+                            <td colspan="4">
+                                <div class="row">
+                                    <label class="col-form-label col-sm-12 ">
+                                        入库数量
+                                        <span v-if="item.store_in_amount" v-text="item.store_in_amount"></span>
+                                        <span v-else class="text-muted">填写入库单后自动计算入库数量</span>
+                                    </label>
+                                </div>
+                            </td>
+                        </tr>
+
+                        <tr v-if="item.process_result_info === '商家做出库单(物流选自提,宝时不发货)'">
+                            <td colspan="8">
+                                <div class="row">
+                                    <label class="col-form-label text-right col-sm-4">
+                                        出库订单号
+                                    </label>
+                                    <div class="form-inline col-sm-8 row">
+                                        <input type="text" class="form-control form-control-sm col-sm-12"
+                                               v-model="item.out_order_number"
+                                               placeholder="出库订单号">
+                                    </div>
+                                </div>
+                            </td>
+                        </tr>
+                    </template>
+                    </tbody>
+                </table>
+            </div>
+
+            <div class="form-group row" v-if="hasReturnLogisticNumber(ownerEditWorkOrder.commodities)">
+                <label for="work-order-logistic-number"
+                       class="col-sm-2 col-form-label text-right text-primary"><span class="text-danger">*</span>退回快递单号</label>
+                <div class="form-inline col-sm-10">
+                    <input type="text" id="work-order-return_logistic_number" class="form-control form-control-sm col-12"
+                           v-model="ownerEditWorkOrder['return_logistic_number']" placeholder="退回快递单号">
+                </div>
+            </div>
+
+            <template v-if="hasReturnAddressInfo(ownerEditWorkOrder.commodities)">
+                <div class="form-group row">
+                    <label for="work-order-return-name"
+                           class="col-sm-2 col-form-label text-right text-primary"><span
+                            class="text-danger">*</span>联系人</label>
+                    <div class="form-inline col-sm-10">
+                        <input type="text" id="work-order-return-name" class="form-control form-control-sm col-12"
+                               v-model="ownerEditWorkOrder['return_name']" placeholder="联系人">
                     </div>
-                    {{--补发快递--}}
-                    <div class="form-group row"
-                         v-show="ownerEditWorKOrder.dealImages && ownerEditWorKOrder.dealImages.length === 0">
-                        <label for="work-order-reissue-logistic-number"
-                               class="col-sm-2 col-form-label text-right">补发快递单号</label>
-                        <div class="col-sm-10">
-                            <input type="text" id="work-order-reissue-logistic-number" class="form-control"
-                                   v-model="ownerEditWorKOrder['reissue_logistic_number']" placeholder="快递单号">
-                        </div>
+                </div>
+
+                <div class="form-group row">
+                    <label for="work-order-return-address"
+                           class="col-sm-2 col-form-label text-right text-primary"><span
+                            class="text-danger">*</span>地址</label>
+                    <div class="form-inline col-sm-10">
+                        <input type="text" id="work-order-return-address" class="form-control form-control-sm col-12"
+                               v-model="ownerEditWorkOrder['return_address']" placeholder="地址">
                     </div>
-                    {{--信息更改--}}
-                    <div class="form-group row">
-                        <hr>
-                        <label for="order_issue_type" class="col-sm-2 col-form-label text-right">收方信息</label>
-                        <div class="col-sm-10">
-                        <textarea class="form-control" name="" id="remake_info" cols="30" rows="2"
-                                  v-model="ownerEditWorKOrder.remake"></textarea>
-                        </div>
+                </div>
+
+                <div class="form-group row">
+                    <label for="work-order-return-phone"
+                           class="col-sm-2 col-form-label text-right text-primary"><span
+                            class="text-danger">*</span>联系号码</label>
+                    <div class="form-inline col-sm-10">
+                        <input type="text" id="work-order-return-phone" class="form-control form-control-sm col-12"
+                               v-model="ownerEditWorkOrder['return_phone']" placeholder="联系号码">
                     </div>
+                </div>
+            </template>
+        </template>
+    </template>
 
-                    <hr>
-                    <div class="form-group row">
-                        <label for="deal-image" class="col-sm-2 col-form-label text-right text-primary">交易截图</label>
-                        <div class="col-sm-10">
-                            <div><span class="text-primary">需带有付款时间,快递单号,内物详情和实付款的交易截图</span></div>
-                            <div class="border border-secondary h-auto" id="deal-image" style="min-height: 75px"
-                                 contenteditable="true"
-                                 @paste="pasteImage($event,ownerEditWorKOrder.dealImages)">
-                                <div v-for="(image,i) in ownerEditWorKOrder.dealImages"
-                                     class="d-inline-block col-4 position-relative card">
-                                    <div class="card-body">
-                                        <img :src="image.src" class="card-img-top" :alt="image.file.name">
-                                        <div class="float-right position-relative">
-                                            <button type="button" class="btn btn-sm btn-outline-danger"
-                                                    @click="spliceImage(i,ownerEditWorKOrder.dealImages)">取消
-                                            </button>
-                                        </div>
-                                    </div>
+    <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogShowOwnerVisible = false">关 闭</el-button>
+        <el-button type="primary" @click="ownerEdit">提交</el-button>
+    </div>
+</el-dialog>
+
+<el-dialog title="工单详情" :visible.sync="dialogEditOwnerVisible" width="70%">
+    <div slot="title">
+        <span v-if="'快递丢件' === ownerEditWorkOrder.issue_type_name ">信息填写(货主)</span>
+        <span v-else-if="'错漏发' === ownerEditWorkOrder.issue_type_name">错漏发填写(货主)</span>
+        <span v-else>工单编辑(货主)<span v-text="ownerEditWorkOrder.issue_type_name"></span></span>
+    </div>
+
+    <template v-if="ownerEditWorkOrder.is_edit">
+
+        <template v-if="'快递丢件' === ownerEditWorkOrder.issue_type_name">
+            {{--快递单号--}}
+            <div class="form-group row">
+                <label for="work-order-logistic-number"
+                       class="col-sm-2 col-form-label text-right">丢件快递单号</label>
+                <div class="col-sm-10">
+                    <input type="text" id="work-order-logistic-number" class="form-control form-control-sm"
+                           v-model="ownerEditWorkOrder['logistic_number']" placeholder="快递单号">
+                </div>
+            </div>
+
+            {{--信息更改--}}
+            <div class="form-group row">
+                <hr>
+                <label for="order_issue_type" class="col-sm-2 col-form-label text-right">收方信息</label>
+                <div class="col-sm-10">
+                        <textarea class="form-control form-control-sm" name="" id="remake_info" cols="30" rows="2"
+                                  v-model="ownerEditWorkOrder.remake"></textarea>
+                </div>
+            </div>
+            <hr>
+            {{--破损商品价格--}}
+            <div class="form-group row">
+                <label for="work-order-price" class="col-sm-2 col-form-label text-right text-primary">
+                    <span class="text-danger">*</span>
+                    商品总价值
+                </label>
+                <div class="col-sm-10">
+                    <input type="number" id="work-order-price" class="form-control form-control-sm"
+                           v-model="ownerEditWorkOrder.price"
+                           placeholder="丢件商品总价值">
+                </div>
+            </div>
+
+            <div class="form-group row">
+                <label for="deal-image" class="col-sm-2 col-form-label text-right text-primary">
+                    <span class="text-danger">*</span>
+                    交易截图
+                </label>
+                <div class="col-sm-10">
+                    <div><span class="text-primary">需带有付款时间,快递单号,内物详情和实付款的交易截图</span></div>
+                    <div class="border border-secondary h-auto" id="deal-image" style="min-height: 75px"
+                         contenteditable="true"
+                         @paste="pasteImage($event,ownerEditWorkOrder.dealImages)">
+                        <div v-for="(image,i) in ownerEditWorkOrder.dealImages"
+                             class="d-inline-block col-4 position-relative card">
+                            <div class="card-body">
+                                <img v-if="image.upload_file" :src="image.fileUrl" class="card-img-top">
+                                <img v-else :src="image.src" class="card-img-top">
+                                <div class="float-right position-relative">
+                                    <button type="button" class="btn btn-sm btn-outline-danger"
+                                            @click="ownerEditWorkOrderSpliceImage(i,ownerEditWorkOrder.dealImages)">
+                                        取消
+                                    </button>
                                 </div>
                             </div>
                         </div>
                     </div>
-                    <hr>
-                    <div class="form-group row" v-show="!ownerEditWorKOrder['reissue_logistic_number']">
-                        <label for="refund-image" class="col-sm-2 col-form-label text-right text-primary">退款成功截图</label>
-                        <div class="col-sm-10">
-                            <div class="border border-secondary h-auto" id="refund-image" style="min-height: 75px"
-                                 contenteditable="true"
-                                 @paste="pasteImage($event,ownerEditWorKOrder.refundImages)">
-                                <div v-for="(image,i) in ownerEditWorKOrder.refundImages"
-                                     class="d-inline-block col-4 position-relative card">
-                                    <div class="card-body">
-                                        <img :src="image.src" class="card-img-top" :alt="image.file.name">
-                                        <div class="float-right position-relative">
-                                            <button type="button" class="btn btn-sm btn-outline-danger"
-                                                    @click="spliceImage(i,ownerEditWorKOrder.refundImages)">取消
-                                            </button>
-                                        </div>
-                                    </div>
+                </div>
+            </div>
+            <hr>
+            <div class="form-group row">
+                <label for="refund-image"
+                       class="col-sm-2 col-form-label text-right text-primary">
+                    <span class="text-danger">*</span>
+                    <span>退款成功截图<br/>或补发单号</span>
+                </label>
+                <div class="col-sm-10">
+                    <div class="border border-secondary h-auto" id="edit-refund-image" style="min-height: 75px"
+                         contenteditable="true"
+                         @paste="pasteRefundImagesOrReissueLogisticNumber($event,ownerEditWorkOrder.refundImages)"
+                         ref="refund-image-edit-reissue_logistic_number"
+                         @input="editOwnerReissueLogisticNumber">
+                        <div v-for="(image,i) in ownerEditWorkOrder.refundImages"
+                             contenteditable="false"
+                             class="d-inline-block col-4 position-relative card">
+                            <div class="card-body">
+                                <img v-if="image.upload_file" :src="image.fileUrl" class="card-img-top">
+                                <img v-else :src="image.src" class="card-img-top">
+                                <div class="float-right position-relative">
+                                    <button type="button" class="btn btn-sm btn-outline-danger"
+                                            @click="ownerEditWorkOrderSpliceImage(i,ownerEditWorkOrder.refundImages)">
+                                        取消
+                                    </button>
                                 </div>
                             </div>
                         </div>
                     </div>
-                    <div>
-                        <table class="table text-center">
-                            <thead>
-                            <tr>
-                                <td>快递单号</td>
-                                <td>商品</td>
-                                <td>商品条码</td>
-                                <td>订单数量</td>
-                                <td>丢件商品价值</td>
-                                <td>异常数量</td>
-                                <td></td>
+                </div>
+            </div>
+            <hr>
+            <div>
+                <table class="table table-sm table-bordered table-hover">
+                    <thead>
+                    <tr>
+                        <th>快递单号</th>
+                        <th>商品</th>
+                        <th>商品条码</th>
+                        <th>订单数量</th>
+                        <th>异常数量</th>
+                        <th></th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    <tr v-for="(item,i) in  ownerEditWorkOrder.commodities" class="border border-bottom">
+                        <td v-if="item.count" v-text="item.logistic_number"
+                            class="align-middle border border-left border-bottom" :rowspan="item.count">
+                        </td>
+                        <td v-text="item.commodity ? item.commodity.name : ''">
+                        </td>
+                        <td v-text="item.sku">
+                        </td>
+                        <td v-text="item.amount">
+                        </td>
+                        <td>
+                            <input type="number" class="form-control form-control-sm"
+                                   v-model="item.abnormal_amount">
+                        </td>
+                        <td>
+                            <button type="button" class="close"
+                                    @click="sumPrice(ownerEditWorkOrder),countByCommodities(ownerEditWorkOrder.commodities),ownerEditWorkOrderSpliceCommodity(i,item)">
+                                <span aria-hidden="true" class="text-danger">&times;</span>
+                            </button>
+                        </td>
+                    </tr>
+                    </tbody>
+                </table>
+            </div>
+        </template>
+
+        <template v-else-if="'错漏发' === ownerEditWorkOrder.issue_type_name">
+            <template v-if="'宝时处理' === ownerEditWorkOrder.status">
+                <div>
+                    <table class="table table-sm table-bordered table-hover">
+                        <thead>
+                        <tr>
+                            <th>快递单号</th>
+                            <th>商品</th>
+                            <th>商品条码</th>
+                            <th>订单数量</th>
+                            <th>异常类型</th>
+                            <th>客户实收数量</th>
+                            <th>操作</th>
+                        </tr>
+                        </thead>
+                        <tbody>
+                        <template v-for="(item,i) in  ownerEditWorkOrder.commodities">
+                            <tr v-if="item.tag === false">
+                                <td v-if="item.count" v-text="item.logistic_number"
+                                    class="align-middle border border-left border-bottom" :rowspan="item.count">
+                                </td>
+                                <td v-text="item.commodity  ? item.commodity.name : ''"></td>
+                                <td v-text="item.sku"></td>
+                                <td v-text="item.amount"></td>
+                                <td v-text="item.abnormal_type"></td>
+                                <td>
+                                    <input type="number" class="form-control form-control-sm"
+                                           v-model="item.abnormal_amount"
+                                           @input="ownerComputeAbnormalType(item)">
+                                </td>
+                                <td>
+                                    <button type="button" class="close"
+                                            @click="ownerMistakeWorkOrderTag(item),groupMistakeWorkOrder()">
+                                        <span aria-hidden="true" class="text-danger">&times;</span>
+                                    </button>
+                                </td>
                             </tr>
-                            </thead>
-                            <tbody>
-                            <tr v-for="(item,i) in  ownerEditWorKOrder.commodities" class="border border-bottom">
-                                <td v-if="item.count" v-text="item.logistic_number" class="align-middle border border-left border-bottom" :rowspan="item.count">
+                            <tr v-if="hasStoreNumber(item)">
+                                <td colspan="3">
+                                    <div class="row">
+                                        <label class="col-form-label col-sm-4 text-right">入库单号</label>
+                                        <div class="col-sm-8 form-inline">
+                                            <input type="text" class="form-control form-control-sm col-12"
+                                                   v-model="item.store_in_number"
+                                                   placeholder="入库单号"
+                                                   @input="autoComputeStoreInAmount(item)">
+                                        </div>
+                                    </div>
                                 </td>
-                                <td v-text="item.name">
+                                <td colspan="3">
+                                    <div class="row">
+                                        <label class="col-form-label col-sm-12 ">
+                                            入库数量
+                                            <span v-if="item.store_in_amount" v-text="item.store_in_amount"></span>
+                                            <span v-else class="text-muted">填写入库单后自动计算入库数量</span>
+                                        </label>
+                                    </div>
                                 </td>
-                                <td v-text="item.sku">
+                            </tr>
+
+                            <tr v-if="item.process_result_info === '商家做出库单(物流选自提,宝时不发货)'">
+                                <td colspan="8">
+                                    <div class="row">
+                                        <label class="col-form-label text-right col-sm-4">
+                                            出库订单号
+                                        </label>
+                                        <div class="form-inline col-sm-8 row">
+                                            <input type="text" class="form-control form-control-sm col-sm-12"
+                                                   v-model="item.out_order_number"
+                                                   placeholder="出库订单号">
+                                        </div>
+                                    </div>
                                 </td>
-                                <td v-text="item.amount">
+                            </tr>
+                        </template>
+                        </tbody>
+                    </table>
+                </div>
+            </template>
+
+            <template v-else-if="'宝时终审' === ownerEditWorkOrder.status">
+                <div class="form-group row">
+                    <table class="table table-sm table-bordered table-hover">
+                        <thead>
+                        <tr>
+                            <th>快递单号</th>
+                            <th>商品</th>
+                            <th>商品条码</th>
+                            <th>订单数量</th>
+                            <th>异常类型</th>
+                            <th>客户实收数量</th>
+                            <th>宝时核实数量</th>
+                            <th>宝时核实结果</th>
+                            <th>商家核实结果</th>
+                            <th>商家处理</th>
+                        </tr>
+                        </thead>
+                        <tbody>
+                        <template v-for="(item,i) in  ownerEditWorkOrder.commodities">
+                            <tr v-if="item.tag === false">
+                                <td v-if="item.count" v-text="item.logistic_number"
+                                    class="align-middle border border-left border-bottom"
+                                    :rowspan="item.count">
                                 </td>
+                                <td class="text-wrap" v-text="item.commodity  ? item.commodity.name : ''"></td>
+                                <td class="text-wrap" v-text="item.sku"></td>
+                                <td v-text="item.amount"></td>
+                                <td v-text="item.abnormal_type"></td>
+                                <td v-text="item.abnormal_amount"></td>
+                                <td v-text="item.bao_shi_check_amount"></td>
+                                <td v-text="item.check_result"></td>
                                 <td>
-                                    <input type="number" class="form-control form-control-sm" v-model="item.price" @input="sumPrice(ownerEditWorKOrder)">
+                                    <select class="form-control form-control-sm" v-model="item.process_result"
+                                            @change="item.process_result_info = '' ,countCommoditiesByLogisticNumber(ownerEditWorkOrder.commodities,item)">
+                                        <option v-for="item in getProcessResult(item.check_result,item)" :value="item"
+                                                v-text="item"></option>
+                                    </select>
                                 </td>
                                 <td>
-                                    <input type="number" class="form-control form-control-sm" v-model="item.abnormal_amount" >
+                                    <select class="form-control form-control-sm" v-model="item.process_result_info"
+                                            @change="ownerGroupCommodities(ownerEditWorkOrder.commodities),checkWorkOrderCommodityMistake(item)">
+                                        <option
+                                            v-for="item in getOwnerMistakeProcessResultInfo(item.process_result,item)"
+                                            :value="item"
+                                            v-text="item"></option>
+                                    </select>
                                 </td>
-                                <td >
-                                    <button type="button" class="close" @click="ownerEditWorKOrder.commodities.splice(i,1),sumPrice(ownerEditWorKOrder),countByCommodities(ownerEditWorKOrder.commodities)">
-                                        <span aria-hidden="true" class="text-danger">&times;</span>
-                                    </button>
+                            </tr>
+                            <tr v-if="hasStoreNumber(item)" class="bg-light">
+                                <template v-if="item.store_in_number">
+                                    <td colspan="5">
+                                        <div class="row">
+                                            <label class="col-form-label col-sm-4 text-right">
+                                                入库单号
+                                            </label>
+                                            <div class="col-sm-8 form-inline row">
+                                                <input type="text" class="form-control form-control-sm col-12"
+                                                       v-model="item.store_in_number">
+                                            </div>
+                                        </div>
+                                    </td>
+                                    <td colspan="4" v-text="'入库数量:'+item.store_in_amount"></td>
+                                </template>
+                            </tr>
+                            <tr v-else-if="hasOutInNumber(item)" class="bg-light">
+                                <td colspan="9">
+                                    <div class="row">
+                                        <label class="col-form-label col-sm-4 text-right">
+                                            出库订单号
+                                        </label>
+                                        <div class="form-inline col-sm-8 row">
+                                            <input type="text" class="form-control form-control-sm col-12"
+                                                   v-model="item.out_order_number">
+                                        </div>
+                                    </div>
                                 </td>
                             </tr>
-                            </tbody>
-                        </table>
-                    </div>
+                        </template>
+                        </tbody>
+                    </table>
                 </div>
-            </div>
-            <div class="modal-body" v-if="'待货主完结' === ownerEditWorKOrder.status && '错漏发' === ownerEditWorKOrder.issue_type_name">
-                {{--退回快递单号--}}
-                <div class="form-group row" v-if="hasReturnLogisticNumber(ownerEditWorKOrder.commodities)">
-                    <label for="work-order-logistic-number"
-                           class="col-sm-2 col-form-label text-right"><span class="text-danger">*</span>退回快递单号</label>
+                {{--退回单号--}}
+                <div class="form-group row" v-if="hasReturnLogisticNumber(ownerEditWorkOrder.commodities)">
+                    <label class="col-form-label col-sm-2 text-right text-primary">
+                        <span class="text-danger">*</span>
+                        退回单号
+                    </label>
                     <div class="col-sm-10">
-                        <input type="text" id="work-order-logistic-number" class="form-control"
-                               v-model="ownerEditWorKOrder['return_logistic_number']" placeholder="退回快递单号">
+                        <input type="text" class="form-control form-control-sm"
+                               v-model="ownerEditWorkOrder.return_logistic_number">
                     </div>
                 </div>
-                <template v-if="hasReturnAddressInfo(ownerEditWorKOrder.commodities)">
-                    {{--上门取件-联系人--}}
+                {{--退件人信息--}}
+                <template v-if="hasReturnAddressInfo(ownerEditWorkOrder.commodities)">
                     <div class="form-group row">
-                        <label for="work-order-logistic-number"
-                               class="col-sm-2 col-form-label text-right"><span class="text-danger">*</span>联系人</label>
+                        <label class="col-form-label col-sm-2 text-right text-primary">
+                            <span class="text-danger">*</span>
+                            退件人姓名
+                        </label>
                         <div class="col-sm-10">
-                            <input type="text" id="work-order-logistic-number" class="form-control"
-                                   v-model="ownerEditWorKOrder['return_name']" placeholder="联系人">
+                            <input type="text" class="form-control form-control-sm"
+                                   v-model="ownerEditWorkOrder.return_name">
                         </div>
                     </div>
-                    {{--上门取件-地址--}}
                     <div class="form-group row">
-                        <label for="work-order-logistic-number"
-                               class="col-sm-2 col-form-label text-right"><span class="text-danger">*</span>地址</label>
+                        <label class="col-form-label col-sm-2 text-right text-primary">
+                            <span class="text-danger">*</span>
+                            退件人联系号码
+                        </label>
                         <div class="col-sm-10">
-                            <input type="text" id="work-order-logistic-number" class="form-control"
-                                   v-model="ownerEditWorKOrder['return_address']" placeholder="地址">
+                            <input type="text" class="form-control form-control-sm"
+                                   v-model="ownerEditWorkOrder.return_phone">
                         </div>
                     </div>
-                    {{--上门取件-联系号码--}}
                     <div class="form-group row">
-                        <label for="work-order-logistic-number"
-                               class="col-sm-2 col-form-label text-right"><span class="text-danger">*</span>联系号码</label>
+                        <label class="col-form-label col-sm-2 text-right text-primary">
+                            <span class="text-danger">*</span>
+                            退件人地址
+                        </label>
                         <div class="col-sm-10">
-                            <input type="text" id="work-order-logistic-number" class="form-control"
-                                   v-model="ownerEditWorKOrder['return_phone']" placeholder="联系号码">
+                            <input type="text" class="form-control form-control-sm"
+                                   v-model="ownerEditWorkOrder.return_address">
                         </div>
                     </div>
                 </template>
 
-                <table class="table text-center border">
-                    <thead>
-                    <tr>
-                        <td>快递单号</td>
-                        <td>商品</td>
-                        <td>商品条码</td>
-                        <td>订单数量</td>
-                        <td>异常数量</td>
-                        <td>宝时复核数量</td>
-                        <td>复核结果</td>
-                        <td>处理</td>
-                        <td>处理详情</td>
-                    </tr>
-                    </thead>
-                    <tbody>
-                    <tr v-for="(item,i) in  ownerEditWorKOrder.commodities" class="border border-bottom">
-                        <td v-if="item.count" v-text="item.logistic_number" class="align-middle border border-left border-bottom" :rowspan="item.count">
-                        </td>
-                        <td v-text="item.name"></td>
-                        <td v-text="item.sku"></td>
-                        <td v-text="item.amount"></td>
-                        <td v-text="item.abnormal_amount"></td>
-                        <td v-text="item.bao_shi_check_amount"></td>
-                        <td v-text="item.check_result"></td>
-                        <td>
-                            <select class="form-control form-control-sm" v-model="item.process_result">
-                                <option v-for="item in getProcessResult(item.check_result,item)" :value="item" v-text="item"></option>
-                            </select>
-                        </td>
-                        <td>
-                            <select class="form-control form-control-sm" v-model="item.process_result_info">
-                                <option v-for="item in getProcessResultInfo(item.process_result,item)" :value="item" v-text="item"></option>
-                            </select>
-                        </td>
-                    </tr>
-                    </tbody>
-                </table>
+            </template>
+        </template>
+
+        <template v-else-if="'快递异常' === ownerEditWorkOrder.issue_type_name">
+            {{--            <div class="form-group row">--}}
+            {{--                <hr>--}}
+            {{--                <label for="owner-work-order-edit-remark"--}}
+            {{--                       class="col-sm-2 col-form-label text-right">问题描述</label>--}}
+            {{--                <div class="col-sm-10">--}}
+            {{--                        <textarea class="form-control form-control-sm" id="remake_info" cols="30" rows="2"--}}
+            {{--                                  v-model="ownerEditWorkOrder.remark"></textarea>--}}
+            {{--                </div>--}}
+            {{--            </div>--}}
+            <div class="form-group row">
+                <label for="work-order-edit-type" class="col-sm-2 col-form-label text-right text-primary">
+                    <span class="text-danger">*</span>
+                    异常类型
+                </label>
+                <div class="col-sm-10">
+                    <select class="form-control form-control-sm" v-model="ownerEditWorkOrder.type">
+                        <option v-for="item in ['在途异常','签收未收到']" :value="item" v-text="item"></option>
+                    </select>
+                </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="ownerEdit">提交
 
-                </button>
+            <div class="form-group row">
+                <label for="deal-image" class="col-sm-2 col-form-label text-right text-primary">
+                    <span class="text-danger">*</span>
+                    交易截图
+                </label>
+                <div class="col-sm-10">
+                    <div><span class="text-primary">需带有付款时间,快递单号,内物详情和实付款的交易截图</span></div>
+                    <div class="border border-secondary h-auto" id="deal-image" style="min-height: 75px"
+                         contenteditable="true"
+                         @paste="pasteImage($event,ownerEditWorkOrder.dealImages)">
+                        <div v-for="(image,i) in ownerEditWorkOrder.dealImages"
+                             class="d-inline-block col-4 position-relative card">
+                            <div class="card-body">
+                                <img v-if="image.upload_file" :src="image.fileUrl" class="card-img-top">
+                                <img v-else :src="image.src" class="card-img-top">
+                                <div class="float-right position-relative">
+                                    <button type="button" class="btn btn-sm btn-outline-danger"
+                                            @click="ownerEditWorkOrderSpliceImage(i,ownerEditWorkOrder.refundImages)">
+                                        取消
+                                    </button>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+
+            <div class="form-group row">
+                <label for="work-order-sku-amount"
+                       class="col-sm-2 col-form-label text-right text-primary">
+                    快递单号
+                </label>
+                <div class="col-sm-10">
+                    <table class="table table-bordered table-grid-row table-sm table-hover text-center">
+                        <thead>
+                        <tr>
+                            <th>快递单号</th>
+                            <th>勾选</th>
+                        </tr>
+                        </thead>
+                        <tbody>
+                        <tr v-for="(item,i) in ownerEditWorkOrder.commodities">
+                            <td v-text="item.logistic_number"></td>
+                            <td>
+                                <div class="form-check">
+                                    <input class="form-check-input" type="checkbox" :id="'logistic_number_'+i"
+                                           v-model="item.selected">
+                                    <label class="form-check-label" :for="'logistic_number_'+i">
+                                    </label>
+                                </div>
+                            </td>
+                        </tr>
+                        </tbody>
+                    </table>
+                </div>
+            </div>
+        </template>
+
+        <template v-else-if="'破损' === ownerEditWorkOrder.issue_type_name">
+
+            <div class="form-group row">
+                <label for="deal-image" class="col-sm-2 col-form-label text-right text-primary">
+                    <span class="text-danger">*</span>
+                    外包装图片
+                </label>
+                <div class="col-sm-10">
+                    <div class="border border-secondary h-auto" id="deal-image" style="min-height: 75px"
+                         contenteditable="true"
+                         @paste="pasteImage($event,ownerEditWorkOrder.packageImages)">
+                        <div v-for="(image,i) in ownerEditWorkOrder.packageImages"
+                             class="d-inline-block col-4 position-relative card">
+                            <div class="card-body">
+                                <img v-if="image.upload_file" :src="image.fileUrl" class="card-img-top">
+                                <img v-else :src="image.src" class="card-img-top">
+                                <div class="float-right position-relative">
+                                    <button type="button" class="btn btn-sm btn-outline-danger"
+                                            @click="ownerEditWorkOrderSpliceImage(i,ownerEditWorkOrder.packageImages)">
+                                        取消
+                                    </button>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="form-group row">
+                <label for="deal-image" class="col-sm-2 col-form-label text-right text-primary">
+                    <span class="text-danger">*</span>
+                    内物破损图
+                </label>
+                <div class="col-sm-10">
+                    <div class="border border-secondary h-auto" id="deal-image" style="min-height: 75px"
+                         contenteditable="true"
+                         @paste="pasteImage($event,ownerEditWorkOrder.commodityImages)">
+                        <div v-for="(image,i) in ownerEditWorkOrder.commodityImages"
+                             class="d-inline-block col-4 position-relative card">
+                            <div class="card-body">
+                                <img v-if="image.upload_file" :src="image.fileUrl" class="card-img-top">
+                                <img v-else :src="image.src" class="card-img-top">
+                                <div class="float-right position-relative">
+                                    <button type="button" class="btn btn-sm btn-outline-danger"
+                                            @click="ownerEditWorkOrderSpliceImage(i,ownerEditWorkOrder.commodityImages)">
+                                        取消
+                                    </button>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <hr>
+            <div class="form-group row">
+                <label for="work-order-edit-type" class="col-sm-2 col-form-label text-right text-primary">
+                    <span class="text-danger">*</span>
+                    破损商品总价
+                </label>
+                <div class="col-sm-10">
+                    <input type="text" class="form-control form-control-sm" disabled v-model="ownerEditWorkOrder.price">
+                </div>
+            </div>
+
+            <div class="form-group row">
+                <label for="deal-image" class="col-sm-2 col-form-label text-right text-primary">
+                    <span class="text-danger">*</span>
+                    交易截图
+                </label>
+                <div class="col-sm-10">
+                    <div><span class="text-primary">需带有付款时间,快递单号,内物详情和实付款的交易截图</span></div>
+                    <div class="border border-secondary h-auto" id="deal-image" style="min-height: 75px"
+                         contenteditable="true"
+                         @paste="pasteImage($event,ownerEditWorkOrder.dealImages)">
+                        <div v-for="(image,i) in ownerEditWorkOrder.dealImages"
+                             class="d-inline-block col-4 position-relative card">
+                            <div class="card-body">
+                                <img v-if="image.upload_file" :src="image.fileUrl" class="card-img-top">
+                                <img v-else :src="image.src" class="card-img-top">
+                                <div class="float-right position-relative">
+                                    <button type="button" class="btn btn-sm btn-outline-danger"
+                                            @click="ownerEditWorkOrderSpliceImage(i,ownerEditWorkOrder.dealImages)">
+                                        取消
+                                    </button>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+
+            <div class="form-group row">
+                <label for="work-order-sku-amount"
+                       class="col-sm-2 col-form-label text-right text-primary">
+                    破损商品信息
+                </label>
+                <div class="col-sm-10">
+                    <table class="table table-bordered table-sm table-hover ">
+                        <thead>
+                        <tr>
+                            <th>快递单号</th>
+                            <th>商品条码</th>
+                            <th>异常类型</th>
+                            <th>商品名称</th>
+                            <th>订单数量</th>
+                            <th>破损单价</th>
+                            <th>异常数量</th>
+                            <th></th>
+                        </tr>
+                        </thead>
+                        <tbody>
+                        <template v-for="(item,i) in ownerEditWorkOrder.commodities">
+                            <tr v-show="!item.tag">
+                                <td
+                                    class="text-center align-middle"
+                                    v-if="item.count"
+                                    v-text="item.logistic_number"
+                                    :rowspan="item.count"></td>
+                                <td v-text="item.sku"></td>
+                                <td>破损</td>
+                                <td v-text="item.commodity ? item.commodity.name : ''"></td>
+                                <td v-text="item.amount"></td>
+                                <td>
+                                    <input type="text" class="form-control form-control-sm" v-model="item.price"
+                                           @input="sumPrice(ownerEditWorkOrder)">
+                                </td>
+                                <td>
+                                    <input type="number" class="form-control form-control-sm"
+                                           v-model="item.abnormal_amount" @input="sumPrice(ownerEditWorkOrder)">
+                                </td>
+                                <td>
+                                    <button type="button" class="close"
+                                            @click="ownerDamageWorkOrderTag(item),groupDamageWorkOrder()">
+                                        <span aria-hidden="true" class="text-danger">&times;</span>
+                                    </button>
+                                </td>
+                            </tr>
+                            <tr>
+
+                            </tr>
+                        </template>
+                        </tbody>
+                    </table>
+                </div>
+            </div>
+        </template>
+
+        <template v-else-if="'信息更改' === ownerEditWorkOrder.issue_type_name">
+            <div class="form-group row">
+                <hr>
+                <label for="owner-work-order-edit-remark"
+                       class="col-sm-2 col-form-label text-right">问题描述</label>
+                <div class="col-sm-10">
+                        <textarea class="form-control form-control-sm" name="" id="remake_info" cols="30" rows="5"
+                                  v-model="ownerEditWorkOrder.remark"></textarea>
+                </div>
             </div>
-        </div>
+        </template>
+    </template>
+
+
+    <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogEditOwnerVisible = false">关 闭</el-button>
+        <el-button type="primary" @click="ownerEdit">提交</el-button>
     </div>
-</div>
+</el-dialog>

+ 112 - 50
resources/views/order/workOrder/_work_order_details.blade.php

@@ -16,34 +16,36 @@
     <div class="alert alert-light mb-0 border"
          v-show="selectDetailId === item.id"
          v-for="(detail,index) in (item.details ? item.details : [])" :key="item.id+'_detail'+index">
-            <div class="col-12 border-top">
+        <div class="col-12 border-top">
                 <span
                     class="badge float-right"
                     :class="getBadgeColor(detail.tag)"
                     v-text="detail.issue_type ? detail.issue_type.name : ''"></span>
-                <span >创建时间:</span>
-                <span v-text="detail.created_at"></span>
-            </div>
-            <div v-if="Number(detail.price) !== 0" class="col-12">
-                <span class="text-monospace">商品价值:</span>
-                <span v-text="detail.price"></span>
-            </div>
-            <div v-if="detail.return_logistic_number" class="col-12">
-                <span class="text-monospace">退回单号:</span>
-                <span v-text="detail.return_logistic_number"></span>
-            </div>
-            <div v-if="detail.return_name" class="col-12">
-                <span class="text-monospace">寄件人:</span>
-                <span v-text="detail.return_name"></span>
-            </div>
-            <div v-if="detail.return_address" class="col-12">
-                <span class="text-monospace">地址:</span>
-                <span v-text="detail.return_address"></span>
-            </div>
-            <div v-if="detail.return_phone" class="col-12">
-                <span class="text-monospace">联系号码:</span>
-                <span v-text="detail.return_phone"></span>
-            </div>
+            <span>创建时间:</span>
+            <span v-text="detail.created_at"></span>
+        </div>
+        <div v-if="Number(detail.price) > 0" class="col-12">
+            <span class="text-monospace" v-if="'破损' === item.issue_type_name">破损商品总价:</span>
+            <span class="text-monospace" v-else-if="'快递丢件' === item.issue_type_name">丢件商品总价:</span>
+            <span class="text-monospace" v-else>商品价值:</span>
+            <span v-text="detail.price"></span>
+        </div>
+        <div v-if="detail.return_logistic_number" class="col-12">
+            <span class="text-monospace">退回单号:</span>
+            <span v-text="detail.return_logistic_number"></span>
+        </div>
+        <div v-if="detail.return_name" class="col-12">
+            <span class="text-monospace">寄件人:</span>
+            <span v-text="detail.return_name"></span>
+        </div>
+        <div v-if="detail.return_address" class="col-12">
+            <span class="text-monospace">地址:</span>
+            <span v-text="detail.return_address"></span>
+        </div>
+        <div v-if="detail.return_phone" class="col-12">
+            <span class="text-monospace">联系号码:</span>
+            <span v-text="detail.return_phone"></span>
+        </div>
     </div>
 </transition-group>
 
@@ -64,16 +66,15 @@
                          :class="getBadgeColor(dealImage.tag)"
                    ></span>
                     <a target="_blank"
-                       v-if="dealImage.upload_file"
-                       :href="filePrefix+dealImage.upload_file.url + '.'+dealImage.upload_file.type">
+                       v-if="dealImage.urlExist"
+                       :href="dealImage.fileUrl">
                         <img class="image-w border"
-                             :src="filePrefix+dealImage.upload_file.url + '.'+dealImage.upload_file.type"
+                             :src="dealImage.fileUrl"
                              alt="交易截图">
                     </a>
                 </div>
             </div>
         </div>
-
     </div>
 </transition>
 
@@ -88,18 +89,16 @@
         <div class="card-group">
             <div class="card-body col-sm-6 p-0"
                  v-for="(refundImage,i) in item.refund_images">
-                <div class="">
-                       <span class="badge float-right"
-                             v-text="refundImage.issue_type_name+refundImage.tag"
-                             :class="getBadgeColor(refundImage.tag)"></span>
+                   <span class="badge float-right"
+                         v-text="refundImage.issue_type_name+refundImage.tag"
+                         :class="getBadgeColor(refundImage.tag)"></span>
                     <a target="_blank"
-                       v-if="refundImage.upload_file"
-                       :href="filePrefix+refundImage.upload_file.url + '.'+refundImage.upload_file.type">
-                        <img class="image-w border"
-                             :src="filePrefix+refundImage.upload_file.url + '.'+refundImage.upload_file.type"
-                             alt="退款截图">
-                    </a>
-                </div>
+                   v-if="refundImage.urlExist"
+                   :href="refundImage.fileUrl">
+                    <img class="image-w border"
+                         :src="refundImage.fileUrl"
+                         alt="退款截图">
+                </a>
             </div>
         </div>
     </div>
@@ -119,10 +118,10 @@
                   v-text="packageImage.issue_type_name"
                   :class="getBadgeColor(packageImage.tag)"></span>
                 <a target="_blank"
-                   v-if="packageImage.upload_file"
-                   :href="filePrefix+packageImage.upload_file.url + '.'+packageImage.upload_file.type">
+                   v-if="packageImage.urlExist"
+                   :href="packageImage.fileUrl">
                     <img class="image-w border"
-                         :src="filePrefix+packageImage.upload_file.url + '.'+packageImage.upload_file.type"
+                         :src="packageImage.fileUrl"
                          alt="外包装截图">
                 </a>
             </div>
@@ -181,12 +180,18 @@
                       v-text="commodity.amount"></span>
             </div>
             <div v-if="commodity.price > 0">
-                <span class="mr-3">商品价值:</span>
+                <span class="mr-3" v-if="'破损' === commodity.issue_type">破损商品价值单价:</span>
+                <span class="mr-3" v-else>商品价值:</span>
                 <span class="text-truncate"
                       v-text="commodity.price"></span>
             </div>
-            <div v-if="'错漏发' === commodity.issue_type">
-                <span class="mr-3">客户实收数量:</span>
+            <div v-if="['错漏发','快递异常'].includes(commodity.issue_type)">
+                 <span class="mr-3" v-if="'错漏发' === commodity.issue_type">
+                    客户实收数量:
+                </span>
+                <span class="mr-3" v-if="'快递异常' === commodity.issue_type">
+                    异常数量:
+                </span>
                 <span class="text-truncate"
                       v-text="commodity.abnormal_amount"></span>
             </div>
@@ -220,13 +225,40 @@
                 <span class="text-truncate"
                       v-text="commodity.process_result_info"></span>
             </div>
+
+            <div v-if="commodity.out_order_number ">
+                <span class="mr-3">出库单号:</span>
+                <span class="text-truncate"
+                      v-text="commodity.out_order_number"></span>
+            </div>
+
+            <div v-if="commodity.reissue_logistic_number ">
+                <span class="mr-3">补发单号:</span>
+                <span class="text-truncate"
+                      v-text="commodity.reissue_logistic_number"></span>
+            </div>
+
+            <div v-if="commodity.store_in_number">
+                <span class="mr-3">入库单号:</span>
+                <span class="text-truncate"
+                      v-text="commodity.store_in_number"></span>
+            </div>
+
+            <div v-if="commodity.store_in_amount">
+                <span class="mr-3">入库数量:</span>
+                <span class="text-truncate"
+                      v-text="commodity.store_in_amount"></span>
+            </div>
+
+
         </div>
     </div>
 </transition>
 <transition name="fade" :key="item.id+'pending_detail_commodities_transition'">
     <div class="alert alert-light mb-0 border-top border "
          v-show="selectDetailId === item.id"
-         v-if="item.pending_detail && item.pending_detail.commodities.length > 0" :key="item.id+'pending_detail_commodities'">
+         v-if="item.pending_detail && item.pending_detail.commodities.length > 0"
+         :key="item.id+'pending_detail_commodities'">
         <div class="col-12">
             <div class="text-monospace">当前待处理商品详情</div>
         </div>
@@ -251,7 +283,8 @@
                       v-text="commodity.amount"></span>
             </div>
             <div v-if="commodity.price > 0">
-                <span class="mr-3">商品价值:</span>
+                <span class="mr-3" v-if="'破损' === commodity.issue_type">破损商品价值单价:</span>
+                <span class="mr-3" v-else>商品价值:</span>
                 <span class="text-truncate"
                       v-text="commodity.price"></span>
             </div>
@@ -265,10 +298,15 @@
                 <span class="text-truncate"
                       v-text="commodity.check_amount"></span>
             </div>
-            <div v-if="'错漏发' === commodity.issue_type">
-                <span class="mr-3">问题类型:</span>
+            <div v-if="['错漏发','快递异常'].includes(commodity.issue_type)">
+                 <span class="mr-3" v-if="'错漏发' === commodity.issue_type">
+                    客户实收数量:
+                </span>
+                <span class="mr-3" v-if="'快递异常' === commodity.issue_type">
+                    异常数量:
+                </span>
                 <span class="text-truncate"
-                      v-text="commodity.abnormal_type"></span>
+                      v-text="commodity.abnormal_amount"></span>
             </div>
             <div v-if="commodity.bao_shi_check_amount || commodity.check_result">
                 <span class="mr-3">宝时核实数量:</span>
@@ -290,6 +328,30 @@
                 <span class="text-truncate"
                       v-text="commodity.process_result_info"></span>
             </div>
+
+            <div v-if="commodity.out_order_number ">
+                <span class="mr-3">出库单号:</span>
+                <span class="text-truncate"
+                      v-text="commodity.out_order_number"></span>
+            </div>
+
+            <div v-if="commodity.reissue_logistic_number ">
+                <span class="mr-3">补发单号:</span>
+                <span class="text-truncate"
+                      v-text="commodity.reissue_logistic_number"></span>
+            </div>
+
+            <div v-if="commodity.store_in_number">
+                <span class="mr-3">入库单号:</span>
+                <span class="text-truncate"
+                      v-text="commodity.store_in_number"></span>
+            </div>
+
+            <div v-if="commodity.store_in_amount">
+                <span class="mr-3">入库数量:</span>
+                <span class="text-truncate"
+                      v-text="commodity.store_in_amount"></span>
+            </div>
         </div>
     </div>
 </transition>

+ 514 - 0
resources/views/order/workOrder/_work_order_show.blade.php

@@ -0,0 +1,514 @@
+<el-dialog title="工单详情" :visible.sync="dialogShowOrderWorkVisible" width="70%">
+    <template v-if="showWorkOrder">
+        <div class="modal-body" v-if="'拦截' === showWorkOrder.issue_type_name">
+            <div class="form-group row">
+                <label for="show-work-order-package-images" class="col-form-label col-sm-2 text-right">
+                    当前进度
+                </label>
+                <label class="col-form-label col-sm-10 text-monospace" v-text="showWorkOrder.process_progress"></label>
+            </div>
+        </div>
+
+        <div class="modal-body" v-if="'信息更改' === showWorkOrder.issue_type_name">
+            <div class="form-group row">
+                <label for="show-work-order-package-images" class="col-form-label col-sm-2 text-right">
+                    当前进度
+                </label>
+                <label class="col-form-label col-sm-10 text-monospace"
+                       v-text="showWorkOrder.process_progress"></label>
+            </div>
+            <div class="form-group row">
+                <label for="show-work-order-package-images" class="col-form-label col-sm-2 text-right">
+                    修改信息
+                </label>
+                <label class="col-form-label col-10 text-monospace" v-text="showWorkOrder.remark">></label>
+
+            </div>
+        </div>
+
+        <div class="modal-body" v-if="'破损' === showWorkOrder.issue_type_name">
+
+            <div class="form-group row">
+                <label for="show-work-order-sum-price" class="col-form-label col-sm-2 text-right">
+                    破损商品总价值
+                </label>
+                <label for="show-work-order-sum-price" class="col-form-label col-sm-10 text-monospace"
+                       v-text="showWorkOrder.price">
+                </label>
+            </div>
+            <hr>
+            <div class="form-group row">
+                <label for="show-work-order-package-images" class="col-form-label col-sm-2 text-right">
+                    外包装图片
+                </label>
+                <div class="col-sm-10">
+                    <div class="card-group">
+                        <div class="card-body col-sm-6" v-for="item in showWorkOrder.package_images">
+                            <a target="_blank" :href="item.fileUrl">
+                                <img class="image-w border" :src="item.fileUrl">
+                            </a>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <hr>
+
+            <div class="form-group row">
+                <label for="show-work-order-package-images" class="col-form-label col-sm-2 text-right">
+                    内物破损图
+                </label>
+                <div class="col-sm-10">
+                    <div class="card-group">
+                        <div class="card-body col-sm-6" v-for="item in showWorkOrder.commodity_images">
+                            <a target="_blank" :href="item.fileUrl">
+                                <img class="image-w border" :src="item.fileUrl">
+                            </a>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <hr>
+
+            <div class="form-group row">
+                <label for="show-work-order-package-images" class="col-form-label col-sm-2 text-right">
+                    交易截图
+                </label>
+                <div class="col-sm-10">
+                    <div class="card-group">
+                        <div class="card-body col-sm-6" v-for="item in showWorkOrder.deal_images">
+                            <a target="_blank" :href="item.fileUrl">
+                                <img class="image-w border" :src="item.fileUrl">
+                            </a>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <hr>
+            <div v-if="'承运商处理' === showWorkOrder.status">
+
+                <table class="table table-sm table-bordered">
+                    <thead>
+                    <tr>
+                        <th>快递单号</th>
+                        <th>sku</th>
+                        <th>异常类型</th>
+                        <th>商品名</th>
+                        <th>订单数量</th>
+                        <th>破损商品单价</th>
+                        <th>异常数量</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    <tr v-for="item in showWorkOrder.commodities">
+                        <td class="align-middle"
+                            v-if="item.count"
+                            :rowspan="item.count"
+                            v-text="item.logistic_number"
+                        ></td>
+                        <td v-text="item.sku"></td>
+                        <td v-text="item.abnormal_type"></td>
+                        <td class="text-wrap" v-text="item.commodity ? item.commodity.name : ''"></td>
+                        <td v-text="item.amount"></td>
+                        <td v-text="item.price"></td>
+                        <td v-text="item.abnormal_amount"></td>
+                    </tr>
+                    </tbody>
+                </table>
+            </div>
+            <div v-if="'宝时终审' === showWorkOrder.status">
+
+                <table class="table table-sm table-bordered">
+                    <thead>
+                    <tr>
+                        <th>快递单号</th>
+                        <th>sku</th>
+                        <th>异常类型</th>
+                        <th>商品名</th>
+                        <th>订单数量</th>
+                        <th>破损商品单价</th>
+                        <th>异常数量</th>
+                        <th>承运商核实数量</th>
+                        <th>异常数量</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    <tr v-for="item in showWorkOrder.commodities">
+                        <td class="align-middle"
+                            v-if="item.count"
+                            :rowspan="item.count"
+                            v-text="item.logistic_number"
+                        ></td>
+                        <td v-text="item.sku"></td>
+                        <td v-text="item.abnormal_type"></td>
+                        <td class="text-wrap" v-text="item.commodity ? item.commodity.name : ''"></td>
+                        <td v-text="item.amount"></td>
+                        <td v-text="item.price"></td>
+                        <td v-text="item.abnormal_amount"></td>
+                        <td v-text="item.check_amount"></td>
+                        <td class="text-wrap" v-text="item.check_result"></td>
+                    </tr>
+                    </tbody>
+                </table>
+            </div>
+            <div v-if="'完成' === showWorkOrder.status">
+                <table class="table table-sm table-bordered">
+                    <thead>
+                    <tr>
+                        <th>快递单号</th>
+                        <th>sku</th>
+                        <th>异常类型</th>
+                        <th>商品名</th>
+                        <th>订单数量</th>
+                        <th>破损商品单价</th>
+                        <th>异常数量</th>
+                        <th>承运商核实数量</th>
+                        <th>宝时复核数量</th>
+                        <th>宝时复核</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    <tr v-for="item in showWorkOrder.commodities">
+                        <td class="align-middle"
+                            v-if="item.count"
+                            :rowspan="item.count"
+                            v-text="item.logistic_number"
+                        ></td>
+                        <td v-text="item.sku"></td>
+                        <td v-text="item.abnormal_type"></td>
+                        <td class="text-wrap" v-text="item.commodity ? item.commodity.name : ''"></td>
+                        <td v-text="item.amount"></td>
+                        <td v-text="item.price"></td>
+                        <td v-text="item.abnormal_amount"></td>
+                        <td v-text="item.check_amount"></td>
+                        <td v-text="item.bao_shi_check_amount"></td>
+                        <td class="text-wrap" v-text="item.process_result"></td>
+                    </tr>
+                    </tbody>
+                </table>
+            </div>
+        </div>
+
+        <div class="modal-body" v-if="'错漏发' === showWorkOrder.issue_type_name">
+            <div class="form-group row" v-if="'宝时处理' === showWorkOrder.status">
+                <table class="table table-sm table-bordered">
+                    <thead>
+                    <tr>
+                        <th>快递单号</th>
+                        <th>商品条码</th>
+                        <th>商品名</th>
+                        <th>订单数量</th>
+                        <th>异常类型</th>
+                        <th>客户实收数量</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    <tr v-for="item in showWorkOrder.commodities">
+                        <td class="align-middle"
+                            v-if="item.count"
+                            :rowspan="item.count"
+                            v-text="item.logistic_number"
+                        ></td>
+                        <td v-text="item.sku"></td>
+                        <td v-text="item.commodity ? item.commodity.name : ''"></td>
+                        <td v-text="item.amount"></td>
+                        <td v-text="item.abnormal_type"></td>
+                        <td v-text="item.abnormal_amount"></td>
+                    </tr>
+                    </tbody>
+                </table>
+            </div>
+
+            <div class="form-group row" v-else-if="'货主处理' === showWorkOrder.status">
+                <table class="table table-sm table-bordered">
+                    <thead>
+                    <tr>
+                        <th>快递单号</th>
+                        <th>商品条码</th>
+                        <th>商品名</th>
+                        <th>订单数量</th>
+                        <th>异常类型</th>
+                        <th>客户实收数量</th>
+                        <th>宝时复核数量</th>
+                        <th>复核结果</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    <tr v-for="item in showWorkOrder.commodities">
+                        <td class="align-middle"
+                            v-if="item.count"
+                            :rowspan="item.count"
+                            v-text="item.logistic_number"
+                        ></td>
+                        <td v-text="item.sku"></td>
+                        <td v-text="item.commodity ? item.commodity.name : ''"></td>
+                        <td v-text="item.amount"></td>
+                        <td v-text="item.abnormal_type"></td>
+                        <td v-text="item.abnormal_amount"></td>
+                        <td v-text="item.bao_shi_check_amount"></td>
+                        <td v-text="item.check_result"></td>
+                    </tr>
+                    </tbody>
+                </table>
+            </div>
+
+            <div class="form-group row" v-else-if="'宝时终审' === showWorkOrder.status">
+                <table class="table table-sm table-bordered">
+                    <thead>
+                    <tr>
+                        <th>快递单号</th>
+                        <th>商品条码</th>
+                        <th>商品名</th>
+                        <th>订单数量</th>
+                        <th>异常类型</th>
+                        <th>客户实收数量</th>
+                        <th>宝时复核数量</th>
+                        <th>复核结果</th>
+                        <th>商家处理</th>
+                        <th>商家详情</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    <template v-for="item in showWorkOrder.commodities">
+                        <tr>
+                            <td class="align-middle"
+                                v-if="item.count"
+                                :rowspan="item.count"
+                                v-text="item.logistic_number"
+                            ></td>
+                            <td v-text="item.sku"></td>
+                            <td v-text="item.commodity ? item.commodity.name : ''"></td>
+                            <td v-text="item.amount"></td>
+                            <td v-text="item.abnormal_type"></td>
+                            <td v-text="item.abnormal_amount"></td>
+                            <td v-text="item.bao_shi_check_amount"></td>
+                            <td v-text="item.check_result"></td>
+                            <td class="text-wrap" v-text="item.process_result"></td>
+                            <td class="text-wrap" v-text="item.process_result_info"></td>
+                        </tr>
+                        <tr v-if="hasOutInNumber(item)">
+                            <td colspan="9" class="row">
+                                <label for="" class="col-form-label col-sm-3 text-right">出库订单号:</label>
+                                <label class="col-form-label col-sm-9 text-monospace"
+                                       v-text="item.out_order_number"></label>
+                            </td>
+                        </tr>
+                        <tr v-else-if="hasStoreNumber(item)">
+                            <td colspan="5">
+                                <div class="row">
+                                    <label for="" class="col-form-label col-sm-3 text-right">入库单号:</label>
+                                    <label class="col-form-label col-sm-9 text-monospace text-success"
+                                           v-text="item.store_in_number"></label>
+                                </div>
+                            </td>
+                            <td colspan="4">
+                                <div class="row">
+                                    <label for="" class="col-form-label col-sm-3 text-right">入库数量:</label>
+                                    <label class="col-form-label col-sm-9 text-monospace"
+                                           v-text="item.store_in_amount"></label>
+                                </div>
+                            </td>
+                        </tr>
+                    </template>
+                    </tbody>
+                </table>
+            </div>
+
+            <div class="form-group row" v-else-if="'完成' === showWorkOrder.status">
+                <table class="table table-sm table-bordered">
+                    <thead>
+                    <tr>
+                        <th>快递单号</th>
+                        <th>商品条码</th>
+                        <th>商品名</th>
+                        <th>订单数量</th>
+                        <th>异常类型</th>
+                        <th>客户实收数量</th>
+                        <th>宝时复核数量</th>
+                        <th>复核结果</th>
+                        <th>商家处理</th>
+                        <th>商家详情</th>
+                        <th>最后确认</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    <template v-for="item in showWorkOrder.commodities">
+                        <tr>
+                            <td class="align-middle"
+                                v-if="item.count"
+                                :rowspan="item.count"
+                                v-text="item.logistic_number"
+                            ></td>
+                            <td class="text-wrap" v-text="item.sku"></td>
+                            <td class="text-wrap" v-text="item.commodity ? item.commodity.name : ''"></td>
+                            <td v-text="item.amount"></td>
+                            <td v-text="item.abnormal_type"></td>
+                            <td v-text="item.abnormal_amount"></td>
+                            <td v-text="item.bao_shi_check_amount"></td>
+                            <td v-text="item.check_result"></td>
+                            <td class="text-wrap" v-text="item.process_result"></td>
+                            <td class="text-wrap" v-text="item.process_result_info"></td>
+                            <td class="text-wrap" v-text="item.end_handle_result"></td>
+                        </tr>
+                        <tr v-if="hasReissueLogisticNumber(item)">
+                            <td colspan="10">
+                                <div class="row">
+                                    <label for="" class="col-form-label col-3 text-right">补发快递单号: </label>
+                                    <label for="" class="col-form-label col-9 text-monospace text-success"
+                                           v-text="item.reissue_logistic_number"> </label>
+                                </div>
+                            </td>
+                        </tr>
+                        <tr v-if="hasStoreNumber(item)">
+                            <td colspan="5">
+                                <div class="row">
+                                    <label for="" class="col-form-label col-6 text-right">入库单号: </label>
+                                    <label for="" class="col-form-label col-6 text-monospace text-success"
+                                           v-text="item.store_in_number"></label>
+                                </div>
+                            </td>
+                            <td colspan="5">
+                                <div class="row">
+                                    <label for="" class="col-form-label col-6 text-right">入库数量: </label>
+                                    <label for="" class="col-form-label col-6 text-monospace"
+                                           v-text="item.store_in_amount"> </label>
+                                </div>
+                            </td>
+                        </tr>
+                        <tr v-if="hasOutInNumber(item)">
+                            <td colspan="5">
+                                <div class="row">
+                                    <label for="" class="col-form-label col-6 text-right">出库订单号: </label>
+                                    <label for="" class="col-form-label col-6 text-monospace text-success"
+                                           v-text="item.out_order_number"> </label>
+                                </div>
+                            </td>
+                        </tr>
+                    </template>
+                    </tbody>
+                </table>
+            </div>
+
+        </div>
+
+        <div class="modal-body" v-if="'快递丢件' === showWorkOrder.issue_type_name">
+            <div class="form-group row">
+                <label for="" class="col-form-label col-2 text-right">补发单号: </label>
+                <label for="" class="col-form-label col-10 text-monospace text-success"
+                       v-text="showWorkOrder.reissue_logistic_number"> </label>
+            </div>
+
+            <div class="form-group row">
+                <label class="col-form-label col-sm-2 text-right">
+                    交易截图
+                </label>
+                <div class="col-sm-10">
+                    <div class="card-group">
+                        <div class="card-body col-sm-6" v-for="item in showWorkOrder.deal_images">
+                            <a target="_blank" :href="item.fileUrl">
+                                <img class="image-w border" :src="item.fileUrl">
+                            </a>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="form-group row" v-if="showWorkOrder.refund_images && showWorkOrder.refund_images.length > 0">
+                <label class="col-form-label col-sm-2 text-right">
+                    退款截图
+                </label>
+                <div class="col-sm-10">
+                    <div class="card-group">
+                        <div class="card-body col-sm-6" v-for="item in showWorkOrder.refund_images">
+                            <a target="_blank" :href="item.fileUrl">
+                                <img class="image-w border" :src="item.fileUrl">
+                            </a>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="form-group">
+                <div class="from-group row">
+                    <label class="col-form-label col-sm-2 text-right">异常快递单号</label>
+                    <div class="col-sm-10">
+                        <table class="table table-sm table-bordered table-hover text-center">
+                            <thead>
+                            <tr>
+                                <th>快递单号</th>
+                                <th v-if="'宝时终审'===showWorkOrder.status">丢件数量</th>
+                                <th v-if="'完成'===showWorkOrder.status">丢件数量</th>
+                                <th v-if="'完成'===showWorkOrder.status">处理结果</th>
+                            </tr>
+                            </thead>
+                            <tbody>
+                            <tr v-for="item in showWorkOrder.commodities">
+                                <td v-text="item.logistic_number"></td>
+                                <td v-if="'宝时终审'===showWorkOrder.status" v-text="item.abnormal_amount"></td>
+                                <td v-if="'完成'===showWorkOrder.status" v-text="item.abnormal_amount"></td>
+                                <td v-if="'完成'===showWorkOrder.status" v-text="item.process_result"></td>
+                            </tr>
+                            </tbody>
+                        </table>
+                    </div>
+                </div>
+
+            </div>
+        </div>
+
+        <div class="modal-body" v-if="'快递异常' === showWorkOrder.issue_type_name">
+            <div class="form-group row">
+                <label class="col-form-label col-sm-2 text-right">
+                    异常类型
+                </label>
+                <label class="col-form-label col-sm-10 text-left text-monospace" v-text="showWorkOrder.type">
+                </label>
+            </div>
+            <hr>
+            <div class="form-group row">
+                <label for="show-work-order-package-images" class="col-form-label col-sm-2 text-right">
+                    交易截图
+                </label>
+                <div class="col-sm-10">
+                    <div class="card-group">
+                        <div class="card-body col-sm-6" v-for="item in showWorkOrder.deal_images">
+                            <a target="_blank" :href="item.fileUrl">
+                                <img class="image-w border" :src="item.fileUrl">
+                            </a>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <hr>
+            <div class="form-group row">
+                <label for="show-work-order-sum-price" class="col-form-label col-sm-2 text-right">
+                    异常快递单号
+                </label>
+                <div class="col-sm-10">
+                    <table class="table table-sm table-bordered table-hover ">
+                        <thead>
+                        <tr>
+                            <th class="text-center">快递单号</th>
+                            <th class="text-center" v-if="'宝时终审' === showWorkOrder.status">快递核实</th>
+                            <th class="text-center" v-if="'完成' === showWorkOrder.status">快递核实</th>
+                            <th class="text-center" v-if="'完成' === showWorkOrder.status">宝时复核</th>
+                        </tr>
+                        </thead>
+                        <tbody>
+                        <tr v-for="item in showWorkOrder.commodities">
+                            <td class="text-center" v-text="item.logistic_number"></td>
+                            <td class="text-center" v-if="'宝时终审' === showWorkOrder.status"
+                                v-text="item.check_result"></td>
+                            <td class="text-center" v-if="'完成' === showWorkOrder.status"
+                                v-text="item.check_result"></td>
+                            <td class="text-center" v-if="'完成' === showWorkOrder.status"
+                                v-text="item.check_result"></td>
+                        </tr>
+                        </tbody>
+                    </table>
+                </div>
+            </div>
+
+        </div>
+    </template>
+    <span slot="footer" class="dialog-footer">
+    <el-button @click="dialogShowOrderWorkVisible = false">关 闭</el-button>
+    </span>
+</el-dialog>

+ 1545 - 580
resources/views/order/workOrder/index.blade.php

@@ -1,7 +1,12 @@
 @extends("layouts.app")
 @section('title','处理工单')
+@section('head')
+    <link href="{{ mix('css/element-ui.css') }}" rel="stylesheet">
+@endsection
+
 @section("content")
     <div class="container-fluid d-none" id="list">
+
         <div>
             <div class="">
                 <div id="form_div" style="min-width: 1220px;"></div>
@@ -25,10 +30,6 @@
                             @click="copyLogisticNumber()" style="background: #dad7e8;">批量复制单号
                     </button>
                     @can('订单管理-工单处理-审核')
-                        <button type="button"
-                                class="ml-1 btn btn-outline-success btn-sm form-control-sm tooltipTarget"
-                                @click="showEditIssueType">批量修改问题件类型
-                        </button>
                     @endcan
                 </div>
 
@@ -46,9 +47,12 @@
                                        target="order/issue/index?addtime=15">
                                         <span v-show="item.is_issue_order" class="badge badge-primary">问题件</span>
                                     </a>
-                                    <span v-if="item.work_order_status === '1'" class="badge badge-dark">
+                                    <span v-if="item.work_order_status === '1'" class="badge text-white bg-info">
                                     </span>
+                                    <button class="btn btn-sm btn-outline-secondary"
+                                            @click="showWorkOrderItem(item)">详情
+                                    </button>
                                 </td>
                                 <td>
                                     @can('订单管理-订单问题件生成')
@@ -59,41 +63,57 @@
                                     @endcan
                                     @can('订单管理-工单处理-货主编辑')
                                         <button class="btn btn-sm"
-                                                style="background-color: #42a887;color: #FFFFFF;border-color: #378d72"
-                                                v-if="isOwnerDispose(item)"
-                                                @click="ownerShowEdit(item,i)">
-                                            <span v-if="item.stats==='待货主完结'">商家完结</span>
-                                            <span v-else>商家处理</span>
+                                                style="background-color: #5d9983;color: #FFFFFF;border-color: #378d72"
+                                                v-show="isOwnerDispose(item)"
+                                                @click="ownerShowDispose(item,i)">
+                                            商家处理
+                                        </button>
+                                        <button class="btn btn-sm"
+                                                style="background-color: #13b6af;color: #FFFFFF;border-color: #079e74"
+                                                v-show="canOwnerEdit(item)"
+                                                @click="ownerShowEdit(item,i)"
+                                        >
+                                            重新编辑
                                         </button>
                                     @endcan
                                     @can('订单管理-工单处理-承运商编辑')
                                         <button class="btn btn-sm"
-                                                style="background-color:#e06538;color: #FFFFFF;border-color: #9a3d23"
-                                                v-if="isLogisticDispose(item)"
-                                                @click="logisticShowEdit(item,i)">
+                                                style="background-color:#ea8863;color: #FFFFFF;border-color: #9a3d23"
+                                                v-show="isLogisticDispose(item)"
+                                                @click="logisticShowDispose(item,i)">
                                             快递处理
                                         </button>
+                                        <button class="btn btn-sm"
+                                                style="background-color:#ea8863;color: #FFFFFF;border-color: #9a3d23"
+                                                v-show="canLogisticEdit(item)"
+                                                @click="logisticShowEdit(item,i)">
+                                            重新编辑
+                                        </button>
                                     @endcan
                                     @can('订单管理-工单处理-宝时编辑')
                                         <button class="btn btn-sm"
-                                                style="background-color: #38b1e0;color: #FFFFFF;border-color:#90acb6;"
-                                                v-if="isBaoShiHandler(item)"
-                                                @click="baoShiShowEdit(item,i)">
+                                                style="background-color: #52b7d7;color: #FFFFFF;border-color:#90acb6;"
+                                                v-show="isBaoShiDispose(item)"
+                                                @click="baoShiShowDispose(item,i)">
                                             宝时处理
                                         </button>
                                         <button class="btn btn-sm "
-                                                style="background-color: #54c337;color: #FFFFFF;border-color:#90acb6;"
-                                                v-if="isBaoShiReview(item)"
+                                                style="background-color: #62a151;color: #FFFFFF;border-color:#90acb6;"
+                                                v-show="isBaoShiReview(item)"
+                                                @click="baoShiShowDispose(item,i)">
+                                            <span>宝时客服</span>
+                                        </button>
+                                        <button class="btn btn-sm"
+                                                style="background-color: #52b7d7;color: #FFFFFF;border-color:#90acb6;"
+                                                v-show="isBaoShiEdit(item)"
                                                 @click="baoShiShowEdit(item,i)">
-                                            <span v-if="'错漏发' ===  item.issue_type_name">宝时处理</span>
-                                            <span v-else>终审</span>
+                                            重新编辑
                                         </button>
                                     @endcan
                                 </td>
                                 <td>
                                     @can('订单管理-工单处理-审核')
                                         <select class="form-control form-control-sm"
-                                                :disabled="item.status === '完成'"
                                                 :value="item.order_issue_type_id"
                                                 @change="changeIssueType(item,$event)">
                                             <option value="0"></option>
@@ -107,37 +127,29 @@
                                     @endcan
                                 </td>
                                 <td>
-                                    <span v-text="item.created_at"></span>
-                                </td>
-                                <td>
-                                    <span v-text="item.status"></span>
+                                    <span v-text="item['last_handler_name'] + ':' + item.process_progress"></span>
+                                    <span class="badge badge-pill badge-warning" v-if="'快递异常' === item.issue_type_name"
+                                          v-text="item.type"></span>
                                 </td>
+                                <td v-text="item.created_at"></td>
+                                <td v-text="item.status"></td>
+                                <td v-text="item.owner? item.owner.name : ''"></td>
+                                <td v-text="item.order? item.order.client_code : ''"></td>
                                 <td>
-                                    <span v-text="item.owner? item.owner.name : ''"></span>
-                                </td>
-                                <td>
-                                    <span v-text="item.order? item.order.client_code : ''"></span>
-                                </td>
-                                <td>
-                                    <div v-for="data in (item.order? item.order.packages : [])">
-                                        <span v-text="data.logistic_number"></span>
+                                    <div v-for="logistic_number in item.logistic_numbers">
+                                        <span v-text="logistic_number"></span>
                                     </div>
                                 </td>
-                                <td>
-                                    <span v-text="item.logistic ? item.logistic.name : ''"></span>
-                                </td>
-
-                                <td>
-                                    <span v-text="item.creator ? item.creator.name : ''"></span>
-                                </td>
-                                <td>
-                                    <span v-text="item.result_explain ? item.result_explain: item.remark"></span>
-                                </td>
-                                <td class="log-td" colspan=""
-                                    v-on:mouseover="showAddBtn($event)"
-                                    v-on:mouseleave="hideAddBtn($event)">
-                                    @include('order.workOrder._issue_logs')
-                                </td>
+                                <td v-text="item.logistic ? item.logistic.name : ''"></td>
+                                <td v-text="item.creator ? item.creator.name : ''"></td>
+                                <td v-text="item.result_explain ? item.result_explain: item.remark"></td>
+                                @can('订单管理-工单处理-宝时编辑')
+                                    <td class="log-td" colspan=""
+                                        v-on:mouseover="showAddBtn($event)"
+                                        v-on:mouseleave="hideAddBtn($event)">
+                                        @include('order.workOrder._issue_logs')
+                                    </td>
+                                @endcan
                                 <td class="container">
                                     <div class="row">
                                         @can('订单管理-工单处理-删除')
@@ -170,17 +182,21 @@
             @can('订单管理-工单处理-审核')
                 {{--                @include('order.workOrder._edit_issue_type')--}}
             @endcan
+        </div>
+        <div class="row">
+            @include('order.workOrder._work_order_show')
+        </div>
             @include('order.workOrder._bao_shi_review_modal')
             @include('order.workOrder._bao_shi_fill_work_order_modal')
             @include('order.workOrder._logistic_fill_work_order_modal')
             @include('order.workOrder._owner_fill_work_order_modal')
-        </div>
     </div>
 @endsection()
 
 @section("lastScript")
     <script type="text/javascript" src="{{asset('js/queryForm/queryForm.js')}}"></script>
     <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>
+    <script src="{{ mix('js/element-ui.js') }}"></script>
     <style>
         .fade-enter-active {
             transition: opacity .3s;
@@ -202,10 +218,8 @@
         }
     </style>
     <script>
-
-
         const orderIssueVue = new Vue({
-            methods:{
+            methods: {
                 tagIssueLog(log) {   // 标记问题件log不可见
                     let url = '{{route('order.issue.log.tagApi')}}';
                     let data = {id: log.id};
@@ -221,7 +235,7 @@
                         window.tempTip.show(err);
                     });
                 },
-                addOrderIssueLog(id,order_issue_id, logs){
+                addOrderIssueLog(id, order_issue_id, logs) {
                     let idInput = $('#' + id + ' :input[name="id"]');
                     let contentInput = $('#' + id + ' :input[name="content"]');
                     if (!contentInput.val()) {
@@ -248,7 +262,7 @@
                         vue.errorTempTip('网络异常:' + err);
                     });
                 },
-                destroyLog(log,issue_logs,logIndex) {    // 删除处理日志
+                destroyLog(log, issue_logs, logIndex) {    // 删除处理日志
                     if (!confirm('是否删除当前记录')) return;
                     if (log.type === '创建') {
                         tempTip.show('创建记录不能删除');
@@ -259,7 +273,7 @@
                     window.tempTip.setIndex('1999');
                     window.axios.post(url, data).then(res => {
                         if (res.data.success) {
-                            issue_logs.splice(logIndex,1);
+                            issue_logs.splice(logIndex, 1);
                             tempTip.setDuration(1500);
                             tempTip.showSuccess('删除成功');
                         } else {
@@ -278,7 +292,7 @@
         let vue = new Vue({
             el: "#list",
             data: {
-                orderIssueVue:orderIssueVue,
+                orderIssueVue: orderIssueVue,
                 workOrders: {!! $workOrders->toJson() !!}['data'],
                 form: null,
                 logistics: [
@@ -302,14 +316,6 @@
                     },
                     @endforeach
                 ],
-                workOrder: {
-                    id: null,
-                    detail_id: null,
-                    reissue_logistic_number: null, // 补发单号
-                    logistic_number: null, // 丢件快递单号
-                    refundImages: [], // 退款图
-                    dealImages: [], // 交易图
-                },
                 logisticEditWorkOrder: {
                     id: null,
                     issue_type_name: null,
@@ -317,6 +323,8 @@
                     reissue_logistic_number: null, // 补发单号
                     logistic_number: null, // 丢件快递单号
                     commodities: [],
+                    process_progress: null,
+                    is_edit: false,
                 },
                 baoShiEditWorkOrder: {
                     id: null,
@@ -325,38 +333,48 @@
                     reissue_logistic_number: null,  // 补发单号
                     logistic_number: null,          // 丢件快递单号
                     commodities: [],
+                    process_progress: null,
+                    is_edit: false,
                 },
-                ownerEditWorKOrder: {
+                ownerEditWorkOrder: {
                     id: null,
                     issue_type_name: null,
                     detail_id: null,
                     price: null,
-                    reissue_logistic_number: null, // 补发单号
-                    logistic_number: null, // 丢件快递单号
-                    refundImages: [], // 退款图
-                    dealImages: [], // 交易图
-                    commodities: [],
-                    return_logistic_number:null,
-                    return_name:null,
-                    return_address:null,
-                    return_phone:null,
-                },
-                fillWorkOrder: {
-                    id: null,
-                    issue_type_name: null,
-                    detail_id: null,
-                    reissue_logistic_number: null, // 补发单号
-                    logistic_number: null, // 丢件快递单号
-                    refundImages: [], // 退款图
-                    dealImages: [], // 交易图
+                    type: null,
+                    status: '',
+                    reissue_logistic_number: null,  // 补发单号
+                    logistic_number: null,          // 丢件快递单号
+                    packageImages: [],
+                    commodityImages: [],
+                    refundImages: [],               // 退款图
+                    dealImages: [],                 // 交易图
                     commodities: [],
-                },
-                workOrderStatus: ['创建', '信息已填写', '快递已处理', '工单完成'],
-                reviewWorkOrder: {
-                    id: null,
+                    return_logistic_number: null,
+                    return_name: null,
+                    return_address: null,
+                    return_phone: null,
+                    process_progress: null,
+                    is_edit: false,
+                    delete_image_ids: [],
+                    delete_commodity_ids: [],
+                    remark: null,
+                },
+                showWorkOrder: {
                     issue_type_name: null,
-                    detail_id: null,
+                    package_images: [],
+                    commodity_images: [],
+                    deal_images: [],
+                    refund_images: [],
                     commodities: [],
+                    reissue_logistic_number: null,
+                    logistic_number: null,
+                    return_logistic_number: null,
+                    return_name: null,
+                    return_address: null,
+                    return_phone: null,
+                    process_progress: null,
+                    type:null,
                 },
                 selectTr: null,                 // table 行
                 selectDetailId: null,           // 详情
@@ -367,22 +385,15 @@
                 selectLog: null,                // 工单日志
                 selectIndex: null,              // 选中工单
                 filePrefix: "{{asset("/storage")}}",
-                damagedResults: ['核实破损', '核实未破损'],
-                mistakeResults: ['核实少发', '核实多发', '核实未错漏发'],
-                processResults: ['核实破损', '核实未破损'],
-                mistakeProcessResults: ['少发,宝时补发', '多发,客户买下', '多发,客户退回', '少发,不补发', '核实未错漏发'],
-                damagedProcessResults: ['赔偿', '不赔偿'],
-                expressAbnormalProcessResults: ['赔偿', '不赔偿'],
-                lossProcessResults: ['赔偿', '不赔偿'],
-                expressAbnormalLogisticProcessResults: ['已拦截', '已催件'],
-                processResultInfo: {
-                    "少发,宝时补发": {'0': '商家不做单'},
-                    "多发,客户买下": {'0': '商家做出库单(物流选自提,宝时不发货)'},
-                    "多发,客户退回": {'0': '客户自行退回(提供退回单号)', '1': '宝时上门取件(提供寄件信息,地址,联系人,电话)'},
-                    '少发,不补发': {'0': '商家做入库单,选择明细和数量'},
-                    '核实未错漏发': {'0': ''},
-                },
+                dialogShowBaoShiVisible:false,
+                dialogEditBaoShiVisible:false,
+                dialogShowOwnerVisible:false,
+                dialogEditOwnerVisible:false,
+                dialogShowLogisticVisible:false,
+                dialogEditLogisticVisible:false,
+                dialogShowOrderWorkVisible:false,
             },
+            computed: {},
             mounted() {
                 let data = [[
                     {name: 'created_at_start', type: 'time', tip: ['工单创建开始日期', '时间']},
@@ -424,6 +435,38 @@
                             {name: '货主处理', value: '货主处理'},
                             {name: '承运商处理', value: '承运商处理'},]
                     },
+                    {
+                        name: 'process_progress', type: 'select', placeholder: '当前进度',
+                        data: [
+                            {name: '已处理', value: '已处理'},
+                            {name: '已签收', value: '已签收'},
+                            {name: '拦截成功', value: '拦截失败'},
+                            {name: '拦截失败', value: '拦截失败'},
+
+                            {name: '已处理', value: '已处理'},
+                            {name: '无法更改', value: '无法更改'},
+                            {name: '更改成功', value: '更改成功'},
+                            {name: '更改失败', value: '更改失败'},
+
+                            {name: '已处理', value: '已处理'},
+                            {name: '已拦截', value: '已拦截'},
+                            {name: '丢件赔偿', value: '丢件赔偿'},
+                            {name: '签收成功', value: '签收成功'},
+
+                            {name: '已核实', value: '已核实'},
+                            {name: '补发', value: '补发'},
+                            {name: '不补发', value: '不补发'},
+                            {name: '已补发', value: '已补发'},
+                            {name: '已入库', value: '已入库'},
+
+                            {name: '核实全部破损', value: '核实全部破损'},
+                            {name: '核实部分破损', value: '核实部分破损'},
+                            {name: '核实未破损', value: '核实未破损'},
+                            {name: '待商家处理', value: '待商家处理'},
+                            {name: '待终审', value: '待终审'},
+                            {name: '完结', value: '完结'},
+                        ]
+                    },
                     {name: 'is_end', type: 'checkbox', tip: '是否已拦截', data: [{name: 'ture', value: '已完成'}]},
                 ]];
                 this.form = new query({
@@ -435,6 +478,7 @@
                     {name: 'id', value: '工单号', neglect: true},
                     {name: 'operation', value: '操作', neglect: true},
                     {name: 'work_type', value: '工单类型', neglect: true},
+                    {name: 'process_progress', value: '当前进度', neglect: true},
                     {name: 'created_at', value: '创建时间', neglect: true},
                     {name: 'status', value: '当前处理人', neglect: true},
                     {name: 'owner', value: '货主', neglect: true},
@@ -443,7 +487,11 @@
                     {name: 'logistic', value: '承运商'},
                     {name: 'creator', value: '创建人'},
                     {name: 'remark', value: '情况说明'},
-                    {name: 'order_issue_log', value: '处理结果'},
+                        @can('订单管理-工单处理-宝时编辑')
+                    {
+                        name: 'order_issue_log', value: '处理结果'
+                    },
+                        @endcan
                     {
                         name: 'ab_operation', type: 'multi', title: "其他操作", rows: [
                                 @can('订单管理-工单处理-删除')
@@ -473,8 +521,6 @@
             created() {
                 this.workOrders.forEach(item => {
                     this.sortOrder(item);
-                    if (!item.order) return;
-                    if (!item.order.packages) return;
                 });
             },
             filters: {
@@ -486,7 +532,69 @@
                 },
             },
             methods: {
+                waitingTempTip(message) {
+                    window.tempTip.setIndex(2005);
+                    window.tempTip.waitingTip(message);
+                },
+                successTempTip(message) {
+                    window.tempTip.setDuration(1500);
+                    window.tempTip.setIndex(2005);
+                    window.tempTip.showSuccess(message);
+                },
+                errorTempTip(message) {
+                    window.tempTip.setDuration(2000);
+                    window.tempTip.setIndex(2005);
+                    window.tempTip.show(message);
+                },
+                showAddBtn(e) {
+                    let domObj = $(e.target).parents('.log-td');
+                    if (domObj.hasClass('log-td')) {
+                        domObj.find('.add-btn').show();
+                    } else {
+                        let obj = $(e.target);
+                        if (obj.hasClass('log-td')) {
+                            obj.find('.add-btn').show();
+                        }
+                    }
+                },
+                hideAddBtn(e) {
+                    let domObj = $(e.target);
+                    if (domObj.hasClass('log-td')) {
+                        domObj.find('.add-btn').hide();
+                    }
+                },
+                showAddDiv(id) {
+                    let div = $('#' + id);
+                    if (div.is(":hidden")) {
+                        div.show();
+                        div.find('input[type=text]').focus();
+                    } else {
+                        div.hide();
+                    }
+                },
+                removeFocusing(e) {
+                    $(e.target).parent('tr').removeClass('focusing')
+                },
+                showDelBtn(e) {
+                    let domObj = $(e.target).parent();
+                    domObj.find('.del-btn').addClass('visible').removeClass('invisible');
+
+                },
+                hideDelBtn(e) {
+                    let domObj = $(e.target);
+                    domObj.find('.del-btn').addClass('invisible').removeClass('visible');
+                },
+                toggleLogs(orderIssue, e, index) {
+                    if (orderIssue.log_is_show === false) {
+                        orderIssue.log_is_show = true;
+                        $(e.target).text('点击收起');
+                    } else {
+                        orderIssue.log_is_show = false;
+                        $(e.target).text("记录共" + orderIssue.logs.length + "条,点击展开");
+                    }
+                },
                 sortOrder(workOrder) {
+                    workOrder.last_handler_name = workOrder.last_handler ? workOrder.last_handler.name : '';
                     workOrder.detail_infos = this.groupDetails(workOrder);                          // 工单详情
                     workOrder.package_images = this.groupImages(workOrder, '外包装图片');            // 外包装图片
                     workOrder.commodity_images = this.groupImages(workOrder, '内物破碎图片');        // 内物破碎图片
@@ -497,7 +605,8 @@
                     workOrder.commodities = this.groupCommodities(workOrder);
                     workOrder.issue_type_name = workOrder.issue_type ? workOrder.issue_type.name : '';  // 工单类型
                     workOrder.pending_detail = this.groupPendingDetail(workOrder);
-                    workOrder.order_issue ? (workOrder.order_issue.log_is_show = false ): '';
+                    workOrder.order_issue ? (workOrder.order_issue.log_is_show = false) : '';
+                    workOrder.logistic_numbers = this.groupLogisticNumber(workOrder);
                 },
                 groupPendingDetail(workOrder) {
                     let detail = workOrder.details.find(item => {
@@ -519,6 +628,7 @@
                         return_address: detail.return_address,
                         return_phone: detail.return_phone,
                         return_name: detail.return_name,
+                        images: detail.images,
                     };
                 },
                 groupCommodities(workOrder, isCurrent = true) {
@@ -581,6 +691,11 @@
                             return item;
                         }).filter(item => {
                             return item.type === type;
+                        }).map(e => {
+                            let {url, type} = e['upload_file'];
+                            e.urlExist = e.hasOwnProperty('upload_file');
+                            e.fileUrl = this.filePrefix + `${url}.${type}`;
+                            return e;
                         })
                         images.push(...imageList);
                     });
@@ -604,6 +719,22 @@
                     });
                     return logs;
                 },
+                groupLogisticNumber(workOrder) {
+                    let detail = null;
+                    workOrder.details.forEach(e => {
+                        if (!detail) detail = e;
+                        if (new Date(e.created_at) > new Date(detail.created_at)) detail = e;
+                    });
+                    let {commodities} = detail;
+                    let logistic_numbers = new Set();
+                    commodities.forEach(e => logistic_numbers.add(e.logistic_number));
+                    if (logistic_numbers.size === 0){
+                        if (workOrder.order && workOrder.order.packages){
+                            workOrder.order.packages.forEach(e=>logistic_numbers.add(e.logistic_number));
+                        }
+                    }
+                    return new Array(...logistic_numbers);
+                },
                 createOrderIssue(item, tag) { // 生成问题件
                     let url = '{{route('workOrder.buildOrderIssueApi')}}';
                     let data = {};
@@ -641,6 +772,7 @@
                     });
                     this.$forceUpdate();
                 },
+
                 getMessageWorkOrder() {
                     let selected = checkData;
                     if (!selected) {
@@ -745,6 +877,7 @@
                         tempTip.showSuccess('复制失败:' + e)
                     }
                 },
+
                 changeIssueType(item, e) {
                     let url = '{{route('workOrder.updateIssueTypeApi')}}';
                     let data = {
@@ -847,6 +980,43 @@
                     }
                     event.preventDefault();
                 },
+                pasteRefundImagesOrReissueLogisticNumber(event, refundImages) {
+                    for (let i = 0; i < event.clipboardData.items.length; i++) {
+                        let item = event.clipboardData.items[i];
+                        if (item.kind === 'string') continue
+                        if (item.type.indexOf('image') === -1) continue;
+                        if (item.kind === 'file') {
+                            this.ownerEditWorkOrder.reissue_logistic_number = null;
+                            let blob = item.getAsFile();
+                            let src = null;
+                            this.blobToBase64(blob).then(res => {
+                                src = res;
+                                refundImages.push({src: src, file: blob});
+                                if (refundImages.length > 0) {
+                                    let div = $("#refund-image");
+                                    div.html(div.children());
+                                }
+                            });
+                        }
+                    }
+                    event.preventDefault();
+                },
+                editOwnerReissueLogisticNumber(){
+                    let reissue_logistic_number = this.$refs['refund-image-edit-reissue_logistic_number'].innerHTML;
+                    if (this.ownerEditWorkOrder.refundImages.length === 0) this.ownerEditWorkOrder.reissue_logistic_number = reissue_logistic_number;
+                    else {
+                        let div = $("#refund-image");
+                        div.html(div.children());
+                    }
+                },
+                editReissueLogisticNumber() {
+                    let reissue_logistic_number = this.$refs['refund-image-reissue_logistic_number'].innerHTML;
+                    if (this.ownerEditWorkOrder.refundImages.length === 0) this.ownerEditWorkOrder.reissue_logistic_number = reissue_logistic_number;
+                    else {
+                        let div = $("#refund-image");
+                        div.html(div.children());
+                    }
+                },
                 blobToBase64(blob) {
                     return new Promise((resolve, reject) => {
                         const fileReader = new FileReader();
@@ -865,41 +1035,54 @@
                         let data = {orderNo: item ? (item.order ? item.order.code : '') : ''};
                         window.axios.post(url, data).then(res => {
                             if (res.data.success) {
-                                this.countCommoditiesByLogisticNumber(res.data.data);
                                 resolve(res.data.data);
                             }
                         }).catch(err => {
+                            reject(err);
                         });
                     });
                 },
-                countCommoditiesByLogisticNumber(commodities){
+                countCommoditiesByLogisticNumber(items) {
+                    if (items.length === 0) return [];
+                    let commodities = JSON.parse(JSON.stringify(items));
+                    this.ownerGroupCommodities(commodities);
+                    return commodities;
+                },
+                ownerGroupCommodities(items) {
+                    items.forEach(e => e.count = 0);
                     let index = 0;
-                    let logistic_number = commodities[0]['logistic_number'];
+                    let logistic_number = items[0]['logistic_number'];
                     let count = 0;
-                    for(let i = 0; i < commodities.length;i++){
-                        let cur_logistic_number = commodities[i]['logistic_number'];
-                        if (i === commodities.length - 1 && cur_logistic_number === logistic_number){
-                            count ++;
-                            commodities[index]['count'] = count;
-                            break;
+                    items.forEach((e, i) => {
+                        let cur_logistic_number = e.logistic_number,
+                            process_result_info = e.process_result_info,
+                            isAdd = false, isAddRow = false;
+                        if (process_result_info && (process_result_info.indexOf('商家做入库单') >= 0 || process_result_info.indexOf('商家做出库单') >= 0)) {
+                            isAddRow = true;
                         }
-                        if (logistic_number === cur_logistic_number){
+                        if (cur_logistic_number === logistic_number) {
                             count++;
-                        } else if (logistic_number !== cur_logistic_number){
-                            commodities[index]['count'] = count;
+                            if (isAddRow) count++;
+                            if (isAdd) count++;
+                        } else if (cur_logistic_number !== logistic_number) {
+                            logistic_number = cur_logistic_number;
+                            items[index]['count'] = count;
                             index = i;
                             count = 1;
+                            if (isAdd) count++;
+                            if (isAddRow) count++;
                         }
-                        if (i === commodities.length - 1){
-                            commodities[index]['count'] = count;
-                        }
-                    }
-                    return commodities;
+                        items[index]['count'] = count;
+                    });
                 },
-                baoShiReview(item, i) { // 宝时终审
-                    this.reviewWorkOrder = JSON.parse(JSON.stringify(item.pending_detail));
-                    this.selectIndex = i;
-                    $('#bao-shi-review-modal').modal('show');
+                reviseMistakeWorkOrder(item) {
+                    if (item.process_result === '多发,客户买下') {
+                    } else if (item.process_result === '多发,客户退回') {
+                        item.store_in_amount = null;
+                        item.store_in_number = null;
+                        item.reissue_logistic_number = null;
+                        item.out_order_number = null;
+                    }
                 },
                 getCurrentWorkOrderDetailId(workOrder) {
                     let items = workOrder.details.filter(item => {
@@ -909,19 +1092,9 @@
                     let item = items.shift();
                     return item.id;
                 },
-                reviewWorkOrderCommodity(formData) {
-                    this.reviewWorkOrder.commodities.forEach(e => {
-                        formData.append("commodities[]", JSON.stringify(e));
-                    });
-                },
-                computeBaoShiCheckResult(item) {
-                    let amount = Number(item.amount);
-                    let bao_shi_check_amount = Number(item['bao_shi_check_amount']);
-                    item.check_result = amount === bao_shi_check_amount ? '核实未错漏发' : (amount < bao_shi_check_amount ? '核实多发' : '核实少发')
-                },
                 sumPrice(workOrder) {
                     workOrder.price = workOrder.commodities.reduce((prev, cur) => {
-                        return Number(prev) + Number(cur.price);
+                        return Number(prev) + Number(cur.price) * Number(cur.abnormal_amount);
                     }, 0);
                 },
                 getBadgeColor(tag) { // 标记 返回徽章标记
@@ -929,613 +1102,1405 @@
                     if (tag === '创建') return 'badge-primary';
                     return '';
                 },
-                // 宝时处理
-                isBaoShiHandler(item){
-                    return '错漏发' === item.issue_type_name  && item.status === '宝时处理';
+
+                // 宝时客服
+                isBaoShiDispose(item) {
+                    let {status} = item;
+                    return status === '宝时处理';
+                },
+                isBaoShiEdit(item) {
+                    return item.last_status === '宝时处理';
                 },
-                isBaoShiReview(item){
+                isBaoShiReview(item) {
                     return item.status === '宝时终审';
                 },
-                baoShiShowEdit(item,index) {
-                    let {status} = item;
-                    let {issue_type_name, detail_id,commodities} = item.pending_detail;
-                    if ("快递丢件" === issue_type_name){
-                        this.selectIndex = index;
-                        this.baoShiEditWorkOrder.issue_type_name = item.issue_type_name;
-                        this.baoShiEditWorkOrder.status = status;
+                baoShiShowEdit(item, index) {
+                    this.selectIndex = index;
+                    let {status, issue_type_name} = item;
+                    this.baoShiEditWorkOrder.is_edit = true;
+                    if ('错漏发' === issue_type_name) {
+                        let {detail_id, commodities, process_progress} = item.pending_detail;
+                        this.baoShiEditWorkOrder.issue_type_name = issue_type_name;
                         this.baoShiEditWorkOrder.detail_id = detail_id;
-                        commodities.forEach(e=>{
+                        this.baoShiEditWorkOrder.status = status;
+                        this.baoShiEditWorkOrder.process_progress = process_progress;
+                        this.baoShiEditWorkOrder.commodities = this.countCommoditiesByLogisticNumber(commodities);
+                        this.dialogEditBaoShiVisible = true;
+                    }
+                },
+                baoShiShowDispose(item, index) {
+                    let {status} = item;
+                    let {issue_type_name, detail_id, commodities} = item.pending_detail;
+                    this.baoShiEditWorkOrder.is_edit = false;
+                    this.selectIndex = index;
+                    this.baoShiEditWorkOrder.issue_type_name = issue_type_name;
+                    this.baoShiEditWorkOrder.detail_id = detail_id;
+                    this.baoShiEditWorkOrder.status = status;
+
+                    if ("拦截" === issue_type_name) {
+                        this.dialogShowBaoShiVisible = true
+                    } else if ("信息更改" === issue_type_name) {
+                        this.dialogShowBaoShiVisible = true
+                    } else if ("快递丢件" === issue_type_name) {
+                        commodities.forEach(e => {
                             e.bao_shi_check_amount = e.abnormal_amount;
                         });
                         this.baoShiEditWorkOrder.commodities = this.countCommoditiesByLogisticNumber(commodities);
-                        $("#bao-shi-review-modal").modal('show');
-                    } else if('破损' === issue_type_name){
-                        this.selectIndex = index;
-                        this.baoShiEditWorkOrder.issue_type_name = issue_type_name;
-                        this.baoShiEditWorkOrder.detail_id = detail_id;
-                        this.baoShiEditWorkOrder.status = status;
-                        commodities.forEach(e=>{
-                            e.bao_shi_check_amount = e.check_amount;
+                        this.dialogShowBaoShiVisible = true
+                    } else if ('破损' === issue_type_name) {
+                        commodities.forEach(e => {
+                            e.bao_shi_check_amount = e.abnormal_amount;
+                            e.process_result = '核实全部破损';
                         });
-                        this.baoShiEditWorkOrder.commodities = this.countCommoditiesByLogisticNumber(commodities);;
-                        $("#bao-shi-review-modal").modal('show');
-                    } else if ('快递异常' === issue_type_name){
+                        this.baoShiEditWorkOrder.process_progress = '全部赔偿';
+                        this.baoShiEditWorkOrder.commodities = this.countCommoditiesByLogisticNumber(commodities);
+                        this.dialogShowBaoShiVisible = true
+                    } else if ('快递异常' === issue_type_name) {
                         this.selectIndex = index;
-                        this.baoShiEditWorkOrder.issue_type_name = issue_type_name;
-                        this.baoShiEditWorkOrder.detail_id = detail_id;
                         this.baoShiEditWorkOrder.status = status;
-                        commodities.forEach(e=>{
+                        commodities.forEach(e => {
                             e.bao_shi_check_amount = e.check_amount;
                         });
-                        this.baoShiEditWorkOrder.commodities = this.countCommoditiesByLogisticNumber(commodities);;
-                        $("#bao-shi-review-modal").modal('show');
-                    } else if ('错漏发' === issue_type_name){
-                        this.selectIndex = index;
-                        this.baoShiEditWorkOrder.issue_type_name = issue_type_name;
-                        this.baoShiEditWorkOrder.detail_id = detail_id;
-                        this.baoShiEditWorkOrder.status = status;
-                        commodities.forEach(e=>{
-                            e.bao_shi_check_amount = e.check_amount;
-                            e.check_result = null;
+                        this.baoShiEditWorkOrder.commodities = this.countCommoditiesByLogisticNumber(commodities);
+                        this.dialogShowBaoShiVisible = true
+                    } else if ('错漏发' === issue_type_name) {
+                        commodities.forEach(e => {
+                            e.bao_shi_check_amount = e.amount;
+                            if ('宝时处理' === status) {
+                                e.check_result = null;
+                                e.check_result = '核实未错漏发';
+                            }
                         });
-                        this.baoShiEditWorkOrder.commodities = this.countCommoditiesByLogisticNumber(commodities);;
-                        $("#bao-shi-review-modal").modal('show');
+                        if ('宝时处理' === status) this.baoShiEditWorkOrder.process_progress = '核实未错漏发';
+                        this.baoShiEditWorkOrder.commodities = this.countCommoditiesByLogisticNumber(commodities);
+                        this.dialogShowBaoShiVisible = true
                     }
                 },
                 baoShiEdit() {
-                    let {status,commodities,issue_type_name} = this.baoShiEditWorkOrder;
-                    if ('快递丢件' === issue_type_name ){
-                        let url = '{{route('workOrder.loss.baoShi.reviewApi')}}';
-                        let formData = new FormData();
-                        formData.append('detail_id',this.baoShiEditWorkOrder.detail_id);
-                        commodities.forEach(e => {
-                            formData.append("commodities[]", JSON.stringify(e));
-                        });
-                        window.tempTip.setIndex(2000);
-                        window.tempTip.waitingTip('处理中');
-                        window.axios.post(url,formData).then(res=>{
-                            window.tempTip.cancelWaitingTip();
-                            if (res.data.success){
-                                this.sortOrder(res.data.data);
-                                this.$set(this.workOrders,this.selectIndex,res.data.data);
-                                $("#bao-shi-review-modal").modal('hide');
-                                this.successTempTip('处理完成')
-                            } else {
-                                this.errorTempTip(res.data.message ? res.data.message : '处理工单出现异常,刷新后重试');
-                            }
-                        }).catch(err=>{
-                            window.tempTip.cancelWaitingTip();
-                            this.errorTempTip(err);
-                        });
-                    } else if('破损' === issue_type_name){
+                    let {status, commodities, issue_type_name, process_progress, detail_id} = this.baoShiEditWorkOrder;
+                    if ('拦截' === issue_type_name) {
                         let res = this.checkBaoShiEditWorkOrder();
-                        if (!res.success){
+                        if (!res.success) {
                             this.errorTempTip(res.message);
                             return;
                         }
-                        let url = '{{route('workOrder.damage.baoShi.reviewApi')}}';
+                        let url = "{{route('workOrder.intercept.baoShi.reviewApi')}}";
+                        let formData = {detail_id: detail_id, process_progress: process_progress}
+                        this.baoShiEditProcess(url, formData);
+                    } else if ('信息更改' === issue_type_name) {
+                        let res = this.checkBaoShiEditWorkOrder();
+                        if (!res.success) {
+                            this.errorTempTip(res.message);
+                            return;
+                        }
+                        let url = "{{route('workOrder.informationChange.baoShi.reviewApi')}}";
+                        let formData = {detail_id: detail_id, process_progress: process_progress}
+                        this.baoShiEditProcess(url, formData);
+                    } else if ('快递丢件' === issue_type_name) {
+                        let url = '{{route('workOrder.loss.baoShi.reviewApi')}}';
                         let formData = new FormData();
-                        formData.append('detail_id',this.baoShiEditWorkOrder.detail_id);
+                        formData.append('detail_id', detail_id);
                         commodities.forEach(e => {
                             formData.append("commodities[]", JSON.stringify(e));
                         });
-                        window.tempTip.setIndex(2000);
-                        window.tempTip.waitingTip('处理中');
-                        window.axios.post(url,formData).then(res=>{
-                            window.tempTip.cancelWaitingTip();
-                            if (res.data.success){
-                                this.sortOrder(res.data.data);
-                                this.$set(this.workOrders,this.selectIndex,res.data.data);
-                                this.successTempTip('处理完成');
-                                $("#bao-shi-review-modal").modal('hide');
-                            } else {
-                                this.errorTempTip(res.data.message ? res.data.message : '处理出现异常,刷新页面重试');
-                            }
-                        }).catch(err=>{
-                            window.tempTip.cancelWaitingTip();
-                            this.errorTempTip(err);
-                        });
-                    } else if ('快递异常' === issue_type_name){
+                        this.baoShiEditProcess(url, formData);
+                    } else if ('破损' === issue_type_name) {
                         let res = this.checkBaoShiEditWorkOrder();
-                        if (!res.success){
+                        if (!res.success) {
                             this.errorTempTip(res.message);
                             return;
                         }
                         let url = '{{route('workOrder.damage.baoShi.reviewApi')}}';
                         let formData = new FormData();
-                        formData.append('detail_id',this.baoShiEditWorkOrder.detail_id);
+                        formData.append('detail_id', this.baoShiEditWorkOrder.detail_id);
+                        formData.append('process_progress', process_progress);
                         commodities.forEach(e => {
                             formData.append("commodities[]", JSON.stringify(e));
                         });
-                        window.tempTip.setIndex(2000);
-                        window.tempTip.waitingTip('处理中');
-                        window.axios.post(url,formData).then(res=>{
-                            window.tempTip.cancelWaitingTip();
-                            if (res.data.success){
-                                this.sortOrder(res.data.data);
-                                this.$set(this.workOrders,this.selectIndex,res.data.data);
-                                this.successTempTip('处理完成');
-                                $("#bao-shi-review-modal").modal('hide');
-                            } else {
-                                this.errorTempTip(res.data.message ? res.data.message : '处理出现异常,刷新页面重试');
-                            }
-                        }).catch(err=>{
-                            window.tempTip.cancelWaitingTip();
-                            this.errorTempTip(err);
-                        });
-                    } else if ('错漏发' === issue_type_name){
+                        this.baoShiEditProcess(url, formData);
+
+                    } else if ('快递异常' === issue_type_name) {
                         let res = this.checkBaoShiEditWorkOrder();
-                        if (!res.success){
+                        if (!res.success) {
                             this.errorTempTip(res.message);
                             return;
                         }
-                        let url = '{{route('workOrder.mistake.baoShi.reviewApi')}}';
+                        let url = '{{route('workOrder.expressAbnormal.baoShi.reviewApi')}}';
                         let formData = new FormData();
-                        formData.append('detail_id',this.baoShiEditWorkOrder.detail_id);
+                        formData.append('detail_id', detail_id);
+                        formData.append('process_progress', process_progress);
                         commodities.forEach(e => {
                             formData.append("commodities[]", JSON.stringify(e));
                         });
-                        window.tempTip.setIndex(2000);
-                        window.tempTip.waitingTip('处理中');
-                        window.axios.post(url,formData).then(res=>{
-                            window.tempTip.cancelWaitingTip();
-                            if (res.data.success){
-                                this.sortOrder(res.data.data);
-                                this.$set(this.workOrders,this.selectIndex,res.data.data);
-                                this.successTempTip('处理完成');
-                                $("#bao-shi-review-modal").modal('hide');
-                            } else {
-                                this.errorTempTip(res.data.message ? res.data.message : '处理出现异常,刷新页面重试');
+                        this.baoShiEditProcess(url, formData);
+                    } else if ('错漏发' === issue_type_name) {
+                        if (this.baoShiEditWorkOrder.is_edit) {
+                            // 默认为编辑
+                            let res = this.checkBaoShiEditWorkOrder();
+                            if (!res.success) {
+                                this.errorTempTip(res.message);
+                                return;
                             }
-                        }).catch(err=>{
-                            window.tempTip.cancelWaitingTip();
-                            this.errorTempTip(err);
-                        });
+                            let url = '{{route('workOrder.mistake.baoShi.handleApi')}}';
+                            let formData = new FormData();
+                            formData.append('detail_id', detail_id);
+                            formData.append('process_progress', '已核实');
+                            commodities.forEach(e => {
+                                formData.append("commodities[]", JSON.stringify(e));
+                            });
+                            this.baoShiEditProcess(url, formData);
+                        } else {
+                            if ('宝时处理' === status) {
+                                let res = this.checkBaoShiEditWorkOrder();
+                                if (!res.success) {
+                                    this.errorTempTip(res.message);
+                                    return;
+                                }
+                                let url = '{{route('workOrder.mistake.baoShi.handleApi')}}';
+                                let formData = new FormData();
+                                formData.append('detail_id', detail_id);
+                                formData.append('process_progress', '已核实');
+                                commodities.forEach(e => {
+                                    formData.append("commodities[]", JSON.stringify(e));
+                                });
+                                this.baoShiEditProcess(url, formData);
+                            } else if ('宝时终审' === status) {
+                                this.baoShiAutoComputeMistakeProcessProcess();
+                                let res = this.checkBaoShiEditWorkOrder();
+                                if (!res.success) {
+                                    this.errorTempTip(res.message);
+                                    return;
+                                }
+                                let url = '{{route('workOrder.mistake.baoShi.reviewApi')}}';
+                                let formData = new FormData();
+                                formData.append('detail_id', detail_id);
+                                formData.append('process_progress', this.baoShiEditWorkOrder.process_progress);
+                                commodities.forEach(e => {
+                                    formData.append("commodities[]", JSON.stringify(e));
+                                });
+                                this.baoShiEditProcess(url, formData);
+                            }
+                        }
                     }
                 },
-                // 承运商相关
-                isLogisticDispose(item) {
-                    return ['拦截', '信息更改', '快递异常', '破损','快递丢件'].includes(item.issue_type_name) && item.status === '承运商处理';
-                },
-                logisticShowEdit(item, index) {
-                    let {status} = item.issue_type_name;
-                    let {issue_type_name,detail_id,commodities} = item.pending_detail;
-                    if (issue_type_name === '拦截') {
-                        window.tempTip.waitingTip('处理中');
-                        let url = "{{route('workOrder.intercept.logistic.handlerApi')}}";
-                        let data = {detail_id: detail_id};
-                        window.axios.post(url, data).then(res => {
-                            window.tempTip.cancelWaitingTip();
-                            if (res.data.success) {
-                                this.successTempTip("处理完成");
-                                this.sortOrder(res.data.data);
-                                this.$set(this.workOrders, index, res.data.data);
-                            } else {
-                                this.errorTempTip(res.data.message ? res.data.message : '处理出现异常!刷新页面重试');
-                            }
-                        }).catch(err => {
-                            window.tempTip.cancelWaitingTip();
-                            this.errorTempTip(err)
+                checkBaoShiEditWorkOrder() {
+                    let {status} = this.baoShiEditWorkOrder;
+                    if (['拦截', '信息更改'].includes(this.baoShiEditWorkOrder.issue_type_name)) {
+                        if (this.baoShiEditWorkOrder.process_progress === null) {
+                            return {success: false, message: '处理条件不能为空'};
+                        }
+                    } else if (['破损', '快递异常'].includes(this.baoShiEditWorkOrder.issue_type_name)) {
+                        if (this.baoShiEditWorkOrder.process_progress === null) {
+                            return {success: false, message: '处理条件不能为空'};
+                        }
+                        let filers = this.baoShiEditWorkOrder.commodities.filter(e => {
+                            return e.process_result === null || e.process_result.length <= 0;
                         });
-                    } else if (issue_type_name === '信息更改') {
-                        window.tempTip.waitingTip('处理中');
-                        let url = "{{route('workOrder.informationChange.logistic.handlerApi')}}";
-                        let data = {detail_id: item.pending_detail.detail_id};
-                        window.axios.post(url, data).then(res => {
-                            window.tempTip.cancelWaitingTip();
-                            if (res.data.success) {
-                                this.successTempTip("处理完成");
-                                this.sortOrder(res.data.data);
-                                this.$set(this.workOrders, index, res.data.data);
-                            } else {
-                                this.errorTempTip(res.data.message ? res.data.message : '处理出现异常!刷新页面重试');
-                            }
-                        }).catch(err => {
-                            window.tempTip.cancelWaitingTip();
-                            this.errorTempTip(err)
-                        });
-                    } else if ('快递丢件' === issue_type_name  ){
+                        if (filers.length > 0) {
+                            return {success: false, message: '商品详情中处理结果不能为空'};
+                        }
+                    } else if ('错漏发' === this.baoShiEditWorkOrder.issue_type_name) {
+                        if ('宝时终审' === status) {
+                            if (this.baoShiEditWorkOrder.process_progress === null || this.baoShiEditWorkOrder.process_progress === '') {
+                                return {success: false, message: '处理条件不能为空'};
+                            }
+                            let message = null
+                            this.baoShiEditWorkOrder.commodities.forEach(e => {
+                                let {reissue_logistic_number, check_result, end_handle_result, store_in_number} = e;
+                                if (!message) {
+                                    if (!end_handle_result) message = '选择处理结果';
+                                    else if (end_handle_result.indexOf('补发') >= 0 && !reissue_logistic_number) message = '补发单不能为空';
+                                    else if (end_handle_result.indexOf('入库') >= 0 && !store_in_number) message = '入库单号不能为空';
+                                }
+                            });
+                            if (message) {
+                                return {success: false, message: message};
+                            }
+                        } else if ('宝时补发' === status) {
+                            if (this.baoShiEditWorkOrder.process_progress === null || this.baoShiEditWorkOrder.process_progress === '') {
+                                return {success: false, message: '处理条件不能为空'};
+                            }
+                            let filers = this.baoShiEditWorkOrder.commodities.filter(e => {
+                                return e.check_result === null || e.check_result.length <= 0;
+                            });
+                            if (filers.length > 0) {
+                                return {success: false, message: '商品详情中处理结果不能为空'};
+                            }
+                            let message = null
+                            this.baoShiEditWorkOrder.commodities.forEach(e => {
+                                if (message) {
+                                } else if ('宝时补发' === e.end_handle_result && (!e.reissue_logistic_number || e.reissue_logistic_number.trim().length === 0)) {
+                                    message = '补发单号为必填';
+                                }
+                            });
+                            if (message) {
+                                return {success: false, message: message};
+                            }
+                        }
+                    }
+                    return {success: true};
+                },
+                baoShiEditProcess(url, formData) {
+                    this.waitingTempTip('处理中');
+                    window.axios.post(url, formData).then(res => {
+                        window.tempTip.cancelWaitingTip();
+                        if (res.data.success) {
+                            this.sortOrder(res.data.data);
+                            this.$set(this.workOrders, this.selectIndex, res.data.data);
+                            this.successTempTip('处理完成');
+                            if (this.baoShiEditWorkOrder.is_edit) this.dialogEditBaoShiVisible = false
+                            else this.dialogShowBaoShiVisible = false
+                        } else {
+                            this.errorTempTip(res.data.message ? res.data.message : '处理出现异常,刷新页面重试');
+                        }
+                    }).catch(err => {
+                        window.tempTip.cancelWaitingTip();
+                        this.errorTempTip(err);
+                    });
+                },
+                getBaoShiProcessProgress() {
+                    let {issue_type_name} = this.baoShiEditWorkOrder;
+                    let items = [
+                        {issue_type_name: '拦截', option: ['拦截成功', '拦截失败']},
+                        {issue_type_name: '信息更改', option: ['更改成功', '更改失败'],},
+                        {issue_type_name: '快递异常', option: ['丢件赔偿', '签收成功']},
+                        {issue_type_name: '错漏发', option: ['已补发', '已入库'],},
+                        {issue_type_name: '破损', option: ['全部赔偿', '部分赔偿', '不赔偿'],},
+                    ];
+                    let item = items.find(e => e.issue_type_name === issue_type_name);
+                    return item ? item.option : [];
+                },
+                getBaoShiProcessResults() {
+                    let {issue_type_name} = this.baoShiEditWorkOrder;
+                    let items = [
+                        {issue_type_name: '拦截', option: ['拦截成功', '拦截失败']},
+                        {issue_type_name: '信息更改', option: ['更改成功', '更改失败'],},
+                        {issue_type_name: '快递异常', option: ['赔偿', '不赔偿'],},
+                        {issue_type_name: '错漏发', option: ['核实少发', '核实多发', '核实未错漏发']},
+                        {issue_type_name: '破损', option: ['核实全部破损', '核实部分破损', '核实未破损'],},
+                        {issue_type_name: '快递丢件', option: ['赔偿', '不赔偿'],},
+                    ];
+                    let item = items.find(e => e.issue_type_name === issue_type_name);
+                    return item ? item.option : [];
+                },
+                getBaoShiProcessResultByItem(item){
+
+                },
+                getBaoShiEndHandleResult(commodity) {
+                    let {process_result} = commodity;
+                    let items = [
+                        {process_result: '多发,客户买下', option: ['已完成出库']},
+                        {process_result: '多发,客户退回', option: ['已退回仓库', '完成']},
+                        {process_result: '少发,宝时补发', option: ['宝时补发']},
+                        {process_result: '少发,不补发', option: ['已完成入库']},
+                        {process_result: '核实未错漏发', option: ['确认未错漏发']},
+                    ];
+                    return items.filter(e => process_result === e.process_result).map(e => e.option).shift() ?? [];
+
+                },
+                getOwnerMistakeProcessResultInfo(process_result, item) {
+                    let items = [
+                        {process_result: "少发,宝时补发", option: ['商家不做单'],},
+                        {process_result: "多发,客户买下", option: ['商家做出库单(物流选自提,宝时不发货)'],},
+                        {process_result: "多发,客户退回", option: ['客户自行退回(提供退回单号)', '宝时上门取件(提供寄件信息,地址,联系人,电话)'],},
+                        {process_result: "少发,不补发", option: ['商家做入库单,选择明细和数量'],},
+                        {process_result: "核实未错漏发", option: ['确认未错漏发'],},
+                    ];
+                    let options = items.filter(e => e.process_result === process_result).map(e => e.option).shift() ?? [];
+                    if (options.length === 0) {
+                        item.process_result_info = options[0];
+                    }
+                    return options
+                },
+                baoShiDamageWorkOrderAuto(item) {
+                    let abnormal_amount = Number(item.abnormal_amount),
+                        check_amount = Number(item.bao_shi_check_amount);
+                    if (check_amount === 0) item.process_result = '核实未破损';
+                    else if (abnormal_amount > check_amount) item.process_result = '核实部分破损';
+                    else if (abnormal_amount === check_amount) item.process_result = '核实全部破损';
+                    this.countBaoShiDamageWorkOrderAuto();
+                },
+                countBaoShiDamageWorkOrderAuto() {
+                    let data = {allCompensate: 0, partiallyCompensate: 0, notCompensate: 0};
+                    this.baoShiEditWorkOrder.commodities.forEach(e => {
+                        let abnormal_amount = Number(e.abnormal_amount),
+                            bao_shi_check_amount = Number(e.bao_shi_check_amount);
+                        if (bao_shi_check_amount === 0) {
+                            data.notCompensate += 1;
+                        } else if (abnormal_amount > bao_shi_check_amount) {
+                            data.partiallyCompensate += 1;
+                        } else if (abnormal_amount === bao_shi_check_amount) {
+                            data.allCompensate += 1;
+                        }
+                    });
+                    if (data.partiallyCompensate === 0 && data.allCompensate === 0 && data.notCompensate > 0) this.baoShiEditWorkOrder.process_progress = '不赔偿';
+                    else if (data.partiallyCompensate > 0 || (data.partiallyCompensate > 0 || data.notCompensate > 0)) this.baoShiEditWorkOrder.process_progress = '部分赔偿';
+                    else if (data.allCompensate > 0 && data.partiallyCompensate === 0 && data.notCompensate === 0) this.baoShiEditWorkOrder.process_progress = '全部赔偿';
+                },
+                baoShiChangeExpressAbnormal(item) {
+                    if (item.process_result === '赔偿') this.baoShiEditWorkOrder.process_progress = '丢件赔偿';
+                    else if (item.process_result === '不赔偿') this.baoShiEditWorkOrder.process_progress = '签收成功';
+                },
+                computeBaoShiMistakeCheckResult(item) {
+                    let amount = Number(item.amount);
+                    let bao_shi_check_amount = Number(item['bao_shi_check_amount']);
+                    item.check_result = amount === bao_shi_check_amount ? '核实未错漏发' : (amount < bao_shi_check_amount ? '核实多发' : '核实少发')
+                },
+                computeBaoShiMistakeProcess() {
+                    let less = 0, mary = 0, not = 0;
+                    this.baoShiEditWorkOrder.commodities.forEach(e => {
+                        if (e.process_result_info.indexOf("少发") !== -1) less++;
+                        else if (e.process_result_info.indexOf("多发") !== -1) mary++;
+                        else if (e.process_result_info) not++;
+                    });
+                    this.baoShiEditWorkOrder.process_progress = '';
+                },
+                autoComputeBaoShiMistake() {
+                    let store_in = 0, out_in = 0, noMistake = 0; //  store_in 不补发 out_in 补发
+                    this.baoShiEditWorkOrder.commodities.forEach(e => {
+                        let {end_handle_result} = e;
+                        if (end_handle_result.indexOf('补发') >= 0) out_in++;
+                        else if (end_handle_result.indexOf('入库') >= 0) store_in++;
+                        else if (end_handle_result.indexOf('退回') >= 0) store_in++;
+                        else if (end_handle_result.indexOf('完成') >= 0) store_in++;
+                        else if (end_handle_result.indexOf('未错漏发')) noMistake++;
+                    });
+                    // 补发 不补发
+                    if (out_in > store_in) this.baoShiEditWorkOrder.process_progress = '已补发';
+                    else if (out_in < store_in) this.baoShiEditWorkOrder.process_progress = '已入库';
+                    else if (noMistake > 0) this.baoShiEditWorkOrder.process_progress = '确认未错漏发';
+                },
+                baoShiAutoComputeMistakeProcessProcess() {  //
+                    let all = 0, reissue = 0, store = 0, process_progress = ''; // 未错漏发 补发 入库
+                    this.baoShiEditWorkOrder.commodities.forEach(e => {
+                        let {end_handle_result} = e;
+                        if (end_handle_result.indexOf('补发') >= 0 || end_handle_result.indexOf('出库') >= 0) reissue++;
+                        else if (end_handle_result.indexOf('退回') >= 0 || end_handle_result.indexOf('完成') >= 0) store++;
+                        else if (end_handle_result.indexOf('已完成入库') >= 0 ) store++;
+                        else if (end_handle_result.indexOf('完成出库') >= 0 ) reissue++;
+                        else if (end_handle_result.indexOf('确认未错漏发') >= 0) all++;
+                    });
+                    if (reissue > 0) process_progress = '已补发';
+                    else if (store > 0) process_progress = '已入库';
+                    else if (all > 0) process_progress = '确认未错漏发';
+                    else process_progress = '确认未错漏发';
+                    this.baoShiEditWorkOrder.process_progress = process_progress;
+                },
+                baoShiGroupCommodities(items) {
+                    items.forEach(e => e.count = 0);
+                    let index = 0;
+                    let logistic_number = items[0]['logistic_number'];
+                    let count = 0;
+                    items.forEach(e=>e.count=0);
+                    items.forEach((e, i) => {
+                        let cur_logistic_number = e.logistic_number,
+                            {process_result_info,end_handle_result} = e,
+                            isAdd = false, isAddRow = false;
+                        if (process_result_info) {
+                            if (process_result_info.indexOf('补发') >= 0 ||
+                                process_result_info.indexOf('完成') >= 0 ||
+                                process_result_info.indexOf('入库') >= 0 ||
+                                process_result_info.indexOf('商家做出库单') >= 0 ||
+                                process_result_info.indexOf('商家做入库单') >= 0 ||
+                                process_result_info.indexOf('商家不做单') >= 0) {
+                                isAddRow = true;
+                            }
+                        }
+                        if (cur_logistic_number === logistic_number) {
+                            count++;
+                            if (isAddRow) count++;
+                            if (isAdd) count++;
+                        } else if (cur_logistic_number !== logistic_number) {
+                            logistic_number = cur_logistic_number;
+                            items[index]['count'] = count;
+                            index = i;
+                            count = 1;
+                            if (isAdd) count++;
+                            if (isAddRow) count++;
+                        }
+                        items[index]['count'] = count;
+                    });
+                },
+
+                // 承运商
+                isLogisticDispose(item) {
+                    let {issue_type_name, status} = item;
+                    return ['拦截', '信息更改', '快递异常', '破损', '快递丢件'].includes(issue_type_name) && status === '承运商处理';
+                },
+                canLogisticEdit(item) {
+                    let {issue_type_name, last_status, status} = item;
+                    if (status === '完成') return false;
+                    else return ['拦截', '信息更改', '快递异常', '破损', '快递丢件'].includes(issue_type_name) && last_status === '承运商处理';
+                },
+                logisticShowEdit(item, index) {
+                    let {issue_type_name, detail_id, commodities} = item.pending_detail;
+                    this.logisticEditWorkOrder.is_edit = true;
+                    this.selectIndex = index;
+                    this.logisticEditWorkOrder.issue_type_name = issue_type_name;
+                    this.logisticEditWorkOrder.detail_id = detail_id;
+                    this.logisticEditWorkOrder.process_progress = item.process_progress;
+                    if ('拦截' === issue_type_name) {
+                        this.dialogEditLogisticVisible = true;
+                    } else if ('信息更改' === issue_type_name) {
+                        this.dialogEditLogisticVisible = true;
+                    } else if ('快递异常' === issue_type_name) {
+                        this.logisticEditWorkOrder.commodities = item.pending_detail.commodities.map(e => e);
+                        this.dialogEditLogisticVisible = true;
+                    } else if ('破损' === issue_type_name) {
+                        this.countByCommodities(commodities);
+                        this.logisticEditWorkOrder.commodities = commodities;
+                        this.dialogEditLogisticVisible = true;
+                    }
+                },
+                logisticShowDispose(item, index) {
+                    let {status} = item.issue_type_name;
+                    let {issue_type_name, detail_id, commodities} = item.pending_detail;
+                    this.logisticEditWorkOrder.is_edit = false;
+                    if (issue_type_name === '拦截') {
+                        this.selectIndex = index;
+                        this.logisticEditWorkOrder.issue_type_name = issue_type_name;
+                        this.logisticEditWorkOrder.detail_id = detail_id;
+                        this.logisticEditWorkOrder.process_progress = null;
+                        this.dialogShowLogisticVisible = true;
+                    } else if (issue_type_name === '信息更改') {
+                        this.selectIndex = index;
+                        this.logisticEditWorkOrder.issue_type_name = issue_type_name;
+                        this.logisticEditWorkOrder.detail_id = detail_id;
+                        this.logisticEditWorkOrder.process_progress = null;
+                        this.dialogShowLogisticVisible = true;
+                    } else if ('快递丢件' === issue_type_name) {
                         this.selectIndex = index;
                         this.logisticEditWorkOrder.detail_id = item.pending_detail.detail_id;
                         this.logisticEditWorkOrder.issue_type_name = issue_type_name;
                         this.logisticEditWorkOrder.status = status;
                         let commodities = item.pending_detail.commodities;
-                        commodities.forEach(e=>{
+                        commodities.forEach(e => {
                             e.check_amount = e.abnormal_amount;
                         });
                         this.logisticEditWorkOrder.commodities = this.countCommoditiesByLogisticNumber(commodities);
-                        $("#logistic-fill-work-order-modal").modal('show');
-                    } else if ('破损' === issue_type_name){
+                        this.dialogShowLogisticVisible = true;
+                    } else if ('破损' === issue_type_name) {
                         this.selectIndex = index;
                         this.logisticEditWorkOrder.detail_id = item.pending_detail.detail_id;
                         this.logisticEditWorkOrder.issue_type_name = issue_type_name;
                         this.logisticEditWorkOrder.status = status;
                         let commodities = item.pending_detail.commodities;
-                        commodities.forEach(e=>{
-                            e.check_amount = e.abnormal_amount;
+                        commodities.forEach(e => {
+                            e.check_amount = e.amount;
+                            e.check_result = '核实全部破损';
                         });
+                        this.logisticEditWorkOrder.process_progress = '核实全部破损'
                         this.logisticEditWorkOrder.commodities = this.countCommoditiesByLogisticNumber(commodities);
-                        $("#logistic-fill-work-order-modal").modal('show');
-                    } else if ('快递异常' === issue_type_name){
+                        this.dialogShowLogisticVisible = true;
+                    } else if ('快递异常' === issue_type_name) {
                         this.selectIndex = index;
                         this.logisticEditWorkOrder.detail_id = detail_id;
                         this.logisticEditWorkOrder.issue_type_name = issue_type_name;
                         this.logisticEditWorkOrder.status = status;
+                        this.logisticEditWorkOrder.process_progress = null;
                         let commodities = item.pending_detail.commodities;
-                        commodities.forEach(e=>{
+                        commodities.forEach(e => {
                             e.check_amount = e.abnormal_amount;
                         });
                         this.logisticEditWorkOrder.commodities = this.countCommoditiesByLogisticNumber(commodities);
-                        $("#logistic-fill-work-order-modal").modal('show');
+                        this.dialogShowLogisticVisible = true;
                     }
                 },
                 logisticEdit() {
-                    let {issue_type_name,commodities,detail_id} = this.logisticEditWorkOrder;
-                    if (issue_type_name ==='破损'){
+                    let {issue_type_name, commodities, detail_id, process_progress} = this.logisticEditWorkOrder;
+                    if (issue_type_name === '拦截') {
+                        let res = this.checkLogisticEditWorkOrder();
+                        if (!res.success) {
+                            this.errorTempTip(res.message);
+                            return;
+                        }
+                        let url = "{{route('workOrder.intercept.logistic.handlerApi')}}";
+                        let data = {detail_id: detail_id, process_progress: process_progress};
+                        this.logisticEditProcess(data, url);
+                    } else if (issue_type_name === '信息更改') {
+                        let res = this.checkLogisticEditWorkOrder();
+                        if (!res.success) {
+                            this.errorTempTip(res.message);
+                            return;
+                        }
+                        let url = "{{route('workOrder.informationChange.logistic.handlerApi')}}";
+                        let data = {detail_id: detail_id, process_progress: process_progress};
+                        this.logisticEditProcess(data, url);
+                    } else if (issue_type_name === '破损') {
                         let res = this.checkLogisticEditWorkOrder();
-                        if (!res.success){
+                        if (!res.success) {
                             this.errorTempTip(res.message);
                             return;
                         }
                         let url = '{{route('workOrder.damage.logistic.handlerApi')}}';
-                        let formData= new FormData();
-                        formData.append('detail_id',detail_id);
-                        commodities.forEach(e=>{
-                            formData.append('commodities[]',JSON.stringify(e));
+                        let formData = new FormData();
+                        formData.append('detail_id', detail_id);
+                        formData.append('process_progress', process_progress);
+                        commodities.forEach(e => {
+                            formData.append('commodities[]', JSON.stringify(e));
                         });
-                        window.tempTip.setIndex(2000);
-                        window.tempTip.waitingTip('处理中');
-                        window.axios.post(url,formData).then(res=>{
-                            window.tempTip.cancelWaitingTip();
-                            if (res.data.success){
-                                this.sortOrder(res.data.data);
-                                this.$set(this.workOrders,this.selectIndex,res.data.data);
-                                this.successTempTip('处理完成');
-                                $("#logistic-fill-work-order-modal").modal('hide');
-                            } else {
-                                this.errorTempTip(res.data.message ? res.data.message : '处理出现异常,刷新当前页面重试');
-                            }
-                        }).catch(err=>{
-                            window.tempTip.cancelWaitingTip();
-                            this.errorTempTip(err);
-                        })
-                    } else if ('快递异常' === issue_type_name){
+                        this.logisticEditProcess(formData, url);
+                    } else if ('快递异常' === issue_type_name) {
                         let res = this.checkLogisticEditWorkOrder();
-                        if (!res.success){
+                        if (!res.success) {
                             this.errorTempTip(res.message);
                             return;
                         }
                         let url = '{{route('workOrder.expressAbnormal.logistic.handlerApi')}}';
-                        let formData= new FormData();
-                        formData.append('detail_id',detail_id);
-                        commodities.forEach(e=>{
-                            formData.append('commodities[]',JSON.stringify(e));
+                        let formData = new FormData();
+                        formData.append('detail_id', detail_id);
+                        formData.append('process_progress', process_progress);
+                        commodities.forEach(e => {
+                            formData.append('commodities[]', JSON.stringify(e));
                         });
-                        window.tempTip.setIndex(2000);
-                        window.tempTip.waitingTip('处理中');
-                        window.axios.post(url,formData).then(res=>{
-                            window.tempTip.cancelWaitingTip();
-                            if (res.data.success){
-                                this.sortOrder(res.data.data);
-                                this.$set(this.workOrders,this.selectIndex,res.data.data);
-                                this.successTempTip('处理完成');
-                                $("#logistic-fill-work-order-modal").modal('hide');
-                            } else {
-                                this.errorTempTip(res.data.message ? res.data.message : '处理出现异常,刷新当前页面重试');
-                            }
-                        }).catch(err=>{
-                            window.tempTip.cancelWaitingTip();
-                            this.errorTempTip(err);
-                        })
+                        this.logisticEditProcess(formData, url);
+                    }
+                },
+                logisticEditProcess(data, url) {
+                    this.waitingTempTip('处理中')
+                    window.axios.post(url, data).then(res => {
+                        window.tempTip.cancelWaitingTip();
+                        if (res.data.success) {
+                            this.sortOrder(res.data.data);
+                            this.$set(this.workOrders, this.selectIndex, res.data.data);
+                            this.successTempTip('处理完成');
+                            if (this.logisticEditWorkOrder.is_edit) this.dialogEditLogisticVisible = false;
+                            else this.dialogShowLogisticVisible = false;
+                         } else {
+                            this.errorTempTip(res.data.message ? res.data.message : '处理出现异常,刷新当前页面重试');
+                        }
+                    }).catch(err => {
+                        window.tempTip.cancelWaitingTip();
+                        this.errorTempTip(err);
+                    });
+                },
+                checkLogisticEditWorkOrder() {
+                    if (this.logisticEditWorkOrder.process_progress === null) {
+                        return {success: false, message: '处理结果为必选项'};
                     }
+                    let filers = this.logisticEditWorkOrder.commodities.filter(item => {
+                        return item.check_result.length === 0;
+                    });
+                    if (filers.length > 0) {
+                        return {success: false, message: '商品详情的核实结果不能为空'};
+                    }
+
+                    return {success: true};
                 },
-                // 商家相关
+                getLogisticCheckResult() {
+                    let {issue_type_name} = this.logisticEditWorkOrder;
+                    let items = [
+                        {issue_type_name: '快递异常', option: ['已处理', '已拦截']},
+                        {issue_type_name: '破损', option: ['核实全部破损', '核实部分破损', '核实未破损']},
+                    ];
+                    let item = items.find(e => e.issue_type_name === issue_type_name);
+                    return item ? item.option : [];
+                },
+                getLogisticProcessProgress() {
+                    let {issue_type_name} = this.logisticEditWorkOrder;
+                    let items = [
+                        {issue_type_name: '拦截', option: ['已处理', '已签收']},
+                        {issue_type_name: '信息更改', option: ['已处理', '无法更改']},
+                        {issue_type_name: '快递异常', option: ['已处理', '已拦截']},
+                        {issue_type_name: '破损', option: ['核实全部破损', '核实部分破损', '核实未破损']},
+                    ];
+                    let item = items.find(e => e.issue_type_name === issue_type_name);
+                    return item ? item.option : [];
+                },
+                logisticDamageWorkOrderAuto(item) {
+                    let abnormal_amount = Number(item.abnormal_amount),
+                        check_amount = Number(item.check_amount);
+                    if (check_amount === 0) item.check_result = '核实未破损';
+                    else if (abnormal_amount > check_amount) item.check_result = '核实部分破损';
+                    else if (abnormal_amount === check_amount) item.check_result = '核实全部破损';
+                    this.countLogisticDamageWorkOrderAuto();
+                },
+                logisticChangeExpressAbnormal(item) {
+                    this.logisticEditWorkOrder.process_progress = item.check_result;
+                },
+                countLogisticDamageWorkOrderAuto() {
+                    let data = {allDamage: 0, partiallyDamage: 0, notDamage: 0};
+                    this.logisticEditWorkOrder.commodities.forEach(e => {
+                        let abnormal_amount = Number(e.abnormal_amount),
+                            check_amount = Number(e.check_amount);
+                        if (check_amount === 0) {
+                            data.notDamage += 1;
+                        } else if (abnormal_amount > check_amount) {
+                            data.partiallyDamage += 1;
+                        } else if (abnormal_amount === check_amount) {
+                            data.allDamage += 1;
+                        }
+                    });
+                    if (data.partiallyDamage === 0 && data.allDamage === 0 && data.notDamage > 0) this.logisticEditWorkOrder.process_progress = '核实未破损';
+                    else if (data.partiallyDamage > 0 || (data.partiallyDamage > 0 || data.notDamage > 0)) this.logisticEditWorkOrder.process_progress = '核实部分破损';
+                    else if (data.allDamage > 0 && data.partiallyDamage === 0 && data.notDamage === 0) this.logisticEditWorkOrder.process_progress = '核实全部破损'
+                },
+                // 商家
                 isOwnerDispose(item) {
-                    if (item.issue_type_name === '快递丢件' && item.status === '货主处理') return true;
-                    else if (item.issue_type_name === '错漏发' && item.status === '待货主完结') return true;
+                    let {issue_type_name, status} = item;
+                    if (issue_type_name === '快递丢件' && status === '货主处理') return true;
+                    else if (issue_type_name === '错漏发' && status === '货主处理') return true;
                     return false;
                 },
-                ownerShowEdit(item, index) {
+                canOwnerEdit(item) {
+                    let {issue_type_name, last_status,status} = item;
+                    if (issue_type_name === '信息更改' && status === '承运商处理') return true;
+                    if (issue_type_name === '快递丢件' && last_status === '货主处理') return true;
+                    if (issue_type_name === '快递异常' && last_status === '') return true;
+                    if (issue_type_name === '破损' && last_status === '') return true;
+                    if (issue_type_name === '错漏发' && last_status === '货主处理') return true;
+                    else if (issue_type_name === '错漏发' && last_status === '') return true;
+                    return false;
+                },
+                ownerShowDispose(item, index) {
                     let issue_type_name = item.issue_type_name;
+                    this.selectIndex = index;
+                    this.ownerEditWorkOrder.is_edit = false;
+                    this.ownerEditWorkOrder.detail_id = item.pending_detail.detail_id;      // 工单详情id
                     if (issue_type_name === '快递丢件' && item.status === '货主处理') {
-                        window.tempTip.waitingTip('获取数据中');
+                        this.waitingTempTip('获取数据中');
                         this.getOrderCommodity(item).then(res => {
+                            res = this.countCommoditiesByLogisticNumber(res);
                             window.tempTip.cancelWaitingTip();
+                            this.ownerEditWorkOrder.id = item.id;                                   // 工单id
                             this.selectIndex = index;
-                            this.ownerEditWorKOrder.pirce = null;
-                            this.ownerEditWorKOrder.status = item.status;
-                            this.ownerEditWorKOrder.issue_type_name = issue_type_name;
-                            this.ownerEditWorKOrder.commodities = res.map(item => {
+                            this.ownerEditWorkOrder.pirce = null;
+                            this.ownerEditWorkOrder.status = item.status;
+                            this.ownerEditWorkOrder.issue_type_name = issue_type_name;
+                            let commodities = res.map(item => {
                                 item.abnormal_amount = item.amount;
                                 item.tag = 0;
                                 item.price = 0;
+                                item.reissue_logistic_number = null;
+                                item.out_order_number = null;
+                                item.store_in_amount = null;
                                 return item;
                             }); //商品详情
-                            this.ownerEditWorKOrder.id = item.id;                                   // 工单id
-                            this.ownerEditWorKOrder.detail_id = item.pending_detail.detail_id;      // 工单详情id
-                            this.ownerEditWorKOrder.reissue_logistic_number = null;                 //
-                            this.ownerEditWorKOrder.logistic_number = null;                         //
-                            this.ownerEditWorKOrder.refundImages = [];                              // 退款截图
-                            this.ownerEditWorKOrder.dealImages = [];                                // 交易截图
-                            $("#owner-fill-work-order-modal").modal('show');
+                            this.ownerEditWorkOrder.commodities = this.groupShowWorkOrderCommodity(commodities);
+                            this.ownerEditWorkOrder.reissue_logistic_number = null;                 //
+                            this.ownerEditWorkOrder.logistic_number = null;                         //
+                            this.ownerEditWorkOrder.refundImages = [];                              // 退款截图
+                            this.ownerEditWorkOrder.dealImages = [];                                // 交易截图
+                           this.dialogShowOwnerVisible = true;
                         }).catch(err => {
                             window.tempTip.cancelWaitingTip();
                             this.errorTempTip('获取数据异常')
                         });
-                    } else if (issue_type_name === '错漏发' && item.status === '待货主完结') {
-                        this.selectIndex = index;
-                        this.ownerEditWorKOrder.detail_id = item.pending_detail.detail_id;
+                    } else if (issue_type_name === '错漏发' && item.status === '货主处理') {
                         let commodities = item.pending_detail.commodities;
-                        commodities.forEach(e=>{
+                        commodities.forEach(e => {
                             e.check_amount = e.abnormal_amount;
+                            e.reissue_logistic_number = null;
+                            e.out_order_number = null;
+                            e.store_in_amount = null;
                         });
-                        this.ownerEditWorKOrder.commodities = this.countCommoditiesByLogisticNumber(commodities);
-                        this.ownerEditWorKOrder.status = item.status;
-                        this.ownerEditWorKOrder.issue_type_name = issue_type_name;
-                        $("#owner-fill-work-order-modal").modal('show');
+                        this.ownerEditWorkOrder.commodities = this.countCommoditiesByLogisticNumber(commodities);
+                        this.ownerEditWorkOrder.status = item.status;
+                        this.ownerEditWorkOrder.issue_type_name = issue_type_name;
+                        this.autoComputeOwnerMistake();
+                        this.dialogShowOwnerVisible = true;
                     }
                 },
-                ownerEdit() {
-                    let {issue_type_name, status} = this.ownerEditWorKOrder;
-                    if (issue_type_name === '快递丢件' && status === '货主处理') {
-                        let res = this.checkOwnerEditWorkOrder();
-                        if (!res.success) {
-                            this.errorTempTip(res.message);
-                            return;
-                        }
-                        let formData = new FormData();
-                        let {detail_id, price, dealImages, refundImages,commodities} = this.ownerEditWorKOrder;
-                        formData.append('detail_id', detail_id);
-                        formData.append('price', price);
-                        dealImages = this.getImages(dealImages);
-                        refundImages = this.getImages(refundImages);
-                        this.setFormDataImagePrefix(formData, 'dealImages', dealImages);
-                        this.setFormDataImagePrefix(formData, 'refundImages', refundImages);
-                        commodities.forEach(e => {
-                            formData.append("commodities[]", JSON.stringify(e));
+                ownerShowEdit(item, index) {
+                    this.selectIndex = index;
+                    let {issue_type_name, logistic_number, pending_detail, type, remark, status} = item;
+                    let {price, remake, images,reissue_logistic_number} = pending_detail;
+                    this.ownerEditWorkOrder.is_edit = true;
+                    this.ownerEditWorkOrder.status = status;
+                    this.ownerEditWorkOrder.price = price;
+                    this.ownerEditWorkOrder.issue_type_name = issue_type_name;
+                    this.ownerEditWorkOrder.logistic_number = logistic_number;
+                    this.ownerEditWorkOrder.remake = remake;
+                    this.ownerEditWorkOrder.type = type;
+                    this.ownerEditWorkOrder.reissue_logistic_number = reissue_logistic_number;
+
+                    this.ownerEditWorkOrder.detail_id = pending_detail.detail_id;
+                    this.ownerEditWorkOrder.packageImages = images.filter(e => e.type === '外包装图片');
+                    this.ownerEditWorkOrder.commodityImages = images.filter(e => e.type === '内物破碎图片');
+                    this.ownerEditWorkOrder.dealImages = images.filter(e => e.type === '交易截图');
+                    this.ownerEditWorkOrder.refundImages = images.filter(e => e.type === '退款成功截图');
+                    this.ownerEditWorkOrder.process_progress = item.process_progress;
+                    this.ownerEditWorkOrder.remark = remark;
+                    let work_order_commodities = pending_detail.commodities ? pending_detail.commodities : [];
+                    work_order_commodities = JSON.parse(JSON.stringify(work_order_commodities));
+                    if ('快递异常' === issue_type_name) {
+                        let {order} = item;
+                        let {packages} = order;
+                        let items = packages.map(e => {
+                            return {logistic_number: e.logistic_number, selected: false, is_created: true}
                         });
-                        window.tempTip.waitingTip('处理中');
-                        let url = '{{route('workOrder.loss.owner.fillDetailApi')}}';
-                        window.axios.post(url, formData,{'Content-Type': 'multipart/form-data'}).then(res => {
-                            window.tempTip.cancelWaitingTip();
-                            if (res.data.success) {
-                                this.successTempTip('处理完成');
-                                this.sortOrder(res.data.data);
-                                this.$set(this.workOrders, this.selectIndex, res.data.data);
-                                this.selectIndex = null;
-                                $("#owner-fill-work-order-modal").modal('hide');
-                            } else if (res.data.message) {
-                                this.errorTempTip(res.data.message);
-                            } else {
-                                this.errorTempTip('处理出现异常');
+
+                        let logistic_numbers = pending_detail.commodities.map(e => {
+                            return {logistic_number: e.logistic_number, selected: true, is_created: false, id: e.id}
+                        });
+                        items.forEach(item => {
+                            let data = logistic_numbers.find(e => e.logistic_number === item.logistic_number);
+                            if (!data) {
+                                logistic_numbers.push(item);
                             }
-                        }).catch(err => {
-                            window.tempTip.cancelWaitingTip();
-                            this.errorTempTip(err);
-                        })
-                    } else if (issue_type_name === '错漏发' && this.ownerEditWorKOrder.status === '待货主完结') {
-                        let res = this.checkOwnerEditWorkOrder();
-                        if (!res.success) {
-                            this.errorTempTip(res.message);
-                            return;
-                        }
-                        let url = '{{route('workOrder.mistake.owner.handlerAndEndApi')}}';
-                        let formData = new FormData();
-                        let {detail_id, commodities,return_logistic_number,
-                            return_address,return_phone,return_name,} = this.ownerEditWorKOrder;
-                        formData.append('detail_id', detail_id);
-                        formData.append('return_logistic_number',return_logistic_number ? return_logistic_number : '');
-                        formData.append('return_address', return_address ? return_address : '');
-                        formData.append('return_phone', return_phone ? return_phone : '');
-                        formData.append('return_name', return_name ? return_name : '');
-                        commodities.forEach(e => {
-                            formData.append("commodities[]", JSON.stringify(e));
                         });
-                        window.tempTip.waitingTip('处理中');
-                        window.axios.post(url, formData,{'Content-Type': 'multipart/form-data'}).then(res => {
+                        this.ownerEditWorkOrder.commodities = logistic_numbers;
+                        this.dialogEditOwnerVisible = true;
+                    } else if ('错漏发' === issue_type_name) {
+                        work_order_commodities.forEach(e => {
+                            e.created = false;
+                            e.tag = false;
+                        }); // 标记编辑
+                        if ('宝时处理' === status) {
+                            this.waitingTempTip('查询中...')
+                            this.getOrderCommodity(item).then(res => {
+                                window.tempTip.cancelWaitingTip();
+                                res.forEach(item => {
+                                    item.created = true;     // 标记创建
+                                    item.tag = false;           // 标记是否过滤
+                                    item.commodity = {name: item.name};
+                                    let data = work_order_commodities.find(e => e.logistic_number === item.logistic_number && e.sku === item.sku);
+                                    if (!data) {
+                                        if ('错漏发' === issue_type_name) {
+                                            if (status === '宝时终审') {
+                                            } else if (status === '宝时处理') {
+                                                item.abnormal_amount = item.amount;
+                                                item.abnormal_type = '未错漏发'
+                                            }
+                                        } else if ('破损' === issue_type_name) {
+                                            item.price = 0;
+                                            item.abnormal_type = '破损';
+                                            item.abnormal_amount = item.amount;
+                                        }
+                                        work_order_commodities.push(item);
+                                    }
+                                });
+                                this.ownerEditWorkOrder.commodities = this.countCommoditiesByLogisticNumber(work_order_commodities);
+                                this.dialogEditOwnerVisible = true;
+                            });
+                        } else if ('宝时终审' === status) {
+                            let {return_address, return_phone, return_name, return_logistic_number} = pending_detail;
+                            this.ownerEditWorkOrder.return_logistic_number = return_logistic_number;
+                            this.ownerEditWorkOrder.return_address = return_address;
+                            this.ownerEditWorkOrder.return_phone = return_phone;
+                            this.ownerEditWorkOrder.return_name = return_name;
+                            this.ownerEditWorkOrder.commodities = this.countCommoditiesByLogisticNumber(work_order_commodities);
+                            this.dialogEditOwnerVisible = true;
+                        }
+                    } else {
+                        work_order_commodities.forEach(e => {
+                            e.created = false;
+                            e.tag = false;
+                        }); // 标记编辑
+                        this.waitingTempTip('查询中...')
+                        this.getOrderCommodity(item).then(res => {
                             window.tempTip.cancelWaitingTip();
-                            if (res.data.success) {
-                                this.successTempTip('处理完成');
-                                this.sortOrder(res.data.data);
-                                this.$set(this.workOrders, this.selectIndex, res.data.data);
-                                this.selectIndex = null;
-                                $("#owner-fill-work-order-modal").modal('hide');
-                            } else if (res.data.message) {
-                                this.errorTempTip(res.data.message);
-                            } else {
-                                this.errorTempTip('处理出现异常');
+                            res.forEach(item => {
+                                item.created = true;     // 标记创建
+                                item.tag = false;           // 标记是否过滤
+                                item.commodity = {name: item.name};
+                                let data = work_order_commodities.find(e => e.logistic_number === item.logistic_number && e.sku === item.sku);
+                                if (!data) {
+                                    if ('错漏发' === issue_type_name) {
+                                        if (status === '宝时终审') {
+                                        } else if (status === '商家处理') {
+                                            item.abnormal_amount = item.amount;
+                                            item.abnormal_type = '未错漏发'
+                                        }
+                                    } else if ('破损' === issue_type_name) {
+                                        item.price = 0;
+                                        item.abnormal_type = '破损';
+                                        item.abnormal_amount = item.amount;
+                                    }
+                                    work_order_commodities.push(item);
+                                }
+                            });
+                            this.ownerEditWorkOrder.commodities = this.countCommoditiesByLogisticNumber(work_order_commodities);
+                            this.dialogEditOwnerVisible = true;
+                            if (this.ownerEditWorkOrder.reissue_logistic_number) {
+                                this.$refs['refund-image-edit-reissue_logistic_number'].innerHTML = reissue_logistic_number;
                             }
                         }).catch(err => {
                             window.tempTip.cancelWaitingTip();
-                            this.errorTempTip(err);
-                        })
+                        });
                     }
+
                 },
-                checkBaoShiEditWorkOrder(){
-                    if (  ['破损','快递异常'].includes(this.baoShiEditWorkOrder.issue_type_name)){
-                        let filers = this.baoShiEditWorkOrder.commodities.filter(e => {
-                            return  e.process_result === null || e.process_result.length <= 0;
-                        });
-                        if (filers.length > 0){
-                            return {success: false, message: '商品详情中处理结果不能为空'};
+                ownerEdit() {
+                    let {issue_type_name, process_progress, is_edit} = this.ownerEditWorkOrder;
+                    let {
+                        detail_id, price, dealImages, refundImages,
+                        commodities, reissue_logistic_number,
+                        return_logistic_number, return_address,
+                        return_phone, return_name, remark, status
+                    } = this.ownerEditWorkOrder;
+
+                    let {delete_image_ids, delete_commodity_ids} = this.ownerEditWorkOrder;
+                    if (issue_type_name === '快递丢件') {
+                        if (is_edit) {
+                            let res = this.checkOwnerEditWorkOrder();
+                            if (!res.success) {
+                                this.errorTempTip(res.message);
+                                return;
+                            }
+                            let formData = new FormData();
+                            formData.append('detail_id', detail_id);
+                            formData.append('price', price);
+                            delete_image_ids.forEach(e => formData.append("delete_image_ids[]", e))
+                            delete_commodity_ids.forEach(e => formData.append("delete_commodity_ids[]", e))
+                            formData.append('is_edit', true);
+                            formData.append('reissue_logistic_number', reissue_logistic_number);
+                            let {dealImages, refundImages} = this.ownerEditWorkOrder;
+                            dealImages = dealImages.filter(e => e.src);
+                            refundImages = refundImages.filter(e => e.src);
+                            this.setFormDataImagePrefix(formData, 'dealImages', this.getImages(dealImages));
+                            this.setFormDataImagePrefix(formData, 'refundImages', this.getImages(refundImages));
+                            let url = '{{route('workOrder.loss.owner.fillDetailApi')}}';
+                            this.ownerEditProcess(formData, url);
+                        } else {
+                            let res = this.checkOwnerEditWorkOrder();
+                            if (!res.success) {
+                                this.errorTempTip(res.message);
+                                return;
+                            }
+                            let formData = new FormData();
+                            reissue_logistic_number ? formData.append('reissue_logistic_number', reissue_logistic_number) : null;
+                            formData.append('detail_id', detail_id);
+                            formData.append('price', price);
+                            dealImages = this.getImages(dealImages);
+                            refundImages = this.getImages(refundImages);
+                            this.setFormDataImagePrefix(formData, 'dealImages', dealImages);
+                            this.setFormDataImagePrefix(formData, 'refundImages', refundImages);
+                            commodities.forEach(e => {
+                                formData.append("commodities[]", JSON.stringify(e));
+                            });
+                            window.tempTip.setIndex(2000);
+                            window.tempTip.waitingTip('处理中');
+                            let url = '{{route('workOrder.loss.owner.fillDetailApi')}}';
+                            this.ownerEditProcess(formData, url);
                         }
-                    } else if ('错漏发' === this.baoShiEditWorkOrder.issue_type_name){
-                        let filers = this.baoShiEditWorkOrder.commodities.filter(e => {
-                            return  e.check_result === null || e.check_result.length <= 0;
-                        });
-                        if (filers.length > 0){
-                            return {success: false, message: '商品详情中处理结果不能为空'};
+                    } else if (issue_type_name === '错漏发') {
+                        if (is_edit) {
+                            let formData = new FormData();
+                            formData.append('detail_id', detail_id);
+                            formData.append('is_edit', true);
+                            formData.append('remark', remark);
+                            if (status === '宝时处理') {
+                                this.ownerAutoComputeMistake();
+                                let res = this.checkOwnerEditWorkOrder();
+                                if (!res.success) {
+                                    this.errorTempTip(res.message);
+                                    return;
+                                }
+                                let url = '{{route('workOrder.mistake.owner.editApi')}}';
+                                commodities.filter(e => !e.tag).filter(e => !e.created).forEach(e => {
+                                    if (e.id) formData.append("update_commodities[]", JSON.stringify(e));
+                                });
+                                commodities.filter(e => !e.tag).filter(e => e.created).filter(e => e.abnormal_type !== '未错漏发').forEach(e => {
+                                    if (!e.id) formData.append("commodities[]", JSON.stringify(e));
+                                });
+                                commodities.filter(e => e.tag).forEach(e => {
+                                    if (e.id) formData.append("delete_commodity_ids[]", e.id);
+                                });
+                                this.ownerEditProcess(formData, url);
+                            } else if (status === '宝时终审') {
+                                let res = this.checkOwnerEditWorkOrder();
+                                if (!res.success) {
+                                    this.errorTempTip(res.message);
+                                    return;
+                                }
+                                let url = '{{route('workOrder.mistake.logistic.end.handlerApi')}}';
+                                formData.append('process_progress', process_progress);
+                                return_logistic_number ? formData.append('return_logistic_number', return_logistic_number) : null;
+                                return_address ? formData.append('return_address', return_address) : null;
+                                return_phone ? formData.append('return_phone', return_phone) : null;
+                                return_name ? formData.append('return_name', return_name) : null;
+                                commodities.filter(e => !e.tag).filter(e => !e.created).forEach(e => {
+                                    if (e.id) formData.append("update_commodities[]", JSON.stringify(e));
+                                });
+                                commodities.filter(e => !e.tag).filter(e => e.created).filter(e => e.abnormal_type !== '未错漏发').forEach(e => {
+                                    if (!e.id) formData.append("commodities[]", JSON.stringify(e));
+                                });
+                                commodities.filter(e => e.tag).forEach(e => {
+                                    if (e.id) formData.append("delete_commodity_ids[]", e.id);
+                                });
+                                this.ownerEditProcess(formData, url);
+                            }
+
+                        } else {
+                            let res = this.checkOwnerEditWorkOrder();
+                            if (!res.success) {
+                                this.errorTempTip(res.message);
+                                return;
+                            }
+                            let url = '{{route('workOrder.mistake.owner.handlerApi')}}';
+                            let formData = new FormData();
+                            formData.append('detail_id', detail_id);
+                            formData.append('process_progress', process_progress);
+                            return_logistic_number ? formData.append('return_logistic_number', return_logistic_number) : null;
+                            return_address ? formData.append('return_address', return_address) : null;
+                            return_phone ? formData.append('return_phone', return_phone) : null;
+                            return_name ? formData.append('return_name', return_name) : null;
+                            return_name ? formData.append('return_name', return_name) : null;
+                            commodities.forEach(e => {
+                                formData.append("commodities[]", JSON.stringify(e));
+                            });
+                            this.ownerEditProcess(formData, url);
                         }
+                    } else if ('快递异常' === issue_type_name) {
+                        if (is_edit) {
+                            let res = this.checkOwnerEditWorkOrder();
+                            if (!res.success) {
+                                this.errorTempTip(res.message);
+                                return;
+                            }
+                            let {dealImages} = this.ownerEditWorkOrder;
+
+                            let formData = new FormData();
+                            let url = '{{route('workOrder.expressAbnormal.owner.editApi')}}';
+                            formData.append('detail_id', detail_id);
+                            formData.append('is_edit', true);
+                            commodities.filter(e => e.selected && e.is_created).forEach(e => formData.append("commodities[]", JSON.stringify(e)));
+                            commodities.filter(e => e.is_created === false && !e.selected).forEach(e => formData.append("delete_commodity_ids[]", e.id));
+                            dealImages = this.getImages(dealImages.filter(e => e.file));
+                            this.setFormDataImagePrefix(formData, 'dealImages', dealImages);
+                            this.ownerEditProcess(formData, url);
+                        }
+                    } else if ('破损' === issue_type_name) {
+                        if (is_edit) {
+                            let res = this.checkOwnerEditWorkOrder();
+                            if (!res.success) {
+                                this.errorTempTip(res.message);
+                                return;
+                            }
+                            let url = '{{route('workOrder.damage.owner.editApi')}}';
+                            let formData = new FormData;
+                            formData.append('detail_id', detail_id);
+                            formData.append('is_edit', true);
+                            formData.append('price', price);
+                            commodities.filter(e => e.created).filter(e => !e.tag).forEach(e => formData.append("commodities[]", JSON.stringify(e)));
+                            commodities.filter(e => !e.created).filter(e => !e.tag).forEach(e => formData.append("update_commodities[]", JSON.stringify(e)));
+                            commodities.filter(e => !e.created).filter(e => e.tag).forEach(e => formData.append("delete_commodity_ids[]", e.id));
+                            this.ownerEditWorkOrder.delete_image_ids.forEach(e => formData.append("delete_image_ids[]", e));
+                            let {packageImages, commodityImages, dealImages} = this.ownerEditWorkOrder;
+                            this.setFormDataImagePrefix(formData, 'packageImages', this.getImages(packageImages.filter(e => e.file)));
+                            this.setFormDataImagePrefix(formData, 'commodityImages', this.getImages(commodityImages.filter(e => e.file)));
+                            this.setFormDataImagePrefix(formData, 'dealImages', this.getImages(dealImages.filter(e => e.file)));
+                            this.ownerEditProcess(formData, url);
+                        }
+                    } else if ('信息更改' === issue_type_name){
+                            let formData = new FormData();
+                            let {detail_id,remark} = this.ownerEditWorkOrder;
+                            formData.append('detail_id',detail_id);
+                            formData.append('remark',remark);
+                            let url = "{{route('workOrder.informationChange.owner.editApi')}}";
+                            this.ownerEditProcess(formData,url);
                     }
-                    return {success:true};
+                },
+                ownerEditProcess(data, url) {
+                    this.waitingTempTip('处理中');
+                    window.axios.post(url, data, {'Content-Type': 'multipart/form-data'}).then(res => {
+                        window.tempTip.cancelWaitingTip();
+                        if (res.data.success) {
+                            this.successTempTip('处理完成');
+                            this.sortOrder(res.data.data);
+                            this.$set(this.workOrders, this.selectIndex, res.data.data);
+                            this.selectIndex = null;
+                            if (this.ownerEditWorkOrder.is_edit) this.dialogEditOwnerVisible = false;
+                            else this.dialogShowOwnerVisible = false;
+                        } else if (res.data.message) {
+                            this.errorTempTip(res.data.message);
+                        } else {
+                            this.errorTempTip('处理出现异常');
+                        }
+                    }).catch(err => {
+                        window.tempTip.cancelWaitingTip();
+                        this.errorTempTip(err);
+                    });
                 },
                 checkOwnerEditWorkOrder() {
-                    if (this.ownerEditWorKOrder.issue_type_name === '快递丢件'){
-                        if (this.ownerEditWorKOrder.reissue_logistic_number) {
-                        } else if (this.ownerEditWorKOrder.dealImages.length === 0) {
-                            return {success: false, message: '交易截图和补发单号 二选一'};
+                    let {issue_type_name, is_edit} = this.ownerEditWorkOrder;
+                    if (issue_type_name === '快递丢件') {
+                        if (!this.ownerEditWorkOrder.price) {
+                            return {success: false, message: '商品总价值为必填项'};
+                        }
+                        if (this.ownerEditWorkOrder.reissue_logistic_number) {
+                        } else if (this.ownerEditWorkOrder.refundImages.length === 0) {
+                            return {success: false, message: '退款成功截图和补发快递单号 二选一'};
                         }
-                        if (this.ownerEditWorKOrder.commodities.length === 0) {
+                        if (this.ownerEditWorkOrder.commodities.length === 0) {
                             return {success: false, message: '丢件商品为必填项'};
                         }
-                        let filers = this.ownerEditWorKOrder.commodities.filter(item => {
-                            return Number(item.price) <= 0 || Number(item.abnormal_amount) <= 0;
-                        });
-                        if (filers.length > 0) {
-                            return {success: false, message: '商品详情中价格为异常数量为必填项,且不为0'};
+                        if (this.ownerEditWorkOrder.dealImages.length === 0) {
+                            return {success: false, message: '交易截图为必填项'};
+                        }
+                    } else if (issue_type_name === '错漏发') {
+                        if (is_edit) {
+                            let change_commodities = this.ownerEditWorkOrder.commodities.filter(e => !e.tag).filter(e => !e.created).filter(e => e.abnormal_type !== '未错漏发');
+                            let create_commodities = this.ownerEditWorkOrder.commodities.filter(e => !e.tag).filter(e => e.created).filter(e => e.abnormal_type !== '未错漏发');
+                            if (change_commodities.length === 0 && create_commodities.length === 0) {
+                                return {success: false, message: '商品详情为必选项,且商品不能全为未错漏发'};
+                            }
+                            if (this.hasReturnAddressInfo(this.ownerEditWorkOrder.commodities)) {
+                                if (!this.ownerEditWorkOrder.return_name || !this.ownerEditWorkOrder.return_address || !this.ownerEditWorkOrder.return_phone) {
+                                    return {success: false, message: '完整填写寄件人信息'};
+                                }
+                            }
+                            if (this.hasReturnLogisticNumber(this.ownerEditWorkOrder.commodities)) {
+                                if (!this.ownerEditWorkOrder.return_logistic_number) {
+                                    return {success: false, message: '填写退回快递单号'};
+                                }
+                            }
+                            let message = null
+                            this.ownerEditWorkOrder.commodities.forEach(e=>{
+                                if (!message){
+                                    if(this.hasStoreNumber(e) && !e.store_in_number){
+                                        message = '入库单号不能未空';
+                                    }
+                                }
+                            });
+                            return {success: true};
+                        }
+                        if (!this.ownerEditWorkOrder.process_progress) {
+                            return {success: false, message: '处理项不能为空'};
                         }
-                    } else if (this.ownerEditWorKOrder.issue_type_name === '错漏发'){
-                        let filters = this.ownerEditWorKOrder.commodities.filter(e=>{
-                            if (e.check_result!== '核实未错漏发' &&( e.process_result === '' || e.process_result_info === ''))return true;
+                        let filters = this.ownerEditWorkOrder.commodities.filter(e => {
+                            if (e.check_result !== '核实未错漏发' && (e.process_result === '' || e.process_result_info === '')) return true;
                             else return e.check_result === '核实未错漏发' && e.process_result === '';
                         });
-                        if (filters.length > 0 ){
+                        if (filters.length > 0) {
                             return {success: false, message: '商品详情中的处理项,和处理子项 未必选项'};
                         }
-                        // hasReturnAddressInfo
-                        // hasReturnLogisticNumber
-                        if(this.hasReturnAddressInfo(this.ownerEditWorKOrder.commodities)){
-                            if (!this.ownerEditWorKOrder.return_name || !this.ownerEditWorKOrder.return_address || !this.ownerEditWorKOrder.return_phone){
+                        if (this.hasReturnAddressInfo(this.ownerEditWorkOrder.commodities)) {
+                            if (!this.ownerEditWorkOrder.return_name || !this.ownerEditWorkOrder.return_address || !this.ownerEditWorkOrder.return_phone) {
                                 return {success: false, message: '完整填写寄件人信息'};
                             }
                         }
-                        if(this.hasReturnLogisticNumber(this.ownerEditWorKOrder.commodities)){
-                            if (!this.ownerEditWorKOrder.return_logistic_number ){
+                        if (this.hasReturnLogisticNumber(this.ownerEditWorkOrder.commodities)) {
+                            if (!this.ownerEditWorkOrder.return_logistic_number) {
                                 return {success: false, message: '填写退回快递单号'};
                             }
                         }
-
+                        let message = null
+                        this.ownerEditWorkOrder.commodities.forEach(e=>{
+                            if (!message){
+                                if(this.hasStoreNumber(e) && !e.store_in_number){
+                                    message = '入库单号不能未空';
+                                }
+                            }
+                        });
+                        if (!this.ownerEditWorkOrder.process_progress) {
+                            return {success: false, message: '处理项未必填项'};
+                        }
+                        message = null;
+                        this.ownerEditWorkOrder.commodities.forEach(e => {
+                            if (message) {
+                            } else if ('商家做出库单(物流选自提,宝时不发货)' === e.process_result_info && !e.out_order_number) {
+                                message = '出库订单号不能为空';
+                            } else if ('商家做入库单,选择明细和数量' === e.process_result_info && !e.store_in_amount) {
+                                message = '入库单不能为空';
+                            }
+                        });
+                        if (message) return {success: false, message: message};
+                    } else if ('快递异常' === issue_type_name) {
+                        if (is_edit) {
+                            let {type, commodities, dealImages} = this.ownerEditWorkOrder;
+                            if (commodities.length === 0) {
+                                return {success: false, message: '快递单号不能为空'};
+                            }
+                            if (type === null) {
+                                return {success: false, message: '快递异常类型不能为空'};
+                            }
+                            if (dealImages.length === 0) {
+                                return {success: false, message: '交易截图不能为空'};
+                            }
+                            commodities = commodities.filter(e => e.selected);
+                            if (commodities.length === 0) {
+                                return {success: false, message: '请勾选快递单号'};
+                            }
+                        }
+                    } else if ('破损' === issue_type_name) {
+                        let {type, commodities, dealImages, packageImages, commodityImages} = this.ownerEditWorkOrder;
+                        if (commodities.length === 0) {
+                            return {success: false, message: '快递单号不能为空'};
+                        }
+                        if (type === null) {
+                            return {success: false, message: '快递异常类型不能为空'};
+                        }
+                        if (packageImages.length === 0) {
+                            return {success: false, message: '交易截图不能为空'};
+                        }
+                        if (commodityImages.length === 0) {
+                            return {success: false, message: '内物破损图不能为空'};
+                        }
+                        if (dealImages.length === 0) {
+                            return {success: false, message: '交易截图不能为空'};
+                        }
+                        commodities = commodities.filter(e => !e.tag);
+                        if (commodities.length === 0) {
+                            return {success: false, message: '商品详情不能为空'};
+                        }
                     }
                     return {success: true};
                 },
-                checkLogisticEditWorkOrder(){
-                    let filers = this.logisticEditWorkOrder.commodities.filter(item => {
-                        return item.check_result.length  === 0;
+                ownerAutoComputeMistake() {
+                    let store_in = 0, out_in = 0,noMistake = 0; //  store_in 不补发 out_in 补发
+                    this.ownerEditWorkOrder.commodities.forEach(e => {
+                        let {process_result} = e;
+                        if (process_result.indexOf('少发,宝时补发')>=0) out_in++;
+                        else if (e.process_result.indexOf('多发,客户买下') >=0 ) out_in++;
+                        else if (e.process_result.indexOf('多发,客户退回')>=0 ) store_in++;
+                        else if (e.process_result.indexOf('少发,不补发') >=0) store_in++;
+                        else if (e.process_result.indexOf('核实未错漏发') >= 0 ) noMistake++;
                     });
-                    if (filers.length > 0){
-                        return {success:false,message:'商品详情的核实结果不能为空'}
+                    // 补发 不补发
+                    let process_progress = null;
+                    if (out_in > store_in) process_progress = '补发';
+                    else if (out_in < store_in) process_progress = '不补发';
+                    else if (out_in > store_in > 0 && store_in > 0 && store_in === out_in) process_progress = '补发';
+                    else if (noMistake > 0)process_progress = '核实未错漏发';
+                    this.ownerEditWorkOrder.process_progress = process_progress;
+                },
+                autoComputeOwnerMistake() {
+                    let store_in = 0, out_in = 0; //  store_in 不补发 out_in 补发
+                    this.ownerEditWorkOrder.commodities.forEach(e => {
+                        let {process_result} = e;
+                        if (process_result.indexOf('少发,宝时补发')>=0) out_in++;
+                        else if (e.process_result.indexOf() ) out_in++;
+                        else if (e.process_result === '多发,客户退回') store_in++;
+                        else if (e.process_result === '少发,不补发') out_in++;
+                        else if (e.process_result === '核实未错漏发') store_in++;
+                    });
+                    // 补发 不补发
+                    if (out_in > store_in) this.ownerEditWorkOrder.process_progress = '补发';
+                    else if (out_in < store_in) this.ownerEditWorkOrder.process_progress = '不补发';
+                    else this.ownerEditWorkOrder.process_progress = '不补发';
+                },
+                ownerEditWorkOrderSpliceImage(index, images = []) {
+                    if (!confirm('是否删除当前图片')) return;
+                    let imageitem = images.find((e, i) => Number(index) === Number(i));
+                    if (!imageitem) return;
+                    if (imageitem.upload_file) {
+                        this.ownerEditWorkOrder.delete_image_ids.push(imageitem.id);
                     }
-                    return {success:true};
+                    images.splice(index, 1);
                 },
-                successTempTip(message) {
-                    window.tempTip.setDuration(1500);
-                    window.tempTip.setIndex(2000);
-                    window.tempTip.showSuccess(message);
+                ownerEditWorkOrderSpliceCommodity(i, item) {
+                    this.ownerEditWorkOrder.delete_commodity_ids.push(item.id);
+                    this.ownerEditWorkOrder.commodities.splice(i, 1);
                 },
-                errorTempTip(message) {
-                    window.tempTip.setDuration(2000);
-                    window.tempTip.setIndex(2000);
-                    window.tempTip.show(message);
+                countByCommodities(commodities) {
+                    if (commodities.length === 0) return;
+                    let index = 0;
+                    let logistic_number = commodities[0]['logistic_number'];
+                    let count = 0;
+                    commodities.forEach((e, i, array) => {
+                        let {cur_logistic_number} = e;
+                        if (logistic_number === cur_logistic_number) {
+                            count++;
+                        } else {
+                            array[index]['count'] = count;
+                            index = i;
+                            count = 1;
+                        }
+                        array[index]['count'] = count;
+                    });
                 },
-                getProcessResult(check_result,item){
+                ownerComputeAbnormalType(item) {
+                    if (this.ownerEditWorkOrder.issue_type_name !== '错漏发') return;
+                    let abnormal_amount = Number(item.abnormal_amount);     // 客户实收数量
+                    let amount = Number(item.amount);
+                    item.abnormal_type = abnormal_amount === amount ? '未错漏发' : (amount < abnormal_amount ? '多发' : '少发')
+                },
+                groupMistakeWorkOrder() {
+                    let count = 0,
+                        index = this.ownerEditWorkOrder.commodities.findIndex(e => !e.tag),
+                        first_commodity = this.ownerEditWorkOrder.commodities.find(e => true)
+                    let logistic_number = first_commodity ? first_commodity.logistic_number : '';
+                    this.ownerEditWorkOrder.commodities.forEach(e => e.count = null);
+                    this.ownerEditWorkOrder.commodities.forEach((e, i, self) => {
+                        if (e.tag === false) {
+                            let current_logistic_number = e.logistic_number;
+                            if (current_logistic_number === logistic_number) {
+                                count++;
+                            } else {
+                                self[index].count = count;
+                                index = i;
+                                count = 1;
+                            }
+                            self[index].count = count;
+                        }
+                    });
+                },
+                groupDamageWorkOrder() {
+                    let count = 0,
+                        index = this.ownerEditWorkOrder.commodities.findIndex(e => !e.tag),
+                        first_commodity = this.ownerEditWorkOrder.commodities.find(e => true)
+                    let logistic_number = first_commodity ? first_commodity.logistic_number : '';
+                    this.ownerEditWorkOrder.commodities.forEach(e => e.count = null);
+                    this.ownerEditWorkOrder.commodities.forEach((e, i, self) => {
+                        if (e.tag === false) {
+                            let current_logistic_number = e.logistic_number;
+                            if (current_logistic_number === logistic_number) {
+                                count++;
+                            } else {
+                                self[index].count = count;
+                                index = i;
+                                count = 1;
+                            }
+                            self[index].count = count;
+                        }
+                    });
+                },
+                ownerMistakeWorkOrderTag(item) {
+                    item.tag = true;
+                },
+                ownerDamageWorkOrderTag(item) {
+                    item.tag = true;
+                },
+                getProcessResult(check_result, item) {
                     let results = null;
-                    if (check_result === '核实少发'){
-                        results = ['少发,宝时补发','少发,不补发'];
-                    }else if (check_result === '核实多发'){
-                        results = ['多发,客户买下','多发,客户退回'];
-                    }else if (check_result === '核实未错漏发'){
+                    if (check_result === '核实少发') {
+                        results = ['少发,宝时补发', '少发,不补发'];
+                    } else if (check_result === '核实多发') {
+                        results = ['多发,客户买下', '多发,客户退回'];
+                    } else if (check_result === '核实未错漏发') {
                         results = ['核实未错漏发'];
                         item.process_result = '核实未错漏发';
                     }
                     return results;
                 },
-                getProcessResultInfo(process_result,item){
-                    let processResultInfos =  {
-                        "少发,宝时补发": ['商家不做单'],
-                        "多发,客户买下": ['商家做出库单(物流选自提,宝时不发货)'],
-                        "多发,客户退回": ['客户自行退回(提供退回单号)','宝时上门取件(提供寄件信息,地址,联系人,电话)'],
-                        '少发,不补发': ['商家做入库单,选择明细和数量'],
-                        '核实未错漏发': [''],
-                    };
-                    let infos = processResultInfos[process_result];
-                    if (typeof(infos) === 'undefined') return [];
-                    if (infos.length === 0){
-                        item.process_result_info = infos[0];
+
+                checkWorkOrderCommodityMistake(item){
+                    if (this.hasStoreNumber(item)){
+                        item.reissue_logistic_number = null;
+                        item.out_order_numbere = null;
+                    } else if (this.hasOutInNumber(item)){
+                        item.reissue_logistic_number = null;
+                        item.store_in_number = null;
+                        item.store_in_amount = null;
+                    } else if (this.hasReissueLogisticNumber(item)){
+                        item.store_in_number = null;
+                        item.store_in_amount = null;
+                        item.out_order_numbere = null;
                     }
-                    return infos;
                 },
-                showAddBtn(e) {
-                    let domObj = $(e.target).parents('.log-td');
-                    if (domObj.hasClass('log-td')) {
-                        domObj.find('.add-btn').show();
-                    } else {
-                        let obj = $(e.target);
-                        if (obj.hasClass('log-td')) {
-                            obj.find('.add-btn').show();
-                        }
-                    }
+
+                hasReturnAddressInfo(commodities) {
+                    let filter = commodities.filter(e => (e.process_result_info ? e.process_result_info : '').indexOf('宝时上门取件') >= 0);
+                    return filter.length > 0;
                 },
-                hideAddBtn(e) {
-                    let domObj = $(e.target);
-                    if (domObj.hasClass('log-td')) {
-                        domObj.find('.add-btn').hide();
-                    }
+                hasReturnLogisticNumber(commodities) {
+                    let filter = commodities.filter(e => {
+                        return (e.process_result_info ? e.process_result_info : '').indexOf('客户自行退回') >= 0;
+                    });
+                    return filter.length > 0;
                 },
-                showAddDiv(id) {
-                    let div = $('#' + id);
-                    if (div.is(":hidden")) {
-                        div.show();
-                        div.find('input[type=text]').focus();
-                    } else {
-                        div.hide();
-                    }
+                hasOutInNumber(item) {
+                    return (item.process_result_info ? item.process_result_info : '').indexOf('商家做出库单') >= 0;
                 },
-                removeFocusing(e) {
-                    $(e.target).parent('tr').removeClass('focusing')
+                hasStoreNumber(item) {
+                    return (item.process_result_info ? item.process_result_info : '').indexOf('商家做入库单') >= 0;
                 },
-                showDelBtn(e) {
-                    let domObj = $(e.target).parent();
-                    domObj.find('.del-btn').addClass('visible').removeClass('invisible');
+                hasReissueLogisticNumber(item) {
+                    return (item.process_result ? item.process_result : '').indexOf('宝时补发') >= 0;
+                },
+                showWorkOrderItem(item, index) {
+                    this.selectIndex = index;
+                    let {details} = item;
+                    let copy_details = JSON.parse(JSON.stringify(details));
+                    let detail = copy_details.sort((prev, curr) => {
+                        return new Date(prev.created_at) > new Date(curr.created_at) ? -1 : 0;
+                    }).find(e => e);
+                    if (!detail) {
+                        return;
+                    }
+                    let {images, commodities, issue_type, price, status,reissue_logistic_number
+                        ,return_logistic_number,return_address,return_phone,return_name,type,process_progress,remark} = detail;
+                    this.showWorkOrder.issue_type_name = issue_type.name ? issue_type.name : '';
+                    this.showWorkOrder.process_progress = process_progress;
+                    this.showWorkOrder.price = price;
+                    this.showWorkOrder.type = type;
+                    this.showWorkOrder.remark = remark;
+                    this.showWorkOrder.status = status;
+                    this.showWorkOrder.reissue_logistic_number = reissue_logistic_number;
+                    if (reissue_logistic_number){
 
+                    }
+                    this.showWorkOrder.return_address = return_address;
+                    this.showWorkOrder.return_phone = return_phone;
+                    this.showWorkOrder.return_name = return_name;
+                    this.showWorkOrder.package_images = this.filterShowWorkOrder(images, '外包装图片');
+                    this.showWorkOrder.commodity_images = this.filterShowWorkOrder(images, '内物破碎图片');
+                    this.showWorkOrder.deal_images = this.filterShowWorkOrder(images, '交易截图');
+                    this.showWorkOrder.refund_images = this.filterShowWorkOrder(images, '退款成功截图');
+                    this.showWorkOrder.commodities = this.groupShowWorkOrderCommodities(commodities);
+                    this.dialogShowOrderWorkVisible = true;
+                    // $("#work_order_show_modal").modal('show');
+                },
+                filterShowWorkOrder(images, type) {
+                    if (!images) return [];
+                    return images.filter(e => e.type === type).map(e => {
+                        e.urlExist = e.hasOwnProperty('upload_file');
+                        let {upload_file} = e;
+                        let {type, url} = upload_file;
+                        e.fileUrl = this.filePrefix + `${url}.${type}`;
+                        return e;
+                    });
                 },
-                hideDelBtn(e) {
-                    let domObj = $(e.target);
-                    domObj.find('.del-btn').addClass('invisible').removeClass('visible');
+                groupShowWorkOrderCommodity(items) {
+                    if (items.length === 0) return [];
+                    let commodities = JSON.parse(JSON.stringify(items));
+                    commodities.sort((prev, curr) => prev.logistic_number > curr.logistic_number ? 1 : -1);
+                    let index = 0, count = 0, logistic_number = commodities[0] ? commodities[0]['logistic_number'] : '';
+                    commodities.forEach(e=>e.count = 0);
+                    commodities.forEach((e, i, array) => {
+                        e.commodity_name = e.commodity ? e.commodity.name : '';
+                        let current_logistic_number = e.logistic_number;
+                        if (current_logistic_number === logistic_number) {
+                            count++;
+                        } else {
+                            logistic_number = current_logistic_number;
+                            array[i]['count'] = count++;
+                            index = i;
+                            count = 1;
+                        }
+                        if (this.hasCommodityInfo(e)) count++;
+                        array[index]['count'] = count;
+                    });
+                    return commodities;
                 },
-                toggleLogs(orderIssue, e, index) {
-                    if (orderIssue.log_is_show === false) {
-                        orderIssue.log_is_show = true;
-                        $(e.target).text('点击收起');
-                    } else {
-                        orderIssue.log_is_show = false;
-                        $(e.target).text("记录共" + orderIssue.logs.length + "条,点击展开");
-                    }
+
+                hasCommodityInfo(item) {
+                    let {reissue_logistic_number, out_order_number, store_in_number} = item;
+                    return this.hasNumber(reissue_logistic_number) || this.hasNumber(out_order_number) || this.hasNumber(store_in_number);
                 },
-                countByCommodities(commodities){
-                    if (commodities.length === 0) return;
-                    let index = 0;
-                    let logistic_number = commodities[0]['logistic_number'];
-                    let count = 0;
-                    for(let i = 0; i < commodities.length;i++){
-                        let cur_logistic_number = commodities[i]['logistic_number'];
-                        if (i === commodities.length - 1 && cur_logistic_number === logistic_number){
-                            count ++;
-                            commodities[index]['count'] = count;
-                            break;
+                hasNumber(number) {
+                    return number !== null && number !== 0 && number !== '' && number !== '0';
+                },
+
+                groupShowWorkOrderCommodities(items) {
+                    let copy_items = JSON.parse(JSON.stringify(items));
+                    let item = copy_items.find(e => e);
+                    if (!item) return [];
+                    let {logistic_number} = item, index = 0, count = 0;
+                    copy_items.forEach(e=>e.count = 0);
+                    copy_items.forEach((e, i) => {
+                        let current_logistic_number = e.logistic_number;
+                        let add_flag = false;
+                        if (e.reissue_logistic_number || e.out_order_number || e.store_in_number) {
+                            add_flag = true;
                         }
-                        if (logistic_number === cur_logistic_number){
+                        if (current_logistic_number === logistic_number) {
                             count++;
-                        } else if (logistic_number !== cur_logistic_number){
-                            commodities[index]['count'] = count;
+                            if (add_flag) count++;
+                        } else {
+                            copy_items[index].count = count;
                             index = i;
                             count = 1;
+                            if (add_flag) count++;
                         }
-                        if (i === commodities.length - 1){
-                            commodities[index]['count'] = count;
-                        }
-                    }
-                },
-                hasReturnAddressInfo(commodities){
-                    let filter = commodities.filter(e=>{
-                        return e.process_result_info.includes('宝时上门取件');
+                        copy_items[index].count = count;
                     });
-                    return filter.length > 0;
+                    return copy_items;
                 },
-                hasReturnLogisticNumber(commodities){
-                    let filter = commodities.filter(e=>{
-                        return e.process_result_info.includes('客户自行退回');
-                    });
-                    return filter.length > 0;
+                autoComputeStoreInAmount(item) {
+                    item.store_in_amount = Number(item.amount) - Number(item.bao_shi_check_amount);
                 },
             },
         });

+ 12 - 4
routes/apiLocal.php

@@ -278,10 +278,13 @@ Route::prefix('workOrder')->group(function(){
     Route::prefix('intercept')->group(function(){           // 拦截
         Route::post('store','WorkOrderInterceptController@storeApi')->name('workOrder.intercept.storeApi');                                     // 拦截订单创建
         Route::post('logistic/header','WorkOrderInterceptController@logisticHandlerApi')->name('workOrder.intercept.logistic.handlerApi');        // 承运商处理
+        Route::post('baoShi/review','WorkOrderInterceptController@baoShiReviewApi')->name('workOrder.intercept.baoShi.reviewApi');              // 宝时终审
     });
     Route::prefix('informationChange')->group(function(){   // 信息修改
         Route::post('store','WorkOrderInformationChangeController@storeApi')->name('workOrder.informationChange.storeApi');                         // 创建
+        Route::post('owner/edit','WorkOrderInformationChangeController@ownerEditApi')->name('workOrder.informationChange.owner.editApi');     // 信息修改
         Route::post('logistic/header','WorkOrderInformationChangeController@logisticHandlerApi')->name('workOrder.informationChange.logistic.handlerApi');     // 信息修改
+        Route::post('baoShi/review','WorkOrderInformationChangeController@baoShiReviewApi')->name('workOrder.informationChange.baoShi.reviewApi');              // 宝时终审
     });
     Route::prefix('loss')->group(function(){                // 快递丢件
         Route::post('store','WorkOrderLossController@storeApi')->name('workOrder.loss.storeApi');                                       // 创建(宝时)
@@ -290,19 +293,24 @@ Route::prefix('workOrder')->group(function(){
     });
     Route::prefix('damage')->group(function(){             // 破损
         Route::post('store','WorkOrderDamageController@storeApi')->name('workOrder.damage.storeApi');                                   // 创建
+        Route::post('edit/owner','WorkOrderDamageController@ownerEditApi')->name('workOrder.damage.owner.editApi');                      // 货主编辑
         Route::post('handler/logistic','WorkOrderDamageController@logisticHandleApi')->name('workOrder.damage.logistic.handlerApi');      // 承运商处理
         Route::post('review/baoShi','WorkOrderDamageController@baoShiReviewApi')->name('workOrder.damage.baoShi.reviewApi');             // 宝时终审
     });
     Route::prefix('expressAbnormal')->group(function(){     // 快递异常
         Route::post('store','WorkOrderExpressAbnormalController@storeApi')->name('workOrder.expressAbnormal.storeApi');                         // 创建
+        Route::post('edit/owner','WorkOrderExpressAbnormalController@ownerEditApi')->name('workOrder.expressAbnormal.owner.editApi');   // 承运商处理
         Route::post('handler/logistic','WorkOrderExpressAbnormalController@logisticHandleApi')->name('workOrder.expressAbnormal.logistic.handlerApi');   // 承运商处理
-        Route::post('review/baoShi','WorkOrderDamageController@baoShiReviewApi')->name('workOrder.damage.baoShi.reviewApi');                    // 宝时终审
-
+        Route::post('review/baoShi','WorkOrderExpressAbnormalController@baoShiReviewApi')->name('workOrder.expressAbnormal.baoShi.reviewApi');                    // 宝时终审
     });
     Route::prefix('mistake')->group(function(){             // 错漏发
         Route::post('store','WorkOrderMistakeController@storeApi')->name('workOrder.mistake.storeApi');
-        Route::post('review/baoShi','WorkOrderMistakeController@baoShiReviewApi')->name('workOrder.mistake.baoShi.reviewApi');                  // 宝时审核
-        Route::post('owner/handler','WorkOrderMistakeController@ownerReviewAndEndApi')->name('workOrder.mistake.owner.handlerAndEndApi');       // 商家处理并完结订单
+        Route::post('owner/edit','WorkOrderMistakeController@ownerEditApi')->name('workOrder.mistake.owner.editApi');
+        Route::post('handle/baoShi','WorkOrderMistakeController@baoShiHandleApi')->name('workOrder.mistake.baoShi.handleApi');                  // 宝时处理
+        Route::post('owner/handler','WorkOrderMistakeController@ownerHandleApi')->name('workOrder.mistake.owner.handlerApi');                   // 商家处理并完结订单
+            Route::post('edit/owner/end','WorkOrderMistakeController@ownerEndEditApi')->name('workOrder.mistake.logistic.end.handlerApi');            // 承运商处理
+        Route::post('review/baoShi','WorkOrderMistakeController@baoShiReviewApi')->name('workOrder.mistake.baoShi.reviewApi');                  // 宝时处理
+
     });