Skip to content

feat: 实现项目创建页 /projects/new(Refs #99) #141

Description

@huyanxius

问题

main 上没有任何地方能创建项目。首页「工作流画布」卡片的两条动作都落在 /projectspages/home/index.tsx:88 的注释写明这是占位;项目中心的「+ 新建项目」从加入那天起就是 disabled,title 写着「新建项目流程不在本模块中」。用户看得到项目列表,建不出项目。

#99 把列表、创建、详情放在一起,其中列表与详情已由 #118 落地,本 issue 只补创建这一段。

目标

用一页表单创建真实项目,首页与项目中心两个入口共用同一页。

范围

包含:

  • /projects/new 页面与路由,挂在 AppShell 下,保留全局顶栏
  • 表单字段严格按 entities/projectCreateProjectInput
  • 写入只经 projectApis.create
  • 首页「创建新项目」与项目中心「+ 新建项目」改指该页
  • 校验、业务错误与传输错误的区分
  • 组件测试

不包含:

产品规则

  • 字段:项目名称、游戏视角、方向数量、精灵宽高、画风约束。
  • 名称限 20 字(后端 String(20));同一用户下不可重名,重名由后端判定。
  • 视角与朝向各三档,取值经 entity 适配器映射为后端枚举,页面不自己拼数字。
  • 精灵宽高各自 32–2048,给常用档位快选并允许自定义。
  • 提交中禁用按钮,连续点击只发一次请求。
  • 失败保留已填内容:业务错误原样显示后端 message,传输错误显示统一文案。
  • 成功后进入 /projects/:projectId

架构边界

允许:经 @/entitiesprojectApis 写入;保存表单临时 UI 状态。

禁止:页面直接 fetch;新增 Store 或 localStorage;引入 features、Workflow、Generation;把 ownerId 写成常量假 ID 让创建看起来能用。

验收标准

  • /projects/new 可直达与刷新,首页和项目中心两个入口都到这里。
  • 名称超长、必填缺失在提交前拦下。
  • 重名时显示后端返回的具体原因,表单内容不丢。
  • 连续点击创建只发一次请求。
  • 成功后跳 /projects/:projectId
  • ownerId 无来源时创建入口禁用并说明原因,不使用假 ID。
  • 页面中不出现 fetch、Store、localStorage。
  • format:checklinttypechecktestbuild 全部通过。

依赖

后端 POST /projects 在 PR #75#126,未进 main;两者 project_name 限长不一致(20 与 64),本页按更严的 20 实现。ownerId 需要当前用户来源,/auth 同在 PR #75,接入前创建入口禁用。

备注

参考图字段 sprite_sample_url 后端已有,前端缺文件上传能力(PR #111),本 PR 之后单独立 PR 解决。

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestmile3Milestone 3

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions