202 lines
4.7 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<up-popup :show="state.show" @close="close">
<view class="input-box">
<view class="input-item">
<up-input placeholder="单据编号" border="none" clearable inputAlign="left" v-model="state.queryString"
@change="changeFun">
<template #prefix>
<up-icon name="scan" color="#2979ff" size="24"></up-icon>
</template>
</up-input>
</view>
</view>
<view class="warehouse-listBox" ref="listBoxRef">
<scroll-view id="scroll-box" class="scroll-box" scroll-y="true" :style="{'height':state.scrollHeight+'px'}"
@scrolltolower="fnScrollBottom()">
<view class="list-box-list" v-if="state.dataList.length > 0">
<view class="data-item" v-for="(item, index) in state.dataList" :key="index"
@click="toViewPopup(item)">
<view class="tit">单据编号{{item.FBillNo}}</view>
<view class="line-p"></view>
<view class="b-font">日期{{item.FDateFormat}}</view>
</view>
</view>
</scroll-view>
</view>
</up-popup>
</template>
<script lang="ts" setup>
import { reactive, nextTick, onMounted, ref, computed, defineEmits } from 'vue';
import { onLoad, onShow, onReachBottom, } from '@dcloudio/uni-app'
import { PRD_MORPTList, stockList } from '../../common/request/api/api';
import { parseTime } from '../../utils/tools.js';
const emits = defineEmits(['listPopupClose', 'listPopupData', 'toViewPopupData'])
const state = reactive({
show: false,
queryString: '',
dataList: [],
scrollHeight: 0,
page: {
pageIndex: 1,
pageSize: 20,
totalCount: 0
}
})
//选中数据传回主页面
const toViewPopup = (row : any) => {
emits('toViewPopupData',row)
}
const openFun = () => {
state.show = true
nextTick(() => {
if (state.show) {
const query = uni.createSelectorQuery().in(this);
query.select(".warehouse-listBox").boundingClientRect((data : any) => {
state.scrollHeight = data.height
}).exec();
fnDataList()
}
})
}
const close = () => { state.show = false }
/**
* 获取数据
*/
const debounceTimer = ref()
const changeFun = (e : any) => {
if (debounceTimer.value !== null) clearTimeout(debounceTimer.value)
debounceTimer.value = setTimeout(() => {
state.queryString = e
if (state.queryString !== '') fnDataList()
}, 500)
}
const fnScrollBottom = () => {
console.log(state.page.pageIndex * state.page.pageSize, state.page.totalCount);
if (state.page.pageIndex * state.page.pageSize <= state.page.totalCount) {
state.page.pageIndex++;
uni.showLoading({ mask: true });
setTimeout(() => {
fnDataList();
}, 500);
}
}
const fnDataList = () => {
let param = {
queryString: state.queryString,
pageIndex: state.page.pageIndex,
pageSize: state.page.pageSize,
};
if (state.page.pageIndex == 1) {
uni.showLoading({ mask: true });
}
PRD_MORPTList(param).then((res : any) => {
uni.hideLoading();
if (res.code == 200) {
let result = res.data;
let dataArray = result.list;
dataArray.forEach(p => {
p.FDateFormat = parseTime(p.FDate, '{y}-{m}-{d}');
});
if (state.page.pageIndex == 1) { state.dataList = dataArray; }
else { state.dataList = state.dataList.concat(dataArray); }
state.page.totalCount = result.total;
if (state.dataList.length == state.page.totalCount) { }
}
});
}
defineExpose({
openFun,
close
})
</script>
<style scoped lang="scss">
:deep(.u-popup__content) {
border-top-left-radius: 16rpx;
border-top-right-radius: 16rpx;
box-sizing: border-box;
padding: 32rpx;
background-color: #F5F5F5;
min-height: 85vh;
display: flex;
flex-direction: column;
}
.popupText {
text-align: center;
font-size: 32rpx;
margin: 16rpx 0;
}
.input-box {
background-color: white;
box-sizing: border-box;
padding: 0 16rpx;
border-radius: 24rpx;
margin: 0 0 16rpx 0;
.u-textarea {
padding: 0 !important;
font-size: 24rpx !important;
color: #999999 !important;
}
.input-item {
box-sizing: border-box;
padding: 16rpx 0;
color: #222222;
font-size: 28rpx;
font-weight: 400;
.item-title {
//font-weight: 500;
font-size: 32rpx;
color: #333333;
}
.item-text {
font-weight: 400;
font-size: 27rpx;
color: #999999;
}
}
}
.warehouse-listBox {
display: block;
flex: 1;
.list-box-list {
width: 100%;
// margin: 20rpx auto;
.data-item {
border: 1px solid #efeaea;
border-radius: 20rpx;
box-shadow: 0rpx 15rpx 15rpx #efeaea;
padding: 20rpx 20rpx 0;
margin-bottom: 20rpx;
background-color: #ffffff;
.tit {
font-size: 30rpx;
font-weight: bold;
padding: 20rpx 0;
}
.line-p {
border: 1px solid #efeaea;
}
.b-font {
font-size: 25rpx;
padding: 20rpx 0;
}
}
}
}
</style>