Skip to content

feat: 供应商支持多分组 #113

@ding113

Description

@ding113

📋 描述

当前 Provider 仅支持单一 groupTag(字符串)。需要支持 Provider 归属多个分组,匹配到用户的多分组(用户端已支持逗号分隔)。

🎯 目标

  • Schema 支持 provider 多分组(向后兼容)
  • 选择器支持多分组匹配(包含任一即通过)
  • UI 支持多选分组(创建/编辑表单)

📍 当前实现

  • Provider: src/drizzle/schema.ts:76 groupTag: varchar('group_tag', ...)
  • 选择器:用户端多分组支持(逗号分隔)src/app/v1/_lib/proxy/provider-selector.ts:359

🔧 实现方案

子任务清单

  • 数据层:新增可选 groupTags: string[] | null
    • 文件: src/drizzle/schema.ts:63
    • 技术要点: jsonb('group_tags').$type<string[]|null>().default(null);保留旧字段兼容迁移
  • 选择器:匹配逻辑更新
    • 文件: src/app/v1/_lib/proxy/provider-selector.ts:367
    • 技术要点: 若 provider 存在 groupTags 则与 userGroups 求交集判定
  • 表单:多选输入(chips)
    • 文件: src/app/[locale]/settings/providers/_components/forms/provider-form.tsx:1

技术细节

// schema 片段(向后兼容保留 groupTag)
export const providers = pgTable('providers', {
  // ...
  groupTag: varchar('group_tag', { length: 50 }),
  groupTags: jsonb('group_tags').$type<string[] | null>().default(null),
});

✅ 验收标准

  • 具备多分组持久化与查询能力
  • 选择器依据多分组过滤有效
  • UI 可新增/编辑多个分组值

📝 备注

为后续“分组降级策略”提供数据基础。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions