Compare commits
73 Commits
0407cadd50
...
v2_test2
| Author | SHA1 | Date | |
|---|---|---|---|
| e74731b789 | |||
| 8694856fc9 | |||
| 3d2b70609d | |||
| dd260e229a | |||
| 0bc8f85bee | |||
| 496534f76a | |||
| d681f6739b | |||
| 64de7ea34c | |||
| 25c913c572 | |||
| f34a54a33c | |||
| b511cbbdaf | |||
| 17c040f0d3 | |||
| f4a1da9ded | |||
| 79de035ae7 | |||
| ddc844456d | |||
| fef72df927 | |||
| 134216c5f5 | |||
| 685c201840 | |||
| fd343f098e | |||
| 053d7f79da | |||
| 60a088236b | |||
| 768d82a026 | |||
| 1c51c7fbf5 | |||
| 2196890105 | |||
| 4bf27702a4 | |||
| 4bf65b6eef | |||
| 98c6622e1f | |||
| e0baa07c4f | |||
| e2d951ccbf | |||
| cdff6c1966 | |||
| 00fe34bc0e | |||
| 910ea908c3 | |||
| 017d3b18ef | |||
| 61efc14b9a | |||
| f3a28ddb30 | |||
| 1dc8a64f9f | |||
| 56371267bc | |||
| a68fe3970f | |||
| 217b1d89ea | |||
| 4f2e3776ed | |||
| 3c6f90f103 | |||
| e3fd8457c0 | |||
| 8119955f52 | |||
| b4b79e185e | |||
| fb07005e9a | |||
| cd7bfa07bb | |||
| 48a21b319a | |||
| 808d44555c | |||
| f7857cb5c2 | |||
| 15b5911013 | |||
| 8e6111dfb1 | |||
| c476fa6d77 | |||
| c59c5d929b | |||
| e1053073a1 | |||
| 0a56555f35 | |||
| 1188b45c20 | |||
| 97ffcf417e | |||
| 5801e10f80 | |||
| 3c08686f21 | |||
| eff021b4e2 | |||
| 8e2f5f6bac | |||
| 05798c4b49 | |||
| 876d91de01 | |||
| a67436b854 | |||
| 6e8db45cb8 | |||
| 51abe338c0 | |||
| 84aecc715e | |||
| 93764163d4 | |||
| 9e3888bccf | |||
| 293b7c9f6f | |||
| 70dd911445 | |||
| 8496a0844c | |||
| fe110b1eb9 |
@@ -41,6 +41,7 @@ class Admin_ProfileInline(admin.StackedInline):
|
||||
'fields': (
|
||||
# ('account_type',),
|
||||
('enable',),
|
||||
('avatar',),
|
||||
('phone',),
|
||||
('country', 'city'),
|
||||
('mailing_on', ),
|
||||
|
||||
@@ -8,6 +8,7 @@ from BaseModels.print_funcs import print_ext
|
||||
|
||||
|
||||
|
||||
|
||||
def get_and_set_lang(request):
|
||||
from django.utils.translation import activate, get_language
|
||||
lang = None
|
||||
|
||||
@@ -26,7 +26,6 @@ def generate_routes(request, routes_count):
|
||||
):
|
||||
raise Http404
|
||||
|
||||
from RoutesApp.funcs import get_city_by_type_transport_and_address_point
|
||||
from RoutesApp.models import Route
|
||||
from ReferenceDataApp.models import Airport, City
|
||||
|
||||
|
||||
@@ -7,6 +7,13 @@ from timezonefinder import TimezoneFinder
|
||||
|
||||
tzf = TimezoneFinder()
|
||||
|
||||
def get_city_by_id(city_id):
|
||||
try:
|
||||
return City.objects.get(id=city_id)
|
||||
except City.DoesNotExist:
|
||||
return None
|
||||
|
||||
|
||||
def search_cities_in_db(search_str):
|
||||
res_data = []
|
||||
Q_obj = Q(name_en__icontains=search_str) | Q(name_ru__icontains=search_str) | \
|
||||
@@ -18,7 +25,7 @@ def search_cities_in_db(search_str):
|
||||
for item in objs_wo_tz:
|
||||
item.get_n_save_timezone()
|
||||
res_data = City.objects.filter(id__in=ids).values(
|
||||
'id', 'name', 'country__name', 'timezone', 'country__flag', 'country__short_code'
|
||||
'id', 'name', 'country__name', 'timezone', 'country__flag', 'country__code'
|
||||
)
|
||||
|
||||
return list(res_data)
|
||||
|
||||
@@ -30,6 +30,7 @@ class Admin_Route(Admin_Trans_BaseModel):
|
||||
]
|
||||
|
||||
search_fields = [
|
||||
'id',
|
||||
'owner__first_name', 'owner__last_name', 'from_city__name', 'to_city__name', 'owner__email'
|
||||
]
|
||||
raw_id_fields = ['from_city', 'to_city']
|
||||
|
||||
@@ -58,7 +58,8 @@ class RouteForm(forms.ModelForm):
|
||||
try:
|
||||
|
||||
if 'type_transport' in self.errors:
|
||||
self.errors.pop('type_transport')
|
||||
if self.instance and self.instance.owner_type == 'customer':
|
||||
self.errors.pop('type_transport')
|
||||
|
||||
if 'phone' in cleaned_data and 'phone' in cleaned_data:
|
||||
from BaseModels.validators.form_field_validators import get_phone_valid_error
|
||||
|
||||
@@ -201,29 +201,17 @@ def get_routes_Dict(user=None, data=None):
|
||||
})
|
||||
|
||||
if key not in (
|
||||
'from_address_point_txt', 'to_address_point_txt', 'csrfmiddlewaretoken', 'sort', 'weight',
|
||||
'from_el', 'to_el', 'from_address_point', 'to_address_point', 'type_transport',
|
||||
'from_city', 'to_city', 'csrfmiddlewaretoken', 'sort', 'weight',
|
||||
'from_el', 'to_el', 'type_transport',
|
||||
'departure_DT', 'arrival_DT'
|
||||
):
|
||||
kwargs.update({key: val})
|
||||
|
||||
if key == 'from_address_point': # в from_address_point всегда город
|
||||
# city = get_city_by_type_transport_and_address_point(type_transport, val)
|
||||
city = get_city_by_address_point(val)
|
||||
kwargs.update({f'from_city': city})
|
||||
if key == 'from_city':
|
||||
kwargs.update({f'from_city_id': val})
|
||||
|
||||
|
||||
res_Dict.update({
|
||||
'from_address_point_txt': city.get_country_n_city_str()
|
||||
})
|
||||
|
||||
if key == 'to_address_point': # в to_address_point всегда город
|
||||
# city = get_city_by_type_transport_and_address_point(type_transport, val)
|
||||
city = get_city_by_address_point(val)
|
||||
kwargs.update({f'to_city': city})
|
||||
res_Dict.update({
|
||||
'to_address_point_txt': city.get_country_n_city_str()
|
||||
})
|
||||
if key == 'to_city':
|
||||
kwargs.update({f'to_city_id': val})
|
||||
|
||||
if key == 'from_el':
|
||||
from_el = int(val)
|
||||
@@ -257,7 +245,8 @@ def get_routes_Dict(user=None, data=None):
|
||||
).order_by(
|
||||
F('rising_DT').desc(nulls_last=True),
|
||||
# '-rising_DT',
|
||||
'-departure_DT', '-arrival_DT', '-modifiedDT'
|
||||
'-arrival_DT', '-modifiedDT'
|
||||
# '-departure_DT',
|
||||
)
|
||||
|
||||
routes_count = routes.count()
|
||||
@@ -309,7 +298,8 @@ def get_routes_Dict(user=None, data=None):
|
||||
'routes': routes,
|
||||
'last_block': last_block,
|
||||
'last_el': to_el,
|
||||
'next_page_els_count': next_page_els_count
|
||||
'next_page_els_count': next_page_els_count,
|
||||
'now_DT': datetime.now(),
|
||||
})
|
||||
return res_Dict
|
||||
|
||||
|
||||
@@ -408,6 +408,10 @@ def create_or_change_route_ajax(request, route_id=None):
|
||||
tpl_form_by_owner_type = 'v2/forms/f_create_mover_route.html'
|
||||
tpl_block_by_owner_type = 'v2/blocks/b_create_mover_route.html'
|
||||
|
||||
if 'route_id' in data and data['route_id']:
|
||||
route_id = data['route_id']
|
||||
# del data['route_id']
|
||||
|
||||
route = None
|
||||
if route_id:
|
||||
route = Route.objects.get(id=route_id)
|
||||
|
||||
@@ -2,6 +2,7 @@ from django.db import models
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from BaseModels.base_models import BaseModel
|
||||
from colorfield.fields import ColorField
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
type_transport_choices = [
|
||||
@@ -75,7 +76,9 @@ class Route(BaseModel):
|
||||
verbose_name=_('Куда можете доставить?'),
|
||||
null=True, blank=True
|
||||
)
|
||||
cargo_type = models.CharField(choices=cargo_type_choices, default='parcel', verbose_name=_('Могу перевезти'))
|
||||
cargo_type = models.CharField(
|
||||
choices=cargo_type_choices, default='letter', verbose_name=_('Могу перевезти')
|
||||
)
|
||||
# не используем с v2
|
||||
weight = models.IntegerField(verbose_name=_('Укажите вес до (кг)'), null=True, blank=True)
|
||||
phone = models.CharField(verbose_name=_('Укажите номер для связи'), blank=True, null=True)
|
||||
@@ -116,6 +119,13 @@ class Route(BaseModel):
|
||||
verbose_name_plural = _(u'Маршруты')
|
||||
ordering = ('name',)
|
||||
|
||||
|
||||
def is_highlighted_now(self):
|
||||
if self.highlight_end_DT and datetime.now() < self.highlight_end_DT:
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def get_permission_for_raise(self):
|
||||
from SubscribesApp.funcs import get_cur_user_subscribe
|
||||
user_subscribe = get_cur_user_subscribe(self.owner)
|
||||
|
||||
@@ -3,10 +3,38 @@ __author__ = 'SDE'
|
||||
from django import template
|
||||
from django.template.defaultfilters import stringfilter
|
||||
from django.utils.safestring import mark_safe
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
register = template.Library()
|
||||
|
||||
|
||||
cargo_type_for_show = {
|
||||
'letter': _('Документы'),
|
||||
'package': _('Посылка'),
|
||||
'passenger': _('Попутчик'),
|
||||
'parcel': _('Бандероль'),
|
||||
'cargo': _('Груз'),
|
||||
}
|
||||
|
||||
type_transport_for_show = {
|
||||
'road': _('Автоперевозка'),
|
||||
'avia': _('Авиатранспорт'),
|
||||
'': _('Авто/Авиаперевозка'),
|
||||
}
|
||||
|
||||
|
||||
@register.filter
|
||||
@stringfilter
|
||||
def get_type_transport_for_show(value):
|
||||
return mark_safe(type_transport_for_show[value])
|
||||
|
||||
|
||||
@register.filter
|
||||
@stringfilter
|
||||
def get_cargo_type_for_show(value):
|
||||
return mark_safe(cargo_type_for_show[value])
|
||||
|
||||
|
||||
@register.filter
|
||||
@stringfilter
|
||||
def get_splited_cargo_type(value):
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
from django.shortcuts import render
|
||||
|
||||
from uuid import uuid1
|
||||
|
||||
from ReferenceDataApp.funcs import get_city_by_id
|
||||
from .models import *
|
||||
from django.contrib import auth
|
||||
from django.http import HttpResponse, Http404
|
||||
@@ -39,17 +41,23 @@ def route_search_results_View(request):
|
||||
'page_type': 'routes',
|
||||
'next_page_els_count': routes_Dict['next_page_els_count'],
|
||||
}
|
||||
if 'from_address_point_txt' in routes_Dict:
|
||||
data.update({'from_address_point_txt': routes_Dict['from_address_point_txt']})
|
||||
if 'to_address_point_txt' in routes_Dict:
|
||||
data.update({'to_address_point_txt': routes_Dict['to_address_point_txt']})
|
||||
Dict.update({'route_form': RouteForm(initial=data, owner_type=owner_type)})
|
||||
|
||||
from_city = None
|
||||
to_city = None
|
||||
if 'from_city' in data and data['from_city']:
|
||||
from_city = get_city_by_id(data['from_city'])
|
||||
data.update({'from_city': from_city})
|
||||
if 'to_city' in data and data['to_city']:
|
||||
to_city = get_city_by_id(data['to_city'])
|
||||
data.update({'to_city': to_city})
|
||||
|
||||
Dict.update({'form': RouteForm(initial=data, owner_type=owner_type)})
|
||||
|
||||
title = _('Результат поиска маршрутов')
|
||||
if 'from_address_point_txt' in data:
|
||||
title = f'{title} из {data["from_address_point_txt"]}'
|
||||
if 'to_address_point_txt' in data:
|
||||
title = f'{title} в {data["to_address_point_txt"]}'
|
||||
if from_city:
|
||||
title = f'{title} из {from_city.name}'
|
||||
if to_city:
|
||||
title = f'{title} в {to_city.name}'
|
||||
|
||||
Dict.update({
|
||||
'page': {
|
||||
|
||||
@@ -95,6 +95,7 @@ class Admin_SubscribeForUser(Admin_Trans_BaseModel):
|
||||
list_display_links = ['id']
|
||||
|
||||
list_filter = [
|
||||
'enable',
|
||||
'subscribe', 'last_paid_DT', 'paid_period_from_DT', 'paid_period_to_DT',
|
||||
'auto_continue', 'receive_finish_subscribe_msg',
|
||||
'modifiedDT', 'createDT'
|
||||
|
||||
@@ -154,7 +154,7 @@ html, body{
|
||||
.wrapper_content {
|
||||
margin: 20px;
|
||||
max-width: 1720px;
|
||||
position: relative;
|
||||
/*position: relative;*/
|
||||
min-height: 695px;
|
||||
max-height: 100%;
|
||||
}
|
||||
@@ -239,7 +239,7 @@ body {
|
||||
}
|
||||
|
||||
header {
|
||||
margin-top: 20px;
|
||||
/*margin-top: 20px;*/
|
||||
padding: 5px 20px;
|
||||
position: sticky;
|
||||
top: 0;
|
||||
|
||||
@@ -25,9 +25,10 @@ const initialiseState = (reg) => {
|
||||
}
|
||||
|
||||
const showNotAllowed = (message) => {
|
||||
const button = document.querySelector('form>button');
|
||||
button.innerHTML = `${message}`;
|
||||
button.setAttribute('disabled', 'true');
|
||||
// const button = document.querySelector('form>button');
|
||||
// button.innerHTML = `${message}`;
|
||||
// button.setAttribute('disabled', 'true');
|
||||
console.log(message);
|
||||
};
|
||||
|
||||
|
||||
|
||||
28
static/v2/css/blocks/b_chat_modal.css
Normal file
@@ -0,0 +1,28 @@
|
||||
.b_chat_modal {
|
||||
--modal-width: 35%;
|
||||
--modal-height: calc(100dvh - 100px);
|
||||
--modal-padding: 0;
|
||||
.chat_header{
|
||||
height: 104px;
|
||||
padding: 10px 20px 26px 20px;
|
||||
}
|
||||
.close_chat_container{
|
||||
display: flex;
|
||||
justify-content: right;
|
||||
.close_btn{
|
||||
--filter: brightness(0) saturate(100%) invert(99%) sepia(12%) saturate(182%) hue-rotate(183deg) brightness(115%) contrast(100%);;
|
||||
padding: 8.94px;
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
background: #FF613A;
|
||||
border-radius: 100%;
|
||||
box-sizing: border-box;
|
||||
img{
|
||||
width: 10.12px;
|
||||
height: 10.12px;
|
||||
display: block;
|
||||
filter: var(--filter);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
108
static/v2/css/blocks/b_dont_found_anth.css
Normal file
@@ -0,0 +1,108 @@
|
||||
.b_dont_found_anth{
|
||||
padding: 9px 60px;
|
||||
background: #fff;
|
||||
border-radius: 10px;
|
||||
position: relative;
|
||||
min-height: 254px;
|
||||
margin-top: 120px;
|
||||
.first_imgs_line, .second_imgs_line {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
position: absolute;
|
||||
&.first_imgs_line{
|
||||
top: 9px;
|
||||
left: 190px;
|
||||
width: calc(100% - 380px);
|
||||
}
|
||||
&.second_imgs_line{
|
||||
top: 117px;
|
||||
left: 60px;
|
||||
width: calc(100% - 120px);
|
||||
}
|
||||
}
|
||||
.container_content{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
min-height: 254px;
|
||||
width: 100%;
|
||||
}
|
||||
.title{
|
||||
font-size: 44px;
|
||||
font-weight: 700;
|
||||
margin: 0;
|
||||
}
|
||||
.description{
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
margin: 20px 0;
|
||||
}
|
||||
@media (max-width: 1440px) {
|
||||
padding: 9px 25px;
|
||||
.first_imgs_line, .second_imgs_line {
|
||||
&.first_imgs_line{
|
||||
top: 9px;
|
||||
left: 140px;
|
||||
width: calc(100% - 280px);
|
||||
}
|
||||
&.second_imgs_line{
|
||||
top: 117px;
|
||||
left: 25px;
|
||||
width: calc(100% - 50px);
|
||||
}
|
||||
}
|
||||
}
|
||||
@media (max-width: 1200px) {
|
||||
padding: 9px 25px;
|
||||
.first_imgs_line, .second_imgs_line {
|
||||
&.first_imgs_line{
|
||||
display: none;
|
||||
}
|
||||
&.second_imgs_line{
|
||||
min-height: 254px;
|
||||
top: 0;
|
||||
img{
|
||||
width: 165px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@media (max-width: 1024px) {
|
||||
padding: 9px 11px;
|
||||
.first_imgs_line, .second_imgs_line {
|
||||
&.second_imgs_line{
|
||||
min-height: 254px;
|
||||
top: 0;
|
||||
left: 11px;
|
||||
width: calc(100% - 22px);
|
||||
img{
|
||||
width: 140px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@media (max-width: 950px) {
|
||||
.title{
|
||||
font-size: 32px;
|
||||
}
|
||||
.first_imgs_line, .second_imgs_line {
|
||||
&.second_imgs_line{
|
||||
img{
|
||||
width: 100px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@media (max-width: 879px) {
|
||||
.first_imgs_line, .second_imgs_line {
|
||||
&.second_imgs_line{
|
||||
display: none;
|
||||
img{
|
||||
width: 100px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,12 +1,23 @@
|
||||
.b_filter_routes{
|
||||
--form-title-font-size: 24px;
|
||||
|
||||
padding: 20px;
|
||||
background: #FFFFFF;
|
||||
|
||||
border-radius: 10px;
|
||||
height: fit-content;
|
||||
box-sizing: border-box;
|
||||
|
||||
z-index: 1000;
|
||||
|
||||
.overlay{
|
||||
--bg: #F8F8F8CC;
|
||||
--backdrop-filter: blur(2px);
|
||||
}
|
||||
|
||||
.b_filter_routes_content{
|
||||
box-sizing: border-box;
|
||||
border-radius: 10px;
|
||||
padding: 20px;
|
||||
background: #FFFFFF;
|
||||
}
|
||||
.title{
|
||||
font-size: var(--form-title-font-size);
|
||||
font-weight: 700;
|
||||
@@ -19,4 +30,98 @@
|
||||
margin: 0 0 10px 0;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 800px) {
|
||||
--modal-width: calc(100% - 32px);
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
.b_filter_routes_content{
|
||||
width: var(--modal-width);
|
||||
position: fixed;
|
||||
top: 169px;
|
||||
z-index: 100000000;
|
||||
left: calc(50dvw - (var(--modal-width) / 2));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.b_filter_routes_modal_handler{
|
||||
--bg: #FF613A;
|
||||
--border-radius: 0 10px 10px 0;
|
||||
--left: 0;
|
||||
--top: calc(50% - 63.5px);
|
||||
--width: 25px;
|
||||
--height: 127px;
|
||||
|
||||
--color: #fff;
|
||||
|
||||
background: var(--bg);
|
||||
border-radius: var(--border-radius);
|
||||
|
||||
display: none;
|
||||
position: fixed;
|
||||
|
||||
left: var(--left);
|
||||
top: var(--top);
|
||||
width: var(--width);
|
||||
height: var(--height);
|
||||
|
||||
.b_filter_routes_modal_handler_content{
|
||||
position: relative;
|
||||
height: 127px;
|
||||
rotate: 0deg;
|
||||
top: 0;
|
||||
left: 0;
|
||||
}
|
||||
img{
|
||||
--filter: brightness(0) saturate(100%) invert(100%) sepia(0%) saturate(7500%) hue-rotate(74deg) brightness(122%) contrast(112%);
|
||||
--rotate: 0;
|
||||
|
||||
filter: var(--filter);
|
||||
rotate: var(--rotate);
|
||||
width: 7px;
|
||||
display: block;
|
||||
position: absolute;
|
||||
left: 8px;
|
||||
&:first-of-type{
|
||||
top: 19px;
|
||||
}
|
||||
&:last-of-type{
|
||||
top: 94px;
|
||||
}
|
||||
}
|
||||
div{
|
||||
--rotate: 270deg;
|
||||
--top: 56px;
|
||||
--left: -9px;
|
||||
|
||||
color: var(--color);
|
||||
font-size: 12px;
|
||||
position: absolute;
|
||||
|
||||
rotate: var(--rotate);
|
||||
top: var(--top);
|
||||
left: var(--left);
|
||||
}
|
||||
|
||||
z-index: 10000000000000;
|
||||
|
||||
&.active{
|
||||
--bg: #E6E6E6;
|
||||
--color: #27242499;
|
||||
--border-radius: 10px 0 0 10px;
|
||||
--left: calc(100% - var(--width));
|
||||
div{
|
||||
--rotate: 90deg;
|
||||
}
|
||||
img{
|
||||
--rotate: 180deg;
|
||||
--filter: brightness(0) saturate(100%) invert(16%) sepia(6%) saturate(406%) hue-rotate(2deg) brightness(96%) contrast(82%);
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 800px) {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
141
static/v2/css/blocks/b_login_modal.css
Normal file
@@ -0,0 +1,141 @@
|
||||
.b_login_modal {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
--modal-width: 690px;
|
||||
--modal-height: 492px;
|
||||
--modal-padding: 28px 28.7px;
|
||||
--modal-inf-padding: 8px 24px 0 24px;
|
||||
|
||||
box-sizing: border-box;
|
||||
|
||||
z-index: 10000000;
|
||||
|
||||
@media (max-width: 725px) {
|
||||
--modal-width: calc(100% - 20px);
|
||||
--modal-padding: 15px 15px 20px 10px;
|
||||
.modal_description{
|
||||
width: 100%!important;
|
||||
}
|
||||
} @media (max-height: 512px) {
|
||||
.modal_description{
|
||||
width: 100%;
|
||||
}
|
||||
--modal-height: calc(100% - 20px);
|
||||
}
|
||||
@media (max-width: 500px) {
|
||||
.modal_title{
|
||||
font-size: 26px!important;
|
||||
}
|
||||
.modal_description{
|
||||
font-size: 18px!important;
|
||||
}
|
||||
}
|
||||
@media (max-width: 360px) {
|
||||
.modal_title{
|
||||
font-size: 24px!important;
|
||||
}
|
||||
.modal_description{
|
||||
font-size: 16px!important;
|
||||
}
|
||||
.primary_btn{
|
||||
--padding: 7.5px 0;
|
||||
--font-size: 14px;
|
||||
--font-weight: 400;
|
||||
}
|
||||
.registr_btn{
|
||||
font-size: 14px!important;
|
||||
font-weight: 400!important;
|
||||
}
|
||||
}
|
||||
|
||||
.b_login_modal_container_content{
|
||||
position: fixed;
|
||||
background: #FFFFFF;
|
||||
box-shadow: 0 3px 14px rgba(74, 58, 255, 0.03), 0 -2px 4px rgba(20, 20, 43, 0.12), 0 12px 44px rgba(20, 20, 43, 0.34);
|
||||
border-radius: 30px;
|
||||
|
||||
width: var(--modal-width);
|
||||
height: var(--modal-height);
|
||||
padding: var(--modal-padding);
|
||||
|
||||
left: calc(50% - (var(--modal-width) / 2));
|
||||
top: calc(50% - (var(--modal-height) / 2));
|
||||
z-index: 1000000000;
|
||||
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.b_login_modal_content{
|
||||
position: relative;
|
||||
|
||||
text-align: -webkit-center;
|
||||
}
|
||||
|
||||
.xmark{
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
display: block;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.lock_img_container{
|
||||
position: relative;
|
||||
background: #E1E1E1;
|
||||
border-radius: 39px;
|
||||
width: 140px;
|
||||
height: 140px;
|
||||
img{
|
||||
width: 130px;
|
||||
height: 130px;
|
||||
position: absolute;
|
||||
top: 5px;
|
||||
left: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
.modal_title{
|
||||
margin-top: 40px;
|
||||
|
||||
font-size: 34px;
|
||||
font-weight: 700;
|
||||
color: #272424;
|
||||
}
|
||||
|
||||
.modal_description{
|
||||
margin: 20px 0;
|
||||
|
||||
font-size: 20px;
|
||||
font-weight: 400;
|
||||
color: #272424;
|
||||
|
||||
width: 495px;
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
|
||||
.registr_btn{
|
||||
margin-top: 10px;
|
||||
font-size: 18px;
|
||||
font-weight: 600;
|
||||
color: #27242499;
|
||||
text-decoration: none;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.b_login_modal_inf{
|
||||
padding: var(--modal-inf-padding);
|
||||
.primary_btn{
|
||||
--width: 360px;
|
||||
@media (max-width: 460px) {
|
||||
--width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -13,12 +13,79 @@
|
||||
gap: 5px;
|
||||
[data-type="location"] {
|
||||
&:first-of-type{
|
||||
.w_select_country_header{--select-border-radius: 10px 0 0 10px!important;}
|
||||
.w_select_country_header{
|
||||
--select-border-radius: 10px 0 0 10px;
|
||||
&.closed{
|
||||
--select-border-radius: 10px 0 0 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.w_select_country_header{
|
||||
--select-border-radius: 0;
|
||||
&.closed{
|
||||
--select-border-radius: 0;
|
||||
}
|
||||
}
|
||||
.w_select_country_header{--select-border-radius: 0!important;}
|
||||
}
|
||||
.w_daterangepicker{
|
||||
--range-picker-border-radius: 0 10px 10px 0!important;
|
||||
--range-picker-border-radius: 0 10px 10px 0;
|
||||
}
|
||||
.field_container{
|
||||
--label-font-size: 14px;
|
||||
--label-font-weight: 400;
|
||||
--label-color: #27242499;
|
||||
}
|
||||
@media (max-width: 800px) {
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
[data-type="date"], button {
|
||||
grid-column: span 2;
|
||||
height: fit-content;
|
||||
}
|
||||
.w_daterangepicker{
|
||||
--range-picker-border-radius: 0 0 10px 10px;
|
||||
}
|
||||
[data-type="location"][data-name="to_city"] {
|
||||
.w_select_country_header{
|
||||
--select-border-radius: 0 10px 0 0;
|
||||
&.closed{
|
||||
--select-border-radius: 0 10px 0 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
[data-type="location"][data-name="from_city"] {
|
||||
.w_select_country_header{
|
||||
--select-border-radius: 10px 0 0 0;
|
||||
&.closed{
|
||||
--select-border-radius: 10px 0 0 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@media (max-width: 576px) {
|
||||
grid-template-columns: 1fr;
|
||||
[data-type="date"], button {
|
||||
grid-column: unset;
|
||||
height: fit-content;
|
||||
}
|
||||
.w_daterangepicker{
|
||||
--range-picker-border-radius: 0 0 10px 10px;
|
||||
}
|
||||
[data-type="location"][data-name="to_city"] {
|
||||
.w_select_country_header{
|
||||
--select-border-radius: 0 0 0 0;
|
||||
&.closed{
|
||||
--select-border-radius: 0 10px 0 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
[data-type="location"][data-name="from_city"] {
|
||||
.w_select_country_header{
|
||||
--select-border-radius: 10px 10px 0 0;
|
||||
&.closed{
|
||||
--select-border-radius: 10px 10px 0 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
button{
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
display: block;
|
||||
color: var(--label-color);
|
||||
font-weight: var(--label-font-weight);
|
||||
font-size: var(--label-font-size);
|
||||
&:has(div){
|
||||
display: flex;
|
||||
align-items: center;
|
||||
@@ -53,6 +54,7 @@
|
||||
font-family: var(--main-font-family), serif;
|
||||
box-sizing: border-box;
|
||||
outline: none;
|
||||
min-width: 0;
|
||||
&.dropped{
|
||||
border: none;
|
||||
outline: none;
|
||||
|
||||
@@ -12,4 +12,27 @@
|
||||
display: grid;
|
||||
grid-template-columns: 30% calc(100% - 30% - 41px);
|
||||
gap: 41px;
|
||||
.routes_search_results{
|
||||
.next_page{
|
||||
margin: 50px 0;
|
||||
width: 100%;
|
||||
background: #212121;
|
||||
height: 1px;
|
||||
}
|
||||
}
|
||||
@media (max-width: 1440px) {
|
||||
margin-top: 40px;
|
||||
}
|
||||
@media (max-width: 800px) {
|
||||
grid-template-columns: 100%;
|
||||
}
|
||||
@media (max-width: 768px) {
|
||||
margin-top: 40px;
|
||||
}
|
||||
@media (max-width: 576px) {
|
||||
margin-top: 77px;
|
||||
}
|
||||
@media (max-width: 360px) {
|
||||
margin-top: 40px;
|
||||
}
|
||||
}
|
||||
79
static/v2/css/service/btns.css
Normal file
@@ -0,0 +1,79 @@
|
||||
.primary_btn{
|
||||
--background: #FF613A;
|
||||
--border: none;
|
||||
--box-shadow: 0px 3px 12px rgba(74, 58, 255, 0.18);
|
||||
--border-radius: 10px;
|
||||
--margin: 0;
|
||||
--padding: 19px 0 21px 0;
|
||||
|
||||
--font-size: 18px;
|
||||
--font-weight: 700;
|
||||
--color: #FFFFFF;
|
||||
--text-align: center;
|
||||
--text-decoration: none;
|
||||
|
||||
--width: unset;
|
||||
--display: block;
|
||||
|
||||
background: var(--background);
|
||||
border: var(--border);
|
||||
box-shadow: var(--box-shadow);
|
||||
border-radius: var(--border-radius);
|
||||
margin: var(--margin);
|
||||
padding: var(--padding);
|
||||
|
||||
font-size: var(--font-size);
|
||||
font-weight: var(--font-weight);
|
||||
color: var(--color)!important;
|
||||
text-align: var(--text-align);
|
||||
text-decoration: var(--text-decoration);
|
||||
|
||||
width: var(--width)!important;
|
||||
display: var(--display);
|
||||
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.default_btn{
|
||||
--background: #FFFFFF;
|
||||
--border: none;
|
||||
--box-shadow: none;
|
||||
--border-radius: 8px;
|
||||
--margin: 0;
|
||||
--padding: 7px 0;
|
||||
|
||||
--font-size: 12px;
|
||||
--font-weight: 500;
|
||||
--color: #27242499;
|
||||
--text-align: center;
|
||||
--text-decoration: none;
|
||||
|
||||
--width: 85px;
|
||||
--display: block;
|
||||
|
||||
background: var(--background);
|
||||
border: var(--border);
|
||||
box-shadow: var(--box-shadow);
|
||||
border-radius: var(--border-radius);
|
||||
margin: var(--margin);
|
||||
padding: var(--padding);
|
||||
|
||||
font-size: var(--font-size);
|
||||
font-weight: var(--font-weight);
|
||||
color: var(--color)!important;
|
||||
text-align: var(--text-align);
|
||||
text-decoration: var(--text-decoration);
|
||||
|
||||
width: var(--width)!important;
|
||||
display: var(--display);
|
||||
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.container_btns{
|
||||
width: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: var(--justify);
|
||||
gap: 5px;
|
||||
}
|
||||
38
static/v2/css/service/modal.css
Normal file
@@ -0,0 +1,38 @@
|
||||
.modal {
|
||||
display: none;
|
||||
|
||||
--modal-bg: #fff;
|
||||
--modal-ba: 30px;
|
||||
&.open{
|
||||
display: block;
|
||||
}
|
||||
.overlay{
|
||||
--bg: #0000009C;
|
||||
--backdrop-filter: none;
|
||||
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: var(--bg);
|
||||
backdrop-filter: var(--backdrop-filter);
|
||||
z-index: 10000000;
|
||||
}
|
||||
.modal_body{
|
||||
position: fixed;
|
||||
background: var(--modal-bg);
|
||||
box-shadow: 0 3px 14px rgba(74, 58, 255, 0.03), 0 -2px 4px rgba(20, 20, 43, 0.12), 0 12px 44px rgba(20, 20, 43, 0.34);
|
||||
border-radius: var(--modal-ba);
|
||||
|
||||
width: var(--modal-width);
|
||||
height: var(--modal-height);
|
||||
padding: var(--modal-padding);
|
||||
|
||||
left: calc(50% - (var(--modal-width) / 2));
|
||||
top: calc(50% - (var(--modal-height) / 2));
|
||||
z-index: 1000000000;
|
||||
|
||||
box-sizing: border-box;
|
||||
}
|
||||
}
|
||||
@@ -7,7 +7,7 @@
|
||||
gap: 10px;
|
||||
border: 2px solid var(--range-picker-border);
|
||||
border-radius: var(--range-picker-border-radius);
|
||||
padding: 22px 10px;
|
||||
padding: 18px 10px;
|
||||
background: #FFFFFF;
|
||||
input{
|
||||
width: calc(100% - 28px);
|
||||
|
||||
@@ -49,6 +49,11 @@
|
||||
--route-number-font-size: 12px;
|
||||
--route-number-margin-top: 5px;
|
||||
|
||||
--from-to-place-data-width: 205px;
|
||||
@media (max-width: 1160px) {
|
||||
--from-to-place-data-width: 100%;
|
||||
}
|
||||
|
||||
background: var(--route-card-bg);
|
||||
margin: var(--route-card-margin);
|
||||
box-shadow: var(--route-card-box_shadow);
|
||||
@@ -60,6 +65,104 @@
|
||||
--route-text-container-bg: #FFFFFF;
|
||||
--route-text-img-filter: unset;
|
||||
}
|
||||
&.disabled{
|
||||
--route-card-bg: #FFFFFF;
|
||||
--card-splitter-bg: #E6E6E6;
|
||||
--route-text-container-bg: #F1F1F1;
|
||||
--route-text-img-filter: brightness(0) saturate(100%) invert(100%) sepia(2%) saturate(256%) hue-rotate(113deg) brightness(115%) contrast(89%);
|
||||
.route_card_info_data{
|
||||
.route_card_text_container{
|
||||
color: #A9A9A9!important;
|
||||
}
|
||||
}
|
||||
.card_owner_type.mover, .card_owner_type.customer{
|
||||
--route-owner-type-color: #A9A9A9!important;
|
||||
}
|
||||
.route_btn.inactive, .route_btn, .route_btn.solid{
|
||||
--route-btn-bg: #FFF;
|
||||
&.solid{
|
||||
--route-btn-bg: #A9A9A9;
|
||||
&:hover{
|
||||
--route-btn-hover-bg: #A9A9A9!important;
|
||||
--route-btn-hover-text-color: #FFF!important;
|
||||
}
|
||||
.route_btn_title{
|
||||
--route-btn-title-color: #FFF!important;
|
||||
}
|
||||
}
|
||||
--route-btn-border: 1.5px solid #A9A9A9;
|
||||
--route-btn-text-data-color: #A9A9A9!important;
|
||||
|
||||
--route-btn-hover-text-color: #A9A9A9!important;
|
||||
box-shadow: none!important;
|
||||
&:hover{
|
||||
--route-btn-hover-bg: #FFF!important;
|
||||
}
|
||||
.route_btn_title{
|
||||
--route-btn-title-color: #A9A9A9!important;
|
||||
}
|
||||
}
|
||||
.route_btn img{
|
||||
filter: brightness(0) saturate(100%) invert(77%) sepia(0%) saturate(270%) hue-rotate(138deg) brightness(90%) contrast(83%);
|
||||
}
|
||||
--route-cargo-type-color: #A9A9A9;
|
||||
.route_card_owner_avatar{
|
||||
filter: grayscale(1);
|
||||
}
|
||||
.card_owner_name, div.orange{
|
||||
color: #A9A9A9!important;
|
||||
}
|
||||
.route_card_route_data{
|
||||
.route_way_data{
|
||||
.route_transport{
|
||||
.route_transport_name{
|
||||
color: #A9A9A9!important;
|
||||
}
|
||||
img{
|
||||
filter: grayscale(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
.from_to_place_data{
|
||||
.label{
|
||||
color: #A9A9A9!important;
|
||||
}
|
||||
.place{
|
||||
.place_title{
|
||||
color: #A9A9A9!important;
|
||||
}
|
||||
.country{
|
||||
.country_code{
|
||||
color: #A9A9A9!important;
|
||||
}
|
||||
}
|
||||
img{
|
||||
filter: grayscale(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.route_number{
|
||||
color: #A9A9A9!important;
|
||||
}
|
||||
.route_date_data{
|
||||
color: #A9A9A9!important;
|
||||
}
|
||||
.way_progress_line_container{
|
||||
.way_progress_arrows_line{display: none!important;}
|
||||
.way_progress_line{
|
||||
background: #A9A9A9!important;
|
||||
}
|
||||
.way_progress_round:first-of-type, .way_progress_round:last-of-type{
|
||||
border: 3px solid #A9A9A9!important;
|
||||
}
|
||||
}
|
||||
.route_card_actions_container{
|
||||
.delete_route{
|
||||
color: #FF613A;
|
||||
}
|
||||
}
|
||||
}
|
||||
.route_card_info_data{
|
||||
&.mobile{display: none}
|
||||
@media (max-width: 1024px) {
|
||||
@@ -89,8 +192,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
/* mobile end !!!*/
|
||||
|
||||
position: relative;
|
||||
|
||||
.card_owner_name{
|
||||
@@ -114,8 +215,12 @@
|
||||
top: 11px;
|
||||
left: 6px;
|
||||
z-index: 10;
|
||||
object-fit: cover;
|
||||
object-position: center;
|
||||
}
|
||||
.route_card_text_container{
|
||||
position: relative;
|
||||
overflow-wrap: anywhere;
|
||||
@media (max-width: 992px) {
|
||||
--big-font-size: 14px;
|
||||
}
|
||||
@@ -124,6 +229,72 @@
|
||||
margin: var(--route-text-container-margin);
|
||||
border-radius: var(--route-text-container-border-radius);
|
||||
font-size: var(--big-font-size);
|
||||
|
||||
&.wrapped{
|
||||
.route_card_text_container_txt{
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 2;
|
||||
-webkit-box-orient: vertical;
|
||||
overflow: hidden;
|
||||
}
|
||||
}
|
||||
|
||||
&.msg{
|
||||
.route_card_text_container_txt{
|
||||
background-image: linear-gradient(94.66deg, rgba(0, 0, 0, 1) 0%, rgba(241, 241, 241, 0) 8.64%, rgba(241, 241, 241, 0.98) 16.62%);
|
||||
color: transparent;
|
||||
background-clip: text;
|
||||
-webkit-background-clip: text;
|
||||
}
|
||||
.route_msg_for_unregistered_user, .route_clicked_msg_for_unregistered_user{
|
||||
--filter: none;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
img{
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
display: block;
|
||||
filter: var(--filter);
|
||||
}
|
||||
div{
|
||||
font-size: 12px;
|
||||
width: 215px;
|
||||
overflow-wrap: break-word;
|
||||
color: #27242499;
|
||||
}
|
||||
@media (max-width: 800px) {
|
||||
div{
|
||||
font-size: 10px;
|
||||
}
|
||||
img{
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.route_clicked_msg_for_unregistered_user{
|
||||
display: none;
|
||||
div{
|
||||
color: #272424;
|
||||
}
|
||||
--filter: brightness(0) saturate(100%) invert(43%) sepia(55%) saturate(1482%) hue-rotate(336deg) brightness(104%) contrast(101%);
|
||||
}
|
||||
&.clicked{
|
||||
.route_clicked_msg_for_unregistered_user{
|
||||
display: flex;
|
||||
}
|
||||
.route_msg_for_unregistered_user{
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
.route_card_owner_info{
|
||||
height: 47px;
|
||||
@@ -162,134 +333,170 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
.route_card_route_data{
|
||||
margin-top: var(--route_card_route_data-margin-top);
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
gap: 60px;
|
||||
|
||||
.route_card_route_data_cont{
|
||||
&.mobile{display: none}
|
||||
@media (max-width: 1160px) {
|
||||
display: none;
|
||||
&.mobile{
|
||||
display: grid;
|
||||
grid-template-columns: 20px calc(100% - 30px);
|
||||
gap: 10px;
|
||||
.way_progress_line_container{
|
||||
margin-top: 20px;
|
||||
height: calc(100% - 20px);
|
||||
.way_progress_round:first-of-type{
|
||||
left: unset;
|
||||
top: 0;
|
||||
}
|
||||
.way_progress_round:last-of-type{
|
||||
right: unset;
|
||||
top: calc(100% - 20px);
|
||||
}
|
||||
.way_progress_line{
|
||||
background: linear-gradient(180deg, rgba(6, 91, 255, 1) 0%, rgba(69, 194, 38, 1) 100%);
|
||||
height: calc(100% - 10px);
|
||||
width: 4px;
|
||||
}
|
||||
.way_progress_arrows_line{
|
||||
height: calc(100% - 10px);
|
||||
width: 4px;
|
||||
background-repeat: repeat-y;
|
||||
background-image: url("/static/v2/icons/widgets/w_route_card/route_arrow_mobile.svg");
|
||||
background-size: 4px;
|
||||
}
|
||||
}
|
||||
.route_transport, .route_date_data{
|
||||
&.route_transport{
|
||||
margin-bottom: 0;
|
||||
margin-top: 35px;
|
||||
}
|
||||
&.route_date_data{
|
||||
margin-top: 0;
|
||||
margin-bottom: 5px;
|
||||
&:last-of-type{
|
||||
margin-bottom: 39px;
|
||||
display: block;
|
||||
.route_card_route_data {
|
||||
display: grid;
|
||||
grid-template-columns: 20px calc(100% - 30px);
|
||||
gap: 10px;
|
||||
|
||||
.way_progress_line_container {
|
||||
margin-top: 20px;
|
||||
height: calc(100% - 20px);
|
||||
|
||||
.way_progress_round:first-of-type {
|
||||
left: unset;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.way_progress_round:last-of-type {
|
||||
right: unset;
|
||||
top: calc(100% - 20px);
|
||||
}
|
||||
|
||||
.way_progress_line {
|
||||
background: linear-gradient(180deg, rgba(6, 91, 255, 1) 0%, rgba(69, 194, 38, 1) 100%);
|
||||
height: calc(100% - 10px);
|
||||
width: 4px;
|
||||
}
|
||||
|
||||
.way_progress_arrows_line {
|
||||
height: calc(100% - 10px);
|
||||
width: 4px;
|
||||
background-repeat: repeat-y;
|
||||
background-image: url("/static/v2/icons/widgets/w_route_card/route_arrow_mobile.svg");
|
||||
background-size: 4px;
|
||||
}
|
||||
}
|
||||
justify-content: left!important;
|
||||
}
|
||||
.arrival_to {
|
||||
text-align: left!important;
|
||||
|
||||
.route_transport, .route_date_data {
|
||||
&.route_transport {
|
||||
margin-bottom: 0;
|
||||
margin-top: 35px;
|
||||
}
|
||||
|
||||
&.route_date_data {
|
||||
margin-top: 0;
|
||||
margin-bottom: 5px;
|
||||
|
||||
&:last-of-type {
|
||||
margin-bottom: 39px;
|
||||
}
|
||||
}
|
||||
|
||||
justify-content: left !important;
|
||||
}
|
||||
|
||||
.arrival_to {
|
||||
text-align: left !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.from_to_place_data{
|
||||
@media (max-width: 992px) {
|
||||
--big-font-size: 14px;
|
||||
}
|
||||
&:has(.arrival_to){
|
||||
.place{justify-content: right}
|
||||
} &:has(.departure_from){
|
||||
.place{justify-content: left}
|
||||
}
|
||||
@media (max-width: 1160px) {.place{justify-content: left!important;}}
|
||||
.label{
|
||||
color: #27242499;
|
||||
font-size: var(--big-font-size);
|
||||
font-weight: 600;
|
||||
margin-bottom: 10px;
|
||||
&.departure_from{
|
||||
text-align: left;
|
||||
} &.arrival_to{
|
||||
text-align: right;
|
||||
.route_card_route_data{
|
||||
margin-top: var(--route_card_route_data-margin-top);
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
gap: 60px;
|
||||
|
||||
.from_to_place_data{
|
||||
width: var(--from-to-place-data-width);
|
||||
@media (max-width: 992px) {
|
||||
--big-font-size: 14px;
|
||||
}
|
||||
}
|
||||
.place{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
.country{
|
||||
&:has(.arrival_to){
|
||||
.place{justify-content: right}
|
||||
} &:has(.departure_from){
|
||||
.place{justify-content: left}
|
||||
}
|
||||
@media (max-width: 1160px) {.place{justify-content: left!important;}}
|
||||
.label{
|
||||
color: #27242499;
|
||||
font-size: var(--big-font-size);
|
||||
font-weight: 600;
|
||||
margin-bottom: 10px;
|
||||
&.departure_from{
|
||||
text-align: left;
|
||||
} &.arrival_to{
|
||||
text-align: right;
|
||||
}
|
||||
}
|
||||
.place{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 5px;
|
||||
gap: 10px;
|
||||
.country{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 5px;
|
||||
|
||||
img{
|
||||
width: 16px;
|
||||
height: 12px;
|
||||
display: block;
|
||||
object-fit: contain;
|
||||
box-shadow: 0 -1px 4px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.country_code{
|
||||
color: #27242499;
|
||||
font-size: var(--medium-font-size);
|
||||
}
|
||||
}
|
||||
.place_title{
|
||||
--gradient_end: var(--max-width);
|
||||
--gradient_start: calc(var(--max-width) - 70px);
|
||||
--max-width: calc(var(--from-to-place-data-width) - 62.3px);
|
||||
font-size: var(--big-font-size);
|
||||
font-weight: 800;
|
||||
max-width: var(--max-width);
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
&.gradient{
|
||||
color: transparent;
|
||||
background-clip: text;
|
||||
-webkit-background-clip: text;
|
||||
background-image: linear-gradient(90deg, rgb(0 0 0) 0%, #000 var(--gradient_start), #FFFFFF var(--gradient_end));
|
||||
}
|
||||
@media (max-width: 1160px) {
|
||||
width: var(--max-width);
|
||||
--gradient_end: var(--from-to-place-data-width);
|
||||
--gradient_start: calc(var(--from-to-place-data-width) - 50px);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.route_way_data{
|
||||
@media (max-width: 992px) {
|
||||
--medium-font-size: 12px;
|
||||
}
|
||||
flex-grow: 1;
|
||||
.route_transport{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 5px;
|
||||
margin-bottom: 10px;
|
||||
margin-top: 8px;
|
||||
.route_transport_name{
|
||||
font-size: var(--medium-font-size);
|
||||
font-weight: 600;
|
||||
}
|
||||
img{
|
||||
width: 16px;
|
||||
height: 12px;
|
||||
display: block;
|
||||
object-fit: contain;
|
||||
box-shadow: 0 -1px 4px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.country_code{
|
||||
color: #27242499;
|
||||
font-size: var(--medium-font-size);
|
||||
}
|
||||
}
|
||||
.place_title{
|
||||
font-size: var(--big-font-size);
|
||||
font-weight: 800;
|
||||
color: #272424;
|
||||
}
|
||||
}
|
||||
}
|
||||
.route_way_data{
|
||||
@media (max-width: 992px) {
|
||||
--medium-font-size: 12px;
|
||||
}
|
||||
flex-grow: 1;
|
||||
.route_transport{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 5px;
|
||||
margin-bottom: 10px;
|
||||
margin-top: 8px;
|
||||
.route_transport_name{
|
||||
font-size: var(--medium-font-size);
|
||||
font-weight: 600;
|
||||
}
|
||||
img{
|
||||
height: 12px;
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.dates_inf_cont{
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.way_progress_line_container{
|
||||
position: relative;
|
||||
width: 100%;
|
||||
@@ -312,8 +519,8 @@
|
||||
}
|
||||
}
|
||||
.way_progress_line{
|
||||
width: calc(100% - 10px);
|
||||
margin-left: 10px;
|
||||
width: calc(100% - 20px);
|
||||
margin-left: 11px;
|
||||
height: 4px;
|
||||
position: absolute;
|
||||
top: 2px;
|
||||
@@ -322,7 +529,7 @@
|
||||
}
|
||||
.way_progress_arrows_line{
|
||||
width: calc(100% - 10px);
|
||||
margin-left: 10px;
|
||||
margin-left: 11px;
|
||||
height: 4px;
|
||||
position: absolute;
|
||||
top: 2px;
|
||||
@@ -394,8 +601,15 @@
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
text-align: unset;
|
||||
.route_btn_title{
|
||||
max-width: calc(100% - 21px);
|
||||
font-size: 14px!important;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
}
|
||||
&:not(&.inactive) and &:not(&.unhovered){
|
||||
&:not(&.inactive):not(&.unhovered){
|
||||
&:hover{
|
||||
background: var(--route-btn-hover-bg);
|
||||
.route_btn_title{color: var(--route-btn-hover-text-color);}
|
||||
@@ -467,6 +681,10 @@
|
||||
display: grid;
|
||||
grid-template-columns: calc(100% - 47px) 37px;
|
||||
gap: 10px;
|
||||
.route_btn{
|
||||
max-width: 155px!important;
|
||||
width: fit-content;
|
||||
}
|
||||
}
|
||||
.chat_btn{
|
||||
padding: 6.5px;
|
||||
@@ -479,4 +697,4 @@
|
||||
filter: invert(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
--header-padding: 20px 10px;
|
||||
--select-border: #E6E6E6;
|
||||
--select-border-radius: 10px 10px 0 0;
|
||||
--select-height: 68px;
|
||||
--select-height: 60px;
|
||||
|
||||
&.closed{
|
||||
--select-border-radius: 10px;
|
||||
@@ -17,7 +17,7 @@
|
||||
justify-content: space-between;
|
||||
border: 2px solid var(--select-border);
|
||||
border-radius: var(--select-border-radius);
|
||||
padding: 19px 10px;
|
||||
padding: 15px 10px;
|
||||
background: #FFFFFF;
|
||||
|
||||
.select_country_header_left_part{
|
||||
@@ -54,7 +54,7 @@
|
||||
.w_select_country_content{
|
||||
position: absolute;
|
||||
top: var(--select-height);
|
||||
z-index: 100;
|
||||
z-index: 10000;
|
||||
width: 100%;
|
||||
background: #FFFFFF;
|
||||
border: 2px solid var(--select-border);
|
||||
|
||||
BIN
static/v2/icons/blocks/b_dont_found_anth/box1.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
static/v2/icons/blocks/b_dont_found_anth/box2.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
static/v2/icons/blocks/b_dont_found_anth/box3.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
static/v2/icons/blocks/b_dont_found_anth/box4.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
3
static/v2/icons/blocks/b_filter_routes/arrow.svg
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg width="7" height="13" viewBox="0 0 7 13" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M1 1L6 6.5L1 12" stroke="white" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 191 B |
BIN
static/v2/icons/blocks/b_login_modal/lock.png
Normal file
|
After Width: | Height: | Size: 76 KiB |
4
static/v2/icons/service/modal/xmark.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<svg width="19" height="18" viewBox="0 0 19 18" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M1.29785 17L17.2979 1" stroke="#272424" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M17.2979 17L1.29785 1" stroke="#272424" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 333 B |
BIN
static/v2/icons/widgets/w_route_card/avatar.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
static/v2/icons/widgets/w_route_card/lock.png
Normal file
|
After Width: | Height: | Size: 7.9 KiB |
3
static/v2/icons/widgets/w_route_card/unregistered.svg
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg width="32" height="33" viewBox="0 0 32 33" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M13 23C13 24.933 11.433 26.5 9.5 26.5C7.567 26.5 6 24.933 6 23C6 21.067 7.567 19.5 9.5 19.5C11.433 19.5 13 21.067 13 23ZM13 23H19M19 23C19 24.933 20.567 26.5 22.5 26.5C24.433 26.5 26 24.933 26 23C26 21.067 24.433 19.5 22.5 19.5C20.567 19.5 19 21.067 19 23ZM1 15.5H31M5 15.5L11.1625 6.7C11.2553 6.56663 11.3793 6.45789 11.5236 6.38321C11.6679 6.30852 11.8283 6.27013 11.9908 6.27136C12.1533 6.27259 12.313 6.31341 12.4562 6.39027C12.5994 6.46714 12.7217 6.57774 12.8125 6.7125L15.1625 10.25C15.2534 10.3893 15.3775 10.5037 15.5238 10.5829C15.67 10.6621 15.8337 10.7036 16 10.7036C16.1663 10.7036 16.33 10.6621 16.4762 10.5829C16.6225 10.5037 16.7466 10.3893 16.8375 10.25L19.1875 6.7125C19.2783 6.57774 19.4006 6.46714 19.5438 6.39027C19.687 6.31341 19.8467 6.27259 20.0092 6.27136C20.1717 6.27013 20.3321 6.30852 20.4764 6.38321C20.6207 6.45789 20.7447 6.56663 20.8375 6.7L27 15.5" stroke="#272424" stroke-opacity="0.6" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
27
static/v2/js/blocks/b_filter_routes.js
Normal file
@@ -0,0 +1,27 @@
|
||||
function toggleFiltersModal(el) {
|
||||
if (!el) return;
|
||||
|
||||
if (el.classList.contains('active')) {
|
||||
closeFiltersModal(el)
|
||||
} else {
|
||||
openFiltersModal(el)
|
||||
}
|
||||
}
|
||||
|
||||
function openFiltersModal(el) {
|
||||
if (!el) return;
|
||||
|
||||
el.classList.add('active');
|
||||
|
||||
let $modal = $(".b_filter_routes.modal")
|
||||
$modal.addClass('open');
|
||||
}
|
||||
|
||||
function closeFiltersModal(el) {
|
||||
if (!el) return;
|
||||
|
||||
el.classList.remove('active');
|
||||
|
||||
let $modal = $(".b_filter_routes.modal")
|
||||
$modal.removeClass('open');
|
||||
}
|
||||
31
static/v2/js/blocks/b_my_routes.js
Normal file
@@ -0,0 +1,31 @@
|
||||
function loadMoreMyRoutesRoutes (el){
|
||||
if (!el) return;
|
||||
let formData = new FormData();
|
||||
let from_el = parseInt(el.dataset.from_el);
|
||||
let to_el = from_el + parseInt(el.dataset.more_count);
|
||||
formData.append('from_el', from_el);
|
||||
formData.append('to_el', to_el);
|
||||
|
||||
let request = new api({
|
||||
url: '/routes/get_routes/',
|
||||
data: formData,
|
||||
data_type: 'formData',
|
||||
success: (res) => {
|
||||
if (!res.html) return;
|
||||
let $parent = $('.info_profile')[0];
|
||||
let $next_page_btn = $parent.querySelector('.container_btns[data-next_page_btn]')
|
||||
$next_page_btn.remove();
|
||||
|
||||
appendNodes($parent, templateStrToNode(`
|
||||
<div class="next_page" style="
|
||||
margin: 50px 0;
|
||||
width: 100%;
|
||||
background: #212121;
|
||||
height: 1px;"></div>
|
||||
`));
|
||||
appendNodes($parent, templateStrToNode(res.html));
|
||||
}
|
||||
});
|
||||
|
||||
request.ajaxRequest()
|
||||
}
|
||||
@@ -1,22 +1,64 @@
|
||||
function searchRoutes (form) {
|
||||
function searchRoutes (form=undefined) {
|
||||
event.preventDefault()
|
||||
let $filter_form = $('.b_filter_routes form')[0];
|
||||
let $search_form = $('.b_search_routes form')[0];
|
||||
|
||||
let formData = getFormData(form);
|
||||
let formData = getFormData($search_form);
|
||||
formData = getFormData($filter_form, formData);
|
||||
formData.append('owner_type', 'mover');
|
||||
let owner_type = 'mover'
|
||||
formData.append('owner_type', owner_type);
|
||||
|
||||
let query = formDataToQueryString(formData, [$filter_form, $search_form]);
|
||||
query+=`owner_type=${owner_type}`
|
||||
window.history.pushState(null, null, `?${query}`);
|
||||
let request = new api({
|
||||
url: '/routes/find_routes/',
|
||||
data: formData,
|
||||
data_type: 'formData',
|
||||
success: function (res) {
|
||||
if (!res.html) return;
|
||||
let $parent = $('.routes_search_results')[0]
|
||||
let $parent = $('.routes_search_results')[0];
|
||||
|
||||
$parent.innerHTML = res.html;
|
||||
}
|
||||
})
|
||||
|
||||
request.ajaxRequest()
|
||||
}
|
||||
|
||||
function loadMoreRoutes (el) {
|
||||
if (!el) return;
|
||||
let from_el = parseInt(el.dataset.from_el);
|
||||
let to_el = from_el + parseInt(el.dataset.more_count);
|
||||
let $filter_form = $('.b_filter_routes form')[0];
|
||||
let $search_form = $('.b_search_routes form')[0];
|
||||
|
||||
let formData = getFormData($search_form);
|
||||
formData = getFormData($filter_form, formData);
|
||||
let owner_type = 'mover'
|
||||
formData.append('owner_type', owner_type);
|
||||
formData.append('from_el', from_el);
|
||||
formData.append('to_el', to_el);
|
||||
|
||||
let query = formDataToQueryString(formData, [$filter_form, $search_form]);
|
||||
query+=`owner_type=${owner_type}`
|
||||
window.history.pushState(null, null, `?${query}`);
|
||||
let request = new api({
|
||||
url: '/routes/find_routes/',
|
||||
data: formData,
|
||||
data_type: 'formData',
|
||||
success: function (res) {
|
||||
if (!res.html) return;
|
||||
let $parent = $('.routes_search_results')[0];
|
||||
let $next_page_btn = $parent.querySelector('.container_btns[data-next_page_btn]')
|
||||
$next_page_btn.remove();
|
||||
|
||||
appendNodes($parent, templateStrToNode(`
|
||||
<div class="next_page"></div>
|
||||
`));
|
||||
appendNodes($parent, templateStrToNode(res.html));
|
||||
}
|
||||
})
|
||||
|
||||
request.ajaxRequest()
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
function chooseCheckbox(el) {
|
||||
function chooseCheckbox(el, callback) {
|
||||
if (!el) return;
|
||||
resetFieldError(el);
|
||||
|
||||
@@ -6,6 +6,7 @@ function chooseCheckbox(el) {
|
||||
let $checkbox = $parent.querySelector('.checkbox')
|
||||
|
||||
$checkbox.classList.toggle("checked");
|
||||
if (callback) callback($checkbox.classList.contains('checked'));
|
||||
}
|
||||
|
||||
function getFormData(form, formData=new FormData()) {
|
||||
@@ -205,7 +206,71 @@ function checkFieldEmpty($field) {
|
||||
let $date = $field.querySelector('input');
|
||||
if ($date.value) empty = false;
|
||||
|
||||
break;
|
||||
|
||||
case 'select':
|
||||
let $select = el.querySelector('select');
|
||||
if (!$select) return;
|
||||
if ($select.value) empty = false;
|
||||
|
||||
break;
|
||||
}
|
||||
return empty;
|
||||
}
|
||||
}
|
||||
|
||||
function getFormDataElValue($field) {
|
||||
if (!$field) return;
|
||||
|
||||
switch ($field.dataset.type) {
|
||||
case 'checkbox':
|
||||
let $checkbox = $field.querySelector('.checkbox');
|
||||
let c_value = $checkbox.classList.contains('checked');
|
||||
return c_value;
|
||||
|
||||
case 'radio':
|
||||
let $radio = $field.querySelector('.radio.checked');
|
||||
if ($radio){
|
||||
$radio = $radio.closest('.cw_w_radio_inputs_radio_input').dataset.name;
|
||||
return $radio
|
||||
} else {
|
||||
return ``
|
||||
}
|
||||
|
||||
|
||||
case 'location':
|
||||
let $location = $field.querySelector('input');
|
||||
let l_value = $location.dataset.id;
|
||||
|
||||
return l_value;
|
||||
|
||||
case 'input':
|
||||
let $input = $field.querySelector('input');
|
||||
|
||||
return $input.value;
|
||||
|
||||
case 'textarea':
|
||||
let $textarea = $field.querySelector('textarea');
|
||||
return $textarea.value;
|
||||
|
||||
case 'date':
|
||||
let $date = $field.querySelector('input');
|
||||
return $date.value;
|
||||
|
||||
case 'select':
|
||||
let $select = $field.querySelector('select');
|
||||
if (!$select) return;
|
||||
|
||||
return $select.value;
|
||||
}
|
||||
}
|
||||
|
||||
function formDataToQueryString (formData, forms) {
|
||||
let str = ``
|
||||
|
||||
formData.forEach((value, name) => {
|
||||
str+=`${name}=${value}&`;
|
||||
})
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ function makeMoverOrder(form) {
|
||||
let formData = getFormData(form);
|
||||
formData.append('owner_type', 'mover');
|
||||
|
||||
if (form.dataset.route_id) formData.set('route_id', form.dataset.route_id);
|
||||
let request = new api({
|
||||
url: '/routes/create_or_change_route/',
|
||||
data: formData,
|
||||
|
||||
@@ -4,6 +4,7 @@ function makePosterOrder(form) {
|
||||
let formData = getFormData(form);
|
||||
formData.append('owner_type', 'customer');
|
||||
|
||||
if (form.dataset.route_id) formData.set('route_id', form.dataset.route_id);
|
||||
let request = new api({
|
||||
url: '/routes/create_or_change_route/',
|
||||
data: formData,
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
$(document).ready(function() {
|
||||
if (window.innerWidth <= 800) {
|
||||
$(".b_filter_routes").addClass('modal');
|
||||
return;
|
||||
}
|
||||
let header_height = $("#header_bg")[0].offsetHeight;
|
||||
let _scroll = new scroll({
|
||||
attach_top: header_height + 20,
|
||||
@@ -6,7 +10,7 @@ $(document).ready(function() {
|
||||
el: $(".b_filter_routes")[0],
|
||||
recover_el_view: true,
|
||||
ghost_block:{name: 'route_filters'},
|
||||
$unnatach_bottom_el: $("footer")[0]
|
||||
$unnatach_bottom_el: $(".b_dont_found_anth")[0]
|
||||
})
|
||||
_scroll.init()
|
||||
$('body')[0].onscroll = function() {
|
||||
|
||||
11
static/v2/js/service/general.js
Normal file
@@ -0,0 +1,11 @@
|
||||
function templateStrToNode(template) {
|
||||
let template_cont = document.createElement("template");
|
||||
template_cont.innerHTML = template;
|
||||
return template_cont.content.children;
|
||||
}
|
||||
|
||||
function appendNodes($cont, nodes) {
|
||||
while (nodes.length > 0){
|
||||
$cont.append(nodes[0]);
|
||||
}
|
||||
}
|
||||
6
static/v2/js/service/modal.js
Normal file
@@ -0,0 +1,6 @@
|
||||
function closeModal(el) {
|
||||
let $parent = el.closest('.modal');
|
||||
$parent.classList.remove('open');
|
||||
|
||||
$("body")[0].style.overflow = "auto";
|
||||
}
|
||||
@@ -14,19 +14,20 @@ class scroll{
|
||||
}
|
||||
|
||||
attachElementWhenScroll(){
|
||||
if (!this.attached_by_bottom_el && this.$unnatach_bottom_el && this.$unnatach_bottom_el.getBoundingClientRect().top <= window.innerHeight && this.attached){
|
||||
let bottom_el_in_screen = this.$unnatach_bottom_el.getBoundingClientRect().top <= window.innerHeight
|
||||
if (!this.attached_by_bottom_el && this.$unnatach_bottom_el && bottom_el_in_screen && this.attached){
|
||||
let $unnatach_bottom_el_margin_top= window.getComputedStyle(this.$unnatach_bottom_el)
|
||||
$unnatach_bottom_el_margin_top = $unnatach_bottom_el_margin_top.getPropertyValue('margin-top');
|
||||
$unnatach_bottom_el_margin_top = $unnatach_bottom_el_margin_top.split('p')
|
||||
$unnatach_bottom_el_margin_top = $unnatach_bottom_el_margin_top.length > 0? $unnatach_bottom_el_margin_top[0] : 0;
|
||||
this.$el.style.top = (window.scrollY - $unnatach_bottom_el_margin_top) + 'px';
|
||||
this.$el.style.top = (window.scrollY - $unnatach_bottom_el_margin_top) + this.top + 'px';
|
||||
this.$el.style.position = "absolute";
|
||||
this.attached_by_bottom_el = true;
|
||||
return;
|
||||
} else if (this.attached_by_bottom_el && this.$unnatach_bottom_el && this.$unnatach_bottom_el.getBoundingClientRect().top >= window.innerHeight) {
|
||||
this.attachFunc(false)
|
||||
}
|
||||
if (!this.attached && this.$el.getBoundingClientRect().top <= this.attach_top) {
|
||||
if (!this.attached && this.$el.getBoundingClientRect().top <= this.attach_top && !bottom_el_in_screen) {
|
||||
this.attachFunc()
|
||||
} else if ((this.$el.parentElement.getBoundingClientRect().top - this.attach_top) > 0){
|
||||
this.$el.style.position = "unset";
|
||||
|
||||
@@ -36,18 +36,19 @@ function datarangepickerinitAll(){
|
||||
}
|
||||
|
||||
function daterangepickerInit(el, callback, date) {
|
||||
let $datarangepicker = el.querySelector('input')
|
||||
let min_date = moment()
|
||||
if (date){
|
||||
min_date = moment(date);
|
||||
let $datarangepicker = el.querySelector('input');
|
||||
|
||||
let min_date = moment(date)
|
||||
if ($datarangepicker.dataset.set_min_date === 'false' || $datarangepicker.dataset.set_min_date === false) {
|
||||
min_date = moment('1900-01-01');
|
||||
}
|
||||
$($datarangepicker).daterangepicker({
|
||||
"autoapply": true,
|
||||
"linkedCalendars": false,
|
||||
"singleDatePicker": !!el.dataset.range,
|
||||
"singleDatePicker": !!!$datarangepicker.dataset.range,
|
||||
"timePicker": false,
|
||||
"timePicker24Hour": false,
|
||||
"minDate": moment(date),
|
||||
"minDate": min_date,
|
||||
"locale": setLocalSets(),
|
||||
}, function (start, end, label) {
|
||||
let $parent = el.closest('.w_daterangepicker')
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
function changeRoute(el) {
|
||||
if (!el) return;
|
||||
if (!el || el.closest('.disabled')) return;
|
||||
let $parent = el.closest(".w_route_card")
|
||||
if (!$parent) return;
|
||||
|
||||
@@ -14,6 +14,12 @@ function changeRoute(el) {
|
||||
success: (res) => {
|
||||
if (!res.html) return;
|
||||
$(".info_profile")[0].innerHTML = res.html;
|
||||
window.scrollTo({
|
||||
top: 0,
|
||||
left: 0,
|
||||
behavior: "smooth"
|
||||
});
|
||||
datarangepickerinitAll()
|
||||
}, error: (res) => {
|
||||
|
||||
}
|
||||
@@ -46,7 +52,7 @@ function deleteRoute(el) {
|
||||
}
|
||||
|
||||
function raiseRoute(el) {
|
||||
if (!el || el.dataset.actions_count === '0') return;
|
||||
if (!el || el.dataset.actions_count === '0' || el.closest('.disabled')) return;
|
||||
let $parent = el.closest(".w_route_card")
|
||||
if (!$parent) return;
|
||||
|
||||
@@ -89,7 +95,7 @@ function raiseRoute(el) {
|
||||
}
|
||||
|
||||
function highlightRoute(el) {
|
||||
if (!el || el.dataset.actions_count === '0') return;
|
||||
if (!el || el.dataset.actions_count === '0' || el.closest('.disabled')) return;
|
||||
let $parent = el.closest(".w_route_card")
|
||||
if (!$parent) return;
|
||||
|
||||
@@ -116,14 +122,34 @@ function highlightRoute(el) {
|
||||
request.ajaxRequest()
|
||||
}
|
||||
|
||||
function respondBtnClickEvent(el) {
|
||||
if (!el) return;
|
||||
let $parent = el.closest(".w_route_card")
|
||||
let $responde_cont = $parent.querySelector(".respond_route_cont")
|
||||
if (window.innerWidth < 1160) $responde_cont = $parent.querySelector(".respond_route_cont.mobile")
|
||||
function respondBtnClickEvent(el, authentificated) {
|
||||
if (!el || el.closest('.disabled')) return;
|
||||
if (authentificated !== 'False') {
|
||||
let $parent = el.closest(".w_route_card")
|
||||
let $responde_cont = $parent.querySelector(".respond_route_cont")
|
||||
if (window.innerWidth < 1160) $responde_cont = $parent.querySelector(".respond_route_cont.mobile")
|
||||
|
||||
$(el).fadeOut(500);
|
||||
sleep(500).then(() => {
|
||||
$($responde_cont).fadeIn(500);
|
||||
})
|
||||
}
|
||||
$(el).fadeOut(500);
|
||||
sleep(500).then(() => {
|
||||
$($responde_cont).fadeIn(500);
|
||||
})
|
||||
} else {
|
||||
$(".b_login_modal").addClass('open');
|
||||
$("body")[0].style.overflow = "hidden";
|
||||
}
|
||||
}
|
||||
|
||||
function clickedUnregisteredMsgRoute (el) {
|
||||
if (!el || el.closest('.disabled')) return;
|
||||
|
||||
let $parent = el.closest(".route_card_text_container")
|
||||
$parent.classList.add('clicked');
|
||||
}
|
||||
|
||||
function unwrapRouteComment (el){
|
||||
if (!el || el.closest('.disabled')) return;
|
||||
let $parent = el.closest(".wrapped")
|
||||
if (!$parent) return;
|
||||
|
||||
$parent.classList.remove('wrapped');
|
||||
}
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
<script src='{% static "v2/js/widgets/w_textarea_w_counter.js" %}'></script>
|
||||
<script src='{% static "v2/js/forms/f_make_poster_order.js" %}'></script>
|
||||
<script src='{% static "v2/js/forms/f_make_mover_order.js" %}'></script>
|
||||
<script src='{% static "v2/js/blocks/b_my_routes.js" %}'></script>
|
||||
{% include "connect_ws_js.html" %}
|
||||
<link rel="stylesheet" href="{% static "v2/css/widgets/w_route_card.css" %}">
|
||||
|
||||
|
||||
@@ -91,6 +91,8 @@ function gtag_report_conversion(url) {
|
||||
<link rel="stylesheet" href="{% static 'css/styles(boris).css' %}" >
|
||||
<link rel="stylesheet" href="{% static 'css/mobile_styles.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'v2/css/widgets/w_additional_info.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'v2/css/service/modal.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'v2/css/service/btns.css' %}">
|
||||
|
||||
<script src='{% static "js/find_route.js" %}'></script>
|
||||
<script src="{% static "js/filters_functions_find_route.js" %}"></script>
|
||||
@@ -100,6 +102,8 @@ function gtag_report_conversion(url) {
|
||||
<script src="{% static "js/user_profile_2.js" %}"></script>
|
||||
<script src="{% static "js/ion.rangeSlider.min.js" %}"></script>
|
||||
<script src="{% static "v2/js/forms.js" %}"></script>
|
||||
<script src="{% static "v2/js/service/modal.js" %}"></script>
|
||||
<script src="{% static "v2/js/service/general.js" %}"></script>
|
||||
<link rel="stylesheet" href="{% static "css/ion.rangeSlider.min.css" %}">
|
||||
|
||||
|
||||
@@ -213,13 +217,13 @@ function gtag_report_conversion(url) {
|
||||
{# </div>#}
|
||||
{# </div>#}
|
||||
</div>
|
||||
<div class="handler_curtain_left close" onclick="open_curtain_w_contacts()">
|
||||
<div class="container_content_handler_curtain_left">
|
||||
<img class="arrows_handler_curtain_left" src="{% static 'img/svg/arrow_f_curtain.svg' %}">
|
||||
<img class="filter_img" src='{% static "/img/svg/filter.svg" %}'>
|
||||
<img class="arrows_handler_curtain_left" src="{% static 'img/svg/arrow_f_curtain.svg' %}">
|
||||
</div>
|
||||
</div>
|
||||
{# <div class="handler_curtain_left close" onclick="open_curtain_w_contacts()">#}
|
||||
{# <div class="container_content_handler_curtain_left">#}
|
||||
{# <img class="arrows_handler_curtain_left" src="{% static 'img/svg/arrow_f_curtain.svg' %}">#}
|
||||
{# <img class="filter_img" src='{% static "/img/svg/filter.svg" %}'>#}
|
||||
{# <img class="arrows_handler_curtain_left" src="{% static 'img/svg/arrow_f_curtain.svg' %}">#}
|
||||
{# </div>#}
|
||||
{# </div>#}
|
||||
{% endif %}
|
||||
<div class="{% if page.url == "landing_mover" or page.url == "landing_customer" %}container{% else %}wrapper_content{% endif %} {% if page.url == 'customer_service'%} m_h_0 {% elif page.url == 'contacts' %}m_h_0{% elif request.path == '/test_404' %}m_h_0{% endif %}">
|
||||
|
||||
|
||||
22
templates/v2/blocks/b_chat_modal.html
Normal file
@@ -0,0 +1,22 @@
|
||||
{% load static %}
|
||||
{% load i18n %}
|
||||
<link rel="stylesheet" href="{% static "v2/css/blocks/b_chat_modal.css" %}">
|
||||
|
||||
<div class="b_chat_modal open modal">
|
||||
<div class="overlay"></div>
|
||||
<div class="modal_body">
|
||||
|
||||
<div class="chat_header">
|
||||
<div class="close_chat_container">
|
||||
<div class="close_btn">
|
||||
<img src="{% static 'v2/icons/service/modal/xmark.svg' %}">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="chat_">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
23
templates/v2/blocks/b_dont_found_anth.html
Normal file
@@ -0,0 +1,23 @@
|
||||
{% load static %}
|
||||
{% load i18n %}
|
||||
<link rel="stylesheet" href="{% static "v2/css/blocks/b_dont_found_anth.css" %}">
|
||||
|
||||
<div class="b_dont_found_anth">
|
||||
<div class="first_imgs_line">
|
||||
<img src="{% static "v2/icons/blocks/b_dont_found_anth/box1.png" %}" alt="">
|
||||
<img src="{% static "v2/icons/blocks/b_dont_found_anth/box2.png" %}" alt="">
|
||||
</div>
|
||||
<div class="second_imgs_line">
|
||||
<img src="{% static "v2/icons/blocks/b_dont_found_anth/box3.png" %}" alt="">
|
||||
<img src="{% static "v2/icons/blocks/b_dont_found_anth/box4.png" %}" alt="">
|
||||
</div>
|
||||
<div class="container_content">
|
||||
<div class="title">{% trans "Не нашли, что искали?" %}</div>
|
||||
<div class="description">
|
||||
{% trans "Создайте свое объявление и Вас начнут находить перевозчики со всего мира!" %}
|
||||
</div>
|
||||
<div class="container_btns" style="--justify: center;">
|
||||
<a class="primary_btn" style="--padding: 19px 40px 21px 40px;">{% trans "Создать объявление" %}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -2,28 +2,38 @@
|
||||
{% load i18n %}
|
||||
<link rel="stylesheet" href="{% static "v2/css/blocks/b_filter_routes.css" %}">
|
||||
|
||||
<div class="b_filter_routes_modal_handler" onclick="toggleFiltersModal(this)">
|
||||
<div class="b_filter_routes_modal_handler_content">
|
||||
<img src="{% static "v2/icons/blocks/b_filter_routes/arrow.svg" %}" alt="">
|
||||
<div>{% trans "Фильтр" %}</div>
|
||||
<img src="{% static "v2/icons/blocks/b_filter_routes/arrow.svg" %}" alt="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="b_filter_routes">
|
||||
<div class="title">{% trans "Все фильтры" %}</div>
|
||||
<form name="filter_routes">
|
||||
<div class="label" style="margin-bottom: 16px;">{% trans "Способ перевозки" %}</div>
|
||||
<div class="field_container line" data-type="checkbox" data-name="type_transport">
|
||||
<div class="checkbox{% if route_form.initial.type_transport %} checked{% endif %}" data-value="road" onclick="chooseCheckbox(this)"></div>
|
||||
<div class="checkbox_label" onclick="chooseCheckbox(this)">{% trans "Автоперевозка" %}</div>
|
||||
{% if route_form.errors.type_transport %}<div class="error_container">{{ route_form.errors.type_transport.0 }}</div>{% endif %}
|
||||
</div>
|
||||
<div class="field_container line" data-type="checkbox" data-name="type_transport">
|
||||
<div class="checkbox{% if route_form.initial.type_transport %} checked{% endif %}" data-value="avia" onclick="chooseCheckbox(this)"></div>
|
||||
<div class="checkbox_label" onclick="chooseCheckbox(this)">{% trans "Авиатранспорт" %}</div>
|
||||
{% if route_form.errors.type_transport %}<div class="error_container">{{ route_form.errors.type_transport.0 }}</div>{% endif %}
|
||||
</div>
|
||||
<div class="field_container" data-type="select" data-name="cargo_type">
|
||||
<label for="id_cargo_type">{% trans "Тип посылки" %}</label>
|
||||
<select name="cargo_type" id="id_cargo_type">
|
||||
<option value="">{% trans "Любой" %}</option>
|
||||
{% for cargo_type in route_form.fields.cargo_type.choices %}
|
||||
<option value="{{ cargo_type.0 }}">{{ cargo_type.1 }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
</form>
|
||||
<div class="overlay"></div>
|
||||
<div class="b_filter_routes_content">
|
||||
<div class="title">{% trans "Все фильтры" %}</div>
|
||||
<form name="filter_routes">
|
||||
<div class="label" style="margin-bottom: 16px;">{% trans "Способ перевозки" %}</div>
|
||||
<div class="field_container line" data-type="checkbox" data-name="type_transport">
|
||||
<div class="checkbox{% if 'road' in form.initial.type_transport %} checked{% endif %}" data-value="road" onclick="chooseCheckbox(this, searchRoutes)"></div>
|
||||
<div class="checkbox_label" onclick="chooseCheckbox(this, searchRoutes)">{% trans "Автоперевозка" %}</div>
|
||||
{% if form.errors.type_transport %}<div class="error_container">{{ form.errors.type_transport.0 }}</div>{% endif %}
|
||||
</div>
|
||||
<div class="field_container line" data-type="checkbox" data-name="type_transport">
|
||||
<div class="checkbox{% if 'avia' in form.initial.type_transport %} checked{% endif %}" data-value="avia" onclick="chooseCheckbox(this, searchRoutes)"></div>
|
||||
<div class="checkbox_label" onclick="chooseCheckbox(this, searchRoutes)">{% trans "Авиатранспорт" %}</div>
|
||||
{% if form.errors.type_transport %}<div class="error_container">{{ form.errors.type_transport.0 }}</div>{% endif %}
|
||||
</div>
|
||||
<div class="field_container" data-type="select" data-name="cargo_type">
|
||||
<label for="id_cargo_type">{% trans "Тип посылки" %}</label>
|
||||
<select name="cargo_type" id="id_cargo_type" onchange="searchRoutes()">
|
||||
<option value="">{% trans "Любой" %}</option>
|
||||
{% for cargo_type in form.fields.cargo_type.choices %}
|
||||
<option value="{{ cargo_type.0 }}">{{ cargo_type.1 }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
21
templates/v2/blocks/b_login_modal.html
Normal file
@@ -0,0 +1,21 @@
|
||||
{% load static %}
|
||||
{% load i18n %}
|
||||
<link rel="stylesheet" href="{% static "v2/css/blocks/b_login_modal.css" %}">
|
||||
|
||||
<div class="b_login_modal modal">
|
||||
<div class="overlay"></div>
|
||||
<div class="b_login_modal_container_content">
|
||||
<div class="b_login_modal_content">
|
||||
<img onclick="closeModal(this)" class="xmark" src="{% static "v2/icons/service/modal/xmark.svg" %}" alt="">
|
||||
<div class="b_login_modal_inf">
|
||||
<div class="lock_img_container">
|
||||
<img src="{% static "v2/icons/blocks/b_login_modal/lock.png" %}" alt="">
|
||||
</div>
|
||||
<div class="modal_title">{% trans "Войдите или зарегистрируйтесь" %}</div>
|
||||
<div class="modal_description">{% trans "Чтобы увидеть контакты - войдите в свою учетную запись или зарегистрируйтесь" %}</div>
|
||||
<a class="primary_btn" href="{% url "login_profile" %}">{% trans "Войти" %}</a>
|
||||
<a class="registr_btn" href="{% url "registration_page" %}">{% trans "Зарегестрироватся" %}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -5,4 +5,15 @@
|
||||
{% for route in routes %}
|
||||
{% include 'v2/widgets/w_route_card.html' with route=route %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% if not last_block %}
|
||||
<div class="container_btns" data-next_page_btn="true" style="--justify: center;margin-top: 20px">
|
||||
<div class="primary_btn"
|
||||
onclick="loadMoreMyRoutesRoutes(this)"
|
||||
style="--padding: 19px 34px 21px 34px"
|
||||
data-from_el="{{ last_el }}"
|
||||
data-more_count="{{ next_page_els_count }}">
|
||||
{% trans "Показать ещё" %} {{ next_page_els_count }}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
@@ -5,18 +5,30 @@
|
||||
<div class="b_search_routes">
|
||||
<form name="search_routes" onsubmit="searchRoutes(this)">
|
||||
<div class="field_container" data-type="location" data-name="from_city">
|
||||
<label for="id_from_city">{% trans "Выезжает из" %}</label>
|
||||
<label for="id_from_city">
|
||||
{% if owner_type == 'mover' %}
|
||||
{% trans "Выезжает из" %}
|
||||
{% else %}
|
||||
{% trans "Забрать из" %}
|
||||
{% endif %}
|
||||
</label>
|
||||
{% include 'v2/widgets/w_select_country.html' with name='from_city' placeholder='' initial=form.initial.from_city %}
|
||||
{% if form.errors.from_city %}<div class="error_container">{{ form.errors.from_city.0 }}</div>{% endif %}
|
||||
</div>
|
||||
<div class="field_container" data-type="location" data-name="to_city">
|
||||
<label for="id_from_city">{% trans "Прибывает в" %}</label>
|
||||
<label for="id_from_city">
|
||||
{% if owner_type == 'mover' %}
|
||||
{% trans "Прибывает в" %}
|
||||
{% else %}
|
||||
{% trans "Доставить в" %}
|
||||
{% endif %}
|
||||
</label>
|
||||
{% include 'v2/widgets/w_select_country.html' with name='to_city' placeholder='' initial=form.initial.to_city %}
|
||||
{% if form.errors.to_city %}<div class="error_container">{{ form.errors.to_city.0 }}</div>{% endif %}
|
||||
</div>
|
||||
<div class="field_container" data-type="date" data-name="arrival_DT">
|
||||
<label for="id_arrival_DT">{% trans "Дата (период) доставки" %}</label>
|
||||
{% include 'v2/widgets/w_daterangepicker.html' with name='arrival_DT' range='true' initial=form.initial.arrival_DT %}
|
||||
{% include 'v2/widgets/w_daterangepicker.html' with set_min_date='false' name='arrival_DT' range='true' initial=form.initial.arrival_DT %}
|
||||
{% if form.errors.arrival_DT %}<div class="error_container">{{ form.errors.arrival_DT.0 }}</div>{% endif %}
|
||||
</div>
|
||||
<button type="submit">{% trans "Найти посылку" %}</button>
|
||||
|
||||
@@ -1,6 +1,18 @@
|
||||
{% load static %}
|
||||
{% load i18n %}
|
||||
|
||||
{% for route in routes %}
|
||||
{% include "v2/widgets/w_route_card_for_search.html" %}
|
||||
{% endfor %}
|
||||
<div class="routes_cont">
|
||||
{% for route in routes %}
|
||||
{% include "v2/widgets/w_route_card_for_search.html" %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% if not last_block %}
|
||||
<div class="container_btns" data-next_page_btn="true" style="--justify: center;margin-top: 20px">
|
||||
<div class="primary_btn"
|
||||
onclick="loadMoreRoutes(this)"
|
||||
style="--padding: 19px 34px 21px 34px"
|
||||
data-from_el="{{ last_el }}"
|
||||
data-more_count="{{ next_page_els_count }}">
|
||||
{% trans "Показать ещё" %} {{ next_page_els_count }}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
@@ -2,10 +2,10 @@
|
||||
{% load i18n %}
|
||||
{% load reference_data_tags %}
|
||||
|
||||
<div class="cw_w_select_widget_for_select" data-id="{{ id }}" data-name="{{ name }}/{{ country__name }}" data-country_code="{{ country__short_code }}" data-flag="{{ MEDIA_URL }}{{ country__flag }}" onclick="selectCountry(this)" data-now="{{ timezone|get_cur_DT_by_tz }}">
|
||||
<div class="cw_w_select_widget_for_select" data-id="{{ id }}" data-name="{{ name }}/{{ country__name }}" data-country_code="{{ country__code }}" data-flag="{{ MEDIA_URL }}{{ country__flag }}" onclick="selectCountry(this)" data-now="{{ timezone|get_cur_DT_by_tz }}">
|
||||
<div class="cw_country_inf_part">
|
||||
<img src="{{ MEDIA_URL }}{{ country__flag }}" alt="">
|
||||
<div class="cw_country_code">{{ country__short_code }}</div>
|
||||
<div class="cw_country_code">{{ country__code }}</div>
|
||||
</div>
|
||||
<div class="cw_name_country">{{ name }}/{{ country__name }}</div>
|
||||
</div>
|
||||
@@ -17,10 +17,10 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="route_btn mobile inactive" style="--route-btn-width: auto;--route-btn-height: min-content;--route-btn-padding: 7.5px 11px;--route-btn-margin: 20.5px 0 0 0;">
|
||||
<a class="route_btn mobile inactive" {% if now_DT <= route.arrival_DT %}href="tel:{{ route.phone }}"{% endif %} style="--route-btn-width: auto;--route-btn-height: min-content;--route-btn-padding: 7.5px 11px;--route-btn-margin: 20.5px 0 0 0;">
|
||||
<img src="{% static "v2/icons/widgets/w_route_card/phone_half_opacity.svg" %}" alt="">
|
||||
<div class="route_btn_title big">{{ route.phone }}</div>
|
||||
</div>
|
||||
</a>
|
||||
<div class="route_card_actions_container mobile">
|
||||
<div class="route_btn solid" style="--route-btn-width: auto;" data-action="change" onclick="changeRoute(this)">
|
||||
<div class="route_btn_title">{% trans "Редактировать" %}</div>
|
||||
|
||||
@@ -2,14 +2,20 @@
|
||||
{% load i18n %}
|
||||
|
||||
<div class="respond_route_cont mobile" style="display: none;margin-top: 23px;">
|
||||
<div class="route_btn unhovered" style="--route-btn-width: max-content;--route-btn-height: min-content;--route-btn-padding: 7.5px 11px;">
|
||||
<div class="route_btn unhovered" style="--route-btn-height: min-content;--route-btn-padding: 7.5px 11px;">
|
||||
<img src="{% static "v2/icons/widgets/w_route_card/phone.svg" %}" alt="">
|
||||
<div class="route_btn_title big">{{ route.phone|truncatechars:20 }}</div>
|
||||
<a {% if now_DT <= route.arrival_DT %}href="tel:{{ route.phone }}"{% endif %} class="route_btn_title big">
|
||||
{% if route.phone %}
|
||||
{{ route.phone|truncatechars:20 }}
|
||||
{% else %}
|
||||
{% trans "Номер не указан" %}
|
||||
{% endif %}
|
||||
</a>
|
||||
</div>
|
||||
<div class="chat_btn">
|
||||
<img src="{% static "v2/icons/widgets/w_route_card/chat.png" %}" alt="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="route_btn mobile solid" onclick="respondBtnClickEvent(this)" style="--route-btn-margin: 23px 0 0 0;--route-btn-width: 100%;--route-btn-height: min-content;--route-btn-padding: 7.5px 0;">
|
||||
<div class="route_btn mobile solid" onclick="respondBtnClickEvent(this, '{{ user.is_authenticated }}')" style="--route-btn-margin: 23px 0 0 0;--route-btn-width: 100%;--route-btn-height: min-content;--route-btn-padding: 7.5px 0;">
|
||||
<div class="route_btn_title big">{% trans "Откликнуться" %}</div>
|
||||
</div>
|
||||
@@ -1,20 +1,21 @@
|
||||
{% load static %}
|
||||
{% load i18n %}
|
||||
{% load routes_tags %}
|
||||
|
||||
<div class="route_card_info_data">
|
||||
<img class="route_card_text_img" src="{% static "v2/icons/widgets/w_route_card/route_card_avatar_spline.svg" %}">
|
||||
<img class="route_card_owner_avatar" src="{% if route.owner.user_profile.avatar %}{{ route.owner.user_profile.avatar.url }}{% endif %}">
|
||||
<img class="route_card_owner_avatar" src="{% if route.owner.user_profile.avatar %}{{ route.owner.user_profile.avatar.url }}{% else %}{% static "v2/icons/widgets/w_route_card/avatar.png" %}{% endif %}">
|
||||
<div class="route_card_owner_info">
|
||||
<div class="route_card_info_left_part">
|
||||
<div class="card_owner_name">{{ route.owner }}</div>
|
||||
<div class="card_splitter"></div>
|
||||
<div class="card_owner_type {{ route.owner_type }}">{% if route.owner_type == 'customer' %}{% trans "Нужен перевозчик" %}{% else %}{% trans "Могу перевезти" %}{% endif %}</div>
|
||||
<div class="card_cargo_type">{% trans "Тип посылки:" %} <div class="orange">{{ route.get_cargo_type_display }}</div></div>
|
||||
<div class="card_cargo_type">{% trans "Тип посылки:" %} <div class="orange">{{ route.cargo_type|get_cargo_type_for_show }}</div></div>
|
||||
</div>
|
||||
<div class="route_btn inactive" style="--route-btn-width: max-content;--route-btn-height: min-content;--route-btn-padding: 7.5px 11px;">
|
||||
<a class="route_btn inactive" {% if now_DT <= route.arrival_DT %}href="tel:{{ route.phone }}"{% endif %} style="--route-btn-width: max-content;--route-btn-height: min-content;--route-btn-padding: 7.5px 11px;max-width: 155px;">
|
||||
<img src="{% static "v2/icons/widgets/w_route_card/phone_half_opacity.svg" %}" alt="">
|
||||
<div class="route_btn_title big">{{ route.phone }}</div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="route_card_text_container">
|
||||
{% if route.comment %}
|
||||
@@ -31,11 +32,7 @@
|
||||
<div class="route_card_owner_info">
|
||||
<div class="route_card_info_left_part">
|
||||
<div class="card_owner_type {{ route.owner_type }}">{% if route.owner_type == 'customer' %}{% trans "Нужен перевозчик" %}{% else %}{% trans "Могу перевезти" %}{% endif %}</div>
|
||||
<div class="card_cargo_type">{% trans "Тип посылки:" %} <div class="orange">{{ route.get_cargo_type_display }}</div></div>
|
||||
</div>
|
||||
<div class="route_btn inactive" style="--route-btn-width: max-content;--route-btn-height: min-content;--route-btn-padding: 7.5px 11px;">
|
||||
<img src="{% static "v2/icons/widgets/w_route_card/phone_half_opacity.svg" %}" alt="">
|
||||
<div class="route_btn_title big">{{ route.phone }}</div>
|
||||
<div class="card_cargo_type">{% trans "Тип посылки:" %} <div class="orange">{{ route.cargo_type|get_cargo_type_for_show }}</div></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card_owner_name">{{ route.owner }}</div>
|
||||
|
||||
@@ -1,34 +1,54 @@
|
||||
{% load static %}
|
||||
{% load i18n %}
|
||||
{% load routes_tags %}
|
||||
|
||||
<div class="route_card_info_data">
|
||||
<img class="route_card_text_img" src="{% static "v2/icons/widgets/w_route_card/route_card_avatar_spline.svg" %}">
|
||||
<img class="route_card_owner_avatar" src="{% if route.owner.user_profile.avatar %}{{ route.owner.user_profile.avatar.url }}{% endif %}">
|
||||
<img class="route_card_owner_avatar" src="{% if route.owner.user_profile.avatar %}{{ route.owner.user_profile.avatar.url }}{% else %}{% static "v2/icons/widgets/w_route_card/avatar.png" %}{% endif %}">
|
||||
<div class="route_card_owner_info">
|
||||
<div class="route_card_info_left_part">
|
||||
<div class="card_owner_name">{{ route.owner }}</div>
|
||||
<div class="card_splitter"></div>
|
||||
<div class="card_owner_type {{ route.owner_type }}">{% if route.owner_type == 'customer' %}{% trans "Нужен перевозчик" %}{% else %}{% trans "Могу перевезти" %}{% endif %}</div>
|
||||
<div class="card_cargo_type">{% trans "Тип посылки:" %} <div class="orange">{{ route.get_cargo_type_display }}</div></div>
|
||||
<div class="card_cargo_type">{% trans "Тип посылки:" %} <div class="orange">{{ route.cargo_type|get_cargo_type_for_show }}</div></div>
|
||||
</div>
|
||||
<div class="respond_route_cont" style="display: none;">
|
||||
<div class="route_btn unhovered" style="--route-btn-width: max-content;--route-btn-height: min-content;--route-btn-padding: 7.5px 11px;">
|
||||
<img src="{% static "v2/icons/widgets/w_route_card/phone.svg" %}" alt="">
|
||||
<div class="route_btn_title big">{{ route.phone|truncatechars:20 }}</div>
|
||||
<a class="route_btn_title big" {% if now_DT <= route.arrival_DT %}href="tel:{{ route.phone }}"{% endif %}>
|
||||
{% if route.phone %}
|
||||
{{ route.phone|truncatechars:20 }}
|
||||
{% else %}
|
||||
{% trans "Номер не указан" %}
|
||||
{% endif %}
|
||||
</a>
|
||||
</div>
|
||||
<div class="chat_btn">
|
||||
<img src="{% static "v2/icons/widgets/w_route_card/chat.png" %}" alt="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="route_btn hide_in_mobile solid" onclick="respondBtnClickEvent(this)" style="--route-btn-width: max-content;--route-btn-height: min-content;--route-btn-padding: 7.5px 38.5px;">
|
||||
<div class="route_btn hide_in_mobile solid" onclick="respondBtnClickEvent(this, '{{ user.is_authenticated }}')" style="--route-btn-width: max-content;--route-btn-height: min-content;--route-btn-padding: 7.5px 38.5px;">
|
||||
<div class="route_btn_title big">{% trans "Откликнуться" %}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="route_card_text_container">
|
||||
{% if route.comment %}
|
||||
{{ route.comment|linebreaksbr }}
|
||||
{% else %}
|
||||
{% trans "Комментарий отсутствует" %}
|
||||
<div class="route_card_text_container wrapped{% if not user.is_authenticated %} msg{% endif %}" onclick="unwrapRouteComment(this)">
|
||||
<div class="route_card_text_container_txt">
|
||||
{% if route.comment %}
|
||||
{{ route.comment|linebreaksbr }}
|
||||
{% else %}
|
||||
{% trans "Комментарий отсутствует" %}
|
||||
{% endif %}
|
||||
</div>
|
||||
{% if not user.is_authenticated %}
|
||||
<div class="route_msg_for_unregistered_user" onclick="clickedUnregisteredMsgRoute(this)">
|
||||
<img src="{% static "v2/icons/widgets/w_route_card/unregistered.svg" %}" alt="">
|
||||
<div>{% trans "Текст сообщения доступен только авторизированным пользователям." %}</div>
|
||||
</div>
|
||||
<div class="route_clicked_msg_for_unregistered_user">
|
||||
<img src="{% static "v2/icons/widgets/w_route_card/lock.png" %}" alt="">
|
||||
<div>{% trans "Текст сообщения доступен только авторизированным пользователям." %}</div>
|
||||
<a class="default_btn" href="{% url "login_profile" %}">{% trans "Войти" %}</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="route_number">{% trans "Объявление №" %} {{ route.id }}</div>
|
||||
@@ -39,15 +59,28 @@
|
||||
<div class="route_card_owner_info">
|
||||
<div class="route_card_info_left_part">
|
||||
<div class="card_owner_type {{ route.owner_type }}">{% if route.owner_type == 'customer' %}{% trans "Нужен перевозчик" %}{% else %}{% trans "Могу перевезти" %}{% endif %}</div>
|
||||
<div class="card_cargo_type">{% trans "Тип посылки:" %} <div class="orange">{{ route.get_cargo_type_display }}</div></div>
|
||||
<div class="card_cargo_type">{% trans "Тип посылки:" %} <div class="orange">{{ route.cargo_type|get_cargo_type_for_show }}</div></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card_owner_name">{{ route.owner }}</div>
|
||||
<div class="route_card_text_container">
|
||||
{% if route.comment %}
|
||||
{{ route.comment|linebreaksbr }}
|
||||
{% else %}
|
||||
{% trans "Комментарий отсутствует" %}
|
||||
<div class="route_card_text_container wrapped{% if not user.is_authenticated %} msg{% endif %}" onclick="unwrapRouteComment(this)">
|
||||
<div class="route_card_text_container_txt">
|
||||
{% if route.comment %}
|
||||
{{ route.comment|linebreaksbr }}
|
||||
{% else %}
|
||||
{% trans "Комментарий отсутствует" %}
|
||||
{% endif %}
|
||||
</div>
|
||||
{% if not user.is_authenticated %}
|
||||
<div class="route_msg_for_unregistered_user" onclick="clickedUnregisteredMsgRoute(this)">
|
||||
<img src="{% static "v2/icons/widgets/w_route_card/unregistered.svg" %}" alt="">
|
||||
<div>{% trans "Текст сообщения доступен только авторизированным пользователям." %}</div>
|
||||
</div>
|
||||
<div class="route_clicked_msg_for_unregistered_user">
|
||||
<img src="{% static "v2/icons/widgets/w_route_card/lock.png" %}" alt="">
|
||||
<div>{% trans "Текст сообщения доступен только авторизированным пользователям." %}</div>
|
||||
<a class="default_btn" href="{% url "login_profile" %}">{% trans "Войти" %}</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="route_number">{% trans "Объявление №" %} {{ route.id }}</div>
|
||||
|
||||
@@ -1,92 +1,24 @@
|
||||
{% load static %}
|
||||
{% load i18n %}
|
||||
{% load routes_tags %}
|
||||
|
||||
<div class="route_card_route_data">
|
||||
<div class="from_to_place_data">
|
||||
<div class="label departure_from">{% trans "Забрать из:" %}</div>
|
||||
<div class="place">
|
||||
<div class="country">
|
||||
<img src="{{ route.from_city.country.flag.url }}" alt="">
|
||||
<div class="country_code">{{ route.from_city.country.code }}</div>
|
||||
</div>
|
||||
<div class="place_title">
|
||||
{{ route.from_city.name }}/{{ route.from_city.country.name }}
|
||||
</div>
|
||||
</div>
|
||||
{% if route.owner_type == 'mover' %}
|
||||
<div class="route_date_data" style="--route-date-data-justify: left;--route-date-data-margin: 10px 0 0 0;">
|
||||
{% trans "Отправка:" %}
|
||||
<div class="date_data_value">{{ route.departure_DT|date:'d F Y' }}</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="route_way_data">
|
||||
<div class="route_transport">
|
||||
<div class="route_transport_name">{{ route.get_type_transport_display }}</div>
|
||||
{% if route.type_transport == '' %}
|
||||
<img src="{% static "v2/icons/widgets/w_route_card/plane.svg" %}" alt="">
|
||||
<img src="{% static "v2/icons/widgets/w_route_card/car.svg" %}" alt="">
|
||||
{% elif route.type_transport == 'road' %}
|
||||
<img src="{% static "v2/icons/widgets/w_route_card/car.svg" %}" alt="">
|
||||
{% elif route.type_transport == 'avia' %}
|
||||
<img src="{% static "v2/icons/widgets/w_route_card/plane.svg" %}" alt="">
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="way_progress_line_container">
|
||||
<div class="way_progress_round"></div>
|
||||
<div class="way_progress_line"></div>
|
||||
<div class="way_progress_arrows_line"></div>
|
||||
<div class="way_progress_round"></div>
|
||||
</div>
|
||||
{% if route.owner_type == 'customer' %}
|
||||
<div class="route_date_data">
|
||||
{% trans "Дата доставки:" %}
|
||||
<div class="date_data_value">{{ route.arrival_DT|date:'d F Y' }}</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="from_to_place_data">
|
||||
<div class="label arrival_to">{% trans "Доставить в:" %}</div>
|
||||
<div class="place">
|
||||
<div class="country">
|
||||
<img src="{{ route.to_city.country.flag.url }}" alt="">
|
||||
<div class="country_code">{{ route.to_city.country.code }}</div>
|
||||
</div>
|
||||
<div class="place_title">
|
||||
{{ route.to_city.name }}/{{ route.to_city.country.name }}
|
||||
</div>
|
||||
</div>
|
||||
{% if route.owner_type == 'mover' %}
|
||||
<div class="route_date_data" style="--route-date-data-justify: right;--route-date-data-margin: 10px 0 0 0;">
|
||||
{% trans "Прибытие:" %}
|
||||
<div class="date_data_value">{{ route.arrival_DT|date:'d F Y' }}</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="route_card_route_data mobile">
|
||||
<div class="way_progress_line_container mobile">
|
||||
<div class="way_progress_round"></div>
|
||||
<div class="way_progress_line"></div>
|
||||
<div class="way_progress_arrows_line"></div>
|
||||
<div class="way_progress_round"></div>
|
||||
</div>
|
||||
<div class="right_part_route_card">
|
||||
<div class="route_card_route_data_cont">
|
||||
<div class="route_card_route_data">
|
||||
<div class="from_to_place_data">
|
||||
<div class="label departure_from">{% trans "Забрать из:" %}</div>
|
||||
<div class="label departure_from">{% if route.owner_type == 'mover' %}{% trans "Выезжаю из:" %}{% else %}{% trans "Забрать из:" %}{% endif %}</div>
|
||||
<div class="place">
|
||||
<div class="country">
|
||||
<img src="{{ route.from_city.country.flag.url }}" alt="">
|
||||
<div class="country_code">{{ route.from_city.country.code }}</div>
|
||||
</div>
|
||||
<div class="place_title">
|
||||
{{ route.from_city.name }}/{{ route.from_city.country.name }}
|
||||
<div class="place_title{% if route.from_city.name|length > 14 %} gradient{% endif %}">
|
||||
{{ route.from_city.name }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="route_way_data">
|
||||
<div class="route_transport">
|
||||
<div class="route_transport_name">{{ route.get_type_transport_display }}</div>
|
||||
<div class="route_transport_name">{{ route.type_transport|get_type_transport_for_show }}</div>
|
||||
{% if route.type_transport == '' %}
|
||||
<img src="{% static "v2/icons/widgets/w_route_card/plane.svg" %}" alt="">
|
||||
<img src="{% static "v2/icons/widgets/w_route_card/car.svg" %}" alt="">
|
||||
@@ -96,32 +28,108 @@
|
||||
<img src="{% static "v2/icons/widgets/w_route_card/plane.svg" %}" alt="">
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="route_date_splitter"></div>
|
||||
<div class="way_progress_line_container">
|
||||
<div class="way_progress_round"></div>
|
||||
<div class="way_progress_line"></div>
|
||||
<div class="way_progress_arrows_line"></div>
|
||||
<div class="way_progress_round"></div>
|
||||
</div>
|
||||
{% if route.owner_type == 'customer' %}
|
||||
<div class="route_date_data">
|
||||
{% trans "Дата доставки:" %}
|
||||
<div class="date_data_value">{{ route.arrival_DT|date:'d F Y' }}</div>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="route_date_data">
|
||||
{% trans "Отправка:" %}
|
||||
<div class="date_data_value">{{ route.departure_DT|date:'d F Y' }}</div>
|
||||
</div>
|
||||
<div class="route_date_data">
|
||||
{% trans "Прибытие:" %}
|
||||
<div class="date_data_value">{{ route.arrival_DT|date:'d F Y' }}</div>
|
||||
<div class="date_data_value">{{ route.arrival_DT|date:'j E Y' }}</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="from_to_place_data">
|
||||
<div class="label arrival_to">{% trans "Доставить в:" %}</div>
|
||||
<div class="label arrival_to">{% if route.owner_type == 'mover' %}{% trans "Прибываю в:" %}{% else %}{% trans "Доставить в:" %}{% endif %}</div>
|
||||
<div class="place">
|
||||
<div class="country">
|
||||
<img src="{{ route.to_city.country.flag.url }}" alt="">
|
||||
<div class="country_code">{{ route.to_city.country.code }}</div>
|
||||
</div>
|
||||
<div class="place_title">
|
||||
{{ route.to_city.name }}/{{ route.to_city.country.name }}
|
||||
<div class="place_title{% if route.to_city.name|length > 14 %} gradient{% endif %}">
|
||||
{{ route.to_city.name }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="dates_inf_cont">
|
||||
{% if route.owner_type == 'mover' %}
|
||||
<div class="route_date_data" style="--route-date-data-justify: left;--route-date-data-margin: 10px 0 0 0;">
|
||||
{% trans "Отправка:" %}
|
||||
<div class="date_data_value">{{ route.departure_DT|date:'j E Y' }}</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if route.owner_type == 'mover' %}
|
||||
<div class="route_date_data {% if route.to_city.name|length > 14 %} gradient{% endif %}" style="--route-date-data-justify: right;--route-date-data-margin: 10px 0 0 0;">
|
||||
{% trans "Прибытие:" %}
|
||||
<div class="date_data_value">{{ route.arrival_DT|date:'j E Y' }}</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="route_card_route_data_cont mobile">
|
||||
<div class="route_card_route_data">
|
||||
<div class="way_progress_line_container mobile">
|
||||
<div class="way_progress_round"></div>
|
||||
<div class="way_progress_line"></div>
|
||||
<div class="way_progress_arrows_line"></div>
|
||||
<div class="way_progress_round"></div>
|
||||
</div>
|
||||
<div class="right_part_route_card">
|
||||
<div class="from_to_place_data">
|
||||
<div class="label departure_from">{% if route.owner_type == 'mover' %}{% trans "Выезжаю из:" %}{% else %}{% trans "Забрать из:" %}{% endif %}</div>
|
||||
<div class="place">
|
||||
<div class="country">
|
||||
<img src="{{ route.from_city.country.flag.url }}" alt="">
|
||||
<div class="country_code">{{ route.from_city.country.code }}</div>
|
||||
</div>
|
||||
<div class="place_title gradient">
|
||||
{{ route.from_city.name }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="route_way_data">
|
||||
<div class="route_transport">
|
||||
<div class="route_transport_name">{{ route.type_transport|get_type_transport_for_show }}</div>
|
||||
{% if route.type_transport == '' %}
|
||||
<img src="{% static "v2/icons/widgets/w_route_card/plane.svg" %}" alt="">
|
||||
<img src="{% static "v2/icons/widgets/w_route_card/car.svg" %}" alt="">
|
||||
{% elif route.type_transport == 'road' %}
|
||||
<img src="{% static "v2/icons/widgets/w_route_card/car.svg" %}" alt="">
|
||||
{% elif route.type_transport == 'avia' %}
|
||||
<img src="{% static "v2/icons/widgets/w_route_card/plane.svg" %}" alt="">
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="route_date_splitter"></div>
|
||||
{% if route.owner_type == 'customer' %}
|
||||
<div class="route_date_data">
|
||||
{% trans "Дата доставки:" %}
|
||||
<div class="date_data_value">{{ route.arrival_DT|date:'j E Y' }}</div>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="route_date_data">
|
||||
{% trans "Отправка:" %}
|
||||
<div class="date_data_value">{{ route.departure_DT|date:'j E Y' }}</div>
|
||||
</div>
|
||||
<div class="route_date_data">
|
||||
{% trans "Прибытие:" %}
|
||||
<div class="date_data_value">{{ route.arrival_DT|date:'j E Y' }}</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="from_to_place_data">
|
||||
<div class="label arrival_to">{% if route.owner_type == 'mover' %}{% trans "Прибываю в:" %}{% else %}{% trans "Доставить в:" %}{% endif %}</div>
|
||||
<div class="place">
|
||||
<div class="country">
|
||||
<img src="{{ route.to_city.country.flag.url }}" alt="">
|
||||
<div class="country_code">{{ route.to_city.country.code }}</div>
|
||||
</div>
|
||||
<div class="place_title gradient">
|
||||
{{ route.to_city.name }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{% load static %}
|
||||
{% load i18n %}
|
||||
|
||||
<form name="make_poster_order" class="f_make_poster_order" data-owner_type="customer">
|
||||
<form name="make_poster_order" {% if form.instance.id %}data-route_id="{{ form.instance.id }}"{% endif %} class="f_make_poster_order" data-owner_type="customer">
|
||||
<div class="form_line">
|
||||
<div class="field_container" data-type="radio" data-name="type_transport">
|
||||
{% trans "Обязательно учитывайте Правила и особенности перевозки выбранным Вами видом транспорта" as attention_type_transport %}
|
||||
@@ -16,12 +16,12 @@
|
||||
<div class="form_line _50_grid">
|
||||
<div class="field_container" data-type="location" data-name="from_city">
|
||||
<label for="id_from_city"><div class="required_field_icon">*</div> {% trans "Откуда забрать посылку" %}</label>
|
||||
{% include 'v2/widgets/w_select_country.html' with name='from_city' placeholder=placeholder_for_city initial=form.initial.from_city %}
|
||||
{% include 'v2/widgets/w_select_country.html' with name='from_city' placeholder=placeholder_for_city initial=form.instance.from_city %}
|
||||
{% if form.errors.from_city %}<div class="error_container">{{ form.errors.from_city.0 }}</div>{% endif %}
|
||||
</div>
|
||||
<div class="field_container" data-type="location" data-name="to_city" data-datepicker="arrival_DT">
|
||||
<label for="id_from_city"><div class="required_field_icon">*</div> {% trans "Куда доставить посылку" %}</label>
|
||||
{% include 'v2/widgets/w_select_country.html' with name='to_city' placeholder=placeholder_for_city initial=form.initial.to_city %}
|
||||
{% include 'v2/widgets/w_select_country.html' with name='to_city' placeholder=placeholder_for_city initial=form.instance.to_city %}
|
||||
{% if form.errors.to_city %}<div class="error_container">{{ form.errors.to_city.0 }}</div>{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
@@ -35,7 +35,7 @@
|
||||
<div class="form_line _50_grid">
|
||||
<div class="field_container" data-type="date" data-name="arrival_DT">
|
||||
<label for="id_arrival_DT"><div class="required_field_icon">*</div> {% trans "Дата доставки посылки" %}</label>
|
||||
{% include 'v2/widgets/w_daterangepicker.html' with name='arrival_DT' initial=form.initial.arrival_DT %}
|
||||
{% include 'v2/widgets/w_daterangepicker.html' with set_min_date='true' name='arrival_DT' initial=form.initial.arrival_DT %}
|
||||
{% if form.errors.arrival_DT %}<div class="error_container">{{ form.errors.arrival_DT.0 }}</div>{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{% load static %}
|
||||
{% load i18n %}
|
||||
|
||||
<form name="make_mover_order" class="f_make_poster_order" data-owner_type="mover">
|
||||
<form name="make_mover_order" class="f_make_poster_order" {% if form.instance.id %}data-route_id="{{ form.instance.id }}"{% endif %} data-owner_type="mover">
|
||||
<div class="form_line">
|
||||
<div class="field_container" data-type="radio" data-name="type_transport">
|
||||
{% trans "Обязательно учитывайте Правила и особенности перевозки выбранным Вами видом транспорта" as attention_type_transport %}
|
||||
@@ -16,24 +16,24 @@
|
||||
<div class="form_line _50_grid">
|
||||
<div class="field_container" data-type="location" data-name="from_city" data-datepicker="departure_DT">
|
||||
<label for="id_from_city"><div class="required_field_icon">*</div> {% trans "Пункт отправления" %}</label>
|
||||
{% include 'v2/widgets/w_select_country.html' with name='from_city' placeholder=placeholder_for_city initial=form.initial.from_city %}
|
||||
{% include 'v2/widgets/w_select_country.html' with name='from_city' placeholder=placeholder_for_city initial=form.instance.from_city %}
|
||||
{% if form.errors.from_city %}<div class="error_container">{{ form.errors.from_city.0 }}</div>{% endif %}
|
||||
</div>
|
||||
<div class="field_container" data-type="location" data-name="to_city" data-datepicker="arrival_DT">
|
||||
<label for="id_from_city"><div class="required_field_icon">*</div> {% trans "Пункт прибытия" %}</label>
|
||||
{% include 'v2/widgets/w_select_country.html' with name='to_city' placeholder=placeholder_for_city initial=form.initial.to_city %}
|
||||
{% include 'v2/widgets/w_select_country.html' with name='to_city' placeholder=placeholder_for_city initial=form.instance.to_city %}
|
||||
{% if form.errors.to_city %}<div class="error_container">{{ form.errors.to_city.0 }}</div>{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form_line _50_grid">
|
||||
<div class="field_container" data-type="date" data-name="departure_DT">
|
||||
<label for="id_departure_DT"><div class="required_field_icon">*</div> {% trans "Дата отправления" %}</label>
|
||||
{% include 'v2/widgets/w_daterangepicker.html' with name='departure_DT' initial=form.initial.departure_DT %}
|
||||
{% include 'v2/widgets/w_daterangepicker.html' with set_min_date='true' name='departure_DT' initial=form.initial.departure_DT %}
|
||||
{% if form.errors.departure_DT %}<div class="error_container">{{ form.errors.departure_DT.0 }}</div>{% endif %}
|
||||
</div>
|
||||
<div class="field_container" data-type="date" data-name="arrival_DT">
|
||||
<label for="id_arrival_DT"><div class="required_field_icon">*</div> {% trans "Дата прибытия" %}</label>
|
||||
{% include 'v2/widgets/w_daterangepicker.html' with name='arrival_DT' initial=form.initial.arrival_DT %}
|
||||
{% include 'v2/widgets/w_daterangepicker.html' with set_min_date='true' name='arrival_DT' initial=form.initial.arrival_DT %}
|
||||
{% if form.errors.arrival_DT %}<div class="error_container">{{ form.errors.arrival_DT.0 }}</div>{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
@@ -46,8 +46,8 @@
|
||||
</div>
|
||||
<div class="form_line">
|
||||
<div class="field_container" data-type="input" style="width: 100%" data-name="phone">
|
||||
{% trans "Если вы оставите это поле пустым - перевозчики смогут только написать вам в личные сообщения на нашем сайте TripWB.com" as attention_phone %}
|
||||
<label for="id_cargo_type">{% trans "Контактный номер телефона, по которому с Вами могут связаться перевозчики" %}</label>
|
||||
{% trans "Если вы оставите это поле пустым - отправители смогут только написать вам в личные сообщения на нашем сайте TripWB.com" as attention_phone %}
|
||||
<label for="id_cargo_type">{% trans "Контактный номер телефона, по которому с Вами могут связаться отправители" %}</label>
|
||||
<input class="half" style="height: unset;" type="text" name="phone" id="id_phone" placeholder="{% trans 'Укажите телефон' %}"{% if form.initial.phone %} value="{{ form.initial.phone }}" {% endif %} oninput="resetFieldError(this);">
|
||||
{% if form.errors.phone %}<div class="error_container">{{ form.errors.phone.0 }}</div>{% endif %}
|
||||
{% include 'v2/widgets/w_pay_attention.html' with text=attention_phone %}
|
||||
@@ -64,7 +64,7 @@
|
||||
<div class="form_line">
|
||||
<div class="field_container line" data-type="checkbox" data-name="receive_msg_by_email">
|
||||
<div class="checkbox{% if form.initial.receive_msg_by_email %} checked{% endif %}" onclick="chooseCheckbox(this)"></div>
|
||||
<div class="checkbox_label" onclick="chooseCheckbox(this)">{% trans "Хочу получать уведомления на E-mail о появлении перевозчика по моим критериям" %}</div>
|
||||
<div class="checkbox_label" onclick="chooseCheckbox(this)">{% trans "Хочу получать уведомления на E-mail о появлении отправителя по моим критериям" %}</div>
|
||||
{% if form.errors.receive_msg_by_email %}<div class="error_container">{{ form.errors.receive_msg_by_email.0 }}</div>{% endif %}
|
||||
{% include 'v2/widgets/w_additional_info.html' %}
|
||||
</div>
|
||||
|
||||
@@ -14,13 +14,19 @@
|
||||
<script src="{% static "v2/js/blocks/b_search_routes.js" %}"></script>
|
||||
<script src="{% static "v2/js/widgets/w_route_card.js" %}"></script>
|
||||
<script src="{% static "v2/js/pages/p_search_route_results.js" %}"></script>
|
||||
<script src="{% static "v2/js/blocks/b_filter_routes.js" %}"></script>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="title">{% trans "Поиск посылки" %}</div>
|
||||
{% include 'v2/blocks/b_search_routes.html' %}
|
||||
{% if not user.is_authenticated %}{% include 'v2/blocks/b_login_modal.html' %}{% endif %}
|
||||
{# {% include 'v2/blocks/b_chat_modal.html' %}#}
|
||||
<div class="routes_content_part">
|
||||
{% include "v2/blocks/b_filter_routes.html" %}
|
||||
<div class="routes_search_results"></div>
|
||||
<div class="routes_search_results">
|
||||
{% include "v2/blocks/b_search_routes_result.html" %}
|
||||
</div>
|
||||
</div>
|
||||
{% include 'v2/blocks/b_dont_found_anth.html' %}
|
||||
{% endblock %}
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
<div class="w_daterangepicker" onclick="selectInputWContainer(this)">
|
||||
<div class="date_range_input_cont">
|
||||
<input class="dropped" {% if range %}data-range="{{ range }}"{% endif %} type="text" name="{{ name }}" id="id_{{ name }}" autocomplete="off"{% if initial %} value="{{ initial|date:'d.m.Y' }}"{% endif %}>
|
||||
<input class="dropped" data-set_min_date="{{ set_min_date }}" {% if range %}data-range="{{ range }}"{% endif %} type="text" name="{{ name }}" id="id_{{ name }}" autocomplete="off"{% if initial and not range %} value="{{ initial|date:'d.m.Y' }}"{% else %} value="{{ initial }}"{% endif %}>
|
||||
<img onclick="clickOnDateIconE(this)" src="{% static "v2/icons/widgets/w_datarangepicker/datarangepicker_icon.svg" %}" alt="">
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,7 +1,7 @@
|
||||
{% load i18n %}
|
||||
{% load static %}
|
||||
|
||||
<div class="w_customer_route_card w_route_card" data-route_id="{{ route.id }}" data-owner_type="{{ route.owner_type }}">
|
||||
<div class="w_customer_route_card w_route_card{% if route.is_highlighted_now %} highlighted{% endif %}{% if now_DT > route.arrival_DT %} disabled{% endif %}" data-route_id="{{ route.id }}" data-owner_type="{{ route.owner_type }}">
|
||||
{% include 'v2/content_widgets/w_route_card/route_card_info_data.html' %}
|
||||
{% include 'v2/content_widgets/w_route_card/route_card_route_data.html' %}
|
||||
{% include 'v2/content_widgets/w_route_card/route_card_actions_container.html' %}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{% load i18n %}
|
||||
{% load static %}
|
||||
|
||||
<div class="w_customer_route_card w_route_card" data-route_id="{{ route.id }}" data-owner_type="{{ route.owner_type }}">
|
||||
<div class="w_customer_route_card w_route_card{% if route.is_highlighted_now %} highlighted{% endif %}{% if now_DT > route.arrival_DT %} disabled{% endif %}" data-route_id="{{ route.id }}" data-owner_type="{{ route.owner_type }}">
|
||||
{% include 'v2/content_widgets/w_route_card/route_card_info_data_for_search.html' %}
|
||||
{% include 'v2/content_widgets/w_route_card/route_card_route_data.html' %}
|
||||
{% include 'v2/content_widgets/w_route_card/route_card_actions_container_for_search.html' %}
|
||||
|
||||