Commit 8ef062f3 authored by Valentin Skripnikov's avatar Valentin Skripnikov

-

parent 13cb1de3
body, div, span, input, button {
font-family: "Droid Sans", arial, serif;
font-size: 14px;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}
.hidden {
display: none;
}
.portal_button {
background-color: #df6c6d;
border-color: #df6c6d;
color: #ffffff;
padding-left: 20px;
padding-right: 20px;
height: 30px;
border: none;
margin-left: 10px;
margin-right: 10px;
}
.portal-center {
text-align: center;
vertical-align: top
}
.portal-toolbar {
padding: 10px;
color: #6e8ebd
}
#form_player_container {
/*border: 3px solid #6e8ebd;*/
outline: 1px #ffffff solid;
margin-left: auto;
margin-right: auto;
width: 1000px;
min-height: 400px;
background-color: #ffffff;
padding-top: 20px;
padding-bottom: 60px;
margin-bottom: 20px;
}
#form_player_div {
width: 1000px;
min-height: 200px;
}
#search_input {
background-color: #6e8ebd;
border: 1px #6e8ebd solid;
height: 30px;
width: 200px;
padding-left: 10px
}
#send_button {
margin-left: auto;
margin-right: auto;
width: 200px;
margin-bottom: 20px;
}
#message {
background-color: #ffffff;
border: 3px solid #df6c6d;
outline: 1px #932121 solid;
z-index: 2;
position: absolute;
top: 100px;
left: 30%;
color: #303030;
padding: 10px;
max-width: 40%;
min-width: 40%;
}
#message_text {
color: #303030;
}
.drop_down_list {
background-color: white;
display: none;
position: absolute;
box-shadow: 0 0 35px #d6d6d6;
}
.drop_down_input {
width: 100%;
font-family: arial, tahoma, sans-serif;
font-size: 12px;
padding-left: 2px;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
height: 28px;
align-self: center;
border: solid 1px #d6d6d6;
border-radius: 4px;
background-color: #ffffff;
display: inline-block;
vertical-align: middle;
line-height: 28px;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
cursor: pointer;
}
.result_search_combo {
height: 80%;
overflow-y: scroll;
max-height: 300px;
}
.result_element {
padding: 5px 10px;
text-align: left;
border-bottom: 1px solid #d6d6d6;
margin: 0px 3px;
font-family: arial, tahoma, sans-serif;
font-size: 12px;
}
.result_element:hover {
background-color: #deefff;
}
.drop_down_toolbar {
display: inline-block;
padding: 10px;
}
.drop_down_toolbar1 {
display: flex;
width: 290px;
}
.first_page {
background-size: 100% 100%;
width: 20px;
height: 20px;
background-image: url("icon/first.ico");
}
.first_page:hover {
background-color: #deefff;
}
.previous_page {
background-size: 100% 100%;
width: 20px;
height: 20px;
background-image: url("icon/previous.ico");
}
.previous_page:hover {
background-color: #deefff;
}
.next_page {
background-size: 100% 100%;
width: 20px;
height: 20px;
background-image: url("icon/next.ico");
}
.next_page:hover {
background-color: #deefff;
}
.last_page {
background-size: 100% 100%;
width: 20px;
height: 20px;
background-image: url("icon/last.ico");
}
.last_page:hover {
background-color: #deefff;
}
.padding {
padding: 0px 5px;
}
.input_page {
width: 40px;
}
.margin {
margin: 0px 5px;
}
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<script>
FORM_PLAYER_URL_PREFIX = "http://demoextfp.synergy.tm/Synergy/";
</script>
<!-- LOCALIZATION LIBRARY -->
<script src="http://demoextfp.synergy.tm/Synergy/js/i18next.min.js" type="application/javascript"></script>
<!-- JS FORMS -->
<link rel="stylesheet" href="http://demoextfp.synergy.tm/Synergy/js/form.player.css"/>
<script src="http://demoextfp.synergy.tm/Synergy/js/vendor.js" type="text/javascript"></script>
<script src="http://demoextfp.synergy.tm/Synergy/js/form.player.js" type="text/javascript"></script>
<!-- PORTAL SCRIPTS AND STYLESHEET -->
<script src="index.js" type="text/javascript"></script>
<link href="index.css" rel="stylesheet"/>
<link href="uc8.css" rel="stylesheet"/>
<script src="uc8.js" type="text/javascript"></script>
</head>
<body>
<div style="z-index: 0" class="portal-center">
<div class="portal-toolbar" id="portal_toolbar">
<span> Введите номер заявки </span><input type="text" id="search_input"/>
<button id="search_button" class="portal_button search_button" value="SEARCH" onclick="portal.searchData()">SEARCH</button>
<button id="create_button" class="portal_button create_button" value="CREATE" onclick="portal.createPlayer()">CREATE</button>
</div>
<!-- Кастомный выпадающий список с поиском и пагинатором -->
<div class="drop_down_list">
<div class="result_search_combo">
</div>
<div class="drop_down_toolbar">
<div class="drop_down_toolbar1">
<div class="first_page"></div>
<div class="previous_page"></div>
<div class="split padding">|</div>
Страница
<input type="text" value="1" class="margin input_page"/>
из
<div class="count_result padding">5</div>
<div class="split padding">|</div>
<div class="next_page"></div>
<div class="last_page"></div>
</div>
</div>
</div>
<div class="auth_panel">
<div class="auth_header">Введите логин и пароль</div>
<div class="auth_fields">
<input type="text" class="login"/>
<input type="password" class="password">
</div>
<div class="footer">
<div class="buttons">
<input type="submit" value="Войти" class="submit_auth">
</div>
</div>
</div>
<div id="form_player_container">
<div id="form_player_div">
</div>
</div>
<button id="send_button" class="portal_button hidden" value="SEND" onclick="portal.saveData()"> SEND</button>
</div>
<div id="message" class="hidden">
<span id="message_text"></span>
</div>
</body>
</html>
'use strict';
AS.OPTIONS.login = "11";
AS.OPTIONS.password = "11";
AS.OPTIONS.locale = "ru";
AS.OPTIONS.coreUrl = "http://demoextfp.synergy.tm/Synergy/";
var tokenServiceURL = "http://demoextfp.synergy.tm/TokenService/rest/tokenService/getToken";
var portal = {
player: null,
/**
* показать сообщение об ошибке
* @param{string} message
*/
showMessage: function (message) {
jQuery("#message_text").html(message);
jQuery("#message").show();
},
/**
* скрыть панель сообщений
*/
hideMessage: function () {
jQuery("#message").hide();
},
/**
* очистить текущий проигрыватель форм
*/
clearPlayer: function () {
if (portal.player) {
portal.player.destroy();
}
jQuery("#send_button").hide();
portal.player = null;
},
/**
* добавить новый проигрыватель форм
*/
createPlayer: function (dataId) {
portal.clearPlayer();
portal.player = AS.FORMS.createPlayer();
AS.FORMS.bus.on(AS.FORMS.EVENT_TYPE.formShow, function (event, model, view) {
if (view.editable) {
jQuery("#send_button").show();
jQuery("#send_button").removeAttr('disabled', 'disabled');
}
});
portal.player.view.setEditable(_.isUndefined(dataId));
portal.player.showFormData("e0bb813a-fc15-4acc-bcf2-fd5c1ee303ef", 0, dataId);
portal.player.view.appendTo($('#form_player_div'));
portal.player.model.on("valueChange", function () {
portal.hideMessage();
});
},
/**
* искать форму по указанному номеру
*/
searchData: function () {
var counterValue = jQuery("#search_input").val();
AS.FORMS.ApiUtils.simpleAsyncGet("rest/api/asforms/search?formUUID=e0bb813a-fc15-4acc-bcf2-fd5c1ee303ef&search=" + encodeURIComponent(counterValue) + "&field=counter&type=exact", function (data) {
if (data === null || !(data instanceof Array) || data.length === 0) {
portal.showMessage("Заявка с указанным номером не найдена");
return;
}
var dataId = data[0];
portal.createPlayer(dataId);
});
},
/**
* сохранить данные, получить их, отобразить номер счетчика для дальнейшего поиска
*/
saveData: function () {
var errors = portal.player.model.getErrors();
if (errors.length > 0) {
portal.showMessage("Введите все обязательные поля");
return;
}
jQuery("#send_button").attr('disabled', 'disabled');
var counterValue = portal.player.model.getModelWithId('counter').getValue();
AS.FORMS.ApiUtils.simpleAsyncGet("rest/api/registry/create_doc?registryID=5279da23-4cdb-4527-92f8-eb70b6983a48", function (result) {
if (result.errorCode != 0) {
portal.showMessage("Во время сохранения данных по форме произошли ошибки. Обратитесь к администратору");
return;
}
portal.player.model.asfDataId = result.dataUUID;
portal.player.saveFormData(function (result) {
if (_.isUndefined(result)) {
portal.showMessage("Во время сохранения данных по форме произошли ошибки. Обратитесь к администратору");
return;
}
AS.FORMS.ApiUtils.simpleAsyncGet('rest/api/asforms/data/' + result, function (data) {
data.data.forEach(function (value) {
if (value.id === 'counter') {
counterValue = value.value;
portal.showMessage("Ваша заявка была принята в обработку. Номер заявки - " + counterValue);
}
});
});
portal.clearPlayer();
});
});
}
};
$(document).ready(function () {
jQuery.ajax({
method: "GET",
url: tokenServiceURL + "?url=" + synergyURL,
success: function (data) {
AS.OPTIONS.login = "$key";
AS.OPTIONS.password = data;
portal.createPlayer();
}
});
jQuery(document).mouseup(function (e) {
var container = jQuery("#message");
if (!container.is(e.target) && container.has(e.target).length === 0) {
container.hide();
}
});
});
/** UC8 */
//Все элементы выпадающего списка
var elements = [];
//Элементы которые подходят по запросу поиска
var filteredElements = [];
//Количество доступных страниц
var allSize = 0;
//Модель изначального комбобокса
var comboModel;
//Запись от которой начинается отображение
var start = 0;
//До какой записи отображать значения
var end = start + 15;
//Текущая страница
var currentPage = 0;
AS.FORMS.bus.on(AS.FORMS.EVENT_TYPE.formShow, function (event, model, view) {
var playerModel = model;
var comboView = view.getViewWithId('dirty-combobox');
playerModel.on(AS.FORMS.EVENT_TYPE.dataLoad, function () {
//Убираем изначальный комбобокс
comboView.container.empty();
//Создаем поле для ввода запроса
var input = jQuery("<input/>", {type: "text", class: "drop_down_input"});
//Вставляем в ту зону в которой был старый комбо
comboView.container.append(input);
//Когда произведен клик по полю ввода отобразить выпадающий список
input.on('click', function () {
showDropDownInput();
});
//Когда нажата клавиша отобразить выпадающий список и начать поиск
input.keypress(function () {
showDropDownInput();
search(jQuery('.drop_down_input').val());
});
//Берем модель и подписываемся на событие загрузки данных, для получения справочника
comboModel = playerModel.getModelWithId('dirty-combobox');
comboModel.on(AS.FORMS.EVENT_TYPE.dataLoad, function () {
elements = comboModel.listElements;
filteredElements = comboModel.listElements;
allSize = Math.ceil(filteredElements.length / 15);
//Сбрасываем текущую страницу
setCurrentPage(1);
});
});
addComboboxHandlers();
});
/**
* Добавление событий
* */
var addComboboxHandlers = function () {
//Нажатие на кнопку следующая страница
jQuery(".next_page").on('click', function () {
next();
});
//Нажатие на кнопку предыдущая страница
jQuery(".previous_page").on('click', function () {
previous();
});
//Нажатие на кнопку первая страница
jQuery(".first_page").on('click', function () {
firstPage();
});
//Нажатие на кнопку последняя страница
jQuery(".last_page").on('click', function () {
lastPage();
});
//Ввод страницы, по нажатию на энтер будет произведен переход
jQuery('.input_page').keypress(function (e) {
if (e.which == 13) {
setCurrentPage(jQuery('.input_page').val());
}
});
//Скрытие выпадающего списка, по нажатию на поле вне его
jQuery(document).mouseup(function (e) {
var container = jQuery(".drop_down_list");
if (!container.is(e.target) && container.has(e.target).length === 0) {
container.hide();
}
});
};
/**
* Отображение выпадающего списка
*/
var showDropDownInput = function () {
var input = jQuery('.drop_down_input');
var position = input.position();
var list = jQuery('.drop_down_list');
list.css({top: position.top + input.height() + 6, left: position.left});
list.css({width: input.width()})
list.show();
};
/**
* Следующая страница
*/
var next = function () {
if (currentPage + 1 > allSize) {
return;
}
start = end;
currentPage++;
end = start + 15;
setPage();
};
/**
* Поиск
*
* @param value - значение поиска
*/
var search = function (value) {
start = 0;
end = start + 15;
currentPage = 1;
filteredElements = [];
elements.forEach(function (element) {
if (element.label.toLowerCase().indexOf(value.toLowerCase()) !== -1) {
filteredElements.push(element);
}
});
allSize = Math.ceil(filteredElements.length / 15);
setPage();
};
/**
* Предыдущая страница
*/
var previous = function () {
if (currentPage - 1 < 1) {
return;
}
start = start - 15;
currentPage--;
end = start + 15;
setPage();
};
/**
* Изменение положения страницы в зависимости от состояния глобальных переменных
*/
var setPage = function () {
var showed = filteredElements.slice(start, end);
jQuery(".result_search_combo").empty()
showed.forEach(function (element) {
var opt = jQuery("<div class='result_element' code='" + element.value + "'>" + element.label + "</div>");
opt.on('click', function () {
comboModel.setValue(jQuery(this).attr('code'));
jQuery('.drop_down_input').val(jQuery(this).html())
jQuery(".drop_down_list").hide();
});
jQuery('.result_search_combo').append(opt);
});
jQuery('.input_page').val(currentPage);
jQuery('.count_result').html(allSize);
};
/**
* Первая страница
*/
var firstPage = function () {
setCurrentPage(1);
};
/**
* Последняя страница
*/
var lastPage = function () {
setCurrentPage(allSize);
};
/**
* Изменить состояние страницы
*
* @param value - значение
*/
var setCurrentPage = function (value) {
if (!jQuery.isNumeric(value)) {
setCurrentPage(currentPage);
return;
}
if (value > allSize) {
value = allSize;
} else if (value < 1) {
value = 1;
}
currentPage = value;
end = currentPage * 15;
start = end - 15;
setPage();
};
.auth_panel {
display: none;
left: 50%;
transform: translate(-50%, 0);
width: 350px;
height: 200px;
background-color: white;
position: absolute;
border-color: #24282B;
border-style: none solid solid;
border-width: 1px;
top: 150px;
}
.auth_header {
background-color: #4C5256;
padding: 12px;
color: white;
font-family: arial, tahoma, sans-serif;
font-size: 10pt;
font-weight: bold;
cursor: pointer;
}
.auth_fields {
width: 200px;
display: inline-block;
height: calc(100% - 80px);
}
.login {
margin-top: 30px;
}
.password {
margin-top: 20px;
}
.buttons {
height: 30px;
}
.submit_auth {
height: 100%;
width: 100px;
border-radius: 5px;
background-color: #49b785;
border-color: #49b785;
color: #ffffff;
}
/**
* Перехватываем событие неудачной авторизации
*/
AS.SERVICES.unAuthorized = function () {
portal.showMessage("Ошибка авторизации");
//Отображаем панель ввода логина/пароля
jQuery(".auth_panel").show();
addHandlers();
};
/**
* Добавлены ли уже слушатели
*/
var existHandlers = false;
/**
* Добавление слушателей
*/
var addHandlers = function () {
if (!existHandlers) {
//Нажатие на кнопку войти
jQuery(".submit_auth").on("click", function (event) {
//Если не ввели логин или пароль выдаем ошибку
if (jQuery(".login").val().isEmpty() || jQuery(".password").val().isEmpty()) {
portal.showMessage("Введите логин и пароль");
event.stopPropagation();
} else {
//В случае ввода заменяем значение переменных авторизации и прячем панель ввода, загружаем форму
AS.OPTIONS.login = jQuery(".login").val();
AS.OPTIONS.password = jQuery(".password").val();
jQuery(".auth_panel").hide();
portal.createPlayer();
}
});
//При нажатии на панель авторизации скрывать сообщение об ошибке
jQuery(".auth_panel").on("click", function () {
portal.hideMessage();
});
}
existHandlers = true;
};
...@@ -947,6 +947,7 @@ ARTA Synergy при загрузке внешнего web-модуля буде ...@@ -947,6 +947,7 @@ ARTA Synergy при загрузке внешнего web-модуля буде
integration/extfp-usecases/uc5 integration/extfp-usecases/uc5
integration/extfp-usecases/uc6 integration/extfp-usecases/uc6
integration/extfp-usecases/uc7 integration/extfp-usecases/uc7
integration/extfp-usecases/uc8
Ссылки на модули системы и их внутренние элементы Ссылки на модули системы и их внутренние элементы
------------------------------------------------- -------------------------------------------------
......
Вариант 8. Авторизация во внешнем проигрывателе
-----------------------------------------------
Авторизация в Synergy внутри внешнего проигрывателя форм. В результате успешной авторизации открывается форма из варианта 8.
Примеры логинов/паролей для варианта 8:
* 1/1
* user_for_scripting_uc/user_for_scripting_uc
.. raw:: html
<iframe src="../../_static/html/integration/extfp-usecases/uc7/index.html" scrolling='no' height="700px" width="100%" style="border:1px solid grey;"></iframe>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment