|  |  | 
 |  |  |                         <span>新增投料</span> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <template v-if="wuList.length > 0"> | 
 |  |  |                 <template v-if="wuList.length > 0 && !(hasBom == 1 && bomType == 1)"> | 
 |  |  |                     <van-swipe-cell v-for="(item, index) in wuList" :key="index"> | 
 |  |  |                         <div class="bg_list_item_h"> | 
 |  |  |                             <div class="bg_list_item_num"> | 
 |  |  | 
 |  |  |                         </template> | 
 |  |  |                     </van-swipe-cell> | 
 |  |  |                 </template> | 
 |  |  |                 <template v-else> | 
 |  |  |                 <template v-else-if="wuList.length == 0 && !(hasBom == 1 && bomType == 1)"> | 
 |  |  |                     <div class="kong"> | 
 |  |  |                         <span>暂无数据</span> | 
 |  |  |                     </div> | 
 |  |  | 
 |  |  |                             <span><b>*</b>良品数</span> | 
 |  |  |                             <div class="bg_list_item_num_item_sr"> | 
 |  |  |                                 <input type="number" v-model="from.qualified" @input="changeNum(1)" placeholder="请输入" /> | 
 |  |  |                                 <span>块</span> | 
 |  |  |                                 <span v-if="from.processPlan">{{from.processPlan.unitName}}</span> | 
 |  |  |                             </div> | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 |  |  | 
 |  |  |                             <span>不良数</span> | 
 |  |  |                             <div class="bg_list_item_num_item_sr"> | 
 |  |  |                                 <input type="number" v-model="from.undesirable" @input="changeNum(2)" placeholder="请输入" /> | 
 |  |  |                                 <span>块</span> | 
 |  |  |                                 <span v-if="from.processPlan">{{from.processPlan.unitName}}</span> | 
 |  |  |                             </div> | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 |  |  |                     <div class="bg_list_item_num" v-if="from.undesirable > 0"> | 
 |  |  |                         <div class="bg_list_item_num_item" @click="show = true"> | 
 |  |  |                         <div class="bg_list_item_num_item" @click="openBL"> | 
 |  |  |                             <span><b>*</b>不良项</span> | 
 |  |  |                             <div class="bg_list_item_num_item_sr"> | 
 |  |  |                                 <span class="wulll" :style="{color: from.defectiveName ? '#305ED5' : ''}">{{from.defectiveName ? from.defectiveName : '设置'}}</span> | 
 |  |  | 
 |  |  |             </div> | 
 |  |  |             <div class="bg_plan" @click="TimeShow = true"> | 
 |  |  |                 <div class="bg_plan_label"> | 
 |  |  |                     <span><b>*</b>报工时长</span> | 
 |  |  |                     <span>报工时长</span> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="bg_plan_label_val"> | 
 |  |  |                     <span :style="{color: from.durationName ? '#333' : ''}">{{from.durationName ? from.durationName : '请选择'}}</span> | 
 |  |  |                     <img src="@/assets/icon/ic_ar@2x.png" alt="" /> | 
 |  |  |                 </div> | 
 |  |  |             </div> | 
 |  |  |             <div class="bg_list_item" v-if="infoBox"> | 
 |  |  |             <div class="bg_list_item" v-if="arrType && arrType.length > 0"> | 
 |  |  |                 <div class="bg_list_item_top"> | 
 |  |  |                     <div class="bg_list_item_top_left"> | 
 |  |  |                         <div class="bg_list_item_top_left_x"></div> | 
 |  |  | 
 |  |  |                         <div class="bg_list_item_num_item"> | 
 |  |  |                             <span>计件方式</span> | 
 |  |  |                             <div class="bg_list_item_num_item_list"> | 
 |  |  |                                 <div class="bg_list_item_num_item_list_item active" v-if="infoBox.type == 0">计件</div> | 
 |  |  |                                 <div class="bg_list_item_num_item_list_item active" v-if="infoBox.type == 1">计时</div> | 
 |  |  |                                 <div :class="item.active ? 'bg_list_item_num_item_list_item active' : 'bg_list_item_num_item_list_item'" v-for="(item, index) in arrType" :key="index" @click="clickPerformanceType(index)">{{ item.name }}</div> | 
 |  |  |                                 <!-- <div class="bg_list_item_num_item_list_item active" v-if="infoBox.type == 0">计件</div> | 
 |  |  |                                 <div class="bg_list_item_num_item_list_item active" v-if="infoBox.type == 1">计时</div> --> | 
 |  |  |                             </div> | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 |  |  | 
 |  |  |                         <div class="bg_list_item_num_item"> | 
 |  |  |                             <span>工资单价</span> | 
 |  |  |                             <div class="bg_list_item_num_item_sr"> | 
 |  |  |                                 <span class="color1">{{infoBox.salary}}元/{{infoBox.type == 0 ? '件' : '时'}}</span> | 
 |  |  |                                 <span class="color1">{{(arrType[from.index].salary / 10 / 10).toFixed(2)}}元/{{arrType[from.index].type == 0 ? '件' : '时'}}</span> | 
 |  |  |                                 <!-- <span class="color1">{{(infoBox.salary / 10 / 10).toFixed(2)}}元/{{infoBox.type == 0 ? '件' : '时'}}</span> --> | 
 |  |  |                             </div> | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 |  |  | 
 |  |  |         <!--  报工按钮  --> | 
 |  |  |         <div class="bh_zw"></div> | 
 |  |  |         <div class="bg_footer"> | 
 |  |  |             <div class="bg_footer_submit1">继续报工</div> | 
 |  |  |             <div class="bg_footer_submit1" @click="continueSubmit">继续报工</div> | 
 |  |  |             <div class="bg_footer_submit" @click="submit">提交</div> | 
 |  |  |         </div> | 
 |  |  |         <!-- 选择不良项 --> | 
 |  |  |         <van-popup v-model:show="show" round position="bottom" :style="{ height: '53%' }"> | 
 |  |  |         <van-popup v-model:show="show" round position="bottom"> | 
 |  |  |             <div class="bl"> | 
 |  |  |                 <div class="bl_head"> | 
 |  |  |                     <img src="@/assets/icon/ic_close@2x.png" style="opacity: 0;" alt="" /> | 
 |  |  | 
 |  |  | <script setup lang="ts"> | 
 |  |  |     import { onMounted, ref, reactive, getCurrentInstance, computed } from 'vue' | 
 |  |  |     import { useRouter } from 'vue-router' | 
 |  |  |     import { getDeviceByCondition, getFindAll, queryOne, autoWorkReport, getIdPlansExt, categoryExtList } from '@/apis/PlanningAPI' | 
 |  |  |     import { useStore } from 'vuex' | 
 |  |  |     import { getDeviceByCondition, getFindAll, queryOne, queryList, autoWorkReport, getIdPlansExt, categoryExtList } from '@/apis/PlanningAPI' | 
 |  |  |     import MaterialY from '@/components/newCom/MaterialY.vue' | 
 |  |  |     import user from '@/components/newCom/user.vue' | 
 |  |  |     import { Toast } from 'vant' | 
 |  |  |  | 
 |  |  |     const {$Bus} = getCurrentInstance().appContext.config.globalProperties  | 
 |  |  |     const router = useRouter() | 
 |  |  |     const store = useStore() | 
 |  |  |     let show = ref(false) | 
 |  |  |     let show1 = ref(false) | 
 |  |  |     let TimeShow = ref(false) | 
 |  |  | 
 |  |  |         processPlan: null, | 
 |  |  |         deviceId: '', | 
 |  |  |         deviceName: '', | 
 |  |  |         userId: '', | 
 |  |  |         userName: '', | 
 |  |  |         userId: store.state.userInfo.id, | 
 |  |  |         userName: store.state.userInfo.companyUser.name, | 
 |  |  |         qualified: '',  // 良品数 | 
 |  |  |         undesirable: '', // 不良数 | 
 |  |  |         duration: '', | 
 |  |  |         durationName: '', | 
 |  |  |         durationName: '0小时0分钟', | 
 |  |  |         time: '', | 
 |  |  |         defective: [], | 
 |  |  |         defectiveName: '' | 
 |  |  |         defectiveName: '', | 
 |  |  |         type: '',    // 绩效类型 | 
 |  |  |         index: 0 | 
 |  |  |     }) | 
 |  |  |  | 
 |  |  |     // { name: '计件', active: false, id: 0 }, { name: '计时', active: false, id: 1 }  | 
 |  |  |     let arrType: any = ref([]) | 
 |  |  |  | 
 |  |  |     let infoBox: any = ref(null)     // 工资绩效 | 
 |  |  |  | 
 |  |  | 
 |  |  |         text: 'name' | 
 |  |  |     }; | 
 |  |  |     let userShow = ref(false) | 
 |  |  |     let userList = ref([]) | 
 |  |  |     let wuList: any = ref([]) | 
 |  |  |     let wuList = ref<Array<any>>([]) | 
 |  |  |  | 
 |  |  |     const openBL = () => { | 
 |  |  |         cateList.value.forEach((item: any) => { | 
 |  |  |             if (!item.active) { | 
 |  |  |                 item.num = '' | 
 |  |  |             } | 
 |  |  |             if (item.active && item.num <= 0) { | 
 |  |  |                 item.active = false | 
 |  |  |             } | 
 |  |  |         }) | 
 |  |  |         show.value = true | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 切换绩效类型 | 
 |  |  |     const clickPerformanceType = (i: number) => { | 
 |  |  |         from.index = i | 
 |  |  |         arrType.value.forEach((item: any, index: number) => { | 
 |  |  |             if (i === index) { | 
 |  |  |                 from.type = item.id | 
 |  |  |             } | 
 |  |  |             item.active = index === i | 
 |  |  |         }) | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 产出数量验证 | 
 |  |  |     const changeNum = (type: number) => { | 
 |  |  | 
 |  |  |         let arr: any = [] | 
 |  |  |         let total: any = 0 | 
 |  |  |         let name: any = '' | 
 |  |  |         cateList.value.forEach((item: any, index: number) => { | 
 |  |  |             if (item.active) { | 
 |  |  |                 if (item.num <= 0) { | 
 |  |  |         for (let i = 0; i < cateList.value.length; i++) { | 
 |  |  |             if (cateList.value[i].active) { | 
 |  |  |                 if (cateList.value[i].num <= 0) { | 
 |  |  |                     return Toast('不良数量必须大于0') | 
 |  |  |                 } | 
 |  |  |                 total = total += item.num | 
 |  |  |                 arr.push(item) | 
 |  |  |                 name += item.name + item.num + ';' | 
 |  |  |                 total = total += cateList.value[i].num | 
 |  |  |                 arr.push(cateList.value[i]) | 
 |  |  |                 name += cateList.value[i].name + cateList.value[i].num + ';' | 
 |  |  |             } | 
 |  |  |         }) | 
 |  |  |         } | 
 |  |  |         // cateList.value.forEach((item: any, index: number) => { | 
 |  |  |         //     if (item.active) { | 
 |  |  |         //         if (item.num <= 0) { | 
 |  |  |         //             return Toast('不良数量必须大于0') | 
 |  |  |         //         } | 
 |  |  |         //         total = total += item.num | 
 |  |  |         //         arr.push(item) | 
 |  |  |         //         name += item.name + item.num + ';' | 
 |  |  |         //     } | 
 |  |  |         // }) | 
 |  |  |         if (total !== from.undesirable) return Toast('不良数必须等于产出不良数') | 
 |  |  |         from.defective = arr | 
 |  |  |         from.defectiveName = name | 
 |  |  |         show.value = false | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     const continueSubmit = () => { | 
 |  |  |         if (!from.processPlan) return Toast('计划不能为空') | 
 |  |  |         if (!from.deviceId) return Toast('设备不能为空') | 
 |  |  |         if (!from.userId) return Toast('生产人员不能为空') | 
 |  |  |         if (hasBom.value == 1 && bomType.value == 1) { | 
 |  |  |             console.log('不需要投料') | 
 |  |  |         } else { | 
 |  |  |             if (!wuList.value.length === 0) return Toast('投料不能为空') | 
 |  |  |         } | 
 |  |  |         if (!from.qualified && !from.undesirable) { | 
 |  |  |             return Toast('良品数与不良数不能同时为空') | 
 |  |  |         } | 
 |  |  |         // if (!from.qualified) return Toast('良品数不能为空') | 
 |  |  |         // 有不良数 | 
 |  |  |         if (from.undesirable > 0) { | 
 |  |  |             if (from.defective.length === 0) return Toast('不良项不能为空') | 
 |  |  |         } | 
 |  |  |         // if (!from.duration) return Toast('报工时长不能为空') | 
 |  |  |         let type = '' | 
 |  |  |         arrType.value.forEach((item: any) => { | 
 |  |  |             if (item.active) { | 
 |  |  |                 type = item.id | 
 |  |  |             } | 
 |  |  |         }) | 
 |  |  |         autoWorkReport({ | 
 |  |  |             createWorkorderRecordDTO: { | 
 |  |  |                 type, | 
 |  |  |                 duration: from.duration, | 
 |  |  |                 qualifiedNum: from.qualified ? from.qualified : 0, | 
 |  |  |                 unQualifiedNum: from.undesirable ? from.undesirable : 0 | 
 |  |  |             }, | 
 |  |  |             plansId: from.processPlan.id, | 
 |  |  |             proGroupId: deviceId.value, | 
 |  |  |             proUserList: [from.userId], | 
 |  |  |             recordList: wuList.value.map((item: any) => { | 
 |  |  |                 return { | 
 |  |  |                     wstockId: item.id, | 
 |  |  |                     num: item.num | 
 |  |  |                 } | 
 |  |  |             }), | 
 |  |  |             createUnqualifiedDTOList: from.defective.map((item: any) => { | 
 |  |  |                 return { | 
 |  |  |                     categoryId: item.id, | 
 |  |  |                     unQualifiedNum: item.num | 
 |  |  |                 } | 
 |  |  |             }) | 
 |  |  |         }).then(res => { | 
 |  |  |             if (res.code === 200) { | 
 |  |  |                 Toast.success({message: '报工成功!'}) | 
 |  |  |                 from.processPlan = null | 
 |  |  |                 from.deviceId = '' | 
 |  |  |                 from.deviceName = '' | 
 |  |  |                 from.userId = '' | 
 |  |  |                 from.userName = '' | 
 |  |  |                 from.qualified = '' | 
 |  |  |                 from.undesirable = '' | 
 |  |  |                 from.duration = '' | 
 |  |  |                 from.durationName = '0小时0分钟' | 
 |  |  |                 from.time = '' | 
 |  |  |                 from.defective = [] | 
 |  |  |                 from.defectiveName = '' | 
 |  |  |                 wuList.value = [] | 
 |  |  |                 deviceId.value = '' | 
 |  |  |                 plansId.value = '' | 
 |  |  |                 ids.value = '' | 
 |  |  |                 total.value = '' | 
 |  |  |             } | 
 |  |  |         }) | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     const submit = () => { | 
 |  |  | 
 |  |  |         } else { | 
 |  |  |             if (!wuList.value.length === 0) return Toast('投料不能为空') | 
 |  |  |         } | 
 |  |  |         if (!from.qualified) return Toast('良品数不能为空') | 
 |  |  |         if (!from.qualified && !from.undesirable) { | 
 |  |  |             return Toast('良品数与不良数不能同时为空') | 
 |  |  |         } | 
 |  |  |         // if (!from.qualified) return Toast('良品数不能为空') | 
 |  |  |         // 有不良数 | 
 |  |  |         if (from.undesirable > 0) { | 
 |  |  |             if (from.defective.length === 0) return Toast('不良项不能为空') | 
 |  |  |         } | 
 |  |  |         if (!from.duration) return Toast('报工时长不能为空') | 
 |  |  |         // if (!from.duration) return Toast('报工时长不能为空') | 
 |  |  |         let type = '' | 
 |  |  |         arrType.value.forEach((item: any) => { | 
 |  |  |             if (item.active) { | 
 |  |  |                 type = item.id | 
 |  |  |             } | 
 |  |  |         }) | 
 |  |  |         autoWorkReport({ | 
 |  |  |             createWorkorderRecordDTO: { | 
 |  |  |                 type, | 
 |  |  |                 duration: from.duration, | 
 |  |  |                 qualifiedNum: from.qualified, | 
 |  |  |                 unQualifiedNum: from.undesirable | 
 |  |  |                 qualifiedNum: from.qualified ? from.qualified : 0, | 
 |  |  |                 unQualifiedNum: from.undesirable ? from.undesirable : 0 | 
 |  |  |             }, | 
 |  |  |             plansId: from.processPlan.id, | 
 |  |  |             proGroupId: deviceId.value, | 
 |  |  | 
 |  |  |  | 
 |  |  |     // 预计工资 | 
 |  |  |     const expectedSalary = computed(() => { | 
 |  |  |         if (!infoBox.value) return 0 | 
 |  |  |         // 按件计算 | 
 |  |  |         if (infoBox.value.type == 0) { | 
 |  |  |             console.log('计件') | 
 |  |  |         if (arrType.value.length === 0) return 0; | 
 |  |  |         if (arrType.value[from.index].type == 0) { | 
 |  |  |             if (!from.qualified) return 0 | 
 |  |  |             if (infoBox.value.unqualified == 1) {   // 是否计入不良品 | 
 |  |  |             if (arrType.value[from.index].unqualified == 1) {   // 是否计入不良品 | 
 |  |  |                 let total = Number(from.qualified) + Number(from.undesirable) | 
 |  |  |                 return total * infoBox.value.salary | 
 |  |  |                 return (total * (arrType.value[from.index].salary / 10 / 10)).toFixed(2) | 
 |  |  |             } else { | 
 |  |  |                 return Number(from.qualified) * infoBox.value.salary | 
 |  |  |                 return (Number(from.qualified) * (arrType.value[from.index].salary / 10 / 10)).toFixed(2) | 
 |  |  |             } | 
 |  |  |         } else { | 
 |  |  |             console.log('计时') | 
 |  |  |             if (!from.duration) return 0; | 
 |  |  |             let h = (from.duration / 60 / 60).toFixed(2) | 
 |  |  |             return Number(h) * infoBox.value.salary | 
 |  |  |             return (Number(h) * (arrType.value[from.index].salary / 10 / 10)).toFixed(2) | 
 |  |  |         } | 
 |  |  |         // if (!infoBox.value) return 0; | 
 |  |  |         // 按件计算 | 
 |  |  |         // if (infoBox.value.type == 0) { | 
 |  |  |         //     if (!from.qualified) return 0 | 
 |  |  |         //     if (infoBox.value.unqualified == 1) {   // 是否计入不良品 | 
 |  |  |         //         let total = Number(from.qualified) + Number(from.undesirable) | 
 |  |  |         //         return (total * (infoBox.value.salary / 10 / 10)).toFixed(2) | 
 |  |  |         //     } else { | 
 |  |  |         //         return (Number(from.qualified) * (infoBox.value.salary / 10 / 10)).toFixed(2) | 
 |  |  |         //     } | 
 |  |  |         // } else { | 
 |  |  |         //     if (!from.duration) return 0; | 
 |  |  |         //     let h = (from.duration / 60 / 60).toFixed(2) | 
 |  |  |         //     return (Number(h) * (infoBox.value.salary / 10 / 10)).toFixed(2) | 
 |  |  |         // } | 
 |  |  |     }) | 
 |  |  |  | 
 |  |  |     // 达标率 | 
 |  |  |     const complianceRate = computed(() => { | 
 |  |  |         if (!infoBox.value) return 0; | 
 |  |  |         if (!from.qualified) return 0; | 
 |  |  |         if (arrType.value.length === 0) return 0; | 
 |  |  |         if (!from.qualified && !from.undesirable) return 0; | 
 |  |  |         if (!from.duration) return 0; | 
 |  |  |         if (!arrType.value[from.index].num) return 0; | 
 |  |  |         // 按件计算 | 
 |  |  |         // if (infoBox.value.type == 0) { | 
 |  |  |             // if (infoBox.value.unqualified == 1) {   // 是否计入不良品 | 
 |  |  |                 let a = ((Number(from.qualified) + Number(from.undesirable)) / (from.duration / 60 / 60)).toFixed(2) | 
 |  |  |                 let b = (infoBox.value.num / (infoBox.value.times / 60 / 60)).toFixed(2) | 
 |  |  |             if (arrType.value[from.index].unqualified == 1) {   // 是否计入不良品 | 
 |  |  |                 let a = ((Number(from.qualified) + Number(from.undesirable)) / (from.duration / 3600)).toFixed(2) | 
 |  |  |                 let b = (arrType.value[from.index].num / (arrType.value[from.index].times / 3600)).toFixed(2) | 
 |  |  |                 console.log(a) | 
 |  |  |                 console.log(b) | 
 |  |  |                 return (Number(a) / Number(b)).toFixed(2) | 
 |  |  |                 return ((Number(a) / Number(b)) * 100).toFixed(2) | 
 |  |  |                 // let total = (Number(from.qualified) + Number(from.undesirable)) / ((from.duration * 60 * 60) * infoBox.value.num / ) | 
 |  |  |                 // return total * infoBox.value.salary; | 
 |  |  |             // } else { | 
 |  |  |             //     return Number(from.qualified) * infoBox.value.salary; | 
 |  |  |             // } | 
 |  |  |             } else { | 
 |  |  |                 let a = (from.qualified / (from.duration / 3600)).toFixed(2) | 
 |  |  |                 let b = (arrType.value[from.index].num / (arrType.value[from.index].times / 3600)).toFixed(2) | 
 |  |  |                 console.log(a) | 
 |  |  |                 console.log(b) | 
 |  |  |                 return ((Number(a) / Number(b)) * 100).toFixed(2) | 
 |  |  |                 // return Number(from.qualified) * infoBox.value.salary; | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |         // if (!infoBox.value) return 0; | 
 |  |  |         // if (!from.qualified && !from.undesirable) return 0; | 
 |  |  |         // if (!from.duration) return 0; | 
 |  |  |         // if (!infoBox.value.num) return 0; | 
 |  |  |         // // 按件计算 | 
 |  |  |         // // if (infoBox.value.type == 0) { | 
 |  |  |         //     if (infoBox.value.unqualified == 1) {   // 是否计入不良品 | 
 |  |  |         //         let a = ((Number(from.qualified) + Number(from.undesirable)) / (from.duration / 3600)).toFixed(2) | 
 |  |  |         //         let b = (infoBox.value.num / (infoBox.value.times / 3600)).toFixed(2) | 
 |  |  |         //         console.log(a) | 
 |  |  |         //         console.log(b) | 
 |  |  |         //         return ((Number(a) / Number(b)) * 100).toFixed(2) | 
 |  |  |         //         // let total = (Number(from.qualified) + Number(from.undesirable)) / ((from.duration * 60 * 60) * infoBox.value.num / ) | 
 |  |  |         //         // return total * infoBox.value.salary; | 
 |  |  |         //     } else { | 
 |  |  |         //         let a = (from.qualified / (from.duration / 3600)).toFixed(2) | 
 |  |  |         //         let b = (infoBox.value.num / (infoBox.value.times / 3600)).toFixed(2) | 
 |  |  |         //         console.log(a) | 
 |  |  |         //         console.log(b) | 
 |  |  |         //         return ((Number(a) / Number(b)) * 100).toFixed(2) | 
 |  |  |         //         // return Number(from.qualified) * infoBox.value.salary; | 
 |  |  |         //     } | 
 |  |  |         // } else { | 
 |  |  |         //     console.log('按时长') | 
 |  |  |         // } | 
 |  |  | 
 |  |  |             from.deviceId = '' | 
 |  |  |             from.deviceName = '' | 
 |  |  |             deviceId.value = '' | 
 |  |  |             from.userId = '' | 
 |  |  |             from.userName = '' | 
 |  |  |             // from.userId = '' | 
 |  |  |             // from.userName = '' | 
 |  |  |             total.value = res.num - res.workorderDistributNum | 
 |  |  |             // 获取设备 | 
 |  |  |             getDeviceByCondition({ procedureId: res.procedureId }) | 
 |  |  |                 .then(res1 => { | 
 |  |  |                     if (res1.code === 200) { | 
 |  |  |                         if (res1.data && res1.data.length > 0) | 
 |  |  |                         deviceId.value = res1.data[0].id | 
 |  |  |                         from.deviceId = res1.data[0].id | 
 |  |  |                         from.deviceName = res1.data[0].name | 
 |  |  | 
 |  |  |             // 获取类型 | 
 |  |  |             getIdPlansExt(res.id) | 
 |  |  |                 .then(res2 => { | 
 |  |  |                     if (res.code === 200) { | 
 |  |  |                     if (res2.code === 200) { | 
 |  |  |                         bomType.value = res2.data.bomType | 
 |  |  |                         hasBom.value = res2.data.hasBom | 
 |  |  |                     } | 
 |  |  |                 }) | 
 |  |  |             // 获取工资绩效数据 | 
 |  |  |             queryOne({ | 
 |  |  |             queryList({ | 
 |  |  |                 deleted: 0, | 
 |  |  |                 departId: res.factoryId, | 
 |  |  |                 materialId: res.materialId, | 
 |  |  |                 procedureId: res.procedureId | 
 |  |  |             }).then(result => { | 
 |  |  |                 if (result.code === 200) { | 
 |  |  |                     infoBox.value = result.data | 
 |  |  |                     if (result.data && result.data.length > 0) { | 
 |  |  |                         result.data.forEach((item: any, index: number) => { | 
 |  |  |                             item.name = item.type == 0 ? '计件' : '计时' | 
 |  |  |                             item.id = item.type | 
 |  |  |                             item.active = index == 0 | 
 |  |  |                         }) | 
 |  |  |                         arrType.value = result.data | 
 |  |  |                     } else { | 
 |  |  |                         arrType.value = [] | 
 |  |  |                     } | 
 |  |  |                     // infoBox.value = result.data | 
 |  |  |                 } | 
 |  |  |             }) | 
 |  |  |         }) | 
 |  |  | 
 |  |  |                                     font-size: 28px; | 
 |  |  |                                     font-weight: 400; | 
 |  |  |                                     color: #333333; | 
 |  |  |                                     padding: 0 30px | 
 |  |  |                                     padding: 0 30px; | 
 |  |  |                                 } | 
 |  |  |                                 .wulll { | 
 |  |  |                                     width: 400px; | 
 |  |  | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         .bl { | 
 |  |  |             width: 100%; | 
 |  |  |             height: 800px; | 
 |  |  |             padding: 30px; | 
 |  |  |             box-sizing: border-box; | 
 |  |  |             display: flex; | 
 |  |  |             flex-direction: column; | 
 |  |  |             .bl_head { | 
 |  |  |                 width: 100%; | 
 |  |  |                 height: 50px; | 
 |  |  |                 display: flex; | 
 |  |  |                 align-items: center; | 
 |  |  |                 justify-content: space-between; | 
 |  |  | 
 |  |  |             } | 
 |  |  |             .bl_list { | 
 |  |  |                 width: 100%; | 
 |  |  |                 height: 550px; | 
 |  |  |                 height: calc(100% - 168px); | 
 |  |  |                 overflow-y: scroll; | 
 |  |  |                 margin-top: 30px; | 
 |  |  |                 .bl_list_item { |