jordium-gantt-vue3 1.2.0 → 1.3.1

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
@@ -60,28 +60,70 @@ pnpm add jordium-gantt-vue3
60
60
 
61
61
  ```
62
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
- └── ... # 其他配置、脚本与元数据
63
+ ├── src/ # 组件源码与核心逻辑
64
+ │ ├── components/ # 主要 Vue 组件
65
+ ├── GanttChart.vue # 主入口组件
66
+ ├── TaskList.vue # 任务列表
67
+ ├── Timeline.vue # 时间轴组件
68
+ │ ├── TaskBar.vue # 任务条
69
+ │ │ ├── TaskDrawer.vue # 任务编辑抽屉
70
+ │ │ ├── TaskContextMenu.vue # 任务右键菜单
71
+ │ │ ├── GanttToolbar.vue # 工具栏
72
+ │ │ ├── MilestonePoint.vue # 里程碑点
73
+ │ │ ├── MilestoneDialog.vue # 里程碑对话框
74
+ │ │ ├── DatePicker.vue # 日期选择器
75
+ │ │ └── ... # 其他组件
76
+ ├── models/ # 数据模型与配置
77
+ │ │ ├── classes/ # 类定义
78
+ │ │ │ ├── Task.ts # 任务模型
79
+ │ │ │ ├── Milestone.ts # 里程碑模型
80
+ │ │ │ └── Language.ts # 语言配置
81
+ │ │ ├── configs/ # 配置接口
82
+ │ │ │ ├── TimelineConfig.ts # 时间轴配置
83
+ │ │ │ └── ToolbarConfig.ts # 工具栏配置
84
+ │ │ └── types/ # 类型定义
85
+ │ │ └── TimelineScale.ts # 时间刻度类型
86
+ │ ├── composables/ # 组合式函数
87
+ │ │ ├── useI18n.ts # 国际化工具
88
+ │ │ └── useMessage.ts # 消息提示工具
89
+ │ ├── styles/ # 样式文件
90
+ │ │ ├── app.css # 主样式
91
+ │ │ └── theme-variables.css # 主题变量
92
+ │ ├── utils/ # 工具函数
93
+ │ │ └── predecessorUtils.ts # 前置依赖工具
94
+ │ └── index.ts # 入口导出
95
+ ├── demo/ # 组件开发与交互演示(本地开发/预览用)
96
+ │ ├── App.vue # 演示应用主组件
97
+ │ ├── data.json # 演示数据(包含药物临床试验案例)
98
+ │ ├── main.ts # 演示应用入口
99
+ │ └── ... # 其他演示文件
100
+ ├── packageDemo/ # npm 包集成演示(模拟外部项目集成效果)
101
+ ├── dist/ # 构建产物(发布/静态站点/打包输出)
102
+ ├── docs/ # 相关文档(如部署、API 说明等)
103
+ ├── design/ # 设计资源与截图
104
+ │ └── screenshots/ # 主题截图
105
+ ├── public/ # 公共静态资源
106
+ │ └── assets/ # 静态资源文件
107
+ ├── README.md # 中文说明文档
108
+ ├── README-EN.md # 英文说明文档
109
+ ├── package.json # 项目配置
110
+ ├── vite.config.ts # Vite开发配置
111
+ ├── vite.config.lib.ts # Vite库构建配置
112
+ ├── tsconfig.json # TypeScript配置
113
+ └── ... # 其他配置、脚本与元数据
78
114
  ```
79
115
 
80
- - `demo/`:用于本地开发和功能演示,包含完整的交互页面。
81
- - `packageDemo/`:用于模拟 npm 包在外部项目中的集成与使用场景。
82
- - `dist/`:构建输出目录,包含发布到 npm 或静态站点的产物。
83
- - `docs/`:项目相关文档,如部署说明、API 参考等。
84
- - 其余目录请参考注释。
116
+ ### 目录说明
117
+
118
+ - **`src/components/`**:核心Vue组件,包含甘特图的所有功能组件
119
+ - **`src/models/`**:数据模型、类型定义和配置接口
120
+ - **`src/composables/`**:Vue 3组合式函数,提供可复用的逻辑
121
+ - **`src/styles/`**:样式文件,包含主题系统和CSS变量
122
+ - **`src/utils/`**:工具函数,处理业务逻辑和数据转换
123
+ - **`demo/`**:本地开发和功能演示,包含完整的交互页面和药物临床试验样例数据
124
+ - **`packageDemo/`**:模拟npm包在外部项目中的集成与使用场景
125
+ - **`dist/`**:构建输出目录,包含发布到npm或静态站点的产物
126
+ - **`docs/`**:项目文档,包括部署说明、API参考等
85
127
 
86
128
  ## 🔧 API 参考
87
129
 
@@ -96,8 +138,22 @@ jordium-gantt-vue3/
96
138
  | `showToolbar` | `boolean` | `true` | 是否显示工具栏 |
97
139
  | `toolbarConfig` | `ToolbarConfig` | `{}` | 工具栏配置 |
98
140
  | `localeMessages` | `Partial<Messages['zh-CN']>` | - | 自定义多语言配置 |
