zrg
2025-12-02 5dc72639b4fa560c778660bd3bbbb1e38a4f550a
优化条码拆码2 调整凯贝条码打印模板
1个文件已修改
1097 ■■■■■ 已修改文件
pages/tiaomachaima/tiaomachaima2.vue 1097 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/tiaomachaima/tiaomachaima2.vue
@@ -1,510 +1,657 @@
<template>
    <view class="container">
        <view class="header">
            <view class="item">
                <view class="left">条码编号:</view>
                <view class="right">
                    <input name="HBarCode" v-model="barCodeInfoMeta.barCodeNo" placeholder="请扫描条码"
                        @blur="searchbarCodeInfo" />
                </view>
                <view>
                    <uni-icons type="scan"
                        style="background-color: #3A78FF;padding: 6rpx;color: #fff;border-radius: 100%;font-weight: 500;"
                        size="20" @click="toScanCode"></uni-icons>
                </view>
            </view>
            <view class="item">
                <view class="left">拆码数量:</view>
                <view class="right">
                    <input type="number" name="HSplitNum" v-model="barCodeInfoMeta.splitNum" placeholder="请输入拆码数量" />
                </view>
            </view>
            <view class="item">
                <view class="left">制单人:</view>
                <view class="right">
                    <input type="text" disabled name="HMaker" v-model="barCodeInfoMeta.billMaker"
                        placeholder="请输入制单人" />
                </view>
            </view>
            <view class="operation-zone">
                <button class="btn-c" @click="searchbarCodeInfoMeta">拆码</button>
                <button type="default" :class="cantGenerate?'':'btn-c'" @click="SaveBarCodeCreate"
                    :disabled="cantGenerate = false">生成</button>
                <button type="default" :class="cantPrint?'':'btn-c'" @click="PrintHBarCode"
                    :disabled="cantPrint = false">打印</button>
            </view>
        </view>
        <view class="divide"></view>
        <view class="content">
            <view class="barcode-detail" v-show="CommonUtils.isEmpty(Object.assign(barCodeInfo, {})) === false">
                <view class="title">条码信息</view>
                <uni-card>
                    <view class="detail" style="display: none;">
                        <text>条码ID:</text>{{barCodeInfo['HItemID'] || '0'}}
                    </view>
                    <view class="detail">
                        <text>条码编号:</text>{{barCodeInfo['条码编号'] || ''}}
                    </view>
                    <view class="detail">
                        <text>条码原数量:</text>{{barCodeInfo['数量'] || '0'}}
                    </view>
                    <view class="detail">
                        <text>剩余数量:</text>{{barCodeInfo['剩余数量'] || '0'}}
                    </view>
                    <view class="dWetail">
                        <text>物料编码:</text>{{barCodeInfo['物料代码'] || ''}}
                    </view>
                    <view class="detail">
                        <text>物料名称:</text>{{barCodeInfo['物料名称'] || ''}}
                    </view>
                    <view class="detail">
                        <text>规格型号:</text>{{barCodeInfo['规格型号'] || ''}}
                    </view>
                    <view class="detail">
                        <text>计量单位:</text>{{barCodeInfo['计量单位'] || ''}}
                    </view>
                </uni-card>
            </view>
            <view class="divide"></view>
            <view class="barcode-split" v-show="barCodeSplitInfo.length>0">
                <view class="title">条码拆码</view>
                <view class="barcode-split-list" v-for="(item,index) in barCodeSplitInfo" :key="index">
                    <uni-card @tap="ModityHQty(item)">
                        <view class="detail">
                            <text>条码编号:</text>{{item['HBarCode'] || ''}}
                        </view>
                        <view class="detail split-num">
                            <text>拆分数量:</text>{{item['HSplitNum'] || '0'}}
                        </view>
                        <view class="detail">
                            <text>物料代码:</text>{{item['HNumber'] || ''}}
                        </view>
                        <view class="detail">
                            <text>物料名称:</text>{{item['HName'] || ''}}
                        </view>
                        <view class="detail">
                            <text>规格型号:</text>{{item['HModel'] || ''}}
                        </view>
                        <view class="detail">
                            <text>计量单位:</text>{{barCodeInfo['计量单位'] || ''}}
                        </view>
                    </uni-card>
                </view>
            </view>
        </view>
        <view class="over" v-if="barCodeSplitInfo.length == 0">暂无数据</view>
        <view class="over" v-if="barCodeSplitInfo.length != 0">已到底</view>
        <view>
            <!-- 输入框示例 -->
            <uni-popup ref="inputDialog" type="dialog">
                <uni-popup-dialog ref="inputClose" mode="input" title="请输入拆码数量" :value="dialogVal" placeholder="请输入拆码数量"
                    @confirm="dialogInputConfirm"></uni-popup-dialog>
            </uni-popup>
        </view>
        <labelPrinterComponentVue ref="labelPrinter" :printInfo="printInfo" :printMode="'cpcl'">
        </labelPrinterComponentVue>
    </view>
    <view class="container">
        <view class="header">
            <view class="item">
                <view class="left">条码编号:</view>
                <view class="right">
                    <input :focus="HBarCodeFocus" v-model="barCodeInfoMeta.barCodeNo" placeholder="请扫描条码"
                        @blur="searchbarCodeInfo" @confirm="getCode(barCodeInfoMeta.barCodeNo)" />
                </view>
                <view>
                    <uni-icons type="scan"
                        style="background-color: #3A78FF;padding: 6rpx;color: #fff;border-radius: 100%;font-weight: 500;"
                        size="20" @click="toScanCode"></uni-icons>
                </view>
            </view>
            <view class="item">
                <view class="left">拆码数量:</view>
                <view class="right">
                    <input type="number" name="HSplitNum" v-model="barCodeInfoMeta.splitNum" placeholder="请输入拆码数量" />
                </view>
            </view>
            <view class="item">
                <view class="left">制单人:</view>
                <view class="right">
                    <input type="text" disabled name="HMaker" v-model="barCodeInfoMeta.billMaker"
                        style="background-color: #e4e4e4;" placeholder="请输入制单人" />
                </view>
            </view>
            <view class="operation-zone">
                <button :class="cantSplit ? 'btn-disabled' : 'btn-c'" @click="searchbarCodeInfoMeta"
                    :disabled="cantSplit">拆码</button>
                <button type="default" :class="cantGenerate ? 'btn-disabled' : 'btn-c'" @click="SaveBarCodeCreate"
                    :disabled="cantGenerate">生成</button>
                <button type="default" :class="cantPrint ? 'btn-disabled' : 'btn-c'" @click="PrintHBarCode"
                    :disabled="cantPrint">打印</button>
            </view>
        </view>
        <view class="divide"></view>
        <view class="content">
            <view class="barcode-detail" v-show="CommonUtils.isEmpty(Object.assign(barCodeInfo, {})) === false">
                <view class="title">条码信息</view>
                <uni-card>
                    <view class="detail" style="display: none;">
                        <text>条码ID:</text>{{barCodeInfo['HItemID'] || '0'}}
                    </view>
                    <view class="detail">
                        <text>条码编号:</text>{{barCodeInfo['条码编号'] || ''}}
                    </view>
                    <view class="detail">
                        <text>条码原数量:</text>{{barCodeInfo['数量'] || '0'}}
                    </view>
                    <view class="detail">
                        <text>剩余数量:</text>{{barCodeInfo['剩余数量'] || '0'}}
                    </view>
                    <view class="dWetail">
                        <text>物料编码:</text>{{barCodeInfo['物料代码'] || ''}}
                    </view>
                    <view class="detail">
                        <text>物料名称:</text>{{barCodeInfo['物料名称'] || ''}}
                    </view>
                    <view class="detail">
                        <text>规格型号:</text>{{barCodeInfo['规格型号'] || ''}}
                    </view>
                    <view class="detail">
                        <text>计量单位:</text>{{barCodeInfo['计量单位'] || ''}}
                    </view>
                </uni-card>
            </view>
            <view class="divide"></view>
            <view class="barcode-split" v-show="barCodeSplitInfo.length>0">
                <view class="title">条码拆码</view>
                <view class="barcode-split-list" v-for="(item,index) in barCodeSplitInfo" :key="index">
                    <uni-card @tap="ModityHQty(item)">
                        <view class="detail">
                            <text>条码编号:</text>{{item['HBarCode'] || ''}}
                        </view>
                        <view class="detail split-num">
                            <text>拆分数量:</text>{{item['HSplitNum'] || '0'}}
                        </view>
                        <view class="detail">
                            <text>物料代码:</text>{{item['HNumber'] || ''}}
                        </view>
                        <view class="detail">
                            <text>物料名称:</text>{{item['HName'] || ''}}
                        </view>
                        <view class="detail">
                            <text>规格型号:</text>{{item['HModel'] || ''}}
                        </view>
                        <view class="detail">
                            <text>计量单位:</text>{{barCodeInfo['计量单位'] || ''}}
                        </view>
                    </uni-card>
                </view>
            </view>
        </view>
        <view class="over" v-if="barCodeSplitInfo.length == 0">暂无数据</view>
        <view class="over" v-if="barCodeSplitInfo.length != 0">已到底</view>
        <view>
            <!-- 输入框示例 -->
            <uni-popup ref="inputDialog" type="dialog">
                <uni-popup-dialog ref="inputClose" mode="input" title="请输入拆码数量" :value="dialogVal" placeholder="请输入拆码数量"
                    @confirm="dialogInputConfirm"></uni-popup-dialog>
            </uni-popup>
        </view>
        <labelPrinterComponentVue ref="labelPrinter" :printInfo="printInfo" :printMode="'cpcl'">
        </labelPrinterComponentVue>
    </view>
