jordium-gantt-vue3 1.0.10 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,35 +1,293 @@
1
- # jordium-gantt-vue3
1
+ # <img src="public/assets/jordium-gantt-vue3-logo.svg" alt="jordium-gantt-vue3 logo" width="32" style="vertical-align:middle;margin-right:8px;" /> jordium-gantt-vue3
2
+
3
+ <!-- For English documentation, see README-EN.md -->
4
+ **🌐 Languages**: [📖 English Documentation](./README-EN.md) | [📖 中文文档](./README.md)
2
5
 
3
6
  [![npm version](https://img.shields.io/npm/v/jordium-gantt-vue3.svg?cacheBust=1)](https://www.npmjs.com/package/jordium-gantt-vue3)
4
7
  [![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](https://opensource.org/licenses/MIT)
5
8
  [![Vue 3](https://img.shields.io/badge/vue-3.x-green.svg)](https://vuejs.org/)
6
9
  [![TypeScript](https://img.shields.io/badge/typescript-5.x-blue.svg)](https://www.typescriptlang.org/)
7
10
 
8
- A modern, flexible, and feature-rich Gantt chart component library for Vue 3. Built with TypeScript, supporting drag-and-drop, milestone management, task relationships, theme switching, and internationalization.
11
+ > 现代化的 Vue 3 甘特图组件库,为项目管理和任务调度提供完整解决方案
12
+
13
+ ## 🌐 在线体验
14
+
15
+ 🎯 **[立即体验 Github在线Demo →](https://nelson820125.github.io/jordium-gantt-vue3/)**
16
+
17
+ *在线 Demo 包含完整功能展示:任务管理、里程碑、主题切换、国际化等*
18
+
19
+ ## 🎨 主题支持
20
+
21
+ ### 亮色主题
22
+
23
+ ![亮色主题](design/screenshots/light-theme.png)
24
+
25
+ ### 暗色主题
26
+
27
+ ![暗色主题](design/screenshots/dark-theme.png)
9
28
 
10
- ## Features
29
+ ## 🚀 插件特点
11
30
 
12
- - 🎯 **Task Management**: Create, edit, delete tasks with full CRUD support
13
- - 📅 **Timeline View**: Interactive timeline with drag-and-drop functionality
14
- - 🎯 **Milestone Support**: Add and manage project milestones
15
- - 🔗 **Task Dependencies**: Support for predecessor relationships
16
- - 🎨 **Dual Themes**: Light and dark mode with smooth transitions
17
- - 🌍 **Internationalization**: Built-in Chinese and English support
18
- - 📱 **Responsive Design**: Works seamlessly on desktop and mobile
19
- - 🔧 **Highly Customizable**: Rich API and event system
20
- - 💎 **TypeScript Support**: Full type safety for better development experience
31
+ - 📊 **完整功能**: 任务管理、里程碑追踪、依赖关系、进度可视化
32
+ - 🎨 **主题切换**: 内置亮色/暗色主题,支持自定义主题变量
33
+ - 🖱️ **交互丰富**: 拖拽调整、大小缩放、双击编辑、右键菜单
34
+ - 🌍 **国际化**: 内置中英文,支持自定义语言包
35
+ - 📱 **响应式**: 适配桌面和移动端,流畅的触控体验
36
+ - **高性能**: 虚拟滚动、懒加载、优化渲染
37
+ - 🔧 **可扩展**: 丰富的 API 接口,支持自定义组件和事件
38
+ - 💎 **类型安全**: 完整 TypeScript 支持,开发体验更佳
21
39
 
22
- ## 📦 Installation
40
+ ## 📦 安装
23
41
 
24
42
  ```bash
43
+ # npm
25
44
  npm install jordium-gantt-vue3
26
- # or
45
+
46
+ # yarn
27
47
  yarn add jordium-gantt-vue3
28
- # or
48
+
49
+ # pnpm
29
50
  pnpm add jordium-gantt-vue3
30
51
  ```
31
52
 
32
- ## 🚀 Quick Start
53
+ ## 📄 许可证
54
+
55
+ [MIT License](./LICENSE) © 2025 JORDIUM.COM
56
+
57
+ ---
58
+
59
+ ## 📁 项目结构
60
+
61
+ ```
62
+ jordium-gantt-vue3/
63
+ ├── src/ # 组件源码与核心逻辑
64
+ │ ├── components/ # 主要 Vue 组件
65
+ │ ├── models/ # 数据类型与配置
66
+ │ ├── composables/ # 组合式函数
67
+ │ ├── styles/ # 样式文件
68
+ │ └── index.ts # 入口导出
69
+ ├── demo/ # 组件开发与交互演示(本地开发/预览用)
70
+ ├── packageDemo/ # npm 包集成演示(模拟外部项目集成效果)
71
+ ├── dist/ # 构建产物(发布/静态站点/打包输出)
72
+ ├── docs/ # 相关文档(如部署、API 说明等)
73
+ ├── design/ # 设计资源与截图
74
+ ├── public/ # 公共静态资源
75
+ ├── README.md # 中文说明文档
76
+ ├── README-EN.md # 英文说明文档
77
+ └── ... # 其他配置、脚本与元数据
78
+ ```
79
+
80
+ - `demo/`:用于本地开发和功能演示,包含完整的交互页面。
81
+ - `packageDemo/`:用于模拟 npm 包在外部项目中的集成与使用场景。
82
+ - `dist/`:构建输出目录,包含发布到 npm 或静态站点的产物。
83
+ - `docs/`:项目相关文档,如部署说明、API 参考等。
84
+ - 其余目录请参考注释。
85
+
86
+ ## 🔧 API 参考
87
+
88
+ ### GanttChart 属性
89
+
90
+ | 属性名 | 类型 | 默认值 | 说明 |
91
+ |--------|------|--------|------|
92
+ | `tasks` | `Task[]` | `[]` | 任务数据数组 |
93
+ | `milestones` | `Task[]` | `[]` | 里程碑数据数组 |
94
+ | `editComponent` | `any` | - | 自定义编辑组件 |
95
+ | `useDefaultDrawer` | `boolean` | `true` | 是否使用默认编辑抽屉 |
96
+ | `showToolbar` | `boolean` | `true` | 是否显示工具栏 |
97
+ | `toolbarConfig` | `ToolbarConfig` | `{}` | 工具栏配置 |
98
+ | `localeMessages` | `Partial<Messages['zh-CN']>` | - | 自定义多语言配置 |
99
+ | `onTaskDoubleClick` | `(task: Task) => void` | - | 任务双击事件回调 |
100
+ | `onTaskDelete` | `(task: Task) => void` | - | 任务删除事件回调 |
101
+ | `onTaskUpdate` | `(task: Task) => void` | - | 任务更新事件回调 |
102
+ | `onTaskAdd` | `(task: Task) => void` | - | 任务添加事件回调 |
103
+ | `onMilestoneSave` | `(milestone: Task) => void` | - | 里程碑保存事件回调 |
104
+ | `onMilestoneDelete` | `(milestoneId: number) => void` | - | 里程碑删除事件回调 |
105
+ | `onMilestoneIconChange` | `(milestoneId: number, icon: string) => void` | - | 里程碑图标变更事件回调 |
106
+ | `onAddTask` | `() => void` | - | 新增任务工具栏事件回调 |
107
+ | `onAddMilestone` | `() => void` | - | 新增里程碑工具栏事件回调 |
108
+ | `onTodayLocate` | `() => void` | - | 定位今天工具栏事件回调 |
109
+ | `onExportCsv` | `() => boolean \| void` | - | 导出CSV工具栏事件回调 |
110
+ | `onExportPdf` | `() => void` | - | 导出PDF工具栏事件回调 |
111
+ | `onLanguageChange` | `(lang: 'zh-CN' \| 'en-US') => void` | - | 语言切换工具栏事件回调 |
112
+ | `onThemeChange` | `(isDark: boolean) => void` | - | 主题切换工具栏事件回调 |
113
+ | `onFullscreenChange` | `(isFullscreen: boolean) => void` | - | 全屏切换工具栏事件回调 |
114
+
115
+ ### GanttChart 事件
116
+
117
+ | 事件名 | 参数 | 说明 |
118
+ |----------------------|----------------------------|------------------------------|
119
+ | `taskbar-drag-end` | `task: Task` | 任务条拖拽结束 |
120
+ | `taskbar-resize-end` | `task: Task` | 任务条大小调整结束 |
121
+ | `milestone-drag-end` | `milestone: Task` | 里程碑拖拽结束 |
122
+ | `predecessor-added` | `{ targetTask, newTask }` | 添加前置任务后触发。<br>参数说明:<br>• `targetTask`:被添加前置任务的目标任务(Task对象)<br>• `newTask`:新添加的前置任务(Task对象) |
123
+ | `successor-added` | `{ targetTask, newTask }` | 添加后置任务后触发。<br>参数说明:<br>• `targetTask`:被添加后置任务的目标任务(Task对象)<br>• `newTask`:新添加的后置任务(Task对象) |
124
+ | `task-deleted` | `{ task }` | 删除任务后触发 |
125
+ | `task-added` | `{ task }` | 新建任务后触发 |
126
+ | `task-updated` | `{ task }` | 更新任务后触发 |
127
+
128
+ #### 计时事件用法示例
129
+
130
+ ```vue
131
+ <GanttChart
132
+ ...
133
+ @timer-started="onTimerStarted"
134
+ @timer-stopped="onTimerStopped"
135
+ />
136
+
137
+ <script setup>
138
+ function onTimerStarted(task) {
139
+ // 这里可以自定义提示、日志或业务逻辑
140
+ alert(`任务【${task.name}】开始计时:${new Date(task.timerStartTime).toLocaleString()}`)
141
+ }
142
+ function onTimerStopped(task) {
143
+ alert(`任务【${task.name}】停止计时`)
144
+ }
145
+ </script>
146
+ ```
147
+
148
+ #### 任务事件用法示例
149
+
150
+ ```vue
151
+ <GanttChart
152
+ ...
153
+ @predecessor-added="onPredecessorAdded"
154
+ @successor-added="onSuccessorAdded"
155
+ @task-deleted="onTaskDeleted"
156
+ @task-added="onTaskAdded"
157
+ @task-updated="onTaskUpdated"
158
+ />
159
+
160
+ <script setup>
161
+ function onPredecessorAdded(e) {
162
+ // e: { targetTask: Task, newTask: Task }
163
+ alert(`任务【${e.targetTask.name}】添加前置任务【${e.newTask.name}】`)
164
+ }
165
+ function onSuccessorAdded(e) {
166
+ // e: { targetTask: Task, newTask: Task }
167
+ alert(`任务【${e.targetTask.name}】添加后置任务【${e.newTask.name}】`)
168
+ }
169
+ function onTaskDeleted(e) {
170
+ // e: { task: Task }
171
+ alert(`任务【${e.task.name}】已删除`)
172
+ }
173
+ function onTaskAdded(e) {
174
+ // e: { task: Task }
175
+ alert(`任务【${e.task.name}】已创建`)
176
+ }
177
+ function onTaskUpdated(e) {
178
+ // e: { task: Task }
179
+ alert(`任务【${e.task.name}】已更新`)
180
+ }
181
+ </script>
182
+ ```
183
+
184
+ ### 数据类型
185
+
186
+ #### 核心类型 (src/models/classes)
187
+
188
+ **Task 任务类型**
189
+ ```typescript
190
+ export interface Task {
191
+ id: number // 任务唯一ID
192
+ name: string // 任务名称
193
+ predecessor?: number[] // 前置任务ID数组
194
+ assignee?: string // 负责人
195
+ startDate?: string // 开始日期(ISO字符串)
196
+ endDate?: string // 结束日期(ISO字符串)
197
+ progress?: number // 进度百分比 0-100
198
+ estimatedHours?: number // 预估工时
199
+ actualHours?: number // 实际工时
200
+ parentId?: number // 上级任务ID
201
+ children?: Task[] // 子任务数组
202
+ collapsed?: boolean // 是否折叠
203
+ isParent?: boolean // 是否为父任务
204
+ type?: string // 任务类型(如 task、story、milestone 等)
205
+ description?: string // 任务描述
206
+ icon?: string // 图标
207
+ level?: number // 层级
208
+ // 计时相关字段
209
+ isTimerRunning?: boolean // 计时是否进行中
210
+ timerStartTime?: number // 计时开始时间(时间戳)
211
+ timerEndTime?: number // 计时结束时间(时间戳)
212
+ timerStartDesc?: string // 计时开始时的描述
213
+ timerElapsedTime?: number // 已累计计时时长(秒)
214
+ }
215
+ ```
216
+
217
+ **Milestone 里程碑类型**
218
+ ```typescript
219
+ // 里程碑实际上是 Task 类型的特殊用法
220
+ // 具有 type: 'milestone' 属性的 Task 对象
221
+ interface Milestone extends Task {
222
+ type: 'milestone' // 必须为 'milestone'
223
+ startDate: string // 里程碑日期 (必填)
224
+ endDate?: string // 结束日期 (可选,通常与startDate相同)
225
+ }
226
+ ```
227
+
228
+ **Language 语言类型**
229
+ ```typescript
230
+ type Language = 'zh' | 'en' // 支持的语言类型
231
+ type Locale = 'zh-CN' | 'en-US' // 完整的语言区域标识
232
+ ```
233
+
234
+ #### 配置类型 (src/models/configs)
235
+
236
+ **TimelineConfig 时间轴配置**
237
+ ```typescript
238
+ interface TimelineConfig {
239
+ startDate: Date // 时间轴开始日期
240
+ endDate: Date // 时间轴结束日期
241
+ zoomLevel: number // 缩放级别
242
+ }
243
+ ```
244
+
245
+ **ToolbarConfig 工具栏配置**
246
+ ```typescript
247
+ interface ToolbarConfig {
248
+ showAddTask?: boolean // 是否显示新增任务按钮
249
+ showAddMilestone?: boolean // 是否显示新增里程碑按钮
250
+ showTodayLocate?: boolean // 是否显示定位今天按钮
251
+ showExportCsv?: boolean // 是否显示导出CSV按钮
252
+ showExportPdf?: boolean // 是否显示导出PDF按钮
253
+ showLanguage?: boolean // 是否显示语言切换按钮
254
+ showTheme?: boolean // 是否显示主题切换按钮
255
+ showFullscreen?: boolean // 是否显示全屏切换按钮
256
+ showTimeScale?: boolean // 是否显示时间刻度切换按钮组(日|周|月)
257
+ }
258
+ ```
259
+
260
+ #### 组合式函数 (src/composables)
261
+
262
+ **useI18n 国际化工具**
263
+ ```typescript
264
+ // 提供多语言支持
265
+ const {
266
+ locale, // 当前语言
267
+ setLocale, // 切换语言
268
+ t, // 翻译函数
269
+ formatYearMonth // 年月格式化
270
+ } = useI18n()
271
+
272
+ // 支持的语言
273
+ type Locale = 'zh-CN' | 'en-US'
274
+ ```
275
+
276
+ **useMessage 消息提示工具**
277
+ ```typescript
278
+ // 提供全局消息提示
279
+ const { showMessage } = useMessage()
280
+
281
+ // 消息类型
282
+ type MessageType = 'success' | 'error' | 'warning' | 'info'
283
+
284
+ // 使用示例
285
+ showMessage('操作成功', 'success')
286
+ ```
287
+
288
+ ## 💻 基本使用
289
+
290
+ ### 简单示例
33
291
 
34
292
  ```vue
35
293
  <script setup lang="ts">
@@ -40,19 +298,19 @@ import 'jordium-gantt-vue3/dist/style.css'
40
298
  const tasks = ref([
41
299
  {
42
300
  id: 1,
43
- name: 'Project Kickoff',
301
+ name: '项目启动',
44
302
  startDate: '2025-01-01',
45
303
  endDate: '2025-01-15',
46
304
  progress: 80,
47
- assignee: 'John Doe'
305
+ assignee: '张三'
48
306
  },
49
307
  {
50
308
  id: 2,
51
- name: 'Requirements Analysis',
309
+ name: '需求分析',
52
310
  startDate: '2025-01-16',
53
311
  endDate: '2025-01-30',
54
312
  progress: 60,
55
- assignee: 'Jane Smith',
313
+ assignee: '李四',
56
314
  predecessor: '1'
57
315
  }
58
316
  ])
@@ -60,7 +318,7 @@ const tasks = ref([
60
318
  const milestones = ref([
61
319
  {
62
320
  id: 1,
63
- name: 'Project Milestone',
321
+ name: '项目里程碑',
64
322
  startDate: '2025-01-31',
65
323
  type: 'milestone'
66
324
  }
@@ -77,163 +335,149 @@ const milestones = ref([
77
335
  </template>
78
336
  ```
79
337
 
80
- ## 🔧 API Reference
81
-
82
- ### Core Properties
83
-
84
- | Property | Type | Default | Description |
85
- |----------|------|---------|-------------|
86
- | `tasks` | `Task[]` | `[]` | Task data array |
87
- | `milestones` | `Task[]` | `[]` | Milestone data array |
88
- | `useDefaultDrawer` | `boolean` | `true` | Use default edit drawer |
89
- | `showToolbar` | `boolean` | `true` | Show toolbar |
90
- | `toolbarConfig` | `ToolbarConfig` | `{}` | Toolbar configuration |
91
- | `localeMessages` | `object` | - | Custom locale messages |
92
-
93
- ### Event Callbacks
94
-
95
- | Property | Type | Description |
96
- |----------|------|-------------|
97
- | `onTaskDoubleClick` | `(task: Task) => void` | Task double-click callback |
98
- | `onTaskDelete` | `(task: Task) => void` | Task delete callback |
99
- | `onTaskUpdate` | `(task: Task) => void` | Task update callback |
100
- | `onTaskAdd` | `(task: Task) => void` | Task add callback |
101
- | `onMilestoneSave` | `(milestone: Task) => void` | Milestone save callback |
102
- | `onMilestoneDelete` | `(id: number) => void` | Milestone delete callback |
103
- | `onLanguageChange` | `(lang: string) => void` | Language change callback |
104
- | `onThemeChange` | `(isDark: boolean) => void` | Theme change callback |
105
-
106
- ### Events
107
-
108
- | Event | Parameters | Description |
109
- |-------|------------|-------------|
110
- | `@taskbar-drag-end` | `task: Task` | Task drag ended |
111
- | `@taskbar-resize-end` | `task: Task` | Task resize ended |
112
- | `@milestone-drag-end` | `milestone: Task` | Milestone drag ended |
113
-
114
- ### Task Data Structure
115
-
116
- ```typescript
117
- interface Task {
118
- id: number // Unique task identifier
119
- name: string // Task name
120
- predecessor?: string // Predecessor task ID
121
- assignee?: string // Assignee
122
- startDate?: string // Start date (YYYY-MM-DD format)
123
- endDate?: string // End date (YYYY-MM-DD format)
124
- progress?: number // Completion progress (0-100)
125
- estimatedHours?: number // Estimated hours
126
- actualHours?: number // Actual hours
127
- parentId?: number // Parent task ID
128
- children?: Task[] // Child tasks array (supports nested structure)
129
- collapsed?: boolean // Whether child tasks are collapsed
130
- isParent?: boolean // Whether it's a parent task
131
- type?: string // Task type (task/story/bug/milestone)
132
- description?: string // Task description
133
- icon?: string // Task icon
134
- level?: number // Task level
135
- }
136
- ```
137
- ### TimelineConfig Data Structure
138
-
139
- ```typescript
140
- interface TimelineConfig {
141
- startDate: Date // Timeline start date
142
- endDate: Date // Timeline end date
143
- zoomLevel: number // Zoom level
144
- }
145
- ```
146
-
147
- ### ToolbarConfig Data Structure
148
-
149
- ```typescript
150
- interface ToolbarConfig {
151
- showAddTask?: boolean // Show add task button
152
- showAddMilestone?: boolean // Show add milestone button
153
- showTodayLocate?: boolean // Show locate today button
154
- showExportCsv?: boolean // Show export CSV button
155
- showExportPdf?: boolean // Show export PDF button
156
- showLanguage?: boolean // Show language switch button
157
- showTheme?: boolean // Show theme switch button
158
- showFullscreen?: boolean // Show fullscreen toggle button
159
- }
160
- ```
161
-
162
- ## 🎨 Advanced Usage
163
-
164
- ### Custom Event Handling
338
+ ### 自定义事件处理
165
339
 
166
340
  ```vue
167
341
  <script setup lang="ts">
168
342
  import { GanttChart } from 'jordium-gantt-vue3'
169
343
 
344
+ // 自定义双击处理
170
345
  const handleTaskDoubleClick = (task) => {
171
- console.log('Task clicked:', task)
172
- // Open custom edit dialog
346
+ console.log('双击任务:', task)
347
+ // 打开自定义编辑界面
348
+ router.push(`/task/${task.id}/edit`)
173
349
  }
174
350
 
175
- const handleTaskDragEnd = (task) => {
176
- console.log('Task moved:', task)
177
- // Save changes to backend
351
+ // 自定义删除处理
352
+ const handleTaskDelete = async (task) => {
353
+ const confirmed = await showConfirm(`确定删除任务 "${task.name}" 吗?`)
354
+ if (confirmed) {
355
+ await api.deleteTask(task.id)
356
+ // 刷新任务列表
357
+ refreshTasks()
358
+ }
178
359
  }
179
360
 
180
- const toolbarConfig = {
181
- showAddTask: true,
182
- showTheme: true,
183
- showLanguage: true,
184
- showExportCsv: true
361
+ // 监听拖拽事件
362
+ const handleTaskDragEnd = (task) => {
363
+ console.log('任务拖拽结束:', task)
364
+ // 保存任务时间变更
365
+ api.updateTask(task)
185
366
  }
186
367
  </script>
187
368
 
188
369
  <template>
189
370
  <GanttChart
190
371
  :tasks="tasks"
191
- :milestones="milestones"
192
- :toolbar-config="toolbarConfig"
193
372
  :on-task-double-click="handleTaskDoubleClick"
373
+ :on-task-delete="handleTaskDelete"
374
+ :use-default-drawer="false"
194
375
  @taskbar-drag-end="handleTaskDragEnd"
195
376
  />
196
377
  </template>
197
378
  ```
198
379
 
199
- ### Internationalization
380
+ ### 主题和国际化
200
381
 
201
382
  ```vue
202
- <script setup>
383
+ <script setup lang="ts">
384
+ import { ref } from 'vue'
385
+ import { GanttChart } from 'jordium-gantt-vue3'
386
+
387
+ // 工具栏配置
388
+ const toolbarConfig = {
389
+ showLanguage: true,
390
+ showTheme: true,
391
+ showAddTask: true,
392
+ showAddMilestone: true,
393
+ showTodayLocate: true,
394
+ showExportCsv: true,
395
+ showExportPdf: true,
396
+ showFullscreen: true,
397
+ showTimeScale: true // 控制日|周|月时间刻度按钮组的可见性
398
+ }
399
+
400
+ // 自定义多语言配置
203
401
  const customLocaleMessages = {
204
- taskName: 'Custom Task Name',
205
- addTask: 'Custom Add Task'
402
+ taskName: '自定义任务名称',
403
+ addTask: '自定义新增任务'
404
+ }
405
+
406
+ // 处理工具栏事件
407
+ const handleLanguageChange = (lang) => {
408
+ console.log('语言切换到:', lang)
409
+ }
410
+
411
+ const handleThemeChange = (isDark) => {
412
+ console.log('主题切换到:', isDark ? '暗色' : '亮色')
206
413
  }
207
414
  </script>
208
415
 
209
416
  <template>
210
417
  <GanttChart
418
+ :tasks="tasks"
419
+ :milestones="milestones"
420
+ :toolbar-config="toolbarConfig"
211
421
  :locale-messages="customLocaleMessages"
212
- :on-language-change="(lang) => console.log('Language:', lang)"
422
+ :on-language-change="handleLanguageChange"
423
+ :on-theme-change="handleThemeChange"
213
424
  />
214
425
  </template>
215
426
  ```
216
427
 
217
- ## 📚 Documentation & Resources
428
+ ## 🤝 贡献与合作
429
+
430
+ ### 参与贡献
431
+
432
+ 我们欢迎社区贡献!如果你想参与项目开发:
433
+
434
+ 1. **Fork** 本仓库
435
+ 2. **创建** 你的特性分支 (`git checkout -b feature/AmazingFeature`)
436
+ 3. **提交** 你的修改 (`git commit -m 'Add some AmazingFeature'`)
437
+ 4. **推送** 到分支 (`git push origin feature/AmazingFeature`)
438
+ 5. **打开** Pull Request
439
+
440
+ ### 报告问题
218
441
 
219
- - 📖 **Full Documentation**: [GitHub Repository](https://github.com/nelson820125/jordium-gantt-vue3)
220
- - 📋 **Changelog**: [CHANGELOG.md](https://github.com/nelson820125/jordium-gantt-vue3/blob/main/CHANGELOG.md)
221
- - 🐛 **Issues**: [GitHub Issues](https://github.com/nelson820125/jordium-gantt-vue3/issues)
442
+ 如果你发现了 bug 或有功能建议:
222
443
 
223
- ## 🤝 Contributing
444
+ - 📬 [提交 Github Issue](https://github.com/nelson820125/jordium-gantt-vue3/issues)
445
+ - 📬 [提交 Gitee Issue](https://gitee.com/jordium/jordium-gantt-vue3/issues)
446
+ - 📧 发送邮件至:ning.li@jordium.com / nelson820125@gmail.com / lining820125@163.com
224
447
 
225
- We welcome contributions! Please see our [Contributing Guide](https://github.com/nelson820125/jordium-gantt-vue3/blob/main/CONTRIBUTING.md) for details.
448
+ ### 商业合作
226
449
 
227
- ## 📄 License
450
+ 我们提供专业的技术支持和定制开发服务:
228
451
 
229
- [MIT License](https://opensource.org/licenses/MIT) © 2025 Jordium.com
452
+ - 🏢 **企业定制**: 根据业务需求定制系统开发
453
+ - 💼 **技术咨询**: 业务及架构设计解决方案咨询
230
454
 
231
- ## 📧 Support
455
+ **联系方式**:
456
+ - 📧 商务邮箱:ning.li@jordium.com / nelson820125@gmail.com
232
457
 
233
- - 📬 **GitHub Issues**: [Report bugs or request features](https://github.com/nelson820125/jordium-gantt-vue3/issues)
234
- - 📧 **Email**: ning.li@jordium.com / nelson820125@gmail.com
235
- - 💼 **Business**: For enterprise support and custom development
458
+ ### 开发环境
459
+
460
+ ```bash
461
+ # 克隆项目
462
+ git clone https://github.com/nelson820125/jordium-gantt-vue3.git
463
+
464
+ # 安装依赖
465
+ npm install
466
+
467
+ # 启动开发服务器
468
+ npm run dev
469
+
470
+ # 构建库文件
471
+ npm run build:lib
472
+
473
+ # 运行测试
474
+ npm run test
475
+ ```
236
476
 
237
477
  ---
238
478
 
239
- > 💡 If this project helps you, please give it a ⭐ Star on GitHub!
479
+ **🔗 相关链接**
480
+ - [GitHub 仓库](https://github.com/nelson820125/jordium-gantt-vue3)
481
+ - [更新日志](./CHANGELOG.md)
482
+
483
+ > 💡 **提示**: 如果这个项目对你有帮助,请给我们一个 ⭐ Star!