dauren101
@dauren101
Python, Django ,Vue.js

Группировка и ограничение опций в select vue.js?


https://codepen.io/dauren10/pen/REYJye
Как можно сделать так чтобы в селекте каждой цели пользователь мог выбрать максимум 100?
Т.е он выбрал для первой задачи 20, тогда для второй и третьей остается по 40. В общем чтобы по каждой цели опции были на 100 не больше.
Аналогично для 2 цели выбрал скажем 50 для четвертой задачи, тогда пятая тоже 50.
И все цели таким же образом.
  • Вопрос задан
  • 242 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега Vue.js
Данные по целям и составляющим их задачам сложить в массив:

data: () => ({
  goals: [
    {
      name: '...',
      tasks: [
        { name: '...', value: 0 },
        { name: '...', value: 0 },
        ...
      ],
    },
    ...
  ],
}),

Сделать метод, который на основании суммы задач будет определять, какие value доступны для выбора:

methods: {
  getValues(tasks, task) {
    const max = 100 - tasks.reduce((acc, n) => acc + n.value, -task.value);
    return [ 0, 10, 20, 30, 40, 50, 60 ].filter(n => n <= max);
  },
},

Отрендерить select'ы:

<tr v-for="g in goals">
  <td>{{ g.name }}</td>
  <td>
    <div v-for="t in g.tasks" class="task">
      {{ t.name }}
      <select v-model.number="t.value">
        <option v-for="v in getValues(g.tasks, t)" :value="v">{{ v }}</option>
      </select>
    </div>
  </td>
</tr>

https://jsfiddle.net/qmu1enhy/
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы