#
zhou zhou
14 小时以前 35253ae67188c21817fec10891fac45141e72fd8
#
4个文件已修改
498 ■■■■■ 已修改文件
pages/listing/itemSelect.vue 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/listing/matnrPalletising.vue 462 ●●●●● 补丁 | 查看 | 原始文档 | 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,22 +1,35 @@
<template>
    <view class="has-foot">
        <view>
        <form>
            <view class="cu-form-group margin-top">
                <view class="title">订单号</view>
                <input placeholder="请输入订单号" v-model="asnCode"></input>
                    <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></input>
                    <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"></input>
                <text class='cuIcon-search text-blue' @click="search"></text>
                    <input
                        placeholder="请扫描物料编码"
                        v-model="matnrCode"
                    />
                    <text
                        class="cuIcon-search text-blue"
                        @click="search"
                    ></text>
            </view>
        </form>
@@ -24,13 +37,21 @@
            <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="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">
@@ -41,13 +62,20 @@
                                {{`${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-black">物料名称:</text>
                            <text class="text-grey ">{{item.maktx}}</text>
                        </view>
                    </view>
@@ -61,32 +89,34 @@
                    </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 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 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,18 +125,32 @@
                    </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="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
                                    style="width: 70%"
                                    :min="0"
                                    :max="item.ableQty"
                                    :decimal="2"
                                    :step="0.01"
                                    v-model="item.receiptQty"
                                    ></uni-number-box>
                            </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,15 +298,8 @@
</template>
<script>
    import {
        request
    } from '../../common/request.js'
    import {
        mapState,
        mapMutations,
        mapActions,
        mapGetters
    } from 'vuex';
import { request } from '../../common/request.js'
import { mapState, mapMutations, mapActions, mapGetters } from 'vuex'
    export default {
        data() {
            return {
@@ -209,35 +327,33 @@
                return this.list.reduce((acc, row) => +row.receiptQty + acc, 0) || 0
            },
            rangeText() {
                return this.range.map(item => item.text)
            return this.range.map((item) => item.text)
            },
            selectedText() {
                const found = this.range.find(item => item.value === this.whAreaId)
            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);
        this.buttonPermissions = uni.getStorageSync('buttonPermissions') || []
        console.log('当前页面按钮权限:', this.buttonPermissions)
        },
        methods: {
            async checkAgvStation(){
                const that = this;
            const that = this
                if(this.agvStationInput === '' || this.agvStationInput === null){
                    uni.showToast({
                        title: "容器码为空",
                        icon: "none",
                    title: '容器码为空',
                    icon: 'none',
                        position: 'top'
                    })
                    return ;
                return
                }
                const {
                    code,
                    data,
                    msg
                } = await request('/check/agvStation', {
            const { code, data, msg } = await request('/check/agvStation', {
                    transferStationNo: this.agvStationInput
                })
                if (code === 200) {
@@ -245,13 +361,13 @@
                } else {
                    uni.showToast({
                        title: msg,
                        icon: "none",
                    icon: 'none',
                        position: 'top'
                    })
                    setTimeout(function() {
                        that.agvStationName = ''
                        that.agvStationInput = ''
                    }, 200);
                }, 200)
                }
            },
            pickerChange(e) {
@@ -261,17 +377,16 @@
            },
            // 检查按钮权限
            hasButtonPermission(route) {
                return this.buttonPermissions.includes(route);
            return this.buttonPermissions.includes(route)
            },
            async search() {
                const find = this.list.find(el => el.trackCode === this.barcode);
                find ? this.scrollTo() : this.getDet();
            const find = this.list.find((el) => el.trackCode === this.barcode)
            find ? this.scrollTo() : this.getDet()
            },
            getDet() {
                let that = this;
            let that = this
                uni.navigateTo({
                    url: "../listing/itemSelect",
                url: '../listing/itemSelect',
                    success: function(res) {
                        // 通过eventChannel向被打开页面传送数据   向另外一个页面传递值的
                        res.eventChannel.emit('data', {
@@ -283,83 +398,79 @@
                        // 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据  另外一个页面传过来的
                        backData: function(data) {                                    
                            that.showBackData(data.data)
                        },
                    },
                });
                    }
                }
            })
            },
            async getList() {
                if(this.container === '' || this.container === null){
                    uni.showToast({
                        title: "容器码为空",
                        icon: "none",
                    title: '容器码为空',
                    icon: 'none',
                        position: 'top'
                    })
                    return ;
                return
                }
                const {
                    code,
                    data,
                    msg
                } = await request('/asnOrderItem/container', {
            const { code, data, msg } = await request(
                '/asnOrderItem/container',
                {
                    barcode: this.container
                })
                }
            )
                if (code === 200) {
                    this.range = data.map(item => ({
                this.range = data.map((item) => ({
                        value: item.id,
                        text:  item.name
                    }));
                }))
                    
                    this.whAreaId = this.range[0].value                    
                } else {
                    uni.showToast({
                        title: msg,
                        icon: "none",
                    icon: 'none',
                        position: 'top'
                    })
                }
            },
            showBackData(data){                
                let status ;
                data.map(item => {
            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 => (
            this.list = this.list.filter(
                (item, index, self) =>
                    self.findIndex(
                        (i) =>
                        i.id === item.id // 根据id去重
                    )) === index && item.isptResult === self[0].isptResult
                );
                    ) === index && item.isptResult === self[0].isptResult
            )
                let newLength = this.list.length
                
                if(oldLength > newLength){    
                    this.showMsg("新明细被过滤,请检查状态")
                this.showMsg('新明细被过滤,请检查状态')
                }
            },
            showMsg(msg){                
                setTimeout(function() {
                 uni.showToast({
                     icon: "none",
                    icon: 'none',
                     position: 'top',
                     title: msg,
                     duration:2000,
                    duration: 2000
                 })
                }, 200);
            }, 200)
            },
            scrollTo() {
                const ref = this.$refs[`${this.barcode}ref`][0];
            const ref = this.$refs[`${this.barcode}ref`][0]
                uni.pageScrollTo({
                    scrollTop: ref.$el.offsetTop,
                    duration: 300
                })
            },
            remove(index) {
                this.list.splice(index, 1);
            this.list.splice(index, 1)
            },
            clear() {
                this.list = []
@@ -370,7 +481,7 @@
                    this.isconfirm = true
                } else {
                    uni.showToast({
                        icon: "none",
                    icon: 'none',
                        title: '未选物料标签'
                    })
                }
@@ -381,117 +492,114 @@
            confirm() {
                if(this.container === '' || this.container === null){
                    uni.showToast({
                        title: "容器码为空",
                        icon: "none",
                    title: '容器码为空',
                    icon: 'none',
                        position: 'top'
                    })
                    return ;
                return
                }
                if(this.list.length ===0 || this.list === null){
                    uni.showToast({
                        title: "未添加明细",
                        icon: "none",
                    title: '未添加明细',
                    icon: 'none',
                        position: 'top'
                    })
                    return ;
                return
                }
                // 显示AGV确认弹窗
                this.showAgvInputModal = true;
            this.showAgvInputModal = true
            },
            confirm2() {
                if(this.container === '' || this.container === null){
                    uni.showToast({
                        title: "容器码为空",
                        icon: "none",
                    title: '容器码为空',
                    icon: 'none',
                        position: 'top'
                    })
                    return ;
                return
                }
                if(this.list.length ===0 || this.list === null){
                    uni.showToast({
                        title: "未添加明细",
                        icon: "none",
                    title: '未添加明细',
                    icon: 'none',
                        position: 'top'
                    })
                    return ;
                return
                }
                this.submitConfirm('');
            this.submitConfirm('')
            },            
            // 关闭AGV确认弹窗
            closeAgvModal() {
                this.showAgvModal = false;
            this.showAgvModal = false
            },
            // 选择不需要AGV
            handleAgvNo() {
                this.showAgvModal = false;
                this.submitConfirm('');
            this.showAgvModal = false
            this.submitConfirm('')
            },
            // 选择需要AGV
            handleAgvYes() {
                this.showAgvModal = false;
                this.agvStationInput = '';
                this.agvStationName = '';
                this.showAgvInputModal = true;
            this.showAgvModal = false
            this.agvStationInput = ''
            this.agvStationName = ''
            this.showAgvInputModal = true
            },
            // 关闭AGV站点输入弹窗
            closeAgvInputModal() {
                this.showAgvInputModal = false;
                this.agvStationInput = '';
                this.agvStationName = '';
            this.showAgvInputModal = false
            this.agvStationInput = ''
            this.agvStationName = ''
            },
            // 确认AGV站点
            confirmAgvStation() {
                if (this.agvStationInput.trim() === '') {
                    uni.showToast({
                        title: "AGV站点不能为空",
                        icon: "none",
                    title: 'AGV站点不能为空',
                    icon: 'none',
                        position: 'top'
                    });
                    return;
                })
                return
                }
                if (this.whAreaId === '') {
                    uni.showToast({
                        title: "目标库区不能为空",
                        icon: "none",
                    title: '目标库区不能为空',
                    icon: 'none',
                        position: 'top'
                    });
                    return;
                })
                return
                }
                this.showAgvInputModal = false;
                this.submitConfirm(this.agvStationName);
            this.showAgvInputModal = false
            this.submitConfirm(this.agvStationName)
            },
        // 提交组托请求
    async submitConfirm(agvStation) {
        this.repeatClick = true
        try {
            const newArr = this.list.map(item => {
                const newArr = this.list.map((item) => {
                return {
                    ...item,
                    anfme: item.anfme === null ? 0 : +item.anfme,
                };
            });
                        anfme: item.anfme === null ? 0 : +item.anfme
                    }
                })
            const requestData = {
                items: newArr,
                barcode: this.container,
            };
                    barcode: this.container
                }
            
            // 如果有AGV站点,添加到请求参数中
            if (agvStation) {
                requestData.staNo = agvStation;
                requestData.agvSign = 1;
                requestData.area = this.whAreaId;
                    requestData.staNo = agvStation
                    requestData.agvSign = 1
                    requestData.area = this.whAreaId
            }else{
                requestData.agvSign = 0;
                    requestData.agvSign = 0
            }
            const {
                code,
                data,
                msg
            } = await request('/waitPakin/merge', requestData)
                const { code, data, msg } = await request(
                    '/waitPakin/merge',
                    requestData
                )
            if (code === 200) {
                uni.showToast({
                    title: '组盘成功'
@@ -503,7 +611,7 @@
            } else {
                uni.showToast({
                    title: msg,
                    icon: "none",
                        icon: 'none',
                    position: 'top'
                })
            }
@@ -513,18 +621,18 @@
        }
    },
        async getRece() {
            const {
                code,
                data,
                msg
            } = await request('/areas/user/all', {}, 'get')
            const { code, data, msg } = await request(
                '/areas/user/all',
                {},
                'get'
            )
            if (code === 200) {
                this.range = data.map(item => ({
                this.range = data.map((item) => ({
                    value: item.id,
                    text:  item.name
                }));
                }))
            }
        },
        }
        }
    }
</script>
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) {