AI 辅助大屏开发:怎么让 AI 干活,但别让它干砸

数据大屏实战总结。核心论点:大屏开发的重心在迭代,不在初始生成所有。关键不是让 AI 生成更多代码,是让 AI 生成的代码经得起改。


一、大屏开发和 CRUD 本质上是两件事

CRUD 开发的特点是信息完整、一次性。后端给了字段和接口,列表、表单、详情怎么展示是确定的,AI 按模板填空就能用。

大屏的特点是信息不完整、疯狂改。后端只给数据源,图表长什么样、颜色对不对、布局怎么调------这些是视觉和业务反复看效果、来回改出来的。第一版生成出来,真正的开发才刚刚开始。

两种场景的 AI 策略完全不同:CRUD 重心在"怎么生成对",大屏重心在"怎么随便改不炸"。


二、先分清:什么不变,什么在变

大屏里有一部分东西是定了就基本不改的。还有一部分是整个迭代周期都在来回变的。把这两类拆开,才能在稳定的骨架上安全地改。

不变的 --- 用模板和规约锁住

类型和接口定义:后端 MD 给的字段和接口路径,定了就是定了。这块 AI 填空就行------字段映射到 TypeScript 类型,接口映射到 API 方法。一次生成,后续后端有字段变更才动。

页面结构拓扑:大屏的 Grid 布局------上面一排数字卡片,左边一个大折线图,右边上下两个图表------这个布局定了之后通常不变。改的是里面某个图表换成柱状图或者饼图,不是换布局骨架。

整体主题:深色还是浅色,主色调是什么,颜色变量集中放在一个文件里。定了就不会一个图表一个色号。

文件结构 :每个大屏的文件怎么组织------index.tsx 管页面和 Grid,store.ts(按需) 管数据,components/ 下每个图表一个文件,utils.ts 管数据转换。文件组织方式跨大屏复用,不用每次重新设计。

ECharts 基座:封装一个组件处理 loading、error、空数据、resize 自适应。所有图表组件基于它渲染,不用每张图单独处理这些状态。这是最重要的安全网------AI 生成 option 出错,基座兜底显示"图表渲染出错"而不是白屏。

拓扑示例:数据大屏

一个实际的大屏,用文字描述就是:

顶部一行四个数字卡片(总数、金额、成交、涨跌幅)。左半区一个收益率折线图,右半区上面是评级分布饼图,下面是成交 TOP10 表格。1920×1080,深色主题,30 秒刷新。

页面布局:

erlang 复制代码
┌──────────────────────────────────────────────────────────┐
│  Header: 数据大屏                       30s 刷新 · 深色   │
├──────────┬──────────┬──────────┬─────────────────────────┤
│  StatCard │  StatCard │  StatCard │  StatCard │
│  总数 128  │  金额 5.2亿 │  成交 3.1亿 │ 涨跌 +2.3% │
├────────────────────┬──────────────────────────────────────┤
│                    │  ┌────────────────────────────────┐  │
│                    │  │ 评级分布 (饼图)                  │  │
│  收益率曲线 (折线图)  │  │ AAA 45%  AA 30%  A 20%  BBB 5% │  │
│                    │  └────────────────────────────────┘  │
│  1Y ── 3Y ── 5Y ── │  ┌────────────────────────────────┐  │
│                    │  │ TOP10 成交 (表格)                │  │
│                    │  │ 名称  │ 金额   │ 涨跌           │  │
│                    │  └────────────────────────────────┘  │
└────────────────────┴──────────────────────────────────────┘

对应的组件树:

vbnet 复制代码
index.tsx                              ← Grid 布局骨架
├── StatCards                          ← 四个数字卡片(复用 ×4)
│   └── StatCard                       ←   单个卡片组件
├── YieldCurve                         ← 收益率折线图
│   └── EChartsBase ← option           ←   基座兜底三态
├── RatingDist                         ← 评级分布饼图
│   └── EChartsBase ← option
└── Top10Table                         ← 成交 TOP10 表格
    └── SSearchTable

拆成 Task 就是:

css 复制代码
Task 1  [api]              数据接口 → types.ts + api/index.ts
Task 2  [data-transform]   数据转换 → utils.ts
Task 3  [component-widget] StatCard(1 组件 ×4 实例)
Task 4  [component-chart]  YieldCurve
Task 5  [component-chart]  RatingDist
Task 6  [component]        Top10Table
Task 7  [page-dashboard]   页面骨架 + Store + Grid 组装所有组件

这个拓扑结构定了之后基本不变。迭代改的是"收益率曲线换成面积图"(Task 6 内部改 option)、"加一个国债期货行情"(新建 Task 9 图表组件)、"深色主题太暗了"(主题文件统一换色值)。结构不变,内容在变。

变化的 --- AI 生成,人在迭代中调

图表类型和数量:产品说"加个饼图""柱状图换成折线",改的是图表实例,不是架构。AI 生成 option 对象,人决定要不要、长什么样。

数据处理和 Store 结构:数据怎么从 API 响应转换成图表格式,Store(按需) 怎么组织筛选条件和数据切片。大屏的接口数量和嵌套深度不同,数据流模式(简单/中等/复杂)也不同。这不是一次定死的,是随着接口到位逐步明确的。

Option 配置:ECharts 的 option 对象------颜色、间距、动画、tooltip 格式。这部分 AI 直接生成 JSON,人看效果调。


三、四条边界让改动不炸

