#
zjj
7 天以前 ee9e214c91e6a98a7c7d6d1f8a9eacb26227f882
#
4个文件已修改
2个文件已添加
541 ■■■■■ 已修改文件
locale/en.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
locale/zh-Hans.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages.json 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/home/index.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/outbound/wavePick.vue 286 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/outbound/wavePickItem.vue 234 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
locale/en.json
@@ -30,6 +30,7 @@
    "stationUnbinding":"Station Unbinding",
    "bindAndInbound":"Binding And Inbound",
    "quickPicking":"Quick Picking",
    "wavePick":"Wave Picking",
    "outLogin":"Login Out",
    "language-change-confirm":"chenge",
    "hello":"Hello, welcome to log in to the WMS system!",
locale/zh-Hans.json
@@ -31,6 +31,7 @@
        "stationUnbinding":"站点解绑",
        "bindAndInbound":"绑定&入库",
        "quickPicking":"快速拣货",
        "wavePick":"波次拣货",
        "outLogin":"退出登录",
        "language-change-confirm":"确定切换?",
        "hello":"您好,欢迎登录WMS系统!",
pages.json
@@ -13,6 +13,18 @@
            }
        },
        {
            "path": "pages/outbound/wavePick",
            "style": {
                "navigationBarTitleText": "波次拣货"
            }
        },
        {
            "path": "pages/outbound/wavePickItem",
            "style": {
                "navigationBarTitleText": "波次拣货"
            }
        },
        {
            "path": "pages/rece/standard",
            "style": {
                "navigationBarTitleText": "标准收货"
pages/home/index.vue
@@ -145,6 +145,13 @@
                    <text>{{$t('index.quickPicking')}}</text>
                </navigator>
            </view>
            <view class="cu-item">
                <navigator hover-class='none' url="/pages/outbound/wavePick" navigateTo>
                    <view class="cuIcon-apps text-blue">
                    </view>
                    <text>{{$t('index.wavePick')}}</text>
                </navigator>
            </view>
        </view>
pages/outbound/wavePick.vue
New file
@@ -0,0 +1,286 @@
<template>
    <view class="has-foot">
        <form>
            <view class="cu-form-group" v-show="!isconfirm">
                <view class="title">波次号</view>
                <input placeholder="请扫描波次号" v-model="barcode" @input="search()" focus></input>
                <text class='cuIcon-close text-gray margin-right-xs' v-show="barcode!==''" @click="clearCode"></text>
            </view>
        </form>
        <view class="cu-list det menu sm-border  padding">
            <block  v-for="(item, index) in list" :key="index">
                <view  class="cu-list det menu  "  @click="clickTaskItem(index)">
                <view class="cu-bar bg-white solid-bottom margin-top-sm">
                    <view class="action">
                        <view class="index">
                            {{index+1}}
                        </view>
                    </view>
                    <view class="content2">
                        <text class="text-gray"><text class="text-black ">{{item.exceStatus$}}</text></text>
                    </view>
                </view>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-gray">波次号:<text class="text-black ">{{item.code}}</text></text>
                    </view>
                </view>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-gray">创建时间:<text class="text-black ">{{item.createTime$}}</text></text>
                    </view>
                </view>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-gray">订单数:<text class="text-black ">{{item.orderNum}}</text></text>
                    </view>
                    <view class="content">
                        <text class="text-gray">品类数量:<text class="text-black ">{{item.groupQty}}</text></text>
                    </view>
                </view>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-gray">总数量:<text class="text-black ">{{item.anfme}}</text></text>
                    </view>
                    <view class="content">
                        <text class="text-gray">策略:<text class="text-black ">{{item.matnrCode}}</text></text>
                    </view>
                </view>
                </view>
            </block>
        </view>
        <view class="text-blue text-right padding-lr" v-show="isconfirm">
            本次收货总数量:{{allCount}}
        </view>
        <view class="cu-form-group " v-show="isconfirm">
            <view class="title">收货区</view>
            <uni-data-select v-model="whAreaId" :localdata="range" placement="top"
                @change="selChange"></uni-data-select>
        </view>
        <view class="cu-bar btn-group foot" v-show="!isconfirm">
            <button class="cu-btn text-blue line-blue shadow" @click="clear">清空</button>
            <button class="cu-btn bg-blue shadow-blur" @click="next">下一步</button>
        </view>
        <view class="cu-bar btn-group foot" v-show="isconfirm">
            <button class="cu-btn text-blue line-blue shadow" @click="prev">上一步</button>
            <button class="cu-btn bg-blue shadow-blur" @click="confirm">提交收货</button>
        </view>
    </view>
</template>
<script>
    import {
        request
    } from '../../common/request.js'
    import {
        mapState,
        mapMutations,
        mapActions,
        mapGetters
    } from 'vuex';
    export default {
        data() {
            return {
                isClickItem:false,
                clickItem:'',
                QRbarcode:null,
                barcode: '',
                whAreaId: '',
                list: [],
                range: [],
                isconfirm: false,
                itemStyle: {
                        backgroundColor: '#42b983',
                        borderColor: '#42b983'
                },
            }
        },
        computed: {
            ...mapState('user', ['dynamicFields']),
            allCount() {
                return this.list.reduce((acc, row) => +row.receiptQty + acc, 0)
            }
        },
        mounted() {
            this.search()
        },
        methods: {
            clickTaskItem(index){
                let that = this
                uni.navigateTo({
                    url: "./wavePickItem",
                    // 通过eventChannel向被打开页面传送数据
                    success: function(res) {
                        res.eventChannel.emit('waveItem', {
                            data: that.list[index]
                        })
                    }
                });
            },
            typeChange(e){
                this.typeSelect = e.value
                this.search()
            },
            async search() {
                this.list = []
                // if(this.barcode === '' || this.barcode ===null){
                //     return ;
                // }
                const {
                    code,
                    data,
                    msg
                } = await request('/getWaveList',{
                    barcode:this.barcode
                }
                )
                if (code === 200) {
                    if (Object.keys(data).length === 0){
                        uni.showToast({
                            title: "未查询到波次数据",
                            icon: "none",
                            position: 'top'
                        })
                    }
                    this.list.push(...data)
                }else if(code == 401){
                    setTimeout(() => {
                        uni.removeStorageSync('token');
                        uni.reLaunch({
                            url: "/pages/login/login"
                        });
                    }, 1000);
                }else {
                    uni.showToast({
                        title: msg,
                        icon: "none",
                        position: 'top'
                    })
                }
            },
            clearCode() {
                this.barcode = ''
            },
            remove(index) {
                this.list.splice(index, 1);
            },
            clear() {
                this.list = []
                this.barcode = ''
            },
            next() {
                if (this.list.length) {
                    this.isconfirm = true
                } else {
                    uni.showToast({
                        icon: "none",
                        title: '未选物料标签'
                    })
                }
            },
            prev() {
                this.isconfirm = false
            },
            selChange(val) {
                uni.setStorageSync('whAreaId', val)
            },
            async confirm() {
                const newArr = this.list.map(item => {
                    return {
                        ...item,
                        receiptQty: item.receiptQty === null ? 0 : +item.receiptQty
                    };
                });
                if (this.whAreaId === '') {
                    uni.showToast({
                        icon: "none",
                        title: '请选择收货区'
                    })
                } else {
                    const {
                        code,
                        data,
                        msg
                    } = await request('/orders/confirm', {
                        receipts: newArr,
                        whAreaId: this.whAreaId
                    })
                    if (code === 200) {
                        uni.showToast({
                            title: '收货成功'
                        })
                        this.list = []
                        this.barcode = ''
                        this.isconfirm = false
                    } else {
                        uni.showToast({
                            title: msg,
                            icon: "none",
                            position: 'top'
                        })
                    }
                }
            },
            DateChange(e, item) {
                item.prodTime = e.detail.value
            }
        }
    }
</script>
<style>
    .index {
        border: 1px solid #e54d42;
        color: #e54d42;
        border-radius: 50%;
        display: block;
        width: 50rpx;
        height: 50rpx;
        line-height: 48rpx;
        text-align: center;
        margin-right: 20rpx;
        font-size: 30rpx;
    }
    .text-blue {
        color: #0081ff !important;
    }
    .item {
        position: relative;
        display: flex;
        min-height: 80upx;
        align-items: center;
    }
    .content2 {
        /* background-color: coral; */
        width: 100%;
        display: flex;
        flex-direction: row;
        align-items: center;
        justify-content: flex-end;
        margin-right: 10px;
        color: #0081ff;
    }
</style>
pages/outbound/wavePickItem.vue
New file
@@ -0,0 +1,234 @@
<template>
    <view class="has-foot">
        <form>
            <view class="cu-form-group" v-show="!isconfirm">
                <view class="title">波次号</view>
                <text class="text-black ">{{wave.code}}</text>
            </view>
            <view class="cu-form-group" v-show="!isconfirm">
                <view class="title">容器号</view>
                <input placeholder="请扫描容器号" v-model="barcode"  focus></input>
                <text class='cuIcon-close text-gray margin-right-xs' v-show="barcode!==''" @click="clearCode"></text>
                <text class='cuIcon-search text-blue' @click="search"></text>
            </view>
        </form>
        <view class="cu-list det menu sm-border  padding">
            <block  v-for="(item, index) in list" :key="index">
                <view  class="cu-list det menu  ">
                <view class="cu-bar bg-white solid-bottom margin-top-sm">
                    <view class="action">
                        <view class="index">
                            {{index+1}}
                        </view>
                    </view>
                    <view class="content2">
                        <text class="text-gray"><text class="text-black ">{{item.exceStatus$}}</text></text>
                    </view>
                </view>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-gray">物料编码:<text class="text-black ">{{item.taskItem.matnrCode}}</text></text>
                    </view>
                </view>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-gray">物料名称:<text class="text-black ">{{item.taskItem.maktx}}</text></text>
                    </view>
                </view>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-gray">总数量:<text class="text-black ">{{item.taskItem.anfme}}</text></text>
                    </view>
                </view>
                </view>
                <view  class="cu-list det menu noMargin " v-for="(item2,index2) in item.asnOrderItems">
                    <view class="cu-item">
                        <view class="content">
                            <text class="text-gray">{{index2+1}}.</text>
                        </view>
                    </view>
                    <view class="cu-item">
                        <view class="content">
                            <text class="text-gray">订单号:<text class="text-black ">{{item2.asnCode}}</text></text>
                        </view>
                    </view>
                    <view class="cu-item">
                        <view class="content">
                            <text class="text-gray">需求数量:<text class="text-black ">{{item2.anfme}}</text></text>
                        </view>
                    </view>
                    <view class="cu-item">
                        <view class="content">
                            <text class="text-gray">已拣数量:<text class="text-black ">{{item2.qty}}</text></text>
                        </view>
                    </view>
                    <view class="cu-item">
                        <view class="content">
                            <view class="cu-form-group padding-lr-0">
                                <view class="title text-blue"><text
                                        class="text-red text-xl vertical-middle">*</text>拣:</view>
                                <uni-number-box style="width: 70%;" :max="max" v-model="item2.receiptQty"
                                    :step='1'></uni-number-box>
                            </view>
                        </view>
                    </view>
                </view>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-gray">本次拣货数量:<text class="text-black ">{{item.asnOrderItems.reduce((total, item) => total + (Number(item.receiptQty) ||0 ) , 0)}}</text></text>
                    </view>
                </view>
            </block>
        </view>
        <view class="cu-bar btn-group foot" v-show="!isconfirm">
            <button class="cu-btn text-blue line-blue shadow" @click="clear">清空</button>
            <button class="cu-btn bg-blue shadow-blur" @click="next">下一步</button>
        </view>
    </view>
</template>
<script>
    import {
        request
    } from '../../common/request.js'
    import {
        mapState,
        mapMutations,
        mapActions,
        mapGetters
    } from 'vuex';
    export default {
        data() {
            return {
                wave:'',
                list: [],
                isconfirm: false,
                barcode:'80003642',
                max: 99999999,
            }
        },
        computed: {
            allCount() {
                return this.list.reduce((acc, row) => +row.receiptQty + acc, 0)
            },
        },
        mounted() {
        },
        onLoad() {
            let that = this
            const eventChannel = this.getOpenerEventChannel();
            eventChannel.on('waveItem', function(data) {
                that.wave = data.data
            })
            this.search()
        },
        methods: {
            clearCode() {
                this.barcode = ''
            },
            async search() {
                this.list = []
                // if(this.barcode === '' || this.barcode ===null){
                //     return ;
                // }
                const {
                    code,
                    data,
                    msg
                } = await request('/getContainerWaveList',{
                    barcode:this.barcode
                }
                )
                if (code === 200) {
                    if (Object.keys(data).length === 0){
                        uni.showToast({
                            title: "该标签未查询到数据",
                            icon: "none",
                            position: 'top'
                        })
                    }
                    this.list.push(...data)
                }else if(code == 401){
                    setTimeout(() => {
                        uni.removeStorageSync('token');
                        uni.reLaunch({
                            url: "/pages/login/login"
                        });
                    }, 1000);
                }else {
                    uni.showToast({
                        title: msg,
                        icon: "none",
                        position: 'top'
                    })
                }
            },
        }
    }
</script>
<style>
    .index {
        border: 1px solid #e54d42;
        color: #e54d42;
        border-radius: 50%;
        display: block;
        width: 50rpx;
        height: 50rpx;
        line-height: 48rpx;
        text-align: center;
        margin-right: 20rpx;
        font-size: 30rpx;
    }
    .text-blue {
        color: #0081ff !important;
    }
    .item {
        position: relative;
        display: flex;
        min-height: 80upx;
        align-items: center;
    }
    .content2 {
        /* background-color: coral; */
        width: 100%;
        display: flex;
        flex-direction: row;
        align-items: center;
        justify-content: flex-end;
        margin-right: 10px;
        color: #0081ff;
    }
    .noMargin{
        margin-top: 0px;
        padding: 5px;
    }
</style>