Commit be9cfb7a by LJM

新增盘点

parent 3a4ade81
.picking-me {
.stocktake-operate {
position: relative;
padding: 15rpx 22rpx;
.search-box {
height: 60rpx;
......@@ -65,7 +66,7 @@
margin-bottom: 11rpx;
}
.label {
width: 82rpx;
width: 110rpx;
font-size: 16rpx;
color: #919399;
}
......@@ -111,4 +112,183 @@
}
}
}
.positionListCountText {
position: absolute;
top: 30rpx;
right: 30rpx;
font-size: 21rpx;
color: #1969f9;
}
}
.total {
.t1 {
font-size: 21rpx;
color: #292b33;
}
.t2 {
font-size: 21rpx;
color: #1969f9;
}
}
::v-deep .uni-drawer__content {
width: 85% !important;
}
.uni-drawer-detail {
width: 100%;
background-color: #ffffff;
padding: 22rpx 22rpx 0 22rpx;
.title {
position: relative;
.iconfont {
position: absolute;
left: 0;
top: 0;
font-size: 30rpx;
color: #292b33;
}
.text {
font-size: 23rpx;
color: #292b33;
font-weight: bold;
}
}
.field-item {
flex-wrap: wrap;
.item {
flex: 0 0 50%;
margin-bottom: 8rpx;
.label {
width: 114rpx;
font-size: 16rpx;
color: #919399;
}
.text {
font-size: 16rpx;
color: #1969f9;
margin-left: 6rpx;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
max-width: 176rpx;
}
.tt {
font-size: 16rpx;
color: #484b59;
margin-left: 6rpx;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
max-width: 176rpx;
}
.uni-input {
width: 80%;
height: 50rpx;
background: #ffffff;
border-radius: 10rpx;
border: 1px solid #1969f9;
text-indent: 15rpx;
font-size: 16rpx;
}
}
}
.form-input {
margin-bottom: 18rpx;
.input-title {
margin-bottom: 10rpx;
.input-title-t1 {
font-size: 16rpx;
color: #484b59;
font-weight: bold;
}
}
.input-box {
.uni-input {
height: 55rpx;
background: #ffffff;
border-radius: 10rpx;
border: 1px solid #1969f9;
text-indent: 15rpx;
font-size: 16rpx;
}
}
}
.item-tit {
font-size: 20rpx;
color: #292b33;
font-weight: bold;
margin-bottom: 18rpx;
}
.bor {
height: 1px;
background-color: #f0f0f2;
margin-bottom: 17rpx;
}
.btn {
position: absolute;
bottom: 0;
left: 0;
right: 0;
width: 100%;
.btn1 {
height: 75rpx;
background: #1969f9;
font-size: 23rpx;
color: #ffffff;
}
.btn2 {
height: 75rpx;
background: #ffe0d7;
font-size: 23rpx;
color: #ff3700;
font-weight: bold;
}
}
.uni-table {
margin-top: 20rpx;
width: 100%;
height: 100%;
overflow-y: auto;
border-top: 1px solid #f0f0f2;
border-left: 1px solid #f0f0f2;
border-right: 1px solid #f0f0f2;
.uni-tr {
.uni-td {
width: 33.3%;
height: 50rpx;
font-size: 18rpx;
color: #292b33;
border-bottom: 1px solid #f0f0f2;
border-right: 1px solid #f0f0f2;
&:last-child {
border-right: none;
}
.sn {
margin-left: 6rpx;
height: 35rpx;
.uni-input {
font-size: 18rpx;
color: #292b33;
font-weight: bold;
}
.uni-arrow {
width: 14rpx;
height: 9rpx;
background: url('https://img.ichunt.com/images/ichunt/202304/10/e4c72319ad41ce1425f71cc6ec35f111.png') no-repeat center;
background-size: contain;
margin-left: 12rpx;
}
}
}
}
}
}
.popup-content {
width: 500rpx;
height: 500rpx;
box-sizing: border-box;
padding: 20rpx;
}
.picking-record {
.stocktake-record {
padding: 15rpx 22rpx;
.search-box {
height: 60rpx;
......@@ -52,23 +52,6 @@
margin-bottom: 15rpx;
flex-wrap: wrap;
border: 1px solid transparent;
.check-box-icon {
position: absolute;
right: 18rpx;
top: 17rpx;
width: 20rpx;
height: 20rpx;
background: url('https://img.ichunt.com/images/ichunt/202304/11/0bf30da3e8ce6c476c210173b5f13d51.png') no-repeat center;
background-size: contain;
display: block;
}
&.curr {
border: 1px solid #1969f9;
.check-box-icon {
background: url('https://img.ichunt.com/images/ichunt/202304/11/71a74e52e94bcf2e89f8df9817d494c6.png') no-repeat center;
background-size: contain;
}
}
.input-box {
margin-bottom: 11rpx;
flex: 0 0 50%;
......@@ -105,17 +88,6 @@
font-size: 17rpx;
color: #1969f9;
}
.pick_img_list {
flex-wrap: wrap;
.img_list {
width: 120rpx;
height: 120rpx;
background: #f5f5f7;
border-radius: 10rpx;
margin-right: 15rpx;
margin-bottom: 15rpx;
}
}
}
.btn {
position: absolute;
......@@ -130,39 +102,117 @@
}
}
}
.fix-btn {
position: fixed;
bottom: 0;
width: 100%;
left: 0;
z-index: 999;
.btn1 {
width: 128rpx;
height: 75rpx;
background: #ffffff;
border-right: 1px solid #f0f0f2;
.check-box-icon {
width: 20rpx;
height: 20rpx;
background: url('https://img.ichunt.com/images/ichunt/202304/11/0bf30da3e8ce6c476c210173b5f13d51.png') no-repeat center;
background-size: contain;
display: block;
&.curr {
background: url('https://img.ichunt.com/images/ichunt/202304/11/71a74e52e94bcf2e89f8df9817d494c6.png') no-repeat center;
background-size: contain;
}
}
}
::v-deep .uni-drawer__content {
width: 85% !important;
}
.uni-drawer-detail {
width: 100%;
background-color: #ffffff;
padding: 22rpx 22rpx 0 22rpx;
.title {
position: relative;
.iconfont {
position: absolute;
left: 0;
top: 0;
font-size: 30rpx;
color: #292b33;
}
.text {
font-size: 23rpx;
color: #292b33;
font-weight: bold;
}
}
.field-item {
flex-wrap: wrap;
.item {
flex: 0 0 50%;
margin-bottom: 8rpx;
.label {
width: 114rpx;
font-size: 16rpx;
color: #919399;
}
.text {
margin-left: 10rpx;
font-size: 20rpx;
font-size: 16rpx;
color: #1969f9;
margin-left: 6rpx;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
max-width: 176rpx;
}
.tt {
font-size: 16rpx;
color: #484b59;
margin-left: 6rpx;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
max-width: 176rpx;
}
.uni-input {
width: 80%;
height: 50rpx;
background: #ffffff;
border-radius: 10rpx;
border: 1px solid #1969f9;
text-indent: 15rpx;
font-size: 16rpx;
}
}
}
.form-input {
margin-bottom: 18rpx;
.input-title {
margin-bottom: 10rpx;
.input-title-t1 {
font-size: 16rpx;
color: #484b59;
font-weight: bold;
}
}
.input-box {
.uni-input {
height: 55rpx;
background: #ffffff;
border-radius: 10rpx;
border: 1px solid #1969f9;
text-indent: 15rpx;
font-size: 16rpx;
}
}
}
.item-tit {
font-size: 20rpx;
color: #292b33;
font-weight: bold;
margin-bottom: 18rpx;
}
.bor {
height: 1px;
background-color: #f0f0f2;
margin-bottom: 17rpx;
}
.btn {
position: absolute;
bottom: 0;
left: 0;
right: 0;
width: 100%;
.btn1 {
height: 75rpx;
background: #1969f9;
font-size: 23rpx;
color: #ffffff;
}
.btn2 {
width: calc(100% - 128rpx);
height: 75rpx;
background: #ffffff;
background: #ffe0d7;
font-size: 23rpx;
color: #ff3700;
font-weight: bold;
......
......@@ -329,12 +329,36 @@
}, {
"path": "pages/stocktake/operate",
"style": {
"navigationBarTitleText": "盘点操作"
"navigationBarTitleText": "盘点操作",
"app-plus": {
"titleNView": {
"buttons": [{
"index": "0",
"text": "盘点记录",
"fontSize": "15px",
"color": "#1969F9",
"float": "right",
"width": "100px"
}]
}
}
}
}, {
"path": "pages/stocktake/record",
"style": {
"navigationBarTitleText": "盘点记录"
"navigationBarTitleText": "盘点记录",
"app-plus": {
"titleNView": {
"buttons": [{
"index": "0",
"text": "首页",
"fontSize": "15px",
"color": "#1969F9",
"float": "right",
"width": "100px"
}]
}
}
}
}],
"globalStyle": {
......
......@@ -46,10 +46,10 @@
<view class="box row rowCenter verCenter"><image src="/static/home/@2x(3).png"></image></view>
<text class="text">移位</text>
</navigator>
<navigator class="box-li column rowCenter verCenter" url="/pages/stocktake/list" hover-class="none">
<!-- <navigator class="box-li column rowCenter verCenter" url="/pages/stocktake/list" hover-class="none">
<view class="box row rowCenter verCenter"><image src="/static/home/@2x(3).png"></image></view>
<text class="text">盘点</text>
</navigator>
</navigator> -->
<navigator class="box-li column rowCenter verCenter" url="/pages/immediatelyStockIn/index" hover-class="none">
<view class="box row rowCenter verCenter"><image src="/static/home/@2x(6).png"></image></view>
<text class="text">库存查询</text>
......
......@@ -12,7 +12,7 @@
<view class="search-bar row bothSide verCenter">
<view class="row verCenter">
<text class="iconfont icon-juxing1"></text>
<input class="uni-input" placeholder="请扫描盘点单号" placeholder-style="color:#919399" @input="handleInput" v-model="searchParams.stock_out_sn" />
<input class="uni-input" placeholder="请扫描盘点单号" placeholder-style="color:#919399" @input="handleInput" v-model="searchParams.stocktake_sn" />
</view>
<text class="iconfont icon-a-juxing11" @click="clearInput()" v-if="input_flag"></text>
</view>
......@@ -40,7 +40,7 @@
<text class="label">创建时间:</text>
<text class="tt">{{ item.create_time }}</text>
</view>
<view class="btn-box row"><navigator class="btn row rowCenter verCenter" url="/pages/stocktake/operate">选择</navigator></view>
<view class="btn-box row"><navigator class="btn row rowCenter verCenter" :url="'/pages/stocktake/operate?stocktake_id=' + item.stocktake_id + '&stocktake_sn=' + item.stocktake_sn">选择</navigator></view>
</view>
</view>
<!-- 无数据展示 -->
......@@ -65,7 +65,7 @@ export default {
array: ['盘点单号'],
list: [],
searchParams: {
stock_out_sn: ''
stocktake_sn: ''
}
};
},
......@@ -104,7 +104,7 @@ export default {
*/
clearInput() {
this.input_flag = false;
this.searchParams.stock_out_sn = '';
this.searchParams.stocktake_sn = '';
this.getData();
},
/**
......
<template>
<view class="picking-me">
<view class="search-box row bothSide verCenter">
<view class="stocktake-operate">
<view class="positionListCountText" @click="getPositionListCount()">库位列表</view>
<!-- 库位 -->
<view class="search-box row bothSide verCenter" style="margin-bottom: 13rpx;width: 85%;">
<view class="sn row rowCenter verCenter">
<picker @change="bindPickerChange" :value="index" :range="array">
<picker @change="bindPickerChange($event, 1)" :value="index" :range="array">
<view class="row verCenter">
<view class="uni-input">{{ array[index] }}</view>
<view class="uni-arrow"></view>
......@@ -12,47 +14,97 @@
<view class="search-bar row bothSide verCenter">
<view class="row verCenter">
<text class="iconfont icon-juxing1"></text>
<input class="uni-input" placeholder="请扫描或输入号码" placeholder-style="color:#919399" v-model="searchParams.stock_out_sn" @input="handleInput" />
<input class="uni-input" placeholder="请扫描或输入库位" placeholder-style="color:#919399" v-model="searchParams.position_code" @input="handleInput($event, 1)" />
</view>
<text class="iconfont icon-a-juxing11" @click="clearInput()" v-if="input_flag"></text>
<text class="iconfont icon-a-juxing11" @click="clearInput(1)" v-if="input_flag"></text>
</view>
</view>
<!-- 入库批次号 -->
<view class="search-box row bothSide verCenter" style="width: 85%;">
<view class="sn row rowCenter verCenter">
<picker @change="bindPickerChange($event, 2)" :value="index_batch_sn" :range="array_batch_sn">
<view class="row verCenter">
<view class="uni-input">{{ array_batch_sn[index_batch_sn] }}</view>
<view class="uni-arrow"></view>
</view>
</picker>
</view>
<view class="search-bar row bothSide verCenter">
<view class="row verCenter">
<text class="iconfont icon-juxing1"></text>
<input class="uni-input" placeholder="请扫描或输入入库批次号" placeholder-style="color:#919399" v-model="searchParams.stock_in_batch_sn" @input="handleInput($event, 2)" />
</view>
<text class="iconfont icon-a-juxing11" @click="clearInput(2)" v-if="input_stock_in_batch_sn"></text>
</view>
</view>
<view class="total row verCenter" style="margin-top: 15rpx;">
<text class="t1">待盘点任务数:</text>
<text class="t2">{{ total }}</text>
</view>
<view class="list row bothSide" v-if="list.length > 0">
<view class="box" v-for="(item, index) in list" :key="index">
<view class="text-item row verCenter">
<text class="label">出库单号</text>
<text class="t1">{{ item.stock_out_sn }}</text>
<text class="label">任务ID</text>
<text class="t1">{{ item.stocktake_items_id }}</text>
</view>
<view class="text-item row verCenter">
<text class="label">状 态</text>
<text class="t1">{{ item.stock_out_status_val }}</text>
<text class="label">库位</text>
<text class="t1">{{ item.position_code }}</text>
</view>
<view class="text-item row verCenter">
<text class="label" style="white-space: nowrap;width:100rpx;">待拣货任务</text>
<text class="t1">{{ item.no_pick_task_num }}</text>
<text class="label">容器</text>
<text class="t1">{{ item.container_sn }}</text>
</view>
<view class="bor row"></view>
<view class="text-item row verCenter">
<text class="label">任 务 数:</text>
<text class="tt">{{ item.items_num }}</text>
<text class="label">入库批次号:</text>
<text class="tt">{{ item.stock_in_batch_sn }}</text>
</view>
<view class="text-item row verCenter">
<text class="label">货品编码:</text>
<text class="tt">{{ item.goods_sn }}</text>
</view>
<view class="text-item row verCenter">
<text class="label">货品名称:</text>
<text class="tt">{{ item.goods_name }}</text>
</view>
<view class="text-item row verCenter">
<text class="label">标准品牌:</text>
<text class="tt">{{ item.brand_name }}</text>
</view>
<view class="text-item row verCenter">
<text class="label">入仓号:</text>
<text class="tt">{{ item.inhouse }}</text>
</view>
<view class="text-item row verCenter">
<text class="label">总 数 量:</text>
<text class="tt">{{ item.total_qty }}</text>
<text class="label">D/C:</text>
<text class="tt">{{ item.sale_name }}</text>
</view>
<view class="text-item row verCenter">
<text class="label">产地:</text>
<text class="tt">{{ item.coo }}</text>
</view>
<view class="text-item row verCenter">
<text class="label" style="white-space: nowrap;width: 110rpx;">主单仓库备注</text>
<text class="tt">{{ item.upstream_remark }}</text>
<text class="label">货品品质</text>
<text class="tt">{{ item.quality }}</text>
</view>
<view class="text-item row verCenter">
<text class="label">领取时间</text>
<text class="tt">{{ item.take_time }}</text>
<text class="label" style="white-space: nowrap;">其他批次属性</text>
<text class="tt">{{ item.other_batch_attr }}</text>
</view>
<view class="text-item row verCenter">
<text class="label">销售员:</text>
<text class="tt">{{ item.sale_name }}</text>
</view>
<view class="btn-box row verCenter"><navigator :url="'/pages/picking/sort?stock_out_id=' + item.stock_out_id + '&stock_out_sn=' + item.stock_out_sn" hover-class="none" class="btn3 row rowCenter verCenter">选择</navigator></view>
<view class="text-item row verCenter">
<text class="label">采购员:</text>
<text class="tt">{{ item.pur_user_name }}</text>
</view>
<view class="text-item row verCenter">
<text class="label">库存总数量:</text>
<text class="t1">{{ item.stock_qty }}</text>
</view>
<view class="btn-box row verCenter"><view class="btn3 row rowCenter verCenter" @click="showDrawer(item)">选择</view></view>
</view>
</view>
<!-- 无数据展示 -->
......@@ -60,6 +112,118 @@
<text class="iconfont icon-a-juxing21"></text>
<text class="text">查不到当前数据</text>
</view>
<!-- 详情 -->
<uni-drawer ref="showRight" mode="right">
<view class="uni-drawer-detail" v-if="detail">
<view class="title row rowCenter verCenter">
<text class="iconfont icon-juxing2" @click="closeDrawer()"></text>
<text class="text">详情</text>
</view>
<view class="field-item row" style="margin-top: 39rpx;">
<view class="item row verCenter">
<text class="label">任务ID:</text>
<text class="text">{{ detail.stocktake_items_id }}</text>
</view>
<view class="item row verCenter">
<text class="label">库位:</text>
<text class="text">{{ detail.position_code }}</text>
</view>
<view class="item row verCenter">
<text class="label">容 器:</text>
<text class="text">{{ detail.container_sn }}</text>
</view>
</view>
<view class="bor"></view>
<view class="item-tit">货品详情</view>
<view class="field-item row">
<view class="item row verCenter">
<text class="label">入库批次号:</text>
<text class="tt">{{ detail.stock_in_batch_sn }}</text>
</view>
<view class="item row verCenter">
<text class="label">货品编码:</text>
<text class="tt">{{ detail.goods_sn }}</text>
</view>
<view class="item row verCenter">
<text class="label">货品名称:</text>
<text class="tt">{{ detail.goods_name }}</text>
</view>
<view class="item row verCenter">
<text class="label">标准品牌:</text>
<text class="tt">{{ detail.brand_name }}</text>
</view>
<view class="item row verCenter">
<text class="label">入仓号:</text>
<text class="tt">{{ detail.inhouse }}</text>
</view>
<view class="item row verCenter">
<text class="label">D / C:</text>
<text class="tt">{{ detail.date_code }}</text>
</view>
<view class="item row verCenter">
<text class="label">产 地:</text>
<text class="tt">{{ detail.coo }}</text>
</view>
<view class="item row verCenter">
<text class="label">货品品质:</text>
<text class="tt">{{ detail.quality }}</text>
</view>
<view class="item row verCenter" style="flex: 0 0 100%;">
<text class="label">其他批次属性:</text>
<text class="tt">{{ detail.other_batch_attr }}</text>
</view>
<view class="item row verCenter">
<text class="label">销 售 员:</text>
<text class="tt">{{ detail.sale_name }}</text>
</view>
<view class="item row verCenter">
<text class="label">采 购 员:</text>
<text class="tt">{{ detail.pur_user_name }}</text>
</view>
<view class="item row verCenter" style="flex: 0 0 100%;">
<text class="label">库存总数量:</text>
<text class="text ">{{ detail.stock_qty }}</text>
</view>
<view class="item row verCenter" style="flex: 0 0 100%;">
<text class="label">盘点数量:</text>
<input type="number" placeholder="请输入盘点数量" class="uni-input" v-model="stocktake_qty" />
</view>
</view>
<view class="btn row rowCenter verCenter"><view class="row btn1 row rowCenter verCenter" style="width:100%" @click="updateStocktakeItemQty()">确认</view></view>
</view>
</uni-drawer>
<!-- 库位列表 -->
<uni-drawer ref="showRightPosition" mode="right">
<view class="uni-drawer-detail">
<view class="title row rowCenter verCenter">
<text class="iconfont icon-juxing2" @click="closeDrawer()"></text>
<text class="text">库位列表</text>
</view>
<view class="uni-table">
<view class="uni-tr row verCenter">
<view class="uni-td row verCenter rowCenter">
<text>库位编码</text>
<view class="sn row rowCenter verCenter">
<picker @change="bindPickerChange($event, 3)" :value="indexFilter" :range="filterArr">
<view class="row verCenter">
<view class="uni-input">{{ filterArr[indexFilter] }}</view>
<view class="uni-arrow"></view>
</view>
</picker>
</view>
</view>
<view class="uni-td row verCenter rowCenter">待盘点任务数</view>
<view class="uni-td row verCenter rowCenter">已盘点任务数</view>
</view>
<view class="uni-tr row verCenter" v-for="(item, index) in positionListCount" :key="index">
<view class="uni-td row verCenter rowCenter">{{ item.position_code }}</view>
<view class="uni-td row verCenter rowCenter">{{ item.exactly_zero }}</view>
<view class="uni-td row verCenter rowCenter">{{ item.greater_than_zero }}</view>
</view>
</view>
<view class="btn row rowCenter verCenter"><view class="row btn2 row rowCenter verCenter" style="width:100%" @click="closeDrawer()">关闭</view></view>
</view>
</uni-drawer>
</view>
</template>
......@@ -69,22 +233,38 @@ import debounce from 'lodash/debounce';
export default {
data() {
return {
input_flag: false,
input_flag: false, //库位
input_stock_in_batch_sn: false, //入库批次号
index: 0,
array: ['出库单号'],
array: ['库位'],
filterArr: ['全部', '已盘完', '未盘完'],
indexFilter: 0,
array_batch_sn: ['入库批次号'],
index_batch_sn: 0,
stocktake_qty: '',
list: [],
page: 1,
limit: 20,
limit: 50,
total: 0,
hasMoreData: true, //是否分页加载
stocktake_sn: '',
detail: {},
positionListCount: [],
searchParams: {
stock_out_sn: '' //出库单号
stocktake_id: '', //盘点单主键id
position_code: '', //库位编码
stock_in_batch_sn: '' //入库批次号
}
};
},
onLoad(options) {
this.searchParams.stocktake_id = options.stocktake_id || '';
this.stocktake_sn = options.stocktake_sn || '';
},
onNavigationBarButtonTap(e) {
if (e.index == 0) {
uni.reLaunch({
url: '/pages/index/index'
uni.navigateTo({
url: '/pages/stocktake/record?stocktake_id=' + this.searchParams.stocktake_id
});
}
},
......@@ -99,51 +279,122 @@ export default {
this.getData();
},
methods: {
bindPickerChange: function(e) {
showDrawer(data) {
this.$refs.showRight.open();
this.detail = data;
this.stocktake_qty = data.stock_qty;
},
closeDrawer() {
this.$refs.showRight.close();
this.$refs.showRightPosition.close();
},
bindPickerChange: function(e, type) {
console.log('picker发送选择改变,携带值为', e.detail.value);
this.index = e.detail.value;
if (type == 1) {
this.index = e.detail.value;
} else if (type == 2) {
this.index_batch_sn = e.detail.value;
} else if (type == 3) {
this.indexFilter = e.detail.value;
this.getPositionListCount(parseInt(e.detail.value) + 1);
}
},
/**
* 清空数据
*/
clearInput() {
this.input_flag = false;
this.searchParams.stock_out_sn = '';
clearInput(type) {
if (type == 1) {
this.input_flag = false;
this.searchParams.position_code = '';
} else if (type == 2) {
this.input_stock_in_batch_sn = false;
this.searchParams.stock_in_batch_sn = '';
}
this.getData();
},
/**
* 单号搜索
* @param {Object} event
*/
handleInput: debounce(function(event) {
handleInput: debounce(function(event, type) {
this.resetChange();
var val = event.target.value;
this.searchParams.stock_out_sn = '';
if (val) {
this.input_flag = true;
this.searchParams.stock_out_sn = val;
} else {
this.input_flag = false;
if (type == 1) {
this.searchParams.position_code = '';
if (val) {
this.input_flag = true;
this.searchParams.position_code = val;
} else {
this.input_flag = false;
}
} else if (type == 2) {
this.searchParams.stock_in_batch_sn = '';
if (val) {
this.input_stock_in_batch_sn = true;
this.searchParams.stock_in_batch_sn = val;
} else {
this.input_stock_in_batch_sn = false;
}
}
this.getData();
}, 500),
/**
* 获取列表数据
* 库位列表
*/
getPositionListCount(type) {
this.$refs.showRightPosition.open();
this.request(API.positionListCount, 'POST', { stocktake_id: this.searchParams.stocktake_id, type: type || 1 }, true).then(res => {
if (res.code === 0) {
this.positionListCount = res.data.list;
} else {
uni.showToast({
title: res.msg,
icon: 'none'
});
}
});
},
/**
* 获取盘点操作列表
*/
getData() {
this.request(API.getTakedList, 'POST', { page: this.page, limit: this.limit, ...this.searchParams }, false).then(res => {
this.request(API.stocktakeOperateList, 'POST', { page: this.page, limit: this.limit, ...this.searchParams }, false).then(res => {
if (res.code === 0) {
uni.setNavigationBarTitle({
title: this.stocktake_sn
});
if (res.data.list.length > 0) {
this.hasMoreData = true;
this.list = this.list.concat(res.data.list);
this.total = res.data.total;
} else {
this.hasMoreData = false;
}
} else {
uni.showToast({
title: res.msg,
icon: 'error'
icon: 'none'
});
}
});
},
updateStocktakeItemQty() {
this.request(API.updateStocktakeItemQty, 'POST', { stocktake_items_id: this.detail.stocktake_items_id, stocktake_qty: this.stocktake_qty }, true).then(res => {
if (res.code === 0) {
uni.showToast({
title: '操作成功',
icon: 'success'
});
setTimeout(() => {
this.resetChange();
this.getData();
this.closeDrawer();
}, 2000);
} else {
uni.showModal({
itle: '提示',
content: res.msg,
showCancel: false
});
}
});
......@@ -160,5 +411,5 @@ export default {
</script>
<style scoped lang="scss">
@import '@/assets/css/tallyReceive/operate.scss';
@import '@/assets/css/stocktake/operate.scss';
</style>
<template>
<view class="picking-record">
<view class="stocktake-record">
<view class="search-box row bothSide verCenter">
<view class="sn row rowCenter verCenter">
<picker @change="bindPickerChange" :value="index" :range="array">
......@@ -12,23 +12,29 @@
<view class="search-bar row bothSide verCenter">
<view class="row verCenter">
<text class="iconfont icon-juxing1"></text>
<input class="uni-input" placeholder="请输入查询" placeholder-style="color:#919399" focus v-model="searchParams.all_search_keyword" @input="handleInput" />
<input class="uni-input" placeholder="请输入查询" placeholder-style="color:#919399" focus v-model="searchParams.keyword" @input="handleInput" />
</view>
<text class="iconfont icon-a-juxing11" @click="clearInput()" v-if="input_flag"></text>
</view>
</view>
<view class="list" v-if="list.length > 0">
<view class="box row" v-for="(item, index) in list" :key="index" :class="{ curr: filter_list[index] }">
<view class="check-box-icon" @click="filterChange(index)"></view>
<view class="box row" v-for="(item, index) in list" :key="index">
<view class="input-box row verCenter curr">
<text class="label">入库批次号:</text>
<text class="tt">{{ item.stock_in_batch_sn }}</text>
<text class="label">任务ID:</text>
<text class="tt">{{ item.stocktake_items_id }}</text>
</view>
<view class="input-box row verCenter curr">
<text class="label">库位:</text>
<text class="tt">{{ item.position_code }}</text>
</view>
<view class="input-box row verCenter">
<text class="label">容 器:</text>
<text class="tt">{{ item.container_sn }}</text>
</view>
<view class="bor"></view>
<view class="input-box row verCenter curr">
<text class="label">入库批次号:</text>
<text class="text">{{ item.stock_in_batch_sn }}</text>
</view>
<view class="input-box row verCenter">
<text class="label">货品编码:</text>
<text class="text">{{ item.goods_sn }}</text>
......@@ -42,6 +48,10 @@
<text class="text">{{ item.brand_name }}</text>
</view>
<view class="input-box row verCenter">
<text class="label">入 仓 号:</text>
<text class="text">{{ item.inhouse }}</text>
</view>
<view class="input-box row verCenter">
<text class="label">D / C:</text>
<text class="text">{{ item.date_code }}</text>
</view>
......@@ -51,52 +61,29 @@
</view>
<view class="input-box row verCenter">
<text class="label">货品品质:</text>
<text class="text">{{ item.quality_val }}</text>
</view>
<view class="input-box row verCenter">
<text class="label">入 仓 号:</text>
<text class="text">{{ item.inhouse }}</text>
<text class="text">{{ item.quality_format }}</text>
</view>
<view class="input-box row verCenter">
<text class="label">其他批次属性:</text>
<text class="text">{{ item.other_batch_attr }}</text>
</view>
<view class="input-box row verCenter">
<text class="label">拣货数量:</text>
<text class="text" style="color: #F98119;">{{ item.pick_qty }}</text>
</view>
<view class="input-box row verCenter">
<text class="label">拣货库位:</text>
<text class="text">{{ item.position_name }}</text>
</view>
<view class="input-box row verCenter">
<text class="label">拣 货 员:</text>
<text class="text">{{ item.create_name }}</text>
</view>
<view class="input-box row verCenter">
<text class="label">销 售 员:</text>
<text class="label">销售员:</text>
<text class="text">{{ item.sale_name }}</text>
</view>
<view class="input-box row verCenter">
<text class="label">拣货时间</text>
<text class="text">{{ item.create_time }}</text>
<text class="label">采购员</text>
<text class="text">{{ item.pur_user_name }}</text>
</view>
<view class="input-box row">
<text class="label">主单仓库备注</text>
<text class="desc">{{ item.upstream_remark }}</text>
<view class="input-box row verCenter">
<text class="label">库存总数量</text>
<text class="tt">{{ item.stock_qty }}</text>
</view>
<view class="input-box row">
<text class="label">仓库备注:</text>
<text class="text">{{ item.remark }}</text>
</view>
<view class="input-box row" v-if="item.customer_material_number">
<text class="label">客户物料编码:</text>
<text class="text">{{ item.customer_material_number }}</text>
</view>
<view class="input-box row" style="flex: 0 0 100%;">
<text class="label">拣货照片:</text>
<view class="pick_img_list row"><image :lazy-load="true" @click="previewChange(item.pick_img_list, i)" class="img_list" :src="v.small_image_url" v-for="(v, i) in item.pick_img_list" :key="i" mode="aspectFill"></image></view>
<text class="label">盘点数量:</text>
<text class="tt">{{ item.stocktake_qty }}</text>
</view>
<view class="btn row rowCenter verCenter" @click="showDrawer(item)">修改</view>
</view>
</view>
<!-- 无数据展示 -->
......@@ -104,13 +91,98 @@
<text class="iconfont icon-a-juxing21"></text>
<text class="text">查不到当前数据</text>
</view>
<view class="fix-btn row verCenter">
<view class="btn1 row rowCenter verCenter" @click="allChnage()">
<text class="check-box-icon" :class="{ curr: filter_list.length > 0 && filter_list.length == filter_id.length }"></text>
<text class="text">{{ filter_id.length == 0 ? '全选' : filter_id.length }}</text>
<!-- 详情 -->
<uni-drawer ref="showRight" mode="right">
<view class="uni-drawer-detail" v-if="detail">
<view class="title row rowCenter verCenter">
<text class="iconfont icon-juxing2" @click="closeDrawer()"></text>
<text class="text">详情</text>
</view>
<view class="field-item row" style="margin-top: 39rpx;">
<view class="item row verCenter">
<text class="label">任务ID:</text>
<text class="text">{{ detail.stocktake_items_id }}</text>
</view>
<view class="item row verCenter">
<text class="label">库位:</text>
<text class="text">{{ detail.position_code }}</text>
</view>
<view class="item row verCenter">
<text class="label">容 器:</text>
<text class="text">{{ detail.container_sn }}</text>
</view>
</view>
<view class="bor"></view>
<view class="item-tit">货品详情</view>
<view class="field-item row">
<view class="item row verCenter">
<text class="label">入库批次号:</text>
<text class="tt">{{ detail.stock_in_batch_sn }}</text>
</view>
<view class="item row verCenter">
<text class="label">货品编码:</text>
<text class="tt">{{ detail.goods_sn }}</text>
</view>
<view class="item row verCenter">
<text class="label">货品名称:</text>
<text class="tt">{{ detail.goods_name }}</text>
</view>
<view class="item row verCenter">
<text class="label">标准品牌:</text>
<text class="tt">{{ detail.brand_name }}</text>
</view>
<view class="item row verCenter">
<text class="label">入仓号:</text>
<text class="tt">{{ detail.inhouse }}</text>
</view>
<view class="item row verCenter">
<text class="label">D / C:</text>
<text class="tt">{{ detail.date_code }}</text>
</view>
<view class="item row verCenter">
<text class="label">产 地:</text>
<text class="tt">{{ detail.coo }}</text>
</view>
<view class="item row verCenter">
<text class="label">货品品质:</text>
<text class="tt">{{ detail.quality }}</text>
</view>
<view class="item row verCenter" style="flex: 0 0 100%;">
<text class="label">其他批次属性:</text>
<text class="tt">{{ detail.other_batch_attr }}</text>
</view>
<view class="item row verCenter">
<text class="label">销 售 员:</text>
<text class="tt">{{ detail.sale_name }}</text>
</view>
<view class="item row verCenter">
<text class="label">采 购 员:</text>
<text class="tt">{{ detail.pur_user_name }}</text>
</view>
<view class="item row verCenter" style="flex: 0 0 100%;">
<text class="label">库存总数量:</text>
<text class="text ">{{ detail.stock_qty }}</text>
</view>
<view class="item row verCenter" style="flex: 0 0 100%;">
<text class="label">盘点数量:</text>
<input type="number" placeholder="请输入盘点数量" class="uni-input" v-model="stocktake_qty" />
</view>
</view>
<view class="bor"></view>
<view class="field-item row">
<view class="item row verCenter" style="flex: 0 0 100%;">
<text class="label">盘点人:</text>
<text class="tt ">{{ detail.stocktake_user }}</text>
</view>
<view class="item row verCenter" style="flex: 0 0 100%;">
<text class="label">盘点时间:</text>
<text class="tt ">{{ detail.stocktake_time }}</text>
</view>
</view>
<view class="btn row rowCenter verCenter"><view class="row btn1 row rowCenter verCenter" style="width:100%" @click="updateStocktakeItemQty()">确认</view></view>
</view>
<view class="btn2 row rowCenter verCenter" @click="cancelPicking">取消拣货</view>
</view>
</uni-drawer>
</view>
</template>
......@@ -126,19 +198,25 @@ export default {
array: ['全量搜索'],
noexebshowFalg: true, //控制是否会触发生命周期
input_flag: false,
all_flag: false, //全选标记
page: 1,
limit: 50,
hasMoreData: true, //是否分页加载
list: [],
filter_list: [], //筛选已选中的列表
filter_id: [], //过滤id
detail: {},
stocktake_qty: '', //盘点数量
searchParams: {
stock_out_sn: '',
all_search_keyword: ''
stocktake_id: '',
keyword: ''
}
};
},
onNavigationBarButtonTap(e) {
if (e.index == 0) {
uni.reLaunch({
url: '/pages/index/index'
});
}
},
onReachBottom() {
if (!this.hasMoreData) {
return;
......@@ -147,7 +225,7 @@ export default {
this.getData();
},
onLoad(options) {
this.searchParams.stock_out_sn = options.stock_out_sn || '';
this.searchParams.stocktake_id = options.stocktake_id || '';
},
onShow() {
if (this.noexebshowFalg) {
......@@ -156,53 +234,24 @@ export default {
}
},
methods: {
showDrawer(data) {
this.$refs.showRight.open();
this.detail = data;
this.stocktake_qty = data.stock_qty;
},
closeDrawer() {
this.$refs.showRight.close();
},
bindPickerChange: function(e) {
console.log('picker发送选择改变,携带值为', e.detail.value);
this.index = e.detail.value;
},
/**
* 全选
*/
allChnage() {
this.all_flag = !this.all_flag;
this.filter_list = createArray(this.list.length, this.all_flag);
if (this.all_flag) {
this.filter_id = this.list.map(function(item) {
return item.id;
});
} else {
this.filter_id = [];
}
},
/**
* 找出false对应的下标
* @param {Object} arr
* @param {Object} target
*/
findIndex(arr, target) {
const result = [];
arr.map((item, index) => {
if (item === target) {
result.push(index);
}
});
return result;
},
/**
* 筛选过滤出选中的元素
*/
filterChange(index) {
this.$set(this.filter_list, index, (this.filter_list[index] = !this.filter_list[index]));
let filter_arr = this.findIndex(this.filter_list, true);
this.filter_id = filter_arr.map(i => this.list[i].id);
},
/**
* 清空数据
*/
clearInput() {
this.resetChange();
this.searchParams.all_search_keyword = '';
this.searchParams.stock_out_sn = '';
this.searchParams.keyword = '';
this.input_flag = false;
this.getData();
},
......@@ -215,89 +264,54 @@ export default {
var val = event.target.value;
if (val) {
this.input_flag = true;
this.searchParams.all_search_keyword = val;
this.searchParams.keyword = val;
} else {
this.input_flag = false;
this.searchParams.all_search_keyword = '';
this.searchParams.keyword = '';
}
this.getData();
}, 500),
/**
* 预览图片
* @param {Object} img
* @param {Object} index
*/
previewChange(arr, index) {
var data = arr.map(item => {
return item.big_image_url;
});
this.noexebshowFalg = false;
uni.previewImage({
current: index,
urls: data
});
},
/**
* 取消拣货
*/
cancelPicking() {
if (this.filter_id.length == 0) {
uni.showToast({
title: '请勾选货物',
icon: 'error'
});
return false;
}
uni.showModal({
title: '提示',
content: '确定要取消拣货吗?',
showCancel: true,
success: res => {
if (res.confirm) {
this.request(API.cancelPicking, 'POST', { pick_id: this.filter_id.join(',') }, true).then(res => {
if (res.code === 0) {
uni.showToast({
title: '取消成功',
icon: 'success'
});
setTimeout(() => {
this.resetChange();
this.filter_id = [];
this.getData();
this.closeDrawer();
}, 2000);
} else {
uni.showModal({
title: '提示',
content: res.msg,
showCancel: false
});
}
});
} else if (res.cancel) {
// 用户点击取消操作
console.log('用户点击取消');
}
}
});
},
/**
* 获取列表数据
*/
getData() {
this.request(API.getAllPickedList, 'POST', { page: this.page, limit: this.limit, ...this.searchParams }, true).then(res => {
this.request(API.getStockTakeRecord, 'POST', { page: this.page, limit: this.limit, ...this.searchParams }, true).then(res => {
if (res.code === 0) {
if (res.data.list.length > 0) {
this.hasMoreData = true;
this.list = this.list.concat(res.data.list);
this.filter_list = createArray(this.list.length, false);
} else {
this.hasMoreData = false;
}
} else {
uni.showToast({
title: res.msg,
icon: 'error'
icon: 'none'
});
}
});
},
/**
* 更新盘点数量
*/
updateStocktakeItemQty() {
this.request(API.updateStocktakeItemQty, 'POST', { stocktake_items_id: this.detail.stocktake_items_id, stocktake_qty: this.stocktake_qty }, true).then(res => {
if (res.code === 0) {
uni.showToast({
title: '操作成功',
icon: 'success'
});
setTimeout(() => {
this.resetChange();
this.getData();
this.closeDrawer();
}, 2000);
} else {
uni.showModal({
itle: '提示',
content: res.msg,
showCancel: false
});
}
});
......
......@@ -311,6 +311,11 @@ export default {
this.filter_id = this.list.map(function(item) {
return item.stock_in_item_id;
});
let is_watch_arr = this.list.map(function(item) {
return item.is_watch;
});
this.is_watch = is_watch_arr.includes(1);
} else {
this.filter_id = [];
}
......
const API_BASE_USER = 'http://user.liexindev.net'; //用户系统
const API_BASE_PUR = 'http://pur.liexindev.net'; //采购系统
const API_BASE = 'http://wms.liexindev.net'; //WMS系统
const API_BASE_OSS = 'http://image.liexindev.net'; //oss系统
// const API_BASE_USER = 'http://user.liexindev.net'; //用户系统
// const API_BASE_PUR = 'http://pur.liexindev.net'; //采购系统
// const API_BASE = 'http://wms.liexindev.net'; //WMS系统
// const API_BASE_OSS = 'http://image.liexindev.net'; //oss系统
// const API_BASE_USER = 'https://user.ichunt.net'; //用户系统
// const API_BASE_PUR = 'https://purchase.ichunt.net'; //采购系统
// const API_BASE = 'https://wms.ichunt.net'; //WMS系统
// const API_BASE_OSS = 'https://image.ichunt.net'; //oss系统
const API_BASE_USER = 'https://user.ichunt.net'; //用户系统
const API_BASE_PUR = 'https://purchase.ichunt.net'; //采购系统
const API_BASE = 'https://wms.ichunt.net'; //WMS系统
const API_BASE_OSS = 'https://image.ichunt.net'; //oss系统
const API = {
......@@ -286,7 +286,23 @@ const API = {
/**
* H5盘点任务列表
* */
getStocktakeList: API_BASE + '/api/h5/stocktake/getStocktakeList'
getStocktakeList: API_BASE + '/api/h5/stocktake/getStocktakeList',
/**
* H5盘点操作列表
* */
stocktakeOperateList: API_BASE + '/api/h5/stocktake/stocktakeOperateList',
/**
* H5设置盘点数量
* */
updateStocktakeItemQty: API_BASE + '/api/h5/stocktake/updateStocktakeItemQty',
/**
* H5盘点记录
* */
getStockTakeRecord: API_BASE + '/api/h5/stocktake/getStockTakeRecord',
/**
* H5盘点库位列表统计
* */
positionListCount: API_BASE + '/api/h5/stocktake/positionListCount'
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment