优化本地时间、教师分配课程

This commit is contained in:
Dai 2024-08-04 19:20:59 +08:00
parent 5f1fa5e503
commit eb4a73bd0b
15 changed files with 188 additions and 70 deletions

View File

@ -27,7 +27,12 @@ class TeacherFreeTime extends BaseModel
public function teacher()
{
return $this->hasOne(Teacher::class,'id','teacher_id')->bind(['teacher_name','teacher_account'=>"account"]);
return $this->hasOne(Teacher::class, 'id', 'teacher_id')->bind([
'teacher_name',
'teacher_account' => "account",
'time_zone_name',
'time_zone_offset'
]);
}
/**

View File

@ -24,7 +24,8 @@ class TeacherScheduleTime extends BaseModel
return $this->hasOne(Teacher::class, 'id', 'teacher_id')->bind([
'teacher_account' => 'account',
'teacher_name',
'time_zone_name'
'time_zone_name',
'time_zone_offset'
]);
}

View File

@ -64,9 +64,12 @@ class StudentHomeworkService
'subject_id' => $subject_homework->subject_id,
'date'=> $subject_homework->date,
'time'=> $subject_homework->time,
'en_time'=> $subject_homework->en_time,
'hour'=> $subject_homework->hour,
'start_time'=> $subject_homework->start_time,
'end_time'=> $subject_homework->end_time,
'en_start_time'=> $subject_homework->start_time,
'en_end_time'=> $subject_homework->end_time,
'month'=> $subject_homework->month,
'feedback_file_url' => $feedback_file_url,
]);

View File

@ -79,9 +79,12 @@ class SubjectHomeworkService
'teacher_schedule_time_id' => $data['teacher_schedule_time_id'],
'date' => $teacher_schedule_time->date,
'time' => $teacher_schedule_time->time,
'en_time' => $teacher_schedule_time->en_time,
'hour' => $teacher_schedule_time->hour,
'start_time' => $teacher_schedule_time->start_time,
'end_time' => $teacher_schedule_time->end_time,
'en_start_time' => $teacher_schedule_time->en_start_time,
'en_end_time' => $teacher_schedule_time->en_end_time,
'month' => $teacher_schedule_time->month,
'subject_id' => $teacher_schedule_time->subject_id,
'content' => isset($data['content']) ? $data['content'] : '',

View File

@ -52,6 +52,8 @@ class TeacherFreeTimeService
$en_time_period = explode('-', $en_time);
$firstDate = new DateTime($free_date . ' ' . trim($time_period[0]));
$secondDate = new DateTime($free_date . ' ' . trim($time_period[1]));
$enFirstDate = new DateTime($free_date . ' ' . trim($en_time_period[0]));
$enSecondDate = new DateTime($free_date . ' ' . trim($en_time_period[1]));
$diff = $secondDate->diff($firstDate);
$h = $diff->h;
$m = round($diff->i / 60, 2);
@ -65,6 +67,8 @@ class TeacherFreeTimeService
'hour' => $hour,
'start_time' => date('Y-m-d H:i:s', $firstDate->getTimestamp()),
'end_time' => date('Y-m-d H:i:s', $secondDate->getTimestamp()),
'en_start_time' => date('Y-m-d H:i:s', $enFirstDate->getTimestamp()),
'en_end_time' => date('Y-m-d H:i:s', $enSecondDate->getTimestamp()),
'month' => date('Y-m', strtotime($free_date)),
];

View File

@ -200,9 +200,12 @@ class StudentScheduleController extends Crud
'subject_id' => $teacher_schedule_time->subject_id,
'date' => $teacher_schedule_time->date,
'time' => $teacher_schedule_time->time,
'en_time' => $teacher_schedule_time->en_time,
'hour' => $teacher_schedule_time->hour,
'start_time' => $teacher_schedule_time->start_time,
'end_time' => $teacher_schedule_time->end_time,
'en_start_time' => $teacher_schedule_time->en_start_time,
'en_end_time' => $teacher_schedule_time->en_end_time,
'month' => $teacher_schedule_time->month,
]);
if (!$res) {

View File

@ -246,7 +246,7 @@ class TeacherFreeTimeController extends Crud
//所有学生
$student = Student::order('id asc')->field('id,account,student_name')->select()->toArray();
$time_period = explode(' - ', $free_time['time']);
$time_period = explode(' - ', $free_time['en_time']);
$limit_time = [
'start_time' => date('H:i', strtotime($time_period[0])),
'end_time' => date('H:i', strtotime($time_period[1])),

View File

@ -123,20 +123,24 @@ class TeacherScheduleTimeController extends Crud
throw new Exception('教师空闲时间不存在');
}
foreach ($data['schedule_time'] as $item) {
foreach ($data['schedule_en_time'] as $item) {
$time_period = explode(' - ', $item);
$start_time = strtotime($free_time->date . ' ' . trim($time_period[0]));
$end_time = strtotime($free_time->date . ' ' . trim($time_period[1]));
if (!(strtotime($free_time->start_time) <= $start_time && strtotime($free_time->end_time) >= $end_time)) {
if (!(strtotime($free_time->en_start_time) <= $start_time && strtotime($free_time->en_end_time) >= $end_time)) {
throw new Exception('时间' . $item . '不在老师空闲范围内');
}
}
\app\common\model\TeacherScheduleTime::where(['free_time_id' => $free_time->id])->select()->delete();
foreach ($data['schedule_time'] as $item) {
foreach ($data['schedule_time'] as $index => $item) {
$time_period = explode(' - ', $item);
$en_time_period = explode(' - ', $data['schedule_en_time'][$index]);
$start_time = $free_time->date . ' ' . trim($time_period[0]);
$end_time = $free_time->date . ' ' . trim($time_period[1]);
$en_start_time = $free_time->date . ' ' . trim($en_time_period[0]);
$en_end_time = $free_time->date . ' ' . trim($en_time_period[1]);
$firstDate = new DateTime($start_time);
$secondDate = new DateTime($end_time);
@ -150,9 +154,12 @@ class TeacherScheduleTimeController extends Crud
'teacher_id' => $free_time->teacher_id,
'date' => $free_time->date,
'time' => $time,
'en_time' => $data['schedule_en_time'][$index],
'hour' => $hour,
'start_time' => $start_time,
'end_time' => $end_time,
'en_start_time' => $en_start_time,
'en_end_time' => $en_end_time,
'month' => $free_time->month,
'free_time_id' => $free_time->id,
]);

View File

@ -159,7 +159,10 @@
title: "日期",align: "center",
field: "date",
},{
title: "时间",align: "center",
title: "本地时间",align: "center",
field: "en_time",
},{
title: "中国时间",align: "center",
field: "time",
},{
title: "课程",align: "center",

View File

@ -215,7 +215,10 @@
title: "日期", align: "center",
field: "date",
}, {
title: "时间段", align: "center",
title: "本地时间", align: "center",
field: "en_time",
}, {
title: "中国时间", align: "center",
field: "time",
}, {
title: "课时", align: "center",

View File

@ -218,7 +218,10 @@
title: "日期", align: "center",
field: "date",
}, {
title: "时间", align: "center",
title: "本地时间", align: "center",
field: "en_time",
}, {
title: "中国时间", align: "center",
field: "time",
}, {
title: "开始时间", align: "center",

View File

@ -194,7 +194,10 @@
title: "日期", align: "center",
field: "date",
}, {
title: "时间", align: "center",
title: "本地时间", align: "center",
field: "en_time",
}, {
title: "中国时间", align: "center",
field: "time",
}, {
title: "课时", align: "center",

View File

@ -17,21 +17,21 @@
</div>
<!-- 表格顶部工具栏 -->
<script type="text/html" id="table-toolbar">
<button class="pear-btn pear-btn-primary pear-btn-md" lay-event="add" permission="app.admin.teacher.insert">
<i class="layui-icon layui-icon-add-1"></i>新增
</button>
<button class="pear-btn pear-btn-danger pear-btn-md" lay-event="batchRemove" permission="app.admin.teacher.delete">
<i class="layui-icon layui-icon-delete"></i>删除
</button>
</script>
<!-- <script type="text/html" id="table-toolbar">-->
<!-- <button class="pear-btn pear-btn-primary pear-btn-md" lay-event="add" permission="app.admin.teacher.insert">-->
<!-- <i class="layui-icon layui-icon-add-1"></i>新增-->
<!-- </button>-->
<!-- <button class="pear-btn pear-btn-danger pear-btn-md" lay-event="batchRemove" permission="app.admin.teacher.delete">-->
<!-- <i class="layui-icon layui-icon-delete"></i>删除-->
<!-- </button>-->
<!-- </script>-->
<!-- 表格行工具栏 -->
<script type="text/html" id="table-bar">
<button class="pear-btn pear-btn-xs tool-btn" lay-event="edit" permission="app.admin.teacher.update">编辑</button>
<button class="pear-btn pear-btn-xs tool-btn" lay-event="check_free_schedule" permission="app.admin.teacher.update">查看排课</button>
<button class="pear-btn pear-btn-xs tool-btn" lay-event="rest_password" permission="app.admin.teacher.update">重置密码</button>
<button class="pear-btn pear-btn-xs tool-btn" lay-event="remove" permission="app.admin.teacher.delete">删除</button>
<!-- <button type="button" class="layui-btn layui-btn-xs" lay-event="edit" permission="app.admin.teacher.update">编辑</button>-->
<button type="button" class="layui-btn layui-btn-xs layui-bg-orange" lay-event="check_free_schedule" permission="app.admin.teacher.update">查看排课</button>
<!-- <button class="pear-btn pear-btn-xs tool-btn" lay-event="rest_password" permission="app.admin.teacher.update">重置密码</button>-->
<!-- <button class="pear-btn pear-btn-xs tool-btn" lay-event="remove" permission="app.admin.teacher.delete">删除</button>-->
</script>
<script src="/app/admin/component/layui/layui.js?v=2.8.12"></script>
@ -209,7 +209,7 @@
let month = obj.data['month'];
let index = layer.open({
type: 2,
title: "修改",
title: "空闲时间日历",
shade: 0.1,
maxmin: true,
area: [common.isModile()?"100%":"500px", common.isModile()?"100%":"450px"],

View File

@ -17,11 +17,26 @@
<div class="layui-form-item">
<label class="layui-form-label">教师</label>
<div class="layui-input-block">
<input type="text" name="teacher_name" value="{$free_time['teacher_name']}" disabled class="layui-input">
<input type="text" name="teacher_name" value="{$free_time['teacher_name']}" disabled
class="layui-input">
<input type="hidden" name="teacher_id" value="{$free_time['teacher_id']}" class="layui-input">
<input type="hidden" name="id" value="{$free_time['id']}" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">教师时区</label>
<div class="layui-input-block">
<input type="text" name="time_zone_name" value="{$free_time['time_zone_name']}" disabled
class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">时区时差</label>
<div class="layui-input-block">
<input type="text" name="time_zone_offset" value="{$free_time['time_zone_offset']}" disabled
class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">月份</label>
@ -37,7 +52,13 @@
</div>
<div class="layui-form-item">
<label class="layui-form-label">时间</label>
<label class="layui-form-label">时间(本地)</label>
<div class="layui-input-block">
<input type="text" name="time" value="{$free_time['en_time']}" disabled class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">时间(中国)</label>
<div class="layui-input-block">
<input type="text" name="time" value="{$free_time['time']}" disabled class="layui-input">
</div>
@ -62,23 +83,49 @@
<div class="layui-field-box" id="schedule_free_time">
{if (empty($teacher_schedule_time))}
<div class="layui-form-item">
<div class="layui-input-inline" style="width: 250px;">
<input type="text" name="schedule_time[]" lay-verify="required" placeholder="请选择排课时间" curNum='1' autocomplete="off" class="layui-input time">
<label class="layui-form-label">本地时间</label>
<div class="layui-input-inline" style="width: 120px;">
<input type="text" name="schedule_en_time[]" lay-verify="required"
placeholder="请选择排课时间"
curNum='1' autocomplete="off" class="layui-input time">
</div>
<div class="layui-input-inline" style="margin-left: 50px;padding-top: 10px;">
<button type="button" class="layui-btn layui-btn-xs layui-bg-green add-schedule-time" lay-event="remove" permission="app.admin.teacher.delete">添加</button>
<button type="button" class="layui-btn layui-btn-xs layui-bg-red remove-schedule-time" lay-event="remove" permission="app.admin.teacher.delete">删除</button>
<label class="layui-form-label">中国时间</label>
<div class="layui-input-inline" style="width: 120px;">
<input type="text" name="schedule_time[]" lay-verify="required"
value="" placeholder="请选择排课时间" curNum='1'
autocomplete="off" readonly class="layui-input schedule_time">
</div>
<div class="layui-input-inline" style="margin-left: 50px;padding-top: 10px;width: 90px">
<button type="button" class="layui-btn layui-btn-xs layui-bg-green add-schedule-time"
lay-event="remove" permission="app.admin.teacher.delete">添加
</button>
<button type="button" class="layui-btn layui-btn-xs layui-bg-red remove-schedule-time"
lay-event="remove" permission="app.admin.teacher.delete">删除
</button>
</div>
</div>
{else /}
{foreach $teacher_schedule_time as $index=>$item}
<div class="layui-form-item">
<div class="layui-input-inline" style="width: 250px;">
<input type="text" name="schedule_time[$index+1]" lay-verify="required" value="{$item['time']}" placeholder="请选择排课时间" curNum='{$index+1}' autocomplete="off" class="layui-input time">
<label class="layui-form-label">本地时间</label>
<div class="layui-input-inline" style="width: 120px;">
<input type="text" name="schedule_en_time[{$index+1}]" lay-verify="required"
value="{$item['en_time']}" placeholder="请选择排课时间" curNum='{$index+1}'
autocomplete="off" class="layui-input time">
</div>
<div class="layui-input-inline" style="margin-left: 50px;padding-top: 10px;">
<button type="button" class="layui-btn layui-btn-xs layui-bg-green add-schedule-time" lay-event="remove" permission="app.admin.teacher.delete">添加</button>
<button type="button" class="layui-btn layui-btn-xs layui-bg-red remove-schedule-time" lay-event="remove" permission="app.admin.teacher.delete">删除</button>
<label class="layui-form-label">中国时间</label>
<div class="layui-input-inline" style="width: 120px;">
<input type="text" name="schedule_time[{$index+1}]" lay-verify="required"
value="{$item['time']}" placeholder="请选择排课时间" curNum='{$index+1}'
autocomplete="off" readonly class="layui-input schedule_time">
</div>
<div class="layui-input-inline" style="margin-left: 50px;padding-top: 10px;width: 90px">
<button type="button" class="layui-btn layui-btn-xs layui-bg-green add-schedule-time"
lay-event="remove" permission="app.admin.teacher.delete">添加
</button>
<button type="button" class="layui-btn layui-btn-xs layui-bg-red remove-schedule-time"
lay-event="remove" permission="app.admin.teacher.delete">删除
</button>
</div>
</div>
{/foreach}
@ -116,8 +163,6 @@
const UPDATE_API = "/app/admin/teacher-schedule-time/update";
// 获取数据库记录
layui.use(["form", "util", "popup", 'laydate'], function () {
let $ = layui.$;
@ -138,24 +183,53 @@
var layKey = layui.$(this.elem).attr('lay-key');
layui.$('#layui-laydate' + layKey).children().eq(0).find('.layui-laydate-list>li').width('50%').last('li').hide();
layui.$('#layui-laydate' + layKey).children().eq(1).find('.layui-laydate-list>li').width('50%').last('li').hide();
},
done: function (value, date, endDate) {
let start_date_time = new Date(date.year, date.month, date.date, parseInt(date.hours + parseInt("{$free_time['time_zone_offset']}")), date.minutes, date.seconds)
let start_time = start_date_time.toLocaleTimeString([], {hour: "2-digit", minute: "2-digit"})
let end_date_time = new Date(endDate.year, endDate.month, endDate.date, parseInt(endDate.hours + parseInt("{$free_time['time_zone_offset']}")), endDate.minutes, endDate.seconds)
let end_time = end_date_time.toLocaleTimeString([], {hour: "2-digit", minute: "2-digit"})
$(this.elem).parent().parent().children().find('.schedule_time').val(start_time + ' - ' + end_time)
}
});
// 添加时间
$('#schedule_free_time').on('click', '.add-schedule-time', function () {
console.log('add');
var html = $(this).parent().parent().parent().clone();
var maxNum = $('#schedule_free_time').find('.time:last').attr('curNum');
maxNum = Number(maxNum) + 1;
// var htmlStr = '<div class="layui-form-item">\n' +
// ' <div class="layui-input-inline" style="width: 250px;">\n' +
// ' <input type="text" name="schedule_time[' + maxNum + ']" lay-verify="required" placeholder="请选择排课时间" curNum="' + maxNum + '" autocomplete="off" class="layui-input time">\n' +
// ' </div>\n' +
// ' <div class="layui-input-inline" style="margin-left: 50px;padding-top: 10px;">\n' +
// ' <button type="button" class="layui-btn layui-btn-xs layui-bg-green add-schedule-time" lay-event="remove" permission="app.admin.teacher.delete">添加</button>\n' +
// ' <button type="button" class="layui-btn layui-btn-xs layui-bg-red remove-schedule-time" lay-event="remove" permission="app.admin.teacher.delete">删除</button>\n' +
// ' </div>\n' +
// '</div>';
var htmlStr = '<div class="layui-form-item">\n' +
' <div class="layui-input-inline" style="width: 250px;">\n' +
' <input type="text" name="schedule_time[' + maxNum + ']" lay-verify="required" placeholder="请选择排课时间" curNum="'+ maxNum +'" autocomplete="off" class="layui-input time">\n' +
' <label class="layui-form-label">本地时间</label>\n' +
' <div class="layui-input-inline" style="width: 120px;">\n' +
' <input type="text" name="schedule_en_time[' + maxNum + ']" lay-verify="required"\n' +
' placeholder="请选择排课时间"\n' +
' curNum="' + maxNum + '" autocomplete="off" class="layui-input time">\n' +
' </div>\n' +
' <div class="layui-input-inline" style="margin-left: 50px;padding-top: 10px;">\n' +
' <button type="button" class="layui-btn layui-btn-xs layui-bg-green add-schedule-time" lay-event="remove" permission="app.admin.teacher.delete">添加</button>\n' +
' <button type="button" class="layui-btn layui-btn-xs layui-bg-red remove-schedule-time" lay-event="remove" permission="app.admin.teacher.delete">删除</button>\n' +
' <label class="layui-form-label">中国时间</label>\n' +
' <div class="layui-input-inline" style="width: 120px;">\n' +
' <input type="text" name="schedule_time[' + maxNum + ']" lay-verify="required"\n' +
' value="" placeholder="请选择排课时间" curNum="' + maxNum + '"\n' +
' autocomplete="off" readonly class="layui-input schedule_time">\n' +
' </div>\n' +
' <div class="layui-input-inline" style="margin-left: 50px;padding-top: 10px;width: 90px">\n' +
' <button type="button" class="layui-btn layui-btn-xs layui-bg-green add-schedule-time"\n' +
' lay-event="remove" permission="app.admin.teacher.delete">添加\n' +
' </button>\n' +
' <button type="button" class="layui-btn layui-btn-xs layui-bg-red remove-schedule-time"\n' +
' lay-event="remove" permission="app.admin.teacher.delete">删除\n' +
' </button>\n' +
' </div>\n' +
' </div>';
@ -174,6 +248,13 @@
var layKey = layui.$(this.elem).attr('lay-key');
layui.$('#layui-laydate' + layKey).children().eq(0).find('.layui-laydate-list>li').width('50%').last('li').hide();
layui.$('#layui-laydate' + layKey).children().eq(1).find('.layui-laydate-list>li').width('50%').last('li').hide();
},
done: function (value, date, endDate) {
let start_date_time = new Date(date.year, date.month, date.date, parseInt(date.hours + parseInt("{$free_time['time_zone_offset']}")), date.minutes, date.seconds)
let start_time = start_date_time.toLocaleTimeString([], {hour: "2-digit", minute: "2-digit"})
let end_date_time = new Date(endDate.year, endDate.month, endDate.date, parseInt(endDate.hours + parseInt("{$free_time['time_zone_offset']}")), endDate.minutes, endDate.seconds)
let end_time = end_date_time.toLocaleTimeString([], {hour: "2-digit", minute: "2-digit"})
$(this.elem).parent().parent().children().find('.schedule_time').val(start_time + ' - ' + end_time)
}
});
})
@ -220,7 +301,6 @@
});
//提交事件
layui.use(["form", "popup"], function () {
// 字段验证允许为空

View File

@ -172,8 +172,8 @@
title: "时区名称",align: "center",
field: "time_zone_name",
},{
title: "时差",align: "center",
field: "time_zone",
title: "时差/h",align: "center",
field: "time_zone_offset",
},{
title: "创建时间",align: "center",
field: "created_at",