loulijun2021
2023-02-03 cc9c7b396f54ff893e40534d39acdca830ed03dd
src/views/scgl/zdpc.vue
@@ -8,10 +8,10 @@
          :model="formTop"
          label-width="100px"
          inline
          style="display: flex;justify-content: space-between"
          style="display: flex;"
        >
          <div class="elForm">
            <el-form-item label-width="70px" label="车间编码" style=" display: flex;">
            <el-form-item label="车间编码" style=" display: flex;">
              <el-input v-model="formTop.workshop" placeholder="请输入" style="width: 200px" />
            </el-form-item>
            <el-form-item label="生产工单号" style=" display: flex;">
@@ -24,9 +24,9 @@
              <el-input v-model="formTop.partname" placeholder="请输入" style="width: 200px" />
            </el-form-item>
          </div>
          <div class="bodySearchReset" :style="{marginLeft:$store.state.app.sidebar.opened?'5%':'10%'}">
            <el-button type="primary" icon="el-icon-search" @click="search">查询</el-button>
            <el-button type="info" icon="el-icon-refresh" @click="reset">重置</el-button>
          <div class="bodySearchReset" :style="{marginLeft:$store.state.app.sidebar.opened? $store.state.settings.menuIsHorizontal?'15%':'3%':'10%'}">
            <el-button v-waves type="primary" icon="el-icon-search" @click="search">查询</el-button>
            <el-button v-waves type="info" icon="el-icon-refresh" @click="reset">重置</el-button>
          </div>
        </el-form>
        <div
@@ -71,6 +71,7 @@
          />
          <el-table-column
            prop="AdvaSchePiroQue"
            show-tooltip-when-overflow
            label="优先级"
            width="90"
            sortable="custom"
@@ -112,6 +113,7 @@
            prop="AdvaSchePartSpec"
            label="产品规格"
            width="110"
            show-tooltip-when-overflow
            sortable="custom"
          >
            <template slot-scope="{row}">
@@ -122,6 +124,7 @@
          <el-table-column
            prop="AdvaScheQty"
            label="数量"
            show-tooltip-when-overflow
            width="110"
            sortable="custom"
          />
@@ -129,11 +132,13 @@
            prop="AdvaScheEndDate"
            label="要求交付时间"
            sortable="custom"
            show-tooltip-when-overflow
            width="160"
          />
          <el-table-column
            prop="AdvaScheStus"
            label="排程状态"
            show-tooltip-when-overflow
            width="110"
            sortable="custom"
          >
@@ -145,17 +150,19 @@
          <el-table-column
            prop="AdvaScheBotProcName"
            label="排程工序"
            show-tooltip-when-overflow
            width="110"
            sortable="custom"
          />
          <el-table-column
            prop="AdvaSchePCStartDate"
            label="计划排程时间"
            width="160"
            width="200"
            sortable="custom"
            show-tooltip-when-overflow
          >
            <template slot-scope="{row}">
              <div v-if="row.AdvaSchePCStartDate">{{ row.AdvaSchePCStartDate }}</div>
              <div v-if="row.AdvaSchePCStartDate">{{ row.AdvaSchePCStartDate }} ~ {{ row.AdvaSchePCEndDate }} </div>
              <div v-else>/</div>
            </template>
          </el-table-column>
@@ -181,12 +188,14 @@
            ref="form"
            :model="formBottom"
            inline
            style="display: flex;justify-content: space-between"
            label-width="100px"
            style="display: flex;"
          >
            <div class="elForm">
              <el-form-item label-width="70px" label="排程日期" style=" display: flex;">
              <el-form-item label="排程日期" style=" display: flex;">
                <el-date-picker
                  v-model="formBottom.scheDate"
                  :disabled="radioSelectedId===''"
                  type="daterange"
                  range-separator="~"
                  format="yyyy-MM-dd"
