From 239265207c5dc60aa99b670da41eb34499c6020b Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期四, 19 三月 2026 19:24:50 +0800
Subject: [PATCH] #

---
 src/main/webapp/views/config/config.html   |   31 +++++++++++++++
 src/main/webapp/static/js/config/config.js |   37 +++++++++++++++++-
 2 files changed, 65 insertions(+), 3 deletions(-)

diff --git a/src/main/webapp/static/js/config/config.js b/src/main/webapp/static/js/config/config.js
index 55aedab..d4594da 100644
--- a/src/main/webapp/static/js/config/config.js
+++ b/src/main/webapp/static/js/config/config.js
@@ -991,6 +991,7 @@
             textarea: false,
             minWidth: 140,
             dialogSpan: 24,
+            suggestInput: true,
             enumOptions: [],
             foreignQuery: '',
             checkboxActiveRaw: 'Y',
@@ -1089,6 +1090,9 @@
         if (field.kind === 'date') {
             return [];
         }
+        if (field.kind === 'enum' && field.suggestInput) {
+            return '';
+        }
         if (field.kind === 'enum' || field.kind === 'checkbox') {
             return null;
         }
@@ -1145,13 +1149,14 @@
     function createFormRules() {
         var rules = {};
         fieldMeta.forEach(function (field) {
+            var useInputRule = field.kind === 'enum' && field.suggestInput;
             if (field.primaryKey || !field.required) {
                 return;
             }
             rules[field.field] = [{
                 required: true,
-                message: (field.kind === 'date' || field.kind === 'enum' ? '璇烽�夋嫨' : '璇疯緭鍏�') + field.label,
-                trigger: (field.kind === 'date' || field.kind === 'enum') ? 'change' : 'blur'
+                message: (field.kind === 'date' || (field.kind === 'enum' && !useInputRule) ? '璇烽�夋嫨' : '璇疯緭鍏�') + field.label,
+                trigger: (field.kind === 'date' || (field.kind === 'enum' && !useInputRule)) ? 'change' : 'blur'
             }];
         });
         return rules;
@@ -1326,6 +1331,12 @@
                 self.fetchForeignSuggestions(field, queryString, callback);
             };
         },
+        getEnumSuggestionFetcher: function (field) {
+            var self = this;
+            return function (queryString, callback) {
+                self.fetchEnumSuggestions(field, queryString, callback);
+            };
+        },
         fetchForeignSuggestions: function (field, queryString, callback) {
             if (!field.foreignQuery || !queryString) {
                 callback([]);
@@ -1356,6 +1367,27 @@
                     callback([]);
                 }
             });
+        },
+        fetchEnumSuggestions: function (field, queryString, callback) {
+            var keyword = String(queryString || '').toLowerCase();
+            var result = [];
+            var seen = {};
+            (field && field.enumOptions ? field.enumOptions : []).forEach(function (option) {
+                var rawValue = option && option.rawValue !== undefined ? String(option.rawValue) : '';
+                var label = option && option.label !== undefined ? String(option.label) : rawValue;
+                var haystack = (label + ' ' + rawValue).toLowerCase();
+                if (keyword && haystack.indexOf(keyword) === -1) {
+                    return;
+                }
+                if (!rawValue || seen[rawValue]) {
+                    return;
+                }
+                seen[rawValue] = true;
+                result.push({
+                    value: rawValue
+                });
+            });
+            callback(result);
         },
         handleForeignSelect: function (field, item) {
             this.$set(this.displayTarget, field.field, item && item.value ? item.value : '');
@@ -1631,6 +1663,7 @@
                             applySelectTypeOptions(Array.isArray(res.data) ? res.data : []);
                             self.fieldMeta = fieldMeta.slice();
                             self.allColumns = fieldMeta.slice();
+                            self.dialogRules = createFormRules();
                             self.requestTableLayout(80);
                         }
                     });
diff --git a/src/main/webapp/views/config/config.html b/src/main/webapp/views/config/config.html
index 691e470..ba8fc6a 100644
--- a/src/main/webapp/views/config/config.html
+++ b/src/main/webapp/views/config/config.html
@@ -369,8 +369,18 @@
                                 v-for="field in quickSearchableFields"
                                 :key="'quick-' + field.field"
                                 class="toolbar-search-item">
+                                <el-autocomplete
+                                    v-if="field.kind === 'enum' && field.suggestInput"
+                                    v-model="searchForm[field.field]"
+                                    size="small"
+                                    clearable
+                                    :fetch-suggestions="getEnumSuggestionFetcher(field)"
+                                    :placeholder="field.label"
+                                    style="width: 100%;"
+                                    @keyup.enter.native="handleSearch">
+                                </el-autocomplete>
                                 <el-select
-                                    v-if="field.kind === 'enum'"
+                                    v-else-if="field.kind === 'enum'"
                                     v-model="searchForm[field.field]"
                                     size="small"
                                     clearable
@@ -481,6 +491,16 @@
                                 value-format="yyyy-MM-dd HH:mm:ss"
                                 style="width: 100%;">
                             </el-date-picker>
+                            <el-autocomplete
+                                v-else-if="field.kind === 'enum' && field.suggestInput"
+                                v-model="searchForm[field.field]"
+                                size="small"
+                                clearable
+                                :fetch-suggestions="getEnumSuggestionFetcher(field)"
+                                :placeholder="field.label"
+                                style="width: 100%;"
+                                @keyup.enter.native="handleSearch">
+                            </el-autocomplete>
                             <el-select
                                 v-else-if="field.kind === 'enum'"
                                 v-model="searchForm[field.field]"
@@ -628,6 +648,15 @@
                             :disabled="isDialogReadonly"
                             style="width: 100%;">
                         </el-date-picker>
+                        <el-autocomplete
+                            v-else-if="field.kind === 'enum' && field.suggestInput"
+                            v-model="dialogForm[field.field]"
+                            clearable
+                            :fetch-suggestions="getEnumSuggestionFetcher(field)"
+                            :placeholder="'璇疯緭鍏�' + field.label"
+                            :disabled="isDialogReadonly"
+                            style="width: 100%;">
+                        </el-autocomplete>
                         <el-select
                             v-else-if="field.kind === 'enum'"
                             v-model="dialogForm[field.field]"

--
Gitblit v1.9.1