chenhaozhe
2025-08-01 cfa236b5b63c351ed0f846cbc511fa64d88f4993
Merge branch 'Dev' of http://101.37.171.70:10101/r/~jhz/STUWMS into Dev

# Conflicts:
# pages/tiaomadaying/tiaomadaying.vue
3个文件已修改
1780 ■■■■ 已修改文件
pages/index/login.vue 61 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/tiaomadaying/tiaomadaying.vue 1279 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/common.js 440 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/index/login.vue
@@ -63,29 +63,33 @@
                    </view>
                </uni-popup-dialog>
            </uni-popup>
            <view class="btn" @tap="submit">登 录</view>
            <!-- <view class="btn apibtn" @tap="changeApi=true">服务器设置</view> -->
            <view class="btn apibtn" @click="openServerSettingHandler">服务器设置</view>
        </view>
    </view>
</template>
<script>
    import {
        setLoginData,
        setUserInfo
    } from "@/utils/auth.js";
    import hFormAlert from '@/components/h-form-alert/h-form-alert.vue';
    import {
        CommonUtils
    } from "../../utils/common";
    export default {
        components: {
            hFormAlert
        },
        data() {
            return {
                CommonUtils,
                arrayDataBases: [],
                DataBases: '',
                arrayServerOrganization: ["浙江智云迈思", "温州海诚"],
                arrayServerOrganizationValues: [
                    'http://47.96.97.237/API/',
@@ -95,7 +99,7 @@
                arrayOrganization: [],
                Organization: '',
                HOrgNameList: [],
                HOrgName: '',
                UserName: '', //admin    001
                PassWord: '', //123456
@@ -104,7 +108,7 @@
                serverUrlCache: '',
            }
        },
        onLoad() {
        onShow() {
            var logindata = uni.getStorageSync('loginData') || ''
            // console.log(logindata)
            if (logindata) {
@@ -114,9 +118,9 @@
                this.UserName = logindata.UserName
                this.PassWord = logindata.PassWord
            }
            this.serverUrlCache = this.serverUrl
            console.log('this.serverUrlCache: ',this.serverUrlCache);
            console.log('this.serverUrlCache: ', this.serverUrlCache);
            let index = this.arrayServerOrganizationValues.findIndex((e) => {
                return e == this.serverUrlCache
            })
@@ -133,11 +137,11 @@
                await this.$nextTick(() => {
                    this.Organization = this.arrayOrganization[0]
                    this.HOrgName = this.HOrgNameList[0]
                    let org = uni.getStorageSync('Organization')
                    let orgName = uni.getStorageSync('OrganizationID')
                    let orgHas = Array.from(this.arrayOrganization).findIndex((e) => e == org)
                    if(org && (orgHas != -1)) {
                    if (org && (orgHas != -1)) {
                        this.Organization = org
                        this.HOrgName = orgName
                    }
@@ -185,7 +189,7 @@
                this.DataBases = this.arrayDataBases[e.detail.value]
                uni.setStorageSync('DataBases', this.DataBases);
            },
            getOrganization() {
                uni.request({
                    url: this.serverUrl + '/Web/GetOrganizations',
@@ -268,7 +272,8 @@
                                uni.setStorageSync('login', "login");
                                uni.setStorageSync('Organization', this.Organization);
                                uni.setStorageSync('OrganizationID', this.HOrgName);
                                console.log('this.serverUrl: ', this.serverUrl);
                                this.CommonUtils.setServerUrl(this.serverUrl)
                                uni.reLaunch({
                                    url: '/pages/index/index'
                                })
@@ -288,7 +293,7 @@
        }
    }
</script>
<style lang="scss" scoped>
    .bg-img {
        position: fixed;
@@ -298,7 +303,7 @@
        left: 0;
        z-index: -1;
    }
    .container {
        width: 100%;
        height: 100%;
@@ -306,21 +311,21 @@
        flex-direction: column;
        align-items: center;
        justify-content: center;
        .title {
            margin-top: 174rpx;
            font-size: 47rpx;
            font-weight: bold;
            color: #FFFFFF;
        }
        .box {
            width: 682rpx;
            position: relative;
            top: 120rpx;
            display: flex;
            justify-content: center;
            .logo {
                width: 155rpx;
                height: 155rpx;
@@ -329,7 +334,7 @@
                z-index: 9;
                background-color: rgba(255, 255, 255, 0.5);
                border-radius: 100%;
                image {
                    width: 100%;
                    height: 100%;
@@ -337,7 +342,7 @@
                    background-color: #f0f3f7;
                }
            }
            .login {
                width: 100%;
                height: 480rpx;
@@ -348,26 +353,26 @@
                border-radius: 25rpx 0 25rpx 0;
                box-shadow: 0 6rpx 24rpx 8rpx rgba(21, 99, 210, 0.14);
                padding-top: 160rpx;
                .item {
                    display: flex;
                    align-items: center;
                    justify-content: flex-end;
                    margin-right: 38rpx;
                    margin-bottom: 70rpx;
                    .left {
                        font-size: 34rpx;
                        font-weight: 400;
                        color: #3C3C3C;
                    }
                    .right {
                        width: 441rpx;
                        height: 68rpx;
                        background: #EBEBEB;
                        border-radius: 10rpx;
                        input {
                            height: 100%;
                            padding: 0 30rpx;
@@ -375,7 +380,7 @@
                        }
                    }
                }
                // .api{
                //     margin-left: 30rpx;
                //     font-size: 27rpx;
@@ -391,7 +396,7 @@
                // }
            }
        }
        .btn {
            width: 540rpx;
            height: 92rpx;
@@ -405,26 +410,26 @@
            text-align: center;
            font-size: 36rpx;
        }
        .apibtn {
            margin-top: 50rpx;
            background: #eec18e;
            box-shadow: 0rpx 0rpx 44rpx 7rpx rgba(253, 186, 118, 0.3);
        }
    }
    .popup-content {
        box-sizing: border-box;
        display: flex;
        flex-direction: column;
        gap: 30rpx;
        .pop-item {
            border: #EBEBEB 2rpx solid;
            border-radius: 10rpx;
            padding: 14rpx 8rpx;
        }
        >picker {
            background-color: #EBEBEB;
        }
pages/tiaomadaying/tiaomadaying.vue
@@ -1,680 +1,701 @@
<template>
    <view class="container">
        <view class="content">
            <view class="header">基本信息</view>
            <view class="items">
                <view class="item">
                    <view class="left">条码编号:</view>
                    <view class="right barcode">
                        <input :focus="HBarCodeFocus" name="HBarCode" v-model="lailiaoInfo.barCodeNo"
                            @focus="lailiaoInfo.barCodeNo = ''" @confirm="barCodeEntryHandler(lailiaoInfo.barCodeNo)"
                            placeholder="请扫描商品条码" />
                    </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 name="HBillNo" disabled v-model="lailiaoInfo.HBillNo" />
                    </view>
                </view>
                <view class="item">
                    <view class="left">源单行号:</view>
                    <view class="right">
                        <input name="HBillLineNo" disabled v-model="lailiaoInfo.HBillLineNo" />
                    </view>
                </view>
                <view class="item">
                    <view class="left">物料编码:</view>
                    <view class="right">
                        <input name="HMaterNo" disabled v-model="lailiaoInfo.HMaterNumber" />
                    </view>
                </view>
                <view class="item">
                    <view class="left">物料名称:</view>
                    <view class="right">
                        <input name="HMaterName" disabled v-model="lailiaoInfo.HMaterName" />
                    </view>
                </view>
                <view class="item">
                    <view class="left">规格型号:</view>
                    <view class="right">
                        <input name="HMaterType" disabled v-model="lailiaoInfo.HMaterModel" />
                    </view>
                </view>
                <view class="item">
                    <view class="left">批次:</view>
                    <view class="right">
                        <input name="HBatchNo" disabled v-model="lailiaoInfo.HBatchNo" />
                    </view>
                </view>
                <view class="item">
                    <view class="left">数量:</view>
                    <view class="right">
                        <input name="HQty" disabled v-model="lailiaoInfo.HQty" />
                    </view>
                </view>
                <view class="item">
                    <view class="left">MTO号:</view>
                    <view class="right">
                        <input name="HMTONo" disabled v-model="lailiaoInfo.HMTONo" />
                    </view>
                </view>
                <view class="item">
                    <view class="left">供应商:</view>
                    <view class="right">
                        <input name="HSupName" disabled v-model="lailiaoInfo.HSupName" />
                    </view>
                </view>
                <view class="item">
                    <view class="left">供应商简称:</view>
                    <view class="right">
                        <input name="HSupNameShort" disabled v-model="lailiaoInfo.HSupNameShort" />
                    </view>
                </view>
            </view>
        </view>
        <view class="operation-zone">
            <button class="btn-c" @click="GenereateBarCode">生成</button>
            <button class="btn-c" :disabled="buttonStatus.btn2 == false" @click="print">打印</button>
            <view></view>
            <button class="btn-c" @click="setClearLailiaoInfo">新增</button>
            <button class="btn-c" @click="exit">退出</button>
        </view>
        <labelPrinterComponentVue ref="labelPrinter" :printInfo="printInfo" :printMode="'cpcl'">
        </labelPrinterComponentVue>
    </view>
    <view class="container">
        <view class="content">
            <view class="header">基本信息</view>
            <view class="items">
                <view class="item">
                    <view class="left">条码编号:</view>
                    <view class="right barcode">
                        <input :focus="HBarCodeFocus" name="HBarCode" v-model="lailiaoInfo.barCodeNo"
                            @focus="lailiaoInfo.barCodeNo = ''" @confirm="barCodeEntryHandler(lailiaoInfo.barCodeNo)"
                            placeholder="请扫描商品条码" />
                    </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 name="HBillNo" disabled v-model="lailiaoInfo.HBillNo" />
                    </view>
                </view>
                <view class="item">
                    <view class="left">源单行号:</view>
                    <view class="right">
                        <input name="HBillLineNo" disabled v-model="lailiaoInfo.HBillLineNo" />
                    </view>
                </view>
                <view class="item">
                    <view class="left">物料编码:</view>
                    <view class="right">
                        <input name="HMaterNo" disabled v-model="lailiaoInfo.HMaterNumber" />
                    </view>
                </view>
                <view class="item">
                    <view class="left">物料名称:</view>
                    <view class="right">
                        <input name="HMaterName" disabled v-model="lailiaoInfo.HMaterName" />
                    </view>
                </view>
                <view class="item">
                    <view class="left">规格型号:</view>
                    <view class="right">
                        <input name="HMaterType" disabled v-model="lailiaoInfo.HMaterModel" />
                    </view>
                </view>
                <view class="item">
                    <view class="left">批次:</view>
                    <view class="right">
                        <input name="HBatchNo" disabled v-model="lailiaoInfo.HBatchNo" />
                    </view>
                </view>
                <view class="item">
                    <view class="left">数量:</view>
                    <view class="right">
                        <input name="HQty" disabled v-model="lailiaoInfo.HQty" />
                    </view>
                </view>
                <view class="item">
                    <view class="left">MTO号:</view>
                    <view class="right">
                        <input name="HMTONo" disabled v-model="lailiaoInfo.HMTONo" />
                    </view>
                </view>
                <view class="item">
                    <view class="left">供应商:</view>
                    <view class="right">
                        <input name="HSupName" disabled v-model="lailiaoInfo.HSupName" />
                    </view>
                </view>
                <view class="item">
                    <view class="left">供应商简称:</view>
                    <view class="right">
                        <input name="HSupNameShort" disabled v-model="lailiaoInfo.HSupNameShort" />
                    </view>
                </view>
            </view>
        </view>
        <view class="operation-zone">
            <button class="btn-c" :disabled="buttonStatus.btn1" @click="GenereateBarCode">生成</button>
            <button class="btn-c" :disabled="buttonStatus.btn2" @click="print">打印</button>
            <view></view>
            <button class="btn-c" @click="setClearLailiaoInfo">新增</button>
            <button class="btn-c" @click="exit">退出</button>
        </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 {
        CommonUtils
    } from '../../utils/common';
    import {
        getUserInfo
    } from "@/utils/auth.js";
    export default {
        data() {
            return {
                HBarCodeFocus: false,
    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 {
        CommonUtils
    } from '../../utils/common';
    import {
        getUserInfo
    } from "@/utils/auth.js";
    export default {
        data() {
            return {
                HBarCodeFocus: false,
                printInfo: "",
                userInfo: getUserInfo(),
                buttonStatus: {
                    btn1: true,
                    btn2: false
                },
                barCodeMeta: '',
                generatedBarCode: '',
                lailiaoInfo: {
                    HMainID: '',
                    HSubID: '',
                    HOrderBillNo: '',
                    HMaterID: '',
                    barCodeNo: '',
                    HBillNo: '',
                    HBillLineNo: '',
                    HMaterNumber: '',
                    HMaterName: '',
                    HMaterModel: '',
                    HBatchNo: '',
                    HQty: '',
                    HMTONo: '',
                    HSupName: '',
                    HSupNameShort: '',
                    HMinQty: '',
                    HBQty: '',
                    HSupID: '',
                    HUnitID: '',
                }
            };
        },
        components: {
            labelPrinterComponentVue
        },
        onLoad() {
            this.HBarCodeFocus = true
        },
        methods: {
            async refreshBarcodeState() {
                this.HBarCodeFocus = false
                await this.$nextTick(() => {
                    this.HBarCodeFocus = true
                    this.lailiaoInfo.barCodeNo = ""
                })
            },
            async print() {
                if (this.$printer.isConnected() === false) {
                    this.$refs.labelPrinter.openPopup()
                } else {
                    // this.printInfo = async () => {
                    //     let cpcl = await this.$printer.cpcl().clear()
                    //         .page(new CPage({
                    //             width: 608,
                    //             height: 400
                    //         }))
                    //         .qrcode(new CQRCode({
                    //             x: 500,
                    //             y: 30,
                    //             width: 3,
                    //             content: this.generatedBarCode,
                    //             codeRotation: CCodeRotation.ROTATION_0,
                    //             level: CCorrectLevel.L
                    //         }))
                    //         .text(new CText({
                    //             x: 30,
                    //             y: 30,
                    //             content: "供应商: ",
                    //             font: CFont.TSS24
                    //         }))
                    //         .text(new CText({
                    //             x: 30,
                    //             y: 80,
                    //             content: "供应商料号: ",
                    //             font: CFont.TSS24
                    //         }))
                    //         .text(new CText({
                    //             x: 30,
                    //             y: 130,
                    //             content: "物料编码: ",
                    //             font: CFont.TSS24
                    //         }))
                    //         .text(new CText({
                    //             x: 30,
                    //             y: 180,
                    //             content: "物料分组: ",
                    //             font: CFont.TSS24
                    //         }))
                    //         .text(new CText({
                    //             x: 300,
                    //             y: 180,
                    //             content: "规格型号: ",
                    //             font: CFont.TSS24
                    //         }))
                    //         .text(new CText({
                    //             x: 30,
                    //             y: 230,
                    //             content: "数量: ",
                    //             font: CFont.TSS24
                    //         }))
                    //         .text(new CText({
                    //             x: 300,
                    //             y: 230,
                    //             content: "日期: ",
                    //             font: CFont.TSS24
                    //         }))
                    //         .text(new CText({
                    //             x: 30,
                    //             y: 280,
                    //             content: "检验员: ",
                    //             font: CFont.TSS24
                    //         }))
                    //         .text(new CText({
                    //             x: 300,
                    //             y: 280,
                    //             content: "计划跟踪号: ",
                    //             font: CFont.TSS24
                    //         }))
                    //         .text(new CText({
                    //             x: 30,
                    //             y: 330,
                    //             content: "检验结果: ",
                    //             font: CFont.TSS24
                    //         }))
                    //         .box(new CBox({
                    //             topLeftX: 260,
                    //             topLeftY: 320,
                    //             bottomRightX: 280,
                    //             bottomRightY: 340,
                    //             lineWidth: 4,
                    //         }))
                    //         .text(new CText({
                    //             x: 290,
                    //             y: 320,
                    //             content: "合格",
                    //             font: CFont.TSS24
                    //         }))
                    //         .box(new CBox({
                    //             topLeftX: 360,
                    //             topLeftY: 320,
                    //             bottomRightX: 380,
                    //             bottomRightY: 340,
                    //             lineWidth: 4,
                    //         }))
                    //         .text(new CText({
                    //             x: 390,
                    //             y: 320,
                    //             content: "不合格",
                    //             font: CFont.TSS24
                    //         }))
                    //         .box(new CBox({
                    //             topLeftX: 480,
                    //             topLeftY: 320,
                    //             bottomRightX: 500,
                    //             bottomRightY: 340,
                    //             lineWidth: 4,
                    //         }))
                    //         .text(new CText({
                    //             x: 510,
                    //             y: 320,
                    //             content: "特采",
                    //             font: CFont.TSS24
                    //         }))
                    //         .form(new CForm())
                    //         .print();
                    //     console.log(cpcl.command().string())
                    //     return cpcl.command().binary()
                    // }
                    // await this.$nextTick(() => {
                    //     this.$refs.labelPrinter.execPrint()
                    // })
                    // T 24 0 300 280 计划跟踪号: ${this.lailiaoInfo.HMTONo || ''}
                    this.printInfo = `! 0 200 200 400 1
                printInfo: "",
                userInfo: getUserInfo(),
                buttonStatus: {
                    btn1: true,
                    btn2: true
                },
                barCodeMeta: '',
                generatedBarCode: '',
                lailiaoInfo: {
                    HMainID: '',
                    HSubID: '',
                    HOrderBillNo: '',
                    HMaterID: '',
                    barCodeNo: '',
                    HBillNo: '',
                    HBillLineNo: '',
                    HMaterNumber: '',
                    HMaterName: '',
                    HMaterModel: '',
                    HBatchNo: '',
                    HQty: '',
                    HMTONo: '',
                    HSupName: '',
                    HSupNameShort: '',
                    HMinQty: '',
                    HBQty: '',
                    HSupID: '',
                    HUnitID: '',
                }
            };
        },
        components: {
            labelPrinterComponentVue
        },
        onLoad() {
            this.HBarCodeFocus = true
        },
        methods: {
            async refreshBarcodeState() {
                this.HBarCodeFocus = false
                await this.$nextTick(() => {
                    this.HBarCodeFocus = true
                    this.lailiaoInfo.barCodeNo = ""
                })
            },
            async print() {
                if (this.$printer.isConnected() === false) {
                    this.$refs.labelPrinter.openPopup()
                } else {
                    // this.printInfo = async () => {
                    //     let cpcl = await this.$printer.cpcl().clear()
                    //         .page(new CPage({
                    //             width: 608,
                    //             height: 400
                    //         }))
                    //         .qrcode(new CQRCode({
                    //             x: 500,
                    //             y: 30,
                    //             width: 3,
                    //             content: this.generatedBarCode,
                    //             codeRotation: CCodeRotation.ROTATION_0,
                    //             level: CCorrectLevel.L
                    //         }))
                    //         .text(new CText({
                    //             x: 30,
                    //             y: 30,
                    //             content: "供应商: ",
                    //             font: CFont.TSS24
                    //         }))
                    //         .text(new CText({
                    //             x: 30,
                    //             y: 80,
                    //             content: "供应商料号: ",
                    //             font: CFont.TSS24
                    //         }))
                    //         .text(new CText({
                    //             x: 30,
                    //             y: 130,
                    //             content: "物料编码: ",
                    //             font: CFont.TSS24
                    //         }))
                    //         .text(new CText({
                    //             x: 30,
                    //             y: 180,
                    //             content: "物料分组: ",
                    //             font: CFont.TSS24
                    //         }))
                    //         .text(new CText({
                    //             x: 300,
                    //             y: 180,
                    //             content: "规格型号: ",
                    //             font: CFont.TSS24
                    //         }))
                    //         .text(new CText({
                    //             x: 30,
                    //             y: 230,
                    //             content: "数量: ",
                    //             font: CFont.TSS24
                    //         }))
                    //         .text(new CText({
                    //             x: 300,
                    //             y: 230,
                    //             content: "日期: ",
                    //             font: CFont.TSS24
                    //         }))
                    //         .text(new CText({
                    //             x: 30,
                    //             y: 280,
                    //             content: "检验员: ",
                    //             font: CFont.TSS24
                    //         }))
                    //         .text(new CText({
                    //             x: 300,
                    //             y: 280,
                    //             content: "计划跟踪号: ",
                    //             font: CFont.TSS24
                    //         }))
                    //         .text(new CText({
                    //             x: 30,
                    //             y: 330,
                    //             content: "检验结果: ",
                    //             font: CFont.TSS24
                    //         }))
                    //         .box(new CBox({
                    //             topLeftX: 260,
                    //             topLeftY: 320,
                    //             bottomRightX: 280,
                    //             bottomRightY: 340,
                    //             lineWidth: 4,
                    //         }))
                    //         .text(new CText({
                    //             x: 290,
                    //             y: 320,
                    //             content: "合格",
                    //             font: CFont.TSS24
                    //         }))
                    //         .box(new CBox({
                    //             topLeftX: 360,
                    //             topLeftY: 320,
                    //             bottomRightX: 380,
                    //             bottomRightY: 340,
                    //             lineWidth: 4,
                    //         }))
                    //         .text(new CText({
                    //             x: 390,
                    //             y: 320,
                    //             content: "不合格",
                    //             font: CFont.TSS24
                    //         }))
                    //         .box(new CBox({
                    //             topLeftX: 480,
                    //             topLeftY: 320,
                    //             bottomRightX: 500,
                    //             bottomRightY: 340,
                    //             lineWidth: 4,
                    //         }))
                    //         .text(new CText({
                    //             x: 510,
                    //             y: 320,
                    //             content: "特采",
                    //             font: CFont.TSS24
                    //         }))
                    //         .form(new CForm())
                    //         .print();
                    //     console.log(cpcl.command().string())
                    //     return cpcl.command().binary()
                    // }
                    // await this.$nextTick(() => {
                    //     this.$refs.labelPrinter.execPrint()
                    // })
                    // T 24 0 300 280 计划跟踪号: ${this.lailiaoInfo.HMTONo || ''}
                    this.printInfo = `! 0 200 200 400 1
PAGE-WIDTH 608
SETQRVER 3
B QR 470 30 M 5 U 5
B QR 480 30 M 4 U 4
LA,${this.lailiaoInfo.barCodeNo}
ENDQR
T 24 0 10 30 供应商: ${this.lailiaoInfo.HSupName}
T 55 0 10 55 (Supplier)
T 24 0 10 80 供应商料号:  ${this.lailiaoInfo.HMaterNumber}
T 55 0 10 105 (Supplier Sku No.)
T 24 0 10 130 物料名称: ${this.lailiaoInfo.HMaterName}
T 55 0 5 155 (Material Code)
T 24 0 300 130 款号:
T 55 0 300 155 (eng)
T 24 0 5 180 分组: ${this.lailiaoInfo.HBatchNo}
T 55 0 5 205 (Group)
T 24 0 300 180 规格: ${this.lailiaoInfo.HMaterModel}
T 55 0 300 205 (SKU NO.)
T 24 0 10 230 数量:  ${this.lailiaoInfo.HQty} (${this.lailiaoInfo.HPcsName})
T 55 0 5 255 (Quantity)
T 24 0 10 70 供应商料号:  ${this.lailiaoInfo.HMaterNumber}
T 55 0 10 95 (Supplier Sku No.)
T 24 0 10 110 物料名称: ${this.lailiaoInfo.HMaterName}
T 55 0 10 135 (Material Code)
T 24 0 10 150 款号:
T 55 0 10 175 (eng)
T 24 0 300 150 客户编号:
T 55 0 300 175 (eng)
T 24 0 10 190 分组: ${this.lailiaoInfo.HBatchNo}
T 55 0 10 215 (Group)
T 24 0 300 190 规格: ${this.lailiaoInfo.HMaterModel}
T 55 0 300 215 (SKU NO.)
T 24 0 10 230 数量:  ${this.lailiaoInfo.HQty} (${this.lailiaoInfo.HPcsName})
T 55 0 10 255 (Quantity)
T 24 0 300 230 日期: ${this.lailiaoInfo.HDate}
T 55 0 300 255 (Date) 
T 24 0 5 280 检验员:
T 55 0 5 305 (QC)
T 24 0 300 280 采购单号: ${this.lailiaoInfo.HBillNo || ''}
T 55 0 300 305 (Purchase Order No.)
T 24 0 5 330 检验结果:
T 55 0 5 355 (Inspection status)
BOX 240 330 260 350 4
T 24 0 270 330 合格
T 55 0 250 355 (Pass)
BOX 340 330 360 350 4
T 24 0 370 330 不合格
T 55 0 370 355 (Fail)
BOX 460 330 480 350 4
T 24 0 490 330 特采
T 55 0 440 355 (Spec. accepted)
T 24 0 10 270 检验员:
T 55 0 10 295 (QC)
T 24 0 300 270 采购单号: ${this.lailiaoInfo.HBillNo || ''}
T 55 0 300 295 (Purchase Order No.)
T 24 0 10 310 检验结果:
T 55 0 10 335 (Inspection status)
BOX 240 310 260 330 4
T 24 0 270 310 合格
T 55 0 250 335 (Pass)
BOX 340 310 360 330 4
T 24 0 370 310 不合格
T 55 0 370 335 (Fail)
BOX 460 310 480 330 4
T 24 0 490 310 特采
T 55 0 440 335 (Spec. accepted)
FORM
PRINT`
                    await this.$nextTick(() => {
                        this.$refs.labelPrinter.execPrint()
                    })
                }
            },
            setLailiaoInfo(data, row) {
                if (row > data.length) {
                    CommonUtils.playSound(0)
                    return uni.showToast({
                        icon: 'none',
                        title: '查询的单据号不存在...'
                    })
                    await this.$nextTick(() => {
                        this.$refs.labelPrinter.execPrint()
                    })
                }
            },
            setLailiaoInfo(data, row) {
                if (row > data.length) {
                    CommonUtils.playSound(0)
                    return uni.showToast({
                        icon: 'none',
                        title: '查询的单据号不存在...'
                    })
                }
                let d = data[row - 1]
                this.lailiaoInfo = Object.assign(this.lailiaoInfo, {
                    HMaterNumber: d['物料编码'],
                    HMaterName: d['物料名称'],
                    HMaterModel: d['规格型号'],
                    HBatchNo: d['批号'],
                    HQty: d['数量'],
                    HMinQty: d['数量'],
                    HBQty: d['数量'],
                    HSupID: d['HSupID'],
                    HSupName: d['供应商'],
                    HUnitID: d['HUnitID'],
                    HSupNameShort: d['供应商'],
                    HMTONo: d['订单跟踪号'],
                    HMainID: d['linterid'],
                    HSubID: d['HEntryID'],
                    HMaterID: d['HMaterID'],
                })
                CommonUtils.playSound(1)
                this.buttonStatus.btn2 = true
            },
            setClearLailiaoInfo() {
                this.lailiaoInfo = {
                    HMainID: '',
                    HSubID: '',
                    HOrderBillNo: '',
                    HMaterID: '',
                    barCodeNo: '',
                    HBillNo: '',
                    HBillLineNo: '',
                    HMaterNumber: '',
                    HMaterName: '',
                    HMaterModel: '',
                    HBatchNo: '',
                    HQty: '',
                    HMTONo: '',
                    HSupName: '',
                    HSupNameShort: '',
                    HMinQty: '',
                    HBQty: '',
                }
                }
                let d = data[row - 1]
                this.lailiaoInfo = Object.assign(this.lailiaoInfo, {
                    HMaterNumber: d['物料编码'],
                    HMaterName: d['物料名称'],
                    HMaterModel: d['规格型号'],
                    HBatchNo: d['批号'],
                    HQty: d['数量'],
                    HMinQty: d['数量'],
                    HBQty: d['数量'],
                    HSupID: d['HSupID'],
                    HSupName: d['供应商'],
                    HUnitID: d['HUnitID'],
                    HSupNameShort: d['供应商'],
                    HMTONo: d['计划跟踪号'],
                    HMainID: d['linterid'],
                    HSubID: d['HEntryID'],
                    HMaterID: d['HMaterID'],
                })
                CommonUtils.playSound(1)
                this.buttonStatus.btn2 = true
            },
            setClearLailiaoInfo() {
                this.lailiaoInfo = {
                    HMainID: '',
                    HSubID: '',
                    HOrderBillNo: '',
                    HMaterID: '',
                    barCodeNo: '',
                    HBillNo: '',
                    HBillLineNo: '',
                    HMaterNumber: '',
                    HMaterName: '',
                    HMaterModel: '',
                    HBatchNo: '',
                    HQty: '',
                    HMTONo: '',
                    HSupName: '',
                    HSupNameShort: '',
                    HMinQty: '',
                    HBQty: '',
                }
                this.buttonStatus = {
                    btn1: true,
                    btn2: false
                }
            },
            barCodeEntryHandler(barCode) {
                if (CommonUtils.isEmpty(barCode) === false) {
                    console.log('条码内容:' + barCode);
                    this.lailiaoInfo.barCodeNo = barCode;
                    if (barCode.includes("@") === false) {
                        this.buttonStatus.btn2 = false
                        CommonUtils.playSound(0)
                        this.refreshBarcodeState()
                        return uni.showToast({
                            icon: 'none',
                            title: '条码格式错误,请重新扫描...'
                        })
                    }
                    let barCodeInfo = barCode.split("@")
                    let [PurchaseBillNo, Row] = barCodeInfo
                    this.lailiaoInfo.HBillNo = PurchaseBillNo,
                        this.lailiaoInfo.HBillLineNo = Row
                    console.log({
                        sWhere: ` and 单据号 = '${PurchaseBillNo}'`,
                        user: this.userInfo.Czymc,
                    })
                    CommonUtils.doRequest(
                        "/Cg_POOrderBill/list", {
                            sWhere: ` and 单据号 = '${PurchaseBillNo}'`,
                            user: this.userInfo.Czymc,
                        },
                        (res) => {
                            console.log('采购订单: ', res)
                            let {
                                data,
                                count
                            } = res.data
                            if (count > 0) {
                this.buttonStatus = {
                    btn1: true,
                    btn2: false
                }
            },
            barCodeEntryHandler(barCode) {
                if (CommonUtils.isEmpty(barCode) === false) {
                    console.log('条码内容:' + barCode);
                    this.lailiaoInfo.barCodeNo = barCode;
                    if (barCode.includes("@") === false) {
                        this.buttonStatus.btn2 = false
                        CommonUtils.playSound(0)
                        this.refreshBarcodeState()
                        return uni.showToast({
                            icon: 'none',
                            title: '条码格式错误,请重新扫描...'
                        })
                    }
                    let barCodeInfo = barCode.split("@")
                    let [PurchaseBillNo, Row] = barCodeInfo
                    this.lailiaoInfo.HBillNo = PurchaseBillNo,
                        this.lailiaoInfo.HBillLineNo = Row
                    console.log({
                        sWhere: ` and 单据号 = '${PurchaseBillNo}'`,
                        user: this.userInfo.Czymc,
                    })
                    CommonUtils.doRequest(
                        "/Cg_POOrderBill/list", {
                            sWhere: ` and 单据号 = '${PurchaseBillNo}'`,
                            user: this.userInfo.Czymc,
                        },
                        (res) => {
                            console.log('采购订单: ', res)
                            let {
                                data,
                                count,
                                Message
                            } = res.data
                            if (count > 0) {
                                this.setLailiaoInfo(data, Row)
                                this.setLailiaoInfo(data, Row)
                                // uni.showToast({
                                //     icon: 'none',
                                //     title: Message
                                // })
                                this.buttonStatus.btn1 = false
                            } else {
                                CommonUtils.playSound(0)
                                this.refreshBarcodeState()
                            }
                        },
                        (error) => {
                            CommonUtils.playSound(0)
                            this.refreshBarcodeState()
                            this.buttonStatus.btn2 = false
                        }
                    )
                            } else {
                                CommonUtils.playSound(0)
                                this.refreshBarcodeState()
                                // uni.showToast({
                                //     icon: 'none',
                                //     title: Message
                                // })
                                this.buttonStatus.btn1 = true
                                this.buttonStatus.btn2 = true
                            }
                        },
                        (error) => {
                            CommonUtils.playSound(0)
                            this.refreshBarcodeState()
                            this.buttonStatus.btn1 = true
                            this.buttonStatus.btn2 = true
                        }
                    )
                }
            },
            toScanCode() {
                var mpaasScanModule = uni.requireNativePlugin("Mpaas-Scan-Module")
                mpaasScanModule.mpaasScan({
                    'hideAlbum': true,
                    'timeoutInterval':'10', //超时时间
                    'timeoutText':'未识别到二维码' //超时提醒
                },(ret) => {
                    console.log(ret.resp_result)
                    if (CommonUtils.isEmpty(ret.resp_result) === false) {
                        console.log('条码内容:' + ret.resp_result);
                        this.lailiaoInfo.barCodeNo = ret.resp_result;
                        if (ret.resp_result.includes("@") === false) {
                            return uni.showToast({
                                icon: 'none',
                                title: '条码格式错误,请重新扫描...'
                            })
                        }
                        let barCodeInfo = ret.resp_result.split("@")
                        let [PurchaseBillNo, Row] = barCodeInfo
                        this.lailiaoInfo.HBillNo = PurchaseBillNo,
                            this.lailiaoInfo.HBillLineNo = Row
                        console.log({
                            sWhere: ` and 单据号 = '${PurchaseBillNo}'`,
                            user: this.userInfo.Czymc,
                        })
                        CommonUtils.doRequest(
                            "/Cg_POOrderBill/list", {
                                sWhere: ` and 单据号 = '${PurchaseBillNo}'`,
                                user: this.userInfo.Czymc,
                            },
                            (res) => {
                                console.log('采购订单: ', res)
                                let {
                                    data,
                                    count
                                } = res.data
                                if (count > 0) {
                                    this.setLailiaoInfo(data, Row)
                                }
                            },
                            (error) => {
                            }
                        )
                    }
                })
            },
            GenereateBarCode() {
                let HBarCodeNoStr =
                    `${this.lailiaoInfo.HBillNo}@${this.lailiaoInfo.HBillLineNo}@${this.lailiaoInfo.HMaterNumber}@${this.lailiaoInfo.HMTONo}@${this.lailiaoInfo.HQty}@${this.lailiaoInfo.HSupID}`
                let sMain = []
                sMain[0] = this.lailiaoInfo
                let sMainStr = JSON.stringify(sMain);
                //获取选择的组织
                let HOrgType = uni.getStorageSync('Organization');
                //获取选择的工厂代码
                let CampanyName = "xxx";
                //获取选择的源单类型
                let HSourceBillType = "来料通知单";
                //获取选择的条码类型
                let HSelectBarCodeType = "唯一条码";
                //获取当前登录人员
                let UserName = uni.getStorageSync('HUserName');
                let sMainSub = sMainStr + ';' + HOrgType + ';' + HSourceBillType + ';' + HSelectBarCodeType + ';' +
                    CampanyName + ';' + UserName + ';' + HBarCodeNoStr;
                }
            },
            toScanCode() {
                var mpaasScanModule = uni.requireNativePlugin("Mpaas-Scan-Module")
                mpaasScanModule.mpaasScan({
                    'hideAlbum': true,
                    'timeoutInterval': '10', //超时时间
                    'timeoutText': '未识别到二维码' //超时提醒
                }, (ret) => {
                    console.log(ret.resp_result)
                    if (CommonUtils.isEmpty(ret.resp_result) === false) {
                        console.log('条码内容:' + ret.resp_result);
                        this.lailiaoInfo.barCodeNo = ret.resp_result;
                        if (ret.resp_result.includes("@") === false) {
                            return uni.showToast({
                                icon: 'none',
                                title: '条码格式错误,请重新扫描...'
                            })
                        }
                        // let barCodeInfo = ret.resp_result.split("@")
                        // let [PurchaseBillNo, Row] = barCodeInfo
                        // this.lailiaoInfo.HBillNo = PurchaseBillNo,
                        //     this.lailiaoInfo.HBillLineNo = Row
                        // console.log({
                        //     sWhere: ` and 单据号 = '${PurchaseBillNo}'`,
                        //     user: this.userInfo.Czymc,
                        // })
                        // CommonUtils.doRequest(
                        //     "/Cg_POOrderBill/list", {
                        //         sWhere: ` and 单据号 = '${PurchaseBillNo}'`,
                        //         user: this.userInfo.Czymc,
                        //     },
                        //     (res) => {
                        //         console.log('采购订单: ', res)
                        //         let {
                        //             data,
                        //             count
                        //         } = res.data
                        //         if (count > 0) {
                        //             this.setLailiaoInfo(data, Row)
                        //         }
                        //     },
                        //     (error) => {
                CommonUtils.doRequest(
                    "/Sc_BarCode/SaveBarCode_NoGenerate", {
                        msg: sMainSub,
                        CampanyName: CampanyName
                    },
                    (res) => {
                        console.log(res)
                        let {
                            data,
                            count,
                            Message
                        } = res.data
                        if (count > 0) {
                            this.buttonStatus = {
                                btn1: false,
                                btn2: true
                            }
                            this.generatedBarCode = data[0]['条码编号']
                            console.log(this.generatedBarCode)
                            uni.showToast({
                                icon: 'none',
                                title: Message
                            })
                        } else {
                            uni.showToast({
                                icon: 'none',
                                title: Message
                            })
                        }
                    },
                    (err) => {
                        //     }
                        // )
                        this.barCodeEntryHandler(ret.resp_result)
                    }
                    },
                    "POST"
                )
            },
            exit() {
                uni.navigateBack()
            }
        }
    }
                })
            },
            GenereateBarCode() {
                let HBarCodeNoStr =
                    `${this.lailiaoInfo.HBillNo}@${this.lailiaoInfo.HBillLineNo}@${this.lailiaoInfo.HMaterNumber || ''}@${this.lailiaoInfo.HMTONo || ''}@${this.lailiaoInfo.HQty || ''}@${this.lailiaoInfo.HSupID || ''}`
                let sMain = []
                sMain[0] = this.lailiaoInfo
                let sMainStr = JSON.stringify(sMain);
                //获取选择的组织
                let HOrgType = uni.getStorageSync('Organization');
                //获取选择的工厂代码
                let CampanyName = "xxx";
                //获取选择的源单类型
                let HSourceBillType = "采购订单";
                //获取选择的条码类型
                let HSelectBarCodeType = "品种条码";
                //获取当前登录人员
                let UserName = uni.getStorageSync('HUserName');
                let sMainSub = sMainStr + ';' + HOrgType + ';' + HSourceBillType + ';' + HSelectBarCodeType + ';' +
                    CampanyName + ';' + UserName + ';' + HBarCodeNoStr;
                CommonUtils.doRequest(
                    "/Sc_BarCode/SaveBarCode_NoGenerate", {
                        msg: sMainSub,
                        CampanyName: CampanyName
                    },
                    (res) => {
                        console.log(res)
                        let {
                            data,
                            count,
                            Message
                        } = res.data
                        if (count > 0) {
                            // this.generatedBarCode = data[0]['条码编号']/
                            // console.log(this.generatedBarCode)
                            uni.showToast({
                                icon: 'none',
                                title: Message
                            })
                            this.buttonStatus = {
                                btn1: true,
                                btn2: true
                            }
                        } else {
                            uni.showToast({
                                icon: 'none',
                                title: Message
                            })
                        }
                    },
                    (err) => {
                        uni.showToast({
                            icon: 'none',
                            title: err
                        })
                    },
                    "POST"
                )
            },
            exit() {
                uni.navigateBack()
            }
        }
    }
</script>
<style lang="scss" scoped>
    * {
        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;
    }
    .uni-input-input[disabled] {
        background-color: #e4e4e4;
    }
    .uni-input-input[disabled] {
        background-color: #e4e4e4;
    }
    .container {
        display: flex;
        flex-direction: column;
        height: 100vh;
        padding: 20rpx 0;
    .container {
        display: flex;
        flex-direction: column;
        height: 100vh;
        padding: 20rpx 0;
        .content {
            flex: 1;
            background-image: url('/static/svgs/folder_bg.svg');
            background-size: cover;
            padding: 20rpx;
        .content {
            flex: 1;
            background-image: url('/static/svgs/folder_bg.svg');
            background-size: cover;
            padding: 20rpx;
            .header {
                font-size: 30rpx;
            }
            .header {
                font-size: 30rpx;
            }
            .items {
                display: flex;
                flex-direction: column;
                gap: 10rpx;
                padding: 40rpx 0rpx;
            .items {
                display: flex;
                flex-direction: column;
                gap: 10rpx;
                padding: 40rpx 0rpx;
                .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: left;
                        width: 6rem;
                    }
                    .left {
                        text-align: left;
                        width: 6rem;
                    }
                    .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;
                        }
                    }
                    }
                    .barcode {
                        background-color: #fff !important;
                    }
                    .barcode {
                        background-color: #fff !important;
                    }
                }
            }
        }
                }
            }
        }
        .operation-zone {
            height: 3rem;
            display: flex;
            align-items: center;
            justify-content: space-between;
            gap: 30rpx;
            padding: 20rpx;
        .operation-zone {
            height: 3rem;
            display: flex;
            align-items: center;
            justify-content: space-between;
            gap: 30rpx;
            padding: 20rpx;
            >view {
                flex: 1;
            }
            >view {
                flex: 1;
            }
            >button {
                width: 4rem;
                padding: 0;
                font-size: 25rpx;
                border-radius: 50rpx;
                line-height: 66rpx;
                font-size: 28rpx;
            }
            >button {
                width: 4rem;
                padding: 0;
                font-size: 25rpx;
                border-radius: 50rpx;
                line-height: 66rpx;
                font-size: 28rpx;
            }
            >button[disabled] {
                background-color: #acacac;
                color: #fff;
            }
            >button[disabled] {
                background-color: #acacac;
                color: #fff;
            }
            .btn-a {
                background-color: #acacac;
                color: #fff;
            }
            .btn-a {
                background-color: #acacac;
                color: #fff;
            }
            .btn-b {
                background-color: #41a863;
                color: #fff;
            }
            .btn-b {
                background-color: #41a863;
                color: #fff;
            }
            .btn-c {
                background-color: #3a78ff;
                color: #fff;
            }
        }
    }
            .btn-c {
                background-color: #3a78ff;
                color: #fff;
            }
        }
    }
</style>
utils/common.js
@@ -1,251 +1,255 @@
class commonUtils {
    serverUrl
    serverUrl
    constructor() {
        this.serverUrl = uni.getStorageSync('serverUrl') || 'http://47.96.97.237/API';
    }
    constructor() {
        this.serverUrl = uni.getStorageSync('serverUrl') || 'http://47.96.97.237/API/';
    }
    // 防抖函数
    debounce(func, delay, immediate = false) {
        let timer = null;
        return function() {
            const context = this;
            const args = arguments;
    setServerUrl(url) {
        this.serverUrl = url
    }
            const callNow = immediate && !timer;
            // 如果定时器已经存在,清除它
            if (timer) {
                clearTimeout(timer);
            }
    // 防抖函数
    debounce(func, delay, immediate = false) {
        let timer = null;
        return function() {
            const context = this;
            const args = arguments;
            // 设置一个新的定时器
            timer = setTimeout(() => {
                if (!immediate) {
                    func.apply(context, args);
                }
                timer = null;
            }, delay);
            const callNow = immediate && !timer;
            // 如果定时器已经存在,清除它
            if (timer) {
                clearTimeout(timer);
            }
            // 配置立即执行
            if (callNow == true) {
                func.apply(context, args)
            }
        };
    }
            // 设置一个新的定时器
            timer = setTimeout(() => {
                if (!immediate) {
                    func.apply(context, args);
                }
                timer = null;
            }, delay);
    // 判空函数
    isEmpty(value, zeroIsEmpty = false, falseIsEmpty = false) {
        let val = value
        // 检查是否为null  或者 undefind
        if (val === null || val === undefined) {
            return true;
        }
        //如果字符串全部是由数字构成的,则转化为数字型
        if (this.isAllDigits(val) === true) {
            val = Number(val)
        }
            // 配置立即执行
            if (callNow == true) {
                func.apply(context, args)
            }
        };
    }
        // 是否是字符串类型
        if (typeof val === 'string') {
            return val.trim().length === 0;
        }
    // 判空函数
    isEmpty(value, zeroIsEmpty = false, falseIsEmpty = false) {
        let val = value
        // 检查是否为null  或者 undefind
        if (val === null || val === undefined) {
            return true;
        }
        //如果字符串全部是由数字构成的,则转化为数字型
        if (this.isAllDigits(val) === true) {
            val = Number(val)
        }
        // 是否是数组
        if (Array.isArray(val)) {
            return val.length === 0;
        }
        // 是否是字符串类型
        if (typeof val === 'string') {
            return val.trim().length === 0;
        }
        //是否是对象
        if (typeof val === 'object') {
            return Object.keys(val).length === 0;
        }
        // 是否是数组
        if (Array.isArray(val)) {
            return val.length === 0;
        }
        // 数字类型默认不为空
        if (typeof val === 'number') {
            // 数字为0视为空
            if (zeroIsEmpty == true) {
                if (val === 0) {
                    return true
                }
            }
            return false
        }
        //是否是对象
        if (typeof val === 'object') {
            return Object.keys(val).length === 0;
        }
        // 布尔类型默认不为空
        if (typeof val === 'boolean') {
            // false值视为空
            if (falseIsEmpty == true) {
                if (val === 0) {
                    return true
                }
            }
            return false;
        }
    }
        // 数字类型默认不为空
        if (typeof val === 'number') {
            // 数字为0视为空
            if (zeroIsEmpty == true) {
                if (val === 0) {
                    return true
                }
            }
            return false
        }
    // 判断是否全是数字
    isAllDigits(str) {
        return /^\d+$/.test(str);
    }
        // 布尔类型默认不为空
        if (typeof val === 'boolean') {
            // false值视为空
            if (falseIsEmpty == true) {
                if (val === 0) {
                    return true
                }
            }
            return false;
        }
    }
    isJson(str) {
        try {
            JSON.parse(str)
            return true
        } catch {
            return false
        }
    }
    // 判断是否全是数字
    isAllDigits(str) {
        return /^\d+$/.test(str);
    }
    timeClock(callback, delay) {
        let timeoutId;
        let isRunning = false;
    isJson(str) {
        try {
            JSON.parse(str)
            return true
        } catch {
            return false
        }
    }
        function interval() {
            timeoutId = setTimeout(() => {
                callback();
                clearTimeout(timeoutId); // 立即清除当前定时器ID
                if (isRunning) {
                    interval();
                }
            }, delay);
        }
    timeClock(callback, delay) {
        let timeoutId;
        let isRunning = false;
        return {
            start() {
                if (!isRunning) {
                    isRunning = true;
                    interval();
                }
            },
            stop() {
                if (isRunning) {
                    isRunning = false;
                    clearTimeout(timeoutId);
                }
            }
        };
    }
        function interval() {
            timeoutId = setTimeout(() => {
                callback();
                clearTimeout(timeoutId); // 立即清除当前定时器ID
                if (isRunning) {
                    interval();
                }
            }, delay);
        }
    deepClone(target, map = new WeakMap()) {
        // 处理原始值和函数(typeof 数组会返回object)
        if (typeof target !== 'object' || target === null) {
            return target;
        }
        return {
            start() {
                if (!isRunning) {
                    isRunning = true;
                    interval();
                }
            },
            stop() {
                if (isRunning) {
                    isRunning = false;
                    clearTimeout(timeoutId);
                }
            }
        };
    }
        // 处理循环引用
        if (map.has(target)) {
            return map.get(target);
        }
    deepClone(target, map = new WeakMap()) {
        // 处理原始值和函数(typeof 数组会返回object)
        if (typeof target !== 'object' || target === null) {
            return target;
        }
        let clone;
        // 处理循环引用
        if (map.has(target)) {
            return map.get(target);
        }
        // 处理数组
        if (Array.isArray(target)) {
            clone = [];
            map.set(target, clone);
            target.forEach((item, index) => {
                clone[index] = deepClone(item, map);
            });
            return clone;
        }
        let clone;
        // 处理日期对象
        if (target instanceof Date) {
            clone = new Date(target.getTime());
            map.set(target, clone);
            return clone;
        }
        // 处理数组
        if (Array.isArray(target)) {
            clone = [];
            map.set(target, clone);
            target.forEach((item, index) => {
                clone[index] = deepClone(item, map);
            });
            return clone;
        }
        // 处理正则表达式
        if (target instanceof RegExp) {
            clone = new RegExp(target);
            map.set(target, clone);
            return clone;
        }
        // 处理日期对象
        if (target instanceof Date) {
            clone = new Date(target.getTime());
            map.set(target, clone);
            return clone;
        }
        // 处理函数 (直接使用函数的引用)
        if (typeof target === 'function') {
            return target;
        }
        // 处理正则表达式
        if (target instanceof RegExp) {
            clone = new RegExp(target);
            map.set(target, clone);
            return clone;
        }
        // 处理其他对象(普通对象、类实例等)
        clone = Object.create(Object.getPrototypeOf(target));
        map.set(target, clone);
        // 处理函数 (直接使用函数的引用)
        if (typeof target === 'function') {
            return target;
        }
        // 获取所有属性(包括 Symbol 类型)
        const allKeys = [...Object.getOwnPropertyNames(target), ...Object.getOwnPropertySymbols(target)];
        // 处理其他对象(普通对象、类实例等)
        clone = Object.create(Object.getPrototypeOf(target));
        map.set(target, clone);
        allKeys.forEach(key => {
            const descriptor = Object.getOwnPropertyDescriptor(target, key);
            if (descriptor && descriptor.enumerable) {
                // 递归复制属性值
                clone[key] = deepClone(target[key], map);
            }
        });
        // 获取所有属性(包括 Symbol 类型)
        const allKeys = [...Object.getOwnPropertyNames(target), ...Object.getOwnPropertySymbols(target)];
        return clone;
    }
        allKeys.forEach(key => {
            const descriptor = Object.getOwnPropertyDescriptor(target, key);
            if (descriptor && descriptor.enumerable) {
                // 递归复制属性值
                clone[key] = deepClone(target[key], map);
            }
        });
    // uni-app 使用 封装请求函数 使用传统函数当作回调需要传that,箭头函数不需要
    doRequest(url, data, resFunction, errFunction, method, that) {
        that = that || this;
        let errorTip = null;
        uni.showLoading({
            title: '加载中...'
        })
        uni.request({
            method: method || "GET",
            url: this.serverUrl + url,
            data: data || "",
            success: (res) => {
                if (typeof resFunction === 'function') {
                    resFunction.call(that, res)
                } else if (typeof errFunction === 'undefined' || errFunction === null) {
                    return
                } else {
                    throw new TypeError("访问成功回调函数类型不为函数或者空!")
                }
            },
            fail: (err) => {
                console.error(err)
                errorTip = () => {
                    uni.showToast({
                        icon: "none",
                        title: err.errMsg || err.data.message || "接口异常!",
                        duration: 2000
                    })
                }
                if (typeof errFunction === 'function') {
                    errFunction.call(that, err)
                } else if (typeof errFunction === 'undefined' || errFunction === null) {
                    return
                } else {
                    throw new TypeError("访问失败回调函数类型不为函数或者空!")
                }
        return clone;
    }
            },
            complete() {
                setTimeout(() => {
                    uni.hideLoading()
                    if (errorTip != null) {
                        errorTip()
                    }
                }, 1000)
            }
        })
    }
    // uni-app 使用 封装请求函数 使用传统函数当作回调需要传that,箭头函数不需要
    doRequest(url, data, resFunction, errFunction, method, that) {
        that = that || this;
        let errorTip = null;
        uni.showLoading({
            title: '加载中...'
        })
        uni.request({
            method: method || "GET",
            url: this.serverUrl + url,
            data: data || "",
            success: (res) => {
                if (typeof resFunction === 'function') {
                    resFunction.call(that, res)
                } else if (typeof errFunction === 'undefined' || errFunction === null) {
                    return
                } else {
                    throw new TypeError("访问成功回调函数类型不为函数或者空!")
                }
            },
            fail: (err) => {
                console.error(err)
                errorTip = () => {
                    uni.showToast({
                        icon: "none",
                        title: err.errMsg || err.data.message || "接口异常!",
                        duration: 2000
                    })
                }
                if (typeof errFunction === 'function') {
                    errFunction.call(that, err)
                } else if (typeof errFunction === 'undefined' || errFunction === null) {
                    return
                } else {
                    throw new TypeError("访问失败回调函数类型不为函数或者空!")
                }
    // uni-app 播放音频封装
    playSound(e) {
        const innerAudioContext = uni.createInnerAudioContext();
        if (e == 1) {
            innerAudioContext.src = '/static/success.wav';
        } else {
            innerAudioContext.src = '/static/jingbao.wav';
        }
        innerAudioContext.play(); // 播放音频
    }
            },
            complete() {
                setTimeout(() => {
                    uni.hideLoading()
                    if (errorTip != null) {
                        errorTip()
                    }
                }, 1000)
            }
        })
    }
    // uni-app 播放音频封装
    playSound(e) {
        const innerAudioContext = uni.createInnerAudioContext();
        if (e == 1) {
            innerAudioContext.src = '/static/success.wav';
        } else {
            innerAudioContext.src = '/static/jingbao.wav';
        }
        innerAudioContext.play(); // 播放音频
    }
}
export const CommonUtils = Object.freeze(new commonUtils());
export const CommonUtils = new commonUtils()