| <template> | 
|     <div class="rework"> | 
|         <div class="rework_list"> | 
|             <div class="rework_list_item" @click="typeShow = true"> | 
|                 <span><b>*</b>单据类型</span> | 
|                 <div class="rework_list_item_right"> | 
|                     <span :class="form.typeName ? 'black' : ''">{{form.typeName ? form.typeName : '请选择'}}</span> | 
|                     <van-icon name="arrow" size="20" color="#999999" /> | 
|                 </div> | 
|             </div> | 
|             <div class="rework_list_item" @click="warehouseShow = true"> | 
|                 <span><b>*</b>入库仓库</span> | 
|                 <div class="rework_list_item_right"> | 
|                     <span :class="form.warehouseName ? 'black' : ''">{{form.warehouseName ? form.warehouseName : '请选择'}}</span> | 
|                     <van-icon name="arrow" size="20" color="#999999" /> | 
|                 </div> | 
|             </div> | 
|         </div> | 
|         <div class="rework_qd"> | 
|             <div class="rework_qd_title"> | 
|                 <div class="rework_qd_title_left"> | 
|                     <div class="x"></div> | 
|                     <span>{{`入库物料清单${list.length}`}}</span> | 
|                 </div> | 
|                 <div class="rework_qd_title_right" @click="addItem"> | 
|                     <img src="@/assets/icon/gongdan_ic_shoudong@2x.png" alt="" /> | 
|                     <span>增加入库</span> | 
|                 </div> | 
|             </div> | 
|             <van-swipe-cell v-for="(item, index) in list" :key="index"> | 
|                 <div class="rework_qd_list"> | 
|                     <div class="rework_qd_item" @click="openL(index)"> | 
|                         <span><b>*</b>入库货位</span> | 
|                         <div class="rework_qd_item_right"> | 
|                             <span :class="item.locationName ? 'black' : ''">{{item.locationName ? item.locationName : '请选择'}}</span> | 
|                             <van-icon name="arrow" size="20" color="#999999" /> | 
|                         </div> | 
|                     </div> | 
|                     <div class="rework_qd_item" @click="openMaterial(index)"> | 
|                         <span><b>*</b>入库物料</span> | 
|                         <div class="rework_qd_item_right"> | 
|                             <span :class="item.materialName ? 'black' : ''">{{item.materialName ? item.materialName : '请选择'}}</span> | 
|                             <van-icon name="arrow" size="20" color="#999999" /> | 
|                         </div> | 
|                     </div> | 
|                     <!-- <div class="rework_qd_item" v-if="form.type != 25"> | 
|                         <span>生产工序</span> | 
|                         <div class="rework_qd_item_right"> | 
|                             <span :class="item.procedureName ? 'black' : ''">{{item.procedureName ? item.procedureName : '请选择'}}</span> | 
|                             <van-icon name="arrow" size="20" color="#999999" /> | 
|                         </div> | 
|                     </div> --> | 
|                     <div class="rework_qd_item" @click="openQ(index)"> | 
|                         <span><b>*</b>质量属性</span> | 
|                         <div class="rework_qd_item_right"> | 
|                             <span :class="item.qualityTypeName ? 'black' : ''">{{item.qualityTypeName ? item.qualityTypeName : '请选择'}}</span> | 
|                             <van-icon name="arrow" size="20" color="#999999" /> | 
|                         </div> | 
|                     </div> | 
|                     <div class="rework_qd_item"> | 
|                         <span>批次号</span> | 
|                         <div class="rework_qd_item_right"> | 
|                             <input type="text" v-model="item.batch" placeholder="请输入" /> | 
|                         </div> | 
|                     </div> | 
|                     <div class="rework_qd_item"> | 
|                         <span><b>*</b>入库数量<template v-if="item.unitName">({{ item.unitName }})</template></span> | 
|                         <div class="rework_qd_item_right"> | 
|                             <input type="text" v-model="item.num" placeholder="0" /> | 
|                         </div> | 
|                     </div> | 
|                 </div> | 
|                 <template #right> | 
|                     <van-button style="height: 100%;" square type="danger" text="删除" @click="dele(index)" /> | 
|                 </template> | 
|             </van-swipe-cell> | 
|         </div> | 
|         <div class="rework_zw"></div> | 
|         <div class="rework_footer"> | 
|             <button class="rework_footer_submit" @click="onConfirm">提交</button> | 
|         </div> | 
|         <!-- 仓库 --> | 
|         <Warehouse :show="warehouseShow" @close="close" @value="getValue" /> | 
|         <!-- 物料 --> | 
|         <Material :show="materialsShow" @close="close1" @value="getValue1" /> | 
|         <!-- 质量属性 --> | 
|         <Quality :show="qualityShow" @close="close2" @value="getValue2" /> | 
|         <!-- 选择货位 --> | 
|         <Location :show="locationShow" :list="locationList" @close="close3" @value="getValue3" /> | 
|         <!-- 单据类型 --> | 
|         <van-popup v-model:show="typeShow" position="bottom" :style="{ height: '50%' }"> | 
|             <van-picker | 
|                 :columns="columns" | 
|                 @confirm="onConfirm1" | 
|                 @cancel="onCancel" | 
|                 :columns-field-names="customFieldName" | 
|             /> | 
|         </van-popup> | 
|     </div> | 
| </template> | 
|   | 
| <script setup lang="ts"> | 
|     import { onMounted, ref, reactive } from 'vue' | 
|     import { useRouter } from 'vue-router' | 
|     import { Toast } from 'vant' | 
|     import { createForStandard, getListByWarehouseId, wOutBoundForStockUp } from '@/apis/WorkOrderAPI' | 
|     import Warehouse from '@/components/common/Warehouse.vue' | 
|     import Material from '@/components/newCom/Material.vue' | 
|     import Quality from '@/components/newCom/quality.vue' | 
|     import Location from '@/components/newCom/location.vue' | 
|   | 
|     const router = useRouter() | 
|     // 表单数据 | 
|     let form: any = reactive({ | 
|         warehouseName: '', | 
|         warehouseId: '', | 
|         type: '', | 
|         typeName: '' | 
|     }) | 
|   | 
|     let locationList: any = ref([]) | 
|   | 
|     let i = ref(0) | 
|   | 
|     let columns = ref([ | 
|         { name: '采购入库', id: 25 }, | 
|         { name: '库存调整', id: 28 } | 
|     ]) | 
|     const customFieldName = { | 
|       text: 'name' | 
|     }; | 
|     let list = ref<Array<any>>([ | 
|         { | 
|             batch: '', | 
|             locationId: '', | 
|             locationName: '', | 
|             materialId: '', | 
|             materialName: '', | 
|             num: '', | 
|             procedureId: '', | 
|             procedureName: '', | 
|             qualityType: '', | 
|             qualityTypeName: '', | 
|             unitId: '', | 
|             unitName: '' | 
|         } | 
|     ]) | 
|     let warehouseShow = ref<boolean>(false) | 
|     let materialsShow = ref<boolean>(false) | 
|     let qualityShow = ref<boolean>(false) | 
|     let locationShow = ref<boolean>(false) | 
|     let typeShow = ref<boolean>(false) | 
|   | 
|     // 打开选择物料 | 
|     const openMaterial = (index: number) => { | 
|         i.value = index | 
|         materialsShow.value = true | 
|     } | 
|     // 打开选择物料 | 
|     const openQ = (index: number) => { | 
|         i.value = index | 
|         qualityShow.value = true | 
|     } | 
|     // 打开选择货位 | 
|     const openL = (index: number) => { | 
|         if (!form.warehouseId) return Toast('请选择入库仓库') | 
|         i.value = index | 
|         locationShow.value = true | 
|     } | 
|     const addItem = () => { | 
|         // if (!form.warehouseId) return Toast('请选择入库仓库') | 
|         list.value.push({ | 
|             batch: '', | 
|             locationId: '', | 
|             locationName: '', | 
|             materialId: '', | 
|             materialName: '', | 
|             num: '', | 
|             procedureId: '', | 
|             procedureName: '', | 
|             qualityType: '', | 
|             qualityTypeName: '', | 
|             unitId: '', | 
|             unitName: '' | 
|         }) | 
|     } | 
|   | 
|     const onConfirm1 = (value: any) => { | 
|         form.typeName = value.name | 
|         form.type = value.id | 
|         typeShow.value = false | 
|     }; | 
|     const onCancel = () => { | 
|         typeShow.value = false | 
|     } | 
|      | 
|     // 获取当天年月日 | 
|     const getDay = () => { | 
|         var date = new Date(); | 
|         var year = date.getFullYear(); | 
|         var month = date.getMonth() + 1; | 
|         var day = date.getDate(); | 
|         return `${year}-${month <= 9 ? `0${month}` : month}-${day <= 9 ? `0${day}` : day}` | 
|     } | 
|   | 
|     // 提交 | 
|     const onConfirm = () => { | 
|         if (!form.type) return Toast('请选择单据类型') | 
|         if (!form.warehouseId) return Toast('请选择入库仓库') | 
|         if (list.value.length === 0) return Toast('请先添加入库物料') | 
|         for (let i = 0; i < list.value.length; i++) { | 
|             if (!list.value[i].locationId) return Toast(`第${i+1}项入库货位不能为空`) | 
|             if (!list.value[i].materialId) return Toast(`第${i+1}项入库物料不能为空`) | 
|             if (!list.value[i].qualityType) return Toast(`第${i+1}项质量属性不能为空`) | 
|             if (!list.value[i].num || list.value[i].num == '' || list.value[i].num == 0) { | 
|                 return Toast(`第${i + 1}项入库数量必须大于0`) | 
|             } | 
|         } | 
|         wOutBoundForStockUp({ | 
|             type: form.type, | 
|             planDate: getDay(), | 
|             validDate: getDay(), | 
|             warehouseId: form.warehouseId, | 
|             woutboundInBodyBeanList: list.value | 
|         }).then(res => { | 
|             if (res.code === 200) { | 
|                 Toast.success({message: '入库成功'}) | 
|                 setTimeout(() => { | 
|                     router.go(-1) | 
|                 }, 2000) | 
|             } | 
|         }) | 
|     } | 
|   | 
|     // 打开选择物料 | 
|     const openMs = () => { | 
|         if (!form.warehouseId) return Toast('请先选择出库仓库') | 
|         const { selected }: any = Material.value | 
|         let ids = list.value.map(item => item.id) | 
|         Material.value.selected = ids | 
|         materialsShow.value = true | 
|     } | 
|   | 
|     // 删除 | 
|     const dele = (index: any) => { | 
|         if (list.value.length === 1) { | 
|             Toast('至少保留一条工装信息') | 
|             return | 
|         } | 
|         list.value.splice(index, 1) | 
|     } | 
|     // 关闭仓库选择弹框 | 
|     const close = (): void => { | 
|         warehouseShow.value = false | 
|     } | 
|     // 关闭仓库选择弹框 | 
|     const close1 = (): void => { | 
|         materialsShow.value = false | 
|     } | 
|     // 关闭仓库选择弹框 | 
|     const close2 = (): void => { | 
|         qualityShow.value = false | 
|     } | 
|     // 关闭货位选择弹框 | 
|     const close3 = (): void => { | 
|         locationShow.value = false | 
|     } | 
|     // 选择仓库回调 | 
|     const getValue = (item: any): void => { | 
|         form.warehouseName = item.name | 
|         form.warehouseId = item.id | 
|         getListByWarehouseId({ wareHouseId: item.id }) | 
|             .then(res => { | 
|                 if (res.code === 200) { | 
|                     locationList.value = res.data | 
|                     list.value.forEach(item => { | 
|                         item.locationId = '' | 
|                         item.locationName = '' | 
|                     }) | 
|                 } | 
|             }) | 
|         warehouseShow.value = false | 
|     } | 
|     // 选择物料 | 
|     const getValue1 = (item: any): void => { | 
|         console.log(item) | 
|         list.value[i.value].materialName = item.mmodelUnionName | 
|         list.value[i.value].materialId = item.id | 
|         list.value[i.value].unitId = item.unitId | 
|         list.value[i.value].unitName = item.umodelName | 
|         materialsShow.value = false | 
|     } | 
|     // 选择质量属性 | 
|     const getValue2 = (item: any): void => { | 
|         list.value[i.value].qualityType = item.id | 
|         list.value[i.value].qualityTypeName = item.name | 
|         qualityShow.value = false | 
|     } | 
|     // 选择货位 | 
|     const getValue3 = (item: any): void => { | 
|         list.value[i.value].locationId = item.id | 
|         list.value[i.value].locationName = item.unionName | 
|         locationShow.value = false | 
|     } | 
|     onMounted(() => { | 
|         // 获取工装信息 | 
|         // getLKInfo(route.query.id as string) | 
|     }) | 
| </script> | 
|   | 
| <style lang="scss" scoped> | 
|     .rework { | 
|         width: 100%; | 
|         height: 100%; | 
|         position: absolute; | 
|         .rework_list { | 
|             display: flex; | 
|             flex-direction: column; | 
|             background: white; | 
|             padding: 0 30px; | 
|             box-sizing: border-box; | 
|             .rework_list_item { | 
|                 display: flex; | 
|                 align-items: center; | 
|                 justify-content: space-between; | 
|                 height: 98px; | 
|                 border-bottom: 1PX solid #E5E5E5; | 
|                 &:last-child { | 
|                     border: none; | 
|                 } | 
|                 span { | 
|                     font-size: 30px; | 
|                     font-weight: 400; | 
|                     color: #222222; | 
|                     flex-shrink: 0; | 
|                     b { | 
|                         font-size: 30px; | 
|                         color: red; | 
|                         margin-right: 5px; | 
|                     } | 
|                 } | 
|                 .rework_list_item_right { | 
|                     flex: 1; | 
|                     display: flex; | 
|                     align-items: center; | 
|                     justify-content: flex-end; | 
|                     span { | 
|                         font-size: 28px; | 
|                         font-weight: 400; | 
|                         color: #999999; | 
|                     } | 
|                     .black { | 
|                         color: black !important; | 
|                     } | 
|                     input { | 
|                         width: 230px; | 
|                         height: 60px; | 
|                         font-size: 28px; | 
|                         border-radius: 8px; | 
|                         padding: 0 30px; | 
|                         text-align: right; | 
|                         box-sizing: border-box; | 
|                         border: 1px solid #CCCCCC; | 
|                     } | 
|                     input::-webkit-input-placeholder { /* WebKit browsers */ | 
|                         font-size: 28px; | 
|                         font-weight: 400; | 
|                         color: #B2B2B2; | 
|                     } | 
|                 } | 
|             } | 
|         } | 
|         .rework_qd { | 
|             margin-top: 40px; | 
|             width: 100%; | 
|             background: #F7F7F7; | 
|             .rework_qd_title { | 
|                 display: flex; | 
|                 align-items: center; | 
|                 justify-content: space-between; | 
|                 padding: 0 30px 30px 30px; | 
|                 .rework_qd_title_left { | 
|                     display: flex; | 
|                     align-items: center; | 
|                     span { | 
|                         font-size: 32px; | 
|                         font-weight: 500; | 
|                         color: #222222; | 
|                     } | 
|                     .x { | 
|                         width: 8px; | 
|                         height: 30px; | 
|                         background: #4275FC; | 
|                         border-radius: 2px; | 
|                         margin-right: 12px; | 
|                     } | 
|                 } | 
|                 .rework_qd_title_right { | 
|                     display: flex; | 
|                     align-items: center; | 
|                     img { | 
|                         width: 28px; | 
|                         height: 28px; | 
|                         margin-right: 12px; | 
|                     } | 
|                     span { | 
|                         font-size: 28px; | 
|                         font-family: PingFangSC-Regular, PingFang SC; | 
|                         font-weight: 400; | 
|                         color: #4275FC; | 
|                     } | 
|                 } | 
|             } | 
|             .rework_qd_list { | 
|                 display: flex; | 
|                 flex-direction: column; | 
|                 padding: 0 30px; | 
|                 background: #FFFFFF; | 
|                 box-sizing: border-box; | 
|                 margin-bottom: 30px; | 
|                 .rework_qd_item { | 
|                     display: flex; | 
|                     align-items: center; | 
|                     justify-content: space-between; | 
|                     height: 98px; | 
|                     border-bottom: 1PX solid #E5E5E5; | 
|                     &:last-child { | 
|                         border: none; | 
|                     } | 
|                     span { | 
|                         font-size: 30px; | 
|                         font-weight: 400; | 
|                         color: #222222; | 
|                         flex-shrink: 0; | 
|                         b { | 
|                             font-size: 30px; | 
|                             color: red; | 
|                             margin-right: 5px; | 
|                         } | 
|                     } | 
|                     .rework_qd_item_right { | 
|                         display: flex; | 
|                         align-items: center; | 
|                         span { | 
|                             font-size: 28px; | 
|                             font-weight: 400; | 
|                             color: #999999; | 
|                         } | 
|                         .black { | 
|                             color: black !important; | 
|                         } | 
|                         input { | 
|                             width: 230px; | 
|                             height: 60px; | 
|                             font-size: 28px; | 
|                             border-radius: 8px; | 
|                             padding: 0 30px; | 
|                             text-align: right; | 
|                             box-sizing: border-box; | 
|                             border: 1px solid #CCCCCC; | 
|                         } | 
|                         input::-webkit-input-placeholder { /* WebKit browsers */ | 
|                             font-size: 28px; | 
|                             font-weight: 400; | 
|                             color: #B2B2B2; | 
|                         } | 
|                     } | 
|                 } | 
|             } | 
|         } | 
|         .rework_zw { | 
|             height: 168px; | 
|         } | 
|         .rework_footer { | 
|             width: calc(100% - 60px); | 
|             position: fixed; | 
|             bottom: 0; | 
|             display: flex; | 
|             align-items: center; | 
|             justify-content: space-between; | 
|             padding: 0 30px 68px 30px; | 
|             .rework_footer_add { | 
|                 flex: 1; | 
|                 height: 88px; | 
|                 font-size: 30px; | 
|                 font-weight: 500; | 
|                 color: $nav-color; | 
|                 background: #FFFFFF; | 
|                 box-shadow: 0 0 12px 0 rgba(0,0,0,0.0800); | 
|                 border-radius: 8px; | 
|                 display: flex; | 
|                 align-items: center; | 
|                 justify-content: center; | 
|             } | 
|             .rework_footer_submit { | 
|                 flex: 1; | 
|                 height: 88px; | 
|                 font-size: 30px; | 
|                 font-weight: 500; | 
|                 color: #ffffff; | 
|                 background: $nav-color; | 
|                 box-shadow: 0 0 12px 0 rgba(0,0,0,0.0800); | 
|                 border-radius: 8px; | 
|                 display: flex; | 
|                 align-items: center; | 
|                 justify-content: center; | 
|                 border: none; | 
|             } | 
|         } | 
|     } | 
| </style> |