chenhaozhe
2026-02-05 72b6915d2825f9a11ae3c0bd5d2a3076052828bf
Merge branch 'Dev' of http://101.37.171.70:10101/r/~jhz/STUWMS into Dev

# Conflicts:
# pages.json
# pages/index/index.vue
2个文件已添加
3个文件已修改
1369 ■■■■■ 已修改文件
pages.json 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/chaixiang/chaixiang_xiaowei.vue 580 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/index/index.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/tiaomachaima/tiaomachaimaCopy_HK.vue 181 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/zhuangxiang/snZhuangxiang_xiaowei.vue 578 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages.json
@@ -1763,7 +1763,21 @@
            {
                "navigationBarTitleText" : "直接调拨单(验证)"
            }
        }
         },
        {
            "path" : "pages/chaixiang/chaixiang_xiaowei",
            "style" :
            {
                "navigationBarTitleText" : "拆箱小卫"
            }
        },
        {
            "path" : "pages/zhuangxiang/snZhuangxiang_xiaowei",
            "style" :
            {
                "navigationBarTitleText" : "装箱(小卫)"
            }
        }
        
pages/chaixiang/chaixiang_xiaowei.vue
New file
@@ -0,0 +1,580 @@
<template>
    <view class="form">
        <view class="form-base-info">
            <view class="form-item">
                <view class="title">中箱码</view>
                <view class="right">
                    <input type="text" :focus="HBarCodePackFocus" v-model="HBarCode_Pack" @confirm="GetMeesageByBarCode_Pack(HBarCode_Pack)" />
                </view>
                <view class="right-icon">
                    <uni-icons class="right-icon" type="scan"
                        style="background-color: #3A78FF;padding: 6rpx;color: #fff;border-radius: 100%;" size="20"
                        @click="toScanCode"></uni-icons>
                </view>
            </view>
        </view>
        <view class="tabs">
            <view :class="tabs == 0 ? 'on':''" @tap="tabs = 0">拆箱信息</view>
            <view :class="tabs == 1 ? 'on':''" @tap="tabs = 1">单据信息</view>
        </view>
        <!-- 拆箱信息 -->
        <view v-if="tabs == 0">
            <zb-table id="list-table" :fit="true" :style="{height: `${listTableHeight}px`}" :columns="columns" :data="listData"
                :show-header="true" :border="true" :row-key="row => row.index" @toggleRowSelection="handleSelect"
                @toggleAllSelection="handleSelectAll" />
        </view>
        <!-- 单据信息 -->
        <view v-if="tabs == 1">
            <view class="bill-info">
                <view class="form-item">
                    <view class="title">单据日期</view>
                    <view class="right">
                        <uni-datetime-picker type="date" v-model="hform.HDate">
                            <input type="text" v-model="hform.HDate" />
                        </uni-datetime-picker>
                    </view>
                </view>
            </view>
            <view class="bill-info">
                <view class="form-item">
                    <view class="title">制单人</view>
                    <view class="right disabled">
                        <input type="text" disabled :value="hform.HMaker" />
                    </view>
                </view>
            </view>
            <!-- <view class="bill-info">
                <view class="form-item">
                    <view class="title">单据号</view>
                    <view class="right disabled">
                        <input type="text" disabled :value="hform.HBillNo" />
                    </view>
                </view>
            </view> -->
            <!-- <view class="bill-info">
                <view class="form-item">
                    <view class="title">单据ID</view>
                    <view class="right disabled">
                        <input type="text" disabled :value="hform.HInterID" />
                    </view>
                </view>
            </view> -->
            <view class="bill-info">
                <view class="form-item">
                    <view class="title">组织</view>
                    <view class="right disabled">
                        <input type="text" disabled :value="hform.HStockOrgName" />
                    </view>
                </view>
            </view>
        </view>
        <view class="bottom-btn" id="bottom-btn">
            <button :class="EnableSubmit?'btn-a':'btn-c'" :disabled="!EnableSubmit" size="mini" @tap="cmdSubmit">拆箱</button>
            <view style="flex: 1;"></view>
            <!-- <button class="btn-d" size="mini" @tap="cmdDelete">删除</button> -->
            <button class="btn-c" size="mini" @tap="cmdExit">退出</button>
        </view>
    </view>
