<template> 
 | 
    <div class="content"> 
 | 
        <div :class="{ 'content_top': status }" class="content_search"> 
 | 
            <v-Search @searchInput="searchInput" @submit="submit" @reset="reset" :isShow="true" placeholder="搜索申请单的名称/单号"> 
 | 
                <template v-slot:content> 
 | 
                    <div class="Search_item"> 
 | 
                        <div class="Search_item_label">计划日期</div> 
 | 
                        <div class="Search_item_content" @click="openDate"> 
 | 
                            <div class="Search_item_content_a" :style="form.startDate ? 'color: #000;' : ''">{{ form.startDate ? form.startDate : '开始日期'}}</div> 
 | 
                            <span>-</span> 
 | 
                            <div class="Search_item_content_a" :style="form.endDate ? 'color: #000;' : ''">{{ form.endDate ? form.endDate : '结束日期'}}</div> 
 | 
                        </div> 
 | 
                    </div> 
 | 
                    <div class="Search_item"> 
 | 
                        <div class="Search_item_label">申请单类型</div> 
 | 
                        <div class="Search_item_content"> 
 | 
                            <div class="tag"> 
 | 
                                <div class="tag_item" :class="{'tag_active': item.active}" v-for="(item, index) in tyoe" :key="index" @click="clickItem(index, item.id)">{{ item.name }}</div> 
 | 
                            </div> 
 | 
                        </div> 
 | 
                    </div> 
 | 
                </template> 
 | 
            </v-Search> 
 | 
            <div class="content_search_x"></div> 
 | 
            <v-LableSelection :TagList="tagList" :isShow="true" @change="clickTag"></v-LableSelection> 
 | 
        </div> 
 | 
        <div class="content_total">共{{form.total}}条数据</div> 
 | 
        <van-pull-refresh v-model="refreshing" @refresh="onRefresh"> 
 | 
            <van-list 
 | 
                v-model:loading="loading" 
 | 
                :finished="finished" 
 | 
                finished-text="没有更多了~" 
 | 
                @load="onLoad" 
 | 
            > 
 | 
                <div class="content_list"> 
 | 
                    <div class="content_list_item" v-for="(item, i) in list" :key="i" @click="jump(item)"> 
 | 
                        <div class="content_list_item_title"> 
 | 
                            <span>{{ item.title }}</span> 
 | 
                            <span class="yellow" v-if="item.status === 0">待审核</span> 
 | 
                            <span class="green" v-else-if="item.status === 1">审批通过</span> 
 | 
                            <span class="red" v-else-if="item.status === 2">审批未通过</span> 
 | 
                            <span class="red" v-else-if="item.status === 3">审批终止</span> 
 | 
                        </div> 
 | 
                        <div class="content_list_item_dj"> 
 | 
                            <span>单号:{{ item.code }}</span> 
 | 
                            <span>日期:{{ item.createTime }}</span> 
 | 
                        </div> 
 | 
                        <div class="content_list_item_content"> 
 | 
                            <span>{{ item.remark }}</span> 
 | 
                        </div> 
 | 
                    </div> 
 | 
                </div> 
 | 
            </van-list> 
 | 
        </van-pull-refresh> 
 | 
<!--        <div class="content_code" @click="jumpAdd">--> 
 | 
<!--            <img src="@/assets/icon/btn_xinzeng@2x.png" alt="" />--> 
 | 
<!--        </div>--> 
 | 
        <!--    日期组件    --> 
 | 
        <van-calendar v-model:show="isOpenDate" type="range" :min-date="minDate" :max-date="maxDate" color="#4275FC" @confirm="onConfirm" /> 
 | 
    </div> 
 | 
</template> 
 | 
  
 | 
