skyouc
2025-11-13 3a770819f22efdc0ecb0ba57de0ac64f08421c55
波次拣货功能优化
2个文件已添加
7个文件已修改
1112 ■■■■ 已修改文件
checkOrder.vue 283 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
common/request.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages.json 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/check/checkOrder.vue 123 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/check/checkOrderItem.vue 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/listing/itemSelect.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/listing/matnrPalletising.vue 248 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/outbound/PickItemDetl.vue 234 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/outbound/wavePickItem.vue 199 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
checkOrder.vue
New file
@@ -0,0 +1,283 @@
<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.orderCode}}</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.anfme}}</text></text>
                    </view>
                    <view class="content">
                        <text class="text-gray">盘点数量:<text class="text-black ">{{item.checkQty}}</text></text>
                    </view>
                </view>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-gray">盘点类型:<text class="text-black ">{{item.checkType$}}</text></text>
                    </view>
                </view>
                <view class="cu-item">
                    <view class="content">
                        <progress :percent="Math.trunc((item.checkQty/item.anfme)*100) " show-info stroke-width="3" />
                    </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>
</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: "./checkOrderItem",
                    // 通过eventChannel向被打开页面传送数据
                    success: function(res) {
                        res.eventChannel.emit('checkItem', {
                            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('/getCheckList',{
                    code: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>
common/request.js
@@ -16,7 +16,7 @@
        const token = uni.getStorageSync('token');
        // const URL = 'http://47.76.147.249:8080/rsf-server/pda' + url;
        // const URL = 'http://test.zoneyung.net:8080/rsf-server/pda' + url;
        const URL = 'http://192.168.51.35:8085/rsf-server/pda' + url;
        const URL = 'http://127.0.0.1:8085/rsf-server/pda' + url;
        uni.request({
            url: URL,
            data: postData,
pages.json
@@ -47,6 +47,12 @@
            "style": {
                "navigationBarTitleText": "波次拣货"
            }
        },
        {
            "path": "pages/outbound/PickItemDetl",
            "style": {
                "navigationBarTitleText": "拣货明细"
            }
        },
        {
            "path": "pages/rece/standard",
pages/check/checkOrder.vue
@@ -1,6 +1,6 @@
<template>
    <view class="has-foot">
        <form >
        <form>
            <view class="cu-form-group " v-show="!isconfirm">
                <view class="title">盘点单</view>
                <input placeholder="请扫描盘点单号" v-model="barcode" @input="search()" focus></input>
@@ -8,54 +8,53 @@
            </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}}
            <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="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.orderCode}}</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.anfme}}</text></text>
                    </view>
                    <view class="content">
                        <text class="text-gray">盘点数量:<text class="text-black ">{{item.checkQty}}</text></text>
                    <view class="cu-item">
                        <view class="content">
                            <text class="text-gray">盘点差异单:<text class="text-black ">{{item.orderCode}}</text></text>
                        </view>
                    </view>
                </view>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-gray">盘点类型:<text class="text-black ">{{item.checkType$}}</text></text>
                    <view class="cu-item">
                        <view class="content">
                            <text class="text-gray">创建时间:<text class="text-black ">{{item.createTime$}}</text></text>
                        </view>
                    </view>
                </view>
                <view class="cu-item">
                    <view class="content">
                        <progress :percent="Math.trunc((item.checkQty/item.anfme)*100) " show-info stroke-width="3" />
                    <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.checkQty}}</text></text>
                        </view>
                    </view>
                </view>
                    <view class="cu-item">
                        <view class="content">
                            <text class="text-gray">盘点类型:<text class="text-black ">{{item.checkType$}}</text></text>
                        </view>
                    </view>
                    <view class="cu-item">
                        <view class="content">
                            <progress :percent="Math.trunc((item.checkQty/item.anfme)*100) " show-info
                                stroke-width="3" />
                        </view>
                    </view>
                </view>
            </block>
        </view>
@@ -92,17 +91,17 @@
    export default {
        data() {
            return {
                isClickItem:false,
                clickItem:'',
                QRbarcode:null,
                isClickItem: false,
                clickItem: '',
                QRbarcode: null,
                barcode: '',
                whAreaId: '',
                list: [],
                range: [],
                isconfirm: false,
                isconfirm: false,
                itemStyle: {
                        backgroundColor: '#42b983',
                        borderColor: '#42b983'
                    backgroundColor: '#42b983',
                    borderColor: '#42b983'
                },
            }
        },
@@ -116,7 +115,7 @@
            this.search()
        },
        methods: {
            clickTaskItem(index){
            clickTaskItem(index) {
                let that = this
                uni.navigateTo({
                    url: "./checkOrderItem",
@@ -126,10 +125,10 @@
                            data: that.list[index]
                        })
                    }
                });
                });
            },
            typeChange(e){
            typeChange(e) {
                this.typeSelect = e.value
                this.search()
            },
@@ -142,12 +141,11 @@
                    code,
                    data,
                    msg
                } = await request('/getCheckList',{
                    code:this.barcode
                }
                )
                if (code === 200) {
                    if (Object.keys(data).length === 0){
                } = await request('/getCheckList', {
                    code: this.barcode
                })
                if (code === 200) {
                    if (Object.keys(data).length === 0) {
                        uni.showToast({
                            title: "未查询到波次数据",
                            icon: "none",
@@ -155,15 +153,15 @@
                        })
                    }
                    this.list.push(...data)
                }else if(code == 401){
                } else if (code == 401) {
                    setTimeout(() => {
                        uni.removeStorageSync('token');
                        uni.reLaunch({
                            url: "/pages/login/login"
                        });
                    }, 1000);
                }else {
                } else {
                    uni.showToast({
                        title: msg,
                        icon: "none",
@@ -237,7 +235,7 @@
                }
            },
            DateChange(e, item) {
                item.prodTime = e.detail.value
            }
@@ -270,7 +268,8 @@
        min-height: 80upx;
        align-items: center;
    }
    .content2 {
    .content2 {
        /* background-color: coral; */
        width: 100%;
        display: flex;
pages/check/checkOrderItem.vue
@@ -206,12 +206,9 @@
        onLoad() {
            let that = this
            const eventChannel = this.getOpenerEventChannel();
            eventChannel.on('checkItem', function(data) {
                that.check = data.data
            })
        },
        methods: {
            sureAdd(){
pages/listing/itemSelect.vue
@@ -4,8 +4,6 @@
        <view class="search-bar">
            <uni-search-bar v-model="condition" placeholder=" 输入批次/编码/单号" bgColor="#EEEEEE"  @confirm="search()"/>
        </view>
        <view>
            <view class="padding-lr margin-top-sm">
                <block v-for="(item, index) in matList" :key="index">
@@ -33,13 +31,20 @@
                                <text class="text-grey ">{{item.asnCode}}</text>
                            </view>
                        </view>
                        <view class="cu-item">
                            <view class="content">
                                <text class="text-black">供应商批次:</text>
                            </view>
                            <view class="action">
                                <text class="text-grey ">{{item.splrBatch}}</text>
                            </view>
                        </view>
                        <view class="cu-item">
                            <view class="content">
                                <text class="text-black">现品票号:</text>
                            </view>
                            <view class="action">
                                <text class="text-grey ">{{item.extendFields.crushNo}}</text>
                            </view>
                        </view>
                        <view class="cu-item">
@@ -127,6 +132,7 @@
                    matnrCode: this.condition,
                    asnCode: this.condition,
                    code: this.condition,
                    fieldsIndex: this.condition,
                    batch: this.condition
                }
                this.getDet(req);
@@ -134,6 +140,7 @@
            back() {
                for (var i = 0; i < this.matList.length; i++) {
                    if(this.matList[i].selected === true){
                        this.matList[i].receiptQty = this.matList[i].anfme - this.matList[i].workQty
                        this.selectedList.push(this.matList[i])
                    }                        
                }                
@@ -163,6 +170,7 @@
                    matnrCode: req.matnrCode,
                    asnCode: req.asnCode,
                    code: req.code,
                    fieldsIndex: req.fieldsIndex,
                    batch: req.batch
                }, "post")
                if (code === 200) {
pages/listing/matnrPalletising.vue
@@ -1,31 +1,32 @@
<template>
    <view class="has-foot">
        <view>
        <form>
            <view class="cu-form-group margin-top">
                <view class="title">容器号</view>
                <input placeholder="请扫描容器号" v-model="container" focus></input>
                <text class='cuIcon-search text-blue' @click="getList"></text>
            </view>
            <view class="cu-form-group">
                <view class="title">物料编码</view>
                <input placeholder="请扫描物料编码" v-model="matnrCode"></input>
                <text class='cuIcon-search text-blue' @click="search"></text>
            <form>
                <view class="cu-form-group margin-top">
                    <view class="title">容器号</view>
                    <input placeholder="请扫描容器号" v-model="container" focus></input>
                    <text class='cuIcon-search text-blue' @click="getList"></text>
                </view>
                <view class="cu-form-group">
                    <view class="title">物料编码</view>
                    <input placeholder="请扫描物料编码" v-model="matnrCode"></input>
                    <text class='cuIcon-search text-blue' @click="search"></text>
                </view>
                <view class="cu-form-group">
                    <view class="title">票号</view>
                    <input placeholder="请扫描现品票号" v-model="fieldsIndex"></input>
                    <text class='cuIcon-search text-blue' @click="search"></text>
                </view>
                <view class="cu-form-group">
                    <view class="title">ASN单号</view>
                    <input placeholder="请输入ASN单号" v-model="asnCode"></input>
                </view>
            </form>
            <view class="flex solid-bottom padding-sm justify-between">
                <view class="text-blue">物料总类:{{list.length}}</view>
                <view class="text-blue">组盘总数:{{allCount}}</view>
            </view>
            <view class="cu-form-group">
                <view class="title">ASN单号</view>
                <input placeholder="请输入ASN单号" v-model="asnCode"></input>
            </view>
        </form>
        <view class="flex solid-bottom padding-sm justify-between">
            <view class="text-blue">物料总类:{{list.length}}</view>
            <view class="text-blue">组盘总数:{{allCount}}</view>
        </view>
        </view>
        <view class="padding-lr margin-top-sm">
            <block v-for="(item, index) in list" :key="index">
                <view class="cu-list det menu sm-border margin-bottom-sm " :class="[item.trackCode===barcode&&'act']"
@@ -36,7 +37,7 @@
                                {{index+1}}
                            </view>
                            <view class="text-blue">
                                编码:
                                编码:
                                {{`${item.matnrCode}`}}
                            </view>
                        </view>
@@ -46,29 +47,29 @@
                    </view>
                    <view class="cu-item">
                        <view class="content">
                            <text class="text-black">物料编码:</text>
                            <text class="text-black">物料编码:</text>
                            <text class="text-grey ">{{item.maktx}}</text>
                        </view>
                    </view>
                    <view class="cu-item">
                        <view class="content">
                            <text class="text-black">ASN:</text>
                            <text class="text-black">单号:</text>
                        </view>
                        <view class="action">
                            <text class="text-grey ">{{item.asnCode}}</text>
                        </view>
                    </view>
                    </view>
                    <view class="cu-item">
                        <view class="content">
                            <text class="text-black">供应商批次:</text>
                            <text class="text-black">供应商批次:</text>
                        </view>
                        <view class="action">
                            <text class="text-grey ">{{item.splrBatch}}</text>
                        </view>
                    </view>
                    <view class="cu-item">
                    <view class="cu-item">
                        <view class="content">
                            <text class="text-black">质检结果: <text class="text-grey ">{{item.inspect}}</text></text>
                            <text class="text-black">票号:<text class="text-grey ">{{item.crushNo}}</text></text>
                        </view>
                    </view>
                    <!-- <view class="cu-item">
@@ -82,31 +83,30 @@
                    <view class="cu-item">
                        <view class="content">
                            <text class="text-black">库存单位: <text class="text-grey ">{{item.stockUnit}}</text></text>
                            <text class="text-black">库存单位: <text class="text-grey ">{{item.stockUnit}}</text></text>
                        </view>
                        <view class="content">
                            <text class="text-black">收货数量: <text class="text-grey ">{{item.anfme}}</text></text>
                            <text class="text-black">收货数量: <text class="text-grey ">{{item.anfme}}</text></text>
                        </view>
                        <view class="content">
                            <text class="text-black">已上架数量: <text
                            <text class="text-black">已上架数量: <text
                                    class="text-grey ">{{item.workQty + item.qty}}</text></text>
                        </view>
                    </view>
                    <view class="cu-item">
                        <view class="content">
                            <text class="text-black">可组盘数量: <text
                            <text class="text-black">可组盘数量:<text
                                    class="text-grey ">{{item.anfme - item.workQty - item.qty}}</text></text>
                        </view>
                    </view>
                    <view class="cu-item">
                    <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>组盘数量:
                                        class="text-red text-xl vertical-middle">*</text>组盘数量:
                                </view>
                                <uni-number-box style="width: 70%;" :min="0" :max="max" :decimal="2" :step="0.01" v-model="item.receiptQty"
                                    ></uni-number-box>
                                <uni-number-box style="width: 70%;" :min="0" :max="max" :decimal="2" :step="0.01"
                                    v-model="item.receiptQty"></uni-number-box>
                            </view>
                        </view>
                    </view>
@@ -140,108 +140,74 @@
                range: [],
                asnCode: '',
                repeatClick: false,
                isconfirm: false,
                matnrCode:'',
                fieldsIndex: null,
                isconfirm: false,
                matnrCode: '',
                max: 99999999,
            }
        },
        computed: {
            ...mapState('user', ['dynamicFields']),
            allCount() {
                return this.list.reduce((acc, row) => +row.anfme + acc, 0) || 0
                return this.list.reduce((acc, row) => + (row.anfme + acc).toFixed(2), 0) || 0
            }
        },
        mounted() {},
        methods: {
        methods: {
            async search() {
                const find = this.list.find(el => el.trackCode === this.barcode);
                find ? this.scrollTo() : this.getDet();
            },
            getDet() {
                let that = this;
                uni.navigateTo({
                    url: "../listing/itemSelect",
                    success: function(res) {
                        // 通过eventChannel向被打开页面传送数据   向另外一个页面传递值的
                        res.eventChannel.emit('data', {
                            matnrCode: that.matnrCode,
                            asnCode: that.asnCode
                        })
                    },
                    events: {
                        // 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据  另外一个页面传过来的
                        backData: function(data) {
                            that.showBackData(data.data)
                        },
                    },
                });
                let param = {
                    matnrCode: that.matnrCode.trim(),
                    asnCode: that.asnCode.trim(),
                    fieldsIndex: that.fieldsIndex.trim()
                }
                that.getDetl(param);
            },
            // async getDet() {
            //     let that = this;
            //     const {
            //         code,
            //         data,
            //         msg
            //     } = await request('/asnOrderItem/trackCode', {
            //         matnrCode: that.matnrCode,
            //         asnCode: that.asnCode
            //     }, "post")
            //     if (code === 200) {
            //         data.map(item => {
            //             item.receiptQty = 0;
            //             item.selected = false;
            //         })
            //         // for (var i = 0; i < data.length; i++) {
            //         //     data[i].receiptQty =1;
            //         //     data[i].selected = false;
            //         // }
            //         if(data !== [] || data !== null){
            //         uni.navigateTo({
            //                 url: "../listing/itemSelect",
            //                 success: function(res) {
            //                     // 通过eventChannel向被打开页面传送数据   向另外一个页面传递值的
            //                     res.eventChannel.emit('data', {
            //                         item: data
            //                     })
            //                 },
            //                 events: {
            //                     // 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据  另外一个页面传过来的
            //                     backData: function(data) {
            //                         that.showBackData(data.data)
            //                     },
            //                 },
            //             });
            //         }
            //         // this.list = data
            //     } else {
            //         uni.showToast({
            //             title: msg,
            //             icon: "none",
            //             position: 'top'
            //         })
            //     }
            // },
            async getDetl(req) {
                let that = this;
                // uni.showLoading({
                //     title: '加载中...'
                // })
                const { code, data, msg } = await request('/asnOrderItem/trackCode', {
                    matnrCode: that.matnrCode,
                    asnCode: that.asnCode,
                    code: that.asnCode,
                    fieldsIndex: that.fieldsIndex,
                    batch: req.batch
                }, "post")
                if (code === 200) {
                    for (var i = 0; i < data.length; i++) {
                        data[i].receiptQty = data[i].anfme - data[i].workQty;
                        data[i].crushNo = that.fieldsIndex;
                        data[i].selected = true;
                    }
                    that.fieldsIndex = null;
                    that.showBackData(data)
                } else {
                    uni.showToast({
                        title: msg,
                        icon: "none",
                        position: 'top'
                    })
                }
                // uni.hideLoading();
            },
            async getList() {
                if(this.container === '' || this.container === null){
                if (this.container === '' || this.container === null) {
                    uni.showToast({
                        title: "容器码为空",
                        icon: "none",
                        position: 'top'
                    })
                    return ;
                    return;
                }
                const {
                    code,
                    data,
                    msg
                } = await request('/asnOrderItem/container', {
                const {    code, data,    msg    } = await request('/asnOrderItem/container', {
                    barcode: this.container
                })
                if (code === 200) {
@@ -258,11 +224,11 @@
                    })
                }
            },
            showBackData(data){
                let status ;
                data.map(item => {
            showBackData(data) {
                let status;
                data.map(item => {
                    this.list.push(item)
                })
                })
                let oldLength = this.list.length
                this.list = this.list.filter((item, index, self) =>
                    self.findIndex(i => (
@@ -270,23 +236,21 @@
                    )) === index && item.isptResult === self[0].isptResult
                );
                let newLength = this.list.length
                if(oldLength > newLength){
                if (oldLength > newLength) {
                    this.showMsg("新明细被过滤,请检查状态")
                }
            },
            showMsg(msg){
            showMsg(msg) {
                setTimeout(function() {
                 uni.showToast({
                     icon: "none",
                     position: 'top',
                     title: msg,
                     duration:2000,
                 })
                    uni.showToast({
                        icon: "none",
                        position: 'top',
                        title: msg,
                        duration: 2000,
                    })
                }, 200);
            },
            scrollTo() {
                const ref = this.$refs[`${this.barcode}ref`][0];
@@ -316,28 +280,28 @@
                this.isconfirm = false
            },
            async confirm() {
                if(this.container === '' || this.container === null){
                if (this.container === '' || this.container === null) {
                    uni.showToast({
                        title: "容器码为空",
                        icon: "none",
                        position: 'top'
                    })
                    return ;
                    return;
                }
                if(this.list.length ===0 || this.list === null){
                if (this.list.length === 0 || this.list === null) {
                    uni.showToast({
                        title: "未添加明细",
                        icon: "none",
                        position: 'top'
                    })
                    return ;
                    return;
                }
                this.repeatClick = true
                this.repeatClick = true
                const newArr = this.list.map(item => {
                    return {
                        ...item,
                        anfme: item.anfme === null ? 0 : +item.anfme,
                        anfme: item.anfme === null ? 0 : +item.anfme,
                    };
                });
@@ -347,7 +311,7 @@
                    msg
                } = await request('/waitPakin/merge', {
                    items: newArr,
                    barcode: this.container,
                    barcode: this.container,
                })
                if (code === 200) {
                    uni.showToast({
pages/outbound/PickItemDetl.vue
New file
@@ -0,0 +1,234 @@
<template>
    <view class="has-foot">
        <view class="cu-list det menu sm-border">
            <view class="cu-item">
                <view class="content">
                    <text class="text-gray">订单号:<text class="text-black ">{{orderDetl.poCode}}</text></text>
                </view>
            </view>
            <view class="cu-item">
                <view class="content">
                    <text class="text-gray">容器号:<text class="text-black ">{{orderDetl.barcode}}</text></text>
                </view>
            </view>
            <form>
                <view class="cu-form-group" v-show="!isconfirm">
                    <view class="title">票号:</view>
                    <input placeholder="请扫描票号" v-model="fieldsIndex" focus></input>
                    <text class='cuIcon-close text-gray margin-right-xs' v-show="fieldsIndex!==''" @click="clearCode"></text>
                    <text class='cuIcon-search text-blue' @click="search"></text>
                </view>
            </form>
        </view>
        <view class="cu-list det menu sm-border">
            <view class="cu-list det menu noMargin cyan" v-for="(item2,index2) in list" >
                <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.matnrCode}}</text></text>
                    </view>
                </view>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-gray">品种名称:<text class="text-black ">{{item2.maktx}}</text></text>
                    </view>
                </view>
                <view class="cu-item" v-show="!isconfirm">
                    <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>
                            <input type="input" v-model="item2.extendFields.crushNo" class="text-black">
                        </view>
                    </view>
                </view>
                <view class="cu-item" v-show="item2.anfme !== item2.qty">
                    <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.anfme"
                                :step='0.01'></uni-number-box>
                        </view>
                    </view>
                </view>
            </view>
        </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" :disabled="repeatClick" @click="complete">拣货完成</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,
                fieldsIndex: '',
                max: 99999999,
                orderDetl: {},
                repeatClick: false,
            }
        },
        computed: {
            ...mapState('user', ['dynamicFields']),
            ...mapState('user', {
                dynFields: state => state.dynamicFields
            }),
            // allCount() {
            //     return this.list.reduce((acc, row) => +row.receiptQty + acc, 0)
            // },
        },
        mounted() {
        },
        onLoad() {
            let that = this
            const eventChannel = this.getOpenerEventChannel();
            eventChannel.on('pickItemDetl', function(data) {
                that.orderDetl = data.data
            })
        },
        methods: {
            clear() {
                this.fieldsIndex = ''
                this.list = []
            },
            clearCode() {
                this.fieldsIndex = ''
            },
            async search() {
                let that = this;
                // if(this.barcode === '' || this.barcode ===null){
                //     return ;
                // }
                const {    code, data, msg    } = await request('/wave/order/items', {
                    barcode: this.orderDetl.barcode,
                    orderId: that.orderDetl.orderId,
                    fieldsIndex: that.fieldsIndex
                })
                if (code === 200) {
                    if (Object.keys(data).length === 0) {
                        uni.showToast({
                            title: "该标签未查询到数据",
                            icon: "none",
                            position: 'top'
                        })
                    }
                    that.list.push(data)
                    that.fieldsIndex = null;
                } else if (code == 401) {
                    setTimeout(() => {
                        uni.removeStorageSync('token');
                        uni.reLaunch({
                            url: "/pages/login/login"
                        });
                    }, 1000);
                } else {
                    uni.showToast({
                        title: msg,
                        icon: "none",
                        position: 'top'
                    })
                }
            },
            async complete() {
                let that = this
                if (that.barcode === '' || that.barcode === null) {
                    uni.showToast({
                        title: "容器号为空",
                        icon: "error",
                    })
                    return;
                }
                if (that.list === [] || that.list.length === 0) {
                    uni.showToast({
                        title: "拣货明细为空",
                        icon: "error",
                    })
                    return;
                }
                this.repeatClick = true
                const {    code, data, msg    } = await request('/wave/pick/item', {
                    barcode: that.orderDetl.barcode,
                    orderId: that.orderDetl.orderId,
                    taskItems: that.list
                })
                if (code === 200) {
                    uni.showToast({
                        title: msg,
                        icon: "none",
                    })
                    that.clear()
                } else {
                    uni.showToast({
                        title: msg,
                        icon: "none",
                    })
                }
                this.repeatClick = false
            },
        }
    }
</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>
pages/outbound/wavePickItem.vue
@@ -7,100 +7,51 @@
            </view> -->
            <view class="cu-form-group" v-show="!isconfirm">
                <view class="title">容器号</view>
                <input placeholder="请扫描容器号" v-model="barcode"  focus></input>
                <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">
                <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-list det menu sm-border">
            <view class="cu-list det menu noMargin cyan" v-for="(item2,index2) in list" @click="clickTaskItem(index2)">
                <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.wkOrderItems">
                    <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.orderCode}}</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>
                                <input type="input" v-model="item2.fieldsIndex" class="text-black">
                            </view>
                        </view>
                    </view>
<!--                     <view class="cu-item grid  col-2" v-if="item2.extendFields">
                        <view class="item" v-for="el in dynamicFields" :key="el.id">
                            <text class="text-black">{{el.fieldsAlise}}:
                                <text class="text-grey ">{{item.extendFields[el.fields]}}</text></text>
                        </view>
                    </view> -->
                    <view class="cu-item" v-show="item2.anfme !== item2.qty">
                        <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.demandQty"
                                    :step='0.01' ></uni-number-box>
                            </view>
                        </view>
                        <text class="text-gray">{{index2+1}}.</text>
                    </view>
                </view>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-gray">本次拣货数量:<text class="text-black ">{{item.wkOrderItems.reduce((total, item) => total + (Number(item.demandQty) ||0 ) , 0)}}</text></text>
                    </view>
                        <text class="text-gray">出库单号:<text class="text-black ">{{item2.orderCode}}</text></text>
                    </view>
                </view>
            </block>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-gray">DO单号:<text class="text-black ">{{item2.poCode}}</text></text>
                    </view>
                </view>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-gray">品种号码:<text class="text-black ">{{item2.matnrCode}}</text></text>
                    </view>
                </view>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-gray">品种名称:<text class="text-black ">{{item2.maktx}}</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 class="content">
                        <text class="text-gray">已拣数量:<text class="text-black ">{{item2.qty}}</text></text>
                    </view>
                </view>
            </view>
        </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" :disabled="repeatClick" @click="complete">拣货完成</button>
            <!-- <button class="cu-btn text-blue line-blue shadow" @click="clear">清空</button> -->
            <button class="cu-btn bg-blue shadow-blur" :disabled="repeatClick" @click="complete">完成</button>
        </view>
    </view>
</template>
@@ -118,45 +69,61 @@
    export default {
        data() {
            return {
                wave:'',
                list: [],
                wave: '',
                list: [],
                isconfirm: false,
                barcode:'',
                barcode: '',
                max: 99999999,
                repeatClick:false,
                repeatClick: false,
            }
        },
        computed: {
            ...mapState('user', ['dynamicFields']),
            ...mapState('user', {
                    dynFields: state => state.dynamicFields
                dynFields: state => state.dynamicFields
            }),
            allCount() {
                return this.list.reduce((acc, row) => + row.receiptQty + acc, 0)
            },
            // allCount() {
            //     return this.list.reduce((acc, row) => +row.receiptQty + acc, 0)
            // },
        },
        mounted() {
            console.log(dynamicFields);
        },
        onLoad() {
            let that = this
            const eventChannel = this.getOpenerEventChannel();
            eventChannel.on('waveItem', function(data) {
                that.wave = data.data
            })
        },
        methods: {
            //点击事件
            clickTaskItem(index) {
                let that = this
                uni.navigateTo({
                    url: "./PickItemDetl",
                    // 通过eventChannel向被打开页面传送数据
                    success: function(res) {
                        res.eventChannel.emit('pickItemDetl', {
                            data: {
                                ...that.list[index],
                                barcode: that.barcode,
                            }
                        })
                    }
                });
            },
            clear() {
                this.barcode = ''
                this.list = []
            },
            clearCode() {
                this.barcode = ''
                this.barcode = ''
            },
            async search() {
                let that = this;
                this.list = []
                // if(this.barcode === '' || this.barcode ===null){
                //     return ;
@@ -165,61 +132,61 @@
                    code,
                    data,
                    msg
                } = await request('/getContainerWaveList',{
                    barcode:this.barcode
                }
                )
                if (code === 200) {
                    if (Object.keys(data).length === 0){
                } = 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){
                    that.list.push(...data)
                    console.log(that.list);
                } else if (code == 401) {
                    setTimeout(() => {
                        uni.removeStorageSync('token');
                        uni.reLaunch({
                            url: "/pages/login/login"
                        });
                    }, 1000);
                }else {
                } else {
                    uni.showToast({
                        title: msg,
                        icon: "none",
                        position: 'top'
                    })
                }
            },
            async complete() {
                let that = this
                if(that.barcode === '' || that.barcode === null){
                if (that.barcode === '' || that.barcode === null) {
                    uni.showToast({
                        title: "容器号为空",
                        icon: "error",
                    })
                    return ;
                    return;
                }
                if(that.list === [] || that.list.length === 0){
                if (that.list === [] || that.list.length === 0) {
                    uni.showToast({
                        title: "拣货明细为空",
                        icon: "error",
                    })
                    return ;
                    return;
                }
                this.repeatClick = true
                const {
                    code,
                    data,
                    msg
                } = await request('/saveWavePick',{
                    container:that.barcode,
                    containerWaveDtos:that.list
                } = await request('/saveWavePick', {
                    container: that.barcode,
                    containerWaveDtos: that.list
                })
                if (code === 200) {
                    uni.showToast({
@@ -264,7 +231,8 @@
        min-height: 80upx;
        align-items: center;
    }
    .content2 {
    .content2 {
        /* background-color: coral; */
        width: 100%;
        display: flex;
@@ -274,7 +242,8 @@
        margin-right: 10px;
        color: #0081ff;
    }
    .noMargin{
    .noMargin {
        margin-top: 0px;
        padding: 5px;
    }