From 106388d4c8df5b637ef9487c385899da2be36fac Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Wed, 14 Feb 2024 13:06:31 +0300 Subject: [PATCH] =?UTF-8?q?WEB=20APP:=20=D1=80=D0=B5=D0=B0=D0=BB=D0=B8?= =?UTF-8?q?=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B0=20=D0=B2=D1=81=D0=BF=D0=BE?= =?UTF-8?q?=D0=BC=D0=BE=D0=B3=D0=B0=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D0=B0?= =?UTF-8?q?=D1=8F=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8F=20xml2JSON,?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B0=20?= =?UTF-8?q?=D0=B2=20=D0=BF=D0=B0=D0=BD=D0=B5=D0=BB=D0=B8=20"=D0=9F=D1=80?= =?UTF-8?q?=D0=BE=D0=B8=D0=B7=D0=B2=D0=BE=D0=B4=D1=81=D1=82=D0=B2=D0=B5?= =?UTF-8?q?=D0=BD=D0=BD=D0=B0=D1=8F=20=D0=BF=D1=80=D0=BE=D0=B3=D1=80=D0=B0?= =?UTF-8?q?=D0=BC=D0=BC=D0=B0"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/core/utils.js | 34 +++++++++++++++++-- .../mech_rec_cost_prod_plans.js | 24 ++++--------- 2 files changed, 38 insertions(+), 20 deletions(-) diff --git a/app/core/utils.js b/app/core/utils.js index 3ebd3d4..69492d1 100644 --- a/app/core/utils.js +++ b/app/core/utils.js @@ -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"; //Работа с датами //--------- @@ -56,6 +56,26 @@ const object2Base64XML = (obj, builderOptions) => { 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); @@ -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 +}; diff --git a/app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js b/app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js index 10fd417..0218ff8 100644 --- a/app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js +++ b/app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js @@ -15,9 +15,8 @@ import { MessagingСtx } from "../../context/messaging"; //Контекст со import { ApplicationСtx } from "../../context/application"; //Контекст приложения import { P8P_GANTT_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения import { P8PGantt } from "../../components/p8p_gantt"; //Диаграмма Ганта -import { formatDateJSONDateOnly } from "../../core/utils"; //Вспомогательные функции +import { xml2JSON, formatDateJSONDateOnly } from "../../core/utils"; //Вспомогательные функции import { useFilteredPlans } from "./hooks"; //Вспомогательные хуки -import { XMLParser } from "fast-xml-parser"; //--------- //Константы @@ -49,23 +48,12 @@ const STYLES = { //------------------------------------ //Разбор XML с данными спецификации производственной программы -const parseProdPlanSpXML = xmlDoc => { - return new Promise((resolve, reject) => { - try { - const parser = new XMLParser({ - 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); - } +const parseProdPlanSpXML = async xmlDoc => { + const data = await xml2JSON({ + xmlDoc, + attributeValueProcessor: (name, val) => (name == "numb" ? undefined : ["start", "end"].includes(name) ? formatDateJSONDateOnly(val) : val) }); + return data.XDATA; }; //Список планов