浏览代码

Merge branch 'master' of ssh://47.103.131.176:10022/var/git/bswas

zhouzhendong 4 年之前
父节点
当前提交
6de242a5e4

+ 7 - 1
app/Filters/WorkOrderFilters.php

@@ -60,6 +60,7 @@ class WorkOrderFilters
         'user_owner_group_id',
         'user_work_group_id',
         'rejecting_status',
+        'custom_rejected_status',
     ];
     protected $array_filter;
     protected $params = [];
@@ -339,7 +340,7 @@ class WorkOrderFilters
 
     public function order_issue_type($order_issue_type)
     {
-        $this->queryBuilder->where('order_issue_type_id', $order_issue_type);
+        $this->searchWay($this->queryBuilder,$order_issue_type,'order_issue_type_id');
     }
 
     // 快递单号
@@ -490,4 +491,9 @@ class WorkOrderFilters
     {
         $this->getOrderDetailQuery()->where('rejecting_status',$rejectingStatus);
     }
+
+    public function custom_rejected_status($custom_rejected_status)
+    {
+        $this->queryBuilder->where('custom_rejected_status',$custom_rejected_status);
+    }
 }

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

@@ -78,7 +78,7 @@ class OrderIssueProcessLogController extends Controller
      * @param Request $request
      * @return array
      */
-    public function batchStoreApi(Request $request)
+    public function batchStoreApi(Request $request): array
     {
         if (!Gate::allows('订单管理-问题件-编辑')) {
             return ['success' => false, 'fail_info' => '没有对应的权限'];

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

@@ -8,6 +8,7 @@ use App\Components\ErrorPush;
 use App\DeliveryAppointment;
 use App\MaterialBox;
 use App\MaterialBoxModel;
+use App\OracleDOCASNHeader;
 use App\Order;
 use App\OrderDetail;
 use App\OrderIssue;
@@ -69,5 +70,12 @@ class TestController extends Controller
             $user->owners()->sync($owners);
         }
     }
+
+    public function test123()
+    {
+        $codes = ['OCGBS202202160032'];
+        $items = OracleDOCASNHeader::query()->select('asnNo')->whereIn('ASNReference1',$codes)->get();
+        dd($items);
+    }
 }
 

+ 40 - 8
app/Http/Controllers/WorkOrderController.php

