#
whycq
2024-09-04 82f3ac1948d1b9d3d0e3dcbcd9466eabc72cdcf8
#
4个文件已添加
3个文件已修改
1526 ■■■■■ 已修改文件
pages.json 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/home/orderManage.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/phyz/comOrder/checkOut.vue 287 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/phyz/comOrder/orderCar.vue 271 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/phyz/comOrder/orderIn.vue 508 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/phyz/comOrder/orderOut.vue 410 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/phyz/orderOut/orderOutSelect.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages.json
@@ -448,6 +448,34 @@
            {
                "navigationBarTitleText" : "库存明细"
            }
        },
        {
            "path" : "pages/phyz/comOrder/orderIn",
            "style" :
            {
                "navigationBarTitleText" : "入库单"
            }
        },
        {
            "path" : "pages/phyz/comOrder/orderOut",
            "style" :
            {
                "navigationBarTitleText" : "订单出库"
            }
        },
        {
            "path" : "pages/phyz/comOrder/orderCar",
            "style" :
            {
                "navigationBarTitleText" : "待组托列表"
            }
        },
        {
            "path" : "pages/phyz/comOrder/checkOut",
            "style" :
            {
                "navigationBarTitleText" : "出库确认"
            }
        }
    ],
    "globalStyle": {
pages/home/orderManage.vue
@@ -100,6 +100,20 @@
                        // cuIcon: 'pullup',
                        url: `/phyz/backStock/backStocksOrder`
                    },
                    {
                        title: '入库单',
                        name: 'orderIn',
                        color: 'blue',
                        // cuIcon: 'pullup',
                        url: `/phyz/comOrder/orderIn`
                    },
                    {
                        title: '出库单',
                        name: 'orderOut',
                        color: 'blue',
                        // cuIcon: 'pullup',
                        url: `/phyz/comOrder/orderOut`
                    },
                    
                ],
                colorList: ['cyan','blue','purple','mauve','pink','brown','red','orange','yellow','olive','olive','grey' ]
pages/phyz/comOrder/checkOut.vue
New file
@@ -0,0 +1,287 @@
<template>
    <view>
        <view class="list shop-car" v-for="item in dataList">
            <view class="list-left">
                <view class="detl-threeCode" style="padding: 16rpx 0;">{{item.csocode}}</view>
                <view>库位:{{item.locNo}}</view>
                <view>编号:{{item.matnr}}</view>
                <view>名称:{{item.maktx}}</view>
                <view>自由项:{{item.containerCode}}</view>
                <view>规格:{{item.specs}}</view>
                <view>批号:{{item.batch}}</view>
                <view>库存数量:{{item.count}}</view>
                <view class="detl-threeCode" style="display: flex;padding: 32rpx 0;align-items: center;font-size: 24px;">
                    <view>出库数量:{{item.anfme}}</view>
                    <view style="margin-left: 50rpx;" @click="revise(item)">
                        <uni-icons type="compose" size="30" color="#fff"></uni-icons>
                    </view>
                </view>
                <view class="detl-threeCode" style="display: flex;padding: 0 0 32rpx 0;font-size: 24px;">出库站:
                    <view class="dropdown" @click="toggleDropdown(item)">
                        <!-- <view style="height: 100%;width: 100%; position: fixed;background-color: rgba(0,0,0,.4);left:0;top:0" v-if = "item.isOpen"></view> -->
                        <input type="text" style="width: 270rpx;font-size: 20px;" v-model="item.agvStaNo" placeholder="请选择出库站" placeholder-style="color: #fff">
                        <uni-icons :type="item.isOpen ? 'top' : 'bottom'" color="#fff" style="margin-left: 10rpx;"></uni-icons>
                        <scroll-view scroll-y="ture" class="dropdown-content" v-if="item.isOpen">
                            <view class="dropdown-item" v-for="option in options" @click="selected(option,item)">{{option}}</view>
                        </scroll-view>
                    </view>
                </view>
                <button @click="combConfirm(item)" :disabled="combDis">立即出库</button>
            </view>
        </view>
        <!-- 弹窗 -->
        <view>
            <uni-popup ref="addItem" type="dialog">
                <view class="popup">
                    <!-- 标题 -->
                    <view class="title">出库数量</view>
                    <view class="popup-item">
                        <view>
                            <uni-number-box :value="data.anfme" :step='1' :min="0" :max="maxCount" color="#747474" @change="changeValue" />
                        </view>
                    </view>
                    <view class="popup-item">
                        <view>
                            <view @click="max()" style="padding: 0rpx 16rpx;background-color: #d9d9d9;font-size: 10px;">MAX</view>
                        </view>
                    </view>
                    <view class="btn">
                        <view class="btn-left" @click="addClose">取消</view>
                        <view class="btn-right" @click="addConfirm()">确认</view>
                    </view>
                </view>
            </uni-popup>
        </view>
        <view style="height: 100rpx;"></view>
        <!-- 底部操作按钮 -->
        <!-- <view class="buttom">
            <button size="mini" @click="reset('warn')">稍后处理</button>
            <button size="mini" type="primary" @click="combConfirm('warn')" :disabled="combDis">立即出库</button>
        </view> -->
    </view>
