index.blade.php 41 KB

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