clockAudit.blade.php 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. @extends('layouts.app')
  2. @section('title')打卡审核@endsection
  3. @section('content')
  4. <div id="nav2">
  5. @component('personnel.menu')@endcomponent
  6. @component('personnel.checking-in.menuChecking-in')@endcomponent
  7. </div>
  8. <div class="container-fluid" id="list">
  9. <div class="card col-md-10 offset-md-1">
  10. <div class="card-body p-0">
  11. <table class="table table-striped table-bordered text-nowrap">
  12. <thead class="thead-light">
  13. <tr>
  14. <td>序号</td>
  15. <td>姓名</td>
  16. <td>手机号</td>
  17. <td>劳务所</td>
  18. <td>打卡时间</td>
  19. <td>打卡类型</td>
  20. @can('人事管理-打卡审核')<td>操作</td>@endcan
  21. <td>工作组</td>
  22. <td v-if="workgroupSign">组长审核</td>
  23. <td>异常</td>
  24. <td>合计工时</td>
  25. </tr>
  26. </thead>
  27. <tbody>
  28. <tr v-for="(userDutyCheck,i) in userDutyChecks">
  29. <td>@{{ i+1 }}</td>
  30. <td ><span v-if="userDutyCheck.user_detail">@{{ userDutyCheck.user_detail.full_name }}</span></td>
  31. <td class="text-muted"><span v-if="userDutyCheck.user_detail">@{{ userDutyCheck.user_detail.mobile_phone }}</span></td>
  32. <td ><span v-if="userDutyCheck.user_detail">@{{ userDutyCheck.user_detail.user_labor_company }}</span></td>
  33. <td>@{{ userDutyCheck.checked_at }}</td>
  34. <td>
  35. <div v-if="userDutyCheck.verify_user_id" class="text-center">@{{ userDutyCheck.type }}</div>
  36. <select v-else v-model="userDutyCheck.type" @change="isException(userDutyCheck.id,userDutyCheck.user_id,userDutyCheck.checked_at,userDutyCheck.type)" class="form-control" style="width: 100px">
  37. <option value="登入">登入</option>
  38. <option value="登出">登出</option>
  39. </select>
  40. </td>
  41. @can('人事管理-打卡审核')<td>
  42. <b v-if="userDutyCheck.verify_user_id" class="text-success">已审核</b>
  43. <button v-else @click="storeClockAudit(userDutyCheck.id,userDutyCheck.type)" class="btn btn-primary w-80">审核</button>
  44. </td>@endcan
  45. <td class="font-weight-bold"><span v-if="userDutyCheck.user_detail.user.user_workgroups&&userDutyCheck.user_detail.user.user_workgroups.length>0">
  46. @{{ userDutyCheck.user_detail.user.user_workgroups[0].name }}</span></td>
  47. <td v-if="workgroupSign">
  48. <b v-if="userDutyCheck.group_user_id" class="text-success">已审核</b>
  49. <button v-else @click="storeGroupAudit(userDutyCheck.id,userDutyCheck.type)" class="btn btn-primary w-80">组长审核</button>
  50. </td>
  51. <td>@{{ userDutyCheck.exception }}</td>
  52. <td>@{{ userDutyCheck.duration_man_hour }}</td>
  53. </tr>
  54. </tbody>
  55. </table>
  56. </div>
  57. </div>
  58. </div>
  59. @endsection
  60. @section('lastScript')
  61. <script>
  62. new Vue({
  63. el:"#list",
  64. data:{
  65. userDutyChecks:[
  66. @foreach($userDutyChecks as $userDutyCheck)
  67. {id:'{{$userDutyCheck->id}}',user_id:'{{$userDutyCheck->user_id}}',checked_at:'{{$userDutyCheck->checked_at}}',
  68. type:'{{$userDutyCheck->type}}',verify_user_id:'{{$userDutyCheck->verify_user_id}}',group_user_id:'{{$userDutyCheck->group_user_id}}',
  69. exception:'',duration_man_hour:'',@if($userDutyCheck->userDetail)user_detail:{!! $userDutyCheck->userDetail !!} @endif },
  70. @endforeach
  71. ],
  72. workgroupSign:'{{$workgroupSign}}',
  73. },
  74. methods:{
  75. store(id,type,url){
  76. },
  77. storeClockAudit(id,type){
  78. let url='{{url("personnel/checking-in/storeClockAudit")}}';
  79. let _this=this;
  80. axios.post(url,{id:id,type:type})
  81. .then(function (response) {
  82. if (!response.data.success){
  83. tempTip.setDuration(3000);
  84. tempTip.show(response.data.data);
  85. return;
  86. }
  87. _this.userDutyChecks.every(function (userDutyCheck) {
  88. if (userDutyCheck.id==id){
  89. userDutyCheck.verify_user_id=response.data.data;
  90. tempTip.setDuration(3000);
  91. tempTip.showSuccess('审核通过!');
  92. return false
  93. }
  94. return true;
  95. });
  96. }).catch(function (err) {
  97. tempTip.setDuration(4000);
  98. tempTip.show('审核失败!网络错误:'+err);
  99. });
  100. },
  101. storeGroupAudit(id,type){
  102. let url='{{url("personnel/checking-in/storeGroupAudit")}}';
  103. let _this=this;
  104. axios.post(url,{id:id,type:type})
  105. .then(function (response) {
  106. if (!response.data.success){
  107. tempTip.setDuration(3000);
  108. tempTip.show(response.data.data);
  109. return;
  110. }
  111. _this.userDutyChecks.every(function (userDutyCheck) {
  112. if (userDutyCheck.id==id){
  113. userDutyCheck.group_user_id=response.data.data;
  114. tempTip.setDuration(3000);
  115. tempTip.showSuccess('审核通过!');
  116. return false
  117. }
  118. return true;
  119. });
  120. }).catch(function (err) {
  121. tempTip.setDuration(4000);
  122. tempTip.show('审核失败!网络错误:'+err);
  123. });
  124. },
  125. isException(id,user_id,checked_at,type){
  126. let _this=this;
  127. axios.post('{{url("personnel/checking-in/isException")}}',{id:id,user_id:user_id,checked_at:checked_at,type:type})
  128. .then(function (response) {
  129. _this.userDutyChecks.every(function (userDutyCheck) {
  130. if (userDutyCheck.id==id){
  131. userDutyCheck.exception=response.data.exception;
  132. userDutyCheck.duration_man_hour=response.data.duration_man_hour;
  133. return false
  134. }
  135. return true;
  136. });
  137. }).catch(function (err) {
  138. tempTip.setDuration(4000);
  139. tempTip.show('校验失败!网络错误:'+err);
  140. });
  141. }
  142. },
  143. });
  144. </script>
  145. @endsection