Профиль ребенка в ЛК

remotes/origin/feature/child-profile-18-03-19
gzbender 7 years ago
parent 57e51f0cd1
commit 141e4f9efc
  1. 9
      apps/user/forms.py
  2. 33
      apps/user/migrations/0030_auto_20190318_1320.py
  3. 6
      apps/user/models.py
  4. 93
      apps/user/templates/user/profile-settings.html
  5. 22
      apps/user/templates/user/profile.html
  6. BIN
      web/src/img/fill-profile-gramota.png
  7. BIN
      web/src/img/profile-edit-child-form.png
  8. 21
      web/src/js/pages/profile.js
  9. 47
      web/src/sass/_common.sass

@ -31,6 +31,11 @@ class UserEditForm(forms.ModelForm):
site = forms.URLField(required=False)
photo = forms.ImageField(required=False)
child_gender = forms.CharField(required=False)
child_birthday = forms.DateField(input_formats=['%d.%m.%Y'], required=False)
child_first_name = forms.CharField(required=False)
child_last_name = forms.CharField(required=False)
class Meta:
model = User
fields = (
@ -56,6 +61,10 @@ class UserEditForm(forms.ModelForm):
'vkontakte',
'site',
'photo',
'child_gender',
'child_birthday',
'child_first_name',
'child_last_name',
)

@ -0,0 +1,33 @@
# Generated by Django 2.0.7 on 2019-03-18 13:20
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('user', '0029_emaillog'),
]
operations = [
migrations.AddField(
model_name='user',
name='child_birthday',
field=models.DateField(blank=True, null=True, verbose_name='День рождения ребенка'),
),
migrations.AddField(
model_name='user',
name='child_first_name',
field=models.CharField(blank=True, max_length=30, verbose_name='Имя ребенка'),
),
migrations.AddField(
model_name='user',
name='child_gender',
field=models.CharField(choices=[('n', 'не указан'), ('m', 'Мужчина'), ('f', 'Женщина')], default='n', max_length=1, verbose_name='Пол ребенка'),
),
migrations.AddField(
model_name='user',
name='child_last_name',
field=models.CharField(blank=True, max_length=150, verbose_name='Фамилия ребенка'),
),
]

@ -89,6 +89,12 @@ class User(AbstractUser):
verbose_name='Галерея', null=True, blank=True,
)
child_first_name = models.CharField('Имя ребенка', max_length=30, blank=True)
child_last_name = models.CharField('Фамилия ребенка', max_length=150, blank=True)
child_gender = models.CharField(
'Пол ребенка', max_length=1, default='n', choices=GENDER_CHOICES)
child_birthday = models.DateField('День рождения ребенка', null=True, blank=True)
objects = UserManager()
USERNAME_FIELD = 'email'

@ -76,15 +76,6 @@
<div class="field__error">{{ error }}</div>
{% endfor %}
</div>
<div class="form__field field{% if form.phone.errors %} error{% endif %}">
<div class="field__label">Телефон</div>
<div class="field__wrap">
<input name='phone' class="field__input" type="phone" placeholder="+7 (999) 999-99-99" value="{{ user.phone }}">
</div>
{% for error in form.phone.errors %}
<div class="field__error">{{ error }}</div>
{% endfor %}
</div>
<div class="form__field field{% if form.slug.errors %} error{% endif %}">
<div class="field__label">Ссылка</div>
<div class="field__wrap field__wrap__appended">
@ -96,6 +87,82 @@
<div class="field__error">{{ error }}</div>
{% endfor %}
</div>
</div>
<!-- child form -->
<div class="user-child-form form__group">
<div class="form__title">Карточка ребёнка</div>
<div class="user-child-form__description">
Вся информация конфиденциальна и не передается третьим лицам. Необходима только для персонализации наград,
поздравлений с Днем Рождения и других персонализированных акций.
</div>
<div class="form__fieldset">
<div class="form__field field{% if form.child_first_name.errors %} error{% endif %}">
<div class="field__label">ИМЯ РЕБЕНКА</div>
<div class="field__wrap">
<input name='child_first_name' id="child-first-name" class="field__input" type="text" placeholder="Имя"
value="{{ user.child_first_name }}">
</div>
{% for error in form.child_first_name.errors %}
<div class="field__error">{{ error }}</div>
{% endfor %}
</div>
<div class="form__field field{% if form.child_last_name.errors %} error{% endif %}">
<div class="field__label">ФАМИЛИЯ РЕБЕНКА</div>
<div class="field__wrap">
<input name='child_last_name' id="child-last-name" class="field__input" type="text" placeholder="Фамилия"
value="{{ user.child_last_name }}">
</div>
{% for error in form.child_last_name.errors %}
<div class="field__error">{{ error }}</div>
{% endfor %}
</div>
</div>
<div class="form__fieldset">
<div class="form__field field{% if form.child_birthday.errors %} error{% endif %}">
<div class="field__label">ДАТА РОЖДЕНИЯ</div>
<div class="field__wrap">
<input name='child_birthday' class="field__input" type="text" placeholder="dd.mm.yyyy"
value="{% if user.child_birthday %}{{ user.child_birthday | date:'d.m.Y' }}{% endif %}">
</div>
{% for error in form.child_birthday.errors %}
<div class="field__error">{{ error }}</div>
{% endfor %}
</div>
<div class="form__field field{% if form.child_gender.errors %} error{% endif %}">
<div class="field__label">ПОЛ</div>
<div class="field__wrap">
<div class="field__select select js-select{% if user.child_gender and user.child_gender != 'n' %} selected{% endif %}">
<div class="select__head js-select-head">
{% if user.child_gender == 'f' %}Ж{% elif user.child_gender == 'm' %}M{% else %}М / Ж{% endif %}
</div>
<div class="select__drop js-select-drop" data-gender-select data-input="#child-gender">
<div class="select__option js-select-option" data-gender-option data-gender="m">
<div class="select__title">М</div>
</div>
<div class="select__option js-select-option" data-gender-option data-gender="f">
<div class="select__title">Ж</div>
</div>
</div>
<input id="child-gender" name='child_gender' class="select__input" type="hidden">
</div>
</div>
{% for error in form.child_gender.errors %}
<div class="field__error">{{ error }}</div>
{% endfor %}
</div>
</div>
<div class="form__field field{% if form.phone.errors %} error{% endif %}">
<div class="field__label">Телефон</div>
<div class="field__wrap">
<input name='phone' class="field__input" type="phone" placeholder="+7 (999) 999-99-99" value="{{ user.phone }}">
</div>
{% for error in form.phone.errors %}
<div class="field__error">{{ error }}</div>
{% endfor %}
</div>
</div>
<!-- end child form -->
<div class="form__group">
<div class="form__fieldset">
<div class="form__field field{% if form.city.errors %} error{% endif %}">
<div class="field__label">ГОРОД</div>
@ -133,7 +200,7 @@
<div class="select__head js-select-head">
{% if user.gender == 'f' %}Ж{% elif user.gender == 'm' %}M{% else %}М / Ж{% endif %}
</div>
<div class="select__drop js-select-drop">
<div class="select__drop js-select-drop" data-gender-select data-input="#gender">
<div class="select__option js-select-option" data-gender-option data-gender="m">
<div class="select__title">М</div>
</div>
@ -180,7 +247,7 @@
{% for error in form.old_password.errors %}
<div class="field__error">{{ error }}</div>
{% endfor %}
</div>
</div>
<div class="form__field field{% if form.new_password1.errors %} error{% endif %}">
<div class="field__label">НОВЫЙ ПАРОЛЬ</div>
<div class="field__wrap">
@ -189,7 +256,7 @@
{% for error in form.new_password1.errors %}
<div class="field__error">{{ error }}</div>
{% endfor %}
</div>
</div>
<div class="form__field field{% if form.new_password2.errors %} error{% endif %}">
<div class="field__label">ПОДТВЕРДИТЬ НОВЫЙ ПАРОЛЬ</div>
<div class="field__wrap">
@ -198,7 +265,7 @@
{% for error in form.new_password2.errors %}
<div class="field__error">{{ error }}</div>
{% endfor %}
</div>
</div>
</div>
<div class="form__group">
<div class="form__title">Соцсети</div>

