llj
2025-12-10 ab90b425f62ebca1730f52af7c87705020bef9de
条码变更粘贴功能
1个文件已修改
252 ■■■■■ 已修改文件
WebTM/views/模治具管理/模治具管理/KF_BarCodeStatusChangeBill.html 252 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WebTM/views/Ä£Öξ߹ÜÀí/Ä£Öξ߹ÜÀí/KF_BarCodeStatusChangeBill.html
@@ -45,6 +45,38 @@
        .layui-form-label {
            width: 25%;
        }
        /* æ·»åŠ ç²˜è´´åŒºåŸŸæ ·å¼ */
        .paste-area {
            border: 2px dashed #ccc;
            border-radius: 5px;
            padding: 20px;
            text-align: center;
            margin: 10px;
            background-color: #f9f9f9;
            cursor: pointer;
            min-height: 80px;
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;
        }
            .paste-area:hover {
                border-color: #1E9FFF;
                background-color: #f0f9ff;
            }
            .paste-area i {
                font-size: 30px;
                color: #1E9FFF;
                margin-bottom: 10px;
            }
            .paste-area .paste-hint {
                color: #666;
                font-size: 14px;
                margin-top: 5px;
            }
    </style>
</head>
@@ -75,30 +107,30 @@
                                            </div>
                                        </div>
                                        <!--<div class="layui-inline">
                                            <label class="layui-form-label" style="width: 85px;">单据状态</label>
                                            <div class="layui-input-block" style="margin-left: 120px; width: 185px;">
                                                <select name="HBillStatus" id="HBillStatus" lay-verify="HBillStatus">
                                                    <option style="color:blue;" value="1">未审</option>
                                                    <option style="color:blue;" value="2">审核通过</option>
                                                    <option style="color:blue;" value="3">关闭</option>
                                                    <option style="color:blue;" value="4">作废</option>
                                                    <option style="color:blue;" value="5">审核退回</option>
                                                    <option style="color:blue;" value="6">审核中</option>
                                                    <option style="color:blue;" value="7">已阅</option>
                                                    <option style="color:blue;" value="8">已回复</option>
                                                    <option style="color:blue;" value="9">结案</option>
                                                    <option style="color:blue;" value="10">验证</option>
                                                    <option style="color:blue;" value="11">下达</option>
                                                    <option style="color:blue;" value="12">开工</option>
                                                    <option style="color:blue;" value="13">申请审批</option>-->
                                                    <!--<option style="color:blue;" value="14">申请检验</option>-->
                                                    <!--<option style="color:blue;" value="15">申请检验</option>
                                                    <option style="color:blue;" value="16">判定合格</option>
                                                    <option style="color:blue;" value="17">判定不合格</option>
                            <label class="layui-form-label" style="width: 85px;">单据状态</label>
                            <div class="layui-input-block" style="margin-left: 120px; width: 185px;">
                                <select name="HBillStatus" id="HBillStatus" lay-verify="HBillStatus">
                                    <option style="color:blue;" value="1">未审</option>
                                    <option style="color:blue;" value="2">审核通过</option>
                                    <option style="color:blue;" value="3">关闭</option>
                                    <option style="color:blue;" value="4">作废</option>
                                    <option style="color:blue;" value="5">审核退回</option>
                                    <option style="color:blue;" value="6">审核中</option>
                                    <option style="color:blue;" value="7">已阅</option>
                                    <option style="color:blue;" value="8">已回复</option>
                                    <option style="color:blue;" value="9">结案</option>
                                    <option style="color:blue;" value="10">验证</option>
                                    <option style="color:blue;" value="11">下达</option>
                                    <option style="color:blue;" value="12">开工</option>
                                    <option style="color:blue;" value="13">申请审批</option>-->
                                        <!--<option style="color:blue;" value="14">申请检验</option>-->
                                        <!--<option style="color:blue;" value="15">申请检验</option>
                                    <option style="color:blue;" value="16">判定合格</option>
                                    <option style="color:blue;" value="17">判定不合格</option>
                                                </select>
                                            </div>
                                        </div>-->
                                </select>
                            </div>
                        </div>-->
                                        <div class="layui-inline">
                                            <label class="layui-form-label" style="width: 85px;">日期</label>
                                            <div class="layui-input-block" style="margin-left: 120px;">
