From ada23262bb5a04016fec1a665f088c0bf2751065 Mon Sep 17 00:00:00 2001 From: thexqn Date: Wed, 18 Dec 2024 17:21:24 +0800 Subject: [PATCH] feat(search): implement column search mode and enhance search input functionality (#658) * chore: update .gitignore to include manage.sh and .env files * feat(api): add new SQL query for CI by no attribute in * feat(api): enhance search functionality with new IN clause support for queries * feat(lang): add new search tips and modes in English and Chinese language files * feat(search): implement column search mode and enhance search input functionality --- .gitignore | 3 + .../api/lib/cmdb/search/ci/db/query_sql.py | 9 + cmdb-api/api/lib/cmdb/search/ci/db/search.py | 14 +- cmdb-ui/src/modules/cmdb/lang/en.js | 3 + cmdb-ui/src/modules/cmdb/lang/zh.js | 3 + .../components/filterPopover.vue | 2 +- .../resourceSearch/components/searchInput.vue | 258 ++++++++++++++---- .../resourceSearch/index.vue | 43 ++- 8 files changed, 263 insertions(+), 72 deletions(-) diff --git a/.gitignore b/.gitignore index 2fc477f..8d990ed 100755 --- a/.gitignore +++ b/.gitignore @@ -79,3 +79,6 @@ cmdb-ui/yarn-debug.log* cmdb-ui/yarn-error.log* cmdb-ui/package-lock.json start.sh +manage.sh +.env +cmdb-api/.env diff --git a/cmdb-api/api/lib/cmdb/search/ci/db/query_sql.py b/cmdb-api/api/lib/cmdb/search/ci/db/query_sql.py index df61745..8ca41ad 100644 --- a/cmdb-api/api/lib/cmdb/search/ci/db/query_sql.py +++ b/cmdb-api/api/lib/cmdb/search/ci/db/query_sql.py @@ -107,3 +107,12 @@ FROM WHERE c_value_index_datetime.value LIKE "{0}") AS {1} GROUP BY {1}.ci_id """ + +QUERY_CI_BY_NO_ATTR_IN = """ +SELECT * +FROM + (SELECT c_value_index_texts.ci_id + FROM c_value_index_texts + WHERE c_value_index_texts.value in ({0})) AS {1} +GROUP BY {1}.ci_id +""" \ No newline at end of file diff --git a/cmdb-api/api/lib/cmdb/search/ci/db/search.py b/cmdb-api/api/lib/cmdb/search/ci/db/search.py index e4e4154..e50958e 100644 --- a/cmdb-api/api/lib/cmdb/search/ci/db/search.py +++ b/cmdb-api/api/lib/cmdb/search/ci/db/search.py @@ -27,6 +27,7 @@ from api.lib.cmdb.search.ci.db.query_sql import FACET_QUERY from api.lib.cmdb.search.ci.db.query_sql import QUERY_CI_BY_ATTR_NAME from api.lib.cmdb.search.ci.db.query_sql import QUERY_CI_BY_ID from api.lib.cmdb.search.ci.db.query_sql import QUERY_CI_BY_NO_ATTR +from api.lib.cmdb.search.ci.db.query_sql import QUERY_CI_BY_NO_ATTR_IN from api.lib.cmdb.search.ci.db.query_sql import QUERY_CI_BY_TYPE from api.lib.cmdb.search.ci.db.query_sql import QUERY_UNION_CI_ATTRIBUTE_IS_NULL from api.lib.cmdb.utils import TableMap @@ -527,10 +528,15 @@ class Search(object): for q in queries: _query_sql = "" if isinstance(q, dict): - alias, _query_sql, operator = self.__query_build_by_field(q['queries'], True, True, alias, is_sub=True) - # current_app.logger.info(_query_sql) - # current_app.logger.info((operator, is_first, alias)) - operator = q['operator'] + current_app.logger.debug("Dict query content: queries=%s, operator=%s", q['queries'], q['operator']) + if len(q['queries']) == 1 and ";" in q['queries'][0]: + values = q['queries'][0].split(";") + in_values = ",".join("'{0}'".format(v) for v in values) + _query_sql = QUERY_CI_BY_NO_ATTR_IN.format(in_values, alias) + operator = q['operator'] + else: + alias, _query_sql, operator = self.__query_build_by_field(q['queries'], True, True, alias, is_sub=True) + operator = q['operator'] elif ":" in q and not q.startswith("*"): alias, _query_sql, operator = self.__query_by_attr(q, queries, alias, is_sub) diff --git a/cmdb-ui/src/modules/cmdb/lang/en.js b/cmdb-ui/src/modules/cmdb/lang/en.js index 090d8ba..0549a80 100644 --- a/cmdb-ui/src/modules/cmdb/lang/en.js +++ b/cmdb-ui/src/modules/cmdb/lang/en.js @@ -314,6 +314,9 @@ const cmdb_en = { enum: 'Enum', ciGrantTip: `Filter conditions can be changed dynamically using {{}} referenced variables, currently user variables are supported, such as {{user.uid}},{{user.username}},{{user.email}},{{user.nickname}}`, searchInputTip: 'Please search for resource keywords', + columnSearchInputTip: '192.168.1.1\n192.168.1.2\n192.168.1.3', + rowSearchMode: 'Single Row Search', + columnSearchMode: 'Multi Row Search', resourceSearch: 'Resource Search', recentSearch: 'Recent Search', myCollection: 'My Collection', diff --git a/cmdb-ui/src/modules/cmdb/lang/zh.js b/cmdb-ui/src/modules/cmdb/lang/zh.js index f55e392..f2f11d4 100644 --- a/cmdb-ui/src/modules/cmdb/lang/zh.js +++ b/cmdb-ui/src/modules/cmdb/lang/zh.js @@ -314,6 +314,9 @@ const cmdb_zh = { enum: '枚举', ciGrantTip: `筛选条件可使用{{}}引用变量实现动态变化,目前支持用户变量,如{{user.uid}},{{user.username}},{{user.email}},{{user.nickname}}`, searchInputTip: '请搜索资源关键字', + columnSearchInputTip: '192.168.1.1\n192.168.1.2\n192.168.1.3', + rowSearchMode: '单行搜索', + columnSearchMode: '多行搜索', resourceSearch: '资源搜索', recentSearch: '最近搜索', myCollection: '我的收藏', diff --git a/cmdb-ui/src/modules/cmdb/views/resource_search_2/resourceSearch/components/filterPopover.vue b/cmdb-ui/src/modules/cmdb/views/resource_search_2/resourceSearch/components/filterPopover.vue index 52aac38..fa5ef54 100644 --- a/cmdb-ui/src/modules/cmdb/views/resource_search_2/resourceSearch/components/filterPopover.vue +++ b/cmdb-ui/src/modules/cmdb/views/resource_search_2/resourceSearch/components/filterPopover.vue @@ -180,7 +180,7 @@ export default { saveCondition(isSubmit) { this.$refs.conditionFilterRef.handleSubmit() this.$nextTick(() => { - this.$emit('saveCondition', isSubmit) + this.$emit('saveCondition', isSubmit, this.$parent.isColumnSearch ? 'column' : 'normal') this.visible = false }) }, diff --git a/cmdb-ui/src/modules/cmdb/views/resource_search_2/resourceSearch/components/searchInput.vue b/cmdb-ui/src/modules/cmdb/views/resource_search_2/resourceSearch/components/searchInput.vue index 6a2bf13..4dee23c 100644 --- a/cmdb-ui/src/modules/cmdb/views/resource_search_2/resourceSearch/components/searchInput.vue +++ b/cmdb-ui/src/modules/cmdb/views/resource_search_2/resourceSearch/components/searchInput.vue @@ -1,29 +1,59 @@