nim_style 10

nim_style
nimtaurel 2025-05-20 16:45:43 +05:00
parent e56e37a36a
commit 1355e4c971
8 changed files with 105 additions and 103 deletions

View File

@ -31,7 +31,7 @@
@csrf
<div class="col-12 col-md-9 col-xl-9 mt-3">
<div class="d-flex justify-content-center align-items-center flex-column">
<label class="labels"><span style="width: 20px; height: 20px; background-color: #01b0e8; color: white; border-radius: 50%; padding: 5px 7px"><i class="bi bi-pen"></i></span>{{__(" Редактировать профиль")}}</label>
<label class="labels"><span style="width: 20px; height: 20px; background-color: #01b0e8; color: white; border-radius: 50%; padding: 5px 8px"><i class="bi bi-pen"></i></span>{{__(" Редактировать профиль")}}</label>
</div>
<div class="row mt-3">
<div class="col-lg-6 mb-3">
@ -54,7 +54,7 @@
</div>
</div>
<div class="d-flex justify-content-center align-items-center flex-column mt-3">
<label class="labels"><span style="width: 20px; height: 20px; background-color: #01b0e8; color: white; border-radius: 50%; padding: 7px 5px 3px 5px"><i class="bi bi-key"></i></span>{{__(" Сменить пароль")}}</label>
<label class="labels"><span style="width: 20px; height: 20px; background-color: #01b0e8; color: white; border-radius: 50%; padding: 7px 6px 3px 6px"><i class="bi bi-key"></i></span>{{__(" Сменить пароль")}}</label>
</div>
<div class="row mt-2">
<div class="col-lg-6 mb-3">

View File

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

View File

@ -195,7 +195,7 @@
<div class="row justify-content-center align-items-end">
<div class="col-12 col-md-6">
<label for="days" class="form-label">Срок аренды, дней <b>*</b></label>
<input type="number" name="days" class="form-control" id="days" value="7" required="">
<input type="number" name="days" class="form-control" id="days" value="7" required="" min="1" step="1">
</div>
<div class="col-12 col-md-6">
<div class="form-text">
@ -347,106 +347,95 @@
});
document.addEventListener('DOMContentLoaded', () => {
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);
daysInput.addEventListener('input', updateReturnDate);
pickUpDateInput.addEventListener('change', updateReturnDate);
document.querySelectorAll('.open-rent-modal').forEach(button => {
button.addEventListener('click', function () {
const car = JSON.parse(this.getAttribute('data-car'));
modal.setAttribute('data-car', JSON.stringify(car));
document.getElementById('modalCarImage').src = this.getAttribute('data-photo');
document.getElementById('modalCarTitle').innerText = `${car.brand} ${car.mark} - ${car.year}`;
document.getElementById('modalFuel').innerHTML = `&nbsp;${car.fuel_type}`;
document.getElementById('modalPeople').innerHTML = `&nbsp;${car.people} мест`;
document.getElementById('mark_id').value = car.id;
const tariff1 = car.tariffs.find(t => t.min === 1)?.price ?? 0;
const tariff3 = car.tariffs.find(t => t.min === 3)?.price ?? 0;
const tariff6 = car.tariffs.find(t => t.min === 6)?.price ?? 0;
const tariff16 = car.tariffs.find(t => t.min === 16)?.price ?? 0;
const getTariffPrice = (min) => car.tariffs.find(t => t.min === min)?.price ?? 0;
document.getElementById('tariffWithMin1').innerHTML = `&nbsp;${tariff1} ₸`;
document.getElementById('tariffWithMin3').innerHTML = `&nbsp;${tariff3} ₸`;
document.getElementById('tariffWithMin6').innerHTML = `&nbsp;${tariff6} ₸`;
document.getElementById('tariffWithMin16').innerHTML = `&nbsp;${tariff16} ₸`;
document.getElementById('tariffWithMin30').innerHTML = `&nbsp;${(tariff1 * 0.6).toFixed(0)} ₸`;
document.getElementById('tariffWithMin1').innerHTML = `&nbsp;${getTariffPrice(1)} ₸`;
document.getElementById('tariffWithMin3').innerHTML = `&nbsp;${getTariffPrice(3)} ₸`;
document.getElementById('tariffWithMin6').innerHTML = `&nbsp;${getTariffPrice(6)} ₸`;
document.getElementById('tariffWithMin16').innerHTML = `&nbsp;${getTariffPrice(16)} ₸`;
document.getElementById('tariffWithMin30').innerHTML = `&nbsp;${(getTariffPrice(1) * 0.6).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, " ");
}
});
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(rentalDays);
}
function calculateOther(days) {
if (!days || isNaN(days) || days < 1) {
updatePrices(0, 0, 0, 0);
return;
}
const car = JSON.parse(modal.getAttribute('data-car'));
const tariffs = car.tariffs;
const baseRate = tariffs.find(t => t.min === 1)?.price ?? 0;
const matchedRange = tariffs.find(t => days >= t.min && days <= t.max);
const discountRate = matchedRange?.price ?? (days > 30 ? baseRate * 0.6 : baseRate);
const totalWithoutDiscount = baseRate * days;
const totalWithDiscount = discountRate * days;
updatePrices(baseRate, discountRate, totalWithoutDiscount, totalWithDiscount);
}
function updatePrices(baseRate, discountRate, totalWithout, totalWith) {
const format = (num) => formatNumberWithSpaces(Math.round(num)) + ' ₸';
document.getElementById('base-with').textContent = format(discountRate);
document.getElementById('base-without').textContent = format(baseRate);
document.getElementById('summ-without').textContent = format(totalWithout);
document.getElementById('sunn-with').textContent = format(totalWith);
document.getElementById('total').textContent = format(totalWith);
}
function formatNumberWithSpaces(number) {
return number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, " ");
}
});
document.querySelectorAll('input[name="class_filters[]"]').forEach(checkbox => {
checkbox.addEventListener('click', function () {
if (this.checked) {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -302,5 +302,5 @@ body {
}
.bi::before {
line-height: 1.4;
line-height: 1;
}

View File

@ -51,3 +51,13 @@ textarea.form-control, textarea{
--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='white'/%3e%3c/svg%3e");
}
.list-group-item {
border-top-width: 0;
padding: 0.4rem;
border-bottom: 1px $border-color solid;
transition: .3s all ease;
&:hover {
background-color: rgba(var(--bs-emphasis-color-rgb), 0.075);
}
}

View File

@ -21,3 +21,4 @@ $secondary-bg-color: rgba(66, 75, 75, 0.2);
$outline-text-color: #00465C;
$white: white;
$outine-border: #007BA2;