nim_style 3 #14

Merged
nimtaurel merged 1 commits from nim_style into master 2025-05-19 13:36:39 +00:00
5 changed files with 130 additions and 67 deletions

View File

@ -32,12 +32,11 @@ class Main extends Component
]); ]);
$response = (new \App\Http\Controllers\MobileApiController)->getAvailableMarksList($request); $response = (new \App\Http\Controllers\MobileApiController)->getAvailableMarksList($request);
$this->params['cars'] = collect($response->getData(true))->filter(function ($item) { $this->params['cars'] = collect($response->getData(true))->filter(function ($item) {
return !empty($item['tariffs']); return !empty($item['tariffs']);
})->values(); })->values();
// dd($class_filters, $started_at, $ended_at, $bodywork_filters);
// $response = Http::get('https://cvm10.a7.kz/api/mobile/getAvailableMarksList', [ // $response = Http::get('https://cvm10.a7.kz/api/mobile/getAvailableMarksList', [
// 'started_at' => $started_at ?? Carbon::now()->toDateString(), // 'started_at' => $started_at ?? Carbon::now()->toDateString(),
// 'ended_at' => $ended_at ?? Carbon::now()->addDays(3)->toDateString(), // 'ended_at' => $ended_at ?? Carbon::now()->addDays(3)->toDateString(),

View File

