|
144 | 144 | <el-tab-pane>
|
145 | 145 | <span slot="label"><i class="fa fa-fw fa-file-text"></i> Content</span>
|
146 | 146 |
|
| 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 | + |
147 | 179 | <div id="table-content">
|
148 | 180 | <el-pagination
|
149 | 181 | layout="sizes, total, prev, pager, next, jumper"
|
@@ -371,6 +403,24 @@ export default {
|
371 | 403 | active: false,
|
372 | 404 | tested: false,
|
373 | 405 | },
|
| 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 | + }, |
374 | 424 | paginateSizes: [1, 50, 100, 200, 300, 400, 500, 1000],
|
375 | 425 | paginateNumber: 50,
|
376 | 426 | paginatePage: 1,
|
@@ -549,6 +599,17 @@ export default {
|
549 | 599 | this.tableData = []
|
550 | 600 | },
|
551 | 601 |
|
| 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 | +
|
552 | 613 | executeQuery() {
|
553 | 614 | this.knex
|
554 | 615 | .raw(this.query)
|
@@ -633,6 +694,7 @@ export default {
|
633 | 694 | table = table || this.tableActive
|
634 | 695 |
|
635 | 696 | this.rowsSelected = []
|
| 697 | + this.resetFilter() |
636 | 698 |
|
637 | 699 | this.loadTableCount(table)
|
638 | 700 | this.loadTableColumns(table)
|
@@ -665,7 +727,7 @@ export default {
|
665 | 727 | },
|
666 | 728 |
|
667 | 729 | loadTableData(table) {
|
668 |
| - this.prepareQuery(this.databaseActive, table) |
| 730 | + this.prepareQueryWithFilters(this.databaseActive, table) |
669 | 731 | .select('*')
|
670 | 732 | .limit(this.paginateNumber)
|
671 | 733 | .offset(this.paginateNumber * (this.paginatePage - 1))
|
@@ -737,6 +799,24 @@ export default {
|
737 | 799 | return this.knex.withSchema(database).from(table)
|
738 | 800 | },
|
739 | 801 |
|
| 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 | +
|
740 | 820 | setPaginateNumber(number) {
|
741 | 821 | this.paginateNumber = number
|
742 | 822 | this.loadTable()
|
@@ -836,4 +916,8 @@ body {
|
836 | 916 | .paginate {
|
837 | 917 | width: auto !important;
|
838 | 918 | }
|
| 919 | +
|
| 920 | +.fa-check-square-o { |
| 921 | + margin-left: 2px; |
| 922 | +} |
839 | 923 | </style>
|
0 commit comments