<template> 
 | 
    <div class="fp"> 
 | 
        <div class="fp_list"> 
 | 
            <div class="fp_list_item"> 
 | 
                <div class="fp_list_item_left"> 
 | 
                    <b>*</b> 
 | 
                    <span>计划生产数量:</span> 
 | 
                </div> 
 | 
                <div class="fp_list_item_right"> 
 | 
                    <input type="number" v-model="form.num" placeholder="请输入" /> 
 | 
                </div> 
 | 
            </div> 
 | 
            <div class="fp_list_item" @click="openTime"> 
 | 
                <div class="fp_list_item_left"> 
 | 
                    <b>*</b> 
 | 
                    <span>计划开工日期:</span> 
 | 
                </div> 
 | 
                <div class="fp_list_item_right"> 
 | 
                    <span class="black" v-if="form.startTime">{{form.startTime}}</span> 
 | 
                    <span v-else>年 / 月 / 日</span> 
 | 
                    <van-icon name="arrow" color="#999999" /> 
 | 
                </div> 
 | 
            </div> 
 | 
            <div class="fp_list_item" @click="openSB"> 
 | 
                <div class="fp_list_item_left"> 
 | 
                    <span>生产设备</span> 
 | 
                </div> 
 | 
                <div class="fp_list_item_right"> 
 | 
                    <span v-if="form.equipmentName" class="black">{{form.equipmentName}}</span> 
 | 
                    <span v-else>请选择</span> 
 | 
                    <van-icon name="arrow" color="#999999" /> 
 | 
                </div> 
 | 
            </div> 
 | 
            <div class="fp_list_item1" v-show="form.equipmentName"> 
 | 
                <div class="fp_list_item_left"> 
 | 
                    <span>生产人员</span> 
 | 
                </div> 
 | 
                <div class="fp_list_item_right"> 
 | 
                    <van-checkbox-group v-model="form.personnelId" direction="horizontal" v-show="personnelData.length > 0"> 
 | 
                        <van-checkbox :name="item.id" v-for="item in personnelData" checked-color="#4275FC">{{item.text}}</van-checkbox> 
 | 
                    </van-checkbox-group> 
 | 
                    <div class="wu" v-show="personnelData.length === 0"> 
 | 
                        <span>暂无数据</span> 
 | 
                    </div> 
 | 
                </div> 
 | 
            </div> 
 | 
        </div> 
 | 
        <div class="fp_footer"> 
 | 
            <div class="fp_footer_close" @click="go">取消</div> 
 | 
            <button class="fp_footer_submit" @click="submit" v-preventReClick>确认</button> 
 | 
        </div> 
 | 
    </div> 
 | 
    <!--  选择时间  --> 
 | 
    <van-calendar v-model:show="isOpenDate" color="#4275FC" @confirm="onConfirm" /> 
 | 
    <!--  选择设备  --> 
 | 
    <van-popup v-model:show="show1" position="bottom" round :style="{ height: '50%' }"> 
 | 
        <van-picker 
 | 
            title="选择生产设备" 
 | 
            :columns="equipment" 
 | 
            @confirm="onConfirms1" 
 | 
            @cancel="onCancel1" 
 | 
        /> 
 | 
    </van-popup> 
 | 
</template> 
 | 
  
 | 
