type CompoundDate = Date | string; declare module OnChainProject { export interface Task extends Object { /** 任务id */ id: string; /** 任务名称 */ text?: string; /** 任务类型 */ type: 'project' | 'task' | 'milestone' | 'placeholder' | 'phase' | 'iteration' | 'gate'; /** 父任务id */ parent?: string; /** 任务开始时间 */ start_date: T; /** 任务结束时间 */ end_date: T; /** 任务持续时间 */ duration: number; /** 任务进度 0 - 1 */ progress?: number; /** 指向后置任务的 link id */ $source: (number | string)[]; /** 指向前置任务的 link id */ $target: (number | string)[]; /** 行高 */ row_height?: number; /** 任务是否只读 */ readonly?: boolean; /** 隐藏计划 */ hide_bar?: boolean; /** 取消计划 */ unscheduled?: boolean; /** 定义甘特图是否应执行任务的自动调度 */ auto_scheduling?: boolean; /** 约束的日期 */ constraint_date?: T; /** * 约束的类型 * ```json * { * "asap": "越早越好", * "alap": "越晚越好", * "snet": "不早于以下时间(constraint_date)开始", * "snlt": "不迟于以下时间(constraint_date)开始", * "fnet": "不早于以下时间(constraint_date)完成", * "fnlt": "不迟于以下时间(constraint_date)完成", * "mso": "必须开始于", * "mfo": "必须完成于", * } * ``` */ constraint_type: 'asap' | 'alap' | 'snet' | 'snlt' | 'fnet' | 'fnlt' | 'mso' | 'mfo'; } export interface DataSourceItem> { children?: DataSourceItem[]; attributes: Attr; /** pid */ pid: string; /** 自身的id */ insId: string; /** 编号 */ number: string; /** 项目实例类型名称 */ objectName: string; /** 项目实例类型 id */ objectId: string; /** 项目实例类型 ApiCode */ objectApicode: string; /** 层级号 */ levelNo: string; /** 项目id */ productId: string; /** 项目名称 */ productName: string; /** 前置任务 */ preTask: (string | number)[]; /** 后置任务 */ postTask: (string | number)[]; /** 目标交付数量 */ targetDeliveryCount: string; /** 是否有子任务 */ insBom: boolean; /** 行id */ rowId: string; /** @deprecated 是否在变更流程中 */ affectedInPCO: boolean; /** 实例在哪些流程中 (PSCO: 状态变更 | PCO: 基线变更) */ affectedIn: 'PCO' | 'PSCO' | ''; /** 项目经理id */ projectManager: string; /** 最新版本 */ insVersion: string; /** 最新版次 */ insVersionOrder: string; /** 更新权限 */ updateAttributes: { [key: string]: any; }; [k: string]: any; } /** * @description table row 任务数据 * @date 2023-02-13 18:48:03 * @export * @interface NoLimitTask * @extends {Task} * @extends {DataSourceItem} * @template T 时间格式 * @template S 项目类型格式 * @template F row禁止时间格式 * @template A row属性格式 */ export interface NoLimitTask, A = Record> extends Task, DataSourceItem { /** 服务端源数据 */ sourceData?: NoLimitTask; /** 项目类型 */ basicsType: S; /** 层级数据 */ hierarchy?: string; children?: NoLimitTask[]; /** 前端自定义 序号 */ serialNumber?: number; /** 有来解决 onAfterTaskDrag 无法知道 是否真正跟新了数据 */ original?: NoLimitTask; /** 禁止时间 */ forbiddenTime: { [k: string]: F | F[]; }; /** 前端数据临时 */ dataType?: 'add' | 'del' | 'update'; /** 只有 update 会有 newVal */ newVal?: Record; /** 服务端的红线 */ optType: 'add' | 'del' | 'update' | 'replace'; /** 只有项目变更时才有 */ inProcess?: Record; /** optType 为 del 时才会有这个属性,表示服务给的原始insId */ primitiveInsId?: string; /** 原始的 insBom 属性 */ primitiveInsBom?: boolean; /** 是否是关键路径 */ critical?: boolean; /** 和前置任务的最小间隔 */ interval?: number; [k: string]: any; } export interface Link { /** 路线id */ id: string | number; /** 源节点id */ source: string; /** 目标节点id */ target: string; /** 箭头类型 0: end -> start | 1:start -> start | 2: end -> end | 3: start -> end */ type: '0' | '1' | '2' | '3'; /** 当前添加前后置任务的任务id */ addId?: string; /** 是否是关键路径 */ critical?: boolean; } export interface SerializeData { data: Task[]; links: Link[]; } export interface Relation { /** 父节点 */ parent?: T; /** 自身 */ self?: T; /** 前面的兄弟节点 */ beforeSibling: T[]; /** 后面的兄弟节点 */ afterSibling: T[]; /** 所处当前层级的索引 */ index?: number; /** 全部祖先节点集合 */ stack: T[]; } export type UpdateType = 'resize' | 'move' | 'progress'; export type ServerDateType = 'Schedule' | 'Estimate' | 'Actual'; export type ServerCostType = 'Budget'; export type ServerProgressType = 'Schedule' | 'Current'; /** 项目的个性化配置 */ export interface Personality { /** 预算费用配置方式 */ projectBudget: string; /** 1: 允许 | 2:警告 | 3:禁止 */ checkInFileNameToForceSameName: string; /** 实际费用编辑规则 */ projectActualCostControlRule?: string; [k: string]: any; } /** 项目子集的 类型对象 */ export interface ObjectItem { apicode: T; label: string; value: string; [k: string]: any; } export interface ExtraServerCalendar { id: string; /** 日历id */ calendarId: string; /** 名称 */ name: string; /** 例外日期 */ specialDay: string; /** 0: 例外工作日 | 1: 例外休息日 */ type: '0' | '1'; /** 0: 永不 | 1: 按年 | 2: 按月 */ repeatType: '0' | '1' | '2'; /** 工作时间段 */ workTime: string; [k: string]: any; } export interface Calendar { createBy?: string; createTime: string; description?: string; id: string; isDefault?: boolean; name: string; readonly: string; status: boolean; updateBy?: string; updateTime: string; versionOrder: number; workDay: string; workHours: string; workTime: string; } export interface GanttCalendarInstance { id: string; calculateDuration: (config: { start_date: Date; end_date: Date }) => number; calculateEndDate: (config: { start_date: Date; duration: number }) => Date; setWorkTime: (config: { date: Date }) => void; unsetWorkTime: (config: { date: Date }) => void; isWorkTime: (params: { date: Date }) => boolean; /** 自定义方法非gantt原有 */ toggleWorkTime: (params: { date: string | M | Date | number; isWork: boolean }) => void; format: { startFormat?: string; endFormat?: string; }; [key: string]: any; } export interface UpdateTableGanttDataParams { /** 刷新数据 (重新渲染 table和 gantt) */ isHardRefresh?: boolean; /** 数据 (不传会使用当前table数据进行渲染) */ data?: any[]; /** 是否重新初始化页面编辑栈 (默认是`true`, 必须`isHardRefresh`为`true`,`data`有值的情况下才会重新初始化) */ isInitChangeStack?: boolean; /** 是否是重服务的新请求的数据 (新数数据因为数据结构可能发生变化,需要重新初始化位置) */ isNewServerData?: boolean; /** 是否计算关键路径 */ isCalculateCriticalPath?: boolean; } }