lbq
2025-12-23 94d565b9bc2d441972f203ace2423dc1fe156934
WMS3.0,PDA端,平湖银座五期
23个文件已添加
12个文件已修改
6821 ■■■■■ 已修改文件
common/request.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
locale/en.json 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
locale/zh-Hans.json 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages.json 135 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/AGV/StartInTask.vue 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/emptyTray/inBound.vue 264 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/emptyTray/outBound.vue 235 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/home/index.vue 314 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/home/orderManage.vue 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/inbound/buffStore.vue 309 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/inbound/orderIn.vue 382 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/inbound/orderInExecute.vue 296 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/inbound/orderInItem.vue 291 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/inspect/bad.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/inspect/check.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/listing/labour.vue 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/listing/matnrPalletising.vue 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/listing/unPakin.vue 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/outbound/matDirectDelivery.vue 283 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/outbound/matPreparation.vue 287 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/outbound/matPreparationItem.vue 329 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/outbound/orderOut.vue 382 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/outbound/orderOutExecute.vue 295 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/outbound/orderOutItem.vue 291 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/outbound/orderPick.vue 287 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/outbound/productDirectDelivery.vue 283 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/outbound/productionMatCall.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/transfer/matTransfer.vue 265 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/transfer/orderTransfer.vue 287 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/transfer/orderTransferItem.vue 291 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/transfer/transferType.vue 382 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/workInfo/locInfo.vue 239 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/workInfo/stationInfo.vue 234 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/workInfo/taskInfo.vue 296 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
static/img/toux80.png 补丁 | 查看 | 原始文档 | blame | 历史
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,
locale/en.json
@@ -35,8 +35,10 @@
    "language-change-confirm":"chenge",
    "hello":"Hello, welcome to log in to the WMS system!",
    "intro":"Make manufacturing and logistics more efficient",
    "checkOrder":"checkOrder"
    "checkOrder":"checkOrder",
    "emptyTrayInBound":"EmptyTray InBound",
    "emptyTrayOutBound":"EmptyTray OutBound",
      "orderPick":"Order Pick"
      
  },
  "other":{
locale/zh-Hans.json
@@ -23,11 +23,11 @@
        "palletizing": "单据组托",
        "palletBuilding":"组托解绑",
        "inspectionRequest":"报检",
        "qualityInspection":"质检",
        "defectiveMarking":"不良标记",
        "qualityInspection":"质检解锁",
        "defectiveMarking":"质检上锁",
        "manualPutaway":"人工上架",
        "stationBinding":"站点绑定",
        "inboundInitiation":"启动入库",
        "inboundInitiation":"AGV入库",
        "stationUnbinding":"站点解绑",
        "bindAndInbound":"绑定&入库",
        "quickPicking":"快速拣货",
@@ -36,7 +36,23 @@
        "language-change-confirm":"确定切换?",
        "hello":"您好,欢迎登录WMS系统!",
        "intro":"让制造与物流更高效",
        "checkOrder":"盘点"
        "checkOrder":"盘点",
        "emptyOutBound":"空托出库",
        "emptyInBound":"空托入库",
        "orderPick":"订单出库",
        "orderPickGroup":"出库订单",
        "orderTransfer":"调拨订单",
        "orderIn":"入库订单",
        "orderInItem":"入库订单详情",
        "matTransfer":"移库",
        "buffStore":"灌桶入库",
        "stationInfo":"站点维护",
        "locInfo":"库位维护",
        "taskInfo":"工作任务",
        "productionMatCall":"生产叫料",
        "matDirectDelivery":"生产直送",
        "productDirectDelivery":"成品直出",
        "matPreparation":"生产备料"
        
        
    },
pages.json
@@ -13,6 +13,132 @@
            }
        },
        {
            "path": "pages/emptyTray/outBound",
            "style": {
                "navigationBarTitleText": "空托出库"
            }
        },
        {
            "path": "pages/emptyTray/inBound",
            "style": {
                "navigationBarTitleText": "空托入库"
            }
        },
        {
            "path": "pages/outbound/orderPick",
            "style": {
                "navigationBarTitleText": "订单出库"
            }
        },
        {
            "path": "pages/outbound/orderOut",
            "style": {
                "navigationBarTitleText": "出库订单"
            }
        },
        {
            "path": "pages/outbound/orderOutItem",
            "style": {
                "navigationBarTitleText": "订单出库详情"
            }
        },
        {
            "path": "pages/outbound/matPreparation",
            "style": {
                "navigationBarTitleText": "生产备料"
            }
        },
        {
            "path": "pages/outbound/matPreparationItem",
            "style": {
                "navigationBarTitleText": "生产备料详情"
            }
        },
        {
            "path": "pages/inbound/orderIn",
            "style": {
                "navigationBarTitleText": "入库订单"
            }
        },
        {
            "path": "pages/inbound/orderInExecute",
            "style": {
                "navigationBarTitleText": "入库订单列表"
            }
        },
        {
            "path": "pages/inbound/orderInItem",
            "style": {
                "navigationBarTitleText": "入库订单详情"
            }
        },
        {
            "path": "pages/transfer/transferType",
            "style": {
                "navigationBarTitleText": "调拨类型"
            }
        },
        {
            "path": "pages/transfer/orderTransfer",
            "style": {
                "navigationBarTitleText": "调拨订单"
            }
        },
        {
            "path": "pages/transfer/orderTransferItem",
            "style": {
                "navigationBarTitleText": "调拨订单详情"
            }
        },
        {
            "path": "pages/transfer/matTransfer",
            "style": {
                "navigationBarTitleText": "移库"
            }
        },
        {
            "path": "pages/workInfo/taskInfo",
            "style": {
                "navigationBarTitleText": "工作任务"
            }
        },
        {
            "path": "pages/workInfo/stationInfo",
            "style": {
                "navigationBarTitleText": "站点信息"
            }
        },
        {
            "path": "pages/workInfo/locInfo",
            "style": {
                "navigationBarTitleText": "库位信息"
            }
        },
        {
            "path": "pages/inbound/buffStore",
            "style": {
                "navigationBarTitleText": "灌桶入库"
            }
        },
        {
            "path": "pages/outbound/matDirectDelivery",
            "style": {
                "navigationBarTitleText": "生产直送"
            }
        },
        {
            "path": "pages/outbound/productDirectDelivery",
            "style": {
                "navigationBarTitleText": "成品直出"
            }
        },
        {
            "path": "pages/outbound/productionMatCall",
            "style": {
                "navigationBarTitleText": "生产叫料"
            }
        },
        {
            "path": "pages/outbound/wavePick",
            "style": {
                "navigationBarTitleText": "波次拣货"
@@ -75,7 +201,7 @@
        {
            "path": "pages/AGV/StartInTask",
            "style": {
                "navigationBarTitleText": "AGV启动入库"
                "navigationBarTitleText": "AGV入库"
            }
        },
        {
@@ -112,13 +238,13 @@
        {
            "path": "pages/inspect/check",
            "style": {
                "navigationBarTitleText": "质检"
                "navigationBarTitleText": "质检解锁"
            }
        },
        {
            "path": "pages/inspect/bad",
            "style": {
                "navigationBarTitleText": "不良标签"
                "navigationBarTitleText": "质检上锁"
            }
        },
        {
@@ -275,9 +401,6 @@
                "enablePullDownRefresh": false
            }
        }
        , {
            "path": "pages/phyz/AGV/emptyOut",
            "style": {
pages/AGV/StartInTask.vue
@@ -1,11 +1,19 @@
<template>
    <view class="has-foot">
        <form>
            <view class="cu-form-group ">
                <view class="title">接驳站</view>
                <input placeholder="请扫描接驳站条码" v-model="barcode" ></input>
            <view class="cu-form-group margin-top">
                <view class="title">接驳站点</view>
                <input placeholder="请扫描接驳站点条码" v-model="barcode" ></input>
                <!-- <text class='cuIcon-search text-blue' @click="search"></text> -->
            </view>
            <view class="cu-form-group">
                <view class="title">容器号</view>
                <input placeholder="请扫描容器编码" v-model="barcode" ></input>
                <text class='cuIcon-search text-blue' @click="search"></text>
            </view>    
<!--             <view class="flex solid-bottom padding-sm justify-between">
                <view class="text-blue margin-left">容器码:{{container}}</view>
            </view> -->
            <view class="cu-form-group">
                <view class="title">目标库区</view>
                <view style="width: 75%;">
@@ -14,11 +22,6 @@
                </view>
            </view>
        </form>
        <view class="flex solid-bottom padding-sm justify-between">
            <view class="text-blue">容器码:{{container}}</view>
        </view>
        <view class="cu-list det menu sm-border  padding">
@@ -70,7 +73,7 @@
        <view class="cu-bar btn-group foot">
            <button class="cu-btn text-blue line-blue shadow" @click="clear">清空</button>
            <button class="cu-btn bg-blue shadow-blur" :disabled="repeatClick" @click="confirm">启动</button>
            <button class="cu-btn bg-blue shadow-blur" :disabled="repeatClick" @click="confirm">入库</button>
        </view>
        
@@ -106,7 +109,10 @@
        computed: {
            ...mapState('user', ['dynamicFields']),
        },
        mounted() {},
        mounted() {
            this.getRece()
            this.whAreaId = uni.getStorageSync('whAreaId')
        },
        methods: {    
            selChange(val) {
                uni.setStorageSync('whAreaId', val)
@@ -166,7 +172,7 @@
            async confirm() {                
                if(this.barcode === '' || this.barcode ===null){
                    uni.showToast({
                        title: "接驳站码不能为空",
                        title: "接驳站点不能为空",
                        icon: "none",
                    })
                    return ;
@@ -177,7 +183,7 @@
                        icon: "none",
                    })
                    return ;
                }
                }
                this.repeatClick = true
                const {
                    code,
@@ -200,10 +206,21 @@
                    })
                }
                this.repeatClick = false
            },
            async getRece() {
                const {
                    code,
                    data,
                    msg
                } = await request('/areas/receipt', {}, 'get')
                if (code === 200) {
                    this.range = data.map(item => ({
                        value: item.id,
                        text: item.warehouseId$ + "-- " + item.name
                    }));
                }
            },
        }
    }
</script>
pages/emptyTray/inBound.vue
New file
@@ -0,0 +1,264 @@
<template>
    <view class="has-foot">
        <form>
            <view class="cu-form-group margin-top">
                <view class="title">容器号</view>
                <input placeholder="请扫容器条码" v-model="container"></input>
                <text class='cuIcon-search text-blue' @click="search"></text>
            </view>
            <view class="cu-form-group ">
                <view class="title">接驳站点</view>
                <input placeholder="请扫描接驳站点条码" v-model="barcode" ></input>
            </view>
        </form>
        <view class="cu-list det menu sm-border  padding">
            <block v-for="(item, index) in list" :key="index">
                <view class="cu-bar bg-white solid-bottom margin-top-sm">
                    <view class="action">
                        <view class="index">
                            {{index+1}}
                        </view>
                        <view class="text-blue">
                            {{`${item.maktx}`}}
                        </view>
                    </view>
                    <!--     <view class="action" >
                        <text @click="remove(index)" class="cuIcon-close text-red" style="font-size: 24px;"></text>
                    </view> -->
                </view>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-black">ASN:</text>
                    </view>
                    <view class="action">
                        <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.batch}}</text>
                    </view>
                </view>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-black">收货数量:</text>
                    </view>
                    <view class="action">
                        <text class="text-grey ">{{item.anfme}}</text>
                    </view>
                </view>
            </block>
        </view>
        <view class="cu-bar btn-group foot">
            <button class="cu-btn text-blue line-blue shadow" @click="clear">清空</button>
            <button class="cu-btn bg-blue shadow-blur" @click="confirm">回库</button>
        </view>
        <uni-popup ref="popup" class="cu-popup">
            <view class="popup-content">
                <view class="head">
                    <text>推荐</text>
                    <text class='cuIcon-close text-red close' @click="close"></text>
                </view>
                <div class="body">
                    <view class="cu-list grid col-3 no-border">
                        <view class="item" v-for="el in range">
                            <view class="cu-btn round  sm" :class="[el===curCode?'bg-blue':'line-blue']"
                                @click="itemChange(el)">{{el}}</view>
                        </view>
                    </view>
                </div>
                <view class="cu-bar btn-group ">
                    <button class="cu-btn bg-blue shadow-blur" @click="popupSubmit">提交</button>
                </view>
            </view>
        </uni-popup>
    </view>
</template>
<script>
    import {
        request
    } from '../../common/request.js'
    import {
        mapState,
        mapMutations,
        mapActions,
        mapGetters
    } from 'vuex';
    export default {
        data() {
            return {
                barcode: '',
                areaName: '',
                locCode: '',
                container: '',
                list: [],
                range: [],
                curCode: ''
            }
        },
        computed: {
            ...mapState('user', ['dynamicFields']),
        },
        mounted() {},
        methods: {
            async search() {
                const {
                    code,
                    data,
                    msg
                } = await request('/stock/operate/list', {
                    barcode: this.container,
                    sta: this.barcode
                })
                if (code === 200) {
                    // const find = this.list.find(el => el.id === data.id);
                    // !find &&
                     this.list = data
                } else {
                    uni.showToast({
                        title: msg,
                        icon: "none",
                    })
                }
            },
            remove(index) {
                this.list.splice(index, 1);
            },
            clear() {
                this.list = []
                this.container = ''
                this.barcode = ''
            },
            open() {
                this.$refs.popup.open()
            },
            close() {
                this.$refs.popup.close()
            },
            popupSubmit() {
                this.$refs.popup.close()
            },
            itemChange(el) {
                this.curCode = el
            },
            async confirm() {
                if(this.container === '' || this.container ===null){
                    uni.showToast({
                        title: "容器码不能为空",
                        icon: "none",
                    })
                    return ;
                }
                if(this.barcode === '' || this.barcode ===null){
                    uni.showToast({
                        title: "接驳站码不能为空",
                        icon: "none",
                    })
                    return ;
                }
                const {
                    code,
                    data,
                    msg
                } = await request('/AGV/staBind',{
                        barcode: this.container,
                        sta: this.barcode
                    }
                )
                if (code === 200) {
                    uni.showToast({
                        title: '绑定成功'
                    })
                    this.clear()
                } else {
                    uni.showToast({
                        title: msg,
                        icon: "none",
                    })
                }
            },
        }
    }
</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;
    }
    .uni-file-picker {
        width: 100%;
        margin-bottom: 10px;
    }
    .uni-select__selector {
        z-index: 999;
    }
    .tj {
        height: auto;
        padding: 6px 8px;
        display: inline-block;
        border-radius: 6px;
    }
    .item {
        display: flex;
        justify-content: center;
    }
    .item .cu-btn {
        font-size: 26upx;
    }
</style>
pages/emptyTray/outBound.vue
New file
@@ -0,0 +1,235 @@
<template>
    <view class="has-foot">
        <form>
            <view class="cu-form-group margin-top">
                <view class="title">接驳站点</view>
                <input placeholder=" 请扫描接驳站点条码" v-model="barcode" ></input>
            </view>
            <view class="cu-form-group margin-bottom">
                <view class="title">容器类型</view>
                <view style="width: 78%;">
                    <uni-data-select style="min-width: 80%; max-width: 80%;" v-model="palletTypeId" :localdata="range"
                        placement="bottom" @change="selChange"></uni-data-select>
                </view>
            </view>
        </form>
        <view class="cu-bar btn-group foot">
            <button class="cu-btn text-blue line-blue shadow" @click="clear">清空</button>
            <button class="cu-btn bg-blue shadow-blur" @click="confirm">呼叫</button>
        </view>
    </view>
</template>
<script>
    import {
        request
    } from '../../common/request.js'
    import {
        mapState,
        mapMutations,
        mapActions,
        mapGetters
    } from 'vuex';
    export default {
        data() {
            return {
                barcode: '',
                areaName: '',
                locCode: '',
                container: '',
                list: [],
                range: [],
                curCode: ''
            }
        },
        computed: {
            ...mapState('user', ['dynamicFields']),
        },
        mounted() {
            this.getPalletType(),
            this.palletTypeId = uni.getStorageSync('palletTypeId')
        },
        methods: {
            selChange(val) {
                uni.setStorageSync('palletTypeId', val.value)
            },
            // async search() {
            //     const {
            //         code,
            //         data,
            //         msg
            //     } = await request('/stock/operate/list', {
            //         barcode: this.container,
            //         sta: this.barcode
            //     })
            //     if (code === 200) {
            //         // const find = this.list.find(el => el.id === data.id);
            //         // !find &&
            //          this.list = data
            //     } else {
            //         uni.showToast({
            //             title: msg,
            //             icon: "none",
            //         })
            //     }
            // },
            remove(index) {
                this.list.splice(index, 1);
            },
            clear() {
                this.list = []
                this.palletTypeId = ''
                this.container = ''
                this.barcode = ''
            },
            open() {
                this.$refs.popup.open()
            },
            close() {
                this.$refs.popup.close()
            },
            popupSubmit() {
                this.$refs.popup.close()
            },
            itemChange(el) {
                this.curCode = el
            },
            async getPalletType() {
                const {
                    code,
                    data,
                    msg
                } = await request('/info/palletType/list', {}, 'get')
                if (code === 200) {
                    this.range = data.map(item => ({
                        value: item.id,
                        text: item.group === null ? item.label : item.group + "-- " + item.label
                    }));
                }
            },
            async confirm() {
                if(this.barcode === '' || this.barcode === null){
                    uni.showToast({
                        title: "接驳站点不能为空",
                        icon: "none",
                    })
                    return ;
                }
                if(this.palletTypeId === '' || this.palletTypeId === null){
                    uni.showToast({
                        title: "请选择托盘类型",
                        icon: "none",
                    })
                    return ;
                } else {
                    const {
                        code,
                        data,
                        msg
                    } = await request('/orders/confirm', {
                        receipts: newArr,
                        palletTypeId: this.palletTypeId
                    })
                    if (code === 200) {
                        uni.showToast({
                            title: '呼叫空托盘中,请稍作等待'
                        })
                        this.list = []
                        this.barcode = ''
                        this.isconfirm = false
                    } else {
                        uni.showToast({
                            title: msg,
                            icon: "none",
                            position: 'top'
                        })
                    }
                }
                // const {
                //     code,
                //     data,
                //     msg
                // } = await request('/AGV/staBind',{
                //         barcode: this.container,
                //         sta: this.barcode
                //     }
                // )
                // if (code === 200) {
                //     uni.showToast({
                //         title: '绑定成功'
                //     })
                //     this.clear()
                // } else {
                //     uni.showToast({
                //         title: msg,
                //         icon: "none",
                //     })
                // }
            },
        }
    }