<script setup lang="ts"> 
 | 
    import { ref, reactive, onMounted } from 'vue' 
 | 
    import { gsdate } from "@/utils/utils" 
 | 
    import { useRoute, useRouter } from "vue-router" 
 | 
    import { distributeById, getFindAll, getDeviceByCondition } from '@/apis/PlanningAPI' 
 | 
    import { Toast } from 'vant' 
 | 
  
 | 
    const route = useRoute() 
 | 
  
 | 
    const router = useRouter() 
 | 
  
 | 
    // 控制选择设备 
 | 
    const show1 = ref<boolean>(false) 
 | 
  
 | 
    // 表单待提交数据 
 | 
    const form = reactive<{equipmentName: string, num: string, startTime: string, personnelId: Array<any>, equipmentId: string}>({ 
 | 
        num: route.query.num as string,        // 生产数量 
 | 
        startTime: gsdate(new Date()),      // 开始时间 
 | 
        equipmentId: '',    // 设备id 
 | 
        equipmentName: '',    // 设备名称 
 | 
        personnelId: []    // 人员id 
 | 
    }) 
 | 
  
 | 
    // 设备数据 
 | 
    let equipment: any = ref([]) 
 | 
  
 | 
    // 人员数据 
 | 
    let personnelData = ref([]) 
 | 
  
 | 
    // 控制选择日期显示隐藏 
 | 
    const isOpenDate = ref<boolean>(false) 
 | 
  
 | 
    // 确认选择日期 
 | 
    const onConfirm = (values: any) => { 
 | 
        form.startTime = gsdate(values) 
 | 
        isOpenDate.value = false; 
 | 
    } 
 | 
  
 | 
    // 打开选择时间弹框 
 | 
    const openTime = () => { 
 | 
        isOpenDate.value = true 
 | 
    } 
 | 
  
 | 
    // 打开选择设备弹框 
 | 
    const openSB = () => { 
 | 
        show1.value = true 
 | 
    } 
 | 
  
 | 
    // 确认选择设备 
 | 
    const onConfirms1 = (value: any, index: any) => { 
 | 
        form.equipmentId = value.id 
 | 
        form.equipmentName = value.text 
 | 
        personnelData.value = [] 
 | 
        getFindAll({ 
 | 
            deviceId: form.equipmentId 
 | 
        }).then(res => { 
 | 
            if (res.code === 200 && res.data && res.data.length !== 0) { 
 | 
                form.personnelId = [] 
 | 
                let arr: any = [] 
 | 
                res.data.forEach((item: any) => { 
 | 
                    arr.push({ text: item.dmodel.name + '-' + item.umodel.name, id: item.userId }) 
 | 
                }) 
 | 
                personnelData.value = arr 
 | 
            } 
 | 
            show1.value = false 
 | 
        }) 
 | 
    }; 
 | 
  
 | 
    // 关闭生产设备 
 | 
    const onCancel1 = () => { 
 | 
        show1.value = false 
 | 
    } 
 | 
  
 | 
    // 返回 
 | 
    const go = () => { 
 | 
        router.go(-1) 
 | 
    } 
 | 
  
 | 
    // 提交分配 
 | 
    const submit = () => { 
 | 
        if (!form.num) return Toast('计划生产数量不能为空!') 
 | 
        if (!form.startTime) return Toast('计划开始日期不能为空!') 
 | 
        distributeById({ 
 | 
            planId: route.query.jhid, 
 | 
            planNum: form.num, 
 | 
            planDate: form.startTime, 
 | 
            proGroupId: form.equipmentId, 
 | 
            proUserList: form.personnelId 
 | 
        }).then(res => { 
 | 
            if (res.code === 200) { 
 | 
                Toast.success({ message: '分配成功', duration: 2000, forbidClick: true }) 
 | 
                setTimeout(() => { 
 | 
                    router.go(-1) 
 | 
                }, 2000) 
 | 
            } 
 | 
        }) 
 | 
    } 
 | 
  
 | 
    // 查询设备 
 | 
    const getDeviceByConditions = () => { 
 | 
        getDeviceByCondition({}) 
 | 
            .then(res => { 
 | 
                if (res.code === 200) { 
 | 
                    res.data.forEach((element: any) => { 
 | 
                        equipment.value.push({ text: element.code + '-' + element.name, id: element.id }) 
 | 
                    }) 
 | 
                } 
 | 
            }) 
 | 
    } 
 | 
  
 | 
    onMounted(() => { 
 | 
        getDeviceByConditions() 
 | 
    }) 
 | 
</script> 
 | 
  
 | 
<style scoped> 
 | 
    .van-radio-group--horizontal, .van-checkbox-group--horizontal { 
 | 
        flex-direction: column !important; 
 | 
    } 
 | 
    .fp .fp_list .fp_list_item1 .fp_list_item_right[data-v-4a3f2565] .van-checkbox:nth-child(1) { 
 | 
        margin-top: 10px !important; 
 | 
    } 
 | 
    .fp .fp_list .fp_list_item1 .fp_list_item_right[data-v-4a3f2565] .van-checkbox:not(:first-child) { 
 | 
        margin-top: 20px !important; 
 | 
    } 
 | 
</style> 
 | 
  
 | 
<style lang="scss" scoped> 
 | 
