loulijun2021
2022-11-05 c4b49d08cef0805e17646eef03e1c1a62316c3b2
1.产能规划优化
已修改6个文件
332 ■■■■ 文件已修改
src/components/DatePicker/index.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/lib/v-gantt-chart/lib/components/left-bar/index.vue 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/lib/v-gantt-chart/lib/components/time-line/index.vue 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/lib/v-gantt-chart/lib/gantt.scss 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/lib/v-gantt-chart/lib/gantt.vue 补丁 | 查看 | 原始文档 | blame | 历史
src/views/scgl/zdpc.vue 179 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/DatePicker/index.vue
@@ -129,6 +129,7 @@
  CapacityPlanningOnclickSelect,
  CapacityPlanningSetupSearch
} from '@/api/scgl'
import { handleDatetime } from '@/utils/global'
var time = null
export default {
@@ -514,7 +515,8 @@
    },
    getCapacityPlanningCalendar() {
      CapacityPlanningCalendar({ captplanid: this.rowData.CaptPlanId }).then((res) => {
        this.defArr = res.data
        const currentDate = handleDatetime(new Date())
        this.defArr = res.data.filter(i => i.name >= currentDate)
      })
    },
    closeCapacityPlanningCalendar() {
src/lib/v-gantt-chart/lib/components/left-bar/index.vue
@@ -1,12 +1,15 @@
<template>
  <div class="gantt-leftbar">
    <div class="gantt-leftbar-item "
         :style="{height:calTopSpace()+'px'}">
    </div>
    <div class="gantt-leftbar-item"
         :style="cellHeightStyle"
  <div class="gantt-leftbar" style="border-top: 1px solid #eee">
    <div
      class="gantt-leftbar-item "
      :style="{height:calTopSpace()+'px'}"
    />
    <div
         v-for="(data,index) in showDatas"
         :key="dataKey?data[dataKey]:index">
      :key="dataKey?data[dataKey]:index"
      class="gantt-leftbar-item"
      :style="cellHeightStyle"
    >
      <slot :data="data">
        <div class="gantt-leftbar-defalutItem">need slot</div>
      </slot>
@@ -17,7 +20,7 @@
<script>
import dr from '../dynamic-render.js'
export default {
  name: "LeftBar",
  name: 'LeftBar',
  mixins:[dr],
  props:{
    dataKey:String,
@@ -33,5 +36,5 @@
      }
    }
  }
};
}
</script>
src/lib/v-gantt-chart/lib/components/time-line/index.vue
@@ -1,19 +1,31 @@
<template>
  <div class="gantt-timeline"
       :style="{'margin-left':-cellWidth/2+'px'}">
    <div class="gantt-timeline-block"
         v-for="(day,index) in getDays" :style="{width:getTimeScales(day).length*cellWidth+'px'}"
         :key="index">
      <div class="gantt-timeline-day "
           :style="heightStyle">
  <div
    class="gantt-timeline"
    :style="{'margin-left':-cellWidth/2+'px'}"
  >
    <div
      v-for="(day,index) in getDays"
      :key="index"
      class="gantt-timeline-block"
      :style="{width:getTimeScales(day).length*cellWidth+'px'}"
    >
      <div
        class="gantt-timeline-day "
        :style="heightStyle"
      >
        {{day.format("YYYY-MM-DD")}}
        {{getDayMy(day.format("YYYY-MM-DD"))}}
        </div>
      <div class="gantt-timeline-scale "
           :style="heightStyle">
        <div :style="cellWidthStyle"
      <div
        class="gantt-timeline-scale"
        :style="heightStyle"
        style="border-right: 1px solid #eee"
      >
        <div
             v-for="(hour,index) in getTimeScales(day)"
             :key="index">
          :key="index"
          :style="cellWidthStyle"
        >
            {{hour}}
          <!-- <span v-if="hour !='01' ">{{hour}}</span> -->
        </div>