141
+ | `workingHours` | `WorkingHours` | - | 工作时间配置 |
99
142
  | `onTaskDoubleClick` | `(task: Task) => void` | - | 任务双击事件回调 |
100
- | `onTaskDelete` | `(task: Task) => void` | - | 任务删除事件回调 |
143
+ | `onTaskDelete` | `(task: Task, deleteChildren?: boolean) => void` | - | 任务删除事件回调 |
144
+ | `onTaskUpdate` | `(task: Task) => void` | - | 任务更新事件回调 |
145
+ | `onTaskAdd` | `(task: Task) => void` | - | 任务添加事件回调 |
146
+ | `onMilestoneSave` | `(milestone: Task) => void` | - | 里程碑保存事件回调 |
147
+ | `onMilestoneDelete` | `(milestoneId: number) => void` | - | 里程碑删除事件回调 |
148
+ | `onMilestoneIconChange` | `(milestoneId: number, icon: string) => void` | - | 里程碑图标变更事件回调 |
149
+ | `onAddTask` | `() => void` | - | 新增任务工具栏事件回调 |
150
+ | `onAddMilestone` | `() => void` | - | 新增里程碑工具栏事件回调 |
151
+ | `onTodayLocate` | `() => void` | - | 定位今天工具栏事件回调 |
152
+ | `onExportCsv` | `() => boolean \| void` | - | 导出CSV工具栏事件回调 |
153
+ | `onExportPdf` | `() => void` | - | 导出PDF工具栏事件回调 |
154
+ | `onLanguageChange` | `(lang: 'zh-CN' \| 'en-US') => void` | - | 语言切换工具栏事件回调 |
155
+ | `onThemeChange` | `(isDark: boolean) => void` | - | 主题切换工具栏事件回调 |
156
+ | `onFullscreenChange` | `(isFullscreen: boolean) => void` | - | 全屏切换工具栏事件回调 |
101
157
  | `onTaskUpdate` | `(task: Task) => void` | - | 任务更新事件回调 |
102
158
  | `onTaskAdd` | `(task: Task) => void` | - | 任务添加事件回调 |
103
159
  | `onMilestoneSave` | `(milestone: Task) => void` | - | 里程碑保存事件回调 |
@@ -188,16 +244,16 @@ function onTaskUpdated(e) {
188
244
  **Task 任务类型**
189
245
  ```typescript
190
246
  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
247
+ id: number // 任务唯一ID
248
+ name: string // 任务名称
249
+ predecessor?: number[] // 前置任务ID数组
250
+ assignee?: string // 负责人
251
+ startDate?: string // 开始日期(ISO字符串)
252
+ endDate?: string // 结束日期(ISO字符串)
253
+ progress?: number // 进度百分比 0-100
254
+ estimatedHours?: number // 预估工时(支持小数,最多2位)
255
+ actualHours?: number // 实际工时(支持小数,最多2位)
256
+ parentId?: number // 上级任务ID
201
257
  children?: Task[] // 子任务数组
202
258
  collapsed?: boolean // 是否折叠
203
259
  isParent?: boolean // 是否为父任务
@@ -257,6 +313,86 @@ interface ToolbarConfig {
257
313
  }
258
314
  ```
259
315
 
316
+ **WorkingHours 工作时间配置**
317
+ ```typescript
318
+ interface WorkingHours {
319
+ morning?: { start: number; end: number } // 上午工作时间,如 { start: 8, end: 11 }
320
+ afternoon?: { start: number; end: number } // 下午工作时间,如 { start: 13, end: 17 }
321
+ }
322
+ ```
323
+
324
+ **TimelineScale 时间刻度类型**
325
+ ```typescript
326
+ // 时间轴显示刻度类型
327
+ type TimelineScale = 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'year'
328
+
329
+ // 时间刻度常量
330
+ export const TimelineScale = {
331
+ HOUR: 'hour', // 小时视图 - 每列显示一小时
332
+ DAY: 'day', // 日视图 - 每列显示一天
333
+ WEEK: 'week', // 周视图 - 每列显示一周
334
+ MONTH: 'month', // 月视图 - 每列显示一个月
335
+ QUARTER: 'quarter', // 季度视图 - 每列显示一个季度
336
+ YEAR: 'year', // 年视图 - 每列显示一年
337
+ }
338
+
339
+ // 时间刻度配置
340
+ interface TimelineScaleConfig {
341
+ scale: TimelineScale // 刻度类型
342
+ cellWidth: number // 每个时间单元的宽度(px)
343
+ headerLevels: number // 表头层级数
344
+ formatters: {
345
+ primary: string // 主要时间标签格式
346
+ secondary?: string // 次要时间标签格式
347
+ }
348
+ }
349
+ ```
350
+
351
+ ### 🕐 时间刻度功能说明
352
+
353
+ 组件支持多种时间刻度显示,用户可以通过工具栏的日/周/月按钮组或者编程方式切换时间轴的显示粒度:
354
+
355
+ #### 内置刻度配置
356
+
357
+ | 刻度类型 | 单元宽度 | 主标签格式 | 副标签格式 | 适用场景 |
358
+ |----------|----------|------------|------------|----------|
359
+ | `hour` | 40px | yyyy/MM/dd | HH | 精确到小时的项目, 例如药物临床试验 |
360
+ | `day` | 30px | yyyy年MM月 | dd | 日常项目管理的标准视图 |
361
+ | `week` | 120px | yyyy年MM月 | W | 中期项目的周计划视图 |
362
+ | `month` | 180px | yyyy | MM | 长期项目的月度视图 |
363
+ | `quarter` | 360px | yyyy | Q | 战略规划的季度视图 |
364
+ | `year` | 360px | yyyy | 上半年\|下半年 | 超长期项目年度视图 |
365
+
366
+ #### 使用示例
367
+
368
+ ```vue
369
+ <script setup>
370
+ import { ref } from 'vue'
371
+ import { GanttChart, TimelineScale } from 'jordium-gantt-vue3'
372
+
373
+ const tasks = ref([/* 任务数据 */])
374
+
375
+ // 工具栏配置 - 启用时间刻度切换按钮
376
+ const toolbarConfig = {
377
+ showTimeScale: true // 显示日|周|月按钮组
378
+ }
379
+
380
+ // 监听刻度切换(可选)
381
+ const handleTimeScaleChange = (scale) => {
382
+ console.log('时间刻度切换至:', scale)
383
+ // 可以在这里做一些业务逻辑,如保存用户偏好设置
384
+ }
385
+ </script>
386
+
387
+ <template>
388
+ <GanttChart
389
+ :tasks="tasks"
390
+ :toolbar-config="toolbarConfig"
391
+ @timescale-changed="handleTimeScaleChange"
392
+ />
393
+ </template>
394
+ ```
395
+
260
396
  #### 组合式函数 (src/composables)
261
397
 
262
398
  **useI18n 国际化工具**
@@ -386,15 +522,15 @@ import { GanttChart } from 'jordium-gantt-vue3'
386
522
 
387
523
  // 工具栏配置
388
524
  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 // 控制日|周|月时间刻度按钮组的可见性
525
+ showLanguage: true, // 语言切换
526
+ showTheme: true, // 主题切换
527
+ showAddTask: true, // 新增任务
528
+ showAddMilestone: true, // 新增里程碑
529
+ showTodayLocate: true, // 定位今天
530
+ showExportCsv: true, // 导出CSV
531
+ showExportPdf: true, // 导出PDF
532
+ showFullscreen: true, // 全屏模式
533
+ showTimeScale: true // 时间刻度切换(日|周|月按钮组)
398
534
  }