</template>
<script>
    export default {
        data() {
            return {
                baseUrl: '',
                token: '',
                data: {},
                dataList: [],
                option: '',
                options: [],
                combDis: false,
                maxCount: 0,
                orderType: ''
            }
        },
        onShow() {
            let _this = this
            this.baseUrl = uni.getStorageSync('baseUrl');
            this.token = uni.getStorageSync('token');
            // const eventChannel = this.$scope.eventChannel; // 兼容APP-NVUE
            const eventChannel = this.getOpenerEventChannel();
            // 监听acceptDataFromOpenerPage事件,获取上一页面通过eventChannel传送到当前页面的数据
            // eventChannel.on('mat', function(data) {
            //     let ids = [data.mat.id]
            //     _this.getPakoutList(ids,data.mat.locNo)
            // })
            eventChannel.on('item', function(data) {
                let ids = [data.item.id]
                _this.getPakoutList(ids)
            })
            eventChannel.on('type', function(data) {
                console.log(data);
                if (data) {
                    _this.orderType = data.type
                }
            })
        },
        methods: {
            max() {
                this.data.anfme = this.data.count
            },
            toggleDropdown(item) {
                this.options = []
                item.isOpen = !item.isOpen;
                for    (let k of item.agvStaNos) {
                    this.options.push(k)
                }
            },
            selected(option,item) {
                item.agvStaNo = option
            },
            // 订单明细
            getPakoutList(ids,locNo) {
                let _this = this
                uni.request({
                    url: `${_this.baseUrl}/out/pakout/preview/auth`,
                    header: {'token': uni.getStorageSync('token')},
                    data: ids,
                    method: 'POST',
                    success(res) {
                        res = res.data
                        if (res.code === 200) {
                            for (let k of res.data) {
                                if (k.locNo != null) {
                                    k['isOpen'] = false
                                    k['count'] = k.anfme
                                    k.anfme = 0
                                    if (_this.orderType == 'bcp') {
                                        if (k.locNo.substring(k.locNo.length - 1, k.locNo.length) == 1) {
                                            continue
                                        }
                                    }
                                    _this.dataList.push(k)
                                }
                            }
                        } else if (res.code == 403) {
                            uni.showToast({ title: res.msg, icon: "error", position: 'top' })
                            setTimeout(() => { uni.reLaunch({ url: '../../login/login' }); }, 1000);
                        } else {
                            uni.showToast({ title: res.msg, icon: "error", position: 'top' })
                        }
                    }
                })
            },
            revise(item) {
                this.data = item
                this.maxCount = item.count
                this.$refs.addItem.open()
            },
            addClose() {
                this.$refs.addItem.close()
                this.data.anfme = 0
            },
            addConfirm() {
                this.$refs.addItem.close()
            },
            changeValue(value) {
                this.data.anfme = value
            },
            combConfirm(item) {
                let _this = this
                _this.combDis = true
                if (_this.data.anfme == 0) {
                    uni.showToast({ title: '出库数量不能为0!', icon: "error", position: 'top'})
                    return
                }
                uni.showLoading({})
                let combList = []
                combList.push(item)
                uni.request({
                    url: `${_this.baseUrl}/out/pakout/auth`,
                    header: {'token': uni.getStorageSync('token')},
                    data: combList,
                    method: 'POST',
                    success(res) {
                        _this.combDis = false
                        res = res.data
                        if (res.code === 200) {
                            uni.hideLoading({})
                            uni.showToast({ title: '出库成功', icon: "success", position: 'top'})
                            setTimeout(()=> {
                                uni.navigateBack({
                                    delta: 2
                                });
                            },700)
                        } else if (res.code == 403) {
                            uni.showToast({ title: res.msg, icon: "error", position: 'top' })
                            setTimeout(() => { uni.reLaunch({ url: '../../login/login' }); }, 1000);
                        } else {
                            uni.showToast({ title: res.msg, icon: "error", position: 'top' })
                        }
                    },
                    fail(res) {
                        _this.combDis = false
                    }
                })
            }
        }
    }
</script>
<style scoped>
    @import url('../../../static/css/common/order.css');
    .shop-car {
        background-color: #2299ff;
        color: #fff;
    }
    .detl-threeCode {
        font-size: 34px;
        font-weight: bold;
    }
    .dropdown-item {
        font-size: 20px;
        font-weight: bold;
    }
    .popup {
        width: 80vw;
        min-height: 100rpx;
        background-color: #FFF;
        border-radius: 25rpx;
        position: relative;
    }
    .title {
        height: 100rpx;
        line-height: 100rpx;
        width: 100%;
        color: #606266;
        text-align: center;
        font-size: 16px;
    }
    .popup-item {
        height: 80rpx;
        line-height: 80rpx;
        display: flex;
        align-items: center;
        justify-content: center;
    }
    .popup-item-left {
        width: 16vw;
        padding-right: 20rpx;
        text-align: right;
        color: #606266;
    }
    .popup-item-right {
        display: flex;
        align-items: center;
        width: 50vw;
        height: 50rpx;
        padding: 2px 5px;
        border: 1px solid #E4E7ED;
        border-radius: 5rpx;
    }
    .popup-item-right input{
        color: #606266;
    }
    .btn {
        display: flex;
        height: 90rpx;
        margin-top: 20rpx;
        border-top: 1px solid #DCDFE6;
        justify-content: center;
        align-items: center;
    }
    .btn-left {
        display: flex;
        flex: 1;
        height: 100%;
        justify-content: center;
        align-items: center;
        color: #606266;
        border-right: 1px solid #DCDFE6;
    }
    .btn-right {
        display: flex;
        flex: 1;
        justify-content: center;
        align-items: center;
        color: #409EFF;
    }
