ajun hace 4 años
padre
commit
a28dac0a5f

+ 21 - 29
app/Filters/WorkOrderFilters.php

@@ -75,18 +75,11 @@ class WorkOrderFilters
             $this->getOrderQuery()->whereIn('owner_id', app('UserService')->getPermittingOwnerIds(Auth::user())??[]);
         }
 
-//        $user = Auth::user();
-//        $logistic_ids = App('LogisticService')->getPermittingLogisticIds($user);
-//        $owner_id = app('UserService')->getPermittingOwnerIds($user);
-//
-//        $this->getOrderQuery()->where(function($query)use ($owner_id,$logistic_ids){
-//            $query->whereIn('owner_id',$owner_id)->orWhereIn('logistic_id',$logistic_ids);
-//        });
         $this->afterFilter();
     }
 
-    private function afterFilter(){
-        $orderQuery = $this->getOrderQuery();
+    private function afterFilter()
+    {
 
         $user = Auth::user();
 
@@ -94,31 +87,30 @@ class WorkOrderFilters
 
         $owner_ids = app('UserService')->getPermittingOwnerIds($user);
 
-        $this->afterFilterLogistic($orderQuery,$owner_ids,$logistic_ids);
+        $this->afterFilterLogistic($owner_ids,$logistic_ids);
 
-        $this->afterFilterOwner($orderQuery,$owner_ids);
+        $this->afterFilterOwner($owner_ids);
     }
 
     // 可见货主过滤
-    private function afterFilterOwner($orderQuery,$owner_ids)
+    private function afterFilterOwner($owner_ids)
     {
-        $orderQuery->whereIn('owner_id',$owner_ids);
-//        if(Gate::allows('订单管理-工单处理-客服编辑') || Gate::allows('订单管理-工单处理-承运商编辑')){
-//
-//        }else if(Gate::allows('订单管理-工单处理-货主编辑')){
-//            $orderQuery->whereIn('owner_id',$owner_ids);
-//        }
+        if(Gate::allows('订单管理-工单处理-客服编辑') || Gate::allows('订单管理-工单处理-承运商编辑')){
+
+        }else if(Gate::allows('订单管理-工单处理-货主编辑')){
+            $this->queryBuilder->whereIn('owner_id',$owner_ids);
+        }
     }
 
     // 可见承运商过滤
-    private function afterFilterLogistic($orderQuery,$owner_ids,$logistic_ids)
+    private function afterFilterLogistic($owner_ids,$logistic_ids)
     {
         if(Gate::allows('订单管理-工单处理-客服编辑') || Gate::allows('订单管理-工单处理-货主编辑')){
             if (!isset($this->params['owner'])){
-                $this->getOrderQuery()->whereIn('owner_id', $owner_ids);
+                $this->queryBuilder->whereIn('owner_id', $owner_ids);
             }
         } else if (Gate::allows('订单管理-工单处理-承运商编辑')){
-            $orderQuery->whereIn('logistic_id',array_values($logistic_ids));
+            $this->queryBuilder->whereIn('logistic_id',array_values($logistic_ids));
         }
     }
 
@@ -129,17 +121,17 @@ class WorkOrderFilters
         }
 
         if ($this->orderQuery) {
-            $this->queryBuilder->whereIn('order_id',$this->getOrderQuery());
+            $this->queryBuilder->whereIn('order_id',$this->orderQuery);
         }
 
         // 审核 默认为 待审核
-        if (isset($this->params['is_review'])){
-            $this->queryBuilder->where('status','2');
-            $this->queryBuilder->whereHas('orderIssue')->orderBydesc('work_orders.created_at');
-        } else {
-            $work_order_query = WorkOrder::query()->select('id')->where('status','2')->whereHas('orderIssue');
-            $this->queryBuilder->whereNotIn('id',$work_order_query);
-        }
+//        if (isset($this->params['is_review'])){
+//            $this->queryBuilder->where('status','2');
+//            $this->queryBuilder->whereHas('orderIssue')->orderBydesc('work_orders.created_at');
+//        } else {
+//            $work_order_query = WorkOrder::query()->select('id')->where('status','2')->whereHas('orderIssue');
+//            $this->queryBuilder->whereNotIn('id',$work_order_query);
+//        }
     }
 
     public function getOrderQuery(): Builder

+ 18 - 2
app/Http/Controllers/OrderPackageCommoditiesController.php

@@ -10,11 +10,27 @@ use Illuminate\Http\Request;
 
 class OrderPackageCommoditiesController extends Controller
 {
-    public function getCommoditiesApi(Request $request,OrderService $orderService,OrderPackageCommoditiesService $orderPackageCommoditiesService)
+    public function getCommoditiesApi(Request $request, OrderService $orderService, OrderPackageCommoditiesService $orderPackageCommoditiesService): array
     {
         $code = $request->input(['orderNo']);
+
         $orderService->syncOrderByCodes([$code]);
-        return $orderPackageCommoditiesService->getCommodities($code);
+
+        $commodities = $orderPackageCommoditiesService->getCommodities($code);
+
+        $data = $commodities->map(function ($item) {
+            return [
+                'sku' => $item->commodity->sku ?? '',
+                'commodity_id' => $item->id,
+                'amount' => $item->amount,
+                'name' => $item->commodity->name ?? '',
+                'logistic_number' => $item->package->logistic_number ?? '',
+                'check_amount' => 0,
+                'abnormal_amount' => 0,
+            ];
+        })->toArray();
+
+        return ['success' => true, 'data' => $data];
     }
 
 }

+ 5 - 3
app/Services/OrderPackageCommoditiesService.php

@@ -726,10 +726,12 @@ class OrderPackageCommoditiesService
         }
      }
 
+
+
     public function getCommodities($orderNo)
     {
-        $orderQuery = Order::query()->where('id')->where('code',$orderNo);
-        $orderPackageQuery = OrderPackage::query()->select('id')->where('order_id',$orderQuery);
-        return OrderPackageCommodities::query()->with('commodity')->whereIn('order_package_id',$orderPackageQuery)->get();
+        $orderQuery = Order::query()->select('id')->where('code',$orderNo);
+        $orderPackageQuery = OrderPackage::query()->select('id')->whereIn('order_id',$orderQuery);
+        return OrderPackageCommodities::query()->with('commodity','package')->whereIn('order_package_id',$orderPackageQuery)->get();
     }
 }

+ 10 - 3
app/Services/WorkOrderCommoditiesService.php

