| <template> | 
|   <GlobalWindow | 
|     title="计划详情" | 
|     :visible.sync="visible" | 
|     :confirm-working="isWorking" | 
|     @confirm="confirm" | 
|   > | 
|     <div style="min-width:500px;width:100%"> | 
|       <div class="top-title" style="margin-bottom:15px"> | 
|         <div> | 
|           <span class="text-code">{{ form.mmodel.name }}</span> | 
|           <span v-if="form.urgent" style="background-color: #DE5243; margin-right:8px" class="status-log">{{ '优先级' + form.urgent }}</span> | 
|           <span v-if="form.type == 0" style="background-color: #03AF76;" class="status-log">正常计划</span> | 
|           <span v-if="form.type == 1" style="background-color: #DE5243;" class="status-log">计划异常</span> | 
|           <span v-if="form.type == 2" style="background-color: #F5A400;" class="status-log">返工计划</span> | 
|         </div> | 
|         <div> | 
|           <!-- 0已生成、1已发布、2已撤回、3已取消、4已分配、5已暂停、6已完工、8已关闭--> | 
|           <span v-if="form.status==0||form.status==5" style="color: #305ED5;" class="status-log">{{ form.status==5 ? '已暂停' :'已生成' }}</span> | 
|           <span v-else-if="form.status==3 || form.status==2|| form.status==8" style="color: #BBBBBB;" class="status-log">{{ form.status==2 ? '已撤回' : form.status==3 ? '已取消' : '已关闭' }}</span> | 
|           <span v-else style="color: #03AF76;" class="status-log">{{ form.status==1 ? '已发布' :  form.status==4 ? '已分配' : '已完工' }}</span> | 
|         </div> | 
|       </div> | 
|       <div class="plan-style"> | 
|         <el-form inline label-width="90px" label-suffix=":"> | 
|           <el-form-item label="工序名称">{{ form.pmodel.name }}</el-form-item> | 
|           <el-form-item label="计划数量">{{ form.num + (form.umodel ? form.umodel.name : '') }}</el-form-item> | 
|           <el-form-item label="计划日期">{{ form.planDate }}</el-form-item> | 
|           <el-form-item label="生产批次"> | 
|             <span style="width:100px" :title="form.batch" class="long-title-style">{{ form.batch }}</span> | 
|           </el-form-item> | 
|           <el-form-item label="发布日期">{{ form.publishDate }}</el-form-item> | 
|           <el-form-item label="计划人员">{{ form.usermodel.realname }}</el-form-item> | 
|           <el-form-item label="分配数量">{{ form.workorderDistributNum }}</el-form-item> | 
|           <el-form-item label="完工数量">{{ form.doneNum }}</el-form-item> | 
|         </el-form> | 
|       </div> | 
|       <div v-for="(item, index) in form.workorderList" :key="index"> | 
|         <div style="background-color: #f7f7f7;height:10px"></div> | 
|         <div class="work-order-style"> | 
|           <div class="order-title-v"> | 
|             <div class="order-title"> | 
|               {{ '工单编号:' + item.code }} | 
|             </div> | 
|             <div> | 
|               <!-- 0已创建、1已备料、2已完工、3已检验、4已报工、5已入库、6已取消 --> | 
|               <span v-if="item.status==0" style="color: #305ED5;" class="status-log">已创建</span> | 
|               <span v-else-if="item.status==6" style="color: #F5A400;" class="status-log">已取消</span> | 
|               <span v-else style="color: #03AF76;" class="status-log">{{ item.status==1 ? '已备料' : item.status==2 ? '已完工' : item.status==3 ? '已检验' : '已报工' }}</span> | 
|             </div> | 
|           </div> | 
|           <div class="c3 mt10 mb10 f12" style="display: flex;"> | 
|             <div>计划数量:{{ item.planNum }}</div> | 
|             <div class="ml10">计划开工日期:{{ item.planDate }}</div> | 
|           </div> | 
|           <div v-if="item.produceDate" class="order-setup"> | 
|             <!-- 报工信息 --> | 
|             <div class="line-style"> | 
|               <div class="top-line-top"></div> | 
|               <div class="center-point-temp"></div> | 
|               <div class="bottom-line"></div> | 
|             </div> | 
|             <div class="setup-content"> | 
|               <div class="left-message"> | 
|                 <div class="message-title-temp">产出</div> | 
|               </div> | 
|               <div class="right-message ml30"> | 
|                 <div style="display: flex;"> | 
|                   <div class="time-style">操作人:{{ item.createUserName }}</div> | 
|                   <div class="time-style ml50">操作时间:{{ item.produceDate }}</div> | 
|                 </div> | 
|                 <div style="display: flex;" class="mt10"> | 
|                   <span style="color:#666;">产品:</span> | 
|                   <div v-if="item.qualifiedNum"> | 
|                     <span style="color:#03AF76">[合格品] </span> | 
|                     <span style="color:#333333">{{ item.qualifiedNum + (form.umodel && form.umodel.name) }}</span> | 
|                   </div> | 
|                   <div v-if="item.unqualifiedNum" class="ml20"> | 
|                     <span style="color:#F5A400">[不良品] </span> | 
|                     <span style="color:#333333">{{ item.unqualifiedNum + (form.umodel && form.umodel.name) }}</span> | 
|                   </div> | 
|                 </div> | 
|               </div> | 
|             </div> | 
|           </div> | 
|           <!-- 投料信息 --> | 
|           <div v-if="item.materialDate" class="order-setup"> | 
|             <div class="line-style"> | 
|               <div :class="item.produceDate ? 'top-line' : 'top-line-top'"></div> | 
|               <div :class="item.produceDate ? 'center-point' : 'center-point-temp'"></div> | 
|               <div class="bottom-line"></div> | 
|             </div> | 
|             <div class="setup-content"> | 
|               <div class="left-message"> | 
|                 <div :class="item.produceDate ? 'message-title' : 'message-title-temp'"> | 
|                   投料 | 
|                 </div> | 
|               </div> | 
|               <div class="right-message ml30"> | 
|                 <div style="display: flex;"> | 
|                   <div class="time-style">操作人:{{ item.createUserName }}</div> | 
|                   <div class="time-style ml50">操作时间:{{ item.materialDate }}</div> | 
|                 </div> | 
|                 <div style="display: flex" class="mt10"> | 
|                   <div style="color:#666;">物料:</div> | 
|                   <div> | 
|                     <div v-for="(sItem, sIndex) in item.materialList" :key="sIndex"> | 
|                       <span style="color:#333333">{{ sItem.name + ' / ' + sItem.num + sItem.unitName }}</span> | 
|                     </div> | 
|                   </div> | 
|                 </div> | 
|               </div> | 
|             </div> | 
|           </div> | 
|           <!-- 分配信息 --> | 
|           <div class="order-setup"> | 
|             <div class="line-style"> | 
|               <div :class="item.materialDate ? 'top-line' : 'top-line-top'"></div> | 
|               <div :class="item.materialDate ? 'center-point' : 'center-point-temp'"></div> | 
|             </div> | 
|             <div class="setup-content"> | 
|               <div class="left-message"> | 
|                 <div :class="item.materialDate ? 'message-title' : 'message-title-temp'"> | 
|                   分配 | 
|                 </div> | 
|                 | 
|               </div> | 
|               <div class="right-message ml30"> | 
|                 <div style="display: flex;"> | 
|                   <div class="time-style">操作人:{{ item.createUserName }}</div> | 
|                   <div class="time-style ml50">操作时间:{{ item.distributeDate }}</div> | 
|                 </div> | 
|                 <div class="mt10"> | 
|                   <span style="color:#666;">分配数量:{{ item.planNum + (form.umodel && form.umodel.name) }}</span> | 
|                 </div> | 
|                  | 
|               </div> | 
|             </div> | 
|           </div> | 
|         </div> | 
|       </div> | 
|     </div> | 
|     <div slot="footer" class="window__header"> | 
|       <el-button type="primary" @click="cancel">返回</el-button> | 
|     </div> | 
|   </GlobalWindow> | 
| </template> | 
|   | 
| <script> | 
| import BaseOpera from '@/components/base/BaseOpera' | 
| import GlobalWindow from '@/components/common/GlobalWindow' | 
| export default { | 
|   name: 'OperaPlansDetailExtWindow', | 
|   extends: BaseOpera, | 
|   components: { GlobalWindow }, | 
|   data () { | 
|     return { | 
|       options: [ | 
|         { name: '11', id: '1' }, | 
|         { name: '22', id: '2' } | 
|       ], | 
|       // 表单数据 | 
|       form: { | 
|         id: null, | 
|         deleted: null, | 
|         createUser: null, | 
|         createTime: null, | 
|         updateUser: null, | 
|         updateTime: null, | 
|         remark: null, | 
|         rootDepartId: null, | 
|         departId: null, | 
|         origin: null, | 
|         paused: null, | 
|         planDate: null, | 
|         materialId: null, | 
|         distributNum: null, | 
|         workorderDistributNum: null, | 
|         lessDistributNum: null, | 
|         type: null, | 
|         procedureId: null, | 
|         factoryId: null, | 
|         unitId: null, | 
|         num: null, | 
|         batch:  null , | 
|         urgent: null, | 
|         importId: null, | 
|         userId: null, | 
|         status: null, | 
|         publishDate: null, | 
|         dmodel: {}, | 
|         mmodel: {}, | 
|         pmodel: {}, | 
|         fmodel: {}, | 
|         umodel: {}, | 
|         usermodel: {}, | 
|         doneNum: null, | 
|         workorderList: [], | 
|         qulifiedNum: null, | 
|         unqulifiedNum: null, | 
|         distributNoDoneNum: null | 
|       }, | 
|       materials: [], | 
|       factories: [], | 
|       productes: [], | 
|     } | 
|   }, | 
|   created () { | 
|     this.config({ | 
|       api: '/ext/plansExt', | 
|       'field.id': 'id' | 
|     }) | 
|   }, | 
|   methods: { | 
|     open (title, target) { | 
|       this.title = title | 
|       this.visible = true | 
|       // 编辑 | 
|       this.$nextTick(() => { | 
|         for (const key in this.form) { | 
|           this.form[key] = target[key] | 
|         } | 
|         console.log(this.form.workorderList); | 
|         // this.form.doneNum = .reduce((accumulator, currentValue) => { | 
|         //   console.log(currentValue.qualifiedNum, currentValue.unqualifiedNum, accumulator); | 
|         //   return currentValue.qualifiedNum + currentValue.unqualifiedNum + accumulator | 
|         // }, 0) | 
|       }) | 
|     }, | 
|     selectFactoey (v) { | 
|       this.form.procedureId = null | 
|       productesGroup({ orgId: v }) | 
|         .then(res => { | 
|           this.productes = res | 
|         }) | 
|         .catch(err => { | 
|           console.log(err) | 
|         }) | 
|     }, | 
|     cancel () { | 
|       this.visible = false | 
|       // let that = this | 
|     }, | 
|     proUserStr (item) { | 
|       if (!item.proUserList || item.proUserList.length<1) { | 
|         return '-' | 
|       } | 
|       return item.proUserList.map((user) => { return user.proUserDepartName}).join(',') | 
|     } | 
|   } | 
| } | 
| </script> | 
|   | 
| <style lang="scss" scoped> | 
| ::v-deep .window__body { | 
|   padding: 12px 0px !important; | 
| } | 
| .text-code { | 
|   color: #333; | 
|   font-weight: 500; | 
|   padding-right: 15px; | 
|   font-size: 16px; | 
|   vertical-align:middle; | 
| } | 
| .status-log { | 
|   padding: 1px 5px; | 
|   border-radius: 3px; | 
|   font-size: 12px; | 
|   color:#fff; | 
|   vertical-align:middle; | 
| } | 
| .top-title { | 
|   padding: 0 16px; | 
|   display: flex; | 
|   justify-content: space-between; | 
| } | 
| .plan-style { | 
|   width: calc(100% - 93px); | 
|   padding: 10px; | 
|   margin: 16px; | 
|   background-color: #f7f7f7; | 
|   border-radius: 8px; | 
|   .el-form-item { | 
|     width: 47%; | 
|     margin-bottom: 0px !important; | 
|   } | 
| } | 
| .work-order-style { | 
|   padding: 16px; | 
|   .order-title-v { | 
|     display: flex; | 
|     justify-content: space-between; | 
|     .order-title { | 
|       font-size: 14px; | 
|       font-weight: 500; | 
|       color: #333; | 
|     } | 
|   } | 
|   .order-setup { | 
|     // height: 100px; | 
|     display: flex; | 
|     justify-content: space-between; | 
|     .line-style { | 
|       display: flex; | 
|       flex-direction: column; | 
|       width: 16px; | 
|       .top-line { | 
|         margin-left: 3px; | 
|         width: 8px; | 
|         height: 15px; | 
|         border-left: #f7f7f7 2px dashed; | 
|       } | 
|       .top-line-top { | 
|         margin-left: 3px; | 
|         width: 8px; | 
|         height: 15px; | 
|       } | 
|       .center-point-temp { | 
|         margin-left: -4px; | 
|         height: 8px; | 
|         width: 8px; | 
|         border-radius: 8px; | 
|         background-color: #4275FC; | 
|         border: 4px #E4EBFE solid; | 
|       } | 
|       .center-point { | 
|         height: 8px; | 
|         width: 8px; | 
|         border-radius: 4px; | 
|         background-color: #ccc; | 
|       } | 
|       .bottom-line { | 
|         margin-left: 3px; | 
|         width: 8px; | 
|         border-left: #f7f7f7 2px dashed; | 
|         flex: 1; | 
|       } | 
|       .bottom-line-bottom { | 
|         margin-left: 3px; | 
|         width: 8px; | 
|         flex: 1; | 
|       } | 
|     } | 
|     .setup-content { | 
|       margin: 15px; | 
|       flex: 1; | 
|       // background-color: #f7f7f7; | 
|       display: flex; | 
|       .left-message { | 
|         display: flex; | 
|         line-height: 20px; | 
|         .message-title { | 
|           color: #333; | 
|           font-weight: 500; | 
|           font-size: 15px; | 
|         } | 
|         .message-title-temp { | 
|           color: #4275FC; | 
|           font-weight: 500; | 
|           font-size: 15px; | 
|         } | 
|         .time-style { | 
|           color: #999999; | 
|         } | 
|       } | 
|       .right-message { | 
|         font-size: 13px; | 
|         // display: flex; | 
|         flex-direction: row; | 
|       } | 
|     } | 
|   } | 
| } | 
| </style> |