WEB APP: реализована вспомогательная функция xml2JSON, применена в панели "Производственная программа"

This commit is contained in:
Mikhail Chechnev 2024-02-14 13:06:31 +03:00
parent a90071afe8
commit 106388d4c8
2 changed files with 38 additions and 20 deletions

View File

@ -7,7 +7,7 @@
//Подключение библиотек //Подключение библиотек
//--------------------- //---------------------
import { XMLBuilder } from "fast-xml-parser"; //Конвертация XML в JSON и JSON в XML import { XMLParser, XMLBuilder } from "fast-xml-parser"; //Конвертация XML в JSON и JSON в XML
import dayjs from "dayjs"; //Работа с датами import dayjs from "dayjs"; //Работа с датами
//--------- //---------
@ -56,6 +56,26 @@ const object2Base64XML = (obj, builderOptions) => {
return btoa(unescape(encodeURIComponent(builder.build(obj)))); return btoa(unescape(encodeURIComponent(builder.build(obj))));
}; };
//Конвертация XML в JSON
const xml2JSON = ({ xmlDoc, attributeValueProcessor, isArray }) => {
return new Promise((resolve, reject) => {
try {
let opts = {
ignoreDeclaration: true,
ignoreAttributes: false,
parseAttributeValue: true,
attributeNamePrefix: ""
};
if (attributeValueProcessor) opts.attributeValueProcessor = attributeValueProcessor;
if (isArray) opts.isArray = isArray;
const parser = new XMLParser(opts);
resolve(parser.parse(xmlDoc));
} catch (e) {
reject(e);
}
});
};
//Форматирование даты в формат РФ //Форматирование даты в формат РФ
const formatDateRF = value => (value ? dayjs(value).format("DD.MM.YYYY") : null); const formatDateRF = value => (value ? dayjs(value).format("DD.MM.YYYY") : null);
@ -75,4 +95,14 @@ const genGUID = () =>
//Интерфейс модуля //Интерфейс модуля
//---------------- //----------------
export { hasValue, getDisplaySize, deepCopyObject, object2Base64XML, formatDateRF, formatDateJSONDateOnly, formatNumberRFCurrency, genGUID }; export {
hasValue,
getDisplaySize,
deepCopyObject,
object2Base64XML,
xml2JSON,
formatDateRF,
formatDateJSONDateOnly,
formatNumberRFCurrency,
genGUID
};

View File

@ -15,9 +15,8 @@ import { MessagingСtx } from "../../context/messaging"; //Контекст со
import { ApplicationСtx } from "../../context/application"; //Контекст приложения import { ApplicationСtx } from "../../context/application"; //Контекст приложения
import { P8P_GANTT_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения import { P8P_GANTT_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения
import { P8PGantt } from "../../components/p8p_gantt"; //Диаграмма Ганта import { P8PGantt } from "../../components/p8p_gantt"; //Диаграмма Ганта
import { formatDateJSONDateOnly } from "../../core/utils"; //Вспомогательные функции import { xml2JSON, formatDateJSONDateOnly } from "../../core/utils"; //Вспомогательные функции
import { useFilteredPlans } from "./hooks"; //Вспомогательные хуки import { useFilteredPlans } from "./hooks"; //Вспомогательные хуки
import { XMLParser } from "fast-xml-parser";
//--------- //---------
//Константы //Константы
@ -49,23 +48,12 @@ const STYLES = {
//------------------------------------ //------------------------------------
//Разбор XML с данными спецификации производственной программы //Разбор XML с данными спецификации производственной программы
const parseProdPlanSpXML = xmlDoc => { const parseProdPlanSpXML = async xmlDoc => {
return new Promise((resolve, reject) => { const data = await xml2JSON({
try { xmlDoc,
const parser = new XMLParser({ attributeValueProcessor: (name, val) => (name == "numb" ? undefined : ["start", "end"].includes(name) ? formatDateJSONDateOnly(val) : val)
ignoreDeclaration: true,
ignoreAttributes: false,
parseAttributeValue: true,
attributeNamePrefix: "",
attributeValueProcessor: (name, val) =>
name == "numb" ? undefined : ["start", "end"].includes(name) ? formatDateJSONDateOnly(val) : val
});
const data = parser.parse(xmlDoc);
resolve(data.XDATA);
} catch (e) {
reject(e);
}
}); });
return data.XDATA;
}; };
//Список планов //Список планов