#
jordium-gantt-vue3
**π Languages**: [π English Documentation](./README-EN.md) | [π δΈζζζ‘£](./README.md)
[](https://www.npmjs.com/package/jordium-gantt-vue3)
[](https://opensource.org/licenses/MIT)
[](https://vuejs.org/)
[](https://www.typescriptlang.org/)
> Modern Vue 3 Gantt chart component library providing complete solutions for project management and task scheduling
## π Online Demo
π― **[Try Github Live Demo β](https://nelson820125.github.io/jordium-gantt-vue3/)**
*The online demo includes full feature showcase: task management, milestones, theme switching, internationalization, etc.*
## π¨ Theme Support
### Light Theme

### Dark Theme

## π Features
- π **Complete Functionality**: Task management, milestone tracking, dependency relationships, progress visualization
- π¨ **Theme Switching**: Built-in light/dark themes with customizable theme variables
- π±οΈ **Rich Interactions**: Drag adjustment, resizing, double-click editing, context menus
- π **Internationalization**: Built-in Chinese/English support with custom language pack capability
- π± **Responsive**: Desktop and mobile compatible with smooth touch experience
- β‘ **High Performance**: Virtual scrolling, lazy loading, optimized rendering
- π§ **Extensible**: Rich API interfaces supporting custom components and events
- π **Type Safe**: Complete TypeScript support for better development experience
## π¦ Installation
```bash
# npm
npm install jordium-gantt-vue3
# yarn
yarn add jordium-gantt-vue3
# pnpm
pnpm add jordium-gantt-vue3
```
## π License
[MIT License](./LICENSE) Β© 2025 JordiUM
---
## π Project Structure
```
jordium-gantt-vue3/
βββ src/ # Source code directory
β βββ components/ # Core Vue components
β β βββ GanttChart.vue # Main entry component
β β βββ TaskList.vue # Task list component
β β βββ Timeline.vue # Timeline component
β β βββ TaskBar.vue # Task bar component
β β βββ TaskDrawer.vue # Task edit drawer
β β βββ TaskContextMenu.vue # Task context menu
β β βββ GanttToolbar.vue # Toolbar component
β β βββ MilestonePoint.vue # Milestone point
β β βββ MilestoneDialog.vue # Milestone dialog
β β βββ DatePicker.vue # Date picker
β β βββ ... # Other components
β βββ models/ # Data models and configurations
β β βββ classes/ # Class definitions
β β β βββ Task.ts # Task model
β β β βββ Milestone.ts # Milestone model
β β β βββ Language.ts # Language configuration
β β βββ configs/ # Configuration interfaces
β β β βββ TimelineConfig.ts # Timeline configuration
β β β βββ ToolbarConfig.ts # Toolbar configuration
β β βββ types/ # Type definitions
β β βββ TimelineScale.ts # Timeline scale types
β βββ composables/ # Vue composable functions
β β βββ useI18n.ts # Internationalization utilities
β β βββ useMessage.ts # Message utilities
β βββ styles/ # Style files
β β βββ app.css # Main styles
β β βββ theme-variables.css # Theme variables
β βββ utils/ # Utility functions
β β βββ predecessorUtils.ts # Predecessor utilities
β βββ index.ts # Export entry
βββ demo/ # Development demo & interactive showcase
β βββ App.vue # Demo application main component
β βββ data.json # Demo data (includes clinical trial examples)
β βββ main.ts # Demo application entry
β βββ ... # Other demo files
βββ packageDemo/ # npm package integration demo
βββ dist/ # Build output directory
βββ docs/ # Documentation
βββ design/ # Design resources and screenshots
β βββ screenshots/ # Theme screenshots
βββ public/ # Public static resources
β βββ assets/ # Static asset files
βββ README.md # Chinese documentation
βββ README-EN.md # English documentation
βββ package.json # Project configuration
βββ vite.config.ts # Vite development configuration
βββ vite.config.lib.ts # Vite library build configuration
βββ tsconfig.json # TypeScript configuration
βββ ... # Other configuration files and metadata
```
### Directory Description
- **`src/components/`**: Core Vue components containing all Gantt chart functionality
- **`src/models/`**: Data models, type definitions and configuration interfaces
- **`src/composables/`**: Vue 3 composable functions providing reusable logic
- **`src/styles/`**: Style files including theme system and CSS variables
- **`src/utils/`**: Utility functions for business logic and data transformation
- **`demo/`**: Local development and feature demonstration with complete interactive pages and clinical trial sample data
- **`packageDemo/`**: Simulates npm package integration in external projects
- **`dist/`**: Build output directory for npm publishing or static sites
- **`docs/`**: Project documentation including deployment guides and API references
## π§ API Reference
### GanttChart Properties
| Property | Type | Default | Description |
|----------|------|---------|-------------|
| `tasks` | `Task[]` | `[]` | Task data array |
| `milestones` | `Task[]` | `[]` | Milestone data array |
| `editComponent` | `any` | - | Custom edit component |
| `useDefaultDrawer` | `boolean` | `true` | Use default edit drawer |
| `showToolbar` | `boolean` | `true` | Show toolbar |
| `toolbarConfig` | `ToolbarConfig` | `{}` | Toolbar configuration |
| `localeMessages` | `Partial` | - | Custom locale messages |
| `workingHours` | `WorkingHours` | - | Working hours configuration |
| `onTaskDoubleClick` | `(task: Task) => void` | - | Task double-click event callback |
| `onTaskDelete` | `(task: Task, deleteChildren?: boolean) => void` | - | Task delete event callback |
| `onTaskUpdate` | `(task: Task) => void` | - | Task update event callback |
| `onTaskAdd` | `(task: Task) => void` | - | Task add event callback |
| `onMilestoneSave` | `(milestone: Task) => void` | - | Milestone save event callback |
| `onMilestoneDelete` | `(milestoneId: number) => void` | - | Milestone delete event callback |
| `onMilestoneIconChange` | `(milestoneId: number, icon: string) => void` | - | Milestone icon change event callback |
| `onAddTask` | `() => void` | - | Add task toolbar event callback |
| `onAddMilestone` | `() => void` | - | Add milestone toolbar event callback |
| `onTodayLocate` | `() => void` | - | Locate today toolbar event callback |
| `onExportCsv` | `() => boolean \| void` | - | Export CSV toolbar event callback |
| `onExportPdf` | `() => void` | - | Export PDF toolbar event callback |
| `onLanguageChange` | `(lang: 'zh-CN' \| 'en-US') => void` | - | Language change toolbar event callback |
| `onThemeChange` | `(isDark: boolean) => void` | - | Theme change toolbar event callback |
| `onFullscreenChange` | `(isFullscreen: boolean) => void` | - | Fullscreen change toolbar event callback |
### GanttChart Events
| Event | Parameters | Description |
|--------------------|----------------------------|------------------------------------|
| `taskbar-drag-end` | `task: Task` | Task bar drag end |
| `taskbar-resize-end` | `task: Task` | Task bar resize end |
| `milestone-drag-end` | `milestone: Task` | Milestone drag end |
| `predecessor-added`| `{ targetTask, newTask }` | Triggered after adding predecessor.
Parameters:
β’ `targetTask`: The task to which a predecessor was added (Task object)
β’ `newTask`: The newly added predecessor task (Task object) |
| `successor-added` | `{ targetTask, newTask }` | Triggered after adding successor.
Parameters:
β’ `targetTask`: The task to which a successor was added (Task object)
β’ `newTask`: The newly added successor task (Task object) |
| `task-deleted` | `{ task }` | Triggered after deleting a task |
| `task-added` | `{ task }` | Triggered after creating a task |
| `task-updated` | `{ task }` | Triggered after updating a task |
#### Timer Event Usage Example
```vue
```
#### Task Event Usage Example
```vue
```
### Data Types
#### Core Types (src/models/classes)
**Task Type**
```typescript
export interface Task {
id: number // Unique task ID
name: string // Task name
predecessor?: number[] // Predecessor task ID array
assignee?: string // Assignee
startDate?: string // Start date (ISO string)
endDate?: string // End date (ISO string)
progress?: number // Progress percentage 0-100
estimatedHours?: number // Estimated hours (supports decimal, up to 2 decimal places)
actualHours?: number // Actual hours (supports decimal, up to 2 decimal places)
parentId?: number // Parent task ID
children?: Task[] // Subtask array
collapsed?: boolean // Collapsed state
isParent?: boolean // Is parent task
type?: string // Task type (e.g. task, story, milestone)
description?: string // Task description
icon?: string // Icon
level?: number // Level
// Timer related fields
isTimerRunning?: boolean // Is timer running
timerStartTime?: number // Timer start timestamp
timerEndTime?: number // Timer end timestamp
timerStartDesc?: string // Timer start description
timerElapsedTime?: number // Accumulated timer duration (seconds)
}
```
**Milestone Type**
```typescript
// Milestone is actually a special usage of Task type
// Task object with type: 'milestone' property
interface Milestone extends Task {
type: 'milestone' // Must be 'milestone'
startDate: string // Milestone date (required)
endDate?: string // End date (optional, usually same as startDate)
}
```
**Language Type**
```typescript
type Language = 'zh' | 'en' // Supported language types
type Locale = 'zh-CN' | 'en-US' // Complete language locale identifiers
```
#### Configuration Types (src/models/configs)
**TimelineConfig**
```typescript
interface TimelineConfig {
startDate: Date // Timeline start date
endDate: Date // Timeline end date
zoomLevel: number // Zoom level
}
```
**ToolbarConfig**
```typescript
interface ToolbarConfig {
showAddTask?: boolean // Show add task button
showAddMilestone?: boolean // Show add milestone button
showTodayLocate?: boolean // Show locate today button
showExportCsv?: boolean // Show export CSV button
showExportPdf?: boolean // Show export PDF button
showLanguage?: boolean // Show language switch button
showTheme?: boolean // Show theme switch button
showFullscreen?: boolean // Show fullscreen toggle button
showTimeScale?: boolean // Show time scale toggle buttons (Day|Week|Month)
}
```
**WorkingHours Configuration**
```typescript
interface WorkingHours {
morning?: { start: number; end: number } // Morning work hours, e.g. { start: 8, end: 11 }
afternoon?: { start: number; end: number } // Afternoon work hours, e.g. { start: 13, end: 17 }
}
```
**TimelineScale Types**
```typescript
// Timeline display scale types
type TimelineScale = 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'year'
// Timeline scale constants
export const TimelineScale = {
HOUR: 'hour', // Hour view - each column displays one hour
DAY: 'day', // Day view - each column displays one day
WEEK: 'week', // Week view - each column displays one week
MONTH: 'month', // Month view - each column displays one month
QUARTER: 'quarter', // Quarter view - each column displays one quarter
YEAR: 'year', // Year view - each column displays one year
}
// Timeline scale configuration
interface TimelineScaleConfig {
scale: TimelineScale // Scale type
cellWidth: number // Width of each time unit (px)
headerLevels: number // Number of header levels
formatters: {
primary: string // Primary time label format
secondary?: string // Secondary time label format
}
}
```
### π Timeline Scale Features
The component supports multiple timeline scale displays. Users can switch timeline granularity through the Day/Week/Month button group in the toolbar or programmatically:
#### Built-in Scale Configurations
| Scale Type | Cell Width | Primary Format | Secondary Format | Use Case |
|------------|------------|----------------|------------------|----------|
| `hour` | 40px | yyyy/MM/dd | HH | Short-term projects with hourly precision, such as drug clinical trials |
| `day` | 30px | yyyy/MM | dd | Standard view for daily project management |
| `week` | 120px | yyyy/MM | W | Weekly planning view for medium-term projects |
| `month` | 180px | yyyy | MM | Monthly view for long-term projects |
| `quarter` | 360px | yyyy | Q | Quarterly view for strategic planning |
| `year` | 360px | yyyy | First Half\|Second Half | Annual view for very long-term projects |
#### Usage Example
```vue
```
#### Composable Functions (src/composables)
**useI18n Internationalization Tool**
```typescript
// Provides multi-language support
const {
locale, // Current language
setLocale, // Switch language
t, // Translation function
formatYearMonth // Year-month formatting
} = useI18n()
// Supported languages
type Locale = 'zh-CN' | 'en-US'
```
**useMessage Message Tool**
```typescript
// Provides global message notifications
const { showMessage } = useMessage()
// Message types
type MessageType = 'success' | 'error' | 'warning' | 'info'
// Usage example
showMessage('Operation successful', 'success')
```
## π» Basic Usage
### Simple Example
```vue
```
### Custom Event Handling
```vue
```
### Theme and Internationalization
```vue
```
### π§ Working Hours Configuration
The component supports setting working hours, affecting task duration calculations and progress display:
```vue
```
### π High-Precision Work Hours Management
The component supports work hour recording precise to 2 decimal places, suitable for projects requiring precise billing:
```vue
```
// Handle toolbar events
const handleLanguageChange = (lang) => {
console.log('Language changed to:', lang)
}
const handleThemeChange = (isDark) => {
console.log('Theme changed to:', isDark ? 'dark' : 'light')
}
```
## π€ Contributing & Collaboration
### Contributing
We welcome community contributions! If you want to participate in project development:
1. **Fork** this repository
2. **Create** your feature branch (`git checkout -b feature/AmazingFeature`)
3. **Commit** your changes (`git commit -m 'Add some AmazingFeature'`)
4. **Push** to the branch (`git push origin feature/AmazingFeature`)
5. **Open** a Pull Request
### Report Issues
If you find bugs or have feature suggestions:
- π¬ [Submit Github Issue](https://github.com/nelson820125/jordium-gantt-vue3/issues)
- π¬ [Submit Gitee Issue](https://gitee.com/jordium/jordium-gantt-vue3/issues)
- π§ Send email toοΌning.li@jordium.com / nelson820125@gmail.com / lining820125@163.com
### Business Collaboration
We provide professional technical support and custom development services:
- π’ **Enterprise Customization**: Custom Gantt chart features based on business needs
- πΌ **Technical Consulting**: Project management system architecture design consultation
**Contact Information**οΌ
- π§ Business EmailοΌning.li@jordium.com / nelson820125@gmail.com
### Development Environment
```bash
# Clone project
git clone https://github.com/nelson820125/jordium-gantt-vue3.git
# Install dependencies
npm install
# Start development server
npm run dev
# Build library
npm run build:lib
# Run tests
npm run test
```
---
**π Related Links**
- [GitHub Repository](https://github.com/nelson820125/jordium-gantt-vue3)
- [Changelog](./CHANGELOG.md)
> π‘ **Tip**: If this project helps you, please give us a β Star!