</template>
<script>
    import labelPrinterComponentVue from '../../components/labelPrinterComponent/labelPrinterComponent.vue';
    import {
        CBar,
        CBox,
        CForm,
        CImage,
        CLine,
        CCodeRotation,
        CCodeType,
        CPage,
        CText,
        CFont,
        CBold,
        CRotation,
        CInverse,
        CMag,
        CQRCode,
        CCorrectLevel,
        CSN,
        CStatus,
        CPCL,
    } from "@psdk/cpcl";
    import {
        getUserInfo
    } from "@/utils/auth.js";
    import {
        CommonUtils
    } from "@/utils/common.js"
    export default {
        data() {
            return {
                CommonUtils,
                userInfo: getUserInfo(),
                serverUrl: uni.getStorageSync('serverUrl') || 'http://47.96.97.237/API',
                barCodeInfoMeta: {
                    barCodeNo: "",
                    splitNum: "",
                    billMaker: getUserInfo().HEmpName,
                    billMakerID: getUserInfo().HEmpID
                },
                barCodeInfo: {
    import labelPrinterComponentVue from '../../components/labelPrinterComponent/labelPrinterComponent.vue';
    import {
        CBar,
        CBox,
        CForm,
        CImage,
        CLine,
        CCodeRotation,
        CCodeType,
        CPage,
        CText,
        CFont,
        CBold,
        CRotation,
        CInverse,
        CMag,
        CQRCode,
        CCorrectLevel,
        CSN,
        CStatus,
        CPCL,
    } from "@psdk/cpcl";
    import {
        getUserInfo
    } from "@/utils/auth.js";
    import {
        CommonUtils
    } from "@/utils/common.js"
    export default {
        data() {
            return {
                CommonUtils,
                userInfo: getUserInfo(),
                serverUrl: uni.getStorageSync('serverUrl') || 'http://47.96.97.237/API',
                barCodeInfoMeta: {
                    barCodeNo: "",
                    splitNum: "",
                    billMaker: getUserInfo().HEmpName,
                    billMakerID: getUserInfo().HEmpID
                },
                barCodeInfo: {
                },
                barCodeSplitInfo: [],
                dialogVal: 0,
                itemCache: {},
                cantGenerate: true,
                cantPrint: true,
                printInfo: "" //打印
            };
        },
        components: {
            labelPrinterComponentVue
        },
        methods: {
            doRequest(url, data, resFunction, errFunction, method) {
                uni.showLoading({
                    title: '加载中...'
                })
                uni.request({
                    method: method || "GET",
                    url: this.serverUrl + url,
                    data: data || "",
                    success: (res) => {
                        if (typeof resFunction === 'function') {
                            resFunction.call(this, res)
                        } else if (typeof errFunction === 'undefined') {
                            return
                        } else {
                            throw new TypeError("访问成功回调函数类型异常!")
                        }
                    },
                    fail: (err) => {
                        uni.showToast({
                            icon: "error",
                            title: "接口访问异常!",
                            duration: 2000
                        })
                        if (typeof errFunction === 'function') {
                            errFunction.call(this, err)
                        } else if (typeof errFunction === 'undefined') {
                            return
                        } else {
                            throw new TypeError("访问失败回调函数类型异常!")
                        }
                    }
                })
                uni.hideLoading()
            },
            //摄像头调用
            async searchbarCodeInfo() {
                await this.$nextTick()
                let urlEncode =
                    `/Gy_BarCodeBillList/page?sWhere= and 条码编号=\'\'${this.barCodeInfoMeta.barCodeNo}\'\'&user=${this.userInfo.HEmpName}&page=1&size=1`
                    .toString()
                if (CommonUtils.isEmpty(this.barCodeInfoMeta.barCodeNo) == true) {
                    return uni.showToast({
                        icon: "fail",
                        title: "条码编号不能为空!"
                    })
                }
                this.doRequest(
                    urlEncode, {},
                    (res) => {
                        console.log(res)
                        let res1 = res.data
                        let {
                            data,
                            count
                        } = res1
                        if (count > 0) {
                            this.barCodeInfo = data[0]
                            this.barCodeSplitInfo = []
                        }
                    },
                    (err) => {
                        console.err(err)
                    }
                )
            },
            dialogInputConfirm(val) {
                this.itemCache["HSplitNum"] = val
                },
                barCodeSplitInfo: [],
                dialogVal: 0,
                itemCache: {},
                cantGenerate: true, // 生成按钮初始禁用
                cantPrint: true, // 打印按钮初始禁用
                cantSplit: false, // 拆码按钮初始可用
                HBarCodeFocus: false,
                printInfo: "" //打印
            };
        },
        components: {
            labelPrinterComponentVue
        },
        methods: {
            doRequest(url, data, resFunction, errFunction, method) {
                uni.showLoading({
                    title: '加载中...'
                })
                uni.request({
                    method: method || "GET",
                    url: this.serverUrl + url,
                    data: data || "",
                    success: (res) => {
                        if (typeof resFunction === 'function') {
                            resFunction.call(this, res)
                        } else if (typeof errFunction === 'undefined') {
                            return
                        } else {
                            throw new TypeError("访问成功回调函数类型异常!")
                        }
                    },
                    fail: (err) => {
                        uni.showToast({
                            icon: "error",
                            title: "接口访问异常!",
                            duration: 2000
                        })
                        if (typeof errFunction === 'function') {
                            errFunction.call(this, err)
                        } else if (typeof errFunction === 'undefined') {
                            return
                        } else {
                            throw new TypeError("访问失败回调函数类型异常!")
                        }
                    }
                })
                uni.hideLoading()
            },
            //声音
            playSound(e) {
                const innerAudioContext = uni.createInnerAudioContext();
                if (e == 1) {
                    innerAudioContext.src = '/static/success.wav';
                } else {
                    innerAudioContext.src = '/static/jingbao.wav';
                }
                innerAudioContext.play(); // 播放音频
            },
            //光标
            async refreshBarCodeState() {
                this.HBarCodeFocus = false
                await this.$nextTick(() => {
                    this.HBarCodeFocus = true
                    this.barCodeInfoMeta.barCodeNo = ""
                })
            },
            //摄像头调用
            async searchbarCodeInfo() {
                await this.$nextTick()
                let urlEncode =
                    `/Gy_BarCodeBillList/page?sWhere= and 条码编号=\'\'${this.barCodeInfoMeta.barCodeNo}\'\'&user=${this.userInfo.HEmpName}&page=1&size=1`
                    .toString()
                if (CommonUtils.isEmpty(this.barCodeInfoMeta.barCodeNo) == true) {
                    return uni.showToast({
                        icon: "fail",
                        title: "条码编号不能为空!"
                    })
                }
                this.doRequest(
                    urlEncode, {},
                    (res) => {
                        console.log(res)
                        let res1 = res.data
                        let {
                            data,
                            count
                        } = res1
                        if (count > 0) {
                            this.barCodeInfo = data[0]
                            this.barCodeSplitInfo = []
                            // 扫描条码后重置按钮状态
                            this.resetButtonState();
                        }
                    },
                    (err) => {
                        console.err(err)
                    }
                )
            },
            //红外扫条码
            getCode(HBarCode) {
                if (!HBarCode) {
                    this.playSound(0)
                    this.refreshBarCodeState()
                    uni.showToast({
                        title: '条码不能为空',
                        icon: 'none'
                    })
                } else {
                    uni.request({
                        url: this.serverUrl + '/Gy_BarCodeBillList/page',
                        data: {
                            sWhere: ` and 条码编号=''${this.barCodeInfoMeta.barCodeNo}''`,
                            user: this.userInfo.HEmpName,
                            page: 1,
                            size: 1
                        },
                        success: (res) => {
                            console.log('扫码返回', res.data.data);
                            if (res.data.count == 1) {
                                this.playSound(1)
                                this.barCodeInfo = res.data.data[0]
                                this.barCodeSplitInfo = []
                                // 扫描条码后重置按钮状态
                                this.resetButtonState();
                            } else {
                                this.playSound(0)
                                this.refreshBarCodeState()
                                uni.showToast({
                                    title: res.data.Message,
                                    icon: 'none'
                                })
                            }
                        },
                        fail: (res) => {
                            this.playSound(0)
                            this.refreshBarCodeState()
                            console.log(res);
                            uni.showToast({
                                title: '接口请求失败',
                                icon: 'none'
                            })
                        },
                    });
                }
            },
            dialogInputConfirm(val) {
                this.itemCache["HSplitNum"] = val
                // 关闭窗口后,恢复默认内容
                this.$refs.inputDialog.close()
                // 关闭窗口后,恢复默认内容
                this.$refs.inputDialog.close()
            },
            //拆码按钮调用
            async searchbarCodeInfoMeta() {
                this.cantGenerate = true
                this.cantPrint = true
                if (CommonUtils.isEmpty(this.barCodeInfoMeta.barCodeNo) === true) {
                    return uni.showToast({
                        icon: 'none',
                        title: '条码编号不得为空!'
                    });
                }
                if (CommonUtils.isEmpty(this.barCodeInfoMeta.splitNum, true) === true) {
                    return uni.showToast({
                        icon: 'none',
                        title: '拆分数量不得为空!'
                    });
                }
                if (CommonUtils.isEmpty(this.barCodeInfoMeta.splitNum, true) === true) {
                    return uni.showToast({
                        icon: 'none',
                        title: '拆分数量不得为空!'
                    });
                }
                if (parseFloat(this.barCodeInfoMeta.splitNum) > parseFloat(this.barCodeInfo['数量'])) {
                    return uni.showToast({
                        icon: 'none',
                        title: '拆分数量不能大于条码原数量!'
                    });
                }
                this.doRequest(
                    "/Sc_BarCode/SplitBarCode_Sub",
                    {
                        HBarCodeNo: this.barCodeInfoMeta.barCodeNo,
                    },
                    (res) => {
                        this.barCodeSplitInfo = []
                        if (res.data.count > 0) {
            },
            //拆码按钮调用
            async searchbarCodeInfoMeta() {
                this.cantGenerate = true
                this.cantPrint = true
                this.cantSplit = false // 拆码前确保拆码按钮可用
                if (CommonUtils.isEmpty(this.barCodeInfoMeta.barCodeNo) === true) {
                    return uni.showToast({
                        icon: 'none',
                        title: '条码编号不得为空!'
                    });
                }
                if (CommonUtils.isEmpty(this.barCodeInfoMeta.splitNum, true) === true) {
                    return uni.showToast({
                        icon: 'none',
                        title: '拆分数量不得为空!'
                    });
                }
                if (CommonUtils.isEmpty(this.barCodeInfoMeta.splitNum, true) === true) {
                    return uni.showToast({
                        icon: 'none',
                        title: '拆分数量不得为空!'
                    });
                }
                if (parseFloat(this.barCodeInfoMeta.splitNum) > parseFloat(this.barCodeInfo['数量'])) {
                    return uni.showToast({
                        icon: 'none',
                        title: '拆分数量不能大于条码原数量!'
                    });
                }
                this.doRequest(
                    "/Sc_BarCode/SplitBarCode_Sub", {
                        HBarCodeNo: this.barCodeInfoMeta.barCodeNo,
                    },
                    (res) => {
                        this.barCodeSplitInfo = []
                        if (res.data.count > 0) {
                            if (res.data.data.length < 1) {
                                return uni.showToast({
                                    icon: 'none',
                                    title: Message
                                });
                            }
                            if (res.data.data.length < 1) {
                                return uni.showToast({
                                    icon: 'none',
                                    title: Message
                                });
                            }
                            //拆分条码:数量为 splitNum
                            let barCodeItem1 = JSON.parse(JSON.stringify(res.data.data.SubBarCodes[0]));
                            let HSplitNum = this.barCodeInfoMeta.splitNum;
                            this.barCodeSplitInfo.push({
                                HSplitNum: this.barCodeInfoMeta.splitNum,
                                HBarCode: res.data.data.NextBarCode,
                            //拆分条码:数量为 splitNum
                            let barCodeItem1 = JSON.parse(JSON.stringify(res.data.data.SubBarCodes[0]));
                            let HSplitNum = this.barCodeInfoMeta.splitNum;
                            this.barCodeSplitInfo.push({
                                HSplitNum: this.barCodeInfoMeta.splitNum,
                                HBarCode: res.data.data.NextBarCode,
                                HNumber: barCodeItem1.HNumber,
                                HName: barCodeItem1.HName,
                                HModel: barCodeItem1.HModel
                            });
                            });
                            //更新原先条码数量
                            this.barCodeInfo['剩余数量'] = this.barCodeInfo['数量'] - this.barCodeInfoMeta.splitNum;
                            //更新原先条码数量
                            this.barCodeInfo['剩余数量'] = this.barCodeInfo['数量'] - this.barCodeInfoMeta.splitNum;
                            this.cantGenerate = false;
                        } else {
                            uni.showToast({
                                icon: 'none',
                                title: '没有找到对应的单据'
                            });
                        }
                    },
                    (err) => {
                        console.error(err)
                    }
                )
            },
            //保存方法
            SaveBarCodeCreate() {
                // 校验拆码数量
                let sum = this.barCodeSplitInfo.reduce((acc, obj) => {
                    return acc + obj["HSplitNum"]
                }, 0)
                            // 拆码成功,禁用拆码按钮,放开生成按钮
                            this.cantSplit = true;
                            this.cantGenerate = false;
                            this.cantPrint = true;
                        } else {
                            uni.showToast({
                                icon: 'none',
                                title: '没有找到对应的单据'
                            });
                        }
                    },
                    (err) => {
                        console.error(err)
                    }
                )
            },
            //保存方法
            SaveBarCodeCreate() {
                // 校验拆码数量
                let sum = this.barCodeSplitInfo.reduce((acc, obj) => {
                    return acc + obj["HSplitNum"]
                }, 0)
                if (sum > this.barCodeInfo["HQty"]) {
                    return uni.showToast({
                        icon: 'none',
                        title: '拆码数量和不得大于条码数量'
                    });
                }
                let msg =
                    `${this.barCodeInfoMeta["barCodeNo"]};${this.barCodeInfoMeta["splitNum"]};${JSON.stringify(this.barCodeSplitInfo)};${this.userInfo["HEmpName"]}`
                this.doRequest(
                    "/Sc_BarCode/SplitBarCode_Save", {
                        msg: msg
                    },
                    (res) => {
                        if (res.data.code == 1) {
                            this.cantGenerate = true
                            this.cantPrint = false
                            uni.showToast({
                                title: '生成成功!'
                            });
                        } else {
                            this.cantGenerate = false
                            uni.showToast({
                                title: res.data.Message
                            });
                        }
                if (sum > this.barCodeInfo["HQty"]) {
                    return uni.showToast({
                        icon: 'none',
                        title: '拆码数量和不得大于条码数量'
                    });
                }
                let msg =
                    `${this.barCodeInfoMeta["barCodeNo"]};${this.barCodeInfoMeta["splitNum"]};${JSON.stringify(this.barCodeSplitInfo)};${this.userInfo["HEmpName"]}`
                this.doRequest(
                    "/Sc_BarCode/SplitBarCode_Save", {
                        msg: msg
                    },
                    (res) => {
                        if (res.data.code == 1) {
                            // 生成成功,禁用生成按钮,放开打印按钮
                            this.cantGenerate = true;
                            this.cantPrint = false;
                            this.cantSplit = true;
                            uni.showToast({
                                title: '生成成功!'
                            });
                        } else {
                            this.cantGenerate = false;
                            uni.showToast({
                                title: res.data.Message
                            });
                        }
                    },
                    (err) => {
                        console.err(err)
                    },
                    "POST"
                )
                    },
                    (err) => {
                        console.err(err)
                    },
                    "POST"
                )
            },
            //打印按钮
            async PrintHBarCode() {
                if (this.$printer.isConnected() === false) {
                    this.$refs.labelPrinter.openPopup()
                } else {
                    let HBarCodeNoStr = `${this.barCodeSplitInfo[0]['HBarCode']}`
                    this.printInfo = `! 0 200 200 400 1
    PAGE-WIDTH 608
    SETQRVER 3
    B QR 475 15 Q 0 U 3
    LA,${HBarCodeNoStr}
    ENDQR
    T 24 0 0 30 供应商:
    T 55 0 0 55 (Supplier)
    T 24 0 0 75 供应商料号:
    T 55 0 0 100 (Supplier Sku No.)
    T 24 0 0 120 物料名称:
    T 55 0 0 145 (Material Code)
    T 24 0 0 165 款号:
    T 55 0 0 190 (Style No.)
    T 24 0 300 165 客户编号:
    T 55 0 300 190 (Consumer No.)
    T 24 0 0 210 分组:
    T 55 0 0 235 (Group)
    T 24 0 300 210 规格:
    T 55 0 300 235 (SKU NO.)
    T 24 0 0 255 数量:
    T 55 0 0 280 (Quantity)
    T 24 0 300 255 日期:
    T 55 0 300 280 (Date)
    T 24 0 0 300 检验员:
    T 55 0 0 325 (QC)
    T 24 0 300 300 采购单号:
    T 55 0 300 325 (Purchase Order No.)
    T 24 0 0 345 检验结果:
    T 55 0 0 370 (Inspection status)
    BOX 240 345 260 365 4
    T 24 0 270 345 合格
    T 55 0 250 370 (Pass)
    BOX 340 345 360 365 4
    T 24 0 370 345 不合格
    T 55 0 370 370 (Fail)
    BOX 460 345 480 365 4
    T 24 0 490 345 特采
    T 55 0 440 370 (Spec. accepted)
    FORM
    PRINT`
                console.log('printInfo: ',this.printInfo);
                    await this.$nextTick(() => {
                        this.$refs.labelPrinter.execPrint()
                    })
                }
            },
            toScanCode() {
                var mpaasScanModule = uni.requireNativePlugin("Mpaas-Scan-Module")
                mpaasScanModule.mpaasScan({
                    'hideAlbum': true,
                    'timeoutInterval': '10', //超时时间
                    'timeoutText': '未识别到二维码' //超时提醒
                }, (ret) => {
                    console.log(ret.resp_result)
                    if (this.CommonUtils.isEmpty(ret.resp_result) === false) {
                        console.log('条码内容:' + ret.resp_result);
                        this.barCodeInfoMeta.barCodeNo = ret.resp_result
            },
            //打印按钮
            // 父组件中的打印方法
            async PrintHBarCode() {
                if (this.$printer.isConnected() === false) {
                    this.$refs.labelPrinter.openPopup();
                    return;
                }
                        this.searchbarCodeInfo()
                    }
                })
            }
        },
        onLoad() {}
    }
                // 防止重复点击
                if (this.isPrinting) {
                    uni.showToast({
                        title: '打印中,请稍候...',
                        icon: 'none'
                    });
                    return;
                }
                this.isPrinting = true;
                try {
                    let HBarCodeNoStr = `${this.barCodeSplitInfo[0]['HBarCode']}`;
                    console.log('获取数据', HBarCodeNoStr);
                    // 显示打印中状态
                    uni.showLoading({
                        title: '打印中...',
                        mask: true
                    });
                    // 获取打印数据
                    const printData = await new Promise((resolve, reject) => {
                        uni.request({
                            url: this.serverUrl + '/Sc_BarCode/GetSplitBarCode_SubList',
                            data: {
                                HBarCodeNo: HBarCodeNoStr
                            },
                            success: (res) => {
                                if (res.data.count == 1) {
                                    resolve(res.data.data[0]);
                                } else {
                                    reject(new Error(res.data.Message || '未找到打印数据'));
                                }
                            },
                            fail: (err) => {
                                reject(new Error('接口请求失败'));
                            }
                        });
                    });
                    const item = printData;
                    // 凯贝奈特打印模板
                    this.printInfo = `! 0 200 200 500 1
                  PAGE-WIDTH 800
                  SETQRVER 2
                  B QR 450 120 Q 0 U 4
                  LA,${HBarCodeNoStr}
                  ENDQR
                  T 90 0 150 30 杭州凯贝奈特科技有限公司
                  T 90 0 20 70 P/N:
                  T 50 0 80 70 ${item.物料代码 || ''}
                  T 90 0 20 110 P/D:
                  T 50 0 80 110 ${item.物料名称 || ''}
                  T 90 0 20 150 D/C:
                  T 50 0 80 150 ${item.生产日期 || ''}
                  T 90 0 220 150 QTY:
                  T 50 0 290 150 ${item.数量 || ''}
                  T 90 0 360 150 ${item.计量单位 || ''}${item.内外标记 || ''}
                  T 90 0 20 190 P/O:
                  T 50 0 80 190 ${item.采购订单号 || ''}
                  T 90 0 20 230 V/C:
                  T 50 0 80 230 ${item.供应商 || ''}
                  T 90 0 20 270 Lot No:
                  T 50 0 100 270 ${item.供应商批次 || ''}
                  T 90 0 20 310 MPN:
                  T 50 0 80 310 ${item.供应商料号 || ''}
                  T 90 0 20 350 MSD:
                  T 50 0 80 350 MSD1
                  FORM
                  PRINT`;
                    console.log('printInfo: ', this.printInfo);
                    // 等待打印组件更新
                    await this.$nextTick();
                    // 执行打印,并等待打印完成
                    const printResult = await this.$refs.labelPrinter.execPrint();
                    console.log('打印结果:', printResult);
                    // 打印成功后重置状态
                    uni.hideLoading();
                    this.isPrinting = false;
                    uni.showToast({
                        title: '打印完成',
                        icon: 'success',
                        duration: 2000
                    });
                    // 播放成功提示音
                    this.playSound(1);
                } catch (error) {
                    console.error('打印失败:', error);
                    uni.hideLoading();
                    this.isPrinting = false;
                    uni.showToast({
                        title: error.message || '打印失败',
                        icon: 'error',
                        duration: 2000
                    });
                    this.playSound(0);
                }
            },
            toScanCode() {
                var mpaasScanModule = uni.requireNativePlugin("Mpaas-Scan-Module")
                mpaasScanModule.mpaasScan({
                    'hideAlbum': true,
                    'timeoutInterval': '10', //超时时间
                    'timeoutText': '未识别到二维码' //超时提醒
                }, (ret) => {
                    console.log(ret.resp_result)
                    if (this.CommonUtils.isEmpty(ret.resp_result) === false) {
                        console.log('条码内容:' + ret.resp_result);
                        this.barCodeInfoMeta.barCodeNo = ret.resp_result
                        this.searchbarCodeInfo()
                    }
                })
            },
            // 重置按钮状态方法
            resetButtonState() {
                this.cantSplit = false; // 拆码按钮可用
                this.cantGenerate = true; // 生成按钮禁用
                this.cantPrint = true; // 打印按钮禁用
            }
        },
        onLoad() {
            this.HBarCodeFocus = true;
            // 页面初始化时设置按钮状态
            this.resetButtonState();
        }
    }
</script>
<style lang="scss">
    * {
        box-sizing: border-box;
    }
    * {
        box-sizing: border-box;
    }
    input {
        padding: 8rpx 20rpx;
        font-size: 30rpx;
        line-height: 30rpx;
    }
    input {
        padding: 8rpx 20rpx;
        font-size: 30rpx;
        line-height: 30rpx;
    }
    button {
        padding: 0;
        width: 150rpx;
        font-size: 25rpx;
    }
    button {
        padding: 0;
        width: 150rpx;
        font-size: 25rpx;
    }
    .uni-card {
        margin: 0 !important;
    }
    .uni-card {
        margin: 0 !important;
    }
    .container {
        .header {
            padding: 20rpx 10rpx;
            display: flex;
            flex-direction: column;
            gap: 20rpx;
    .container {
        .header {
            padding: 20rpx 10rpx;
            display: flex;
            flex-direction: column;
            gap: 20rpx;
            .item {
                display: flex;
                flex-direction: row;
                padding: 0 10rpx;
                gap: 20rpx;
                font-size: 30rpx;
                // height: 1.5rem;
                // justify-content: center;
                align-items: center;
            .item {
                display: flex;
                flex-direction: row;
                padding: 0 10rpx;
                gap: 20rpx;
                font-size: 30rpx;
                // height: 1.5rem;
                // justify-content: center;
                align-items: center;
                .left {
                    text-align: right;
                    width: 5rem;
                }
                .left {
                    text-align: right;
                    width: 5rem;
                }
                .right {
                    flex: 1;
                    height: 100%;
                    padding: 6rpx 0;
                    border-radius: 22rpx;
                    border: 1px solid #e4e4e4;
                    background-color: #e4e4e4;
                .right {
                    flex: 1;
                    height: 100%;
                    padding: 6rpx 0;
                    border-radius: 22rpx;
                    border: 1px solid #e4e4e4;
                    //background-color: #e4e4e4;
                    >input {
                        height: auto;
                    }
                }
            }
                    >input {
                        height: auto;
                    }
                }
            }
            .operation-zone {
                display: flex;
                flex-direction: row;
                justify-content: space-evenly;
            .operation-zone {
                display: flex;
                flex-direction: row;
                justify-content: space-evenly;
                .btn-c {
                    background-color: #3a78ff;
                    color: #fff;
                }
            }
        }
                .btn-c {
                    background-color: #3a78ff;
                    color: #fff;
                }
            }
        }
        .divide {
            width: 100%;
            height: 16rpx;
            background-color: #e5e5e5;
        }
        .divide {
            width: 100%;
            height: 16rpx;
            background-color: #e5e5e5;
        }
        .content {
            flex: 1;
        .content {
            flex: 1;
            .barcode-detail,
            .barcode-split {
                padding: 30rpx;
                display: flex;
                flex-direction: column;
                gap: 30rpx;
            }
        }
    }
            .barcode-detail,
            .barcode-split {
                padding: 30rpx;
                display: flex;
                flex-direction: column;
                gap: 30rpx;
            }
        }
    }
</style>