Available only in PRO Edition
Since 5.1
Компонент доступен для пользователей Webix Pro.
Webix Dashboard - это компактный, но гибкий компонент, который поможет вам создавать легко настраиваемые веб-приложения. Используя Dashboard вы можете собирать различные компоненты на одной странице, с легкостью перемещать их перетягиванием, сохранять и восстанавливать состояние приложения.
Компонент Dashboard основан на Grid Layout, поэтому все внутренние элементы лежат в ячейках расположенных в строках и столбцах.
Для инициализации Dashboard, используйте код ниже:
webix.ui({
view:"dashboard",
gridColumns:4, gridRows:3,
cellHeight: 200, cellWidth: 200,
cells:[
{ view:"panel", x:0, y:0, dx:1, dy:1, body:{ template:"Single"}},
{ view:"panel", x:1, y:0, dx:2, dy:1, body:{ template:"Wide"}},
{ view:"panel", x:1, y:1, dx:2, dy:2, header:"Widget with header",
body:{ template:"Square"}}
// больше ячеек
]
});
Ячейка Dashboard наследует свои атрибуты от ячейки Grid Layout:
Каждая ячейка Dashboard содержит специальный компонент panel, который служит контейнером для других виджетов. Компонент panel получает набор координат, определяющий его положение, ширину и длину. Panel состоит из body и header. В body вы можете поместить другой компонент или темплейт. Необязательный header можно использовать как заголовок или неактивный элемент для перетягивания компонента на странице.
Список свойств компонента view:"panel"
:
false
. Чтобы задать иконку, укажите ее полное название как строку, например "mdi mdi-menu".
Подробнее о иконках; false
;Related sample: Grid Dashboard
Полный список свойств, методов и событий Panel в справочнике API.
Вы можете настраивать сетку Dashboard, определяя количество строк и столбцов с помощью соответствующих свойств - gridRows и gridColumns. По умолчанию сетка Dashboard содержит 2 строки и 2 столбца.
webix.ui({
view:"dashboard",
gridColumns:4, gridRows:3,
cells:[
{ view:"panel", x:0, y:0, dx:1, dy:1, body:{template:"Single"}},
{ view:"panel", x:1, y:0, dx:2, dy:1, body:{template:"Wide 1"}}
// больше ячеек
]
});
Вы можете задать ширину и высоту ячейки в пикселях с помощью соответствующих свойств cellHeight и cellWidth.
После чего вы можете определить относительные размеры каждый ячейки отдельно, используя для этого свойства dx и dy.
webix.ui({
view:"dashboard",
gridColumns:4, gridRows:3,
cellHeight: 150, cellWidth: 200,
cells:[
{ view:"panel", id:"a", x:0, y:0, dx:1, dy:1, body:{template:"Single"}},
{ view:"panel", id:"b", x:1, y:0, dx:2, dy:1, body:{template:"Wide 1"}}
// больше ячеек
]
});
В примере выше ширина ячейки "b" в два раза больше ширины ячейки "a".
Вы можете установить нужное выравнивание компонента используя свойства margin и padding.
По умолчанию значения для обоих параметров равно 10
.
Чтобы изменять горизонтальный и вертикальный отступы отдельно, используйте свойства paddingX и paddingY.
webix.ui({
view:"dashboard",
gridColumns:4, gridRows:3,
margin:20,
// paddingY:20
padding 20,
cells:[
{ view:"panel", x:0, y:0, dx:1, dy:1, body:{template:"Single"}},
{ view:"panel", x:1, y:0, dx:2, dy:1, body:{template:"Wide 1"}}
// больше ячеек
]
});
Вы можете добавить новый компонент в Dashboard с помощью метода addView. Метод принимает два параметра:
$$("grid").addView({ view:"panel", body:{template:"New"}, x:1, y:1, dx:1, dy:1 });
Чтобы удалить компонент, примените метод removeView. Метод может принимать в качестве параметра объект вложенного компонента или его ID:
webix.ui({
view:"dashboard",
id:"grid",
cells:[
{ view:"panel", id:"a", x:0, y:0, dx:1, dy:1, body:{template:"Single"}},
{ view:"panel", id:"b", x:1, y:0, dx:2, dy:1, body:{template:"Wide 1"}}
// больше ячеек
]
});
$$("grid").removeView("a");
Вы можете добавить хедер для каждой панели. Хедер может содержать текст или сложный объект компонента, например тулбар с кнопками. Рассмотрим на примерах:
webix.ui({
view:"dashboard",
// конфигурация dashboard
cells:[
{ view:"panel", x:0, y:1, dx:2, dy:1, header:"Pie Chart", body:{
view:"chart", type:"pie", value:"#votes#", data:small_film_set
}},
// другие панели
]
});
webix.ui({
view:"dashboard",
// конфигурация dashboard
cells:[
{ view:"panel", x:0, y:0, dx:3, dy:1, body:{
view:"datatable", autoConfig:true, data: small_film_set, scroll:false
},
header:{
view:"toolbar", id:"myToolbar",
cols:[
{ view:"button", value:"Load", width:100, align:"left" },
{ view:"button", value:"Save", width:100, align:"center" },
{ view:"button", value:"Info", width:100, align:"right" },
{},
{ view:"icon", icon:"fas fa-times-circle"}
]
}},
// другие панели
]
});
Доступные для перетягивания зоны определяются подсвечиванием. По умолчанию при перетягивании перемещается весь компонент. За перемещение компонентов отвечает CSS класс "panel_drag".
Для отслеживания событий на странице и управления драг-н-дроп, у Dashboard есть специальные события. Например, чтобы запретить перетягивать определенную панель, вы можете использовать событие onBeforeDrag или onBeforeDrop:
webix.ui({
view:"dashboard", id:"dashboard",
cells:[
{ view:"panel", x:0, y:0, dx:1, dy:1,
body:{ template:"Draggable"}, drag:true },
{ view:"panel", x:1, y:0, dx:2, dy:1,
body:{ template:"Non-draggable"}, drag:false }
]
});
$$("dashboard").attachEvent("onBeforeDrag", function(context){
// если вернет false, запретит перетягивание панели
// context.source - это панель, которую нужно перетянуть
return context.source.config.drag;
});
Вы можете с легкостью задать новое положение и изменить размер компонента с помощью метода moveView. Метод принимает два параметра:
webix.ui({
view:"dashboard",
id:"grid",
cells:[
{ view:"panel", id:"a", x:0, y:0, dx:1, dy:1, body:{template:"Single"}},
{ view:"panel", id:"b", x:1, y:0, dx:2, dy:1, body:{template:"Wide 1"}}
// больше ячеек
]
});
$$("grid").moveView("a", { x:0, y:0, dx:2, dy:2 });
Чтобы поместить компонент в ячейку Dashboard, задайте его view
, источник данных и другую нужную информацию в body компонента "Panel":
webix.ui({
view:"dashboard",
gridColumns:4, gridRows:3,
cellHeight: 200, cellWidth: 200,
cells:[
{ view:"panel", x:0, y:0, dx:1, dy:1, resize:true, body:{
view:"chart", type:"pie", value:"#votes#", data:dataset
}},
{ view:"panel", x:1, y:0, dx:2, dy:1, resize:true, body:{
view:"chart", type:"spline", value:"#votes#", data:dataset}},
{ view:"panel", x:0, y:1, dx:1, dy:2, resize:true,body:{
view:"list", template:"#votes#", data:dataset, scroll:false}
},
{ view:"panel", type:"space", header:"Widget with header",
x:1, y:1, dx:3, dy:2, resize:true, body:{
view:"datatable", autoConfig:true, data:dataset, scroll:false
}
}
// больше ячеек
]
});
Чтобы добавить меню, укажите соответствующую иконку (например "mdi mdi-menu" или любую другую), задайте само меню и логику взаимодействия с ним по клику на иконку.
webix.ui({
view:"dashboard", id:"grid",
gridColumns:4, gridRows:4,
cellHeight: 200,
cells:[
{ view:"panel", icon:"mdi mdi-menu", header:"Chart", x:0, y:0, dx:2, dy:1,
body:{
view:"chart", type:"spline", value:"#votes#", data:small_film_set
}
}
]
});
var menu = webix.ui({
view:"contextmenu",
data:[
{ id:"add", value:"Add" },
{ id:"update", value:"Update" },
{ id:"delete", value:"Delete" }
]
});
webix.event(document.body, "click", function(ev){
var css = ev.target.className;
if (css && css.toString().indexOf("panel_icon") != -1){
menu.setContext(webix.$$(ev.target));
menu.show(ev.target);
}
});
Related sample: Grid Dashboard - Action Menu
Webix Dashboard позволяет сохранять/восстанавливать состояние панели в куки, локальное хранилище или хранилище сессии. Вам нужно сохранить конфигурацию всех компонентов внутри панелей Dashboard, чтобы впоследствии вы могли использовать их несколько раз.
var widgets = {
view:"list", id:"list",
width:200,
drag:true,
template:"#value# - (#dx#x#dy#)",
data:[
{ id:"a", value:"Widget A", dx:1, dy:1 },
{ id:"b", value:"Widget B", dx:1, dy:2 },
{ id:"c", value:"Widget C", dx:2, dy:1 },
// другие панели
]
};
webix.ui({
type:"space", cols:[
{ view:"scrollview", body:grid },
widgets
]
});
Затем, вы может инициализировать панели, используя эти объекты конфигурации с помощью функции заданной в свойстве factory. Свойство принимает один параметр:
webix.ui({
view:"dashboard",
id:"grid",
gridColumns:4, gridRows:4,
factory:function(obj){
obj.view = "panel";
obj.resize = true;
obj.body = { template: $$("list").getItem(obj.name).value };
return obj;
}
});
Теперь все готово для работы с состоянием Dashboard.
Чтобы сохранить текущее состояние Dashboard в локальное хранилище, вызовите метод serialize как в примере ниже:
var state = $$("grid").serialize(serializer);
webix.storage.local.put("grid-dashboard-state", state);
В качестве параметра метод serialize() принимает функцию serializer, которая содержит логику сериализации каждого отдельного компонента внутри body панели.
Чтобы восстановить содержимое панелей, нужно получить из хранилища объект state по его имени и вызвать метод restore. Метод принимает два параметра:
var state = webix.storage.local.get("grid-dashboard-state");
$$("grid").restore(state,factory);
Объявленная выше функция factory реализует логику создания панелей. Она вернет панель из существующей конфигурации (конфигурации хранятся в объекте widgets), на которую будет ссылаться по ID.
Related sample: Grid Dashboard - Saving State
Вы можете задать обработчик onChange событиям Dashboard, таким как добавление, удаление или перемещение:
$$("grid").attachEvent("onChange",function(){
// webix.message("Компонент был перемещен")
});
Related sample: Grid Dashboard - Saving State
Наверх