@@ -16,9 +16,16 @@ class WorkOrderCommoditiesService
     public function createWorkOrderCommodityByJson(WorkOrder $workOrder, $json)
     {
         $obj = json_decode($json);
-        $owner_id = $workOrder->order->owner_id ?? '';
-        $commodity = Commodity::query()->where('owner_id', $owner_id)->where('sku', $obj->sku)->first();
-        $workOrder->commodities()->create(['sku' => $obj->sku, 'amount' => $obj->amount, 'commodity_id' => $commodity->id ?? '']);
+        $workOrder->commodities()->create([
+//            'work_order_id' => $workOrder['id'],
+            'commodity_id' => $obj->commodity_id ?? '',
+            'sku' => $obj->sku,
+            'amount' => $obj->amount ?? '',
+            'abnormal_amount' => $obj->abnormal_amount ?? '',
+            'check_amount' => $obj->check_amount ?? '',
+            'abnormal_result' => $commodity->id ?? '',
+            'process_result' => $commodity->process_result ?? '',
+        ]);
     }
 
     /**

+ 16 - 24
app/Services/WorkOrderImageService.php

@@ -15,15 +15,13 @@ class WorkOrderImageService
      * 外包装
      * @param $workOrder
      * @param $images
-     * @param bool $isLoadMissing
      */
-    public function createWorkOrderPackageImages($workOrder,$images, bool $isLoadMissing = true)
+    public function createWorkOrderPackageImages($workOrder,$images)
     {
         foreach ($images as $image) {
            $this->createWorkOrderPackageImage($workOrder,$image);
         }
-        if ($isLoadMissing)$workOrder->loadMissing('packageImages');
-    }
+     }
 
     /**
      * @param $workOrder
@@ -32,9 +30,9 @@ class WorkOrderImageService
     public function createWorkOrderPackageImage($workOrder,$image)
     {
         /** @var UploadedFile  $image */
-        $count = $workOrder->packageImages()->count();
+        $count = $workOrder->images()->where('type',1)->count();
         /** @var WorkOrderImage $workOrderImage */
-        $workOrderImage = $workOrder->packageImages()->create(['type' => 1, 'number' => ++$count]);
+        $workOrderImage = $workOrder->images()->create(['type' => 1, 'number' => ++$count]);
         $workOrderImage->saveFile($image);
     }
 
@@ -42,15 +40,13 @@ class WorkOrderImageService
      * 工单商品
      * @param $workOrder
      * @param $images
-     * @param bool $isLoadMissing
      */
-    public function createWorkOrderCommodityImages($workOrder,$images, bool $isLoadMissing = true)
+    public function createWorkOrderCommodityImages($workOrder,$images)
     {
         foreach ($images as $image) {
             $this->createWorkOrderCommodityImage($workOrder,$image);
         }
-        if ($isLoadMissing)$workOrder->loadMissing('commodityImages');
-    }
+     }
 
     /**
      * @param $workOrder
@@ -59,9 +55,9 @@ class WorkOrderImageService
     public function createWorkOrderCommodityImage($workOrder,$image)
     {
         /** @var UploadedFile  $image */
-        $count = $workOrder->commodityImages()->count();
+        $count = $workOrder->images()->where('type',2)->count();
         /** @var WorkOrderImage $workOrderImage */
-        $workOrderImage = $workOrder->commodityImages()->create(['type' => 2, 'number' => ++$count]);
+        $workOrderImage = $workOrder->images()->create(['type' => 2, 'number' => ++$count]);
         $workOrderImage->saveFile($image);
     }
 
@@ -69,22 +65,20 @@ class WorkOrderImageService
      * 交易截图
      * @param $workOrder
      * @param $images
-     * @param bool $isLoadMissing
      */
-    public function createWorkOrderDealImages($workOrder,$images, bool $isLoadMissing = true)
+    public function createWorkOrderDealImages($workOrder,$images)
     {
         foreach ($images as $image) {
             $this->createWorkOrderDealImage($workOrder,$image);
         }
-        if ($isLoadMissing)$workOrder->loadMissing('dealImages');
-    }
+     }
 
     public function createWorkOrderDealImage($workOrder,$image)
     {
         /** @var UploadedFile  $image */
-        $count = $workOrder->dealImages()->count();
+        $count = $workOrder->images()->where('type',3)->count();
         /** @var WorkOrderImage $workOrderImage */
-        $workOrderImage = $workOrder->dealImages()->create(['type' => 3, 'number' => ++$count]);
+        $workOrderImage = $workOrder->images()->create(['type' => 3, 'number' => ++$count]);
         $workOrderImage->saveFile($image);
     }
 
@@ -92,22 +86,20 @@ class WorkOrderImageService
      * 退款截图
      * @param $workOrder
      * @param $images
-     * @param bool $isLoadMissing
      */
-    public function createWorkOrderRefundImages($workOrder, $images, bool $isLoadMissing = true)
+    public function createWorkOrderRefundImages($workOrder, $images)
     {
         foreach ($images as $image) {
             $this->createWorkOrderRefundImage($workOrder,$image);
         }
-        if ($isLoadMissing)$workOrder->loadMissing('refundImages');
-    }
+     }
 
     public function createWorkOrderRefundImage($workOrder,$image)
     {
         /** @var UploadedFile  $image */
-        $count = $workOrder->refundImages()->count();
+        $count = $workOrder->images()->where('type',4)->count();
         /** @var WorkOrderImage $workOrderImage */
-        $workOrderImage = $workOrder->refundImages()->create(['type' => 4, 'number' => ++$count]);
+        $workOrderImage = $workOrder->images()->create(['type' => 4, 'number' => ++$count]);
         $workOrderImage->saveFile($image);
     }
 }

+ 8 - 5
app/Services/WorkOrderService.php

@@ -68,14 +68,15 @@ class WorkOrderService
         /** @var WorkOrder $workOrder */
         $workOrder = WorkOrder::query()->create([
             'order_id' => $order->id,
+            'logistic_id' => $order->logistic_id ?? '',
+            'owner_id' => $order->owner_id ?? '',
             'creator_id' => $user["id"],
-            'owner_id' => $order->owner_id,
             'remark' => $remark,
             'outer_table_name' => 'orders',
             'order_issue_type_id' => $orderIssueType->id,
             'uniquely_tag' => $order->code,
-            'status' => 1,
-            'work_order_status' => 1
+            'status' => 0,
+//            'work_order_status' => 1
         ]);
         $workOrder->notification();
         return $workOrder;
@@ -88,7 +89,7 @@ class WorkOrderService
     {
         $orderIssueType = OrderIssueType::query()->firstOrCreate(['name' => '拦截']);
         $order = Order::query()->where('code', $param['order_no'])->first();
-        $remark = $param['remark'] ?? '';
+        $remark = $param['remark'] ?? '拦截工单';
         return $this->createAndNotification($order, $orderIssueType, $remark);
     }
 
@@ -109,7 +110,9 @@ class WorkOrderService
     public function createDamagedWorkOrder($param): WorkOrder
     {
         $orderIssueType = OrderIssueType::query()->firstOrCreate(['name' => '破损']);
+
         $order = Order::query()->where('code', $param['order_no'])->first();
+
         $remark = $param['remark'] ?? '';
 
         $workOrderImageService = app('WorkOrderImageService');
@@ -126,7 +129,7 @@ class WorkOrderService
 
         app('WorkOrderCommoditiesService')->createWorkOrderCommoditiesByJsonArray($workOrder, $param['commodities']); // 登记商品信息
 
-        $workOrder->update(['work_order_status' => 2]); // 标记信息已填写
+        $workOrder->update(['status' => 2]); // 标记信息已填写
 
         return $workOrder;
     }