</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;
    }
    .uni-file-picker {
        width: 100%;
        margin-bottom: 10px;
    }
    .uni-select__selector {
        z-index: 999;
    }
    .tj {
        height: auto;
        padding: 6px 8px;
        display: inline-block;
        border-radius: 6px;
    }
    .item {
        display: flex;
        justify-content: center;
    }
    .item .cu-btn {
        font-size: 26upx;
    }
</style>
pages/home/index.vue
@@ -3,61 +3,84 @@
        <view class="user-bg">
            <image src="../../static/img/toux.png" class="tx" mode="widthFix"></image>
            <view class="text-xl margin-top-sm margin-left-lg">
                <view class="text-blue text-bold text-xxl">
                <view class="text-blue text-bold text-xl">
                    {{user.username}}
                </view>
                <view class="text-gray">仓库主管 | zy32423423</view>
                <view class="text-gray text-l">{{user.code}}</view>
            </view>
            <view class="cu-btn bg-red margin-tb-sm lg round" style="position: absolute; right: 20px; width: 30%; height: 50%;" @click="equit">{{$t('index.outLogin')}}</view>
        </view>
        <view class="cu-bar bg-white solid-bottom margin-top">
        <view class="cu-bar bg-white solid-bottom margin-top-sm">
            <view class="action">
                <text class="cuIcon-title text-orange "></text> 收货
                <text class="cuIcon-title text-orange "></text> 入库
            </view>
        </view>
        </view>
        <view class="cu-list grid col-4 no-border">
            <!-- <view class="cu-item">
            <!-- 空托入库 -->
            <view class="cu-item">
                <navigator hover-class='none' url="/pages/emptyTray/inBound" navigateTo>
                    <view class="cuIcon-pulldown text-blue"></view>
                    <text>{{$t('index.emptyInBound')}}</text>
                </navigator>
            </view>
            <view class="cu-item">
                <navigator hover-class='none' url="/pages/rece/standard" navigateTo>
                    <view class="cuIcon-apps text-blue">
                    </view>
                    <text>标准收货</text>
                </navigator>
            </view> -->
            </view>
            <!-- 单据组托 -->
            <view class="cu-item">
                <navigator hover-class='none' url="/pages/listing/matnrPalletising" navigateTo>
                    <view class="cuIcon-cardboard text-blue"></view>
                    <text>{{$t('index.palletizing')}}</text>
                </navigator>
            </view>
            <!-- 组托解绑 -->
            <view class="cu-item">
                <navigator hover-class='none' url="/pages/listing/unPakin" navigateTo>
                    <view class="cuIcon-cardboardforbid text-blue"></view>
                    <text>{{$t('index.palletBuilding')}}</text>
                </navigator>
            </view>
            <!-- 启动入库 -->
            <view class="cu-item">
                <navigator hover-class='none' url="/pages/AGV/StartInTask" navigateTo>
                    <view class="cuIcon-pulldown text-blue"></view>
                    <text>{{$t('index.inboundInitiation')}}</text>
                </navigator>
            </view>
            <!-- 入库订单 -->
            <view class="cu-item">
                <navigator hover-class='none' url="/pages/inbound/orderIn" navigateTo>
                    <view class="cuIcon-addressbook text-blue"></view>
                    <text>{{$t('index.orderIn')}}</text>
                </navigator>
            </view>
            <!-- 人工上架 -->
            <view class="cu-item">
                <navigator hover-class='none' url="/pages/listing/labour" navigateTo>
                    <view class="cuIcon-friendadd text-blue"></view>
                    <text>{{$t('index.manualPutaway')}}</text>
                </navigator>
            </view>
            <!-- 灌桶入库:缓存区袋装塑料粒子灌桶后入库 -->
            <view class="cu-item">
                <navigator hover-class='none' url="/pages/inbound/buffStore" navigateTo>
                    <view class="cuIcon-all text-blue"></view>
                    <text>{{$t('index.buffStore')}}</text>
                </navigator>
            </view>
<!--             <view class="cu-item">
                <navigator hover-class='none' url="/pages/rece/other" navigateTo>
                    <view class="cuIcon-taoxiaopu text-blue">
                    </view>
                    <text>{{$t('index.GR')}}</text>
                </navigator>
            </view>
            <!-- <view class="cu-item">
                <navigator hover-class='none' url="/pages/listing/disc" navigateTo>
                    <view class="cuIcon-cardboard text-blue">
                    </view>
                    <text>组盘</text>
                </navigator>
            </view> -->
            <view class="cu-item">
                <navigator hover-class='none' url="/pages/listing/matnrPalletising" navigateTo>
                    <view class="cuIcon-cardboard text-blue">
                    </view>
                    <text>{{$t('index.palletizing')}}</text>
                </navigator>
            </view>
            <view class="cu-item">
                <navigator hover-class='none' url="/pages/listing/unPakin" navigateTo>
                    <view class="cuIcon-cardboardforbid text-blue">
                    </view>
                    <text>{{$t('index.palletBuilding')}}</text>
                </navigator>
            </view>
            <view class="cu-item">
                <navigator hover-class='none' url="/pages/inspect/report" navigateTo>
                    <view class="cuIcon-edit text-blue">
@@ -65,35 +88,164 @@
                    <text>{{$t('index.inspectionRequest')}}</text>
                </navigator>
            </view>
            <view class="cu-item">
                <navigator hover-class='none' url="/pages/inspect/check" navigateTo>
                    <view class="cuIcon-warn text-blue">
                <navigator hover-class='none' url="/pages/listing/disc" navigateTo>
                    <view class="cuIcon-cardboard text-blue">
                    </view>
                    <text>{{$t('index.qualityInspection')}}</text>
                    <text>组盘</text>
                </navigator>
            </view> -->
        </view>
        <view class="cu-bar bg-white solid-bottom margin-top-sm">
            <view class="action">
                <text class="cuIcon-title text-orange "></text> 出库
            </view>
        </view>
        <view class="cu-list grid col-4 no-border">
            <!-- 空托出库 -->
            <view class="cu-item">
                <navigator hover-class='none' url="/pages/emptyTray/outBound" navigateTo>
                    <view class="cuIcon-pullup text-blue"></view>
                    <text>{{$t('index.emptyOutBound')}}</text>
                </navigator>
            </view>
            <!-- 订单出库 -->
            <view class="cu-item">
                <navigator hover-class='none' url="/pages/outbound/orderPick" navigateTo>
                    <view class="cuIcon-addressbook text-blue"></view>
                    <text>{{$t('index.orderPick')}}</text>
                </navigator>
            </view>
            <!-- 生产直送:原材料不入库直接送产线 -->
            <view class="cu-item">
                <navigator hover-class='none' url="/pages/outbound/matDirectDelivery" navigateTo>
                    <view class="cuIcon-deliver text-blue"></view>
                    <text>{{$t('index.matDirectDelivery')}}</text>
                </navigator>
            </view>
            <!-- 成品直出:成品不入立库直接出库 -->
            <view class="cu-item">
                <navigator hover-class='none' url="/pages/outbound/productDirectDelivery" navigateTo>
                    <view class="cuIcon-deliver_fill text-blue"></view>
                    <text>{{$t('index.productDirectDelivery')}}</text>
                </navigator>
            </view>
            <!-- 出库订单 -->
            <view class="cu-item">
                <navigator hover-class='none' url="/pages/outbound/orderOut" navigateTo>
                    <view class="cuIcon-addressbook text-blue"></view>
                    <text>{{$t('index.orderPickGroup')}}</text>
                </navigator>
            </view>
            <!-- 生产备料 -->
            <view class="cu-item">
                <navigator hover-class='none' url="/pages/outbound/matPreparation" navigateTo>
                    <view class="cuIcon-present text-blue"></view>
                    <text>{{$t('index.matPreparation')}}</text>
                </navigator>
            </view>
            <!-- 生产叫料 -->
<!--             <view class="cu-item">
                <navigator hover-class='none' url="/pages/outbound/productionMatCall" navigateTo>
                    <view class="cuIcon-apps text-blue">
                    </view>
                    <text>{{$t('index.productionMatCall')}}</text>
                </navigator>
            </view> -->
        </view>
        <view class="cu-bar bg-white solid-bottom margin-top-sm">
            <view class="action">
                <text class="cuIcon-title text-orange "></text> 综合
            </view>
        </view>
        <view class="cu-list grid col-4 no-border">
            <!-- 调拨订单 -->
            <view class="cu-item">
                <navigator hover-class='none' url="/pages/transfer/transferType" navigateTo>
                    <view class="cuIcon-addressbook text-blue"></view>
                    <text>{{$t('index.orderTransfer')}}</text>
                </navigator>
            </view>
            <!-- 移库 -->
            <view class="cu-item">
                <navigator hover-class='none' url="/pages/transfer/matTransfer" navigateTo>
                    <view class="cuIcon-location text-blue"></view>
                    <text>{{$t('index.matTransfer')}}</text>
                </navigator>
            </view>
            <!-- 盘点 -->
            <view class="cu-item">
                <navigator hover-class='none' url="/pages/check/checkOrder" navigateTo>
                    <view class="cuIcon-roundcheck text-blue"></view>
                    <text>{{$t('index.checkOrder')}}</text>
                </navigator>
            </view>
            <!-- 质检上锁 -->
            <view class="cu-item">
                <navigator hover-class='none' url="/pages/inspect/bad" navigateTo>
                    <view class="cuIcon-appreciate text-blue">
                    </view>
                    <view class="cuIcon-lock text-blue"></view>
                    <text>{{$t('index.defectiveMarking')}}</text>
                </navigator>
            </view>
            <!-- 质检解锁 -->
            <view class="cu-item">
                <navigator hover-class='none' url="/pages/listing/labour" navigateTo>
                    <view class="cuIcon-friendadd text-blue">
                    </view>
                    <text>{{$t('index.manualPutaway')}}</text>
                <navigator hover-class='none' url="/pages/inspect/check" navigateTo>
                    <view class="cuIcon-unlock text-blue"></view>
                    <text>{{$t('index.qualityInspection')}}</text>
                </navigator>
            </view>
            <!-- 工作任务 -->
            <view class="cu-item">
                <navigator hover-class='none' url="/pages/workInfo/taskInfo" navigateTo>
                    <view class="cuIcon-tagfill text-blue"></view>
                    <text>{{$t('index.taskInfo')}}</text>
                </navigator>
            </view>
            <!-- 站点维护 -->
            <view class="cu-item">
                <navigator hover-class='none' url="/pages/workInfo/stationInfo" navigateTo>
                    <view class="cuIcon-service text-blue"></view>
                    <text>{{$t('index.stationInfo')}}</text>
                </navigator>
            </view>
            <!-- 库位维护 -->
            <view class="cu-item">
                <navigator hover-class='none' url="/pages/workInfo/locInfo" navigateTo>
                    <view class="cuIcon-servicefill text-blue"></view>
                    <text>{{$t('index.locInfo')}}</text>
                </navigator>
            </view>
            <!-- <view class="cu-item">
                <navigator hover-class='none' url="/pages/outbound/fastPicking" navigateTo>
                    <view class="cuIcon-apps text-blue">
                    </view>
                    <text>{{$t('index.quickPicking')}}</text>
                </navigator>
            </view>
            <view class="cu-item">
                <navigator hover-class='none' url="/pages/outbound/wavePickItem" navigateTo>
                    <view class="cuIcon-apps text-blue">
                    </view>
                    <text>{{$t('index.wavePick')}}</text>
                </navigator>
            </view> -->
<!--             <view class="cu-item">
                <navigator hover-class='none' url="/pages/check/firstCheck" navigateTo>
                    <view class="cuIcon-apps text-blue"></view>
                    <text>{{$t('index.checkOrder')}}</text>
                </navigator>
            </view> -->
        </view>
        <view class="cu-bar bg-white solid-bottom margin-top">
        <!-- <view class="cu-bar bg-white solid-bottom margin-top-sm">
            <view class="action">
                <text class="cuIcon-title text-orange "></text> AGV
            </view>
@@ -127,51 +279,51 @@
                    </view>
                    <text>{{$t('index.bindAndInbound')}}</text>
                </navigator>
            </view>
        </view>
            </view>
        </view> -->
        <view class="cu-bar bg-white solid-bottom margin-top">
        <!-- <view class="cu-bar bg-white solid-bottom margin-top-sm">
            <view class="action">
                <text class="cuIcon-title text-orange "></text> 作业
                <text class="cuIcon-title text-orange "></text> 开发
            </view>
        </view>
        <view class="cu-list grid col-4 no-border">
            <view class="cu-item">
                <navigator hover-class='none' url="/pages/outbound/fastPicking" navigateTo>
                    <view class="cuIcon-apps text-blue">
                <navigator hover-class='none' url="/pages/phyz/stationManage/stationManage" navigateTo>
                    <view class="cuIcon-punch text-blue">
                    </view>
                    <text>{{$t('index.quickPicking')}}</text>
                    <text>{{$t('index.stationBinding')}}</text>
                </navigator>
            </view>
            <view class="cu-item">
                <navigator hover-class='none' url="/pages/outbound/wavePickItem" navigateTo>
                    <view class="cuIcon-apps text-blue">
                <navigator hover-class='none' url="/pages/home/orderManage" navigateTo>
                    <view class="cuIcon-punch text-blue">
                    </view>
                    <text>{{$t('index.wavePick')}}</text>
                    <text>{{$t('index.stationBinding')}}</text>
                </navigator>
            </view>
            <view class="cu-item">
                <navigator hover-class='none' url="/pages/check/checkOrder" navigateTo>
                    <view class="cuIcon-apps text-blue">
                <navigator hover-class='none' url="/pages/home/locMastManage" navigateTo>
                    <view class="cuIcon-punch text-blue">
                    </view>
                    <text>{{$t('index.checkOrder')}}</text>
                    <text>{{$t('index.stationBinding')}}</text>
                </navigator>
            </view>
            <view class="cu-item">
                <navigator hover-class='none' url="/pages/check/firstCheck" navigateTo>
                    <view class="cuIcon-apps text-blue">
                <navigator hover-class='none' url="/pages/home/wrkMastManage" navigateTo>
                    <view class="cuIcon-punch text-blue">
                    </view>
                    <text>{{$t('index.checkOrder')}}</text>
                    <text>{{$t('index.stationBinding')}}</text>
                </navigator>
            </view>
            </view> -->
        </view>
        <view class="padding flex flex-direction">
<!--         <view class="padding flex flex-direction">
            <view class="cu-btn bg-red margin-tb-sm lg round" @click="equit">{{$t('index.outLogin')}}</view>
        </view>
        </view> -->
    </view>
    </view>
