DHTMLX Vue JS Gantt chart is a separate Gantt chart library for your Vue.js application.
There are two different products, DHTMLX Gantt and Vue Gantt. While they are very similar in UX, they are very different in API.
npm install @dhtmlx/trial-vue-gantt
This command will install the Trial version, for Commercial one, use "@dhx/vue-gantt".
import { Gantt, DefaultTheme } from "@dhtmlx/trial-vue-gantt";
export default function GanttBasic() {
return (
<DefaultTheme>
<Gantt />
</DefaultTheme>
);
}
You can check the demo of our minimal project here. You will find the source code of the gantt in the node_modules/@dhtmlx/trial-vue-gantt/src folder.
The vue-gantt package includes two predefined themes - Default and Material.
You can apply the desired theme by wrapping Gantt into the DefaultTheme or MaterialTheme tags:
<div>
<DefaultTheme>
<Gantt />
</DefaultTheme>
<MaterialTheme>
<Gantt />
</MaterialTheme>
</div>
or you can just add the theme tag on the page and add a skin class into one of the parent tags of Gantt:
<div>
<DefaultTheme />
<MaterialTheme />
<div class="wx-default">
<Gantt />
</div>
<div class="wx-material">
<Gantt />
</div>
</div>
You can define scales/columns/tasks/links during Gantt initialization:
<Gantt :scales="scales" :columns="columns" :tasks="tasks" :links="links" />
where data may look like this:
const scales = [
{ unit: "month", step: 1, format: "MMMM yyy" },
{ unit: "day", step: 1, format: "d" },
];
const columns = [
{ name: "text", label: "Task name", width: "100%" },
{ name: "start", label: "Start time", align: "center" },
{ name: "duration", label: "Duration", width: "70px", align: "center" },
{ name: "add-task", label: "", width: "50px", align: "center" },
];
const tasks = [
{
id: 1,
open: true,
start_date: "2020-11-06",
duration: 8,
text: "vue Gantt Widget",
progress: 60,
type: "project",
},
{
id: 2,
parent: 1,
start_date: "2020-11-06",
duration: 4,
text: "Lib-Gantt",
progress: 80,
},
];
const links = [{ source: 2, target: 1, type: 0 }];
Let's take a look at GanttBackend.vue.
Code defines the action handler through the save event. This event will be triggered on any update and may be used to save changes to the persistent storage.
In the above example, the RestDataProvider is used. You are not limited to this solution, though, and can extend the provided class or define a custom handler.
We provide you with 2 demo backends:
Again, you are not limited to this solution. The above RestDataProvider can work with any REST like service and you can implement a fully custom solution (sockets, graphql, etc.) through a custom save event.
The following elements can be customized via templates:
Сheck the code example here.
Сheck the code example here.
// templates for different elements of gantt
let templates = {};
// array of markers
let markers = [];
// supported task types
let taskTypes = ["task", "project", "milestone"];
// tasks data
let tasks = [];
// links data
let links = [];
// time scales configuration
let scales = [
{ unit: "month", step: 1, format: "MMMM yyy" },
{ unit: "day", step: 1, format: "d" },
];
// grid configuration
let columns = [
{ name: "text", label: "Task name", width: "100%" },
{ name: "add-task", label: "", width: "50px", align: "center" },
];
// time scale start
let start = null;
// time scale end
let end = null;
// width of scale cell
let cellWidth = 100;
// height of chart bar
let cellHeight = 38;
// height of scale cell
let scaleHeight = 30;
// read-only mode flag
let readonly = false;
// show or hide grid
let grid = true;
// show or hide tooltips
let tooltip = null;
// show or hide borders in the chart area
let borders = "full";
// will be called with DataStore value on Gantt initialization
let store = null;
// will be called on any action in the Gantt
let actions = null;
// will be called on any data modification in the Gantt
let save = null;
Data modifications ( both action and save events )
UI State ( action event )
function handler({ action, obj, id }){
if (action === "select-task")
console.log(`Task ${id} was selected`);
}
<Gantt @action="handler"/>
Retrieve the store object:
let store;
<Gantt @store="v => store = v" />
and now you can use the store's API to get or modify data:
interface IStore {
getTask(id: number): GanttItemData;
updateTask(id: number, obj: any, noSave: boolean): void;
updateLink(id: number, obj: any, noSave: boolean): void;
action(
id: number,
action: string,
obj: StringHash<any>,
noSave?: boolean
): number;
}
The action method can be used to trigger any of the above actions:
store.action(taskId, "tasks-toggle");
store.action(linkId, "delete-link");
store.action(null, "add-link", { source: 1, target: 2, type: 0 });
Back to top