songshankun
2023-10-26 e35963c6c457a46c11309ddac7458481b586737e
src/views/visualization.vue
@@ -53,7 +53,7 @@
        >
        <template v-if="taskData">
          <div class="gong-date">
            工序运行时间:{{ getFormatTime(taskData.Procedure.startTime) }}
            工序运行时间:{{ getTaskRunningTime(taskData.Procedure.realStartTime,taskData.Procedure.realEndTime) }}
          </div>
          <div class="statelist">
            <span class="title-item"
@@ -145,9 +145,9 @@
                  {{ taskData.Procedure.procedure.workHours || "--" }}
                </el-descriptions-item>
                <el-descriptions-item label="计划时间"
                  >{{ formatDate(taskData.Order.startTime) || "--" }}
                  >{{ formatDate(taskData.Procedure.startTime) || "--" }}
                  -
                  {{ formatDate(taskData.Order.endTime) }}</el-descriptions-item
                  {{ formatDate(taskData.Procedure.endTime) }}</el-descriptions-item
                >
                <el-descriptions-item label="通道">
                  {{ channelNameConfig[taskData.Channel] || "--" }}
@@ -306,7 +306,7 @@
                      </div>
                      <div class="card_top-2">
                        <div style="line-height: 45px; text-align: center">
                          {{ taskData?.plcStatus === 3 ? '待机' : (taskData.Procedure.Status==3?'生产完成':'生产中') }}
                          {{ displayProcedureStatus(taskData) }}
                        </div>
                        <!-- <span class="card-top-r-t">完成进度:50%</span>
                          <span class="card-top-r-b">12月28日 08:24</span> -->
@@ -803,6 +803,37 @@
    }
  },
  methods: {
    newTaskPlaceholder(channel){
      return {
        Order: {},
        Procedure: {
          procedure: { inputMaterials: [], outputMaterials: [], workers: [] },
        },
        Channel:channel,
        inputMaterials: [],
        outputMaterials: [],
        procedureList: [],
      }
    },
    /**
     * 展示工序状态
     * 如果PLC的状态是待机要跟随PLC状态
     * @param taskData
     * @return {string}
     */
    displayProcedureStatus(taskData){
      if (taskData?.plcStatus === 3){
        return '待机'
      }
      if (!taskData?.Procedure?.Status){
        return ''
      }
      if (taskData.Procedure.Status===3){
        return '生产完成'
      }else{
        return '生产中'
      }
    },
    /**
     * 从任务中获取加工数和目标数
     * @param taskData
@@ -871,7 +902,7 @@
              }
            }
            this.resResult[i]=res;
            console.log( this.resResult[i],'===res111')
            // console.log( this.resResult[i],'===res111')
          })
        }
      }
@@ -1027,23 +1058,55 @@
      let now = new Date();
      this.formatTime2 = this.getDateObj(now, "yyyy年MM月dd日");
    },
    getFormatTime(date){
      const getCha=()=>{
        let now=new Date().getTime()
        let String=now-date*1000;
        let seconds=Math.floor(String/1000)
        let minutes=Math.floor(seconds/60)
        let days=Math.floor(String/1000/60/60/24)
        let hours=Math.floor(minutes/60)-days*24
        let m=minutes-days*24*60-hours*60
        return days+'天'+hours+'时'+m+'分'
    /**
     * 计算时间段, 注意参数要求时间戳为 JS Date 的13位时间戳
     * @param {number} startTime
     * @param {number} endTime
     * @return {string}
     */
    calcRunningDuration(startTime,endTime){
      let timeDuration=endTime-startTime;
      if (timeDuration<0){
        return '0天0时0分'
      }
      let d= getCha()
      let seconds=Math.floor(timeDuration/1000)
      let minutes=Math.floor(seconds/60)
      let days=Math.floor(timeDuration/1000/60/60/24)
      let hours=Math.floor(minutes/60)-days*24
      let m=minutes-days*24*60-hours*60
      return `${days}天${hours}时${m}分`
    },
    /**
     * 工序运行时间
     * 根据接口返回 realStartTime realEndTime 判断如何展示
     * 如果 realEndTime 为 0 则 用当前时间 - realStartTime
     * 如果 存在 realEndTime, 则 realEndTime - realStartTime
     * 注意 realStartTime realEndTime 是接口返回的10位时间戳
     * @param realStartTime
     * @param realEndTime
     * @return {string}
     */
    getTaskRunningTime(realStartTime,realEndTime){
      const getInfo = ()=>{
        if (!realStartTime && !realEndTime){
          return '--'
        }
        if(!realEndTime){
          const now = Math.floor(new Date().getTime()/1000) * 1000
          return this.calcRunningDuration(realStartTime*1000,now)
        }
        return this.calcRunningDuration(realStartTime*1000,realEndTime*1000)
      }
      let result = getInfo()
      setInterval(() => {
       d= getCha();
        result = getInfo();
      }, 6000);
      return date?d:'--';
      return result;
    },
    setInterCard(value, name, i) {
      if (this.TasksCopy[i].Procedure.procedure[value]!=null) {
@@ -1127,29 +1190,22 @@
      this.TasksCopy=[]
      getTaskInfo({taskMode:2}).then((res) => {
        if (res.code == 200&&res.data) {
          // let arr=[]
          if(res.data.Tasks){
            res.data.Tasks.sort(function(a,b){
            return (a.Channel - b.Channel)
           })
          }
          this.TasksCopy = res.data.Tasks ? res.data.Tasks : [];
          this.TasksCopy = res.data?.Tasks ?? [];
          // this.safeProduce=res.data.Prompt.safeProduce?res.data.Prompt.safeProduce:''
          this.plcNotConnected=res.data.Prompt.plcNotConnected?res.data.Prompt.plcNotConnected:''
          this.ChannelAmount=res.data.ChannelAmount?res.data.ChannelAmount:1
          this.plcNotConnected=res.data.Prompt.plcNotConnected ?? ''
          this.ChannelAmount=res.data.ChannelAmount ?? 1
          // if(this.ChannelAmount>1 &&this.TasksCopy.length<2){
          //   this.TasksCopy.push(this.object)
          // }
          this.TaskCount=res.data.TaskCount?res.data.TaskCount:0
          this.TaskCount=res.data.TaskCount ?? 0
          if ((this.TasksCopy.length ==0 )||!this.TasksCopy) {
            if (this.activeName == 1||this.activeName == 3) {
              this.TasksCopy.push(this.object);
            } else {
              this.TasksCopy.push(this.object);
              this.TasksCopy.push(this.object);
            }
          }
          // 找出缺少任务数据的通道, 使用占位数据占住对应通道
          const channelNumbers = this.TasksCopy.map(task=>task.Channel)
          const allChannels = [0,1];
          const lackChannels = _.chain(allChannels).difference(channelNumbers).value()
          lackChannels.forEach(channel => this.TasksCopy.push(this.newTaskPlaceholder(channel)))
          this.TasksCopy.sort((a,b)=>a.Channel - b.Channel)
          this.workers=res.data.workers?res.data.workers:[]
          // 将值班人根据通道号分组