@@ -23,19 +35,19 @@
</template>
<script>
import dayjs from "dayjs";
import { getBeginTimeOfTimeLine } from "../../utils/timeLineUtils.js";
import dayjs from 'dayjs'
import { getBeginTimeOfTimeLine } from '../../utils/timeLineUtils.js'
const START_DAY = Symbol();
const MIDDLE_DAY = Symbol();
const END_DAY = Symbol();
const START_DAY = Symbol()
const MIDDLE_DAY = Symbol()
const END_DAY = Symbol()
function isSameDay(one, two) {
  return one.isSame(two, "day");
  return one.isSame(two, 'day')
}
export default {
  name: "Timeline",
  name: 'Timeline',
  props: {
    start: {
@@ -61,33 +73,33 @@
     * @returns {[dayjs]} 该data中所有需要渲染的数据
     */
    getDays() {
      let temp = [];
      let { start, end } = this;
      const temp = []
      let { start, end } = this
      for (; !isSameDay(start, end); start = start.add(1, "day")) {
        temp.push(start);
      for (; !isSameDay(start, end); start = start.add(1, 'day')) {
        temp.push(start)
      }
      temp.push(start);
      temp.push(start)
      return temp;
      return temp
    },
    cellWidthStyle() {
      return {
        width: `${this.cellWidth}px`
      };
      }
    },
    heightStyle() {
      return {
        height: this.titleHeight + "px",
        "line-height": this.titleHeight  + "px",
      };
        height: this.titleHeight + 'px',
        'line-height': this.titleHeight + 'px'
      }
    }
  },
  methods: {
    // 算出星期
    getDayMy(day){
      let weekArray = new Array("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六");
      const weekArray = new Array('星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六')
      return weekArray[new Date(day).getDay()]
    },
    /**
@@ -97,13 +109,13 @@
     * @returns {[string]} 该data中所有需要渲染的数据
     */
    getTimeScales(date) {
      let { start, end } = this;
      const { start, end } = this
      if (isSameDay(date, start)) {
        return this.generateTimeScale(START_DAY);
        return this.generateTimeScale(START_DAY)
      } else if (isSameDay(date, end)) {
        return this.generateTimeScale(END_DAY);
        return this.generateTimeScale(END_DAY)
      } else {
        return this.generateTimeScale(MIDDLE_DAY);
        return this.generateTimeScale(MIDDLE_DAY)
      }
    },
    /**
@@ -113,49 +125,50 @@
     * @returns {[string]} 该data中所有需要渲染的数据
     */
    generateTimeScale(type) {
      let totalblock = [];
      let { start, end, scale } = this;
      let a, b;
      const totalblock = []
      const { start, end, scale } = this
      let a, b
      switch (type) {
        case START_DAY: //和start同一天
          a = getBeginTimeOfTimeLine(start, scale);
          a = getBeginTimeOfTimeLine(start, scale)
          //start和end同一天特殊处理
          if (isSameDay(start, end)) {
            b = end;
            b = end
          } else {
            b = start.endOf("day");
            b = start.endOf('day')
          }
          break;
          break
        case END_DAY: //和end 同一天
          a = end.startOf("day");
          b = end;
          break;
          a = end.startOf('day')
          b = end
          break
        case MIDDLE_DAY: //start和end中间的天
          a = start.startOf("day");
          b = start.endOf("day");
          break;
          a = start.startOf('day')
          b = start.endOf('day')
          break
        default:
          throw new TypeError("错误的计算类型");
          throw new TypeError('错误的计算类型')
      }
      while (!a.isAfter(b)) {
        if (scale >= 60) {
          totalblock.push(a.format("HH"));
          totalblock.push(a.format('HH'))
        } else {
          totalblock.push(a.format("HH:mm"));
          totalblock.push(a.format('HH:mm'))
        }
        a = a.add(scale, "minute");
        a = a.add(scale, 'minute')
      }
      return totalblock;
      return totalblock
    }
  },
};
  }
}
</script>
<style lang="scss" scoped>
.gantt-timeline-day{
  border-right: 1px solid #ebeef5;
  border-bottom: 1px solid #ebeef5;
  background: rgb(245, 245, 245);
  //background: rgb(245, 245, 245);
  background: #fff;
  color: #909399;
  font-size: 14px;
}
src/lib/v-gantt-chart/lib/gantt.scss
@@ -28,6 +28,9 @@
      color: #777;
      font-weight: bold;
      text-align: center;
      border-right: 1px solid #eee;
      border-bottom: 1px solid #eee;
    }
    &-timeline {
@@ -147,6 +150,7 @@
  }
  &-scroll-y {
    display: none;
    overflow-y: scroll;
    position: absolute;
    z-index: 1000;
@@ -170,7 +174,8 @@
    height: 17px;
    &>div {
      height: 17px;
      //height: 17px;
      height: 8px;
    }
  }
}
src/lib/v-gantt-chart/lib/gantt.vue
src/views/scgl/zdpc.vue
@@ -139,12 +139,18 @@
      <!--      自动排程部分的代码-->
      <div class="autoScheduling">
        <el-tabs>
          <el-row>
            <el-col :span="7" :offset="1">
              <span class="t_size" style="margin-left:7px">排程日期</span>
        <div class="bodyTopFormGroup">
          <el-form
            ref="form"
            :model="formBottom"
            inline
            style="display: flex;justify-content: space-between"
          >
            <div class="elForm">
              <el-form-item label-width="70px" label="排程日期" style=" display: flex;">
              <el-date-picker
                v-model="value1"
                  v-model="formBottom.value1"
                type="daterange"
                range-separator="~"
                format="yyyy-MM-dd"