@@ -229,7 +261,15 @@
                        <div class="layui-btn-container">
                            <button type="button" class="layui-btn layui-btn-sm" lay-event="btn-AddLine"><i class="layui-icon layui-icon-form"></i>增加一行</button>
                            <button type="button" class="layui-btn layui-btn-sm" lay-event="btn-CopyLine"><i class="layui-icon layui-icon-form"></i>复制一行</button>
                            <!--<button type="button" class="layui-btn layui-btn-sm" lay-event="set_HideColumn"><i class="layui-icon layui-icon-form"></i>列设置</button>-->
                            <button type="button" class="layui-btn layui-btn-sm layui-btn-warm" lay-event="btn-PasteExcel"><i class="layui-icon layui-icon-file-excel"></i>Excel粘贴</button>
                        </div>
                        <!-- ç²˜è´´åŒºåŸŸ-->
                        <div id="excelPasteArea" class="paste-area" style="display: none; margin-top: 10px;">
                            <i class="layui-icon layui-icon-file-excel"></i>
                            <div>请从Excel复制数据后,点击此处或按Ctrl+V粘贴</div>
                            <div class="paste-hint">支持复制多行数据,系统会自动匹配列标题</div>
                            <div class="paste-hint" style="color: #ff5722; margin-top: 10px;">当前支持粘贴的列:条形码、状态、表体备注</div>
                            <button type="button" class="layui-btn layui-btn-primary layui-btn-sm" style="margin-top: 10px;" id="btnCancelPaste">取消粘贴</button>
                        </div>
                    </script>
                </form>
