jordium-gantt-vue3 1.2.0 → 1.3.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 +228 -40
- package/dist/index-BawkUms_.cjs +311 -0
- package/dist/index-ng0ybaM2.js +19412 -0
- package/dist/{index.es-C-aB3hUm.js → index.es-DRvmIis8.js} +1 -1
- package/dist/{index.es-DYYT_Is3.cjs → index.es-DUfPnax6.cjs} +1 -1
- package/dist/jordium-gantt-vue3.cjs.js +1 -1
- package/dist/jordium-gantt-vue3.css +1 -1
- package/dist/jordium-gantt-vue3.es.js +1 -1
- package/package.json +1 -1
- package/dist/index-C_3O1oxW.js +0 -18532
- package/dist/index-DEDOVZMn.cjs +0 -311
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/
|
|
65
|
-
│ ├──
|
|
66
|
-
│ ├──
|
|
67
|
-
│ ├──
|
|
68
|
-
│
|
|
69
|
-
├──
|
|
70
|
-
├──
|
|
71
|
-
├──
|
|
72
|
-
├──
|
|
73
|
-
├──
|
|
74
|
-
├──
|
|
75
|
-
|
|
76
|
-
├──
|
|
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
|
-
|
|
81
|
-
|
|
82
|
-
-
|
|
83
|
-
-
|
|
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
|
|
192
|
-
name: string
|
|
193
|
-
predecessor?: number[]
|
|
194
|
-
assignee?: string
|
|
195
|
-
startDate?: string
|
|
196
|
-
endDate?: string
|
|
197
|
-
progress?: number
|
|
198
|
-
estimatedHours?: number
|
|
199
|
-
actualHours?: number
|
|
200
|
-
parentId?: number
|
|
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
|
### 参与贡献
|