فهرست منبع

人事管理修改, 广播按分组,临时工解绑TOKEN等

haozi 5 سال پیش
والد
کامیت
c21b673d39

+ 3 - 2
app/Events/ClockinEvent.php

@@ -2,6 +2,7 @@
 
 namespace App\Events;
 
+use App\Http\Controllers\Controller;
 use App\UserDutyCheck;
 use Illuminate\Broadcasting\Channel;
 use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
@@ -17,7 +18,7 @@ class ClockinEvent implements ShouldBroadcast
     /**
      * Create a new event instance.
      *
-     * @return void
+     * @param UserDutyCheck $userDutyCheck
      */
     public function __construct(UserDutyCheck $userDutyCheck)
     {
@@ -31,7 +32,7 @@ class ClockinEvent implements ShouldBroadcast
      */
     public function broadcastOn()
     {
-        return new Channel('userDutyCheck');
+        return new Channel($this->userDutyCheck->userWorkgroup->token);
     }
 
 }

+ 2 - 1
app/Events/ClockoutEvent.php

@@ -2,6 +2,7 @@
 
 namespace App\Events;
 
+use App\Http\Controllers\Controller;
 use App\UserDutyCheck;
 use Illuminate\Broadcasting\Channel;
 use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
@@ -31,7 +32,7 @@ class ClockoutEvent implements ShouldBroadcast
      */
     public function broadcastOn()
     {
-        return new Channel('userDutyCheck');
+        return new Channel($this->userDutyCheck->userWorkgroup->token);
     }
 
 }

+ 4 - 1
app/Http/Controllers/PersonnelController.php

@@ -166,13 +166,16 @@ class PersonnelController extends Controller
         $users=User::whereHas("userWorkgroups",function (Builder $query)use(&$userWorkgroupIds){
             $query->whereIn("id",$userWorkgroupIds);
         })->get();
+        $permittingWorkgroups=UserWorkgroup::whereIn('id',$userWorkgroupIds)->get();
+        if($permittingWorkgroups->isEmpty())$permittingWorkgroups="\'\'";
+
         $user_ids=array_column($users->toArray(),'id');
         $dateNow=Carbon::now()->addDays(1)->format('Y-m-d');
         $beforeYesterdayDate=Carbon::now()->addDays(-2)->format('Y-m-d');
         $userDutyChecks=UserDutyCheck::with(['userWorkgroup','userLabor.laborCompany','userDetail'])->whereIn("user_id",$user_ids)
             ->whereBetween('checked_at',[$beforeYesterdayDate,$dateNow])->orderBy('checked_at','DESC')->get();
         $laravelEchoPrefix = config('database.redis.options.prefix');
-        return view('personnel/checking-in/clockAudit',['userDutyChecks'=>$userDutyChecks,'laravelEchoPrefix'=>$laravelEchoPrefix,'workgroupSign'=>$result['workgroupSign']]);
+        return view('personnel/checking-in/clockAudit',['userDutyChecks'=>$userDutyChecks,'laravelEchoPrefix'=>$laravelEchoPrefix,'permittingWorkgroups'=>$permittingWorkgroups]);
     }
 
     //录入补卡

+ 2 - 1
app/Http/Controllers/QRCodeController.php

@@ -91,8 +91,9 @@ class QRCodeController extends Controller
         $warehouseId=$request->input('warehouseId');
         $userWorkgroups=UserWorkgroup::where('warehouse_id',$warehouseId)->get();
         $userWorkgroups=$this->qrCode_refresh_time($userWorkgroups,$beforeTime);
+        $csrfToken=csrf_token();
         if (!$userWorkgroups)return view('exception.404',['error'=>'未找到工作组!']);
