src/app/modules/search/structure_edu/structure_edu.ts
Структура учебных подразделений
selector | search-structure-edu |
styleUrls | structure_edu.scss |
templateUrl | ./structure_edu.html |
Properties |
Methods |
constructor(commonService: CommonService, profileService: ProfileService)
|
|||||||||
Констуктор
Parameters :
|
ngOnInit |
ngOnInit()
|
Получение данных
Returns :
void
|
onFilter | ||||||
onFilter(event: )
|
||||||
При фильтрации получить новые данные
Parameters :
Returns :
void
|
onSelect | ||||||
onSelect(event: )
|
||||||
При выборе подразделения открыть поиск с фильтрацией по этому подразделению
Parameters :
Returns :
void
|
onViewProfile | ||||||
onViewProfile(event: )
|
||||||
Просмотр профиля
Parameters :
Returns :
void
|
setCatalog |
setCatalog()
|
Получение каталогов для фильтрации
Returns :
void
|
toggleSide |
toggleSide()
|
Открыть слайдер
Returns :
void
|
catalog |
catalog:
|
Type : any
|
Справочники для фильтрации |
data |
data:
|
Type : any
|
Данные для поиска |
defaultImage |
defaultImage:
|
Type : string
|
Default value : assets/images/default_image.svg
|
Изображение по-умолчанию |
filterField |
filterField:
|
Type : string
|
Поле для фильтрации |
filterValue |
filterValue:
|
Type : string
|
Значение для фильтрации |
header |
header:
|
Type : string
|
Default value : Структура учебных подразделений
|
Заголовок |
header2 |
header2:
|
Type : string
|
Заголовк слайдера |
loading |
loading:
|
Type : boolean
|
Default value : false
|
Индикатор загрузки основных данных |
loading2 |
loading2:
|
Type : boolean
|
Default value : false
|
Загрузка поиска |
profile |
profile:
|
Type : any
|
Профиль для просмотра |
showSide |
showSide:
|
Type : boolean
|
Default value : false
|
Показать слайдер |
structure |
structure:
|
Type : any
|
Структура подразделений |
import { Component, OnInit } from '@angular/core';
import { CommonService } from 'glx.ui/components/kernel/services/common.service';
import { ProfileService } from 'glx.ui/components/kernel/services/profile.service';
/**
* Структура учебных подразделений
*/
@Component({
selector: 'search-structure-edu',
templateUrl: './structure_edu.html',
styleUrls: ['./structure_edu.scss']
})
export class SearchStructureEduComponent implements OnInit {
/**
* Заголовок
* @type {string}
*/
header: string = 'Структура учебных подразделений';
/**
* Структура подразделений
*/
structure: any;
/**
* Индикатор загрузки основных данных
* @type {boolean}
*/
loading: boolean = false;
/**
* Загрузка поиска
* @type {boolean}
*/
loading2: boolean = false;
/**
* Показать слайдер
* @type {boolean}
*/
showSide: boolean = false;
/**
* Поле для фильтрации
*/
filterField: string;
/**
* Значение для фильтрации
*/
filterValue: string;
/**
* Заголовк слайдера
*/
header2: string;
/**
* Профиль для просмотра
* @type {{}}
*/
profile: any = {};
/**
* Справочники для фильтрации
* @type {{}}
*/
catalog: any = {};
/**
* Данные для поиска
* @type {{}}
*/
data: any = {};
/**
* Изображение по-умолчанию
* @type {string}
*/
defaultImage: string = 'assets/images/default_image.svg';
/**
* Констуктор
* @param {CommonService} commonService
* @param {ProfileService} profileService
*/
constructor(private commonService: CommonService,
private profileService: ProfileService) {
}
/**
* Получение данных
*/
ngOnInit() {
let loaderTimeout = setTimeout(() => {
this.loading = true;
}, 200);
this.commonService.get('edudepartments')
.subscribe(
data => {
this.structure = data;
},
error => {
console.error(error);
},
() => {
clearTimeout(loaderTimeout);
this.loading = false;
});
setTimeout(() => {
clearTimeout(loaderTimeout);
this.loading = false;
}, 10000);
this.catalog = {
departments: [],
edu_qualifications: [],
edu_specializations: [],
};
this.setCatalog();
}
/**
* Получение каталогов для фильтрации
*/
setCatalog() {
this.commonService.get('qualifications')
.subscribe(
data => {
this.catalog.edu_qualifications = [];
this.catalog.edu_qualifications.push({'value': '', 'label': '(любая)'});
for (let i = 0; i < data.length; i++) {
this.catalog.edu_qualifications.push(data[i]);
}
},
error => {
console.error(error);
});
this.commonService.get('edudepslist')
.subscribe(
data => {
this.catalog.departments = [];
this.catalog.departments.push({'value': '', 'label': '(любое)'});
for (let i = 0; i < data.length; i++) {
this.catalog.departments.push(data[i]);
}
},
error => {
console.error(error);
});
this.commonService.get('specializations')
.subscribe(
data => {
this.catalog.edu_specializations = [];
this.catalog.edu_specializations.push({'value': '', 'label': '(любая)'});
for (let i = 0; i < data.length; i++) {
this.catalog.edu_specializations.push(data[i]);
}
},
error => {
console.error(error);
});
}
/**
* При выборе подразделения открыть поиск с фильтрацией по этому подразделению
* @param event
*/
onSelect(event) {
this.filterField = 'department';
this.filterValue = event.id;
this.header2 = event.name;
this.toggleSide();
}
/**
* При фильтрации получить новые данные
* @param event
*/
onFilter(event) {
this.loading2 = true;
this.profileService.searchStudents(event)
.subscribe(
data => {
this.data = data;
},
error => {
console.error(error);
},
() => {
this.loading2 = false;
});
}
/**
* Просмотр профиля
* @param event
*/
onViewProfile(event) {
this.profile = {};
this.profileService.get(event)
.subscribe(
data => {
this.profile = data;
},
error => {
console.error(error);
});
}
/**
* Открыть слайдер
*/
toggleSide() {
this.showSide = !this.showSide;
}
}
<glx-page-title-bx [header]="header"></glx-page-title-bx>
<div class="structure-edu-wrapper">
<glx-loading-banner [loading]="loading" [svg]="true" text="Подождите, идет загрузка..."></glx-loading-banner>
<glx-structure-viewer
*ngIf="!loading && structure"
[structure]="structure"
showProfileText="Список обучающихся"
type="student" [slider]="true"
(onSelect)="onSelect($event)"
></glx-structure-viewer>
</div>
<glx-slider [(open)]="showSide" [header]="header2">
<glx-student-search
*ngIf="showSide"
[filterShow]="false"
[data]="data"
[catalog]="catalog"
[profile]="profile"
(onFilter)="onFilter($event)"
(onViewProfile)="onViewProfile($event)"
[defaultImage]="defaultImage"
[loading]="loading2"
[filterField]="filterField"
[filterValue]="filterValue"
[slider]="true"
imagePrefix="/bitrix/galaktika/galaktika.vuzapi/public/"
globalFilterPlaceholder="Поиск по ФИО, подразделению, направлению, группе, квалификации..."
></glx-student-search>
</glx-slider>