{{tag>dev widget Инвентаризация}} ====== Инвентаризация: Widget: RackWidget ====== Рисовалка корзин для устройств с корзинами, шкафов/шасси и т.п. Параметры корзины задаются json строкой со структурой корзины (для каждого устройства может быть определена одна двусторонняя корзина спереди или сзади / две различных корзины спереди и сзади) { "cols":[ {"type":"units","count":1,"size":60}, //колонка с юнитами (размер всей колонки) {"type":"void","size":60}, //пустая колонка {"type":"units","count":1,"size":60} ], "rows":[ {"type":"title","size":"12"}, //строка заголовка {"type":"units","count":6,"size":120}, //строка юнитов (размер всей строки) {"type":"void","size":40}, //пустая строка {"type":"units","count":2,"size":60} ], "hEnumeration":"1", //нумерация по горизонтали - справа налево (таблица рисуется слева направо же) "vEnumeration":"1", //по вертикали сверху вниз - (также как таблица) "priorEnumeration":"v", //сначала по рядам (h), потом по колонкам (v) "evenEnumeration":"-1", //на четных рядах прямая нумерация или обратная (нумеруем змейкой или пилой) "labelWidth":"20", //ширина метки "labelMode":"h", //метки юнита слева "labelPre":"1", //метки юнита справа "labelPost":"1" "evenLabelShift":"1", //на четных рядах метку переставлять на другую сторону } ==== Рендер таблицами ==== Описать сам рендер не успел, но очевидно что конфиги заточены под эти таблицы, и технически все реализуется относительно тривиально. Опишу проблемы. * Размер таблиц подстраивается под контент и то что задано конфигом легко может уплыть в сторону того как получилось. (В основном страдает высота строк из-за размера шрифта и ширина меток). * Масштабирование текста: количество строк может быть разным, при достаточно большом их количестве они должны быть весьма мелкими, но нет CSS свойства размера шрифта в зависимости от размера контейнера (только от размера Viewport). Из того что удалось нагуглить - используйте SVG. * Гемор с Colspan/Rowspan с учетом с того что метки юнитов это отдельные ячейки в таблице * Не реализованный, но ожидаемый гемор с вертикальными надписями если блейды будут вертикальными ==== Рендер SVG ==== * Размер Viewport SVG задаем в соответствии с размерами шкафа. Таким образом внутри работает по естественным координатам: \\ {{:инвентаризация:dev:widget:pasted:20230402-085157.png}}