#
zhou zhou
15 小时以前 35253ae67188c21817fec10891fac45141e72fd8
#
4个文件已修改
1352 ■■■■ 已修改文件
pages/listing/itemSelect.vue 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/listing/matnrPalletising.vue 1316 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/outbound/orderOut/orderList.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/outbound/orderOut/order_out_type.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/listing/itemSelect.vue
@@ -27,40 +27,41 @@
                        </view>
                        <view class="cu-item">
                            <view class="content">
                                <text class="text-black">物料名称:</text>
                                <text class="text-grey">{{ item.maktx }}</text>
                            </view>
                        </view>
                        <view class="cu-item">
                            <view class="content">
                                <text class="text-black">单号:</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>
                                <text class="text-black">跟踪号:</text>
                            </view>
                            <view class="action">
                                <text class="text-grey ">{{item.platWorkCode}}</text>
                            </view>
                        </view>
                        <view class="cu-item">
                            <view class="content">
                                <text class="text-black">批次:</text>
                            </view>
                            <view class="action">
                                <text class="text-grey ">{{item.splrBatch}}</text>
                            </view>
                        </view>
                        <!-- <view class="cu-item">
                            <view class="content">
                                <text class="text-black">质检状态:</text>
                            </view>
                            <view class="action">
                                <text class="text-grey ">{{item.isptResult$}}</text>
                            </view>
                        </view> -->
                        <view class="cu-item">
                            <view class="content">
                                <text class="text-black">库存单位: <text class="text-grey ">{{item.stockUnit}}</text></text>
                                <text class="text-black">单位: <text class="text-grey ">{{item.stockUnit}}</text></text>
                            </view>
                            <view class="content">
                                <text class="text-black">收货数量: <text class="text-grey ">{{item.anfme}}</text></text>
                            </view>
                            <!-- <view class="content">
                                <text class="text-black">已上架数量: <text
                                        class="text-grey ">{{item.qty}}</text></text>
                            </view> -->
                        </view>
                        <view class="cu-item">
                            <view class="content">
pages/listing/matnrPalletising.vue
@@ -1,54 +1,82 @@
<template>
    <view class="has-foot">
        <view>
        <form>
            <view class="cu-form-group margin-top">
                <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">容器号</view>
                <input placeholder="请扫描容器编码" v-model="container" @input="getList" 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>
            <form>
                <view class="cu-form-group margin-top">
                    <view class="title">订单号</view>
                    <input
                        placeholder="请输入订单号"
                        v-model="asnCode"
                    />
                    <!-- <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="getList"
                        focus
                    />
                    <!-- <text class='cuIcon-search text-blue' @click="getList"></text> -->
                </view>
                <view class="cu-form-group">
                    <view class="title">物料号</view>
                    <input
                        placeholder="请扫描物料编码"
                        v-model="matnrCode"
                    />
                    <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>
            <view class="flex solid-bottom padding-sm justify-between">
                <view class="text-blue">物料种类:{{ list.length }}</view>
                <view class="text-blue">组托总数:{{ allCount }}</view>
            </view>
        </view>
        <view class="padding-lr margin-top-sm" style="padding-bottom: 120upx;">
            <block v-for="(item, index) in list" :key="index">
                <view class="cu-list det menu sm-border margin-bottom-sm " :class="[item.trackCode===barcode&&'act']"
                    :ref="item.trackCode+'ref'">
                    <view class="cu-bar bg-white solid-bottom ">
        <view
            class="padding-lr margin-top-sm"
            style="padding-bottom: 120upx"
        >
            <block
                v-for="(item, index) in list"
                :key="index"
            >
                <view
                    class="cu-list det menu sm-border margin-bottom-sm"
                    :class="[item.trackCode === barcode && 'act']"
                    :ref="item.trackCode + 'ref'"
                >
                    <view class="cu-bar bg-white solid-bottom">
                        <view class="action">
                            <view class="index">
                                {{index+1}}
                                {{ index + 1 }}
                            </view>
                            <view class="text-blue">
                                编码:
                                {{`${item.matnrCode}`}}
                                {{ `${item.matnrCode}` }}
                            </view>
                        </view>
                        <view class="action" v-if="!isconfirm">
                            <text @click="remove(index)" class="cuIcon-close text-red" style="font-size: 24px;"></text>
                        <view
                            class="action"
                            v-if="!isconfirm"
                        >
                            <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">物料编码:</text>
                            <text class="text-grey ">{{item.maktx}}</text>
                            <text class="text-black">物料名称:</text>
                            <text class="text-grey">{{ item.maktx }}</text>
                        </view>
                    </view>
                    <view class="cu-item">
