|  |  | 
 |  |  |                 </div> | 
 |  |  |                 <template v-if="feedingData && feedingData.length > 0"> | 
 |  |  |                     <van-swipe-cell v-for="(item, index) in feedingData" :key="index"> | 
 |  |  |                         <div class="bg_list_item_num"> | 
 |  |  |                             <div class="bg_list_item_num_item"> | 
 |  |  |                                 <!-- <span>{{item.code}}</span> --> | 
 |  |  |                                 <div class="bg_list_item_num_item_wl"> | 
 |  |  |                                     <span> {{ item.materialName }}{{ item.procedureName ? ` | ${item.procedureName}` : '' }}</span> | 
 |  |  |                                     <div class="bg_list_item_num_item_wl_lx"> | 
 |  |  |                                         <span class="green" v-if="item.qualityType == 0">合格 / </span> | 
 |  |  |                                         <span class="yellow" v-if="item.qualityType == 1">不良 / </span> | 
 |  |  |                                         <span class="red" v-if="item.qualityType == 2">报废 / </span> | 
 |  |  |                                         <span>{{ item.locationName }}</span> | 
 |  |  |                                         <span>{{ item.batch ? ` / ${item.batch}` : '' }}</span> | 
 |  |  |                         <div class="bg_list_item_h"> | 
 |  |  |                             <div class="bg_list_item_num"> | 
 |  |  |                                 <div class="bg_list_item_num_item"> | 
 |  |  |                                     <!-- <span>{{item.code}}</span> --> | 
 |  |  |                                     <div class="bg_list_item_num_item_wl"> | 
 |  |  |                                         <span> {{ item.materialName }}{{ item.procedureName ? ` | ${item.procedureName}` : '' }}</span> | 
 |  |  |                                         <div class="bg_list_item_num_item_wl_lx"> | 
 |  |  |                                             <span class="green" v-if="item.qualityType == 0">合格 / </span> | 
 |  |  |                                             <span class="yellow" v-if="item.qualityType == 1">不良 / </span> | 
 |  |  |                                             <span class="red" v-if="item.qualityType == 2">报废 / </span> | 
 |  |  |                                             <span>{{ item.locationName }}</span> | 
 |  |  |                                             <span>{{ item.batch ? ` / ${item.batch}` : '' }}</span> | 
 |  |  |                                         </div> | 
 |  |  |                                     </div> | 
 |  |  |                                 </div> | 
 |  |  |                                 <div class="bg_list_item_num_item_sr"> | 
 |  |  |                                     <input v-model="item.num" :disabled="!proxy.$auth('h5:workorderinput:update')" @blur="change(item.id, item.num, 'T', item.maxNum, item, item.unitAttribute)" type="number" /> | 
 |  |  |                                     <span>{{item.unitName}}</span> | 
 |  |  |                                     <div class="bg_list_item_num_item_sr"> | 
 |  |  |                                         <input v-model="item.num" :disabled="!proxy.$auth('h5:workorderinput:update')" @blur="change(item.id, item.num, 'T', item.maxNum, item, item.unitAttribute)" type="number" /> | 
 |  |  |                                         <span>{{item.unitName}}</span> | 
 |  |  |                                     </div> | 
 |  |  |                                 </div> | 
 |  |  |                             </div> | 
 |  |  |                         </div> | 
 |  |  |                          | 
 |  |  |                         <template #right v-if="proxy.$auth('h5:workorderinput:delete')"> | 
 |  |  |                             <van-button style="height: 100%;" square text="删除" @click="deleItem(item.id, 'T')" type="danger" /> | 
 |  |  |                         </template> | 
 |  |  | 
 |  |  |                 <!-- <template v-if="produceData && produceData.length > 0"> --> | 
 |  |  |                     <!-- v-for="(item, index) in produceData" :key="index" --> | 
 |  |  |                     <van-swipe-cell> | 
 |  |  |                         <div class="bg_list_item_num"> | 
 |  |  |                             <div class="bg_list_item_num_item"> | 
 |  |  |                                 <span>良品数</span> | 
 |  |  |                                 <div class="bg_list_item_num_item_sr"> | 
 |  |  |                                     <!-- :disabled="!proxy.$auth('h5:workorderoutput:update')" --> | 
 |  |  |                                     <!-- @blur="change(item.id, item.num, 'C', item.maxNum, item)" --> | 
 |  |  |                                     <input type="number" v-model="produceFrom.qualified" @blur="changeCC('0', produceFrom.qualified, produceFrom.qualifiedId)" placeholder="请输入" /> | 
 |  |  |                                     <span v-if="info.umodel">{{info.umodel.name}}</span> | 
 |  |  |                         <div class="bg_list_item_h"> | 
 |  |  |                             <div class="bg_list_item_num"> | 
 |  |  |                                 <div class="bg_list_item_num_item"> | 
 |  |  |                                     <span>良品数({{ info.umodel ? info.umodel.name : '' }})</span> | 
 |  |  |                                     <div class="bg_list_item_num_item_sr"> | 
 |  |  |                                         <!-- :disabled="!proxy.$auth('h5:workorderoutput:update')" --> | 
 |  |  |                                         <!-- @blur="change(item.id, item.num, 'C', item.maxNum, item)" --> | 
 |  |  |                                         <input type="number" v-model="produceFrom.qualified" @blur="changeCC('0', produceFrom.qualified, produceFrom.qualifiedId)" placeholder="请输入" /> | 
 |  |  |                                         <span v-if="info.umodel">{{info.umodel.name}}</span> | 
 |  |  |                                     </div> | 
 |  |  |                                 </div> | 
 |  |  |                             </div> | 
 |  |  |                         </div> | 
 |  |  |                     </van-swipe-cell> | 
 |  |  |                     <van-swipe-cell> | 
 |  |  |                         <div class="bg_list_item_num"> | 
 |  |  |                             <!-- @blur="change(item.id, item.num, 'C', item.maxNum, item)" --> | 
 |  |  |                             <div class="bg_list_item_num_item"> | 
 |  |  |                                 <span>不良数</span> | 
 |  |  |                                 <div class="bg_list_item_num_item_sr"> | 
 |  |  |                                     <!-- :disabled="!proxy.$auth('h5:workorderoutput:update')" --> | 
 |  |  |                                     <!-- @blur="change(item.id, item.num, 'C', item.maxNum, item)" --> | 
 |  |  |                                     <input type="number" v-model="produceFrom.undesirable" @blur="changeCC('1', produceFrom.undesirable, produceFrom.undesirableId)" placeholder="请输入" /> | 
 |  |  |                                     <span v-if="info.umodel">{{info.umodel.name}}</span> | 
 |  |  |                         <div class="bg_list_item_h"> | 
 |  |  |                             <div class="bg_list_item_num"> | 
 |  |  |                                 <!-- @blur="change(item.id, item.num, 'C', item.maxNum, item)" --> | 
 |  |  |                                 <div class="bg_list_item_num_item"> | 
 |  |  |                                     <span>不良数({{ info.umodel ? info.umodel.name : '' }})</span> | 
 |  |  |                                     <div class="bg_list_item_num_item_sr"> | 
 |  |  |                                         <!-- :disabled="!proxy.$auth('h5:workorderoutput:update')" --> | 
 |  |  |                                         <!-- @blur="change(item.id, item.num, 'C', item.maxNum, item)" --> | 
 |  |  |                                         <input type="number" v-model="produceFrom.undesirable" @blur="changeCC('1', produceFrom.undesirable, produceFrom.undesirableId)" placeholder="请输入" /> | 
 |  |  |                                         <span v-if="info.umodel">{{info.umodel.name}}</span> | 
 |  |  |                                     </div> | 
 |  |  |                                 </div> | 
 |  |  |                             </div> | 
 |  |  |                         </div> | 
 |  |  |                     </van-swipe-cell> | 
 |  |  |                     <!-- <van-swipe-cell> | 
 |  |  |                         <div class="bg_list_item_num"> | 
 |  |  |                             <div class="bg_list_item_num_item" @click="show = true"> | 
 |  |  |                                 <span>不良项</span> | 
 |  |  |                                 <div class="bg_list_item_num_item_sr"> | 
 |  |  |                                     <span>设置 ></span> | 
 |  |  |                     <van-swipe-cell v-if="produceFrom.undesirable > 0"> | 
 |  |  |                         <div class="bg_list_item_h"> | 
 |  |  |                             <div class="bg_list_item_num"> | 
 |  |  |                                 <div class="bg_list_item_num_item" @click="show = true"> | 
 |  |  |                                     <span>不良项</span> | 
 |  |  |                                     <div class="bg_list_item_num_item_sr"> | 
 |  |  |                                         <span class="wulll" :style="{color: from.defectiveName ? '#305ED5' : ''}">{{from.defectiveName ? from.defectiveName : '设置'}}</span> | 
 |  |  |                                         <img src="@/assets/icon/ic_ar@2x.png" alt="" /> | 
 |  |  |                                     </div> | 
 |  |  |                                 </div> | 
 |  |  |                             </div> | 
 |  |  |                         </div> | 
 |  |  |                     </van-swipe-cell> --> | 
 |  |  |                     </van-swipe-cell> | 
 |  |  |                 <!-- </template> | 
 |  |  |                 <template v-else> | 
 |  |  |                     <div class="kong"> | 
 |  |  |                         <span>暂无数据</span> | 
 |  |  |                     </div> | 
 |  |  |                 </template> --> | 
 |  |  |             </div> | 
 |  |  |             <div class="bg_plan" @click="TimeShow = true"> | 
 |  |  |                 <div class="bg_plan_label"> | 
 |  |  |                     <span><b>*</b>报工时长</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_top"> | 
 |  |  |                     <div class="bg_list_item_top_left"> | 
 |  |  |                         <div class="bg_list_item_top_left_x"></div> | 
 |  |  |                         <span>工资绩效</span> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="bg_list_item_h"> | 
 |  |  |                     <div class="bg_list_item_num"> | 
 |  |  |                         <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> | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 |  |  |                     <div class="bg_list_item_num"> | 
 |  |  |                         <div class="bg_list_item_num_item"> | 
 |  |  |                             <span>工资单价</span> | 
 |  |  |                             <div class="bg_list_item_num_item_sr"> | 
 |  |  |                                 <span class="color1">{{infoBox.salary / 100}}元/{{infoBox.type == 0 ? '件' : '时'}}</span> | 
 |  |  |                             </div> | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 |  |  |                     <div class="bg_list_item_num"> | 
 |  |  |                         <div class="bg_list_item_num_item"> | 
 |  |  |                             <span>预计工资</span> | 
 |  |  |                             <div class="bg_list_item_num_item_sr"> | 
 |  |  |                                 <span class="color1">{{expectedSalary}}元</span> | 
 |  |  |                             </div> | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 |  |  |                     <div class="bg_list_item_num"> | 
 |  |  |                         <div class="bg_list_item_num_item"> | 
 |  |  |                             <span>达标率</span> | 
 |  |  |                             <div class="bg_list_item_num_item_sr"> | 
 |  |  |                                 <span class="color1">{{complianceRate}}%</span> | 
 |  |  |                             </div> | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |             </div> | 
 |  |  |             <!-- <div class="bg_list_item"> | 
 |  |  |                 <div class="bg_list_item_top"> | 
 |  |  | 
 |  |  |                 </div> | 
 |  |  |             </div> | 
 |  |  |         </van-popup> | 
 |  |  |         <!-- 时间 --> | 
 |  |  |         <van-popup v-model:show="TimeShow" round position="bottom" :style="{ height: '50%' }"> | 
 |  |  |             <van-datetime-picker | 
 |  |  |                 v-model="from.time" | 
 |  |  |                 type="time" | 
 |  |  |                 title="选择时间" | 
 |  |  |                 @confirm="onConfirm2" | 
 |  |  |                 @cancel="onCancel2" | 
 |  |  |             /> | 
 |  |  |         </van-popup> | 
 |  |  |         <!-- 选择不良项 --> | 
 |  |  |         <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"> | 
 |  |  |                     <span @click="show = false">取消</span> | 
 |  |  |                     <img src="@/assets/icon/ic_close@2x.png" style="opacity: 0;" alt="" /> | 
 |  |  |                     <span>不良项</span> | 
 |  |  |                     <span>确认</span> | 
 |  |  |                     <!-- <span>确认</span> --> | 
 |  |  |                     <img src="@/assets/icon/ic_close@2x.png" @click="show = false" alt="" /> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="bl_list"> | 
 |  |  |                     <div class="bl_list_item" v-for="(item, i) in 12" :key="i"> | 
 |  |  |                     <div class="bl_list_item" v-for="(item, i) in cateList" :key="i" @click="changeChecked(i)"> | 
 |  |  |                         <div class="bl_list_item_left"> | 
 |  |  |                             <input type="checkbox" :checked="true" name="" id="" /> | 
 |  |  |                             <span>有划痕</span> | 
 |  |  |                             <input type="checkbox" :checked="item.active" /> | 
 |  |  |                             <span>{{ item.name }}</span> | 
 |  |  |                         </div> | 
 |  |  |                         <div class="bl_list_item_right"> | 
 |  |  |                             <input type="number" placeholder="请输入" /> | 
 |  |  |                             <input type="number" @click.stop v-model="item.num" placeholder="0" /> | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="bl_footer" @click="onConfirm3">确认</div> | 
 |  |  |             </div> | 
 |  |  |         </van-popup> | 
 |  |  |     </div> | 
 |  |  | </template> | 
 |  |  |  | 
 |  |  | <script setup lang="ts"> | 
 |  |  |     import { getCurrentInstance, nextTick, onMounted, ref, reactive } from 'vue' | 
 |  |  |     import { getCurrentInstance, nextTick, onMounted, ref, reactive, computed } from 'vue' | 
 |  |  |     import { useRouter, useRoute } from "vue-router" | 
 |  |  |     import { Dialog, Toast } from 'vant' | 
 |  |  |     import { REGULAR } from '@/utils/utils' | 
 |  |  |     import { categoryExtList, queryOne } from '@/apis/PlanningAPI' | 
 |  |  |     import { | 
 |  |  |         getBarcodeContent, | 
 |  |  |         queryById, | 
 |  |  | 
 |  |  |     const router = useRouter() | 
 |  |  |     const route = useRoute() | 
 |  |  |  | 
 |  |  |     let TimeShow = ref(false) | 
 |  |  |  | 
 |  |  |     let from: any = reactive({ | 
 |  |  |         time: '', | 
 |  |  |         defective: [], | 
 |  |  |         defectiveName: '' | 
 |  |  |     }) | 
 |  |  |  | 
 |  |  |     // 预计工资 | 
 |  |  |     const expectedSalary = computed(() => { | 
 |  |  |         if (!infoBox.value) return 0; | 
 |  |  |         // 按件计算 | 
 |  |  |         if (infoBox.value.type == 0) { | 
 |  |  |             if (!produceFrom.qualified) return 0 | 
 |  |  |             if (infoBox.value.unqualified == 1) {   // 是否计入不良品 | 
 |  |  |                 let total = Number(produceFrom.qualified) + Number(produceFrom.undesirable) | 
 |  |  |                 return (total * (infoBox.value.salary / 100)).toFixed(2) || 0 | 
 |  |  |             } else { | 
 |  |  |                 return (Number(produceFrom.qualified) * (infoBox.value.salary / 100)).toFixed(2) || 0 | 
 |  |  |             } | 
 |  |  |         } else { | 
 |  |  |             if (!from.duration) return 0; | 
 |  |  |             let h = (from.duration / 60 / 60).toFixed(2) | 
 |  |  |             return (Number(h) * (infoBox.value.salary / 10 / 10)).toFixed(2) || 0 | 
 |  |  |         } | 
 |  |  |     }) | 
 |  |  |  | 
 |  |  |     // 达标率 | 
 |  |  |     const complianceRate = computed(() => { | 
 |  |  |         if (!infoBox.value) return 0; | 
 |  |  |         if (!produceFrom.qualified && !produceFrom.undesirable) return 0; | 
 |  |  |         if (!from.duration) 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) | 
 |  |  |                 console.log(a) | 
 |  |  |                 console.log(b) | 
 |  |  |                 return (Number(a) / Number(b)).toFixed(2) || 0 | 
 |  |  |                 // let total = (Number(from.qualified) + Number(from.undesirable)) / ((from.duration * 60 * 60) * infoBox.value.num / ) | 
 |  |  |                 // return total * infoBox.value.salary; | 
 |  |  |             } else { | 
 |  |  |                 let a = (produceFrom.qualified / (from.duration / 60 / 60)).toFixed(2) | 
 |  |  |                 let b = (infoBox.value.num / (infoBox.value.times / 60 / 60)).toFixed(2) | 
 |  |  |                 console.log(a) | 
 |  |  |                 console.log(b) | 
 |  |  |                 return (Number(a) / Number(b)).toFixed(2) || 0 | 
 |  |  |                 // return Number(from.qualified) * infoBox.value.salary; | 
 |  |  |             } | 
 |  |  |         // } else { | 
 |  |  |         //     console.log('按时长') | 
 |  |  |         // } | 
 |  |  |     }) | 
 |  |  |  | 
 |  |  |     const loading = ref(false); | 
 |  |  |     const finished = ref(false); | 
 |  |  |     let show = ref(false) | 
 |  |  | 
 |  |  |         page: 0 | 
 |  |  |     }) | 
 |  |  |  | 
 |  |  |     let infoBox: any = ref(null)     // 工资绩效 | 
 |  |  |  | 
 |  |  |     // 产出合格/不良 | 
 |  |  |     let produceFrom = reactive({ | 
 |  |  |     let produceFrom: any = reactive({ | 
 |  |  |         qualifiedId: '', | 
 |  |  |         qualified: '',  // 合格 | 
 |  |  |         undesirableId: '', | 
 |  |  |         undesirable: '' // 不良 | 
 |  |  |     }) | 
 |  |  |  | 
 |  |  |     let cateList:any = ref([])  // 不良项 | 
 |  |  |  | 
 |  |  |     // 详情数据 | 
 |  |  |     const info: any = ref({}) | 
 |  |  | 
 |  |  |     // 控制报工统计 | 
 |  |  |     const statistics = ref<boolean>(false) | 
 |  |  |  | 
 |  |  |     const changeChecked = (i: number) => { | 
 |  |  |         cateList.value[i].active = !cateList.value[i].active | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     const getData = () => { | 
 |  |  |         categoryExtList({ | 
 |  |  |             cateType: "3" | 
 |  |  |         }).then(res => { | 
 |  |  |             if (res.code === 200) { | 
 |  |  |                 res.data.forEach((item: any) => { | 
 |  |  |                     item.active = false | 
 |  |  |                     item.num = '' | 
 |  |  |                 }) | 
 |  |  |                 cateList.value = res.data | 
 |  |  |             } | 
 |  |  |         }) | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     const onConfirm2 = (e: string) => { | 
 |  |  |         let h = Number(e.substring(0, 2)) | 
 |  |  |         let m = Number(e.substring(3, 5)) | 
 |  |  |         let s = 0 | 
 |  |  |         if (h > 0) { | 
 |  |  |             s += h * 60 * 60 | 
 |  |  |         } | 
 |  |  |         if (m > 0) { | 
 |  |  |             s += m * 60 | 
 |  |  |         } | 
 |  |  |         from.duration = s | 
 |  |  |         from.durationName = `${h}小时${m}分钟` | 
 |  |  |         TimeShow.value = false | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     const onCancel2 = () => { | 
 |  |  |         TimeShow.value = false | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     const onConfirm3 = () => { | 
 |  |  |         let isOpen = false | 
 |  |  |         cateList.value.forEach((item: any, index: number) => { | 
 |  |  |             if (item.active) { | 
 |  |  |                 isOpen = true | 
 |  |  |             } | 
 |  |  |         }) | 
 |  |  |         if (!isOpen) return Toast('请选择不良项') | 
 |  |  |         let arr: any = [] | 
 |  |  |         let total: any = 0 | 
 |  |  |         let name: any = '' | 
 |  |  |         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 !== produceFrom.undesirable) return Toast('不良数必须等于产出不良数') | 
 |  |  |         from.defective = arr | 
 |  |  |         from.defectiveName = name | 
 |  |  |         show.value = false | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 投料统计 | 
 |  |  |     const tlTotal = (): string => { | 
 |  |  |         if (feedingData.value.length > 0) { | 
 |  |  | 
 |  |  |     // 修改产出 | 
 |  |  |     const changeCC = (downType: string, num: number, recordId: string) => { | 
 |  |  |         if (!num) return | 
 |  |  |         console.log(produceFrom.qualified + produceFrom.undesirable) | 
 |  |  |         if ((produceFrom.qualified + produceFrom.undesirable) > info.value.planNum) { | 
 |  |  |             return Toast.fail({ message: '产出数量不能大于计划数量', duration: 2000 }) | 
 |  |  |         } | 
 |  |  |         if (num >= 0) { | 
 |  |  |             dealWorkorderRecordStandard({ | 
 |  |  |                 downType, num, recordId, workorderId: route.query.id | 
 |  |  |             }).then(res => { | 
 |  |  |                 if (res.code === 200) { | 
 |  |  |                     getOrocessRecordCC() | 
 |  |  |                 } | 
 |  |  |             }) | 
 |  |  |             from.defective = [] | 
 |  |  |             from.defectiveName = '' | 
 |  |  |             // dealWorkorderRecordStandard({ | 
 |  |  |             //     downType, num, recordId, workorderId: route.query.id | 
 |  |  |             // }).then(res => { | 
 |  |  |             //     if (res.code === 200) { | 
 |  |  |             //         getOrocessRecordCC() | 
 |  |  |             //     } | 
 |  |  |             // }) | 
 |  |  |         } else { | 
 |  |  |             if (downType == 0) { | 
 |  |  |                 produceFrom.qualified = 0 | 
 |  |  | 
 |  |  |         queryById(route.query.id).then(res => { | 
 |  |  |             if (res.code === 200) { | 
 |  |  |                 info.value = res.data | 
 |  |  |                 // 获取工资绩效数据 | 
 |  |  |                 queryOne({ | 
 |  |  |                     deleted: 0, | 
 |  |  |                     departId: res.data.factoryId, | 
 |  |  |                     materialId: res.data.materialId, | 
 |  |  |                     procedureId: res.data.procedureId | 
 |  |  |                 }).then((result: any) => { | 
 |  |  |                     if (result.code === 200) { | 
 |  |  |                         infoBox.value = result.data | 
 |  |  |                     } | 
 |  |  |                 }) | 
 |  |  |             } | 
 |  |  |         }) | 
 |  |  |     } | 
 |  |  | 
 |  |  |             if (res.code === 200 && type === 'T') { | 
 |  |  |                 getOrocessRecords() | 
 |  |  |             } else if (res.code === 200 && type === 'C') { | 
 |  |  |                 getOrocessRecordCC() | 
 |  |  |                 // getOrocessRecordCC() | 
 |  |  |             } | 
 |  |  |         }) | 
 |  |  |     } | 
 |  |  | 
 |  |  |         if (info.value.bomType === 1) {  // 拉式 | 
 |  |  |             console.log('拉式') | 
 |  |  |             statisticsData.value = [] | 
 |  |  |             if (produceFrom.qualified <= 0) { | 
 |  |  |                 Toast.fail({ message: '产出明细不能为空' }) | 
 |  |  |                 return | 
 |  |  |             } | 
 |  |  |             if (info.value.hasBom === 0) { | 
 |  |  |                 console.log('无bom') | 
 |  |  |                 // let data: any = [ | 
 |  |  | 
 |  |  |                 Toast.fail({ message: '投料明细不能为空' }) | 
 |  |  |                 return | 
 |  |  |             } | 
 |  |  |             if (produceFrom.qualified <= 0) { | 
 |  |  |                 Toast.fail({ message: '产出明细不能为空' }) | 
 |  |  |                 return | 
 |  |  |             } | 
 |  |  |             statisticsData.value = [] | 
 |  |  |             if (info.value.hasBom === 0) { | 
 |  |  |                 console.log('无bom') | 
 |  |  | 
 |  |  |  | 
 |  |  |     // 确认报工 | 
 |  |  |     const submitBG = () => { | 
 |  |  |         if (!from.duration || from.duration <= 0) { | 
 |  |  |             return Toast('报工时长不能为空') | 
 |  |  |         } | 
 |  |  |         let createUnqualifiedDTOList = from.defective.map((item: any) => { | 
 |  |  |             return { | 
 |  |  |                 categoryId: item.id, | 
 |  |  |                 unQualifiedNum: item.num | 
 |  |  |             } | 
 |  |  |         }) | 
 |  |  |         let createWorkorderRecordDTO = { | 
 |  |  |             workorderId: route.query.id, | 
 |  |  |             duration: from.duration, | 
 |  |  |             qualifiedNum: produceFrom.qualified ? produceFrom.qualified : 0, | 
 |  |  |             unQualifiedNum: produceFrom.undesirable ? produceFrom.undesirable : 0 | 
 |  |  |         } | 
 |  |  |         // id: route.query.id | 
 |  |  |         comfirmDoneStandard({ | 
 |  |  |             id: route.query.id | 
 |  |  |             createUnqualifiedDTOList, | 
 |  |  |             createWorkorderRecordDTO | 
 |  |  |         }).then(res => { | 
 |  |  |             if (res.code === 200) { | 
 |  |  |                 Toast.success({ message: '报工成功', forbidClick: true, duration: 2000 }) | 
 |  |  | 
 |  |  |         pageDJs() | 
 |  |  |         queryByIds() | 
 |  |  |         getOrocessRecords() | 
 |  |  |         getOrocessRecordCC() | 
 |  |  |         getData() | 
 |  |  |         // getOrocessRecordCC() | 
 |  |  |     }) | 
 |  |  | </script> | 
 |  |  |  | 
 |  |  | 
 |  |  |         /*height: 100%;*/ | 
 |  |  |         position: absolute; | 
 |  |  |         background: #F7F7F7; | 
 |  |  |         .bg_plan { | 
 |  |  |             width: 100%; | 
 |  |  |             // height: 98px; | 
 |  |  |             padding: 30px; | 
 |  |  |             box-sizing: border-box; | 
 |  |  |             background: #FFFFFF; | 
 |  |  |             margin-bottom: 40px; | 
 |  |  |             display: flex; | 
 |  |  |             align-items: center; | 
 |  |  |             justify-content: space-between; | 
 |  |  |             span { | 
 |  |  |                 font-size: 30px; | 
 |  |  |                 font-family: PingFangSC-Regular, PingFang SC; | 
 |  |  |                 font-weight: 400; | 
 |  |  |                 color: #222222; | 
 |  |  |                 b { | 
 |  |  |                     color: red; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             .bg_plan_nr { | 
 |  |  |                 display: flex; | 
 |  |  |                 flex-direction: column; | 
 |  |  |                 span { | 
 |  |  |                     font-size: 24px; | 
 |  |  |                     font-family: PingFangSC-Regular, PingFang SC; | 
 |  |  |                     font-weight: 400; | 
 |  |  |                     color: #666666; | 
 |  |  |                     margin-top: 20px; | 
 |  |  |                     &:first-child { | 
 |  |  |                         font-size: 32px; | 
 |  |  |                         font-family: PingFangSC-Medium, PingFang SC; | 
 |  |  |                         font-weight: 500; | 
 |  |  |                         color: #333333; | 
 |  |  |                         margin-top: 0 !important; | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             .bg_plan_label_val { | 
 |  |  |                 display: flex; | 
 |  |  |                 align-items: center; | 
 |  |  |                 span { | 
 |  |  |                     font-size: 28px; | 
 |  |  |                     font-family: PingFangSC-Regular, PingFang SC; | 
 |  |  |                     font-weight: 400; | 
 |  |  |                     color: #999999; | 
 |  |  |                 } | 
 |  |  |                 img { | 
 |  |  |                     width: 12px; | 
 |  |  |                     height: 24px; | 
 |  |  |                     margin-left: 20px; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         .details_cz { | 
 |  |  |             width: 100%; | 
 |  |  |             padding: 30px; | 
 |  |  | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |                 .bg_list_item_num { | 
 |  |  |                 .bg_list_item_h { | 
 |  |  |                     width: 100%; | 
 |  |  |                     background: white; | 
 |  |  |                     padding: 0 30px; | 
 |  |  |                     box-sizing: border-box; | 
 |  |  |                     .kong { | 
 |  |  |                         text-align: center; | 
 |  |  |                         font-size: 25px; | 
 |  |  |                         padding: 30px 0; | 
 |  |  |                         background: #ffffff; | 
 |  |  |                     } | 
 |  |  |                     .bg_list_item_num_item { | 
 |  |  |                     background: white; | 
 |  |  |                     .bg_list_item_num { | 
 |  |  |                         width: 100%; | 
 |  |  |                         min-height: 98px; | 
 |  |  |                         background: white; | 
 |  |  |                         display: flex; | 
 |  |  |                         justify-content: center; | 
 |  |  |                         align-items: center; | 
 |  |  |                         // height: 118px; | 
 |  |  |                         padding: 15px 0; | 
 |  |  |                         box-sizing: border-box; | 
 |  |  |                         justify-content: space-between; | 
 |  |  |                         border-bottom: 1px solid #E5E5E5; | 
 |  |  |                         border-bottom: 1PX solid #E5E5E5; | 
 |  |  |                         &:last-child { | 
 |  |  |                             border: none; | 
 |  |  |                             border: none !important; | 
 |  |  |                         } | 
 |  |  |                         .bg_list_item_num_item_wl { | 
 |  |  |                             flex-shrink: 0; | 
 |  |  |                         .kong { | 
 |  |  |                             text-align: center; | 
 |  |  |                             font-size: 25px; | 
 |  |  |                             padding: 30px 0; | 
 |  |  |                             background: #ffffff; | 
 |  |  |                         } | 
 |  |  |                         .bg_list_item_num_item { | 
 |  |  |                             width: 100%; | 
 |  |  |                             height: 100%; | 
 |  |  |                             display: flex; | 
 |  |  |                             flex-direction: column; | 
 |  |  |                             span { | 
 |  |  |                                 font-size: 34px; | 
 |  |  |                                 color: #222222; | 
 |  |  |                             align-items: center; | 
 |  |  |                             // height: 118px; | 
 |  |  |                             padding: 15px 0; | 
 |  |  |                             box-sizing: border-box; | 
 |  |  |                             justify-content: space-between; | 
 |  |  |                             border-bottom: 1px solid #E5E5E5; | 
 |  |  |                             &:last-child { | 
 |  |  |                                 border: none; | 
 |  |  |                             } | 
 |  |  |                             .bg_list_item_num_item_wl_lx { | 
 |  |  |                                 margin-top: 10px; | 
 |  |  |                                 span { | 
 |  |  |                                     color: #222222; | 
 |  |  |                                     font-size: 28px; | 
 |  |  |                             .bg_list_item_num_item_list { | 
 |  |  |                                 display: flex; | 
 |  |  |                                 align-items: center; | 
 |  |  |                                 .active { | 
 |  |  |                                     background: #305ED5 !important; | 
 |  |  |                                     color: #FFFFFF !important; | 
 |  |  |                                 } | 
 |  |  |                                 .bg_list_item_num_item_list_item { | 
 |  |  |                                     width: 116px; | 
 |  |  |                                     height: 62px; | 
 |  |  |                                     line-height: 62px; | 
 |  |  |                                     text-align: center; | 
 |  |  |                                     background: #F2F2F2; | 
 |  |  |                                     border-radius: 8px; | 
 |  |  |                                     font-size: 26px; | 
 |  |  |                                     font-family: PingFangSC-Regular, PingFang SC; | 
 |  |  |                                     font-weight: 400; | 
 |  |  |                                     color: #333333; | 
 |  |  |                                     margin-right: 20px; | 
 |  |  |                                     &:last-child { | 
 |  |  |                                         margin: 0 !important; | 
 |  |  |                                     } | 
 |  |  |                                 } | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  |                         .warning { | 
 |  |  |                             color: $nav-stateColor5 !important; | 
 |  |  |                         } | 
 |  |  |                         .err { | 
 |  |  |                             color: $nav-stateColor4 !important; | 
 |  |  |                         } | 
 |  |  |                         span { | 
 |  |  |                             flex-shrink: 0; | 
 |  |  |                             overflow: hidden; | 
 |  |  |                             text-overflow: ellipsis; | 
 |  |  |                             white-space: nowrap; | 
 |  |  |                             .bg_list_item_num_item_wl { | 
 |  |  |                                 flex-shrink: 0; | 
 |  |  |                                 display: flex; | 
 |  |  |                                 flex-direction: column; | 
 |  |  |                                 span { | 
 |  |  |                                     font-size: 34px; | 
 |  |  |                                     color: #222222; | 
 |  |  |                                 } | 
 |  |  |                                 .bg_list_item_num_item_wl_lx { | 
 |  |  |                                     margin-top: 10px; | 
 |  |  |                                     span { | 
 |  |  |                                         color: #222222; | 
 |  |  |                                         font-size: 28px; | 
 |  |  |                                     } | 
 |  |  |                                 } | 
 |  |  |                             } | 
 |  |  |                             .warning { | 
 |  |  |                                 color: $nav-stateColor5 !important; | 
 |  |  |                                 margin-right: 5px; | 
 |  |  |                             } | 
 |  |  |                             .err { | 
 |  |  |                                 color: $nav-stateColor4 !important; | 
 |  |  |                                 margin-right: 5px; | 
 |  |  |                             } | 
 |  |  |                             &:nth-child(1) { | 
 |  |  |                                 font-size: 30px; | 
 |  |  |                                 font-weight: 400; | 
 |  |  |                                 color: #222222; | 
 |  |  |                             } | 
 |  |  |                             &:nth-child(2) { | 
 |  |  |                                 font-size: 28px; | 
 |  |  |                                 font-weight: 400; | 
 |  |  |                                 color: #333333; | 
 |  |  |                                 flex-shrink: 0; | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  |                         .bg_list_item_num_item_sr { | 
 |  |  |                             flex: 1; | 
 |  |  |                             display: flex; | 
 |  |  |                             align-items: center; | 
 |  |  |                             justify-content: flex-end; | 
 |  |  |                             input::-webkit-input-placeholder { | 
 |  |  |                                 font-size: 28px; | 
 |  |  |                             } | 
 |  |  |                             input { | 
 |  |  |                                 text-align: right; | 
 |  |  |                                 width: 180px; | 
 |  |  |                                 height: 60px; | 
 |  |  |                                 border-radius: 8px; | 
 |  |  |                                 border: 1PX solid #E5E5E5; | 
 |  |  |                                 margin-right: 20px; | 
 |  |  |                                 font-size: 28px; | 
 |  |  |                                 font-weight: 400; | 
 |  |  |                                 color: #333333; | 
 |  |  |                                 padding: 0 30px | 
 |  |  |                             img { | 
 |  |  |                                 width: 12px; | 
 |  |  |                                 height: 24px; | 
 |  |  |                                 margin-left: 20px; | 
 |  |  |                             } | 
 |  |  |                             span { | 
 |  |  |                                 font-size: 28px; | 
 |  |  |                                 font-weight: 400; | 
 |  |  |                                 color: #666666; | 
 |  |  |                                 flex-shrink: 0; | 
 |  |  |                                 overflow: hidden; | 
 |  |  |                                 text-overflow: ellipsis; | 
 |  |  |                                 white-space: nowrap; | 
 |  |  |                                 b { | 
 |  |  |                                     font-size: 30px; | 
 |  |  |                                     color: red; | 
 |  |  |                                     margin-right: 5px; | 
 |  |  |                                 } | 
 |  |  |                                 .warning { | 
 |  |  |                                     color: $nav-stateColor5 !important; | 
 |  |  |                                     margin-right: 5px; | 
 |  |  |                                 } | 
 |  |  |                                 .err { | 
 |  |  |                                     color: $nav-stateColor4 !important; | 
 |  |  |                                     margin-right: 5px; | 
 |  |  |                                 } | 
 |  |  |                                 &:nth-child(1) { | 
 |  |  |                                     font-size: 30px; | 
 |  |  |                                     font-weight: 400; | 
 |  |  |                                     color: #222222; | 
 |  |  |                                 } | 
 |  |  |                                 &:nth-child(2) { | 
 |  |  |                                     font-size: 28px; | 
 |  |  |                                     font-weight: 400; | 
 |  |  |                                     color: #333333; | 
 |  |  |                                     flex-shrink: 0; | 
 |  |  |                                 } | 
 |  |  |                             } | 
 |  |  |                             .bg_list_item_num_item_sr { | 
 |  |  |                                 flex: 1; | 
 |  |  |                                 display: flex; | 
 |  |  |                                 align-items: center; | 
 |  |  |                                 justify-content: flex-end; | 
 |  |  |                                 .color1 { | 
 |  |  |                                     font-size: 28px; | 
 |  |  |                                     font-family: PingFangSC-Regular, PingFang SC; | 
 |  |  |                                     font-weight: 400; | 
 |  |  |                                     color: #333333; | 
 |  |  |                                 } | 
 |  |  |                                 input::-webkit-input-placeholder { | 
 |  |  |                                     font-size: 28px; | 
 |  |  |                                 } | 
 |  |  |                                 input { | 
 |  |  |                                     text-align: right; | 
 |  |  |                                     width: 180px; | 
 |  |  |                                     height: 60px; | 
 |  |  |                                     border-radius: 8px; | 
 |  |  |                                     border: 1PX solid #E5E5E5; | 
 |  |  |                                     margin-right: 20px; | 
 |  |  |                                     font-size: 28px; | 
 |  |  |                                     font-weight: 400; | 
 |  |  |                                     color: #333333; | 
 |  |  |                                     padding: 0 30px | 
 |  |  |                                 } | 
 |  |  |                                 .wulll { | 
 |  |  |                                     width: 400px; | 
 |  |  |                                     text-align: right; | 
 |  |  |                                     overflow: hidden; | 
 |  |  |                                     white-space: nowrap; | 
 |  |  |                                     text-overflow: ellipsis; | 
 |  |  |                                 } | 
 |  |  |                                 span { | 
 |  |  |                                     font-size: 28px; | 
 |  |  |                                     font-family: PingFangSC-Regular, PingFang SC; | 
 |  |  |                                     font-weight: 400; | 
 |  |  |                                     color: #999999; | 
 |  |  |                                 } | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         .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; | 
 |  |  | 
 |  |  |                         font-size: 32px !important; | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |                 img { | 
 |  |  |                     width: 28px; | 
 |  |  |                     height: 28px; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             .bl_footer { | 
 |  |  |                 width: 100%; | 
 |  |  |                 height: 88px; | 
 |  |  |                 line-height: 88px; | 
 |  |  |                 text-align: center; | 
 |  |  |                 background: #305ED5; | 
 |  |  |                 border-radius: 8px; | 
 |  |  |                 font-size: 32px; | 
 |  |  |                 font-family: PingFangSC-Medium, PingFang SC; | 
 |  |  |                 font-weight: 500; | 
 |  |  |                 color: #FFFFFF; | 
 |  |  |                 margin-top: 30px; | 
 |  |  |             } | 
 |  |  |             .bl_list { | 
 |  |  |                 width: 100%; | 
 |  |  |                 height: 580px; | 
 |  |  |                 height: calc(100% - 168px); | 
 |  |  |                 overflow-y: scroll; | 
 |  |  |                 margin-top: 30px; | 
 |  |  |                 .bl_list_item { | 
 |  |  |                     width: 100%; | 
 |  |  |                     height: 60px; | 
 |  |  |                     height: 96px; | 
 |  |  |                     display: flex; | 
 |  |  |                     align-items: center; | 
 |  |  |                     justify-content: space-between; | 
 |  |  |                     margin-bottom: 20px; | 
 |  |  |                     border-bottom: 1PX solid #E5E5E5; | 
 |  |  |                     &:last-child { | 
 |  |  |                         margin-bottom: 0 !important; | 
 |  |  |                         border: none !important; | 
 |  |  |                     } | 
 |  |  |                     .bl_list_item_left { | 
 |  |  |                         flex: 1; | 
 |  |  | 
 |  |  |                         input { | 
 |  |  |                             width: 30px; | 
 |  |  |                             height: 30px; | 
 |  |  |                             border: 1PX solid #CCCCCC; | 
 |  |  |                             margin: 0 !important; | 
 |  |  |                         } | 
 |  |  |                         span { | 
 |  |  | 
 |  |  |                             padding-left: 5px; | 
 |  |  |                             width: 160px; | 
 |  |  |                             height: 100%; | 
 |  |  |                             padding: 0 30px; | 
 |  |  |                             box-sizing: border-box; | 
 |  |  |                             text-align: right; | 
 |  |  |                             font-size: 28px; | 
 |  |  |                             color: #333333; | 
 |  |  |                             border-radius: 10px; | 
 |  |  |                             border: 2px solid #999999 | 
 |  |  |                             border: 1PX solid #CCCCCC; | 
 |  |  |                             &::-webkit-input-placeholder { | 
 |  |  |                                 font-size: 28px; | 
 |  |  |                                 font-family: PingFangSC-Regular, PingFang SC; | 
 |  |  |                                 font-weight: 400; | 
 |  |  |                                 color: #999999; | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                 } |