</template>
<script>
    import dayjs from 'dayjs'
    import {
        getUserInfo
    } from "../../utils/auth";
    import {
        CommonUtils
    } from "@/utils/common.js"
    import {
        MpaasScan
    } from "@/utils/mpaasScan.js"
    export default {
        data() {
            return {
                EnableSubmit: true,
                // 计算列表高度
                bottomBtnTop: 0,
                listTableTop: 0,
                // 公共变量
                HBarCodePackFocus: false,
                HBarCodeFocus: false,
                HBarCode_Pack: '', //箱条码
                HBarCode: '', // 包条码
                tabs: 0,
                HBillType: '3783',
                HBillSubType: '1', //子类型(1拆箱、2拆托)
                OperationType: 1, //操作类型(1新增、2从缓存列表中返回)
                HMaterNumber_Pack: "", //托条码对应物料代码
                listOption: [],
                listData: [],
                columns: [
                    {
                        name: 'index',
                        label: '序号',
                        width: 60,
                        hidden: true,
                    },
                    {
                        name: '中箱码',
                        label: '中箱码',
                        width: 100,
                    },
                    {
                        name: '对应的SN码',
                        label: '对应的SN码',
                        width: 100,
                    },
                    {
                        name: '物料代码',
                        label: '物料代码',
                        width: 100,
                    },
                    {
                        name: '物料名称',
                        label: '物料名称',
                        width: 100,
                    },
                ],
                selectedRows: [], // 存储选中的数据
                HModName: "Sc_UnPackUnionBill_Packing_PDA",
                ModRightName: "CE_UnPackUnionBill_Packing", //模块权限参数
                titleData: [], //不需要显示的字段
                OperationType: 1, //从缓存列表中返回数据类型(1新增、2从缓存列表中返回)
                HBarCode_Pack_Temp: "", //从缓存列表中返回箱条码
                // 表单提交值
                hform: {
                    HDate: dayjs(new Date()).format('YYYY-MM-DD'),
                    HMaker: getUserInfo()['Czymc'],
                    HBillNo: '',
                    HInterID: '',
                    HStockOrgName: uni.getStorageSync("Organization"),
                    HStockOrgID: uni.getStorageSync("OrganizationID"),
                },
                // 分页模块元数据
                paginationMeta: {
                }
            }
        },
        methods: {
            async HBarCodeFocusRefresh(){
              this.HBarCode = ''
              this.HBarCodeFocus = false
              await this.$nextTick()
              this.HBarCodeFocus = true
            },
            async HBarCodePackFocusRefresh(){
              this.HBarCode_Pack = ''
              this.HBarCodePackFocus = false
              await this.$nextTick()
              this.HBarCodePackFocus = true
            },
            toScanCode() {
                MpaasScan.scanCode((scanCode) => {
                    this.HBarCode_Pack = scanCode
                    this.GetMeesageByBarCode_Pack(HBarCode_Pack)
                })
            },
            GetMeesageByBarCode_Pack(HBarCode) {
                // 获取包条码对应的数据
                let HBarCode_Pack = this.HBarCode_Pack
                let sOldBarCode = this.HBarCode_Pack
                let HDeleteFlag = sOldBarCode.substring(0, 1)
                let sBarCode = sOldBarCode.slice(1)
                if (!HBarCode_Pack) {
                    return uni.showToast({
                        icon: 'none',
                        title: '箱条码为空,请先扫描箱条码',
                    })
                }
                    let sBarCode_b = this.HBarCode_Pack
                    if (!sBarCode_b) {
                        return uni.showToast({
                            icon: 'none',
                            title: '箱条码不能为空,请扫描箱条码',
                        })
                    }
                    CommonUtils.doRequest2({
                        url: '/CheckBarcodeController/UnpackMiddleBox',
                        data: {
                            "HBarCode_Middle": sBarCode_b,
                            "signal": 1,
                            "HMaker":this.hform.HMaker,
                            "HDate":this.hform.HDate
                            //"HBarCode_Pack": HBarCode_Pack,
                        },
                        resFunction: (res) => {
                            let {
                                data,
                                count,
                                Message
                            } = res.data
                            if (count == 1) {
                                CommonUtils.playSound(1)
                                console.log(data[0])
                                this.listData = []
                                var codeLength=data.length
                                for (let i = 0; i < codeLength; i++) {
                                    this.listData.push(Object.assign(data[i], {
                                        index: i
                                    }))
                                }
                            } else {
                                CommonUtils.playSound(0)
                                this.HBarCodeFocusRefresh()
                                uni.showToast({
                                    icon: 'none',
                                    title: Message
                                })
                            }
                            console.log(sBarCode_b)
                        }
                    })
            },
            handleSelect(selected, array) {
                this.selectedRows = array
            },
            handleSelectAll(selected, array) {
                this.selectedRows = array
            },
            getMaxNo() {
                CommonUtils.doRequest2({
                    url: "/WEBSController/GetMaxBillNoAndID_Json",
                    data: {
                        "HBillType": this.HBillType
                    },
                    resFunction: (d) => {
                        console.log('d: ', d);
                        let {
                            count,
                            data,
                            Message
                        } = d.data
                        if (count == 1) {
                            this.hform.HInterID = data[0].HInterID;
                            this.hform.HBillNo = data[0].HBillNo
                        } else {
                            uni.showModal({
                                title: "温馨提示",
                                showCancel: false,
                                content: Message
                            })
                        }
                    }
                })
            },
            submitPreCheck() {
                if (CommonUtils.isEmpty(this.hform.HInterID)) {
                    uni.showToast({
                        icon: 'none',
                        title: '单据内码获取失败,错误的单据内码!'
                    })
                    return false
                }
                if (CommonUtils.isEmpty(this.hform.HBillNo)) {
                    uni.showToast({
                        icon: 'none',
                        title: '单据号获取失败,错误的单据号!'
                    })
                    return false
                }
                if (this.listData.length < 1) {
                    uni.showToast({
                        icon: 'none',
                        title: '没有扫码信息,请先扫描条码,确认无误后再提交!'
                    })
                    return false
                }
                return true
            },
            cmdDelete() {
                console.log('this.selectedRows: ', this.selectedRows);
                if (this.selectedRows.length != 1) {
                    return uni.showToast({
                        icon: 'none',
                        title: '请选择一行记录,进行删除!'
                    })
                }
                uni.showModal({
                    title: '删除确认',
                    content: '确认要删除选中行所有扫码记录?删除后将不可恢复!',
                    success: () => {
                        if (confirm) {
                            CommonUtils.doRequest2({
                                url: '/WEBSController/set_DelPackUnionBill_Temp_Pack_Json',
                                data: {
                                    HInterID: this.hform.HInterID,
                                    HBillType: this.HBillType,
                                    HBarCode: this.selectedRows[0].HBarCode
                                },
                                resFunction: (res) => {
                                    let {
                                        data,
                                        count,
                                        Message
                                    } = res.data
                                    if (count == 1) {
                                        CommonUtils.playSound(1)
                                        uni.showToast({
                                            icon: 'none',
                                            title: Message
                                        })
                                        this.DisBillEntryList()
                                    } else {
                                        CommonUtils.playSound(0)
                                        uni.showToast({
                                            icon: 'none',
                                            title: Message
                                        })
                                    }
                                }
                            })
                        }
                    }
                })
            },
            cmdSubmit() {
                // let checkRes = this.submitPreCheck()
                // if (!checkRes) {
                //     return
                // }
                this.EnableSubmit = false
                console.log(this.hform.HInterID)
                console.log(this.hform.HBillNo)
                console.log(this.HBarCode_Pack)
                console.log(this.hform.HMaker)
                uni.showModal({
                    title: '温馨提示',
                    content: '是否删除中箱码的组箱记录',
                    confirmText: "确定",
                    cancelText: '取消',
                    success: ({confirm,cancel}) => {
                        if(confirm) {
                            CommonUtils.doRequest2({
                                url: '/CheckBarcodeController/UnpackMiddleBox',
                                data: {
                                    "HBarCode_Middle": this.HBarCode_Pack,
                                    "signal": 2,
                                     "HMaker":this.hform.HMaker,
                                     "HDate":this.hform.HDate
                                },
                                resFunction: (res) => {
                                    let {data, count, Message} = res.data
                                    if(count == 1){
                                        uni.showModal({
                                            title: '温馨提示',
                                            content: Message,
                                            confirmText: "新增",
                                            cancelText: '关闭',
                                            success: ({confirm,cancel}) => {
                                                if(confirm) {
                                                    uni.redirectTo({
                                                        url: "/pages/chaixiang/chaixiang_xiaowei"
                                                    })
                                                }
                                                if(cancel) {
                                                    uni.navigateBack()
                                                }
                                            }
                                        })
                                    }else {
                                        uni.showToast({
                                            icon:'none',
                                            title: Message
                                        })
                                    }
                                }
                            })
                        }
                        if(cancel) {
                            uni.navigateBack()
                        }
                    }
                })
            },
            cmdExit() {
                uni.navigateBack()
            }
        },
        computed: {
            listTableHeight: {
                get() {
                    return this.bottomBtnTop - this.listTableTop - 10
                }
            }
        },
        async onReady() {
            // #ifndef MP-WEIXIN
            let query = uni.createSelectorQuery().in(this)
            query.select("#bottom-btn")
                .boundingClientRect((data) => {
                    if (data) {
                        this.bottomBtnTop = data.top
                    } else {
                        console.log("未找到#bottom-btn节点");
                    }
                })
                .exec();
            query.select("#list-table")
                .boundingClientRect((data) => {
                    if (data) {
                        this.listTableTop = data.top
                    } else {
                        console.log("未找到#list-table节点");
                    }
                })
                .exec();
            // #endif
        },
        onLoad(e) {
            this.OperationType = e.OperationType || 1
            this.HBarCode_Pack_Temp = e.CommonUtils || ""
            // if (this.OperationType == 1) {
            //     this.getMaxNo()
            // } else if (this.OperationType == 2) {
            // }
            this.HBarCodePackFocusRefresh()
        }
    }