@@ -56,37 +84,39 @@
                            <text class="text-black">单号:</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.splrBatch}}</text>
                            <text class="text-grey">{{ item.asnCode }}</text>
                        </view>
                    </view>
                    <!-- <view class="cu-item">
                        <view class="content">
                            <text class="text-black">质检结果: <text class="text-grey ">{{item.inspect}}</text></text>
                        </view>
                    </view> -->
                    <!-- <view class="cu-item">
                        <view class="content">
                            <text class="text-black">平台行号: <text class="text-grey ">{{item.platformId}}</text></text>
                        </view>
                        <view class="content">
                            <text class="text-black">质检结果: <text class="text-grey ">{{item.inspect}}</text></text>
                        </view>
                    </view> -->
                    <view class="cu-item">
                        <view class="content">
                            <text class="text-black">库存单位: <text class="text-grey ">{{item.stockUnit}}</text></text>
                            <text class="text-black">跟踪号:</text>
                        </view>
                        <view class="action">
                            <text class="text-grey">{{ item.platWorkCode }}</text>
                        </view>
                    </view>
                    <view class="cu-item">
                        <view class="content">
                            <text class="text-black">批次:</text>
                        </view>
                        <view class="action">
                            <text class="text-grey">{{ item.splrBatch }}</text>
                        </view>
                    </view>
                    <view class="cu-item">
                        <view class="content">
                            <text class="text-black">
                                单位:
                                <text class="text-grey">
                                    {{ item.stockUnit }}
                                </text>
                            </text>
                        </view>
                        <view class="content">
                            <text class="text-black">收货数量: <text class="text-grey ">{{item.anfme}}</text></text>
                            <text class="text-black">
                                收货数量:
                                <text class="text-grey">{{ item.anfme }}</text>
                            </text>
                        </view>
                        <!-- <view class="content">
                            <text class="text-black">已上架数量: <text
@@ -95,19 +125,33 @@
                    </view>
                    <view class="cu-item">
                        <view class="content">
                            <text class="text-black">可组盘数量: <text
                                    class="text-grey ">{{item.ableQty}}</text></text>
                            <text class="text-black">
                                可组盘数量:
                                <text class="text-grey">
                                    {{ item.ableQty }}
                                </text>
                            </text>
                        </view>
                    </view>
                    <view class="cu-item">
                    <view class="cu-item">
                        <view class="content">
                            <view class="cu-form-group padding-lr-0">
                                <view class="title text-blue"><text
                                        class="text-red text-xl vertical-middle">*</text>组盘数量:
                                <view class="title text-blue">
                                    <text
                                        class="text-red text-xl vertical-middle"
                                    >
                                        *
                                    </text>
                                    组盘数量:
                                </view>
                                <uni-number-box style="width: 70%;" :min="0" :max="item.ableQty" :decimal="2" :step="0.01" v-model="item.receiptQty"
                                    ></uni-number-box>
                                <uni-number-box
                                    style="width: 70%"
                                    :min="0"
                                    :max="item.ableQty"
                                    :decimal="2"
                                    :step="0.01"
                                    v-model="item.receiptQty"
                                ></uni-number-box>
                            </view>
                        </view>
                    </view>