</template>
@@ -180,15 +332,11 @@
    export default {
        data() {
            return {
                user:{
                user:{
                }
            }
        },
        onShow() {
            this.user = uni.getStorageSync('userData');            
        },
        methods: {
@@ -217,27 +365,23 @@
        display: flex;
        flex-direction: row;
        background-size: cover;
        height: 280rpx;
        height: 150rpx;
        position: relative;
        color: #000;
        align-items: center;
        justify-content: start;
        padding: 0 40rpx;
        background-color: #fff;
    }
    .tx {
        width: 160rpx;
        width: 100rpx;
        border-radius: 50%;
        border: 1px solid #e9e9e9;
    }
    .left {
        display: flex;
        flex-direction: column;
    }
    .avatar {
        width: 160rpx;
        height: 160rpx;
pages/home/orderManage.vue
@@ -1,11 +1,20 @@
<template>
    <view>
<!--         <form >
            <view class="cu-form-group margin-top" 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>
                <text class='cuIcon-search text-blue' @click="search"></text>
            </view>
        </form>     -->
        <scroll-view scroll-y class="page">
            <view class="nav-list">
                <!-- :url="'/pages' + item.url + '?param=' + item.param"  navigateTo-->
                <view hover-class='none'  class="nav-li"  @click="toOrder(item)"
                    :class="'bg-'+item.color" :style="[{animation: 'show ' + ((index+1)*0.2+1) + 's 1'}]"
                    v-for="(item,index) in elements" :key="index">
                    v-for="(item,index) in elements2" :key="index">
                    <view class="nav-title">{{item.title}}</view>
                    <view class="nav-name">{{item.name}}</view>
                    <text :class="'cuIcon-' + item.cuIcon"></text>
@@ -31,7 +40,7 @@
                        title: '待包装入库单',
                        name: 'pakinOrder',
                        color: 'blue',
                        url: `/phyz/waitOrder/waitOrderIn`
                        url: `/outbound/orderPick`
                    },
                    {
                        title: '待包装出库单',
pages/inbound/buffStore.vue
New file
@@ -0,0 +1,309 @@
<template>
    <view class="has-foot">
        <form>
            <view class="flex solid-bottom padding-sm justify-between">
                <view class="text-grey margin-left">已选物料信息:{{container}}</view>
            </view>
            <view class="cu-form-group margin-top">
                <view class="title">空桶接驳站点</view>
                <input placeholder="请扫描空桶接驳站点条码" v-model="barcode" ></input>
                <!-- <text class='cuIcon-search text-blue' @click="search"></text> -->
            </view>
            <view class="cu-bar btn-group top margin-top">
                <button class="cu-btn text-blue line-blue shadow" @click="clear">1.呼叫空桶</button>
                <!-- <button class="cu-btn bg-blue shadow-blur" :disabled="repeatClick" @click="confirm">2.呼叫袋装新料</button> -->
<!--                 <button class="ccu-btn bg-blue shadow-blur shadow-blur" @click="clear">呼叫袋装新料</button>
                <button class="ccu-btn bg-blue shadow-blur shadow-blur" @click="clear">呼叫空桶</button> -->
                <!-- <button class="cu-btn bg-blue shadow-blur" :disabled="repeatClick" @click="confirm">入库</button> -->
            </view>
            <view class="cu-form-group margin-top">
                            <view class="title">袋装新料接驳站点</view>
                            <input placeholder="请扫描袋装新料接驳站点条码" v-model="barcode" ></input>
                            <!-- <text class='cuIcon-search text-blue' @click="search"></text> -->
                        </view>
                        <view class="cu-bar btn-group top margin-top">
                            <!-- <button class="cu-btn text-blue line-blue shadow" @click="clear">1.呼叫空桶</button> -->
                            <button class="cu-btn bg-blue shadow-blur" :disabled="repeatClick" @click="confirm">2.呼叫袋装新料</button>
            <!--                 <button class="ccu-btn bg-blue shadow-blur shadow-blur" @click="clear">呼叫袋装新料</button>
                            <button class="ccu-btn bg-blue shadow-blur shadow-blur" @click="clear">呼叫空桶</button> -->
                            <!-- <button class="cu-btn bg-blue shadow-blur" :disabled="repeatClick" @click="confirm">入库</button> -->
                        </view>
            <view class="cu-form-group margin-top">
                <view class="title">容器号</view>
                <input placeholder="请扫需要入库容器条码" v-model="container"></input>
                <text class='cuIcon-search text-blue' @click="search"></text>
            </view>
<!--             <view class="cu-form-group">
                <view class="title">目标库区</view>
                <view style="width: 75%;">
                    <uni-data-select style="min-width: 50%; max-width: 100%;" v-model="whAreaId" :localdata="range"
                        placement="bottom" @change="selChange"></uni-data-select>
                </view>
            </view> -->
            <view class="cu-bar btn-group top margin-top">
                <button class="cu-btn bg-green shadow-blur" @click="clear">3.桶装新料入库</button>
            </view>
        </form>
        <view class="cu-list det menu sm-border  padding">
            <block v-for="(item, index) in list" :key="index">
                <view class="cu-bar bg-white solid-bottom margin-top-sm">
                    <view class="action">
                        <view class="index">
                            {{index+1}}
                        </view>
                        <view class="text-blue">
                            {{`${item.maktx}`}}
                        </view>
                    </view>
                    <!--     <view class="action" >
                        <text @click="remove(index)" class="cuIcon-close text-red" style="font-size: 24px;"></text>
                    </view> -->
                </view>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-black">ASN:</text>
                    </view>
                    <view class="action">
                        <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.batch}}</text>
                    </view>
                </view>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-black">收货数量:</text>
                    </view>
                    <view class="action">
                        <text class="text-grey ">{{item.anfme}}</text>
                    </view>
                </view>
            </block>
        </view>
<!--         <view class="cu-bar btn-group foot">
            <button class="cu-btn text-blue line-blue shadow" @click="clear">清空</button>
            <button class="cu-btn bg-blue shadow-blur" :disabled="repeatClick" @click="confirm">入库</button>
        </view> -->
    </view>
</template>
<script>
    import {
        request
    } from '../../common/request.js'
    import {
        mapState,
        mapMutations,
        mapActions,
        mapGetters
    } from 'vuex';
    export default {
        data() {
            return {
                barcode: '',
                areaName: '',
                locCode: '',
                container: '',
                list: [],
                range: [],
                curCode: '',
                whAreaId:'',
                repeatClick: false,
            }
        },
        computed: {
            ...mapState('user', ['dynamicFields']),
        },
        mounted() {
            this.getRece()
            this.whAreaId = uni.getStorageSync('whAreaId')
        },
        methods: {
            selChange(val) {
                uni.setStorageSync('whAreaId', val)
            },
            async search() {
                let that = this
                const {
                    code,
                    data,
                    msg
                } = await request('/staBind/list', {
                    sta: this.barcode
                })
                if (code === 200) {
                    if(data.list.length >0){
                        that.container = data.barcode
                        that.list = data.list
                    }
                    that.range = data.warehouseAreasList.map(item => ({
                        value: item.id,
                        text: item.name
                    }));
                    that.whAreaId = data.area
                } else {
                    uni.showToast({
                        title: msg,
                        icon: "none",
                    })
                }
            },
            remove(index) {
                this.list.splice(index, 1);
            },
            clear() {
                this.list = []
                this.container = ''
                this.barcode = ''
            },
            open() {
                this.$refs.popup.open()
            },
            close() {
                this.$refs.popup.close()
            },
            popupSubmit() {
                this.$refs.popup.close()
            },
            itemChange(el) {
                this.curCode = el
            },
            async confirm() {
                if(this.barcode === '' || this.barcode ===null){
                    uni.showToast({
                        title: "接驳站点不能为空",
                        icon: "none",
                    })
                    return ;
                }
                if(this.whAreaId === '' || this.whAreaId ===null){
                    uni.showToast({
                        title: "目标库区不能为空",
                        icon: "none",
                    })
                    return ;
                }
                this.repeatClick = true
                const {
                    code,
                    data,
                    msg
                } = await request('/AGV/task/start',{
                        sta: this.barcode,
                        area: this.whAreaId
                    }
                )
                if (code === 200) {
                    uni.showToast({
                        title: '启动成功'
                    })
                    this.clear()
                } else {
                    uni.showToast({
                        title: msg,
                        icon: "none",
                    })
                }
                this.repeatClick = false
            },
            async getRece() {
                const {
                    code,
                    data,
                    msg
                } = await request('/areas/receipt', {}, 'get')
                if (code === 200) {
                    this.range = data.map(item => ({
                        value: item.id,
                        text: item.warehouseId$ + "-- " + item.name
                    }));
                }
            },
        }
    }
</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;
    }
    .uni-file-picker {
        width: 100%;
        margin-bottom: 10px;
    }
    .uni-select__selector {
        z-index: 999;
    }
    .tj {
        height: auto;
        padding: 6px 8px;
        display: inline-block;
        border-radius: 6px;
    }
    .item {
        display: flex;
        justify-content: center;
    }
    .item .cu-btn {
        font-size: 26upx;
    }
</style>
pages/inbound/orderIn.vue
New file
@@ -0,0 +1,382 @@
<template>
    <view>
<!--         <form >
            <view class="cu-form-group margin-top" 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>
                <text class='cuIcon-search text-blue' @click="search"></text>
            </view>
        </form>     -->
        <scroll-view scroll-y class="page">
            <view class="nav-list">
                <!-- :url="'/pages' + item.url + '?param=' + item.param"  navigateTo-->
                <view hover-class='none'  class="nav-li"  @click="toOrder(item)"
                    :class="'bg-'+item.color" :style="[{animation: 'show ' + ((index+1)*0.2+1) + 's 1'}]"
                    v-for="(item,index) in elements2" :key="index">
                    <view class="nav-title">{{item.title}}</view>
                    <view class="nav-name">{{item.name}}</view>
                    <text :class="'cuIcon-' + item.cuIcon"></text>
                </view>
            </view>
            <view class="cu-tabbar-height"></view>
        </scroll-view>
        <view style="height: 50rpx;"></view>
    </view>
</template>
<script>
    export default {
        data() {
            return {
                baseUrl: '',
                token: '',
                icon: '',
                elements: [],
                project: 'tzsk',
                elements2: [
                    {
                        title: '待包装入库单',
                        name: 'pakinOrder',
                        color: 'blue',
                        url: `/inbound/orderInExecute`
                    },
                    // {
                    //     title: '待包装出库单',
                    //     name: 'pakinOrder',
                    //     color: 'blue',
                    //     url: `/phyz/waitOrder/waitOrderOut`
                    // },
                    {
                        title: '采购入库单',
                        name: 'pakinOrder',
                        color: 'blue',
                        // cuIcon: 'pullup',
                        url: `/inbound/orderInExecute`
                    },
                    // {
                    //     title: '出库单',
                    //     name: 'outOrder',
                    //     color: 'blue',
                    //     // cuIcon: 'pullup',
                    //     url: `/phyz/order/outOrder`
                    // },
                    // {
                    //     title: '入库单测试用',
                    //     name: 'pakin',
                    //     color: 'blue',
                    //     // cuIcon: 'pullup',
                    //     url: `/phyz/order/purchaseOrder`
                    // },
                    // {
                    //     title: '采购出库',
                    //     name: 'outOrder',
                    //     color: 'blue',
                    //     // cuIcon: 'pullup',
                    //     url: `/phyz/orderOut/orderOutSelect`
                    // },
                    {
                        title: '半成品入库单',
                        name: 'bcpOrder',
                        color: 'blue',
                        // cuIcon: 'pullup',
                        url: `/inbound/orderInExecute`
                    },
                    {
                        title: '半成品入库单_吸塑',
                        name: 'bcpOrder',
                        color: 'blue',
                        // cuIcon: 'pullup',
                        url: `/inbound/orderInExecute`
                    },
                    // {
                    //     title: '半成品调拨单',
                    //     name: 'bcpDbOrder',
                    //     color: 'blue',
                    //     // cuIcon: 'pullup',
                    //     url: `/phyz/bcp/bcpDbOrder`
                    // },
                    // {
                    //     title: '半成品调拨单',
                    //     name: 'bcpDbOrder',
                    //     color: 'blue',
                    //     // cuIcon: 'pullup',
                    //     url: `/phyz/bcp/bcpDbOrderV2`
                    // },
                    // {
                    //     title: '半成品出库单',
                    //     name: 'bcpOutOrder',
                    //     color: 'blue',
                    //     // cuIcon: 'pullup',
                    //     url: `/phyz/orderOut/bcpOrderOutSelect`
                    // },
                    // {
                    //     title: '半成品出库单_二厂',
                    //     name: 'bcpOutOrder',
                    //     color: 'blue',
                    //     // cuIcon: 'pullup',
                    //     url: `/phyz/orderOut/bcpOrderOutSelect_2`,
                    //     param: {orderType: [1,2,3]}
                    // },
                    // {
                    //     title: '半成品加工单',
                    //     name: 'processOrder',
                    //     color: 'blue',
                    //     // cuIcon: 'pullup',
                    //     url: `/phyz/processOrder/processOrder`
                    // },
                    {
                        title: '半成品回流单',
                        name: 'backStock',
                        color: 'blue',
                        // cuIcon: 'pullup',
                        url: `/inbound/orderInExecute`
                    },
                    {
                        title: '入库单',
                        name: 'orderIn',
                        color: 'blue',
                        // cuIcon: 'pullup',
                        url: `/inbound/orderInExecute`
                    },
                    // {
                    //     title: '出库单',
                    //     name: 'orderOut',
                    //     color: 'blue',
                    //     // cuIcon: 'pullup',
                    //     url: `/phyz/comOrder/orderOut`
                    // },
                ],
                menu: [],
                colorList: ['cyan','blue','purple','mauve','pink','brown','red','orange','yellow','olive','cyan','blue','purple','mauve','pink','brown','red','orange','yellow','olive' ]
            };
        },
        // onShow() {
        //     this.baseUrl = uni.getStorageSync('baseUrl');
        //     this.token = uni.getStorageSync('token');
        //     this.project = uni.getStorageSync('project')
        //     // this.getAuth()
        //     this.backGroundRepeat()
        // },
        onLoad(option) {
            this.baseUrl = uni.getStorageSync('baseUrl');
            this.token = uni.getStorageSync('token');
            this.project = uni.getStorageSync('project');
            this.menu = uni.getStorageSync('menu');
            this.getAuth2(option.id)
            this.backGroundRepeat()
        },
        methods: {
            backGroundRepeat() {
                let len = this.colorList.length
                let i = 0
                for (let k in this.elements2) {
                    if (i == len) {
                        i = 0
                    }
                    this.elements2[k].color = this.colorList[i]
                    i++
                }
            },
            toOrder(item) {
                uni.navigateTo({
                    url: `/pages${item.url}`,
                    success(res) {
                        res.eventChannel.emit('param', {
                            param: item.param
                        })
                    }
                })
            },
            getAuth2(id) {
                let secMenu = []
                for (let k of this.menu) {
                    if (id == k.id) {
                        secMenu = k.children
                    }
                }
                for (let i in secMenu) {
                    this.getIcon(secMenu[i].title)
                    // 兼容2025 02 18 菜单param
                    if (secMenu[i].param) {
                        this.elements.unshift({
                            title: secMenu[i].name,
                            name: secMenu[i].title,
                            color: this.colorList[i],
                            cuIcon: this.icon,
                            id: secMenu[i].id,
                            param: JSON.parse(secMenu[i].param),
                            url: `${secMenu[i].code}`
                        })
                    } else {
                        this.elements.unshift({
                            title: secMenu[i].name,
                            name: secMenu[i].title,
                            color: this.colorList[i],
                            cuIcon: this.icon,
                            id: secMenu[i].id,
                            url: `${secMenu[i].code}`
                        })
                    }
                }
                console.log(this.elements);
            },
            getAuth(id) {
                let that = this
                uni.request({
                    url: that.baseUrl + '/menu/pda/auth',
                    data: {level:2 ,id: id},
                    header: { 'token': uni.getStorageSync('token') },
                    method: 'POST',
                    success(res) {
                        console.log(res);
                        if (res.statusCode === 404) {
                            that.elements = that.elements2
                            return
                        }
                        res = res.data
                        that.elements = []
                        if (res.code === 200) {
                            if (res.data == undefined || res.data == null || res.data == "") {
                                if (res.data.length == 0) {
                                    return
                                } else {
                                    that.elements = that.elements2
                                }
                            }
                            for (var i = 0; i < res.data.length; i++) {
                                if (res.data.length < 0) {
                                    break;
                                }
                                that.getIcon(res.data[i].title)
                                that.elements.unshift({
                                    title: res.data[i].name,
                                    name: res.data[i].title,
                                    color: that.colorList[i],
                                    cuIcon: that.icon,
                                    url: `${res.data[i].code}`
                                })
                            }
                        } else if (res.code === 403) {
                            uni.showToast({
                                title: res.msg,
                                icon: "none",
                                position: 'top'
                            })
                            setTimeout(() => {
                                uni.reLaunch({
                                    url: '../login/login'
                                });
                            }, 1000);
                        } else if(res.status === 404) {
                            that.elements = that.elements2
                            // uni.showToast({
                            //     title: '默认主页',
                            //     icon: "none",
                            //     position: 'top'
                            // })
                        } else {
                            uni.showToast({
                                title: res.msg,
                                icon: "none",
                                position: 'top'
                            })
                        }
                    },
                    fail(err) {
                        console.log(err);
                    }
                })
            },
            getIcon(e) {
                const ways = ['pakin','orderPakin','orderPutOn']
                if (ways.includes(e)) {
                    this.icon = 'pullup'
                }
            }
        }
    }
</script>
<style>
    .page {
        height: 100vh;
    }
    .bg-red {
        background-color: #e54d42;
        color: #ffffff;
    }
    .bg-orange {
        background-color: #f37b1d;
        color: #ffffff;
    }
    .bg-yellow {
        background-color: #fbbd08;
        color: #333333;
    }
    .bg-olive {
        background-color: #8dc63f;
        color: #ffffff;
    }
    .bg-green {
        background-color: #39b54a;
        color: #ffffff;
    }
    .bg-cyan {
        background-color: #1cbbb4;
        color: #ffffff;
    }
    .bg-blue {
        background-color: #0081ff;
        color: #ffffff;
    }
    .bg-purple {
        background-color: #6739b6;
        color: #ffffff;
    }
    .bg-mauve {
        background-color: #9c26b0;
        color: #ffffff;
    }
    .bg-pink {
        background-color: #e03997;
        color: #ffffff;
    }
    .bg-brown {
        background-color: #a5673f;
        color: #ffffff;
    }
    .bg-grey {
        background-color: #8799a3;
        color: #ffffff;
    }
    .bg-gray {
        background-color: #f0f0f0;
        color: #333333;
    }
    .bg-black {
        background-color: #333333;
        color: #ffffff;
    }
    .bg-white {
        background-color: #ffffff;
        color: #666666;
    }
</style>
pages/inbound/orderInExecute.vue
New file
@@ -0,0 +1,296 @@
<template>
    <view class="has-foot">
        <form >
            <view class="flex solid-bottom padding-sm justify-between">
                <view class="text-blue">&nbsp;订单类型:待包装入库单</view>
            </view>
            <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>
                <text class='cuIcon-search text-blue' @click="search"></text>
            </view>
        </form>
        <view class="cu-list det menu sm-border padding">
            <block  v-for="(item, index) in list" :key="index" >
                <view class="cu-list det menu" @click="clickTaskItem(index)">
<!--                 <view class="cu-bar bg-white solid-bottom">
                    <view class="action">
                        <view class="index">
                            {{index+1}}
                        </view>
                    </view>
                    <view class="content2">
                        <text class="text-gray"><text class="text-black ">{{item.status$}}</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 class="content">
                        <text class="text-black">{{item.status$}}</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.maktx}}</text></text>
                    </view>
                </view>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-gray">实收数量:<text class="text-black ">{{item.workQty}}</text></text>
                    </view>
                    <view class="content">
                        <text class="text-gray">应收数量:<text class="text-black ">{{item.anfme}}</text></text>
                    </view>
                </view>
<!--                 <view class="cu-item">
                    <view class="content">
                        <progress :percent="Math.trunc((item.workQty/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: "./orderInItem",
                    // 通过eventChannel向被打开页面传送数据
                    success: function(res) {
                        res.eventChannel.emit('checkItem', {
                            data: that.list[index]
                        })
                    }
                });
            },
            typeChange(e){
                this.typeSelect = e.value
                this.search()
            },
            toOrderItem(item) {
                uni.navigateTo({
                    url: `/pages/inbound/orderInItem`,
                    success(res) {
                        res.eventChannel.emit('param', {
                            param: item.param
                        })
                    }
                })
            },
            async search() {
                this.list = []
                if(this.barcode === '' || this.barcode ===null){
                    this.barcode = 'OS2509030230';
                }
                const {
                    code,
                    data,
                    msg
                } = await request('/outStockItem/page',{
                    orderId:this.barcode
                }
                )
                if (code === 200) {
                    if (Object.keys(data).length === 0){
                        uni.showToast({
                            title: "未查询到订单数据",
                            icon: "none",
                            position: 'top'
                        })
                    }
                    this.list.push(...data)
                }else if(code == 401){
                    setTimeout(() => {
                        uni.removeStorageSync('token');
                        uni.reLaunch({
                            url: "/pages/login/login"
                        });
                    }, 1000);
                }else {
                    uni.showToast({
                        title: msg,
                        icon: "none",
                        position: 'top'
                    })
                }
            },
            clearCode() {
                this.barcode = ''
            },
            remove(index) {
                this.list.splice(index, 1);
            },
            clear() {
                this.list = []
                this.barcode = ''
            },
            next() {
                if (this.list.length) {
                    this.isconfirm = true
                } else {
                    uni.showToast({
                        icon: "none",
                        title: '未选物料标签'
                    })
                }
            },
            prev() {
                this.isconfirm = false
            },
            selChange(val) {
                uni.setStorageSync('whAreaId', val)
            },
            async confirm() {
                const newArr = this.list.map(item => {
                    return {
                        ...item,
                        receiptQty: item.receiptQty === null ? 0 : +item.receiptQty
                    };
                });
                if (this.whAreaId === '') {
                    uni.showToast({
                        icon: "none",
                        title: '请选择收货区'
                    })
                } else {
                    const {
                        code,
                        data,
                        msg
                    } = await request('/orders/confirm', {
                        receipts: newArr,
                        whAreaId: this.whAreaId
                    })
                    if (code === 200) {
                        uni.showToast({
                            title: '收货成功'
                        })
                        this.list = []
                        this.barcode = ''
                        this.isconfirm = false
                    } else {
                        uni.showToast({
                            title: msg,
                            icon: "none",
                            position: 'top'
                        })
                    }
                }
            },
            DateChange(e, item) {
                item.prodTime = e.detail.value
            }
        }
    }
</script>
<style>
    .index {
        border: 1px solid #e54d42;
        color: #e54d42;
        border-radius: 50%;
        display: block;
        width: 50rpx;
        height: 50rpx;
        line-height: 48rpx;
        text-align: center;
        margin-right: 20rpx;
        font-size: 30rpx;
    }
    .text-blue {
        color: #0081ff !important;
    }
    .item {
        position: relative;
        display: flex;
        min-height: 80upx;
        align-items: center;
    }
    .content2 {
        /* background-color: coral; */
        width: 100%;
        display: flex;
        flex-direction: row;
        align-items: center;
        justify-content: flex-end;
        margin-right: 10px;
        color: #0081ff;
    }
</style>
pages/inbound/orderInItem.vue
New file
@@ -0,0 +1,291 @@
<template>
    <view class="has-foot">
        <form >
            <view class="flex solid-bottom padding-sm justify-between">
                <view class="text-gray">&nbsp;订单号:IN250807152830</view>
            </view>
<!--             <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>
                <text class='cuIcon-search text-blue' @click="search"></text>
            </view> -->
        </form>
        <view class="cu-list det menu sm-border  padding">
            <block  v-for="(item, index) in list" :key="index" >
                <view  class="cu-list det menu  "  @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 margin-right-sm"><text class="text-black ">{{item.status$}}</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.matnrCode}}</text></text>
                    </view>
                </view>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-gray">物料名称:<text class="text-black ">{{item.maktx}}</text></text>
                    </view>
                </view>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-gray">实收数量:<text class="text-black ">{{item.workQty}}</text></text>
                    </view>
                    <view class="content">
                        <text class="text-gray">应收数量:<text class="text-black ">{{item.anfme}}</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.workQty/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: "./orderInItem",
                //     // 通过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){
                    this.barcode = 'OS2509030230';
                }
                const {
                    code,
                    data,
                    msg
                } = await request('/outStockItem/page',{
                    orderId:this.barcode
                }
                )
                if (code === 200) {
                    if (Object.keys(data).length === 0){
                        uni.showToast({
                            title: "未查询到订单数据",
                            icon: "none",
                            position: 'top'
                        })
                    }
                    this.list.push(...data)
                }else if(code == 401){
                    setTimeout(() => {
                        uni.removeStorageSync('token');
                        uni.reLaunch({
                            url: "/pages/login/login"
                        });
                    }, 1000);
                }else {
                    uni.showToast({
                        title: msg,
                        icon: "none",
                        position: 'top'
                    })
                }
            },
            clearCode() {
                this.barcode = ''
            },
            remove(index) {
                this.list.splice(index, 1);
            },
            clear() {
                this.list = []
                this.barcode = ''
            },
            next() {
                if (this.list.length) {
                    this.isconfirm = true
                } else {
                    uni.showToast({
                        icon: "none",
                        title: '未选物料标签'
                    })
                }
            },
            prev() {
                this.isconfirm = false
            },
            selChange(val) {
                uni.setStorageSync('whAreaId', val)
            },
            async confirm() {
                const newArr = this.list.map(item => {
                    return {
                        ...item,
                        receiptQty: item.receiptQty === null ? 0 : +item.receiptQty
                    };
                });
                if (this.whAreaId === '') {
                    uni.showToast({
                        icon: "none",
                        title: '请选择收货区'
                    })
                } else {
                    const {
                        code,
                        data,
                        msg
                    } = await request('/orders/confirm', {
                        receipts: newArr,
                        whAreaId: this.whAreaId
                    })
                    if (code === 200) {
                        uni.showToast({
                            title: '收货成功'
                        })
                        this.list = []
                        this.barcode = ''
                        this.isconfirm = false
                    } else {
                        uni.showToast({
                            title: msg,
                            icon: "none",
                            position: 'top'
                        })
                    }
                }
            },
            DateChange(e, item) {
                item.prodTime = e.detail.value
            }
        }
    }
</script>
<style>
    .index {
        border: 1px solid #e54d42;
        color: #e54d42;
        border-radius: 50%;
        display: block;
        width: 50rpx;
        height: 50rpx;
        line-height: 48rpx;
        text-align: center;
        margin-right: 20rpx;
        font-size: 30rpx;
    }
    .text-blue {
        color: #0081ff !important;
    }
    .item {
        position: relative;
        display: flex;
        min-height: 80upx;
        align-items: center;
    }
    .content2 {
        /* background-color: coral; */
        width: 100%;
        display: flex;
        flex-direction: row;
        align-items: center;
        justify-content: flex-end;
        margin-right: 10px;
        color: #0081ff;
    }
</style>
pages/inspect/bad.vue
@@ -91,7 +91,8 @@
        </view>
        <view class="cu-bar btn-group foot">
            <button class="cu-btn bg-blue shadow-blur" @click="confirm">提交</button>
            <button class="cu-btn text-blue line-blue shadow" @click="clear">清空</button>
            <button class="cu-btn bg-blue shadow-blur" @click="confirm">上锁</button>
        </view>
    </view>
pages/inspect/check.vue
@@ -2,14 +2,14 @@
    <view class="has-foot">
        <form>
            <view class="cu-form-group margin-top">
                <view class="title">质检单</view>
                <input placeholder="请扫描质检单" v-model="isptCode" focus></input>
                <view class="title">容器号</view>
                <input placeholder="请扫描容器编码" v-model="isptCode" focus></input>
                <text class='cuIcon-search text-blue' @click="search"></text>
            </view>
            <view class="cu-form-group ">
                <view class="title">物料码</view>
                <input placeholder="请扫描物料码" v-model="barcode"></input>
                <view class="title">物料号</view>
                <input placeholder="请扫描物料编码" v-model="barcode"></input>
                <text class='cuIcon-search text-blue' @click="scrollTo"></text>
            </view>
        </form>
@@ -115,7 +115,7 @@
        </view>
        <view class="cu-bar btn-group foot">
            <button class="cu-btn text-blue line-blue shadow" @click="clear">清空</button>
            <button class="cu-btn bg-blue shadow-blur" @click="confirm">提交</button>
            <button class="cu-btn bg-blue shadow-blur" @click="confirm">解锁</button>
        </view>
    </view>
pages/listing/labour.vue
@@ -2,13 +2,14 @@
    <view class="has-foot">
        <form>
            <view class="cu-form-group ">
                <view class="title">容器码</view>
                <input placeholder="请扫描容器码" v-model="container"></input>
                <view class="title">容器号</view>
                <input placeholder="请扫描容器编码" v-model="container"></input>
                <text class='cuIcon-search text-blue' @click="search"></text>
            </view>
            <view class="cu-form-group">
                <view class="title">库位码</view>
                <input placeholder="请扫描库位码" v-model="locCode"></input>
                <view class="title">库位号</view>
                <input placeholder="请扫描库位编码" v-model="locCode"></input>
                <text class='cuIcon-search text-blue' @click="search"></text>
            </view>
        </form>
        <view class="cu-list det menu sm-border  padding">
pages/listing/matnrPalletising.vue
@@ -4,24 +4,25 @@
        
        <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>
                <view class="title">订单号</view>
                <input placeholder="请输入订单号" v-model="asnCode"></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 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>
        </form>
        <view class="flex solid-bottom padding-sm justify-between">
            <view class="text-blue">物料总类:{{list.length}}</view>
            <view class="text-blue">组盘总数:{{allCount}}</view>
            <view class="text-blue">物料种类:{{list.length}}</view>
            <view class="text-blue">组托总数:{{allCount}}</view>
        </view>
        
        </view>
@@ -115,7 +116,7 @@
        </view>
        <view class="cu-bar btn-group foot">
            <button class="cu-btn text-blue line-blue shadow" @click="clear">清空</button>
            <button class="cu-btn bg-blue shadow-blur" :disabled="repeatClick" @click="confirm">组盘</button>
            <button class="cu-btn bg-blue shadow-blur" :disabled="repeatClick" @click="confirm">组托</button>
        </view>
    </view>
</template>
pages/listing/unPakin.vue
@@ -2,21 +2,24 @@
    <view class="has-foot">
        <view>
            <form>
                <view class="cu-form-group ">
                <view class="cu-form-group margin-top">
                    <view class="title">容器号</view>
                    <input placeholder="请扫描容器号" v-model="container" focus></input>
                    <input placeholder="请扫描容器编码" v-model="container" focus></input>
                    <text class='cuIcon-search text-blue' @click="getList"></text>
                </view>
                <view class="flex solid-bottom padding-sm justify-between">
                    <view class="text-blue margin-left">物料信息:{{container}}</view>
                </view>
                <view class="cu-form-group">
                    <view class="title">编码</view>
                    <input placeholder="请扫描组托档编码" v-model="pkCode"></input>
                    <view class="title">订单号</view>
                    <input placeholder="请搜索订单号" v-model="pkCode"></input>
                    <text class='cuIcon-search text-blue' @click="getList"></text>
                </view>
            </form>
            <view class="flex solid-bottom padding-sm justify-between">
                <view class="text-blue">物料总类:{{list.length}}</view>
<!--             <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>
        <view class="padding-lr margin-top-sm">
            <block v-for="(item, index) in list" :key="index">
pages/outbound/matDirectDelivery.vue
New file
@@ -0,0 +1,283 @@
<template>
    <view class="has-foot">
        <form>
            <view class="cu-form-group margin-top">
                <view class="title">接驳站点</view>
                <input placeholder="请扫描接驳站点条码" v-model="barcode" ></input>
                <!-- <text class='cuIcon-search text-blue' @click="search"></text> -->
            </view>
            <view class="cu-form-group">
                <view class="title">容器号</view>
                <input placeholder="请扫描容器编码" v-model="barcode" ></input>
                <text class='cuIcon-search text-blue' @click="search"></text>
            </view>
<!--             <view class="flex solid-bottom padding-sm justify-between">
                <view class="text-blue margin-left">容器码:{{container}}</view>
            </view> -->
            <view class="cu-form-group">
                <view class="title">订单号</view>
                <input placeholder="请选择订单编码" v-model="barcode" ></input>
                <text class='cuIcon-search text-blue' @click="search"></text>
            </view>
            <view class="cu-form-group">
                <view class="title">目标站点</view>
                <view style="width: 75%;">
                    <uni-data-select style="min-width: 50%; max-width: 100%;" v-model="whAreaId" :localdata="range"
                        placement="bottom" @change="selChange"></uni-data-select>
                </view>
            </view>
        </form>
        <view class="cu-list det menu sm-border  padding">
            <block v-for="(item, index) in list" :key="index">
                <view class="cu-bar bg-white solid-bottom margin-top-sm">
                    <view class="action">
                        <view class="index">
                            {{index+1}}
                        </view>
                        <view class="text-blue">
                            {{`${item.maktx}`}}
                        </view>
                    </view>
                    <!--     <view class="action" >
                        <text @click="remove(index)" class="cuIcon-close text-red" style="font-size: 24px;"></text>
                    </view> -->
                </view>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-black">ASN:</text>
                    </view>
                    <view class="action">
                        <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.batch}}</text>
                    </view>
                </view>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-black">收货数量:</text>
                    </view>
                    <view class="action">
                        <text class="text-grey ">{{item.anfme}}</text>
                    </view>
                </view>
            </block>
        </view>
        <view class="cu-bar btn-group foot">
            <button class="cu-btn text-blue line-blue shadow" @click="clear">清空</button>
            <button class="cu-btn bg-blue shadow-blur" :disabled="repeatClick" @click="confirm">运送</button>
        </view>
    </view>
</template>
<script>
    import {
        request
    } from '../../common/request.js'
    import {
        mapState,
        mapMutations,
        mapActions,
        mapGetters
    } from 'vuex';
    export default {
        data() {
            return {
                barcode: '',
                areaName: '',
                locCode: '',
                container: '',
                list: [],
                range: [],
                curCode: '',
                whAreaId:'',
                repeatClick: false,
            }
        },
        computed: {
            ...mapState('user', ['dynamicFields']),
        },
        mounted() {
            this.getRece()
            this.whAreaId = uni.getStorageSync('whAreaId')
        },
        methods: {
            selChange(val) {
                uni.setStorageSync('whAreaId', val)
            },
            async search() {
                let that = this
                const {
                    code,
                    data,
                    msg
                } = await request('/staBind/list', {
                    sta: this.barcode
                })
                if (code === 200) {
                    if(data.list.length >0){
                        that.container = data.barcode
                        that.list = data.list
                    }
                    that.range = data.warehouseAreasList.map(item => ({
                        value: item.id,
                        text: item.name
                    }));
                    that.whAreaId = data.area
                } else {
                    uni.showToast({
                        title: msg,
                        icon: "none",
                    })
                }
            },
            remove(index) {
                this.list.splice(index, 1);
            },
            clear() {
                this.list = []
                this.container = ''
                this.barcode = ''
            },
            open() {
                this.$refs.popup.open()
            },
            close() {
                this.$refs.popup.close()
            },
            popupSubmit() {
                this.$refs.popup.close()
            },
            itemChange(el) {
                this.curCode = el
            },
            async confirm() {
                if(this.barcode === '' || this.barcode ===null){
                    uni.showToast({
                        title: "接驳站点不能为空",
                        icon: "none",
                    })
                    return ;
                }
                if(this.whAreaId === '' || this.whAreaId ===null){
                    uni.showToast({
                        title: "目标库区不能为空",
                        icon: "none",
                    })
                    return ;
                }
                this.repeatClick = true
                const {
                    code,
                    data,
                    msg
                } = await request('/AGV/task/start',{
                        sta: this.barcode,
                        area: this.whAreaId
                    }
                )
                if (code === 200) {
                    uni.showToast({
                        title: '启动成功'
                    })
                    this.clear()
                } else {
                    uni.showToast({
                        title: msg,
                        icon: "none",
                    })
                }
                this.repeatClick = false
            },
            async getRece() {
                const {
                    code,
                    data,
                    msg
                } = await request('/areas/receipt', {}, 'get')
                if (code === 200) {
                    this.range = data.map(item => ({
                        value: item.id,
                        text: item.warehouseId$ + "-- " + item.name
                    }));
                }
            },
        }
    }
</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;
    }
    .uni-file-picker {
        width: 100%;
        margin-bottom: 10px;
    }
    .uni-select__selector {
        z-index: 999;
    }
    .tj {
        height: auto;
        padding: 6px 8px;
        display: inline-block;
        border-radius: 6px;
    }
    .item {
        display: flex;
        justify-content: center;
    }
    .item .cu-btn {
        font-size: 26upx;
    }