+ 117 - 154
app/WorkOrder.php

@@ -24,41 +24,43 @@ class WorkOrder extends Model
 
     // 工单 信息
     protected $fillable = [
+        'owner_id',      // 货主
+        'logistic_id',      // 承运商
+        'order_issue_type_id', // 问题件类型
         'status',           // 审核状态
         'creator_id',       // 创建人
         'reviewer_id',      // 审核人
-        'owner_id',      // 货主
-        'order_issue_type_id', // 问题件类型
         'work_order_type_id',  // 工单类型
-        'grad',         // 紧急等级
-        'remark',       // 工单信息描述
-        'outer_table_name',     // 链接表名
         'review_at',            // 审核时间
         'order_id',             // 订单id
         'uniquely_tag',         // 唯一标识
-        'work_order_status', // 工单状态
+//        'grad',         // 紧急等级
+//        'remark',       // 工单信息描述
+//        'outer_table_name',     // 链接表名
+//        'work_order_status', // 工单状态
     ];
 
     static public $enums = [
         'status' => [
             '' => 0,
-            '待审核' => 1,
-            '已处理' => 2,
-        ],
-        'work_order_status' => [
-            '' => 0,
-            '创建' => 1,
-            '信息已填写' => 2,
-            '快递已处理' => 3,
-            '工单完成' => 4,
-        ],
-        'grad' => [
-            '' => 0,
-            '一般' => 1,
-            '重要' => 2,
-            '紧急' => 3,
-            '重要且紧急' => 4,
+            '宝时处理' => 1,
+            '货主处理' => 2,
+            '承运商处理' => 3,
         ],
+//        'work_order_status' => [
+//            '' => 0,
+//            '创建' => 1,
+//            '信息已填写' => 2,
+//            '快递已处理' => 3,
+//            '工单完成' => 4,
+//        ],
+//        'grad' => [
+//            '' => 0,
+//            '一般' => 1,
+//            '重要' => 2,
+//            '紧急' => 3,
+//            '重要且紧急' => 4,
+//        ],
     ];
 
     function __construct(array $attributes = [])
@@ -77,7 +79,7 @@ class WorkOrder extends Model
 
     public function setStatusAttribute($value)
     {
-        if (!$value) return ;
+        if (!$value) return;
         if (is_numeric($value)) {
             $this->attributes['status'] = $value;
         } else {
@@ -85,36 +87,54 @@ class WorkOrder extends Model
         }
     }
 
-    public function getWorkOrderStatusAttribute($value)
-    {
-        if (!$value) return '';
-        return self::$enums['work_order_status'][$value];
-    }
+//    public function getWorkOrderStatusAttribute($value)
+//    {
+//        if (!$value) return '';
+//        return self::$enums['work_order_status'][$value];
+//    }
+//
+//    public function setWorkOrderStatusAttribute($value)
+//    {
+//        if (!$value) return ;
+//        if (is_numeric($value)) {
+//            $this->attributes['work_order_status'] = $value;
+//        } else {
+//            $this->attributes['work_order_status'] = self::$enums['work_order_status'][$value];
+//        }
+//    }
+//
+//    public function getGradAttribute($value)
+//    {
+//        if (!$value) return '';
+//        return self::$enums['grad'][$value];
+//    }
+//
+//    public function setGradAttribute($value)
+//    {
+//        if (!$value) return ;
+//        if (is_numeric($value)) {
+//            $this->attributes['grad'] = $value;
+//        } else {
+//            $this->attributes['grad'] = self::$enums['grad'][$value];
+//        }
+//    }
 
-    public function setWorkOrderStatusAttribute($value)
+    // 关联订单
+    public function order(): BelongsTo
     {
-        if (!$value) return ;
-        if (is_numeric($value)) {
-            $this->attributes['work_order_status'] = $value;
-        } else {
-            $this->attributes['work_order_status'] = self::$enums['work_order_status'][$value];
-        }
+        return $this->belongsTo(Order::class);
     }
 
-    public function getGradAttribute($value)
+    // 关联货主
+    public function owner(): BelongsTo
     {
-        if (!$value) return '';
-        return self::$enums['grad'][$value];
+        return $this->belongsTo(Owner::class, 'owner_id');
     }
 
-    public function setGradAttribute($value)
+    // 关联承运商
+    public function logistic(): BelongsTo
     {
-        if (!$value) return ;
-        if (is_numeric($value)) {
-            $this->attributes['grad'] = $value;
-        } else {
-            $this->attributes['grad'] = self::$enums['grad'][$value];
-        }
+        return $this->belongsTo(Logistic::class);
     }
 
     // 创建人
@@ -129,18 +149,6 @@ class WorkOrder extends Model
         return $this->belongsTo(User::class, 'reviewer_id');
     }
 
-    // 关联订单
-    public function order(): BelongsTo
-    {
-        return $this->belongsTo(Order::class);
-    }
-
-    // 关联货主
-    public function owner(): BelongsTo
-    {
-        return $this->belongsTo(Owner::class, 'owner_id');
-    }
-
     // 工单类型
     public function type(): BelongsTo
     {
@@ -153,42 +161,39 @@ class WorkOrder extends Model
         return $this->belongsTo(OrderIssueType::class, 'order_issue_type_id');
     }
 
-    /** 对应问题件 */
+    // 对应问题件
     public function orderIssue(): BelongsTo
     {
         return $this->belongsTo(OrderIssue::class, 'order_id', 'order_id');
     }
 
     // 图片
-    public function image(): HasMany
+    public function images(): HasMany
     {
         return $this->hasMany(WorkOrderImage::class);
     }
 
-    // 外包装图片
-    public function packageImages(): HasMany
+    public function getPackageImagesAttribute()
     {
-        return $this->hasMany(WorkOrderImage::class)->where('type', 1);
+        return $this->images->where('type', 1);
     }
 
-    // 内物破损图片
-    public function commodityImages(): HasMany
+    public function getCommodityImagesAttribute()
     {
-        return $this->hasMany(WorkOrderImage::class)->where('type', 2);
+        return $this->images->where('type', 2);
     }
 
-    // 交易图片
-    public function dealImages(): HasMany
+    public function getDealImagesAttribute()
     {
-        return $this->hasMany(WorkOrderImage::class)->where('type', 3);
+        return $this->images->where('type', 3);
     }
 
-    // 退款图片
-    public function refundImages(): HasMany
+    public function getRefundImagesAttribute()
     {
-        return $this->hasMany(WorkOrderImage::class)->where('type', 4);
+        return $this->images->where('type', 4);
     }
 
+
     // 工单详情
     public function details(): HasMany
     {
@@ -201,16 +206,20 @@ class WorkOrder extends Model
         return $this->hasMany(WorkOrderCommodities::class);
     }
 
