小小儁爺
2026-01-21 ba77dbbe9a52f84ccd4ca47f47f6263d250f51dc
1.递交
已修改1个文件
80 ■■■■ 文件已修改
src/views/gantt/index.vue 80 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/gantt/index.vue
@@ -20,7 +20,7 @@
        size="mini"
        style="margin-left: 10px;"
        placeholder="请选择"
        @change="prepareArrange"
        @change="priorityMethodChange"
      >
        <el-option
          v-for="item in priorityMethodArr"
@@ -46,6 +46,13 @@
      </el-button>
      <el-button size="mini" @click="handleClearSelection">
        清空复选框选择
      </el-button>
      <el-button size="mini" type="primary" @click="prepareArrange">
        预排
      </el-button>
      <el-button size="mini" disabled>
        预排进度:{{ canArrangeNumber }}/{{ needArrangeNumber }}
      </el-button>
    </div>
@@ -94,6 +101,7 @@
      fivePeriodsTimeName: ['OneStartDate', 'TwoStartDate', 'ThreeStartDate', 'FourStartDate', 'FiveStartDate'], // 五个时间段的键名
      needArrangeNumber: 5000, // 假设需要排产数量5000
      canArrangeNumber: 0, // 能排数量默认为 0
      priorityMethod: 'device', // device 设备   time  时间
      priorityMethodArr: [
        { code: 'device', name: '设备优先' },
@@ -267,7 +275,7 @@
        // return '<b>任务:</b> ' + task.text + '<br/><b>开始时间:</b> ' + `${gantt.date.date_to_str('%Y-%m-%d')(start)}` + '<br/><b>结束时间:</b> ' + handleDateReduceOneDay(end)
        // return '<b>任务:</b> ' + task.text + '<br/><b>开始时间:</b> ' + handleDatetime2(start) + '<br/><b>结束时间:</b> ' + handleDateReduceOneDay(end) + '<br/><b>进度:</b> ' + task.progress * 100 + '%'
        return '<b>任务:</b> ' + task.text +
          '<br/><b>生产数量:</b> ' + task.producedCount +
          '<br/><b>' + `${task.type === 'task' ? '产能' : '生产数量'}` + ' :</b> ' + task.producedCount +
          '<br/><b>进度:</b> ' + task.progress * 100 + '%' +
          '<br/><b>开始时间:</b> ' + handleDatetime2(start) +
          '<br/><b>结束时间:</b> ' + handleDatetime2(end)
@@ -520,7 +528,8 @@
                text: '任务名称预留',
                partName: it.AdvaDevicName,
                partCode: it.AdvaDevicNumber,
                // start_date: item.YearDate + ' ' + it.OneStartDate.split('~')[0],
                start_date: handleDatetime2(item.YearDate + ' ' + it.OneStartDate.split('~')[0]), // 这个是无效的,只是为了预排prepareArrange方法里面不报错
                end_date: handleDatetime2(item.YearDate + ' ' + it.OneStartDate.split('~')[1]), // 这个是无效的,只是为了预排prepareArrange方法里面不报错
                // duration: this.calculateTimeRangeInMinutes(it.OneStartDate),
                render: 'split', // 用于在一个工作时间段内显示不下,需要进行分割显示
                checked: false,
@@ -542,6 +551,7 @@
                  partName: it.AdvaDevicName,
                  partCode: it.AdvaDevicNumber,
                  start_date: handleDatetime2(item.YearDate + ' ' + it[this.fivePeriodsTimeName[i]].split('~')[0]),
                  end_date: handleDatetime2(item.YearDate + ' ' + it[this.fivePeriodsTimeName[i]].split('~')[1]),
                  duration,
                  checked: false,
                  progress: 0,
@@ -856,7 +866,8 @@
      gantt.config.end_date = new Date(this.ganttDateRange[1] + ' 24:00')
      gantt.config.scales = scaleConfig
      if (boolean) {
        gantt.render()// gantt重绘
        // gantt.render()// gantt重绘
        this.renderGanttChart()
      }
    },