@@ -279,17 +279,17 @@ class WorkOrderController extends Controller
     {
         $json = [];
         $row = [
-            '工单类型', '当前进度', '客户', '店铺名称', '客户订单号','承运人', '快递单号', '创建时间', '当前处理人', '创建人', '情况说明', '退回单号', '退回商品', '退回商品名称', '退回商品数量', '是否正品', '操作类型', '操作人', '内容'
+            '工单类型', '当前进度', '客户', '店铺名称', '客户订单号', '承运人', '快递单号', '创建时间', '当前处理人', '创建人', '情况说明', '退回单号', '退回商品', '退回商品名称', '退回商品数量', '是否正品', '操作类型', '操作人', '内容'
         ];
         $workOrders->each(function ($item) use (&$json) {
             $logistic_numbers = $item->order->packages->implode('logistic_number', ",\r\n");
-            $logistic_numbers_return = $item->orderIssueRejectedBills->implode('logistic_number_return',",\r\n");
+            $logistic_numbers_return = $item->orderIssueRejectedBills->implode('logistic_number_return', ",\r\n");
             $rejected_item_name = '';
             $rejected_item_sku = '';
             $rejected_item_label = '';
             $rejected_item_amount = '';
             $item->orderIssueRejectedBills->each(function ($item) use (&$rejected_item_name, &$rejected_item_sku, &$rejected_item_label, &$rejected_item_amount) {
-                if($item->rejectedBill)
+                if ($item->rejectedBill)
                     $item->rejectedBill->items->each(function ($item) use (&$rejected_item_name, &$rejected_item_sku, &$rejected_item_label, &$rejected_item_amount) {
                         $rejected_item_name = $rejected_item_name . $item->name_goods . ",\r\n";
                         $rejected_item_sku = $rejected_item_sku . $item->barcode_goods . ",\r\n";
@@ -304,11 +304,11 @@ class WorkOrderController extends Controller
             $work_order_details = $item->details->filter(function ($detail) use ($item) {
                 return $detail->order_issue_type_id == $item->order_issue_type_id;
             });
-            if(count($work_order_details) > 0){
-                $work_order_details->first()->processLogs->each(function ($log) use (&$work_order_process_logs_type,&$work_order_process_logs_user,&$work_order_process_logs) {
-                    $work_order_process_logs_type .= $log->type. ",\r\n";
-                    $work_order_process_logs_user .= ($log->user->name ?? ''). ",\r\n";
-                    $work_order_process_logs .= $log->content. ",\r\n";
+            if (count($work_order_details) > 0) {
+                $work_order_details->first()->processLogs->each(function ($log) use (&$work_order_process_logs_type, &$work_order_process_logs_user, &$work_order_process_logs) {
+                    $work_order_process_logs_type .= $log->type . ",\r\n";
+                    $work_order_process_logs_user .= ($log->user->name ?? '') . ",\r\n";
+                    $work_order_process_logs .= $log->content . ",\r\n";
                 });
             }
 
@@ -336,4 +336,36 @@ class WorkOrderController extends Controller
         });
         return Export::make($row, $json, "工单");
     }
+
+    public function customRejectedStatusApi(Request $request): array
+    {
+        $result = $this->service->customRejectedStatus($request->input('ids'), $request->input('rejectedStatus'));
+        if ($result > 0) {
+            return ['success' => true,];
+        }
+        return ['success' => false, 'message' => '操作异常请稍后重试'];
+
+    }
+
+    public function batchOthersApi(Request $request): array
+    {
+        if (Gate::denies('订单管理-工单处理-宝时编辑')) {
+            return ['success' => false, 'message' => '没有对应权限'];
+        }
+        if (!$request->has(['ids'])) {
+            return ['success' => false, 'message' => '参数异常'];
+        } else if (!$request->hasAny(['logistic_express_remission', 'bao_shi_express_remission', 'userWorkGroupIds'])) {
+            return ['success' => false, 'message' => '参数异常'];
+        }
+        $query = WorkOrder::query()->whereIn('id', $request->input('ids', []));
+        $query->update(array_filter($request->only(['logistic_express_remission', 'bao_shi_express_remission']), function ($item) {
+            return $item;
+        }));
+        if ($request->has(['userWorkGroupIds'])) {
+            $query->get()->each(function ($item) use ($request) {
+                $item->userWorkGroups()->attach($request->input('userWorkGroupIds', []));
+            });
+        }
+        return ['success' => true];
+    }
 }

+ 14 - 1
app/Http/Controllers/WorkOrderProcessLogController.php

@@ -126,7 +126,20 @@ class WorkOrderProcessLogController extends Controller
         if (Gate::denies('订单管理-工单处理-处理日志删除')) {
             return ['success' => false, 'message' => '没有对应的权限'];
         }
-        WorkOrderProcessLog::query()->where('id',$request->input('id'))->delete();
+        WorkOrderProcessLog::query()->where('id', $request->input('id'))->delete();
+        return ['success' => true];
+    }
+
+
+    public function tagApi(Request $request): array
+    {
+        if (Gate::denies('订单管理-工单处理-宝时编辑')) {
+            return ['success' => false, 'message' => '没有对应的权限'];
+        }
+        if (!$request->has('id')) {
+            return ['success' => false, 'message' => '参数异常'];
+        }
+        WorkOrderProcessLog::query()->where('id', $request->input('id'))->update(['tag' => 1]);
         return ['success' => true];
     }
 

+ 17 - 5
app/Services/OrderRejectingStatusService.php

@@ -7,8 +7,11 @@ use App\CommodityBarcode;
 use App\Order;
 use App\OrderDetail;
 use App\OrderIssueRejectedBill;
+use App\OrderIssueType;
 use App\RejectedBill;
 use App\RejectedBillItem;
+use App\WorkOrder;
+use App\WorkOrderDetail;
 
 class OrderRejectingStatusService
 {
@@ -29,21 +32,30 @@ class OrderRejectingStatusService
         $rejecting_status = $this->getOrderRejectingStatus($order);
         $query = OrderDetail::query()->where('order_id', $order->id);
         $order_detail = $query->first();
-        $is_new_rejecting = in_array($rejecting_status,['无','未退回']) ? '无':'有';
+        $is_new_rejecting = in_array($rejecting_status, ['无', '未退回']) ? '无' : '有';
         if (!$order_detail) {
             try {
                 OrderDetail::query()->create(
                     ['order_id' => $order->id, 'is_new_rejecting' => $is_new_rejecting, 'rejecting_status' => $rejecting_status]
                 );
             } catch (\Exception $e) {
-                LogService::log(__CLASS__,__METHOD__,$e->getMessage());
+                LogService::log(__CLASS__, __METHOD__, $e->getMessage());
             }
             return;
         }
         if (in_array($order_detail->is_new_rejecting, ['有', '已处理']) && $rejecting_status != '无') {
             $query->update(['rejecting_status' => $rejecting_status]);
         } else {
-            $query->update(['rejecting_status' => $rejecting_status, 'is_new_rejecting' =>$is_new_rejecting]);
+            $query->update(['rejecting_status' => $rejecting_status, 'is_new_rejecting' => $is_new_rejecting]);
+        }
+
+        if ($rejecting_status == '全部完成') {
+            $orderIssueTypeQuery = OrderIssueType::query()->where('name','拦截');
+            $workOrder = WorkOrder::query()->where('order_id',$order->id)
+                ->whereIn('order_issue_type_id',$orderIssueTypeQuery)->where('status','!=',6)->first();
+            if($workOrder){
+                app(WorkOrderInterceptService::class)->autoReviewIntercept($workOrder);
+            }
         }
     }
 
@@ -56,8 +68,8 @@ class OrderRejectingStatusService
 
     private function getRejectedBillItems(Order $order)
     {
-        $orderIssueRejectedBills = OrderIssueRejectedBill::query()->select('logistic_number_return')->where('order_id', $order->id)->where('logistic_number_return','!=','')->get();
-        $logistic_number_return = $orderIssueRejectedBills->map(function($item){
+        $orderIssueRejectedBills = OrderIssueRejectedBill::query()->select('logistic_number_return')->where('order_id', $order->id)->where('logistic_number_return', '!=', '')->get();
+        $logistic_number_return = $orderIssueRejectedBills->map(function ($item) {
             return $item->logistic_number_return;
         })->toArray();
         $query = RejectedBill::query()->select('id')->whereIn('logistic_number_return', $logistic_number_return);

+ 23 - 8
app/Services/WorkOrderExpressAbnormalService.php

@@ -156,6 +156,12 @@ class WorkOrderExpressAbnormalService extends WorkOrderService
             'type' => '处理',
         ]);
         $this->logService->createLog($detail, '处理', $process_progress . '-承运商处理');
+
+        if($process_progress == '已签收'){
+            $this->review($detail,'已签收');
+            $this->endOrderIssueAndSyncProcessLogs($detail);
+            $this->logService->createLog($detail, '终审', $process_progress . '-自动审核');
+        }
     }
 
     /**
@@ -168,6 +174,22 @@ class WorkOrderExpressAbnormalService extends WorkOrderService
         $this->detailService->updateDetail($detail, $params);
         $process_progress= $params['process_progress'];
 
+        $this->review($detail, $process_progress);
+        $this->endOrderIssueAndSyncProcessLogs($detail);
+        $this->logService->createLog($detail, '终审', $process_progress . '-宝时终审');
+    }
+
+    public function autoReview(WorkOrderDetail $detail, $process_progress,$endContext = null)
+    {
+
+    }
+
+    /**
+     * @param WorkOrderDetail $detail
+     * @param $process_progress
+     */
+    public function review(WorkOrderDetail $detail, $process_progress): void
+    {
         $detail->update([
             'status' => WorkOrder::$TO_BO_OWNER_END_STATUS,
             'process_progress' => $process_progress,
@@ -186,17 +208,10 @@ class WorkOrderExpressAbnormalService extends WorkOrderService
             'work_order_id' => $detail->work_order_id,
             'work_order_detail_id' => $detail->id,
             'user_id' => Auth::id(),
-            'content' => $process_progress.'-完结',
+            'content' => $process_progress . '-完结',
             'status' => '未同步',
             'type' => '结束',
         ]);
-        $this->endOrderIssueAndSyncProcessLogs($detail);
-        $this->logService->createLog($detail, '终审', $process_progress . '-宝时终审');
-    }
-
-    public function autoReview(WorkOrderDetail $detail, $process_progress,$endContext = null)
-    {
-
     }
 
 }

+ 3 - 4
app/Services/WorkOrderInterceptService.php

@@ -148,9 +148,8 @@ class WorkOrderInterceptService extends WorkOrderService
             'type' => '处理',
         ]);
         $this->logService->createLog($detail, '处理', '承运商处理-' . $process_progress);
-        if( $process_progress == '拦截失败'){
-            $this->logService->createLog($detail, '终审', '承运商无法拦截,自动终审-无法拦截');
-            $this->review($detail,'无法拦截','无法拦截-自动完结');
+        if( $process_progress !== '拦截失败'){
+            $detail->workOrder()->update(['custom_rejected_status' => '退回中']);
         }
     }
 
@@ -199,7 +198,7 @@ class WorkOrderInterceptService extends WorkOrderService
         /** @var WorkOrderDetail $detail */
         $issueType = $this->issueTypeService->firstOrCreate(['name' => '拦截']);
         if ($workOrder->order_issue_type_id != $issueType->id) return;
-        $detail = $workOrder->details()->where('order_issue_type_id', $issueType->id)->where('status', '宝时终审')->orderByDesc('created_at')->first();
+        $detail = $workOrder->details()->where('order_issue_type_id', $issueType->id)->where('status','!=', 6)->orderByDesc('created_at')->first();
         if (!$detail) return;
         $process_progress = '成功已退回,不赔偿';
         $detail->update([

+ 2 - 0
app/Services/WorkOrderProcessLogService.php

@@ -24,11 +24,13 @@ class WorkOrderProcessLogService
     public function createProcessLog(WorkOrderDetail $detail, $params, User $user = null): Model
     {
         $user = $user ?? Auth::user();
+
         $process_log = $detail->processLogs()->create([
             'work_order_detail_id' => $detail->id,
             'work_order_id' => $detail->work_order_id,
             'content' => $params['content'],
             'user_id' => Auth::id(),
+            'tag' => $params['tag'] ?? 0,
         ]);
 
         /** @var WorkOrder $work_order */

+ 6 - 0
app/Services/WorkOrderService.php

@@ -398,10 +398,16 @@ class WorkOrderService
                 'created_at' => $process_log->created_at,
                 'updated_at' => $process_log->updated_at,
                 'type' => $process_log->type,
+                'tag' => $process_log->tag,
             ];
         }))->toArray());
         $this->orderIssueService->endOrderIssues([$order_issue->id]);
         $detail->processLogs()->where('status', '未同步')->update(['status' => '同步']);
     }
 
