ajun 4 лет назад
Родитель
Сommit
df72819ae7

+ 22 - 16
app/Filters/WorkOrderFilters.php

@@ -3,25 +3,27 @@
 
 namespace App\Filters;
 
+use App\Order;
+use App\Traits\ModelSearchWay;
 use App\WorkOrder;
-use App\WorkOrderChildType;
 use Illuminate\Http\Request;
 
 class WorkOrderFilters
 {
+    use ModelSearchWay;
+
     protected $request;
     protected $queryBuilder;
     protected $filters = [
-        'ids','creator','name','remake','created_at_start','created_at_end','review_at_start','review_at_end','reviewer','word_order_types','word_order_child_types'
+        'ids','creator','name','remake','created_at_start','created_at_end','review_at_start','review_at_end','reviewer','word_order_types','word_order_child_types','logistic'
     ];
     protected $array_filter;
     protected $params = [
-        'ids','creator','name','remake','created_at_start','created_at_end','review_at_start','review_at_end','reviewer','word_order_types','word_order_child_types'
+        'ids','creator','name','remake','created_at_start','created_at_end','review_at_start','review_at_end','reviewer','word_order_types','word_order_child_types','logistic'
     ];
 
     protected $workOrderTypeQuery;
-
-    protected $workOrderChildQuery;
+    protected $orderQuery;
 
     public function __construct(Request $request)
     {
@@ -51,11 +53,17 @@ class WorkOrderFilters
 
     public function beforeApply()
     {
-        if($this->workOrderChildQuery)
-            $this->queryBuilder->whereIn('work_order_type_id',$this->workOrderChildQuery);
+        if ($this->orderQuery) {
+            $this->queryBuilder->whereIn('order_id',$this->getOrderQuery());
+        }
+    }
 
-        if ($this->workOrderTypeQuery)
-            $this->queryBuilder->whereIn('work_order_child_id',$this->workOrderChildQuery);
+    public function getOrderQuery()
+    {
+        if (!$this->orderQuery){
+            $this->orderQuery = Order::query()->select('id');
+        }
+        return $this->orderQuery;
     }
 
     public function id($id)
@@ -110,13 +118,11 @@ class WorkOrderFilters
             $this->workOrderTypeQuery->whereIn('id',$word_order_types);
         else $this->workOrderTypeQuery->where('id',$word_order_types);
     }
-    // 子类型
-    public function word_order_child_types($word_order_child_types)
+
+
+    public function logistic($logistic)
     {
-        if(!$this->workOrderTypeQuery)
-            $this->workOrderChildQuery = WorkOrderChildType::query()->select('id');
-        if (is_array($word_order_child_types))
-            $this->workOrderChildQuery->whereIn('id',$word_order_child_types);
-        else $this->workOrderChildQuery->where('id',$word_order_child_types);
+        $orderQuery = $this->getOrderQuery()->whereIn('id',WorkOrder::query()->select('order_id'));
+        $this->searchWay($orderQuery,$logistic,'logistic_id');
     }
 }

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

@@ -32,7 +32,7 @@ class WorkOrderController extends Controller
 
         $workOrders = WorkOrder::query()->filter($filters)->with(['type', 'creator', 'order' => function ($query) {
                 /** @var $query Builder */
-                $query->with('packages', 'issue');
+                $query->with('packages', 'issue','logistic');
             }, 'reviewer'])->orderByDesc('created_at', 'grad', 'status')->paginate($request['paginate'] ?? 50);
         $logistics = Logistic::all();
         return view('order.workOrder.index', compact('workOrders','logistics'));

+ 2 - 2
app/Services/WorkOrderService.php

@@ -61,7 +61,7 @@ class WorkOrderService
         $wordOrder->update(['reviewer_id' => Auth::user()['id'], 'review_at' => Carbon::now(), 'status' => 2,]);
         $wordOrder = WorkOrder::query()->with(['type', 'creator', 'order' => function ($query) {
             /** @var $query Builder */
-            $query->with('packages', 'issue');
+            $query->with('packages', 'issue','logistic');
         }, 'reviewer'])->find($wordOrder['id']);
         return ['success' => true, 'data' => $wordOrder];
     }
@@ -98,7 +98,7 @@ class WorkOrderService
 
         $work_orders = WorkOrder::query()->with(['type', 'creator', 'order' => function ($query) {
                 /** @var $query Builder */
-                $query->with('packages', 'issue');
+            $query->with('packages', 'issue','logistic');
             }, 'reviewer'])
             ->where('outer_table_name', 'orders')
             ->whereIn('order_id', $order_ids)

+ 114 - 22
resources/views/order/workOrder/index.blade.php

@@ -7,11 +7,23 @@
                 <div id="form_div" style="min-width: 1220px;"></div>
                 <div class="form-inline mt-1" id="btn">
                     @can('订单管理-订单问题件生成')