</style>
pages/phyz/comOrder/orderCar.vue
New file
@@ -0,0 +1,271 @@
<template>
    <view>
        <view class="list list-font-color shop-car" :class="orderDetl.color" v-for="(orderDetl,index) in orderCarList" :key="index">
            <view class="list-left">
                <view class="detl-threeCode">{{orderDetl.threeCode}}</view>
                <view>主单号:{{orderDetl.orderNo}}</view>
                <view>编号:{{orderDetl.matnr}}</view>
                <view>名称:{{orderDetl.maktx}}</view>
                <view>总数量:{{orderDetl.anfme}}</view>
                <view>入库数量:{{orderDetl.pakinQty}}</view>
            </view>
            <view class="list-right" @click="chageDetl(index)">
                <uni-icons type="settings" size="25"  color="#fff"></uni-icons>
            </view>
        </view>
        <!-- 垫高 -->
        <view style="height: 120rpx;"></view>
        <!-- 底部操作按钮 -->
        <view class="buttom">
            <button size="mini" type="primary" @click="agvStart('warn')">启动入库</button>
        </view>
        <!-- 弹窗 -->
        <view>
            <uni-popup ref="chageDetl" type="dialog">
                <view class="popup">
                    <!-- 标题 -->
                    <view class="title">入库数量</view>
                    <view class="popup-item">
                        <uni-number-box :value="count" :step='1' :max="9999999" color="#747474" @change="changeValue" />
                    </view>
                    <view class="btn">
                        <view class="btn-left" @click="remove()">移除物料</view>
                        <view class="btn-right" @click="changeCount()">修改数量</view>
                    </view>
                </view>
            </uni-popup>
        </view>
        <!-- 弹窗 -->
        <view>
            <uni-popup ref="agvStart" type="dialog">
                <view class="popup">
                    <!-- 标题 -->
                    <view class="title">启动入库</view>
                    <view class="popup-item">
                        <view class="popup-item-left">货架码:</view>
                        <view class="popup-item-right"><input type="text" v-model="barcode"></view>
                    </view>
                    <view class="popup-item">
                        <view class="popup-item-left">站点码:</view>
                        <view class="popup-item-right"><input type="text" v-model="agvDevp"></view>
                    </view>
                    <view class="btn">
                        <button class="btn-left" @click="agvStartClose()">取消</button>
                        <button class="btn-right" @click="agvStartConfirm()" :disabled="agvStartDis">入库</button>
                    </view>
                </view>
            </uni-popup>
        </view>
    </view>
</template>
<script>
    // todo: 购物车优化,存储购物车内容,退出页面再进后购物车还在
    export default {
        data() {
            return {
                orderCarList: [],
                count: 0,
                index: 0,
                barcode: '',
                agvDevp: '',
                agvStartDis: false
            }
        },
        onShow() {
            let _this = this
            this.baseUrl = uni.getStorageSync('baseUrl');
            this.token = uni.getStorageSync('token');
            // const eventChannel = this.$scope.eventChannel; // 兼容APP-NVUE
            const eventChannel = this.getOpenerEventChannel();
            // 监听acceptDataFromOpenerPage事件,获取上一页面通过eventChannel传送到当前页面的数据
            eventChannel.on('item', function(data) {
                _this.orderCarList = data.item
                console.log(data.item);
            })
        },
        methods: {
            chageDetl(index) {
                this.index = index
                this.count = this.orderCarList[index].pakinQty
                this.$refs.chageDetl.open()
            },
            // 修改数量
            changeCount() {
                if (this.count > this.orderCarList[this.index].anfme) {
                    uni.showToast({ title: '数量不合法!', icon: "none", position: 'top' })
                    return
                }
                this.orderCarList[this.index].pakinQty = this.count
                this.$forceUpdate() // 强制刷新
                this.$refs.chageDetl.close()
            },
            // 移除物料
            remove() {
                this.orderCarList.splice(this.index, 1)
                this.$refs.chageDetl.close()
            },
            changeValue(value) {
                this.count = value
            },
            agvStart() {
                this.$refs.agvStart.open()
            },
            agvStartClose() {
                this.barcode = ''
                this.agvDevp = ''
                this.$refs.agvStart.close()
            },
            agvStartConfirm() {
                this.barcode = this.barcode.replace(/\s+/g, '')
                this.agvDevp = this.agvDevp.replace(/\s+/g, '')
                let _this = this
                if (_this.barcode === '') {
                    uni.showToast({ title: '货架码为空!', icon: "error", position: 'top' })
                    return;
                }
                if (_this.agvDevp === '') {
                    uni.showToast({ title: '站点码为空!', icon: "error", position: 'top' })
                    return;
                }
                if (_this.orderCarList.length === 0) {
                    uni.showToast({ title: '组托列表为空!', icon: "error", position: 'top' })
                    return;
                }
                for (let k of _this.orderCarList) {
                    if (k.pakinQty == 0) {
                        uni.showToast({ title: `${k.matnr}数量不能为 0 !`, icon: "error", position: 'top' })
                        return;
                    }
                }
                let combMat = { orderNo:'', barcode: '', locNo: '', combMats: [] }
                let combMats = []
                for (let item of _this.orderCarList) {
                    combMat.orderNo = item.orderNo
                    combMat.barcode = _this.barcode
                    combMat.locNo = _this.agvDevp
                    combMat.combMats = []
                    let combM = {csocode: item.threeCode,isoseq: item.deadTime,matnr: item.matnr,batch: item.batch,anfme: item.pakinQty,maktx: item.maktx,specs: item.specs,processSts: item.processSts}
                    combMat.combMats.push(combM)
                    combMats.push({...combMat})
                }
                this.comb(combMats)
            },
            comb(combMats) {
                let _this = this;
                this.agvStartDis = true
                uni.request({
                    url: _this.baseUrl + '/agvMobile/start/pakin/auth',
                    data: JSON.stringify({
                        barcode: _this.barcode,
                        containerCode: _this.barcode,
                        devNo: _this.agvDevp,
                        combParams: combMats
                    }),
                    method: 'POST',
                    header: {
                        'token': uni.getStorageSync('token')
                    },
                    success(result) {
                        var res = result.data
                        _this.agvStartDis = false
                        if (res.code === 200) {
                            _this.orderCarList = []
                            _this.$refs.agvStart.close()
                            uni.showToast({ title: '启动成功!', icon: "success", position: 'top' })
                            setTimeout(()=> {
                                _this.getOpenerEventChannel().emit('acceptDataFromOpenedPage', {data: 1});
                                uni.navigateBack({})
                            },1000)
                        } else if (res.code == 403) {
                            uni.showToast({ title: res.msg, icon: "error", position: 'top' })
                            setTimeout(() => { uni.reLaunch({ url: '../../login/login' }); }, 1000);
                        } else {
                            uni.showToast({ title: res.msg, icon: "error", position: 'top' })
                        }
                    },
                    fail(res) {
                        _this.agvStartDis = false
                    }
                });
            },
        }
    }
