clockAudit.blade.php 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314
  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 visible-on">
  10. <div class="card-body p-0">
  11. <table class="table table-striped table-bordered text-nowrap" v-if="userDutyCheckNows&&userDutyCheckNows.length>=1">
  12. <thead class="thead-light" >
  13. <tr>
  14. <th class="visible-md">日期</th>
  15. <td>序号</td>
  16. <td>姓名</td>
  17. @can('人事管理-打卡审核')<td>操作</td>@endcan
  18. <td v-if="workgroupSign">组长审核</td>
  19. <td >打卡时间</td>
  20. <td>打卡类型</td>
  21. <td>手机号</td>
  22. <td>劳务所</td>
  23. <td>工作组</td>
  24. <td>异常</td>
  25. <td>合计工时</td>
  26. </tr>
  27. </thead>
  28. <tbody>
  29. <tr v-for="(userDutyCheck,i) in userDutyCheckNows">
  30. <td v-if="userDutyCheck.checked_at" class="text-center font-weight-bold">@{{ userDutyCheck.checked_at.substring(0,10) }}</td>
  31. <td>@{{ i+1 }}</td>
  32. <td ><span v-if="userDutyCheck.user_detail">@{{ userDutyCheck.user_detail.full_name }}</span></td>
  33. @can('人事管理-打卡审核')<td>
  34. <b v-if="userDutyCheck.verify_user_id" class="text-success">已审核</b>
  35. <button v-else @click="storeClockAudit(userDutyCheck.id,userDutyCheck.type)" class="btn btn-primary w-80">审核</button>
  36. </td>@endcan
  37. <td v-if="workgroupSign">
  38. <b v-if="userDutyCheck.group_user_id" class="text-success">已审核</b>
  39. <button v-else @click="storeGroupAudit(userDutyCheck.id,userDutyCheck.type)" class="btn btn-primary w-80">组长审核</button>
  40. </td>
  41. <td>@{{ userDutyCheck.checked_at.substring(11,16) }}</td>
  42. <td>
  43. <div v-if="userDutyCheck.verify_user_id" class="text-center">@{{ userDutyCheck.type }}</div>
  44. <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">
  45. <option value="登入">登入</option>
  46. <option value="登出">登出</option>
  47. </select>
  48. </td>
  49. <td class="text-muted"><span v-if="userDutyCheck.user_detail">@{{ userDutyCheck.user_detail.mobile_phone }}</span></td>
  50. <td ><span v-if="userDutyCheck.user_detail">@{{ userDutyCheck.user_detail.user_labor.labor_company.name }}</span></td>
  51. <td class="font-weight-bold"><span v-if="userDutyCheck.user_detail.user.user_workgroups&&userDutyCheck.user_detail.user.user_workgroups.length>0">
  52. @{{ userDutyCheck.user_detail.user.user_workgroups[0].name }}</span></td>
  53. <td>@{{ userDutyCheck.exception }}</td>
  54. <td>@{{ userDutyCheck.duration_man_hour }}</td>
  55. </tr>
  56. </tbody>
  57. </table>
  58. <table class="table table-striped table-bordered text-nowrap" v-if="userDutyCheckYesterdays&&userDutyCheckYesterdays.length>=1">
  59. <thead class="thead-light" style="color: #17a2b8" >
  60. <tr>
  61. <th>日期</th>
  62. <td>序号</td>
  63. <td>姓名</td>
  64. @can('人事管理-打卡审核')<td>操作</td>@endcan
  65. <td v-if="workgroupSign">组长审核</td>
  66. <td >打卡时间</td>
  67. <td>打卡类型</td>
  68. <td>手机号</td>
  69. <td>劳务所</td>
  70. <td>工作组</td>
  71. <td>异常</td>
  72. <td>合计工时</td>
  73. </tr>
  74. </thead>
  75. <tbody>
  76. <tr v-for="(userDutyCheck,i) in userDutyCheckYesterdays">
  77. <td v-if="userDutyCheck.checked_at" class="text-center font-weight-bold">@{{ userDutyCheck.checked_at.substring(0,10) }}</td>
  78. <td>@{{ i+1 }}</td>
  79. <td ><span v-if="userDutyCheck.user_detail">@{{ userDutyCheck.user_detail.full_name }}</span></td>
  80. @can('人事管理-打卡审核')<td>
  81. <b v-if="userDutyCheck.verify_user_id" class="text-success">已审核</b>
  82. <button v-else @click="storeClockAudit(userDutyCheck.id,userDutyCheck.type)" class="btn btn-primary w-80">审核</button>
  83. </td>@endcan
  84. <td v-if="workgroupSign">
  85. <b v-if="userDutyCheck.group_user_id" class="text-success">已审核</b>
  86. <button v-else @click="storeGroupAudit(userDutyCheck.id,userDutyCheck.type)" class="btn btn-primary w-80">组长审核</button>
  87. </td>
  88. <td>@{{ userDutyCheck.checked_at.substring(11,16) }}</td>
  89. <td>
  90. <div v-if="userDutyCheck.verify_user_id" class="text-center">@{{ userDutyCheck.type }}</div>
  91. <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">
  92. <option value="登入">登入</option>
  93. <option value="登出">登出</option>
  94. </select>
  95. </td>
  96. <td class="text-muted"><span v-if="userDutyCheck.user_detail">@{{ userDutyCheck.user_detail.mobile_phone }}</span></td>
  97. <td ><span v-if="userDutyCheck.user_detail">@{{ userDutyCheck.user_detail.user_labor.labor_company.name }}</span></td>
  98. <td class="font-weight-bold"><span v-if="userDutyCheck.user_detail.user.user_workgroups&&userDutyCheck.user_detail.user.user_workgroups.length>0">
  99. @{{ userDutyCheck.user_detail.user.user_workgroups[0].name }}</span></td>
  100. <td>@{{ userDutyCheck.exception }}</td>
  101. <td>@{{ userDutyCheck.duration_man_hour }}</td>
  102. </tr>
  103. </tbody>
  104. </table>
  105. <table class="table table-striped table-bordered text-nowrap" v-if="userDutyCheckBefores&&userDutyCheckBefores.length>=1">
  106. <thead class="thead-light" style="color:rosybrown">
  107. <tr >
  108. <th>日期</th>
  109. <td>序号</td>
  110. <td>姓名</td>
  111. @can('人事管理-打卡审核')<td>操作</td>@endcan
  112. <td v-if="workgroupSign">组长审核</td>
  113. <td >打卡时间</td>
  114. <td>打卡类型</td>
  115. <td>手机号</td>
  116. <td>劳务所</td>
  117. <td>工作组</td>
  118. <td>异常</td>
  119. <td>合计工时</td>
  120. </tr>
  121. </thead>
  122. <tbody>
  123. <tr v-for="(userDutyCheck,i) in userDutyCheckBefores">
  124. <td v-if="userDutyCheck.checked_at" class="text-center font-weight-bold">@{{ userDutyCheck.checked_at.substring(0,10) }}</td>
  125. <td>@{{ i+1 }}</td>
  126. <td ><span v-if="userDutyCheck.user_detail">@{{ userDutyCheck.user_detail.full_name }}</span></td>
  127. @can('人事管理-打卡审核')<td>
  128. <b v-if="userDutyCheck.verify_user_id" class="text-success">已审核</b>
  129. <button v-else @click="storeClockAudit(userDutyCheck.id,userDutyCheck.type)" class="btn btn-primary w-80">审核</button>
  130. </td>@endcan
  131. <td v-if="workgroupSign">
  132. <b v-if="userDutyCheck.group_user_id" class="text-success">已审核</b>
  133. <button v-else @click="storeGroupAudit(userDutyCheck.id,userDutyCheck.type)" class="btn btn-primary w-80">组长审核</button>
  134. </td>
  135. <td>@{{ userDutyCheck.checked_at.substring(11,16) }}</td>
  136. <td>
  137. <div v-if="userDutyCheck.verify_user_id" class="text-center">@{{ userDutyCheck.type }}</div>
  138. <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">
  139. <option value="登入">登入</option>
  140. <option value="登出">登出</option>
  141. </select>
  142. </td>
  143. <td class="text-muted"><span v-if="userDutyCheck.user_detail">@{{ userDutyCheck.user_detail.mobile_phone }}</span></td>
  144. <td ><span v-if="userDutyCheck.user_detail">@{{ userDutyCheck.user_detail.user_labor.labor_company.name }}</span></td>
  145. <td class="font-weight-bold"><span v-if="userDutyCheck.user_detail.user.user_workgroups&&userDutyCheck.user_detail.user.user_workgroups.length>0">
  146. @{{ userDutyCheck.user_detail.user.user_workgroups[0].name }}</span></td>
  147. <td>@{{ userDutyCheck.exception }}</td>
  148. <td>@{{ userDutyCheck.duration_man_hour }}</td>
  149. </tr>
  150. </tbody>
  151. </table>
  152. </div>
  153. </div>
  154. </div>
  155. @endsection
  156. @section('lastScript')
  157. <script>
  158. new Vue({
  159. el:"#list",
  160. data:{
  161. userDutyCheckYesterdays:[
  162. @foreach($userDutyCheckYesterdays as $userDutyCheck)
  163. {id:'{{$userDutyCheck->id}}',user_id:'{{$userDutyCheck->user_id}}',
  164. checked_at:'{{$userDutyCheck->checked_at}}',
  165. type:'{{$userDutyCheck->type}}',verify_user_id:'{{$userDutyCheck->verify_user_id}}',group_user_id:'{{$userDutyCheck->group_user_id}}',
  166. exception:'',duration_man_hour:'',@if($userDutyCheck->userDetail)user_detail:{!! $userDutyCheck->userDetail !!} @endif },
  167. @endforeach
  168. ],
  169. userDutyCheckNows:[
  170. @foreach($userDutyCheckNows as $userDutyCheck)
  171. {id:'{{$userDutyCheck->id}}',user_id:'{{$userDutyCheck->user_id}}',
  172. checked_at:'{{$userDutyCheck->checked_at}}',
  173. type:'{{$userDutyCheck->type}}',verify_user_id:'{{$userDutyCheck->verify_user_id}}',group_user_id:'{{$userDutyCheck->group_user_id}}',
  174. exception:'',duration_man_hour:'',@if($userDutyCheck->userDetail)user_detail:{!! $userDutyCheck->userDetail !!} @endif },
  175. @endforeach
  176. ],
  177. userDutyCheckBefores:[
  178. @foreach($userDutyCheckBefores as $userDutyCheck)
  179. {id:'{{$userDutyCheck->id}}',user_id:'{{$userDutyCheck->user_id}}',
  180. checked_at:'{{$userDutyCheck->checked_at}}',
  181. type:'{{$userDutyCheck->type}}',verify_user_id:'{{$userDutyCheck->verify_user_id}}',group_user_id:'{{$userDutyCheck->group_user_id}}',
  182. exception:'',duration_man_hour:'',@if($userDutyCheck->userDetail)user_detail:{!! $userDutyCheck->userDetail !!} @endif },
  183. @endforeach
  184. ],
  185. workgroupSign:'{{$workgroupSign}}',
  186. },
  187. methods:{
  188. store(id,type,url){
  189. },
  190. storeClockAudit(id,type){
  191. let url='{{url("personnel/checking-in/storeClockAudit")}}';
  192. let _this=this;
  193. axios.post(url,{id:id,type:type})
  194. .then(function (response) {
  195. if (!response.data.success){
  196. tempTip.setDuration(3000);
  197. tempTip.show(response.data.data);
  198. return;
  199. }
  200. _this.userDutyCheckNows.every(function (userDutyCheck) {
  201. if (userDutyCheck.id==id){
  202. userDutyCheck.verify_user_id=response.data.data;
  203. tempTip.setDuration(3000);
  204. tempTip.showSuccess('审核通过!');
  205. return false
  206. }
  207. return true;
  208. });
  209. _this.userDutyCheckBefores.every(function (userDutyCheck) {
  210. if (userDutyCheck.id==id){
  211. userDutyCheck.verify_user_id=response.data.data;
  212. tempTip.setDuration(3000);
  213. tempTip.showSuccess('审核通过!');
  214. return false
  215. }
  216. return true;
  217. });
  218. _this.userDutyCheckYesterdays.every(function (userDutyCheck) {
  219. if (userDutyCheck.id==id){
  220. userDutyCheck.verify_user_id=response.data.data;
  221. tempTip.setDuration(3000);
  222. tempTip.showSuccess('审核通过!');
  223. return false
  224. }
  225. return true;
  226. });
  227. }).catch(function (err) {
  228. tempTip.setDuration(4000);
  229. tempTip.show('审核失败!网络错误:'+err);
  230. });
  231. },
  232. storeGroupAudit(id,type){
  233. let url='{{url("personnel/checking-in/storeGroupAudit")}}';
  234. let _this=this;
  235. axios.post(url,{id:id,type:type})
  236. .then(function (response) {
  237. if (!response.data.success){
  238. tempTip.setDuration(3000);
  239. tempTip.show(response.data.data);
  240. return;
  241. }
  242. _this.userDutyCheckNows.every(function (userDutyCheck) {
  243. if (userDutyCheck.id==id){
  244. userDutyCheck.group_user_id=response.data.data;
  245. tempTip.setDuration(3000);
  246. tempTip.showSuccess('审核通过!');
  247. return false
  248. }
  249. return true;
  250. });
  251. _this.userDutyCheckBefores.every(function (userDutyCheck) {
  252. if (userDutyCheck.id==id){
  253. userDutyCheck.group_user_id=response.data.data;
  254. tempTip.setDuration(3000);
  255. tempTip.showSuccess('审核通过!');
  256. return false
  257. }
  258. return true;
  259. });
  260. _this.userDutyCheckYesterdays.every(function (userDutyCheck) {
  261. if (userDutyCheck.id==id){
  262. userDutyCheck.group_user_id=response.data.data;
  263. tempTip.setDuration(3000);
  264. tempTip.showSuccess('审核通过!');
  265. return false
  266. }
  267. return true;
  268. });
  269. }).catch(function (err) {
  270. tempTip.setDuration(4000);
  271. tempTip.show('审核失败!网络错误:'+err);
  272. });
  273. },
  274. isException(id,user_id,checked_at,type){
  275. let _this=this;
  276. axios.post('{{url("personnel/checking-in/isException")}}',{id:id,user_id:user_id,checked_at:checked_at,type:type})
  277. .then(function (response) {
  278. _this.userDutyCheckYesterdays.every(function (userDutyCheck) {
  279. if (userDutyCheck.id==id){
  280. userDutyCheck.exception=response.data.exception;
  281. userDutyCheck.duration_man_hour=response.data.duration_man_hour;
  282. return false
  283. }
  284. return true;
  285. });
  286. _this.userDutyCheckBefores.every(function (userDutyCheck) {
  287. if (userDutyCheck.id==id){
  288. userDutyCheck.exception=response.data.exception;
  289. userDutyCheck.duration_man_hour=response.data.duration_man_hour;
  290. return false
  291. }
  292. return true;
  293. });
  294. _this.userDutyCheckNows.every(function (userDutyCheck) {
  295. if (userDutyCheck.id==id){
  296. userDutyCheck.exception=response.data.exception;
  297. userDutyCheck.duration_man_hour=response.data.duration_man_hour;
  298. return false
  299. }
  300. return true;
  301. });
  302. }).catch(function (err) {
  303. tempTip.setDuration(4000);
  304. tempTip.show('校验失败!网络错误:'+err);
  305. });
  306. }
  307. },
  308. });
  309. </script>
  310. @endsection