.fp { 
 | 
    width: 100%; 
 | 
    height: 100%; 
 | 
    position: absolute; 
 | 
    background: #F7F7F7; 
 | 
    .fp_list { 
 | 
        display: flex; 
 | 
        flex-direction: column; 
 | 
        .fp_list_item1 { 
 | 
            display: flex; 
 | 
            flex-direction: column; 
 | 
            justify-content: space-between; 
 | 
            padding: 20px 30px; 
 | 
            box-sizing: border-box; 
 | 
            background: #ffffff; 
 | 
            border-bottom: 1px solid #ececec; 
 | 
            .fp_list_item_left { 
 | 
                flex-shrink: 0; 
 | 
                margin-bottom: 20px; 
 | 
                b { 
 | 
                    color: $nav-stateColor4; 
 | 
                    font-size: 28px; 
 | 
                    margin-right: 5px; 
 | 
                } 
 | 
                span { 
 | 
                    color: #222222; 
 | 
                    font-size: 30px; 
 | 
                    font-weight: 400; 
 | 
                } 
 | 
            } 
 | 
            .fp_list_item_right v-deep { 
 | 
                display: flex; 
 | 
                align-items: center; 
 | 
                .wu { 
 | 
                    width: 100%; 
 | 
                    margin: 30px 0; 
 | 
                    display: flex; 
 | 
                    align-items: center; 
 | 
                    justify-content: center; 
 | 
                    span { 
 | 
                        font-size: 26px; 
 | 
                        color: black; 
 | 
                    } 
 | 
                } 
 | 
                .van-checkbox { 
 | 
                    margin-right: 5px !important; 
 | 
                    margin-top: 10px !important; 
 | 
                    &:nth-child(1) { 
 | 
                        margin-top: 0 !important; 
 | 
                    } 
 | 
                    &:nth-child(2) { 
 | 
                        margin-top: 0 !important; 
 | 
                    } 
 | 
                    &:nth-child(3) { 
 | 
                        margin-top: 0 !important; 
 | 
                    } 
 | 
                    .van-checkbox__label { 
 | 
                        color: black !important; 
 | 
                    } 
 | 
                } 
 | 
                .black { 
 | 
                    color: black !important; 
 | 
                } 
 | 
                input { 
 | 
                    width: 180px; 
 | 
                    height: 60px; 
 | 
                    border-radius: 8px; 
 | 
                    border: 1PX solid #E5E5E5; 
 | 
                    padding: 0 30px; 
 | 
                    text-align: right; 
 | 
                    font-size: 25px; 
 | 
                } 
 | 
                span { 
 | 
                    font-size: 28px; 
 | 
                    font-weight: 400; 
 | 
                    color: #999999; 
 | 
                    margin-right: 20px; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        .fp_list_item { 
 | 
            display: flex; 
 | 
            justify-content: space-between; 
 | 
            align-items: center; 
 | 
            padding: 0 30px; 
 | 
            height: 98px; 
 | 
            box-sizing: border-box; 
 | 
            background: #ffffff; 
 | 
            border-bottom: 1px solid #ececec; 
 | 
            .fp_list_item_left { 
 | 
                flex-shrink: 0; 
 | 
                b { 
 | 
                    color: $nav-stateColor4; 
 | 
                    font-size: 28px; 
 | 
                    margin-right: 5px; 
 | 
                } 
 | 
                span { 
 | 
                    color: #222222; 
 | 
                    font-size: 30px; 
 | 
                    font-weight: 400; 
 | 
                } 
 | 
            } 
 | 
            .fp_list_item_right { 
 | 
                display: flex; 
 | 
                align-items: center; 
 | 
                .wu { 
 | 
                    text-align: center; 
 | 
                    span { 
 | 
                        font-size: 26px; 
 | 
                        color: black; 
 | 
                    } 
 | 
                } 
 | 
                .black { 
 | 
                    color: black !important; 
 | 
                } 
 | 
                input { 
 | 
                    width: 180px; 
 | 
                    height: 60px; 
 | 
                    border-radius: 8px; 
 | 
                    border: 1PX solid #E5E5E5; 
 | 
                    padding: 0 30px; 
 | 
                    text-align: right; 
 | 
                    font-size: 25px; 
 | 
                } 
 | 
                span { 
 | 
                    font-size: 28px; 
 | 
                    font-weight: 400; 
 | 
                    color: #999999; 
 | 
                    margin-right: 20px; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
    .fp_footer { 
 | 
        width: 100%; 
 | 
        padding-left: 30px; 
 | 
        padding-right: 30px; 
 | 
        padding-bottom: 68px; 
 | 
        box-sizing: border-box; 
 | 
        position: fixed; 
 | 
        bottom: 0; 
 | 
        left: 0; 
 | 
        display: flex; 
 | 
        align-items: center; 
 | 
        justify-content: space-between; 
 | 
        .fp_footer_close { 
 | 
            width: 334px; 
 | 
            height: 88px; 
 | 
            background: #FFFFFF; 
 | 
            box-shadow: 0 0 12px 0 rgba(0, 0, 0, 0.08); 
 | 
            border-radius: 8px; 
 | 
            font-size: 30px; 
 | 
            font-weight: 500; 
 | 
            color: #666666; 
 | 
            display: flex; 
 | 
            align-items: center; 
 | 
            justify-content: center; 
 | 
        } 
 | 
        .fp_footer_submit { 
 | 
            width: 334px; 
 | 
            height: 88px; 
 | 
            border: none; 
 | 
            background: $nav-color; 
 | 
            box-shadow: 0 0 12px 0 rgba(0, 0, 0, 0.08); 
 | 
            border-radius: 8px; 
 | 
            font-size: 30px; 
 | 
            font-weight: 500; 
 | 
            color: #ffffff; 
 | 
            display: flex; 
 | 
            align-items: center; 
 | 
            justify-content: center; 
 | 
        } 
 | 
    } 
 | 
} 
 | 
</style> 
 |