大屏改得最多的就是换图表和调参数。如果改一个图表会牵连其他组件,迭代就变成了排雷。四条规则守住边界。

1. 组件独立:删掉它,别的能不能跑

图表组件之间不互相 import。每个图表只被页面组件引用,组件的删除就是删 JSX 里一行 + 删一个文件。加新图表也是在 Grid 里加一行,不碰已有图表。

2. 数据与展示分离:改数据源,要不要动 UI

图表组件内部不调接口 。数据从外面进来------要么 props 传,要么从 Store(按需) 订阅。数据转换逻辑放在独立的 utils.ts 里。后端接口字段变了,只改转换函数,图表组件不用动。

3. Option 外提:改配置不要翻 JSX

ECharts option 抽成独立变量或函数,不内联在 JSX 里。改图表配置------折线换柱状,调颜色------只改 option 定义处,不碰渲染部分。

4. 颜色集中管理:换主题只用改一处

所有色值引用一个 theme 文件,不在组件里硬编码。换主题只改一处,全局生效。


四、什么活交给人,什么活交给 AI

不是按"能不能"分配,是按"反复次数"和"出错成本"分配。

人来做

小调整------改个颜色、换个图表类型、调个间距。这种活人手动改更快,让 AI 读代码 + 理解上下文 + 定位修改点的成本超过手写。

架构决策------数据流用简单模式还是复杂模式、Store 要不要分片。这个需要人理解整体大屏的接口数量和嵌套关系,AI 只能查表建议。

风格判断------"这个颜色太暗了""这个字太小了"。视觉感受 AI 做不了。

AI 来做

生成 option 对象------ECharts 的 option 是 JSON,AI 生成 JSON 的能力没有问题。给一段文字描述("折线图,三条线分别是 1Y/3Y/5Y 收益率,x 轴日期,y 轴百分比"),AI 直接出 option。

数据转换函数------API 返回的字段名和图表需要的格式之间的映射。AI 读 types.ts 和接口文档,生成转换逻辑。

单个图表大改 ------"收益率曲线换成面积图,加一个均线"。这是 D2 修改路径------定位到 YieldCurve.tsx 的 option 变量,替换配置。

新图表加入已有大屏------D1 修改路径。AI 生成新图表组件,人在 Grid 里加一行引用。不改已有图表。

什么时候不找 AI

改一个间距、调一个色值------打开文件,手动改,保存。


五、迭代才是主战场

大屏真正的开发时间不在第一次生成,在后面的反复调整。

场景 改什么 不改什么
加/换图表 index.tsx Grid 区域新增或替换引用 已有图表组件、Store、API
改图表配置 components/{Chart}.tsx 的 option 变量 Store、API、其他图表
改主题/颜色 主题文件统一替换色值 各图表的 option 结构
加筛选条件 store.ts 加字段,页面加 FilterBar 图表组件的数据接收方式
加/减指标卡片 index.tsx Grid 区域 Store、已有图表
改数据源/字段 types.ts → API → 组件逐层跟踪 图表 option 结构

每次改动不改变既定数据流模式,不牵连其他图表。改一个图表只动一个文件,改布局只动 Grid,改数据只动转换函数。


六、ECharts 基座:不靠 AI 自觉的最后防线

AI 生成的图表代码有三个常见的遗漏:loading 态、error 态、空数据占位。如果你靠 AI 自觉去"记得加",十张图表总有一张漏。

封装一个 EChartsBase 组件,内置这三种状态。所有图表组件基于它渲染:

tsx 复制代码
<EChartsBase
  option={option}
  loading={loading}
  error={error}
  empty={!data.length}
  height={300}
/>

AI 不需要记得处理异常------这是基座的活。AI 只需要正确传 props,基座兜底一切异常状态。


七、总结

大屏 AI 辅助开发的核心不是"让 AI 一次生成对",是设计一套让 AI 改不坏的边界

  • 不变的锁进模板和规约,变化的放开让 AI 生成、人在迭代中调整
  • 组件独立、数据分离、option 外提、颜色集中------四条边界让每次改动不牵连其他组件
  • 小调整手动,单图大改造 AI,架构决策人拍板
  • EChartsBase 基座兜底 loading/error/empty,不靠 AI 自觉

最终衡量标准:删掉一个图表,页面还能不能跑?改一个数据源,UI 要不要动?<|

相关推荐
凌涘1 小时前
深入理解 JavaScript 执行机制:从执行上下文到调用栈全解析
前端·javascript
utmhikari1 小时前
【AI原生】用Vibe Coding写产品前端原型的一些经验
前端·ai·产品经理·web·web开发·ai-native·qoder
li星野1 小时前
从零搭建文件上传系统:FastAPI 后端 + Streamlit 前端
前端·状态模式·fastapi
YAwu111 小时前
手写一个符合 Promise/A+ 规范的 Promise(附完整代码)
前端·javascript
暗不需求1 小时前
从路虎汽车小程序看微信小程序开发的最佳实践
前端·javascript·微信小程序
用户059540174461 小时前
我把RAG对话记忆测试从手工用例改成ChromaDB自动化评估,Bug发现率翻了4倍
前端·css
向日的葵0061 小时前
vue路由(二)
前端·javascript·vue.js·vue
姓王者1 小时前
解决QQ浏览器等魔改内核下SVG背景图颜色异常变白的问题 | 姓王者的博客
前端
ejinxian1 小时前
Angular v22 正式发布:Signal Forms、Angular Aria 和 AI 开发工具全面生产化
前端·javascript·angular.js