</script>
<style>
    @import url('../../../static/css/common/order.css');
    .shop-car {
        background-color: #2299ff;
        color: #fff;
    }
    .detl-threeCode {
        font-size: 28px;
        font-weight: bold;
    }
    .popup {
        width: 80vw;
        min-height: 100rpx;
        background-color: #FFF;
        border-radius: 25rpx;
        position: relative;
    }
    .title {
        height: 100rpx;
        line-height: 100rpx;
        width: 100%;
        color: #606266;
        text-align: center;
        font-size: 16px;
    }
    .popup-item {
        height: 80rpx;
        line-height: 80rpx;
        display: flex;
        align-items: center;
        justify-content: center;
    }
    .popup-item-left {
        width: 20vw;
        padding-right: 20rpx;
        text-align: right;
        color: #606266;
    }
    .popup-item-right {
        display: flex;
        align-items: center;
        width: 50vw;
        height: 50rpx;
        padding: 2px 5px;
        border: 1px solid #E4E7ED;
        border-radius: 5rpx;
    }
    .popup-item-right input{
        color: #606266;
    }
    .btn {
        display: flex;
        height: 90rpx;
        margin-top: 20rpx;
        border-top: 1px solid #DCDFE6;
        justify-content: center;
        align-items: center;
    }
    .btn-left {
        display: flex;
        flex: 1;
        height: 100%;
        justify-content: center;
        align-items: center;
        color: #e2231a;
        border-right: 1px solid #DCDFE6;
    }
    .btn-right {
        display: flex;
        flex: 1;
        justify-content: center;
        align-items: center;
        color: #409EFF;
    }
</style>
pages/phyz/comOrder/orderIn.vue
New file
@@ -0,0 +1,508 @@
<template>
    <view class="container">
        <view class="code">
            <uni-search-bar :focus="searchValueFocus" v-model="searchValue"
                maxlength="500" ancel="cancel" @confirm="searchValueInput2()" @clear="clear" placeholder="输入 / 扫描 订单号">
            </uni-search-bar>
            <view class="code-title">
                <view></view>
                <view style="width: 100%;text-align: center;margin: 16rpx 0;"><text style="color: #0055ff;">{{docType}}</text> 总数量:- {{total}} -</view>
                <view style="width: 100rpx;margin: 16rpx 0;" @click="filter()">筛选</view>
            </view>
        </view>
        <view class="list list-font-color" :class="orderDetl.color" v-for="(orderDetl,index) in dataList" :key="index">
            <view class="list-left">
                <view class="detl-threeCode">{{orderDetl.threeCode}}</view>
                <view>主单号:{{orderDetl.orderNo}}</view>
                <view>编号:{{orderDetl.matnr}}</view>
                <view>名称:{{orderDetl.maktx}}</view>
                <view>类型:{{orderDetl.brand}}</view>
                <view>总数量:{{orderDetl.anfme}}</view>
                <view>已入数量:{{orderDetl.qty}}</view>
            </view>
            <view class="list-right" @click="addItem(index)">
                <uni-icons type="folder-add" size="25"  color="#fff"></uni-icons>
            </view>
        </view>
        <view class="shop-car" @click="orderCar()">
            <view class="car-left">
                <uni-icons type="cart-filled" size="35"  color="#fff"></uni-icons>
            </view>
            <view class="car-right">
                <text>{{orderCarList.length}}</text>
            </view>
        </view>
        <!-- 垫高 -->
        <view style="height: 340rpx;text-align: center;color: #b9b9b9;">
            - 已经到底了 -
        </view>
        <!-- 弹窗 -->
        <view>
            <uni-popup ref="addItem" type="dialog">
                <view class="popup">
                    <!-- 标题 -->
                    <view class="title">入库数量</view>
                    <view class="popup-item">
                        <uni-number-box :value="count" :step='1' :max="9999999" color="#747474" @change="changeValue" />
                    </view>
                    <view class="btn">
                        <view class="btn-left" @click="addClose">取消</view>
                        <view class="btn-right" @click="addConfirm()">添加</view>
                    </view>
                </view>
            </uni-popup>
        </view>
        <!-- 筛选弹窗 -->
        <view>
            <uni-popup ref="filter" type="dialog">
                <view class="filter-popup">
                    <!-- 标题 -->
                    <view class="title">筛选</view>
                    <hr>
                    <view class="popup-item" >
                        <view class="item-cl" >
                            <view>单据类型:</view>
                            <view>
                                <uni-combox style="height: 30rpx;" :candidates="docTypes" placeholder="类型" v-model="docType"  @input="getDocType"></uni-combox>
                            </view>
                        </view>
                    </view>
                    <view class="popup-item" >
                        <view class="item-cl">
                            <view>销售订单:</view>
                            <input type="text" v-model="searchValue">
                        </view>
                    </view>
                    <view class="popup-item" >
                        <view class="item-cl">
                            <view>主订单号:</view>
                            <input type="text" v-model="orderNo">
                        </view>
                    </view>
                    <view class="popup-item" >
                        <view class="item-cl">
                            <view>商品编号:</view>
                            <input type="text" v-model="matnr">
                        </view>
                    </view>
                    <view class="popup-item" >
                        <view class="item-cl">
                            <view>商品名称:</view>
                            <input type="text" v-model="maktx">
                        </view>
                    </view>
                    <view class="popup-item" >
                        <view class="item-cl">
                            <view>商品种类:</view>
                            <input type="text" v-model="brand">
                        </view>
                    </view>
                    <view class="btn filter-btn">
                        <view class="btn-left" @click="filterClose">重置</view>
                        <view class="btn-right" @click="filterConfirm()">确认</view>
                    </view>
                </view>
            </uni-popup>
        </view>
    </view>