<script setup lang="ts"> 
 | 
    import { reactive, ref, onMounted } from "vue" 
 | 
    import { useRouter } from "vue-router" 
 | 
    import { gsdate, judgmentPlatform } from '@/utils/utils' 
 | 
    import { sqdCage } from '@/apis/WorkOrderAPI' 
 | 
    import { model } from '@/interface' 
 | 
    import vSearch from '@/components/common/Search.vue' 
 | 
    import vLableSelection from '@/components/common/LabelSelection.vue' 
 | 
  
 | 
    const router = useRouter() 
 | 
  
 | 
    // 搜索数据接口 
 | 
    interface form extends model { 
 | 
        startDate: string, 
 | 
        endDate: string, 
 | 
        total: number, 
 | 
        type: string, 
 | 
        statusList: string 
 | 
    } 
 | 
  
 | 
    const form = reactive<form>({ 
 | 
        capacity: 10, 
 | 
        page: 0, 
 | 
        total: 0, 
 | 
        startDate: '', 
 | 
        endDate: '', 
 | 
        mixParam: '', 
 | 
        type: '', 
 | 
        statusList: '0' 
 | 
    }) 
 | 
  
 | 
    // 申请单类型 
 | 
    let tyoe = ref<Array<any>>([ 
 | 
        { name: '工序返工', id: '0', active: false }, 
 | 
        { name: '客返品返修', id: '2', active: false }, 
 | 
        { name: '客退品返修', id: '1', active: false }, 
 | 
        { name: '工序报废', id: '3', active: false } 
 | 
    ]) 
 | 
  
 | 
    const minDate: Date = new Date(2021, 0, 1) 
 | 
  
 | 
    const maxDate: Date = new Date(new Date().getFullYear() + 1, 12, 30) 
 | 
  
 | 
    let status = ref<boolean>(false)    // 根据平台是否需要设置top 
 | 
  
 | 
    const isOpenDate = ref(false); 
 | 
  
 | 
    // 列表数据 
 | 
    const list: any = ref([]); 
 | 
    const loading = ref(false); 
 | 
    const finished = ref(false); 
 | 
    const refreshing = ref(false) 
 | 
  
 | 
    // 搜索分类标签 
 | 
    let tagList: any = reactive([ 
 | 
        { 
 | 
            id: '0', 
 | 
            name: '待审核', 
 | 
            num: '' 
 | 
        }, 
 | 
        { 
 | 
            id: '1', 
 | 
            name: '审核通过', 
 | 
            num: '' 
 | 
        }, 
 | 
        { 
 | 
            id: '2', 
 | 
            name: '审核不通过', 
 | 
            num: '' 
 | 
        }, 
 | 
        { 
 | 
            id: '3', 
 | 
            name: '已取消', 
 | 
            num: '' 
 | 
        } 
 | 
    ]) 
 | 
  
 | 
    // 跳转新建申请单 
 | 
    const jumpAdd = () => { 
 | 
  
 | 
    } 
 | 
  
 | 
    // 切换单据类型 
 | 
    const clickItem = (i: number, id: string): void => { 
 | 
        form.type = id 
 | 
        tyoe.value.forEach((item: any, index: number) => { 
 | 
            item.active = i === index; 
 | 
        }) 
 | 
    } 
 | 
  
 | 
    // 重置 
 | 
    const reset = () => { 
 | 
        form.startDate = '' 
 | 
        form.endDate = '' 
 | 
        form.mixParam = '' 
 | 
        form.page = 0 
 | 
        form.type = '' 
 | 
        finished.value = false 
 | 
        list.value = [] 
 | 
        tyoe.value.forEach((element: any) => { element.active = false }) 
 | 
        onLoad() 
 | 
    } 
 | 
  
 | 
    // 搜索框 
 | 
    const searchInput = (data: any) => { 
 | 
        form.mixParam = data 
 | 
        form.page = 0 
 | 
        finished.value = false 
 | 
        list.value = [] 
 | 
        onLoad() 
 | 
    } 
 | 
  
 | 
    // 搜索提交 
 | 
    const submit = (): void => { 
 | 
        form.page = 0 
 | 
        finished.value = false 
 | 
        list.value = [] 
 | 
        onLoad() 
 | 
    } 
 | 
  
 | 
    const openDate = () => { 
 | 
        isOpenDate.value = true 
 | 
    } 
 | 
  
 | 
    // 确认选择日期 
 | 
    const onConfirm = (values: any) => { 
 | 
        const [start, end] = values 
 | 
        form.startDate = gsdate(start) 
 | 
        form.endDate = gsdate(end) 
 | 
        isOpenDate.value = false 
 | 
    }; 
 | 
  
 | 
    // 切换分类 
 | 
    const clickTag = (id: any): void => { 
 | 
        form.statusList = id 
 | 
        form.page = 0 
 | 
        finished.value = false 
 | 
        list.value = [] 
 | 
        onLoad() 
 | 
    } 
 | 
  
 | 
    // 获取扫码值 
 | 
    const onDecode = (data: string[]): void => { 
 | 
        console.log(data) 
 | 
    } 
 | 
  
 | 
    // 跳转详情 
 | 
    const jump = (item: any) => { 
 | 
        if (item.type === 0 || item.type === 1 || item.type === 2) { 
 | 
            router.push({ name: 'reworkDetails', query: { id: item.id } }) 
 | 
        } else if (item.type === 3) { 
 | 
            router.push({ name: 'scrapDetails', query: { id: item.id } }) 
 | 
        } 
 | 
    } 
 | 
  
 | 
    // 获取工单列表数据 
 | 
    const onLoad = () => { 
 | 
        if (!finished.value) { 
 | 
            loading.value = true; 
 | 
            form.page = form.page + 1 
 | 
            sqdCage({ 
 | 
                capacity: form.capacity, 
 | 
                page: form.page, 
 | 
                model: { 
 | 
                    queryParam: form.mixParam, 
 | 
                    startDate: form.startDate, 
 | 
                    endDate: form.endDate, 
 | 
                    status: form.statusList, 
 | 
                    type: form.type 
 | 
                } 
 | 
            }).then(res => { 
 | 
                if (refreshing.value) { 
 | 
                    list.value = [] 
 | 
                    refreshing.value = false; 
 | 
                } 
 | 
                loading.value = false; 
 | 
                if (res.code === 200 && res.data.records && res.data.records.length !== 0) { 
 | 
                    form.total = res.data.total 
 | 
                    list.value.push(...res.data.records) 
 | 
                } else { 
 | 
                    finished.value = true; 
 | 
                } 
 | 
            }).catch((err: any) => { 
 | 
                loading.value = false; 
 | 
                finished.value = true; 
 | 
                if (refreshing.value) { 
 | 
                    list.value = [] 
 | 
                    refreshing.value = false; 
 | 
                } 
 | 
            }) 
 | 
        } 
 | 
    } 
 | 
  
 | 
    // 下拉刷新优化页面 
 | 
    const onRefresh = () => { 
 | 
        finished.value = false; 
 | 
        form.page = 0 
 | 
        loading.value = true; 
 | 
        onLoad(); 
 | 
    } 
 | 
  
 | 
    // 查询工单分类数量 
 | 
    // const pageCounts = () => { 
 | 
    //     pageCount({}).then(res => { 
 | 
    //         if (res.code === 200) { 
 | 
    //             tagList[0].num = String(res.data.startNum) 
 | 
    //             tagList[1].num = String(res.data.ingNum) 
 | 
    //             tagList[2].num = String(res.data.endNum) 
 | 
    //         } 
 | 
    //     }) 
 | 
    // } 
 | 
  
 | 
    onMounted(() => { 
 | 
        status.value = judgmentPlatform() 
 | 
    }) 
 | 