@@ -155,52 +161,36 @@
                :picker-options="pickerOptions1"
                @change="change_time"
              />
            </el-col>
            <el-col :span="3">
              <span class="t_size">排程方式</span>
              <el-select v-model="types" size="small" style="width:120px" @change="changeTypes">
              </el-form-item>
              <el-form-item label="排程方式" style=" display: flex;">
                <el-select v-model="formBottom.types" style="width:120px" @change="changeTypes">
                <el-option value="N" label="设备优先" />
                <el-option value="Y" label="时间优先" />
              </el-select>
            </el-col>
              </el-form-item>
              <el-form-item label="时间刻度(分钟)" style=" display: flex;">
                <el-select v-model.number="formBottom.scale" style="width: 120px;">
                  <el-option v-for="item in scaleList" :key="item" :value="item" :label="item" />
                </el-select>
            <el-col :span="3" :offset="1">
              <div style="height:32px;">
                <span class="t_size">时间刻度</span>
                <select id="scale" v-model.number="scale">
                  <option v-for="i in scaleList" :key="i">{{ i }}</option>
                </select>
                <span class="t_size">分钟</span>
              </div>
            </el-col>
            <el-col :span="3">
              <div style="height:32px;">
                <span class="t_size">换型时间</span>
              </el-form-item>
              <el-form-item label="换型时间(分钟)" style=" display: flex;">
                <el-input
                  id="scale"
                  v-model="times"
                  v-model="formBottom.times"
                  type="number"
                  size="mini"
                  style="display:inline-block;width:80px;"
                  @change="no_zero"
                />
                <span class="t_size">分钟</span>
              </div>
            </el-col>
            <el-col :span="3">
              <div style="height:32px;line-height: 28px;">
                <span class="t_size">预排进度</span>
              </el-form-item>
              <el-form-item label="预排进度" style=" display: flex;">
                <span>
                  <span style="text-decoration:underline;">{{ real_num }}</span> /
                  <span style="text-decoration:underline">{{ meter }}</span>
                  <span style="text-decoration:underline;">{{ formBottom.real_num }}</span> /
                  <span style="text-decoration:underline">{{ formBottom.meter }}</span>
                </span>
              </el-form-item>
              </div>
            </el-col>
            <el-col :span="3" style="display: flex">
            <div class="bodySearchReset" :style="{marginLeft:$store.state.app.sidebar.opened?'5%':'10%'}">
              <el-button
                type="primary"
                icon="el-icon-document-remove"
@@ -213,11 +203,13 @@
                @click="click_yes"
              >提交
              </el-button>
            </el-col>
          </el-row>
          <el-row />
        </el-tabs>
            </div>
          </el-form>
          <div
            class="bodyTopFormExpand"
            style="height: 5px"
          />
        </div>
        <div class="container" style="margin: 10px;">
          <v-gantt-chart
@@ -227,7 +219,7 @@
            :cell-height="cellHeight"
            :time-lines="timeLines"
            :title-height="titleHeight"
            :scale="scale"
            :scale="formBottom.scale"
            :title-width="titleWidth"
            show-current-time
            :hide-header="hideHeader"
