You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

120 lines
5.2 KiB

<template>
<div class="user-child-form form__group">
<div class="form__title">Карточка ребёнка</div>
<div class="user-child-form__description">
Вся информация конфиденциальна и не передается третьим лицам. Необходима только для персонализации наград,
поздравлений с Днем Рождения и других персонализированных акций.
</div>
<div class="tabs">
<div class="user-child-form__tabs tabs__nav">
<a class="user-child-form__tab tabs__btn" v-for="(child, index) in childs" :key="index" href="#"
v-bind:class="{active: selectedIndex == index}" @click.prevent="select(index)">
{{ child.first_name ? (child.first_name + '&nbsp;' + child.last_name) : ('Ребенок ' + (index || '')) }}</a>
<a href="#" class="tabs__btn" @click.prevent="add()">Добавить ребенка</a>
</div>
</div>
<div class="tabs__container">
<div v-for="(child, index) in childs" :key="index" class="tabs__item js-tabs-item"
v-bind:style="{display: selectedIndex == index ? 'block' : ''}">
<div class="form__fieldset">
<input type="hidden" name="child_id" :value="child.id" />
<div class="form__field field" v-bind:class="{error: child.errors && child.errors.gender}">
<div class="field__label">ИМЯ РЕБЕНКА</div>
<div class="field__wrap">
<input name='child_first_name' class="field__input" type="text" placeholder="Имя"
v-model="child.first_name">
</div>
<div v-if="child.errors && child.errors.first_name" class="field__error">{{ child.errors.first_name }}</div>
</div>
<div class="form__field field" v-bind:class="{error: child.errors && child.errors.last_name}">
<div class="field__label">ФАМИЛИЯ РЕБЕНКА</div>
<div class="field__wrap">
<input name='child_last_name' id="child-last-name" class="field__input" type="text" placeholder="Фамилия"
v-model="child.last_name">
</div>
<div v-if="child.errors && child.errors.last_name" class="field__error">{{ child.errors.last_name }}</div>
</div>
</div>
<div class="form__fieldset">
<div class="form__field field" v-bind:class="{error: child.errors && child.errors.birthday}">
<div class="field__label">ДАТА РОЖДЕНИЯ</div>
<div class="field__wrap">
<vue-datepicker input-class="field__input" name="child_birthday" language="ru" format="dd/MM/yyyy"
v-model="child.birthday" placeholder="dd/mm/yyyy"/>
</div>
<div v-if="child.errors && child.errors.birthday" class="field__error">{{ child.errors.birthday }}</div>
</div>
<div class="form__field field" v-bind:class="{error: child.errors && child.errors.gender}">
<div class="field__label">ПОЛ</div>
<div class="field__wrap">
<lil-select :value.sync="child.gender" :options="genders" value-key="0" title-key="1"/>
<input name='child_gender' type="hidden" v-model="child.gender">
</div>
<div v-if="child.errors && child.errors.gender" class="field__error">{{ child.errors.gender }}</div>
</div>
</div>
<a href="#" @click.prevent="remove(index)">Удалить</a>
</div>
</div>
</div>
</template>
<script>
import DatePicker from 'vuejs-datepicker';
import LilSelect from './inputs/LilSelect';
export default {
name: "childs",
props: ['childs'],
data() {
return {
selectedIndex: 0,
selectedChild: null,
genders: [
['n', 'М / Ж'],
['f', 'Ж'],
['m', 'М'],
]
}
},
methods: {
add(){
this.childs.push({
first_name: '',
last_name: '',
birthday: '',
gender: 'n',
errors: {},
});
this.select(this.childs.length - 1);
},
remove(index){
if(! confirm('Вы действительно хотите удалить данные о ребенке?')){
return;
}
this.childs.splice(index, 1);
if(! this.childs.length){
this.add();
}
else if(this.selectedIndex == index){
this.select(0);
}
},
select(index){
this.selectedIndex = index;
this.selectedChild = this.childs[index];
}
},
mounted(){
for(let i in this.childs){
if(this.childs[i].errors){
this.select(i);
}
}
},
components: {
'vue-datepicker': DatePicker,
LilSelect,
}
}
</script>