</style>
pages/outbound/matPreparation.vue
New file
@@ -0,0 +1,287 @@
<template>
    <view class="has-foot">
        <form >
            <view class="cu-form-group margin-top" 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>
                <text class='cuIcon-search text-blue' @click="search"></text>
            </view>
        </form>
        <view class="cu-list det menu sm-border  padding">
            <block  v-for="(item, index) in list" :key="index">
                <view  class="cu-list det menu  "  @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.status$}}</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.maktx}}</text></text>
                    </view>
                </view>     -->
                <view class="cu-item">
                    <view class="content">
                        <text class="text-gray">实备数量:<text class="text-black ">{{item.workQty}}</text></text>
                    </view>
                    <view class="content">
                        <text class="text-gray">应备数量:<text class="text-black ">{{item.anfme}}</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.workQty/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: "./matPreparationItem",
                    // 通过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){
                    this.barcode = 'OS2509030230';
                }
                const {
                    code,
                    data,
                    msg
                } = await request('/outStockItem/page',{
                    orderId:this.barcode
                }
                )
                if (code === 200) {
                    if (Object.keys(data).length === 0){
                        uni.showToast({
                            title: "未查询到订单数据",
                            icon: "none",
                            position: 'top'
                        })
                    }
                    this.list.push(...data)
                }else if(code == 401){
                    setTimeout(() => {
                        uni.removeStorageSync('token');
                        uni.reLaunch({
                            url: "/pages/login/login"
                        });
                    }, 1000);
                }else {
                    uni.showToast({
                        title: msg,
                        icon: "none",
                        position: 'top'
                    })
                }
            },
            clearCode() {
                this.barcode = ''
            },
            remove(index) {
                this.list.splice(index, 1);
            },
            clear() {
                this.list = []
                this.barcode = ''
            },
            next() {
                if (this.list.length) {
                    this.isconfirm = true
                } else {
                    uni.showToast({
                        icon: "none",
                        title: '未选物料标签'
                    })
                }
            },
            prev() {
                this.isconfirm = false
            },
            selChange(val) {
                uni.setStorageSync('whAreaId', val)
            },
            async confirm() {
                const newArr = this.list.map(item => {
                    return {
                        ...item,
                        receiptQty: item.receiptQty === null ? 0 : +item.receiptQty
                    };
                });
                if (this.whAreaId === '') {
                    uni.showToast({
                        icon: "none",
                        title: '请选择收货区'
                    })
                } else {
                    const {
                        code,
                        data,
                        msg
                    } = await request('/orders/confirm', {
                        receipts: newArr,
                        whAreaId: this.whAreaId
                    })
                    if (code === 200) {
                        uni.showToast({
                            title: '收货成功'
                        })
                        this.list = []
                        this.barcode = ''
                        this.isconfirm = false
                    } else {
                        uni.showToast({
                            title: msg,
                            icon: "none",
                            position: 'top'
                        })
                    }
                }
            },
            DateChange(e, item) {
                item.prodTime = e.detail.value
            }
        }
    }
</script>
<style>
    .index {
        border: 1px solid #e54d42;
        color: #e54d42;
        border-radius: 50%;
        display: block;
        width: 50rpx;
        height: 50rpx;
        line-height: 48rpx;
        text-align: center;
        margin-right: 20rpx;
        font-size: 30rpx;
    }
    .text-blue {
        color: #0081ff !important;
    }
    .item {
        position: relative;
        display: flex;
        min-height: 80upx;
        align-items: center;
    }
    .content2 {
        /* background-color: coral; */
        width: 100%;
        display: flex;
        flex-direction: row;
        align-items: center;
        justify-content: flex-end;
        margin-right: 10px;
        color: #0081ff;
    }
</style>
pages/outbound/matPreparationItem.vue
New file
@@ -0,0 +1,329 @@
<template>
    <view class="has-foot">
        <form>
            <view class="flex solid-bottom padding-sm justify-between">
                <view class="text-grey margin-left">物料清单:1、拉杆 10个 2、皮套 2米</view>
                <!-- <view class="text-grey margin-left">  2、皮套 2米</view> -->
            </view>
            <view class="cu-form-group margin-top">
                            <view class="title">备料接驳站点</view>
                            <input placeholder="请扫描备料接驳站点条码" v-model="barcode" ></input>
                            <!-- <text class='cuIcon-search text-blue' @click="search"></text> -->
                        </view>
                        <view class="cu-bar btn-group top margin-top">
                            <!-- <button class="cu-btn text-blue line-blue shadow" @click="clear">1.呼叫空桶</button> -->
                            <button class="cu-btn text-blue line-blue shadow" :disabled="repeatClick" @click="confirm">1.呼叫备料</button>
            <!--                 <button class="ccu-btn bg-blue shadow-blur shadow-blur" @click="clear">呼叫袋装新料</button>
                            <button class="ccu-btn bg-blue shadow-blur shadow-blur" @click="clear">呼叫空桶</button> -->
                            <!-- <button class="cu-btn bg-blue shadow-blur" :disabled="repeatClick" @click="confirm">入库</button> -->
                        </view>
            <view class="cu-form-group margin-top">
                <view class="title">空料架接驳站点</view>
                <input placeholder="请扫描空料架接驳站点条码" v-model="barcode" ></input>
                <!-- <text class='cuIcon-search text-blue' @click="search"></text> -->
            </view>
            <view class="cu-bar btn-group top margin-top">
                <button class="cu-btn bg-blue shadow-blur" @click="clear">2.呼叫空料架</button>
                <!-- <button class="cu-btn bg-blue shadow-blur" :disabled="repeatClick" @click="confirm">2.呼叫袋装新料</button> -->
<!--                 <button class="ccu-btn bg-blue shadow-blur shadow-blur" @click="clear">呼叫袋装新料</button>
                <button class="ccu-btn bg-blue shadow-blur shadow-blur" @click="clear">呼叫空桶</button> -->
                <!-- <button class="cu-btn bg-blue shadow-blur" :disabled="repeatClick" @click="confirm">入库</button> -->
            </view>
            <view class="cu-form-group margin-top">
                <view class="title">备料架号</view>
                <input placeholder="请扫备料完成的料架条码" v-model="container"></input>
                <text class='cuIcon-search text-blue' @click="search"></text>
            </view>
            <view class="cu-form-group">
                <view class="title">备料架接驳站点</view>
                <input placeholder="请扫备料架接驳站点条码" v-model="container"></input>
                <text class='cuIcon-search text-blue' @click="search"></text>
            </view>
<!--             <view class="cu-form-group">
                <view class="title">目标库区</view>
                <view style="width: 75%;">
                    <uni-data-select style="min-width: 50%; max-width: 100%;" v-model="whAreaId" :localdata="range"
                        placement="bottom" @change="selChange"></uni-data-select>
                </view>
            </view> -->
            <view class="cu-bar btn-group top margin-top">
                <button class="cu-btn bg-green shadow-blur" @click="clear">3.完成备料回库</button>
            </view>
            <view class="flex solid-bottom padding-sm justify-between margin-top-sm">
                <view class="text-grey margin-left">剩余物料清单:1、拉杆 2个 2、皮套 1米</view>
                <!-- <view class="text-grey margin-left">  2、皮套 2米</view> -->
            </view>
            <view class="cu-bar btn-group top margin-top">
                <button class="cu-btn bg-yellow shadow-blur" @click="clear">4.余料回库</button>
            </view>
        </form>
        <view class="cu-list det menu sm-border  padding">
            <block v-for="(item, index) in list" :key="index">
                <view class="cu-bar bg-white solid-bottom margin-top-sm">
                    <view class="action">
                        <view class="index">
                            {{index+1}}
                        </view>
                        <view class="text-blue">
                            {{`${item.maktx}`}}
                        </view>
                    </view>
                    <!--     <view class="action" >
                        <text @click="remove(index)" class="cuIcon-close text-red" style="font-size: 24px;"></text>
                    </view> -->
                </view>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-black">ASN:</text>
                    </view>
                    <view class="action">
                        <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.batch}}</text>
                    </view>
                </view>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-black">收货数量:</text>
                    </view>
                    <view class="action">
                        <text class="text-grey ">{{item.anfme}}</text>
                    </view>
                </view>
            </block>
        </view>
<!--         <view class="cu-bar btn-group foot">
            <button class="cu-btn text-blue line-blue shadow" @click="clear">清空</button>
            <button class="cu-btn bg-blue shadow-blur" :disabled="repeatClick" @click="confirm">入库</button>
        </view> -->
    </view>
</template>
<script>
    import {
        request
    } from '../../common/request.js'
    import {
        mapState,
        mapMutations,
        mapActions,
        mapGetters
    } from 'vuex';
    export default {
        data() {
            return {
                barcode: '',
                areaName: '',
                locCode: '',
                container: '',
                list: [],
                range: [],
                curCode: '',
                whAreaId:'',
                repeatClick: false,
            }
        },
        computed: {
            ...mapState('user', ['dynamicFields']),
        },
        mounted() {
            this.getRece()
            this.whAreaId = uni.getStorageSync('whAreaId')
        },
        methods: {
            selChange(val) {
                uni.setStorageSync('whAreaId', val)
            },
            async search() {
                let that = this
                const {
                    code,
                    data,
                    msg
                } = await request('/staBind/list', {
                    sta: this.barcode
                })
                if (code === 200) {
                    if(data.list.length >0){
                        that.container = data.barcode
                        that.list = data.list
                    }
                    that.range = data.warehouseAreasList.map(item => ({
                        value: item.id,
                        text: item.name
                    }));
                    that.whAreaId = data.area
                } else {
                    uni.showToast({
                        title: msg,
                        icon: "none",
                    })
                }
            },
            remove(index) {
                this.list.splice(index, 1);
            },
            clear() {
                this.list = []
                this.container = ''
                this.barcode = ''
            },
            open() {
                this.$refs.popup.open()
            },
            close() {
                this.$refs.popup.close()
            },
            popupSubmit() {
                this.$refs.popup.close()
            },
            itemChange(el) {
                this.curCode = el
            },
            async confirm() {
                if(this.barcode === '' || this.barcode ===null){
                    uni.showToast({
                        title: "接驳站点不能为空",
                        icon: "none",
                    })
                    return ;
                }
                if(this.whAreaId === '' || this.whAreaId ===null){
                    uni.showToast({
                        title: "目标库区不能为空",
                        icon: "none",
                    })
                    return ;
                }
                this.repeatClick = true
                const {
                    code,
                    data,
                    msg
                } = await request('/AGV/task/start',{
                        sta: this.barcode,
                        area: this.whAreaId
                    }
                )
                if (code === 200) {
                    uni.showToast({
                        title: '启动成功'
                    })
                    this.clear()
                } else {
                    uni.showToast({
                        title: msg,
                        icon: "none",
                    })
                }
                this.repeatClick = false
            },
            async getRece() {
                const {
                    code,
                    data,
                    msg
                } = await request('/areas/receipt', {}, 'get')
                if (code === 200) {
                    this.range = data.map(item => ({
                        value: item.id,
                        text: item.warehouseId$ + "-- " + item.name
                    }));
                }
            },
        }
    }
</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;
    }
    .uni-file-picker {
        width: 100%;
        margin-bottom: 10px;
    }
    .uni-select__selector {
        z-index: 999;
    }
    .tj {
        height: auto;
        padding: 6px 8px;
        display: inline-block;
        border-radius: 6px;
    }
    .item {
        display: flex;
        justify-content: center;
    }
    .item .cu-btn {
        font-size: 26upx;
    }
</style>
pages/outbound/orderOut.vue
New file
@@ -0,0 +1,382 @@
<template>
    <view>
<!--         <form >
            <view class="cu-form-group margin-top" 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>
                <text class='cuIcon-search text-blue' @click="search"></text>
            </view>
        </form>     -->
        <scroll-view scroll-y class="page">
            <view class="nav-list">
                <!-- :url="'/pages' + item.url + '?param=' + item.param"  navigateTo-->
                <view hover-class='none'  class="nav-li"  @click="toOrder(item)"
                    :class="'bg-'+item.color" :style="[{animation: 'show ' + ((index+1)*0.2+1) + 's 1'}]"
                    v-for="(item,index) in elements2" :key="index">
                    <view class="nav-title">{{item.title}}</view>
                    <view class="nav-name">{{item.name}}</view>
                    <text :class="'cuIcon-' + item.cuIcon"></text>
                </view>
            </view>
            <view class="cu-tabbar-height"></view>
        </scroll-view>
        <view style="height: 50rpx;"></view>
    </view>
</template>
<script>
    export default {
        data() {
            return {
                baseUrl: '',
                token: '',
                icon: '',
                elements: [],
                project: 'tzsk',
                elements2: [
                    // {
                    //     title: '待包装入库单',
                    //     name: 'pakinOrder',
                    //     color: 'blue',
                    //     url: `/outbound/orderPick`
                    // },
                    {
                        title: '待包装出库单',
                        name: 'pakinOrder',
                        color: 'blue',
                        url: `/outbound/orderPick`
                    },
                    // {
                    //     title: '采购入库单',
                    //     name: 'pakinOrder',
                    //     color: 'blue',
                    //     // cuIcon: 'pullup',
                    //     url: `/phyz/order/pakinOrderSelect`
                    // },
                    // {
                    //     title: '出库单',
                    //     name: 'outOrder',
                    //     color: 'blue',
                    //     // cuIcon: 'pullup',
                    //     url: `/phyz/order/outOrder`
                    // },
                    // {
                    //     title: '入库单测试用',
                    //     name: 'pakin',
                    //     color: 'blue',
                    //     // cuIcon: 'pullup',
                    //     url: `/phyz/order/purchaseOrder`
                    // },
                    {
                        title: '采购出库',
                        name: 'outOrder',
                        color: 'blue',
                        // cuIcon: 'pullup',
                        url: `/outbound/orderPick`
                    },
                    // {
                    //     title: '半成品入库单',
                    //     name: 'bcpOrder',
                    //     color: 'blue',
                    //     // cuIcon: 'pullup',
                    //     url: `/phyz/bcp/bcpOrder`
                    // },
                    // {
                    //     title: '半成品入库单_吸塑',
                    //     name: 'bcpOrder',
                    //     color: 'blue',
                    //     // cuIcon: 'pullup',
                    //     url: `/phyz/bcp/bcpOrder_xs`
                    // },
                    // {
                    //     title: '半成品调拨单',
                    //     name: 'bcpDbOrder',
                    //     color: 'blue',
                    //     // cuIcon: 'pullup',
                    //     url: `/phyz/bcp/bcpDbOrder`
                    // },
                    // {
                    //     title: '半成品调拨单',
                    //     name: 'bcpDbOrder',
                    //     color: 'blue',
                    //     // cuIcon: 'pullup',
                    //     url: `/phyz/bcp/bcpDbOrderV2`
                    // },
                    {
                        title: '半成品出库单',
                        name: 'bcpOutOrder',
                        color: 'blue',
                        // cuIcon: 'pullup',
                        url: `/outbound/orderPick`
                    },
                    {
                        title: '半成品出库单_二厂',
                        name: 'bcpOutOrder',
                        color: 'blue',
                        // cuIcon: 'pullup',
                        url: `/outbound/orderPick`,
                        param: {orderType: [1,2,3]}
                    },
                    {
                        title: '半成品加工单',
                        name: 'processOrder',
                        color: 'blue',
                        // cuIcon: 'pullup',
                        url: `/outbound/orderPick`
                    },
                    // {
                    //     title: '半成品回流单',
                    //     name: 'backStock',
                    //     color: 'blue',
                    //     // 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: `/outbound/orderPick`
                    },
                ],
                menu: [],
                colorList: ['cyan','blue','purple','mauve','pink','brown','red','orange','yellow','olive','cyan','blue','purple','mauve','pink','brown','red','orange','yellow','olive' ]
            };
        },
        // onShow() {
        //     this.baseUrl = uni.getStorageSync('baseUrl');
        //     this.token = uni.getStorageSync('token');
        //     this.project = uni.getStorageSync('project')
        //     // this.getAuth()
        //     this.backGroundRepeat()
        // },
        onLoad(option) {
            this.baseUrl = uni.getStorageSync('baseUrl');
            this.token = uni.getStorageSync('token');
            this.project = uni.getStorageSync('project');
            this.menu = uni.getStorageSync('menu');
            this.getAuth2(option.id)
            this.backGroundRepeat()
        },
        methods: {
            backGroundRepeat() {
                let len = this.colorList.length
                let i = 0
                for (let k in this.elements2) {
                    if (i == len) {
                        i = 0
                    }
                    this.elements2[k].color = this.colorList[i]
                    i++
                }
            },
            toOrder(item) {
                uni.navigateTo({
                    url: `/pages${item.url}`,
                    success(res) {
                        res.eventChannel.emit('param', {
                            param: item.param
                        })
                    }
                })
            },
            getAuth2(id) {
                let secMenu = []
                for (let k of this.menu) {
                    if (id == k.id) {
                        secMenu = k.children
                    }
                }
                for (let i in secMenu) {
                    this.getIcon(secMenu[i].title)
                    // 兼容2025 02 18 菜单param
                    if (secMenu[i].param) {
                        this.elements.unshift({
                            title: secMenu[i].name,
                            name: secMenu[i].title,
                            color: this.colorList[i],
                            cuIcon: this.icon,
                            id: secMenu[i].id,
                            param: JSON.parse(secMenu[i].param),
                            url: `${secMenu[i].code}`
                        })
                    } else {
                        this.elements.unshift({
                            title: secMenu[i].name,
                            name: secMenu[i].title,
                            color: this.colorList[i],
                            cuIcon: this.icon,
                            id: secMenu[i].id,
                            url: `${secMenu[i].code}`
                        })
                    }
                }
                console.log(this.elements);
            },
            getAuth(id) {
                let that = this
                uni.request({
                    url: that.baseUrl + '/menu/pda/auth',
                    data: {level:2 ,id: id},
                    header: { 'token': uni.getStorageSync('token') },
                    method: 'POST',
                    success(res) {
                        console.log(res);
                        if (res.statusCode === 404) {
                            that.elements = that.elements2
                            return
                        }
                        res = res.data
                        that.elements = []
                        if (res.code === 200) {
                            if (res.data == undefined || res.data == null || res.data == "") {
                                if (res.data.length == 0) {
                                    return
                                } else {
                                    that.elements = that.elements2
                                }
                            }
                            for (var i = 0; i < res.data.length; i++) {
                                if (res.data.length < 0) {
                                    break;
                                }
                                that.getIcon(res.data[i].title)
                                that.elements.unshift({
                                    title: res.data[i].name,
                                    name: res.data[i].title,
                                    color: that.colorList[i],
                                    cuIcon: that.icon,
                                    url: `${res.data[i].code}`
                                })
                            }
                        } else if (res.code === 403) {
                            uni.showToast({
                                title: res.msg,
                                icon: "none",
                                position: 'top'
                            })
                            setTimeout(() => {
                                uni.reLaunch({
                                    url: '../login/login'
                                });
                            }, 1000);
                        } else if(res.status === 404) {
                            that.elements = that.elements2
                            // uni.showToast({
                            //     title: '默认主页',
                            //     icon: "none",
                            //     position: 'top'
                            // })
                        } else {
                            uni.showToast({
                                title: res.msg,
                                icon: "none",
                                position: 'top'
                            })
                        }
                    },
                    fail(err) {
                        console.log(err);
                    }
                })
            },
            getIcon(e) {
                const ways = ['pakin','orderPakin','orderPutOn']
                if (ways.includes(e)) {
                    this.icon = 'pullup'
                }
            }
        }
    }