-                       <span class="ml-1">
+                        <span class="ml-1">
                        <button type="button" class="btn btn-outline-dark btn-sm form-control-sm  tooltipTarget"
-                                @click="createOrderIssue(null,false)" style="background: #dad7e8;">生成问题件</button>
+                               @click="createOrderIssue(null,false)" style="background: #dad7e8;">生成问题件</button>
                        </span>
-                   @endcan
+                    @endcan
+                    @can('订单管理-订单问题件生成')
+                        <span class="ml-1">
+                       <button type="button" class="btn btn-outline-primary btn-sm form-control-sm  tooltipTarget"
+                               @click="interceptMessage()">拦截导出</button>
+                       </span>
+                    @endcan
+                    @can('订单管理-订单问题件生成')
+                        <span class="ml-1">
+                       <button type="button" class="btn btn-outline-primary btn-sm form-control-sm  tooltipTarget"
+                               @click="modificationMessage()">信息修改导出</button>
+                       </span>
+                    @endcan
                 </div>
 
                 <div>
@@ -44,10 +56,7 @@
                                     </template>
                                 </td>
                                 <td>@{{item.type ? item.type.name : '' }}</td>
-                                <td class="text-center">@{{ item.status }}</td>
-                                <td class="text-center">@{{ item.creator.name }}</td>
-                                <td class="text-center">@{{ item.created_at }}</td>
-                                <td class="text-center">@{{ item.remark }}</td>
+                                <td>@{{item.order ? (item.order.logistic ? item.order.logistic.name : '') : '' }}</td>
                                 <td class="text-center">
                                     <template v-if="item.order">
                                         <template v-if="item.order.packages && item.order.packages.length === 1">
@@ -73,6 +82,8 @@
 
                                     </template>
                                 </td>
+                                <td class="text-center">@{{ item.remark }}</td>
+                                <td class="text-center">@{{ item.status }}</td>
                                 <td class="text-center">
                                     <template v-if="item.review_at">
                                         <div v-if="item.order && item.order.packages">
@@ -87,9 +98,12 @@
                                                         </template>
                                                     </div>
                                                     <div v-else>
-                                                        @{{ package.transfer_status[0]['accept_time']+':'+package.transfer_status[0]['accept_address'] }}
+                                                        @{{
+                                                        package.transfer_status[0]['accept_time']+':'+package.transfer_status[0]['accept_address']
+                                                        }}
                                                     </div>
-                                                    <button class="btn btn-sm btn-outline-primary" v-if="selectOrderPackage !== package.id"
+                                                    <button class="btn btn-sm btn-outline-primary"
+                                                            v-if="selectOrderPackage !== package.id"
                                                             @click="selectOrderPackage = package.id">展开
                                                     </button>
                                                     <button class="btn btn-sm btn-outline-primary" v-else
@@ -100,20 +114,26 @@
                                         </div>
                                     </template>
                                 </td>
+                                <td class="text-center">@{{ item.creator.name }}</td>
+                                <td class="text-center">@{{ item.created_at }}</td>
                                 <td>@{{ item.reviewer ? item.reviewer.name : ''}}</td>
                                 <td>@{{ item.review_at }}</td>
                                 <td class="text-center">
 
                                     @can('订单管理-订单问题件生成')
-                                        <template v-if="item.type && item.type.name === '订单拦截' && item.status !== '已处理' ">
-                                            <button class="btn btn-sm btn-outline-primary" @click="createOrderIssue(item,true)" v-if="item.order && item.order.issue === null">
+                                        <template
+                                            v-if="item.type && item.type.name === '订单拦截' && item.status !== '已处理' ">
+                                            <button class="btn btn-sm btn-outline-primary"
+                                                    @click="createOrderIssue(item,true)"
+                                                    v-if="item.order && item.order.issue === null">
                                                 生成问题件
                                             </button>
                                         </template>
                                     @endcan
 
                                     @can('订单管理-工单处理-审核')
-                                        <button class="btn btn-sm btn-outline-success" v-if="item.status !== '已处理'" @click="review(item,i)">
+                                        <button class="btn btn-sm btn-outline-success" v-if="item.status !== '已处理'"
+                                                @click="review(item,i)">
                                             审核
                                         </button>
                                     @endcan
@@ -141,7 +161,9 @@
                 form: null,
                 logistics: [
                     @foreach($logistics as $logistic)
-                    {name:{{$logistic->id}}, value: '{{$logistic->name}}'},
+                    {
+                        name: {{$logistic->id}}, value: '{{$logistic->name}}'
+                    },
                     @endforeach
                 ],
                 selectOrderPackage: null,
