forked from CITKParus/P8-Panels
90 lines
3.6 KiB
JavaScript
90 lines
3.6 KiB
JavaScript
/*
|
|
Парус 8 - Панели мониторинга - Редакторы панелей
|
|
Вспомогательные ресурсы компонента "Редактор условия"
|
|
*/
|
|
|
|
//---------------------
|
|
//Подключение библиотек
|
|
//---------------------
|
|
|
|
//---------
|
|
//Константы
|
|
//---------
|
|
|
|
//Функции операторов условий
|
|
const P8P_CC_OPERATOR_FUNC = {
|
|
equal: (objValue, value) => objValue == value,
|
|
notEqual: (objValue, value) => objValue != value,
|
|
lessEqual: (objValue, value) => objValue <= value,
|
|
less: (objValue, value) => objValue < value,
|
|
greaterEqual: (objValue, value) => objValue >= value,
|
|
greater: (objValue, value) => objValue > value,
|
|
in: (objValue, value) =>
|
|
value
|
|
.split(",")
|
|
.map(item => item.trim())
|
|
.includes(objValue + "")
|
|
};
|
|
|
|
//------------------------------------
|
|
//Вспомогательные функции и компоненты
|
|
//------------------------------------
|
|
|
|
//Загрузка условий в объект
|
|
const loadConditionsToObject = (obj, conditions) => {
|
|
//Инициализируем новый объект
|
|
let newObj = { ...obj };
|
|
//Инициализируем функцию оператора
|
|
let operatorFunc;
|
|
//Если изначальный индикатор загружен
|
|
if (Object.keys(newObj).length !== 0) {
|
|
//Обходим условия
|
|
conditions.map(item => {
|
|
//Функция оператора
|
|
operatorFunc = P8P_CC_OPERATOR_FUNC[item.condOperator.value];
|
|
//Проверяем условие
|
|
if (operatorFunc && operatorFunc(newObj[item.condField.value], item.condValue)) {
|
|
//Устанавливаем поле в новое значение
|
|
newObj[item.resField.value] = item.resValue;
|
|
}
|
|
});
|
|
}
|
|
//Возвращаем новый объект
|
|
return newObj;
|
|
};
|
|
|
|
//Считывание результатов условия
|
|
const getConditionsValues = (obj, conditions, element = "") => {
|
|
//Инициализируем функцию оператора
|
|
let operatorFunc;
|
|
//Инициализируем значение поля
|
|
let condFieldValue = "";
|
|
//Инициализируем результат
|
|
let resObject = {};
|
|
//Обходим условия
|
|
conditions.map(item => {
|
|
//Определяем значение поля условия
|
|
condFieldValue = item.condElement ? obj[item.condElement] : obj[item.condField.value];
|
|
//Функция оператора
|
|
operatorFunc = P8P_CC_OPERATOR_FUNC[item.condOperator.value];
|
|
//Проверяем условие
|
|
if (operatorFunc && operatorFunc(condFieldValue, item.condValue)) {
|
|
//Если в условии нет элемента результата или он равен текущему элементу
|
|
if (!item.resElement || (element && item.resElement === element)) {
|
|
resObject[item.resField.value] = item.resValue;
|
|
}
|
|
}
|
|
});
|
|
//Возвращаем новый объект
|
|
return resObject;
|
|
};
|
|
|
|
//Доступность сохранения настроек условия
|
|
const isConditionOkDisabled = condition => (!condition.condField.value || !condition.condOperator.value || !condition.resField.value ? true : false);
|
|
|
|
//----------------
|
|
//Интерфейс модуля
|
|
//----------------
|
|
|
|
export { loadConditionsToObject, getConditionsValues, isConditionOkDisabled };
|