| | |
| | | > |
| | | <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" |
| | |
| | | {{ 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] || "--" }} |
| | |
| | | </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> --> |
| | |
| | | } |
| | | }, |
| | | 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 |
| | |
| | | } |
| | | } |
| | | this.resResult[i]=res; |
| | | console.log( this.resResult[i],'===res111') |
| | | // console.log( this.resResult[i],'===res111') |
| | | }) |
| | | } |
| | | } |
| | |
| | | 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) { |
| | |
| | | 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:[] |
| | | |
| | | // 将值班人根据通道号分组 |