优化问题

This commit is contained in:
Dai 2024-09-08 22:15:55 +08:00
parent 92b948fe4e
commit c8fb9aef09
10 changed files with 146 additions and 53 deletions

View File

@ -100,7 +100,7 @@ class TeacherScheduleTimeController extends BaseController
'filed_id_width' => 60,//序号列的宽度 'filed_id_width' => 60,//序号列的宽度
'filed_name_width' => 120,//玩家名称的宽度 'filed_name_width' => 120,//玩家名称的宽度
'filed_data_width' => 120,//数据列的宽度 'filed_data_width' => 120,//数据列的宽度
'table_header' => ['', '星期', '日期', '上课时间', '学科', '教师', '学生','课时'],//表头文字 'table_header' => ['', 'Week', 'Date', 'Time', 'Subject', 'Teacher', 'Student','Duration'],//表头文字
'column_text_offset_arr' => [45, 70, 70, 90, 55, 65, 65, 65],//表头文字左偏移量 'column_text_offset_arr' => [45, 70, 70, 90, 55, 65, 65, 65],//表头文字左偏移量
'row_text_offset_arr' => [50, 110, 90, 110, 90, 90, 90, 90],//数据列文字左偏移量 'row_text_offset_arr' => [50, 110, 90, 110, 90, 90, 90, 90],//数据列文字左偏移量
]; ];

View File

@ -33,4 +33,13 @@ class SubjectHomework extends BaseModel
return $this->hasMany(StudentHomework::class, 'subject_homework_id', 'id'); return $this->hasMany(StudentHomework::class, 'subject_homework_id', 'id');
} }
/**
* @desc 安排学生
* @return \think\model\relation\HasMany
*/
public function studentHomeworkOne()
{
return $this->hasOne(StudentHomework::class, 'subject_homework_id', 'id');
}
} }

View File

