You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue中v-table仅在指定行/td渲染数组元素的问题及解决

Vue表格工作日人员分配展示问题

我是Vue.js新手,实现了一个按当月天数(29-31行)展示的v-table,每行包含日期、星期、人员三列。通过后端请求获取21条人员数据,存入计算属性filteredPersons数组中。需求是仅在非周末/非节假日的日期行的人员列显示对应人员(通过isWeekendOrHoliday(n)判断是否为周末/节假日),但当前代码中,若日期n是周末/节假日,filteredPersons[n]不显示,n继续递增,导致数组中部分人员永远无法展示。

原代码

<v-table>
    <thead>
    <tr>
        <th>Date</th>
        <th>Weekday</th>
        <th>Person</th>
    </tr>
    </thead>
    <tbody>
    <tr v-for="n in dIM" :key="n" :class="{greyRow: isWeekendOrHoliday(n) === true}">
      <td class="tf">{{n}}</td>
        <td class="tf">{{getWeekdays(n)}}</td>
      <td>
        <span v-if="!isWeekendOrHoliday(n)">
            {{filteredPersons[n]}}
        </span>
      </td>
    </tr>
    </tbody>
</v-table>

解决方法

通过重新构建计算属性,将人员数据与工作日日期一一对应,实现所有人员都能在工作日行展示:

  • 从后端数据中提取人员数组
  • 筛选出当月所有工作日日期
  • 将人员数组与工作日数组合并为以日期为键、人员为值的对象
  • 模板中通过日期直接匹配对应人员

修改后的计算属性代码:

filteredPersons() {
        let persons = []
        let weekdays = []
        // 提取后端返回的人员数据
        for (let i = 0; i < 32; i++) {
          if (this.data[`${this.year}_0${this.month+1}`] && this.data[`${this.year}_0${this.month+1}`].hasOwnProperty(i)) {
            persons.push(this.data[`${this.year}_0${this.month+1}`][i])
          }
        }
        // 筛选当月的工作日日期
        for (let i = 1; i < this.dIM+1; i++) {
            if (!this.isWeekendOrHoliday(i)) {
              weekdays.push(i)
            }
        }
        // 建立工作日日期与人员的对应关系
        const weekdaysAndPersons = {};
        weekdays.forEach((day, index) => {
          weekdaysAndPersons[day] = persons[index % persons.length];
        });
        return weekdaysAndPersons
      }

模板中人员列的代码:

<td>
    <span v-if="!isWeekendOrHoliday(n)">
        {{filteredPersons[n]}}
    </span>
</td>

内容的提问来源于stack exchange,提问作者user25025100

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 21:05:56