Explorar el Código

Merge remote-tracking branch 'origin/master'

yuang hace 4 años
padre
commit
42535c9ea5
Se han modificado 65 ficheros con 5354 adiciones y 1496 borrados
  1. 5 1
      app/Filters/ProcurementCheckSheetFilters.php
  2. 5 1
      app/Filters/ProcurementFilters.php
  3. 20 10
      app/Filters/WorkOrderFilters.php
  4. 13 12
      app/Http/Controllers/DeliveryAppointmentController.php
  5. 1 1
      app/Http/Controllers/OrderController.php
  6. 3 2
      app/Http/Controllers/ProcurementController.php
  7. 39 82
      app/Http/Controllers/TestController.php
  8. 18 0
      app/Http/Controllers/WorkOrderDamageController.php
  9. 19 4
      app/Http/Controllers/WorkOrderExpressAbnormalController.php
  10. 33 4
      app/Http/Controllers/WorkOrderInformationChangeController.php
  11. 21 2
      app/Http/Controllers/WorkOrderInterceptController.php
  12. 3 4
      app/Http/Controllers/WorkOrderLossController.php
  13. 44 4
      app/Http/Controllers/WorkOrderMistakeController.php
  14. 6 2
      app/Http/Requests/OrderDelivering.php
  15. 1 0
      app/Jobs/BroadcastBatchToZhengCangJob.php
  16. 62 0
      app/Jobs/ExecutePostBillHandler.php
  17. 2 2
      app/Jobs/HandlePastBill.php
  18. 77 0
      app/Observers/WaybillObserver.php
  19. 1 1
      app/OracleBasSKU.php
  20. 1 1
      app/OracleDOCASNDetail.php
  21. 1 1
      app/Procurement.php
  22. 3 0
      app/Providers/AppServiceProvider.php
  23. 2 2
      app/Services/DbOpenService.php
  24. 40 13
      app/Services/ForeignZhenCangService.php
  25. 1 1
      app/Services/OrderService.php
  26. 17 13
      app/Services/OwnerPriceOperationService.php
  27. 4 3
      app/Services/StoreItemService.php
  28. 1 1
      app/Services/StoreService.php
  29. 22 4
      app/Services/WorkOrderCommoditiesService.php
  30. 32 16
      app/Services/WorkOrderDamageService.php
  31. 20 2
      app/Services/WorkOrderDetailService.php
  32. 29 19
      app/Services/WorkOrderExpressAbnormalService.php
  33. 7 0
      app/Services/WorkOrderImageService.php
  34. 25 12
      app/Services/WorkOrderInformationChangeService.php
  35. 19 18
      app/Services/WorkOrderInterceptService.php
  36. 10 16
      app/Services/WorkOrderLossService.php
  37. 51 20
      app/Services/WorkOrderMistakeService.php
  38. 39 27
      app/Services/WorkOrderService.php
  39. 1 1
      app/Services/weight/HengLiWeightService.php
  40. 19 1
      app/Waybill.php
  41. 84 11
      app/WorkOrder.php
  42. 32 23
      app/WorkOrderCommodities.php
  43. 66 1
      app/WorkOrderDetail.php
  44. 1 1
      config/users.php
  45. 65 0
      database/migrations/2021_12_03_110027_work_orders_and_work_order_details_add_current_status.php
  46. 32 0
      database/migrations/2021_12_14_145724_add_remark_column_to_procurements_table.php
  47. 1 1
      resources/js/utilities/toast.js
  48. 48 0
      resources/views/equipment/_buildGroup.blade.php
  49. 212 48
      resources/views/equipment/index.blade.php
  50. 84 33
      resources/views/order/index/_work_order_modal.blade.php
  51. 96 53
      resources/views/order/index/delivering.blade.php
  52. 1 1
      resources/views/order/issue/index.blade.php
  53. 670 126
      resources/views/order/workOrder/_bao_shi_review_modal.blade.php
  54. 222 74
      resources/views/order/workOrder/_logistic_fill_work_order_modal.blade.php
  55. 796 184
      resources/views/order/workOrder/_owner_fill_work_order_modal.blade.php
  56. 112 50
      resources/views/order/workOrder/_work_order_details.blade.php
  57. 514 0
      resources/views/order/workOrder/_work_order_show.blade.php
  58. 1564 578
      resources/views/order/workOrder/index.blade.php
  59. 1 0
      resources/views/procurement/finance/checkBill.blade.php
  60. 1 0
      resources/views/procurement/finance/procurementBill.blade.php
  61. 6 0
      resources/views/procurement/procurement/_addProcurement.blade.php
  62. 6 0
      resources/views/procurement/procurement/create.blade.php
  63. 6 3
      resources/views/procurement/procurement/index.blade.php
  64. 5 2
      resources/views/store/deliveryAppointment/list.blade.php
  65. 12 4
      routes/apiLocal.php

+ 5 - 1
app/Filters/ProcurementCheckSheetFilters.php

@@ -20,7 +20,7 @@ class ProcurementCheckSheetFilters
     protected $supplierQuery;
     protected $array_filter;
     protected $filters = [
-        'id','status','signed_at','supplier_id',
+        'id','status','signed_at','supplier_id','code'
     ];
     protected $params = [];
 
@@ -89,6 +89,10 @@ class ProcurementCheckSheetFilters
     {
         $this->queryBuilder->where('status',$status);
     }
+    public function code($code)
+    {
+        $this->searchWay($this->getProcurementQuery(),$code,'code');
+    }
 
     public function supplier_id($supplier_id)
     {

+ 5 - 1
app/Filters/ProcurementFilters.php

@@ -23,7 +23,7 @@ class ProcurementFilters
     protected $customerQuery;
     protected $array_filter;
     protected $filters = [
-        'id','owner_id','material_id','company_name','created_at_start','created_at_end','supplier_id'
+        'id','owner_id','material_id','company_name','created_at_start','created_at_end','supplier_id','code'
     ];
     protected $params = [];
 
@@ -115,6 +115,10 @@ class ProcurementFilters
     {
         $this->queryBuilder->whereIn('id',$id);
     }
+    public function code($code)
+    {
+        $this->searchWay( $this->queryBuilder,$code,'code');
+    }
     public function owner_id($owner_id)
     {
         $this->searchWay($this->getOwnerQuery(),$owner_id,'owner_id');

+ 20 - 10
app/Filters/WorkOrderFilters.php

@@ -39,7 +39,8 @@ class WorkOrderFilters
         'owner',
         'client_code',
         'is_end',
-        'status'
+        'status',
+        'process_progress'
     ];
     protected $array_filter;
     protected $params = [];
@@ -97,26 +98,29 @@ class WorkOrderFilters
 
         $this->afterFileIssueType();
 
-        $this->filterWorkOrderStatus();
+        $this->filterStatus();
     }
 
-    private function filterWorkOrderStatus()
+    private function filterStatus()
     {
         $status = [];
-        if (Gate::allows('订单管理-工单处理-宝时编辑')) {
+
+        if (Gate::allows('订单管理-工单处理-宝时编辑')){
             array_push($status,1,4);
         }
-        if (Gate::allows('订单管理-工单处理-承运商编辑')) {
-            array_push($status,3,6);
+        if (Gate::allows('订单管理-工单处理-货主编辑')){
+            array_push($status,1,2,3,4,6);
         }
-        if (Gate::allows('订单管理-工单处理-货主编辑')) {
-            array_push($status,2);
+        if (Gate::allows('订单管理-工单处理-承运商编辑')){
+            array_push($status,1,2,3,4,6);
         }
+
         if (!isset($this->params['is_end'])) {
             $this->queryBuilder->where('status', '!=', 5);      // 过滤已完成
         } else {
             array_push($status,5);
         }
+
         $this->queryBuilder->whereIn('status',$status);
     }
 
@@ -276,14 +280,20 @@ 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 == '承运商处理'){
-            array_push($status_list,3,6);
+            array_push($status_list,3);
         } elseif ($status == '宝时处理') {
             array_push($status_list,4,1);
         } elseif ($status == '货主处理'){
-            array_push($status_list,2);
+            array_push($status_list,2,6);
         }
         $this->queryBuilder->whereIn('status',$status_list);
     }

+ 13 - 12
app/Http/Controllers/DeliveryAppointmentController.php

@@ -326,12 +326,13 @@ class DeliveryAppointmentController extends Controller
             $params = request()->input();
             unset($params["checkAllSign"]);
             $query = app("DeliveryAppointmentService")->query($params);
-        }else $query = app("DeliveryAppointmentService")->query(["id"=>request("id")]);
+        }else $query = app("DeliveryAppointmentService")->query(["id"=>request("data")]);
         /** @var Builder $query */
-        $list = $query->with(["owner","warehouse"])->get();
+        $deliveries = $query->with(["owner","warehouse"])->get();
         $row = ["状态","货主","预约时间","仓库","预约号","车牌号","车型",
             "司机姓名","司机电话","吨","立方","箱数","采购单号","ASN单号","商品名称","条码","数量","创建时间"];
