| <template> | 
|     <div class="details"> | 
|         <div class="content_list"> | 
|             <van-skeleton :loading="loading" title :row="3" :row-width="['100%', '100%', '100%', '100%']" /> | 
|             <div class="content_list_item" v-show="!loading"> | 
|                 <div class="content_list_item_top"> | 
|                     <div class="content_list_item_top_left"> | 
|                         <span v-if="info.mmodel">{{info.mmodel.name}}</span> | 
|                         <div class="content_list_item_top_left_tag" v-if="info.urgent">优先{{info.urgent}}</div> | 
|                         <div class="content_list_item_top_left_type" v-if="info.type === 0">正常</div> | 
|                         <div class="content_list_item_top_left_type dangerous" v-else-if="info.type === 1">异常</div> | 
|                         <div class="content_list_item_top_left_type warning" v-else-if="info.type === 2">返工</div> | 
|                     </div> | 
|                     <div class="content_list_item_top_right"> | 
|                         <span v-if="info.status === 0">已生成</span> | 
|                         <span v-if="info.status === 1">已发布</span> | 
|                         <span v-if="info.status === 2">已撤回</span> | 
|                         <span v-if="info.status === 3">已取消</span> | 
|                         <span v-if="info.status === 4">已分配</span> | 
|                         <span v-if="info.status === 5">已暂停</span> | 
|                         <span v-if="info.status === 6">已完工</span> | 
|                         <span v-if="info.status === 7">已入库</span> | 
|                         <span v-if="info.status === 8">已关闭</span> | 
| <!--                        <span class="warning" v-if="info.status === 0">待发布</span>--> | 
| <!--                        <span class="green" v-else-if="info.status === 1 || info.status === 4">生产中</span>--> | 
| <!--                        <span class="info" v-else-if="info.status === 6 || info.status === 7 || info.status === 3 || info.status === 8">已完成</span>--> | 
|                     </div> | 
|                 </div> | 
|                 <div class="content_list_item_content"> | 
|                     <div class="content_list_item_content_item"> | 
|                         <div class="content_list_item_content_item_label">工序名称:</div> | 
|                         <div class="content_list_item_content_item_nr" v-if="info.pmodel">{{info.pmodel.name}}</div> | 
|                     </div> | 
|                     <div class="content_list_item_content_item"> | 
|                         <div class="content_list_item_content_item_label">计划数量:</div> | 
|                         <div class="content_list_item_content_item_nr" v-if="info.umodel">{{info.num}}{{info.umodel.name}}</div> | 
|                     </div> | 
|                     <div class="content_list_item_content_item"> | 
|                         <div class="content_list_item_content_item_label">计划日期:</div> | 
|                         <div class="content_list_item_content_item_nr">{{info.planDate}}</div> | 
|                     </div> | 
|                     <div class="content_list_item_content_item"> | 
|                         <div class="content_list_item_content_item_label">生产批次:</div> | 
|                         <div class="content_list_item_content_item_nr">{{info.batch}}</div> | 
|                     </div> | 
|                     <div class="content_list_item_content_item"> | 
|                         <div class="content_list_item_content_item_label">发布日期:</div> | 
|                         <div class="content_list_item_content_item_nr">{{info.createTime}}</div> | 
|                     </div> | 
|                     <div class="content_list_item_content_item" v-if="info.usermodel"> | 
|                         <div class="content_list_item_content_item_label">计划人员:</div> | 
|                         <div class="content_list_item_content_item_nr">{{info.usermodel.realname}}</div> | 
|                     </div> | 
|                     <div class="content_list_item_content_item"> | 
|                         <div class="content_list_item_content_item_label">分配数量:</div> | 
|                         <div class="content_list_item_content_item_nr" v-if="info.umodel">{{info.distributNum}}{{info.umodel.name}}</div> | 
|                     </div> | 
|                     <div class="content_list_item_content_item"> | 
|                         <div class="content_list_item_content_item_label">完工数量:</div> | 
|                         <div class="content_list_item_content_item_nr" v-if="info.umodel">{{info.doneNum}}{{info.umodel.name}}</div> | 
|                     </div> | 
|                 </div> | 
|             </div> | 
|         </div> | 
|         <NotFound info="暂未分配工单" v-if="info.workorderList && info.workorderList.length === 0" /> | 
|         <template v-else> | 
|             <!-- <div class="details_list"> | 
|                 <div class="details_list_item" v-for="(item, i) in info.workorderList" :key="i" @click="jump(item)"> | 
|                     <div class="details_list_item_top"> | 
|                         <span>{{ item.createUserName }}</span> | 
|                         <span>{{ item.code }}</span> | 
|                     </div> | 
|                     <div class="details_list_item_center"> | 
|                         <span>良品数:{{ item.qualifiedNum }}</span> | 
|                         <span>不良数:<span class="red">{{ item.unqualifiedNum }}</span></span> | 
|                     </div> | 
|                     <div class="details_list_item_bottom"> | 
|                         <span>{{ item.createTime }}</span> | 
|                     </div> | 
|                 </div> | 
|             </div> --> | 
|             <div class="details_timeline" v-for="(item, i) in info.workorderList" :key="i"> | 
|                 <div class="details_timeline_header"> | 
|                     <div class="details_timeline_header_code"> | 
|                         <span>工单编号:{{item.code}}</span> | 
|                         <span>生产人员:{{proUserStr(item)}}</span> | 
|                     </div> | 
|                     <span v-if="item.status === 0" class="yellow">已创建</span> | 
|                     <span v-if="item.status === 1" class="green">已备料</span> | 
|                     <span v-if="item.status === 2">已完工</span> | 
|                     <span v-if="item.status === 3" class="purple">已检验</span> | 
|                     <span v-if="item.status === 4">已报工</span> | 
|                     <span v-if="item.status === 5">已入库</span> | 
|                     <span v-if="item.status === 6">已取消</span> | 
|                     <!--                <span v-if="item.status === 7">已取消</span>--> | 
|                     <!--                <span v-if="item.status === 8">已关闭</span>--> | 
|                 </div> | 
|                 <div class="details_timeline_item" v-if="item.produceDate"> | 
|                     <div class="activedian"></div> | 
|                     <div class="dian active"></div> | 
|                     <div class="x"></div> | 
|                     <div class="details_timeline_item_zw"></div> | 
|                     <div class="details_timeline_item_left"> | 
|                         <span class="active_font">产出</span> | 
|                         <span>{{item.produceDate}}</span> | 
|                     </div> | 
|                     <div class="details_timeline_item_right"> | 
|                         <div class="item"> | 
|                             <div class="item_label">物料:</div> | 
|                             <div class="item_nr"> | 
|                                 <div class="item_nr_item" v-if="item.qualifiedNum !== 0"> | 
|                                     <span class="success">[合格品]</span> | 
|                                     <span>{{item.qualifiedNum}}{{info.umodel.name}}</span> | 
|                                 </div> | 
|                                 <div class="item_nr_item" v-if="item.unqualifiedNum !== 0"> | 
|                                     <span class="warning">[不良品]</span> | 
|                                     <span>{{item.unqualifiedNum}}{{info.umodel.name}}</span> | 
|                                 </div> | 
|                             </div> | 
|                         </div> | 
|                     </div> | 
|                 </div> | 
|                 <div class="details_timeline_item" v-if="item.materialDate"> | 
|                     <div class="activedian" v-if="!item.produceDate"></div> | 
|                     <div class="dian" :class="{ 'active': !item.produceDate }"></div> | 
|                     <div class="x" :style="{ height: item.materialList.length === 1 ? '2.1rem' :  1.2 * item.materialList.length + 'rem' }"></div> | 
|                     <div class="details_timeline_item_zw"></div> | 
|                     <div class="details_timeline_item_left"> | 
|                         <span :class="{'active_font': !item.produceDate}">投料</span> | 
|                         <span>{{item.materialDate}}</span> | 
|                     </div> | 
|                     <div class="details_timeline_item_right"> | 
|                         <div class="item"> | 
|                             <div class="item_label">物料:</div> | 
|                             <div class="item_nr" v-if="item.materialList && item.materialList.length !== 0"> | 
|                                 <div class="item_nr_item" v-for="(items, idx) in item.materialList" :key="idx"> | 
|                                     <span style="margin: 0;">{{items.name}} / {{items.num}}{{items.unitName}}</span> | 
|                                 </div> | 
|                             </div> | 
|                         </div> | 
|                     </div> | 
|                 </div> | 
|                 <div class="details_timeline_item"> | 
|                     <div class="activedian" v-if="!item.materialDate && !item.produceDate"></div> | 
|                     <div class="dian" :class="{ 'active': !item.materialDate && !item.produceDate }"></div> | 
|                     <div class="details_timeline_item_zw"></div> | 
|                     <div class="details_timeline_item_left"> | 
|                         <span :class="{'active_font': !item.materialDate && !item.produceDate}">分配</span> | 
|                         <span>{{ item.distributeDate }}</span> | 
|                     </div> | 
|                     <div class="details_timeline_item_right"> | 
|                         <div class="item"> | 
|                             <div class="item_label">分配数量:</div> | 
|                             <div class="item_nr">{{item.planNum}}{{info.umodel.name}}</div> | 
|                         </div> | 
|                     </div> | 
|                 </div> | 
|             </div> | 
|         </template> | 
|         <!-- <div class="details_zw"></div> --> | 
|         <!-- <div class="details_btn" @click="toJump">去报工</div> --> | 
|     </div> | 
| </template> | 
|   | 
| <script setup lang="ts"> | 
|     import { ref, onMounted, watch } from 'vue' | 
|     import { useRoute, useRouter } from "vue-router" | 
|     import { queryByID } from '@/apis/PlanningAPI' | 
|     import NotFound from '@/components/common/NotFound.vue' | 
|   | 
|     const route = useRoute() | 
|     const router = useRouter() | 
|   | 
|     // 详情数据 | 
|     let info:any = ref({}) | 
|   | 
|     let loading = ref<boolean>(true) | 
|   | 
|     // 获取详情 | 
|     const queryByIDs = () => { | 
|         queryByID(route.query.id) | 
|             .then(res => { | 
|                 if (res.code === 200) { | 
|                     info.value = res.data | 
|                 } | 
|             }) | 
|     } | 
|   | 
|     const toJump = () => { | 
|         router.push({ name: 'reportingForWork' }) | 
|     } | 
|   | 
|     const jump = (item: any) => { | 
|         if (item.status === 4 || item.status === 6 || item.paused === 1) { | 
|             router.push({ name: 'afterWorkReport', query: { id: item.id } }) | 
|         } else { | 
|             router.push({ name: 'workOrderReporting', query: { id: item.id } }) | 
|         } | 
|         // router.push({ name: 'workOrderReporting', query: { id } }) | 
|     } | 
|   | 
|     const proUserStr = (item: any) => { | 
|         if (!item.proUserList || item.proUserList.length<1) { | 
|             return '-' | 
|         } | 
|         return item.proUserList.map((user: any) => { return user.proUserDepartName }).join(',') | 
|     } | 
|   | 
|     onMounted(() => { | 
|         queryByIDs() | 
|     }) | 
|   | 
|     watch(() => info.value, (news) => { | 
|         if (JSON.stringify(news) !== "{}") { | 
|             loading.value = false | 
|         } | 
|     }, { immediate: true }) | 
| </script> | 
|   | 
| <style lang="scss" scoped> | 
| .details { | 
|     width: 100%; | 
|     height: 100%; | 
|     position: absolute; | 
|     background: #F7F7F7; | 
|     .details_zw { | 
|         width: 100%; | 
|         height: 148px; | 
|     } | 
|     .details_btn { | 
|         position: fixed; | 
|         bottom: 60px; | 
|         left: 30px; | 
|         width: calc(100% - 60px); | 
|         height: 88px; | 
|         line-height: 88px; | 
|         text-align: center; | 
|         background: #305ED5; | 
|         box-shadow: 0px 0px 12px 0px rgba(0,0,0,0.08); | 
|         border-radius: 8px; | 
|         font-size: 30px; | 
|         font-family: PingFangSC-Medium, PingFang SC; | 
|         font-weight: 500; | 
|         color: #FFFFFF; | 
|     } | 
|     .van-skeleton { | 
|         padding: 0 !important; | 
|     } | 
|     .content_list { | 
|         width: 100%; | 
|         padding: 30px; | 
|         background: #ffffff; | 
|         display: flex; | 
|         flex-direction: column; | 
|         box-sizing: border-box; | 
|         .content_list_item { | 
|             display: flex; | 
|             flex-direction: column; | 
|             .content_list_item_top { | 
|                 display: flex; | 
|                 align-items: center; | 
|                 justify-content: space-between; | 
|                 .content_list_item_top_left { | 
|                     display: flex; | 
|                     align-items: center; | 
|                     max-width: 83%; | 
|                     span { | 
|                         max-width: 400px; | 
|                         font-size: 32px; | 
|                         font-weight: 500; | 
|                         color: #333333; | 
|                         overflow: hidden; | 
|                         white-space: nowrap; | 
|                         text-overflow: ellipsis; | 
|                     } | 
|                     .dangerous { | 
|                         background: $nav-stateColor4 !important; | 
|                     } | 
|                     .warning { | 
|                         background: $nav-stateColor5 !important; | 
|                     } | 
|                     .content_list_item_top_left_type { | 
|                         flex-shrink: 0; | 
|                         padding: 5px 10px; | 
|                         background: $nav-stateColor2; | 
|                         border-radius: 8px; | 
|                         font-size: 22px; | 
|                         font-weight: 400; | 
|                         color: #FFFFFF; | 
|                         margin-left: 16px; | 
|                         display: flex; | 
|                         align-items: center; | 
|                         justify-content: center; | 
|                     } | 
|                     .content_list_item_top_left_tag { | 
|                         flex-shrink: 0; | 
|                         padding: 5px 10px; | 
|                         background: $nav-stateColor4; | 
|                         border-radius: 8px; | 
|                         font-size: 22px; | 
|                         font-weight: 400; | 
|                         color: #FFFFFF; | 
|                         margin-left: 16px; | 
|                         display: flex; | 
|                         align-items: center; | 
|                         justify-content: center; | 
|                     } | 
|                 } | 
|                 .content_list_item_top_right { | 
|                     font-size: 26px; | 
|                     font-weight: 400; | 
|                     flex-shrink: 0; | 
|                     .warning { | 
|                         color: $nav-stateColor5 !important; | 
|                     } | 
|                     .green { | 
|                         color: $nav-stateColor6 !important; | 
|                     } | 
|                     .info { | 
|                         color: $nav-stateColor3 !important; | 
|                     } | 
|                 } | 
|             } | 
|             .content_list_item_content { | 
|                 padding: 24px 30px; | 
|                 background: #F7F7F7; | 
|                 border-radius: 16px; | 
|                 display: flex; | 
|                 flex-wrap: wrap; | 
|                 justify-content: space-between; | 
|                 margin-top: 32px; | 
|                 .content_list_item_content_item { | 
|                     width: 50%; | 
|                     display: flex; | 
|                     margin-top: 24px; | 
|                     &:nth-child(1) { | 
|                         margin-top: 0 !important; | 
|                     } | 
|                     &:nth-child(2) { | 
|                         margin-top: 0 !important; | 
|                     } | 
|                     .content_list_item_content_item_label { | 
|                         font-size: 24px; | 
|                         font-weight: 400; | 
|                         color: #666666; | 
|                         flex-shrink: 0; | 
|                     } | 
|                     .content_list_item_content_item_nr { | 
|                         font-size: 24px; | 
|                         font-weight: 400; | 
|                         color: #222222; | 
|                         margin-right: 10px; | 
|                     } | 
|                 } | 
|             } | 
|         } | 
|     } | 
|     .details_list { | 
|         width: 100%; | 
|         height: auto; | 
|         background-color: #FFFFFF; | 
|         margin-top: 20px; | 
|         .details_list_item { | 
|             width: 100%; | 
|             padding: 24px 30px; | 
|             box-sizing: border-box; | 
|             background-color: #FFFFFF; | 
|             border-bottom: 2px solid #F7F7F7; | 
|             &:last-child { | 
|                 border: none !important; | 
|             } | 
|             .details_list_item_top { | 
|                 width: 100%; | 
|                 display: flex; | 
|                 align-items: center; | 
|                 span { | 
|                     &:first-child { | 
|                         font-size: 30px; | 
|                         font-family: PingFangSC-Medium, PingFang SC; | 
|                         font-weight: 500; | 
|                         color: #222222; | 
|                         margin-right: 16px; | 
|                     } | 
|                     &:last-child { | 
|                         font-size: 24px; | 
|                         font-family: PingFangSC-Regular, PingFang SC; | 
|                         font-weight: 400; | 
|                         color: #666666; | 
|                     } | 
|                 } | 
|             } | 
|             .details_list_item_center { | 
|                 width: 100%; | 
|                 margin: 16px 0 20px 0; | 
|                 .red { | 
|                     color: #DE5243; | 
|                 } | 
|                 span { | 
|                     &:first-child { | 
|                         font-size: 26px; | 
|                         font-family: PingFangSC-Regular, PingFang SC; | 
|                         font-weight: 400; | 
|                         color: #333333; | 
|                         margin-right: 100px; | 
|                     } | 
|                     &:last-child { | 
|                         font-size: 26px; | 
|                         font-family: PingFangSC-Regular, PingFang SC; | 
|                         font-weight: 400; | 
|                         color: #333333; | 
|                     } | 
|                 } | 
|             } | 
|             .details_list_item_bottom { | 
|                 span { | 
|                     font-size: 24px; | 
|                     font-family: PingFangSC-Regular, PingFang SC; | 
|                     font-weight: 400; | 
|                     color: #999999; | 
|                 } | 
|             } | 
|         } | 
|     } | 
|     .details_timeline { | 
|         padding: 30px; | 
|         background: #ffffff; | 
|         margin-top: 20px; | 
|         .details_timeline_header { | 
|             display: flex; | 
|             align-items: flex-start; | 
|             justify-content: space-between; | 
|             .yellow { | 
|                 color: $nav-stateColor1 !important; | 
|             } | 
|             .green { | 
|                 color: $nav-stateColor6 !important; | 
|             } | 
|             .purple { | 
|                 color: $nav-color !important; | 
|             } | 
|             span { | 
|                 font-size: 26px; | 
|                 font-weight: 400; | 
|                 color: #666666; | 
|             } | 
|             .details_timeline_header_code { | 
|                 display: flex; | 
|                 flex-direction: column; | 
|                 span { | 
|                     &:first-child { | 
|                         font-size: 28px; | 
|                         font-weight: 500; | 
|                         color: #222222; | 
|                     } | 
|                     &:last-child { | 
|                         font-size: 22px; | 
|                         font-weight: 400; | 
|                         color: #777777; | 
|                         margin-top: 24px; | 
|                     } | 
|                 } | 
|             } | 
|         } | 
|         .details_timeline_item { | 
|             display: flex; | 
|             align-items: flex-start; | 
|             position: relative; | 
|             margin-top: 60px; | 
|             &:nth-child(1) { | 
|                 margin-top: 0 !important; | 
|             } | 
|             .x { | 
|                 position: absolute; | 
|                 top: 30px; | 
|                 left: 29px; | 
|                 width: 1PX; | 
|                 height: 165px; | 
|                 border-right: 1PX dashed #CCCCCC; | 
|             } | 
|             .dian { | 
|                 position: absolute; | 
|                 top: 22px; | 
|                 left: 22px; | 
|                 width: 16px; | 
|                 height: 16px; | 
|                 background: #CCCCCC; | 
|                 border-radius: 50%; | 
|             } | 
|             .active { | 
|                 width: 16px; | 
|                 height: 16px; | 
|                 background: $nav-color; | 
|                 z-index: 8; | 
|             } | 
|             .activedian { | 
|                 position: absolute; | 
|                 top: 14px; | 
|                 left: 14px; | 
|                 width: 32px; | 
|                 height: 32px; | 
|                 background: #E4EBFE; | 
|                 border-radius: 50%; | 
|             } | 
|             .details_timeline_item_zw { | 
|                 width: 100px; | 
|             } | 
|             .details_timeline_item_left { | 
|                 display: flex; | 
|                 flex-direction: column; | 
|                 width: 150px; | 
|                 .active_font { | 
|                     color: $nav-color !important; | 
|                 } | 
|                 span { | 
|                     &:nth-child(1) { | 
|                         font-size: 30px; | 
|                         font-weight: 500; | 
|                         color: #333333; | 
|                     } | 
|                     &:nth-child(2) { | 
|                         font-size: 22px; | 
|                         font-weight: 400; | 
|                         color: #999999; | 
|                         margin-top: 16px; | 
|                     } | 
|                 } | 
|             } | 
|             .details_timeline_item_right { | 
|                 display: flex; | 
|                 flex-direction: column; | 
|                 flex: 1; | 
|                 margin-left: 30px; | 
|                 .item { | 
|                     display: flex; | 
|                     align-items: flex-start; | 
|                     margin-top: 24px; | 
|                     &:nth-child(1) { | 
|                         margin-top: 0 !important; | 
|                     } | 
|                     .item_label { | 
|                         font-size: 26px; | 
|                         font-weight: 400; | 
|                         color: #666666; | 
|                         flex-shrink: 0; | 
|                     } | 
|                     .item_nr { | 
|                         font-size: 26px; | 
|                         font-weight: 400; | 
|                         color: #333333; | 
|                         .item_nr_item { | 
|                             display: flex; | 
|                             align-items: center; | 
|                             margin-bottom: 24px; | 
|                             .success { | 
|                                 color: $nav-stateColor2; | 
|                             } | 
|                             .warning { | 
|                                 color: $nav-stateColor5; | 
|                             } | 
|                             span { | 
|                                 font-size: 26px; | 
|                                 font-weight: 400; | 
|                                 &:last-child { | 
|                                     color: #333333; | 
|                                     margin-left: 12px; | 
|                                 } | 
|                             } | 
|                         } | 
|                     } | 
|                 } | 
|             } | 
|         } | 
|     } | 
| } | 
| </style> |