vault backup: 2025-11-06 17:11:10
This commit is contained in:
6
.obsidian/workspace.json
vendored
6
.obsidian/workspace.json
vendored
@@ -57,9 +57,9 @@
|
||||
"state": {
|
||||
"file": "WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/Динамические поля заявки v2.canvas",
|
||||
"viewState": {
|
||||
"x": 231.4214988644967,
|
||||
"y": 396.70704012112026,
|
||||
"zoom": -0.38571840947120495
|
||||
"x": 64.5,
|
||||
"y": 425.5,
|
||||
"zoom": -0.36721020129267584
|
||||
}
|
||||
},
|
||||
"icon": "lucide-layout-dashboard",
|
||||
|
||||
@@ -1,17 +1,22 @@
|
||||
{
|
||||
"nodes":[
|
||||
{"id":"63bc932b6e788337","x":-751,"y":-349,"width":431,"height":1549,"type":"group","label":"Типы данных"},
|
||||
{"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":"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":"62eb2ec107a95275","x":-200,"y":0,"width":480,"height":340,"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":"4bddbcfea022b3d9","type":"text","text":"**Инициализация фронтенда**\n\nГрузим фронтенд + запрашиваем массив динамических полей для рендеринга","x":440,"y":-329,"width":480,"height":309}
|
||||
{"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":"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"}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user