Help us shape the 2021 DevExtreme Roadmap. Take our 5 minute survey.
Dismiss
Your search did not match any results.
Diagram

OrgChart Shapes

The Diagram UI component provides shapes with images that are specially designed for use in OrgCharts. You can select a shape with the following image positions: on the left, right, or top of the shape.

In this demo, the Diagram is bound to a data source. The imageUrlExpr property specifies the name of a field that provides a path to images.

Copy to CodeSandBox
Apply
Reset
<template> <DxDiagram id="diagram" ref="diagram" > <DxNodes :data-source="orgItemsDataSource" :image-url-expr="'picture'" > <DxAutoLayout :type="'tree'" :orientation="'horizontal'" /> </DxNodes> <DxEdges :data-source="orgLinksDataSource"/> <DxToolbox> <DxGroup :category="'general'" :title="'General'" /> <DxGroup :category="'orgChart'" :title="'Organizational Chart'" :expanded="true" /> </DxToolbox> </DxDiagram> </template> <script> import { DxDiagram, DxNodes, DxAutoLayout, DxEdges, DxToolbox, DxGroup } from 'devextreme-vue/diagram'; import ArrayStore from 'devextreme/data/array_store'; import service from './data.js'; export default { components: { DxDiagram, DxNodes, DxAutoLayout, DxEdges, DxToolbox, DxGroup }, data() { return { orgItemsDataSource: new ArrayStore({ key: 'id', data: service.getOrgItems() }), orgLinksDataSource: new ArrayStore({ key: 'id', data: service.getOrgLinks() }) }; } }; </script> <style scoped> #diagram { height: 900px; } </style>
import { createApp } from 'vue'; import App from './App.vue'; createApp(App).mount('#app');
<!DOCTYPE html> <html> <head> <title>DevExtreme Demo</title> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/20.2.5/css/dx.common.css" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/20.2.5/css/dx.light.css" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/20.2.5/css/dx-diagram.css" /> <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css" /> <script src="https://unpkg.com/core-js@2.4.1/client/shim.min.js"></script> <script src="https://unpkg.com/systemjs@0.21.3/dist/system.js"></script> <script type="text/javascript" src="config.js"></script> <script type="text/javascript"> System.import('./index.js'); </script> </head> <body class="dx-viewport"> <div class="demo-container"> <div id="app"> </div> </div> </body> </html>
var orgItems = [ { 'id': '106', 'text': 'Development', 'type': 'ellipse' }, { 'id': '107', 'text': 'WinForms\nTeam', 'type': 'ellipse' }, { 'id': '108', 'text': 'WPF\nTeam', 'type': 'ellipse' }, { 'id': '109', 'text': 'Javascript\nTeam', 'type': 'ellipse' }, { 'id': '110', 'text': 'ASP.NET\nTeam', 'type': 'ellipse' }, { 'id': '112', 'text': 'Ken Samuelson', 'type': 'cardWithImageOnLeft', 'picture': '../../../../images/employees/32.png' }, { 'id': '113', 'text': 'Terry Bradley', 'type': 'cardWithImageOnLeft', 'picture': '../../../../images/employees/33.png' }, { 'id': '115', 'text': 'Nat Maguiree', 'type': 'cardWithImageOnLeft', 'picture': '../../../../images/employees/34.png' }, { 'id': '116', 'text': 'Gabe Jones', 'type': 'cardWithImageOnLeft', 'picture': '../../../../images/employees/35.png' }, { 'id': '117', 'text': 'Lucy Ball', 'type': 'cardWithImageOnLeft', 'picture': '../../../../images/employees/36.png' }, { 'id': '119', 'text': 'Bart Arnaz', 'type': 'cardWithImageOnLeft', 'picture': '../../../../images/employees/37.png' }, { 'id': '120', 'text': 'Leah Simpson', 'type': 'cardWithImageOnLeft', 'picture': '../../../../images/employees/38.png' }, { 'id': '122', 'text': 'Hannah Brookly', 'type': 'cardWithImageOnLeft', 'picture': '../../../../images/employees/39.png' }, { 'id': '123', 'text': 'Arnie Schwartz', 'type': 'cardWithImageOnLeft', 'picture': '../../../../images/employees/40.png' } ]; var orgLinks = [ { 'id': '124', 'from': '106', 'to': '108', }, { 'id': '125', 'from': '106', 'to': '109', }, { 'id': '126', 'from': '106', 'to': '107', }, { 'id': '127', 'from': '106', 'to': '110', }, { 'id': '129', 'from': '110', 'to': '112', }, { 'id': '130', 'from': '110', 'to': '113', }, { 'id': '132', 'from': '107', 'to': '115', }, { 'id': '133', 'from': '107', 'to': '116', }, { 'id': '134', 'from': '107', 'to': '117', }, { 'id': '136', 'from': '108', 'to': '119', }, { 'id': '137', 'from': '108', 'to': '120', }, { 'id': '139', 'from': '109', 'to': '122', }, { 'id': '140', 'from': '109', 'to': '123', } ]; export default { getOrgItems() { return orgItems; }, getOrgLinks() { return orgLinks; } };
System.config({ transpiler: 'plugin-babel', meta: { '*.vue': { loader: 'vue-loader' }, 'devextreme/localization.js': { "esModule": true }, }, paths: { 'npm:': 'https://unpkg.com/' }, map: { 'vue': 'npm:vue@3.0.0/dist/vue.esm-browser.js', 'vue-loader': 'npm:dx-systemjs-vue-browser@1.0.15/index.js', 'mitt': 'npm:mitt/dist/mitt.umd.js', 'rrule': 'npm:rrule@2.6.6/dist/es5/rrule.js', 'luxon': 'npm:luxon@1.25.0/build/global/luxon.min.js', 'es6-object-assign': 'npm:es6-object-assign@1.1.0', 'devextreme': 'npm:devextreme@20.2.5', 'devextreme-vue': 'npm:devextreme-vue@20.2.5', 'jszip': 'npm:jszip@3.5.0/dist/jszip.min.js', 'devextreme-quill': 'npm:devextreme-quill@0.9.8/dist/dx-quill.min.js', 'devexpress-diagram': 'npm:devexpress-diagram@2.0.11/dist/dx-diagram.js', 'devexpress-gantt': 'npm:devexpress-gantt@2.0.18/dist/dx-gantt.js', 'preact': 'npm:preact@10.5.11/dist/preact.js', 'preact/hooks': 'npm:preact@10.5.11/hooks/dist/hooks.js', 'plugin-babel': 'npm:systemjs-plugin-babel@0.0.25/plugin-babel.js', 'systemjs-babel-build': 'npm:systemjs-plugin-babel@0.0.25/systemjs-babel-browser.js' }, packages: { 'devextreme-vue': { main: 'index.js' }, 'devextreme': { defaultExtension: 'js' }, 'devextreme/events/utils': { main: 'index' }, 'devextreme/events': { main: 'index' }, 'es6-object-assign': { main: './index.js', defaultExtension: 'js' } }, babelOptions: { sourceMaps: false, stage0: true } });