@ -115,6 +115,7 @@
<div class="row custom-row w-100"> <div class="row custom-row w-100">
@php $carsValues = array_values($cars->toArray()); @endphp @php $carsValues = array_values($cars->toArray()); @endphp
@foreach($carsValues as $car) @foreach($carsValues as $car)
{{-- @dump($car)--}}
<div class="col-12 col-md-6 mb-4"> <div class="col-12 col-md-6 mb-4">
<div class="car-card flex-grow-1"> <div class="car-card flex-grow-1">
<img class="img-fluid" src="{{ $car['photo'] ?? asset('img/default.png') }}" alt="Car Image"> <img class="img-fluid" src="{{ $car['photo'] ?? asset('img/default.png') }}" alt="Car Image">
@ -129,6 +130,9 @@
<small>Базовая ставка</small> <small>Базовая ставка</small>
@php @php
$tariffWithMin1 = collect($car['tariffs'])->firstWhere('min', 1); $tariffWithMin1 = collect($car['tariffs'])->firstWhere('min', 1);
$tariffWithMin3 = collect($car['tariffs'])->firstWhere('min', 3);
$tariffWithMin6 = collect($car['tariffs'])->firstWhere('min', 6);
$tariffWithMin15 = collect($car['tariffs'])->firstWhere('min', 15);
@endphp @endphp
<p class="m-0"> <p class="m-0">
@if($tariffWithMin1) @if($tariffWithMin1)
@ -139,13 +143,18 @@
<a href="#" class="btn btn-primary open-rent-modal" <a href="#" class="btn btn-primary open-rent-modal"
data-bs-toggle="modal" data-bs-toggle="modal"
data-bs-target="#rentModal" data-bs-target="#rentModal"
data-car='@json($car)'
data-photo="{{ $car['photo'] ?? asset('img/default.png') }}" data-photo="{{ $car['photo'] ?? asset('img/default.png') }}"
data-brand="{{ $car['brand'] }}" {{-- data-brand="{{ $car['brand'] }}"--}}
data-mark="{{ $car['mark'] }}" {{-- data-mark="{{ $car['mark'] }}"--}}
data-year="{{ $car['year'] }}" {{-- data-year="{{ $car['year'] }}"--}}
data-fuel="{{ $car['fuel_type'] }}" {{-- data-fuel="{{ $car['fuel_type'] }}"--}}
data-people="{{ $car['people'] }}" {{-- data-people="{{ $car['people'] }}"--}}
data-id="{{ $car['id'] ?? '' }}"> {{-- data-tariffWithMin1 ="{{ $tariffWithMin1['price'] ?? '' }}"--}}
{{-- data-tariffWithMin3="{{ $tariffWithMin3['price'] ?? '' }}"--}}
{{-- data-tariffWithMin6="{{ $tariffWithMin6['price'] ?? '' }}"--}}
{{-- data-tariffWithMin15="{{ $tariffWithMin15['price'] ?? '' }}"--}}
>
@lang('Арендовать') @lang('Арендовать')
</a> </a>
@ -196,11 +205,11 @@
<div class="popup-block"> <div class="popup-block">
<p>@lang('Базовая суточная ставка на аренду данного автомобиля уменьшается в зависимости от срока аренды')</p> <p>@lang('Базовая суточная ставка на аренду данного автомобиля уменьшается в зависимости от срока аренды')</p>
<ul> <ul>
<li><b>16-30 дня:</b> 13000 </li> <li><b>1-2 дня:</b><span id="tariffWithMin1"></span></li>
<li><b>3-5 дня:</b> 16000 </li> <li><b>3-5 дней:</b><span id="tariffWithMin3"></span></li>
<li><b>1-2 дня:</b> 18000 </li> <li><b>6-15 дней:</b><span id="tariffWithMin6"></span></li>
<li><b>6-15 дня:</b> 14500 </li> <li><b>16-30 дней:</b><span id="tariffWithMin15"></span></li>
<li><b>30+ дня:</b> 7800 </li> <li><b>30+ дней:</b><span id="tariffWithMin30"></span></li>
</ul> </ul>
<p>@lang('Расчет итоговой суммы к оплате рассчитывается (кол-во дней * базовую ставку)')</p> <p>@lang('Расчет итоговой суммы к оплате рассчитывается (кол-во дней * базовую ставку)')</p>
</div> </div>
@ -251,26 +260,26 @@
<div class="title-small mb-3">Базовая ставка</div> <div class="title-small mb-3">Базовая ставка</div>
<div class="li-bl"> <div class="li-bl">
<div class="li-sp">Без скидки</div> <div class="li-sp">Без скидки</div>
<div class="li-sp" id="base-without">32000 </div> <div class="li-sp" id="base-without"></div>
</div> </div>
<div class="li-bl"> <div class="li-bl">
<div class="li-sp">Со скидки</div> <div class="li-sp">Со скидкой</div>
<div class="li-sp" id="base-with">25 000 </div> <div class="li-sp" id="base-with"></div>
</div> </div>
<hr> <hr>
<div class="title-small mb-3">Общая цена</div> <div class="title-small mb-3">Общая цена</div>
<div class="li-bl"> <div class="li-bl">
<div class="li-sp">Аренда без скидки</div> <div class="li-sp">Аренда без скидки</div>
<div class="li-sp" id="summ-without">224 000 </div> <div class="li-sp" id="summ-without"></div>
</div> </div>
<div class="li-bl"> <div class="li-bl">
<div class="li-sp">Аренда со скидки</div> <div class="li-sp">Аренда со скидкой</div>
<div class="li-sp" id="sunn-with">175 000 </div> <div class="li-sp" id="sunn-with"></div>
</div> </div>
<hr> <hr>
<div class="li-bl"> <div class="li-bl">
<div class="title">Итого</div> <div class="title">Итого</div>
<div class="title" id="total">175 000 </div> <div class="title" id="total"></div>
</div> </div>
</div> </div>
</div> </div>
@ -308,6 +317,7 @@
const endedAtPicker = new AirDatepicker('#ended_at', datepickerConfig); const endedAtPicker = new AirDatepicker('#ended_at', datepickerConfig);
document.addEventListener('DOMContentLoaded', function () { document.addEventListener('DOMContentLoaded', function () {
const toggleBtn = document.getElementById('toggleFilterBtn'); const toggleBtn = document.getElementById('toggleFilterBtn');
const filterCard = document.getElementById('filterCard'); const filterCard = document.getElementById('filterCard');
@ -334,58 +344,108 @@
localStorage.setItem('filterOpened', isExpanded); localStorage.setItem('filterOpened', isExpanded);
}); });
});
const pickUpDateInput = document.getElementById('pick-up-date');
const returnDateInput = document.getElementById('return-date');
const daysInput = document.getElementById('days');
const today = new Date();
const yyyy = today.getFullYear();
const mm = String(today.getMonth() + 1).padStart(2, '0');
const dd = String(today.getDate()).padStart(2, '0');
const todayStr = `${yyyy}-${mm}-${dd}`;
pickUpDateInput.value = todayStr;
pickUpDateInput.setAttribute('min', todayStr);
function updateReturnDate() {
const pickUpDate = new Date(pickUpDateInput.value);
const rentalDays = parseInt(daysInput.value, 10);
if (!isNaN(rentalDays)) {
pickUpDate.setDate(pickUpDate.getDate() + rentalDays);
const returnYyyy = pickUpDate.getFullYear();
const returnMm = String(pickUpDate.getMonth() + 1).padStart(2, '0');
const returnDd = String(pickUpDate.getDate()).padStart(2, '0');
returnDateInput.value = `${returnYyyy}-${returnMm}-${returnDd}`;
}
}
updateReturnDate();
daysInput.addEventListener('input', updateReturnDate);
pickUpDateInput.addEventListener('change', updateReturnDate);
const modal = document.getElementById('rentModal');
document.querySelectorAll('.open-rent-modal').forEach(button => { document.querySelectorAll('.open-rent-modal').forEach(button => {
button.addEventListener('click', function () { button.addEventListener('click', function () {
const photo = this.getAttribute('data-photo'); const car = JSON.parse(this.getAttribute('data-car'));
const brand = this.getAttribute('data-brand'); modal.setAttribute('data-car', JSON.stringify(car));
const mark = this.getAttribute('data-mark'); document.getElementById('modalCarImage').src = this.getAttribute('data-photo');
const year = this.getAttribute('data-year'); document.getElementById('modalCarTitle').innerText = `${car.brand} ${car.mark} - ${car.year}`;
const fuel = this.getAttribute('data-fuel'); document.getElementById('modalFuel').innerHTML = `&nbsp;${car.fuel_type}`;
const people = this.getAttribute('data-people'); document.getElementById('modalPeople').innerHTML = `&nbsp;${car.people} мест`;
const id = this.getAttribute('data-id'); document.getElementById('mark_id').value = car.id;
document.getElementById('modalCarImage').src = photo; const tariff1 = car.tariffs.find(t => t.min === 1)?.price ?? 0;
document.getElementById('modalCarTitle').innerText = `${brand} ${mark} - ${year}`; const tariff3 = car.tariffs.find(t => t.min === 3)?.price ?? 0;
document.getElementById('modalFuel').innerHTML = `&nbsp;${fuel}`; const tariff6 = car.tariffs.find(t => t.min === 6)?.price ?? 0;
document.getElementById('modalPeople').innerHTML = `&nbsp;${people} мест`; const tariff15 = car.tariffs.find(t => t.min === 15)?.price ?? 0;
document.getElementById('mark_id').value = id;
document.getElementById('tariffWithMin1').innerHTML = `&nbsp;${tariff1} ₸`;
document.getElementById('tariffWithMin3').innerHTML = `&nbsp;${tariff3} ₸`;
document.getElementById('tariffWithMin6').innerHTML = `&nbsp;${tariff6} ₸`;
document.getElementById('tariffWithMin15').innerHTML = `&nbsp;${tariff15} ₸`;
document.getElementById('tariffWithMin30').innerHTML = `&nbsp;${(tariff1 * 0.4).toFixed(0)} ₸`;
updateReturnDate();
}); });
const modal = document.getElementById('rentModal');
const pickUpDateInput = document.getElementById('pick-up-date');
const returnDateInput = document.getElementById('return-date');
const daysInput = document.getElementById('days');
const today = new Date();
const yyyy = today.getFullYear();
const mm = String(today.getMonth() + 1).padStart(2, '0');
const dd = String(today.getDate()).padStart(2, '0');
const todayStr = `${yyyy}-${mm}-${dd}`;
pickUpDateInput.value = todayStr;
pickUpDateInput.setAttribute('min', todayStr);
function updateReturnDate() {
const pickUpDate = new Date(pickUpDateInput.value);
const rentalDays = parseInt(daysInput.value, 10);
if (!isNaN(rentalDays)) {
pickUpDate.setDate(pickUpDate.getDate() + rentalDays);
const returnYyyy = pickUpDate.getFullYear();
const returnMm = String(pickUpDate.getMonth() + 1).padStart(2, '0');
const returnDd = String(pickUpDate.getDate()).padStart(2, '0');
returnDateInput.value = `${returnYyyy}-${returnMm}-${returnDd}`;
}
calculateOther(parseInt(daysInput.value));
}
daysInput.addEventListener('input', updateReturnDate);
pickUpDateInput.addEventListener('change', updateReturnDate);
function calculateOther(days) {
let discountRate = null;
if (!days || isNaN(days)) {
days = 1;
}
const car = JSON.parse(modal.getAttribute('data-car'));
const tariffs = car['tariffs'];
const baseRate = car.tariffs.find(t => t.min === 1)?.price ?? 0;
const matchedRange = tariffs.find(range => days >= range.min && days <= range.max);
const baseWith = document.getElementById('base-with');
const baseWithout = document.getElementById('base-without');
const summWithout = document.getElementById('summ-without');
const summWith = document.getElementById('sunn-with');
const total = document.getElementById('total');
if (matchedRange) {
discountRate = matchedRange.price;
} else if (days > 30) {
discountRate = baseWithout * 0.4;
}
const totalWithoutDiscount = baseRate * days;
const totalWithDiscount = discountRate * days;
baseWith.textContent = formatNumberWithSpaces(discountRate) + ' ₸';
baseWithout.textContent = formatNumberWithSpaces(baseRate) + ' ₸';
summWithout.textContent = formatNumberWithSpaces(totalWithoutDiscount) + ' ₸';
summWith.textContent = formatNumberWithSpaces(totalWithDiscount) + ' ₸';
total.textContent = formatNumberWithSpaces(totalWithDiscount) + ' ₸';
if (isNaN(days) || days < 1) {
summWithout.textContent = 0 + ' ₸';
summWith.textContent = 0 + ' ₸';
total.textContent = 0 + ' ₸';
}
}
function formatNumberWithSpaces(number) {
return number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, " ");
}
}); });
});
document.querySelectorAll('input[name="class_filters[]"]').forEach(checkbox => { document.querySelectorAll('input[name="class_filters[]"]').forEach(checkbox => {
checkbox.addEventListener('click', function () { checkbox.addEventListener('click', function () {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -444,6 +444,10 @@ iframe {
border-radius: 10px; border-radius: 10px;
box-shadow: #0000001a 0 20px 25px -5px, #0000000a 0 10px 10px -5px; box-shadow: #0000001a 0 20px 25px -5px, #0000000a 0 10px 10px -5px;
transition: .3s all ease; transition: .3s all ease;
span {
color: inherit;
}
} }
} }