<template> 
 | 
  <div class="content"> 
 | 
    <div :class="{ content_top: status }" class="content_search"> 
 | 
      <v-Search 
 | 
        ref="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="listData.planDateStart ? 'color: #000' : ''" 
 | 
              > 
 | 
                {{ listData.planDateStart ? listData.planDateStart : "开始日期" }} 
 | 
              </div> 
 | 
              <span>-</span> 
 | 
              <div 
 | 
                class="Search_item_content_a" 
 | 
                :style="listData.planDateEnd ? 'color: #000' : ''" 
 | 
              > 
 | 
                {{ listData.planDateEnd ? listData.planDateEnd : "结束日期" }} 
 | 
              </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.isActive }" 
 | 
                  v-for="(item, i) in types" 
 | 
                  :key="item.id" 
 | 
                  @click="changeTag(i)" 
 | 
                > 
 | 
                  {{ 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">共{{ listData.total }}条数据</div> 
 | 
    <van-list 
 | 
      v-model:loading="loading" 
 | 
      :finished="finished" 
 | 
      finished-text="没有更多了~" 
 | 
      @load="loadData" 
 | 
    > 
 | 
      <div class="content_list"> 
 | 
        <div 
 | 
          class="content_list_item" 
 | 
          v-for="(item, i) in lists" 
 | 
          :key="i" 
 | 
          @click="jump(item)" 
 | 
        > 
 | 
        <!-- item头部视图 --> 
 | 
          <div class="content_list_item_top"> 
 | 
            <div class="content_list_item_top_left"> 
 | 
<!--              <span>入库单号:</span>--> 
 | 
              <span>{{ item.code }}</span> 
 | 
            </div> 
 | 
            <div class="content_list_item_top_right"> 
 | 
              <span class="warning" v-if="item.status === 0">待入库</span> 
 | 
              <span class="green" v-else-if="item.status === 1">已入库</span> 
 | 
              <span class="info" v-else-if="item.status === 2">已取消</span> 
 | 
            </div> 
 | 
          </div> 
 | 
          <!-- item主题信息部分 --> 
 | 
          <div class="content_list_item_content"> 
 | 
            <div style="margin-top: 0;" class="content_list_item_content_item"> 
 | 
              <div class="content_list_item_content_item_label">单据类型:</div> 
 | 
              <div class="content_list_item_content_item_nr"> 
 | 
                {{ orderTyepToStr(item.billType) }} 
 | 
              </div> 
 | 
            </div> 
 | 
            <div class="content_list_item_content_item"> 
 | 
              <div class="content_list_item_content_item_label">入库仓库:</div> 
 | 
              <div class="content_list_item_content_item_nr"> 
 | 
                {{ item.warehouseName + ' | ' + item.warehouseCode }} 
 | 
              </div> 
 | 
            </div> 
 | 
            <div class="content_list_item_content_item"> 
 | 
              <div class="content_list_item_content_item_label">计划入库:</div> 
 | 
              <div class="content_list_item_content_item_nr"> 
 | 
                {{ item.planDate }} 
 | 
              </div> 
 | 
            </div> 
 | 
            <div class="content_list_item_content_item"> 
 | 
              <div class="content_list_item_content_item_label">来源类型:</div> 
 | 
              <div class="content_list_item_content_item_nr"> 
 | 
                {{ tyepToStr(item.originType) }} 
 | 
              </div> 
 | 
            </div> 
 | 
            <div class="content_list_item_content_item"> 
 | 
              <div class="content_list_item_content_item_label">来源单号:</div> 
 | 
              <div class="content_list_item_content_item_nr"> 
 | 
                {{ item.originCode ? item.originCode : '-' }} 
 | 
              </div> 
 | 
            </div> 
 | 
          </div> 
 | 
        </div> 
 | 
      </div> 
 | 
    </van-list> 
 | 
    <van-calendar 
 | 
      v-model:show="isOpenDate" 
 | 
      type="range" 
 | 
      :min-date="minDate" 
 | 
      :max-date="maxDate" 
 | 
      @confirm="onConfirm" 
 | 
      color="#4275FC" 
 | 
    /> 
 | 
  </div> 
 | 
</template> 
 | 
  
 | 
<script setup lang="ts"> 
 | 
import { reactive, ref, onMounted } from "vue"; 
 | 
import { useRouter } from "vue-router"; 
 | 
import { gsdate } from "@/utils/utils"; 
 | 
// import { getList, pageCount } from "@/apis/PlanningAPI"; 
 | 
import {getBoundList, pageCount} from "@/apis/materialStorage"; 
 | 
import { judgmentPlatform } from "@/utils/utils"; 
 | 
import { model } from '@/interface' 
 | 
import { orderTyepToStr } from '@/constData' 
 | 
// import vSearch from "@/components/common/Search.vue"; 
 | 
import vLableSelection from "@/components/common/LabelSelection.vue"; 
 | 
  
 | 
// 分页/查询-----接口 
 | 
interface PagingType extends model { 
 | 
  total: number; 
 | 
  planDateEnd: string; // 计划转入开始时间 
 | 
  planDateStart: string; // 计划转入结束时间 
 | 
  code: string; // 转库单号 
 | 
  status: string; // 状态 
 | 
  originType: string; // 状态 
 | 
} 
 | 
  
 | 
// 分页/查询-----数据 
 | 
const listData = reactive<PagingType>({ 
 | 
  capacity: 10, 
 | 
  page: 0, 
 | 
  total: 0, 
 | 
  planDateEnd: "", 
 | 
  planDateStart: "", 
 | 
  code: "", 
 | 
  originType: "", 
 | 
  status: "", 
 | 
}); 
 | 
  
 | 
const router = useRouter(); 
 | 
  
 | 
const minDate: Date = new Date(new Date().getFullYear() - 1, 0, 1) 
 | 
  
 | 
const maxDate: Date = new Date(new Date().getFullYear() + 1, 12, 30) 
 | 
  
 | 
// 来源单据类型  0采购订单、1生产工单、2销售订单、3转库单、4盘点单 
 | 
let types: Array<{name: string, id: string, isActive: boolean }> = reactive( 
 | 
  [ 
 | 
    { name: '车间领料', id: '1', isActive: false }, 
 | 
    { name: '机台备料', id: '2', isActive: false }, 
 | 
    { name: '车间转库', id: '3', isActive: false }, 
 | 
    { name: '完工入库', id: '4', isActive: false }, 
 | 
    { name: '计划领料', id: '5', isActive: false }, 
 | 
    { name: '外协领料', id: '6', isActive: false }, 
 | 
    { name: '外协完工转库', id: '7', isActive: false }, 
 | 
    { name: '产品入库', id: '8', isActive: false }, 
 | 
    { name: '产品转库', id: '9', isActive: false }, 
 | 
    { name: '让步放行入库', id: '10', isActive: false }, 
 | 
    { name: '让步放行转库', id: '11', isActive: false }, 
 | 
    { name: '客返返修领料', id: '12', isActive: false }, 
 | 
    { name: '客返返修入库', id: '13', isActive: false }, 
 | 
    { name: '跨组织转库', id: '14', isActive: false }, 
 | 
    { name: '工序报废', id: '15', isActive: false }, 
 | 
    { name: '客退返修领料', id: '16', isActive: false }, 
 | 
    { name: '客退返修入库', id: '17', isActive: false }, 
 | 
    { name: '工单产出', id: '24', isActive: false }, 
 | 
    { name: '采购入库', id: '25', isActive: false }, 
 | 
    { name: '客退检验入库', id: '26', isActive: false }, 
 | 
    { name: '客返检验入库', id: '27', isActive: false }, 
 | 
    { name: '库存调整', id: '28', isActive: false }, 
 | 
    { name: '废品入库', id: '30', isActive: false } 
 | 
  ] 
 | 
) 
 | 
  
 | 
// 列表数据 
 | 
let lists: any = ref([]); 
 | 
  
 | 
// 控制打开日历插件 
 | 
const isOpenDate = ref<boolean>(false); 
 | 
  
 | 
// 根据平台是否需要设置top 
 | 
let status = ref<boolean>(false); 
 | 
  
 | 
const loading = ref<boolean>(false); 
 | 
const finished = ref<boolean>(false); 
 | 
  
 | 
// 搜索标签数据 0已生成、1已处理、2已取消 
 | 
const tagList = reactive<Array<{ id: string; name: string; num: string }>>([ 
 | 
  { 
 | 
    id: "", 
 | 
    name: "全部", 
 | 
    num: "0", 
 | 
  }, 
 | 
  { 
 | 
    id: "0", 
 | 
    name: "待入库", 
 | 
    num: "0", 
 | 
  }, 
 | 
  { 
 | 
    id: "1", 
 | 
    name: "已入库", 
 | 
    num: "0", 
 | 
  }, 
 | 
  { 
 | 
    id: "2", 
 | 
    name: "已取消", 
 | 
    num: "0", 
 | 
  } 
 | 
]); 
 | 
  
 | 
const reset = () => { 
 | 
  listData.code = ''; 
 | 
  listData.page = 0; 
 | 
  finished.value = false; 
 | 
  lists.value = []; 
 | 
  types.forEach((item: {name: string, id: string, isActive: boolean }) => { 
 | 
    item.isActive = false 
 | 
  }) 
 | 
  listData.originType = '' 
 | 
  listData.planDateEnd = '' 
 | 
  listData.planDateStart = '' 
 | 
  getLists(); 
 | 
  getPageCount() 
 | 
} 
 | 
  
 | 
// 统计数据 
 | 
const getPageCount = () => { 
 | 
  pageCount({ 
 | 
    type: 1, 
 | 
    codeOrHouse: listData.code, 
 | 
    planDateEnd: listData.planDateEnd, 
 | 
    planDateStart: listData.planDateStart, 
 | 
    billType: listData.originType 
 | 
  }).then(res => { 
 | 
    if (res.code === 200) { 
 | 
      tagList[0].num = res.data.allNum.toString() 
 | 
      tagList[1].num = res.data.startNum.toString() 
 | 
      tagList[2].num = res.data.endNum.toString() 
 | 
      tagList[3].num = res.data.cancelNum.toString() 
 | 
    } 
 | 
  }) 
 | 
} 
 | 
  
 | 
onMounted(() => { 
 | 
  status.value = judgmentPlatform(); 
 | 
  getPageCount() 
 | 
  listData.page = 0 
 | 
}); 
 | 
  
 | 
// 获取列表统计 
 | 
// const pageCounts = () => { 
 | 
//   pageCount({}).then((res) => { 
 | 
//     if (res.code === 200 && res.data) { 
 | 
//       tagList[0].num = res.data.allNum; 
 | 
//       tagList[1].num = res.data.startNum; 
 | 
//       tagList[2].num = res.data.ingNum; 
 | 
//       tagList[3].num = res.data.endNum; 
 | 
//     } 
 | 
//   }); 
 | 
// }; 
 | 
  
 | 
const tyepToStr = (type: number): string => { 
 | 
  //  <!-- 1、车间领料;2、车间备料;3、其他;4、完工入库 --> 
 | 
  for (const item of types) { 
 | 
    if (parseInt(item.id) === type) { 
 | 
      return item.name 
 | 
    } 
 | 
  } 
 | 
  return '-' 
 | 
} 
 | 
  
 | 
const loadData = (): void => { 
 | 
  console.log('加载更多') 
 | 
  getLists() 
 | 
} 
 | 
  
 | 
// 获取计划列表数据 
 | 
const getLists = (): void => { 
 | 
  if (!finished.value) { 
 | 
    loading.value = true; 
 | 
    listData.page = listData.page + 1; 
 | 
    getBoundList({ 
 | 
      capacity: listData.capacity, 
 | 
      model: { 
 | 
        type: 1, 
 | 
        codeOrHouse: listData.code, 
 | 
        planDateEnd: listData.planDateEnd, 
 | 
        planDateStart: listData.planDateStart, 
 | 
        status: listData.status, 
 | 
        billType: listData.originType 
 | 
      }, 
 | 
      page: listData.page, 
 | 
      sorts: [ 
 | 
        { 
 | 
          direction: "ASC", 
 | 
          property: "publishDate", 
 | 
        }, 
 | 
      ], 
 | 
    }) 
 | 
      .then((res: any) => { 
 | 
        loading.value = false; 
 | 
        listData.total = res.data.total; 
 | 
        if (res.code === 200) { 
 | 
          if (res.data.records.length < listData.capacity) { 
 | 
            finished.value = true; 
 | 
          } 
 | 
          if (listData.page === 1) { 
 | 
            lists.value = res.data.records; 
 | 
          } else { 
 | 
            lists.value.push(...res.data.records); 
 | 
          } 
 | 
        } 
 | 
      }) 
 | 
      .catch((err: any) => { 
 | 
  
 | 
      }) 
 | 
      .finally(() => { 
 | 
        console.log('结束') 
 | 
        loading.value = false; 
 | 
        // finished.value = true; 
 | 
      }) 
 | 
  } 
 | 
}; 
 | 
  
 | 
// 接收子组件传来的输入框值 
 | 
const searchInput = (val: string): void => { 
 | 
  listData.code = val; 
 | 
  listData.page = 0; 
 | 
  finished.value = false; 
 | 
  lists.value = []; 
 | 
  getLists(); 
 | 
  getPageCount() 
 | 
} 
 | 
  
 | 
// 搜索弹框提交 
 | 
const submit = (): void => { 
 | 
  listData.page = 0; 
 | 
  finished.value = false; 
 | 
  lists.value = []; 
 | 
  getLists(); 
 | 
  getPageCount() 
 | 
}; 
 | 
  
 | 
// 打开日期插件 
 | 
const openDate = (): void => { 
 | 
  isOpenDate.value = true; 
 | 
}; 
 | 
  
 | 
// 确认选择时间 
 | 
const onConfirm = (values: any): void => { 
 | 
  const [start, end] = values; 
 | 
  listData.planDateStart = gsdate(start); 
 | 
  listData.planDateEnd = gsdate(end); 
 | 
  isOpenDate.value = false; 
 | 
}; 
 | 
  
 | 
// 切换工序 
 | 
const changeTag = (i: any): void => { 
 | 
  types[i].isActive = !types[i].isActive; 
 | 
  listData.originType = types[i].id 
 | 
  for (const index in types) { 
 | 
    if (index != i) { 
 | 
      console.log(index, i) 
 | 
      const item = types[index] 
 | 
      item.isActive = false 
 | 
    } 
 | 
  } 
 | 
}; 
 | 
  
 | 
const clickTag = (val: string) => { 
 | 
  console.log(val) 
 | 
  listData.status = val 
 | 
  listData.page = 0; 
 | 
  finished.value = false; 
 | 
  lists.value = []; 
 | 
  getLists() 
 | 
} 
 | 
// 跳转详情 
 | 
const jump = (item: any): void => { 
 | 
  router.push({ name: "wInboundDetail", query: { id: item.id } }); 
 | 
}; 
 | 
</script> 
 | 
  
 | 
<style lang="scss" scoped> 
 | 
.content { 
 | 
  padding: 0 !important; 
 | 
  .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 { 
 | 
            padding: 22px 26px; 
 | 
            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; 
 | 
          } 
 | 
        } 
 | 
        span { 
 | 
          font-size: 26px; 
 | 
          font-weight: 400; 
 | 
          color: #333333; 
 | 
          margin: 0 30px; 
 | 
        } 
 | 
        .Search_item_content_a { 
 | 
          padding: 20px 0; 
 | 
          flex: 1; 
 | 
          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; 
 | 
      border-bottom: 1px solid #ececec; 
 | 
      background: white; 
 | 
      .content_list_item_top { 
 | 
        display: flex; 
 | 
        align-items: center; 
 | 
        justify-content: space-between; 
 | 
        .content_list_item_top_left { 
 | 
          display: flex; 
 | 
          align-items: center; 
 | 
          span { 
 | 
            font-size: 32px; 
 | 
            font-weight: 500; 
 | 
            color: #333333; 
 | 
          } 
 | 
        } 
 | 
        .content_list_item_top_right { 
 | 
          font-size: 26px; 
 | 
          font-weight: 400; 
 | 
          .created { 
 | 
            color: $nav-stateColor1 !important; 
 | 
          } 
 | 
          .warning { 
 | 
            color: $nav-stateColor5 !important; 
 | 
          } 
 | 
          .green { 
 | 
            color: $nav-stateColor6 !important; 
 | 
          } 
 | 
          .info { 
 | 
            color: $nav-stateColor3 !important; 
 | 
          } 
 | 
        } 
 | 
      } 
 | 
      .content_list_item_content { 
 | 
        padding: 24px 30px; 
 | 
        background: #f7f7f7; 
 | 
        border-radius: 16px; 
 | 
        display: flex; 
 | 
        flex-wrap: wrap; 
 | 
        justify-content: space-between; 
 | 
        margin-top: 32px; 
 | 
        .content_list_item_content_item { 
 | 
          width: 100%; 
 | 
          display: flex; 
 | 
          margin-top: 24px; 
 | 
          .content_list_item_content_item_label { 
 | 
            font-size: 24px; 
 | 
            font-weight: 400; 
 | 
            color: #666666; 
 | 
            flex-shrink: 0; 
 | 
          } 
 | 
          .content_list_item_content_item_nr { 
 | 
            font-size: 24px; 
 | 
            font-weight: 400; 
 | 
            color: #222222; 
 | 
            margin-right: 10px; 
 | 
          } 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
  } 
 | 
} 
 | 
</style> 
 |