@@ -200,21 +209,22 @@
                />
              </el-form-item>
              <el-form-item label="排程方式" style=" display: flex;">
                <el-select v-model="formBottom.types" style="width:120px" @change="changeTypes">
                <el-select v-model="formBottom.types" :disabled="radioSelectedId===''" style="width:120px" @change="changeTypes">
                  <el-option value="N" label="设备优先" />
                  <el-option value="Y" label="时间优先" />
                </el-select>
              </el-form-item>
              <el-form-item label="时间刻度(分钟)" style=" display: flex;">
                <el-select v-model.number="formBottom.scale" style="width: 120px;">
              <el-form-item label="时间刻度(分钟)" label-width="110" style=" display: flex;">
                <el-select v-model.number="formBottom.scale" :disabled="radioSelectedId===''" style="width: 120px;">
                  <el-option v-for="item in scaleList" :key="item" :value="item" :label="item" />
                </el-select>
              </el-form-item>
              <el-form-item label="换型时间(分钟)" style=" display: flex;">
              <el-form-item label="换型时间(分钟)" label-width="110" style=" display: flex;">
                <el-input
                  id="scale"
                  v-model="formBottom.times"
                  :disabled="radioSelectedId===''"
                  type="number"
                  style="display:inline-block;width:80px;"
                  @change="no_zero"
@@ -227,15 +237,19 @@
                </span>
              </el-form-item>
            </div>
            <div class="bodySearchReset" :style="{marginLeft:$store.state.app.sidebar.opened?'5%':'10%'}">
            <div class="bodySearchReset" :style="{marginLeft:$store.state.app.sidebar.opened? $store.state.settings.menuIsHorizontal?'15%':'3%':'10%'}">
              <el-button
                v-waves
                :disabled="radioSelectedId===''"
                type="primary"
                icon="el-icon-document-remove"
                @click="click_schedule"
              >预排
              </el-button>
              <el-button
                v-waves
                type="primary"
                :disabled="radioSelectedId===''"
                icon="el-icon-document-checked"
                @click="click_yes"
              >提交
@@ -287,7 +301,7 @@
                </div>
                <div class="speed">
                  <!--                  <el-tooltip class="item" effect="dark" content="查看" placement="top">-->
                  <!--                    <el-button type="text" size="mini" @click="look(data)">-->
                  <!--                    <el-button v-waves type="text" size="mini" @click="look(data)">-->
                  <!--                      <i class="el-icon-document size i-color"  />-->
                  <!--                    </el-button>-->
                  <!--                  </el-tooltip>-->
@@ -296,8 +310,8 @@
            </template>
            <template slot="title">
              <span class="tc">工位列表</span>
              <el-checkbox v-model="all_status" class="box_style" @change="changeLift()" />
              <input v-model.number="cellWidth" type="range" min="20" max="100" class="box_styles">
              <el-checkbox v-model="all_status" class="box_style" :disabled="radioSelectedId===''" @change="changeLift()" />
              <input v-model.number="cellWidth" type="range" min="20" max="100" class="box_styles" :disabled="radioSelectedId===''">
            </template>
          </v-gantt-chart>
        </div>
@@ -314,6 +328,7 @@
import dayjs from 'dayjs'
import { AdvancedSchedulingSearch, OnclickAdvancedSchedulingDevice, SubmitAlreadyScheduling } from '@/api/scgl'
import { handleDatetime } from '@/utils/global'
import waves from '@/directive/waves'
const scaleList = `30,60,240,360`.split(',').map(n => parseInt(n))
const timeList = `0,30,60,120,240,480`.split(',').map(n => parseInt(n))
@@ -323,6 +338,7 @@
  components: {
    Pagination, Test
  },
  directives: { waves },
  data() {
    return {
      mouseHoverType: 'mouseout',
@@ -430,7 +446,7 @@
      titleHeight: 40,
      titleWidth: 250,
      datasNum: 100,
      // datasNum: 100,
      datasA: [],
      // datasB: mockDatas(100),
      dataKey: 'id',
@@ -446,9 +462,7 @@
      scrollToY: 0,
      positionB: {},
      positionA: {},
      title_list: [],
      imp_id: '',
      submit_flag: false,
      search_from: {
        page: 1,
@@ -460,26 +474,41 @@
    }
  },
  watch: {
    datasNum(newV) {
      // this.datasA = mockDatas(newV)
      // this.datasB = mockDatas(newV)
    },
    // datasNum(newV) {
    //   // this.datasA = mockDatas(newV)
    //   // this.datasB = mockDatas(newV)
    // },
    scrollToY(val) {
      this.positionA = { x: val }
    }
  },
  created() {
    this.getAdvancedSchedulingSearch()
    const loading = this.$loading({
      lock: true,
      text: '正在加载数据,请稍等...',
      spinner: 'el-icon-loading',
      customClass: 'osloading',
      background: 'rgba(0, 0, 0, 0.7)'
    })
    setTimeout(() => {
      if (this.getAdvancedSchedulingSearch()) {
        loading.close()
      }
    }, 3000)
    // this.getAdvancedSchedulingSearch()
  },
  mounted() {
    window.addEventListener('resize', this.getHeight)
    this.getHeight()
  },
  methods: {
    async getAdvancedSchedulingSearch() {
    async   getAdvancedSchedulingSearch() {
      const res = await AdvancedSchedulingSearch(this.formTop)
      this.tableData = res.data
      this.totalTop = res.count
      return true
    },
    // 排序改变时
    sortChangeTop({ column, prop, order }) {
@@ -581,6 +610,7 @@
      this.getOnclickAdvancedSchedulingDevice()
    },
    click_box(val) {
      console.log(val, 567)
      if (!val.status) {
        for (const i in this.facility_data) {
          const new_arr = []
@@ -627,7 +657,7 @@
        this.bm_data[i].gtArray = arr
      }
      this.formBottom.real_num = 0
      this.click_schedule()
      // this.click_schedule()
    },
    look(data) {
      this.showDialog = true
@@ -652,24 +682,15 @@
    // },
    // 点击带出数据
    async  getOnclickAdvancedSchedulingDevice() {
      await this.facility_top()
      await this.facility_top()// 设备优先
      const res = await OnclickAdvancedSchedulingDevice(this.forms)
      if (res.rus.Message) {
        this.$message({
          showClose: true,
          type: 'error',
          message: res.rus.Message
        })
      }
      if (res.rus.Message) { this.$message.error(res.rus.Message) }
      this.submit_flag = false
      const list = []
      this.time_all = res
      const cont = res.Cont
      this.formBottom.real_num = 0
      console.log(this.time_all.rows)
      console.log(this.time_all.rows[0].children)
      for (const i in this.time_all.rows[0].children) {
        const obj = {
          id: '',
@@ -680,7 +701,7 @@
            dark: 'rgb(83, 186, 241,0.8)',
            light: 'rgb(83, 186, 241,0.1)',
            light_capacity: 'rgb(209,239,237,0.8)',
            h_schedule: ' rgb(100,255,192,0.8)',
            h_schedule: 'rgb(100,255,192,0.8)',
            scheduleing: 'rgb(20,182,231,0.8)'
          },
          gtArray: []
@@ -692,7 +713,6 @@
        ].AdvaDevicRhythm
        list.push(obj)
      }
      for (const i in this.time_all.rows) {
        for (const j in this.time_all.rows[i].children) {
          if (this.time_all.rows[i].children[j].OneStartDate != '') {
@@ -859,30 +879,29 @@
          }
        }
      }
      // console.log(newList, 321)
      for (const i in list) {
        this.pushTiem(newList, list[i].id, list[i].gtArray)
      }
      this.bm_data = list
      console.log(this.bm_data, 678)
      const _this = this
      if (cont != '') {
        for (const i in cont) {
          for (const j in this.bm_data) {
            if (this.bm_data[j].id == cont[i].EQP_CODE) {
            if (this.bm_data[j].id == cont[i].eqp_code) {
              const data = {
                id: cont[i].EQP_CODE,
                number: cont[i].ALLOC_QTY,
                cl_name: cont[i].PART_NAME,
                id: cont[i].eqp_code,
                number: cont[i].alloc_qty,
                cl_name: cont[i].part_name,
                cl_code: this.cl_code,
                work_order: cont[i].WO_CODE,
                work_order: cont[i].wo_code,
                STATUS: _this.AdvaScheUom,
                start: cont[i].TIME_START,
                end: cont[i].TIME_END,
                type: cont[i].STATUS == 'S' ? 'h_schedule' : 'bm_schedule'
                // status: _this.AdvaScheUom,
                start: cont[i].time_start,
                end: cont[i].time_end,
                type: cont[i].status == 'S' ? 'h_schedule' : 'bm_schedule'
              }
              this.bm_data[j].flag = 'isCont'
              this.bm_data[j].gtArray.unshift(data)
            }
          }
@@ -897,7 +916,8 @@
          }
        }
      }
      // })
      // this.$forceUpdate()
    },
    // 换型时间
    MinutesTest(time) {
@@ -962,9 +982,10 @@
      this.cl_code = row.AdvaSchePartNumber
      this.AdvaScheUom = row.AdvaScheUom
      this.work_order = row.AdvaScheWorkCode
      this.formBottom.scheDate.push(this.getNowFormatDate())
      this.formBottom.scheDate.push(row.AdvaScheEndDate)
      if (this.formBottom.scheDate !== '') {
      if (this.formBottom.scheDate != '') {
        this.time_data[0] = this.formBottom.scheDate[0] + ' 00:00'
        this.time_data[1] = this.formBottom.scheDate[1] + ' 23:59'
      }
@@ -984,21 +1005,17 @@
    // 提交排程
    async  click_yes() {
      if (this.submit_flag) {
        this.$message({
          showClose: true,
          type: 'error',
          message: '数量未排完,请设置产能时间'
        })
        this.$message.error('数量未排完,请设置产能时间')
      } else {
        const list = [] // 提交数组
        for (const i in this.bm_data) {
          const arr = []
          for (const j in this.bm_data[i].gtArray) {
            if (this.bm_data[i].gtArray[j].type === 'schedule') {
            if (this.bm_data[i].gtArray[j].type == 'schedule') {
              arr.push(this.bm_data[i].gtArray[j])
            }
          }
          if (arr !== '') {
          if (arr != '') {
            for (const i in arr) {
              const data = {
                AlreDevicNumber: '',
@@ -1025,12 +1042,8 @@
        updata = JSON.stringify(updata)
        this.formUpdata.json = updata
        if (list === '') {
          this.$message({
            showClose: true,
            message: '请先预排',
            type: 'error'
          })
        if (list == '') {
          this.$message.error('请先预排')
          return false
        }
@@ -1047,28 +1060,25 @@
        this.formBottom.meter = 0
        this.formBottom.real_num = 0
        // await this.getOnclickAdvancedSchedulingDevice()
        await this.getOnclickAdvancedSchedulingDevice()
        await this.getAdvancedSchedulingSearch()
      }
    },
    // 时间/设备优先排程
    click_schedule() {
      const timestamp = new Date().toLocaleDateString()
      if (new Date(this.formBottom.scheDate[0]) < new Date(timestamp)) {
        this.$message({
          showClose: true,
          type: 'error',
          message: '排程时间不可以小于当前时间'
        })
      if (new Date(this.formBottom.scheDate[1]) < new Date(timestamp)) {
        this.$message.error('排程日期不可以小于当前时间!')
        return false
      }
      this.nitialize()// 手动过滤所有设备已排程
      if (this.bm_data !== '' && this.formBottom.types === 'N') { // 设备优先
      // console.log(this.facility_data, 67890)
      if (this.bm_data != '' && this.formBottom.types == 'N') { // 设备优先
        this.fun_time()
        this.change_num(this.bm_data)
      } else if (this.facility_data !== '' && this.formBottom.types === 'Y') { // 时间优先
      } else if (this.facility_data != '' && this.formBottom.types == 'Y') { // 时间优先
        this.time_nitalize()
        this.fun_facility()
        this.dataTransition()
@@ -1079,7 +1089,7 @@
    // 手动过滤所有时间已排程
    time_nitalize() {
      for (const i in this.facility_data) {
        this.facility_data[i].gtArray = this.facility_data[i].gtArray.filter(item => item.type !== 'schedule')
        this.facility_data[i].gtArray = this.facility_data[i].gtArray.filter(item => item.type != 'schedule')
      }
    },
    // 手动过滤所有设备已排程
@@ -1087,7 +1097,7 @@
      for (const i in this.bm_data) {
        const newArr = []
        for (const j in this.bm_data[i].gtArray) {
          if (this.bm_data[i].gtArray[j].type !== 'schedule') {
          if (this.bm_data[i].gtArray[j].type != 'schedule') {
            newArr.push(this.bm_data[i].gtArray[j])
          }
        }
@@ -1151,8 +1161,8 @@
        let capacity_arr = [] // 要排程的数组
        this.bm_data[i].gtArray.sort((a, b) => new Date(a.end).getTime() - new Date(b.end).getTime())
        // let capacity_end = ''
        end_arr = this.bm_data[i].gtArray.filter(item => item.type === 'h_schedule')
        nend_arr = this.bm_data[i].gtArray.filter(item => item.type === 'capacity')
        end_arr = this.bm_data[i].gtArray.filter(item => item.type == 'h_schedule')
        nend_arr = this.bm_data[i].gtArray.filter(item => item.type == 'capacity')
        if (end_arr && end_arr.length > 0) {
          capacity_arr = nend_arr.map(item => {
            // 排除掉已经排程的存在hshedule,start,end都相等的情况
@@ -1299,7 +1309,7 @@
        capacity_arr = JSON.parse(JSON.stringify(nend_arr))
        end_arr.forEach(item => {
          for (let i = 0; i < capacity_arr.length; i++) {
            if (new Date(capacity_arr[i].start).getTime() === new Date(item.start).getTime()) {
            if (new Date(capacity_arr[i].start).getTime() == new Date(item.start).getTime()) {
              console.log(i, capacity_arr[i], '哇哈哈')
              capacity_arr.splice(i, 1)
              break
@@ -1313,7 +1323,7 @@
        const schedule_arr = end_arr.filter(item => {
          const remain = nend_arr.some(sitem => {
            return new Date(sitem.start).getTime() === new Date(item.start).getTime() &&
            return new Date(sitem.start).getTime() == new Date(item.start).getTime() &&
              new Date(item.end).getTime() < new Date(sitem.end).getTime()
          })
          return remain
@@ -1322,7 +1332,7 @@
        if (schedule_arr && schedule_arr.length > 0) {
          const scheduleCan = schedule_arr.map(item => {
            const capcity = nend_arr.filter(sitem => {
              return new Date(sitem.start).getTime() === new Date(item.start).getTime() &&
              return new Date(sitem.start).getTime() == new Date(item.start).getTime() &&
                new Date(item.end).getTime() < new Date(sitem.end).getTime()
            })[0]
            console.log('capacity', capcity)
@@ -1477,7 +1487,7 @@
            dark: 'rgb(83, 186, 241,0.8)',
            light: 'rgb(83, 186, 241,0.1)',
            light_capacity: 'rgb(209,239,237,0.8)',
            h_schedule: ' rgb(100,255,192,0.8)',
            h_schedule: 'rgb(100,255,192,0.8)',
            scheduleing: 'rgb(20,182,231,0.8)'
          },
          gtArray: []
@@ -1489,6 +1499,8 @@
        this.title_list.push(obj)
      }
      console.log(12321)
      console.log(data, 1)
      for (const i in data) {
        for (const j in data[i].children) {
          if (data[i].children[j].OneStartDate != '') {
@@ -1622,18 +1634,18 @@
      if (cont != '') {
        for (const i in cont) {
          const date_time = cont[i].TIME_START.split(' ')
          const date_time = cont[i].time_start.split(' ')
          const cont_date = date_time[0]
          for (const j in this.facility_data) {
            const data = {
              id: cont[i].EQP_CODE,
              id: cont[i].eqp_code,
              date: cont_date,
              number: cont[i].ALLOC_QTY,
              cl_name: cont[i].PART_NAME,
              number: cont[i].alloc_qty,
              cl_name: cont[i].part_name,
              cl_code: this.cl_code,
              work_order: cont[i].WO_CODE,
              start: cont[i].TIME_START,
              end: cont[i].TIME_END,
              work_order: cont[i].wo_code,
              start: cont[i].time_start,
              end: cont[i].time_end,
              type: 'h_schedule'
            }
            if (this.facility_data[j].date == data.date) {
@@ -1642,7 +1654,6 @@
          }
        }
      }
      // })
    },
    // 排程方法
    formSeconds(s1, start, mod) {
@@ -1742,7 +1753,7 @@
.box_style {
  position: relative;
  top: 40px;
  left: -75px;
  left: -91px;
}
.box_styles {