v1.4.2 - enhancements
This commit is contained in:
@@ -4,6 +4,7 @@ export interface Task {
|
||||
name: string
|
||||
predecessor?: number[] // 前置任务ID数组
|
||||
assignee?: string
|
||||
avatar?: string // 任务负责人头像URL
|
||||
startDate?: string
|
||||
endDate?: string
|
||||
progress?: number
|
||||
@@ -23,6 +24,8 @@ export interface Task {
|
||||
timerEndTime?: number // 结束计时时间
|
||||
timerStartDesc?: string // 计时开始时填写的描述
|
||||
timerElapsedTime?: number
|
||||
// 权限控制
|
||||
isEditable?: boolean // 是否可编辑(可拖拽、拉伸),默认为true
|
||||
// 支持自定义属性 - 使用 unknown 允许任意类型
|
||||
[key: string]: unknown
|
||||
}
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
// TaskBar 配置类型定义
|
||||
|
||||
export interface TaskBarConfig {
|
||||
showAvatar?: boolean // 是否展示头像,默认 true
|
||||
showTitle?: boolean // 是否展示标题文字,默认 true
|
||||
showProgress?: boolean // 是否展示进度文字,默认 true
|
||||
dragThreshold?: number // 拖拽触发阈值(像素),默认 5px
|
||||
resizeHandleWidth?: number // 拉伸手柄宽度(像素),默认 5px,最大 15px
|
||||
enableDragDelay?: boolean // 是否启用拖拽延迟(防止误触),默认 false
|
||||
dragDelayTime?: number // 拖拽延迟时间(毫秒),默认 150ms
|
||||
}
|
||||
|
||||
// 默认配置
|
||||
export const DEFAULT_TASK_BAR_CONFIG: TaskBarConfig = {
|
||||
showAvatar: true,
|
||||
showTitle: true,
|
||||
showProgress: true,
|
||||
dragThreshold: 5,
|
||||
resizeHandleWidth: 5,
|
||||
enableDragDelay: false,
|
||||
dragDelayTime: 150,
|
||||
}
|
||||
@@ -22,9 +22,9 @@ export interface TaskListColumnConfig {
|
||||
export interface TaskListConfig {
|
||||
columns?: TaskListColumnConfig[]
|
||||
showAllColumns?: boolean // 是否显示所有列,默认true
|
||||
defaultWidth?: number // 默认展开宽度,单位像素,默认320px
|
||||
minWidth?: number // 最小宽度,单位像素,默认280px,不能小于280px
|
||||
maxWidth?: number // 最大宽度,单位像素,默认1160px
|
||||
defaultWidth?: number | string // 默认展开宽度,支持像素数字(如 320)或百分比字符串(如 '30%'),默认320px
|
||||
minWidth?: number | string // 最小宽度,支持像素数字(如 280)或百分比字符串(如 '20%'),默认280px,不能小于280px
|
||||
maxWidth?: number | string // 最大宽度,支持像素数字(如 1160)或百分比字符串(如 '80%'),默认1160px
|
||||
}
|
||||
|
||||
// 默认宽度配置
|
||||
@@ -32,6 +32,46 @@ export const DEFAULT_TASK_LIST_WIDTH = 320 // 默认展开宽度
|
||||
export const DEFAULT_TASK_LIST_MIN_WIDTH = 280 // 最小宽度
|
||||
export const DEFAULT_TASK_LIST_MAX_WIDTH = 1160 // 最大宽度
|
||||
|
||||
/**
|
||||
* 解析宽度值(支持像素数字或百分比字符串)
|
||||
* @param value 宽度值,可以是数字(像素)或字符串(百分比,如 '30%')
|
||||
* @param containerWidth 容器宽度(用于计算百分比)
|
||||
* @param defaultValue 默认值
|
||||
* @returns 解析后的像素值
|
||||
*/
|
||||
export function parseWidthValue(
|
||||
value: number | string | undefined,
|
||||
containerWidth: number,
|
||||
defaultValue: number,
|
||||
): number {
|
||||
if (value === undefined || value === null) {
|
||||
return defaultValue
|
||||
}
|
||||
|
||||
// 如果是数字,直接返回
|
||||
if (typeof value === 'number') {
|
||||
return value
|
||||
}
|
||||
|
||||
// 如果是字符串,检查是否是百分比
|
||||
if (typeof value === 'string') {
|
||||
const trimmed = value.trim()
|
||||
if (trimmed.endsWith('%')) {
|
||||
const percentage = parseFloat(trimmed)
|
||||
if (!isNaN(percentage)) {
|
||||
return Math.round((containerWidth * percentage) / 100)
|
||||
}
|
||||
}
|
||||
// 尝试解析为数字
|
||||
const parsed = parseFloat(trimmed)
|
||||
if (!isNaN(parsed)) {
|
||||
return parsed
|
||||
}
|
||||
}
|
||||
|
||||
return defaultValue
|
||||
}
|
||||
|
||||
// 默认列配置
|
||||
export const DEFAULT_TASK_LIST_COLUMNS: TaskListColumnConfig[] = [
|
||||
{
|
||||
|
||||
@@ -49,9 +49,15 @@ export const SCALE_CONFIGS = {
|
||||
headerLevels: 2,
|
||||
formatters: { primary: 'yyyy年', secondary: 'MM月' },
|
||||
},
|
||||
quarter: {
|
||||
scale: TimelineScale.QUARTER,
|
||||
cellWidth: 60, // 每个季度的宽度
|
||||
headerLevels: 2,
|
||||
formatters: { primary: 'yyyy年', secondary: 'Q季度' },
|
||||
},
|
||||
year: {
|
||||
scale: TimelineScale.YEAR,
|
||||
cellWidth: 360,
|
||||
cellWidth: 180, // 每半年的宽度
|
||||
headerLevels: 2,
|
||||
formatters: { primary: 'yyyy年', secondary: '上半年|下半年' },
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user