Skip to content
This repository was archived by the owner on Oct 26, 2022. It is now read-only.

Commit 1f33674

Browse files
committed
Add Quick Filter
1 parent 6d13f2f commit 1f33674

File tree

3 files changed

+162
-54
lines changed

3 files changed

+162
-54
lines changed

package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,13 @@
4040
}
4141
},
4242
"dependencies": {
43-
"element-ui": "^1.2.9",
43+
"element-ui": "1.3.0-beta.2",
4444
"font-awesome": "^4.7.0",
4545
"highlight.js": "^9.11.0",
4646
"knex": "^0.13.0",
4747
"moment": "^2.18.1",
4848
"mysql": "^2.13.0",
49-
"vue": "^2.2.6"
49+
"vue": "^2.3.2"
5050
},
5151
"devDependencies": {
5252
"babel-preset-es2015": "^6.24.1",

src/App.vue

+85-1
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,38 @@
144144
<el-tab-pane>
145145
<span slot="label"><i class="fa fa-fw fa-file-text"></i> Content</span>
146146

147+
<el-form :inline="true" :model="filter">
148+
<el-form-item>
149+
<el-select v-model="filter.column" placeholder="Column">
150+
<el-option
151+
v-for="(column, key) in tableColumns"
152+
:key="key"
153+
:label="column.column_name"
154+
:value="column.column_name"
155+
></el-option>
156+
</el-select>
157+
</el-form-item>
158+
<el-form-item>
159+
<el-select v-model="filter.operator" placeholder="Operator">
160+
<el-option
161+
v-for="(filter, key) in filter.operators"
162+
:key="key"
163+
:label="filter"
164+
:value="filter"
165+
></el-option>
166+
</el-select>
167+
</el-form-item>
168+
<el-form-item>
169+
<el-input v-model="filter.value" placeholder="Value"></el-input>
170+
</el-form-item>
171+
<el-form-item>
172+
<el-button type="primary" @click="loadTableData()">Filter</el-button>
173+
</el-form-item>
174+
<el-form-item>
175+
<el-button type="warning" @click="resetFilterAndReload()">Filter</el-button>
176+
</el-form-item>
177+
</el-form>
178+
147179
<div id="table-content">
148180
<el-pagination
149181
layout="sizes, total, prev, pager, next, jumper"
@@ -371,6 +403,24 @@ export default {
371403
active: false,
372404
tested: false,
373405
},
406+
filter: {
407+
column: null,
408+
operator: null,
409+
value: null,
410+
operators: [
411+
'=',
412+
'!=',
413+
'>',
414+
'<',
415+
'>=',
416+
'<=',
417+
// @TODO: implement these filters
418+
// 'IN',
419+
// 'LIKE',
420+
// 'IS NULL',
421+
// 'IS NOT NULL',
422+
],
423+
},
374424
paginateSizes: [1, 50, 100, 200, 300, 400, 500, 1000],
375425
paginateNumber: 50,
376426
paginatePage: 1,
@@ -549,6 +599,17 @@ export default {
549599
this.tableData = []
550600
},
551601
602+
resetFilter() {
603+
this.filter.column = null
604+
this.filter.operator = null
605+
this.filter.value = null
606+
},
607+
608+
resetFilterAndReload() {
609+
this.resetFilter()
610+
this.loadTableData()
611+
},
612+
552613
executeQuery() {
553614
this.knex
554615
.raw(this.query)
@@ -633,6 +694,7 @@ export default {
633694
table = table || this.tableActive
634695
635696
this.rowsSelected = []
697+
this.resetFilter()
636698
637699
this.loadTableCount(table)
638700
this.loadTableColumns(table)
@@ -665,7 +727,7 @@ export default {
665727
},
666728
667729
loadTableData(table) {
668-
this.prepareQuery(this.databaseActive, table)
730+
this.prepareQueryWithFilters(this.databaseActive, table)
669731
.select('*')
670732
.limit(this.paginateNumber)
671733
.offset(this.paginateNumber * (this.paginatePage - 1))
@@ -737,6 +799,24 @@ export default {
737799
return this.knex.withSchema(database).from(table)
738800
},
739801
802+
prepareQueryWithFilters(database, table) {
803+
let query = this.prepareQuery()
804+
805+
if (
806+
!this.filter.column ||
807+
!this.filter.operator ||
808+
!this.filter.value
809+
) {
810+
return query
811+
}
812+
813+
return query.where(
814+
this.filter.column,
815+
this.filter.operator,
816+
this.filter.value
817+
)
818+
},
819+
740820
setPaginateNumber(number) {
741821
this.paginateNumber = number
742822
this.loadTable()
@@ -836,4 +916,8 @@ body {
836916
.paginate {
837917
width: auto !important;
838918
}
919+
920+
.fa-check-square-o {
921+
margin-left: 2px;
922+
}
839923
</style>

0 commit comments

Comments
 (0)