| <template> | 
|     <div class="page"> | 
|         <!--    头部信息(转库单)    --> | 
|         <div class="page_info" v-if="info.wtransfer && route.query.type == 7"> | 
|             <div class="page_info_title">计划出库日期:{{info.wtransfer.outPlandate}}</div> | 
|             <div class="page_info_list"> | 
|                 <div class="page_info_list_item"> | 
|                     <div class="page_info_list_item_label">来源类型:</div> | 
|                     <div class="page_info_list_item_nr" v-if="info.wtransfer.originType === 0">采购订单</div> | 
|                     <div class="page_info_list_item_nr" v-else-if="info.wtransfer.originType === 1">生产工单</div> | 
|                     <div class="page_info_list_item_nr" v-else-if="info.wtransfer.originType === 2">销售订单</div> | 
|                     <div class="page_info_list_item_nr" v-else-if="info.wtransfer.originType === 3">转库单</div> | 
|                     <div class="page_info_list_item_nr" v-else-if="info.wtransfer.originType === 4">盘点单</div> | 
|                     <div class="page_info_list_item_nr" v-else>-</div> | 
|                 </div> | 
| <!--                <div class="page_info_list_item">--> | 
| <!--                    <div class="page_info_list_item_label">申领工序:</div>--> | 
| <!--                    <div class="page_info_list_item_nr">{{info.wtransfer.procedureName ? info.wtransfer.procedureName : '-'}}</div>--> | 
| <!--                </div>--> | 
|                 <div class="page_info_list_item"> | 
|                     <div class="page_info_list_item_label">来源单号:</div> | 
|                     <div class="page_info_list_item_nr">{{info.wtransfer.originCode ? info.wtransfer.originCode : '-'}}</div> | 
|                 </div> | 
|                 <div class="page_info_list_item"> | 
|                     <div class="page_info_list_item_label">申请人员:</div> | 
|                     <div class="page_info_list_item_nr">{{info.wtransfer.outUserName}}/{{info.wtransfer.outDepartName}}</div> | 
|                 </div> | 
|                 <div class="page_info_list_item"> | 
|                     <div class="page_info_list_item_label">入库接收人:</div> | 
|                     <div class="page_info_list_item_nr">{{info.wtransfer.inUserName}}</div> | 
|                 </div> | 
|                 <div class="page_info_list_item"> | 
|                     <div class="page_info_list_item_label">申请时间:</div> | 
|                     <div class="page_info_list_item_nr">{{info.wtransfer.createTime ? info.wtransfer.createTime : '-'}}</div> | 
|                 </div> | 
|             </div> | 
|             <div class="page_info_bz" v-if="info.wtransfer.abstracts"> | 
|                 <div class="page_info_bz_title">转库备注:</div> | 
|                 <div class="page_info_bz_nr">{{info.wtransfer.abstracts}}</div> | 
|             </div> | 
|         </div> | 
|         <!--    头部信息(出库单)    --> | 
|         <div class="page_info" v-if="info.woutbound && route.query.type == 8"> | 
|             <div class="page_info_title">计划出库日期:{{info.woutbound.planDate}}</div> | 
|             <div class="page_info_list"> | 
|                 <div class="page_info_list_item"> | 
|                     <div class="page_info_list_item_label">来源类型:</div> | 
|                     <div class="page_info_list_item_nr" v-if="info.woutbound.originType === 0">采购订单</div> | 
|                     <div class="page_info_list_item_nr" v-else-if="info.woutbound.originType === 1">生产工单</div> | 
|                     <div class="page_info_list_item_nr" v-else-if="info.woutbound.originType === 2">销售订单</div> | 
|                     <div class="page_info_list_item_nr" v-else-if="info.woutbound.originType === 3">转库单</div> | 
|                     <div class="page_info_list_item_nr" v-else-if="info.woutbound.originType === 4">盘点单</div> | 
|                     <div class="page_info_list_item_nr" v-else>-</div> | 
|                 </div> | 
| <!--                <div class="page_info_list_item">--> | 
| <!--                    <div class="page_info_list_item_label">申领工序:</div>--> | 
| <!--                    <div class="page_info_list_item_nr">{{info.woutbound.procedureName ? info.woutbound.procedureName : '-'}}</div>--> | 
| <!--                </div>--> | 
|                 <div class="page_info_list_item"> | 
|                     <div class="page_info_list_item_label">来源单号:</div> | 
|                     <div class="page_info_list_item_nr">{{info.woutbound.originCode ? info.woutbound.originCode : '-'}}</div> | 
|                 </div> | 
|                 <div class="page_info_list_item"> | 
|                     <div class="page_info_list_item_label">申请人员:</div> | 
|                     <div class="page_info_list_item_nr">{{info.woutbound.userName}}/{{info.woutbound.userDepartName}}</div> | 
|                 </div> | 
|                 <div class="page_info_list_item"> | 
|                     <div class="page_info_list_item_label">申请时间:</div> | 
|                     <div class="page_info_list_item_nr">{{info.woutbound.createTime ? info.woutbound.createTime : '-'}}</div> | 
|                 </div> | 
|             </div> | 
|             <div class="page_info_bz" v-if="info.woutbound.abstracts"> | 
|                 <div class="page_info_bz_title">转库备注:</div> | 
|                 <div class="page_info_bz_nr">{{info.woutbound.abstracts}}</div> | 
|             </div> | 
|         </div> | 
|         <div class="page_h"></div> | 
|         <!--    打开选择工装    --> | 
| <!--        <div class="switch" v-if="type === QRCodeType.ZKD.toString()">--> | 
| <!--            <button @click="openxz"><img src="@/assets/icon/gongdan_ic_shoudong@2x.png" alt="">手动选择</button>--> | 
| <!--        </div>--> | 
| <!--        <div class="page_h" v-if="type === QRCodeType.ZKD.toString()"></div>--> | 
|         <!--    待出物料    --> | 
|         <van-collapse v-model="activeNames"> | 
|             <!--        转库单(多个仓库)        --> | 
|             <template v-if="route.query.type == 7"> | 
|                 <van-collapse-item :name="String(index + 1 )" v-for="(item, index) in info.wtransferWarehouseList" :key="index"> | 
|                     <template #title> | 
|                         <div class="page_sfq"><img src="@/assets/icon/chuku_ic_cangku@2x.png" alt="" /> {{item.warehouseName}}</div> | 
|                     </template> | 
|                     <div class="page_dck"> | 
|                         <div class="page_dck_title"> | 
|                             <div class="page_dck_title_x"></div> | 
|                             <span>待出库物料</span> | 
|                         </div> | 
|                     </div> | 
|                     <div class="page_content" v-for="(items, idx) in item.wtransferDetailList" :key="idx"> | 
|                         <div class="page_content_title"> | 
|                             <div class="page_content_title_top"> | 
|                                 <span>{{items.materialName}} | {{items.materialCode}}</span> | 
|                                 <span>待出 <span>{{items.outPlannum}}</span> {{items.unitName}}</span> | 
|                             </div> | 
|                             <div class="page_content_title_bottom"> | 
|                                 <span class="green" v-if="items.qualityType === 0">合格 / </span> | 
|                                 <span class="warning" v-else-if="items.qualityType === 1">不良 / </span> | 
|                                 <span class="error" v-else-if="items.qualityType === 2">报废 / </span> | 
|                                 <span v-else>- / </span> | 
|                                 <span>{{items.procedureName ? items.procedureName : '-'}} / </span> | 
|                                 <span>{{items.batch ? items.batch : '-'}}</span> | 
|                             </div> | 
|                         </div> | 
|                         <div class="page_content_list" v-for="(childer, idxs) in items.wstockExtListVOList" :key="idxs"> | 
|                           <div class="page_content_list_item"> | 
|                             <div class="page_content_list_item_label">出库货位:</div> | 
|                             <div class="page_content_list_item_nr">{{childer.locationName}}</div> | 
|                           </div> | 
|                           <div class="page_content_list_items"> | 
|                             <div class="page_content_list_item_label">数量:</div> | 
|                             <div class="page_content_list_item_nr">{{childer.num}}{{childer.unitName}}</div> | 
|                           </div> | 
|                           <div class="page_content_list_item"> | 
|                             <div class="page_content_list_item_label">批次号:</div> | 
|                             <div class="page_content_list_item_nr">{{childer.batch ? childer.batch : '-'}}</div> | 
|                           </div> | 
|                         </div> | 
|                     </div> | 
|                 </van-collapse-item> | 
|             </template> | 
|             <!--        出库单(一个仓库)        --> | 
|             <template v-if="route.query.type == 8"> | 
|                 <van-collapse-item name="1"> | 
|                     <template #title> | 
|                         <div class="page_sfq" v-if="info.woutbound"> | 
|                             <img src="@/assets/icon/chuku_ic_cangku@2x.png" alt="" /> {{info.woutbound.warehouseName}} | 
|                         </div> | 
|                     </template> | 
|                     <div class="page_dck"> | 
|                         <div class="page_dck_title"> | 
|                             <div class="page_dck_title_x"></div> | 
|                             <span>待出库物料</span> | 
|                         </div> | 
|                     </div> | 
|                     <div class="page_content" v-for="(item, index) in info.woutboundDetailsWait" :key="index"> | 
|                         <div class="page_content_title"> | 
| <!--                            <span>{{item.materialName}} | {{item.materialCode}}</span>--> | 
| <!--                            <span>待出 <span>{{item.num}}</span> {{item.unitName}}</span>--> | 
|                             <div class="page_content_title_top"> | 
|                                 <span>{{item.materialName}} | {{item.materialCode}}</span> | 
|                                 <span>待出 <span>{{item.num}}</span> {{item.unitName}}</span> | 
|                             </div> | 
|                             <div class="page_content_title_bottom"> | 
|                                 <span class="green" v-if="item.qualityType === 0">合格 / </span> | 
|                                 <span class="warning" v-else-if="item.qualityType === 1">不良 / </span> | 
|                                 <span class="error" v-else-if="item.qualityType === 2">报废 / </span> | 
|                                 <span v-else>- / </span> | 
|                                 <span>{{item.procedureName ? item.procedureName : '-'}} / </span> | 
|                                 <span>{{item.batch ? item.batch : '-'}}</span> | 
|                             </div> | 
|                         </div> | 
|                         <div class="page_content_list" v-for="(items, ind) in item.wstockExtListVOList" :key="ind"> | 
|                             <div class="page_content_list_item"> | 
|                                 <div class="page_content_list_item_label">批次号:</div> | 
|                                 <div class="page_content_list_item_nr">{{items.batch ? items.batch : '-'}}</div> | 
|                             </div> | 
|                             <div class="page_content_list_items"> | 
|                                 <div class="page_content_list_item_label">数量:</div> | 
|                                 <div class="page_content_list_item_nr">{{items.num}}{{items.umodel.name}}</div> | 
|                             </div> | 
|                             <div class="page_content_list_item" v-if="items.lmodel"> | 
|                                 <div class="page_content_list_item_label">出库货位:</div> | 
|                                 <div class="page_content_list_item_nr">{{items.lmodel.unionName}}</div> | 
|                             </div> | 
|                         </div> | 
|                     </div> | 
|                 </van-collapse-item> | 
|             </template> | 
|         </van-collapse> | 
|         <div class="page_h"></div> | 
|         <!--    已选物料    --> | 
|         <div class="page_yxwl"> | 
|             <!--        转库单(多个仓库)        --> | 
|             <!-- <template v-if="route.query.type == 7"> | 
|                 <div class="page_yxwl_title"> | 
|                     <div class="left"> | 
|                         <div class="page_yxwl_title_x"></div> | 
|                         <span>已选择物料</span> | 
|                     </div> | 
|                     <div class="right" v-if="type === QRCodeType.ZKD.toString()" @click="openxz"> | 
|                         <img src="@/assets/icon/gongdan_ic_shoudong@2x.png" alt=""><span>手动出库</span> | 
|                     </div> | 
|                     <div v-else></div> | 
|                 </div> | 
|                 <div class="page_yxwl_list" v-if="info.wtransferRedisCodeBeanList && info.wtransferRedisCodeBeanList.length > 0"> | 
|                     <template v-for="(item, index) in info.wtransferWarehouseList" :key="index"> | 
|                         <div class="page_yxwl_list_item" v-for="(item1, idx) in item.wtScanMaterialBeanList" :key="idx"> | 
|                             <div class="page_yxwl_list_item_top"> | 
|                                 <div class="page_yxwl_list_item_top_left">{{item1.materialName}} | {{item1.materialCode}} </div> | 
|                                 <div class="page_yxwl_list_item_top_right"> | 
|                                     <span>已选 <span>{{item1.scanNum}}</span> {{item1.unitName}}</span> | 
|                                 </div> | 
|                             </div> | 
|                             <div class="page_yxwl_list_item_sx"> | 
|                                 <span class="green" v-if="item1.qualityType === 0">合格 <span>/</span></span> | 
|                                 <span class="yellow" v-else-if="item1.qualityType === 1">不良 <span>/</span></span> | 
|                                 <span class="red" v-else-if="item1.qualityType === 2">报废 <span>/</span></span> | 
|                                 <span> {{item1.procedureName ? item1.procedureName : '-'}} <span>/</span></span> | 
|                                 <span> {{item1.batch ? item1.batch : '-'}}</span> | 
|                             </div> | 
|                             <div class="page_yxwl_list_item_num" v-for="(item2, idx1) in item1.wtransferRedisCodeBeanList" :key="idx1"> | 
|                                 <div class="item"> | 
|                                     <div class="label"></div> | 
|                                     <div class="nr" v-if="item2.batch">{{item2.scanCode}} - {{item2.batch}}</div> | 
|                                     <div class="nr" v-else>{{item2.scanCode}}</div> | 
|                                 </div> | 
|                                 <div class="item"> | 
|                                     <div class="label">数量:</div> | 
|                                     <div class="nr">{{item2.num}}{{item2.unitName}}</div> | 
|                                 </div> | 
|                                 <div class="dele" @click="dele(item2)"> | 
|                                     <img src="@/assets/icon/chuku_ic_delete@2x.png" alt="" /> | 
|                                 </div> | 
|                             </div> | 
|                         </div> | 
|                     </template> | 
|                 </div> | 
|                 <div class="page_yxwl_kong" v-else><span>暂无数据</span></div> | 
|             </template> --> | 
|             <!--        出库单(一个仓库)        --> | 
|             <!-- <template v-if="route.query.type == 8"> --> | 
|                 <div class="page_yxwl_title"> | 
| <!--                    <div class="page_yxwl_title_x"></div>--> | 
| <!--                    <span>已选择物料</span>--> | 
|                     <div class="left"> | 
|                         <div class="page_yxwl_title_x"></div> | 
|                         <span>已选择物料</span> | 
|                     </div> | 
|                     <div class="right" @click="openxz"> | 
|                         <img src="@/assets/icon/gongdan_ic_shoudong@2x.png" alt=""><span>手动出库</span> | 
|                     </div> | 
|                     <!-- <div></div> --> | 
|                 </div> | 
|                 <div class="page_yxwl_list" v-if="outboundList.length > 0"> | 
|                     <!-- <template> --> | 
|                         <div class="page_yxwl_list_item" v-for="(item, index) in outboundList" :key="index"> | 
|                             <div class="page_yxwl_list_item_top"> | 
|                                 <div class="page_yxwl_list_item_top_left">{{ item.materialName }} | {{ item.materialCode }} </div> | 
|                                 <!-- <div class="page_yxwl_list_item_top_right"> | 
|                                     <span>已选:<span>{{item.outPlannum}}</span> {{item.unitName}}</span> | 
|                                 </div> --> | 
|                             </div> | 
|                             <div class="page_yxwl_list_item_sx"> | 
|                                 <span class="green" v-if="item.qualityType == 0">合格 <span>/</span></span> | 
|                                 <span class="yellow" v-else-if="item.qualityType == 1">不良 <span>/</span></span> | 
|                                 <span class="red" v-else-if="item.qualityType == 2">报废 <span>/</span></span> | 
|                                 <span v-else>- / </span> | 
|                                 <span> {{item.procedureName ? item.procedureName : '-'}} / </span> | 
|                                 <span> {{item.batch ? item.batch : '-'}}</span> | 
|                             </div> | 
|                             <div class="page_yxwl_list_item_num"> | 
|                                 <div class="item"> | 
|                                     <div class="label">出库货位:</div> | 
|                                     <div class="nr"> | 
|                                         <span>{{ item.locationName }}</span> | 
|                                     </div> | 
|                                 </div> | 
|                                 <div class="item"> | 
|                                     <div class="label">数量:</div> | 
|                                     <div class="nr"> | 
|                                         <!-- @input="changeNum(item)" --> | 
|                                         <input type="number" v-model="item.num" placeholder="请输入"> | 
|                                         <span>{{ item.unitName }}</span> | 
|                                     </div> | 
|                                 </div> | 
|                                 <div class="dele" @click="dele(index)"> | 
|                                     <img src="@/assets/icon/chuku_ic_delete@2x.png" alt="" /> | 
|                                 </div> | 
|                             </div> | 
|                         </div> | 
|                     <!-- </template> --> | 
|                 </div> | 
|                 <div class="page_yxwl_kong" v-else><span>暂无数据</span></div> | 
|             <!-- </template> --> | 
|         </div> | 
|         <div class="page_zw"></div> | 
|         <!--    操作按钮    --> | 
|         <div class="page_footer"> | 
|             <button class="page_footer_qrck" v-preventReClick @click="submit"> | 
|                 <span>确认出库</span> | 
|             </button> | 
|         </div> | 
|         <Access :show="show" :transferId="(route.query.id as string)" :warehouseId="warehouseId" @close="closeBox" @value="getValue" /> | 
|     </div> | 
| </template> | 
|   | 
| <script setup lang="ts"> | 
|     import { ref, onMounted } from 'vue' | 
|     import { useRoute, useRouter } from "vue-router" | 
|     import { Toast } from 'vant' | 
|     import { QRCodeType } from '@/enum' | 
|     import { | 
|         outScanAppliances, | 
|         wTransferForInOut, | 
|         wTransferForInOutUpload, | 
|         wOutBoundForInOut, | 
|         wOutBoundForUpload, | 
|         transferToOutNew | 
|     } from '@/apis/ExWarehouse' | 
|     import { useStore } from 'vuex' | 
|     import { getDB } from '@/apis/agencyAPI' | 
|     import Access from '@/components/common/Access.vue' | 
|   | 
|     const route = useRoute() | 
|     const store = useStore() | 
|     const router = useRouter() | 
|   | 
|     let dataItem: any = null    // 已扫数据 | 
|   | 
|     let show = ref<boolean>(false) | 
|     let ids = ref<string>('')   // 已选 | 
|     let warehouseId = ref('')  // 仓库id | 
|     let outboundList = ref<any[]>([])  // 出库数据 | 
|     // 控制扫码显示隐藏 | 
|     const openCode = ref<boolean>(false) | 
|   | 
|     // 出库类型 | 
|     let type: any = route.query.type | 
|   | 
|     const activeNames = ref(['1']); | 
|   | 
|     // 详情数据 | 
|     let info: any = ref({}) | 
|   | 
|     // 打开手动选择工装弹框 | 
|     const openxz = () => { | 
|         let arr: any = [] | 
|         if (info.value.wtransferRedisCodeBeanList.length !== 0) { | 
|             info.value.wtransferRedisCodeBeanList.forEach((element: any) => { | 
|                 arr.push(element.appliancesId) | 
|             }) | 
|             ids.value = arr.join(',') | 
|         } else { | 
|             ids.value = '' | 
|         } | 
|         show.value = true | 
|     } | 
|   | 
|     const closeBox = () => { | 
|         show.value = false | 
|     } | 
|   | 
|     const changeNum = (item: any) => { | 
|         info.value.wtransferWarehouseList[0].wtransferDetailList.forEach((row: any) => { | 
|             if (row.materialId === item.materialId) { | 
|                 if (Number(item.num) > Number(row.outPlannum)) { | 
|                     item.num = 0 | 
|                     Toast.fail({ message: "出库物料数量不能大于待出库物料数量" }) | 
|                 } | 
|             } | 
|         }) | 
|     } | 
|   | 
|     // 提交工装 | 
|     const getValue = async (val: any, i: number) => { | 
|         // if (i === 0) { | 
|         show.value = false | 
|         // } | 
|          | 
|   | 
|         for (let i = 0; i < info.value.wtransferWarehouseList[0].wtransferDetailList.length; i++) { | 
|             if (info.value.wtransferWarehouseList[0].wtransferDetailList[i].materialId == val.materialId && | 
|             info.value.wtransferWarehouseList[0].wtransferDetailList[i].procedureId == val.procedureId && | 
|             info.value.wtransferWarehouseList[0].wtransferDetailList[i].qualityType == val.qualityType && | 
|             info.value.wtransferWarehouseList[0].wtransferDetailList[i].batch == val.batch) { | 
|   | 
|                 for (let s = 0; s < outboundList.value.length; s++) { | 
|                     if (outboundList.value[s].newId == info.value.wtransferWarehouseList[0].wtransferDetailList[i].id) { | 
|                         return Toast.fail({ message: "该物料批次已存在" }) | 
|                     } | 
|                 } | 
|   | 
|                 let obj = JSON.parse(JSON.stringify(val)) | 
|                 obj.newId = info.value.wtransferWarehouseList[0].wtransferDetailList[i].id | 
|                 outboundList.value.push(obj) | 
|   | 
|             } | 
|         } | 
|   | 
|         console.log(outboundList.value) | 
|         // let res = await outScanAppliances({ | 
|         //     barCode: val.prefix + val.code, | 
|         //     pId: info.value.wtransfer.id, | 
|         //     type: 1 | 
|         // }) | 
|         // if (res.code === 200) { | 
|         //     let isData: string = '' | 
|         //     info.value.wtransferWarehouseList.forEach((item: any) => { | 
|         //         if (res.data.warehouseId === item.warehouseId) { | 
|         //             item.wtransferDetailList.forEach((item1: any) => { | 
|         //                 if (item1.materialId !== res.data.materialId) { | 
|         //                     isData = 'wl' | 
|         //                 } else if (res.data.qualityType !== item1.qualityType) { | 
|         //                     isData = 'lx' | 
|         //                 } else if (res.data.procedureId !== item1.procedureId) { | 
|         //                     isData = 'gx' | 
|         //                 } else if (item1.batch ? res.data.batch !== item1.batch : false) { | 
|         //                     isData = 'pc' | 
|         //                 } else { | 
|         //                     isData = '' | 
|         //                 } | 
|         //                 if (item1.materialId == res.data.materialId && res.data.qualityType == item1.qualityType && res.data.procedureId == item1.procedureId && item1.batch ? res.data.batch == item1.batch : true) { | 
|         //                     dataItem = res.data | 
|         //                     dataItem.wtransferDetailId = item1.id | 
|         //                     dataItem.wtransferId = item1.transferId | 
|         //                     dataItem.appliancesId = res.data.id | 
|         //                     let rul = upload() | 
|         //                     return; | 
|         //                 } | 
|         //             }) | 
|         //         } else { | 
|         //             isData = 'ck' | 
|         //         } | 
|         //         if (isData === 'ck') { | 
|         //             Toast.fail({ message: "仓库不一致" }) | 
|         //         } else if (isData === 'wl') { | 
|         //             Toast.fail({ message: "物料不一致" }) | 
|         //         } else if (isData === 'lx') { | 
|         //             Toast.fail({ message: "质量类型不一致" }) | 
|         //         } else if (isData === 'gx') { | 
|         //             Toast.fail({ message: "工序不一致" }) | 
|         //         } else if (isData === 'pc') { | 
|         //             Toast.fail({ message: "批次不一致" }) | 
|         //         } | 
|         //     }) | 
|         // } | 
|         // show.value = false | 
|     } | 
|   | 
|     // 获取详情 (转库单/出库单) | 
|     const getInfo = () => { | 
|         let type: string = route.query.type as string | 
|         if (type === QRCodeType.CKD.toString()) { | 
|             console.log('出库单') | 
|             wOutBoundForInOut({ | 
|                 id: Number(route.query.id), | 
|                 wOutboundType: 0 | 
|             }).then(res => { | 
|                 if (res.code === 200) { | 
|                     info.value = res.data | 
|                     warehouseId.value = info.value.wtransferWarehouseList[0].warehouseId.toString() | 
|                 } else { | 
|                     Toast.fail({ message: res.message, forbidClick: true, duration: 2000 }) | 
|                     setTimeout(() => { | 
|                         router.go(-1) | 
|                     }, 2000) | 
|                 } | 
|             }) | 
|         } else if (type === QRCodeType.ZKD.toString()) { | 
|             console.log('转库单') | 
|             wTransferForInOut({ | 
|                 id: Number(route.query.id), | 
|                 wTransferType: 0 | 
|             }).then(res => { | 
|                 if (res.code === 200) { | 
|                     info.value = res.data | 
|                     warehouseId.value = info.value.wtransferWarehouseList[0].warehouseId.toString() | 
|                 } else { | 
|                     Toast.fail({ message: res.message, forbidClick: true, duration: 2000 }) | 
|                     setTimeout(() => { | 
|                         router.go(-1) | 
|                     }, 2000) | 
|                 } | 
|             }) | 
|         } | 
|     } | 
|   | 
|     // 删除对应的批次 | 
|     const dele = (index: Number) => { | 
|         outboundList.value.forEach((item: any, i: number) => { | 
|             if (index === i) { | 
|                 outboundList.value.splice(i, 1) | 
|             } | 
|         }) | 
|     } | 
|   | 
|     // 上传工装 | 
|     const upload = () => { | 
|         if (type === QRCodeType.ZKD.toString()) { | 
|             wTransferForInOut({ | 
|                 id: Number(route.query.id), | 
|                 optType: 1, | 
|                 wTransferType: 0, | 
|                 jsonBean: dataItem | 
|             }).then(res => { | 
|                 if (res.code === 200) { | 
|                     getInfo() | 
|                 } | 
|             }) | 
|         } else if (type === QRCodeType.CKD.toString()) { | 
|             wOutBoundForInOut({ | 
|                 id: Number(route.query.id), | 
|                 optType: 1, | 
|                 wOutboundType: 0, | 
|                 jsonBean: dataItem | 
|             }).then(res => { | 
|                 if (res.code === 200) { | 
|                     getInfo() | 
|                 } | 
|             }) | 
|         } | 
|     } | 
|   | 
|     // 点击扫码出库 | 
|     const ck = () => { | 
|         openCode.value = true | 
|     } | 
|   | 
|     // 提交操作 | 
|     const submit = () => { | 
|         if (type === QRCodeType.ZKD.toString()) { | 
|             if (outboundList.value.length > 0) { | 
|                 let result = outboundList.value.reduce((a, b) => { | 
|                     if (a[b.newId]) { | 
|                         a[b.newId].push(b); | 
|                     } else { | 
|                         a[b.newId] = [b]; | 
|                     } | 
|                     return a; | 
|                 }, {}); | 
|   | 
|                 for (let i = 0; i < info.value.wtransferWarehouseList[0].wtransferDetailList.length; i++) { | 
|                     for (let a in result) { | 
|                         if (info.value.wtransferWarehouseList[0].wtransferDetailList[i].id == a) { | 
|                             let total = 0 | 
|                             for (let b = 0; b < result[a].length; b++) { | 
|                                 total = Number(total) + Number(result[a][b].num) | 
|                             } | 
|                             console.log(total, info.value.wtransferWarehouseList[0].wtransferDetailList[i].outPlannum) | 
|                             if (!total || total <= 0) { | 
|                                 return Toast.fail({ message: '出库物料数量必须大于0', forbidClick: true, duration: 2000 }) | 
|                             } | 
|                             if (total > info.value.wtransferWarehouseList[0].wtransferDetailList[i].outPlannum) { | 
|                                 return Toast.fail({ message: '出库数量不能大于待出库数量', forbidClick: true, duration: 2000 }) | 
|                             } | 
|                         } | 
|                     } | 
|                 } | 
|   | 
|                 let submitTransferOutDetailDTOList: any = [] | 
|                 outboundList.value.forEach((item: any) => { | 
|                     info.value.wtransferWarehouseList[0].wtransferDetailList.forEach((child: any) => { | 
|                         if (item.newId == child.id) { | 
|                             submitTransferOutDetailDTOList.push({ | 
|                                 outNum: item.num, | 
|                                 wstockId: item.id, | 
|                                 wtransferDetailId: child.id | 
|                             }) | 
|                         } | 
|                     }) | 
|                 }) | 
|                 transferToOutNew({ | 
|                     submitTransferOutDetailDTOList, | 
|                     wtransferId: route.query.id | 
|                 }).then(res => { | 
|                     if (res.code === 200) { | 
|                         store.dispatch('getUpcomingNum') | 
|                         Toast.success({ message: '操作成功', forbidClick: true, duration: 2000 }) | 
|                         setTimeout(() => { | 
|                             router.replace({ name: 'wTransferDetail', query: { id: info.value.wtransfer.id, dbid: route.query.dbid } }) | 
|                         }, 2000) | 
|                     } | 
|                 }) | 
|             } else { | 
|                 Toast.fail({ message: '请选择出库物料', forbidClick: true, duration: 2000 }) | 
|             } | 
|             // let yx: number = 0 | 
|             // let dc: number = 0 | 
|             // info.value.wtransferRedisCodeBeanList.forEach((element: any) => { | 
|             //     yx = yx + element.num | 
|             // }) | 
|             // info.value.wtransferWarehouseList.forEach((element: any) => { | 
|             //     element.wtransferDetailList.forEach((elementChilder: any) => { | 
|             //         dc = dc + elementChilder.outPlannum | 
|             //     }) | 
|             // }) | 
|             // if (yx < dc) { | 
|             //     Dialog.confirm({ | 
|             //         title: '提示', | 
|             //         message: '待出物料与已出物料数量不一致,是否确认出库', | 
|             //     }) | 
|             //     .then(() => { | 
|             //         wTransferForInOutUpload({ | 
|             //             id: info.value.wtransfer.id, | 
|             //             wTransferType: 0 | 
|             //         }).then(res => { | 
|             //             if (res.code === 200) { | 
|             //                 store.dispatch('getUpcomingNum') | 
|             //                 Toast.success({ message: '操作成功', forbidClick: true, duration: 2000 }) | 
|             //                 setTimeout(() => { | 
|             //                     // router.go(-1) | 
|             //                     router.replace({ name: 'wTransferDetail', query: { id: info.value.wtransfer.id, dbid: route.query.dbid } }) | 
|             //                 }, 2000) | 
|             //             } | 
|             //         }) | 
|             //         return | 
|             //     }) | 
|             //     .catch(() => { | 
|   | 
|             //     }); | 
|             // } else { | 
|             //     wTransferForInOutUpload({ | 
|             //         id: info.value.wtransfer.id, | 
|             //         wTransferType: 0 | 
|             //     }).then(res => { | 
|             //         if (res.code === 200) { | 
|             //             store.dispatch('getUpcomingNum') | 
|             //             Toast.success({ message: '操作成功', forbidClick: true, duration: 2000 }) | 
|             //             setTimeout(() => { | 
|             //                 // router.go(-1) | 
|             //                 router.replace({ name: 'wTransferDetail', query: { id: info.value.wtransfer.id, dbid: route.query.dbid } }) | 
|             //             }, 2000) | 
|             //         } | 
|             //     }) | 
|             // } | 
|         } else if (type === QRCodeType.CKD.toString()) { | 
|             wOutBoundForUpload({ | 
|                 id: info.value.woutbound.id, | 
|                 wOutboundType: 0 | 
|             }).then(res => { | 
|                 if (res.code === 200) { | 
|                     store.dispatch('getUpcomingNum') | 
|                     Toast.success({ message: '操作成功', forbidClick: true, duration: 2000 }) | 
|                     setTimeout(() => { | 
|                         // router.go(-1) | 
|                         router.replace({ name: 'wOutboundDetail', query: { id: info.value.wtransfer.id } }) | 
|                     }, 2000) | 
|                 } | 
|             }) | 
|         } | 
|     } | 
|   | 
|     // 获取待办详情(判断当前待办是否已处理) | 
|     const getDBs = async (id: string): Promise<any> => { | 
|         let res = await getDB(id) | 
|         if (res.code === 200) { | 
|             if (res.data.status === 1) { | 
|                 if (type === QRCodeType.CKD.toString()) { | 
|                     await router.replace({ name: 'wOutboundDetail', query: { id: route.query.id } }) | 
|                 } else if (type === QRCodeType.ZKD.toString()) { | 
|                     await router.replace({ name: 'wTransferDetail', query: { id: route.query.id } }) | 
|                 } | 
|             } else { | 
|                 await getInfo() | 
|             } | 
|         } | 
|     } | 
|   | 
|     onMounted(() => { | 
|         if (route.query.dbid) { | 
|             getDBs(route.query.dbid as string) | 
|         } else { | 
|             getInfo() | 
|         } | 
|     }) | 
| </script> | 
|   | 
| <style lang="scss" scoped> | 
|     .page { | 
|         width: 100%; | 
|         height: 100%; | 
|         position: absolute; | 
|         background: #F7F7F7; | 
|         .page_info { | 
|             padding: 30px; | 
|             background: #ffffff; | 
|             .page_info_title { | 
|                 font-size: 32px; | 
|                 font-weight: 500; | 
|                 color: #4275FC; | 
|             } | 
|             .page_info_list { | 
|                 display: flex; | 
|                 flex-wrap: wrap; | 
|                 margin: 30px 0 0 0; | 
|                 .page_info_list_item { | 
|                     width: 100%; | 
|                     display: flex; | 
|                     margin-top: 24px; | 
|                     &:nth-child(1) { | 
|                         margin-top: 0; | 
|                     } | 
|                     /*&:nth-child(2) {*/ | 
|                     /*    margin-top: 0;*/ | 
|                     /*}*/ | 
|                     .page_info_list_item_label { | 
|                         flex-shrink: 0; | 
|                         font-size: 26px; | 
|                         font-weight: 400; | 
|                         color: #666666; | 
|                     } | 
|                     .page_info_list_item_nr { | 
|                         flex: 1; | 
|                         font-size: 26px; | 
|                         font-weight: 400; | 
|                         color: #222222; | 
|                     } | 
|                 } | 
|             } | 
|             .page_info_bz { | 
|                 padding: 24px; | 
|                 background: #F7F7F7; | 
|                 margin-top: 30px; | 
|                 .page_info_bz_title { | 
|                     font-size: 26px; | 
|                     font-weight: 500; | 
|                     color: #222222; | 
|                     margin-bottom: 20px; | 
|                 } | 
|                 .page_info_bz_nr { | 
|                     font-size: 24px; | 
|                     font-weight: 400; | 
|                     color: #333333; | 
|                 } | 
|             } | 
|         } | 
|         .switch { | 
|             padding: 0 30px; | 
|             button { | 
|                 width: 100%; | 
|                 border: none; | 
|                 height: 76px; | 
|                 background: #ffffff; | 
|                 border-radius: 36px; | 
|                 font-size: 26px; | 
|                 font-weight: 400; | 
|                 color: black; | 
|                 display: flex; | 
|                 align-items: center; | 
|                 justify-content: center; | 
|                 img { | 
|                     width: 28px; | 
|                     height: 28px; | 
|                     margin-right: 14px; | 
|                 } | 
|             } | 
|         } | 
|         .page_h { | 
|             height: 20px; | 
|         } | 
|         .page_sfq { | 
|             font-size: 32px; | 
|             font-weight: 500; | 
|             color: #222222; | 
|             display: flex; | 
|             align-items: center; | 
|             img { | 
|                 width: 36px; | 
|                 height: 36px; | 
|                 margin-right: 16px; | 
|             } | 
|         } | 
|         .page_dck { | 
|             .page_dck_title { | 
|                 display: flex; | 
|                 align-items: center; | 
|                 .page_dck_title_x { | 
|                     width: 8px; | 
|                     height: 30px; | 
|                     background: #4275FC; | 
|                     border-radius: 2px; | 
|                     margin-right: 16px; | 
|                 } | 
|                 span { | 
|                     font-size: 32px; | 
|                     font-weight: 500; | 
|                     color: #222222; | 
|                 } | 
|             } | 
|         } | 
|         .page_content { | 
|             margin-top: 28px; | 
|             .page_content_title { | 
|                 display: flex; | 
|                 flex-direction: column; | 
|                 .page_content_title_top { | 
|                     display: flex; | 
|                     align-items: center; | 
|                     justify-content: space-between; | 
|                     span { | 
|                         &:nth-child(1) { | 
|                             font-size: 30px; | 
|                             font-weight: 500; | 
|                             color: #222222; | 
|                         } | 
|                         &:nth-child(2) { | 
|                             flex-shrink: 0; | 
|                             font-size: 24px; | 
|                             font-weight: 400; | 
|                             color: #333333; | 
|                             span { | 
|                                 font-size: 24px; | 
|                                 color: $nav-color; | 
|                             } | 
|                         } | 
|                     } | 
|                 } | 
|                 .page_content_title_bottom { | 
|                     .green { | 
|                         color: $nav-stateColor7 !important; | 
|                     } | 
|                     .warning { | 
|                         color: $nav-stateColor5 !important; | 
|                     } | 
|                     .error { | 
|                         color: $nav-stateColor4 !important; | 
|                     } | 
|                     span { | 
|                         font-size: 24px; | 
|                         font-weight: 400; | 
|                         color: #666666; | 
|                     } | 
|                 } | 
|             } | 
|             .page_content_list { | 
|                 width: 100%; | 
|                 display: flex; | 
|                 align-items: center; | 
|                 flex-wrap: wrap; | 
|                 padding-bottom: 30px; | 
|                 margin-top: 28px; | 
|                 border-bottom: 1px solid #E5E5E5; | 
|                 &:first-child { | 
|                     margin: 0; | 
|                 } | 
|                 &:last-child { | 
|                     border: none; | 
|                 } | 
|                 .page_content_list_items { | 
|                     width: 30%; | 
|                     display: flex; | 
|                     margin-top: 24px; | 
|                     .page_content_list_item_label { | 
|                         font-size: 26px; | 
|                         font-weight: 400; | 
|                         color: #666666; | 
|                         flex-shrink: 0; | 
|                     } | 
|                     .page_content_list_item_nr { | 
|                         font-size: 26px; | 
|                         font-weight: 400; | 
|                         color: #222222; | 
|                     } | 
|                 } | 
|                 .page_content_list_item { | 
|                     width: 70%; | 
|                     display: flex; | 
|                     .page_content_list_item_label { | 
|                         font-size: 26px; | 
|                         font-weight: 400; | 
|                         color: #666666; | 
|                         flex-shrink: 0; | 
|                     } | 
|                     .page_content_list_item_nr { | 
|                         font-size: 26px; | 
|                         font-weight: 400; | 
|                         color: #222222; | 
|                     } | 
|                 } | 
|             } | 
|         } | 
|         .page_yxwl { | 
|             padding: 30px; | 
|             background: #ffffff; | 
|             .page_yxwl_title { | 
|                 display: flex; | 
|                 align-items: center; | 
|                 justify-content: space-between; | 
|                 .page_yxwl_title_x { | 
|                     width: 8px; | 
|                     height: 30px; | 
|                     background: #4275FC; | 
|                     border-radius: 2px; | 
|                     margin-right: 16px; | 
|                 } | 
|                 span { | 
|                     font-size: 32px; | 
|                     font-weight: 500; | 
|                     color: #222222; | 
|                 } | 
|                 .left { | 
|                     display: flex; | 
|                     align-items: center; | 
|                     .page_yxwl_title_x { | 
|                         width: 8px; | 
|                         height: 30px; | 
|                         background: #4275FC; | 
|                         border-radius: 2px; | 
|                         margin-right: 16px; | 
|                     } | 
|                     span { | 
|                         font-size: 32px; | 
|                         font-weight: 500; | 
|                         color: #222222; | 
|                     } | 
|                 } | 
|                 .right { | 
|                     display: flex; | 
|                     align-items: center; | 
|                     img { | 
|                         width: 28px; | 
|                         height: 28px; | 
|                         margin-right: 14px; | 
|                     } | 
|                     span { | 
|                         font-size: 26px; | 
|                         font-weight: 400; | 
|                         color: #222222; | 
|                     } | 
|                 } | 
|             } | 
|             .page_yxwl_kong { | 
|                 padding: 50px 0; | 
|                 display: flex; | 
|                 align-items: center; | 
|                 justify-content: center; | 
|                 span { | 
|                     font-size: 25px; | 
|                     color: black; | 
|                 } | 
|             } | 
|             .page_yxwl_list { | 
|                 display: flex; | 
|                 flex-direction: column; | 
|                 padding-bottom: 30px; | 
|                 border-bottom: 1px solid #ececec; | 
|                 &:last-child { | 
|                     margin-bottom: 0; | 
|                     border: none; | 
|                 } | 
|                 .page_yxwl_list_item { | 
|                     margin-top: 28px; | 
|                     .page_yxwl_list_item_sx { | 
|                         margin-top: 10px; | 
|                         span { | 
|                             color: black; | 
|                         } | 
|                     } | 
|                     .page_yxwl_list_item_top { | 
|                         display: flex; | 
|                         align-items: center; | 
|                         justify-content: space-between; | 
|                         .page_yxwl_list_item_top_left { | 
|                             font-size: 30px; | 
|                             font-weight: 500; | 
|                             color: #222222; | 
|                         } | 
|                         .page_yxwl_list_item_top_right { | 
|                             span { | 
|                                 font-size: 24px; | 
|                                 font-weight: 400; | 
|                                 color: #333333; | 
|                                 span { | 
|                                     font-size: 24px; | 
|                                     font-weight: 400; | 
|                                     color: $nav-color; | 
|                                 } | 
|                             } | 
|                         } | 
|                     } | 
|                     .page_yxwl_list_item_num { | 
|                         display: flex; | 
|                         position: relative; | 
|                         margin-top: 36px; | 
|                         &:first-child { | 
|                             margin-top: 0; | 
|                         } | 
|                         .dele { | 
|                             position: absolute; | 
|                             right: -30px; | 
|                             width: 48px; | 
|                             height: 48px; | 
|                             img { | 
|                                 width: 100%; | 
|                                 height: 100%; | 
|                             } | 
|                         } | 
|                         .item { | 
|                             width: 50%; | 
|                             display: flex; | 
|                             align-items: center; | 
|                             .label { | 
|                                 flex-shrink: 0; | 
|                                 font-size: 26px; | 
|                                 font-weight: 400; | 
|                                 color: #666666; | 
|                                 flex-shrink: 0; | 
|                             } | 
|                             .nr { | 
|                                 flex: 1; | 
|                                 display: flex; | 
|                                 align-items: center; | 
|                                 input { | 
|                                     width: 130px; | 
|                                     height: 40px; | 
|                                     border-radius: 8px; | 
|                                     border: 1PX solid #E5E5E5; | 
|                                     margin-right: 10px; | 
|                                 } | 
|                                 span { | 
|                                     font-size: 26px; | 
|                                     font-weight: 400; | 
|                                     color: #222222; | 
|                                 } | 
|                             } | 
|                         } | 
|                     } | 
|                 } | 
|             } | 
|         } | 
|         .page_zw { | 
|             height: 160px; | 
|         } | 
|         .page_footer { | 
|             position: fixed; | 
|             bottom: 0; | 
|             left: 0; | 
|             width: 100%; | 
|             padding: 0 30px 68px 30px; | 
|             box-sizing: border-box; | 
|             display: flex; | 
|             align-items: center; | 
|             justify-content: space-between; | 
|             .page_footer_smck { | 
|                 width: 334px; | 
|                 height: 88px; | 
|                 border: none; | 
|                 background: #FFFFFF; | 
|                 box-shadow: 0 0 12px 0 rgba(0, 0, 0, 0.08); | 
|                 border-radius: 8px; | 
|                 font-size: 32px; | 
|                 font-weight: 500; | 
|                 color: $nav-color; | 
|                 display: flex; | 
|                 align-items: center; | 
|                 justify-content: center; | 
|                 img { | 
|                     width: 30px; | 
|                     height: 30px; | 
|                     margin-right: 10px; | 
|                 } | 
|             } | 
|             .page_footer_qrck { | 
|                 // width: 334px; | 
|                 flex: 1; | 
|                 height: 88px; | 
|                 border: none; | 
|                 background: $nav-color; | 
|                 box-shadow: 0 0 12px 0 rgba(0, 0, 0, 0.08); | 
|                 border-radius: 8px; | 
|                 font-size: 32px; | 
|                 font-weight: 500; | 
|                 color: #FFFFFF; | 
|                 display: flex; | 
|                 align-items: center; | 
|                 justify-content: center; | 
|             } | 
|         } | 
|     } | 
| </style> |