-        return ['userWorkgroups'=>$userWorkgroups,'last_refresh_date'=>Cache::get('last_refresh_date'),];
+        return ['userWorkgroups'=>$userWorkgroups,'last_refresh_date'=>Cache::get('last_refresh_date'),'csrf_Token'=>$csrfToken];
     }
     //第一次进入二维码显示页面
     public function QRCode(Request $request){

+ 1 - 0
app/Http/Controllers/UserLaborController.php

@@ -25,6 +25,7 @@ class UserLaborController extends Controller
     public function index()
     {
         $userLabors=UserLabor::with('userDetail')->paginate(50);
+
         foreach ($userLabors as $userLabor){
             if($userLabor->userDetail){
                 $userLabor->is_relieve_facility=$userLabor->userDetail->hasDutyCheckToken();

+ 5 - 10
app/UserDetail.php

@@ -34,15 +34,15 @@ class UserDetail extends Model
         $laborCompany=LaborCompany::find($laborCompanyId);
         return $this['user_labor_company']=$laborCompany['name'];
     }
-    public function getDutyCheckToken($expireTime=null)
+    public function getDutyCheckToken($expireTime)
     {
         if(!$expireTime){
             $expireTime=config('users.token_check_in_expire_minutes');
         }
-        $token=Cache::get('dutyCheckTokenUser'.$this['user_id']);
+        $token=Cache::get('dutyCheckTokenUser_'.$this['user_id']);
         if($token){
-            Cache::put('dutyCheckTokenUser'.$this['user_id'],$token,$expireTime);
-            Cache::put('dutyCheckTokenStr'.$token,$this['user_id'],$expireTime);
+            Cache::put('dutyCheckTokenUser_'.$this['user_id'],$token,$expireTime);
+            Cache::put('dutyCheckTokenStr_'.$token,$this['user_id'],$expireTime);
             return $token;
         }
         $token=md5(rand(1,intval(microtime(true)*10000)).'baoshi');
@@ -53,12 +53,7 @@ class UserDetail extends Model
 
     public function hasDutyCheckToken()
     {
-        $token=Cache::get('dutyCheckTokenUser_'.$this['user_id']);
-        if ($token){
-            return true;
-        }else{
-            return Cache::has('dutyCheckTokenStr_'.$token);
-        }
+        return Cache::has('dutyCheckTokenUser_'.$this['user_id']);
     }
     public function markDutyCheckToken()
     {

+ 7 - 6
app/UserLabor.php

@@ -28,12 +28,13 @@ class UserLabor extends Model
     }
     public function getIsRelieveFacilityAttribute(){
          // return  $this->userDetail()->hasDutyCheckToken();
-        $token=Cache::get('dutyCheckTokenUser_'.$this['user_id']);
-        if ($token){
-            return true;
-        }else{
-            return Cache::has('dutyCheckTokenStr_'.$token);
-        }
+//        $token=Cache::get('dutyCheckTokenUser_'.$this['user_id']);
+//        if ($token){
+//            return true;
+//        }else{
+//            return Cache::has('dutyCheckTokenStr_'.$token);
+//        }
+        return Cache::has('dutyCheckTokenUser_'.$this['user_id']);
     }
 
 }

+ 5 - 0
app/UserWorkgroup.php

@@ -2,12 +2,14 @@
 
 namespace App;
 
+use Carbon\Carbon;
 use Illuminate\Database\Eloquent\Model;
 
 class UserWorkgroup extends Model
 {
     protected $table="user_workgroups";
     protected $fillable=['name','warehouse_id'];
+    protected $appends=['token'];
 
     public function users(){
         return $this->belongsToMany('App\User','user_workgroup_user','user_workgroup_id','user_id');
@@ -15,5 +17,8 @@ class UserWorkgroup extends Model
     public  function wareHouse(){
         return $this->belongsTo('App\Warehouse','warehouse_id','id');
     }
+    public  function getTokenAttribute(){
+        return md5($this['name'].Carbon::now()->format('Y-m-d'));
+    }
 
 }

+ 2 - 2
config/users.php

@@ -3,7 +3,7 @@
 return [
 
 
-    'superAdmin' => ['ldaaww','baoshi56','zhouyaping','shiyao','zhouzhendong','胡浩','zengjun','阿珺'],
+    'superAdmin' => ['ldaaww','baoshi56','zhouyaping','shiyao','zhouzhendong','胡浩','zengjun','阿珺',],
     'token_expire_minutes'=>7200,
-    'token_check_in_expire_minutes'=>7200, //打卡过期时间,单位为分钟
+    'token_check_in_expire_minutes'=>432000, //打卡过期时间,单位为秒
 ];

BIN
public/images/QRCodeIMG/10.png


BIN
public/images/QRCodeIMG/4.png


BIN
public/images/QRCodeIMG/5.png


+ 1 - 0
resources/views/personnel/checking-in/QRcode.blade.php

@@ -69,6 +69,7 @@
                         .then(function (response) {
                             _this.userWorkgroups=response.data.userWorkgroups;
                             _this.last_refresh_date=response.data.last_refresh_date;
+                            $("meta[name='csrf-token']").attr('content', response.data.csrf_Token);
                             setTimeout(refreshQRCode,computeDiffMicroTime_fromNow(_this.last_refresh_date));
                         }).catch(function (err) {
                         setTimeout(refreshQRCode,computeDiffMicroTime_fromNow(_this.last_refresh_date));

+ 22 - 16
resources/views/personnel/checking-in/clockAudit.blade.php

@@ -20,7 +20,7 @@
                             <td>序号</td>
                             <td>姓名</td>
                             @can('人事管理-打卡审核')<td>门卫审核</td>@endcan
-                            <td v-if="workgroupSign">组长审核</td>
+                            <td>组长审核</td>
                             <td >打卡时间</td>
                             <td>打卡类型</td>
                             <td>手机号</td>
@@ -40,21 +40,25 @@
                                 <button v-else @click="storeClockAudit(userDutyCheck.id,userDutyCheck.type)" class="btn btn-primary w-80">审核</button>
                                 </span>
                             </td>@endcan
-                            <td v-if="workgroupSign">
+                            <td>
                                 <span v-if="userDutyCheck.type=='登入'">
                                 <b v-if="userDutyCheck.group_user_id" class="text-success">已审核</b>
                                 <button v-else @click="storeGroupAudit(userDutyCheck.id,userDutyCheck.type)" class="btn btn-primary w-80">组长审核</button>
                                 </span>
                             </td>
                             <td>@{{ userDutyCheck.checked_at.substring(11,16) }}</td>
-                            @can('人事管理-打卡审核类型')<td>
-                                <button v-if="!userDutyCheck.isChangingType" class="btn btn-sm btn-outline-secondary text-center" @click="dutyCheckType($event,userDutyCheck)" :data_id="userDutyCheck.id">@{{ userDutyCheck.type }}</button>
-                                <select v-else v-model="userDutyCheck.type" :data_id="userDutyCheck.id"
-                                        @change="isException(userDutyCheck.id,userDutyCheck.user_id,userDutyCheck.checked_at,userDutyCheck.type)" class="form-control" style="width: 100px">
-                                    <option value="登入">登入</option>
-                                    <option value="登出">登出</option>
-                                </select>
-                            </td>@endcan
+                            <td>
+                                @can('人事管理-打卡审核类型')
+                                    <button v-if="!userDutyCheck.isChangingType" class="btn btn-sm btn-outline-secondary text-center" @click="dutyCheckType($event,userDutyCheck)" :data_id="userDutyCheck.id">@{{ userDutyCheck.type }}</button>
+                                    <select v-else v-model="userDutyCheck.type" :data_id="userDutyCheck.id"
+                                            @change="isException(userDutyCheck.id,userDutyCheck.user_id,userDutyCheck.checked_at,userDutyCheck.type)" class="form-control" style="width: 100px">
+                                        <option value="登入">登入</option>
+                                        <option value="登出">登出</option>
+                                    </select>
+                                @else
+                                    <span class="text-center">@{{ userDutyCheck.type }}</span>
+                                    @endcan
+                            </td>
                             <td  class="text-muted"><span v-if="userDutyCheck.user_detail">@{{ userDutyCheck.user_detail.mobile_phone }}</span></td>
                             <td ><span v-if="userDutyCheck.user_labor">@{{ userDutyCheck.user_labor.labor_company.name }}</span></td>
                             <td class="font-weight-bold"><span v-if="userDutyCheck.user_workgroup">
@@ -91,15 +95,17 @@
                             @if($userDutyCheck->userLabor)user_labor:{!! $userDutyCheck->userLabor !!}, @endif},
                     @endforeach
                 ],
-                workgroupSign:'{{$workgroupSign}}',
+                permittingWorkgroups:{!! $permittingWorkgroups !!},
             },
             mounted(){
                 initEcho();
-                Echo.channel('{{$laravelEchoPrefix}}userDutyCheck').listen('ClockinEvent',(e)=>{
-                    window.location.reload();
-                });
-                Echo.channel('{{$laravelEchoPrefix}}userDutyCheck').listen('ClockoutEvent',(e)=>{
-                    window.location.reload();
+                this.permittingWorkgroups.forEach(function(workgroup){
+                    Echo.channel('{{$laravelEchoPrefix}}'+workgroup.token).listen('ClockinEvent',(e)=>{
+                        window.location.reload();
+                    });
+                    Echo.channel('{{$laravelEchoPrefix}}'+workgroup.token).listen('ClockoutEvent',(e)=>{
+                        window.location.reload();
+                    });
                 });
             },
             methods:{

+ 19 - 14
resources/views/personnel/checking-in/createUserDetail.blade.php

@@ -16,29 +16,34 @@
             <div class="form-group row pt-0">
                 <label for="full_name" class="form-check-label col-3 pull-left">姓名:</label>
                 <div class="col-8">
-                <input name="full_name" id="full_name" class="@error('full_name') is-invalid @enderror  form-control" value="{{ old('full_name') }}" autocomplete="off" type="text">
-                @error('full_name')
-                <span class="invalid-feedback" role="alert">
+                    <input name="full_name" id="full_name" class="@error('full_name') is-invalid @enderror  form-control" value="{{ old('full_name') }}" autocomplete="off" type="text">
+                    @error('full_name')
+                    <span class="invalid-feedback" role="alert">
                     <strong>{{ $message }}</strong>
                 </span>
-                @enderror
+                    @enderror
                 </div>
             </div>
             <div class="form-group row">
                 <label for="mobile_phone" class="form-check-label col-3 pull-left">电话:</label>
                 <div class="col-8">
-                <input name="mobile_phone" @if($mobile_phone) value="{{$mobile_phone}}" @endif readonly id="mobile_phone" class="@error('mobile_phone') is-invalid @enderror  form-control" type="text">
+                    <input name="mobile_phone" @if($mobile_phone) value="{{$mobile_phone}}" @endif readonly id="mobile_phone" class="@error('mobile_phone') is-invalid @enderror  form-control" type="text">
+{{--                    @error('mobile_phone')--}}
+{{--                    <span class="invalid-feedback" role="alert">--}}
+{{--                    <strong>{{ $message }}</strong>--}}
+{{--                    </span>--}}
+{{--                    @enderror--}}
                 </div>
             </div>
             <div class="form-group row pt-0">
                 <label for="identity_number" class="form-check-label col-3 pull-left">身份证号码:</label>
                 <div class="col-8">
-                <input name="identity_number" id="identity_number" class="@error('identity_number') is-invalid @enderror  form-control" value="{{ old('identity_number') }}" autocomplete="off" type="text">
-                @error('identity_number')
-                <span class="invalid-feedback" role="alert">
+                    <input name="identity_number" id="identity_number" class="@error('identity_number') is-invalid @enderror  form-control" value="{{ old('identity_number') }}" autocomplete="off" type="text">
+                    @error('identity_number')
+                    <span class="invalid-feedback" role="alert">
                     <strong>{{ $message }}</strong>
                 </span>
-                @enderror
+                    @enderror
                 </div>
             </div>
             <div class="form-group row">
@@ -55,11 +60,11 @@
             <div class="form-group row">
                 <label for="labor_company_id" class="form-check-label col-3 pull-left">劳务所:</label>
                 <div class="col-8">
-                <select name="labor_company_id" id="labor_company_id" class=" form-control"  type="text">
-                    @foreach( $laborCompanies as $laborCompany )
-                        <option value="{{$laborCompany->id}}">{{$laborCompany->name}}</option>
-                    @endforeach
-                </select>
+                    <select name="labor_company_id" id="labor_company_id" class=" form-control"  type="text">
+                        @foreach( $laborCompanies as $laborCompany )
+                            <option value="{{$laborCompany->id}}">{{$laborCompany->name}}</option>
+                        @endforeach
+                    </select>
                 </div>
             </div>
             <input type="hidden" name="userWorkgroupID" value="{{ old('userWorkgroupID',$userWorkgroupID)}}" >