</script>
<style lang="scss">
    input {
        width: inherit;
        padding: 8rpx 20rpx;
        font-size: 30rpx;
    }
    .form {
        display: flex;
        flex-direction: column;
        gap: 20rpx;
        .form-base-info {
            display: flex;
            flex-direction: column;
            gap: 10rpx;
            box-sizing: border-box;
            padding: 30rpx;
        }
        .bill-info {
            display: flex;
            flex-direction: column;
            gap: 10rpx;
            box-sizing: border-box;
            padding: 16rpx 30rpx;
        }
        .form-item {
            display: flex;
            flex-direction: row;
            gap: 10rpx;
            .title {
                width: 5rem;
                flex-shrink: 0;
            }
            .right {
                flex: 1;
                border-radius: 22rpx;
                border: 1px solid #acacac;
            }
            .disabled {
                border: 1px solid #e4e4e4;
                background-color: #e4e4e4;
            }
            .right-icon {
                flex-shrink: 0;
                display: flex;
                justify-content: center;
                align-items: center;
            }
        }
    }
    .tabs {
        width: 100%;
        display: flex;
        border-bottom: 1px solid #ddd;
        margin: 20rpx 0;
        view {
            width: 25%;
            font-size: 30rpx;
            color: #555;
            text-align: center;
            padding: 16rpx 0;
        }
        .on {
            color: #3a78ff;
            font-weight: bold;
            border-bottom: 3px solid #3a78ff;
        }
    }
    .bottom-btn {
        width: 100%;
        box-sizing: border-box;
        // height: 120rpx;
        position: fixed;
        bottom: 0;
        left: 0;
        background-color: #fff;
        box-shadow: 0 2rpx 10rpx 2rpx rgba(0, 0, 0, 0.4);
        padding: 30rpx 40rpx 40rpx 40rpx;
        display: flex;
        flex-direction: row;
        gap: 10rpx;
        button {
            border-radius: 50rpx;
            width: 180rpx;
            height: 66rpx;
            line-height: 66rpx;
            font-size: 28rpx;
        }
        .btn-a {
            background-color: #3A78FF;
            color: #fff;
        }
        .btn-b {
            background-color: #41a863;
            color: #fff;
        }
        .btn-c {
            background-color: #acacac;
            color: #fff;
            // position: absolute;
            // right: 120rpx;
        }
        .btn-d {
            background-color: #ff8901;
            color: #fff;
        }
    }
</style>
pages/index/index.vue
@@ -357,8 +357,20 @@
                        "url": "/pages/Kf_MoveStockBill_CusBar/Kf_MoveStockBill_CusBar_APP",
                        "id": 28,
                        "hidden": false
                    },{
                        "img": "../../static/icon/icon21.png",
                        "text": "小卫拆箱",
                        "url": "/pages/chaixiang/chaixiang_xiaowei",
                        "id": 27,
                        "hidden": false
                    },
                    {
                        "img": "../../static/icon/icon21.png",
                        "text": "小卫装箱",
                        "url": "/pages/zhuangxiang/snZhuangxiang_xiaowei",
                        "id": 28,
                        "hidden": false
                    }
                ],
            }
        },
pages/tiaomachaima/tiaomachaimaCopy_HK.vue
@@ -5,7 +5,7 @@
                <view class="left">条码编号:</view>
                <view class="right">
                    <input :focus="HBarCodeFocus" v-model="barCodeInfoMeta.barCodeNo" placeholder="请扫描条码"
                         @confirm="searchbarCodeInfo" />
                        @confirm="searchbarCodeInfo" />
                </view>
                <view>
                    <uni-icons type="scan"
@@ -33,7 +33,7 @@
                    :disabled="cantGenerate">生成</button>
                <button type="default" :class="cantPrint ? 'btn-disabled' : 'btn-c'" @click="PrintHBarCode"
                    :disabled="cantPrint">打印</button>
                    <button type="primary" @click="printerLabel2">测试打印2</button>
                <button type="primary" @click="printerLabel2">测试打印2</button>
            </view>
        </view>
        <view class="divide"></view>
@@ -77,7 +77,7 @@
                    <view class="dWetail">
                        <text>物料编码:</text>{{barCodeInfo['物料代码'] || ''}}
                    </view>
                    <view class="detail">
                        <text>规格型号:</text>{{barCodeInfo['规格型号'] || ''}}
                    </view>
@@ -127,7 +127,7 @@
        </view>
        <view class="over" v-if="barCodeSplitInfo.length == 0">暂无数据</view>
        <view class="over" v-if="barCodeSplitInfo.length != 0">已到底</view>
    </view>