</script>
<style>
    .page {
        height: 100vh;
    }
    .bg-red {
        background-color: #e54d42;
        color: #ffffff;
    }
    .bg-orange {
        background-color: #f37b1d;
        color: #ffffff;
    }
    .bg-yellow {
        background-color: #fbbd08;
        color: #333333;
    }
    .bg-olive {
        background-color: #8dc63f;
        color: #ffffff;
    }
    .bg-green {
        background-color: #39b54a;
        color: #ffffff;
    }
    .bg-cyan {
        background-color: #1cbbb4;
        color: #ffffff;
    }
    .bg-blue {
        background-color: #0081ff;
        color: #ffffff;
    }
    .bg-purple {
        background-color: #6739b6;
        color: #ffffff;
    }
    .bg-mauve {
        background-color: #9c26b0;
        color: #ffffff;
    }
    .bg-pink {
        background-color: #e03997;
        color: #ffffff;
    }
    .bg-brown {
        background-color: #a5673f;
        color: #ffffff;
    }
    .bg-grey {
        background-color: #8799a3;
        color: #ffffff;
    }
    .bg-gray {
        background-color: #f0f0f0;
        color: #333333;
    }
    .bg-black {
        background-color: #333333;
        color: #ffffff;
    }
    .bg-white {
        background-color: #ffffff;
        color: #666666;
    }
</style>
pages/outbound/orderOutExecute.vue
New file
@@ -0,0 +1,295 @@
<template>
    <view class="has-foot">
        <form >
            <view class="flex solid-bottom padding-sm justify-between">
                <view class="text-gray">&nbsp;订单号:IN25102330271</view>
            </view>
<!--             <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>
                <text class='cuIcon-search text-blue' @click="search"></text>
            </view> -->
        </form>
        <view class="cu-list det menu sm-border  padding">
            <block  v-for="(item, index) in list" :key="index">
                <view  class="cu-list det menu"  @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.status$}}</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.matnrCode}}</text></text>
                    </view>
                </view>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-gray">物料编码:<text class="text-black ">{{item.matnrCode}}</text></text>
                    </view>
                </view>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-gray">完成数量:<text class="text-black ">{{item.workQty}}</text></text>
                    </view>
                    <view class="content">
                        <text class="text-gray">总数量:<text class="text-black ">{{item.anfme}}</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.workQty/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){
                    this.barcode = 'OS2509030230';
                }
                const {
                    code,
                    data,
                    msg
                } = await request('/outStockItem/page',{
                    orderId:this.barcode
                }
                )
                if (code === 200) {
                    if (Object.keys(data).length === 0){
                        uni.showToast({
                            title: "未查询到订单数据",
                            icon: "none",
                            position: 'top'
                        })
                    }
                    this.list.push(...data)
                }else if(code == 401){
                    setTimeout(() => {
                        uni.removeStorageSync('token');
                        uni.reLaunch({
                            url: "/pages/login/login"
                        });
                    }, 1000);
                }else {
                    uni.showToast({
                        title: msg,
                        icon: "none",
                        position: 'top'
                    })
                }
            },
            clearCode() {
                this.barcode = ''
            },
            remove(index) {
                this.list.splice(index, 1);
            },
            clear() {
                this.list = []
                this.barcode = ''
            },
            next() {
                if (this.list.length) {
                    this.isconfirm = true
                } else {
                    uni.showToast({
                        icon: "none",
                        title: '未选物料标签'
                    })
                }
            },
            prev() {
                this.isconfirm = false
            },
            selChange(val) {
                uni.setStorageSync('whAreaId', val)
            },
            async confirm() {
                const newArr = this.list.map(item => {
                    return {
                        ...item,
                        receiptQty: item.receiptQty === null ? 0 : +item.receiptQty
                    };
                });
                if (this.whAreaId === '') {
                    uni.showToast({
                        icon: "none",
                        title: '请选择收货区'
                    })
                } else {
                    const {
                        code,
                        data,
                        msg
                    } = await request('/orders/confirm', {
                        receipts: newArr,
                        whAreaId: this.whAreaId
                    })
                    if (code === 200) {
                        uni.showToast({
                            title: '收货成功'
                        })
                        this.list = []
                        this.barcode = ''
                        this.isconfirm = false
                    } else {
                        uni.showToast({
                            title: msg,
                            icon: "none",
                            position: 'top'
                        })
                    }
                }
            },
            DateChange(e, item) {
                item.prodTime = e.detail.value
            }
        }
    }
</script>
<style>
    .index {
        border: 1px solid #e54d42;
        color: #e54d42;
        border-radius: 50%;
        display: block;
        width: 50rpx;
        height: 50rpx;
        line-height: 48rpx;
        text-align: center;
        margin-right: 20rpx;
        font-size: 30rpx;
    }
    .text-blue {
        color: #0081ff !important;
    }
    .item {
        position: relative;
        display: flex;
        min-height: 80upx;
        align-items: center;
    }
    .content2 {
        /* background-color: coral; */
        width: 100%;
        display: flex;
        flex-direction: row;
        align-items: center;
        justify-content: flex-end;
        margin-right: 10px;
        color: #0081ff;
    }
</style>
pages/outbound/orderOutItem.vue
New file
@@ -0,0 +1,291 @@
<template>
    <view class="has-foot">
        <form >
            <view class="flex solid-bottom padding-sm justify-between">
                <view class="text-gray">&nbsp;订单号:OS250807152830</view>
            </view>
<!--             <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>
                <text class='cuIcon-search text-blue' @click="search"></text>
            </view> -->
        </form>
        <view class="cu-list det menu sm-border  padding">
            <block  v-for="(item, index) in list" :key="index" >
                <view  class="cu-list det menu  "  @click="clickTaskItem(index)">
                <view class="cu-bar bg-white solid-bottom">
                    <view class="action">
                        <view class="index">
                            {{index+1}}
                        </view>
                    </view>
                    <view class="content2">
                        <text class="text-gray margin-right-sm"><text class="text-black ">{{item.status$}}</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.matnrCode}}</text></text>
                    </view>
                </view>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-gray">物料名称:<text class="text-black ">{{item.maktx}}</text></text>
                    </view>
                </view>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-gray">实发数量:<text class="text-black ">{{item.workQty}}</text></text>
                    </view>
                    <view class="content">
                        <text class="text-gray">应发数量:<text class="text-black ">{{item.anfme}}</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.workQty/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: "./orderInItem",
                //     // 通过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){
                    this.barcode = 'OS2509030230';
                }
                const {
                    code,
                    data,
                    msg
                } = await request('/outStockItem/page',{
                    orderId:this.barcode
                }
                )
                if (code === 200) {
                    if (Object.keys(data).length === 0){
                        uni.showToast({
                            title: "未查询到订单数据",
                            icon: "none",
                            position: 'top'
                        })
                    }
                    this.list.push(...data)
                }else if(code == 401){
                    setTimeout(() => {
                        uni.removeStorageSync('token');
                        uni.reLaunch({
                            url: "/pages/login/login"
                        });
                    }, 1000);
                }else {
                    uni.showToast({
                        title: msg,
                        icon: "none",
                        position: 'top'
                    })
                }
            },
            clearCode() {
                this.barcode = ''
            },
            remove(index) {
                this.list.splice(index, 1);
            },
            clear() {
                this.list = []
                this.barcode = ''
            },
            next() {
                if (this.list.length) {
                    this.isconfirm = true
                } else {
                    uni.showToast({
                        icon: "none",
                        title: '未选物料标签'
                    })
                }
            },
            prev() {
                this.isconfirm = false
            },
            selChange(val) {
                uni.setStorageSync('whAreaId', val)
            },
            async confirm() {
                const newArr = this.list.map(item => {
                    return {
                        ...item,
                        receiptQty: item.receiptQty === null ? 0 : +item.receiptQty
                    };
                });
                if (this.whAreaId === '') {
                    uni.showToast({
                        icon: "none",
                        title: '请选择收货区'
                    })
                } else {
                    const {
                        code,
                        data,
                        msg
                    } = await request('/orders/confirm', {
                        receipts: newArr,
                        whAreaId: this.whAreaId
                    })
                    if (code === 200) {
                        uni.showToast({
                            title: '收货成功'
                        })
                        this.list = []
                        this.barcode = ''
                        this.isconfirm = false
                    } else {
                        uni.showToast({
                            title: msg,
                            icon: "none",
                            position: 'top'
                        })
                    }
                }
            },
            DateChange(e, item) {
                item.prodTime = e.detail.value
            }
        }
    }
</script>
<style>
    .index {
        border: 1px solid #e54d42;
        color: #e54d42;
        border-radius: 50%;
        display: block;
        width: 50rpx;
        height: 50rpx;
        line-height: 48rpx;
        text-align: center;
        margin-right: 20rpx;
        font-size: 30rpx;
    }
    .text-blue {
        color: #0081ff !important;
    }
    .item {
        position: relative;
        display: flex;
        min-height: 80upx;
        align-items: center;
    }
    .content2 {
        /* background-color: coral; */
        width: 100%;
        display: flex;
        flex-direction: row;
        align-items: center;
        justify-content: flex-end;
        margin-right: 10px;
        color: #0081ff;
    }
</style>
pages/outbound/orderPick.vue
New file
@@ -0,0 +1,287 @@
<template>
    <view class="has-foot">
        <form >
            <view class="cu-form-group margin-top" 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>
                <text class='cuIcon-search text-blue' @click="search"></text>
            </view>
        </form>
        <view class="cu-list det menu sm-border  padding">
            <block  v-for="(item, index) in list" :key="index">
                <view  class="cu-list det menu  "  @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.status$}}</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.maktx}}</text></text>
                    </view>
                </view>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-gray">实出数量:<text class="text-black ">{{item.workQty}}</text></text>
                    </view>
                    <view class="content">
                        <text class="text-gray">应出数量:<text class="text-black ">{{item.anfme}}</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.workQty/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: "./orderOutItem",
                    // 通过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){
                    this.barcode = 'OS2509030230';
                }
                const {
                    code,
                    data,
                    msg
                } = await request('/outStockItem/page',{
                    orderId:this.barcode
                }
                )
                if (code === 200) {
                    if (Object.keys(data).length === 0){
                        uni.showToast({
                            title: "未查询到订单数据",
                            icon: "none",
                            position: 'top'
                        })
                    }
                    this.list.push(...data)
                }else if(code == 401){
                    setTimeout(() => {
                        uni.removeStorageSync('token');
                        uni.reLaunch({
                            url: "/pages/login/login"
                        });
                    }, 1000);
                }else {
                    uni.showToast({
                        title: msg,
                        icon: "none",
                        position: 'top'
                    })
                }
            },
            clearCode() {
                this.barcode = ''
            },
            remove(index) {
                this.list.splice(index, 1);
            },
            clear() {
                this.list = []
                this.barcode = ''
            },
            next() {
                if (this.list.length) {
                    this.isconfirm = true
                } else {
                    uni.showToast({
                        icon: "none",
                        title: '未选物料标签'
                    })
                }
            },
            prev() {
                this.isconfirm = false
            },
            selChange(val) {
                uni.setStorageSync('whAreaId', val)
            },
            async confirm() {
                const newArr = this.list.map(item => {
                    return {
                        ...item,
                        receiptQty: item.receiptQty === null ? 0 : +item.receiptQty
                    };
                });
                if (this.whAreaId === '') {
                    uni.showToast({
                        icon: "none",
                        title: '请选择收货区'
                    })
                } else {
                    const {
                        code,
                        data,
                        msg
                    } = await request('/orders/confirm', {
                        receipts: newArr,
                        whAreaId: this.whAreaId
                    })
                    if (code === 200) {
                        uni.showToast({
                            title: '收货成功'
                        })
                        this.list = []
                        this.barcode = ''
                        this.isconfirm = false
                    } else {
                        uni.showToast({
                            title: msg,
                            icon: "none",
                            position: 'top'
                        })
                    }
                }
            },
            DateChange(e, item) {
                item.prodTime = e.detail.value
            }
        }
    }
</script>
<style>
    .index {
        border: 1px solid #e54d42;
        color: #e54d42;
        border-radius: 50%;
        display: block;
        width: 50rpx;
        height: 50rpx;
        line-height: 48rpx;
        text-align: center;
        margin-right: 20rpx;
        font-size: 30rpx;
    }
    .text-blue {
        color: #0081ff !important;
    }
    .item {
        position: relative;
        display: flex;
        min-height: 80upx;
        align-items: center;
    }
    .content2 {
        /* background-color: coral; */
        width: 100%;
        display: flex;
        flex-direction: row;
        align-items: center;
        justify-content: flex-end;
        margin-right: 10px;
        color: #0081ff;
    }
</style>
pages/outbound/productDirectDelivery.vue
New file
@@ -0,0 +1,283 @@
<template>
    <view class="has-foot">
        <form>
            <view class="cu-form-group margin-top">
                <view class="title">接驳站点</view>
                <input placeholder="请扫描接驳站点条码" v-model="barcode" ></input>
                <!-- <text class='cuIcon-search text-blue' @click="search"></text> -->
            </view>
            <view class="cu-form-group">
                <view class="title">容器号</view>
                <input placeholder="请扫描容器编码" v-model="barcode" ></input>
                <text class='cuIcon-search text-blue' @click="search"></text>
            </view>
<!--             <view class="flex solid-bottom padding-sm justify-between">
                <view class="text-blue margin-left">容器码:{{container}}</view>
            </view> -->
            <view class="cu-form-group">
                <view class="title">订单号</view>
                <input placeholder="请选择订单编码" v-model="barcode" ></input>
                <text class='cuIcon-search text-blue' @click="search"></text>
            </view>
            <view class="cu-form-group">
                <view class="title">目标站点</view>
                <view style="width: 75%;">
                    <uni-data-select style="min-width: 50%; max-width: 100%;" v-model="whAreaId" :localdata="range"
                        placement="bottom" @change="selChange"></uni-data-select>
                </view>
            </view>
        </form>
        <view class="cu-list det menu sm-border  padding">
            <block v-for="(item, index) in list" :key="index">
                <view class="cu-bar bg-white solid-bottom margin-top-sm">
                    <view class="action">
                        <view class="index">
                            {{index+1}}
                        </view>
                        <view class="text-blue">
                            {{`${item.maktx}`}}
                        </view>
                    </view>
                    <!--     <view class="action" >
                        <text @click="remove(index)" class="cuIcon-close text-red" style="font-size: 24px;"></text>
                    </view> -->
                </view>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-black">ASN:</text>
                    </view>
                    <view class="action">
                        <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.batch}}</text>
                    </view>
                </view>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-black">收货数量:</text>
                    </view>
                    <view class="action">
                        <text class="text-grey ">{{item.anfme}}</text>
                    </view>
                </view>
            </block>
        </view>
        <view class="cu-bar btn-group foot">
            <button class="cu-btn text-blue line-blue shadow" @click="clear">清空</button>
            <button class="cu-btn bg-blue shadow-blur" :disabled="repeatClick" @click="confirm">运送</button>
        </view>
    </view>