@@ -302,7 +342,15 @@
            //#endregion
            //#region è¿›å…¥é¡µé¢å³åŠ è½½
            var isPasteMode = false;
            var columnMapping = {
                '条形码': 'HBarCode',
                '状态': 'HBarCodeStatus_New',
                '表体备注': 'HRemark',
                '关联数量': 'HRelationQty',
                '关联金额': 'HRelationMoney',
                '原状态': 'HBarCodeStatus_Old'
            };//标题匹配----复制后根据里面的内容匹配
            var rowdata = [{
                "HRelationQty": 0, "HRelationMoney": 0, "HRemark": "", "HBarCode": "", "HBarCodeStatus_Old": ""
                , "HBarCodeStatus_New": ""
@@ -388,6 +436,15 @@
                            checkRefresh();
                        }
                        break;
                    case 'btn-PasteExcel':
                        isPasteMode = !isPasteMode;
                        if (isPasteMode) {
                            $('#excelPasteArea').show();
                            layer.msg('请从Excel复制数据后,点击粘贴区域或按Ctrl+V粘贴', { icon: 1 });
                        } else {
                            $('#excelPasteArea').hide();
                        }
                        break;
                    ////列设置
                    //case 'set_HideColumn':
                    //    get_HideColumn();
@@ -441,6 +498,151 @@
            //#endregion
            //#region ç²˜è´´ä»£ç å—
            $(document).ready(function () {
                $('#excelPasteArea').on('click', function (e) {
                    if (isPasteMode) {
                        $(this).focus();
                    }
                });
                $('#btnCancelPaste').on('click', function () {
                    isPasteMode = false;
                    $('#excelPasteArea').hide();
                });
                // ç›‘听全局粘贴事件--->粘贴监听layui没有,zhege用原生监听
                $(document).on('paste', function (e) {
                    if (!isPasteMode) return;
                    e.preventDefault();
                    // èŽ·å–å‰ªè´´æ¿æ•°æ®ï¼ˆwindow.clipboardData这个不知道为什么通过window拿不到粘贴板的内容,按道理讲应该可以通过window来直接获取到)
                    var clipboardData = e.originalEvent.clipboardData || window.clipboardData;
                    var pastedData = clipboardData.getData('text');
                    if (pastedData) {
                        processExcelData(pastedData);
                    }
                });
                // ç›‘听自己
                $('#excelPasteArea').on('paste', function (e) {
                    if (!isPasteMode) return;
                    e.preventDefault();
                    e.stopPropagation();
                    var clipboardData = e.originalEvent.clipboardData || window.clipboardData;
                    var pastedData = clipboardData.getData('text');
                    if (pastedData) {
                        processExcelData(pastedData);
                    }
                });
            });
            // å¤„理Excel粘贴数据
            function processExcelData(pastedData) {
                try {
                    // ï¼ˆExcel复制的数据通常是制表符分隔,分割出来进行操作,也可以试试给后端割,进行其他操作,再传回来)
                    var rows = pastedData.split(/\r\n|\n|\r/);
                    if (rows.length === 0) {
                        layer.msg('没有检测到数据', { icon: 2 });
                        return;
                    }
                    // è§£æžç¬¬ä¸€è¡Œä½œä¸ºæ ‡é¢˜è¡Œï¼Œç„¶åŽå’Œä¸Šé¢è¿›è¡Œmapping
                    var headers = rows[0].split('\t');
                    var columnIndices = {};
                    for (var i = 0; i < headers.length; i++) {
                        var header = headers[i].trim();
                        if (columnMapping[header]) {
                            columnIndices[columnMapping[header]] = i;
                        }
                    }
                    if (Object.keys(columnIndices).length === 0) {
                        layer.msg('未识别到匹配的列标题,请检查Excel列名', { icon: 2 });
                        return;
                    }
                    var newRows = [];
                    var dataRows = rows.slice(1);
                    for (var r = 0; r < dataRows.length; r++) {
                        var rowData = dataRows[r].split('\t');
                        if (rowData.length === 0 || (rowData.length === 1 && rowData[0].trim() === '')) {
                            continue;
                        }
                        // åˆ›å»ºæ–°è¡Œå¯¹è±¡ï¼ˆç›¸å½“于新增一行的操作
                        var newRow = {
                            "HRelationQty": 0,
                            "HRelationMoney": 0,
                            "HRemark": "",
                            "HBarCode": "",
                            "HBarCodeStatus_Old": "",
                            "HBarCodeStatus_New": ""
                        };
                        for (var field in columnIndices) {
                            var colIndex = columnIndices[field];
                            if (colIndex < rowData.length) {
                                var value = rowData[colIndex].trim();
                                //下拉框的判断,可以不要
                                if (field === 'HBarCodeStatus_New') {
                                    var validStatus = ['出库', '入库', '异常', '空'];
                                    if (validStatus.indexOf(value) === -1) {
                                        value = '';
                                    }
                                }
                                newRow[field] = value;
                            }
                        }
                        // æ£€æŸ¥æ¡å½¢ç æ˜¯å¦ä¸ºç©ºï¼Œè‹¥ä¸è¦æ¡å½¢ç åˆ¤æ–­ï¼Œåˆ äº†å°±è¡Œ
                        if (newRow.HBarCode && newRow.HBarCode.trim() !== '') {
                            newRows.push(newRow);
                        }
                    }
                    if (newRows.length === 0) {
                        layer.msg('条形码不能为空', { icon: 2 });
                        return;
                    }
                    // è·³ä¸ªå¼¹æ¡†
                    layer.confirm('将添加 ' + newRows.length + ' è¡Œæ•°æ®ï¼Œæ˜¯å¦ç»§ç»­ï¼Ÿ', {
                        icon: 3,
                        title: '确认粘贴',
                        btn: ['确定', '取消']
                    }, function (index) {
                        var currentData = table.cache["mainTable"];
                        var isEmptyRow = function (row) {
                            return (!row.HBarCode || row.HBarCode.trim() === '') &&
                                (!row.HBarCodeStatus_New || row.HBarCodeStatus_New.trim() === '') &&
                                (!row.HRemark || row.HRemark.trim() === '');
                        };
                        if (currentData.length === 1 && isEmptyRow(currentData[0])) {
                            table.cache["mainTable"] = [];
                        }
                        for (var i = 0; i < newRows.length; i++) {
                            table.cache["mainTable"].push(newRows[i]);
                        }
                        option.data = table.cache["mainTable"];
                        table.render(option);
                        for (var i = 1; i <= option.data.length; i++) {
                            $('#HBarCodeStatus_New' + i).find("option[value='" + (option.data[i - 1].HBarCodeStatus_New || '') + "']").attr("selected", true);
                        }
                        form.render('select');
                        checkRefresh();
                        isPasteMode = false;
                        $('#excelPasteArea').hide();
                        layer.msg('成功添加 ' + newRows.length + ' è¡Œæ•°æ®', { icon: 1 });
                        layer.close(index);
                    });
                } catch (error) {
                    layer.msg('粘贴失败:' + error.message, { icon: 2 });
                }
            }
            //#endregion
            //#region æ­¤é¡µé¢æ‰€æœ‰çš„æ–¹æ³•
            // åˆå§‹åŒ–界面