找回密码
 立即注册

QQ登录

只需一步,快速开始

cgskin

金牌服务用户

3

主题

4

帖子

17

积分

金牌服务用户

积分
17
  • 95

    金币

  • 3

    主题

  • 4

    帖子

cgskin
金牌服务用户   /  发表于:2024-10-15 15:36  /   查看:266  /  回复:4
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()
      })
    },

manual模式数据.txt

25.88 KB, 下载次数: 2

最佳答案

查看完整内容

是不是因为ganttSheet.project 没有设置startDate 属性,导致project默认启示时间是从 today 开始而导致的呀,楼主要不试试加上如下一句代码看是否能达到要求? ganttSheet.project.startDate = new Date("2024/08/25"); // 具体日期对应第一个task 开始日期。

4 个回复

正序浏览
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-10-16 09:42:32
5#
好的,那就先结贴了,后续有其他问题的话随时开新帖提问哈。
回复 使用道具 举报
cgskin
金牌服务用户   /  发表于:2024-10-15 22:58:52
4#
AKA_HSTS 发表于 2024-10-15 17:59
是不是因为ganttSheet.project 没有设置startDate 属性,导致project默认启示时间是从 today 开始而导致的 ...

试了下,设置startDate,确实就可以了
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-10-15 15:37:54
2#
您好,您描述的情况我了解了,这边调研一下,后续有进展我会在本贴中回复您。
回复 使用道具 举报
最佳答案
最佳答案
AKA_HSTS
注册会员   /  发表于:2024-10-15 15:36:14
来自 3#
是不是因为ganttSheet.project 没有设置startDate 属性,导致project默认启示时间是从 today 开始而导致的呀,楼主要不试试加上如下一句代码看是否能达到要求?
ganttSheet.project.startDate = new Date("2024/08/25");  // 具体日期对应第一个task 开始日期。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部