v1.4.2 - enhancements

This commit is contained in:
LINING-PC\lining
2025-11-01 15:46:12 +08:00
parent 65059e1978
commit 4fff9d20f4
37 changed files with 10325 additions and 2635 deletions
+3
View File
@@ -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
}
+22
View File
@@ -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,
}
+43 -3
View File
@@ -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[] = [
{
+7 -1
View File
@@ -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: '上半年|下半年' },
},