@@ -321,7 +313,7 @@
          return time.getTime() <= Date.now() - 24 * 60 * 60 * 1000
        }
      },
      real_num: 0,
      keep_data: [],
      all_status: true,
      look_data: [],
@@ -353,9 +345,16 @@
      click_one: 0,
      datasC: [],
      radio: '',
      // value1: ['2022-11-04', '2022-11-09'],
      value1: '',
      types: 'N',
      formBottom: {
        value1: ['2022-11-05', '2022-11-12'], // 排程日期
        types: 'N', // 排程方式
        scale: 60, // 时间刻度
        times: 0, // 换型时间
        real_num: 0, // 预排进度
        meter: 0// 节拍
      },
      no: false,
      total: 0,
      mn_data: [],
@@ -392,12 +391,12 @@
      cellHeight: 30,
      titleHeight: 40,
      titleWidth: 250,
      scale: 60,
      datasNum: 100,
      datasA: [],
      // datasB: mockDatas(100),
      dataKey: 'id',
      times: 0,
      timeList: timeList,
      scaleList: scaleList,
      scrollToTime: dayjs()
@@ -409,7 +408,7 @@
      scrollToY: 0,
      positionB: {},
      positionA: {},
      meter: 0, // 节拍
      title_list: [],
      imp_id: '',
      submit_flag: false,
@@ -559,8 +558,8 @@
    window.addEventListener('resize', this.getHeight)
    this.getHeight()
    // this.change_time()
    // this.click_schedule()
    this.change_time()
    this.click_schedule()
  },
  methods: {
    async getAdvancedSchedulingSearch() {
@@ -628,8 +627,8 @@
      })
    },
    no_zero() {
      if (this.times < 0) {
        this.times = 0
      if (this.formBottom.times < 0) {
        this.formBottom.times = 0
      }
    },
    sortChange(column, prop, order) {
@@ -662,10 +661,10 @@
      this.OnclickAdvancedSchedulingDevice()
    },
    change_time() {
      this.time_data[0] = this.value1[0] + ' 00:00'
      this.time_data[1] = this.value1[1] + ' 23:59'
      this.forms.StartTime = this.value1[0]
      this.forms.EndTime = this.value1[1]
      this.time_data[0] = this.formBottom.value1[0] + ' 00:00'
      this.time_data[1] = this.formBottom.value1[1] + ' 23:59'
      this.forms.StartTime = this.formBottom.value1[0]
      this.forms.EndTime = this.formBottom.value1[1]
      this.OnclickAdvancedSchedulingDevice()
    },
    click_box(val) {
@@ -714,7 +713,7 @@
        }
        this.bm_data[i].gtArray = arr
      }
      this.real_num = 0
      this.formBottom.real_num = 0
    },
    look(data) {
      this.showDialog = true
@@ -776,7 +775,7 @@
      const list = []
      this.time_all = res
      const cont = res.Cont
      this.real_num = 0
      this.formBottom.real_num = 0
      for (const i in this.time_all.rows[0].children) {
        const obj = {
          id: '',
@@ -1009,7 +1008,7 @@
    // 换型时间
    MinutesTest(time) {
      var sdate1 = new Date(time)
      sdate1.setMinutes(sdate1.getMinutes() + this.times * 1)
      sdate1.setMinutes(sdate1.getMinutes() + this.formBottom.times * 1)
      var now =
        sdate1.getFullYear() +
        '-' +
@@ -1061,17 +1060,17 @@
    },
    getCurrentRow(row) {
      // this.show =true
      this.meter = row.AdvaScheQty * 1 - row.AdvaScheYPQty * 1 // 可以做个数
      this.value1 = []
      this.formBottom.meter = row.AdvaScheQty * 1 - row.AdvaScheYPQty * 1 // 可以做个数
      this.formBottom.value1 = []
      this.cl_name = row.AdvaSchePartName
      this.cl_code = row.AdvaSchePartNumber
      this.AdvaScheUom = row.AdvaScheUom
      this.work_order = row.AdvaScheWorkCode
      this.value1.push(this.getNowFormatDate())
      this.value1.push(row.AdvaScheEndDate)
      if (this.value1 != '') {
        this.time_data[0] = this.value1[0] + ' 00:00'
        this.time_data[1] = this.value1[1] + ' 23:59'
      this.formBottom.value1.push(this.getNowFormatDate())
      this.formBottom.value1.push(row.AdvaScheEndDate)
      if (this.formBottom.value1 != '') {
        this.time_data[0] = this.formBottom.value1[0] + ' 00:00'
        this.time_data[1] = this.formBottom.value1[1] + ' 23:59'
      }
      this.forms.WorkCode = row.AdvaScheWorkCode
      this.forms.WorkShop = row.AdvaScheWorkShopid
@@ -1154,8 +1153,8 @@
                type: 'success'
              })
            }
            this.meter = 0
            this.real_num = 0
            this.formBottom.meter = 0
            this.formBottom.real_num = 0
            this.OnclickAdvancedSchedulingDevice()
            this.AdvancedSchedulingSearch()
          })