</template>
<script>
    export default {
        data(){
            return {
                baseUrl: '',
                token: '',
                searchValueFocus: true,
                searchValue: '',
                orderNo: '',
                matnr: '',
                maktx: '',
                brand: '',
                total: '',
                dataList: [],
                orderCarList: [],
                data: {
                    curr: 1,
                    limit: 100,
                    three_code: '',
                    matnr: '',
                    maktx: '',
                    order_no: '',
                    brand: '',
                    docType: 0
                },
                index: 0,
                count: 0,
                mask: false,
                docTypes: [],
                srDocTypes: [],
                docType: ''
            }
        },
        // 下拉刷新
        onReachBottom() {
            this.status = 'more';
            this.getOrderDetlList(this.searchValue,10);
        },
        onLoad() {
            this.baseUrl = uni.getStorageSync('baseUrl');
            this.token = uni.getStorageSync('token');
            this.searchValue = uni.getStorageSync('orderThreeCode');
            this.getOrderDetlList(this.searchValue,10)
            this.getDocTypes()
        },
        onShow() {
            console.log(uni.getStorageSync('pakinOrderCar'));
        },
        onHide() {
            uni.setStorageSync('pakinOrderCar', this.orderCarList);
        },
        methods: {
            getDocTypes() {
                let _this = this
                uni.request({
                    url: `${_this.baseUrl}/doc/type/list`,
                    header: {'token': uni.getStorageSync('token')},
                    method: 'GET',
                    success(res) {
                        res = res.data
                        if (res.code === 200) {
                            for    (let k of res.data) {
                                _this.docTypes.push(k.docName)
                            }
                            _this.srDocTypes = res.data
                        }
                    }
                })
            },
            getOrderDetlList(threeCode,limit) {
                uni.showLoading({})
                console.log(this.srDocTypes);
                console.log(this.docType);
                let _this = this
                for (let k of this.srDocTypes) {
                    if (k.docName == this.docType) {
                        _this.data.docType = k.docId
                    }
                }
                _this.mask = true
                _this.data.three_code = threeCode
                _this.data.limit = limit
                uni.request({
                    url: `${_this.baseUrl}/order/detls/pakin`,
                    header: {'token': uni.getStorageSync('token')},
                    data: _this.data,
                    method: 'GET',
                    success(res) {
                        uni.hideLoading()
                        res = res.data
                        if (res.code === 200) {
                            for (let k of res.data.records) {
                                if (k.anfme > k.qty && k.qty == 0) {
                                    k['color'] = 'order-sts-start'
                                } else if (k.anfme > k.qty && k.qty != 0) {
                                    k['color'] = 'order-sts-working'
                                } else {
                                    k['color'] = 'order-sts-end'
                                }
                            }
                            let list = res.data.records
                            _this.dataList =  _this.dataList.concat(list);
                            _this.data.curr = _this.data.curr + 1
                            // _this.dataList = res.data.records
                            _this.total = res.data.total
                            _this.mask = false
                        } else if (res.code == 403) {
                            uni.showToast({ title: res.msg, icon: "error", position: 'top' })
                            setTimeout(() => { uni.reLaunch({ url: '../../login/login' }); }, 1000);
                        } else {
                            uni.showToast({ title: res.msg, icon: "error", position: 'top' })
                        }
                    }
                })
            },
            searchValueInput2() {
                this.dataList = []
                this.data.curr = 1
                uni.setStorageSync('orderThreeCode', this.searchValue);
                if (this.searchValue.length == 0) {
                    this.getOrderDetlList(this.searchValue,10)
                } else {
                    this.getOrderDetlList(this.searchValue,10)
                }
            },
            clear() {
                this.dataList = []
                this.data.curr = 1
                setTimeout(()=> {
                    this.getOrderDetlList(this.searchValue,10)
                },300)
            },
            // 添加入库商品至 待组托列表
            addItem(index) {
                // 判断添加的商品是否和已经添加的重复
                let dataList = this.dataList
                for (let k of this.orderCarList) {
                    if (k.orderNo == dataList[index].orderNo
                        && k.threeCode == dataList[index].threeCode
                        && k.matnr == dataList[index].matnr) {
                            uni.showToast({ title: '请勿重复添加商品!', icon: "none", position: 'top' })
                            return
                    }
                }
                this.index = index
                this.$refs.addItem.open()
            },
            addClose() {
                this.$refs.addItem.close()
                this.count = 0
            },
            addConfirm() {
                // if (this.count == 0) {
                //     uni.showToast({ title: '入库数量不合法!', icon: "none", position: 'top' })
                //     return
                // }
                this.dataList[this.index]['used'] = true
                this.dataList[this.index]['pakinQty'] = this.count
                this.orderCarList.push(this.dataList[this.index])
                this.index = 0
                this.count = 0
                this.$refs.addItem.close()
            },
            getDocType() {
            },
            // 点击前往 待组托列表
            orderCar() {
                let _this = this
                if (_this.orderCarList.length === 0) {
                    uni.showToast({ title: '请添加入库商品!', icon: "none", position: 'top' })
                    return
                }
                uni.navigateTo({
                    url: './orderCar',
                    success(res) {
                        res.eventChannel.emit('item', {
                            item: _this.orderCarList
                        })
                    },
                    events: {
                        acceptDataFromOpenedPage: function(data) {
                            console.log(data);
                            if (data.data == 1) {
                                _this.orderCarList = []
                                _this.getOrderDetlList(uni.getStorageSync('threeCode'),10)
                            }
                        }
                    }
                })
            },
            changeValue(value) {
                this.count = value
            },
            // 筛选
            filter() {
                this.$refs.filter.open('bottom')
            },
            filterConfirm() {
                this.dataList = []
                this.data.curr = 1
                this.data.maktx = this.maktx
                this.data.matnr = this.matnr
                this.data.order_no = this.order_no
                this.data.brand = this.brand
                this.getOrderDetlList(this.searchValue,10)
                this.$refs.filter.close()
            },
            filterClose() {
                this.dataList = []
                this.data.curr = 1
                this.data.maktx = ''
                this.data.matnr = ''
                this.data.order_no = ''
                this.data.brand = ''
                this.data.docType = 0
                this.docType = ''
                this.searchValue = ''
                this.maktx = ''
                this.matnr = ''
                this.orderNo = ''
                this.brand = ''
                this.getOrderDetlList(this.searchValue,10)
                this.$refs.filter.close()
            }
        }
    }