-    // 宝时处理日志
-    public function processLog(): HasOne
+    // 处理日志
+    public function processLogs(): HasMany
+    {
+        return $this->hasMany(WorkOrderProcessLog::class);
+    }
+
+    public function baoShiLog()
     {
-        return $this->hasOne(WorkOrderProcessLog::class)->where('type','1');
+        return $this->processLogs->where('type', 1);
     }
 
-    // 承运商处理日志
-    public function logisticLog(): HasOne
+    public function logisticLog()
     {
-        return $this->hasOne(WorkOrderProcessLog::class)->where('type','2');
+        return $this->processLogs->where('type', 2);
     }
 
     public function scopeFilter($query, $filters)
@@ -222,44 +231,32 @@ class WorkOrder extends Model
     /** 默认 with 参数 */
     public function scopeDefaultWith($query)
     {
-        $query->with(['type', 'owner', 'issueType', 'creator','details','commodities.commodity',
-            'processLog.creator',
-            'logisticLog.creator',
-            'packageImages.uploadFile',
-            'commodityImages.uploadFile',
-            'dealImages.uploadFile',
-            'refundImages.uploadFile',
+        $query->with(['type', 'owner', 'logistic', 'issueType', 'creator', 'details', 'commodities.commodity',
+            'processLogs.creator',
+            'images.uploadFile',
             'reviewer',
-            'order' => function ($query) {
-            /** @var Builder $query  */
-            $query->with('packages', 'logistic', 'owner');
-        }, 'orderIssue' => function ($query) {
-            /** @var Builder $query  */
-            $query->with(['issueType', 'logs' => function ($query) {
-                if (Gate::denies('订单管理-问题件-客户不可见')) {
-                    $query->with('user')->orderByDesc('created_at');
-                } else {
-                    $query->with('user')->where('tag', '=', 0)->orderByDesc('created_at');
-                }
+            'order.packages',
+            'orderIssue' => function ($query) {
+                /** @var Builder $query */
+                $query->with(['issueType', 'logs' => function ($query) {
+                    if (Gate::denies('订单管理-问题件-客户不可见')) {
+                        $query->with('user')->orderByDesc('created_at');
+                    } else {
+                        $query->with('user')->where('tag', '=', 0)->orderByDesc('created_at');
+                    }
+                }]);
             }]);
-        }]);
     }
 
     public function loadDefaultWith()
     {
-        $this->loadMissing(['owner','type', 'issueType', 'creator','details','commodities.commodity',
-            'processLog.creator',
-            'logisticLog.creator',
-            'packageImages.uploadFile',
-            'commodityImages.uploadFile',
-            'dealImages.uploadFile',
-            'refundImages.uploadFile',
+        $this->loadMissing(['type', 'owner', 'logistic', 'issueType', 'creator', 'details', 'commodities.commodity',
+            'baoShiLog.creator',
+            'images.uploadFile',
             'reviewer',
-            'order' => function ($query) {
-                /** @var Builder $query  */
-                $query->with('packages', 'logistic', 'owner');
-            }, 'orderIssue' => function ($query) {
-                /** @var Builder $query  */
+            'order.packages',
+            'orderIssue' => function ($query) {
+                /** @var Builder $query */
                 $query->with(['issueType', 'logs' => function ($query) {
                     if (Gate::denies('订单管理-问题件-客户不可见')) {
                         $query->with('user')->orderByDesc('created_at');
@@ -281,56 +278,22 @@ class WorkOrder extends Model
         NotificationService::SingleRegister($msg, $clientCode, "订单管理-问题件");
     }
 
-    public function addPackageImage($images)
-    {       // 外包装图
-        foreach ($images as $image) {
-            /** @var UploadedFile  $image */
-            $count = $this->packageImages()->count();
-            /** @var WorkOrderImage $workOrderImage */
-            $workOrderImage = $this->packageImages()->create(['type' => 0, 'amount' => ++$count]);
-            $workOrderImage->saveFile($image);
-        }
-        $this->loadMissing('packageImages');
-    }
-
-    public function addCommodityImage($images)
-    {       // 内物破损图
-        foreach ($images as $image) {
-            $count = $this->commodityImages()->count();
-            /** @var WorkOrderImage $workOrderImage */
-            $workOrderImage = $this->commodityImages()->create(['type' => 1, 'amount' => ++$count]);
-            $workOrderImage->saveFile($image);
-        }
-        $this->loadMissing('commodityImages');
-    }
-
-    public function addDealImage($images)
-    {       // 交易截图
-        foreach ($images as $image) {
-            $count = $this->dealImages()->count();
-            /** @var WorkOrderImage $workOrderImage */
-            $workOrderImage = $this->dealImages()->create(['type' => 2, 'amount' => ++$count]);
-            $workOrderImage->saveFile($image);
-        }
-        $this->loadMissing('dealImages');
-    }
-
-    public function addRefundImage($images)
-    {        // 退款截图
-        foreach ($images as $image) {
-            $count = $this->refundImages()->count();
-            /** @var WorkOrderImage $workOrderImage */
-            $workOrderImage = $this->refundImages()->create(['type' => 3, 'amount' => ++$count]);
-            $workOrderImage->saveFile($image);
-        }
-        $this->loadMissing('dealImages');
-    }
-
     public function saveWorkOrderDetail($params)
     {
-        $param  = (new WorkOrderDetail($params))->getAttributes();
+        $param = (new WorkOrderDetail($params))->getAttributes();
         $this->details()->create($param);
         $this->loadMissing('details');
     }
 
+    // 工单完结
+    public function end()
+    {
+        $this->update(['ststus'  => 4]);
+    }
+
+    public function changeStatus($status)
+    {
+        $this->status = $status;
+        $this->update();
+    }
 }

+ 5 - 1
app/WorkOrderCommodities.php

@@ -18,7 +18,11 @@ class WorkOrderCommodities extends Model
         'work_order_id',
         'commodity_id',
         'sku',
-        'amount',
+        'check_amount',     // 复核数量
+        'abnormal_amount',  // 异常数量
+        'amount',           // 订单数量
+        'abnormal_result',  // 异常结果
+        'process_result',   // 处理结果
     ];
 
     public function workOrder(): BelongsTo

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

@@ -0,0 +1,32 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class WorkOrdersAddColunmsLogisticId extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('work_orders', function (Blueprint $table) {
+            $table->integer('logistic_id')->index()->comment('承运商');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('work_orders', function (Blueprint $table) {
+            $table->dropColumn('logistic_id');
+        });
+    }
+}

+ 38 - 0
database/migrations/2021_10_26_132927_add_colunms_to_work_order_commodities.php

@@ -0,0 +1,38 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class AddColunmsToWorkOrderCommodities extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('work_order_commodities', function (Blueprint $table) {
+            $table->string('abnormal_result')->comment('异常结果');
+            $table->string('process_result')->comment('处理结果');
+            $table->integer('check_amount')->comment('核实结果');
+            $table->integer('abnormal_amount')->comment('异常结果');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('work_order_commodities', function (Blueprint $table) {
+            $table->dropColumn('abnormal_result');
+            $table->dropColumn('process_result');
+            $table->dropColumn('check_amount');
+            $table->dropColumn('abnormal_amount');
+        });
+    }
+}

+ 20 - 12
resources/views/order/index/_work_order_modal.blade.php

@@ -104,7 +104,6 @@
                     </div>
                 </div>
 
-
                 <hr v-if="'破损' === workOrder.orderIssueType">
                 <div class="form-group row" v-if="'破损' === workOrder.orderIssueType">
                     <label for="deal-image" class="col-sm-2 col-form-label text-right text-primary">交易截图</label>
@@ -133,24 +132,33 @@
                            class="col-sm-2 col-form-label text-right text-primary">破损sku信息</label>
                     <div class="col-sm-10">
                         <table class="table table-sm table-active table-grid-row">
-                            <tr class="text-center">
-                                <th>商品编码</th>
-                                <th>商品名称</th>
-                                <th>数量</th>
-                                <th>选中</th>
+                            <thead>
+                            <tr>
+                                <td class="text-center">快递单号</td>
+                                <td class="text-center">商品条码</td>
+                                <td class="text-center">商品名称</td>
+                                <td class="text-center">订单数量</td>
+                                <td class="text-center">异常数量</td>
+                                <td></td>
                             </tr>
-                            <tr v-for="(item,i) in workOrder.commodities" :key="i" class="text-center">
-                                <td><span v-text="item.sku"></span></td>
-                                <td><span v-text="item.name"></span></td>
+                            </thead>
+                            <tbody>
+                            <tr v-for="(commodity,i) in workOrder.commodities">
+                                <td><span v-text="commodity.logistic_number"></span></td>
+                                <td><span v-text="commodity.sku"></span></td>
+                                <td><span v-text="commodity.name"></span></td>
+                                <td><span v-text="commodity.amount"></span></td>
                                 <td>
-                                    <input type="number" class="form-control form-control-sm" v-model="item.amount">
+
+                                    <input type="number" class="form-control form-control-sm" v-model="commodity.abnormal_amount">
                                 </td>
                                 <td>
-                                    <button type="button" class="btn btn-sm btn-outline-danger"
-                                            @click="workOrder.commodities.splice(i,1)">删除
+                                    <button type="button" class="close" @click="workOrder.commodities.splice(i,1)">
+                                        <span aria-hidden="true">&times;</span>
                                     </button>
                                 </td>
                             </tr>
+                            </tbody>
                         </table>
                     </div>
                 </div>

+ 17 - 14
resources/views/order/index/delivering.blade.php

@@ -622,7 +622,7 @@
                 },
                 'workOrder.orderIssueType':function(newValue){
                     if (newValue === null) return;
-                    if (newValue === '破损'){
+                    if (['破损','快递丢件','错漏发','快递异常'].includes(newValue)){
                         this.fillWorkOrderCommodity();
                     }
                 },
@@ -1340,7 +1340,12 @@
                 },
                 setFormDataCommodities(formData){
                      this.workOrder.commodities.map(commodity=>{
-                         let item = {sku:commodity.sku,amount:commodity.amount};
+                         let item = {
+                             sku:commodity.sku,
+                             amount:commodity.amount,
+                             commodity_id:commodity['commodity_id'],
+                             abnormal_amount:commodity['abnormal_amount'],
+                         };
                          formData.append('commodities[]',JSON.stringify(item)) ;
                     });
                 },
@@ -1540,18 +1545,16 @@
                     });
                 },
                 fillWorkOrderCommodity(){
-                    const {commodities} = this;
-                    let orderNo = checkData[0];
-                    let orderCommodities = commodities[orderNo];
-                    this.workOrder.commodities = [];
-                    orderCommodities.forEach(item=>{
-                        this.workOrder.commodities.push({
-                            sku:item.sku,
-                            name:item['descr_c'],
-                            amount:item['qtyordered'],
-                            selected:false,
-                        });
-                    });
+                    let url = "{{route('order.commodity.getCommoditiesApi')}}";
+                    let data = {orderNo:checkData[0]};
+                    window.axios.post(url,data).then(res=>{
+                        if (res.data.success){
+                            this.workOrder.commodities = res.data.data;
+                        } else {
+
+                        }
+                    }).catch(err=>{
+                    })
                 },
                 pasteImage(event,imageArray){
                     for (let i = 0; i < event.clipboardData.items.length; i++) {

+ 2 - 2
resources/views/order/workOrder/_work_order_details.blade.php

@@ -33,7 +33,7 @@
                         <span v-text="item.sku"></span>
                         <span class="mr-2">商品名</span>
                         <span
-                            v-text="item.commodity ? item.commodity.name : ''"></span>
+                            v-text="item.commodity ?.name || ''"></span>
                         <span class="mr-2">数量</span>
                         <span v-text="item.amount"></span>
                     </div>
@@ -151,7 +151,7 @@
                     <div>
                         <span class="mr-3">商品名称:</span>
                         <span class="text-truncate"
-                              v-text="commodity.commodity ? commodity.commodity.name : '' "></span>
+                              v-text="commodity.commodity ?.name || '' "></span>
                     </div>
                     <div>
                         <span class="mr-3">数量:</span>

+ 105 - 279
resources/views/order/workOrder/index.blade.php

@@ -38,17 +38,17 @@
 
                 <div>
                     <table class="table table-sm table-striped table-hover table-bordered td-min-width-80 " id="table">
-                        <tbody class="">
+                        <tbody>
                         <template v-for="(item,i) in workOrders">
                             <tr @click="selectTr===i+1?selectTr=0:selectTr=i+1" :class="selectTr===i+1?'focusing' : ''">
                                 <td>
                                     <label><input type="checkbox" :value="item.id"></label>
                                 </td>
-                                <td class="text-center">
-                                    <span v-text="i+1"></span>
+                                <td>
+                                    <span v-text="item.id"></span>
                                     <span v-show="item.is_issue_order" class="badge badge-primary">问题件</span>
                                 </td>
-                                <td class="text-left">
+                                <td>
                                     @can('订单管理-订单问题件生成')
                                         <button class="btn btn-sm btn-outline-primary"
                                                 v-show="!item.is_issue_order "
@@ -80,162 +80,7 @@
                                         </button>
                                     @endcan
                                 </td>
-                                <td class="text-center">
-                                    @can('订单管理-工单处理-宝时编辑')
-                                        <select class="form-control form-control-sm"
-                                                :value="item['work_order_status']"
-                                                :disabled="item['work_order_status'] === '工单完成'"
-                                                @change="updateWorkOrderStatus(item,$event)">
-                                            <option value="">无</option>
-                                            <option v-for="status in workOrderStatus"
-                                                    :value="status"
-                                                    v-text="status"></option>
-                                        </select>
-                                    @elsecan('订单管理-工单处理-承运商编辑')
-                                        <select class="form-control form-control-sm"
-                                                v-if="['拦截','信息更改'].includes(item['issue_type']['name'])"
-                                                :value="item['work_order_status']"
-                                                @change="logisticUpdateWorkOrderStatus(item,$event)">
-                                            <option v-for="status in ['创建','快递已处理','工单完成']"
-                                                    :disabled="item['work_order_status'] === '工单完成'"
-                                                    :value="status"
-                                                    v-text="status"></option>
-                                        </select>
-                                        <select class="form-control form-control-sm"
-                                                v-else-if="'快递丢件' === item['issue_type']['name']"
-                                                :value="item['work_order_status']"
-                                                @change="logisticUpdateWorkOrderStatus(item,$event)">
-                                            <option v-for="status in ['创建','信息已填充','快递已处理','工单完成']"
-                                                    :disabled="item['work_order_status'] === '工单完成'"
-                                                    :value="status"
-                                                    v-text="status"></option>
-                                        </select>
-                                        <select class="form-control form-control-sm"
-                                                v-else-if="'破损' === item['issue_type']['name']"
-                                                :value="item['work_order_status']"
-                                                @change="logisticUpdateWorkOrderStatus(item,$event)">
-                                            <option v-for="status in ['创建','信息已填充','快递已处理','工单完成']"
-                                                    :disabled="item['work_order_status'] === '工单完成'"
-                                                    :value="status"
-                                                    v-text="status"></option>
-                                        </select>
-                                    @else
-                                        <span v-text="item.work_order_status"></span>
-                                    @endcan
-                                </td>
-                                <td class="text-center" v-text="item.status"></td>
-                                <td class="text-center" v-text="item.owner ?.name "></td>
-                                <td class="text-center" v-text="item.order ?.client_code "></td>
-                                <td v-text="item.order ?.['logistic'] ?.name "></td>
-                                <td class="text-center">
-                                    <div v-if="item.order">
-                                        <p v-if="item.order.packages && item.order.packages.length === 1"
-                                           v-text="item.order.packages[0].logistic_number">
-                                        </p>
-                                        <div v-else-if="item.order.packages && item.order.packages.length > 0">
-                                            <div v-if="selectOrder === item.order.id">
-                                                <p v-for="(data) in item.order.packages"
-                                                   v-text="data.logistic_number"></p>
-                                            </div>
-                                            <div v-else>
-                                                <p v-text="item.order.packages[0].logistic_number"></p>
-                                            </div>
-                                            <button class="btn btn-sm btn-outline-primary"
-                                                    v-show="selectOrder === null"
-                                                    @click="selectOrder = item.order.id">展开
-                                            </button>
-                                            <button class="btn btn-sm btn-outline-primary"
-                                                    v-show="selectOrder === item.order.id"
-                                                    @click="selectOrder = null">收起
-                                            </button>
-                                        </div>
-                                    </div>
-                                </td>
-                                <td>
-                                    {{--  承运商处理日志   --}}
-                                    <div v-if="item['logistic_log']" class="alert alert-light">
-                                        <div>
-                                            <span class="text-muted">承运商处理</span>
-                                            <button class="btn btn-sm btn-outline-info float-right"
-                                                    v-show="selectLogisticLogId === item['logistic_log']['id']"
-                                                    @click="selectLogisticLogId = null">隐藏
-                                            </button>
-                                            <button class="btn btn-sm btn-outline-info float-right"
-                                                    v-show="selectLogisticLogId !== item['logistic_log']['id']"
-                                                    @click="selectLogisticLogId = item['logistic_log']['id']">显示
-                                            </button>
-                                        </div>
-                                        <transition name="fade">
-                                            <div v-show="selectLogisticLogId === item['logistic_log']['id']">
-                                                <div>
-                                                    <span class="mr-2">是否赔偿:</span>
-                                                    <span class="text-truncate"
-                                                          v-text="item['logistic_log']['is_indemnity']"></span>
-                                                </div>
-                                                <div v-if="item['logistic_log']['is_indemnity'] === '是'">
-                                                    <span class="mr-2">赔偿金额:</span>
-                                                    <span class="text-truncate"
-                                                          v-text="item['logistic_log']['indemnity']"></span>
-                                                </div>
-                                                <div v-if="item['logistic_log']['is_indemnity'] === '否'">
-                                                    <span class="mr-2">不赔偿理由:</span>
-                                                    <span v-text="item['logistic_log']['remark']"></span>
-                                                </div>
-                                            </div>
-                                        </transition>
-                                    </div>
-                                    <div v-if="item['process_log']" class="alert alert-light">
-                                        <div>
-                                            <span class="text-muted">宝时处理</span>
-                                            <button class="btn btn-sm btn-outline-info float-right"
-                                                    v-if="selectBaoShiLogId === item['process_log']['id']"
-                                                    @click="selectBaoShiLogId = null">隐藏
-                                            </button>
-                                            <button class="btn btn-sm btn-outline-info float-right"
-                                                    v-if="selectBaoShiLogId !== item['process_log']['id']"
-                                                    @click="selectBaoShiLogId = item['process_log']['id']">显示
-                                            </button>
-                                        </div>
-                                        <transition name="fade">
-                                            <div v-show="selectBaoShiLogId === item['process_log']['id']">
-                                                <div>
-                                                    <span class="text-muted">是否赔偿: </span>
-                                                    <span v-text="item['process_log']['is_indemnity']"
-                                                          class="ml-2 text-truncate"></span></div>
-                                                <div v-if="item['process_log']['is_indemnity'] === '是'">
-                                                    <span class="text-muted">赔偿方:</span>
-                                                    <span class="text-truncate"
-                                                          v-text="item['process_log']['indemnitor']"></span>
-                                                </div>
-                                                <div v-if="item['process_log']['is_indemnity'] === '是'">
-                                                    <span class="text-muted">赔偿金额:</span>
-                                                    <span class="ml-2 text-truncate"
-                                                          v-text="item['process_log']['indemnity']"></span>
-                                                </div>
-                                                <div v-if="item['process_log']['is_indemnity'] === '否'">
-                                                    <span class="text-muted">不赔偿理由:</span>
-                                                    <span class="ml-2" v-text="item['process_log']['remark']"></span>
-                                                </div>
-                                            </div>
-                                        </transition>
-                                    </div>
-                                </td>
                                 <td>
-                                    {{-- 工单详情 --}}
-                                    @can('订单管理-工单处理-宝时编辑')
-                                        @include('order.workOrder._work_order_details')
-                                    @elsecan('订单管理-工单处理-承运商编辑')
-                                        <template v-if="item.status === '已处理' && item.is_issue_order">
-                                            @include('order.workOrder._work_order_details')
-                                        </template>
-                                        <template v-else-if="item['issue_type'] && item['issue_type'].name === '破损'">
-                                            @include('order.workOrder._work_order_details')
-                                        </template>
-                                    @elsecan('订单管理-工单处理-货主编辑')
-                                        @include('order.workOrder._work_order_details')
-                                    @endcan
-                                </td>
-                                <td class="text-center">
                                     @can('订单管理-工单处理-审核')
                                         <select class="form-control form-control-sm"
                                                 :disabled="item.review_at || item.is_issue_order"
@@ -243,101 +88,56 @@
                                                 @change="changeIssueType(item,$event)">
                                             <option value="0"></option>
                                             <option v-for="type in orderIssueTypes"
-                                                :value="type.name"
-                                                v-text="type.value">
+                                                    :value="type.name"
+                                                    v-text="type.value">
                                             </option>
                                         </select>
                                     @else
                                         <span v-text="item['issue_type'] ?.name"></span>
                                     @endcan
                                 </td>
-                                <td class="text-center">
-                                    <span v-text="item.remark"></span>
+                                <td>
+                                    <span v-text="item.created_at"></span>
                                 </td>
-                                <td class="text-center">
-                                    <span v-text="item.result_explain"></span>
+                                <td>
+                                    <span v-text="item.status"></span>
                                 </td>
-                                <td class="text-center">
-                                    <span v-text="item.issue_order_type"></span>
+                                <td>
+                                    <span v-text="item?.owner?.name || ''"></span>
                                 </td>
-                                <td class="text-center p-0">
-                                    <template v-if="item.issue_logs">
-                                        <template v-if="item.issue_logs.length === 1">
-                                            <table class="table table-sm m-0">
-                                                <tr class="table table-sm">
-                                                    <td v-text="item.issue_logs[0].content"></td>
-                                                    <td v-text="item.issue_logs[0].username"></td>
-                                                    <td>@{{ item.issue_logs[0].created_at | dataTime }}</td>
-                                                </tr>
-                                            </table>
-                                        </template>
-                                        <template v-else-if="item.issue_logs.length > 1">
-                                            <transition name="fade">
-                                                <table class="table table-sm m-0" v-if="selectOrderIssue === item.id">
-                                                    <tr v-for="log in item.issue_logs">
-                                                        <td v-text="log.content"></td>
-                                                        <td v-text="log.username"></td>
-                                                        <td>@{{ log.created_at | dataTime }}</td>
-                                                    </tr>
-                                                </table>
-                                            </transition>
-                                            <transition name="fade">
-                                                <table class="table table-sm m-0" v-if="selectOrderIssue !== item.id">
-                                                    <tr>
-                                                        <td v-text="item.issue_logs[0].content"></td>
-                                                        <td v-text="item.issue_logs[0].username"></td>
-                                                        <td>@{{ item.issue_logs[0].created_at | dataTime }}</td>
-                                                    </tr>
-                                                </table>
-                                            </transition>
-                                            <button class="btn btn-sm btn-outline-primary"
-                                                    v-show="selectOrderIssue !== item.id"
-                                                    @click="selectOrderIssue = item.id">展开
-                                            </button>
-                                            <button class="btn btn-sm btn-outline-primary"
-                                                    v-show="selectOrderIssue === item.id"
-                                                    @click="selectOrderIssue = null">收起
-                                            </button>
-                                        </template>
-                                    </template>
+                                <td>
+                                    <span v-text="item?.order?.client_no || ''"></span>
                                 </td>
-                                <td class="text-center">
-                                    <div v-if="item.order && item.order.packages">
-                                        <template v-for="package in item.order.packages">
-                                            <template
-                                                v-if="package.transfer_status && package.transfer_status.length > 0">
-                                                <div v-if="selectOrderPackage === package.id">
-                                                    <template v-for="transfer in package.transfer_status">
-                                                        <p v-text="transfer['accept_time']+':'+transfer['accept_address']"></p>
-                                                    </template>
-                                                </div>
-                                                <div v-else v-text="package.transfer_status[0]['accept_time']+':'+package.transfer_status[0]['accept_address']">
-                                                </div>
-                                                <button class="btn btn-sm btn-outline-primary"
-                                                        v-if="selectOrderPackage !== package.id"
-                                                        @click="selectOrderPackage = package.id">展开
-                                                </button>
-                                                <button class="btn btn-sm btn-outline-primary" v-else
-                                                        @click="selectOrderPackage = null">收起
-                                                </button>
-                                            </template>
-                                        </template>
+                                <td>
+                                    <div v-for="data in (item?.order?.packages || [])">
+                                        <span v-text="data.logistic_number"></span>
+                                    </div>
+                                </td>
+                                <td>
+                                    <span v-text="item?.logistic?.name || ''"></span>
+                                </td>
+                                <td>
+                                    工单处理结果
+                                </td>
+                                <td>
+                                    <span v-text="item?.creator?.name || ''"></span>
+                                </td>
+                                <td>
+                                    <span v-text="item.remark"></span>
+                                </td>
+                                <td>
+                                    @can('订单管理-工单处理-删除')
+                                        <div class="alert alert-light col-2 d-inline-block p-0">
+                                            <button class="btn btn-sm btn-outline-danger">删除</button>
+                                        </div>
+                                    @endcan
+                                    <div  class="col-6 d-inline-block p-0">
+                                        @include('order.workOrder._work_order_details')
+                                    </div>
+                                    <div @can('订单管理-工单处理-删除') class="col-4 p-0 d-inline-block" @else class="col-1 d-inline-block p-0" @endcan>
+                                        处理日志
                                     </div>
                                 </td>
-                                <td class="text-center" v-text="item.creator ?.name || ''"></td>
-                                <td class="text-center" v-text="item.created_at"></td>
-                                <td v-text="item.reviewer ?.name || ''"></td>
-                                <td v-text="item.review_at"></td>
-                                @can('订单管理-工单处理-删除')
-                                    <td>
-                                        <button class="btn btn-sm btn-outline-danger"
-                                                @click="destroy(item,i)">
-                                            删除
-                                        </button>
-                                    </td>
-
-                                @endcan
-                            </tr>
                         </template>
                         </tbody>
                     </table>
@@ -471,25 +271,32 @@
                 });
                 this.form.init();
                 let column = [
-                    {name: 'no', value: '序号', neglect: true},
+                    {name: 'id', value: '工单号', neglect: true},
                     {name: 'operation', value: '操作', neglect: true},
-                    {name: 'work_order_status', value: '工单状态', neglect: true},
-                    {name: 'status', value: '状态', neglect: true},
+                    {name: 'work_type', value: '工单类型', neglect: true},
+                    {name: 'created_at', value: '创建时间', neglect: true},
+                    {name: 'status', value: '当前处理人', neglect: true},
                     {name: 'owner', value: '货主', neglect: true},
-                    {name: 'client_code', value: '订单号', neglect: true},
-                    {name: 'logisticName', value: '承运商', neglect: true},
-                    {name: 'logisticNumber', value: '快递单号'},
-                    {name: 'processLog', value: '处理日志'},
-                    {name: 'workOrderDetails', value: '工单详情'},
-                    {name: 'issueType', value: '问题件类型'},
-                    {name: 'workOrderInfo', value: '问题描述', neglect: true},
-                    {name: 'result_explain', value: '情况说明', neglect: true},
-                    {name: 'orderIssueType', value: '问题件类别'},
+                    {name: 'order_code', value: '订单号', neglect: true},
+                    {name: 'logistic_numbers', value: '快递单号'},
+                    {name: 'logistic', value: '承运商'},
+                    {name: 'process_result', value: '处理结果'},
+                    {name: 'creator', value: '创建人'},
+                    {name: 'remark', value: '备注'},
                     {
-                        name: 'orderIssueProcessLogs', type: 'multi', title: "处理结果", rows: [
-                            {value: "内容", col: "4"},
-                            {value: "操作人", col: "4"},
-                            {value: "时间", col: "4"},
+                        name: 'ab_operation', type: 'multi', title: "其他操作", rows: [
+                                @can('订单管理-工单处理-删除')
+                            {
+                                value: "删除", col: "1"
+                            },
+                            {value: "查看资料", col: "6"},
+                            {value: "处理日志", col: "5"},
+                                @else
+                            {
+                                value: "查看资料", col: "6"
+                            },
+                            {value: "处理日志", col: "6"},
+                            @endcan
                         ], neglect: true
                     },
                     {name: 'Info', value: '物流跟踪信息', neglect: true},
@@ -497,8 +304,10 @@
                     {name: 'submit_at', value: '提交时间', neglect: true},
                     {name: 'reviewer', value: '审核人', neglect: true},
                     {name: 'review_at', value: '审核时间', neglect: true},
-                    @can('订单管理-工单处理-删除')
-                    {name: 'delete_operation', value: '其他操作', neglect: true}
+                        @can('订单管理-工单处理-删除')
+                    {
+                        name: 'delete_operation', value: '其他操作', neglect: true
+                    }
                     @endcan
                 ];
                 new Header({
@@ -526,7 +335,24 @@
                 },
             },
             methods: {
+                filterItem(items, name, value) {
+                    return items.filter(item => {
+                        return item[name].toString() === value.toString();
+                    })
+                },
+                groupImages(workOrder) {
+                    if (!workOrder.images) return;
+                    workOrder.package_images = this.filterItem(workOrder.images, 'type', 1);
+                    workOrder.commodity_images = this.filterItem(workOrder.images, 'type', 2);
+                    workOrder.deal_images = this.filterItem(workOrder.images, 'type', 3);
+                    workOrder.refund_images = this.filterItem(workOrder.images, 'type', 4);
+                },
+                groupLogs(workOrder) {
+                    // workOrder.package_images = this.filterItem(workOrder.images,'type',1);
+                    // workOrder.commodity_images = this.filterItem(workOrder.images,'type',2);
+                },
                 sortOrder(workOrder) {
+                    this.groupImages(workOrder);
                     if (workOrder['order_issue']) {
                         workOrder.result_explain = workOrder['order_issue'].result_explain;
                         if (workOrder['order_issue']['issue_type']) {
@@ -544,7 +370,7 @@
                 mapLogs(logs) {
                     return logs.map(item => {
                         return {
-                            username: item.user ?.name || '',
+                            username: item.user?.name || '',
                             content: item.content,
                             created_at: item.created_at
                         };
@@ -636,7 +462,7 @@
                 getExportText(item) {
                     if (!item.order || !item.order.packages) return '';
                     let message = '';
-                    let issue_type = item['issue_type'] ?.name || '';
+                    let issue_type = item['issue_type']?.name || '';
                     switch (issue_type) {
                         case '拦截':
                             message = this.interceptMessage(item);
@@ -653,14 +479,14 @@
                 interceptMessage(item) {
                     let message = '';
                     let order = item.order;
-                    let order_packages = item.order ?.packages || [];
-                    let logistic_code = item.order ?.['logistic'] ?.code || ''; // 承运商编码
-                    let logistic_name = item.order ?.['logistic'] ?.name || ''; // 承运商名称
+                    let order_packages = item.order?.packages || [];
+                    let logistic_code = item.order ?.['logistic']?.code || ''; // 承运商编码
+                    let logistic_name = item.order ?.['logistic']?.name || ''; // 承运商名称
 
-                    let {consignee_name,consignee_phone,address} = order;
+                    let {consignee_name, consignee_phone, address} = order;
                     let order_adder = `${consignee_name}  ${consignee_phone}  ${address}`;
 
-                    order_packages.forEach(item=>{
+                    order_packages.forEach(item => {
                         let logistic_number = item.logistic_number;
                         if (logistic_code.includes('SF')) {
                             message += `${logistic_number}\n`;
@@ -674,11 +500,11 @@
                 },
                 modificationMessage(item) {
                     let message = '';
-                    let {remark,order} = item;
-                    let order_packages = item.order ?.packages || [];
-                    let logistic_code = item.order ?.['logistic'] ?.code || '';
+                    let {remark, order} = item;
+                    let order_packages = item.order?.packages || [];
+                    let logistic_code = item.order ?.['logistic']?.code || '';
 
-                    const {consignee_name,consignee_phone,province,city,district,address} = order;
+                    const {consignee_name, consignee_phone, province, city, district, address} = order;
                     let adder = `${consignee_name}  ${consignee_phone}  ${province}  ${city}  ${district}  ${address}`;
 
                     order_packages.forEach(node => {
@@ -694,9 +520,9 @@
                 getMessage(item) {
                     let message = '';
                     if (!item.order.packages) return message;
-                    let {order,remark} = item.order;
+                    let {order, remark} = item.order;
                     console.log(order);
-                    let {consignee_name,consignee_phone,province,city,district,address} = order;
+                    let {consignee_name, consignee_phone, province, city, district, address} = order;
                     let adder = `${consignee_name}  ${consignee_phone}  ${province}  ${city}  ${district}  ${address}`;
                     order.packages.forEach(p => {
                         message += `${p.logistic_number}  ${adder}  ——描述 ${remark}\n`;
@@ -839,7 +665,7 @@
                     this.clearWorkOrder(item, index);
                     $("#fill-loss-work-order-modal").modal('show');
                 },
-                clearWorkOrder(item = null ,index =null){
+                clearWorkOrder(item = null, index = null) {
                     this.workOrder.id = item ? item.id : null;
                     this.workOrder.index = index ? index : null;
                     this.workOrder.reissue_logistic_number = null; // 补发单号
@@ -998,7 +824,7 @@
                     }
                     return true;
                 },
-                logisticUpdateWorkOrderStatus(item,e){
+                logisticUpdateWorkOrderStatus(item, e) {
                     let url = "{{route('workOrder.logisticUpdateStatusApi')}}";
                     let data = {id: item.id, work_order_status: e.target.value};
                     window.tempTip.waitingTip('处理中......');
@@ -1016,17 +842,17 @@
                         window.tempTip.show('修饰异常:' + err);
                     });
                 },
-                pasteImage(event,imageArray){
+                pasteImage(event, imageArray) {
                     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'){
+                        if (item.kind === 'file') {
                             let blob = item.getAsFile();
                             let src = null;
                             this.blobToBase64(blob).then(res => {
-                                src  = res;
-                                imageArray.push({src:src,file:blob});
+                                src = res;
+                                imageArray.push({src: src, file: blob});
                             });
                         }
                     }