{extend name="../../base/view/common/base" /} {block name="style"} {include file="/approve/add_style" /} {/block} <!-- 主体 --> {block name="body"} <form class="layui-form p-4"> <h3 class="pb-3">外出审批</h3> {eq name="$id" value="0"} <table class="layui-table layui-table-form"> <tr> <td class="layui-td-gray-2">外出地点<font>*</font></td> <td colspan="3"><input type="text" name="address" value="" autocomplete="off" placeholder="请输入外出地点" lay-verify="required" lay-reqText="请输入外出地点" class="layui-input"></td> </tr> <tr> <td class="layui-td-gray">开始时间<font>*</font></td> <td> <input id="start_time" name="start_time" autocomplete="off" class="layui-input select-time" value="" readonly lay-verify="required" placeholder="请选择时间" lay-reqText="请选择时间"> </td> <td class="layui-td-gray">结束时间<font>*</font></td> <td> <input id="end_time" name="end_time" autocomplete="off" class="layui-input select-time" value="" readonly lay-verify="required" placeholder="请选择时间" lay-reqText="请选择时间"> </td> </tr> <tr> <td class="layui-td-gray">外出时长</td> <td><input name="duration" value="" class="layui-input" lay-verify="required|number" placeholder="请完善请外出时长" lay-reqText="请完善请外出时长"></td> <td class="layui-td-gray">外出天数</td> <td id="days">-</td> </tr> <tr> <td class="layui-td-gray">外出事由<font>*</font></td> <td colspan="3"> <textarea name="content" placeholder="请输入外出事由" class="layui-textarea" lay-verify="required" lay-reqText="请输入外出事由"></textarea> </td> </tr> <tr> <td class="layui-td-gray"><div class="layui-input-inline">附件</div> <div class="layui-input-inline"><button type="button" class="layui-btn layui-btn-xs" id="upFile"><i class="layui-icon"></i></button></div></td> <td colspan="3" style="line-height:inherit"> <div class="layui-row" id="fileList"> <input type="hidden" data-type="file" name="file_ids" value=""> </div> </td> </tr> </table> {else/} <table class="layui-table layui-table-form"> <tr> <td class="layui-td-gray-2">外出地点<font>*</font></td> <td colspan="3"><input type="text" name="address" value="{$detail.address}" autocomplete="off" placeholder="请输入外出地点" lay-verify="required" lay-reqText="请输入外出地点" class="layui-input"></td> </tr> <tr> <td class="layui-td-gray">开始时间<font>*</font></td> <td> <input id="start_time" name="start_time" autocomplete="off" class="layui-input select-time" value="{$detail.start_time|date='Y-m-d H:i:s'}" readonly lay-verify="required" placeholder="请选择时间" lay-reqText="请选择时间"> </td> <td class="layui-td-gray">结束时间<font>*</font></td> <td> <input type="hidden" name="duration" value=""> <input id="end_time" name="end_time" autocomplete="off" class="layui-input select-time" value="{$detail.end_time|date='Y-m-d H:i:s'}" readonly lay-verify="required" placeholder="请选择时间" lay-reqText="请选择时间"> </td> </tr> <tr> <td class="layui-td-gray">外出时长</td> <td><input name="duration" value="{$detail.duration}" class="layui-input" lay-verify="required|number" placeholder="请完善请外出时长" lay-reqText="请完善外出时长"></td> <td class="layui-td-gray">外出天数</td> <td id="days">共{$detail.days}天,{$detail.hours}小时</td> </tr> <tr> <td class="layui-td-gray">外出事由<font>*</font></td> <td colspan="3"> <textarea name="content" placeholder="请输入外出事由" class="layui-textarea" lay-verify="required" lay-reqText="请输入外出事由">{$detail.content}</textarea> </td> </tr> <tr> <td class="layui-td-gray"><div class="layui-input-inline">附件</div> <div class="layui-input-inline"><button type="button" class="layui-btn layui-btn-xs" id="upFile"><i class="layui-icon"></i></button></div></td> <td colspan="3" style="line-height:inherit"> <div class="layui-row" id="fileList"> <input type="hidden" name="file_ids" data-type="file" value="{$detail.file_ids}"> {notempty name="$detail.file_ids"} {volist name="$detail.fileArray" id="vo"} <div class="layui-col-md4" id="uploadImg{$vo.id}">{:file_card($vo)}</div> {/volist} {/notempty} </div> </td> </tr> </table> {/eq} {include file="/approve/add_flow" /} </form> {/block} <!-- /主体 --> <!-- 脚本 --> {block name="script"} <script> /** * 工时计算 */ const WORKDAY_HOURS = 8; const START_HOUR = 9; const END_HOUR = 18; const START_BREAK_HOUR = 12; const END_BREAK_HOUR = 13; const WEEKEND_DAYS = [0]; function isWeekend(day) { return WEEKEND_DAYS.includes(day); } function calculateWorkHours() { var startDate = new Date($('#start_time').val()); var endDate = new Date($('#end_time').val()); const start = startDate.getTime(); const end = endDate.getTime(); const startDay = startDate.getDay(); const endDay = endDate.getDay(); let totalHours = 0; for (let time = start; time < end; time += 3600000 /* 1 hour in milliseconds */) { const date = new Date(time); const dayOfWeek = date.getDay(); const hour = date.getHours(); if (!isWeekend(dayOfWeek)) { if (hour >= START_HOUR && hour < END_HOUR) { if (hour < START_BREAK_HOUR || hour >= END_BREAK_HOUR) { console.log(totalHours); totalHours += 1; } } } } return totalHours; } function isNumber(str, type) { var t = type || 0; var patn = /^[0-9]+$/; if (t > 0) { patn = /^\d+(\.\d+)?$/; } if (!patn.test(str)){ return false; } else{ return true; } } const moduleInit = ['tool','employeepicker','oaTool']; function gouguInit() { var form = layui.form, tool=layui.tool, oaTool=layui.oaTool, laydate = layui.laydate; oaTool.addFile({ btn: 'upFile', box: 'fileList' }); if (typeof (flowStep) == "function") { flowStep(); } //日期时间范围 lay('.select-time').each(function () { laydate.render({ elem: this, trigger: 'click', fullPanel:true, type:'datetime', done:function(){ var hours = calculateWorkHours(); if(hours == 0){ $('[name="duration"]').val(''); $('#days').html('-'); } else{ $('[name="duration"]').val(hours); var days = 0; if(hours>=8){ days = parseInt(hours/8); } $('#days').html('共'+days+'天,'+(hours%8).toFixed(1)+'小时'); } } }); }); $('[name="duration"]').on('input',function(){ let hours = $(this).val(); if(isNumber(hours,1) && hours>0){ var days = 0; if(hours>=8){ days = parseInt(hours/8); } $('#days').html('共'+days+'天,'+((hours%8).toFixed(1))+'小时'); } else{ $('#days').html('-'); } }) } </script> {/block} <!-- /脚本 -->