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