</script>
<style>
    @import url('../../../static/css/common/order.css');
    .list-font-color {
        color: #fff;
        /* background-color: #33bb44; */
    }
    .order-sts-start {
        background-color: #3eb689;
    }
    .order-sts-working {
        background-color: #ff9d46;
    }
    .order-sts-end {
        background-color: #ff7356;
    }
    .detl-threeCode {
        font-size: 28px;
        font-weight: bold;
    }
    .shop-car {
        position: fixed;
        left: 22rpx;
        bottom: 150rpx;
        background-color: #2299ff;
        width: 260rpx;
        height: 90rpx;
        display: flex;
        align-items: center;
        box-shadow: 0 0 10px 5px rgba(0, 0, 0, .6);
        border-radius: 10rpx;
        color: #fff;
        font-size: 28px;
        font-weight: bold;
    }
    .car-left {
        padding: 16rpx;
        flex: 5;
    }
    .car-right {
        flex: 4;
    }
    .mask {
        position: absolute;
        width: 100%;
        height: 100vh;
        z-index: 999;
        top: 0;
        left: 0;
        background-color: rgba(0, 0, 0, .4);
        display: flex;
        align-items: center;
        justify-content: center;
        font-size: 16px;
        color: #fff;
    }
    .popup {
        width: 80vw;
        min-height: 100rpx;
        background-color: #FFF;
        border-radius: 25rpx;
        position: relative;
    }
    .title {
        height: 100rpx;
        line-height: 100rpx;
        width: 100%;
        color: #606266;
        text-align: center;
        font-size: 16px;
    }
    .popup-item {
        height: 80rpx;
        line-height: 80rpx;
        display: flex;
        align-items: center;
        justify-content: center;
    }
    .popup-item-left {
        width: 16vw;
        padding-right: 20rpx;
        text-align: right;
        color: #606266;
    }
    .popup-item-right {
        display: flex;
        align-items: center;
        width: 50vw;
        height: 50rpx;
        padding: 2px 5px;
        border: 1px solid #E4E7ED;
        border-radius: 5rpx;
    }
    .popup-item-right input{
        color: #606266;
    }
    .btn {
        display: flex;
        height: 90rpx;
        margin-top: 20rpx;
        border-top: 1px solid #DCDFE6;
        justify-content: center;
        align-items: center;
    }
    .btn-left {
        display: flex;
        flex: 1;
        height: 100%;
        justify-content: center;
        align-items: center;
        color: #606266;
        border-right: 1px solid #DCDFE6;
    }
    .btn-right {
        display: flex;
        flex: 1;
        justify-content: center;
        align-items: center;
        color: #409EFF;
    }
    .filter-popup {
        width: 100%;
        height: 80vh;
        background-color: #FFF;
        position: relative;
        border-radius: 30rpx 30rpx 0rpx 0rpx;
    }
    .filter-popup-item {
        height: 100%;
        width: 100%;
        background-color: #c9cdd5;
    }
    .filter-popup-item-left {
        width: 30%;
        height: 100%;
        background-color: #DCDFE6;
    }
    .item-btn {
        width: 100%;
        height: 80rpx;
        line-height: 80rpx;
        background-color: #c9cdd5;
        text-align: center;
    }
    .item-btn:checked {
        background-color: #606266;
    }
    .filter-btn {
        position: absolute;
        left: 0;
        bottom: 0;
        width: 100%;
        background-color: #FFF;
    }
    .item-cl {
        display: flex;align-items: center;
    }
    .item-cl input {
        border-bottom: 1px solid #b9b9b9;
    }
