Автозаполнение полей выпускника
当前为
// ==UserScript==
// @name Platonus - Autocomplete Graduate
// @namespace scriptomatika
// @author mouse-karaganda
// @description Автозаполнение полей выпускника
// @license MIT
// @match https://platonus.buketov.edu.kz/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=platonus.buketov.edu.kz
// @version 1.1
// @grant none
// ==/UserScript==
(function() {
console.log('Userscript run at == ', location.href);
let $ = window.jQuery;
//Абилова Далила
let studentList = [
'1;Абилова;Далила;Руслановна;Abilova;Dalila;970570;87087747738;980429450553;01-02-1995;038229264;19-03-2015;5B090400'
];
let item = {};
let itemArray = [
'number',
'surname',
'name',
'fatherName',
'surnameEng',
'nameEng',
'phone',
'phoneMobile',
'numIin',
'birthday',
'docNum',
'dateDoc',
'professionCode'
];
let tabs = {
personalData: 'Личные данные',
education: 'Образование',
employment: 'Трудоустройство',
graduateData: 'Данные о выпускнике',
benefits: 'Льготы'
};
let completer = {
maxLoadTime: 120000,
oneStepTime: 400,
globalIndex: 0,
lotusBtnId: 'lotus_completer',
globalQueue: {},
insertStyle: function() {
let styleText = [
'.completer_button { margin-right: 20px; }',
'.completer_button.btn-success, .completer_button.btn-success:hover { background-color: #0033cc !important; border-color: #0033cc !important; }'
];
$('<style type="text/css">').appendTo(document.head)
.text(styleText.join('\n'));
},
createButton: function(mapButton) {
let outer = $('<li>').attr('id', completer.lotusBtnId)
.insertBefore(mapButton.parent('li'));
$('<button>').addClass('btn btn-success completer_button').appendTo(outer)
.text('Заполнить из Лотус')
.on('click', completer.clickToButton);
},
clickToButton: async function() {
let pik = $('#dativeFIOru').get(0);
//completer.setValueToTextbox(pik, "Бокижанова");
let stud = completer.findStudent();
completer.currentStudent = stud;
// Переходим на вкладку
completer.gotoNextTab(tabs.personalData);
},
gotoNextTab: function(tabName) {
if (completer.activateTab(tabName)) {
setTimeout(tabs[tabName], completer.oneStepTime);
}
},
setTabPersonalData: function() {
let findTab = completer.findTab(tabs.personalData);
if (findTab.length == 0) {
return;
}
let stud = completer.currentStudent;
let getInput = completer.findInput('Фамилия транслитом');
if (getInput.length > 0) {
completer.setValueToInput(getInput[0], stud[item.surnameEng]);
}
getInput = completer.findInput('Имя транслитом');
if (getInput.length > 0) {
completer.setValueToInput(getInput[0], stud[item.nameEng]);
}
getInput = completer.findInput('Домашний телефон');
if (getInput.length > 0) {
completer.setValueToInput(getInput[0], stud[item.phone]);
}
getInput = completer.findInput('Мобильный телефон');
if (getInput.length > 0) {
completer.setValueToInput(getInput[0], completer.getPhoneMobile(stud[item.phoneMobile]));
}
getInput = completer.findInput('ИИН');
if (getInput.length > 0) {
completer.setValueToInput(getInput[0], completer.getIin(stud[item.numIin]));
}
getInput = completer.findDatepicker('Дата рождения');
if (getInput.length > 0) {
completer.setValueToInput(getInput[0], stud[item.birthday]);
}
getInput = completer.findInput('Номер документа, удостоверяющего личность');
if (getInput.length > 0) {
completer.setValueToInput(getInput[0], stud[item.docNum]);
}
getInput = completer.findDatepicker('Дата выдачи документа, удостоверяющего личность');
if (getInput.length > 0) {
completer.setValueToInput(getInput[0], stud[item.dateDoc]);
}
getInput = completer.findDatepicker('Срок действия документа, удостоверяющего личность');
if (getInput.length > 0) {
completer.setValueToInput(getInput[0], stud[item.dateDoc]);
}
completer.gotoNextTab(tabs.education);
},
setTabEducation: function() {
let findTab = completer.findTab(tabs.education);
if (findTab.length == 0) {
return;
}
let stud = completer.currentStudent;
let getInput = completer.findCombobox('Академическая степень');
if (getInput.length > 0) {
completer.setValueToCombobox(getInput[0], 'Бакалавр');
}
let stepInTab = () => {
getInput = completer.findCombobox('Специальность/Группа образовательных программ');
if (getInput.length > 0) {
completer.setValueToCombobox(getInput[0], stud[item.professionCode]);
}
};
setTimeout(stepInTab, completer.oneStepTime * 3);
//completer.gotoNextTab(tabs.employment);
},
setTabEmployment: function() {
completer.gotoNextTab(tabs.graduateData);
},
setTabGraduateData: function() {
completer.gotoNextTab(tabs.benefits);
},
setTabBenefits: function() {
completer.activateTab(tabs.personalData);
},
findStudent: function() {
let findItem = studentList[0];
let result = findItem.split(';');
return result;
},
activateTab: function(tabText) {
let findTab = completer.findTab(tabText);
if (findTab.length > 0) {
findTab.eq(0).trigger('click');
return true;
}
return false;
},
findTab: function(tabText) {
let tabList = $('ul.nav-tabs button.nav-link');
//console.log('completer :: tabList = ', tabList);
let oneTab = tabList.filter((index, tab) => $(tab).text().trim() == tabText);
console.log('completer :: findTab [%o] = ', tabText, oneTab);
return oneTab;
},
findLabel: function(labelText) {
let labelList = $('.tab-content label.form-label');
//console.log('completer :: labelList = ', labelList);
let oneLabel = labelList.filter((index, label) => $(label).text().trim() == labelText);
console.log('completer :: findLabel [%o] = ', labelText, oneLabel);
return oneLabel;
},
findInput: function(labelText) {
// Ищем метку и следующий после неё элемент
let oneLabel = completer.findLabel(labelText);
let oneInput = oneLabel.next('input[type="text"], input:not([type])');
console.log('completer :: findInput [%o] = ', labelText, oneInput);
return oneInput;
},
findDatepicker: function(labelText) {
let oneLabel = completer.findLabel(labelText);
let oneDatepicker = oneLabel.next('.input-group').find('input[datepicker]');
console.log('completer :: findDatepicker [%o] = ', labelText, oneDatepicker);
return oneDatepicker;
},
findCombobox: function(labelText) {
let oneLabel = completer.findLabel(labelText);
let oneCombobox = oneLabel.nextAll('select + .select2-container').find('span[role="combobox"]');
console.log('completer :: findCombobox [%o] = ', labelText, oneCombobox);
return oneCombobox;
},
setValueToInput: function(oneInput, value) {
oneInput.value = value;
oneInput.dispatchEvent(new Event('input'));
oneInput.dispatchEvent(new Event('blur'));
},
setValueToCombobox: function(oneInput, value) {
console.log('completer :: setValueToCombobox [%o] = ', value, oneInput);
oneInput.dispatchEvent(new MouseEvent('mousedown', { bubbles: true }));
let filterHandler = function() {
// Ищем поле для фильтра
let optionsContainer = $(oneInput).parents('.select2-container').nextAll('.has-error + .select2-container');
let filterInput = optionsContainer.find('[type="search"]');
console.log('completer :: filterInput = ', filterInput);
if (filterInput.length > 0) {
completer.setValueToInput(filterInput[0], value.toLowerCase());
let listHandler = function() {
// Выделяем оставшийся пункт
let filterList = optionsContainer.find('ul[role="listbox"] li');
console.log('completer :: filterList = ', filterList);
if (filterList.length > 0) {
filterList[0].dispatchEvent(new MouseEvent('mouseup', { bubbles: true }));
}
};
setTimeout(listHandler, completer.oneStepTime);
}
}
setTimeout(filterHandler, completer.oneStepTime);
},
getPhoneMobile: function(value) {
return value;
},
getIin: function(value) {
return value;
},
popstateHandler: function() {
// Ждем кнопку карты
let mapButton = $('a.btn.btn-primary[href$="/map"]');
console.log('completer :: popstateHandler [%o] = ', mapButton.length, mapButton);
if (mapButton.length == 0) {
let pause = new Date() - completer.popstateStart;
if (pause > completer.maxLoadTime) {
clearInterval(completer.popstateTimer);
return;
}
} else {
clearInterval(completer.popstateTimer);
// Создаем новую кнопку
completer.createButton(mapButton);
}
},
runPopstate: function(event) {
// Убираем старую кнопку
$('#' + completer.lotusBtnId).remove();
// Проверяем, какая страница открыта
let isGraduate = /graduate\/\d+/.test(location.href);
console.log('completer :: runPopstate [%o] = ', isGraduate, location.href);
if (!isGraduate) {
return;
}
completer.popstateStart = new Date();
completer.popstateTimer = setInterval(completer.popstateHandler, completer.oneStepTime);
},
startItem: function(event) {
item = {};
itemArray.forEach((name, index) => {
item[name] = index;
});
//console.log('completer :: startItem = ', item);
tabs[tabs.personalData] = completer.setTabPersonalData;
tabs[tabs.education] = completer.setTabEducation;
tabs[tabs.employment] = completer.setTabEmployment;
tabs[tabs.graduateData] = completer.setTabGraduateData;
tabs[tabs.benefits] = completer.setTabBenefits;
},
start: function() {
completer.startItem();
completer.insertStyle();
completer.runPopstate();
//window.addEventListener('popstate', completer.runPopstate);
$(window).on('popstate', completer.runPopstate);
}
};
completer.start();
console.log('Platonus - Autocomplete Graduate 💬 1.1');
})();