WEB APP: реализована вспомогательная функция xml2JSON, применена в панели "Производственная программа"
This commit is contained in:
parent
a90071afe8
commit
106388d4c8
@ -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
|
||||||
|
};
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
//Список планов
|
//Список планов
|
||||||
|
Loading…
x
Reference in New Issue
Block a user