</template>
@@ -135,7 +135,7 @@
    const printer = uni.requireNativePlugin('LcPrinter');
    const modal = uni.requireNativePlugin('modal');
    var globalEvent = uni.requireNativePlugin('globalEvent');
    // 在全局定义一个变量来标识是否已经初始化
    var isPrinterInitialized = false;
@@ -156,16 +156,16 @@
                    splitNum: "",
                    billMaker: getUserInfo().Czymc,
                },
                base64:"",
                barCodeInfo: {//原条码信息
                base64: "",
                barCodeInfo: { //原条码信息
                },
                barCodeSplitInfo: [],//拆码信息
                barCodeSplitInfo: [], //拆码信息
                cantGenerate: true, // 生成按钮初始禁用
                cantPrint: true, // 打印按钮初始禁用
                cantSplit: false, // 拆码按钮初始可用
                HBarCodeFocus: false,
                isPrinting:false,
                isPrinting: false,
                printInfo: "" //打印
            };
        },
@@ -188,15 +188,17 @@
                printer.setConcentration({ //设置打印浓度。font_level 取值范围:1~39。
                    level: 39
                });
            },
            printerLabel() {
                const formatDate = new Date().toISOString().split('T')[0];
                printer.setLineSpacing({
                    spacing: 1.2
                });
                printer.setUnwindPaperLen({ length: 60 });
                printer.setUnwindPaperLen({
                    length: 60
                });
                printer.setFontSize({
                    fontSize: 1
                });
@@ -206,57 +208,57 @@
                    fontSize: 2,
                    isBold: false,
                    isUnderLine: false,
                    content: '供应商名称:'+this.barCodeInfo['供应商']+'\r\n'
                    content: '供应商名称:' + this.barCodeInfo['供应商'] + '\r\n'
                });
                printer.printText2({
                    offset: 1,
                    fontSize:2,
                    fontSize: 2,
                    isBold: false,
                    isUnderLine: false,
                    content: '物料代码:'+this.barCodeInfo['物料代码']+'\r\n'
                    content: '物料代码:' + this.barCodeInfo['物料代码'] + '\r\n'
                });
                printer.printText2({
                    offset: 1,
                    fontSize: 2,
                    isBold: false,
                    isUnderLine: false,
                    content: '物料简称:'+this.barCodeInfo['物料简称']+'\r\n'
                });
                printer.printText2({
                    offset: 1,
                    fontSize:2,
                    isBold: false,
                    isUnderLine: false,
                    content: '数量:'+this.barCodeInfo['剩余数量']+'\r\n'
                    content: '物料简称:' + this.barCodeInfo['物料简称'] + '\r\n'
                });
                printer.printText2({
                    offset: 1,
                    fontSize: 2,
                    isBold: false,
                    isUnderLine: false,
                    content: '工号:'+this.barCodeInfo['工号']+'\r\n'
                    content: '数量:' + this.barCodeInfo['剩余数量'] + '\r\n'
                });
                printer.printText2({
                    offset: 1,
                    fontSize: 2,
                    isBold: false,
                    isUnderLine: false,
                    content: '生产日期:'+this.barCodeInfo['生产日期']+'\r\n'
                    content: '工号:' + this.barCodeInfo['工号'] + '\r\n'
                });
                printer.printText2({
                    offset: 1,
                    fontSize: 2,
                    isBold: false,
                    isUnderLine: false,
                    content: '流水号:'+this.barCodeInfo['流水号']+'\r\n'
                    content: '生产日期:' + this.barCodeInfo['生产日期'] + '\r\n'
                });
                printer.printText2({
                    offset: 1,
                    fontSize: 2,
                    isBold: false,
                    isUnderLine: false,
                    content: '打印日期:'+formatDate+'\r\n'
                    content: '流水号:' + this.barCodeInfo['流水号'] + '\r\n'
                });
                printer.printText2({
                    offset: 1,
                    fontSize: 2,
                    isBold: false,
                    isUnderLine: false,
                    content: '打印日期:' + formatDate + '\r\n'
                });
                printer.printQR2({
                    text: this.barCodeInfo['条码编号'],
@@ -273,57 +275,57 @@
                    fontSize: 2,
                    isBold: false,
                    isUnderLine: false,
                    content: '供应商名称:'+this.barCodeInfo['供应商']+'\r\n'
                    content: '供应商名称:' + this.barCodeInfo['供应商'] + '\r\n'
                });
                printer.printText2({
                    offset: 1,
                    fontSize:2,
                    fontSize: 2,
                    isBold: false,
                    isUnderLine: false,
                    content: '物料代码:'+this.barCodeInfo['物料代码']+'\r\n'
                    content: '物料代码:' + this.barCodeInfo['物料代码'] + '\r\n'
                });
                printer.printText2({
                    offset: 1,
                    fontSize: 2,
                    isBold: false,
                    isUnderLine: false,
                    content: '物料简称:'+this.barCodeInfo['物料简称']+'\r\n'
                });
                printer.printText2({
                    offset: 1,
                    fontSize:2,
                    isBold: false,
                    isUnderLine: false,
                    content: '数量:'+this.barCodeSplitInfo[0]['HSplitNum']+'\r\n'
                    content: '物料简称:' + this.barCodeInfo['物料简称'] + '\r\n'
                });
                printer.printText2({
                    offset: 1,
                    fontSize: 2,
                    isBold: false,
                    isUnderLine: false,
                    content: '工号:'+this.barCodeInfo['工号']+'\r\n'
                    content: '数量:' + this.barCodeSplitInfo[0]['HSplitNum'] + '\r\n'
                });
                printer.printText2({
                    offset: 1,
                    fontSize: 2,
                    isBold: false,
                    isUnderLine: false,
                    content: '生产日期:'+this.barCodeInfo['生产日期']+'\r\n'
                    content: '工号:' + this.barCodeInfo['工号'] + '\r\n'
                });
                printer.printText2({
                    offset: 1,
                    fontSize: 2,
                    isBold: false,
                    isUnderLine: false,
                    content: '流水号:'+this.barCodeInfo['流水号']+'\r\n'
                    content: '生产日期:' + this.barCodeInfo['生产日期'] + '\r\n'
                });
                printer.printText2({
                    offset: 1,
                    fontSize: 2,
                    isBold: false,
                    isUnderLine: false,
                    content: '打印日期:'+formatDate+'\r\n'
                    content: '流水号:' + this.barCodeInfo['流水号'] + '\r\n'
                });
                printer.printText2({
                    offset: 1,
                    fontSize: 2,
                    isBold: false,
                    isUnderLine: false,
                    content: '打印日期:' + formatDate + '\r\n'
                });
                printer.printQR2({
                    text: this.barCodeSplitInfo[0]['HBarCode'],
@@ -337,23 +339,30 @@
            },
            printerLabel2() {
                console.log('测试打印');
                const formatDate =new Date().toISOString().split('T')[0];
                const formatDate = new Date().toISOString().split('T')[0];
                console.log(formatDate)
                CommonUtils.showTips({
                    message:'母标签\r\n'+'供应商名称:'+this.barCodeInfo['供应商']+'\r\n'+'物料代码:'+this.barCodeInfo['物料代码']+'\r\n'+'物料简称:'+this.barCodeInfo['物料简称']+'\r\n'
                    +'数量:'+this.barCodeInfo['剩余数量']+'\r\n'+'工号:'+this.barCodeInfo['工号']+'\r\n'+'生产日期:'+this.barCodeInfo['生产日期']+'\r\n'+'流水号:'+this.barCodeInfo['流水号']+'\r\n'
                    +'打印日期:'+formatDate+'\r\n'+this.barCodeInfo['条码编号']+'\r\n'
                    +'子标签\r\n'+'供应商名称:'+this.barCodeInfo['供应商']+'\r\n'+'物料代码:'+this.barCodeInfo['物料代码']+'\r\n'+'物料简称:'+this.barCodeInfo['物料简称']+'\r\n'
                    +'数量:'+this.barCodeSplitInfo[0]['HSplitNum']+'\r\n'+'工号:'+this.barCodeInfo['工号']+'\r\n'+'生产日期:'+this.barCodeInfo['生产日期']+'\r\n'+'流水号:'+this.barCodeInfo['流水号']+'\r\n'
                    +'打印日期:'+formatDate+'\r\n'+this.barCodeSplitInfo[0]['HBarCode']+'\r\n'
                    ,
                    message: '母标签\r\n' + '供应商名称:' + this.barCodeInfo['供应商'] + '\r\n' + '物料代码:' + this.barCodeInfo[
                            '物料代码'] + '\r\n' + '物料简称:' + this.barCodeInfo['物料简称'] + '\r\n' +
                        '数量:' + this.barCodeInfo['剩余数量'] + '\r\n' + '工号:' + this.barCodeInfo['工号'] + '\r\n' +
                        '生产日期:' + this.barCodeInfo['生产日期'] + '\r\n' + '流水号:' + this.barCodeInfo['流水号'] + '\r\n' +
                        '打印日期:' + formatDate + '\r\n' + this.barCodeInfo['条码编号'] + '\r\n' +
                        '子标签\r\n' + '供应商名称:' + this.barCodeInfo['供应商'] + '\r\n' + '物料代码:' + this.barCodeInfo[
                            '物料代码'] + '\r\n' + '物料简称:' + this.barCodeInfo['物料简称'] + '\r\n' +
                        '数量:' + this.barCodeSplitInfo[0]['HSplitNum'] + '\r\n' + '工号:' + this.barCodeInfo['工号'] +
                        '\r\n' + '生产日期:' + this.barCodeInfo['生产日期'] + '\r\n' + '流水号:' + this.barCodeInfo['流水号'] +
                        '\r\n' +
                        '打印日期:' + formatDate + '\r\n' + this.barCodeSplitInfo[0]['HBarCode'] + '\r\n'
                        ,
                })
                printer.setLineSpacing({
                    spacing: 1.2
                });
                printer.setUnwindPaperLen({ length: 60 });
                printer.setUnwindPaperLen({
                    length: 60
                });
                printer.setFontSize({
                    fontSize: 1
                });
@@ -363,57 +372,57 @@
                    fontSize: 2,
                    isBold: false,
                    isUnderLine: false,
                    content: '供应商名称:'+this.barCodeInfo['供应商']+'\r\n'
                    content: '供应商名称:' + this.barCodeInfo['供应商'] + '\r\n'
                });
                printer.printText2({
                    offset: 1,
                    fontSize:2,
                    fontSize: 2,
                    isBold: false,
                    isUnderLine: false,
                    content: '物料代码:'+this.barCodeInfo['物料代码']+'\r\n'
                    content: '物料代码:' + this.barCodeInfo['物料代码'] + '\r\n'
                });
                printer.printText2({
                    offset: 1,
                    fontSize: 2,
                    isBold: false,
                    isUnderLine: false,
                    content: '物料简称:'+this.barCodeInfo['物料简称']+'\r\n'
                });
                printer.printText2({
                    offset: 1,
                    fontSize:2,
                    isBold: false,
                    isUnderLine: false,
                    content: '数量:'+this.barCodeInfo['剩余数量']+'\r\n'
                    content: '物料简称:' + this.barCodeInfo['物料简称'] + '\r\n'
                });
                printer.printText2({
                    offset: 1,
                    fontSize: 2,
                    isBold: false,
                    isUnderLine: false,
                    content: '工号:'+this.barCodeInfo['工号']+'\r\n'
                    content: '数量:' + this.barCodeInfo['剩余数量'] + '\r\n'
                });
                printer.printText2({
                    offset: 1,
                    fontSize: 2,
                    isBold: false,
                    isUnderLine: false,
                    content: '生产日期:'+this.barCodeInfo['生产日期']+'\r\n'
                    content: '工号:' + this.barCodeInfo['工号'] + '\r\n'
                });
                printer.printText2({
                    offset: 1,
                    fontSize: 2,
                    isBold: false,
                    isUnderLine: false,
                    content: '流水号:'+this.barCodeInfo['流水号']+'\r\n'
                    content: '生产日期:' + this.barCodeInfo['生产日期'] + '\r\n'
                });
                printer.printText2({
                    offset: 1,
                    fontSize: 2,
                    isBold: false,
                    isUnderLine: false,
                    content: '打印日期:'+formatDate+'\r\n'
                    content: '流水号:' + this.barCodeInfo['流水号'] + '\r\n'
                });
                printer.printText2({
                    offset: 1,
                    fontSize: 2,
                    isBold: false,
                    isUnderLine: false,
                    content: '打印日期:' + formatDate + '\r\n'
                });
                printer.printQR2({
                    text: this.barCodeInfo['条码编号'],
@@ -490,17 +499,17 @@
                            count
                        } = res1
                        if (count > 0) {
                            this.barCodeInfo = data[0]
                            this.barCodeSplitInfo = []
                            // 扫描条码后重置按钮状态
                            this.resetButtonState();
                        }else{
                        } else {
                            CommonUtils.showTips({
                                message: "该条码不存在:"+this.barCodeInfoMeta.barCodeNo,
                                message: "该条码不存在:" + this.barCodeInfoMeta.barCodeNo,
                            })
                            this.barCodeInfoMeta.barCodeNo="";
                            this.barCodeInfoMeta.barCodeNo = "";
                        }
                    },
                    (err) => {
@@ -585,7 +594,7 @@
                    },
                    (err) => {
                        CommonUtils.showTips({
                            message: "条码拆码出现错误"+err,
                            message: "条码拆码出现错误" + err,
                        })
                        console.error(err)
                    }