-        foreach ($list as &$data){
+        $list = [];
+        foreach ($deliveries as $data){
             $appointment = "";
             $number = "";
             $carType = "";
@@ -341,18 +342,18 @@ class DeliveryAppointmentController extends Controller
             $commodityCode = "";
             $amount = "";
             foreach ($data->cars as $car){
-                $appointment .= $car->appointment_number."\r\n";
-                $number .= $car->license_plate_number."\r\n";
-                $carType .= ($car->car->name ?? '')."\r\n";
-                $driverName .= ($car->driver_name ?? '')."\r\n";
-                $driverPhone .= ($car->driver_phone ?? '')."\r\n";
+                if ($car->appointment_number)$appointment .= $car->appointment_number."\r\n";
+                if ($car->license_plate_number)$number .= $car->license_plate_number."\r\n";
+                if ($car->car)$carType .= ($car->car->name ?? '')."\r\n";
+                if ($car->driver_name)$driverName .= ($car->driver_name ?? '')."\r\n";
+                if ($car->driver_phone)$driverPhone .= ($car->driver_phone ?? '')."\r\n";
             }
             foreach ($data->details as $detail){
                 $commodityName .= ($detail->commodity->name ?? $detail->name)."\r\n";
-                $commodityCode .= ($detail->commodity->barcodes->code ?? $detail->bar_code)."\r\n";
+                $commodityCode .= ($detail->commodity->barcodes[0]->code ?? $detail->bar_code)."\r\n";
                 $amount .= $detail->amount."\r\n";
             }
-            $data = [
+            $list[] = [
                 DeliveryAppointment::STATUS[$data->status],
                 $data->owner->name ?? '',
                 $data->appointment_date,
@@ -370,10 +371,10 @@ class DeliveryAppointmentController extends Controller
                 $commodityName,
                 $commodityCode,
                 $amount,
-                $data->created_at
+                $data->created_at->toDateTimeString()
             ];
         }
-        return Export::make($row,$list,"预约记录");
+        return Export::make($row,$list,"预约记录",true);
     }
 
     private function carList($period,$date,$warehouse)

+ 1 - 1
app/Http/Controllers/OrderController.php

@@ -39,7 +39,7 @@ class OrderController extends Controller
         $orderService->tagOrderByOrderIssue($orders);
         app('WorkOrderService')->tagWorkOrder($orders);
         $commodities = $result['commodities'];
-        $customers = app(OwnerService::class)->getIntersectPermitting(['code','name']);
+        $customers = app(OwnerService::class)->getQuery()->select("code","name")->get();
         $page = $request["page"] ?? 1;
         $codes = DB::connection('oracle')->table('BAS_CODES')->select('code', 'codename_c')->where('codeid', 'SO_STS')->orderBy('code', 'asc')->get();
         $orderIssueType = OrderIssueType::all();

+ 3 - 2
app/Http/Controllers/ProcurementController.php

@@ -46,6 +46,7 @@ class ProcurementController extends Controller
             'initiator'=>$userId,
             'type'=>$type,
             'status'=>$status,
+            'remark'=>$param['remark'],
         ]);
         $procurement->save();
         $number_id=$procurement['id'];
@@ -112,7 +113,7 @@ class ProcurementController extends Controller
     public function store(Request $request)
     {
         $this->gate('采购管理-采购-新建');
-        $param=$request->all(['owner_material_id','quantity','amount','unit_price']);
+        $param=$request->all(['owner_material_id','quantity','amount','unit_price','remark']);
         $procurement=$this->newProcurement($param,Auth::user()['id']);
         return redirect('procurement/procurement/index')->with('successTip','新采购单“'.$procurement->code.'”添加成功');
     }
@@ -121,7 +122,7 @@ class ProcurementController extends Controller
 
         $this->gate('采购管理-采购-新建');
         $request->validated();
-        $param=$request->all(['owner_material_id','quantity','amount','unit_price']);
+        $param=$request->all(['owner_material_id','quantity','amount','unit_price','remark']);
         $procurement=$this->newProcurement($param,Auth::user()['id']);
         $procurement = $procurement->loadMissing(['initiator','ownerMaterial.material','ownerMaterial.owner.customer','ownerMaterial.file','supplier']);
         if ($procurement) return ['success' => true,'data' => $procurement];

+ 39 - 82
app/Http/Controllers/TestController.php

@@ -39,6 +39,7 @@ use App\Logistic;
 use App\MaterialBox;
 use App\MaterialBoxModel;
 use App\Notifications\RoutineNotification;
+use App\Observers\WaybillObserver;
 use App\OracleDOCASNDetail;
 use App\OracleDOCASNHeader;
 use App\OracleDOCOrderHeader;
@@ -83,6 +84,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;
@@ -93,8 +95,10 @@ 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\UserService;
 use App\Services\WorkOrderService;
 use App\SortingStation;
 use App\Station;
@@ -167,94 +171,32 @@ class TestController extends Controller
         }
     }
 
-    public function format(array $arr,$newRes):array
-    {
-        $result = [];
-        foreach ($arr as $index=>$item){
-            if (isset($result[$item["sku_name"]])){
-                if (array_search($item["self_uid"],$result[$item["sku_name"]])!==false){
-                    $result[$item["sku_name"]][] = $item["next_uid"];
-                }else $result[$index] = $index;
-            }else $result[$item["sku_name"]] = [$item["self_uid"],$item["next_uid"]];
-        }
-        $recursion = [];
-        foreach ($result as $item){
-            if (is_array($item))$newRes[] = $item;
-            else $recursion[$item] = $arr[$item];
-        }
-        if (count($recursion)>0)$newRes = $this->format($recursion,$newRes);
-        return $newRes;
-    }
-    public function socket(){
-        set_time_limit(0);
-        $ip = '127.0.0.1';
-        $port = 1935;
-        if(($sock = \socket_create(AF_INET,SOCK_STREAM,SOL_TCP)) < 0) {
-            echo "socket_create() 失败的原因是:".\socket_strerror($sock)."\n";
-        }
-        if(($ret = \socket_bind($sock,$ip,$port)) < 0) {
-            echo "socket_bind() 失败的原因是:".\socket_strerror($ret)."\n";
-        }
-        if(($ret = \socket_listen($sock,4)) < 0) {
-            echo "socket_listen() 失败的原因是:".\socket_strerror($ret)."\n";
-        }
-        $count = 0;
-        do {
-            if (($msgsock = \socket_accept($sock)) < 0) {
-                echo "socket_accept() failed: reason: " . \socket_strerror($msgsock) . "\n";
-                break;
-            } else {
-                $msg ="测试成功!\n";
-                \socket_write($msgsock, $msg, strlen($msg));
-                echo "测试成功了啊\n";
-                $buf = \socket_read($msgsock,8192);
-                $talkback = "收到的信息:$buf\n";
-                echo $talkback;
-                if(++$count >= 5){break;}
-            }
-            \socket_close($msgsock);
-        }while (true);
-        \socket_close($sock);
+    public function test1(\Closure $c,string $a){
+        dd($c($a));
     }
     public function test(Request $request)
-    {
-        return view('equipment.index');
-        //return response()->json(["info"=>["id"=>1,"name"=>2]]);
-        return response()->json(["info"=>["id"=>1,"name"=>2]]);
-        dd(time());
-        ini_set('max_execution_time',-1);
-        $worker = new Worker('tcp://0.0.0.0:9865');
+    {$user = User::query()->where("name","yanyuanmin")->first();
+        dd($user->id);
+        dd($codes = app('OwnerService')->getQuery($user->id)->select("code")->pluck("code"));
 
-        $worker->onConnect = function ($conn) {
-            echo '新的连接来了';
-        };
-        $worker->onClose = function ($conn) {
-            echo '连接断开了';
-        };
-        $worker->onMessage = function ($conn, $message) {
-            $http_resonse = "HTTP/1.1 200 OK\r\n";
-            $http_resonse .= "Connection: keep-alive\r\n";
-            $http_resonse .= "Server: php socket server\r\n";
-            $http_resonse .= "Content-length: 11\r\n\r\n";
-            $http_resonse .= "hello world";
-            fwrite($conn, $http_resonse);
-        };
 
-        $worker->run();
-        return;
-        $service = new LogisticService();
-        foreach (ReceiveRecord::query()->where("logistic_id",0)->get() as $receive){
-            $name = $service->assertExpressCompany($receive->logistic_number);
-            if ($name){
-                $logistic = Logistic::query()->select("id","name")
-                    ->where("name","like","%{$name}%")->first();
-                $logisticId = $logistic ? $logistic->id : 0;
-            } else $logisticId = 0;
-            if ($logisticId!=0)$receive->update(["logistic_id"=>$logisticId]);
+        $ownerIds=app('UserService')->getPermittingOwnerIds($user);
+        $owners =  Owner::query()->select("id","name","code")->whereIn('id', $ownerIds)->whereNull('deleted_at')->get();
+        $codes = array_column($owners->toArray(), 'code');
+        dd($codes);
+        dd(Order::class);
+        $c = "test";
+        $a = function ($b)use($c){
+            return $b.$c;
+        };
+        $this->test1($a,"a");
+        dd(2);
+        $w = Waybill::query()->get();
+        foreach ($w->chunk(50) as $a){
+            dd($a);
         }
-        dd(ReceiveRecord::query()->where("logistic_id",0)->count());
         $path = '';
-        $id = 115;
+        $id = 252;
 
         $file = fopen($path, "r");
         $user=array();
@@ -402,4 +344,19 @@ class Worker{
             }
         }
     }
+
+    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];
     }

