diff --git a/src/components/advancedSearch/Index.vue b/src/components/advancedSearch/Index.vue index 5489909a..e2ec181c 100644 --- a/src/components/advancedSearch/Index.vue +++ b/src/components/advancedSearch/Index.vue @@ -61,7 +61,7 @@ export default { }, methods: { search (metaList, formatSql) { - this.$emit('search', formatSql) + this.$emit('search', metaList, formatSql) }, changeMode (mode, data) { this.searchMode = mode @@ -77,8 +77,8 @@ export default { } }, setup (props) { - // 默认为文本模式 TODO 改回text - let searchMode = ref('tag') + // 默认为文本模式 + let searchMode = ref('text') if (props.defaultMode) { switch (props.defaultMode) { case 'tag': { diff --git a/src/components/advancedSearch/TagMode.vue b/src/components/advancedSearch/TagMode.vue index 3c2f5efd..1d5d2d2f 100644 --- a/src/components/advancedSearch/TagMode.vue +++ b/src/components/advancedSearch/TagMode.vue @@ -107,6 +107,7 @@ export default { // 新增条件 addCondition (meta) { this.metaList.forEach(m => { + console.info(m) m.cancelEditing() }) // 先判断上一个condition是否已填写完整,没有则删除;之后将当前所有meta的内容的isEditing置为false @@ -132,7 +133,6 @@ export default { this.$refs.columnSelect.focus() }) } - console.info(this.metaList) }, addConnection () { this.metaList.push(new Meta(connection)) @@ -161,16 +161,16 @@ export default { }) meta.column.label = selectedColumn.label meta.column.type = selectedColumn.type - } - setTimeout(() => { - meta.column.isEditing = false + setTimeout(() => { + meta.column.isEditing = false - // 处理操作符 - if (!meta.operator.value) { - meta.operator.isEditing = true - meta.operator.show = true - } - }, 200) + // 处理操作符 + if (!meta.operator.value) { + meta.operator.isEditing = true + meta.operator.show = true + } + }, 200) + } }, selectConnection (value, meta) { meta.isEditing = false @@ -185,7 +185,11 @@ export default { setTimeout(() => { meta.column.isEditing = false if (meta.isEmpty()) { - this.metaList.splice(index, 1) + if (this.metaList.length > 1) { + this.metaList.splice(index - 1, 2) + } else { + this.metaList.splice(index, 1) + } } }, 200) }, @@ -231,6 +235,7 @@ export default { changeMode () { const parser = new SqlParser(this.metaList, this.columnList) const { metaList, formatSql } = parser.formatMetaList() + console.info(formatSql) this.metaList = metaList this.$emit('changeMode', 'text', formatSql) }, diff --git a/src/components/advancedSearch/meta/meta.js b/src/components/advancedSearch/meta/meta.js index bf2c7520..21a44fe7 100644 --- a/src/components/advancedSearch/meta/meta.js +++ b/src/components/advancedSearch/meta/meta.js @@ -88,3 +88,17 @@ export default class Meta { } } } + +export function cloneMeta (source) { + if (source instanceof Meta) { + const m = new Meta(source.meta) + Object.keys(source).forEach(s => { + m[s] = _.cloneDeep(source[s]) + }) + return m + } else if (_.isArray(source)) { + return source.map(s => { + return cloneMeta(s) + }) + } +} diff --git a/src/components/entities/EntityTop.vue b/src/components/entities/EntityTop.vue index 2d1a1ebb..1fb758e3 100644 --- a/src/components/entities/EntityTop.vue +++ b/src/components/entities/EntityTop.vue @@ -71,7 +71,6 @@ export default { this.$emit('close') }, filter (row) { - console.info(row.name, this.item) this.$emit('filter', row.name, this.item) }, initEntityTop (leftVal, itemVal, data, totalCount) { diff --git a/src/utils/sql-parser.js b/src/utils/sql-parser.js index 9d02d334..1cadc918 100644 --- a/src/utils/sql-parser.js +++ b/src/utils/sql-parser.js @@ -1,5 +1,5 @@ import { GenericSQL, SqlParserVisitor } from 'dt-sql-parser' -import Meta, { connection, condition, columnType } from '@/components/advancedSearch/meta/meta' +import Meta, { connection, condition, columnType, cloneMeta } from '@/components/advancedSearch/meta/meta' import _ from 'lodash' // 补全语句,用于解析 const sqlPrev = 'select a from b where ' @@ -34,7 +34,7 @@ export default class SqlParser extends SqlParserVisitor { this.tempMeta.column.type = columnType.fullText this.tempMeta.column.name = stringInQuot(this.tempMeta.column.name) this.tempMeta.column.label = this.tempMeta.column.name - this.metaList.push(_.cloneDeep(this.tempMeta)) + this.metaList.push(cloneMeta(this.tempMeta)) } this.tempMeta = null return { @@ -44,12 +44,15 @@ export default class SqlParser extends SqlParserVisitor { } formatMetaList () { - const tempMetaList = _.cloneDeep(this.metaList) + const tempMetaList = cloneMeta(this.metaList) this.metaList = [] tempMetaList.forEach(meta => { if (meta.meta === condition) { if (meta.column.type === columnType.fullText) { - this.metaList.push({ ...meta, name: stringInQuot(meta.name), label: stringInQuot(meta.name) }) + const m = cloneMeta(meta) + m.column.name = stringInQuot(meta.column.name) + m.column.label = m.column.name + this.metaList.push(m) } else if (meta.column.type === columnType.string) { if (_.isArray(meta.value.value)) { meta.value.value = meta.value.value.map(v => { @@ -69,6 +72,8 @@ export default class SqlParser extends SqlParserVisitor { } this.metaList.push(meta) } + } else { + this.metaList.push(meta) } }) return { @@ -81,9 +86,11 @@ export default class SqlParser extends SqlParserVisitor { let sql = '' metaList.forEach(meta => { if (meta.meta === condition) { - sql += meta.column.name + sql += (meta.column.name) if (meta.column.type !== columnType.fullText) { sql += `${meta.operator.value}${meta.value.value} ` + } else { + sql += ' ' } } if (meta.meta === connection) { @@ -133,7 +140,7 @@ export default class SqlParser extends SqlParserVisitor { } } this.tempMeta.value.show = true - this.metaList.push(_.cloneDeep(this.tempMeta)) + this.metaList.push(cloneMeta(this.tempMeta)) } break } @@ -158,7 +165,7 @@ export default class SqlParser extends SqlParserVisitor { this.tempMeta.column.type = columnType.fullText this.tempMeta.column.name = stringInQuot(this.tempMeta.column.name) this.tempMeta.column.label = this.tempMeta.column.name - this.metaList.push(_.cloneDeep(this.tempMeta)) + this.metaList.push(cloneMeta(this.tempMeta)) this.tempMeta = null } const meta = new Meta(connection) diff --git a/src/views/entityExplorer/EntityExplorer.vue b/src/views/entityExplorer/EntityExplorer.vue index 1a43d507..e70f325c 100644 --- a/src/views/entityExplorer/EntityExplorer.vue +++ b/src/views/entityExplorer/EntityExplorer.vue @@ -23,7 +23,7 @@