</script> 
 | 
  
 | 
<style lang="scss" scoped> 
 | 
    .content { 
 | 
        .content_code { 
 | 
            position: fixed; 
 | 
            right: 30px; 
 | 
            bottom: 100px; 
 | 
            img { 
 | 
                width: 138px; 
 | 
                height: 138px; 
 | 
            } 
 | 
        } 
 | 
        .content_top { 
 | 
            top: 0 !important; 
 | 
        } 
 | 
        .content_search { 
 | 
            padding: 30px; 
 | 
            background: white; 
 | 
            position: sticky; 
 | 
            top: 88px; 
 | 
            z-index: 9; 
 | 
            .Search_item { 
 | 
                margin-bottom: 40px; 
 | 
                .Search_item_label { 
 | 
                    font-size: 30px; 
 | 
                    font-weight: 500; 
 | 
                    color: #222222; 
 | 
                } 
 | 
                .Search_item_content { 
 | 
                    display: flex; 
 | 
                    align-items: center; 
 | 
                    justify-content: space-between; 
 | 
                    margin-top: 30px; 
 | 
                    .tag { 
 | 
                        display: flex; 
 | 
                        flex-wrap: wrap; 
 | 
                        align-items: center; 
 | 
                        .tag_active { 
 | 
                            background: $nav-color !important; 
 | 
                            color: #ffffff !important; 
 | 
                        } 
 | 
                        .tag_item { 
 | 
                            width: 156px; 
 | 
                            height: 70px; 
 | 
                            box-sizing: border-box; 
 | 
                            background: #F2F2F2; 
 | 
                            border-radius: 8px; 
 | 
                            font-size: 26px; 
 | 
                            font-weight: 400; 
 | 
                            color: #333333; 
 | 
                            display: flex; 
 | 
                            align-items: center; 
 | 
                            justify-content: center; 
 | 
                            margin-right: 22px; 
 | 
                            margin-bottom: 22px; 
 | 
                            &:nth-child(4n) { 
 | 
                                margin-right: 0; 
 | 
                            } 
 | 
                        } 
 | 
                    } 
 | 
                    span { 
 | 
                        font-size: 26px; 
 | 
                        font-weight: 400; 
 | 
                        color: #333333; 
 | 
                    } 
 | 
                    .Search_item_content_a { 
 | 
                        width: 308px; 
 | 
                        height: 70px; 
 | 
                        background: #F7F7F7; 
 | 
                        border-radius: 8px; 
 | 
                        border: 1px solid #EEEEEE; 
 | 
                        font-size: 26px; 
 | 
                        font-weight: 400; 
 | 
                        color: #B2B2B2; 
 | 
                        display: flex; 
 | 
                        align-items: center; 
 | 
                        justify-content: center; 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
            .content_search_x { 
 | 
                height: 24px; 
 | 
            } 
 | 
        } 
 | 
        .content_total { 
 | 
            padding: 24px 30px; 
 | 
            background: #F7F7F7; 
 | 
            font-size: 24px; 
 | 
            font-weight: 400; 
 | 
            color: #666666; 
 | 
        } 
 | 
        .content_list { 
 | 
            width: 100%; 
 | 
            height: 100%; 
 | 
            display: flex; 
 | 
            flex-direction: column; 
 | 
            .content_list_item { 
 | 
                padding: 30px; 
 | 
                display: flex; 
 | 
                flex-direction: column; 
 | 
                background: white; 
 | 
                margin-bottom: 20px; 
 | 
                &:last-child { 
 | 
                    margin-bottom: 0; 
 | 
                } 
 | 
                .content_list_item_title { 
 | 
                    display: flex; 
 | 
                    align-items: center; 
 | 
                    justify-content: space-between; 
 | 
                    span { 
 | 
                        &:first-child { 
 | 
                            font-size: 30px; 
 | 
                            font-weight: 500; 
 | 
                            color: #333333; 
 | 
                            overflow: hidden; 
 | 
                            white-space: nowrap; 
 | 
                            text-overflow: ellipsis; 
 | 
                            -o-text-overflow:ellipsis; 
 | 
                        } 
 | 
                        &:last-child { 
 | 
                            font-size: 26px; 
 | 
                            font-weight: 400; 
 | 
                            color: #F5A400; 
 | 
                            flex-shrink: 0; 
 | 
                        } 
 | 
                    } 
 | 
                } 
 | 
                .content_list_item_dj { 
 | 
                    display: flex; 
 | 
                    align-items: center; 
 | 
                    justify-content: space-between; 
 | 
                    margin: 24px 0; 
 | 
                    span { 
 | 
                        font-size: 24px; 
 | 
                        font-weight: 400; 
 | 
                        color: #666666; 
 | 
                    } 
 | 
                } 
 | 
                .content_list_item_content { 
 | 
                    padding: 24px; 
 | 
                    background: #F7F7F7; 
 | 
                    border-radius: 16px; 
 | 
                    span { 
 | 
                        font-size: 24px; 
 | 
                        font-weight: 400; 
 | 
                        color: #333333; 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
</style> 
 |