啊鑫
4 天以前 1bcee828a3340d5f5642b3dbcf4cd9733072b7aa
LLJ检验结果录入优化:添加自动保存和回车保存功能

- 新增防抖自动保存机制,用户停止输入2秒后自动保存
- 添加回车键快速保存功能,提升录入效率
- 支持有上下限数字输入和无上下限文本输入两种场景
- 添加输入验证确保数据有效性
- 页面卸载时自动清理定时器防止内存泄漏
已修改1个文件
已删除1个文件
380 ■■■■ 文件已修改
FTP文件操作接口文档-更新版.md 296 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/QC/LLJ/detail.vue 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FTPÎļþ²Ù×÷½Ó¿ÚÎĵµ-¸üаæ.md
ÎļþÒÑɾ³ý
pages/QC/LLJ/detail.vue
@@ -142,6 +142,7 @@
                            </button>
                            <input v-if="(tableData.length < formData.checkQyt) && formData.fupAllow && formData.fdownAllow"
                                @input="onNumberInput"
                                @confirm="onEnterSave"
                                v-model="formData.fcheckResu"
                                type="text"
                                class="result-input"
@@ -149,6 +150,7 @@
                                placeholder-class="placeholder" />
                            <input v-else
                                @input="search($event)"
                                @confirm="onEnterSave"
                                v-model="inputTxt"
                                type="text"
                                class="result-input"
@@ -181,6 +183,7 @@
                        <view class="input-wrapper" style="margin-top: 15px;">
                            <input v-if="(tableData.length < formData.checkQyt)" @input="search($event)"
                                @confirm="onEnterSave"
                                v-model="inputTxt" type="text" class="result-input" placeholder="请输入检验结果..."
                                placeholder-class="placeholder" />
                            <button v-if="(tableData.length < formData.checkQyt)"
@@ -290,9 +293,75 @@
                meomPopup: false,
                showMeom:false,
                meom: '',
                autoSaveTimer: null, // è‡ªåŠ¨ä¿å­˜å®šæ—¶å™¨
            }
        },
        methods: {
            // é˜²æŠ–自动保存方法
            autoSaveResult() {
                // æ¸…除之前的定时器
                if (this.autoSaveTimer) {
                    clearTimeout(this.autoSaveTimer);
                }
                // è®¾ç½®æ–°çš„定时器,1秒后自动保存
                this.autoSaveTimer = setTimeout(() => {
                    // æ£€æŸ¥æ˜¯å¦å·²ç»è¾¾åˆ°æ£€éªŒæ•°é‡ä¸Šé™
                    if (this.tableData.length >= this.formData.checkQyt) {
                        return;
                    }
                    // éªŒè¯è¾“入并保存
                    if (this.validateAndSave()) {
                        this.saveResult();
                    }
                }, 2000);
            },
            // éªŒè¯è¾“入是否有效
            validateAndSave() {
                // æœ‰ä¸Šä¸‹é™çš„æƒ…况
                if (this.formData.fupAllow && this.formData.fdownAllow) {
                    const value = this.formData.fcheckResu;
                    if (!value || value.trim() === '') {
                        return false;
                    }
                    // éªŒè¯æ˜¯å¦ä¸ºæœ‰æ•ˆæ•°å­—
                    if (isNaN(parseFloat(value)) || !/^-?\d+(\.\d+)?$/.test(value)) {
                        return false;
                    }
                    return true;
                } else {
                    // æ— ä¸Šä¸‹é™çš„æƒ…况,检验结果存储在 formData.fcheckResu ä¸­
                    const value = this.formData.fcheckResu;
                    if (!value || value.trim() === '') {
                        return false;
                    }
                    return true;
                }
            },
            // å¤„理回车键保存事件
            onEnterSave() {
                // æ£€æŸ¥æ˜¯å¦å·²ç»è¾¾åˆ°æ£€éªŒæ•°é‡ä¸Šé™
                if (this.tableData.length >= this.formData.checkQyt) {
                    this.$showMessage("已达到检验数量上限");
                    return;
                }
                // æ¸…除自动保存定时器
                if (this.autoSaveTimer) {
                    clearTimeout(this.autoSaveTimer);
                    this.autoSaveTimer = null;
                }
                // ç›´æŽ¥ä¿å­˜ç»“æžœ
                this.saveResult();
            },
            switchTab(index, mainIds) {
                this.currentTab = index
                this.mainId = mainIds;
@@ -377,6 +446,10 @@
            //检测输入框的输入,并给变量赋值
            search(event) {
                this.formData.fcheckResu = event.detail.value;
                this.inputTxt = event.detail.value;
                // è§¦å‘自动保存
                this.autoSaveResult();
            },
            onNumberInput(e) {
                // åªå…è®¸è¾“入数字和小数点
@@ -385,6 +458,9 @@
                val = val.replace(/\.{2,}/g, '.');
                val = val.replace('.', '$#$').replace(/\./g, '').replace('$#$', '.');
                this.formData.fcheckResu = val;
                // è§¦å‘自动保存
                this.autoSaveResult();
            },
            toggleResult(item) {
                let fstand = "√";
@@ -699,6 +775,14 @@
            this.$nextTick(() => {
                this.validateBatchInput();
            });
        },
        // é¡µé¢å¸è½½æ—¶æ¸…除定时器
        onUnload() {
            if (this.autoSaveTimer) {
                clearTimeout(this.autoSaveTimer);
                this.autoSaveTimer = null;
            }
        }
    }
</script>