@@ -155,7 +177,7 @@
                     {
                         name: 'logistic',
                         type: 'select_multiple_select',
-                        data:this.logistics,
+                        data: this.logistics,
                         tip: ['输入关键词快速定位下拉列表,回车确定', '选择要显示的承运商'],
                         placeholder: ['承运商', '定位或多选承运商']
                     },
@@ -171,12 +193,13 @@
                     {name: 'no', value: '序号', neglect: true},
                     {name: 'grad', value: '工单等级'},
                     {name: 'type', value: '相关类型'},
+                    {name: 'logisticName', value: '承运商'},
+                    {name: 'logisticNumber', value: '快递单号'},
+                    {name: 'workOrderInfo', value: '问题描述'},
                     {name: 'status', value: '状态', neglect: true},
+                    {name: 'Info', value: '物流跟踪信息', neglect: true},
                     {name: 'creator', value: '创建人'},
                     {name: 'submit_at', value: '提交时间'},
-                    {name: 'workOrderInfo', value: '问题描述'},
-                    {name: 'logisticNumber', value: '快递单号'},
-                    {name: 'Info', value: '物流跟踪信息', neglect: true},
                     {name: 'reviewer', value: '审核人'},
                     {name: 'review_at', value: '审核时间'},
                     {name: 'operation', value: '操作', neglect: true},
@@ -245,11 +268,11 @@
 
                     window.axios.post(url, data).then(res => {
                         if (res.data.success) {
-                            if(res.data.data ){
-                                $.each(res.data.data,(i,data)=>{
-                                    $.each(_this.workOrders,(index,item)=>{
-                                        if (item.id === data.id){
-                                            _this.$set(this.workOrders,index,data);
+                            if (res.data.data) {
+                                $.each(res.data.data, (i, data) => {
+                                    $.each(_this.workOrders, (index, item) => {
+                                        if (item.id === data.id) {
+                                            _this.$set(this.workOrders, index, data);
                                         }
                                     });
                                 });
@@ -263,7 +286,76 @@
                         window.tempTip.show(err)
                     });
                 },
+                getMessageWorkOrder(){
+                    let selected = checkData;
+                    if (!selected){
+                        window.tempTip.show('未选中任何信息');
+                        return null;
+                    }
+                    return this.workOrders.filter((item) =>{
+                        return selected.includes(item.id+'');
+                    });
+                },
+                interceptMessage() {
+                    let selectItems = this.getMessageWorkOrder();
+                    if (selectItems === null )return ;
+                    let zto_and_sf = '';
+                    let rest_logistic = '';
+                    selectItems.forEach(item=>{
+                        // 中通、顺丰
+                        if (item.order.logistic.code.includes('SF') ||item.order.logistic.code.includes('ZTO') ){
+                            item.order.packages.forEach(node=>{
+                                zto_and_sf += node.logistic_number + '\n';
+                            });
+                        } else{
+                            let item_order_logistic_name = item.order.logistic.name;
+                            let item_order_adder = item.order.consignee_name + ' '
+                                + item.order.consignee_phone + ' '
+                                + item.order.province + ' ' + item.order.city + ' ' + item.order.district + ' ' + item.order.address;
+                            item.order.packages.forEach(node=>{
+                                rest_logistic += item_order_logistic_name +' ' + node.logistic_number + ' '+item_order_adder + '——拦截\n';
+                            });
+                        }
+                    });
+                    let text = zto_and_sf.trim('\n') + '——拦截' + '\n';
+                    text += rest_logistic;
+                    this.copyText(text);
+                },
+                modificationMessage(){
+                    let selectItems = this.getMessageWorkOrder();
+                    if (selectItems === null) return ;
+                    let zto = '';
+                    let sf = '';
+                    let rest_logistic = '';
+                    selectItems.forEach(item=>{
+                        let logistic_code = item.order.logistic.code;
+                        item.order.packages.forEach(node=> {
+                            if (logistic_code.includes('SF')) { // 顺丰订单
+                                sf += node.logistic_number +' 改信息: ' + item.remark + ',运费到付或月结'+'\n';
+                            } else if (logistic_code.includes('ZTO')){
+                                zto += node.logistic_number + ' 改信息' +item.remark+'\n';
+                            } else {
 
+                            }
+                        });
+                    });
+                },
+                copyText(text){
+                    let ele = document.querySelector('#copy_text');
+                    if (ele == null ){
+                        ele = document.createElement("textarea");
+                        ele.setAttribute('id','copy_text')
+                        ele.style.opacity=0;
+                        document.querySelector('body').append(ele);
+                    }
+                    try {
+                        $("#copy_text").text(text).select().focus();
+                        document.execCommand("Copy");
+                        tempTip.showSuccess('复制成功')
+                    } catch (e) {
+                        tempTip.showSuccess('复制失败:' + e)
+                    }
+                }
             },
         });
     </script>