yxk_h5_master/components/xinsoft-search-list/chooseInventorySingle.vue

445 lines
9.5 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>
<view class="search-list-container" v-show="showsearch">
<view class="search-list-out">
<view class="search-container">
<view class="back_btn" @click="toBack"><uni-icons type="arrowleft" size="30" color="#999"></uni-icons></view>
<view class="search-title">盘点方案列表</view>
<!-- <view class="search_btn1" @click="to_submit">确定</view> -->
<view class="search_btn" @click="to_search">搜索</view>
</view>
<view class="search-container2" style="height: 40px;">
<view class="search-container2-flex">
<view class="search-input" style="width: 100%;">
<uni-icons color="#bbb" size="20" type="search" class="my-uni-icon-search"></uni-icons>
<input style="text" class="input-" placeholder="请输入单据编号" v-model="code" />
<uni-icons color="#bbb" size="20" type="close" class="my-uni-icon-close" v-if="code.length > 0" @click="clearInput"></uni-icons>
</view>
</view>
</view>
<view class="search-list" style="top: 90px;">
<view class="panel flex-column">
<view class="flex-row" v-for="(item1, index1) in dataList" @click="chooseItem(item1, index1)" :key="index1" @touchmove="hiddenkeyboard">
<view class="flex-cell-single">
<span>盘点编号:</span>
{{ item1.code}}
</view>
<view class="flex-cell-single">
<span>盘点仓库:</span>
{{ item1.warehouseName }}
</view>
<view class="flex-cell-single">
<span>执行状态:</span>
{{ item1.checkStatusName }}
</view>
<uni-icons type="checkbox-filled" size="20" :color="item1.checked ? '#3699FF' : '#CECECE'" class="checkbox-filled"></uni-icons>
</view>
</view>
<view class="toloadmore" v-show="show_toloadmore && !show_search_none && !loadingmore" @click.stop="mysearchlist_">查看更多</view>
<view class="loading-container" v-if="loadingmore">加载中...</view>
<view class="search_none" v-show="show_search_none">搜索结果为空</view>
</view>
</view>
</view>
</template>
<script>
import uniIcons from '../uni-icons/uni-icons.vue';
var searchListHeight, panelHeight, query;
var timeout = '';
export default {
mounted() {},
components: {
uniIcons,
},
data() {
return {
list_: [],
list2_: [],
loadingmore: false,
lastpage: false, //是否加载完最后一页数据了
show_search_none: false,
show_toloadmore: false,
code: '',
lastIndex: 0, //加载列表翻页数据时上一页的最后一个index
pagesize: 10, //每页显示多少条
pageno: 1, //第几页
dataList: [], //显示在页面的列表数据
};
},
props: {
showsearch: {
type: Boolean
},
itemInfo_: {},
singleRow: {
type: Array,
default: function() {
return [];
}
}
},
mounted() {
},
watch: {
showsearch(newv) {
if (newv) {
this.to_search();
}
}
},
methods: {
hiddenkeyboard() {
uni.hideKeyboard();
},
chooseItem(item, index) {
for (var i = 0; i < this.dataList.length; i++) {
this.$set(this.dataList[i], 'checked', false);
}
this.$set(this.dataList[index], 'checked', true);
this.$emit('update:itemInfo_', item);
this.clearAll();
uni.hideKeyboard();
},
clearAll() {
this.list_ = [];
this.show_search_none = false;
this.loadingmore = false;
this.show_toloadmore = false;
this.code = '';
this.lastIndex = 0;
this.dataList = [];
this.$emit('update:showsearch', false);
},
mysearchlist_() {
if (!this.lastpage) {
this.mysearchinput_();
}
},
clearInput() {
this.code = '';
},
toBack() {
this.clearAll();
uni.hideKeyboard();
},
to_search() {
this.loadingmore = true;
this.show_toloadmore = false;
this.show_search_none = false;
var v = this;
this.pageno = 1;
this.dataList = [];
v.set_request(v.code);
},
set_request(d) {
let filterRes = {
pagesize: this.pagesize,
pageno: this.pageno,
QR:1,
code:this.code
};
this.loadingmore = true;
this.$http
.request({
url: '/apis/scm/inventoryPlan/istPlan',
params: filterRes,
})
.then(res => {
console.log(res.data)
this.loadingmore = false;
if (res.data.code !== 0) {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
return false;
}
if (res.data.data == undefined) {
if (this.pageno == 1) {
//搜索结果为空
this.show_search_none = true;
}
//最后一页搜索结果为空
this.show_toloadmore = false;
return false;
}
if (res.data.code == 0 && res.data.data.datas) {
this.pageno = this.pageno + 1;
this.dataList = this.dataList.concat(res.data.data.datas);
if (this.pagesize == res.data.data.datas.length) {
this.show_toloadmore = true;
} else if (this.pagesize > res.data.data.datas.length) {
//已经加载到最后一页了
this.show_toloadmore = false;
}
}
this.$nextTick(function() {
//首次加载高度没有撑满页面,继续加载下一页
query = uni.createSelectorQuery().in(this);
query
.select('.search-list')
.boundingClientRect(data => {
searchListHeight = data.height;
})
.exec();
query
.select('.panel')
.boundingClientRect(data => {
panelHeight = data.height;
if (panelHeight <= searchListHeight && res.data.data != undefined) {
this.mysearchinput_();
}
})
.exec();
});
})
.catch(err => {
this.loadingmore = false;
if (res.errMsg == 'request:fail timeout') {
uni.showToast({
title: '请求超时',
icon: 'none',
duration: 2000
});
} else {
uni.showToast({
title: '请求失败',
icon: 'none',
duration: 2000
});
}
});
},
mysearchinput_() {
this.set_request(this.code);
}
}
};
</script>
<style scoped>
.search-container,
.search-container2 {
position: fixed;
z-index: 10;
width: 100%;
background-color: #fff;
left: 0;
}
.search-container {
border-bottom: 1px solid #d9d9d9;
box-sizing: border-box;
height: 50px;
box-sizing: border-box;
}
.search-container2 {
top: 50px;
height: auto;
}
.search-container2-flex {
position: relative;
align-items: center;
height: 100%;
padding: 0 5px;
display: flex;
box-sizing: border-box;
justify-content: space-around;
flex-wrap: wrap;
}
.search-input {
position: relative;
height: 30px;
border: 1px solid #e6e6e6;
border-radius: 15px;
box-sizing: border-box;
}
.search-title {
position: absolute;
left: 60px;
right: 60px;
height: 50px;
line-height: 50px;
text-align: center;
font-size: 18px;
color: #000;
}
.searchSelectBox {
float: left;
}
.searchSelectBox .text {
margin: 0px 3%;
background: #f6f6f6;
border-radius: 40px;
width: 94%;
line-height: 30px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-size: 14px;
text-align: center;
color: #333;
}
.my-uni-icon-search {
line-height: 30px;
margin-left: 5px;
}
.input- {
position: absolute;
height: 100%;
left: 30px;
top: 0;
right: 0px;
border: none;
outline: medium;
color: #666;
font-size: 14px;
padding: 0 30px 0 0 !important;
box-sizing: border-box;
}
.my-uni-icon-close {
position: absolute;
height: 30px;
width: 30px;
right: 0px;
line-height: 30px;
top: 0;
text-align: center;
}
.search_btn,
.search_btn1,
.back_btn {
position: absolute;
width: 50px;
height: 30px;
right: 5px;
top: 10px;
font-size: 16px;
line-height: 30px;
text-align: center;
color: #007aff;
}
.search_btn1 {
right: 55px;
}
.back_btn {
left: 5px;
right: auto;
color: #999;
}
.search-list-container {
position: fixed;
z-index: 10000;
width: 100%;
left: 0;
top: 0;
bottom: 0;
background-color: rgba(0, 0, 0, 0.5);
}
.search-list-out {
position: absolute;
width: 100%;
left: 0;
top: 0px;
bottom: 0;
background-color: #fff;
z-index: 1;
}
.search-list {
position: absolute;
overflow: scroll;
bottom: 0;
width: 100%;
left: 0;
}
.panel view {
line-height: 20px;
padding: 8px 10px 8px 10px;
box-sizing: border-box;
}
.panel .flex-row:nth-of-type(even) {
//奇数
background-color: #efefef;
}
.panel .flex-row:nth-of-type(odd) {
//偶数
background-color: #f9f9fb;
}
.flex-row {
position: relative;
width: 100%;
padding-right: 45px !important;
/* display: flex; */
/* flex-direction: row; */
}
.flex-column {
display: flex;
flex-direction: column;
justify-content: center;
align-items: stretch;
}
.flex-cell {
width: 50%;
float: left;
text-align: left;
/* display: flex;
font-size: 15px;
flex: 1;
justify-content: center;
align-items: center; */
}
.flex-cell-single {
width: 100%;
float: left;
}
.flex-cell-single span,
.flex-cell span {
color: #999;
}
.search_none,
.toloadmore {
position: relative;
font-size: 16px;
width: 100%;
height: 50px;
line-height: 50px;
text-align: center;
background-color: #fff;
left: 0;
}
.toloadmore {
color: #666;
}
.loading-container {
position: relative;
font-size: 16px;
width: 100%;
height: 50px;
line-height: 50px;
text-align: center;
background-color: #fff;
left: 0;
}
.checkbox-filled {
right: 10px;
}
</style>