+ 6 - 2
app/Http/Requests/OrderDelivering.php

@@ -2,6 +2,7 @@
 
 namespace App\Http\Requests;
 
+use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Support\Facades\Auth;
 
 class OrderDelivering extends GateRequest
@@ -35,8 +36,11 @@ class OrderDelivering extends GateRequest
         }
 
         if (!app("UserService")->checkAdminIdentity(Auth::id())){
-            $owners = app('OwnerService')->getIntersectPermitting(['id', 'code']);
-            $codes = array_column($owners->toArray(), 'code');
+            /**
+             * @var Builder $owners
+             */
+            $codes = app('OwnerService')->getQuery()->select("code")->pluck("code")->toArray();
+            if (count($codes)==0)$codes = [""];
             if (request("customerid")) {
                 $arr = explode(',', request("customerid"));
                 $customer = [];

+ 1 - 0
app/Jobs/BroadcastBatchToZhengCangJob.php

@@ -35,6 +35,7 @@ class BroadcastBatchToZhengCangJob implements ShouldQueue
     {
         /** @var ForeignZhenCangService  $foreignZhenCangService */
         $foreignZhenCangService=app('ForeignZhenCangService');
+        //TODO 限定指定货主波次
         foreach ($this->batches as &$batch){
             $batch->loadMissing([
                 'orders.orderCommodities.commodity.barcodes'

+ 62 - 0
app/Jobs/ExecutePostBillHandler.php

@@ -0,0 +1,62 @@
+<?php
+
+namespace App\Jobs;
+
+use App\Feature;
+use App\Order;
+use App\Store;
+use Illuminate\Bus\Queueable;
+use Illuminate\Contracts\Queue\ShouldQueue;
+use Illuminate\Database\Eloquent\Collection;
+use Illuminate\Foundation\Bus\Dispatchable;
+use Illuminate\Queue\InteractsWithQueue;
+
+class ExecutePostBillHandler implements ShouldQueue
+{
+    use Dispatchable, InteractsWithQueue, Queueable;
+
+    /**
+     * @var \Closure $closure
+     */
+    protected $closure;
+    /**
+     * @var Collection $collection
+     */
+    protected $collection;
+    /**
+     * @var string $modelClass
+     */
+    protected $modelClass;
+    /**
+     * Create a new job instance.
+     *
+     * @return void
+     */
+    public function __construct(\Closure $closure, Collection $collection, string $modelClass)
+    {
+        $this->closure = $closure;
+        $this->connection = $collection;
+        $this->modelClass = $modelClass;
+    }
+
+    /**
+     * Execute the job.
+     *
+     * @return void
+     */
+    public function handle()
+    {
+        $closure = $this->closure;
+        switch ($this->modelClass){
+            case Store::class:
+                foreach ($this->collection as $detail){
+                    $closure(Feature::MAPPING["store"],$detail->store,$detail);
+                }
+                break;
+            case Order::class:
+                foreach ($this->collection as $detail){
+                    $closure(Feature::MAPPING["order"],$detail->order,$detail);
+                }
+        }
+    }
+}

+ 2 - 2
app/Jobs/HandlePastBill.php

@@ -35,7 +35,7 @@ class HandlePastBill implements ShouldQueue
     public function handle(OwnerPriceOperationService $service)
     {
         ini_set('max_execution_time', 2500);
-        list($rule,$owner,$discountIndex,$pivot) = $this->arr;
-        $service->handlePastBill($rule,$owner,$discountIndex,$pivot);
+        list($rule,$owner,$discountIndex,$pivot,$month) = $this->arr;
+        $service->handlePastBill($rule,$owner,$discountIndex,$pivot,$month);
     }
 }

+ 77 - 0
app/Observers/WaybillObserver.php

@@ -0,0 +1,77 @@
+<?php
+
+namespace App\Observers;
+
+use App\Waybill;
+use Illuminate\Support\Facades\Log;
+
+class WaybillObserver
+{
+    /**
+     * 监听插入事件
+     *
+     * @param Waybill|\stdClass $waybill
+     * @return void
+     */
+    public function created(Waybill $waybill)
+    {
+        if(config('app.env')!='production')return;
+        if ($waybill->type=='德邦物流'){
+            if ($waybill->carrier_bill)return;
+            $waybill->load("order");
+            if (!$waybill->order){
+                Log::error("德邦单号获取失败",["no"=>$waybill->waybill_number,"info"=>"运单无绑定订单"]);
+                return;
+            }
+            $update = $this->paramDefault($waybill);
+            $bill = app('DbOpenService')->getDbOrderNo($waybill);
+            if (!$bill || $bill["result"]=="false"){
+                Log::error("德邦单号获取失败",["no"=>$waybill->waybill_number,"info"=>$bill]);
+                return;
+            }
+            $update["carrier_bill"] = $bill['mailNo'];
+            $update["waybill_number"] = $bill['mailNo'];
+            $update["station_no"] = $bill['stationNo'];
+            $update["arrived_org_simple_name"] = $bill['arrivedOrgSimpleName'];
+            $update["much_higher_delivery"] = $bill['muchHigherDelivery'];
+            $waybill->update($update);
+            if (!app("WaybillService")->notifyFlux($waybill)){
+                Log::error("德邦单号回传FLUX失败",["no"=>$waybill->waybill_number,"info"=>$bill]);
+                return;
+            }
+        }
+    }
+
+    private function paramDefault(&$waybill):array
+    {
+        $update = [];
+        if (!$waybill->order_type){
+            $update["order_type"] = $waybill->order_type = Waybill::ORDER_TYPE_DEFAULT;
+        }
+        if (!$waybill->transport_type){
+            $update["transport_type"] = $waybill->transport_type = "JZKH";
+        }
+        if (!$waybill->cargo_name){
+            $update["cargo_name"] = $waybill->cargo_name = "补货";
+        }
+        if (!$waybill->total_number){
+            $update["total_number"] = $waybill->total_number = 1;
+        }
+        if (!$waybill->total_weight){
+            $update["total_weight"] = $waybill->total_weight = 1;
+        }
+        if (!$waybill->package_service){
+            $update["package_service"] = $waybill->package_service = '托膜';
+        }
+        if (!$waybill->deliveryType){
+            $update["deliveryType_id"] = $waybill->deliveryType_id = 3;
+        }
+        if (!$waybill->pay_type){
+            $update["pay_type"] = $waybill->pay_type = Waybill::PAY_TYPE_DEFAULT;
+        }
+        if (!$waybill->back_sign_bill){
+            $update["back_sign_bill"] = $waybill->back_sign_bill = Waybill::BACK_SIGN_BILL_DEFAULT;
+        }
+        return $update;
+    }
+}

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

+ 1 - 1
app/Procurement.php

@@ -40,7 +40,7 @@ class Procurement extends Model
     ];
 
     protected $fillable=[
-        'code','owner_material_id', 'supplier_id', 'quantity','amount','unit_price','cost_price','status','initiator','type','is_enquiry','deadline'
+        'code','owner_material_id', 'supplier_id', 'quantity','amount','unit_price','cost_price','status','initiator','type','is_enquiry','deadline','remark'
     ];
 
     public  function ownerMaterial(): \Illuminate\Database\Eloquent\Relations\HasOne

+ 3 - 0
app/Providers/AppServiceProvider.php

@@ -9,6 +9,7 @@ use App\Observers\AuthorityObserver;
 use App\Observers\MenuObserver;
 use App\Observers\OwnerObserver;
 use App\Observers\UserWorkGroupObserver;
+use App\Observers\WaybillObserver;
 use App\Owner;
 use App\Services\AuthorityService;
 use App\Services\BatchService;
@@ -125,6 +126,7 @@ use App\Services\weight\HaoChuangWeightService;
 use App\Services\weight\HengLiWeightService;
 use App\Services\PrintPartService;
 use App\Services\PrintTemplateService;
+use App\Waybill;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Queue\Events\JobFailed;
 use Illuminate\Queue\Events\JobProcessed;
@@ -416,6 +418,7 @@ class AppServiceProvider extends ServiceProvider
     private function registerObserver()
     {
         Owner::observe(OwnerObserver::class);
+        Waybill::observe(WaybillObserver::class);
         UserWorkgroup::observe(UserWorkGroupObserver::class);
         Menu::observe(MenuObserver::class);
         Authority::observe(AuthorityObserver::class);

+ 2 - 2
app/Services/DbOpenService.php

@@ -78,7 +78,7 @@ class DbOpenService
         $waybill->loadMissing([
             "order.shop","owner","order.warehouse.province","order.warehouse.city","order.warehouse.county","deliveryType"
         ]);
-        $date = date('Y-m-d H:i:s', $waybill->deliver_at ? strtotime($waybill->deliver_at) : now());
+        $date = date('Y-m-d H:i:s', $waybill->deliver_at ? strtotime($waybill->deliver_at) : now()->getTimestamp());
         $data =  [
             'logisticID'    =>      config('api_logistic.DB.prod.sign').date("YmdHis").mt_rand(1000, 9999).$waybill->order->id,
             'custOrderNo'   =>      $waybill->order->client_code ?? '',
@@ -131,7 +131,7 @@ class DbOpenService
             ],
             'smsNotify'     => config('api_logistic.DB.prod.smsNotify'),
             'sendStartTime' => $date,
-            'sendEndTime'   => date('Y-m-d ', $waybill->deliver_at ? strtotime($waybill->deliver_at) : now()).'23:59:59',
+            'sendEndTime'   => date('Y-m-d ', $waybill->deliver_at ? strtotime($waybill->deliver_at) : now()->getTimestamp()).'23:59:59',
             'originalWaybillNumber' => $waybill->wms_bill_number ?? '',
             'remark'        => $waybill->dispatch_remark ?? '',
             'isOut'         => 'N',

+ 40 - 13
app/Services/ForeignZhenCangService.php

@@ -13,26 +13,53 @@ class ForeignZhenCangService
 
     public function broadcastBatch($batches)
     {
+//        $body=[];
+//        $body['id']=$batches->code;
+//        $body['orders'] = [];
+//        foreach ($batches->orders as $order){
+//            $orderArr = [];
+//            $orderArr['id']=$order->code??'';
+//            $orderArr['createdAt']=Carbon::parse($order->created_at)->toDateTimeString()??'';
+//            $orderArr['barcodes'] = [];
+//            foreach ($order->orderCommodities as $orderCommodity){
+//                $barcode=[];
+//                $barcode['id']=$orderCommodity->id;
+//                $barcode['barcode']=$orderCommodity->commodity ? ($orderCommodity->commodity->barcodes?$orderCommodity->commodity->barcodes->first()['code']:'') : '';
+//                $barcode['name']=$orderCommodity->commodity->name??'';
+//                $barcode['sku']=$orderCommodity->commodity->sku??'';
+//                $barcode['amount']=$orderCommodity->amount??'';
+//                $barcode['location']=$orderCommodity->location??'';
+//                $orderArr['barcodes'][]=$barcode;
+//            }
+//            $body['orders'][] = $orderArr;
+//        }
+
+        //12.13
         $body=[];
         $body['id']=$batches->code;
-        $body['orders'] = [];
+        $body['slots'] = [];
         foreach ($batches->orders as $order){
             $orderArr = [];
-            $orderArr['id']=$order->code??'';
-            $orderArr['createdAt']=Carbon::parse($order->created_at)->toDateTimeString()??'';
-            $orderArr['barcodes'] = [];
             foreach ($order->orderCommodities as $orderCommodity){
-                $barcode=[];
-                $barcode['id']=$orderCommodity->id;
-                $barcode['barcode']=$orderCommodity->commodity ? ($orderCommodity->commodity->barcodes?$orderCommodity->commodity->barcodes->first()['code']:'') : '';
-                $barcode['name']=$orderCommodity->commodity->name??'';
-                $barcode['sku']=$orderCommodity->commodity->sku??'';
-                $barcode['amount']=$orderCommodity->amount??'';
-                $barcode['location']=$orderCommodity->location??'';
-                $orderArr['barcodes'][]=$barcode;
+                $orderArr['id']=$orderCommodity->location??'';
+                $orderArr['sku']=$orderCommodity->commodity->sku??'';
+                $orderArr['barcode']=$orderCommodity->commodity ? ($orderCommodity->commodity->barcodes?$orderCommodity->commodity->barcodes->first()['code']:'') : '';
+                $orderArr['name']=$orderCommodity->commodity->name??'';
+                $orderArr['amount']=$orderCommodity->amount??'';
+            }
+            $body['slots'][] = $orderArr;
+
+        }
+        $result=array();
+        foreach($body['slots'] as $val){
+            $key = $val['id'].'_'.$val['barcode'];
+            if(!isset($result[$key])){
+                $result[$key] = $val;
+            }else{
+                $result[$key]['amount'] += $val['amount'];
             }
-            $body['orders'][] = $orderArr;
         }
+        $body['slots']=array_values($result);
         dd($body);
         $response = Http::withHeaders([
             'Host' => 'zc-it.com',

+ 1 - 1
app/Services/OrderService.php

@@ -341,7 +341,7 @@ SQL;
         $sql .= " select ROWNUM as rn,DOC_ORDER_HEADER.addtime,DOC_ORDER_HEADER.C_PROVINCE,DOC_ORDER_HEADER.C_CITY,DOC_ORDER_HEADER.MANUALFLAG,DOC_ORDER_HEADER.C_DISTRICT,DOC_ORDER_HEADER.C_CONTACT,DOC_ORDER_HEADER.OrderNo,DOC_ORDER_HEADER.SOStatus,DOC_ORDER_HEADER.WAREHOUSEID,DOC_ORDER_HEADER.CustomerID
                           ,DOC_ORDER_HEADER.C_Tel2,DOC_ORDER_HEADER.C_Tel1,DOC_ORDER_HEADER.CarrierName,DOC_ORDER_HEADER.IssuePartyName,
                          DOC_ORDER_HEADER.WaveNo,DOC_ORDER_HEADER.SOReference1
-                          ,DOC_ORDER_HEADER.soreference5,DOC_ORDER_HEADER.EDISENDFLAG2,DOC_ORDER_HEADER.EDISendTime2,DOC_ORDER_HEADER.Notes,DOC_ORDER_HEADER.ERPCANCELFLAG,
+                          ,DOC_ORDER_HEADER.soreference5,nvl( DOC_ORDER_HEADER.EDISENDFLAG2, DOC_ORDER_HEADER.edisendflag3 ) as EDISENDFLAG2,nvl( DOC_ORDER_HEADER.EDISendTime2, DOC_ORDER_HEADER.EDISENDTIME3 ) EDISendTime2,DOC_ORDER_HEADER.Notes,DOC_ORDER_HEADER.ERPCANCELFLAG,
                          DOC_ORDER_HEADER.Picking_Print_Flag,DOC_ORDER_HEADER.EDISENDFLAG
                           ,DOC_ORDER_HEADER.ReleaseStatus,DOC_ORDER_HEADER.C_Address1,DOC_ORDER_HEADER.OrderTime,DOC_ORDER_HEADER.EDIREMARKS2 from (SELECT * FROM DOC_ORDER_HEADER ORDER BY ADDTIME DESC)DOC_ORDER_HEADER where 1=1 ";
         $sql = $this->preciseQuery($params, $sql);

+ 17 - 13
app/Services/OwnerPriceOperationService.php

@@ -4,12 +4,14 @@ namespace App\Services;
 
 use App\Components\ErrorPush;
 use App\Feature;
+use App\Jobs\ExecutePostBillHandler;
 use App\Jobs\HandlePastBill;
-use App\Owner;
+use App\Order;
 use App\OwnerFeeDetail;
 use App\OwnerPriceOperation;
 use App\OwnerPriceOperationItem;
 use App\Services\common\QueryService;
+use App\Store;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Database\Eloquent\Collection;
 use Illuminate\Database\Eloquent\Model;
@@ -242,8 +244,9 @@ class OwnerPriceOperationService
      * @param Model|\stdClass $rule
      * @param integer $owner
      * @param bool|array $result
+     * @param string $month
      */
-    public function handleDiscount(Model $rule, int $owner, $result)
+    public function handleDiscount(Model $rule, int $owner, $result, string $month)
     {
         if (!$result)return;
         $sign = false;
@@ -258,15 +261,15 @@ class OwnerPriceOperationService
             $pivot = app(CacheService::class)->getOrExecute($key,function ()use($key,$targetValue,&$sign,$rule,$owner){
                 return DB::selectOne(DB::raw("SELECT * FROM owner_price_operation_owner WHERE owner_price_operation_id = ? AND owner_id = ? for update"),[$rule->id,$owner]);
             },1000);
-            if ($pivot && (!$pivot->discount_date || substr($pivot->discount_date,0,7)!=date("Y-m") || $pivot->target_value < $targetValue)){
+            if ($pivot && (!$pivot->discount_date || substr($pivot->discount_date,0,7)!=$month || $pivot->target_value < $targetValue)){
                 //未被标记过处理时间或处理时间不为本月,或上次处理值过期,处理历史即时账单
                 $sign = true;
             }
             if ($sign){
                 //先标记成功 这将在后续推进历史单处理流程,防止程序在此堵塞
                 DB::update(DB::raw("UPDATE owner_price_operation_owner SET discount_date = ?,target_value = ? WHERE  owner_price_operation_id = ? AND owner_id = ?"),
-                    [date("Y-m-d"),$targetValue,$rule->id,$owner]);
-                $pivot->discount_date = date("Y-m-d");
+                    [$month."-01",$targetValue,$rule->id,$owner]);
+                $pivot->discount_date = $month."-01";
                 $pivot->target_value = $targetValue;
                 Cache::put($key,$pivot,1000);
             }
@@ -276,7 +279,7 @@ class OwnerPriceOperationService
             $this->push(__METHOD__."->".__LINE__,"即时账单满减处理失败",$exception->getMessage()."  参数".json_encode(array($rule, $owner, $result)));
         }
         //进入历史单处理
-        if ($pivot && $sign)dispatch(new HandlePastBill(array($rule,$owner,$discountIndex,$pivot)));
+        if ($pivot && $sign)dispatch(new HandlePastBill(array($rule,$owner,$discountIndex,$pivot,$month)));
     }
 
     /** 参数顺序: 数量 匹配对象 列映射 货主ID 单位ID 类型 SKU .
@@ -344,7 +347,7 @@ class OwnerPriceOperationService
             if ($rule->strategy == '特征' && !app("FeatureService")->matchFeature($rule->feature,$columnMapping,$matchObject))continue;
             //获取满减信息并处理满减
             $result = $this->getDiscount($rule->discount_count,$total); //满减信息
-            $this->handleDiscount($rule,$ownerId,$result);
+            $this->handleDiscount($rule,$ownerId,$result,$month);
 
             $taxRate = app("OwnerService")->getTaxRateFee($rule, $ownerId);//获取税率
 
@@ -655,12 +658,12 @@ class OwnerPriceOperationService
      * @param int $owner
      * @param int $discountIndex
      * @param \stdClass|object $pivot
+     * @param string $month
      */
-    public function handlePastBill($rule, int $owner, int $discountIndex, $pivot)
+    public function handlePastBill($rule, int $owner, int $discountIndex, $pivot, $month)
     {
         DB::beginTransaction();
         try{
-            $month = date("Y-m");
             $day = date("t",strtotime($month));
             $query = OwnerFeeDetail::query()->where("owner_id",$owner)->whereBetween("worked_at",[$month."-01",$month."-".$day]);
             $units = app("UnitService")->getUnitMapping(["件","单","箱","m³","T","kg"],true); //获取单位映射集
@@ -694,12 +697,13 @@ class OwnerPriceOperationService
             };
             if ($rule->operation_type=='入库'){
                 foreach ($query->with(["store.storeItems.commodity","store.warehouse"])
-                             ->where("outer_table_name",'stores')->get() as $detail)
-                    $exe(Feature::MAPPING["store"],$detail->store,$detail);
+                             ->where("outer_table_name",'stores')->get()->chunk(50) as $coll){
+                    dispatch(new ExecutePostBillHandler($exe,$coll,Store::class));
+                }
             }else{
                 foreach ($query->with(["order.logistic","order.shop","order.packages.commodities.commodity","order.batch"])
-                             ->where("outer_table_name",'orders')->get() as $detail)
-                    $exe(Feature::MAPPING["order"],$detail->order,$detail);
+                             ->where("outer_table_name",'orders')->get()->chunk(50) as $coll)
+                    dispatch(new ExecutePostBillHandler($exe,$coll,Order::class));
             }
             DB::commit();
         }catch (\Exception $e){

+ 4 - 3
app/Services/StoreItemService.php

@@ -36,16 +36,17 @@ class StoreItemService
     public function getAsnDetailsByAsnHerder($asnHerders)
     {
         $asnnos=array_unique(data_get($asnHerders, '*.asnno'));
-        $collect=collect();
+        $result=[];
         foreach (array_chunk($asnnos,1000) as $item){
             $res= OracleDOCASNDetail::query()
                 ->with(['lineStatus', 'qualityStatus'])
                 ->whereIn('asnno',$item)
                 ->select('asnno','asnlineno','customerid','sku','skudescrc','linestatus','lotatt08','lotatt05','receivedqty','expectedqty','addtime','edittime')
                 ->get();
-            $collect->merge($res);
+            if ($res->isEmpty())continue;
+            array_push($result,...$res);
         }
-        return $collect;
+        return collect($result);
 
     }
 

+ 1 - 1
app/Services/StoreService.php

@@ -386,7 +386,7 @@ class StoreService
             OwnerFeeOperationDetail::query()->whereIn("owner_fee_operation_id",array_column($models->toArray(),"id"))->delete();
             OwnerFeeOperation::query()->where("doc_number",$docNumber)->delete();
         }catch (\Exception $e){
-            Log::warning("清除费用信息发送错误",["ASN号:{$docNumber}",isset($models) ? $models->toJson() : "查费用信息时被锁定"]);
+            Log::warning("清除费用信息发送错误",["ASN号:{$docNumber}",isset($models) ? $models->toJson() : "查费用信息时被锁定",$e->getMessage()]);
         }
     }
 

+ 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);
     }
 

+ 20 - 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,15 @@ 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['update_commodities'] ?? []);
+            $this->commodityService->createWorkOrderCommoditiesByJsonArray($detail, $params['commodities'] ?? []);
+            $this->commodityService->deleteCommodities($detail,$params['delete_commodity_ids'] ?? []);
+        }
     }
 
     /**
@@ -67,7 +75,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 - 18
app/Services/WorkOrderInterceptService.php

@@ -2,7 +2,6 @@
 
 namespace App\Services;
 
-use App\WorkOrder;
 use App\WorkOrderDetail;
 
 /**
@@ -16,13 +15,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 +26,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]);
+    }
 }

+ 1 - 1
app/Services/weight/HengLiWeightService.php

@@ -39,7 +39,7 @@ class HengLiWeightService extends WeightService
 
     public function getWeightMessage($orderPackage, $e): array
     {
-        return ['success' => false, 'message' => $e->getMessage];
+        return ['success' => false, 'message' => $e->getMessage ?? ""];
     }
 
 }

+ 19 - 1
app/Waybill.php

@@ -9,7 +9,6 @@ use Illuminate\Database\Eloquent\Relations\HasOne;
 use Illuminate\Database\Eloquent\SoftDeletes;
 
 use App\Traits\ModelLogChanging;
-use Illuminate\Support\Facades\DB;
 
 class Waybill extends Model
 {
@@ -77,6 +76,25 @@ class Waybill extends Model
         'subjoin_fee',//附加费
     ];
 
+    const ORDER_TYPE_DEFAULT = 2;
+    const ORDER_TYPE = [
+        1 => "散客模式",
+        2 => "大客户模式",
+        3 => "同步筛单下单",
+    ];
+    const PAY_TYPE_DEFAULT = 2;
+    const PAY_TYPE = [
+        0 => "发货人付款(现付)(大客户模式不支持寄付)",
+        1 => "收货人付款(到付)",
+        2 => "发货人付款(月结)",
+    ];
+    const BACK_SIGN_BILL_DEFAULT = 0;
+    const BACK_SIGN_BILL = [
+        0 => "无需返单",
+        1 => "签收单原单返回",
+        2 => "电子签收单(签名图需要另外对接查询接口)",
+    ];
+
     public function district()
     {   //区
         return $this->belongsTo(Region::class,"district_id","id")->where("type",3);

+ 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();
+    }
+
 }

+ 1 - 1
config/users.php

@@ -1,7 +1,7 @@
 <?php
 
 return [
-    'superAdmin' => ['ldaaww','baoshi56','周亚萍','shiyao','zhouzhendong','zengjun',"yang",'huhao',env('SUPER_ADMIN',"")],
+    'superAdmin' => ['xuxiaodong','ldaaww','baoshi56','周亚萍','shiyao','zhouzhendong','zengjun',"yang",'huhao',env('SUPER_ADMIN',"")],
     'token_expire_minutes'=>7200,
     'token_check_in_expire_minutes'=>432000, //打卡过期时间,单位为秒
     'cookie_expire_minutes'=>7200,//cookie过期时间,单位分钟

+ 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');
+        });
+    }
+}

+ 32 - 0
database/migrations/2021_12_14_145724_add_remark_column_to_procurements_table.php

@@ -0,0 +1,32 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class AddRemarkColumnToProcurementsTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('procurements', function (Blueprint $table) {
+            $table->string("remark")->nullable()->comment("备注");
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('procurements', function (Blueprint $table) {
+            $table->dropColumn("remark");
+        });
+    }
+}

+ 1 - 1
resources/js/utilities/toast.js

@@ -1,6 +1,6 @@
 window.toast={
     container : function (){
-        let div = $("<div style='position: absolute;top:0;width: 100%;z-index: 9999'></div>");
+        let div = $("<div style='position: fixed;top:0;width: 100%;z-index: 9999'></div>");
         $("body").append(div);
         return div;
     }(),

+ 48 - 0
resources/views/equipment/_buildGroup.blade.php

@@ -0,0 +1,48 @@
+<div class="modal fade" id="buildGroup" tabindex="-1" role="dialog" data-keyboard="false" aria-hidden="true">
+    <div class="modal-dialog modal-lg modal-dialog-centered" role="document">
+        <div class="modal-content">
+            <div class="modal-header row m-0">
+                <h5 class="font-weight-bold">设备组构建</h5>
+                <h5 class="offset-1">起始依据设备:<b>@{{ currentEl.code }}</b></h5>
+            </div>
+            <div class="modal-body container">
+                <div class="row form-inline">
+                    <label for="buildCount" class="offset-3">附加构建数量:</label>
+                    <input class="form-control ml-1" placeholder="构建数" type="number" step="1" min="1" id="buildCount"
+                           @keydown.enter="buildGroup()" v-model="buildEqInfo.count"></input>
+                </div>
+                <div class="row mt-3">
+                    <div class="col-6">
+                        <div class="mb-0 p-0" style="border: 1px #1b4b72 solid;margin-top: 1px"
+                             v-for="(el,index) in buildEqInfo.list" :class="buildEqInfo.current==index ? 'box-shadow-dark' : ''"
+                             @click="pitchEq(el,index)"
+                             :style="[{backgroundColor:el.color},{width:(el.w*ratio)+'px'},{height:(el.h*ratio)+'px'}]">
+                            <div class="h-100 txt-sty w-100 el-center re" v-if="el.id>0">@{{ el.code }}</div>
+                        </div>
+                    </div>
+                    <div class="col-6 h-100">
+                        <div class="row pb-2" v-for="equipment in equipments">
+                            <div class="col-5" @click="switchEq(equipment)">
+                                <div style="border: 1px #0070C0 solid" :class="buildEqInfo.currentEqId==equipment.id ? 'box-shadow-dark' : ''" :style="[{backgroundColor:equipment.color},{width:(equipment.h*ratio)+'px'},{height:(equipment.w*ratio)+'px'}]"></div>
+                            </div>
+                            <div class="col-7 p1">
+                                @{{ equipment.describe }}
+                            </div>
+                        </div>
+                        <div class="row pb-2" v-for="equipment in elSeList">
+                            <div class="col-5" @click="switchEq(equipment)">
+                                <div style="border: 1px #0070C0 solid" :class="buildEqInfo.currentEqId==equipment.id ? 'box-shadow-dark' : ''" :style="[{backgroundColor:equipment.color},{width:(equipment.h*ratio)+'px'},{height:(equipment.w*ratio)+'px'}]"></div>
+                            </div>
+                            <div class="col-7 p1">
+                                @{{ equipment.describe }}
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="modal-footer">
+                <button class="pull-right btn btn-success" @click="buildEquipmentGroup()">开始构建</button>
+            </div>
+        </div>
+    </div>
+</div>

+ 212 - 48
resources/views/equipment/index.blade.php

@@ -156,6 +156,11 @@
                             <button class="btn btn-sm btn-success" @click="addCoords()">生成场景元素</button>
                         </label>
                     </div>
+                    <div class="form-check mt-1">
+                        <label class="form-check-label">
+                            <button class="btn btn-sm btn-success" @click="openBuildEquipmentGroup()">构建设备组</button>
+                        </label>
+                    </div>
                 </div>
             </div>
             <p class="font-weight-bold p-0 mb-0 mt-5 h5">全局</p>
@@ -231,6 +236,7 @@
                 </div>
             </div>
         </div>
+        <textarea hidden id="clipboardDiv" style="opacity:0"></textarea>
         <div id="loading" class="list-item">
             <i class="fa fa-spinner fa-spin"></i>
             <p style="line-height: 24px;">loading...</p>
@@ -240,6 +246,7 @@
     @include("equipment._location")
     @include("equipment._warehouseDetail")
     @include("equipment._repository")
+    @include("equipment._buildGroup")
 </div>
 </body>
 <script src="{{ mix('js/app.js') }}"></script>
@@ -287,19 +294,29 @@
                 obj:null,
             },
             equipmentElements:[],                                       //设备元素池
-            grid:true,                                                  //设备拖拽是否开启网格
+            grid:false,                                                  //设备拖拽是否开启网格
             turn:true,                                                  //设备是否翻转
             isLoadLocation:false,                                       //开启加载库位
             //baseUrl:"http://127.0.0.1:8112/",
             baseUrl:"https://swms.baoshi56.com/",
             current:{},                                                 //当前操作的设备
             error:{},
-            locations:[],
-            currentEqChildIndex:null,
-            buildPool:{},
+            locations:[],                   //库位信息
+            currentEqChildIndex:null,       //当前节点下标
+            buildPool:{},                   //库位构建信息
+            client:{},                      //复制后的坐标记录
+            buildEqInfo:{},                 //设备组构建信息
+            charArr : [...Array(26).keys()].map(i => String.fromCharCode(i + 65)), //A-Z字符
+            elSeList:[
+                {id:-1,w:1.2,h:2.4,grid:2,color:"RGB(255,255,0)",describe:"消防栓设施或立柱,不可设库位"},
+            ],//场景元素预设列表
         },
         mounted() {
             this.initPage();
+            let content = document.getElementById("canvasApp");
+            content.onmousemove = (event)=>{
+                this.client = {x:event.clientX,y:event.clientY};
+            }
         },
         computed:{
             flipLayer(){
@@ -311,14 +328,150 @@
             },
         },
         created: function() {
+            let content = document.getElementById("canvasApp");
             document.onkeydown = e=> {
+                if (this.isNotEdit || !this.current)return;
                 let key = e.keyCode;
                 if (key === 8) {
                     this.delElement();
                 }
+                if(key===67  && e.ctrlKey){
+                    this.copyEle();
+                }
+                if(key===86  && e.ctrlKey){
+                    let val = $('#clipboardDiv').val();
+                    if (!val)return;
+                    let toolWid = document.getElementById("tool").offsetWidth;
+                    let obj = JSON.parse(val);
+                    obj.x = this.client.x-toolWid+content.scrollLeft;
+                    obj.y = this.client.y+content.scrollTop;
+                    obj.children = [];
+                    for (let i=0;i<obj.layer;i++)obj.children.push({});
+                    if (this.currentEl.eqId){
+                        obj.eqId = undefined;
+                        this.showAddModal(obj);
+                    }else{
+                        this.elements.push(obj);
+                    }
+                }
             };
         },
         methods:{
+            buildComponent(eq){
+                let component = {
+                    "x":eq.x,"y":eq.y,"width":eq.turn ? eq.w : eq.h,"height":eq.turn ? eq.h : eq.w,"name":"","color":eq.color,
+                    "coords":"居中","border":["left","top","right","bottom"],"index":2
+                };
+                this.elements.push(component);
+            },
+            buildEquipment(eq){
+                let children = [];
+                let lastHeight = 1;
+                for (let i=0;i<eq.layer;i++){
+                    let obj = this.currentEl.children[i];
+                    if (obj)lastHeight = obj.height;
+                    children.push({
+                        "height" : lastHeight,
+                        "row" : 0,
+                        "column" : 0,
+                    });
+                }
+                eq.children = children;
+                this.equipmentElements.push(eq);
+                this.exeSave(this.equipmentElements[this.equipmentElements.length-1]);
+            },
+            buildEquipmentGroup(){
+                let x = this.currentEl.turn ? this.currentEl.x : Number(this.currentEl.x)+(Number(this.currentEl.w)*this.ratio);
+                let y = this.currentEl.turn ? Number(this.currentEl.y)+(Number(this.currentEl.h)*this.ratio) : this.currentEl.y;
+                this.buildEqInfo.list.forEach(eq=>{
+                    eq.x = x;
+                    eq.y = y;
+                    if (eq.id<0)this.buildComponent(eq); //构建组件
+                    else this.buildEquipment(eq); //构建设备
+                    if (this.currentEl.turn){
+                        y += eq.h*this.ratio+0.5;
+                    }else{
+                        x += eq.h*this.ratio+0.5;
+                    }
+                });
+                window.toast.success("构建完毕");
+                this.buildEqInfo = {};
+                $("#buildGroup").modal("hide");
+            },
+            getLastChar(str){
+                let lastChar = str.substr(-1,1);
+                if (lastChar.search(/[A-Z]/g)===0){
+                    let index = this.charArr.indexOf(lastChar);
+                    let residualCount = this.charArr.length-(index+1);
+                    if (residualCount<this.buildEqInfo.count)return null;
+                    return {type:"CHAR",val:index};
+                }
+                if (lastChar.search(/[\d]/g)===0){
+                    let strs = str.replace(/[^\d]/g,'*');
+                    let strsArr = strs.split('*');
+                    return {type:"NUMBER",val:strsArr[strsArr.length-1]};
+                }
+                return null;
+            },
+            buildGroup(){
+                let count = this.buildEqInfo.count;
+                if (!count)return;
+                let result = this.getLastChar(this.currentEl.code);
+                if(!result){
+                    window.toast.error("此设备编码不符合组规则");
+                    return;
+                }
+                let codeTran = (index)=>{
+                    let size = result.val.toString().length;
+                    let val;
+                    if(result.type==="CHAR"){
+                        val=this.charArr[result.val+index];
+                    }else{
+                        val=Number(result.val)+index;
+                        if (val.toString().length<size){
+                            val = (Array(size).join('0') + val).slice(-size);
+                        }
+                    }
+                    return this.currentEl.code.substr(0,this.currentEl.code.length-size)+val;
+                };
+                let list = [];
+                for (let i=1;i<=count;i++){
+                    let obj = Object.assign({},this.currentEl);
+                    obj.eqId = undefined;
+                    obj.updateCoords = undefined;
+                    obj.code = codeTran(i);
+                    list.push(obj);
+                }
+                this.$set(this.buildEqInfo,"list",list);
+            },
+            pitchEq(el,index){
+                this.$set(this.buildEqInfo,"current",index);
+                this.$set(this.buildEqInfo,"currentEqId",el.id);
+            },
+            switchEq(el){
+                if (this.buildEqInfo.currentEqId===el.id)return;
+                let obj = this.buildEqInfo.list[this.buildEqInfo.current];
+                obj.id = el.id;
+                obj.w = el.w;
+                obj.h = el.h;
+                obj.describe = el.describe;
+                obj.grid = el.grid;
+                obj.layer = el.layer;
+                obj.color = el.color;
+                obj.width = el.w;
+                obj.depth = el.h;
+                this.$set(this.buildEqInfo,"currentEqId",el.id);
+            },
+            openBuildEquipmentGroup(){
+                if (this.isNotEdit || !this.currentEl.eqId){
+                    window.toast.error("未开启编辑或未选中设备");
+                    return;
+                }
+                setTimeout(()=>{
+                    this.getChildren(this.currentEl);
+                    $("#buildGroup").modal("show");
+                },100);
+            },
             delCoords(){
                 this.elements.some((el,index)=>{
                     if (this.currentEl.name === el.name &&
@@ -328,6 +481,9 @@
                     }
                 })
             },
+            copyEle(){
+                $('#clipboardDiv').text(JSON.stringify(this.currentEl));
+            },
             delEquipment(){
                 this.equipmentElements.some((el,index)=>{
                     if (this.currentEl.eqId === el.eqId){
@@ -337,8 +493,6 @@
                 })
             },
             delElement(){
-                if (this.isNotEdit || !this.current)return;
-
                 if (this.currentEl.eqId)this.delEquipment();
                 else this.delCoords();
             },
@@ -466,17 +620,21 @@
                         let wid = newEquipment.w;
                         newEquipment.w = newEquipment.h;
                         newEquipment.h = wid;
+                        newEquipment.turn = this.turn;
+                        this.showAddModal(newEquipment);
                     }
                     newEquipment.width = newEquipment.w;
                     newEquipment.depth = newEquipment.h;
-                    this.equipmentElements.push(newEquipment);
-                    this.current = this.equipmentElements[this.equipmentElements.length-1];
-                    setTimeout(()=>{
-                        $("#detailInfo").modal("show");
-                    },20);
                 }
                 this.currentEq.obj = null;
             },
+            showAddModal(equipment){
+                this.equipmentElements.push(equipment);
+                this.current = this.equipmentElements[this.equipmentElements.length-1];
+                setTimeout(()=>{
+                    $("#detailInfo").modal("show");
+                },20);
+            },
             //场景拖拽按下事件
             contentOnmousedown(event){
                 if (!this.isNotEdit || this.clientCoords.x!==undefined)return;
@@ -641,11 +799,14 @@
                     $("#detailInfo").modal("show");
                     this.contentOnmouseup();
                 },20);
+                this.getChildren(this.current);
+            },
+            getChildren(equipment){
                 $.ajax({
                     url : this.baseUrl+"equipment/getChildren",
                     type : "post",
                     dataType : "JSON",
-                    data : {id:this.current.eqId},
+                    data : {id:equipment.eqId},
                     success : (res)=>{
                         switch (res.code){
                             case 200:
@@ -654,7 +815,7 @@
                                     eq.row = Number(tab[0]);
                                     eq.column = Number(tab[1]);
                                 });
-                                this.$set(this.current,"children",res.data);
+                                this.$set(equipment,"children",res.data);
                                 break;
                             default:
                                 window.toast.error("服务器错误");
@@ -673,41 +834,44 @@
               if (JSON.stringify(error)!=="{}"){
                   this.error = error;return;
               }
-              let params = this._formatEquipmentData(this.current);
-              params.warehouseDetailId = this.selected;
-              $.ajax({
-                  url : this.baseUrl+"equipment/saveOrUpdate",
-                  type : "post",
-                  dataType : "JSON",
-                  headers:{'Content-Type':'application/json;charset=utf8'},
-                  data : JSON.stringify(params),
-                  success : (res)=>{
-                      switch (res.code){
-                          case 200:
-                              this.current.eqId = res.data[0];
-                              this.current.children.forEach((item,index)=>{
-                                  item.id = res.data[1][index];
-                              })
-                              $("#detailInfo").modal("hide");
-                              window.toast.success("保存成功");
-                              break;
-                          case 701:
-                              this.error = res.data;
-                              break;
-                          case 414:
-                              this.error = {"code":"设备编码重复"};
-                              this.toast.error(this.error.code);
-                              break;
-                          default:
-                              window.toast.error("服务器错误:"+res.message);
-                      }
-                  },
-                  error : (err)=>{
-                      window.tempTip.setIndex(999);
-                      window.tempTip.show("网络错误");
-                  },
-                  timeout:3000,
-              })
+              this.exeSave(this.current);
+            },
+            exeSave(equipment){
+                let params = this._formatEquipmentData(equipment);
+                params.warehouseDetailId = this.selected;
+                $.ajax({
+                    url : this.baseUrl+"equipment/saveOrUpdate",
+                    type : "post",
+                    dataType : "JSON",
+                    headers:{'Content-Type':'application/json;charset=utf8'},
+                    data : JSON.stringify(params),
+                    success : (res)=>{
+                        switch (res.code){
+                            case 200:
+                                equipment.eqId = res.data[0];
+                                equipment.children.forEach((item,index)=>{
+                                    item.id = res.data[1][index];
+                                })
+                                $("#detailInfo").modal("hide");
+                                window.toast.success("保存成功");
+                                break;
+                            case 701:
+                                this.error = res.data;
+                                break;
+                            case 414:
+                                this.error = {"code":"设备编码重复"};
+                                this.toast.error(this.error.code);
+                                break;
+                            default:
+                                window.toast.error("服务器错误:"+res.message);
+                        }
+                    },
+                    error : (err)=>{
+                        window.tempTip.setIndex(999);
+                        window.tempTip.show("网络错误");
+                    },
+                    timeout:3000,
+                })
             },
             _checkEquipmentData(equipment){
                 let error = {};

+ 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>

+ 96 - 53
resources/views/order/index/delivering.blade.php

@@ -386,9 +386,17 @@
                 },
                 upList: {},
                 workOrder: {
-                    types: ['拦截', '快递异常', '信息更改', '错漏发', '破损','快递丢件'],
+                    types:
+                        @can("订单管理-工单处理-客服编辑")
+                            ['拦截', '信息更改', '快递异常', '错漏发', '破损', '快递丢件']
+                        @elsecan("订单管理-工单处理-货主编辑")
+                            ['拦截', '信息更改', '快递异常', '错漏发', '破损']
+                        @else
+                            ['']
+                        @endcan
+                        ,
                     orderIssueType: 0,
-                    grad: 1,
+                    type:null,          // 快递异常时填写
                     remark: {
                         name: null,     // 联系人
                         phone: null,    // 联系号码
@@ -405,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,
@@ -1262,7 +1265,6 @@
                     $("#intercept-modal").modal('show');
                 },
                 showInterceptModel() {
-                    this.workOrder.grad = 1;
                     if (checkData.length < 1) {
                         window.tempTip.setDuration(1500);
                         window.tempTip.show('未选中任何订单');
@@ -1270,6 +1272,7 @@
                     }
                     this.workOrder.orderIssueType = null;
                     this.workOrder.price = null;
+                    this.workOrder.type = null;
                     this.workOrder.refundImages = [];
                     this.workOrder.packageImages = [];
                     this.workOrder.commodityImages = [];
@@ -1345,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();
@@ -1363,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);
                 },
@@ -1379,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);                   // 外包装破损图片
@@ -1419,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) => {
@@ -1526,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');
@@ -1639,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];
@@ -1840,6 +1884,7 @@
                     });
                 },
                 computeAbnormalType(item){
+                    this.sunPrice();
                     if (this.workOrder.orderIssueType !=='错漏发') return;
                     let abnormal_amount = Number(item.abnormal_amount);     // 客户实收数量
                     let amount = Number(item.amount);
@@ -1847,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;

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

@@ -1554,7 +1554,7 @@
                         _this.sortTransferStatus(item);
                         $.each(item.commodities, function (i, commodity) {
                             type_numbers++;
-                            amounts += commodity.amount;
+                            amounts += Number(commodity.amount);
                         });
                     });
                     order.amounts = amounts;

+ 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 && !baoShiEditWorkOrder.is_edit ">
+
+        <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" disabled>
+                                <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 && baoShiEditWorkOrder.is_edit">
+
+        <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" disabled>
+                                <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>

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

@@ -1,233 +1,845 @@
-{{--快递丢件 处理--}}
-<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 && !ownerEditWorkOrder.is_edit">
+        <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 && 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>
+                    </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>
+
+            <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>
+                        </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>
+        </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>

+ 1564 - 578
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:#bf674e;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: #4390a7;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,1426 @@
                     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, status} = item;
+                    if (issue_type_name === '信息更改' && status === '承运商处理') return true;
+                    if (issue_type_name === '快递丢件' && status === '宝时终审') return true;
+                    if (issue_type_name === '快递异常' && status === '承运商处理') return true;
+                    if (issue_type_name === '破损' && status === '承运商处理') return true;
+                    if (issue_type_name === '错漏发' && status === '宝时终审') return true;
+                    else if (issue_type_name === '错漏发' && 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 => {
+
+                        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);
+                            }
+                        });
+                        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 if ('破损' === issue_type_name){
+                        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) {
+                                    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);
-                        })
-                    } 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));
+                            this.errorTempTip(err)
                         });
-                        window.tempTip.waitingTip('处理中');
-                        window.axios.post(url, formData,{'Content-Type': 'multipart/form-data'}).then(res => {
+                    } else if(['拦截','信息更改'].includes(issue_type_name)){
+                        this.dialogEditOwnerVisible = true;
+                    } else if ('快递丢件'.includes(issue_type_name)){
+                        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) {
+                                    item.abnormal_amount = item.amount;
+                                    work_order_commodities.push(item);
+                                }
+                            });
+                            this.ownerEditWorkOrder.commodities = this.countCommoditiesByLogisticNumber(work_order_commodities);
+                            this.dialogEditOwnerVisible = true;
                         }).catch(err => {
                             window.tempTip.cancelWaitingTip();
-                            this.errorTempTip(err);
-                        })
+                            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));
+                            commodities.filter(e => !e.tag).filter(e => e.created).forEach(e => {
+                                if (!e.id) formData.append("commodities[]", JSON.stringify(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;
+                    });
+                },
+                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;
+                        }
+                    });
                 },
-                getProcessResult(check_result,item){
+                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);
                 },
             },
         });

+ 1 - 0
resources/views/procurement/finance/checkBill.blade.php

@@ -106,6 +106,7 @@
                 let data = [
                     [
                         {name: 'signed_at', type: 'dateMonth', tip: '选择显示指定的签收日期'},
+                        {name:'code',type:'input',tip:'可支持多采购编号,模糊搜索可在两侧增加百分号(%)进行',placeholder: '采购编号'},
                         {
                             name: 'supplier_id', type: 'select_multiple_select', tip: ['输入关键词快速定位下拉列表,回车确定', '选择要显示的供应商'],
                             placeholder: ['供应商', '定位或多选供应商'], data: this.suppliers

+ 1 - 0
resources/views/procurement/finance/procurementBill.blade.php

@@ -92,6 +92,7 @@
                     [
                         {name: 'created_at_start', type: 'dateTime', tip: '选择显示指定日期的起始时间'},
                         {name: 'created_at_end', type: 'dateTime', tip: '选择显示指定日期的结束时间'},
+                        {name:'code',type:'input',tip:'可支持多采购编号,模糊搜索可在两侧增加百分号(%)进行',placeholder: '采购编号'},
                         {
                             name: 'owner_id', type: 'select_multiple_select', tip: ['输入关键词快速定位下拉列表,回车确定', '选择要显示的项目'],
                             placeholder: ['项目', '定位或多选项目'], data: this.owners

+ 6 - 0
resources/views/procurement/procurement/_addProcurement.blade.php

@@ -95,6 +95,12 @@
                             <input id="total_price" type="text" class="form-control" name="total_price" autocomplete="off" value="{{ old('total_price') }}" v-model="total_price" readonly>
                         </div>
                     </div>
+                    <div class="form-group row" >
+                        <label for="remark" class="col-2 col-form-label text-right">备注</label>
+                        <div class="col-8">
+                            <textarea id="remark" type="text" class="form-control" name="remark" autocomplete="off" value="{{ old('remark') }}" v-model="remark"></textarea>
+                        </div>
+                    </div>
                 </form>
             </div>
             <div class="modal-footer">

+ 6 - 0
resources/views/procurement/procurement/create.blade.php

@@ -92,6 +92,12 @@
                             <input type="text" class="form-control" name="total_price" autocomplete="off" value="{{ old('total_price') }}" v-model="total_price" readonly>
                         </div>
                     </div>
+                    <div class="form-group row" >
+                        <label for="remark" class="col-2 col-form-label text-right">备注</label>
+                        <div class="col-8">
+                            <textarea id="remark" type="text" class="form-control" name="remark" autocomplete="off" value="{{ old('remark') }}" v-model="remark"></textarea>
+                        </div>
+                    </div>
                     <div class="form-group row">
                         <div class="col-8 offset-2">
                             <input type="submit" class="btn btn-success form-control">

+ 6 - 3
resources/views/procurement/procurement/index.blade.php

@@ -185,6 +185,7 @@
                 amount: '{{old('amount')}}',
                 unit_price: '{{old('unit_price')}}',
                 total_price: '{{old('total_price')}}',
+                remark: '{{old('remark')}}',
                 procurement_id:'',supplier:'',offer:'',supplier_id:'',
                 ownerMaterials: [],
                 errors: {},
@@ -200,6 +201,7 @@
                     [
                         {name: 'created_at_start', type: 'dateTime', tip: '选择显示指定日期的起始时间'},
                         {name: 'created_at_end', type: 'dateTime', tip: '选择显示指定日期的结束时间'},
+                        {name:'code',type:'input',tip:'可支持多采购编号,模糊搜索可在两侧增加百分号(%)进行',placeholder: '采购编号'},
                         {
                             name: 'owner_id', type: 'select_multiple_select', tip: ['输入关键词快速定位下拉列表,回车确定', '选择要显示的项目'],
                             placeholder: ['项目', '定位或多选项目'], data: this.owners
@@ -357,7 +359,8 @@
                         owner_material_id: _this.owner_material_id,
                         quantity: _this.quantity,
                         amount: _this.amount,
-                        unit_price: _this.unit_price
+                        unit_price: _this.unit_price,
+                        remark: _this.remark
                     };
                     window.axios.post(url, params).then(function (res) {
                         if (!res.data.success) {
@@ -377,7 +380,7 @@
                 createEnquiry() {
                     let _this = this;
                     let url = '{{url('procurement/procurement/createEnquiry')}}';
-                    let params = {owner_id: _this.owner_id, owner_material_id: _this.owner_material_id};
+                    let params = {owner_id: _this.owner_id, owner_material_id: _this.owner_material_id,remark: _this.remark};
                     window.axios.post(url, params).then(function (res) {
                         if (!res.data.success) {
                             _this.errors = res.data.errors;
@@ -397,7 +400,7 @@
                 createProof() {
                     let _this = this;
                     let url = '{{url('procurement/procurement/createProof')}}';
-                    let params = {owner_id: _this.owner_id, owner_material_id: _this.owner_material_id};
+                    let params = {owner_id: _this.owner_id, owner_material_id: _this.owner_material_id,remark: _this.remark};
                     window.axios.post(url, params).then(function (res) {
                         if (!res.data.success) {
                             _this.errors = res.data.errors;

+ 5 - 2
resources/views/store/deliveryAppointment/list.blade.php

@@ -17,7 +17,7 @@
         </div>
         <table class="table table-striped table-bordered table-hover text-nowrap td-min-width-80" id="table">
             <tr v-for="(info,i) in list" :id="'info-'+i">
-                <td><input class="checkItem" type="checkbox" :value="list.id"></td>
+                <td><input class="checkItem" type="checkbox" :value="info.id"></td>
                 <td>@{{ i+1 }}</td>
                 <td>
                     <span>
@@ -122,7 +122,6 @@
                 status:[],
                 warehouses:[],
                 owners:[@foreach($owners as $owner){name:"{{$owner->id}}",value:"{{$owner->name}}"},@endforeach],
-               /* checkData:[],*/
                 poolMapping:{},
                 upList:{},
                 upListDetail:{},
@@ -312,6 +311,10 @@
                     })
                 },
                 executeExport(isAll){
+                    if (!isAll && checkData.length===0){
+                        window.tempTip.show("未选择记录");
+                        return;
+                    }
                     let url = '{{url('store/deliveryAppointment/export')}}';
                     let token='{{ csrf_token() }}';
                     excelExport(isAll,checkData,url,this.sum,token);

+ 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');                  // 宝时处理
+
     });