@@ -115,57 +159,138 @@
            </block>
        </view>
        <view class="cu-bar btn-group foot">
            <button v-if="hasButtonPermission('reset')" class="cu-btn text-blue line-blue shadow" @click="clear">清空</button>
            <button v-if="hasButtonPermission('submit')" class="cu-btn bg-blue shadow-blur" :disabled="repeatClick" @click="confirm">组托</button>
            <button v-if="hasButtonPermission('submitNoJudge')" class="cu-btn bg-blue shadow-blur" :disabled="repeatClick" @click="confirm2">组托</button>
            <button
                v-if="hasButtonPermission('reset')"
                class="cu-btn text-blue line-blue shadow"
                @click="clear"
            >
                清空
            </button>
            <button
                v-if="hasButtonPermission('submit')"
                class="cu-btn bg-blue shadow-blur"
                :disabled="repeatClick"
                @click="confirm"
            >
                组托
            </button>
            <button
                v-if="hasButtonPermission('submitNoJudge')"
                class="cu-btn bg-blue shadow-blur"
                :disabled="repeatClick"
                @click="confirm2"
            >
                组托
            </button>
        </view>
        <!-- AGV呼叫确认弹窗 -->
        <view class="modal-mask" v-if="showAgvModal" @click="closeAgvModal">
            <view class="modal-container" @click.stop>
        <view
            class="modal-mask"
            v-if="showAgvModal"
            @click="closeAgvModal"
        >
            <view
                class="modal-container"
                @click.stop
            >
                <view class="modal-header">
                    <text class="cuIcon-deliver" style="font-size: 48rpx; color: #0081ff;"></text>
                    <text
                        class="cuIcon-deliver"
                        style="font-size: 48rpx; color: #0081ff"
                    ></text>
                    <text class="modal-title">AGV呼叫确认</text>
                </view>
                <view class="modal-body">
                    <text class="modal-message">是否需要呼叫AGV进行托盘搬运?</text>
                    <text class="modal-message">
                        是否需要呼叫AGV进行托盘搬运?
                    </text>
                </view>
                <view class="modal-footer">
                    <button class="modal-btn modal-btn-cancel" @click="handleAgvNo">不需要</button>
                    <button class="modal-btn modal-btn-confirm" @click="handleAgvYes">需要呼叫</button>
                    <button
                        class="modal-btn modal-btn-cancel"
                        @click="handleAgvNo"
                    >
                        不需要
                    </button>
                    <button
                        class="modal-btn modal-btn-confirm"
                        @click="handleAgvYes"
                    >
                        需要呼叫
                    </button>
                </view>
            </view>
        </view>
        <!-- AGV站点输入弹窗 -->
        <view class="modal-mask" v-if="showAgvInputModal" @click="closeAgvInputModal">
            <view class="modal-container" @click.stop>
        <view
            class="modal-mask"
            v-if="showAgvInputModal"
            @click="closeAgvInputModal"
        >
            <view
                class="modal-container"
                @click.stop
            >
                <view class="modal-header">
                    <text class="cuIcon-locationfill" style="font-size: 48rpx; color: #0081ff;"></text>
                    <text
                        class="cuIcon-locationfill"
                        style="font-size: 48rpx; color: #0081ff"
                    ></text>
                    <text class="modal-title">输入AGV站点</text>
                </view>
                <view class="modal-body">
                    <view class="form-item">
                        <text class="form-label">AGV站点</text>
                        <view class="input-wrapper">
                            <input class="agv-input" type="text" v-model="agvStationInput" placeholder="请输入AGV站点编号" @input="checkAgvStation()"/>
                            <input
                                class="agv-input"
                                type="text"
                                v-model="agvStationInput"
                                placeholder="请输入AGV站点编号"
                                @input="checkAgvStation()"
                            />
                        </view>
                    </view>
                    <view class="form-item">
                        <text class="form-label">目标库区</text>
                        <view class="input-wrapper picker-wrapper">
                            <picker class="picker" mode="selector" :range="rangeText" @change="pickerChange">
                            <picker
                                class="picker"
                                mode="selector"
                                :range="rangeText"
                                @change="pickerChange"
                            >
                                <view class="picker-view">
                                    <text>{{ whAreaId ? selectedText : '请选择库区' }}</text>
                                    <text class="cuIcon-right picker-arrow"></text>
                                    <text>
                                        {{
                                            whAreaId
                                                ? selectedText
                                                : '请选择库区'
                                        }}
                                    </text>
                                    <text
                                        class="cuIcon-right picker-arrow"
                                    ></text>
                                </view>
                            </picker>
                        </view>
                    </view>
                </view>
                <view class="modal-footer">
                    <button class="modal-btn modal-btn-cancel" @click="handleAgvNo">不需要</button>
                    <button class="modal-btn modal-btn-confirm" @click="confirmAgvStation">确定</button>
                    <button
                        class="modal-btn modal-btn-cancel"
                        @click="handleAgvNo"
                    >
                        不需要
                    </button>
                    <button
                        class="modal-btn modal-btn-confirm"
                        @click="confirmAgvStation"
                    >
                        确定
                    </button>
                </view>
            </view>
        </view>
