File

src/app/modules/search/structure_edu/structure_edu.ts

Description

Структура учебных подразделений

Implements

OnInit

Metadata

selector search-structure-edu
styleUrls structure_edu.scss
templateUrl ./structure_edu.html

Index

Properties
Methods

Constructor

constructor(commonService: CommonService, profileService: ProfileService)

Констуктор

Parameters :
Name Type Description
commonService CommonService
profileService ProfileService

Methods

ngOnInit
ngOnInit()

Получение данных

Returns : void
onFilter
onFilter(event: )

При фильтрации получить новые данные

Parameters :
Name Type Description
event
Returns : void
onSelect
onSelect(event: )

При выборе подразделения открыть поиск с фильтрацией по этому подразделению

Parameters :
Name Type Description
event
Returns : void
onViewProfile
onViewProfile(event: )

Просмотр профиля

Parameters :
Name Type Description
event
Returns : void
setCatalog
setCatalog()

Получение каталогов для фильтрации

Returns : void
toggleSide
toggleSide()

Открыть слайдер

Returns : void

Properties

catalog
catalog: any
Type : any

Справочники для фильтрации

data
data: any
Type : any

Данные для поиска

defaultImage
defaultImage: string
Type : string
Default value : assets/images/default_image.svg

Изображение по-умолчанию

filterField
filterField: string
Type : string

Поле для фильтрации

filterValue
filterValue: string
Type : string

Значение для фильтрации

header
header: string
Type : string
Default value : Структура учебных подразделений

Заголовок

header2
header2: string
Type : string

Заголовк слайдера

loading
loading: boolean
Type : boolean
Default value : false

Индикатор загрузки основных данных

loading2
loading2: boolean
Type : boolean
Default value : false

Загрузка поиска

profile
profile: any
Type : any

Профиль для просмотра

showSide
showSide: boolean
Type : boolean
Default value : false

Показать слайдер

structure
structure: any
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>
Legend
Html element
Component
Html element with directive

results matching ""

    No results matching ""