Skip to content

导出/导入文件名与多语言优化:显示名+视图名+时间戳命名、模板全中文、导出↔导入选项标签闭环 #2916

Description

@baozhoutao

背景(用户反馈,3 个递进诉求)

  1. 导出文件名难用:CSV/Excel 导出直接落盘为 contracts.csv 这种裸 API 名,重复导出互相覆盖、中文用户不可读。期望「对象显示名-时间戳.扩展名」。
  2. 导入「下载模板」仍有英文:表头漏出 "Owner"/"Done"/"Sync Status" 等英文,示例行是 Backlog/prepare 这类 slug/英文标签。深挖后还发现平台级缺陷:导出/模板写出的是翻译后的选项标签,但导入 coercion 只认作者原始标签——用户把自己刚导出的中文文件原样导回,select 字段全报 invalid_option(导出↔导入闭环断裂)。
  3. 文件名希望带上视图名:同一对象不同保存视图(如 In Progress / Done)的导出文件名完全相同,无法区分。

方案与范围

objectui(前端,PR objectstack-ai/objectui#2491)

  • buildExportFileName(ext, { prefix, label, objectName, viewLabel }, now?):生成 对象显示名-视图名-yyyymmdd-hhmmss.扩展名;exportOptions.fileNamePrefix 仍为完整前缀;视图名与对象名重复时省略;80 字符截断 + 非法字符清洗(保留 Unicode)。
  • ObjectGrid / ListView 全部导出路径统一走它;app-shell 与 plugin-view 的 ObjectView 把 viewDef.label 写进传给 ListView 的 schema(此前从不传递)。
  • 导入模板:示例行优先取选项显示标签;模板文件名本地化 {{object}}-导入模板.csv

framework(服务端,PR #2911)

  • GET /data/:object/exportContent-Disposition 改为「对象显示名-时间戳」,RFC 5987/6266 双写(ASCII 兜底 + filename*=UTF-8''…)。
  • 系统字段(owner_id/created_at/…)标签内置 en/zh-CN/ja-JP/es-ES 回退,修掉 "Owner" 漏出。
  • 导入接受翻译后选项标签:prepareImportRequest 新增 localizeSchema 钩子,REST 导入路由传 translateMetaItem,翻译标签并入选项匹配同义词;作者标签/选项 code 照常,非法值照常报错。
  • plugin-reports 附件文件名清洗保留 Unicode;showcase 补全 showcase_task 翻译包并开启导出演示。

验收标准(均已真机 UI 实测通过)

  • 导出 CSV/XLSX 落盘名:任务-In Progress-20260714-082725.csv / …-082801.xlsx
  • 模板落盘名 任务-导入模板.csv,表头与示例行零英文(所有者,…,同步状态,同步错误 + 待规划/低/已同步)
  • 中文导出文件原样导回:dry-run {"total":1,"ok":1,"errors":0};英文标签不回归;非法值仍报 invalid_option
  • 单测:rest 265/265、spec 6756、export-filename 15/15、plugin-list 149、plugin-grid 194、plugin-view 28、app-shell 698
  • 双仓 PR CI 全绿

关联

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions