@loom-framework/core 0.1.0-alpha.80 → 0.1.0-alpha.82

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loom-framework/core",
3
- "version": "0.1.0-alpha.80",
3
+ "version": "0.1.0-alpha.82",
4
4
  "description": "Loom framework - DataAdapter, Capability Generator, config system, backend server, CLI",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -41,7 +41,7 @@ npx -p @loom-framework/core loom init <name> --description <desc> --adapter <fil
41
41
  loom generate page <Name> --model <model-name>
42
42
  ```
43
43
 
44
- 此命令自动生成:CRUD 页面(含 AI 按钮)、App.tsx 路由接线、后端 API、应用 Skill。数据实体立即可通过 `loom data` CLI 和 AI 对话使用。
44
+ 此命令自动生成:CRUD 页面(含 AI 按钮)、App.tsx 路由接线、后端 API、应用 Skill。模型立即可通过 `loom data` CLI 和 AI 对话使用。
45
45
 
46
46
  ### 4. 补充应用 Skill 描述(必须)
47
47
 
@@ -66,7 +66,7 @@ loom dev
66
66
 
67
67
  ### 迭代:修改配置 → 重新生成
68
68
 
69
- 编辑 `loom.config.ts`(添加/修改数据实体或 AI 按钮)→ 重新执行步骤 3。
69
+ 编辑 `loom.config.ts`(添加/修改模型或 AI 按钮)→ 重新执行步骤 3。
70
70
 
71
71
  ### 可选:添加更多 Skill
72
72
 
@@ -82,6 +82,7 @@ loom dev
82
82
  | `loom dev` | 启动开发环境(`--skip-generate` `--backend-only` `--frontend-only`) |
83
83
  | `loom build` | 生产构建 |
84
84
  | `loom generate page <name> --model <model>` | 生成 CRUD 页面 + 应用 Skill(含 aiButtons 则自动集成) |
85
+ | `loom generate dashboard <name>` | 从 dashboard.config.json 生成 Dashboard 数据概览页面 |
85
86
  | `loom generate capabilities` | 仅重新生成应用 Skill 的 `references/models.md` |
86
87
  | `loom generate skill <name>` | 生成自定义 Skill 脚手架 |
87
88
 
@@ -119,12 +120,24 @@ export default defineConfig({
119
120
  id: 'analyze', // 带变量的示例
120
121
  label: '分析',
121
122
  prompt: '分析{{questionContent}},错误答案:{{wrongAnswer}}',
122
- placement: 'wrong_questions', // 可选:限制按钮只出现在指定数据实体的页面,逗号分隔多个实体名;省略则出现在所有页面
123
+ placement: 'wrong_questions', // 可选:限制按钮只出现在指定模型页面,逗号分隔多个模型名;省略则出现在所有页面
123
124
  }],
124
125
  });
125
126
  ```
126
127
 
127
- 高级配置(`ai.claudeCode`、`server`、各数据实体的 `adapters`、`indexes`)见 `references/data-model.md`。
128
+ 高级配置(`ai.claudeCode`、`server`、按模型 `adapters`、`indexes`)见 `references/data-model.md`。
129
+
130
+ ### 可选:生成 Dashboard(数据概览页面)
131
+
132
+ Dashboard 采用**两阶段**工作流:AI 生成 `dashboard.config.json` → 用户审查后执行 `loom generate dashboard <name>` 生成页面。
133
+
134
+ ```bash
135
+ # 阶段 1:AI 生成配置(详见 references/dashboard.md)
136
+ # 阶段 2:
137
+ loom generate dashboard <name>
138
+ ```
139
+
140
+ 详细的配置 Schema、图表类型说明和示例见 **references/dashboard.md**。
128
141
 
129
142
  ## API 路由格式
130
143
 
@@ -0,0 +1,161 @@
1
+ # 生成 Dashboard(数据概览页面)
2
+
3
+ Dashboard 采用**两阶段**工作流:AI 设计配置 → 代码生成页面。
4
+
5
+ ## 阶段 1:生成 dashboard.config.json
6
+
7
+ 根据项目的 `loom.config.ts` 中的数据模型,站在用户角度设计 Dashboard,生成 `dashboard.config.json` 到项目根目录。
8
+
9
+ **设计原则:**
10
+ - 统计卡片放第一行(一眼看到关键数字)
11
+ - 分布图表按业务重要性排列
12
+ - 趋势图放最后一行(需要更多空间)
13
+ - 每行不超过 4 个元素
14
+ - 标题用业务语言,不用字段名
15
+
16
+ ### 配置 Schema
17
+
18
+ ```jsonc
19
+ {
20
+ "name": "overview", // 必填:Dashboard 标识(同模型命名规则)
21
+ "description": "数据概览", // 可选:侧边栏展示名
22
+ "models": ["model_a", "model_b"], // 必填:关联的数据模型名列表
23
+ "layout": [ // 必填:布局定义,数组每项代表一行
24
+ {
25
+ "row": [ // 每行包含一组 widget
26
+ {
27
+ "type": "stat", // 图表类型,见下方图表类型表
28
+ "title": "总数", // 业务语言标题
29
+ "model": "model_a", // 数据模型名
30
+ "span": 6, // 可选:Col 宽度(1-24),省略则自动均分
31
+ "aggregate": "count", // 可选:count|sum|avg|min|max(默认 count)
32
+ "field": "score", // aggregate 非 count 时必填:数值字段名
33
+ "filter": { "status": "active" }, // 可选:聚合前筛选条件
34
+ "groupBy": "category", // 可选:分组字段
35
+ "interval": "month" // 可选:date 字段分组粒度 day|week|month(默认 month)
36
+ }
37
+ ]
38
+ }
39
+ ]
40
+ }
41
+ ```
42
+
43
+ ### 图表类型与数据需求
44
+
45
+ #### 数值类
46
+
47
+ | type | 需要 groupBy | 需要 field | 需要 interval | 生成效果 |
48
+ |------|-------------|-----------|--------------|---------|
49
+ | `stat` | 否 | aggregate=avg/sum 时需要 | 否 | Ant Design Statistic 数值卡片 |
50
+ | `gauge` | 否 | 是(0-1 之间的进度值) | 否 | G2 仪表盘(进度/达标率) |
51
+ | `liquid` | 否 | 是(0-1 之间的进度值) | 否 | G2 水波图(百分比/进度) |
52
+
53
+ #### 占比类
54
+
55
+ | type | 需要 groupBy | 需要 field | 需要 interval | 生成效果 |
56
+ |------|-------------|-----------|--------------|---------|
57
+ | `pie` | 是(enum/string 字段) | 否 | 否 | G2 饼图(分布占比) |
58
+ | `ring` | 是(boolean/enum 字段) | 否 | 否 | G2 环形图(占比对比) |
59
+ | `treemap` | 是(多层级字段) | 否 | 否 | G2 矩形树图(层级占比) |
60
+
61
+ #### 对比类
62
+
63
+ | type | 需要 groupBy | 需要 field | 需要 interval | 生成效果 |
64
+ |------|-------------|-----------|--------------|---------|
65
+ | `bar` | 是 | 否 | 否 | G2 条形图(横向分类对比) |
66
+ | `stacked_bar` | 是 | 否 | 否 | G2 堆叠条形图(组成+对比) |
67
+ | `grouped_bar` | 是 | 否 | 否 | G2 分组条形图(并列对比) |
68
+ | `radar` | 是 | 否 | 否 | G2 雷达图(多维度对比) |
69
+ | `funnel` | 是 | 否 | 否 | G2 漏斗图(阶段转化) |
70
+
71
+ #### 趋势类
72
+
73
+ | type | 需要 groupBy | 需要 field | 需要 interval | 生成效果 |
74
+ |------|-------------|-----------|--------------|---------|
75
+ | `line` | 是(推荐 date 字段) | 否 | 是 | G2 折线图(时间趋势) |
76
+ | `area` | 是(推荐 date 字段) | 否 | 是 | G2 面积图(累计趋势) |
77
+
78
+ #### 分布类
79
+
80
+ | type | 需要 groupBy | 需要 field | 需要 interval | 生成效果 |
81
+ |------|-------------|-----------|--------------|---------|
82
+ | `scatter` | 是 | 否 | 否 | G2 散点图(相关性/分布) |
83
+ | `heatmap` | 是 | 是(数值) | 否 | G2 热力图(密度/交叉分析) |
84
+
85
+ ## 阶段 2:执行 generate dashboard
86
+
87
+ 用户审查 `dashboard.config.json` 后,运行命令生成页面:
88
+
89
+ ```bash
90
+ loom generate dashboard <name>
91
+ ```
92
+
93
+ 此命令会:
94
+ 1. 读取并校验 `dashboard.config.json`
95
+ 2. 验证引用的模型是否存在于 `loom.config.ts`
96
+ 3. 生成 Dashboard TSX 页面(含 `useData` + `useChartData` + `DashboardChart`)
97
+ 4. 自动接线 App.tsx(添加 import、navItem、switch case)
98
+ 5. 检测 `@antv/g2` 是否已安装,未安装则提示
99
+
100
+ **前置依赖:** Dashboard 使用 @antv/g2 渲染图表,需在 frontend 目录安装:
101
+
102
+ ```bash
103
+ cd frontend && pnpm add @antv/g2
104
+ ```
105
+
106
+ ## 完整配置示例
107
+
108
+ 以小学生错题管理平台为例:
109
+
110
+ ```json
111
+ {
112
+ "name": "overview",
113
+ "description": "错题数据概览",
114
+ "models": ["wrong_questions", "review_plans"],
115
+ "layout": [
116
+ {
117
+ "row": [
118
+ { "type": "stat", "title": "错题总数", "model": "wrong_questions", "aggregate": "count" },
119
+ { "type": "stat", "title": "已掌握", "model": "wrong_questions", "aggregate": "count", "filter": { "isMastered": true } },
120
+ { "type": "stat", "title": "待攻克", "model": "wrong_questions", "aggregate": "count", "filter": { "isMastered": false } },
121
+ { "type": "gauge", "title": "掌握率", "model": "wrong_questions", "aggregate": "count", "field": "reviewCount" }
122
+ ]
123
+ },
124
+ {
125
+ "row": [
126
+ { "type": "pie", "title": "科目分布", "model": "wrong_questions", "groupBy": "subject", "span": 8 },
127
+ { "type": "bar", "title": "错误类型分布", "model": "wrong_questions", "groupBy": "errorType", "span": 8 },
128
+ { "type": "ring", "title": "难度分布", "model": "wrong_questions", "groupBy": "difficulty", "span": 8 }
129
+ ]
130
+ },
131
+ {
132
+ "row": [
133
+ { "type": "radar", "title": "各科目掌握概览", "model": "wrong_questions", "groupBy": "subject", "span": 8 },
134
+ { "type": "line", "title": "错题录入趋势", "model": "wrong_questions", "groupBy": "createdAt", "interval": "month", "span": 16 }
135
+ ]
136
+ }
137
+ ]
138
+ }
139
+ ```
140
+
141
+ ## 追加自定义图表
142
+
143
+ 生成后的 Dashboard 页面是普通 TSX,可直接编辑追加图表:
144
+
145
+ 1. 使用 `useChartData` 准备数据(或自定义聚合逻辑)
146
+ 2. 使用 `/antv-g2-chart` skill 生成 G2 v5 Spec 代码
147
+ 3. 添加 `<DashboardChart spec={...} />` 组件
148
+
149
+ 示例——追加一个科目×年级的堆叠柱状图:
150
+
151
+ ```tsx
152
+ // 在已有的 Dashboard 页面中追加
153
+ const subjectGradeData = useChartData(wrongQuestionsList, { groupBy: 'subject' });
154
+
155
+ <DashboardChart spec={{
156
+ type: 'interval',
157
+ data: subjectGradeData,
158
+ encode: { x: 'name', y: 'value', color: 'name' },
159
+ transform: [{ type: 'stackY' }],
160
+ }} />
161
+ ```