@@ -1165,7 +1164,7 @@
    // 时间/设备优先排程
    click_schedule() {
      const timestamp = new Date().toLocaleDateString()
      if (new Date(this.value1[0]) < new Date(timestamp)) {
      if (new Date(this.formBottom.value1[0]) < new Date(timestamp)) {
        this.$message({
          showClose: true,
          type: 'error',
@@ -1176,10 +1175,10 @@
      this.nitialize()
      // 设备优先
      if (this.bm_data != '' && this.types == 'N') {
      if (this.bm_data != '' && this.formBottom.types == 'N') {
        this.fun_time()
        this.change_num(this.bm_data)
      } else if (this.facility_data != '' && this.types == 'Y') {
      } else if (this.facility_data != '' && this.formBottom.types == 'Y') {
        this.time_nitalize()
        this.fun_facility()
        this.dataTransition()
@@ -1209,7 +1208,7 @@
    // 给排程最后一个修改数量
    change_num(arr) {
      this.real_num = 0 // 真实已排数量
      this.formBottom.real_num = 0 // 真实已排数量
      let num = 0 // 取整已排数量
      const arr_num = [] // 已排数据
      let mend_num = 0
@@ -1223,19 +1222,19 @@
      }
      for (const n in arr_num) {
        this.real_num += arr_num[n].real_number
        this.formBottom.real_num += arr_num[n].real_number
        num += arr_num[n].number * 1
      }
      this.real_num = Math.ceil(this.real_num)
      const y10 = this.meter - this.real_num
      this.formBottom.real_num = Math.ceil(this.formBottom.real_num)
      const y10 = this.formBottom.meter - this.formBottom.real_num
      if (y10 <= 10) {
        this.real_num = this.meter
        mend_num = this.meter - num
        this.formBottom.real_num = this.formBottom.meter
        mend_num = this.formBottom.meter - num
      } else {
      }
      if (this.real_num * 1 == this.meter * 1) {
        // mend_num =  this.meter - num
      if (this.formBottom.real_num * 1 == this.formBottom.meter * 1) {
        // mend_num =  this.formBottom.meter - num
      } else {
        this.submit_flag = true
      }
@@ -1252,7 +1251,7 @@
      }
    },
    fun_time() {
      let all_num = this.meter
      let all_num = this.formBottom.meter
      const all_time = []
      let flag1 = 0
      const mod = this.bm_data[0].mod
@@ -1393,7 +1392,7 @@
        }
        this.facility_data[i].gtArray = newArr
      }
      let all_num = this.meter
      let all_num = this.formBottom.meter
      const all_time = []
      const flag1 = 0
      // let nowTime = this.facility_data[0].AdvaDevicRhythm*all_num  //数量OK
@@ -1865,13 +1864,15 @@
  top: 40px;
  left: 0;
}
/*自动排程部分*/
.autoScheduling {
  display: flex;
  flex-direction: column;
  /*padding: 0 10px;*/
  /* height: calc(100vh - 100px); */
  background-color:#f8f8fa ;
  /*background-color: #f8f8fa;*/
  background-color: #fff;
  margin-top: 20px;
  /*height: 390px;*/
}
@@ -2120,7 +2121,15 @@
  ::v-deep .el-table__fixed {
    height: 100% !important;
  }
}
::v-deep .gantt-header-title{
  background-color: #fff;
  //border-left: 1px solid #eee !important;
  //border-bottom: 1px solid #eee !important;
}
</style>
<style>