Просмотр исходного кода

Merge branch 'work_order_02_18'

loustwo 4 лет назад
Родитель
Сommit
bfda569e3b

+ 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' => '没有对应的权限'];

+ 33 - 11
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";
                 });
             }
 
@@ -339,11 +339,33 @@ class WorkOrderController extends Controller
 
     public function customRejectedStatusApi(Request $request): array
     {
-        $result = $this->service->customRejectedStatus($request->input('ids'),$request->input('rejectedStatus'));
-        if($result>0){
+        $result = $this->service->customRejectedStatus($request->input('ids'), $request->input('rejectedStatus'));
+        if ($result > 0) {
             return ['success' => true,];
         }
-        return ['success' => false,'message' => '操作异常请稍后重试'];
+        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];
     }
 

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

+ 1 - 0
app/Services/WorkOrderService.php

@@ -398,6 +398,7 @@ 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]);

+ 5 - 1
app/WorkOrder.php

@@ -285,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_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');
+        });
+    }
+}

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

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

+ 83 - 1
resources/views/order/workOrder/index.blade.php

@@ -73,6 +73,13 @@
                             批量修改退回状态
                         </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>
@@ -484,6 +491,7 @@
         @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()
 
@@ -764,6 +772,12 @@
                 hideRejectedBills: false,
                 tableHeader: null,
                 toggleBtnHeight: 0,
+                batchOthers:{
+                    logistic_express_remission:'',
+                    bao_shi_express_remission:'',
+                    userWorkGroupIds:[],
+                },
+                expressRemission:['原单减免', '补发减免', '全部减免'],
             },
             computed: {
                 tableClass() {
@@ -1221,7 +1235,7 @@
                     return new Array(...logistic_numbers);
                 },
                 groupProcessLogs(workOrder) {
-                    return workOrder.details.map(e => e.process_logs ? e.process_logs : []).reduce((a, b) => a = [...a, ...b], []).sort((pre, cur) => cur.id - pre.id);
+                    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')}}';
@@ -3444,6 +3458,7 @@
                     let data = {
                         id: worK_order_id,
                         content: document.getElementById('addWorkOrderProcessLogFormInput_' + work_order_detail_id).value,
+                        tag: document.getElementById(work_order_detail_id + '_log_check').value ? 1 : 0
                     };
                     this.waitingTempTip('处理中');
                     window.axios.post(url, data).then(res => {
@@ -3452,6 +3467,8 @@
                             this.pushProcessLog(res.data.data);
                             this.successTempTip('处理完成');
                             this.showAddDiv('addWorkOrderProcessLogForm' + work_order_detail_id);
+                            document.getElementById('addWorkOrderProcessLogFormInput_' + work_order_detail_id).value = '';
+                            document.getElementById(work_order_detail_id + '_log_check').value = false;
                             this.$forceUpdate();
                             return;
                         }
@@ -3525,6 +3542,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'
@@ -3787,6 +3805,70 @@
                 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)
+                    })
+
+                }
             },
         });
     </script>

+ 2 - 0
routes/apiLocal.php

@@ -305,6 +305,7 @@ Route::prefix('workOrder')->group(function(){
     Route::post('batchEnd','WorkOrderController@ownerBatchEndWorkOrderApi')->name('workOrder.owner.batchEndApi');               // 承运商处理标记
     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(){           // 拦截
@@ -362,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');                // 修改问题类型