Bläddra i källkod

Merge branch 'zengjun' of ssh://was.baoshi56.com:10022/var/git/bswas

LD 4 år sedan
förälder
incheckning
ddf872ebca

+ 18 - 12
app/Http/Controllers/DischargeTaskController.php

@@ -2,23 +2,25 @@
 
 namespace App\Http\Controllers;
 
+use App\Authority;
 use App\Components\AsyncResponse;
 use App\Facilitator;
 use App\DischargeTask;
 use App\Filters\DischargeTaskFilters;
 use App\Http\Requests\DischargeTask\DischargeTaskRequest;
-use App\Imports\CommodityImport;
 use App\Imports\DischargeTaskImport;
 use App\Owner;
-use App\Services\common\ExportService;
+use App\Role;
 use App\Services\OwnerService;
+use App\Services\UserService;
+use App\User;
 use App\Warehouse;
 use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Cache;
 use Illuminate\Support\Facades\Gate;
 use Maatwebsite\Excel\Facades\Excel;
 use Oursdreams\Export\Export;
-use function Sodium\compare;
 
 class DischargeTaskController extends Controller
 {
@@ -30,18 +32,22 @@ class DischargeTaskController extends Controller
         if (!Gate::allows('人事管理-卸货-查询')) {
             return redirect(url('/'));
         }
-        if(Gate::allows('人事管理-卸货-货主可见全部')){
+        if (Gate::allows('人事管理-卸货-货主可见全部')) {
             $owners = Owner::query()->get();
             $dischargeTasks = DischargeTask::query()->with(['facilitator', 'owner', 'warehouse'])->filter($filters)->orderByDesc('income_at')->paginate($request['paginate'] ?? 50);
-        }else{
+        } else {
             $owners = app(OwnerService::class)->getAuthorizedOwners();
-            $dischargeTasks = DischargeTask::query()->with(['facilitator', 'owner', 'warehouse'])->filter($filters)->whereIn('owner_id',data_get($owners,'*.id'))->orderByDesc('income_at')->paginate($request['paginate'] ?? 50);
+            $dischargeTasks = DischargeTask::query()->with(['facilitator', 'owner', 'warehouse'])->filter($filters)->whereIn('owner_id', data_get($owners, '*.id'))->orderByDesc('income_at')->paginate($request['paginate'] ?? 50);
+        }
+        $roles = Role::query()->where('name','like','人事%')->get();
+        $personnel = app(UserService::class)->hasRoles(Auth::user(),$roles);
+        if(array_search(Auth::user()["name"],config("users.superAdmin"))!==false){
+            $personnel = true;
         }
-
         $warehouses = Warehouse::query()->select('id', 'name')->get();
         $facilitators = Facilitator::query()->select('name', 'id')->get();
 
-        return view('personnel.discharge.task.index', compact('dischargeTasks', 'owners', 'facilitators', 'warehouses'));
+        return view('personnel.discharge.task.index', compact('dischargeTasks', 'owners', 'facilitators', 'warehouses','personnel'));
     }
 
     // 结算报表
@@ -125,11 +131,11 @@ class DischargeTaskController extends Controller
     {
         $this->gate('人事管理-卸货-查询');
 
-        if(Gate::allows('人事管理-卸货-货主可见全部')){
+        if (Gate::allows('人事管理-卸货-货主可见全部')) {
             $dischargeTasks = DischargeTask::query()->with(['Facilitator', 'owner'])->filter($filters)->orderByDesc('id')->get();
-        }else{
+        } else {
             $owners = app(OwnerService::class)->getAuthorizedOwners();
-            $dischargeTasks = DischargeTask::query()->with(['Facilitator', 'owner'])->filter($filters)->whereIn('owner_id',data_get($owners,'*.id'))->orderByDesc('id')->get();
+            $dischargeTasks = DischargeTask::query()->with(['Facilitator', 'owner'])->filter($filters)->whereIn('owner_id', data_get($owners, '*.id'))->orderByDesc('id')->get();
         }
 
         $row = ['日期', '客户名称', '作业名称', '入库单号', '数量', '单位', '单价', '收费', '状态', '备注'];
@@ -165,7 +171,7 @@ class DischargeTaskController extends Controller
 
         $extension = $request->file()['file']->getClientOriginalExtension();
         if (in_array($extension, ['xlsx', 'xlsm', 'xltx', 'xltm', 'xls', 'xlt', 'ods', 'ots', 'slk', 'xml', 'gnumeric', 'htm', 'html', 'csv', 'tsv']))
-            return ['success' => false,'message'=>'请检查导入文件是否符合要求'];
+            return ['success' => false, 'message' => '请检查导入文件是否符合要求'];
         $extension[0] = strtoupper($extension[0]);
         try {
             Excel::import(new DischargeTaskImport(), $request->file()['file']->path(), null, $extension);

+ 19 - 13
app/Http/Controllers/RejectedController.php

@@ -275,21 +275,27 @@ class RejectedController extends Controller
         app('LogService')->log(__METHOD__,__FUNCTION__,json_encode($request->toArray()),Auth::user()['id']);
         return ['success'=>'false','fail_info'=>'数据更新失败'];
     }
-    public function cancelCheck(Request $request)
+
+    public function cancelCheckApi(Request $request): array
     {
-        if(!Gate::allows('退货管理-审核')){ return ['success'=>'false','fail_info'=>"没有权限"]; }
-        $rejected=RejectedBill::query()->find($request->input('id')??'');
-        if ($rejected){
-            $rejected->is_checked=0;
-            $rejected->checked_numbers=null;
-            $re=$rejected->update();
-            if ($re){
-                return ['success'=>'true','id'=>$request->input('id')];
-            }
-        }
-        app('LogService')->log(__METHOD__,__FUNCTION__,json_encode($request->toArray()),Auth::user()['id']);
-        return ['success'=>'false','fail_info'=>'数据更新失败'];
+        if(!Gate::allows('退货管理-审核')) return ['success'=>'false','fail_info'=>"没有权限"];
+
+        if (!$request->has('ids'))
+            return ['success'=>'false','fail_info'=>"没有选中对应的参数"];
+
+        $rejected = RejectedBill::query()->find($request->input('ids'));
+
+        if (!$rejected)
+            return ['success'=>'false','fail_info'=>'对应的退货单不存在'];
+
+        if (RejectedBill::query()->whereIn('id',$request->input('ids'))->update(['is_checked' => 0, 'checked_numbers' => null]))
+            return ['success'=>'true', 'data' => $rejected->map(function($item){
+                return $item->id;
+            })];
+
+        return ['success'=>'true', 'fail_info' => '刷新当前页面重试'];
     }
+
     public function ajaxCheckAll(Request $request)
     {
         if(!Gate::allows('退货管理-审核')){ return ['success'=>'false','fail_info'=>"没有权限"];  }

+ 10 - 3
app/Services/DischargeTaskService.php

@@ -2,11 +2,12 @@
 
 namespace App\Services;
 
-use App\Facilitator;
+use App\Role;
 use App\Traits\ServiceAppAop;
 use App\DischargeTask;
 use Carbon\Carbon;
 use Illuminate\Database\Eloquent\Collection;
+use Illuminate\Support\Facades\Auth;
 
 class DischargeTaskService
 {
@@ -57,12 +58,18 @@ class DischargeTaskService
         unset($param['owner'],$param['income_at']);
 
         if ($param['id']) unset($param['id']);
-        if ($dischargeTask->status >= 1) return ['success' => false, 'message' => '当前任务状态不可修改'];
+
+        $roles = Role::query()->where('name','like','人事%')->get();
+        $personnel = app(UserService::class)->hasRoles(Auth::user(),$roles);
+        if(array_search(Auth::user()["name"],config("users.superAdmin"))!==false){
+            $personnel = true;
+        }
+        if ($dischargeTask->status >= 1 && $personnel == false) return ['success' => false, 'message' => '当前任务状态不可修改'];
         if (empty($param['expenditure_at'])) $param['expenditure_at'] = now();
         if (empty($param['status'])) $param['status'] = 1;
 
         $param['expenditure_total_cost'] = $param['expenditure_unit_price'] * $param['expenditure_amount'];
-
+        // Authority
         $bool = $dischargeTask->update($param);
 
         if ($bool == 1) {

+ 1 - 1
app/Services/OrderPackageCommoditySerialNumberService.php

@@ -158,7 +158,7 @@ class OrderPackageCommoditySerialNumberService
         $created_At = Carbon::now()->format(Carbon::DEFAULT_TO_STRING_FORMAT);
         return [
             'order_package_commodity_id' => $orderPackageCommodity['id'],
-            'serial_number' => $oracleDocOrderSubSerialNo['subserialno'],
+            'serial_number' => $oracleDocOrderSubSerialNo['serialno'] . '/' . $oracleDocOrderSubSerialNo['subserialno'],
             'created_at' => $created_At,
             'updated_at' => $created_At
         ];

+ 43 - 0
database/migrations/2021_06_18_093536_add__authority_discharge_task_authority.php

@@ -0,0 +1,43 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class AddAuthorityDischargeTaskAuthority extends Migration
+{
+
+    private $name = '人事管理-卸货-成本可见';
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        $authority = \App\Authority::query()->where('alias_name','卸货')->first();
+        $saveAuthority =  \App\Authority::query()->firstOrCreate(['alias_name' => $this->name],['name' => '卸货人事可见','parent_id' => $authority['id'] ?? '']);
+
+        $roles = \App\Role::query()->where('name','like','人事%')->get();
+        foreach ($roles as $role) {
+            $role->authorities()->attach($saveAuthority['id']);
+        }
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        $authority = \App\Authority::query()->where(['alias_name' => $this->name])->first();
+        if(!$authority) return ;
+
+        $roles = \App\Role::query()->where('name','like','人事%')->get();
+        foreach ($roles as $role) {
+            $role->detach($authority['id']);
+        }
+        $authority->delete();
+    }
+}

+ 3 - 1
resources/views/order/tracking/index.blade.php

@@ -208,7 +208,9 @@
                             <template v-if="trackOrder.commodities['serial_numbers'].length > 0">
                                     <template v-for="serialNumber in trackOrder.commodities['serial_numbers']">
                                         <transition name="fade">
-                                        <p v-show="trackOrder.displayed || trackOrder.commodities['serial_numbers'].length === 1">@{{ serialNumber.serial_number }}</p>
+                                        <p v-show="trackOrder.displayed || trackOrder.commodities['serial_numbers'].length === 1">
+                                            @{{ serialNumber.serial_number.indexOf("/") ? serialNumber.serial_number.split('/')[1] : serialNumber.serial_number }}
+                                        </p>
                                         </transition>
                                     </template>
                                 <p class="text-primary m-0 p-0" v-if="trackOrder.commodities.serial_numbers.length !== 1" @click="trackOrder.displayed = !trackOrder.displayed" style="cursor: pointer">@{{ trackOrder.displayed ? '点击隐藏' : '点击展开' }}</p>

+ 3 - 2
resources/views/personnel/discharge/task/_executeTask.blade.php

@@ -3,7 +3,7 @@
         <div class="modal-content">
             <div class="modal-header">
                 <h5 class="modal-title text-center text-uppercase">
-                    卸货任务装卸队指定
+                    卸货任务装卸队编辑
                 </h5>
                 <button type="button" class="close" data-dismiss="modal" @click="executingTack={},selectIndex = null,taskError={}">
                     <span>&times;</span>
@@ -23,7 +23,7 @@
                             </div>
                         </div>
                         <div class="col-sm-3">
-                            <input class="form-control" placeholder="输入装卸队进行选" @input="filterProviders($event)">
+                            <input class="form-control" placeholder="输入装卸队进行选" @input="filterProviders($event)">
                         </div>
                     </div>
 
@@ -66,6 +66,7 @@
                         </div>
                     </div>
 
+
                     <div class="form-group row">
                         <label for="executingTack-amount" class="col-sm-3 col-form-label text-right">备注</label>
                         <div class="col-sm-9 form-inline">

+ 12 - 1
resources/views/personnel/discharge/task/_table.blade.php

@@ -11,6 +11,10 @@
         <th>单位</th>
         <th>单价</th>
         <th>收费</th>
+        <template v-if="isPersonnel">
+            <th>成本单价</th>
+            <th>成本收费</th>
+        </template>
         <th>状态</th>
         <th>备注</th>
         <th>操作</th>
@@ -78,6 +82,10 @@
             </td>
             <td>@{{ dischargeTask.income_unit_price }}</td>
             <td>@{{ dischargeTask.income_total_cost }}</td>
+            @can('人事管理-卸货-成本可见')
+                <td>@{{ dischargeTask.expenditure_unit_price }}</td>
+                <td>@{{ dischargeTask.expenditure_total_cost }}</td>
+            @endcan
             <td>
                 @can('人事管理-卸货-编辑')
                     {{--  dischargeTask.status===3 完成时不可编辑状态 --}}
@@ -100,7 +108,10 @@
                 <button class="btn btn-sm btn-outline-primary" @click="showExecutingTaskModal(index,true,dischargeTask)" v-show="dischargeTask.status===0">指定服务商</button>
                 @endcan
                 @can('人事管理-卸货-编辑')
-                <button class="btn btn-sm btn-outline-primary" @click="showUpdateTaskModal(index,true,dischargeTask)" v-show="dischargeTask.status<=1">编辑</button>
+                    <button class="btn btn-sm btn-outline-primary" @click="showExecutingTaskModal(index,true,dischargeTask)" v-show="dischargeTask.status===1 && isPersonnel " >编辑服务商</button>
+                @endcan
+                @can('人事管理-卸货-编辑')
+                <button class="btn btn-sm btn-outline-primary" @click="showUpdateTaskModal(index,true,dischargeTask)" v-show="dischargeTask.status<=1 && !isPersonnel " >编辑</button>
                 @endcan
                 @can('人事管理-卸货-删除')
                 <button class="btn btn-sm btn-outline-danger" @click="deleteTask(index,dischargeTask)">删除</button>

+ 1 - 0
resources/views/personnel/discharge/task/index.blade.php

@@ -50,6 +50,7 @@
             el: "#list",
             data: {
                 dischargeTasks: {!! $dischargeTasks->toJson()!!}['data'],
+                isPersonnel:{!! $personnel  !!},
                 owners:{!! $owners !!},
                 ownerFilter: [],
                 facilitators:{!! $facilitators !!},

+ 20 - 35
resources/views/rejected/search/general.blade.php

@@ -45,8 +45,11 @@
                 @can('退货管理-编辑')
                     <a class="btn btn-sm btn-outline-dark" href="{{url('rejected/importRejectedNumber')}}" style="cursor: pointer">批量填充订单号</a>
                 @endcan
+
                 <button class="btn btn-sm ml-2 btn-primary" @click="copyLogisticNumber()">复制快递单号</button>
-                <table class="table table-striped table-sm table-bordered table-hover text-nowrap table-body td-min-width-80"  style="background: #fff;" id="table">
+                <button class="btn btn-sm btn-outline-dark" @click="cancelCheck">取消审核 </button>
+
+                    <table class="table table-striped table-sm table-bordered table-hover text-nowrap table-body td-min-width-80"  style="background: #fff;" id="table">
                     <tr v-for="(rejectedBill,i) in rejectedBills" :data-id="rejectedBill.id"  @click="selectTr===i+1?selectTr=0:selectTr=i+1" :class="selectTr===i+1?'focusing' : ''">
                         <td>
                             <label><input type="checkbox" :value="rejectedBill.id"/></label>
@@ -54,17 +57,13 @@
                         <td class="text-nowrap">
                             <span class="text-muted" style="opacity:0.7">@{{ i+1 }}</span> <span v-if="rejectedBill.order_issue_rejected_bill" class="badge badge-pill badge-danger">问题件</span>
                         </td>
-                        <td class="text-muted" @mouseover="showCancelBtn(rejectedBill)"
-                            @mouseleave="blankCancelBtn(rejectedBill)">
-                            <span class="text-center">
+                        <td class="text-muted text-center">
                             <span v-if="rejectedBill.is_checked==1">
-                                <span @click="cancelCheck(rejectedBill.id)" class="btn btn-sm btn-outline-secondary" v-if="rejectedBill.isShowCancelBtn">取消审核</span>
-                                <span  class="text-success" v-if="!(rejectedBill.isShowCancelBtn)">
+                                <span  class="text-success">
                                     <span class="fa fa-check-square" ></span> @{{ rejectedBill.checked_numbers }}
                                 </span>
                             </span>
                             <span v-else>未审核</span>
-                                </span>
                         </td>
                         <td class="" :class="[rejectedBill.is_finished==1?'text-success':'text-muted']">@{{rejectedBill.is_finished | yesNo}}</td>
                         <td class="" :class="[rejectedBill.is_loaded==1?'text-success':'text-muted']">
@@ -199,8 +198,6 @@
                 ],
                 selectTr:'',
                 upList:{},
-                cancelCheckedHover:null,
-                isShowCancelBtn:false,
             },
             mounted:function(){
                 $(".up").slideUp();
@@ -276,33 +273,21 @@
                 });
             },
             methods:{
-                showCancelBtn(a){
-                    a.isShowCancelBtn=true;
-                    this.$forceUpdate();
-                },
-                blankCancelBtn(a){
-                    a.isShowCancelBtn=false;
-                    this.$forceUpdate();
-                },
-                cancelCheck(id){
-                    let _this=this;
-                    let url= '{{url("rejected/index/cancelCheck")}}';
-                    axios.post(url,{'id':id}).then(function (response) {
-                        if(response.data.success){
-                           _this.rejectedBills.forEach(function (rejectedBill){
-                                if (rejectedBill.id==response.data.id){
-                                    rejectedBill.is_checked=0;
-                                }
-                           })
-                            tempTip.setDuration(2000);
-                            tempTip.showSuccess('取消审核成功');
-                        }else{
-                            tempTip.setDuration(3000);
-                            tempTip.show('取消审核失败!'+response.data.fail_info);
+                cancelCheck() {
+                    let url = '{{url("apiLocal/rejected/cancelCheck")}}';
+                    let data = {ids: checkData};
+                    window.tempTip.setDuration(2000);
+                    window.axios.post(url, data).then(res => {
+                        if (res.data.success) {
+                            this.rejectedBills.forEach(item => {
+                                if (res.data.data.includes(item.id)) item.is_checked = 0;
+                            });
+                            window.tempTip.showSuccess('取消审核成功!');
+                            return;
                         }
-                    }).catch(function (err) {
-                        tempTip.setDuration(3000);
-                        tempTip.show('取消审核失败!网络异常:'+err);
+                        window.tempTip.show(res.data.message ? res.data.message : '取消审核失败!');
+                    }).catch(err => {
+                        tempTip.show('取消审核失败!网络异常:' + err);
                     });
                 },
                 unfold(id){

+ 5 - 0
routes/apiLocal.php

@@ -22,6 +22,11 @@ Route::post('rejectedBill/apiConfirmBeStored', 'RejectedBillController@apiConfir
 Route::post('rejectedBill/seekOrder','RejectedBillController@seekOrder');
 Route::post('rejectedBill/importRejectedNumber','RejectedBillController@disposeImportApi');
 
+/** 退货 */
+Route::group(['prefix' => 'rejected' ],function(){
+    Route::post('cancelCheck','RejectedController@cancelCheckApi');
+});
+
 Route::post('logistic/numberFeatures/computeLogisticByNumber', 'LogisticNumberFeatureController@apiComputeLogisticByNumber');
 Route::post('logistic/logisticNumberReturnIsUnique', 'RejectedBillController@apiLogisticNumberReturnIsUnique');