Ext.require([ 'Ext.util.History', 'Ext.tab.Panel', 'Ext.container.Viewport', 'Ext.panel.Panel' ]); Ext.onReady(function(){ Ext.History.init(); var appname = 'ИСТОК'; function onTabChange(tabPanel, tab) { var tabs = [], ownerCt = tabPanel.ownerCt, oldToken, newToken; if(tab){tabs.push(tab.id);} tabs.push(tabPanel.id); while (ownerCt && ownerCt.is('tabpanel')) { tabs.push(ownerCt.id); ownerCt = ownerCt.ownerCt; } newToken = tabs.reverse().join(':'); oldToken = Ext.History.getToken(); if (oldToken === null || oldToken.search(newToken) === -1) { Ext.History.add(newToken); } } function onAfterRender() { Ext.History.on('change', function(token) { var parts, length, i; if (token) { parts = token.split(':'); length = parts.length; for (i = 0; i < length - 1; i++) { var panel = Ext.getCmp(parts[i]); var tab = Ext.getCmp(parts[i + 1]); var activeId = panel.getActiveTab().id ? panel.getActiveTab().id : null; if(tab.id!=activeId){ panel.setActiveTab(tab); window.document.title = appname + ' / ' +tab.title; } } } }); var hash = Ext.History.getHash(); if(hash){ link = hash.split(':'); var panel = Ext.getCmp(link[0]); var tab = Ext.getCmp(link[1]); if(panel&&tab) { panel.setActiveTab(tab); window.document.title = appname + ' / ' + tab.title; } } else { var panel = Ext.getCmp('nav'); var tab = panel.getActiveTab(); var tabtype = tab.xtype; var tab2 = (tabtype=='tabpanel') ? tab.getActiveTab() : null; onTabChange(tab, tab2); } } var loginForm = Ext.create('Ext.form.Panel',{ id: 'loginForm', bodyPadding: 10, maxWidth: 450, height: 380, defaultType: 'textfield', items: [{ xtype:'container', html:'

Авторизация

' },{ name: 'login', fieldLabel:'Логин', labelWidth: 60, labelAlign: 'right', width:'95%', margin: 10, allowBlank: false, enableKeyEvents: true, listeners: { keypress: function(el,e){ if (e.getKey() === Ext.event.Event.ENTER) {goSubmit();} } } },{ name: 'password', fieldLabel:'Пароль', inputType:'password', labelWidth: 60, labelAlign: 'right', width:'95%', margin: 10, allowBlank: false, enableKeyEvents: true, listeners: { keypress: function(el,e){ if (e.getKey() === Ext.event.Event.ENTER) {goSubmit();} } } },{ xtype:'toolbar', layout: { type: 'hbox', pack: 'end' }, items:[{ text: 'Войти', scale: 'large', formBind: true, handler:function(){goSubmit();} }] },{ xtype:'container', html: '
Забыли пароль?
' }] }); var recoverForm = Ext.create('Ext.form.Panel',{ id: 'recoverForm', bodyPadding: 10, maxWidth: 450, height: 380, defaultType: 'textfield', items: [{ xtype:'container', html:'

Восстановление пароля

' },{ name: 'id', fieldLabel:'Введите ваш id, логин или email', labelWidth: '20%', labelAlign: 'top', width:'95%', margin: 10, allowBlank: false, enableKeyEvents: true, listeners: { keypress: function(el,e){ if (e.getKey() === Ext.event.Event.ENTER) {goRecover();} } } },{ xtype: 'fieldcontainer', layout: 'center', items: [{ xtype:'image', src: './api/?mod=captcha&act=imager', width: 160, height: 92, itemId: 'captchaImgRecover' }] },{ xtype: 'fieldcontainer', layout: 'center', items: [{ xtype: 'textfield', name: 'captcha', allowBlank: false, enableKeyEvents: true, listeners: { keypress: function(el,e){ if (e.getKey() === Ext.event.Event.ENTER) {goRecover();} } } }] },{ xtype:'toolbar', layout: { type: 'hbox', pack: 'end' }, items:[{ text: 'Восстановить', scale: 'large', formBind: true, handler:function(){goRecover();} }] }] }); var registerForm = Ext.create('Ext.form.Panel',{ xtype: 'form', id: 'registerForm', maxWidth: 450, defaultType: 'textfield', defaults: { labelWidth: 95, labelAlign: 'right', enableKeyEvents: true, allowBlank: false, margin: '10 10 30 10', width:'95%', enforceMaxLength: true, maxLength: 50 }, items: [{ padding: 10, margin: '0 0 20 0', xtype: 'component', html: [ '

Регистрация!

ВНИМАНИЕ!
Пожалуйста внимательно заполните поля формы.
Для активации анкеты Вам потребуется связаться с менеджером ВУЗа.
Если Вы являетесь представителем работодателя, то впишите название Вашей организации в поле «Информация».' ] },{ name: 'name', fieldLabel:'Имя', maskRe: /[a-zA-Zа-яА-ЯёЁ]/, regex: /^[a-zA-Zа-яА-ЯёЁ]{1,50}$/, regexText: 'Имя может содержать только буквы' },{ name: 'fathername', fieldLabel:'Отчество', maskRe: /[a-zA-Zа-яА-ЯёЁ]/, regex: /^[a-zA-Zа-яА-ЯёЁ]{1,50}$/, regexText: 'Отчество может содержать только буквы' },{ name: 'surname', fieldLabel:'Фамилия', maskRe: /[a-zA-Z\-{1}а-яА-ЯёЁ]/, regex: /^[a-zA-Z\-{1}а-яА-ЯёЁ]{1,50}$/, regexText: 'Фамилия может содержать только буквы и знак тире' },{ name: 'email', fieldLabel:'Почта', vtype: 'email' },{ name: 'phone', fieldLabel:'Телефон', maskRe: /[\s\,\+\d\-\(\)]/, regex: /^[\s\,\+\d\-\(\)]{1,50}$/, regexText: 'Телефонный номер может содержать цирфры, знаки тире и плюса, круглые скобки, пробелы' },{ xtype: 'fieldcontainer', fieldLabel: 'Мобильный', combineErrors: true, layout: 'hbox', defaults: { hideLabel: true, enforceMaxLength: true, maskRe: /[0-9.]/ }, items: [ {xtype: 'displayfield', value: '+7 (', margin: '0 2 0 0'}, {xtype: 'textfield', fieldLabel: 'Поле 1', name: 'mobile1', width: 45, allowBlank: false, maxLength: 3, regex: /^[\d]{1,3}$/, regexText: 'должно содержать только цифры'}, {xtype: 'displayfield', value: ')', margin: '0 5 0 2'}, {xtype: 'textfield', fieldLabel: 'Поле 2', name: 'mobile2', width: 45, allowBlank: false, margin: '0 5 0 0', maxLength: 3, regex: /^[\d]{1,3}$/, regexText: 'должно содержать только цифры'}, {xtype: 'displayfield', value: '-'}, {xtype: 'textfield', fieldLabel: 'Поле 3', name: 'mobile3', width: 60, allowBlank: false, margin: '0 0 0 5', maxLength: 4, regex: /^[\d]{1,4}$/, regexText: 'должно содержать только цифры'} ] },{ fieldLabel: 'Информация', allowBlank: true, xtype: 'textarea', name: 'info', height: 120, regex: /^([\w\s~a-zA-Zа-яА-ЯёЁ!@#$%^&*()_+=\-`{}[\];:'"/?.,\\<>\|]{0,500})$/i, regexText: 'Информация может содержать цифры, русские и латинские буквы и символы' },{ name: 'password', fieldLabel:'Пароль', inputType:'password', regex: /(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/, regexText: 'Пароль должен содержать строчные и прописные латинские буквы, цифры или спецсимволы. Минимум 8 символов' },{ name: 'repassword', fieldLabel:'Пароль', inputType:'password', regex: /(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/, regexText: 'Пароль должен содержать строчные и прописные латинские буквы, цифры или спецсимволы. Минимум 8 символов', validator: function(value) { var password = this.previousSibling('[name=password]'); return (value === password.getValue()) ? true : 'Пароли не совпадают.' } },{ xtype: 'fieldcontainer', layout: 'center', items: [{ xtype:'image', src: './api/?mod=captcha&act=image', width: 160, height: 92, itemId: 'captchaImg' }] },{ xtype: 'fieldcontainer', layout: 'center', items: [{ xtype: 'textfield', name: 'captcha', allowBlank: false, width: 260, enableKeyEvents: true, listeners: { keypress: function(el,e){ if (e.getKey() === Ext.event.Event.ENTER) {goRegister();} } } }] },{ xtype:'toolbar', layout: 'center', items:[{ text: 'Зарегистрироваться', scale: 'large', formBind: true, handler:function(){goRegister();} }] }] }); Ext.create('Ext.container.Viewport', { layout: 'border', items: [{ region: 'north', html:'
Национальный исследовательский ядерный университет «МИФИ»
' },{ region: 'center', xtype: 'tabpanel', layout: 'fit', id: 'nav', tabBar: { bodyCls: 'menutab', layout: { pack: 'center' } }, listeners: { beforetabchange: onTabChange, afterrender: onAfterRender }, items:[{ title:'Главная', id: 'title', scrollable: true, layout: 'fit', bodyPadding: '5 20 30 20', html:"
\n\
Сознание плодотворности труда — есть одно из самых лучших удовольствий!
Люк де Клапье де Вовенарг
\n\
\n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\
\n\
\n\
\n\
\n\ ", listeners:{ render:function(){ $(document).ready(function() { $('#coin-slider').coinslider({ width: 1000, height: 391, links: false, delay: 3000, effect: 'random', hoverPause: true }); }); } } },{ title: 'Соискателю', id: 'student', scrollable: true, layout: 'fit', bodyPadding: '10 30 10 30', html:"\n\
\n\
\n\
\n\

Соискателю

\n\

Уважаемые студенты и выпускники!

\n\

Достойная работа, успешная карьера, профессиональная реализация — цель и предмет жизненных устремлений каждого человека, особенно когда профессиональный путь только начинается. Трудовая деятельность молодых специалистов – сфера особая. Ведь сегодня важнейшая задача не только получить образование, но и суметь эффективно применить знания и навыки на практике, соответствовать высоким требованиям времени, быть востребованным на рынке труда.

\n\
\n\

Профессиональная реализация, трудоустройство и сопровождение карьеры выпускников — приоритетная задача Национального исследовательского ядерного университета «МИФИ».

\n\

Зарегистрировавшись в системе «ИСТОК» Вы сможете:

\n\

— получить информацию о наличии вакансий на предприятиях города и области;

\n\

— разместить свое резюме в информационной базе системы «ИСТОК»;

\n\

— получить консультацию по результатам подбора вакансий в соответствии с Вашими индивидуальными требованиями;

\n\

— хранить свое карьерное портфолио.

\n\
\n\
\n\ " },{ title: 'Работодателю', id: 'org', scrollable: true, layout: 'fit', bodyPadding: '10 30 10 30', html: "\n\
\n\
\n\
\n\

Уважаемые коллеги!

\n\

Молодые специалисты Национального исследовательского ядерного университета «МИФИ» — это кадровый резерв Вашей компании.

\n\

Для начала сотрудничества по поиску молодого специалиста для Вашего предприятия по предлагаемым Вами вакансиям необходимо заполнить заявку на регистрацию в системе «ИСТОК».

\n\

С помощью системы «ИСТОК» Вы можете:

\n\

— разместить информацию о компании и вакансиях в информационной базе системы;

\n\

— ознакомиться с постоянно обновляемой базой резюме соискателей;

\n\

— подобрать потенциальных кандидатов на замещение вакантных должностей.

\n\
\n\
\n\ " },{ title: 'О системе', id: 'about', scrollable: true, layout: 'fit', bodyPadding: '10 30 10 30', html: "\n\
\n\
\n\
\n\

О системе

\n\

ИСТОК — Информационная система трудоустройства и обзора карьеры

\n\

Первоочередная цель системы — это создание информационной поддержки выпускников и студентов высшего учебного заведения в целях содействия их трудоустройству.

\n\
\n\

Особенности работы системы:

\n\

ввод и обмен информацией между участниками процесса осуществляется через личный кабинет на портале системы ИСТОК.

\n\
\n\

Пользователи системы:

\n\

— сотрудники высшего учебного заведения;

\n\

— организации города и области, зарегистрированные в системе;

\n\

— выпускники, студенты высшего учебного заведения.

\n\
\n\

Система ИСТОК выполняет следующие функции:

\n\

1. Регистрация личных кабинетов участников процесса в информационной базе системы на портале.

\n\

1.1. Регистрация организации

\n\

Регистрация организации осуществляется по согласованию с образовательным учреждением.

\n\

При регистрации создается личный кабинет, который позволяет формировать списки вакансий, управлять ими, осуществлять подбор резюме соискателей, просматривать дополнительную информацию о претендентах на должность.

\n\
\n\

1.2. Регистрация выпускника

\n\

Регистрация выпускника, который заканчивает или закончил обучение, осуществляется сотрудником образовательного учреждения.

\n\

При регистрации создается личный кабинет. Личный кабинет осуществляет доступ к следующим разделам: анкета, резюме, карьерный лист, портфолио.

\n\
\n\

2. Формирование информационной базы выпускников образовательного учреждения и предоставление доступа к данной информации работодателям. Информационный раздел выпускника представляет собой совокупность личных данных и данных об учебе в вузе (анкета), данных о профессиональных возможностях выпускника (резюме), данных об истории карьерного продвижения (карьерный лист) и данных о личных достижениях выпускника в учебе и научной деятельности (портфолио).

\n\
\n\

3. Управление информацией о вакансиях и подбор претендентов

\n\

Информационная база системы позволяет оперативно осуществить индивидуальный подбор вакансий или резюме, соответствующих индивидуальным требованиям организаций или соискателей.

\n\
\n\

4. Формирование информационных срезов с данными о выпускниках

\n\

Свод информации, о трудовых намерениях и профессиональных достижениях выпускников и студентов, даст возможность образовательному учреждению осуществлять постоянный мониторинг за состоянием трудоустройства выпускников.

\n\
\n\

Если у вас появились вопросы, можете связаться с нами, используя контакты.

\n\
\n\
\n\ " },{ title: 'Контакты', id: 'feedback', scrollable: true, layout: 'fit', bodyPadding: '10 30 10 30', html: "\n\
\n\
\n\
\n\

Контакты

\n\

Наш адрес: 607186, г. Саров, ул. Духова, д. 6а, к.101

\n\

Почтовый адрес: 607186, г. Саров, ул. Духова, д. 6

\n\

Тел./Факс (83130) 3-94-78

\n\

Email: job@sarfti.ru

\n\
\n\
Схема проезда\n\

\n\
\n\
\n\
\n\ " },{ disabled: true, closable: false, cls: 'separator', title:'|' },{ title: 'Вход', id: 'login', scrollable: true, layout: 'center', bodyPadding: '10 20 10 20', items: [loginForm] },{ title: 'Регистрация', id: 'register', scrollable: true, layout: 'center', bodyPadding: '10 20 10 20', items: [registerForm] },{ title: 'Восстановление пароля', id: 'recover', scrollable: true, layout: 'center', bodyPadding: '10 20 10 20', tabConfig:{ hidden: true }, items: [recoverForm] }] }] }); function goRecover(){ if (recoverForm.isValid()) {recover();} } function goSubmit(){ if (loginForm.isValid()) {auth();} } function goRegister(){ if (registerForm.isValid()) {register();} } function auth(){ loginForm.mask('Загрузка'); Ext.Ajax.request({ url: 'api/', method:'POST', params:{ mod:'login', act:'login', login:loginForm.getValues()['login'], password:loginForm.getValues()['password'] }, success: function(response){ if(response.responseText=='true'){ Ext.History.setHash('#nav:home:panel'); location.reload(true); }else{ loginForm.unmask(); var data = Ext.JSON.decode(response.responseText); if(data.type=='deleted'){ Ext.Msg.alert('Ошибка','Такой пользователь не существует.'); }else if(data.type=='wrong'){ Ext.Msg.alert('Ошибка','Не правильный данные авторизации'); }else { Ext.Msg.alert('Ошибка','Что-то пошло не так'); } } }, failure: function(){ loginForm.unmask(); Ext.Msg.alert('Ошибка','Отсутствует соединение с сервером'); } }); } function register(){ registerForm.mask('Загрузка'); registerForm.getForm().submit({ clientValidation: true, url: 'api/', method:'POST', params:{ mod:'login', act:'register' }, success: function(form,action){ registerForm.unmask(); Ext.ComponentQuery.query('#captchaImg')[0].setSrc('./api/?mod=captcha&act=image&dc=' + new Date().getTime()); if(action.response.responseText){ var answer = Ext.decode(action.response.responseText); if(answer.success){ if(answer.error){ if(answer.errortype=='captcha'){ Ext.toast('Вы не правильно ввели проверочные символы'); form.markInvalid([{field: 'captcha', message: 'Введите проверочные символы заново'}]) return; } }else{ Ext.History.setHash('#nav:title'); form.reset(); Ext.ComponentQuery.query('#register')[0].scrollTo(0,0); Ext.Msg.alert('Успешная регистрация','

Данные пользователя занесены в базу.

Ваш идентификатор '+action.result.id+' (запишите его).

Для активации свяжитесь с менеджером Вуза.

Тел.: 3-90-12

'); } } } else { Ext.Msg.alert('Регистрация', 'Что-то пошло не так, попробуйте зарегистрироваться позже'); } }, failure: function(form, action){ registerForm.unmask(); switch (action.failureType) { case Ext.form.action.Action.CLIENT_INVALID: Ext.Msg.alert('Ошибка', 'Форма не может быть отправлена'); break; case Ext.form.action.Action.CONNECT_FAILURE: Ext.Msg.alert('Ошибка', 'Ошибка соединения'); break; case Ext.form.action.Action.SERVER_INVALID: Ext.Msg.alert('Ошибка', 'Ошибка сервера '+action.result.msg); } } }); } function recover(){ recoverForm.mask('Загрузка'); recoverForm.getForm().submit({ clientValidation: true, url: 'api/', method:'POST', params:{ mod:'login', act:'recover' }, success: function(form,action){ recoverForm.unmask(); Ext.ComponentQuery.query('#captchaImgRecover')[0].setSrc('./api/?mod=captcha&act=imager&dc=' + new Date().getTime()); if(action.response.responseText){ var answer = Ext.decode(action.response.responseText); if(answer.success){ if(answer.error){ if(answer.errortype=='captcha'){ Ext.toast('Вы не правильно ввели проверочные символы'); form.markInvalid([{field: 'captcha', message: 'Введите проверочные символы заново'}]) return; } if(answer.errortype=='noemail'){ Ext.toast('В вашем профиле не указан почтовый адрес'); return; } if(answer.errortype=='nouser'){ Ext.toast('Такого пользователя не существует'); return; } }else{ Ext.History.setHash('#nav:title'); form.reset(); Ext.ComponentQuery.query('#register')[0].scrollTo(0,0); Ext.Msg.alert('Восстановление пароля','

На Ваш электронный адрес отправлено письмо с дальнейшими инструкциями.

'); } } } else { Ext.Msg.alert('Регистрация', 'Что-то пошло не так, попробуйте зарегистрироваться позже'); } }, failure: function(form, action){ registerForm.unmask(); switch (action.failureType) { case Ext.form.action.Action.CLIENT_INVALID: Ext.Msg.alert('Ошибка', 'Форма не может быть отправлена'); break; case Ext.form.action.Action.CONNECT_FAILURE: Ext.Msg.alert('Ошибка', 'Ошибка соединения'); break; case Ext.form.action.Action.SERVER_INVALID: Ext.Msg.alert('Ошибка', 'Ошибка сервера '+action.result.msg); } } }); } });