1金币
在任务列表里所有的任务finish完成时间,均早于今天10.15号的情况下,顶部汇总的计划完成时间不应该是24-10-15 8:00,应该是24-10-01 18:00,因此汇总的工期天数也错了,请教下怎么处理这种情况?代码如下:
// 初始化甘特图
initGantt() {
let spread = new GC.Spread.Sheets.Workbook(document.getElementById('ss'), { sheetCount: 0 })
spread.suspendPaint()
const dataManager = spread.dataManager()
let myTable1 = dataManager.addTable('myTable1', {
batch: true,
remote: {
read: function () {
// 这里是接口请求逻辑,返回接口数据,接口最终返回的模拟数据在附件里提供出来
}
},
schema: {
hierarchy: {
type: 'Parent',
column: 'parentId',
},
columns: {
id: { isPrimaryKey: true }, // 构建层次结构树节点需要主键
taskNumber: { dataType: 'rowOrder' }, //Id-ParentId类型中需要行顺序,以确保您更新正确的数据
},
},
})
let ganttSheet = spread.addSheetTab(0, '甘特图', GC.Spread.Sheets.SheetType.ganttSheet)
const view = myTable1.addView('myView1', [
{ value: 'id', caption: '序号', width: 100 },
{ value: 'taskNumber', caption: '序号', width: 100, visible: false },
{ value: 'name', caption: '任务名称', width: 180 },
{ value: 'TaskManager', caption: '负责人', width: 110 },
{ value: 'duration', caption: '任务工期/天', width: 110 },
{ value: 'start', caption: '计划开始时间', width: 140 },
{ value: 'finish', caption: '计划完成时间', width: 140 },
{ value: 'PlanHours', caption: '计划工时/h', width: 100 },
{ value: 'Resource', caption: '资源名称', width: 120 },
{ value: 'TaskPrpty', caption: '里程碑否', width: 100, readonly: true },
{ value: 'mode', caption: '模式', width: 90, visible: false },
])
view.fetch().then(function () {
ganttSheet.bindGanttView(view)
ganttSheet.project.calendarSettings.weekStartOn =
GC.Spread.Sheets.GanttSheet.DayOfWeek.Monday // 一周的开始设置为周一
let calendar = GC.Spread.Sheets.GanttSheet.Calendar.standard // 采用标准模式,默认是每天的早8到晚5
// 我司是早9晚6的上班作息
let defaultWorkWeek = calendar.defaultWorkWeek
defaultWorkWeek.workDays.map(item => {
if (item.length) {
item[0].start.hour = 9
item[1].end.hour = 18
} else {
item.push({ start: { hour: 9, minute: 0 }, end: { hour: 12, minute: 0 } })
item.push({ start: { hour: 13, minute: 0 }, end: { hour: 18, minute: 0 } })
}
})
ganttSheet.project.calendarSettings.defaultStartTime = { hour: 9, minute: 0 }
ganttSheet.project.calendarSettings.defaultFinishTime = { hour: 18, minute: 0 }
ganttSheet.project.calendarSettings.defaultDurationDecimalDigits = 1
ganttSheet.project.calendarSettings.daysPerMonth = 31
ganttSheet.project.layout.roundBarsToWholeDays = true
ganttSheet.project.calendar = calendar // 让编辑后的日历生效
// 设置时间刻度模式
let timescale = ganttSheet.project.timescale
timescale.tierMode = GC.Spread.Sheets.GanttSheet.TimescaleTierMode.middleBottom // 甘特图具有三层模式,“middle”、“middleBottom”和“topMiddleBottom”来显示时间尺度。您可以使用“TimescaleTierMode”枚举来设置时间刻度的层模式
spread.options.allowCopyPasteExcelStyle = false // 外部的内容粘贴,不带样式
spread.options.clipBoardOptions = GC.Spread.Sheets.ClipboardPasteOptions.values // spreadjs内部的复制粘贴,只复制值,不要带上绑定关系、公式之类的其余内容
spread.options.scrollbarShowMax = true // 显示的滚动条是否基于表单中的全部列和行数
spread.options.scrollbarMaxAlign = true // 滚动条是否与活动表单的最后一行和最后一列对齐
spread.options.scrollByPixel = true // 是否启用按像素的精确滚动, 保持贴合
spread.options.allowUserZoom = true // 移动端允许缩放
spread.options.allowExtendPasteRange = true // 从Excel中选择了20行数据复制,粘贴时SpreadJS中只有10行,进行自动扩展行
spread.options.newTabVisible = false // 隐藏sheet后面的加号
spread.resumePaint()
})
},
|
最佳答案
查看完整内容
是不是因为ganttSheet.project 没有设置startDate 属性,导致project默认启示时间是从 today 开始而导致的呀,楼主要不试试加上如下一句代码看是否能达到要求?
ganttSheet.project.startDate = new Date("2024/08/25"); // 具体日期对应第一个task 开始日期。
|