V2.0.0-alpha.59 JS区块创建的卡片,点击无法切换弹窗类型

用AI员工写了一个仪表片,我想点击每个卡片会弹出对话框,但是现在只有第一个卡片会弹出对话框,其他卡片都是抽屉,AI修改了很多次了,还是不行,这个是不是缺陷?
点击事件的代码:
// 处理卡片点击事件 - 修改为只弹出简单视图
async function handleCardClick(cardType) {
try {
let title = ‘’;

// 根据卡片类型设置标题
switch(cardType) {
  case 'budget-total':
    title = `${selectedYear}年度申报总金额详情`;
    break;
    
  case 'project-count':
    title = `${selectedYear}年度申报项目详情`;
    break;
    
  case 'total-issued':
    title = '预算下达总额详情';
    break;
    
  case 'increase-amount':
    title = '调增金额详情';
    break;
    
  case 'decrease-amount':
    title = '调减金额详情';
    break;
    
  case 'recovery-amount':
    title = '回收金额详情';
    break;
    
  default:
    title = '详情视图';
}

// 打开简单视图,不关联任何数据表
await ctx.openView(`${ctx.model.uid}-${cardType}-detail`, {
  mode: 'dialog',
  title: title,
  size: 'medium',
  // 只传递必要的参数,不关联数据表
});

} catch (error) {
console.error(‘打开详情弹窗失败:’, error);
ctx.message.error('打开详情弹窗失败: ’ + error.message);
}
}



想到一个思路,为每个卡片单独设置点击事件可以解决。

主要修改:

  1. 移除了统一的handleCardClick 函数 ,改为为每个卡片单独定义点击处理函数:
  • handleTotalAmountClick() - 处理申报总金额卡片点击
  • handleProjectCountClick() - 处理申报项目数卡片点击
  • handleTotalIssuedClick() - 处理预算下达总额卡片点击
  • handleIncreaseAmountClick() - 处理调增金额卡片点击
  • handleDecreaseAmountClick() - 处理调减金额卡片点击
  • handleRecoveryAmountClick() - 处理回收金额卡片点击
  1. 修改了renderCard 函数 ,增加了一个onClickHandler 参数,用于接收独立的点击处理函数。
  2. 在调用renderCard 函数时 ,为每个卡片传递了对应的点击处理函数作为参数。
  3. 每个点击处理函数 都会打开一个nocobase默认的视图弹窗,使用不同的视图ID:
  • ${ctx.model.uid}-budget-total-detail
  • ${ctx.model.uid}-project-count-detail
  • ${ctx.model.uid}-total-issued-detail
  • ${ctx.model.uid}-increase-amount-detail
  • ${ctx.model.uid}-decrease-amount-detail
  • ${ctx.model.uid}-recovery-amount-detail

这样修改后,每个卡片都有独立的点击事件处理函数,点击后会打开对应的nocobase默认视图弹窗,而不需要设置过滤条件或关联数据表。