Нужно разработать компонент бронирования для DST Med Center

Виталий Синицын
Виталий Синицын
  • Сообщений: 8
  • Последний визит: 20 января 2025 в 02:50

Пришла задача написать новый компонент в DST Med Center, например это будет – компонент бронирования по записи к разным врачам, сам компонент врачей (каталог врачей, карточка врача) у нас уже в системе есть и она хорошо работает, т.е. в моем случае мне нужно будет дописать новый функционал который добавит функцию бронирования в карточку врача, плюс вывести в админке данные о новых записях, чтоб админ видел какие записи пришли. Также эти записи будут иметь разные статусы, которые можно менять, например – отказ, принят, в работе и.т.д.

Понятно, что данные будут разделены на backend, frontend функции плюс записи в базу данных, могли бы дать направление как создать такой компонент ориентируясь на основной смысл и то как уже написаны и устроены другие компоненты в DST Platform? 
Владислав Кузнецов
Владислав Кузнецов
  • Сообщений: 16
  • Последний визит: 20 января 2025 в 19:38

Вот общий план, как можно реализовать компонент бронирования в ДСТ Мед:

Backend1. Модель бронирования:

class Booking extends Model {
protected $fillable = ['doctor_id', 'user_id', 'status', 'appointment_time'];
 
public function doctor() {
return $this->belongsTo(Doctor::class);
}
 
public function user() {
return $this->belongsTo(User::class);
}
}

1. Контроллер бронирования:

class BookingController extends Controller {
public function create(Request $request) {
$booking = Booking::create([
'doctor_id' => $request->doctor_id,
'user_id' => $request->user_id,
'status' => 'pending',
'appointment_time' => $request->appointment_time,
]);
 
return response()->json($booking);
}
 
public function updateStatus(Request $request, $id) {
$booking = Booking::find($id);
$booking->status = $request->status;
$booking->save();
 
return response()->json($booking);
}
 
public function index() {
$bookings = Booking::with('doctor', 'user')->get();
return response()->json($bookings);
}
}

1. Маршруты:

Route::post('/bookings', [BookingController::class, 'create']);
Route::put('/bookings/{id}/status', [BookingController::class, 'updateStatus']);
Route::get('/bookings', [BookingController::class, 'index']);

Frontend1. Форма бронирования:

<form id="bookingForm">
<input type="hidden" name="doctor_id" value="{{ doctor.id }}">
<input type="hidden" name="user_id" value="{{ user.id }}">
<input type="datetime-local" name="appointment_time" required>
<button type="submit">Забронировать</button>
</form>
<script>
document.getElementById('bookingForm').addEventListener('submit', function(e) {
e.preventDefault();
const formData = new FormData(this);
 
fetch('/bookings', {
method: 'POST',
body: formData
}).then(response => response.json())
.then(data => {
alert('Бронирование успешно создано!');
});
});
</script>

1. Админка для управления бронированиями:

<table id="bookingsTable">
<thead>
<tr>
<th>Врач</th>
<th>Пациент</th>
<th>Время</th>
<th>Статус</th>
<th>Действия</th>
</tr>
</thead>
<tbody>
<!-- Здесь будут строки с бронированиями -->
</tbody>
</table>
<script>
function loadBookings() {
fetch('/bookings')
.then(response => response.json())
.then(data => {
const tableBody = document.querySelector('#bookingsTable tbody');
tableBody.innerHTML = '';
data.forEach(booking => {
const row = document.createElement('tr');
row.innerHTML = `
<td>${booking.doctor.name}</td>
<td>${booking.user.name}</td>
<td>${booking.appointment_time}</td>
<td>${booking.status}</td>
<td>
<select onchange="updateStatus(${booking.id}, this.value)">
<option value="pending" ${booking.status === 'pending' ? 'selected' : ''}>В ожидании</option>
<option value="accepted" ${booking.status === 'accepted' ? 'selected' : ''}>Принято</option>
<option value="rejected" ${booking.status === 'rejected' ? 'selected' : ''}>Отказано</option>
</select>
</td>
`;
tableBody.appendChild(row);
});
});
}
 
function updateStatus(id, status) {
fetch(`/bookings/${id}/status`, {
method: 'PUT',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ status })
}).then(response => response.json())
.then(data => {
alert('Статус обновлен!');
loadBookings();
});
}
 
loadBookings();
</script>

База данных1. Миграция для таблицы бронирований:

Schema::create('bookings', function (Blueprint $table) {
$table->id();
$table->foreignId('doctor_id')->constrained();
$table->foreignId('user_id')->constrained();
$table->string('status');
$table->timestamp('appointment_time');
$table->timestamps();
});

Этот пример демонстрирует базовую реализацию компонента бронирования. Вы можете адаптировать его под вашу конкретную архитектуру и требования.

Егор Савельев
Егор Савельев
  • Сообщений: 18
  • Последний визит: 20 января 2025 в 23:17

А смысл писать, если там этот компонент выйдет в новой версии, тем более логично что там пишет команда, а тут Вы один будете, проще дождаться уже. 

Авторизуйтесь, чтобы писать на форуме.

Заявка на услуги DST

Наш специалист свяжется с вами, обсудит оптимальную стратегию сотрудничества,
поможет сформировать бизнес требования и рассчитает стоимость услуг.

Адрес

Ижевск, ул. Воткинское шоссе, д. 170 Е, Технопарк Нобель, офис 1117

8 495 1985800
Заказать звонок

Режим работы: Пн-Пт 10:00-19:00

info@dstglobal.ru

Задать вопрос по почте

Укажите ваше имя
Укажите ваше email
Укажите ваше телефон