@@ -900,6 +911,7 @@
    },
    // 甘特图日期改变
    ganttDateRangeChange(val) {
      this.priorityMethodChange()// 清空已排值
      gantt.config.start_date = new Date(val[0] + ' 00:00')
      gantt.config.end_date = new Date(val[1] + ' 24:00')
      gantt.render()
@@ -949,7 +961,6 @@
    },
    // 预排
    prepareArrange() {
      this.allTasks = this.allTasks.filter(i => i.type !== 'task2')
      // 优先方式  time  device
      if (this.priorityMethod === 'time') {
        this.allTasks.sort((a, b) => a.start_date - b.start_date)
@@ -961,30 +972,57 @@
      }
      const newArr = []
      // this.canArrangeNumber = 0
      let needArrangeNumber = this.needArrangeNumber
      this.allTasks.forEach(item => {
        if (item.type === 'task') {
        // if (item.type === 'task') { // 这里的判断条件还得加个日期判断
        if (item.type === 'task' &&
          new Date(item.start_date).getTime() >= new Date(this.ganttDateRange[0] + ' 00:00:00').getTime() &&
          new Date(item.end_date).getTime() >= new Date().getTime()) { // 这里的判断条件还得加个日期判断 结束时间要大于目前时间
          console.log(JSON.parse(JSON.stringify(item)))
          const count = needArrangeNumber > 0 && needArrangeNumber <= item.producedCount ? needArrangeNumber : item.producedCount
          needArrangeNumber = needArrangeNumber - item.producedCount // 剩余待排值
          if (count > 0 && (needArrangeNumber > 0 || Math.abs(needArrangeNumber) < item.producedCount)) { // 一定是大于零且小于整条的生产值的
            // duration  最后一条的数据应该是通过计算得出时间长度的
            const duration = (count / (item.AdvaDevicCropMob / 100)) * item.AdvaDevicRhythm / 60
            newArr.push({
          let ratio = 1 // 默认系数 1
          if (new Date(item.start_date).getTime() < new Date().getTime() && new Date(item.end_date).getTime() >= new Date().getTime()) {
            const d = this.calculateTimeRangeInMinutes(handleDatetime2(new Date()).split('  ')[1] + '~' + handleDatetime2(item.end_date).split('  ')[1])
            ratio = d / item.duration
          }
          // 这个地方的count值 得变更  item.producedCount  得乘以个系数  默认系数 1
          const count = needArrangeNumber > 0 && needArrangeNumber <= item.producedCount * ratio ? needArrangeNumber : item.producedCount * ratio
          needArrangeNumber = needArrangeNumber - item.producedCount * ratio // 剩余待排值
          if (count > 0 && (needArrangeNumber > 0 || Math.abs(needArrangeNumber) < item.producedCount * ratio)) { // 一定是大于零且小于整条的生产值的
            // duration   单位 分钟
            let duration = (count / (item.AdvaDevicCropMob / 100)) * item.AdvaDevicRhythm / 60
            if (count < item.producedCount && new Date().getTime() <= new Date(item.start_date)) {
              console.log('执行1111')
              duration = duration * (count / item.producedCount)
              // item.end_date = '2026-01-24  11:00:00'
            }
            // console.log(duration, 'duration')
            const obj = {
              id: nanoid(),
              type: 'task2',
              text: '任务名称111',
              partName: item.partName,
              partCode: item.partCode,
              start_date: handleDatetime2(item.start_date),
              // duration: item.duration,
              duration: duration,
              start_date: new Date(item.start_date).getTime() < new Date().getTime() ? handleDatetime2(new Date()) : handleDatetime2(item.start_date),
              // end_date: handleDatetime2(item.end_date),
              // end_date: item.end_date,
              duration, // 代表的是进度条
              checked: false,
              progress: 0,
              parent: item.parent,
              saleOrder: item.saleOrder,
              producedCount: count <= item.producedCount ? count : item.producedCount
            })
              producedCount: count <= item.producedCount ? count.toFixed(0) : item.producedCount
            }
            this.canArrangeNumber += parseFloat(obj.producedCount)
            console.log(this.canArrangeNumber)
            // 这个地方得加个逻辑,得根据世间日期进行push   下午研究一下
            newArr.push({ ...obj })
          }
        }
      })
@@ -1003,6 +1041,14 @@
      this.totalTasks = this.allTasks.length
      this.updatePaginatedTasks()
      this.renderGanttChart()
    },
    // 清空已排值
    priorityMethodChange() {
      this.canArrangeNumber = 0
      this.allTasks = this.allTasks.filter(i => i.type !== 'task2')
      this.totalTasks = this.allTasks.length
      this.updatePaginatedTasks()
      this.renderGanttChart()
    }
  }