Files
SergObsidian/WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/Динамические поля заявки v2.canvas
2025-11-06 17:11:10 +05:00

22 lines
7.7 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"nodes":[
{"id":"63bc932b6e788337","x":-751,"y":-349,"width":431,"height":1549,"type":"group","label":"Типы и хранение данных"},
{"id":"90e63a87b404a8ea","x":-220,"y":-349,"width":520,"height":1089,"color":"4","type":"group","label":"Ориентировочный workflow для MVP"},
{"id":"82c92d6f3a02a4a6","x":360,"y":-349,"width":520,"height":1089,"color":"6","type":"group","label":"workflow пользовательских полей"},
{"id":"65173e51537acb80","x":-731,"y":-329,"width":391,"height":309,"color":"1","type":"text","text":"**Массив обязательных полей.**\nСюда попадают поля, которые не прописаны в БД, не имеют свойств и работают как сейчас.\n\n- Показываются всегда\n- Валидируются в обычном режиме\n- Сохраняются в обычном режиме в поля таблицы заявки/основания\n- Возможен перенос в массивы данных для удобства хранения/добавления"},
{"id":"815f80b062c9109e","x":-731,"y":0,"width":391,"height":620,"color":"4","type":"text","text":"**Массив опциональных полей**\nМногие поля из текущей конфигурации должны перейти в категорию “опциональных”.\n- Поля созданы нами\n- Свойства каждого поля хранятся в БД -\n\t- наименование поля\n\t- внутреннее наименование для синхронизации с фронтедом\n\t- родительская сущность\n\t- привязка к тарифам\n\t- привязка к типу ОИ\n\t- привязка к типу исследований\n\t- привязка к ПГО / ФИЗ\n\t- свойства валидации Laravel Request\n\t\t- при сохранении\n\t\t- при отправке на согласование\n\t\t- текст ошибки для пользователя\n\t- доступность в документах\n\t\t- макрос/код в документах\n\t\t\t- внутренний код / наименование\n\t"},
{"id":"bb17e362d8091d58","x":-731,"y":640,"width":391,"height":540,"color":"6","type":"text","text":"**Массив пользовательских полей**\nНе входят в MVP.\nПоля, которые могут создавать и пользователи.\nВключают в себя всё вышеперечисленное, но хранятся ОТДЕЛЬНО и рендерятся на фронте отдельным модулем, потому имеют дополнительные свойства:\n- тип поля (текст, мульти/селект, число, файл, массив)\n- некий движок-конструктор получения данных для селектов\n- индекс отображения/положения в интерфейсе\n- связанное/зависимое поле для валидации\n- привязка к конкретной вкладке на фронте\n- упрощённая валидация (тип поступивших данных/обязательность)\n- данные хранятся в json родительской сущности."},
{"id":"40b4c7cf09561259","x":-200,"y":-329,"width":480,"height":309,"type":"text","text":"**Инициализация фронтенда**\n\nНа фронтенде прописаны ВСЕ поля - и обязательные и необязательные. Так же прописано их положение в интерфейсе.\nСо связями и всем прочим. Таким образом мы сильно разгружаемся и ускоряемся.\nПо-умолчанию **все** опциональные поля скрыты."},
{"id":"367f62a87583684f","type":"text","text":"**При сохранении черновика**\n\n- на бэкенд летят все данные и все ОПЦИОНАЛЬНЫЕ поля фильтруются сохраняются в отдельные json-ы (в зависимости от родительской сущности)\n- Проходит мягкая валидация (для сохранения)\n\n**При отправке на согласование**\n\n- Происходит сохранение, но со сменой статуса и с другой валидацией каждого поля.","x":-200,"y":400,"width":480,"height":300},
{"id":"62eb2ec107a95275","x":-200,"y":20,"width":480,"height":340,"type":"text","text":"**Для новой заявки**\n- при выборе всех нужных опций с сервера запрашивается **список доступных опциональных полей** для данной конфигурации. Просто перечисление того, что включать.\n\n**Для существующей заявки**\n- сразу при загрузке теми же модулями определяются настройки и прилетает уже готовый массив с разрешёнными полями (отдельно от данных). Поля включаются на фронте и в них заносятся данные."},
{"id":"4bddbcfea022b3d9","type":"text","text":"**Инициализация фронтенда**\n\nЗдесь нам нужно внедрить **движок рендеринга динамических полей**.\nГрузим фронтенд + запрашиваем массив динамических полей для рендеринга.\nРендерим все обязятельные поля + скрытые опциональные + динамические","x":380,"y":-329,"width":480,"height":309},
{"id":"17c527dd91cc0731","type":"text","text":"**При сохранении черновика**\n\n- Работаем так же, как и в MVP, но сохраняем динамические поля в отдельный массив сущности с простейшей валидацией (чтобы не накидали мусора)\n\n**При отправке на согласование**\n\n- Работаем так же, как и в MVP, но сохраняем динамические поля в отдельный массив сущности с защитой от мусора + с нормальной валидацией (тип/обязательность).","x":380,"y":400,"width":480,"height":300},
{"id":"dfbf582f578a1414","type":"text","text":"**Для новой заявки**\n- Работаем так же, как и в MVP, но отображаем пользовательские пустые поля.\n\n**Для существующей заявки**\n- Работаем так же, как и в MVP, отображаем пользовательские пустые поля и загружаем в них данные из отдельного массива json сущности.","x":380,"y":20,"width":480,"height":340}
],
"edges":[
{"id":"4fc76ce9d4e61348","fromNode":"40b4c7cf09561259","fromSide":"bottom","toNode":"62eb2ec107a95275","toSide":"top"},
{"id":"a3b32f54a016fdba","fromNode":"62eb2ec107a95275","fromSide":"bottom","toNode":"367f62a87583684f","toSide":"top"},
{"id":"bf3b6cbb4d2b7d51","fromNode":"4bddbcfea022b3d9","fromSide":"bottom","toNode":"dfbf582f578a1414","toSide":"top"},
{"id":"88cf47bf897d2ba9","fromNode":"dfbf582f578a1414","fromSide":"bottom","toNode":"17c527dd91cc0731","toSide":"top"}
]
}