@@ -173,540 +298,523 @@
</template>
<script>
    import {
        request
    } from '../../common/request.js'
    import {
        mapState,
        mapMutations,
        mapActions,
        mapGetters
    } from 'vuex';
    export default {
        data() {
            return {
                whAreaId:'',
                barcode: '',
                container: '',
                megreQty: '',
                list: [],
                range: [],
                asnCode: '',
                repeatClick: false,
                isconfirm: false,
                matnrCode:'',
                max: 99999999,
                buttonPermissions: [], // 按钮权限列表
                showAgvModal: false, // AGV确认弹窗
                showAgvInputModal: false, // AGV站点输入弹窗
                agvStationInput: '' ,// AGV站点输入值
                agvStationName: ''
            }
import { request } from '../../common/request.js'
import { mapState, mapMutations, mapActions, mapGetters } from 'vuex'
export default {
    data() {
        return {
            whAreaId: '',
            barcode: '',
            container: '',
            megreQty: '',
            list: [],
            range: [],
            asnCode: '',
            repeatClick: false,
            isconfirm: false,
            matnrCode: '',
            max: 99999999,
            buttonPermissions: [], // 按钮权限列表
            showAgvModal: false, // AGV确认弹窗
            showAgvInputModal: false, // AGV站点输入弹窗
            agvStationInput: '', // AGV站点输入值
            agvStationName: ''
        }
    },
    computed: {
        ...mapState('user', ['dynamicFields']),
        allCount() {
            return this.list.reduce((acc, row) => +row.receiptQty + acc, 0) || 0
        },
        computed: {
            ...mapState('user', ['dynamicFields']),
            allCount() {
                return this.list.reduce((acc, row) => +row.receiptQty + acc, 0) || 0
            },
            rangeText() {
                return this.range.map(item => item.text)
            },
            selectedText() {
                const found = this.range.find(item => item.value === this.whAreaId)
                return found ? found.text : '请选择库区'
            }
        rangeText() {
            return this.range.map((item) => item.text)
        },
        mounted() {
            // this.getRece()
            // 获取按钮权限
            this.buttonPermissions = uni.getStorageSync('buttonPermissions') || [];
            console.log('当前页面按钮权限:', this.buttonPermissions);
        },
        methods: {
            async checkAgvStation(){
                const that = this;
                if(this.agvStationInput === '' || this.agvStationInput === null){
                    uni.showToast({
                        title: "容器码为空",
                        icon: "none",
                        position: 'top'
                    })
                    return ;
                }
                const {
                    code,
                    data,
                    msg
                } = await request('/check/agvStation', {
                    transferStationNo: this.agvStationInput
                })
                if (code === 200) {
                    this.agvStationName = data.stationName
                } else {
                    uni.showToast({
                        title: msg,
                        icon: "none",
                        position: 'top'
                    })
                    setTimeout(function() {
                        that.agvStationName = ''
                        that.agvStationInput = ''
                    }, 200);
                }
            },
            pickerChange(e) {
                const index = e.detail.value
                this.whAreaId = this.range[index].value
                uni.setStorageSync('whAreaId', this.whAreaId)
            },
            // 检查按钮权限
            hasButtonPermission(route) {
                return this.buttonPermissions.includes(route);
            },
            async search() {
                const find = this.list.find(el => el.trackCode === this.barcode);
                find ? this.scrollTo() : this.getDet();
            },
            getDet() {
                let that = this;
                uni.navigateTo({
                    url: "../listing/itemSelect",
                    success: function(res) {
                        // 通过eventChannel向被打开页面传送数据   向另外一个页面传递值的
                        res.eventChannel.emit('data', {
                            matnrCode: that.matnrCode,
                            asnCode: that.asnCode
                        })
                    },
                    events: {
                        // 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据  另外一个页面传过来的
                        backData: function(data) {
                            that.showBackData(data.data)
                        },
                    },
                });
            },
            async getList() {
                if(this.container === '' || this.container === null){
                    uni.showToast({
                        title: "容器码为空",
                        icon: "none",
                        position: 'top'
                    })
                    return ;
                }
                const {
                    code,
                    data,
                    msg
                } = await request('/asnOrderItem/container', {
                    barcode: this.container
                })
                if (code === 200) {
                    this.range = data.map(item => ({
                        value: item.id,
                        text:  item.name
                    }));
                    this.whAreaId = this.range[0].value
                } else {
                    uni.showToast({
                        title: msg,
                        icon: "none",
                        position: 'top'
                    })
                }
            },
            showBackData(data){
                let status ;
                data.map(item => {
                    this.list.push(item)
                })
                let oldLength = this.list.length
                this.list = this.list.filter((item, index, self) =>
                    self.findIndex(i => (
                        i.id === item.id // 根据id去重
                    )) === index && item.isptResult === self[0].isptResult
                );
                let newLength = this.list.length
                if(oldLength > newLength){
                    this.showMsg("新明细被过滤,请检查状态")
                }
            },
            showMsg(msg){
                setTimeout(function() {
                 uni.showToast({
                     icon: "none",
                     position: 'top',
                     title: msg,
                     duration:2000,
                 })
                }, 200);
            },
            scrollTo() {
                const ref = this.$refs[`${this.barcode}ref`][0];
                uni.pageScrollTo({
                    scrollTop: ref.$el.offsetTop,
                    duration: 300
                })
            },
            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
            },
            confirm() {
                if(this.container === '' || this.container === null){
                    uni.showToast({
                        title: "容器码为空",
                        icon: "none",
                        position: 'top'
                    })
                    return ;
                }
                if(this.list.length ===0 || this.list === null){
                    uni.showToast({
                        title: "未添加明细",
                        icon: "none",
                        position: 'top'
                    })
                    return ;
                }
                // 显示AGV确认弹窗
                this.showAgvInputModal = true;
            },
            confirm2() {
                if(this.container === '' || this.container === null){
                    uni.showToast({
                        title: "容器码为空",
                        icon: "none",
                        position: 'top'
                    })
                    return ;
                }
                if(this.list.length ===0 || this.list === null){
                    uni.showToast({
                        title: "未添加明细",
                        icon: "none",
                        position: 'top'
                    })
                    return ;
                }
                this.submitConfirm('');
            },
            // 关闭AGV确认弹窗
            closeAgvModal() {
                this.showAgvModal = false;
            },
            // 选择不需要AGV
            handleAgvNo() {
                this.showAgvModal = false;
                this.submitConfirm('');
            },
            // 选择需要AGV
            handleAgvYes() {
                this.showAgvModal = false;
                this.agvStationInput = '';
                this.agvStationName = '';
                this.showAgvInputModal = true;
            },
            // 关闭AGV站点输入弹窗
            closeAgvInputModal() {
                this.showAgvInputModal = false;
                this.agvStationInput = '';
                this.agvStationName = '';
            },
            // 确认AGV站点
            confirmAgvStation() {
                if (this.agvStationInput.trim() === '') {
                    uni.showToast({
                        title: "AGV站点不能为空",
                        icon: "none",
                        position: 'top'
                    });
                    return;
                }
                if (this.whAreaId === '') {
                    uni.showToast({
                        title: "目标库区不能为空",
                        icon: "none",
                        position: 'top'
                    });
                    return;
                }
                this.showAgvInputModal = false;
                this.submitConfirm(this.agvStationName);
            },
        // 提交组托请求
    async submitConfirm(agvStation) {
        this.repeatClick = true
        try {
            const newArr = this.list.map(item => {
                return {
                    ...item,
                    anfme: item.anfme === null ? 0 : +item.anfme,
                };
            });
            const requestData = {
                items: newArr,
                barcode: this.container,
            };
            // 如果有AGV站点,添加到请求参数中
            if (agvStation) {
                requestData.staNo = agvStation;
                requestData.agvSign = 1;
                requestData.area = this.whAreaId;
            }else{
                requestData.agvSign = 0;
            }
            const {
                code,
                data,
                msg
            } = await request('/waitPakin/merge', requestData)
            if (code === 200) {
        selectedText() {
            const found = this.range.find(
                (item) => item.value === this.whAreaId
            )
            return found ? found.text : '请选择库区'
        }
    },
    mounted() {
        // this.getRece()
        // 获取按钮权限
        this.buttonPermissions = uni.getStorageSync('buttonPermissions') || []
        console.log('当前页面按钮权限:', this.buttonPermissions)
    },
    methods: {
        async checkAgvStation() {
            const that = this
            if (this.agvStationInput === '' || this.agvStationInput === null) {
                uni.showToast({
                    title: '组盘成功'
                    title: '容器码为空',
                    icon: 'none',
                    position: 'top'
                })
                this.list = []
                this.barcode = ''
                this.container = ''
                this.isconfirm = false
                return
            }
            const { code, data, msg } = await request('/check/agvStation', {
                transferStationNo: this.agvStationInput
            })
            if (code === 200) {
                this.agvStationName = data.stationName
            } else {
                uni.showToast({
                    title: msg,
                    icon: "none",
                    icon: 'none',
                    position: 'top'
                })
                setTimeout(function () {
                    that.agvStationName = ''
                    that.agvStationInput = ''
                }, 200)
            }
        },
        pickerChange(e) {
            const index = e.detail.value
            this.whAreaId = this.range[index].value
            uni.setStorageSync('whAreaId', this.whAreaId)
        },
        // 检查按钮权限
        hasButtonPermission(route) {
            return this.buttonPermissions.includes(route)
        },
        async search() {
            const find = this.list.find((el) => el.trackCode === this.barcode)
            find ? this.scrollTo() : this.getDet()
        },
        getDet() {
            let that = this
            uni.navigateTo({
                url: '../listing/itemSelect',
                success: function (res) {
                    // 通过eventChannel向被打开页面传送数据   向另外一个页面传递值的
                    res.eventChannel.emit('data', {
                        matnrCode: that.matnrCode,
                        asnCode: that.asnCode
                    })
                },
                events: {
                    // 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据  另外一个页面传过来的
                    backData: function (data) {
                        that.showBackData(data.data)
                    }
                }
            })
        },
        async getList() {
            if (this.container === '' || this.container === null) {
                uni.showToast({
                    title: '容器码为空',
                    icon: 'none',
                    position: 'top'
                })
                return
            }
            const { code, data, msg } = await request(
                '/asnOrderItem/container',
                {
                    barcode: this.container
                }
            )
            if (code === 200) {
                this.range = data.map((item) => ({
                    value: item.id,
                    text: item.name
                }))
                this.whAreaId = this.range[0].value
            } else {
                uni.showToast({
                    title: msg,
                    icon: 'none',
                    position: 'top'
                })
            }
        } finally {
            // 无论请求成功还是失败,都释放按钮锁定
            this.repeatClick = false
        }
    },
        async getRece() {
            const {
                code,
                data,
                msg
            } = await request('/areas/user/all', {}, 'get')
            if (code === 200) {
                this.range = data.map(item => ({
                    value: item.id,
                    text:  item.name
                }));
        },
        showBackData(data) {
            let status
            data.map((item) => {
                this.list.push(item)
            })
            let oldLength = this.list.length
            this.list = this.list.filter(
                (item, index, self) =>
                    self.findIndex(
                        (i) =>
                            i.id === item.id // 根据id去重
                    ) === index && item.isptResult === self[0].isptResult
            )
            let newLength = this.list.length
            if (oldLength > newLength) {
                this.showMsg('新明细被过滤,请检查状态')
            }
        },
        showMsg(msg) {
            setTimeout(function () {
                uni.showToast({
                    icon: 'none',
                    position: 'top',
                    title: msg,
                    duration: 2000
                })
            }, 200)
        },
        scrollTo() {
            const ref = this.$refs[`${this.barcode}ref`][0]
            uni.pageScrollTo({
                scrollTop: ref.$el.offsetTop,
                duration: 300
            })
        },
        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
        },
        confirm() {
            if (this.container === '' || this.container === null) {
                uni.showToast({
                    title: '容器码为空',
                    icon: 'none',
                    position: 'top'
                })
                return
            }
            if (this.list.length === 0 || this.list === null) {
                uni.showToast({
                    title: '未添加明细',
                    icon: 'none',
                    position: 'top'
                })
                return
            }
            // 显示AGV确认弹窗
            this.showAgvInputModal = true
        },
        confirm2() {
            if (this.container === '' || this.container === null) {
                uni.showToast({
                    title: '容器码为空',
                    icon: 'none',
                    position: 'top'
                })
                return
            }
            if (this.list.length === 0 || this.list === null) {
                uni.showToast({
                    title: '未添加明细',
                    icon: 'none',
                    position: 'top'
                })
                return
            }
            this.submitConfirm('')
        },
        // 关闭AGV确认弹窗
        closeAgvModal() {
            this.showAgvModal = false
        },
        // 选择不需要AGV
        handleAgvNo() {
            this.showAgvModal = false
            this.submitConfirm('')
        },
        // 选择需要AGV
        handleAgvYes() {
            this.showAgvModal = false
            this.agvStationInput = ''
            this.agvStationName = ''
            this.showAgvInputModal = true
        },
        // 关闭AGV站点输入弹窗
        closeAgvInputModal() {
            this.showAgvInputModal = false
            this.agvStationInput = ''
            this.agvStationName = ''
        },
        // 确认AGV站点
        confirmAgvStation() {
            if (this.agvStationInput.trim() === '') {
                uni.showToast({
                    title: 'AGV站点不能为空',
                    icon: 'none',
                    position: 'top'
                })
                return
            }
            if (this.whAreaId === '') {
                uni.showToast({
                    title: '目标库区不能为空',
                    icon: 'none',
                    position: 'top'
                })
                return
            }
            this.showAgvInputModal = false
            this.submitConfirm(this.agvStationName)
        },
        // 提交组托请求
        async submitConfirm(agvStation) {
            this.repeatClick = true
            try {
                const newArr = this.list.map((item) => {
                    return {
                        ...item,
                        anfme: item.anfme === null ? 0 : +item.anfme
                    }
                })
                const requestData = {
                    items: newArr,
                    barcode: this.container
                }
                // 如果有AGV站点,添加到请求参数中
                if (agvStation) {
                    requestData.staNo = agvStation
                    requestData.agvSign = 1
                    requestData.area = this.whAreaId
                } else {
                    requestData.agvSign = 0
                }
                const { code, data, msg } = await request(
                    '/waitPakin/merge',
                    requestData
                )
                if (code === 200) {
                    uni.showToast({
                        title: '组盘成功'
                    })
                    this.list = []
                    this.barcode = ''
                    this.container = ''
                    this.isconfirm = false
                } else {
                    uni.showToast({
                        title: msg,
                        icon: 'none',
                        position: 'top'
                    })
                }
            } finally {
                // 无论请求成功还是失败,都释放按钮锁定
                this.repeatClick = false
            }
        },
        async getRece() {
            const { code, data, msg } = await request(
                '/areas/user/all',
                {},
                'get'
            )
            if (code === 200) {
                this.range = data.map((item) => ({
                    value: item.id,
                    text: 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;
    }
.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;
    }
.text-blue {
    color: #0081ff !important;
}
    .act {
        border: 1px solid #e54d42;
    }
.act {
    border: 1px solid #e54d42;
}
    .item {
        position: relative;
        display: flex;
        min-height: 80upx;
        align-items: center;
    }
    /* 弹窗遮罩层 */
    .modal-mask {
        position: fixed;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        background-color: rgba(0, 0, 0, 0.5);
        display: flex;
        justify-content: center;
        align-items: center;
        z-index: 999;
    }
    /* 弹窗容器 */
    .modal-container {
        width: 600rpx;
        background-color: #ffffff;
        border-radius: 24rpx;
        overflow: hidden;
        box-shadow: 0 8rpx 40rpx rgba(0, 0, 0, 0.15);
    }
    /* 弹窗头部 */
    .modal-header {
        padding: 40rpx 30rpx 20rpx;
        display: flex;
        flex-direction: column;
        align-items: center;
        background: linear-gradient(135deg, #f0f7ff 0%, #e8f4ff 100%);
    }
    .modal-title {
        font-size: 34rpx;
        font-weight: bold;
        color: #333;
        /* margin-top: 16rpx; */
    }
    /* 弹窗内容 */
    .modal-body {
        padding: 30rpx;
    }
    .form-item {
        margin-bottom: 24rpx;
    }
    .form-item:last-child {
        margin-bottom: 0;
    }
    .form-label {
        display: block;
        font-size: 28rpx;
        color: #333;
        font-weight: 500;
        margin-bottom: 12rpx;
        padding-left: 4rpx;
    }
    .modal-message {
        font-size: 30rpx;
        color: #666;
        text-align: center;
        display: block;
    }
    /* 输入框容器 */
    .input-wrapper {
        background-color: #f5f7fa;
        border-radius: 12rpx;
        padding: 10rpx;
        border: 2rpx solid #e4e7ed;
        transition: border-color 0.2s;
    }
    .input-wrapper:focus-within {
        border-color: #0081ff;
    }
    .picker-wrapper {
        display: flex;
        align-items: center;
    }
    .agv-input {
        width: 100%;
        height: 70rpx;
        font-size: 30rpx;
        color: #333;
        background-color: transparent;
    }
    .picker{
        width: 100%;
    }
    .picker-view {
        width: 100%;
        height: 70rpx;
        line-height: 70rpx;
        font-size: 30rpx;
        color: #333;
        display: flex;
        justify-content:space-between;
        align-items: center;
    }
    .picker-arrow {
        color: #999;
        font-size: 28rpx;
    }
    /* 弹窗底部按钮 */
    .modal-footer {
        display: flex;
        border-top: 1rpx solid #eee;
    }
    .modal-btn {
        flex: 1;
        height: 100rpx;
        line-height: 100rpx;
        font-size: 32rpx;
        border: none;
        border-radius: 0;
        background-color: #fff;
    }
    .modal-btn::after {
        border: none;
    }
    .modal-btn-cancel {
        color: #999;
        border-right: 1rpx solid #eee;
    }
    .modal-btn-confirm {
        color: #fff;
        background: linear-gradient(135deg, #0081ff 0%, #1890ff 100%);
        font-weight: bold;
    }
    .modal-btn-confirm:active {
        background: linear-gradient(135deg, #0070dd 0%, #1480e8 100%);
    }
    .modal-btn-cancel:active {
        background-color: #f5f5f5;
    }
</style>
.item {
    position: relative;
    display: flex;
    min-height: 80upx;
    align-items: center;
}
/* 弹窗遮罩层 */
.modal-mask {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background-color: rgba(0, 0, 0, 0.5);
    display: flex;
    justify-content: center;
    align-items: center;
    z-index: 999;
}
/* 弹窗容器 */
.modal-container {
    width: 600rpx;
    background-color: #ffffff;
    border-radius: 24rpx;
    overflow: hidden;
    box-shadow: 0 8rpx 40rpx rgba(0, 0, 0, 0.15);
}
/* 弹窗头部 */
.modal-header {
    padding: 40rpx 30rpx 20rpx;
    display: flex;
    flex-direction: column;
    align-items: center;
    background: linear-gradient(135deg, #f0f7ff 0%, #e8f4ff 100%);
}
.modal-title {
    font-size: 34rpx;
    font-weight: bold;
    color: #333;
    /* margin-top: 16rpx; */
}
/* 弹窗内容 */
.modal-body {
    padding: 30rpx;
}
.form-item {
    margin-bottom: 24rpx;
}
.form-item:last-child {
    margin-bottom: 0;
}
.form-label {
    display: block;
    font-size: 28rpx;
    color: #333;
    font-weight: 500;
    margin-bottom: 12rpx;
    padding-left: 4rpx;
}
.modal-message {
    font-size: 30rpx;
    color: #666;
    text-align: center;
    display: block;
}
/* 输入框容器 */
.input-wrapper {
    background-color: #f5f7fa;
    border-radius: 12rpx;
    padding: 10rpx;
    border: 2rpx solid #e4e7ed;
    transition: border-color 0.2s;
}
.input-wrapper:focus-within {
    border-color: #0081ff;
}
.picker-wrapper {
    display: flex;
    align-items: center;
}
.agv-input {
    width: 100%;
    height: 70rpx;
    font-size: 30rpx;
    color: #333;
    background-color: transparent;
}
.picker {
    width: 100%;
}
.picker-view {
    width: 100%;
    height: 70rpx;
    line-height: 70rpx;
    font-size: 30rpx;
    color: #333;
    display: flex;
    justify-content: space-between;
    align-items: center;
}
.picker-arrow {
    color: #999;
    font-size: 28rpx;
}
/* 弹窗底部按钮 */
.modal-footer {
    display: flex;
    border-top: 1rpx solid #eee;
}
.modal-btn {
    flex: 1;
    height: 100rpx;
    line-height: 100rpx;
    font-size: 32rpx;
    border: none;
    border-radius: 0;
    background-color: #fff;
}
.modal-btn::after {
    border: none;
}
.modal-btn-cancel {
    color: #999;
    border-right: 1rpx solid #eee;
}
.modal-btn-confirm {
    color: #fff;
    background: linear-gradient(135deg, #0081ff 0%, #1890ff 100%);
    font-weight: bold;
}
.modal-btn-confirm:active {
    background: linear-gradient(135deg, #0070dd 0%, #1480e8 100%);
}
.modal-btn-cancel:active {
    background-color: #f5f5f5;
}
</style>
pages/outbound/orderOut/orderList.vue
@@ -103,6 +103,7 @@
            if (eventChannel) {
                eventChannel.on('orderTypeId', function(data) {
                    that.orderTypeId = data.orderTypeId
                    console.log(data)
                })
            }
        },
pages/outbound/orderOut/order_out_type.vue
@@ -81,7 +81,8 @@
                        name: '',
                        color: this.colorList[index],
                        cuIcon: 'round',
                        url: `/outbound/orderOut/orderList`
                        url: `/outbound/orderOut/orderList`,
                        id: item.id
                    })
                })                
            } else {
@@ -104,6 +105,7 @@
            }
        },
        toPage(item) {
            console.log(item)
            uni.navigateTo({
                url: `/pages${item.url}`,
                success(res) {