| <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> |