</template>
<script>
    import {
        request
    } from '../../common/request.js'
    import {
        mapState,
        mapMutations,
        mapActions,
        mapGetters
    } from 'vuex';
    export default {
        data() {
            return {
                barcode: '',
                areaName: '',
                locCode: '',
                container: '',
                list: [],
                range: [],
                curCode: '',
                whAreaId:'',
                repeatClick: false,
            }
        },
        computed: {
            ...mapState('user', ['dynamicFields']),
        },
        mounted() {
            this.getRece()
            this.whAreaId = uni.getStorageSync('whAreaId')
        },
        methods: {
            selChange(val) {
                uni.setStorageSync('whAreaId', val)
            },
            async search() {
                let that = this
                const {
                    code,
                    data,
                    msg
                } = await request('/staBind/list', {
                    sta: this.barcode
                })
                if (code === 200) {
                    if(data.list.length >0){
                        that.container = data.barcode
                        that.list = data.list
                    }
                    that.range = data.warehouseAreasList.map(item => ({
                        value: item.id,
                        text: item.name
                    }));
                    that.whAreaId = data.area
                } else {
                    uni.showToast({
                        title: msg,
                        icon: "none",
                    })
                }
            },
            remove(index) {
                this.list.splice(index, 1);
            },
            clear() {
                this.list = []
                this.container = ''
                this.barcode = ''
            },
            open() {
                this.$refs.popup.open()
            },
            close() {
                this.$refs.popup.close()
            },
            popupSubmit() {
                this.$refs.popup.close()
            },
            itemChange(el) {
                this.curCode = el
            },
            async confirm() {
                if(this.barcode === '' || this.barcode ===null){
                    uni.showToast({
                        title: "接驳站点不能为空",
                        icon: "none",
                    })
                    return ;
                }
                if(this.whAreaId === '' || this.whAreaId ===null){
                    uni.showToast({
                        title: "目标库区不能为空",
                        icon: "none",
                    })
                    return ;
                }
                this.repeatClick = true
                const {
                    code,
                    data,
                    msg
                } = await request('/AGV/task/start',{
                        sta: this.barcode,
                        area: this.whAreaId
                    }
                )
                if (code === 200) {
                    uni.showToast({
                        title: '启动成功'
                    })
                    this.clear()
                } else {
                    uni.showToast({
                        title: msg,
                        icon: "none",
                    })
                }
                this.repeatClick = false
            },
            async getRece() {
                const {
                    code,
                    data,
                    msg
                } = await request('/areas/receipt', {}, 'get')
                if (code === 200) {
                    this.range = data.map(item => ({
                        value: item.id,
                        text: item.warehouseId$ + "-- " + item.name
                    }));
                }
            },
        }
    }
</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;
    }
    .uni-file-picker {
        width: 100%;
        margin-bottom: 10px;
    }
    .uni-select__selector {
        z-index: 999;
    }
    .tj {
        height: auto;
        padding: 6px 8px;
        display: inline-block;
        border-radius: 6px;
    }
    .item {
        display: flex;
        justify-content: center;
    }
    .item .cu-btn {
        font-size: 26upx;
    }
</style>
pages/outbound/productionMatCall.vue
New file
@@ -0,0 +1,8 @@
<template>
</template>
<script>
</script>
<style>
</style>
pages/transfer/matTransfer.vue
New file
@@ -0,0 +1,265 @@
<template>
    <view class="has-foot">
        <form>
            <view class="cu-form-group margin-top">
                <view class="title">起始库位托盘号</view>
                <input placeholder="请扫起始库位托盘号" v-model="container"></input>
                <text class='cuIcon-search text-blue' @click="search"></text>
            </view>
            <view class="cu-form-group ">
                <view class="title">目标库位号</view>
                <input placeholder="请选择目标库位号" v-model="barcode" ></input>
                <text class='cuIcon-search text-blue' @click="search"></text>
            </view>
        </form>
        <view class="cu-list det menu sm-border  padding">
            <block v-for="(item, index) in list" :key="index">
                <view class="cu-bar bg-white solid-bottom margin-top-sm">
                    <view class="action">
                        <view class="index">
                            {{index+1}}
                        </view>
                        <view class="text-blue">
                            {{`${item.maktx}`}}
                        </view>
                    </view>
                    <!--     <view class="action" >
                        <text @click="remove(index)" class="cuIcon-close text-red" style="font-size: 24px;"></text>
                    </view> -->
                </view>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-black">ASN:</text>
                    </view>
                    <view class="action">
                        <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.batch}}</text>
                    </view>
                </view>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-black">收货数量:</text>
                    </view>
                    <view class="action">
                        <text class="text-grey ">{{item.anfme}}</text>
                    </view>
                </view>
            </block>
        </view>
        <view class="cu-bar btn-group foot">
            <button class="cu-btn text-blue line-blue shadow" @click="clear">清空</button>
            <button class="cu-btn bg-blue shadow-blur" @click="confirm">移库</button>
        </view>
        <uni-popup ref="popup" class="cu-popup">
            <view class="popup-content">
                <view class="head">
                    <text>推荐</text>
                    <text class='cuIcon-close text-red close' @click="close"></text>
                </view>
                <div class="body">
                    <view class="cu-list grid col-3 no-border">
                        <view class="item" v-for="el in range">
                            <view class="cu-btn round  sm" :class="[el===curCode?'bg-blue':'line-blue']"
                                @click="itemChange(el)">{{el}}</view>
                        </view>
                    </view>
                </div>
                <view class="cu-bar btn-group ">
                    <button class="cu-btn bg-blue shadow-blur" @click="popupSubmit">提交</button>
                </view>
            </view>
        </uni-popup>
    </view>
</template>
<script>
    import {
        request
    } from '../../common/request.js'
    import {
        mapState,
        mapMutations,
        mapActions,
        mapGetters
    } from 'vuex';
    export default {
        data() {
            return {
                barcode: '',
                areaName: '',
                locCode: '',
                container: '',
                list: [],
                range: [],
                curCode: ''
            }
        },
        computed: {
            ...mapState('user', ['dynamicFields']),
        },
        mounted() {},
        methods: {
            async search() {
                const {
                    code,
                    data,
                    msg
                } = await request('/stock/operate/list', {
                    barcode: this.container,
                    sta: this.barcode
                })
                if (code === 200) {
                    // const find = this.list.find(el => el.id === data.id);
                    // !find &&
                     this.list = data
                } else {
                    uni.showToast({
                        title: msg,
                        icon: "none",
                    })
                }
            },
            remove(index) {
                this.list.splice(index, 1);
            },
            clear() {
                this.list = []
                this.container = ''
                this.barcode = ''
            },
            open() {
                this.$refs.popup.open()
            },
            close() {
                this.$refs.popup.close()
            },
            popupSubmit() {
                this.$refs.popup.close()
            },
            itemChange(el) {
                this.curCode = el
            },
            async confirm() {
                if(this.container === '' || this.container ===null){
                    uni.showToast({
                        title: "容器码不能为空",
                        icon: "none",
                    })
                    return ;
                }
                if(this.barcode === '' || this.barcode ===null){
                    uni.showToast({
                        title: "接驳站码不能为空",
                        icon: "none",
                    })
                    return ;
                }
                const {
                    code,
                    data,
                    msg
                } = await request('/AGV/staBind',{
                        barcode: this.container,
                        sta: this.barcode
                    }
                )
                if (code === 200) {
                    uni.showToast({
                        title: '绑定成功'
                    })
                    this.clear()
                } else {
                    uni.showToast({
                        title: msg,
                        icon: "none",
                    })
                }
            },
        }
    }
</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;
    }
    .uni-file-picker {
        width: 100%;
        margin-bottom: 10px;
    }
    .uni-select__selector {
        z-index: 999;
    }
    .tj {
        height: auto;
        padding: 6px 8px;
        display: inline-block;
        border-radius: 6px;
    }
    .item {
        display: flex;
        justify-content: center;
    }
    .item .cu-btn {
        font-size: 26upx;
    }
</style>
pages/transfer/orderTransfer.vue
New file
@@ -0,0 +1,287 @@
<template>
    <view class="has-foot">
        <form >
            <view class="cu-form-group margin-top" 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>
                <text class='cuIcon-search text-blue' @click="search"></text>
            </view>
        </form>
        <view class="cu-list det menu sm-border  padding">
            <block  v-for="(item, index) in list" :key="index">
                <view  class="cu-list det menu  "  @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.status$}}</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.maktx}}</text></text>
                    </view>
                </view>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-gray">完成数量:<text class="text-black ">{{item.workQty}}</text></text>
                    </view>
                    <view class="content">
                        <text class="text-gray">调拨数量:<text class="text-black ">{{item.anfme}}</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.workQty/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: "./orderTransferItem",
                    // 通过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){
                    this.barcode = 'OS2509030230';
                }
                const {
                    code,
                    data,
                    msg
                } = await request('/outStockItem/page',{
                    orderId:this.barcode
                }
                )
                if (code === 200) {
                    if (Object.keys(data).length === 0){
                        uni.showToast({
                            title: "未查询到订单数据",
                            icon: "none",
                            position: 'top'
                        })
                    }
                    this.list.push(...data)
                }else if(code == 401){
                    setTimeout(() => {
                        uni.removeStorageSync('token');
                        uni.reLaunch({
                            url: "/pages/login/login"
                        });
                    }, 1000);
                }else {
                    uni.showToast({
                        title: msg,
                        icon: "none",
                        position: 'top'
                    })
                }
            },
            clearCode() {
                this.barcode = ''
            },
            remove(index) {
                this.list.splice(index, 1);
            },
            clear() {
                this.list = []
                this.barcode = ''
            },
            next() {
                if (this.list.length) {
                    this.isconfirm = true
                } else {
                    uni.showToast({
                        icon: "none",
                        title: '未选物料标签'
                    })
                }
            },
            prev() {
                this.isconfirm = false
            },
            selChange(val) {
                uni.setStorageSync('whAreaId', val)
            },
            async confirm() {
                const newArr = this.list.map(item => {
                    return {
                        ...item,
                        receiptQty: item.receiptQty === null ? 0 : +item.receiptQty
                    };
                });
                if (this.whAreaId === '') {
                    uni.showToast({
                        icon: "none",
                        title: '请选择收货区'
                    })
                } else {
                    const {
                        code,
                        data,
                        msg
                    } = await request('/orders/confirm', {
                        receipts: newArr,
                        whAreaId: this.whAreaId
                    })
                    if (code === 200) {
                        uni.showToast({
                            title: '收货成功'
                        })
                        this.list = []
                        this.barcode = ''
                        this.isconfirm = false
                    } else {
                        uni.showToast({
                            title: msg,
                            icon: "none",
                            position: 'top'
                        })
                    }
                }
            },
            DateChange(e, item) {
                item.prodTime = e.detail.value
            }
        }
    }
</script>
<style>
    .index {
        border: 1px solid #e54d42;
        color: #e54d42;
        border-radius: 50%;
        display: block;
        width: 50rpx;
        height: 50rpx;
        line-height: 48rpx;
        text-align: center;
        margin-right: 20rpx;
        font-size: 30rpx;
    }
    .text-blue {
        color: #0081ff !important;
    }
    .item {
        position: relative;
        display: flex;
        min-height: 80upx;
        align-items: center;
    }
    .content2 {
        /* background-color: coral; */
        width: 100%;
        display: flex;
        flex-direction: row;
        align-items: center;
        justify-content: flex-end;
        margin-right: 10px;
        color: #0081ff;
    }
</style>
pages/transfer/orderTransferItem.vue
New file
@@ -0,0 +1,291 @@
<template>
    <view class="has-foot">
        <form >
            <view class="flex solid-bottom padding-sm justify-between">
                <view class="text-gray">&nbsp;订单号:OS250807152830</view>
            </view>
<!--             <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>
                <text class='cuIcon-search text-blue' @click="search"></text>
            </view> -->
        </form>
        <view class="cu-list det menu sm-border  padding">
            <block  v-for="(item, index) in list" :key="index" >
                <view  class="cu-list det menu  "  @click="clickTaskItem(index)">
                <view class="cu-bar bg-white solid-bottom">
                    <view class="action">
                        <view class="index">
                            {{index+1}}
                        </view>
                    </view>
                    <view class="content2">
                        <text class="text-gray margin-right-sm"><text class="text-black ">{{item.status$}}</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.matnrCode}}</text></text>
                    </view>
                </view>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-gray">物料名称:<text class="text-black ">{{item.maktx}}</text></text>
                    </view>
                </view>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-gray">完成数量:<text class="text-black ">{{item.workQty}}</text></text>
                    </view>
                    <view class="content">
                        <text class="text-gray">调拨数量:<text class="text-black ">{{item.anfme}}</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.workQty/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: "./orderInItem",
                //     // 通过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){
                    this.barcode = 'OS2509030230';
                }
                const {
                    code,
                    data,
                    msg
                } = await request('/outStockItem/page',{
                    orderId:this.barcode
                }
                )
                if (code === 200) {
                    if (Object.keys(data).length === 0){
                        uni.showToast({
                            title: "未查询到订单数据",
                            icon: "none",
                            position: 'top'
                        })
                    }
                    this.list.push(...data)
                }else if(code == 401){
                    setTimeout(() => {
                        uni.removeStorageSync('token');
                        uni.reLaunch({
                            url: "/pages/login/login"
                        });
                    }, 1000);
                }else {
                    uni.showToast({
                        title: msg,
                        icon: "none",
                        position: 'top'
                    })
                }
            },
            clearCode() {
                this.barcode = ''
            },
            remove(index) {
                this.list.splice(index, 1);
            },
            clear() {
                this.list = []
                this.barcode = ''
            },
            next() {
                if (this.list.length) {
                    this.isconfirm = true
                } else {
                    uni.showToast({
                        icon: "none",
                        title: '未选物料标签'
                    })
                }
            },
            prev() {
                this.isconfirm = false
            },
            selChange(val) {
                uni.setStorageSync('whAreaId', val)
            },
            async confirm() {
                const newArr = this.list.map(item => {
                    return {
                        ...item,
                        receiptQty: item.receiptQty === null ? 0 : +item.receiptQty
                    };
                });
                if (this.whAreaId === '') {
                    uni.showToast({
                        icon: "none",
                        title: '请选择收货区'
                    })
                } else {
                    const {
                        code,
                        data,
                        msg
                    } = await request('/orders/confirm', {
                        receipts: newArr,
                        whAreaId: this.whAreaId
                    })
                    if (code === 200) {
                        uni.showToast({
                            title: '收货成功'
                        })
                        this.list = []
                        this.barcode = ''
                        this.isconfirm = false
                    } else {
                        uni.showToast({
                            title: msg,
                            icon: "none",
                            position: 'top'
                        })
                    }
                }
            },
            DateChange(e, item) {
                item.prodTime = e.detail.value
            }
        }
    }
</script>
<style>
    .index {
        border: 1px solid #e54d42;
        color: #e54d42;
        border-radius: 50%;
        display: block;
        width: 50rpx;
        height: 50rpx;
        line-height: 48rpx;
        text-align: center;
        margin-right: 20rpx;
        font-size: 30rpx;
    }
    .text-blue {
        color: #0081ff !important;
    }
    .item {
        position: relative;
        display: flex;
        min-height: 80upx;
        align-items: center;
    }
    .content2 {
        /* background-color: coral; */
        width: 100%;
        display: flex;
        flex-direction: row;
        align-items: center;
        justify-content: flex-end;
        margin-right: 10px;
        color: #0081ff;
    }
</style>
pages/transfer/transferType.vue
New file
@@ -0,0 +1,382 @@
<template>
    <view>
<!--         <form >
            <view class="cu-form-group margin-top" 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>
                <text class='cuIcon-search text-blue' @click="search"></text>
            </view>
        </form>     -->
        <scroll-view scroll-y class="page">
            <view class="nav-list">
                <!-- :url="'/pages' + item.url + '?param=' + item.param"  navigateTo-->
                <view hover-class='none'  class="nav-li"  @click="toOrder(item)"
                    :class="'bg-'+item.color" :style="[{animation: 'show ' + ((index+1)*0.2+1) + 's 1'}]"
                    v-for="(item,index) in elements2" :key="index">
                    <view class="nav-title">{{item.title}}</view>
                    <view class="nav-name">{{item.name}}</view>
                    <text :class="'cuIcon-' + item.cuIcon"></text>
                </view>
            </view>
            <view class="cu-tabbar-height"></view>
        </scroll-view>
        <view style="height: 50rpx;"></view>
    </view>
