index.blade.php 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650
  1. @extends('layouts.app')
  2. @section('title')临时工报表@endsection
  3. @section('content')
  4. <div id="nav2">
  5. @component('personnel.menu')@endcomponent
  6. </div>
  7. <div class="d-none container-fluid" id="list">
  8. <div id="form_div"></div>
  9. <span class="dropdown">
  10. <button class="btn btn-outline-dark btn-sm form-control-sm dropdown-toggle tooltipTarget mt-1 mb-1" :class="[checkData.length>0?'btn-dark text-light':'']"
  11. data-toggle="dropdown" title="导出所有页将会以搜索条件得到的过滤结果,将其全部记录(每一页)导出">
  12. 导出Excel
  13. </button>
  14. <div class="dropdown-menu">
  15. <a class="dropdown-item" @click="laborReportExport(false)" href="javascript:">导出勾选内容</a>
  16. <a class="dropdown-item" @click="laborReportExport(true)" href="javascript:">导出所有页</a>
  17. </div>
  18. </span>
  19. <table class="table table-sm table-hover table-striped d-none d-xl-block p-0 text-nowrap table-bordered" >
  20. <tr>
  21. <th class="text-center">
  22. <label for="all">
  23. <input id="all" type="checkbox" @click="checkAll($event)">全选
  24. </label>
  25. </th>
  26. <th class="text-center">序号</th>
  27. {{-- <th>ID</th>--}}
  28. <th class="text-center">操作</th>
  29. <th class="text-center" style="background-color: rgb(241, 234, 190)">进厂编号</th>
  30. <th class="text-center" style="background-color: rgb(241, 234, 190)">小组</th>
  31. <th class="text-center" style="background-color: rgb(241, 234, 190)">临时工</th>
  32. <th class="text-center" style="background-color: rgb(241, 234, 190)">电话</th>
  33. <th class="text-center" style="background-color: rgb(241, 234, 190)">身份证号</th>
  34. <th class="text-center" style="background-color: rgb(241, 234, 190)">劳务所</th>
  35. <th class="text-center">进场时间</th>
  36. <th class="text-center">进组时间</th>
  37. <th class="text-center">退组时间</th>
  38. <th class="text-center">退场时间</th>
  39. <th class="text-center">审核时间</th>
  40. <th class="text-center">审核人</th>
  41. <th class="text-center">晚饭打卡(分)</th>
  42. <th class="text-center">在线时长</th>
  43. <th class="text-center">本次工作时长</th>
  44. <th class="text-center">备注</th>
  45. </tr>
  46. <tr v-for="(laborReport,i) in laborReports" @click="selectedColor(laborReport.id)" :style="{'font-weight': laborReport.id==selectedStyle?'bold':''}">
  47. <td>
  48. <input class="checkItem" type="checkbox" :value="laborReport.id" v-model="checkData">
  49. </td>
  50. <td>@{{ i+1 }}</td>
  51. <td >
  52. @can('人事管理-门卫审核')
  53. <span >
  54. <span v-if="laborReport.userDutyCheckVerifyUserId&&laborReport.amountOfJoined==1" class="text-success">已审核</span>
  55. <span v-else-if="laborReport.userDutyCheckVerifyUserId&&laborReport.amountOfJoined&&laborReport.sequence" class="text-black">&nbsp;&nbsp;&nbsp;@{{laborReport.sequence}}/@{{laborReport.amountOfJoined}}</span>
  56. <button v-else class="btn btn-sm btn-outline-secondary" @click="guardClockAudit(laborReport.id,laborReport.user_duty_check_id)">门卫审核</button>
  57. </span>
  58. @else
  59. <span v-if="laborReport.userDutyCheckVerifyUserId&&laborReport.amountOfJoined==1" class="text-success">已审核</span>
  60. <span v-else-if="laborReport.userDutyCheckVerifyUserId&&laborReport.amountOfJoined&&laborReport.sequence" class="text-black">&nbsp;&nbsp;&nbsp;@{{ laborReport.sequence }}/@{{ laborReport.amountOfJoined }}</span>
  61. <span v-else class="text-center"><b class="text-danger">门卫未审核</b></span>
  62. @endcan
  63. &nbsp;&nbsp;&nbsp;&nbsp;
  64. @can('人事管理-组长审核')
  65. <span>
  66. <button v-if="laborReport.groupUserId&&!laborReport.is_exportGroup" @click="groupExport(laborReport.id,laborReport.name)" class="btn btn-sm btn-outline-danger">退组</button>
  67. <span v-else-if="laborReport.groupUserId&&laborReport.is_exportGroup&&!laborReport.is_export" class="text-info">已退组</span>
  68. <span v-else-if="laborReport.is_export" class="text-black">已退场</span>
  69. <button v-else-if="laborReport.user_workgroup_id" @click="groupClockAudit(laborReport.id,laborReport.userWorkgroupNeedRemark)" class="btn btn-sm btn-outline-primary">组长审核</button>
  70. </span>
  71. @else
  72. <span v-if="laborReport.groupUserId&&!laborReport.is_exportGroup"><b class="text-success">在组</b></span>
  73. <span v-else-if="laborReport.groupUserId&&laborReport.is_exportGroup&&!laborReport.is_export" class="text-info">已退组</span>
  74. <span v-else-if="laborReport.is_export" class="text-black">已退场</span>
  75. <span v-else-if="laborReport.user_workgroup_id" class="text-center"><b class="text-danger">组长未审核</b></span>
  76. @endcan
  77. </td>
  78. <td class="text-muted">@{{laborReport.enter_number}}</td>
  79. <td>@{{laborReport.userWorkGroupName}}</td>
  80. <td >@{{laborReport.name}}</td>
  81. <td class="text-muted">@{{laborReport.mobile_phone}}</td>
  82. <td class="text-muted">@{{laborReport.identity_number}}</td>
  83. <td class="text-muted">@{{laborReport.labor_company}}</td>
  84. <td class="text-muted">@{{laborReport.enter_at}}</td>
  85. <td>@{{laborReport.checkInAt}}</td>
  86. <td class="text-muted">@{{laborReport.checkOutAt}}</td>
  87. <td >@{{ laborReport.exit_at }}</td>
  88. <td class="text-muted">@{{laborReport.verifyAt}}</td>
  89. <td class="text-muted"><span v-if="laborReport.verifyPerson">@{{laborReport.verifyPerson}}</span></td>
  90. <td class="text-muted"><span v-if="laborReport.relax_time">@{{laborReport.relax_time}}</span></td>
  91. {{-- <td class="text-muted"><span v-if="laborReport.onlineDuration">@{{laborReport.onlineDuration}}</span></td>--}}
  92. <td class="text-muted"><span v-if="laborReport.thisRecordOnlineTime">@{{laborReport.thisRecordOnlineTime}}</span></td>
  93. <td><span v-if="laborReport.thisRecordWorkingTime">@{{laborReport.thisRecordWorkingTime}}</span></td>
  94. {{-- <td><span v-if="laborReport.workingDuration">@{{laborReport.workingDuration}}</span></td>--}}
  95. <td><span v-if="laborReport.remark">@{{laborReport.remark}}</span></td>
  96. </tr>
  97. </table>
  98. <table class="table table-striped table-bordered table-hover p-0 d-table d-xl-none" style="background: rgb(255, 255, 255);">
  99. <tr v-for="laborReport in laborReports">
  100. <td style="filter:grayscale(30%);">
  101. <div class="pl-3 mt-1">
  102. <div style="transform:scale(1)" class="pl-0">
  103. <span class="mr-3 text-nowrap">
  104. <span >操作:</span>
  105. <span >
  106. @can('人事管理-门卫审核')
  107. <span >
  108. <b v-if="laborReport.userDutyCheckVerifyUserId&&laborReport.amountOfJoined==1" class="text-success">已审核</b>
  109. <b v-else-if="laborReport.userDutyCheckVerifyUserId&&laborReport.amountOfJoined&&laborReport.sequence" class="text-black">&nbsp;&nbsp;&nbsp;@{{laborReport.sequence}}/@{{laborReport.amountOfJoined}}</b>
  110. <button v-else style="transform:scale(1.1)" class="btn btn-lg btn-outline-secondary" @click="guardClockAudit(laborReport.id,laborReport.user_duty_check_id)">门卫审核</button>
  111. </span>
  112. @else
  113. <b v-if="laborReport.userDutyCheckVerifyUserId&&laborReport.amountOfJoined==1" class="text-success">已审核</b>
  114. <b v-else-if="laborReport.userDutyCheckVerifyUserId&&laborReport.amountOfJoined&&laborReport.sequence" class="text-black">&nbsp;&nbsp;&nbsp;@{{ laborReport.sequence }}/@{{ laborReport.amountOfJoined }}</b>
  115. <span v-else class="text-center"><b class="text-danger">门卫未审核</b></span>
  116. @endcan
  117. &nbsp;&nbsp;&nbsp;&nbsp;
  118. @can('人事管理-组长审核')
  119. <span>
  120. <button v-if="laborReport.groupUserId&&!laborReport.is_exportGroup" @click="groupExport(laborReport.id,laborReport.name)" style="transform:scale(1.1)" class="btn btn-lg btn-danger">退组</button>
  121. <b v-else-if="laborReport.groupUserId&&laborReport.is_exportGroup&&!laborReport.is_export" class="text-info">已退组</b>
  122. <b v-else-if="laborReport.is_export" class="text-black">已退场</b>
  123. <button v-else-if="laborReport.user_workgroup_id" @click="groupClockAudit(laborReport.id,laborReport.userWorkgroupNeedRemark)" class="btn btn-lg btn-outline-primary" style="transform:scale(1.1)" >组长审核</button>
  124. </span>
  125. @else
  126. <span v-if="laborReport.groupUserId&&!laborReport.is_exportGroup"><b class="text-success">在组</b></span>
  127. <b v-else-if="laborReport.groupUserId&&laborReport.is_exportGroup&&!laborReport.is_export" class="text-info">已退组</b>
  128. <b v-else-if="laborReport.is_export" class="text-black">已退场</b>
  129. <span v-else-if="laborReport.user_workgroup_id" class="text-center"><b class="text-danger">组长未审核</b></span>
  130. @endcan
  131. </span>
  132. </span>
  133. <span class="mr-3 text-nowrap"><span class="text-black">进场时间:</span><span class="text-black-50">@{{laborReport.enter_at }}</span></span>
  134. <span class="mr-3 text-nowrap"><span class="text-muted">退组时间:</span><span style="color:#af7651" v-if="">@{{ laborReport.checkOutAt }} </span></span>
  135. <span class="mr-3 text-nowrap"><span class="text-black">退场时间:</span><span style="color:#af7651">@{{ laborReport.exit_at }}</span></span>
  136. {{-- <span class="mr-3 text-nowrap"><span class="text-black">进场编号:</span><span style="color:#af7651">@{{ laborReport.enter_number }}</span></span>--}}
  137. <span class="mr-3 text-nowrap"><span class="text-black">小组:</span><span class="text-black-50">@{{laborReport.userWorkGroupName }}</span></span>
  138. <span class="mr-3 text-nowrap"><span class="text-black">临时工:</span><span class="text-black-50">@{{ laborReport.name }} </span></span>
  139. {{-- <span class="mr-3 text-nowrap"><span class="text-black">电话:</span><span style="color:#af7651" v-if="">@{{ laborReport.mobile_phone }} </span></span>--}}
  140. {{-- <span class="mr-3 text-nowrap"><span class="text-black">身份证号:</span><span style="color:#af7651" v-if="">@{{ laborReport.identity_number }} </span></span>--}}
  141. {{-- <span class="mr-3 text-nowrap"><span class="text-black">劳务所:</span><span style="color:#af7651" v-if="">@{{ laborReport.labor_company }} </span></span>--}}
  142. {{-- <span class="mr-3 text-nowrap"><span class="text-black">进组时间:</span><span style="color:#af7651" v-if="">@{{ laborReport.checkInAt }} </span></span>--}}
  143. {{-- <span class="mr-3 text-nowrap"><span class="text-black">审核时间:</span><span style="color:#af7651" v-if="">@{{ laborReport.verifyAt }} </span></span>--}}
  144. {{-- <span class="mr-3 text-nowrap"><span class="text-black">审核人:</span><span style="color:#af7651" v-if="">@{{ laborReport.verifyPerson }} </span></span>--}}
  145. {{-- <span class="mr-3 text-nowrap"><span class="text-black">晚饭打卡(分):</span><span style="color:#af7651" v-if="">@{{ laborReport.relax_time }} </span></span>--}}
  146. {{-- <span class="mr-3 text-nowrap"><span class="text-black">在线时长:</span><span style="color:#af7651" v-if="">@{{ laborReport.onlineDuration }} </span></span>--}}
  147. {{-- <span class="mr-3 text-nowrap"><span class="text-black">本次工作时长:</span><span style="color:#af7651" v-if="">@{{ laborReport.workingDuration }} </span></span>--}}
  148. </div>
  149. </div>
  150. </td>
  151. </tr>
  152. </table>
  153. <div class="text-info h5 btn btn">{{$laborReports->count()}}/@{{ sum }}</div>
  154. <div>{{$laborReports->appends($paginateParams)->links()}}</div>
  155. {{-- 选择晚饭时长弹框 --}}
  156. <div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
  157. <div class="modal-dialog">
  158. <div class="modal-content">
  159. <div class="modal-header">
  160. <h5 class="modal-title" id="exampleModalLabel">晚餐时长</h5>
  161. <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  162. <span aria-hidden="true">&times;</span>
  163. </button>
  164. </div>
  165. <div class="modal-body">
  166. <form>
  167. <div class="form-group">
  168. <label for="relax_time" class="col-form-label">选择晚饭时长:</label>
  169. <select class="form-control" id="relax_time" v-model="relax_time">
  170. <option value="30">30分</option>
  171. <option value="60">60分</option>
  172. </select>
  173. </div>
  174. </form>
  175. </div>
  176. <div class="modal-footer">
  177. <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  178. <span class="btn btn-block" aria-hidden="true">取消</span>
  179. </button>
  180. <button type="button" class="btn btn-primary" data-dismiss="modal" @click="makeSureRelax_time">确定</button>
  181. </div>
  182. </div>
  183. </div>
  184. </div>
  185. {{-- 特定组需要添加备注 --}}
  186. <div class="modal fade" id="remarkModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
  187. <div class="modal-dialog">
  188. <div class="modal-content">
  189. <div class="modal-header">
  190. <h5 class="modal-title" id="exampleModalLabel">添加所需备注</h5>
  191. <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  192. <span aria-hidden="true">&times;</span>
  193. </button>
  194. </div>
  195. <div class="modal-body">
  196. <form>
  197. <div class="form-group">
  198. <label for="remark" class="col-form-label">备注:</label>
  199. <textarea class="form-control" id="remark"></textarea>
  200. </div>
  201. </form>
  202. </div>
  203. <div class="modal-footer">
  204. <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  205. <span class="btn btn-block" aria-hidden="true">取消</span>
  206. </button>
  207. <button type="button" class="btn btn-primary" data-dismiss="modal" @click="addRemarkAndGroupClock">确定</button>
  208. </div>
  209. </div>
  210. </div>
  211. </div>
  212. <!-- 是否晚餐弹框 -->
  213. <div class="modal fade" id="dinnerModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" >
  214. <div class="modal-dialog">
  215. <div class="modal-content">
  216. <div class="modal-body">
  217. <b class="font-weight-bold">是否晚餐?</b>
  218. </div>
  219. <div class="modal-footer">
  220. <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  221. <span class="btn btn-block" @click="noDinner">否</span>
  222. </button>
  223. <button type="button" class="btn btn-primary" data-dismiss="modal" @click="haveDinner">是</button>
  224. </div>
  225. </div>
  226. </div>
  227. </div>
  228. </div>
  229. @endsection
  230. @section('lastScript')
  231. <script type="text/javascript" src="{{asset('js/queryForm/export200804.js')}}"></script>
  232. <script type="text/javascript" src="{{asset('js/queryForm/queryForm200805b.js')}}"></script>
  233. <script>
  234. let today=(new Date());
  235. function isTomorrow(){
  236. let now=(new Date());
  237. const dateTime=new Date(now.setDate(now.getDate()+1));
  238. if(dateTime<=today)return true;
  239. else return false;
  240. }
  241. function reloadOnTomorrow(){
  242. if(isTomorrow()){
  243. window.location.reload();
  244. }
  245. }
  246. window.onfocus=reloadOnTomorrow;
  247. setInterval(reloadOnTomorrow,1000*60*60)
  248. </script>
  249. <script>
  250. @if(isset($request))
  251. let request={!! json_encode($request) !!};
  252. @endif
  253. new Vue({
  254. el:"#list",
  255. data:{
  256. laborReports:[
  257. @foreach($laborReports as $laborReport)
  258. {id:'{{$laborReport->id}}',enter_number:'{{$laborReport->enter_number}}'
  259. ,@if($laborReport->userWorkgroup)user_workgroup_id:'{{$laborReport->userWorkgroup->id}}',
  260. userWorkgroupNeedRemark:'{{$laborReport->userWorkgroup->isNeedRemark}}',
  261. userWorkGroupName:'{{$laborReport->userWorkgroup->name}}',@endif
  262. userId:'{{$laborReport->user_id}}',name:'{{$laborReport->name}}'
  263. ,mobile_phone:'{{$laborReport->mobile_phone}}',identity_number:'{{$laborReport->identity_number}}',labor_company:'{{$laborReport->labor_company}}'
  264. ,checkInAt:'{{$laborReport->check_in_at}}', relax_time:'{{$laborReport->relax_time}}',
  265. is_exportGroup:'{{$laborReport->is_exportGroup}}',is_export:'{{$laborReport->is_export}}',
  266. verifyAt:'{{$laborReport->verify_at}}',groupUserId:'{{$laborReport->group_user_id}}',verifyPerson:'{{$laborReport->user['name']}}',
  267. checkOutAt:'{{$laborReport->check_out_at}}',onlineDuration:'{{$laborReport->online_duration}}',
  268. workingDuration:'{{$laborReport->working_duration}}', created_at:'{{$laborReport->created_at}}',
  269. enter_at:'{{$laborReport->enter_at}}',exit_at:'{{$laborReport->exit_at}}',
  270. thisRecordOnlineTime:'{{$laborReport->thisRecordOnlineTime}}',
  271. thisRecordWorkingTime:'{{$laborReport->thisRecordWorkingTime}}',
  272. sequence:'{{$laborReport->sequence}}',amountOfJoined:'{{$laborReport->amountOfJoined}}',remark:'{{$laborReport->remark}}',
  273. @if($laborReport->userDutyCheck)user_duty_check_id:'{{$laborReport->userDutyCheck->id}}', userDutyCheckVerifyUserId:'{{$laborReport->userDutyCheck->verify_user_id}}'
  274. ,userDutyCheckType:'{{$laborReport->userDutyCheck->type}}',userDutyCheckAt:'{{$laborReport->userDutyCheck->checked_at}}',@endif},
  275. @endforeach
  276. ],
  277. i:0,
  278. userWorkGroups:[
  279. @foreach($userWorkGroups as $userWorkGroup)
  280. {name:'{{$userWorkGroup->id}}',value:'{{$userWorkGroup->name}}'},
  281. @endforeach
  282. ],
  283. checkData:[],
  284. permittingWorkgroups:{!! $permittingWorkgroups !!},
  285. relax_time:'',dateTime:'',selectedStyle:'',
  286. sum:{!! $laborReports->total() !!},
  287. },
  288. mounted:function(){
  289. initEcho();
  290. let _this=this;
  291. let laborReports=_this.laborReports;
  292. //进场
  293. let tokenOfBroadcastEnterAndLeave='{{$tokenOfBroadcastEnterAndLeave}}';
  294. //console.log(tokenOfBroadcastEnterAndLeave)
  295. if(tokenOfBroadcastEnterAndLeave){
  296. Echo.channel('{{$laravelEchoPrefix}}'+tokenOfBroadcastEnterAndLeave).listen('ImportEvent',(e)=>{
  297. let labor=e.laborReport;
  298. laborReports.push(labor);
  299. });
  300. }
  301. //退场
  302. Echo.channel('{{$laravelEchoPrefix}}laborReport').listen('ExportEvent',(e)=>{
  303. let labor=e.laborReport;
  304. laborReports.every(function (laborReport) {
  305. if (laborReport.id==labor.id){
  306. laborReport.thisRecordOnlineTime=labor.thisRecordOnlineTime;
  307. laborReport.thisRecordWorkingTime=labor.thisRecordWorkingTime;
  308. laborReport.is_export=labor.is_export;
  309. laborReport.exit_at=labor.exit_at;
  310. return false
  311. }
  312. return true;
  313. });
  314. });
  315. //门卫审核
  316. Echo.channel('{{$laravelEchoPrefix}}userDutyCheck').listen('GuardAuditEvent',(e)=>{
  317. let userDutyCheck=e.userDutyCheck;
  318. laborReports.every(function (laborReport) {
  319. if (laborReport.user_duty_check_id==userDutyCheck.id){
  320. laborReport.userDutyCheckVerifyUserId=userDutyCheck.verify_user_id;
  321. laborReport.user_duty_check_id=userDutyCheck.id;
  322. return false
  323. }
  324. return true;
  325. });
  326. });
  327. //组长审核
  328. Echo.channel('{{$laravelEchoPrefix}}laborReport').listen('TeamAuditEvent',(e)=>{
  329. let labor=e.laborReport;
  330. laborReports.every(function (laborReport) {
  331. if (laborReport.id==labor.id){
  332. if(labor.remark){
  333. laborReport.remark=labor.remark;
  334. }
  335. laborReport.verifyAt=labor.verify_at;
  336. laborReport.groupUserId=labor.group_user_id;
  337. laborReport.verifyPerson=labor.verifyPerson;
  338. return false
  339. }
  340. return true;
  341. });
  342. });
  343. //进组
  344. _this.permittingWorkgroups.forEach(function(workgroup){
  345. Echo.channel('{{$laravelEchoPrefix}}'+workgroup.token).listen('ClockinEvent',(e)=>{
  346. setTimeout(function () {
  347. window.location.reload();
  348. },500);
  349. });
  350. });
  351. //退组
  352. _this.permittingWorkgroups.forEach(function(workgroup){
  353. Echo.channel('{{$laravelEchoPrefix}}'+workgroup.token).listen('ClockoutEvent',(e)=>{
  354. let labor=e.laborReport;
  355. laborReports.every(function (laborReport) {
  356. if (laborReport.id==labor.id){
  357. laborReport.thisRecordOnlineTime=labor.thisRecordOnlineTime;
  358. laborReport.thisRecordWorkingTime=labor.thisRecordWorkingTime;
  359. laborReport.is_exportGroup=labor.is_exportGroup;
  360. laborReport.checkOutAt=labor.check_out_at;
  361. if (labor.relax_time){
  362. laborReport.relax_time=labor.relax_time;
  363. }
  364. return false
  365. }
  366. return true;
  367. });
  368. });
  369. });
  370. $(".tooltipTarget").tooltip({'trigger':'hover'});
  371. $('#list').removeClass('d-none');
  372. let data=[
  373. [
  374. {name:'created_at_start',type:'dateTime',tip:'选择显示指定日期的起始时间'},
  375. {name:'user_workgroup_id',type:'search_select',tip:['',''],placeholder:['小组',''],data:this.userWorkGroups},
  376. {name:'enter_number',type:'input',tip:'进场编号:支持15天内模糊搜索,15天外精确搜索',placeholder: '进场编号'},
  377. {name:'is_export',type:'checkbox',data:[{name:true,value:'显示已退场'}]},
  378. ],
  379. [
  380. {name:'created_at_end',type:'dateTime',tip:'选择显示指定日期的结束时间'},
  381. {name:'mobile_phone',type:'input',tip:'',placeholder: '电话号'},
  382. {name:'identity_number',type:'input',tip:'',placeholder: '身份证号'},
  383. ],
  384. ];
  385. this.form = new query({
  386. el:"#form_div",
  387. condition:data,
  388. });
  389. this.form.init();
  390. },
  391. watch:{
  392. checkData:{
  393. handler(){
  394. if (this.checkData.length === this.laborReports.length){
  395. document.querySelector('#all').checked = true;
  396. }else {
  397. document.querySelector('#all').checked = false;
  398. }
  399. },
  400. deep:true
  401. }
  402. },
  403. methods:{
  404. selectedColor(id){
  405. if (id==this.selectedStyle){
  406. this.selectedStyle='';
  407. return;
  408. }
  409. this.selectedStyle=id;
  410. },
  411. checkAll(e){
  412. if (e.target.checked){
  413. this.laborReports.forEach((el,i)=>{
  414. if (this.checkData.indexOf(el.id) == '-1'){
  415. this.checkData.push(el.id);
  416. }
  417. });
  418. }else {
  419. this.checkData = [];
  420. }
  421. },
  422. laborReportExport(checkAllSign){
  423. let url = '{{url('laborReport/export')}}';
  424. let token='{{ csrf_token() }}';
  425. excelExport(checkAllSign,this.checkData,url,this.sum,token);
  426. },
  427. //门卫审核
  428. guardClockAudit(id,user_duty_check_id){
  429. let url='{{url("laborReport/guardClockAudit")}}';
  430. let _this=this;
  431. axios.post(url,{id:id,user_duty_check_id:user_duty_check_id})
  432. .then(function (response) {
  433. if (!response.data.success){
  434. tempTip.setDuration(3000);
  435. tempTip.show(response.data.data);
  436. return;
  437. }
  438. _this.laborReports.every(function (laborReport) {
  439. if (laborReport.id==id){
  440. laborReport.userDutyCheckVerifyUserId=response.data.data;
  441. tempTip.setDuration(3000);
  442. tempTip.showSuccess('审核通过!');
  443. return false
  444. }
  445. return true;
  446. });
  447. }).catch(function (err) {
  448. tempTip.setDuration(4000);
  449. tempTip.show('审核失败!网络错误:'+err);
  450. });
  451. },
  452. ////组长打卡审核(特定组添加备注)
  453. addRemarkAndGroupClock(){
  454. let _this=this;
  455. let id = getSelectId();
  456. let remark=document.getElementById('remark').value;
  457. let url='{{url("laborReport/addRemarkAndGroupClock")}}';
  458. if (remark==null|| remark=='' || remark=="undefined"){
  459. tempTip.setDuration(3000);
  460. tempTip.show("您还未添加任何备注");
  461. return;
  462. }
  463. axios.post(url,{id:id,remark:remark})
  464. .then(function (response) {
  465. if (!response.data.success){
  466. tempTip.setDuration(3000);
  467. tempTip.show(response.data.data);
  468. return;
  469. }
  470. _this.laborReports.every(function (laborReport) {
  471. if (laborReport.id==id){
  472. laborReport.groupUserId=response.data.data.group_user_id;
  473. laborReport.verifyAt=response.data.data.verify_at;
  474. laborReport.verifyPerson=response.data.data.verifyPerson;
  475. laborReport.remark=response.data.data.remark;
  476. tempTip.setDuration(3000);
  477. tempTip.showSuccess('审核通过!');
  478. return false
  479. }
  480. return true;
  481. });
  482. }).catch(function (err) {
  483. tempTip.setDuration(4000);
  484. tempTip.show('审核失败!网络错误:'+err);
  485. });
  486. },
  487. //组长打卡审核
  488. groupClockAudit(id,userWorkgroupNeedRemark){
  489. let url='{{url("laborReport/groupClockAudit")}}';
  490. let _this=this;
  491. if (userWorkgroupNeedRemark){
  492. $('#remarkModal').modal('show');
  493. selectId(id);
  494. return;
  495. }
  496. axios.post(url,{id:id})
  497. .then(function (response) {
  498. if (!response.data.success){
  499. tempTip.setDuration(3000);
  500. tempTip.show(response.data.data);
  501. return;
  502. }
  503. _this.laborReports.every(function (laborReport) {
  504. if (laborReport.id==id){
  505. laborReport.groupUserId=response.data.data.group_user_id;
  506. laborReport.verifyAt=response.data.data.verify_at;
  507. laborReport.verifyPerson=response.data.data.verifyPerson;
  508. tempTip.setDuration(3000);
  509. tempTip.showSuccess('审核通过!');
  510. return false
  511. }
  512. return true;
  513. });
  514. }).catch(function (err) {
  515. tempTip.setDuration(4000);
  516. tempTip.show('审核失败!网络错误:'+err);
  517. });
  518. },
  519. //有晚餐
  520. haveDinner(){
  521. $('#exampleModal').modal('show');
  522. },
  523. noDinner(){
  524. let _this=this;
  525. let id = getSelectId();
  526. let url='{{url("laborReport/groupExport")}}';
  527. axios.post(url,{id:id})
  528. .then(function (response) {
  529. if (!response.data.success){
  530. tempTip.setDuration(3000);
  531. tempTip.show(response.data.data);
  532. return;
  533. }
  534. _this.laborReports.every(function (laborReport) {
  535. if (laborReport.id==id){
  536. laborReport.checkOutAt=response.data.data.check_out_at;
  537. laborReport.workingDuration=response.data.data.working_duration;
  538. laborReport.is_exportGroup=response.data.data.is_exportGroup;
  539. laborReport.onlineDuration=response.data.data.online_duration;
  540. tempTip.setDuration(3000);
  541. tempTip.showSuccess('退组成功!');
  542. return false
  543. }
  544. return true;
  545. });
  546. }).catch(function (err) {
  547. tempTip.setDuration(4000);
  548. tempTip.show('退组失败!网络错误:'+err);
  549. });
  550. },
  551. //退场有晚饭时间
  552. makeSureRelax_time(){
  553. let url='{{url("laborReport/groupExportEnsure")}}';
  554. let _this=this;
  555. let id = getSelectId();
  556. axios.post(url,{id:id,relax_time:_this.relax_time})
  557. .then(function (response) {
  558. if (!response.data.success){
  559. tempTip.setDuration(3000);
  560. tempTip.show(response.data.data);
  561. return;
  562. }
  563. _this.laborReports.every(function (laborReport) {
  564. if (laborReport.id==id){
  565. laborReport.checkOutAt=response.data.data.check_out_at;
  566. laborReport.workingDuration=response.data.data.working_duration;
  567. laborReport.relax_time=response.data.data.relax_time;
  568. laborReport.is_exportGroup=response.data.data.is_exportGroup;
  569. laborReport.onlineDuration=response.data.data.online_duration;
  570. tempTip.setDuration(3000);
  571. tempTip.showSuccess('退组成功!');
  572. return false
  573. }
  574. return true;
  575. });
  576. }).catch(function (err) {
  577. tempTip.setDuration(4000);
  578. tempTip.show('退组失败!网络错误:'+err);
  579. });
  580. },
  581. //组长点击退组,
  582. groupExport(id,name){
  583. let _this=this;
  584. _this.laborReports.every(function (laborReport) {
  585. if (laborReport.id==id){
  586. _this.dateTime=new Date(new Date(laborReport.created_at).toLocaleDateString());
  587. return false;
  588. }
  589. return true;
  590. });
  591. const dateTime=new Date(_this.dateTime.setDate(_this.dateTime.getDate()+1));
  592. const start = new Date(new Date(new Date().toLocaleDateString()).getTime()+19*60*60*1000);
  593. if(!confirm("确定要临时工“"+name+"“退组吗?")){return}
  594. if (new Date()>=start || new Date()>dateTime){
  595. $('#dinnerModal').modal('show');
  596. selectId(id);
  597. return;
  598. }
  599. let url='{{url("laborReport/groupExport")}}';
  600. axios.post(url,{id:id})
  601. .then(function (response) {
  602. if (!response.data.success){
  603. tempTip.setDuration(3000);
  604. tempTip.show(response.data.data);
  605. return;
  606. }
  607. _this.laborReports.every(function (laborReport) {
  608. if (laborReport.id==id){
  609. laborReport.checkOutAt=response.data.data.check_out_at;
  610. laborReport.workingDuration=response.data.data.working_duration;
  611. laborReport.is_exportGroup=response.data.data.is_exportGroup;
  612. laborReport.onlineDuration=response.data.data.online_duration;
  613. tempTip.setDuration(3000);
  614. tempTip.showSuccess('退组成功!');
  615. return false
  616. }
  617. return true;
  618. });
  619. }).catch(function (err) {
  620. tempTip.setDuration(5000);
  621. tempTip.show('退组失败!网络错误:'+err);
  622. });
  623. },
  624. owner_seek:function (e) {
  625. let _this=this;
  626. let $val=e.target.value;
  627. if($val==='')_this.filterData.user_workgroup_id='';
  628. else
  629. _this.userWorkGroups.forEach(function (userWorkGroup) {
  630. if (userWorkGroup.name.includes($val)){
  631. _this.filterData.user_workgroup_id=userWorkGroup.id;
  632. }
  633. });
  634. },
  635. },
  636. });
  637. let select_id = 0;
  638. function selectId(id) {
  639. select_id = id;
  640. }
  641. function getSelectId() {
  642. return select_id;
  643. }
  644. </script>
  645. @endsection