+    public function customRejectedStatus($ids,$customRejectedStatus): int
+    {
+        return WorkOrder::query()->whereIn('id',$ids)->update(['custom_rejected_status' => $customRejectedStatus]);
+    }
+
 }

+ 6 - 1
app/WorkOrder.php

@@ -56,6 +56,7 @@ class WorkOrder extends Model
         'bao_shi_indemnity_money',      // 宝时赔偿金额
         'bao_shi_express_remission',    // 宝时减免
         'user_owner_group_id',
+        'custom_rejected_status',       // 自定义退回标记
     ];
     /**
      * @var int 默认
@@ -284,7 +285,11 @@ class WorkOrder extends Model
         return ['owner', 'logistic', 'issueType', 'creator', 'lastHandler','orderDetail','orderIssueRejectedBills.rejectedBill.items',
             'userWorkGroups','details' => function ($query) {
             return $query->with(['commodities.commodity', 'logs' => function ($query) {
-                return $query->with('creator')->orderByDesc('created_at');
+                if(Gate::denies('订单管理-工单处理-宝时编辑')){
+                    return $query->with('creator')->orderByDesc('created_at');
+                } else {
+                    return $query->with('creator')->where('tag','!=','1')->orderByDesc('created_at');
+                }
             }, 'images.uploadFile', 'issueType', 'processLogs' => function ($query) {
                 return $query->with('user')->orderByDesc('created_at');
             }]);

+ 1 - 0
app/WorkOrderProcessLog.php

@@ -20,6 +20,7 @@ class WorkOrderProcessLog extends Model
         'content',
         'status',
         'type', // 创建 处理 完结
+        'tag'
     ];
 
 

+ 32 - 0
database/migrations/2022_02_16_140349_work_orders_add_custom_rejected_status.php

@@ -0,0 +1,32 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class WorkOrdersAddCustomRejectedStatus extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('work_orders', function (Blueprint $table) {
+            $table->enum('custom_rejected_status',['无','待退回','退回中'])->default('无');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('work_orders', function (Blueprint $table) {
+            $table->dropColumn('custom_rejected_status');
+        });
+    }
+}

+ 32 - 0
database/migrations/2022_02_18_170500_work_order_precess_logs_add_hidden_tag.php

@@ -0,0 +1,32 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class WorkOrderPrecessLogsAddHiddenTag extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('work_order_process_logs', function (Blueprint $table) {
+            $table->tinyInteger('tag');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('work_order_process_logs', function (Blueprint $table) {
+            $table->dropColumn('tag');
+        });
+    }
+}

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

@@ -1717,12 +1717,7 @@
                     this.copyText(logisticNumbers.join('\n'));
                 },
                 checkAll(e) {
-                    if (!e.target.checked) this.checkData = [];
-                    else {
-                        this.orderIssues.forEach((el, i) => {
-                            if (this.checkData.indexOf(el.id) === -1) this.checkData.push(el.id);
-                        });
-                    }
+                    this.checkData = e.target.checked ? this.orderIssues.map(e => e.id) : []
                 },
                 endOrderIssue() {
                     if (this.checkData.length !== 0) {

+ 40 - 0
resources/views/order/workOrder/_batch_order_dispose.blade.php

@@ -0,0 +1,40 @@
+<div class="modal fade" id="batchOthersModel" tabindex="-1" role="dialog" aria-labelledby="othersLabel"
+     aria-hidden="true">
+    <div class="modal-dialog  modal-dialog-centered">
+        <div class="modal-content">
+            <div class="modal-body">
+                <h5 class="modal-title" id="othersLabel">承运商快递减免</h5>
+                <select class="form-control form-control-sm"
+                        v-model="batchOthers.logistic_express_remission">
+                    <option disabled value="">请选择</option>
+                    <option v-for="item in expressRemission" :value="item">@{{ item }}</option>
+                </select>
+            </div>
+            <div class="modal-body">
+                <h5 class="modal-title" id="othersLabel">宝时快递减免</h5>
+                <select class="form-control form-control-sm"
+                        v-model="batchOthers.bao_shi_express_remission">
+                    <option disabled value="">请选择</option>
+                    <option v-for="item in expressRemission" :value="item">@{{ item }}</option>
+                </select>
+            </div>
+
+            <div class="modal-body">
+                <h5 class="modal-title" id="logsLabel">事故责任方</h5>
+                <span v-for="item in userWorkgroup">
+                     <input type="checkbox" name="vehicle"
+                                    :value="item.name"
+                                    :id="'userWorkGroupIds' + item.name"
+                                    v-model="batchOthers.userWorkGroupIds"
+                     ></input>
+                    <label :for="'userWorkGroupIds' + item.name">@{{ item.value }}</label>
+                </span>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
+                <button type="button" class="btn btn-primary" data-dismiss="modal" @click="batchOthersExpressRemission()">确认
+                </button>
+            </div>
+        </div>
+    </div>
+</div>

+ 21 - 0
resources/views/order/workOrder/_custom_rejected_status.blade.php

@@ -0,0 +1,21 @@
+<el-dialog :visible.sync="dialogCustomRejectedStatusVisible" width="25%">
+    <div slot="title">
+        退回状态
+    </div>
+    <div class="form-group row">
+        <label class="col-sm-2 col-form-label text-right text-primary">
+            状态
+        </label>
+        <select class="form-control col-sm-9" id="customRejectedStatus">
+            <option value="无">无</option>
+            <option value="待退回">待退回</option>
+            <option value="退回中">退回中</option>
+        </select>
+    </div>
+    <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogCostomRejectedStatusVisible = false">关 闭</el-button>
+        <el-button type="primary" @click="batchChangeCustomRejectedStatus">
+            提交
+        </el-button>
+    </div>
+</el-dialog>

+ 44 - 30
resources/views/order/workOrder/_process_logs.blade.php

@@ -2,30 +2,37 @@
     @if( \Illuminate\Support\Facades\Gate::check('订单管理-工单处理-宝时编辑') ||
             \Illuminate\Support\Facades\Gate::check('订单管理-工单处理-商家编辑') ||
              \Illuminate\Support\Facades\Gate::check('订单管理-工单处理-承运商编辑'))
-    <div class="add-btn"
-         style="position: absolute;display: none;margin-top: -35px;z-index: 51"
-         :id="'AddProcessLogBtn'+item.pending_detail.id">
-        <button type="button" class="btn btn-primary"
-                @click="showAddDiv('addWorkOrderProcessLogForm'+item.pending_detail.id)">新
-        </button>
-    </div>
-
-    <div class="addLogDiv row m-0 p-0 form-group" style="display: none;"
-         :id="'addWorkOrderProcessLogForm'+item.pending_detail.id">
-        <input type="hidden" name="id" :value="item.pending_detail.id">
-        <div style="width: 45px"></div>
-        <div class="form-inline m-2">
-            <input type="text" name="content" :id="'addWorkOrderProcessLogFormInput_'+item.pending_detail.id"
-                   class="form-control m-0 p-0"
-                   style="width: 275px"
-                   required>
-            <button type="button"
-                    class="btn btn-primary ml-2 m-0 p-0"
-                    style="width: 50px"
-                    @click="formStoreProcessLog(item.pending_detail.id,item.id)">添加
+        <div class="add-btn"
+             style="position: absolute;display: none;margin-top: -35px;z-index: 51"
+             :id="'AddProcessLogBtn'+item.pending_detail.id">
+            <button type="button" class="btn btn-primary"
+                    @click="showAddDiv('addWorkOrderProcessLogForm'+item.pending_detail.id)">新
             </button>
         </div>
-    </div>
+
+        <div class="addLogDiv row m-0 p-0 form-group" style="display: none;"
+             :id="'addWorkOrderProcessLogForm'+item.pending_detail.id">
+            <input type="hidden" name="id" :value="item.pending_detail.id">
+            <div style="width: 45px"></div>
+            <div class="form-inline m-2">
+                <input type="text" name="content" :id="'addWorkOrderProcessLogFormInput_'+item.pending_detail.id"
+                       class="form-control m-0 p-0"
+                       style="width: 275px"
+                       required>
+                @can('订单管理-工单处理-宝时编辑')
+                    <input type="checkbox" class="form-control"
+                           value="true"
+                           :name="item.pending_detail.id + '_log_check'"
+                           :id="item.pending_detail.id + '_log_check'">
+                    <label :for="item.pending_detail.id + '_log_check'">标</label>
+                @endcan
+                <button type="button"
+                        class="btn btn-primary ml-2 m-0 p-0"
+                        style="width: 50px"
+                        @click="formStoreProcessLog(item.pending_detail.id,item.id)">添加
+                </button>
+            </div>
+        </div>
     @endif
     <template class="p-0 m-0" v-if="item.process_logs.length > 0">
         <table class="table table-sm p-0 m-0 " :id="'logs'+item.pending_detail.id">
@@ -45,13 +52,19 @@
                     <span v-text="log.created_at"></span>
                 </td>
                 @if( \Illuminate\Support\Facades\Gate::check('订单管理-工单处理-宝时编辑') || \Illuminate\Support\Facades\Gate::check('订单管理-工单处理-商家编辑') )
-                <td style="max-width: 35px;min-width: 35px;" class="m-0 p-0 border-0">
-                    <button type="button"
-                            class="btn btn-sm btn-outline-danger m-0 del-btn invisible"
-                            @click="destroyProcessLog(item,log,logIndex)">
-                        删
-                    </button>
-                </td>
+                    <td style="max-width: 70px;min-width: 70px;" class="m-0 p-0 border-0">
+                        <button type="button"
+                                class="btn btn-sm btn-outline-danger m-0 del-btn invisible"
+                                @click="destroyProcessLog(item,log,logIndex)">
+                            删
+                        </button>
+                        <button type="button"
+                                v-if="log.tag !== '1' "
+                                class="btn btn-sm btn-primary m-0 del-btn invisible"
+                                @click="workOrderProcessLogTagApi(log)">
+                            标
+                        </button>
+                    </td>
                 @endif
             </tr>
         </table>
@@ -63,7 +76,8 @@
 
             <button type="button" class="btn btn-sm btn-outline-primary align-middle mt-1 center-block"
                     v-show="showWorkOrderProcessLog === item.id"
-                    @click="showWorkOrderProcessLog = null">点击收起</button>
+                    @click="showWorkOrderProcessLog = null">点击收起
+            </button>
         </div>
 
     </template>

+ 293 - 132
resources/views/order/workOrder/index.blade.php

@@ -8,7 +8,7 @@
     <div class="container-fluid d-none" id="list">
         <div>
             <div class="">
-                <div id="form_div" style="min-width: 1220px;"></div>
+                <div id="form_div" style="min-width: 775px;"></div>
                 <div class="ml-3 form-inline" id="btn">
                      <span class="dropdown">
                         <button type="button"
@@ -66,14 +66,78 @@
                         </button>
                     @endcan
 
+                    @can('订单管理-工单处理-宝时编辑')
+                        <button type="button" class="ml-1 btn btn-outline-primary btn-sm"
+                                v-show="checkData.length > 0"
+                                @click="showBatchCustomRejectedStatus">
+                            批量修改退回状态
+                        </button>
+                    @endcan
+                    @can('订单管理-工单处理-宝时编辑')
+                        <button type="button" class="ml-1 btn btn-outline-primary btn-sm"
+                                v-show="checkData.length > 0"
+                                @click="showBatchOthersExpressRemission">
+                            批量处理赔偿金额与事故责任方
+                        </button>
+                    @endcan
+
                 </div>
                 <div>
-                    <table class="table table-sm table-striped table-hover table-bordered td-min-width-80 " id="table">
+                    <table class="table table-sm table-striped table-hover table-bordered td-min-width-80 " id="table"
+                           :class="tableClass">
+                        <thead>
+                        <tr>
+                            <th style="min-width: 100px">
+                                <label for="all">
+                                    <input id="all" type="checkbox" @click="checkAll($event)"/>
+                                </label>
+                            </th>
+                            <th style="min-width: 120px">工单号</th>
+                            <th style="min-width: 120px">操作</th>
+                            <th style="min-width: 200px">创建时间</th>
+                            <th style="min-width: 120px">工单类型</th>
+                            <th style="min-width: 200px">当前进度</th>
+                            <th style="min-width: 120px">客户</th>
+                            <th style="min-width: 200px">店铺名称</th>
+                            <th style="min-width: 200px">客户单号</th>
+                            <th style="min-width: 120px">承运人</th>
+                            <th style="min-width: 120px">快递单号</th>
+                            <th style="min-width: 120px">当前处理人</th>
+                            <th style="min-width: 150px">情况说明</th>
+                            <th style="min-width: 50px;max-width: 50px" v-text="hideRejectedBills ? '隐藏' :'展开' ">展开</th>
+
+                            <th v-if="hideRejectedBills" style="min-width: 220px">退回单号</th>
+                            @if( \Illuminate\Support\Facades\Gate::check('订单管理-工单处理-宝时编辑') || \Illuminate\Support\Facades\Gate::check('订单管理-工单处理-商家编辑') )
+                                <th v-if="hideRejectedBills" style="min-width: 450px">退回商品详情</th>
+                            @endif
+                            <th style="min-width: 120px">处理日志</th>
+                            @can('订单管理-工单处理-宝时编辑')
+                                <th style="min-width: 120px">问题件处理结果</th>
+                            @endcan
+                            @can('订单管理-工单处理-宝时编辑')
+                                <th style="min-width: 120px">承运商赔偿金额</th>
+                                <th style="min-width: 120px">承运商快递减免</th>
+                                <th style="min-width: 100px">宝时赔偿金额</th>
+                                <th style="min-width: 120px">宝时快递减免</th>
+                                <th style="min-width: 200px">仓库组责任方</th>
+                                <th style="min-width: 200px">项目组责任方</th>
+                            @endcan
+                            @can('订单管理-工单处理-删除')
+                                <th style="min-width: 75px">删除</th>
+                            @endcan
+                            <th style="min-width: 300px">资料</th>
+                            <th style="min-width: 120px">创建人</th>
+
+                        </tr>
+                        </thead>
                         <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 name="checkData" type="checkbox" :value="item.id"></label>
+                                    <label> <input class="checkItem" type="checkbox"
+                                                   :value="item.id"
+                                                   v-model="checkData">
+                                    </label>
                                     <span v-show="isNewWorkOrder(item)" class="badge  bg-primary text-white ">新</span>
                                     @can( '订单管理-工单处理-宝时编辑')
                                         <span v-show="isStrandWorkOrder(item)"
@@ -105,6 +169,18 @@
                                         <span class="badge  badge-light"
                                               v-text="item.order_detail ? item.order_detail.rejecting_status : ''"></span>
                                     </template>
+
+                                    <template>
+                                        @can('订单管理-工单处理-宝时编辑')
+                                            <select class="form-control form-control-sm"
+                                                    v-model="item.custom_rejected_status"
+                                                    @change="changeCustomRejectedStatus(item,$event)">
+                                                <option value="无">无</option>
+                                                <option value="待退回">待退回</option>
+                                                <option value="退回中">退回中</option>
+                                            </select>
+                                        @endcan
+                                    </template>
                                 </td>
                                 <td>
                                     <span v-text="item.id"></span>
@@ -216,24 +292,24 @@
                                 <td v-text="item.order_client_code"></td>
                                 <td v-text="item.logisitc_name"></td>
                                 <td>
-                                    <div v-for="logistic_number in item.logistic_numbers">
-                                        <span v-text="logistic_number"></span>
-                                    </div>
+                                    <span class="m-0 p-0 d-inline-block"
+                                          v-for="logistic_number in item.logistic_numbers"
+                                          v-text="logistic_number"></span>
                                 </td>
                                 <td v-text="item.status"></td>
-                                <td v-text="item.creator ? item.creator.name : ''"></td>
                                 <td v-text="item.result_explain ? item.result_explain: item.remark"></td>
                                 <td class="p-0 m-0 w-50" style="width:30px;" v-if="i===0"
                                     :rowspan="workOrders.length">
                                     <span class="btn"
+                                          id="rejected_bill_btn"
                                           style="max-width: 50px"
-                                          :class="hideRejectedBills ? 'btn-outline-secondary':'btn-outline-info'"
+                                          :class="hideRejectedBills ? 'btn-outline-info':'btn-outline-secondary'"
                                           @click="toggleRejectedBill()" :style="{'min-height':toggleBtnHeight+'px'}"
-                                          v-text="hideRejectedBills ? '展开运单列' : '隐藏运单列'">
+                                          v-text="hideRejectedBills ? '隐藏运单列' : '展开运单列'">
                                     </span>
                                 </td>
 
-                                <td class="text-muted child-layer-3-hide" v-if="!hideRejectedBills">
+                                <td class="text-muted child-layer-3-hide" v-if="hideRejectedBills">
                                     <div class="form-inline">
                                         <div class="form-group">
                                             <input type="text" class="form-control form-text form-control-sm mr-1">
@@ -258,7 +334,7 @@
                                     </div>
                                 </td>
                                 @if( \Illuminate\Support\Facades\Gate::check('订单管理-工单处理-宝时编辑') || \Illuminate\Support\Facades\Gate::check('订单管理-工单处理-商家编辑') )
-                                    <td class="p-0 child-layer-3-hide align-center" v-if="!hideRejectedBills">
+                                    <td class="p-0 child-layer-3-hide align-center" v-if="hideRejectedBills">
                                         <div class="m-0 p-0" v-if="item.rejected_bill_items">
                                             <table class="table table-sm m-0" v-show="showRejectedBillItem === item.id">
                                                 <tr v-for="rejected_bill_item in item.rejected_bill_items">
@@ -381,25 +457,19 @@
                                         </select>
                                     </td>
                                 @endcan
+                                @can('订单管理-工单处理-删除')
+                                    <td>
+                                        <button type="button"
+                                                class="btn btn-sm btn-outline-danger"
+                                                @click="destroy(item,i)">
+                                            删除
+                                        </button>
+                                    </td>
+                                @endcan
                                 <td class="container" style="min-width: 500px">
-                                    <div class="row">
-                                        @can('订单管理-工单处理-删除')
-                                            <div class="col-2 ">
-                                                <div class="header-alert">
-                                                    <button type="button"
-                                                            class="btn btn-sm btn-outline-danger"
-                                                            @click="destroy(item,i)">
-                                                        删除
-                                                    </button>
-                                                </div>
-                                            </div>
-                                        @endcan
-                                        <div class="col-10 m-0 ">
-                                            @include('order.workOrder._work_order_details')
-                                        </div>
-                                    </div>
+                                    @include('order.workOrder._work_order_details')
                                 </td>
-
+                                <td v-text="item.creator ? item.creator.name : ''"></td>
                             </tr>
                         </template>
                         </tbody>
@@ -421,12 +491,13 @@
         @include('order.workOrder._edit_process_log')
         @include('order.workOrder._order_commodity_info')
         @include('order.workOrder._rejected_item_equals_order_commodity')
+        @include('order.workOrder._custom_rejected_status')
+        @include('order.workOrder._batch_order_dispose')
     </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 type="text/javascript" src="{{mix('js/element-ui.js') }}"></script>
     <script type="text/javascript" src="{{asset('js/element/index.js')}}"></script>
     <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
@@ -450,6 +521,20 @@
         .image-w {
             width: 100%;
         }
+
+        .logistic-table {
+            min-width: 775px;
+            max-width: 900px
+        }
+
+        .owner-table {
+            min-width: 775px;
+            max-width: 900px;
+        }
+
+        .baoShi-table {
+            min-width: 900px;
+        }
     </style>
     <script>
         const orderIssueVue = new Vue({
@@ -526,6 +611,7 @@
         let vue = new Vue({
             el: "#list",
             data: {
+                checkData: [],
                 isLogistic: false,
                 isOwner: false,
                 isBaoShi: false,
@@ -650,7 +736,7 @@
                 dialogProcessLogVisible: false,              // 工单处理日志
                 dialogOrderCommoditiesVisible: false,              // 订单商品详情
                 dialogCommoditiesEqualsVisible: false,       // 商品对比
-
+                dialogCustomRejectedStatusVisible: false,    // 自定义退回状态
                 showProcessLogId: null,         // workOrder->id
                 showAddDetailProcessLog: null,        // workOrderDetail->ids
                 showAddProcessLogFrom: null,     //
@@ -686,11 +772,33 @@
                     {name: '差异退回', value: '差异退回'},
                 ],
                 commodityEqualsMap: [],
-                hideRejectedBills: true,
-                tableHeader:null,
-                toggleBtnHeight:0,
+                hideRejectedBills: false,
+                tableHeader: null,
+                toggleBtnHeight: 0,
+                batchOthers: {
+                    logistic_express_remission: '',
+                    bao_shi_express_remission: '',
+                    userWorkGroupIds: [],
+                },
+                expressRemission: ['原单减免', '补发减免', '全部减免'],
+            },
+            computed: {
+                tableClass() {
+                    if (this.isBaoShi) {
+                        return 'baoShi-table'
+                    } else if (this.isLogistic) {
+                        return 'logistic-table';
+                    } else if (this.isOwner) {
+                        return 'owner-table';
+                    }
+                }
+            },
+            watch: {
+                checkData(value) {
+                    let dom = document.getElementById('all')
+                    dom.checked = value.length === this.workOrders.length;
+                }
             },
-            computed: {},
             mounted() {
                 $(".up").slideUp();
                 $(".tooltipTarget").tooltip({'trigger': 'hover'});
@@ -731,7 +839,13 @@
                 ], [
                     {name: 'review_at_start', type: 'time', tip: ['终审开始日期', '时间']},
                     {name: 'review_at_end', type: 'time', tip: ['终审结束日期', '时间']},
-                    {name: 'order_issue_type', type: 'select', placeholder: '问题件类型', data: this.orderIssueTypes},
+                    {
+                        name: 'order_issue_type',
+                        type: 'select_multiple_select',
+                        tip: ['输入关键词快速定位下拉列表,回车确定', '选择要显示的问题件类型'],
+                        placeholder: ['问题件类型', '定位或多选问题件类型'],
+                        data: this.orderIssueTypes
+                    },
                     {name: 'client_code', type: 'input', placeholder: '客户订单号'},
                     {
                         name: 'status', type: 'select', placeholder: '工单当前处理人',
@@ -836,6 +950,15 @@
                             {name: '超量退回', value: '超量退回'},
                         ]
                     }
+                ], [
+                    {
+                        name: 'custom_rejected_status', type: 'select', placeholder: '退回标记',
+                        data: [
+                            {name: '无', value: '无'},
+                            {name: '待退回', value: '待退回'},
+                            {name: '退回中', value: '退回中'},
+                        ]
+                    },
                 ]];
                 this.form = new query({
                     el: '#form_div',
@@ -843,7 +966,7 @@
                     appendDom: "btn",
                 });
                 this.form.init();
-                this.initTableHeader();
+                this.toggleBtnHeight = document.getElementById('table').clientHeight;
             },
             created() {
                 this.workOrders.forEach(item => {
@@ -869,18 +992,7 @@
                 },
             },
             methods: {
-                initTableHeader(){
-                    let column = this.headerColumn();
-                    this.tableHeader = new Header({
-                        el: "table",
-                        name: "work_orders",
-                        column: column,
-                        data: this.workOrders,
-                        fixedTop: ($('#form_div').height()) + ($('#btn').height()) + 1,
-                    });
-                    this.tableHeader.init();
-                    this.toggleBtnHeight = document.getElementById('table').clientHeight;
-                },
+
                 waitingTempTip(message) {
                     window.tempTip.setIndex(2005);
                     window.tempTip.waitingTip(message);
@@ -956,7 +1068,7 @@
                     workOrder.pending_detail = this.groupPendingDetail(workOrder);
                     workOrder.logistic_numbers = this.groupLogisticNumber(workOrder);
                     workOrder.orderno = workOrder.order ? workOrder.order.code : '';
-                    workOrder.process_logs = this.groupProcess_logs(workOrder.pending_detail);
+                    workOrder.process_logs = this.groupProcessLogs(workOrder);
                     workOrder.log_is_show = false;
                     workOrder.shop_name = workOrder.order ? (workOrder.order.shop ? workOrder.order.shop.name : '') : '';
                     workOrder.owner_name = workOrder.owner ? workOrder.owner.name : '';
@@ -1134,17 +1246,14 @@
                     }
                     return new Array(...logistic_numbers);
                 },
-                groupProcess_logs(pending_detail) {
-                    return pending_detail.process_logs ? pending_detail.process_logs.map(e => {
-                        e.log_is_show = false;
-                        return e;
-                    }) : [];
+                groupProcessLogs(workOrder) {
+                    return workOrder.details.map(e => e.process_logs ? e.process_logs : []).reduce((a, b) => [...a, ...b], []).sort((pre, cur) => cur.id - pre.id);
                 },
                 createOrderIssue(item, tag) { // 生成问题件
                     let url = '{{route('workOrder.buildOrderIssueApi')}}';
                     let data = {};
                     if (tag) data.ids = [item.id];
-                    else data.ids = checkData;
+                    else data.ids = this.checkData;
                     window.tempTip.confirm('是否生成对应的问题件', () => {
                         window.tempTip.waitingTip('生成中........');
                         window.axios.post(url, data).then(res => {
@@ -1180,14 +1289,14 @@
                 },
 
                 getMessageWorkOrder() {
-                    let selected = checkData;
+                    let selected = this.checkData;
                     if (!selected) {
                         window.tempTip.show('未选中任何信息');
                         return null;
                     }
                     return this.workOrders.filter((item) => {
                         if (!item.order || !item.order.packages) return false;
-                        return selected.includes(item.id + '');
+                        return selected.includes(item.id);
                     });
                 },
                 exportText() {
@@ -2833,8 +2942,7 @@
                             item.status = "完成";
                             item.owner_tag = "";
                             this.$delete(this.workOrders, index);
-                            $("input:checkbox[name='checkData']").attr('checked', false);
-                            checkData = [];
+                            this.checkData = [];
                         } else {
                             this.errorTempTip(res.data.message ? res.data.message : '完结工单异常');
                         }
@@ -3029,7 +3137,7 @@
                 },
                 // 问题件批处理日志
                 showBatchEditOrderIssueLog() {
-                    if (checkData.length === 0) {
+                    if (this.checkData.length === 0) {
                         this.errorTempTip('请勾选工单');
                         return;
                     }
@@ -3038,7 +3146,7 @@
                 batchEditOrderIssueLog() {
                     let url = '{{route('order.issue.log.workOrder.storeApi')}}';
                     let data = {
-                        ids: checkData,
+                        ids: this.checkData,
                         content: this.$refs.order_issue_log.value,
                     };
                     if (data.content === '' || data.content.trim().length === 0) {
@@ -3070,14 +3178,14 @@
                     });
                 },
                 checkDataHasSize() {
-                    if (checkData.length === 0) {
+                    if (this.checkData.length === 0) {
                         this.errorTempTip("请勾选需要完结的工单");
                         return false;
                     }
                     return true;
                 },
                 checkDataIsToBeEnd() {
-                    let count = this.workOrders.filter(e => checkData.includes(`${e.id}`))
+                    let count = this.workOrders.filter(e => this.checkData.includes(e.id))
                         .filter(e => e.status !== '待货主完结').length;
                     if (count > 0) {
                         this.errorTempTip("勾选工单中有不符合完结条件的工单");
@@ -3087,7 +3195,7 @@
                 },
                 getCheckDetailsIds() {
                     return this.workOrders.filter(e => {
-                        return checkData.includes(`${e.id}`);
+                        return this.checkData.includes(e.id);
                     }).map(e => {
                         return e.pending_detail ? e.pending_detail.detail_id : null;
                     }).filter(e => e);
@@ -3103,14 +3211,14 @@
                         window.tempTip.cancelWaitingTip();
                         if (res.data.success) {
                             this.successTempTip('处理完成');
-                            checkData.forEach(e => {
+                            this.checkData.forEach(e => {
                                 let index = this.workOrders.findIndex(workOrder => `${workOrder.id}` === `${e}`);
                                 if (index >= 0) {
                                     this.$delete(this.workOrders, index);
                                 }
                             });
                             $("input:checkbox[name='checkData']").attr('checked', false);
-                            checkData = [];
+                            this.checkData = [];
                         } else {
                             this.errorTempTip(res.data.message);
                         }
@@ -3120,7 +3228,7 @@
                     });
                 },
                 getSelectedWorkOrders() {
-                    return this.workOrders.filter(e => checkData.includes(`${e.id}`));
+                    return this.workOrders.filter(e => this.checkData.includes(e.id));
                 },
                 getItemsStatus(items) {
                     let item = items.find(e => e);
@@ -3248,6 +3356,7 @@
                 baoShiBatchHandler() {
                     if (!this.checkDataHasSize()) return;
                     let selected_items = this.getSelectedWorkOrders();
+                    console.log(selected_items);
                     let issue_type_name = this.getItemsIssueTypeName(selected_items);
                     if (!['拦截', '取消拦截', '信息更改'].includes(issue_type_name)) {
                         this.errorTempTip('批量处理只支持`拦截`,`取消拦截`,`信息更改`');
@@ -3316,7 +3425,7 @@
                             this.replaceWorkOrder(res.data.data);
                             this.dialogBaoShiBatchHandlerVisible = false;
                             $("input:checkbox[name='checkData']").attr('checked', false);
-                            checkData = [];
+                            this.checkData = [];
                             return;
                         }
                         this.errorTempTip(res.data.message ? res.data.message : '处理异常刷新后重试');
@@ -3358,9 +3467,11 @@
                 },
                 formStoreProcessLog(work_order_detail_id, worK_order_id) {
                     let url = "{{route('workOrder.processLog.storeApi')}}";
+                    let tagDoc = document.getElementById(work_order_detail_id + '_log_check');
                     let data = {
                         id: worK_order_id,
                         content: document.getElementById('addWorkOrderProcessLogFormInput_' + work_order_detail_id).value,
+                        tag: tagDoc ? tagDoc.value : 0
                     };
                     this.waitingTempTip('处理中');
                     window.axios.post(url, data).then(res => {
@@ -3369,6 +3480,8 @@
                             this.pushProcessLog(res.data.data);
                             this.successTempTip('处理完成');
                             this.showAddDiv('addWorkOrderProcessLogForm' + work_order_detail_id);
+                            document.getElementById('addWorkOrderProcessLogFormInput_' + work_order_detail_id).value = '';
+                            if(tagDoc)tagDoc = false;
                             this.$forceUpdate();
                             return;
                         }
@@ -3404,7 +3517,7 @@
                     })
                 },
                 showBatchStoreProcessLogs() {
-                    if (checkData.length === 0) {
+                    if (this.checkData.length === 0) {
                         this.errorTempTip('请选择需要处理工单')
                         return;
                     }
@@ -3413,7 +3526,7 @@
                 batchStoreProcessLogs() {
                     let url = "{{route('workOrder.processLog.batchStore')}}";
                     let data = {
-                        ids: checkData,
+                        ids: this.checkData,
                         content: this.processLogs.content,
                     };
                     this.waitingTempTip('处理中');
@@ -3442,6 +3555,7 @@
                     this.workOrders.forEach((e, index) => {
                         let has = e.details.filter(detail => `${detail.id}` === `${work_order_detail_id}`).length > 0;
                         if (has) {
+                            process_log.tag = process_log.tag + '';
                             this.workOrders[index]['process_logs'].unshift(process_log);
                             if (this.isBaoShi) {
                                 this.workOrders[index]['bao_shi_tag'] = '1'
@@ -3653,73 +3767,120 @@
                     let url = '{{route('workOrder.exportApi')}}';
                     let token = '{{ csrf_token() }}';
                     if (sign) {
-                        excelExport(true, checkData, url, this.total, token);
+                        excelExport(true, this.checkData, url, this.total, token);
                     } else {
-                        excelExport(false, checkData, url, null, token);
+                        excelExport(false, this.checkData, url, null, token);
                     }
                 },
                 toggleRejectedBill() {
                     this.hideRejectedBills = !this.hideRejectedBills;
-                    if(this.tableHeader !== null){
-                        let column = this.headerColumn();
-                        this.tableHeader.redrawHeader(column);
-                    }
-                },
-                headerColumn() {
-                    let columns = [];
-                    columns.push({name: 'id', value: '工单号', neglect: true},
-                        {name: 'operation', value: '操作', neglect: true},
-                        {name: 'created_at', value: '创建时间', neglect: true},
-                        {name: 'work_type', value: '工单类型', neglect: true},
-                        {name: 'process_progress', value: '当前进度', neglect: true},
-                        {name: 'owner', value: '客户', neglect: true},
-                        {name: 'shop_name', value: '店铺名称'},
-                        {name: 'client_no', value: '客户订单号'},
-                        {name: 'logistic_name', value: '承运人'},
-                        {name: 'logistic_numbers', value: '快递单号'},
-                        {name: 'status', value: '当前处理人', neglect: true},
-                        {name: 'creator', value: '创建人'},
-                        {name: 'remark', value: '情况说明'},
-                        {name: 'rejectedBills', value: '展开',neglect: true,max_width:30},)
-                    if (!this.hideRejectedBills) {
-                        columns.push({name: 'return_logistic_number', value: '退回单号'});
-                        @if( \Illuminate\Support\Facades\Gate::check('订单管理-工单处理-宝时编辑') || \Illuminate\Support\Facades\Gate::check('订单管理-工单处理-商家编辑') )
-                        columns.push({name: 'rejected_bills_items', value: '退回商品详情'});
-                        @endif
-                    }
-                    columns.push({
-                            name: 'process_logs', value: '处理日志'
-                        },
-                            @can('订单管理-工单处理-宝时编辑')
-                        {
-                            name: 'order_issue_log', value: '问题件处理结果'
-                        },
-                            @endcan
-                            @can('订单管理-工单处理-宝时编辑')
-                        {
-                            name: 'logistic_indemnity_money', value: '承运商赔偿金额'
-                        },
-                        {name: 'logistic_express_remission', value: '承运商快递减免'},
-                        {name: 'bao_shi_indemnity_money', value: '宝时赔偿金额'},
-                        {name: 'bao_shi_express_remission', value: '宝时快递减免'},
-                        {name: 'user_work_groups', value: '仓库组责任方'},
-                        {name: 'user_owner_group', value: '项目组责任方'},
-                            @endcan
-                        {
-                            name: 'ab_operation', type: 'multi', title: "其他操作", rows: [
-                                    @can('订单管理-工单处理-删除')
-                                {
-                                    value: "删除", col: "2"
-                                },
-                                {value: "查看资料", col: "10"},
-                                    @else
-                                {
-                                    value: "查看资料", col: "12"
-                                },
-                                @endcan
-                            ], neglect: true
-                        },);
-                    return columns;
+                },
+                showBatchCustomRejectedStatus() {
+                    if (this.checkData.length === 0) {
+                        this.errorTempTip('请勾选需要修改的工单')
+                        return;
+                    }
+                    this.dialogCustomRejectedStatusVisible = true
+                },
+                batchChangeCustomRejectedStatus() {
+                    let dom = document.getElementById('customRejectedStatus');
+                    this.batchCustomRejectedStatus(this.checkData, dom.value)
+                },
+                batchCustomRejectedStatus(ids, rejectedStatus) {
+                    let url = "{{route('workOrder.customRejectedStatusApi')}}";
+                    let data = {
+                        ids: ids,
+                        rejectedStatus: rejectedStatus,
+                    }
+                    window.tempTip.setIndex(1999)
+                    window.tempTip.setDuration(9999)
+                    window.tempTip.waitingTip('处理中')
+                    axios.post(url, data).then(res => {
+                        window.tempTip.cancelWaitingTip();
+                        if (res.data.success) {
+                            this.workOrders.forEach(e => {
+                                if (ids.includes(e.id)) {
+                                    e.custom_rejected_status = rejectedStatus
+                                }
+                            });
+                            this.dialogCustomRejectedStatusVisible = false;
+                        } else {
+                            this.errorTempTip(res.data.message)
+                        }
+                    }).catch(err => {
+                        window.tempTip.cancelWaitingTip();
+                        this.errorTempTip(err)
+                    })
+                },
+                changeCustomRejectedStatus({id}, event) {
+                    this.batchCustomRejectedStatus([id], event.target.value)
+                },
+                checkAll(e) {
+                    this.checkData = e.target.checked ? this.workOrders.map(e => e.id) : []
+                },
+
+                workOrderProcessLogTagApi(item) {
+                    let url = "{{route('workOrder.processLog.tagApi')}}"
+                    let data = {
+                        id: item.id
+                    }
+                    window.tempTip.waitingTip('处理中')
+                    axios.post(url, data).then(res => {
+                        window.tempTip.cancelWaitingTip()
+                        if (res.data.success) {
+                            item.tag = '1';
+                            this.successTempTip('标记成功');
+                        } else {
+                            this.errorTempTip(res.data.message ? res.data.message : '处理出现异常');
+                        }
+                    }).catch(err => {
+                        window.tempTip.cancelWaitingTip()
+                        this.errorTempTip(err)
+                    })
+                },
+                showBatchOthersExpressRemission() {
+                    if (this.checkData.length === 0) {
+                        this.errorTempTip('请勾选需要处理工单')
+                        return
+                    }
+                    $("#batchOthersModel").modal('show');
+                },
+                batchOthersExpressRemission() {
+                    let {logistic_express_remission, bao_shi_express_remission, userWorkGroupIds} = this.batchOthers;
+                    let url = "{{route('workOrder.batchOthersApi')}}";
+                    let data = {
+                        ids: this.checkData,
+                        logistic_express_remission: logistic_express_remission,
+                        bao_shi_express_remission: bao_shi_express_remission,
+                        userWorkGroupIds: userWorkGroupIds,
+                    }
+
+                    let userWorkGroupArray = this.userOwnerGroup.filter(e => {
+                        return userWorkGroupIds.includes(e.id);
+                    })
+                    window.tempTip.waitingTip('处理中')
+                    axios.post(url, data).then(res => {
+                        window.tempTip.cancelWaitingTip();
+                        if (res.data.success) {
+                            this.successTempTip('处理完成')
+                            this.workOrders.forEach(e => {
+                                if (this.checkData.includes(e.id)) {
+                                    if (logistic_express_remission) e.logistic_express_remission = logistic_express_remission;
+                                    if (bao_shi_express_remission) e.bao_shi_express_remission = bao_shi_express_remission
+                                    if (userWorkGroupIds) e.user_work_groups = e.user_work_groups.concat(userWorkGroupArray)
+                                }
+                            })
+                            this.batchOthers.logistic_express_remission = ''
+                            this.batchOthers.bao_shi_express_remission = ''
+                            this.batchOthers.userWorkGroupIds = []
+                        } else {
+                            this.errorTempTip(res.data.message ? res.data.message : '处理出现异常');
+                        }
+                    }).catch(err => {
+                        window.tempTip.cancelWaitingTip()
+                        this.errorTempTip(err)
+                    })
+
                 }
             },
         });

+ 6 - 1
routes/apiLocal.php

@@ -303,7 +303,11 @@ Route::prefix('workOrder')->group(function(){
 
     Route::post('end','WorkOrderController@ownerEndWorkOrderApi')->name('workOrder.owner.endApi');                              // 承运商完结工单
     Route::post('batchEnd','WorkOrderController@ownerBatchEndWorkOrderApi')->name('workOrder.owner.batchEndApi');               // 承运商处理标记
-    Route::post('logisticTag','WorkOrderController@logisticHandlerTagApi')->name('workOrder.logistic.handlerTagApi');           // 承运商处理标记
+    Route::post('logisticTag','WorkOrderController@logisticHandlerTagApi')->name('workOrder.logistic.handlerTagApi');
+    Route::post('customRejectedStatusApi','WorkOrderController@customRejectedStatusApi')->name('workOrder.customRejectedStatusApi');
+    Route::post('batchOthers','WorkOrderController@batchOthersApi')->name('workOrder.batchOthersApi');
+
+    // 承运商处理标记
     Route::prefix('intercept')->group(function(){           // 拦截
         Route::post('store','WorkOrderInterceptController@storeApi')->name('workOrder.intercept.storeApi');                                       // 拦截订单创建
         Route::post('store/batch','WorkOrderInterceptController@batchStoreApi')->name('workOrder.intercept.BatchStoreApi');                       // 拦截订单创建
@@ -359,6 +363,7 @@ Route::prefix('workOrder')->group(function(){
         Route::post('/store/baoShi','WorkOrderProcessLogController@baoShiStoreApi')->name('workOrder.processLog.baoShiStoreApi');
         Route::post('/batchStore','WorkOrderProcessLogController@batchStoreApi')->name('workOrder.processLog.batchStore');
         Route::post('/destroy','WorkOrderProcessLogController@destroyApi')->name('workOrder.processLog.destroyApi');
+        Route::post('/tag','WorkOrderProcessLogController@tagApi')->name('workOrder.processLog.tagApi');
     });
 
     Route::post('updateIssueType','WorkOrderController@updateIssueTypeApi')->name('workOrder.updateIssueTypeApi');                // 修改问题类型

+ 10 - 4
routes/web.php

@@ -38,10 +38,6 @@ Route::prefix('store')->group(function(){
         Route::get("/index","ReceivingTaskController@index");
         Route::get("/create","ReceivingTaskController@create");
     });
-    Route::prefix("/receivingDashboard")->group(function (){
-        Route::get("/receivingTableList", "ReceivingDashboardController@receivingTableList");
-        Route::get("/punctualityProgress", "ReceivingDashboardController@punctualityProgress");
-    });
 });
 
 //入库预约终端
@@ -522,6 +518,10 @@ Route::group(['middleware' => 'auth'], function ($route) {
         Route::post('ajaxGetRejected', 'RejectedController@ajaxGetRejected');
         Route::post('changeRejectedBillRemark', 'RejectedController@changeRejectedBillRemark');
         Route::get('importRejectedNumber', 'RejectedBillController@importRejectedNumber');
+
+        Route::group(['prefix' => 'rejectedPushTask'], function () {
+            Route::get('', 'RejectedPushTaskController@index');
+        });
     });
     Route::resource('rejected', 'RejectedController');
 
@@ -561,6 +561,12 @@ Route::group(['middleware' => 'auth'], function ($route) {
     $route->resource('package', 'WeighController');
     /** 入库 */
     $route->group(['prefix' => 'store'], function () {
+        //实时收货看板
+        Route::prefix("/receivingDashboard")->group(function (){
+            Route::get("/receivingTableList", "ReceivingDashboardController@receivingTableList");
+            Route::get("/punctualityProgress", "ReceivingDashboardController@punctualityProgress");
+        });
+
         Route::group(['prefix' => 'inStorage'], function () {
             Route::get('index', 'StoreController@storage');
             Route::get('cacheRackStorage', 'StoreController@cacheRackStorage');