@ -54,6 +54,17 @@ class TeacherScheduleTime extends BaseModel
return $this->hasMany(StudentSchedule::class, 'teacher_schedule_time_id', 'id'); return $this->hasMany(StudentSchedule::class, 'teacher_schedule_time_id', 'id');
} }
public function studentScheduleOne1()
{
return $this->hasOne(StudentSchedule::class, 'teacher_schedule_time_id', 'id');
}
public function studentScheduleOne()
{
return $this->hasOne(StudentSchedule::class, 'teacher_schedule_time_id', 'id')->bind([
'student_name'
]);
}
public function studentHomework() public function studentHomework()
{ {
return $this->hasMany(StudentHomework::class, 'teacher_schedule_time_id', 'id'); return $this->hasMany(StudentHomework::class, 'teacher_schedule_time_id', 'id');

View File

@ -47,6 +47,7 @@ class StudentScheduleController extends Crud
$subject = Subject::order('sort desc,id asc')->field('id,subject_name,english_name')->select()->toArray(); $subject = Subject::order('sort desc,id asc')->field('id,subject_name,english_name')->select()->toArray();
$student = Student::order('id asc')->field('id,student_name,account')->select()->toArray(); $student = Student::order('id asc')->field('id,student_name,account')->select()->toArray();
return view('student-schedule/index', ['teacher' => $teacher, 'subject' => $subject, 'student' => $student]); return view('student-schedule/index', ['teacher' => $teacher, 'subject' => $subject, 'student' => $student]);
} }
@ -198,6 +199,8 @@ class StudentScheduleController extends Crud
if (!$conflict->isEmpty()) { if (!$conflict->isEmpty()) {
throw new Exception("该学生课程和【{$conflict->teacher_name}】的【{$conflict->subject_name} {$conflict->date} {$conflict->time} 】有冲突"); throw new Exception("该学生课程和【{$conflict->teacher_name}】的【{$conflict->subject_name} {$conflict->date} {$conflict->time} 】有冲突");
} }
//删除其它学生的课程
$student_schedule = StudentSchedule::where(['teacher_schedule_time_id' => $teacher_schedule_time->id])->delete();
$student = Student::where(['id'=>$data['student_id']])->findOrEmpty(); $student = Student::where(['id'=>$data['student_id']])->findOrEmpty();
$res = \app\common\model\StudentSchedule::create([ $res = \app\common\model\StudentSchedule::create([

View File

@ -2,6 +2,9 @@
namespace plugin\admin\app\controller; namespace plugin\admin\app\controller;
use app\common\model\Student;
use app\common\model\Subject;
use app\common\model\Teacher;
use app\common\service\SendMsgCronJobService; use app\common\service\SendMsgCronJobService;
use app\constant\ResponseCode; use app\constant\ResponseCode;
use support\Request; use support\Request;
@ -37,23 +40,50 @@ class SubjectHomeworkController extends Crud
*/ */
public function index(): Response public function index(): Response
{ {
return view('subject-homework/index'); $teacher = Teacher::order('id desc')->field('id,teacher_name')->select()->toArray();
$subject = Subject::order('id desc')->field('id,subject_name, english_name')->select()->toArray();
$student = Student::order('id desc')->field('id,student_name')->select()->toArray();
return view('subject-homework/index', compact('teacher', 'subject', 'student'));
} }
public function select(Request $request): Response public function select(Request $request): Response
{ {
try { try {
$homework = \app\common\model\SubjectHomework::order('id desc'); $homework = \app\common\model\SubjectHomework::order('wa_subject_homework.id desc')
if (1) { ->alias('sh')
->leftJoin('student_homework sth', 'sth.subject_homework_id = sh.id')
->leftJoin('student s', 's.id = sth.student_id')
->field('sh.*,s.student_name');
$data = $request->get();
if (isset($data['teacher_id']) && $data['teacher_id']) {
$homework->where('sh.teacher_id', $data['teacher_id']);
} }
if (isset($data['date']) && $data['date']) {
$homework->where('sh.date', $data['date']);
}
if (isset($data['month']) && $data['month']) {
$homework->where('sh.month', $data['month']);
}
if (isset($data['subject_id']) && $data['subject_id']) {
$homework->where('sh.subject_id', $data['subject_id']);
}
if (isset($data['is_publish']) && $data['is_publish'] !== '') {
$homework->where('sh.is_publish', $data['is_publish']);
}
if (isset($data['student_id']) && $data['student_id']) {
$homework->where(['sth.student_id'=> $data['student_id']]);
}
$limit = (int)$request->get('limit', 10); $limit = (int)$request->get('limit', 10);
$limit = $limit <= 0 ? 10 : $limit; $limit = $limit <= 0 ? 10 : $limit;
$page = (int)$request->get('page'); $page = (int)$request->get('page');
$page = $page > 0 ? $page : 1; $page = $page > 0 ? $page : 1;
$total = $homework->count(); $total = $homework->count();
$list = $homework->page($page, $limit)->with(['teacher', 'subject'])->select(); $list = $homework
->page($page, $limit)->with(['teacher', 'subject'])->select();
return json([ return json([
'code' => ResponseCode::WEB_API_SUCCESS, 'code' => ResponseCode::WEB_API_SUCCESS,

View File

@ -18,6 +18,7 @@ use support\Response;
use plugin\admin\app\model\TeacherScheduleTime; use plugin\admin\app\model\TeacherScheduleTime;
use plugin\admin\app\controller\Crud; use plugin\admin\app\controller\Crud;
use support\exception\BusinessException; use support\exception\BusinessException;
use think\db\Query;
use think\Exception; use think\Exception;
use DateTime; use DateTime;
use think\facade\Db; use think\facade\Db;
@ -52,14 +53,16 @@ class TeacherScheduleTimeController extends Crud
$teacher = Teacher::order('id asc')->field('id,teacher_name,account')->select()->toArray(); $teacher = Teacher::order('id asc')->field('id,teacher_name,account')->select()->toArray();
//所有课程 //所有课程
$subject = Subject::order('sort desc,id asc')->field('id,subject_name,english_name')->select()->toArray(); $subject = Subject::order('sort desc,id asc')->field('id,subject_name,english_name')->select()->toArray();
return view('teacher-schedule-time/index', ['teacher' => $teacher, 'subject' => $subject]); $student = Student::order('id asc')->field('id,student_name,account')->select()->toArray();
return view('teacher-schedule-time/index', ['teacher' => $teacher, 'subject' => $subject, 'student' => $student]);
} }
public function select(Request $request): Response public function select(Request $request): Response
{ {
try { try {
$data = $request->get(); $data = $request->get();
$teacherSchedule = \app\common\model\TeacherScheduleTime::order('id desc'); $teacherSchedule = \app\common\model\TeacherScheduleTime::order('wa_teacher_schedule_time.id desc');
if (isset($data['teacher_id']) && $data['teacher_id']) { if (isset($data['teacher_id']) && $data['teacher_id']) {
$teacherSchedule->where(['teacher_id' => $data['teacher_id']]); $teacherSchedule->where(['teacher_id' => $data['teacher_id']]);
} }
@ -75,13 +78,22 @@ class TeacherScheduleTimeController extends Crud
if (isset($data['is_publish']) && $data['is_publish'] !== '') { if (isset($data['is_publish']) && $data['is_publish'] !== '') {
$teacherSchedule->where(['is_publish' => $data['is_publish']]); $teacherSchedule->where(['is_publish' => $data['is_publish']]);
} }
if (isset($data['student_id']) && $data['student_id']) {
//查找该学生的排课id
$teacherSchedule->hasWhere('studentScheduleOne1', function (Query $query) use ($data) {
$query->where(['student_id' => $data['student_id']])->whereNull('deleted_at');
});
}
$limit = (int)$request->get('limit', 10); $limit = (int)$request->get('limit', 10);
$limit = $limit <= 0 ? 10 : $limit; $limit = $limit <= 0 ? 10 : $limit;
$page = (int)$request->get('page'); $page = (int)$request->get('page');
$page = $page > 0 ? $page : 1; $page = $page > 0 ? $page : 1;
$total = $teacherSchedule->count(); $total = $teacherSchedule->count();
$list = $teacherSchedule->with(['subject', 'teacher'])->page($page, $limit)->select(); $list = $teacherSchedule->with(['subject', 'teacher', 'studentScheduleOne'])->page($page, $limit)->select();
// print '<pre>';
// print_r($list);
// die;
return json([ return json([
'code' => ResponseCode::WEB_API_SUCCESS, 'code' => ResponseCode::WEB_API_SUCCESS,
@ -318,7 +330,7 @@ class TeacherScheduleTimeController extends Crud
if (isset($data['is_publish'])) { if (isset($data['is_publish'])) {
$teacher_schedule_time->is_publish = $data['is_publish']; $teacher_schedule_time->is_publish = $data['is_publish'];
if($data['is_publish']){ if ($data['is_publish']) {
(new SendMsgCronJobService())->teacherScheduleTimePublishMsgToTeacher($teacher_schedule_time->id); (new SendMsgCronJobService())->teacherScheduleTimePublishMsgToTeacher($teacher_schedule_time->id);
} }
} }
@ -459,11 +471,11 @@ class TeacherScheduleTimeController extends Crud
// $column = Coordinate::columnIndexFromString(2); // $column = Coordinate::columnIndexFromString(2);
$offset_row =2; $offset_row = 2;
foreach ($month_days as $index => $date) { foreach ($month_days as $index => $date) {
$week = date('l', strtotime($date)); $week = date('l', strtotime($date));
if($week == 'Sunday' && $index != 0){ if ($week == 'Sunday' && $index != 0) {
//合并单元格 //合并单元格
$merge_offset = $index + $offset_row; $merge_offset = $index + $offset_row;
$worksheet->mergeCells("A{$merge_offset}:H{$merge_offset}"); $worksheet->mergeCells("A{$merge_offset}:H{$merge_offset}");
@ -475,7 +487,7 @@ class TeacherScheduleTimeController extends Crud
$en_time = ''; $en_time = '';
$subject_name = ''; $subject_name = '';
$teacher_name = ''; $teacher_name = '';
$hour= ''; $hour = '';
if (isset($export_data[$date])) { if (isset($export_data[$date])) {
$merge_count = count($export_data[$date]); $merge_count = count($export_data[$date]);
foreach ($export_data[$date] as $schedule) { foreach ($export_data[$date] as $schedule) {
@ -512,7 +524,7 @@ class TeacherScheduleTimeController extends Crud
$file_name = $month . '-' . time() . '.xlsx'; $file_name = $month . '-' . time() . '.xlsx';
$file_path = '/export_file/'; $file_path = '/export_file/';
$save_path = public_path($file_path); $save_path = public_path($file_path);
if(!is_dir($save_path)){ if (!is_dir($save_path)) {
mkdir($save_path, 0777, true); mkdir($save_path, 0777, true);
} }
$writer->save($save_path . $file_name); $writer->save($save_path . $file_name);

View File

@ -16,7 +16,13 @@
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">教师</label> <label class="layui-form-label">教师</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" name="teacher_id" value="" class="layui-input"> <select lay-search="" name="teacher_id">
<option value="">请选择或搜索教师</option>
{foreach $teacher as $item}
<option value="{$item['id']}">{$item['id']} - {$item['teacher_name']}</option>
{/foreach}
</select>
<!-- <input type="text" name="teacher_id" value="" class="layui-input">-->
</div> </div>
</div> </div>
@ -27,19 +33,19 @@
</div> </div>
</div> </div>
<div class="layui-form-item"> <!-- <div class="layui-form-item">-->
<label class="layui-form-label">开始时间</label> <!-- <label class="layui-form-label">开始时间</label>-->
<div class="layui-input-block"> <!-- <div class="layui-input-block">-->
<input type="text" name="start_time" id="start_time" autocomplete="off" class="layui-input"> <!-- <input type="text" name="start_time" id="start_time" autocomplete="off" class="layui-input">-->
</div> <!-- </div>-->
</div> <!-- </div>-->
<div class="layui-form-item"> <!-- <div class="layui-form-item">-->
<label class="layui-form-label">结束时间</label> <!-- <label class="layui-form-label">结束时间</label>-->
<div class="layui-input-block"> <!-- <div class="layui-input-block">-->
<input type="text" name="end_time" id="end_time" autocomplete="off" class="layui-input"> <!-- <input type="text" name="end_time" id="end_time" autocomplete="off" class="layui-input">-->
</div> <!-- </div>-->
</div> <!-- </div>-->
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">月份</label> <label class="layui-form-label">月份</label>
@ -51,31 +57,28 @@
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">课程id</label> <label class="layui-form-label">课程id</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" name="subject_id" value="" class="layui-input"> <select lay-search="" name="subject_id">
<option value="">请选择或搜索课程</option>
{foreach $subject as $item}
<option value="{$item['id']}">{$item['subject_name']} / {$item['english_name']}</option>
{/foreach}
</select>
<!-- <input type="text" name="subject_id" value="" class="layui-input">-->
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">家庭作业文件名称</label> <label class="layui-form-label">学生</label>
<div class="layui-input-block"> <div class="layui-input-block">
<div class="layui-input-block"> <select lay-search="" name="student_id">
<input type="hidden" autocomplete="off" name="homework_file_name[]" value="like" <option value="">请选择或搜索学生</option>
class="layui-input inline-block"> {foreach $student as $item}
<input type="text" autocomplete="off" name="homework_file_name[]" class="layui-input"> <option value="{$item['id']}">{$item['id']} - {$item['student_name']}</option>
</div> {/foreach}
</select>
</div> </div>
</div> </div>
<div class="layui-form-item">
<label class="layui-form-label">新版本家庭作业文件名称</label>
<div class="layui-input-block">
<div class="layui-input-block">
<input type="hidden" autocomplete="off" name="homework_version_file_name[]" value="like"
class="layui-input inline-block">
<input type="text" autocomplete="off" name="homework_version_file_name[]" class="layui-input">
</div>
</div>
</div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">是否发布</label> <label class="layui-form-label">是否发布</label>
@ -171,7 +174,7 @@
layui.use(["laydate"], function () { layui.use(["laydate"], function () {
layui.laydate.render({ layui.laydate.render({
elem: "#month", elem: "#month",
type: 'month'
}); });
}) })
@ -240,6 +243,9 @@
}, { }, {
title: "月份", align: "center", title: "月份", align: "center",
field: "month", field: "month",
}, {
title: "学生", align: "center",
field: "student_name",
}, { }, {
title: "课程id", align: "center", title: "课程id", align: "center",
field: "subject_id", field: "subject_id",

View File

@ -66,6 +66,19 @@
</div> </div>
</div> </div>
<div class="layui-form-item">
<label class="layui-form-label">学生</label>
<div class="layui-input-block">
<select lay-search="" name="student_id">
<option value="">请选择或搜索学生</option>
{foreach $student as $item}
<option value="{$item['id']}">{$item['id']} - {$item['student_name']}</option>
{/foreach}
</select>
<!-- <input type="number" name="subject_id" value="" class="layui-input">-->
</div>
</div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">是否发布</label> <label class="layui-form-label">是否发布</label>
<div class="layui-input-block"> <div class="layui-input-block">
@ -209,6 +222,9 @@
}, { }, {
title: "课程", align: "center", title: "课程", align: "center",
field: "subject_name", field: "subject_name",
}, {
title: "学生", align: "center",
field: "student_name",
}, { }, {
title: "是否发布", align: "center", title: "是否发布", align: "center",
field: "is_publish", field: "is_publish",

View File

@ -85,11 +85,16 @@
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">学生</label> <label class="layui-form-label">学生</label>
<div class="layui-input-block"> <div class="layui-input-block">
<select lay-search="" lay-filter="check_student">
<option value="">请选择或搜索学生</option>
{foreach $student as $item} {foreach $student as $item}
<input type="checkbox" name="student_id[]" title="{$item['student_name']}" lay-skin="tag" <option value="{$item['id']}" {if in_array($item['id'], $student_schedule_id)} selected {/if} >{$item['id']} - {$item['student_name']}</option>
lay-filter="check_student" {if in_array($item['id'], $student_schedule_id)} checked {/if} <!-- <input type="checkbox" name="student_id[]" title="{$item['student_name']}" lay-skin="tag"-->
value="{$item['id']}"> <!-- lay-filter="check_student" {if in_array($item['id'], $student_schedule_id)} checked {/if}-->
<!-- value="{$item['id']}">-->
{/foreach} {/foreach}
</select>
</div> </div>
</div> </div>
</div> </div>
@ -165,10 +170,10 @@
}); });
}) })
form.on('checkbox(check_student)', function (data) { form.on('select(check_student)', function (data) {
var elem = data.elem; // 获得 checkbox 原始 DOM 对象 var elem = data.elem; // 获得 checkbox 原始 DOM 对象
var othis = data.othis; var othis = data.othis;
var type = elem.checked ? 'add' : 'remove'; // 获得 checkbox 选中状态 var type = elem.value ? 'add' : 'remove'; // 获得 checkbox 选中状态
var student_id = elem.value; // 获得 checkbox 值 var student_id = elem.value; // 获得 checkbox 值
let teacher_schedule_time_id = "{$schedule_time['id']}"; let teacher_schedule_time_id = "{$schedule_time['id']}";
var that = this; var that = this;
@ -188,6 +193,7 @@
}); });
} }
return layui.popup.success("操作成功", function () { return layui.popup.success("操作成功", function () {
parent.refresh();
// parent.refreshTable(); // parent.refreshTable();
// parent.refreshTable(); // parent.refreshTable();
// parent.location.reload(); // parent.location.reload();

View File

@ -212,10 +212,10 @@
title: "空闲时间日历", title: "空闲时间日历",
shade: 0.1, shade: 0.1,
maxmin: true, maxmin: true,
area: [common.isModile()?"100%":"500px", common.isModile()?"100%":"450px"], area: [common.isModile() ? "100%" : "1080px", common.isModile() ? "100%" : "750px"],
content: '/app/admin/teacherFreeTime/teacherFreeTimeSchedule?teacher_id=' + teacher_id + '&month=' + month content: '/app/admin/teacherFreeTime/teacherFreeTimeSchedule?teacher_id=' + teacher_id + '&month=' + month
}); });
layer.full(index); // layer.full(index);
} }
// 表格编辑数据 // 表格编辑数据
let rest_password = function(obj) { let rest_password = function(obj) {