@@ -605,7 +614,7 @@
                    });
                }
                let msg =
                    `${this.barCodeInfoMeta["barCodeNo"]};${this.barCodeInfoMeta["splitNum"]};${JSON.stringify(this.barCodeSplitInfo)};${this.billMaker}`
                    `${this.barCodeInfoMeta["barCodeNo"]};${this.barCodeInfoMeta["splitNum"]};${JSON.stringify(this.barCodeSplitInfo)};${this.barCodeInfoMeta["billMaker"]}`
                this.doRequest(
                    "/Sc_BarCode/SplitBarCode_Save", {
                        msg: msg
@@ -616,7 +625,7 @@
                            this.cantGenerate = true;
                            this.cantPrint = false;
                            this.cantSplit = true;
                            this.barCodeInfoMeta.barCodeNo="";//清空输入框
                            this.barCodeInfoMeta.barCodeNo = ""; //清空输入框
                            uni.showToast({
                                title: '生成成功!'
                            });
@@ -631,9 +640,9 @@
                    (err) => {
                        console.log(err)
                        CommonUtils.showTips({
                            message: "条码生成出现错误"+err,
                            message: "条码生成出现错误" + err,
                        })
                    },
                    "POST"
                )
@@ -653,7 +662,7 @@
                this.isPrinting = true;
                try {
                    this.printerLabel();//打印
                    this.printerLabel(); //打印
                } catch (error) {
                    console.error('打印失败:', error);
                    this.isPrinting = false;
@@ -694,7 +703,7 @@
            // 页面初始化时设置按钮状态
            this.resetButtonState();
            // 添加打印状态监听
            if(!isPrinterInitialized){
            if (!isPrinterInitialized) {
                const self = this;
                globalEvent.addEventListener('onPrintCallback', function(e) {
                    uni.showToast({
@@ -727,14 +736,14 @@
            }
            //初始化打印
            this.initPrinter();
        },
        onReady() {
        },
        onUnload() {
            // 调用同步方法
        }
    }
</script>
pages/zhuangxiang/snZhuangxiang_xiaowei.vue
New file
@@ -0,0 +1,578 @@
<template>
    <view class="form">
        <view class="form-base-info">
            <view class="form-item">
                <view class="title">sn码</view>
                <view class="right">
                    <input type="text" :focus="HBarCodePackFocus" v-model="HBarCode_Pack" @confirm="GetMeesageByBarCode_Pack(HBarCode_Pack)" />
                </view>
                <view class="right-icon">
                    <uni-icons class="right-icon" type="scan"
                        style="background-color: #3A78FF;padding: 6rpx;color: #fff;border-radius: 100%;" size="20"
                        @click="toScanCode"></uni-icons>
                </view>
            </view>
        </view>
        <view class="tabs">
            <view :class="tabs == 0 ? 'on':''" @tap="tabs = 0">装箱信息</view>
            <view :class="tabs == 1 ? 'on':''" @tap="tabs = 1">单据信息</view>
        </view>
        <!-- 拆箱信息 -->
        <view v-if="tabs == 0">
            <zb-table id="list-table" :fit="true" :style="{height: `${listTableHeight}px`}" :columns="columns" :data="listData"
                :show-header="true" :border="true" :row-key="row => row.index" @toggleRowSelection="handleSelect"
                @toggleAllSelection="handleSelectAll" />
        </view>
        <!-- 单据信息 -->
        <view v-if="tabs == 1">
            <view class="bill-info">
                <view class="form-item">
                    <view class="title">单据日期</view>
                    <view class="right">
                        <uni-datetime-picker type="date" v-model="hform.HDate">
                            <input type="text" v-model="hform.HDate" />
                        </uni-datetime-picker>
                    </view>
                </view>
            </view>
            <view class="bill-info">
                <view class="form-item">
                    <view class="title">制单人</view>
                    <view class="right disabled">
                        <input type="text" disabled :value="hform.HMaker" />
                    </view>
                </view>
            </view>
            <!-- <view class="bill-info">
                <view class="form-item">
                    <view class="title">单据号</view>
                    <view class="right disabled">
                        <input type="text" disabled :value="hform.HBillNo" />
                    </view>
                </view>
            </view> -->
            <!-- <view class="bill-info">
                <view class="form-item">
                    <view class="title">单据ID</view>
                    <view class="right disabled">
                        <input type="text" disabled :value="hform.HInterID" />
                    </view>
                </view>
            </view> -->
            <view class="bill-info">
                <view class="form-item">
                    <view class="title">组织</view>
                    <view class="right disabled">
                        <input type="text" disabled :value="hform.HStockOrgName" />
                    </view>
                </view>
            </view>
        </view>
        <view class="bottom-btn" id="bottom-btn">
            <button :class="EnableSubmit?'btn-a':'btn-c'" :disabled="!EnableSubmit" size="mini" @tap="cmdSubmit">拆箱</button>
            <view style="flex: 1;"></view>
            <!-- <button class="btn-d" size="mini" @tap="cmdDelete">删除</button> -->
            <button class="btn-c" size="mini" @tap="cmdExit">退出</button>
        </view>
    </view>
</template>
<script>
    import dayjs from 'dayjs'
    import {
        getUserInfo
    } from "../../utils/auth";
    import {
        CommonUtils
    } from "@/utils/common.js"
    import {
        MpaasScan
    } from "@/utils/mpaasScan.js"
    export default {
        data() {
            return {
                ItemidList:'',
                EnableSubmit: true,
                // 计算列表高度
                bottomBtnTop: 0,
                listTableTop: 0,
                // 公共变量
                HBarCodePackFocus: false,
                HBarCodeFocus: false,
                HBarCode_Pack: '', //箱条码
                HBarCode: '', // 包条码
                tabs: 0,
                HBillType: '3783',
                HBillSubType: '1', //子类型(1拆箱、2拆托)
                OperationType: 1, //操作类型(1新增、2从缓存列表中返回)
                HMaterNumber_Pack: "", //托条码对应物料代码
                listOption: [],
                listData: [],
                columns: [
                    {
                        name: 'index',
                        label: '序号',
                        width: 60,
                        hidden: true,
                    },
                    // {
                    //     name: '中箱码',
                    //     label: '中箱码',
                    //     width: 100,
                    // },
                    {
                        name: 'sn码',
                        label: 'sn码',
                        width: 100,
                    },
                    {
                        name: '物料代码',
                        label: '物料代码',
                        width: 100,
                    },
                    {
                        name: '物料名称',
                        label: '物料名称',
                        width: 100,
                    },
                ],
                selectedRows: [], // 存储选中的数据
                HModName: "Sc_UnPackUnionBill_Packing_PDA",
                ModRightName: "CE_UnPackUnionBill_Packing", //模块权限参数
                titleData: [], //不需要显示的字段
                OperationType: 1, //从缓存列表中返回数据类型(1新增、2从缓存列表中返回)
                HBarCode_Pack_Temp: "", //从缓存列表中返回箱条码
                // 表单提交值
                hform: {
                    HDate: dayjs(new Date()).format('YYYY-MM-DD'),
                    HMaker: getUserInfo()['Czymc'],
                    HBillNo: '',
                    HInterID: '',
                    HStockOrgName: uni.getStorageSync("Organization"),
                    HStockOrgID: uni.getStorageSync("OrganizationID"),
                },
                // 分页模块元数据
                paginationMeta: {
                }
            }
        },
        methods: {
            async HBarCodeFocusRefresh(){
              this.HBarCode = ''
              this.HBarCodeFocus = false
              await this.$nextTick()
              this.HBarCodeFocus = true
            },
            async HBarCodePackFocusRefresh(){
              this.HBarCode_Pack = ''
              this.HBarCodePackFocus = false
              await this.$nextTick()
              this.HBarCodePackFocus = true
            },
            toScanCode() {
                MpaasScan.scanCode((scanCode) => {
                    this.HBarCode_Pack = scanCode
                    this.GetMeesageByBarCode_Pack(HBarCode_Pack)
                })
            },
            GetMeesageByBarCode_Pack(HBarCode) {
                // 获取包条码对应的数据
                let HBarCode_Pack = this.HBarCode_Pack
                let sOldBarCode = this.HBarCode_Pack
                let HDeleteFlag = sOldBarCode.substring(0, 1)
                let sBarCode = sOldBarCode.slice(1)
                if (!HBarCode_Pack) {
                    return uni.showToast({
                        icon: 'none',
                        title: 'sn条码为空,请先扫描sn条码',
                    })
                }
                    let sBarCode_b = this.HBarCode_Pack
                    if (!sBarCode_b) {
                        return uni.showToast({
                            icon: 'none',
                            title: 'sn条码不能为空,请扫描sn条码',
                        })
                    }
                    CommonUtils.doRequest2({
                        url: '/CheckBarcodeController/PackedBoxSn',
                        data: {
                            "HBarCode": sBarCode_b,
                            "HMaker":this.hform.HMaker,
                            "HDate":this.hform.HDate
                            //"HBarCode_Pack": HBarCode_Pack,
                        },
                        resFunction: (res) => {
                            let {
                                data,
                                count,
                                Message
                            } = res.data
                            if (count == 1) {
                                CommonUtils.playSound(1)
                                console.log(data[0])
                                //this.listData = []
                                var codeLength=data.length
                                for (let i = 0; i < codeLength; i++) {
                                    const newItem = data[i]
                                    const isExist = this.listData.some(item =>
                                        item['sn码'] === newItem['sn码']
                                    )
                                    if (!isExist) {
                                            this.listData.push(Object.assign(newItem, {
                                             index: this.listData.length // 使用当前列表长度作为新index
                                       }))
                                  }
                                  this.ItemidList=this.ItemidList+newItem['HItemID']+","
                                  console.log(this.ItemidList)
                                   }
                                    this.HBarCode_Pack = ''
                                    this.HBarCodePackFocusRefresh()
                            } else {
                                CommonUtils.playSound(0)
                                this.HBarCodeFocusRefresh()
                                uni.showToast({
                                    icon: 'none',
                                    title: Message
                                })
                            }
                            console.log(sBarCode_b)
                        }
                    })
            },
            handleSelect(selected, array) {
                this.selectedRows = array
            },
            handleSelectAll(selected, array) {
                this.selectedRows = array
            },
            getMaxNo() {
                CommonUtils.doRequest2({
                    url: "/WEBSController/GetMaxBillNoAndID_Json",
                    data: {
                        "HBillType": this.HBillType
                    },
                    resFunction: (d) => {
                        console.log('d: ', d);
                        let {
                            count,
                            data,
                            Message
                        } = d.data
                        if (count == 1) {
                            this.hform.HInterID = data[0].HInterID;
                            this.hform.HBillNo = data[0].HBillNo
                        } else {
                            uni.showModal({
                                title: "温馨提示",
                                showCancel: false,
                                content: Message
                            })
                        }
                    }
                })
            },
            submitPreCheck() {
                if (CommonUtils.isEmpty(this.hform.HInterID)) {
                    uni.showToast({
                        icon: 'none',
                        title: '单据内码获取失败,错误的单据内码!'
                    })
                    return false
                }
                if (CommonUtils.isEmpty(this.hform.HBillNo)) {
                    uni.showToast({
                        icon: 'none',
                        title: '单据号获取失败,错误的单据号!'
                    })
                    return false
                }
                if (this.listData.length < 1) {
                    uni.showToast({
                        icon: 'none',
                        title: '没有扫码信息,请先扫描条码,确认无误后再提交!'
                    })
                    return false
                }
                return true
            },
            cmdDelete() {
                console.log('this.selectedRows: ', this.selectedRows);
                if (this.selectedRows.length != 1) {
                    return uni.showToast({
                        icon: 'none',
                        title: '请选择一行记录,进行删除!'
                    })
                }
                uni.showModal({
                    title: '删除确认',
                    content: '确认要删除选中行所有扫码记录?删除后将不可恢复!',
                    success: () => {
                        if (confirm) {
                            CommonUtils.doRequest2({
                                url: '/WEBSController/set_DelPackUnionBill_Temp_Pack_Json',
                                data: {
                                    HInterID: this.hform.HInterID,
                                    HBillType: this.HBillType,
                                    HBarCode: this.selectedRows[0].HBarCode
                                },
                                resFunction: (res) => {
                                    let {
                                        data,
                                        count,
                                        Message
                                    } = res.data
                                    if (count == 1) {
                                        CommonUtils.playSound(1)
                                        uni.showToast({
                                            icon: 'none',
                                            title: Message
                                        })
                                        this.DisBillEntryList()
                                    } else {
                                        CommonUtils.playSound(0)
                                        uni.showToast({
                                            icon: 'none',
                                            title: Message
                                        })
                                    }
                                }
                            })
                        }
                    }
                })
            },
            cmdSubmit() {
                // let checkRes = this.submitPreCheck()
                // if (!checkRes) {
                //     return
                // }
                this.EnableSubmit = false
                let HItemIDs=this.ItemidList.slice(0,-1)
                            CommonUtils.doRequest2({
                                url: '/CheckBarcodeController/submitPackedBoxSn',
                                data: {
                                    "HItemIDs": HItemIDs,
                                     "HMaker":this.hform.HMaker,
                                     "HDate":this.hform.HDate
                                },
                                resFunction: (res) => {
                                    let {data, count, Message} = res.data
                                    if(count == 1){
                                        uni.showModal({
                                            title: '生成的条码:',
                                            content: res.data.data[0].HBackRemark,
                                            confirmText: "新增",
                                            cancelText: '关闭',
                                            success: ({confirm,cancel}) => {
                                                if(confirm) {
                                                    uni.redirectTo({
                                                        url: "/pages/zhuangxiang/snZhuangxiang_xiaowei"
                                                    })
                                                }
                                                if(cancel) {
                                                    uni.navigateBack()
                                                }
                                            }
                                        })
                                    }else {
                                        uni.showToast({
                                            icon:'none',
                                            title: Message
                                        })
                                    }
                                }
                            })
            },
            cmdExit() {
                uni.navigateBack()
            }
        },
        computed: {
            listTableHeight: {
                get() {
                    return this.bottomBtnTop - this.listTableTop - 10
                }
            }
        },
        async onReady() {
            // #ifndef MP-WEIXIN
            let query = uni.createSelectorQuery().in(this)
            query.select("#bottom-btn")
                .boundingClientRect((data) => {
                    if (data) {
                        this.bottomBtnTop = data.top
                    } else {
                        console.log("未找到#bottom-btn节点");
                    }
                })
                .exec();
            query.select("#list-table")
                .boundingClientRect((data) => {
                    if (data) {
                        this.listTableTop = data.top
                    } else {
                        console.log("未找到#list-table节点");
                    }
                })
                .exec();
            // #endif
        },
        onLoad(e) {
            this.OperationType = e.OperationType || 1
            this.HBarCode_Pack_Temp = e.CommonUtils || ""
            // if (this.OperationType == 1) {
            //     this.getMaxNo()
            // } else if (this.OperationType == 2) {
            // }
            this.HBarCodePackFocusRefresh()
        }
    }
</script>
<style lang="scss">
    input {
        width: inherit;
        padding: 8rpx 20rpx;
        font-size: 30rpx;
    }
    .form {
        display: flex;
        flex-direction: column;
        gap: 20rpx;
        .form-base-info {
            display: flex;
            flex-direction: column;
            gap: 10rpx;
            box-sizing: border-box;
            padding: 30rpx;
        }
        .bill-info {
            display: flex;
            flex-direction: column;
            gap: 10rpx;
            box-sizing: border-box;
            padding: 16rpx 30rpx;
        }
        .form-item {
            display: flex;
            flex-direction: row;
            gap: 10rpx;
            .title {
                width: 5rem;
                flex-shrink: 0;
            }
            .right {
                flex: 1;
                border-radius: 22rpx;
                border: 1px solid #acacac;
            }
            .disabled {
                border: 1px solid #e4e4e4;
                background-color: #e4e4e4;
            }
            .right-icon {
                flex-shrink: 0;
                display: flex;
                justify-content: center;
                align-items: center;
            }
        }
    }
    .tabs {
        width: 100%;
        display: flex;
        border-bottom: 1px solid #ddd;
        margin: 20rpx 0;
        view {
            width: 25%;
            font-size: 30rpx;
            color: #555;
            text-align: center;
            padding: 16rpx 0;
        }
        .on {
            color: #3a78ff;
            font-weight: bold;
            border-bottom: 3px solid #3a78ff;
        }
    }
    .bottom-btn {
        width: 100%;
        box-sizing: border-box;
        // height: 120rpx;
        position: fixed;
        bottom: 0;
        left: 0;
        background-color: #fff;
        box-shadow: 0 2rpx 10rpx 2rpx rgba(0, 0, 0, 0.4);
        padding: 30rpx 40rpx 40rpx 40rpx;
        display: flex;
        flex-direction: row;
        gap: 10rpx;
        button {
            border-radius: 50rpx;
            width: 180rpx;
            height: 66rpx;
            line-height: 66rpx;
            font-size: 28rpx;
        }
        .btn-a {
            background-color: #3A78FF;
            color: #fff;
        }
        .btn-b {
            background-color: #41a863;
            color: #fff;
        }
        .btn-c {
            background-color: #acacac;
            color: #fff;
            // position: absolute;
            // right: 120rpx;
        }
        .btn-d {
            background-color: #ff8901;
            color: #fff;
        }
    }
</style>