Я суммирую все значения, но почему это не работает для всех динамических итоговых полей - PullRequest
0 голосов
/ 26 октября 2018

Я использую Laravel 5.7 & VueJs 2.5.* ...

КОРОТКО: Когда я ввожу значения, я получаю сумму в поле Всего, но когда я добавляю строку элементовдинамически это не работает для строки других элементов, это просто работает для первой строки.

DISCRIPTION: У меня есть несколько полей ввода Taxes_Breakup, мне нужно сложить их все и показатьв поле Total_Tax_BreakUp.В моих TicketInvoiceItems полях Taxes_Breakup и поле Total_Taxes_Breakup, когда я ввожу все значения, я получаю сумму в Total_Taxes_Breakup, но когда я динамически добавляю поля TicketInvoiceItems, другие поля Total_Tax_BreakUp в TicketInvoiceItems такое же, как и в первом Total_Tax_BreakUp поле. Ниже приведено изображение для лучшего понимания. Спасибо.

Вот мой HTML код:

<tr v-for="(ticketInvoiceItem, key) in form.ticketInvoiceItems" :key="key">
  <!--Passenger Name-->
  <td>
    <input v-model="ticketInvoiceItem.passenger_name" size="40" type="text" name="passenger_name" class="table-control form-control" :class="{ 'is-invalid': form.errors.has('passenger_name') }">
  </td>

  <!-------------------Taxes BreakUps------------------->
  <input v-model="ticketInvoiceItem.tax_SB" id="tax_SB" type="number" name="tax_SB" placeholder="SB" class="table-control form-control" :class="{ 'is-invalid': form.errors.has('tax_SB') }">

  <input v-model="ticketInvoiceItem.tax_SRP" id="tax_SRP" type="number" name="tax_SRP" placeholder="SRP" class="table-control form-control" :class="{ 'is-invalid': form.errors.has('tax_SRP') }">
  <!-------------------AND OTHER TAXES------------------->


  <!-------------------Total Taxes Break Up------------------->
  <td>
    <input :value="totalTax" id="total_tax_breakup" type="number" size="10" name="total_tax_breakup" class="table-control form-control" :class="{ 'is-invalid': form.errors.has('total_tax_breakup') }">
  </td>
</tr>

My VueJs data():

data() {
  return {
    editmode: true,
    ticketInvoices: {},
    form: new Form({
      id: "",
      vendor_id: "",
      ticket_invoice_no: "",
      ticket_invoice_date: "",
      ticket_invoice_grand_total: "",

      ticketInvoiceItems: [{
        id: "",
        ticket_invoice_id: "",
        passenger_name: "",
        sector: "",
        tax_SB: 0,
        tax_SRP: 0,
        tax_YQ: 0,
        tax_RG: 0,
        total_tax_breakup: 0,
      }]
    })
  };
},

Мой computed: код:

computed: {
  totalTax() {
    let calTaxTotal =
      parseInt(this.form.ticketInvoiceItems[0].tax_SB) +
      parseInt(this.form.ticketInvoiceItems[0].tax_SRP) +
      parseInt(this.form.ticketInvoiceItems[0].tax_YQ) +
      parseInt(this.form.ticketInvoiceItems[0].tax_RG);

    this.form.ticketInvoiceItems[0].total_tax_breakup = calTaxTotal;

    return calTaxTotal;

  }
},

enter image description here

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Проблема в вашей компьютерной собственности.Все ваши индексы находятся в 0 или в первой строке вашей таблицы.Если вы хотите добавить более одной строки, вам нужно передать индекс в ваш totalTax.Таким образом, вычисляемое свойство не лучший выбор.Вместо этого превратите его в метод и передайте индекс (или ключ) в метод.

<input :value="getTotalTaxes(key)"
                       id="total_tax_breakup"
                       type="number" size="10"
                       name="total_tax_breakup"
                       class="table-control form-control">

Метод

      methods: {
        /**
         * The index parameter is the current row that you are working on  
         * @param index
         * @returns {number}
         */
        getTotalTaxes(index) {
            let calTaxTotal =
                parseInt(this.form.ticketInvoiceItems[index].tax_SB) +
                parseInt(this.form.ticketInvoiceItems[index].tax_SRP) +
                parseInt(this.form.ticketInvoiceItems[index].tax_YQ) +
                parseInt(this.form.ticketInvoiceItems[index].tax_RG);

            this.form.ticketInvoiceItems[index].total_tax_breakup = calTaxTotal;

            return calTaxTotal;
        }
    }
0 голосов
/ 26 октября 2018
<tr v-for="(ticketInvoiceItem, key) in form.ticketInvoiceItems" :key="key">
  <!--Passenger Name-->
  <td>
    <input v-model="ticketInvoiceItem[key].passenger_name" size="40" type="text" name="passenger_name" class="table-control form-control" :class="{ 'is-invalid': form.errors.has('passenger_name') }" @change="totalTax(key)">
  </td>

  <!-------------------Taxes BreakUps------------------->
  <input v-model="ticketInvoiceItem[key].tax_SB" id="tax_SB" type="number" name="tax_SB" placeholder="SB" class="table-control form-control" :class="{ 'is-invalid': form.errors.has('tax_SB') }" @change="totalTax(key)">

  <input v-model="ticketInvoiceItem[key].tax_SRP" id="tax_SRP" type="number" name="tax_SRP" placeholder="SRP" class="table-control form-control" :class="{ 'is-invalid': form.errors.has('tax_SRP') }"  @change="totalTax(key)">
  <!-------------------AND OTHER TAXES------------------->


  <!-------------------Total Taxes Break Up------------------->
  <td>
    <input :value="totalTax" id="total_tax_breakup" type="number" size="10" name="total_tax_breakup" class="table-control form-control" :class="{ 'is-invalid': form.errors.has('total_tax_breakup') }">
  </td>
</tr> 

для меня я буду использовать @change вместо computed

, введите код ниже в methods

totalTax(key) {
    let calTaxTotal =
      parseInt(this.form.ticketInvoiceItems[key].tax_SB) +
      parseInt(this.form.ticketInvoiceItems[key].tax_SRP) +
      parseInt(this.form.ticketInvoiceItems[key].tax_YQ) +
      parseInt(this.form.ticketInvoiceItems[key].tax_RG);

    this.form.ticketInvoiceItems[key].total_tax_breakup = calTaxTotal;

    return calTaxTotal;

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