</style>
pages/phyz/comOrder/orderOut.vue
New file
@@ -0,0 +1,410 @@
<template>
    <view>
        <view class="code">
            <uni-search-bar  v-model="searchValue1"
                maxlength="500" ancel="cancel" @confirm="searchValueInput1()" @clear="clear" placeholder="输入 / 扫描 订单号">
            </uni-search-bar>
            <view class="code-title">
                <view></view>
                <view style="width: 100%;text-align: center;margin: 16rpx 0;"><text style="color: #0055ff;">{{docType}}</text>  总数量:- {{total}} -</view>
                <view style="width: 100rpx;margin: 16rpx 0;" @click="filter()">筛选</view>
            </view>
        </view>
        <view class="list list-font-color" :class="orderDetl.color" v-for="(orderDetl,index) in dataList" :key="index">
            <view class="list-left">
                <view class="detl-threeCode">{{orderDetl.threeCode}}</view>
                <view>主单号:{{orderDetl.orderNo}}</view>
                <view>编号:{{orderDetl.matnr}}</view>
                <view>名称:{{orderDetl.maktx}}</view>
                <view>类型:{{orderDetl.brand}}</view>
                <view>订单数量:{{orderDetl.anfme}}</view>
                <view>库存数量:{{orderDetl.stock}}</view>
                <view>已出数量:{{orderDetl.qty}}</view>
            </view>
            <view class="list-right" @click="goToLocDetl(orderDetl)">
                <uni-icons type="right" size="25"  color="#fff"></uni-icons>
            </view>
        </view>
        <!-- 垫高 -->
        <view style="height: 340rpx;text-align: center;color: #b9b9b9;">
            - 已经到底了 -
        </view>
        <!-- <view class="buttom">
            <view style="width: 150rpx;text-align: center;padding-left: 12rpx;">
                名称
            </view>
            <uni-search-bar v-model="searchValue2" style="width: 100%;"
                maxlength="500" ancel="cancel" @confirm="searchValueInput2()" @clear="clear2" placeholder="输入 / 扫描 订单号">
            </uni-search-bar>
        </view> -->
        <!-- 筛选弹窗 -->
        <view>
            <uni-popup ref="filter" type="dialog">
                <view class="filter-popup">
                    <!-- 标题 -->
                    <view class="title">筛选</view>
                    <hr>
                    <view class="popup-item" >
                        <view class="item-cl" >
                            <view>单据类型:</view>
                            <view>
                                <uni-combox style="height: 30rpx;" :candidates="docTypes" placeholder="类型" v-model="docType"  @input="getDocType"></uni-combox>
                            </view>
                        </view>
                    </view>
                    <view class="popup-item">
                        <view class="item-cl">
                            <view>销售订单:</view>
                            <input type="text" v-model="searchValue1">
                        </view>
                    </view>
                    <view class="popup-item">
                        <view class="item-cl">
                            <view>主订单号:</view>
                            <input type="text" v-model="orderNo">
                        </view>
                    </view>
                    <view class="popup-item">
                        <view class="item-cl">
                            <view>商品编号:</view>
                            <input type="text" v-model="matnr">
                        </view>
                    </view>
                    <view class="popup-item">
                        <view class="item-cl">
                            <view>商品名称:</view>
                            <input type="text" v-model="maktx">
                        </view>
                    </view>
                    <view class="popup-item">
                        <view class="item-cl">
                            <view>商品种类:</view>
                            <input type="text" v-model="brand">
                        </view>
                    </view>
                    <view class="btn filter-btn">
                        <view class="btn-left" @click="filterClose">重置</view>
                        <view class="btn-right" @click="filterConfirm()">确认</view>
                    </view>
                </view>
            </uni-popup>
        </view>
    </view>
</template>
<script>
    export default {
        data() {
            return {
                baseUrl: '',
                token: '',
                searchValue1: '',
                searchValue2: '',
                orderNo: '',
                matnr: '',
                maktx: '',
                brand: '',
                total: '',
                dataList: [],
                orderCarList: [],
                data: {
                    curr: 1,
                    limit: 100,
                    three_code: '',
                    matnr: '',
                    maktx: '',
                    order_no: '',
                    brand: '',
                    docType: 0
                },
                docTypes: [],
                srDocTypes: [],
                docType: ''
            }
        },
        onReachBottom() {
            this.status = 'more';
            this.getOrderDetlList(this.searchValue1,10);
        },
        onShow() {
            this.baseUrl = uni.getStorageSync('baseUrl');
            this.token = uni.getStorageSync('token');
            this.searchValue1 = uni.getStorageSync('threeCodeOut1');
            this.searchValue2 = uni.getStorageSync('threeCodeOut2');
            this.getOrderDetlList(this.searchValue1,10)
            this.getDocTypes()
        },
        methods: {
            getDocTypes() {
                let _this = this
                uni.request({
                    url: `${_this.baseUrl}/doc/type/out/list`,
                    header: {'token': uni.getStorageSync('token')},
                    method: 'GET',
                    success(res) {
                        res = res.data
                        if (res.code === 200) {
                            for    (let k of res.data) {
                                _this.docTypes.push(k.docName)
                            }
                            _this.srDocTypes = res.data
                        }
                    }
                })
            },
            getOrderDetlList(threeCode,limit) {
                uni.showLoading({})
                let _this = this
                _this.mask = true
                _this.data.three_code = threeCode
                _this.data.limit = limit
                for (let k of this.srDocTypes) {
                    if (k.docName == this.docType) {
                        _this.data.docType = k.docId
                    }
                }
                uni.request({
                    url: `${_this.baseUrl}/orderDetl/pakout/list/authV193`,
                    header: {'token': uni.getStorageSync('token')},
                    data: _this.data,
                    method: 'GET',
                    success(res) {
                        uni.hideLoading({})
                        res = res.data
                        if (res.code === 200) {
                            for (let k of res.data.records) {
                                if (k.anfme > k.qty && k.qty == 0) {
                                    k['color'] = 'order-sts-start'
                                } else if (k.anfme > k.qty && k.qty != 0) {
                                    k['color'] = 'order-sts-working'
                                } else {
                                    k['color'] = 'order-sts-end'
                                }
                            }
                            let list = res.data.records
                            _this.dataList =  _this.dataList.concat(list);
                            _this.data.curr = _this.data.curr + 1
                            _this.total = res.data.total
                            _this.mask = false
                        } else if (res.code == 403) {
                            uni.showToast({ title: res.msg, icon: "error", position: 'top' })
                            setTimeout(() => { uni.reLaunch({ url: '../../login/login' }); }, 1000);
                        } else {
                            uni.showToast({ title: res.msg, icon: "error", position: 'top' })
                        }
                    }
                })
            },
            searchValueInput1() {
                this.dataList = []
                this.data.curr = 1
                uni.setStorageSync('threeCodeOut1', this.searchValue1);
                uni.setStorageSync('threeCodeOut2', this.searchValue2);
                if (this.searchValue1.length == 0) {
                    this.getOrderDetlList(this.searchValue1,10)
                } else {
                    this.getOrderDetlList(this.searchValue1,10)
                }
            },
            searchValueInput2() {
                uni.setStorageSync('threeCodeOut1', this.searchValue1);
                uni.setStorageSync('threeCodeOut2', this.searchValue2);
                if (this.searchValue1.length == 0) {
                    this.getOrderDetlList(this.searchValue1,10)
                } else {
                    this.getOrderDetlList(this.searchValue1,10)
                }
            },
            clear() {
                this.dataList = []
                this.data.curr = 1
                setTimeout(()=> {
                    this.getOrderDetlList(this.searchValue,10)
                },300)
            },
            clear2() {
                setTimeout(()=> {
                    this.searchValue2 = ''
                    this.getOrderDetlList(this.searchValue1,10)
                },300)
            },
            goToLocDetl(item) {
                if (item.qty >= item.anfme) {
                    uni.showToast({ title: '已完成订单作业数量', icon: "error", position: 'top' })
                    return
                }
                let _this = this
                uni.navigateTo({
                    url: './checkOut',
                    success(res) {
                        res.eventChannel.emit('item', {
                            item: item
                        })
                    },
                    events: {
                        acceptDataFromOpenedPage: function(data) {
                            _this.getOrderDetlList(this.searchValue1,10)
                        }
                    }
                })
            },
            // 筛选
            filter() {
                this.$refs.filter.open('bottom')
            },
            filterConfirm() {
                this.dataList = []
                this.data.curr = 1
                this.data.maktx = this.maktx
                this.data.matnr = this.matnr
                this.data.order_no = this.order_no
                this.data.brand = this.brand
                this.getOrderDetlList(this.searchValue1,10)
                this.$refs.filter.close()
            },
            filterClose() {
                this.dataList = []
                this.data.curr = 1
                this.data.maktx = ''
                this.data.matnr = ''
                this.data.order_no = ''
                this.data.brand = ''
                this.data.docType = 0
                this.docType = ''
                this.searchValue = ''
                this.maktx = ''
                this.matnr = ''
                this.orderNo = ''
                this.brand = ''
                this.getOrderDetlList(this.searchValue1,10)
                this.$refs.filter.close()
            }
        }
    }