</template>
<script>
    export default {
        data() {
            return {
                baseUrl: '',
                token: '',
                icon: '',
                elements: [],
                project: 'tzsk',
                elements2: [
                    // {
                    //     title: '待包装入库单',
                    //     name: 'pakinOrder',
                    //     color: 'blue',
                    //     url: `/outbound/orderPick`
                    // },
                    // {
                    //     title: '待包装出库单',
                    //     name: 'pakinOrder',
                    //     color: 'blue',
                    //     url: `/phyz/waitOrder/waitOrderOut`
                    // },
                    // {
                    //     title: '采购入库单',
                    //     name: 'pakinOrder',
                    //     color: 'blue',
                    //     // cuIcon: 'pullup',
                    //     url: `/phyz/order/pakinOrderSelect`
                    // },
                    // {
                    //     title: '出库单',
                    //     name: 'outOrder',
                    //     color: 'blue',
                    //     // cuIcon: 'pullup',
                    //     url: `/phyz/order/outOrder`
                    // },
                    // {
                    //     title: '入库单测试用',
                    //     name: 'pakin',
                    //     color: 'blue',
                    //     // cuIcon: 'pullup',
                    //     url: `/phyz/order/purchaseOrder`
                    // },
                    // {
                    //     title: '采购出库',
                    //     name: 'outOrder',
                    //     color: 'blue',
                    //     // cuIcon: 'pullup',
                    //     url: `/phyz/orderOut/orderOutSelect`
                    // },
                    // {
                    //     title: '半成品入库单',
                    //     name: 'bcpOrder',
                    //     color: 'blue',
                    //     // cuIcon: 'pullup',
                    //     url: `/phyz/bcp/bcpOrder`
                    // },
                    // {
                    //     title: '半成品入库单_吸塑',
                    //     name: 'bcpOrder',
                    //     color: 'blue',
                    //     // cuIcon: 'pullup',
                    //     url: `/phyz/bcp/bcpOrder_xs`
                    // },
                    {
                        title: '半成品调拨单',
                        name: 'bcpDbOrder',
                        color: 'blue',
                        // cuIcon: 'pullup',
                        url: `/orderTransfer`
                    },
                    {
                        title: '半成品调拨单',
                        name: 'bcpDbOrder',
                        color: 'blue',
                        // cuIcon: 'pullup',
                        url: `/orderTransfer`
                    },
                    // {
                    //     title: '半成品出库单',
                    //     name: 'bcpOutOrder',
                    //     color: 'blue',
                    //     // cuIcon: 'pullup',
                    //     url: `/phyz/orderOut/bcpOrderOutSelect`
                    // },
                    // {
                    //     title: '半成品出库单_二厂',
                    //     name: 'bcpOutOrder',
                    //     color: 'blue',
                    //     // cuIcon: 'pullup',
                    //     url: `/phyz/orderOut/bcpOrderOutSelect_2`,
                    //     param: {orderType: [1,2,3]}
                    // },
                    {
                        title: '半成品加工单',
                        name: 'processOrder',
                        color: 'blue',
                        // cuIcon: 'pullup',
                        url: `/orderTransfer`
                    },
                    {
                        title: '半成品回流单',
                        name: 'backStock',
                        color: 'blue',
                        // cuIcon: 'pullup',
                        url: `/orderTransfer`
                    },
                    // {
                    //     title: '入库单',
                    //     name: 'orderIn',
                    //     color: 'blue',
                    //     // cuIcon: 'pullup',
                    //     url: `/phyz/comOrder/orderIn`
                    // },
                    // {
                    //     title: '出库单',
                    //     name: 'orderOut',
                    //     color: 'blue',
                    //     // cuIcon: 'pullup',
                    //     url: `/phyz/comOrder/orderOut`
                    // },
                ],
                menu: [],
                colorList: ['cyan','blue','purple','mauve','pink','brown','red','orange','yellow','olive','cyan','blue','purple','mauve','pink','brown','red','orange','yellow','olive' ]
            };
        },
        // onShow() {
        //     this.baseUrl = uni.getStorageSync('baseUrl');
        //     this.token = uni.getStorageSync('token');
        //     this.project = uni.getStorageSync('project')
        //     // this.getAuth()
        //     this.backGroundRepeat()
        // },
        onLoad(option) {
            this.baseUrl = uni.getStorageSync('baseUrl');
            this.token = uni.getStorageSync('token');
            this.project = uni.getStorageSync('project');
            this.menu = uni.getStorageSync('menu');
            this.getAuth2(option.id)
            this.backGroundRepeat()
        },
        methods: {
            backGroundRepeat() {
                let len = this.colorList.length
                let i = 0
                for (let k in this.elements2) {
                    if (i == len) {
                        i = 0
                    }
                    this.elements2[k].color = this.colorList[i]
                    i++
                }
            },
            toOrder(item) {
                uni.navigateTo({
                    url: `/pages/transfer${item.url}`,
                    success(res) {
                        res.eventChannel.emit('param', {
                            param: item.param
                        })
                    }
                })
            },
            getAuth2(id) {
                let secMenu = []
                for (let k of this.menu) {
                    if (id == k.id) {
                        secMenu = k.children
                    }
                }
                for (let i in secMenu) {
                    this.getIcon(secMenu[i].title)
                    // 兼容2025 02 18 菜单param
                    if (secMenu[i].param) {
                        this.elements.unshift({
                            title: secMenu[i].name,
                            name: secMenu[i].title,
                            color: this.colorList[i],
                            cuIcon: this.icon,
                            id: secMenu[i].id,
                            param: JSON.parse(secMenu[i].param),
                            url: `${secMenu[i].code}`
                        })
                    } else {
                        this.elements.unshift({
                            title: secMenu[i].name,
                            name: secMenu[i].title,
                            color: this.colorList[i],
                            cuIcon: this.icon,
                            id: secMenu[i].id,
                            url: `${secMenu[i].code}`
                        })
                    }
                }
                console.log(this.elements);
            },
            getAuth(id) {
                let that = this
                uni.request({
                    url: that.baseUrl + '/menu/pda/auth',
                    data: {level:2 ,id: id},
                    header: { 'token': uni.getStorageSync('token') },
                    method: 'POST',
                    success(res) {
                        console.log(res);
                        if (res.statusCode === 404) {
                            that.elements = that.elements2
                            return
                        }
                        res = res.data
                        that.elements = []
                        if (res.code === 200) {
                            if (res.data == undefined || res.data == null || res.data == "") {
                                if (res.data.length == 0) {
                                    return
                                } else {
                                    that.elements = that.elements2
                                }
                            }
                            for (var i = 0; i < res.data.length; i++) {
                                if (res.data.length < 0) {
                                    break;
                                }
                                that.getIcon(res.data[i].title)
                                that.elements.unshift({
                                    title: res.data[i].name,
                                    name: res.data[i].title,
                                    color: that.colorList[i],
                                    cuIcon: that.icon,
                                    url: `${res.data[i].code}`
                                })
                            }
                        } else if (res.code === 403) {
                            uni.showToast({
                                title: res.msg,
                                icon: "none",
                                position: 'top'
                            })
                            setTimeout(() => {
                                uni.reLaunch({
                                    url: '../login/login'
                                });
                            }, 1000);
                        } else if(res.status === 404) {
                            that.elements = that.elements2
                            // uni.showToast({
                            //     title: '默认主页',
                            //     icon: "none",
                            //     position: 'top'
                            // })
                        } else {
                            uni.showToast({
                                title: res.msg,
                                icon: "none",
                                position: 'top'
                            })
                        }
                    },
                    fail(err) {
                        console.log(err);
                    }
                })
            },
            getIcon(e) {
                const ways = ['pakin','orderPakin','orderPutOn']
                if (ways.includes(e)) {
                    this.icon = 'pullup'
                }
            }
        }
    }
</script>
<style>
    .page {
        height: 100vh;
    }
    .bg-red {
        background-color: #e54d42;
        color: #ffffff;
    }
    .bg-orange {
        background-color: #f37b1d;
        color: #ffffff;
    }
    .bg-yellow {
        background-color: #fbbd08;
        color: #333333;
    }
    .bg-olive {
        background-color: #8dc63f;
        color: #ffffff;
    }
    .bg-green {
        background-color: #39b54a;
        color: #ffffff;
    }
    .bg-cyan {
        background-color: #1cbbb4;
        color: #ffffff;
    }
    .bg-blue {
        background-color: #0081ff;
        color: #ffffff;
    }
    .bg-purple {
        background-color: #6739b6;
        color: #ffffff;
    }
    .bg-mauve {
        background-color: #9c26b0;
        color: #ffffff;
    }
    .bg-pink {
        background-color: #e03997;
        color: #ffffff;
    }
    .bg-brown {
        background-color: #a5673f;
        color: #ffffff;
    }
    .bg-grey {
        background-color: #8799a3;
        color: #ffffff;
    }
    .bg-gray {
        background-color: #f0f0f0;
        color: #333333;
    }
    .bg-black {
        background-color: #333333;
        color: #ffffff;
    }
    .bg-white {
        background-color: #ffffff;
        color: #666666;
    }
</style>
pages/workInfo/locInfo.vue
New file
@@ -0,0 +1,239 @@
<template>
    <view class="has-foot">
        <form>
            <view class="cu-form-group margin-top">
                <view class="title">库位号</view>
                <input placeholder="请扫描库位编码" v-model="barcode" ></input>
                <text class='cuIcon-search text-blue' @click="search"></text>
            </view>
        </form>
        <view class="cu-list det menu sm-border padding">
            <block v-for="(item, index) in list" :key="index" @click="clickTaskItem(index)">
                <view class="cu-list det menu" @click="clickTaskItem(index)">
                    <view class="cu-item">
                        <view class="content">
                            <text class="text-grey">库位号:</text><text class="text-black">{{item.stationName}}</text>
                        </view>
                    </view>
                    <view class="cu-item">
                        <view class="content">
                            <text class="text-grey">库位类型:</text><text class="text-black ">{{item.type === 1 ? '箱壳' : '原材料'}}</text>
                        </view>
                    </view>
                    <view class="cu-item">
                        <view class="content">
                            <text class="text-grey">容器号:</text><text class="text-black ">{{item.containerType}}</text>
                        </view>
                    </view>
                    <view class="cu-item">
                        <view class="content">
                            <text class="text-grey">库位状态:</text><text class="text-black ">{{item.status === 0 ? '在库' : '空闲' }}</text>
                        </view>
                    </view>
                    <view class="cu-item">
                        <button class="cu-btn bg-red shadow-blur margin-left-xl justify-center" @click="popupSubmit">禁用</button>
                        <button class="cu-btn bg-green shadow-blur margin-right-xl justify-center" @click="popupSubmit">解禁</button>
                            <!-- <text class="text-grey">容器号:</text><text class="text-black ">{{item.anfme}}</text> -->
<!--                         <view class="content margin-left-xl justify-center">
                        </view> -->
                    </view>
                </view>
            </block>
        </view>
<!--         <uni-popup ref="popup" class="cu-popup">
            <view class="popup-content">
                <view class="head">
                    <text>推荐</text>
                    <text class='cuIcon-close text-red close' @click="close"></text>
                </view>
                <div class="body">
                    <view class="cu-list grid col-3 no-border">
                        <view class="item" v-for="el in range">
                            <view class="cu-btn round  sm" :class="[el===curCode?'bg-blue':'line-blue']"
                                @click="itemChange(el)">{{el}}</view>
                        </view>
                    </view>
                </div>
                <view class="cu-bar btn-group ">
                    <button class="cu-btn bg-blue shadow-blur" @click="popupSubmit">提交</button>
                </view>
            </view>
        </uni-popup> -->
    </view>
</template>
<script>
    import {
        request
    } from '../../common/request.js'
    import {
        mapState,
        mapMutations,
        mapActions,
        mapGetters
    } from 'vuex';
    export default {
        data() {
            return {
                container: '',
                list: [],
                range: [],
                curCode: ''
            }
        },
        computed: {
            ...mapState('user', ['dynamicFields']),
        },
        mounted() {
            this.search()
        },
        methods: {
            async search() {
                const {
                    code,
                    data,
                    msg
                } = await request('/basStation/page', {
                    current: 1,
                    pageSize: 10000,
                    stationName: this.barcode
                })
                if (code === 200) {
                     this.list = data.records
                } else {
                    uni.showToast({
                        title: msg,
                        icon: "none",
                    })
                }
            },
            clickTaskItem(index){
                let that = this
                uni.navigateTo({
                    url: "./orderInItem",
                    // 通过eventChannel向被打开页面传送数据
                    success: function(res) {
                        res.eventChannel.emit('checkItem', {
                            data: that.list[index]
                        })
                    }
                });
            },
            remove(index) {
                this.list.splice(index, 1);
            },
            clear() {
                this.list = []
                this.container = ''
                this.barcode = ''
            },
            open() {
                this.$refs.popup.open()
            },
            close() {
                this.$refs.popup.close()
            },
            popupSubmit() {
                this.$refs.popup.close()
            },
            itemChange(el) {
                this.curCode = el
            },
            async confirm() {
                if(this.barcode === '' || this.barcode ===null){
                    uni.showToast({
                        title: "接驳站码不能为空",
                        icon: "none",
                    })
                    return ;
                }
                const {
                    code,
                    data,
                    msg
                } = await request('/AGV/staBind',{
                        barcode: this.container,
                        sta: this.barcode
                    }
                )
                if (code === 200) {
                    uni.showToast({
                        title: '绑定成功'
                    })
                    this.clear()
                } else {
                    uni.showToast({
                        title: msg,
                        icon: "none",
                    })
                }
            },
        }
    }
</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;
    }
    .uni-file-picker {
        width: 100%;
        margin-bottom: 10px;
    }
    .uni-select__selector {
        z-index: 999;
    }
    .tj {
        height: auto;
        padding: 6px 8px;
        display: inline-block;
        border-radius: 6px;
    }
    .item {
        display: flex;
        justify-content: center;
    }
    .item .cu-btn {
        font-size: 26upx;
    }
</style>
pages/workInfo/stationInfo.vue
New file
@@ -0,0 +1,234 @@
<template>
    <view class="has-foot">
        <form>
            <view class="cu-form-group margin-top">
                <view class="title">接驳站点</view>
                <input placeholder="请扫描接驳站点条码" v-model="barcode" ></input>
                <text class='cuIcon-search text-blue' @click="search"></text>
            </view>
        </form>
        <view class="cu-list det menu sm-border padding">
            <block v-for="(item, index) in list" :key="index" @click="clickTaskItem(index)">
                <view class="cu-list det menu" @click="clickTaskItem(index)">
                    <view class="cu-item">
                        <view class="content">
                            <text class="text-grey">站点编码:</text><text class="text-black">{{item.stationName}}</text>
                        </view>
                    </view>
                    <view class="cu-item">
                        <view class="content">
                            <text class="text-grey">站点类型:</text><text class="text-black ">{{item.type === 1 ? '光电站点' : '普通站点'}}</text>
                        </view>
                    </view>
                    <view class="cu-item">
                        <view class="content">
                            <text class="text-grey">站点状态:</text><text class="text-black ">{{item.status === 0 ? '正常' : '禁用' }}</text>
                        </view>
                    </view>
                    <view class="cu-item">
                        <button class="cu-btn bg-red shadow-blur margin-left-xl justify-center" @click="popupSubmit">禁用</button>
                        <button class="cu-btn bg-green shadow-blur margin-right-xl justify-center" @click="popupSubmit">解禁</button>
                            <!-- <text class="text-grey">容器号:</text><text class="text-black ">{{item.anfme}}</text> -->
<!--                         <view class="content margin-left-xl justify-center">
                        </view> -->
                    </view>
                </view>
            </block>
        </view>
<!--         <uni-popup ref="popup" class="cu-popup">
            <view class="popup-content">
                <view class="head">
                    <text>推荐</text>
                    <text class='cuIcon-close text-red close' @click="close"></text>
                </view>
                <div class="body">
                    <view class="cu-list grid col-3 no-border">
                        <view class="item" v-for="el in range">
                            <view class="cu-btn round  sm" :class="[el===curCode?'bg-blue':'line-blue']"
                                @click="itemChange(el)">{{el}}</view>
                        </view>
                    </view>
                </div>
                <view class="cu-bar btn-group ">
                    <button class="cu-btn bg-blue shadow-blur" @click="popupSubmit">提交</button>
                </view>
            </view>
        </uni-popup> -->
    </view>
</template>
<script>
    import {
        request
    } from '../../common/request.js'
    import {
        mapState,
        mapMutations,
        mapActions,
        mapGetters
    } from 'vuex';
    export default {
        data() {
            return {
                container: '',
                list: [],
                range: [],
                curCode: ''
            }
        },
        computed: {
            ...mapState('user', ['dynamicFields']),
        },
        mounted() {
            this.search()
        },
        methods: {
            async search() {
                const {
                    code,
                    data,
                    msg
                } = await request('/basStation/page', {
                    current: 1,
                    pageSize: 10000,
                    stationName: this.barcode
                })
                if (code === 200) {
                     this.list = data.records
                } else {
                    uni.showToast({
                        title: msg,
                        icon: "none",
                    })
                }
            },
            clickTaskItem(index){
                let that = this
                uni.navigateTo({
                    url: "./orderInItem",
                    // 通过eventChannel向被打开页面传送数据
                    success: function(res) {
                        res.eventChannel.emit('checkItem', {
                            data: that.list[index]
                        })
                    }
                });
            },
            remove(index) {
                this.list.splice(index, 1);
            },
            clear() {
                this.list = []
                this.container = ''
                this.barcode = ''
            },
            open() {
                this.$refs.popup.open()
            },
            close() {
                this.$refs.popup.close()
            },
            popupSubmit() {
                this.$refs.popup.close()
            },
            itemChange(el) {
                this.curCode = el
            },
            async confirm() {
                if(this.barcode === '' || this.barcode ===null){
                    uni.showToast({
                        title: "接驳站码不能为空",
                        icon: "none",
                    })
                    return ;
                }
                const {
                    code,
                    data,
                    msg
                } = await request('/AGV/staBind',{
                        barcode: this.container,
                        sta: this.barcode
                    }
                )
                if (code === 200) {
                    uni.showToast({
                        title: '绑定成功'
                    })
                    this.clear()
                } else {
                    uni.showToast({
                        title: msg,
                        icon: "none",
                    })
                }
            },
        }
    }
</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;
    }
    .uni-file-picker {
        width: 100%;
        margin-bottom: 10px;
    }
    .uni-select__selector {
        z-index: 999;
    }
    .tj {
        height: auto;
        padding: 6px 8px;
        display: inline-block;
        border-radius: 6px;
    }
    .item {
        display: flex;
        justify-content: center;
    }
    .item .cu-btn {
        font-size: 26upx;
    }
</style>
pages/workInfo/taskInfo.vue
New file
@@ -0,0 +1,296 @@
<template>
    <view class="has-foot">
        <form >
<!--             <view class="flex solid-bottom padding-sm justify-between">
                <view class="text-gray">&nbsp;订单号:OS250807152830</view>
            </view> -->
            <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>
                <text class='cuIcon-search text-blue' @click="search"></text>
            </view>
        </form>
        <view class="cu-list det menu sm-border  padding">
            <block  v-for="(item, index) in list" :key="index" >
                <view  class="cu-list det menu  "  @click="clickTaskItem(index)">
                <view class="cu-bar bg-white solid-bottom">
                    <view class="action">
                        <view class="index">
                            {{index+1}}
                        </view>
                    </view>
                    <view class="content2">
                        <text class="text-gray margin-right-sm"><text class="text-black ">{{item.status$}}</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.matnrCode}}</text></text>
                    </view>
                </view>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-gray">工作类型:<text class="text-black ">{{item.maktx}}</text></text>
                    </view>
                </view>
                <view class="cu-item">
                    <view class="content">
                        <text class="text-gray">起始站点:<text class="text-black ">{{item.workQty}}</text></text>
                    </view>
                    <view class="content">
                        <text class="text-gray">目标站点:<text class="text-black ">{{item.anfme}}</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">
                        <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.workQty/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: "./orderInItem",
                //     // 通过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){
                    this.barcode = 'OS2509030230';
                }
                const {
                    code,
                    data,
                    msg
                } = await request('/outStockItem/page',{
                    orderId: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>
static/img/toux80.png