@ -1,4 +1,26 @@
{% extends "templates/lilcity/index.html" %} {% load static %} {% load thumbnail %} {% block content %}
{% if not user.child_first_name and not user.child_last_name %}
<div class="section">
<div class="section__center center">
<div class="fill-profile">
<div class="fill-profile__text">Хотите получать грамоты Lil School<br>по окончании месяца обучения?</div>
<div class="fill-profile__img"></div>
<div class="fill-profile__btn">
<a class="btn btn_white" href="{% url 'user-edit-profile' %}">Заполни профиль</a>
</div>
<div class="fill-profile__arrow">
<a href="{% url 'user-edit-profile' %}">
<svg class="icon icon-arrow-right">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-arrow-right"></use>
</svg>
</a>
</div>
</div>
</div>
</div>
{% endif %}
<div class="section">
<div class="section__center center">
<div class="profile">

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

@ -14,16 +14,19 @@ $(document).ready(function () {
});
return;
}
// Обработчик выбора пола
let genderInput = $('#gender')
$('div.js-select-option[data-gender-option]').on('click', function (e) {
e.preventDefault();
const currentGender = $(this).attr('data-gender');
$('[data-gender]').removeClass('active');
$(`[data-gender=${currentGender}]`).addClass('active');
genderInput.val(currentGender)
});
$('.js-select-drop[data-gender-select]').each((i, el) => {
var $el = $(el);
var $input = $($el.data('input'));
$el.find('div.js-select-option[data-gender-option]').on('click', function (e) {
e.preventDefault();
const currentGender = $(this).attr('data-gender');
$('[data-gender]').removeClass('active');
$(`[data-gender=${currentGender}]`).addClass('active');
$input.val(currentGender)
});
})
$('#user-photo-upload').change(file => {
const input = file.target;

@ -3266,6 +3266,40 @@ a.grey-link
+m
display: block
.fill-profile
width: 100%
display: flex
align-items: center
position: relative
padding: 40px 35px
background: url(../img/fill-profile-gramota.png) center bottom no-repeat
&:before
content: ''
position: absolute
top: 0
left: 0
right: 0
bottom: 0
opacity: .8
z-index: -2
background-image: linear-gradient(-225deg, #FFE2EB 0%, #D8F5F5 100%)
&__text
flex: 0 0 300px
font-size: 18px
&__img
flex: 1
&__btn
flex: 0 0 205px
text-align: right
&__arrow
flex: 0 0 50px
text-align: right
.tabs
&__nav
display: flex
@ -4510,3 +4544,16 @@ a
background: $cyan
&__preview.theme_violet2
background: $viol2
.user-child-form
padding: 30px 80px 40px 160px
margin: 30px -80px 30px -160px
background: url(../img/profile-edit-child-form.png) no-repeat 7px bottom white
border-radius: 20px
box-shadow: 0 10px 24px 0 rgba(0, 0, 0, 0.05)
&__description
margin-bottom: 40px
margin-top: -20px
color: #333333
font-size: 12px

Loading…
Cancel
Save