zrg
2026-01-27 2f179987eee898e1ca4c1565e303bdc0d9b1206c
优化员工签到到,上模单
3个文件已修改
1784 ■■■■■ 已修改文件
manifest.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/EmployeeRecords/EmployeeRecordsBill.vue 1768 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/MJGL/shangmudan/MouldUpperBill.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manifest.json
@@ -2,8 +2,8 @@
    "name" : "智云LMES",
    "appid" : "__UNI__B002F49",
    "description" : "",
    "versionName" : "2.0.61",
    "versionCode" : 261,
    "versionName" : "2.0.62",
    "versionCode" : 262,
    "transformPx" : false,
    /* 5+App特有相关 */
    "app-plus" : {
pages/EmployeeRecords/EmployeeRecordsBill.vue
@@ -1,18 +1,24 @@
<template>
    <view>
    <view class="form">
        <view class="form-base-info">
            <view class="form-item">
                <view class="title">条码</view>
                <view class="right">
                    <input type="text" :focus="HBarCodeFocus" v-model="HBarCode"
                        @confirm="GetMeesageByBarCode(HBarCode)" />
                <view class="right" style="width: 350rpx;">
                    <input type="text" :focus="HBarCodeFocus" v-model="hform.HBarCode" placeholder="请扫描(或输入)条码"
                        @confirm="getHBarCodeData(hform.HBarCode)" />
                </view>
                <view class="right-icon">
                    <uni-icons type="scan"
                        style="background-color: #3A78FF;padding: 6rpx;color: #fff;border-radius: 100%;" size="20"
                        @click="toScanCode2"></uni-icons>
                    style="margin-left: 10rpx;background-color: #3A78FF;padding: 6rpx;color: #fff;border-radius: 100%;"
                    size="20" @click="toScanCode"></uni-icons>
                </view>
            <view class="tabs">
                <view :class="tabs == 0 ? 'on':''" @tap="() => { tabs = 0; reFocusBarCode(); }">单据信息</view>
                <view :class="tabs == 1 ? 'on':''" @tap="() => { tabs = 1; reFocusBarCode(); }">工单信息</view>
                <view :class="tabs == 2 ? 'on':''" @tap="() => { tabs = 2; reFocusBarCode(); }">制单信息</view>
            </view>
            <!-- 单据信息 -->
            <view v-if="tabs == 0">
            <view class="form-item">
                <view class="title">角色</view>
                <view class="right">
@@ -23,39 +29,44 @@
                </view>
            </view>
            <view class="form-item">
                <view class="title">生产车间:</view>
                    <view class="title"><text>*</text>生产车间:</view>
                <view class="right">
                    <uni-combox :candidates="arrayHDeptName" placeholder="请选择车间" v-model="hform.HDeptName"
                        <uni-combox :candidates="arrayHDeptName" placeholder="请选择部门" v-model="hform.HDeptName"
                        @input="HDeptNameChange"></uni-combox>
                </view>
            </view>
            <view class="form-item">
                <view class="title">签到人员:</view>
                    <view class="title"><text>*</text>签到人员:</view>
                <view class="right">
                    <uni-combox :candidates="arrayHEmpName" placeholder="请选择签到人员" v-model="hform.HEmpName"
                        <uni-combox :candidates="arrayHEmpName" placeholder="请选择操作员" v-model="hform.HEmpName"
                        @input="HEmpNameChange"></uni-combox>
                </view>
            </view>
            <view class="form-item">
                <view class="title">班组:</view>
                    <view class="title"><text>*</text>生产资源:</view>
                    <view class="right">
                        <uni-combox :candidates="arrayHSourceName" placeholder="请选择生产资源" v-model="hform.HSourceName"
                            @input="HSourceNameChange"></uni-combox>
                    </view>
                </view>
                <view class="form-item">
                    <view class="title"><text>*</text>生产班组:</view>
                <view class="right">
                    <uni-combox :candidates="arrayHGroupName" placeholder="请选择班组" v-model="hform.HGroupName"
                        @input="HGroupNameChange"></uni-combox>
                </view>
            </view>
            <view class="form-item">
                <view class="title">班次:</view>
                    <view class="title"><text>*</text>生产班次:</view>
                <view class="right">
                    <uni-combox :candidates="arrayHShiftsName" placeholder="请选择班次" v-model="hform.HShiftsName"
                        @input="HShiftsNameChange"></uni-combox>
                </view>
            </view>    
            <view class="form-item">
                <view class="title">生产资源:</view>
                    <view class="title"><text>*</text>模具实际出数:</view>
                <view class="right">
                    <uni-combox :candidates="arrayHSourceName" placeholder="请选择生产资源" v-model="hform.HSourceName"
                        @input="HSourceNameChange"></uni-combox>
                        <input name="HMouldRelQty" v-model="hform.HMouldRelQty" />
                </view>
            </view>    
            <view class="form-item">
@@ -66,70 +77,9 @@
                </view>
            </view>    
            <view class="form-item">
                <view class="title">日期</view>
                <view class="right disabled">
                    <input type="text" disabled :value="hform.HDate" />
                </view>
            </view>
            <view class="form-item">
                <view class="title">单据号</view>
                <view class="right disabled">
                    <input type="text" disabled :value="hform.HBillNo" />
                </view>
            </view>
        </view>
        <view class="tabs">
            <view :class="tabs == 0 ? 'on':''" @tap="tabs = 0">机台信息</view>
            <view :class="tabs == 1 ? 'on':''" @tap="tabs = 1">工单信息</view>
            <view :class="tabs == 2 ? 'on':''" @tap="tabs = 2">制单信息</view>
        </view>
        <!-- 装箱信息 -->
        <view v-if="tabs == 1" class="work-order-cards">
                    <view v-for="(item, index) in listData" :key="item.index" class="work-order-card">
                        <view class="card-header">
                            <text class="card-title">工单信息 {{ index + 1 }}</text>
                            <checkbox :checked="item.checked" style="transform:scale(0.8)" color="#3A78FF"
                                @change="onCardCheckChange(item, index)" />
                        </view>
                        <view class="card-content">
                            <view class="card-row">
                                <text class="card-label">流转卡号:</text>
                                <text class="card-value">{{ item['流转卡号'] || '-' }}</text>
                            </view>
                            <view class="card-row">
                                <text class="card-label">物料代码:</text>
                                <text class="card-value">{{ item['物料代码'] || '-' }}</text>
                            </view>
                            <view class="card-row">
                                <text class="card-label">物料名称:</text>
                                <text class="card-value">{{ item['物料名称'] || '-' }}</text>
                            </view>
                            <view class="card-row">
                                <text class="card-label">规格型号:</text>
                                <text class="card-value">{{ item['规格型号'] || '-' }}</text>
                            </view>
                            <view class="card-row">
                                <text class="card-label">数量:</text>
                                <text class="card-value">{{ item['数量'] || '0' }}</text>
                            </view>
                            <view class="card-row">
                                <text class="card-label">生产资源:</text>
                                <text class="card-value">{{ item['生产资源'] || '-' }}</text>
                            </view>
                        </view>
                    </view>
                    <view v-if="listData.length === 0" class="empty-card">
                        <uni-icons type="info" size="30" color="#999"></uni-icons>
                        <text class="empty-text">暂无工单信息</text>
                        <text class="empty-tip">请先扫描条码获取工单信息</text>
                    </view>
                </view>
        <view v-if="tabs == 0" class="machine-info-container">
            <view class="form-item" v-if="false">
                <view class="title">设备ID:</view>
                    <view class="title">设备编号:</view>
                <view class="righton">
                    <input name="HEquipID" disabled v-model="hform.HEquipID" />
                        <input name="HEquipNumber" disabled v-model="hform.HEquipNumber" />
                </view>
            </view>
            <view class="form-item">
@@ -156,291 +106,182 @@
                    <input name="HMouldState" disabled v-model="hform.HMouldState" />
                </view>
            </view>
            <!--                <label class="checkbox" style="float: right;">
                    <checkbox :checked="hform.chkHBarflag" style="transform:scale(0.8)" disabled color="#4f81fc" />条码核对
                </label> -->
                <view class="form-item">
                    <view class="title">单据号:</view>
                    <view class="righton">
                        <input name="HBillNo" disabled v-model="hform.HBillNo" />
        </view>
        <!-- 制单信息 -->
                </view>
                <view class="form-item">
                    <view class="title">单据日期:</view>
                    <view class="righton">
                        <picker mode="date" v-model="hform.HDate" @change="HDateChange">
                            <input disabled v-model="hform.HDate" placeholder="请选择日期" />
                        </picker>
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">备注:</view>
                    <view class="right">
                        <textarea name="HRemark" v-model="hform.HRemark" auto-height placeholder="请输入备注"></textarea>
                    </view>
                </view>
            </view>
            <!-- 模具信息 -->
            <view v-if="tabs == 1">
                <view class="card-list" :style="{height: `${listTableHeight}px`, overflow: 'auto'}">
                    <!-- 卡片列表 -->
                    <view v-for="(item, index) in listData" :key="index" class="card-item">
                        <uni-card style="margin: 10rpx 0;">
                            <view class="card-content">
                                <view class="card-row">
                                    <text class="card-label">流转卡号:</text>
                                    <text class="card-value">{{ item['流转卡号'] || '-' }}</text>
                                </view>
                                <view class="card-row">
                                    <text class="card-label">物料代码:</text>
                                    <text class="card-value">{{ item['物料代码'] || '-' }}</text>
                                </view>
                                <view class="card-row">
                                    <text class="card-label">物料名称:</text>
                                    <text class="card-value">{{ item['物料名称'] || '-' }}</text>
                                </view>
                                <view class="card-row">
                                    <text class="card-label">规格型号:</text>
                                    <text class="card-value">{{ item['规格型号'] || '-' }}</text>
                                </view>
                                <view class="card-row">
                                    <text class="card-label">数量:</text>
                                    <text class="card-value">{{ item['数量'] || '0' }}</text>
                                </view>
                                <view class="card-row">
                                    <text class="card-label">生产资源:</text>
                                    <text class="card-value">{{ item['生产资源'] || '-' }}</text>
                                </view>
                            </view>
                        </uni-card>
                    </view>
                    <view class="over" v-if="listData.length == 0">暂无工单信息</view>
                </view>
            </view>
        <view v-if="tabs == 2">
            <view class="bill-info">
                <view class="form-item">
                    <view class="title">创建日期</view>
                    <view class="right">
                        <uni-datetime-picker type="date" v-model="hform.HDate">
                            <input type="text" v-model="hform.HDate" disabled />
                        </uni-datetime-picker>
                    <view class="title">制单人:</view>
                    <view class="righton">
                        <input v-model="hform.HMaker" disabled />
                    </view>
                </view>
            </view>
            <view class="bill-info">
                <view class="form-item">
                    <view class="title">创建人</view>
                    <view class="right disabled">
                        <input type="text" disabled :value="hform.HMaker" />
                    <view class="title">制单日期:</view>
                    <view class="righton">
                        <input v-if="hform.HMakeDate" v-model="hform.HMakeDate.substr(0,10)" disabled />
                        <input v-else v-model="hform.HMakeDate" disabled />
                    </view>
                </view>
            </view>
            <view class="bill-info">
                <view class="form-item">
                    <view class="title">修改日期</view>
                    <view class="right">
                        <uni-datetime-picker type="date" v-model="hform.HUpDateDate">
                            <input type="text" v-model="hform.HDate" disabled />
                        </uni-datetime-picker>
                    <view class="title">修改人:</view>
                    <view class="righton">
                        <input v-model="hform.HUpDater" disabled />
                    </view>
                </view>
            </view>
            <view class="bill-info">
                <view class="form-item">
                    <view class="title">修改人</view>
                    <view class="right disabled">
                        <input type="text" disabled :value="hform.HUpDater" />
                    <view class="title">修改日期:</view>
                    <view class="righton">
                        <input v-if="hform.HUpDateDate" v-model="hform.HUpDateDate.substr(0,10)" disabled />
                        <input v-else v-model="hform.HUpDateDate" disabled />
                    </view>
                </view>
            </view>
            <view class="bill-info">
                <view class="form-item">
                    <view class="title">修改日期</view>
                    <view class="right">
                        <uni-datetime-picker type="date" v-model="hform.HCheckDate">
                            <input type="text" v-model="hform.HDate" disabled />
                        </uni-datetime-picker>
                    <view class="title">审核人:</view>
                    <view class="righton">
                        <input v-model="hform.HChecker" disabled />
                    </view>
                </view>
            </view>
            <view class="bill-info">
                <view class="form-item">
                    <view class="title">修改人</view>
                    <view class="right disabled">
                        <input type="text" disabled :value="hform.HChecker" />
                    </view>
                </view>
            </view>
            <view class="bill-info">
                <view class="form-item">
                    <view class="title">单据号</view>
                    <view class="right disabled">
                        <input type="text" disabled :value="hform.HBillNo" />
                    </view>
                </view>
            </view>
            <view class="bill-info">
                <view class="form-item">
                    <view class="title">组织</view>
                    <view class="right disabled">
                        <input type="text" disabled :value="hform.HStockOrgName" />
                    </view>
                    <view class="title">审核日期:</view>
                    <view class="righton">
                        <input v-if="hform.HCheckDate" v-model="hform.HCheckDate.substr(0,10)" disabled />
                        <input v-else v-model="hform.HCheckDate" disabled />
                </view>
            </view>
        </view>
        <view class="bottom-btn" id="bottom-btn">
            <button :class="EnableSubmit?'btn-a':'btn-c'" :disabled="!EnableSubmit" size="mini"
                @tap="cmdSubmit">提交</button>
            <view style="flex: 1;"></view>
            <!-- <button class="btn-d" size="mini" @tap="cmdDelete">删除</button> -->
            <button class="btn-c" size="mini" @tap="cmdExit">退出</button>
        </view>
        <!-- 打印模块 -->
        <labelPrinterComponentVue ref="labelPrinter" :printInfo="printInfo" :printMode="'cpcl'">
        </labelPrinterComponentVue>
        <!-- 打印机选择列表 -->
        <view v-if="maskShow" class="uni-mask" @tap="maskShow = false">
            <scroll-view class="uni-scroll_box" scroll-y>
                <view class="uni-list-box" v-for="(device, index) in discoveredDevices" :key="index"
                    @tap="connectBT(device)">
                    <view class="uni-list_name">名称:{{ device.name }}</view>
                    <view class="uni-list_item">{{ connectedDeviceId === device.address?'已连接':'未连接' }}</view>
                </view>
            </scroll-view>
        </view>
        <view v-if="showResultTable" class="result-modal">
            <view class="modal-mask" @tap="closeResultTable"></view>
            <view class="modal-content">
                <view class="modal-header">
                    <text class="modal-title">签到结果</text>
                    <uni-icons type="close" size="20" @tap="closeResultTable"></uni-icons>
                </view>
                <view class="modal-body">
                    <zb-table :fit="true" :style="{height: '400px'}" :columns="resultTableColumns"
                        :data="resultTableData" :show-header="true" :border="true" :row-key="row => row.index" />
                </view>
                <view class="modal-footer">
                    <button class="btn-a" size="mini" @tap="toAddNew">新增</button>
                    <button class="btn-a" size="mini" @tap="search">打印</button>
                    <view style="flex: 1;"></view>
                    <button class="btn-c" size="mini" @tap="closeResultTable">关闭</button>
            <view class="bottom-btn">
                <button v-if="btnType == 1 && !isEdit" class="btn-a" size="mini" @tap="submit">提交</button>
                <button v-if="btnType != 1 && !isEdit" class="btn-a" size="mini" @tap="ifEdit">修改</button>
                <button v-if="btnType != 1 && isEdit" class="btn-a" size="mini" @tap="submit">提交</button>
                <button class="btn-c" size="mini" @tap="goBack">退出</button>
                </view>
            </view>
        </view>
    </view>
</template>
<script>
    import dayjs from 'dayjs'
    import getDateTime from '@/utils/getdateTime.js';
    import {
        getUserInfo
    } from "../../utils/auth";
    } from "@/utils/auth.js";
    import dayjs from 'dayjs'
    import {
        CommonUtils
    } from "@/utils/common.js"
    import {
        MpaasScan
    } from "@/utils/mpaasScan.js"
    import labelPrinterComponentVue from "@/components/labelPrinterComponent/labelPrinterComponent.vue"
    import getdateTime from '../../utils/getdateTime';
    export default {
        components: {
            labelPrinterComponentVue
        },
        data() {
            return {
                serverUrl: uni.getStorageSync('serverUrl') || 'http://47.96.97.237/API',
                // 计算列表高度
                bottomBtnTop: 0,
                listTableTop: 0,
                // 公共变量
                tabs: 0,
                userInfo: getUserInfo(),
                serverUrl: uni.getStorageSync('serverUrl') || 'http://47.96.97.237/API',
                linterid: '',
                HBillNo: '',
                btnType: 1, //1新增,3修改
                showmore: false,
                HBarCodeFocus: false,
                arrayHDeptName: [], //部门
                HDeptNameList: [],
                arrayHEmpName: [], //员工
                arrayHEmpName: [], //发现人/负责人
                HEmpNameList: [],
                arrayHSourceName: [], //生产资源
                HSourceNameList: [],
                arrayHGroupName: [], //班组
                HGroupNameList: [],
                arrayHShiftsName: [], //班次
                HShiftsNameList: [],
                arrayHSourceName: [], //生产资源
                HSourceNameList: [],
                arrayHProcName: [], //工序
                HProcNameList: [],
                
                maskShow:false,
                printInfo:false,
                EnableScanBarCodePack: true,
                EnableSubmit: true,
                HBarCodePackFocus: false,
                HBarCodeFocus: false,
                HBarCode: '', // 包条码
                tabs: 0,
                HBillType: '4616',
                HBillSubType: '1', //子类型(1装箱、2组托)
                OperationType: 1, //操作类型(1新增、2从缓存列表中返回)
                HMaterNumber_Pack: "", //托条码对应物料代码
                listOption: [],
                listData: [],
                columns: [{
                        type: 'selection',
                        fixed: true,
                        width: 50
                    },
                    {
                        name: 'index',
                        label: '序号',
                        width: 60,
                        hidden: true
                    },
                    {
                        name: '流转卡号',
                        label: '流转卡号',
                        width: 100,
                    },
                    {
                        name: '数量',
                        label: '数量',
                        width: 100,
                    },
                    {
                        name: '物料代码',
                        label: '物料代码',
                        width: 100,
                    },
                    {
                        name: '物料名称',
                        label: '物料名称',
                        width: 100,
                    },
                    {
                        name: '规格型号',
                        label: '规格型号',
                        width: 100,
                    },
                    {
                        name: '数量',
                        label: '数量',
                        width: 100,
                    },
                    {
                        name: '生产资源',
                        label: '生产资源',
                        width: 100,
                    }
                ],
                selectedRows: [], // 存储选中的数据
                titleData: [], //不需要显示的字段
                OperationType: 1, //从缓存列表中返回数据类型(1新增、2从缓存列表中返
                //展示表单
                showResultTable: false, // 控制结果表格显示
                resultTableData: [], // 结果表格数据
                resultTableColumns: [{
                        name: '设备编码',
                        label: '设备编码',
                        width: 120,
                    },
                    {
                        name: '设备名称',
                        label: '设备名称',
                        width: 120,
                    },
                    {
                        name: '签到角色',
                        label: '签到角色',
                        width: 100,
                    },
                    {
                        name: '生产资源名称',
                        label: '生产资源名称',
                        width: 100,
                    }
                ],
                //
                isEdit: false,
                listOption: [], // 列表选项
                listData: [], // 表格数据
                selectedRows: [], // 表格选中的数据
                roleOptions: [], // 下拉框选项
                roleList: [], // 完整角色列表(包含ID)
                // 表单提交值
                // 添加用户已绑定角色数据
                userBoundRoles: [], // 用户已绑定的角色ID列表
                HBillType: 4616,
                hform: {
                    HDate: dayjs(new Date()).format('YYYY-MM-DD'),
                    HMaker: getUserInfo()['Czymc'],
                    HInterID: '',
                    HStockOrgName: uni.getStorageSync("Organization"),
                    HStockOrgID: uni.getStorageSync("OrganizationID"),
                    HQualityApproval: false,
                    HMainID: '',
                    HSubID: '',
                    HSourceBillSEQ: '',
                    HBillNo: '',
                    HEmpID: getUserInfo()['HEmpID'] || '',
                    HEmpName: getUserInfo()['Czymc'] || '',
                    HEmpNumber: getUserInfo()['Czybm'] || uni.getStorageSync("HEmpNumber"),
                    HCheckEmpName: '',
                    HRemark: '',
                    HProduceDate: dayjs(new Date()).format('YYYY-MM-DD'),
                    //自定义
                    HMouldID: 0,
                    HMouldName: '',
                    HMouldNumber: '',
                    HMouldNo: '',
                    HMouldState: '',
                    HEquipID: 0,
                    HEquipName: '',
                    HDate: getDateTime.dateTimeStr('y-m-d'),
                    HBarCode: '',
                    HDeptName: uni.getStorageSync('HDeptName'),
                    HDeptID: uni.getStorageSync('HDeptID'),
                    HEmpName: uni.getStorageSync('HEmpName'),
                    HEmpID: uni.getStorageSync('HEmpID'),
                    HSourceID: uni.getStorageSync('HSourceID'),
                    HSourceName: uni.getStorageSync('HSourceName'),
                    HProcID: uni.getStorageSync('HProcID'),
@@ -449,79 +290,215 @@
                    HGroupName: uni.getStorageSync('HGroupName'),
                    HShiftsID: 0,
                    HShiftsName: '',
                    HDeptName: uni.getStorageSync('HDeptName'),
                    HDeptID: uni.getStorageSync('HDeptID'),
                    //HEmpID:0,
                    //HEmpName:'',
                    HMouldID: 0,
                    HMouldName: '',
                    HMouldNumber: '',
                    HMouldNo: '',
                    HMouldState: '',
                    HEquipID: 0,
                    HEquipNumber: '',
                    HEquipName: '',
                    HSignInReason: '',
                    HSignRemark: '',
                    HMouldRelQty: 0,
                    HOrgID: uni.getStorageSync('OrganizationID'),
                    HMaterID: 0,
                    HMaterNumber: '',
                    HMaterName: '',
                    HMaterModel: '',
                    HMaker: '',
                    HMakeDate: '',
                    HUpDater: '',
                    HUpDateDate: '',
                    HChecker: '',
                    HCheckDate: '',
                    HCloseMan: '',
                    HCloseDate: '',
                    HDeleteMan: '',
                    HDeleteDate: '',
                    HRoles: [],
                    eventType: 'Add'
                }
            }
                },
                roleOptions: [],
                // 分页模块元数据
                paginationMeta: {
        onLoad(e) {
            this.HBarCodeFocus = true
            this.getHDeptList()
            this.getHEmpList()
            this.getHSourceList()
            this.getHGroupList()
            this.getHShiftsList()
            this.getHProcList()
            //先获取角色列表,然后获取用户绑定的角色
            this.getRoleList().then(() => {
                this.getUserBoundRoles();
            });
            this.hform.HMaker = uni.getStorageSync('HUserName')
            console.log(e, this.userInfo)
            if (e.linterid) {
                this.btnType = 3
                this.linterid = e.linterid
                this.HBillNo = e.HBillNo
            } else {
                this.getNewData()
            }
            this.tabs = 0
        },
        // ==================== 计算属性 ====================
        computed: {
            // 计算表格高度
            listTableHeight: {
                get() {
                    return this.bottomBtnTop - this.listTableTop - 10
                }
            }
        },
        methods: {
            onCardCheckChange(item, index) {
                            item.checked = !item.checked;
                            if (item.checked) {
                                this.selectedRows.push(item);
                            } else {
                                const idx = this.selectedRows.findIndex(row => row.index === item.index);
                                if (idx > -1) {
                                    this.selectedRows.splice(idx, 1);
                                }
                            }
                            console.log('当前选中的行:', this.selectedRows);
            //扫码
            toScanCode() {
                var mpaasScanModule = uni.requireNativePlugin("Mpaas-Scan-Module")
                mpaasScanModule.mpaasScan({
                    'hideAlbum': true,
                    'timeoutInterval': '10', //超时时间
                    'timeoutText': '未识别到二维码' //超时提醒
                }, (ret) => {
                    console.log(ret.resp_result)
                    this.hform.HBarCode = ret.resp_result
                    this.getHBarCodeData(ret.resp_result)
                })
                        },
            onTableRowClickHandler(row, index) {
                console.log('row: ', row);
                if (!this.listData[index].checked) {
                    this.$set(this.listData[index], 'checked', true)
                } else {
                    this.listData[index].checked = !this.listData[index].checked
                }
            },
            async HBarCodeFocusRefresh() {
                this.HBarCode = ''
            //光标
            async refreshBarCodeState() {
                this.HBarCodeFocus = false
                await this.$nextTick()
                await this.$nextTick(() => {
                this.HBarCodeFocus = true
                    this.hform.HBarCode = ""
                })
            },
            async HBarCodePackFocusRefresh() {
                this.HBarCode_Pack = ''
                this.HBarCodePackFocus = false
                await this.$nextTick()
                this.HBarCodePackFocus = true
            // 添加一个重新聚焦的方法
            reFocusBarCode() {
                this.HBarCodeFocus = false;
                this.$nextTick(() => {
                    this.HBarCodeFocus = true;
                });
            },
            //#region 下拉框
            //日期
            HDateChange(e) {
                console.log(e.detail.value)
                this.hform.HDate = e.detail.value
            },
            getHBarCodeData(HBarCode) {
                uni.request({
                    url: this.serverUrl + '/Sc_EmployeeSignInNoteBillController/txtHBarCode_KeyDown',
                    data: {
                        HBarCode: this.hform.HBarCode
                    },
                    success: (res) => {
                        if (res.data.code == 1) {
                            var data = res.data.data[0];
                            this.hform.HEquipID = data.HInterID
                            this.hform.HEquipNumber = data.设备代码
                            this.hform.HEquipName = data.设备名称
                            this.hform.HSourceID = data.HSourceID
                            this.hform.HSourceName = data.生产资源名称
                            this.getHMouldList()
                            this.getHIcmoList()
                            uni.showToast({
                                title: res.data.Message,
                                icon: 'none'
                            })
                        } else {
                            uni.showToast({
                                title: res.data.Message,
                                icon: 'none'
                            })
                        }
                    },
                    fail: (res) => {
                        console.log(res);
                        uni.showToast({
                            title: '接口请求失败',
                            icon: 'none'
                        })
                    },
                });
            },
            //获取模具信息
            getHMouldList() {
                uni.request({
                    url: this.serverUrl + '/Sc_EmployeeSignInNoteBillController/Get_HMouldList',
                    data: {
                        HInterID: this.hform.HEquipID,
                        UserNmae: uni.getStorageSync('Czybm'),
                    },
                    success: (res) => {
                        if (res.data.code == 1) {
                            var data = res.data.data[0];
                            this.hform.HMouldID = data.模具id
                            this.hform.HMouldNo = data.模具编码
                            this.hform.HMouldName = data.模具名称
                            this.hform.HMouldState = data.模具状态
                        } else {
                            uni.showToast({
                                title: res.data.Message,
                                icon: 'none'
                            })
                        }
                    },
                    fail: (res) => {
                        console.log(res);
                        uni.showToast({
                            title: '接口请求失败',
                            icon: 'none'
                        })
                    },
                });
            },
            //获取生产工单
            getHIcmoList() {
                uni.request({
                    url: this.serverUrl + '/Sc_EmployeeSignInNoteBillController/Get_HIcmoList',
                    data: {
                        HInterID: this.hform.HSourceID,
                        UserNmae: uni.getStorageSync('Czybm'),
                    },
                    success: (res) => {
                        if (res.data.code == 1) {
                            var data = res.data.data;
                            console.log(data)
                            for (let i = 0; i < data.length; i++) {
                                this.listData.push(Object.assign(data[i], {
                                    index: i
                                }))
                            }
                        } else {
                            uni.showToast({
                                title: res.data.Message,
                                icon: 'none'
                            })
                        }
                    },
                    fail: (res) => {
                        console.log(res);
                        uni.showToast({
                            title: '接口请求失败',
                            icon: 'none'
                        })
                    },
                });
            },
            //获取使用部门数据
            async getHDeptList() {
                try{
                    let res = await CommonUtils.doRequest2Async({
                        url: '/PublicPageMethod/DeptList',
            getHDeptList() {
                uni.request({
                    url: this.serverUrl + '/PublicPageMethod/DeptList',
                        data: {
                            sWhere: "where HStopFlag=0 and HEndFlag=1 and HUSEORGID = " + uni.getStorageSync(
                                'OrganizationID') + ""
                        },
                    })
                    console.log('res: ', res);
                    success: (res) => {
                    if (res.data.count == 1) {
                        console.log('res.data.data: ', res.data.data);
                        this.HDeptNameList = res.data.data
                        // for (var i = 0; i < res.data.data.length; i++) {
                        //     this.arrayHDeptName[i] = res.data.data[i].HName
                        // }
                        this.arrayHDeptName = res.data.data.map(item => item.HName)
                            for (var i = 0; i < res.data.data.length; i++) {
                                this.arrayHDeptName[i] = res.data.data[i].HName
                            }
                        this.$forceUpdate();
                    } else {
                        uni.showToast({
@@ -529,13 +506,15 @@
                            icon: 'none'
                        })
                    }
                }catch(err) {
                    },
                    fail: (res) => {
                        console.log(res);
                    uni.showToast({
                        title: err,
                            title: '接口请求失败',
                        icon: 'none'
                    })
                }
                    },
                });
            },
            //选择使用部门
            HDeptNameChange(e) {
@@ -546,24 +525,19 @@
                }
            },
            //操作员、负责人
            async getHEmpList() {
                try{
                    let res = await CommonUtils.doRequest2Async({
                        url: '/Web/GetEmployeeList_Json',
            getHEmpList() {
                uni.request({
                    url: this.serverUrl + '/Web/GetEmployeeList_Json',
                        data: {
                            Employee: '',
                            HGroupID: 0
                        },
                    })
                    console.log('res: ', res);
                    success: (res) => {
                    if (res.data.count == 1) {
                        console.log('res.data.data: ', res.data.data);
                        this.HEmpNameList = res.data.data
                        // for (var i = 0; i < res.data.data.length; i++) {
                        //     this.arrayHDeptName[i] = res.data.data[i].HName
                        // }
                        this.arrayHEmpName = res.data.data.map(item => item.HName)
                            for (var i = 0; i < res.data.data.length; i++) {
                                this.arrayHEmpName[i] = res.data.data[i].HName
                            }
                        this.$forceUpdate();
                    } else {
                        uni.showToast({
@@ -571,13 +545,15 @@
                            icon: 'none'
                        })
                    }
                }catch(err) {
                    },
                    fail: (res) => {
                        console.log(res);
                    uni.showToast({
                        title: err,
                            title: '接口请求失败',
                        icon: 'none'
                    })
                }
                    },
                });
            },
            //选择操作员
            HEmpNameChange(e) {
@@ -587,7 +563,44 @@
                    }
                }
            },
            //生产资源
            getHSourceList() {
                uni.request({
                    url: this.serverUrl + '/api/newBill/getSourceList',
                    data: {
                        sWhere: " and HUSEORGID = " + uni.getStorageSync('OrganizationID') + ""
                    },
                    success: (res) => {
                        if (res.data.code == 1) {
                            this.HSourceNameList = res.data.data.Gy_Source
                            for (var i = 0; i < res.data.data.Gy_Source.length; i++) {
                                this.arrayHSourceName[i] = res.data.data.Gy_Source[i].生产资源
                            }
                            this.$forceUpdate();
                        } else {
                            uni.showToast({
                                title: res.data.Message,
                                icon: 'none'
                            })
                        }
                    },
                    fail: (res) => {
                        console.log(res);
                        uni.showToast({
                            title: '接口请求失败',
                            icon: 'none'
                        })
                    },
                });
            },
            //选择生产资源
            HSourceNameChange(e) {
                for (var i = 0; i < this.HSourceNameList.length; i++) {
                    if (this.HSourceNameList[i].生产资源 == e) {
                        this.hform.HSourceID = this.HSourceNameList[i].HItemID
                    }
                }
            },
            //班组
            async getHGroupList() {
                try{
@@ -603,9 +616,6 @@
                    if (res.data.count > 0) {
                        console.log('res.data.data: ', res.data.data);
                        this.HGroupNameList = res.data.data
                        // for (var i = 0; i < res.data.data.length; i++) {
                        //     this.arrayHDeptName[i] = res.data.data[i].HName
                        // }
                        this.arrayHGroupName = res.data.data.map(item => item.班组名称)
                        this.$forceUpdate();
                    } else {
@@ -630,7 +640,7 @@
                    }
                }
            },
            //班ci
            //班次
            async getHShiftsList() {
                try{
                    let res = await CommonUtils.doRequest2Async({
@@ -645,9 +655,6 @@
                    if (res.data.count > 0) {
                        console.log('res.data.data: ', res.data.data);
                        this.HShiftsNameList = res.data.data
                        // for (var i = 0; i < res.data.data.length; i++) {
                        //     this.arrayHDeptName[i] = res.data.data[i].HName
                        // }
                        this.arrayHShiftsName = res.data.data.map(item => item.班次名称)
                        this.$forceUpdate();
                    } else {
@@ -664,54 +671,11 @@
                }
                
            },
            //选择班ci
            //选择班次
            HShiftsNameChange(e) {
                for (var i = 0; i < this.HSourceNameList.length; i++) {
                    if (this.HSourceNameList[i].班次名称 == e) {
                        this.hform.HSourceID = this.HSourceNameList[i].HInterID
                    }
                }
            },
            //生产资源
            async getHSourceList() {
                try{
                    let res = await CommonUtils.doRequest2Async({
                        url: '/Gy_Source/list',
                        data: {
                            sWhere: '',
                            user: getUserInfo()['Czymc'] || '',
                        },
                    })
                    console.log('生产资源res: ', res);
                    if (res.data.count > 0) {
                        console.log('生产资源res.data.data: ', res.data.data);
                        this.HSourceNameList = res.data.data
                        // for (var i = 0; i < res.data.data.length; i++) {
                        //     this.arrayHDeptName[i] = res.data.data[i].HName
                        // }
                        this.arrayHSourceName = res.data.data.map(item => item.生产资源名称)
                        this.$forceUpdate();
                    } else {
                        uni.showToast({
                            title: res.data.Message,
                            icon: 'none'
                        })
                    }
                }catch(err) {
                    uni.showToast({
                        title: err,
                        icon: 'none'
                    })
                }
            },
            //选择shengcanziyuan
            HSourceNameChange(e) {
                for (var i = 0; i < this.HSourceNameList.length; i++) {
                    if (this.HSourceNameList[i].生产资源名称 == e) {
                        this.hform.HSourceID = this.HSourceNameList[i].HItemID
                        console.log("HSourceID为",this.hform.HSourceID)
                    }
                }
            },    
@@ -730,9 +694,6 @@
                    if (res.data.count > 0) {
                        console.log('工序res.data.data: ', res.data.data);
                        this.HProcNameList = res.data.data
                        // for (var i = 0; i < res.data.data.length; i++) {
                        //     this.arrayHDeptName[i] = res.data.data[i].HName
                        // }
                        this.arrayHProcName = res.data.data.map(item => item.工序名称)
                        this.$forceUpdate();
                    } else {
@@ -757,9 +718,63 @@
                    }
                }
            },    
            // 获取用户已绑定的角色
            async getUserBoundRoles() {
                try {
                    // 确保角色列表已加载
                    if (!this.roleList || this.roleList.length === 0) {
                        console.log('角色列表未加载,先加载角色列表');
                        await this.getRoleList();
                    }
                    let res = await CommonUtils.doRequest2Async({
                        url: '/Xt_UserGroup/UserGroupInfoList',
                        data: {
                            sWhere: ' and userid = '+getUserInfo()['Czybm']+''
                        },
                    });
            
                    if (res.data.count > 0) {
            
            // 获取角色列表
                        // 提取角色ID
                        const boundRoleIds = res.data.data.map(item => item.GroupId);
                        this.userBoundRoles = boundRoleIds;
                        // 将角色ID转换为角色名称
                        const boundRoleNames = [];
                        for (const roleId of boundRoleIds) {
                            // 在角色列表中查找对应的角色
                            const roleItem = this.roleList.find(r => r.HGroupID == roleId);
                            if (roleItem && roleItem.角色) {
                                boundRoleNames.push(roleItem.角色);
                            }
                        }
                        console.log('用户绑定角色名称: ', boundRoleNames);
                        // 如果是新增模式,设置默认选中的角色
                        if (this.btnType == 1) {
                            this.hform.HRoles = boundRoleNames;
                            console.log('已设置默认角色: ', this.hform.HRoles);
                        }
                        this.$forceUpdate();
                    } else {
                        // 如果没有绑定角色,清空选择
                        if (this.btnType == 1) {
                            this.hform.HRoles = [];
                        }
                        console.log('用户未绑定任何角色');
                    }
                } catch (err) {
                    console.error('获取用户绑定角色失败:', err);
                    uni.showToast({
                        title: err.message || '获取用户角色失败',
                        icon: 'none'
                    });
                }
            },
            // 获取角色信息
            async getRoleList() {
              try {
                let res = await CommonUtils.doRequest2Async({
@@ -767,278 +782,100 @@
                  data: {
                    sWhere: '',
                  },
                })
                console.log('角色列表res: ', res);
                    });
                if (res.data.count > 0) {
                  console.log('角色列表res.data.data: ', res.data.data);
                  // 将接口返回的数据转换为 uni-data-select 需要的格式
                  this.roleOptions = res.data.data.map(item => {
                        // 保存原始角色列表,包含角色ID
                        this.roleList = res.data.data;
                        // 生成下拉框选项
                        this.roleOptions = res.data.data.map(item => {
                    return {
                      value: item.角色 ,  
                      text: item.角色 
                    };
                  });
                        // 更新视图
                  this.$forceUpdate();
                        // 返回Promise以便链式调用
                        return Promise.resolve();
                } else {
                  uni.showToast({
                    title: res.data.Message || '获取角色列表失败',
                    icon: 'none'
                  });
                  // 如果接口失败,可以设置默认选项
                        // 设置空数组
                        this.roleList = [];
                  this.roleOptions = [];
                        // 返回Promise以便链式调用
                        return Promise.reject('获取角色列表失败');
                }
              } catch(err) {
                uni.showToast({
                  title: err.message || '获取角色列表异常',
                  icon: 'none'
                });
                // 异常情况设置默认选项
                    // 设置空数组
                    this.roleList = [];
                this.roleOptions = [];
                    // 返回Promise以便链式调用
                    return Promise.reject(err);
              }
            },
            //#endregion
            
            toScanCode2() {
                MpaasScan.scanCode((scanCode) => {
                    this.HBarCode = scanCode
                    GetMeesageByBarCode(scanCode)
                })
            },
            GetMeesageByBarCode(HBarCode) {
                let sBarCode = this.HBarCode
                if (!sBarCode) {
                    return uni.showToast({
                        icon: 'none',
                        title: '条码不能为空,请扫描条码!',
                    })
                }
                CommonUtils.doRequest2({
                    url: '/Sc_EmployeeSignInNoteBillController/Get_equipmentMes',
            //新增
            getNewData() {
                uni.request({
                    url: this.serverUrl + '/Web/GetMAXNum',
                    data: {
                        "HInterID": this.hform.HInterID,
                        "HBarCode": sBarCode,
                        HBillType: '4616'
                    },
                    resFunction: (res) => {
                        let {
                            data,
                            count,
                            Message
                        } = res.data
                        if (count == 1) {
                            //let data=res.data
                            console.log(sBarCode)
                            console.log(res.data.data[0])
                            var moulddate=res.data.data[0]
                            this.hform.HMouldID = moulddate.模具id
                            this.hform.HMouldNo = moulddate.模具编码
                            this.hform.HMouldName = moulddate.模具名称
                            this.hform.HMouldState = moulddate.模具状态
                            this.GetEquipmentMsg(this.HBarCode)
                    success: (res) => {
                        console.log(res.data)
                        if (res.data.count == 1) {
                            this.hform.HInterID = 0
                            this.hform.HBillNo = res.data.data[0].HBillNo
                            this.hform.HMakeDate = getDateTime.dateTimeStr('y-m-d')
                            this.btnType = 1
                        } else {
                            this.GetEquipmentMsg(this.HBarCode)
                            CommonUtils.playSound(0)
                            this.listData = []
                            this.HBarCodeFocusRefresh()
                            uni.showToast({
                                icon: 'none',
                                title: "模具为空"
                                title: res.data.Message,
                                icon: 'none'
                            })
                        }
                    }
                })
            },
            GetEquipmentMsg(HBarCode)
            {
                CommonUtils.doRequest2({
                    url: '/Sc_EmployeeSignInNoteBillController/APP_Edit_json',
                    data: {
                        "HInterID": this.hform.HInterID,
                        "HBarCode": HBarCode,
                    },
                    resFunction: (res) => {
                        let {
                            data,
                            count,
                            Message
                        } = res.data
                        if (count == 1) {
                            //let data=res.data
                            //console.log(sBarCode)
                            console.log(res.data.data[0])
                            var tabledata=res.data.data[0]
                            this.hform.HEquipID = tabledata[0].设备内码
                            this.hform.HEquipName = tabledata[0].设备名称
                            this.listData = []
                            if (data[1].length > 0) {
                                this.hform.HMaterID = data[1].HMaterID
                                for (let i = 0; i < data[1].length; i++) {
                                    this.listData.push(Object.assign(data[1][i], {
                                        index: i
                                    }))
                                }
                            }
                        } else {
                            CommonUtils.playSound(0)
                            this.listData = []
                            this.HBarCodeFocusRefresh()
                    fail: (res) => {
                        console.log(res);
                            uni.showToast({
                                icon: 'none',
                                title: "工单信息和设备信息为空"
                            })
                        }
                    }
                })
            },
            onRoleChange(e) {
                console.log('选中的角色:', this.hform.HRoles);
            },
            handleSelect(selected, array) {
                this.selectedRows = array
            },
            handleSelectAll(selected, array) {
                this.selectedRows = array
            },
            getMaxNo() {
                CommonUtils.doRequest2({
                    url: "/WEBSController/GetMaxBillNoAndID_Json",
                    data: {
                        "HBillType": this.HBillType
                    },
                    resFunction: (d) => {
                        let {
                            count,
                            data,
                            Message
                        } = d.data
                        if (count == 1) {
                            this.hform.HInterID = data[0].HInterID;
                            this.hform.HBillNo = data[0].HBillNo
                        } else {
                            uni.showModal({
                                title: "温馨提示",
                                showCancel: false,
                                content: Message
                            })
                        }
                    }
                            title: '接口请求失败',
                            icon: 'none'
                })
            },
            submitPreCheck() {
                if (CommonUtils.isEmpty(this.hform.HInterID)) {
                    uni.showToast({
                        icon: 'none',
                        title: '单据内码获取失败,错误的单据内码!'
                    })
                    return false
                }
                if (CommonUtils.isEmpty(this.hform.HBillNo)) {
                    uni.showToast({
                        icon: 'none',
                        title: '单据号获取失败,错误的单据号!'
                    })
                    return false
                }
                if (this.listData.length < 1) {
                    uni.showToast({
                        icon: 'none',
                        title: '没有扫码信息,请先扫描条码,确认无误后再提交!'
                    })
                    return false
                }
                return true
                });
            },
            cmdDelete() {
                console.log('this.selectedRows: ', this.selectedRows);
                if (this.selectedRows.length != 1) {
                    return uni.showToast({
                        icon: 'none',
                        title: '请选择一行记录,进行删除!'
                    })
                }
                uni.showModal({
                    title: '删除确认',
                    content: '确认要删除选中行所有扫码记录?删除后将不可恢复!',
                    success: () => {
                        if (confirm) {
                            CommonUtils.doRequest2({
                                url: '/WEBSController/set_DelPackUnionBill_Temp_Pack_Json',
                                data: {
                                    HInterID: this.hform.HInterID,
                                    HBillType: this.HBillType,
                                    HBarCode: this.selectedRows[0].HBarCode
                                },
                                resFunction: (res) => {
                                    let {
                                        data,
                                        count,
                                        Message
                                    } = res.data
                                    if (count == 1) {
                                        CommonUtils.playSound(1)
                                        uni.showToast({
                                            icon: 'none',
                                            title: Message
                                        })
                                        //this.DisBillEntryList()
                                    } else {
                                        CommonUtils.playSound(0)
                                        uni.showToast({
                                            icon: 'none',
                                            title: Message
                                        })
                                    }
                                }
                            })
                        }
                    }
                })
            },
            async cmdSubmit() {
                let checkRes = this.submitPreCheck()
                if (!checkRes) {
                    return
                }
                this.EnableSubmit = false
                try {
                    debugger
            submit() {
                    this.hform.HInterID = 0
                    for (let i = 0; i < this.hform.HRoles.length; i++) {
                        this.hform.HSignRemark = this.hform.HSignRemark + this.hform.HRoles[i] + ","
                    }
                    let oMain = JSON.stringify(this.hform);
                    console.log("提交的json", oMain)
                    // this.HBillSub[0].HRepairCheckID = this.hform.HRepairCheckMainID
                    // this.HBillSub[0].HManagerID = this.hform.HManagerID
                    // this.HBillSub[0].HRepairCheckContent = this.hform.HRepairCheckMainContent
                    // let sSubStr = JSON.stringify(this.HBillSub);
                    let sMainSub = oMain + ';' + getUserInfo()['OrganizationID'] + ';' + getUserInfo()['Czymc'];
                    await CommonUtils.doRequest2({
                CommonUtils.doRequest2({
                        url: "/Sc_EmployeeSignInNoteBillController/SaveBill_APP",
                        data: {
                            "msg": sMainSub
                        },
                        method: "POST",
                        resFunction: async (res) => {
                    resFunction: (res) => {
                            let {
                                data,
                                count,
@@ -1047,7 +884,7 @@
                            if (count == 1) {
                                uni.showModal({
                                    title: '提示',
                                    content: res.data.Message + '。是否继续新增?',
                                content: res.data.Message + ' 是否继续新增?',
                                    success: (res) => {
                                        if (res.confirm) {
                                            console.log('用户点击确定');
@@ -1056,343 +893,58 @@
                                            })
                                        } else if (res.cancel) {
                                            console.log('用户点击取消');
                                            // setTimeout(() => {
                                            //     uni.navigateBack();
                                            // }, 50)
                                        }
                                    }
                                });
                                // 等待数据获取完成后再显示表格
                                //await this.getResultTableData();
                            } else {
                                uni.showToast({
                                    icon: 'none',
                                    title: Message
                                })
                                this.EnableSubmit = true;
                            }
                        }
                    })
                } catch (error) {
                    console.error('提交失败:', error);
                    this.EnableSubmit = true;
                }
            },
            getResultTableData() {
                CommonUtils.doRequest2({
                    url: '/Sc_EmployeeSignInNoteBillController/GetListPage',
                    data: {
                        "sWhere": 'and HEquipID=' + this.hform.HEquipID,
                        "user": 'admin'
                    },
                    resFunction: (res) => {
                        console.log('结果接口返回:', res);
                        let {
                            data,
                            count,
                            Message
                        } = res.data
                        if (count == 1) {
                            console.log('获取到结果数据:', data);
                            this.resultTableData = data;
                            this.showResultTable = true; // 显示结果表格
                            console.log('showResultTable 设置为:', this.showResultTable);
                        } else {
                            uni.showToast({
                                icon: 'none',
                                title: Message || '获取数据失败'
                            })
                            this.EnableSubmit = true;
                        }
                    }
                })
            },
            // 新增方法
            toAddNew() {
                // 重置数据,准备新增
                this.showResultTable = false;
                this.EnableSubmit = true;
                this.resultTableData = [];
                this.HBarCode_Pack = '';
                this.HBarCode = '';
                this.listData = [];
                this.getMaxNo(); // 重新获取新的单据号
                this.HBarCodePackFocusRefresh(); // 重新聚焦
            },
            // 关闭结果表格
            closeResultTable() {
                this.showResultTable = false;
                                        setTimeout(() => {
                uni.navigateBack();
            },
            cmdExit() {
                uni.navigateBack()
            },
            //打印模块函数
            /**
             * 打印函数
             */
            async search() {
                // #ifndef APP-PLUS
                uni.showModal({
                    content: "不支持蓝牙打印功能,请切换移动设备...",
                })
                return
                // #endif
                if (this.$printer.isConnected() === false) {
                    this.$refs.labelPrinter.openPopup()
                } else {
                    let printContent = []
                    let printInfoBuffer = []
                    let count = 0
                    uni.showLoading()
                    console.log('this.listData: ', this.printListData);
                    for (let listOne of this.printListData) {
                        let Message = await this.getPrintTemplate(listOne.HInterID, listOne.HItemID)
                        printContent.push(Message)
                        count++;
                        if (count == 10) {
                            printInfoBuffer.push(printContent.join("\r\n"))
                            count = 0
                            printContent = []
                                        }, 50)
                        }
                    }
                    uni.hideLoading()
                    printInfoBuffer.push(printContent.join("\r\n"))
                    this.printInfo = JSON.stringify(printInfoBuffer)
                    printInfoBuffer = []
                    await this.$nextTick(() => {
                        this.$refs.labelPrinter.execPrint()
                    })
                }
            },
            /** 获取打印模板
             * @param {Object} HInterID
             * @param {Object} HItemID
             */
            async getPrintTemplate(HInterID, HItemID) {
                console.log('data: ', {
                    HOrginationName: uni.getStorageSync("Organization"),
                    HBillSubType: this.HBillType,
                    HInterID: HInterID,
                    HItemID: HItemID,
                })
                return new Promise((resolve, reject) => {
                    CommonUtils.doRequest2({
                        url: "/Sc_BarCode/Get_BarCodePrintCode_CPCL",
                        data: {
                            HOrginationName: uni.getStorageSync("Organization"),
                            HBillSubType: this.HBillType,
                            HInterID: HInterID,
                            HItemID: HItemID,
                        },
                        resFunction: (res) => {
                            let {
                                Message,
                                count
                            } = res.data
                            if (count == 1) {
                                console.log('Message: ', Message);
                                resolve(Message)
                            });
                            } else {
                                uni.showToast({
                                    icon: 'none',
                                    title: Message
                                })
                                reject();
                            }
                        },
                        errFunction: (err) => {
                            reject();
                        },
                    })
                })
            },
            /**
             * 查找打印机
             */
            async searchLabelPrinter() {
                // 查找打印机
                var that = this
                // 使用openBluetoothAdapter 接口,免去主动申请权限的麻烦
                uni.openBluetoothAdapter({
                    success: async (res) => {
                        await this.checkPermission();
                        console.log('start discovery devices');
                        this.discoveredDevices = [];
                        console.log(res)
                        bluetoothTool.discoveryNewDevice();
                        this.maskShow = true
                    },
                    fail: async (e) => {
                        console.error(e)
                        switch (e.code) {
                            case "10009":
                                this.showToast("此设备不支持设备搜索功能!");
                                break;
                            default:
                                console.error(e);
                            this.EnableSubmit = true;
                        }
                    }
                })
            },
            onDevice(device) {
                console.log("监听寻找到新设备的事件---------------")
                console.log(device)
                if (typeof device === 'undefined') return;
                if (typeof device.name === 'undefined') return;
                console.log(device.name);
                if (device.name === '') return;
                if (device.name === null) return;
                if (device.name.toUpperCase().endsWith('_BLE') ||
                    device.name.toUpperCase().endsWith('-LE') ||
                    device.name.toUpperCase().endsWith('-BLE')) return;
                const isDuplicate = this.discoveredDevices.find(item => item.address === device.address);
                if (isDuplicate) return;
                this.discoveredDevices.push(device);
            },
            connectBT(device) {
                const vm = this;
                uni.showLoading({
                    title: '连接中'
                });
                bluetoothTool.connDevice(device.address, (result) => {
                    console.log(result)
                    uni.hideLoading()
                    if (result) {
                        //     // console.log(result);
                        bluetoothTool.cancelDiscovery();
                        // console.log(vm.$printer)
                        vm.$printer.init(new FakeConnectedDevice());
                        vm.connectedDeviceId = device.address;
                        uni.showToast({
                            icon: 'none',
                            title: '连接成功'
                        })
                        this.maskShow = false
                    } else {
                        uni.showToast({
                            icon: 'none',
                            title: '连接失败'
                        })
            goBack() {
                uni.showModal({
                    title: '提示',
                    content: '确认要退出当前页面吗?',
                    success: (res) => {
                        if (res.confirm) {
                            console.log('用户点击确定');
                            uni.navigateBack()
                        } else if (res.cancel) {
                            console.log('用户点击取消');
                        }
                    }
                });
            },
            stopSearchBT() {
                console.log("停止搜寻附近的蓝牙外围设备---------------")
                bluetoothTool.cancelDiscovery();
            },
            closeBluetooth() {
                console.log("停止蓝牙连接")
                const vm = this;
                if (vm.connectedDeviceId != '') {
                    bluetoothTool.closeBtSocket();
                    vm.connectedDeviceId = "";
                }
            },
        },
        computed: {
            listTableHeight: {
                get() {
                    return this.bottomBtnTop - this.listTableTop - 10
                }
            }
        },
        async onReady() {
            // #ifndef MP-WEIXIN
            let query = uni.createSelectorQuery().in(this)
            query.select("#bottom-btn")
                .boundingClientRect((data) => {
                    if (data) {
                        this.bottomBtnTop = data.top
                    } else {
                        console.log("未找到#bottom-btn节点");
                    }
                })
                .exec();
            query.select("#list-table")
                .boundingClientRect((data) => {
                    if (data) {
                        this.listTableTop = data.top
                    } else {
                        console.log("未找到#list-table节点");
                    }
                })
                .exec();
            // #endif
        },
        onLoad(e) {
            // 1为 装箱 2为 组托
            this.BarCodeType = e.BarCodeType || 1
            this.OperationType = e.OperationType || 1
            this.getHDeptList()
            this.getHEmpList()
            this.getHGroupList()
            this.getHShiftsList()
            this.getHSourceList()
            this.getHProcList()
            this.getRoleList()
            if (this.OperationType == 1) {
                this.getMaxNo()
            } else if (this.OperationType == 2) {
                // this.GetMeesageByBarCode_Pack(this.HBarCode_Pack)
                //this.DisBillEntryList()
                this.tabs = 0
            }
            // 光标默认聚焦在托条码上
            this.HBarCodePackFocusRefresh()
        }
    }
</script>
<style lang="scss">
    input {
        width: inherit;
        padding: 8rpx 20rpx;
        font-size: 30rpx;
    }
    .uni-mask {
        position: fixed;
        top: 0;
        left: 0;
        bottom: 0;
        z-index: 3;
        display: flex;
        align-items: center;
        width: 100%;
        background: rgba(0, 0, 0, 0.6);
        padding: 0 30rpx;
        box-sizing: border-box;
    }
<style lang="scss" scoped>
    .form {
        display: flex;
        flex-direction: column;
        gap: 20rpx;
        .form-base-info {
            display: flex;
            flex-direction: column;
            gap: 10rpx;
            box-sizing: border-box;
            padding: 30rpx;
        width: 668rpx;
        margin: 20rpx auto;
        padding-bottom: 240rpx;
        }
        .bill-info {
            display: flex;
            flex-direction: column;
            gap: 10rpx;
            box-sizing: border-box;
            padding: 16rpx 30rpx;
            background-color: #fff;
    .tab_area {
        width: 100%;
        height: 50rpx;
    }
    .other {
        margin-top: 8rpx;
        text-align: center;
        font-size: 28rpx;
        padding: 4rpx 18rpx;
        color: #1890FF;
        }
        .form-item {
@@ -1411,7 +963,7 @@
            }
            .right {
                flex: 1;
            width: 450rpx;
                border-radius: 22rpx;
                border: 1px solid #acacac;
            }
@@ -1424,12 +976,10 @@
            }
            input {
                // width: 100%;
            width: 100%;
                padding: 8rpx 20rpx;
                font-size: 30rpx;
            }
            textarea {
                width: 98%;
@@ -1437,6 +987,46 @@
                font-size: 30rpx;
            }
    }
    .bottom-btn {
        width: 100%;
        // height: 120rpx;
        position: fixed;
        bottom: 0;
        left: 0;
        background-color: #fff;
        box-shadow: 0 2rpx 10rpx 2rpx rgba(0, 0, 0, 0.4);
        padding: 30rpx 40rpx 40rpx 40rpx;
        button {
            border-radius: 50rpx;
            width: 180rpx;
            height: 66rpx;
            line-height: 66rpx;
            font-size: 28rpx;
        }
        .btn-a {
            background-color: #3A78FF;
            color: #fff;
        }
        .btn-b {
            background-color: #41a863;
            color: #fff;
        }
        .btn-c {
            background-color: #FFA500;
            color: #fff;
            position: absolute;
            right: 120rpx;
        }
        .btn-d {
            background-color: #ff8901;
            color: #fff;
        }
    }
@@ -1458,226 +1048,6 @@
            color: #3a78ff;
            font-weight: bold;
            border-bottom: 3px solid #3a78ff;
        }
    }
    .machine-info-container {
        padding-left: 40rpx;
        /* 向右移动40rpx */
        padding-right: 40rpx;
        padding-top: 20rpx;
        .form-item {
            display: flex;
            align-items: center;
            font-size: 30rpx;
            padding: 10rpx 0;
            .title {
                width: 220rpx;
                /* 稍微加宽标题宽度 */
                min-width: 220rpx;
                color: #333;
            }
            .righton {
                flex: 1;
                border-radius: 22rpx;
                border: 1px solid #e4e4e4;
                background-color: #f8f8f8;
                input {
                    width: 100%;
                    padding: 12rpx 20rpx;
                    font-size: 30rpx;
                    color: #666;
                }
            }
        }
    }
    .bottom-btn {
        width: 100%;
        box-sizing: border-box;
        // height: 120rpx;
        position: fixed;
        bottom: 0;
        left: 0;
        background-color: #fff;
        box-shadow: 0 2rpx 10rpx 2rpx rgba(0, 0, 0, 0.4);
        padding: 30rpx 40rpx 40rpx 40rpx;
        display: flex;
        flex-direction: row;
        gap: 10rpx;
        button {
            border-radius: 50rpx;
            width: 180rpx;
            height: 66rpx;
            line-height: 66rpx;
            font-size: 28rpx;
        }
        .btn-a {
            background-color: #3A78FF;
            color: #fff;
        }
        .btn-b {
            background-color: #41a863;
            color: #fff;
        }
        .btn-c {
            background-color: #acacac;
            color: #fff;
            // position: absolute;
            // right: 120rpx;
        }
        .btn-d {
            background-color: #ff8901;
            color: #fff;
        }
    }
    .result-modal {
        position: fixed;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        z-index: 2;
        .modal-mask {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background: rgba(0, 0, 0, 0.5);
        }
        .modal-content {
            position: absolute;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            width: 90%;
            max-width: 700rpx;
            background: #fff;
            border-radius: 20rpx;
            overflow: hidden;
            .modal-header {
                padding: 30rpx;
                border-bottom: 1px solid #eee;
                display: flex;
                justify-content: space-between;
                align-items: center;
                .modal-title {
                    font-size: 32rpx;
                    font-weight: bold;
                }
            }
            .modal-body {
                padding: 30rpx;
                max-height: 60vh;
                overflow-y: auto;
            }
            .modal-footer {
                padding: 30rpx;
                border-top: 1px solid #eee;
                display: flex;
                align-items: center;
            }
        }
    }
    .work-order-cards {
            padding: 30rpx;
            display: flex;
            flex-direction: column;
            gap: 20rpx;
            .work-order-card {
                background: #fff;
                border-radius: 16rpx;
                padding: 24rpx;
                box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.08);
                border: 1px solid #e8e8e8;
                .card-header {
                    display: flex;
                    justify-content: space-between;
                    align-items: center;
                    padding-bottom: 20rpx;
                    border-bottom: 1px solid #f0f0f0;
                    margin-bottom: 20rpx;
                    .card-title {
                        font-size: 32rpx;
                        font-weight: bold;
                        color: #333;
                    }
                }
                .card-content {
                    .card-row {
                        display: flex;
                        align-items: center;
                        padding: 12rpx 0;
                        border-bottom: 1px dashed #f5f5f5;
                        &:last-child {
                            border-bottom: none;
                        }
                        .card-label {
                            width: 160rpx;
                            font-size: 28rpx;
                            color: #666;
                            flex-shrink: 0;
                        }
                        .card-value {
                            flex: 1;
                            font-size: 28rpx;
                            color: #333;
                            word-break: break-all;
                        }
                    }
                }
                &:hover {
                    box-shadow: 0 4rpx 16rpx rgba(58, 120, 255, 0.15);
                    border-color: #3a78ff;
                }
            }
            .empty-card {
                display: flex;
                flex-direction: column;
                align-items: center;
                justify-content: center;
                padding: 80rpx 30rpx;
                background: #f8f9fa;
                border-radius: 16rpx;
                border: 2rpx dashed #dcdfe6;
                .empty-text {
                    font-size: 30rpx;
                    color: #999;
                    margin-top: 20rpx;
                    margin-bottom: 10rpx;
                }
                .empty-tip {
                    font-size: 26rpx;
                    color: #ccc;
                }
            }
        }
</style>
pages/MJGL/shangmudan/MouldUpperBill.vue
@@ -55,7 +55,7 @@
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">生产资源:</view>
                    <view class="title"><text>*</text>生产资源:</view>
                    <view class="right">
                        <uni-combox :candidates="arrayHSourceName" placeholder="请选择生产资源" v-model="hform.HSourceName"
                            @input="HSourceNameChange"></uni-combox>
@@ -317,7 +317,7 @@
                this.hform.HDate = e.detail.value
            },
            getHBarCodeData(HBarCode) {
                if (uni.getStorageSync('Organization') != "事业一处") {
                if (uni.getStorageSync('Organization') == "杭州斯莫尔磁性材料有限公司") {
                    if (!this.hform.HSourceName) {
                        uni.showToast({
                            title: '请先选择或扫描生产资源',
@@ -365,12 +365,13 @@
                            var data = res.data.data[0];
                            var num = data.Num;
                            switch (num) {
                                //生产资源
                                case 1:
                                    this.hform.HSourceID = data.HItemID;
                                    this.hform.HSourceName = data.HName;
                                    this.refreshBarCodeState();
                                    break;
                                //生产订单
                                case 2:
                                    this.hform.HICMOBillNo = data.单据号;
                                    this.hform.HICMOInterID = data.hmainid;
@@ -383,7 +384,7 @@
                                        this.GetMaterialMouldList();
                                    }
                                    break;
                                //模具
                                case 3:
                                    if (!this.hform.HICMOBillNo && !this.hform.HProcExchBillNo) {
                                        uni.showToast({
@@ -414,6 +415,7 @@
                                        this.handleMouldData(data);
                                    }
                                    break;
                                //流转卡
                                case 4:
                                    this.hform.HProcExchBillNo = data.单据号;
                                    this.hform.HProcExchInterID = data.hmainid;
@@ -422,6 +424,8 @@
                                    this.hform.HICMOInterID = data.hicmointerid;
                                    this.hform.HICMOEntryID = data.HICMOEntryID;
                                    this.hform.HMaterID = data.HMaterID;
                                    this.hform.HSourceID = data.HSourceID;
                                    this.hform.HSourceName = data.HSourceName;
                                    this.refreshBarCodeState();
                                    if (uni.getStorageSync('OrganizationID') == "100007" && uni.getStorageSync(
                                            'Organization') == "事业一处") {