'', 'day' => 0, 'type' => 0, ]; } foreach ($month as $item) { $c = date('d', strtotime($item['date'])) + ($week - 2); $w = date('w', strtotime($item['date'])); if ($w == 0) $w = 7; $month_list[floor($c / 7)][$w - 1] = $item; } foreach ($month_list as $key => $item) { $c = count($item); if ($c != 7) { for ($i = 0; $i < 7 - $c; $i++) { $month_list[$key][] = [ 'date' => '', 'day' => 0, 'type' => 0, ]; } } } return $month_list; } public function year_map($year, $list) { $year_map = []; $date = strtotime($year . '-01-01'); $next_year = strtotime(($year + 1) . '-01-01'); for ($i = $date; $i < $next_year; $i += 86400) { $date = date('Y-m-d', $i); $m = 'm' . date('m', $i); if (isset($list[$date])) { $year_map[$m][] = [ 'date' => $date, 'day' => date('d', $i), 'type' => $list[$date]['type'], ]; } else { $year_map[$m][] = [ 'date' => $date, 'day' => date('d', $i), 'type' => 0, ]; } } $map = []; foreach ($year_map as $item) { $map[] = self::month_map($item); } return $map; } public function list(Request $request) { Login::admin([14]); $year = $request->post('year') ?? date('Y'); $appointment_holiday_list = AppointmentHolidays::where('year', $year)->get(); $list = []; foreach ($appointment_holiday_list as $item) { $list[$item->date] = [ 'date' => $item->date, 'type' => $item->type, ]; } $year_map = self::year_map($year, $list); return Yo::echo([ 'year' => $year, 'list' => $year_map, ]); } public function change(Request $request) { Login::admin([14]); $date = $request->post('date'); $type = $request->post('type'); $appointment_holidays = AppointmentHolidays::where('date', $date)->first(); if ($appointment_holidays) { if ($type == 0) { $appointment_holidays->delete(); } else { $appointment_holidays->type = $type; $appointment_holidays->save(); } } else { if ($type != 0) { $appointment_holidays = new AppointmentHolidays(); $appointment_holidays->year = date('Y', strtotime($date)); $appointment_holidays->date = $date; $appointment_holidays->type = $type; $appointment_holidays->save(); } } return Yo::create_echo($appointment_holidays->id); } }