| | |
| | | </span> --> |
| | | </div> |
| | | <div class="gongx"> |
| | | <el-steps v-if="taskData.AllProcedures" :active="taskData.CurrentProcedureIndex?taskData.CurrentProcedureIndex:0" finish-status="success" class="steps"> |
| | | <el-steps v-if="taskData.AllProcedures" :active="taskData.CurrentProcedureIndex ?? 0" finish-status="success" class="steps"> |
| | | <el-step icon="" :title="item" v-for="(item,index) in taskData.AllProcedures" :key="index"></el-step> |
| | | </el-steps> |
| | | </div> |
| | |
| | | </div> |
| | | </div> |
| | | <div class="content_right"> |
| | | <div class="gif" v-if="taskData.Procedure.ID" @click="processModelClick(taskData)"> |
| | | <img v-if="isUpdateIcon" src="../../public/shan.gif" /> |
| | | <div class="gif" v-if="taskData.Procedure.ID" @click="processModelClick(taskData,index)"> |
| | | <img v-if="taskData.isUpdateIcon" src="../../public/shan.gif" /> |
| | | <span v-else class="yuandian"></span> |
| | | </div> |
| | | <el-descriptions :column="(activeName == 1||activeName == 3) ? 2 : 1" :colon="true"> |
| | |
| | | - |
| | | {{ formatDate(taskData.Order.endTime) }}</el-descriptions-item |
| | | > |
| | | <el-descriptions-item label="货物描述">{{ |
| | | taskData.Order.orderAttr || "--" |
| | | }}</el-descriptions-item> |
| | | <el-descriptions-item label="客户名称">{{ |
| | | <el-descriptions-item label="通道"> |
| | | {{ channelNameConfig[taskData.Channel] || "--" }} |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="客户编码">{{ |
| | | taskData.Order.customer || "--" |
| | | }}</el-descriptions-item> |
| | | <el-descriptions-item label="参数要求">{{ |
| | |
| | | <div class="right-person-box" v-if="workers && workers.length > 0"> |
| | | <dl |
| | | class="right-small-person" |
| | | v-for="(item, index) in workers" |
| | | v-for="(item, index) in deduplicateWorkers(displayWorkers())" |
| | | :key="index" |
| | | > |
| | | <dt> |
| | |
| | | |
| | | </template> --> |
| | | <!-- 控制的弹框 --> |
| | | <AddControl ref="control" :Arr="Arr" /> |
| | | <!-- 控制的弹框 --> |
| | | <TaskControlModal |
| | | ref="control" |
| | | :activeName="activeName" |
| | |
| | | <ProcessModel |
| | | ref="processModel" |
| | | :listData="listData" |
| | | @updateGet="updateGet" |
| | | /> |
| | | </div> |
| | | </template> |
| | |
| | | import AddIssue from "../components/AddIssue.vue"; |
| | | import ProcessModel from "../components/ProcessModel.vue"; |
| | | import TaskControlModal from "@/components/TaskControlModal.vue"; |
| | | import {channelNameConfig} from "@/common/constants"; |
| | | import _ from 'lodash' |
| | | export default { |
| | | components: { |
| | | TaskControlModal, |
| | |
| | | // 右侧完成 |
| | | finishShow:{}, |
| | | workers:[], |
| | | // 保存当前不同通道的值班人 |
| | | channelWorkersMap:{0:[],1:[]}, |
| | | TasksCopy:[], |
| | | Tasks: [ |
| | | { |
| | |
| | | procedureList: [], |
| | | }, |
| | | processList:[], |
| | | isUpdateIcon:false, |
| | | listData:[], |
| | | resResult:null, |
| | | resResult:[], |
| | | resprocInfoTimer:null, |
| | | channelNameConfig: channelNameConfig, |
| | | index:null, |
| | | }; |
| | | }, |
| | | mounted() { |
| | |
| | | this.getDate3(); |
| | | this.getDate2(); |
| | | }, 5000); |
| | | this.getTaskInfo(); |
| | | |
| | | let channelType = this.getChannelTypeFromUrl() |
| | | channelType = channelType ?? 1 |
| | | this.activeName = channelType |
| | | this.getTaskInfo(channelType); |
| | | this.getTaskCountStatistics() |
| | | }, |
| | | beforeDestroy() { |
| | |
| | | // } |
| | | }, |
| | | methods: { |
| | | |
| | | deduplicateWorkers(workers){ |
| | | return _.uniqBy(workers,ele=>ele.workerName) |
| | | }, |
| | | updateGet(number,val){ |
| | | if(val){ |
| | | this.getTaskInfo(this.activeName,'new') |
| | | return true; |
| | | } |
| | | this.listData.number=number |
| | | if(this.index){ |
| | | this.TasksCopy[this.index].number=number |
| | | } |
| | | }, |
| | | getModelList(){ |
| | | this.resResult=null |
| | | for (let i in this.TasksCopy){ |
| | | this.TasksCopy[i].isUpdateIcon=false; |
| | | if(this.TasksCopy[i].Procedure.ID&&this.TasksCopy[i].number){ |
| | | processModelList({ |
| | | procedureId: this.TasksCopy[i].Procedure.ID, |
| | |
| | | if(res.code==200){ |
| | | this.processList=res.data?res.data:[]; |
| | | if(this.processList.length>0){ |
| | | for(let i in this.processList){ |
| | | if(this.processList[i].isUpdate){ |
| | | this.isUpdateIcon=true; |
| | | for(let j in this.processList){ |
| | | if(this.processList[j].isUpdate){ |
| | | this.TasksCopy[i].isUpdateIcon=true; |
| | | this.$forceUpdate() |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | this.resResult=res; |
| | | this.resResult[i]=res; |
| | | console.log( this.resResult[i],'===res111') |
| | | }) |
| | | } |
| | | } |
| | | }, |
| | | processModelClick(list){ |
| | | processModelClick(list,index){ |
| | | this.listData=list; |
| | | this.index=index |
| | | if( Object.keys(this.listData).length > 0){ |
| | | if(this.listData.Procedure.ID&&this.listData.number){ |
| | | this.$refs.processModel.islook=true |
| | |
| | | } |
| | | } |
| | | this.$message.error('当前工序无编号,无法查看工序!') |
| | | |
| | | }, |
| | | getProcessModelList(){ |
| | | this.getModelList() |
| | | if (!this.ProcessModelTimer&&!this.resResult) { |
| | | let string=false; |
| | | if(this.resResult.length>0){ |
| | | for(let i in this.resResult){ |
| | | if(this.resResult[i]){ |
| | | string=false; |
| | | } |
| | | } |
| | | } |
| | | if (!this.ProcessModelTimer&&!string) { |
| | | this.ProcessModelTimer = setInterval(() => { |
| | | this.resResult=[] |
| | | this.getModelList(); |
| | | }, 10000) |
| | | }, 5000) |
| | | } |
| | | }, |
| | | mergeProcessParams(params){ |
| | |
| | | }, |
| | | cutClick(val) { |
| | | this.activeName = val; |
| | | this.updateChannelTypeToUrl(val) |
| | | if(this.activeName==2){ |
| | | this.Tasks=this.TasksCopy.slice(0,2) |
| | | if(this.Tasks.length<2){ |
| | |
| | | } |
| | | }); |
| | | }, |
| | | |
| | | |
| | | |
| | | getDateObj(date, fmt) { |
| | | if (/(y+)/.test(fmt)) { |
| | | fmt = fmt.replace( |
| | |
| | | }); |
| | | }, |
| | | |
| | | getTaskInfo(val) { |
| | | /** |
| | | * 根据当前展示的是0通道还是1通道还是两个通道展示对应的值班人 |
| | | * @return {*[]} |
| | | */ |
| | | displayWorkers(){ |
| | | let showWorkers = [] |
| | | if (this.activeName===1){ |
| | | showWorkers =[...this.channelWorkersMap[0]] |
| | | }else if (this.activeName===2){ |
| | | showWorkers =[...this.channelWorkersMap[0],...this.channelWorkersMap[1]] |
| | | }else if (this.activeName===3){ |
| | | showWorkers =[...this.channelWorkersMap[1]] |
| | | }else { |
| | | return [] |
| | | } |
| | | |
| | | return showWorkers |
| | | }, |
| | | |
| | | getTaskInfo(val,info) { |
| | | this.Tasks = []; |
| | | this.TasksCopy=[] |
| | | getTaskInfo({taskMode:2}).then((res) => { |
| | | if (res.code == 200&&res.data) { |
| | | let arr=[] |
| | | // let arr=[] |
| | | if(res.data.Tasks){ |
| | | arr.sort(function(a,b){ |
| | | res.data.Tasks.sort(function(a,b){ |
| | | return (a.Channel - b.Channel) |
| | | }) |
| | | } |
| | |
| | | } |
| | | } |
| | | this.workers=res.data.workers?res.data.workers:[] |
| | | |
| | | // 将值班人根据通道号分组 |
| | | const groupByChannel= _.groupBy(res.data.Tasks,ele=>ele.Channel) |
| | | const taskList0= _.first(groupByChannel[0]) |
| | | const taskList1= _.first(groupByChannel[1]) |
| | | const worker0List = taskList0?.Procedure?.procedure?.workers ?? [] |
| | | const worker1List = taskList1?.Procedure?.procedure?.workers ?? [] |
| | | this.channelWorkersMap['0'] =worker0List |
| | | this.channelWorkersMap['1'] =worker1List |
| | | |
| | | for (let i in this.TasksCopy) { |
| | | this.TasksCopy[i].procedureList = []; |
| | | this.TasksCopy[i].inputMaterials = []; |
| | | this.TasksCopy[i].outputMaterials = []; |
| | | this.TasksCopy[i].finishNumber = 0; |
| | | this.TasksCopy[i].number=0; |
| | | this.TasksCopy[i].isUpdateIcon=false; |
| | | this.finishShow['finishShow&'+i]=false |
| | | this.TasksCopy[i].Procedure.procedure.workers = this.TasksCopy[i].Procedure |
| | | .procedure.workers |
| | |
| | | }); |
| | | this.TasksCopy[i].Arr=res.data.Params ? res.data.Params : [] |
| | | // this.isFinsh=Number(i)+1 |
| | | this.$forceUpdate() |
| | | } |
| | | }); |
| | | } |
| | | this.setInterCard("inputMaterials", "cardBox1&" + i, i); |
| | | this.setInterCard("outputMaterials", "cardBox3&" + i, i); |
| | | } |
| | | this.getProcessModelList(); |
| | | this.getStartArr() |
| | | this.cutClick(val?val:1) |
| | | if(info=='new'){ |
| | | return true; |
| | | } |
| | | |
| | | this.getProgressInfo(); |
| | | if (!this.procInfoTimer&&!this.resprocInfoTimer) { |
| | | this.procInfoTimer = setInterval(() => { |
| | | this.getProgressInfo(); |
| | | }, 3000); |
| | | } |
| | | this.getProcessModelList(); |
| | | } |
| | | // if (res.code != 200 || this.TasksCopy.length == 0) { |
| | | // this.getcountdown(); |
| | |
| | | // }, 60000); |
| | | // } |
| | | // } |
| | | this.cutClick(val?val:1) |
| | | |
| | | }); |
| | | // this.TasksCopy.push(this.object) |
| | | // this.TasksCopy.push(this.object) |
| | |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | /** |
| | | * 向URL中设置当前通道展示类型 |
| | | * @param {number} type 通道展示类型 |
| | | */ |
| | | updateChannelTypeToUrl(type){ |
| | | const activeName = this.getChannelTypeFromUrl(); |
| | | if (activeName === type){ |
| | | return |
| | | } |
| | | let path = this.$router.history.current.path |
| | | this.$router.push({path, query: {activeName: `${type ?? 1}`}}) |
| | | }, |
| | | /** |
| | | * 从URL获取当前通道展示类型 |
| | | * @return {number} |
| | | */ |
| | | getChannelTypeFromUrl(){ |
| | | let activeName = new URLSearchParams(location.search).get('activeName') |
| | | activeName = activeName ? +activeName : undefined |
| | | return activeName |
| | | }, |
| | | getProgressInfo() { |
| | | this.resprocInfoTimer=null |
| | |
| | | } |
| | | } |
| | | } |
| | | .el-step__head.is-process{ |
| | | color: #00cc66 !important; |
| | | border-color:#00cc66; |
| | | } |
| | | .el-step__title.is-process{ |
| | | color: #00cc66 !important; |
| | | } |
| | | .el-step__head.is-wait{ |
| | | color:#fff; |
| | | border-color:#fff; |
| | | } |
| | | .el-step__title.is-wait{ |
| | | color:#fff; |
| | | } |
| | | |
| | | // 使步骤条节点状态成功时,前面的线同步更改颜色 |
| | | .steps{ |
| | | /* 进行中状态:圈线 */ |
| | | & .el-step__head.is-process { |
| | | color: #00cc66; |
| | | border-color: #00cc66; |
| | | } |
| | | /* 进行中状态:圈内 */ |
| | | & .el-step__head.is-process > .el-step__icon { |
| | | background: #00cc66; |
| | | color: #00cc66; |
| | | } |
| | | /* 进行中状态:title(文字) */ |
| | | & .el-step__title.is-process { |
| | | color: #00cc66; |
| | | } |
| | | |
| | | /* 完成状态:圈线 */ |
| | | & .el-step__head.is-success { |
| | | color: #00cc66; |
| | | border-color: #00cc66; |
| | | } |
| | | /* 完成状态:title(文字) */ |
| | | & .el-step__title.is-success { |
| | | color: #00cc66; |
| | | } |
| | | /* 完成状态:line |
| | | * 描述:第一步完成,第二步进行时,之间的进度条有颜色 |
| | | */ |
| | | & .el-step__head.is-success > .el-step__line > .el-step__line-inner { |
| | | width: 100% !important; |
| | | border-width: 1px !important; |
| | | } |
| | | } |
| | | } |
| | | .set-title { |
| | |
| | | width: 100%; |
| | | height: 30px; |
| | | // text-align: left; |
| | | font-size: 24px; |
| | | font-size: 28px!important; |
| | | margin: 0; |
| | | text-align: center; |
| | | line-height: 36px; |
| | |
| | | white-space:nowrap; |
| | | } |
| | | .card_top-2{ |
| | | width:35%; |
| | | width:38%; |
| | | } |
| | | .card-top-input-out-r, |
| | | .card_top-3 { |
| | | width:65%; |
| | | width:62%; |
| | | } |
| | | .card_top-2,.card-top-input-out-r, |
| | | .card_top-3 { |