399
535
 
400
536
  // 自定义多语言配置
@@ -411,6 +547,17 @@ const handleLanguageChange = (lang) => {
411
547
  const handleThemeChange = (isDark) => {
412
548
  console.log('主题切换到:', isDark ? '暗色' : '亮色')
413
549
  }
550
+
551
+ // 监听时间刻度变化
552
+ const handleTimeScaleChange = (scale) => {
553
+ console.log('时间刻度切换至:', scale)
554
+ // 根据刻度调整显示逻辑
555
+ if (scale === 'day') {
556
+ // 日视图下的特殊处理
557
+ } else if (scale === 'week') {
558
+ // 周视图下的特殊处理
559
+ }
560
+ }
414
561
  </script>
415
562
 
416
563
  <template>
@@ -421,10 +568,51 @@ const handleThemeChange = (isDark) => {
421
568
  :locale-messages="customLocaleMessages"
422
569
  :on-language-change="handleLanguageChange"
423
570
  :on-theme-change="handleThemeChange"
571
+ @timescale-changed="handleTimeScaleChange"
424
572
  />
425
573
  </template>
426
574
  ```
427
575
 
576
+ ### 🔧 工作时间配置
577
+
578
+ 组件支持设置工作时间,影响任务时长计算和进度显示:
579
+
580
+ ```vue
581
+ <script setup lang="ts">
582
+ // 配置工作时间(24小时制)
583
+ const workingHours = {
584
+ morning: { start: 9, end: 12 }, // 上午9点-12点
585
+ afternoon: { start: 14, end: 18 } // 下午2点-6点
586
+ }
587
+ </script>
588
+
589
+ <template>
590
+ <GanttChart
591
+ :tasks="tasks"
592
+ :working-hours="workingHours"
593
+ />
594
+ </template>
595
+ ```
596
+
597
+ ### 📊 高精度工时管理
598
+
599
+ 组件支持精确到小数点后2位的工时记录,适合需要精确计费的项目:
600
+
601
+ ```vue
602
+ <script setup lang="ts">
603
+ const tasks = ref([
604
+ {
605
+ id: 1,
606
+ name: '高精度任务',
607
+ estimatedHours: 8.75, // 8小时45分钟
608
+ actualHours: 7.25, // 7小时15分钟
609
+ startDate: '2025-01-01',
610
+ endDate: '2025-01-02'
611
+ }
612
+ ])
613
+ </script>
614
+ ```
615
+
428
616
  ## 🤝 贡献与合作
429
617
 
430
618
  ### 参与贡献