</script>
<style>
    @import url('../../../static/css/common/order.css');
    .list-font-color {
        color: #fff;
        /* background-color: #33bb44; */
    }
    .order-sts-start {
        background-color: #3eb689;
    }
    .order-sts-working {
        background-color: #ff9d46;
    }
    .order-sts-end {
        background-color: #ff7356;
    }
    .detl-threeCode {
        font-size: 28px;
        font-weight: bold;
    }
    .title {
        height: 100rpx;
        line-height: 100rpx;
        width: 100%;
        color: #606266;
        text-align: center;
        font-size: 16px;
    }
    .popup-item {
        height: 80rpx;
        line-height: 80rpx;
        display: flex;
        align-items: center;
        justify-content: center;
    }
    .popup-item-left {
        width: 16vw;
        padding-right: 20rpx;
        text-align: right;
        color: #606266;
    }
    .popup-item-right {
        display: flex;
        align-items: center;
        width: 50vw;
        height: 50rpx;
        padding: 2px 5px;
        border: 1px solid #E4E7ED;
        border-radius: 5rpx;
    }
    .popup-item-right input{
        color: #606266;
    }
    .btn {
        display: flex;
        height: 90rpx;
        margin-top: 20rpx;
        border-top: 1px solid #DCDFE6;
        justify-content: center;
        align-items: center;
    }
    .btn-left {
        display: flex;
        flex: 1;
        height: 100%;
        justify-content: center;
        align-items: center;
        color: #606266;
        border-right: 1px solid #DCDFE6;
    }
    .btn-right {
        display: flex;
        flex: 1;
        justify-content: center;
        align-items: center;
        color: #409EFF;
    }
    .filter-popup {
        width: 100%;
        height: 80vh;
        background-color: #FFF;
        position: relative;
        border-radius: 30rpx 30rpx 0rpx 0rpx;
    }
    .filter-popup-item {
        height: 100%;
        width: 100%;
        background-color: #c9cdd5;
    }
    .filter-popup-item-left {
        width: 30%;
        height: 100%;
        background-color: #DCDFE6;
    }
    .item-btn {
        width: 100%;
        height: 80rpx;
        line-height: 80rpx;
        background-color: #c9cdd5;
        text-align: center;
    }
    .item-btn:checked {
        background-color: #606266;
    }
    .filter-btn {
        position: absolute;
        left: 0;
        bottom: 0;
        width: 100%;
        background-color: #FFF;
    }
    .item-cl {
        display: flex;align-items: center;
    }
    .item-cl input {
        border-bottom: 1px solid #b9b9b9;
    }
</style>
pages/phyz/orderOut/orderOutSelect.vue
@@ -119,7 +119,7 @@
        onShow() {
            this.baseUrl = uni.getStorageSync('baseUrl');
            this.token = uni.getStorageSync('token');
            this.searchValue1 = uni.getStorageSync('threeCodeOut1');
            this.searchValue1 = uni.getStorageSync('threeCodeOut193');
            this.searchValue2 = uni.getStorageSync('threeCodeOut2');
            this.getOrderDetlList(this.searchValue1,10)
        },
@@ -131,7 +131,7 @@
                _this.data.three_code = threeCode
                _this.data.limit = limit
                uni.request({
                    url: `${_this.baseUrl}/orderDetl/pakout/list/authV3`,
                    url: `${_this.baseUrl}/orderDetl/pakout/list/authV193`,
                    header: {'token': uni.getStorageSync('token')},
                    data: _this.data,
                    method: 'GET',
@@ -165,7 +165,7 @@
            searchValueInput1() {
                this.dataList = []
                this.data.curr = 1
                uni.setStorageSync('threeCodeOut1', this.searchValue1);
                uni.setStorageSync('threeCodeOut193', this.searchValue1);
                uni.setStorageSync('threeCodeOut2', this.searchValue2);
                if (this.searchValue1.length == 0) {
                    this.getOrderDetlList(this.searchValue1,10)
@@ -175,7 +175,7 @@
                
            },
            searchValueInput2() {
                uni.setStorageSync('threeCodeOut1', this.searchValue1);
                uni.setStorageSync('threeCodeOut193', this.searchValue1);
                uni.setStorageSync('threeCodeOut2', this.searchValue2);
                if (this.searchValue1.length == 0) {
                    this.getOrderDetlList(this.searchValue1,10)