Сбросить Vue Bootstrap Table - PullRequest
       9

Сбросить Vue Bootstrap Table

0 голосов
/ 20 июня 2019

я использую vue-bootstrap4-table в моем приложении у меня есть пользовательский ввод, хотя я ищу и заполняю данные, теперь мне нужно создать функцию, в которой они являются кросс-кнопкой внутри поле поиска и при нажатии на него оно должно сбросить таблицу в пустое состояние, вот мой код

<template>
            <auto-complete
              @autocomplete-result-selected="setCustomer"
              placeholder="Enter Customer name"
              :selected="selectedCustomer"
              :styles="{width: 'calc(100% - 10px)'}"
              index="locations"
              attribute="name"
            >
              <template slot-scope="{ hit }">
                <span>
                  {{ hit.customer.company && hit.customer.company + ' - ' }}{{ hit.customer.fname }}
                  {{ hit.customer.lname }}
                </span>
              </template>
            </auto-complete>
            <i class="fas fa-times" @click="clearTable()" v-show="selectedCustomer"></i>
          </div>
        </div>

</template>

<script>
import http from "../../helpers/api.js";
import AutoComplete from "../autocomplete/Autocomplete";
import axios from "axios";
import VueBootstrap4Table from "vue-bootstrap4-table";
export default {
  components: {
    "auto-complete": AutoComplete,
    VueBootstrap4Table
  },
  computed: {},
  data() {
    return {
      value: "",
      selectedCustomer: "",
      selectedFirstName: "",
      selectedLastName: "",
      selectedFields: [
        { name: "Invoice", value: "invoices" },
        {
          name: "Estimate",
          value: "workorder_estimates"
        }
      ],
      filters: [
        { is_checked: true, value: "invoices", name: "Invoice" },
        { is_checked: true, value: "workorder_estimates", name: "Estimate" }
      ],
      selectedFilters: [],
      estimateChecked: false,
      invoiceChecked: false,
      config: {
        card_mode: false,
        show_refresh_button: false,
        show_reset_button: false,
        global_search: {
          placeholder: "Enter custom Search text",
          visibility: false,
          case_sensitive: false
        },
        pagination: true,
        pagination_info: false,
        per_page: 10,
        rows_selectable: true,
        server_mode: true,
        preservePageOnDataChange: true,
        selected_rows_info:true
      },
      classes: {},
      rows: [],
      columns: [
        {
          label: "TYPE",
          name: "type"
        },
        {
          label: "ID",
          name: "distinction_id"
        },
        {
          label: "CUSTOMER NAME",
          name: "full_name"
        },
        {
          label: "SERVICE DATE",
          name: "service_date"
        },
        {
          label: "ADDRESS",
          name: "address1"
        },
        {
          label: "CREATE DATE",
          name: "created_at"
        }
      ],
      queryParams: {
        sort: [],
        filters: [],
        global_search: "",
        per_page: 10,
        page: 1
      },
      selected_rows: [],
      total_rows: 0
    };
  },
  methods: {
    onNameSearch() {
      this.selectedFilters = ["invoices", "workorder_estimates"];
      this.fetchData();
    },
    clearTable(){
        this.rows=[];
        console.log(this.config.selected_rows_info);
        this.config.selected_rows_info=false;
    },
    onChangeQuery(queryParams) {
      console.log(queryParams);
      this.queryParams = queryParams;
      this.fetchData();
    },
    onRowClick(payload) {
      console.log(payload);
    },
    setCustomer(selectedResult) {
      this.selectedCustomer = selectedResult.customer.company
        ? `${selectedResult.customer.company + " - "}${
            selectedResult.customer.fname
          } ${selectedResult.customer.lname}`
        : `${selectedResult.customer.fname} ${selectedResult.customer.lname}`;

      this.selectedFirstName = selectedResult.customer.fname;
      this.selectedLastName = selectedResult.customer.lname;
    },
    changeCheck(event, index, value) {
      var checked = event.target.checked;
      switch (value) {
        case "invoices":
          if (checked) {
            this.selectedFields.push({ name: "Invoice", value: "invoices" });
            this.invoiceChecked = true;
            var data = this.filters[index];
            data.is_checked = true;
            Vue.set(this.filters, data, index);
          } else {
            var index = this.selectedFields.findIndex(
              item => item.value === value
            );
            this.selectedFields.splice(index, 1);
            this.invoiceChecked = false;
            var data = this.filters[index];
            data.is_checked = false;
            Vue.set(this.filters, data, index);
          }
          break;

        case "workorder_estimates":
          if (checked) {
            this.selectedFields.push({
              name: "Estimate",
              value: "workorder_estimates"
            });
            var data = this.filters[index];
            data.is_checked = true;
            Vue.set(this.filters, data, index);
          } else {
            var index = this.selectedFields.findIndex(
              item => item.value === value
            );
            this.selectedFields.splice(index, 1);
            this.estimateChecked = false;
            var data = this.filters[index];
            data.is_checked = false;
            Vue.set(this.filters, data, index);
          }
          break;
      }
    },
    removeFilter(index, value) {
      switch (value) {
        case "workorder_estimates":
          this.selectedFields.splice(index, 1);
          this.estimateChecked = false;
          var i = this.filters.findIndex(item => item.value === value);
          var data = this.filters[i];
          data.is_checked = false;
          Vue.set(this.filters, data, i);
          break;

        case "invoices":
          this.selectedFields.splice(index, 1);
          this.invoiceChecked = false;
          var i = this.filters.findIndex(item => item.value === value);
          var data = this.filters[i];
          data.is_checked = false;
          Vue.set(this.filters, data, i);
          break;
      }
    },
    updateFilters() {
      this.selectedFilters = [];
      this.selectedFields.forEach(element => {
        this.selectedFilters.push(element.value);
      });

      if(this.selectedFilters.length == 0){
        this.selectedFilters = ['invoices', 'workorder_estimates'];
      }

      this.fetchData();
    },
    async fetchData() {
      var final = [];
      try {
        var result = await http.post("/estimate-invoice-search", {
          type: this.selectedFilters,
          search: {
            value: this.selectedFirstName + " " + this.selectedLastName
          },
          per_page: this.queryParams.per_page,
          page: this.queryParams.page,
          sort: this.queryParams.sort
        });
        this.total_rows = result.recordsFiltered;
        result.data.forEach(element => {
          element.full_name = element.first_name + " " + element.last_name;
          final.push(element);
        });
        this.rows = final;
      } catch (error) {
        console.log(error);
      }
    }
  },
  mounted() {}
};
</script>

теперь метод с именем clearTable здесь я хочу сбросить мою таблицу до той точки, которую мы видим при обновлении страницы в методе, который я использовал this.rows=[];, это очищает все строки, что именно то, что я хочу, но текст, который показывает количество строк, все еще их, и я не могу удалить его, пожалуйста, просмотрите изображение ниже для уточнения enter image description here

Я прочитал документацию по ссылка , но, похоже, не могу найти решение для сокрытия текста, это как-то так?

1 Ответ

1 голос
/ 20 июня 2019

Похоже, вы используете total_rows в качестве переменной для количества строк в вашем шаблоне здесь:

<span>{{total_rows}}</span> Result(s)

Единственное место в коде, который вы задали этозначение находится в fetchData(), где вы устанавливаете:

this.total_rows = result.recordsFiltered;


Вы можете либо:

1) Сделать total_rows вычисляемое свойство (рекомендуется), которое возвращает длину rows (я считаю, что строки всегда имеют ту же длину, что и total_rows из вашего кода)

-или-

2) Просто установите this.total_rows = 0; в вашей функции clearTable()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...