@loom-framework/core 0.1.0-alpha.42 → 0.1.0-alpha.44
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/dist/cli/commands/generate-page.d.ts.map +1 -1
- package/dist/cli/commands/generate-page.js +107 -38
- package/dist/cli/commands/generate-page.js.map +1 -1
- package/dist/cli/commands/init.js +28 -13
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/helpers/field-template.d.ts.map +1 -1
- package/dist/cli/helpers/field-template.js +35 -2
- package/dist/cli/helpers/field-template.js.map +1 -1
- package/package.json +2 -1
- package/templates/skill/SKILL.md +10 -10
- package/templates/skill/references/README.md +45 -5
- package/templates/skill/references/data-model.md +10 -0
- package/templates/skill/references/troubleshooting.md +7 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-page.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/generate-page.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"generate-page.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/generate-page.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyQzC,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4ElE"}
|
|
@@ -9,14 +9,15 @@ import { promises as fs } from 'fs';
|
|
|
9
9
|
import path from 'path';
|
|
10
10
|
import { loadConfig, getModelSchema, generateCapabilities } from '../../index.js';
|
|
11
11
|
import { resolveProjectRoot } from '../utils.js';
|
|
12
|
-
import { toPascalCase
|
|
12
|
+
import { toPascalCase } from '../helpers/naming.js';
|
|
13
13
|
import { fieldToFormItem } from '../helpers/field-template.js';
|
|
14
14
|
/** Generate table columns from model fields */
|
|
15
|
-
function generateColumns(fields, modelName) {
|
|
15
|
+
function generateColumns(fields, modelName, aiButtons) {
|
|
16
16
|
const cols = fields
|
|
17
17
|
.filter((f) => f.name !== 'id') // skip id column in form
|
|
18
18
|
.map((f) => {
|
|
19
19
|
const label = f.description || f.name;
|
|
20
|
+
const extras = [];
|
|
20
21
|
const renders = [];
|
|
21
22
|
if (f.type === 'boolean') {
|
|
22
23
|
renders.push(` render: (val: boolean) => val ? '是' : '否',`);
|
|
@@ -27,33 +28,52 @@ function generateColumns(fields, modelName) {
|
|
|
27
28
|
else if (f.type === 'number[]') {
|
|
28
29
|
renders.push(` render: (val: number[]) => val?.join(', '),`);
|
|
29
30
|
}
|
|
31
|
+
else if (f.type === 'string' && !f.enum) {
|
|
32
|
+
// Add ellipsis for plain string columns to prevent layout overflow
|
|
33
|
+
extras.push(` ellipsis: true,`);
|
|
34
|
+
}
|
|
30
35
|
return ` {
|
|
31
36
|
title: '${label}',
|
|
32
37
|
dataIndex: '${f.name}',
|
|
33
38
|
key: '${f.name}',
|
|
34
|
-
${renders.join('\n')} },`;
|
|
39
|
+
${extras.join('\n')}${renders.join('\n')} },`;
|
|
35
40
|
})
|
|
36
41
|
.join('\n');
|
|
37
42
|
// Add action column
|
|
43
|
+
const aiButtonMenuCode = aiButtons && aiButtons.length > 0
|
|
44
|
+
? `<Dropdown menu={{ items: aiButtonMenuItems(record) }}>
|
|
45
|
+
<Button type="link"><ThunderboltOutlined /> AI</Button>
|
|
46
|
+
</Dropdown>`
|
|
47
|
+
: '';
|
|
48
|
+
const actionButtons = [
|
|
49
|
+
`<Button type="link" onClick={() => handleEdit(record)}>编辑</Button>`,
|
|
50
|
+
aiButtonMenuCode,
|
|
51
|
+
`<Popconfirm title="确认删除?" onConfirm={() => handleDelete(record.id)}>
|
|
52
|
+
<Button type="link" danger>删除</Button>
|
|
53
|
+
</Popconfirm>`,
|
|
54
|
+
].filter(Boolean).join('\n ');
|
|
38
55
|
return `${cols}
|
|
39
56
|
{
|
|
40
57
|
title: '操作',
|
|
41
58
|
key: 'action',
|
|
42
59
|
render: (_: unknown, record: ${toPascalCase(modelName)}Record) => (
|
|
43
60
|
<Space>
|
|
44
|
-
|
|
45
|
-
<Popconfirm title="确认删除?" onConfirm={() => handleDelete(record.id)}>
|
|
46
|
-
<Button type="link" danger>删除</Button>
|
|
47
|
-
</Popconfirm>
|
|
61
|
+
${actionButtons}
|
|
48
62
|
</Space>
|
|
49
63
|
),
|
|
50
64
|
},`;
|
|
51
65
|
}
|
|
66
|
+
/** Build display label from model description */
|
|
67
|
+
function buildLabel(description, pascalName) {
|
|
68
|
+
return description || pascalName;
|
|
69
|
+
}
|
|
52
70
|
/** Generate CRUD page template from model schema */
|
|
53
|
-
function crudPageTemplate(model) {
|
|
71
|
+
function crudPageTemplate(model, aiButtons) {
|
|
54
72
|
const pascalName = toPascalCase(model.name);
|
|
55
|
-
const camelName = toCamelCase(model.name);
|
|
56
73
|
const recordType = `${pascalName}Record`;
|
|
74
|
+
// Detect field types for conditional logic
|
|
75
|
+
const dateFields = model.fields.filter(f => f.type === 'date').map(f => f.name);
|
|
76
|
+
const hasDateFields = dateFields.length > 0;
|
|
57
77
|
// Build TypeScript interface from fields
|
|
58
78
|
const fieldDefs = model.fields.map((f) => {
|
|
59
79
|
const tsType = f.type === 'string[]' ? 'string[]'
|
|
@@ -65,15 +85,71 @@ function crudPageTemplate(model) {
|
|
|
65
85
|
: 'string';
|
|
66
86
|
return ` ${f.name}${f.required ? '' : '?'}: ${tsType};`;
|
|
67
87
|
}).join('\n');
|
|
68
|
-
const columns = generateColumns(model.fields, model.name);
|
|
88
|
+
const columns = generateColumns(model.fields, model.name, aiButtons);
|
|
69
89
|
const formItems = model.fields
|
|
70
90
|
.filter((f) => f.name !== 'id') // id is auto-generated
|
|
71
91
|
.map((f) => fieldToFormItem(f, model.name))
|
|
72
92
|
.join('\n');
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
93
|
+
// Generate handleEdit with date conversion
|
|
94
|
+
const handleEditBody = hasDateFields
|
|
95
|
+
? `const handleEdit = (record: ${recordType}) => {
|
|
96
|
+
setEditingRecord(record);
|
|
97
|
+
const formValues = { ...record };
|
|
98
|
+
${dateFields.map(f => ` if (formValues.${f}) formValues.${f} = dayjs(formValues.${f}) as any;`).join('\n')}
|
|
99
|
+
form.setFieldsValue(formValues);
|
|
100
|
+
setModalOpen(true);
|
|
101
|
+
};`
|
|
102
|
+
: `const handleEdit = (record: ${recordType}) => {
|
|
103
|
+
setEditingRecord(record);
|
|
104
|
+
form.setFieldsValue(record);
|
|
105
|
+
setModalOpen(true);
|
|
106
|
+
};`;
|
|
107
|
+
// Generate handleSave with date serialization
|
|
108
|
+
const handleSaveBody = hasDateFields
|
|
109
|
+
? `const handleSave = async () => {
|
|
110
|
+
try {
|
|
111
|
+
const values = await form.validateFields();
|
|
112
|
+
${dateFields.map(f => ` if (values.${f}) values.${f} = values.${f}.format('YYYY-MM-DD');`).join('\n')}
|
|
113
|
+
if (editingRecord?.id) {
|
|
114
|
+
await update(editingRecord.id, values);
|
|
115
|
+
message.success('更新成功');
|
|
116
|
+
} else {
|
|
117
|
+
await create(values);
|
|
118
|
+
message.success('创建成功');
|
|
119
|
+
}
|
|
120
|
+
setModalOpen(false);
|
|
121
|
+
refresh();
|
|
122
|
+
} catch {
|
|
123
|
+
// form validation failed
|
|
124
|
+
}
|
|
125
|
+
};`
|
|
126
|
+
: `const handleSave = async () => {
|
|
127
|
+
try {
|
|
128
|
+
const values = await form.validateFields();
|
|
129
|
+
if (editingRecord?.id) {
|
|
130
|
+
await update(editingRecord.id, values);
|
|
131
|
+
message.success('更新成功');
|
|
132
|
+
} else {
|
|
133
|
+
await create(values);
|
|
134
|
+
message.success('创建成功');
|
|
135
|
+
}
|
|
136
|
+
setModalOpen(false);
|
|
137
|
+
refresh();
|
|
138
|
+
} catch {
|
|
139
|
+
// form validation failed
|
|
140
|
+
}
|
|
141
|
+
};`;
|
|
142
|
+
const dayjsImport = hasDateFields ? `\nimport dayjs from 'dayjs';` : '';
|
|
143
|
+
const hasAIButtons = aiButtons && aiButtons.length > 0;
|
|
144
|
+
// Build imports — merge AI-specific imports into existing lines
|
|
145
|
+
const antdExtra = hasAIButtons ? ', Dropdown' : '';
|
|
146
|
+
const iconsExtra = hasAIButtons ? ', ThunderboltOutlined' : '';
|
|
147
|
+
const loomExtra = hasAIButtons ? ', AIContext' : '';
|
|
148
|
+
const reactExtra = hasAIButtons ? ', useContext' : '';
|
|
149
|
+
return `import React, { useEffect, useState${reactExtra} } from 'react';
|
|
150
|
+
import { Table, Button, Modal, Form, Input, InputNumber, Select, Switch, DatePicker, Space, Popconfirm, message${antdExtra} } from 'antd';
|
|
151
|
+
import { PlusOutlined${iconsExtra} } from '@ant-design/icons';
|
|
152
|
+
import { useData${loomExtra} } from '@loom-framework/frontend-antd';${dayjsImport}
|
|
77
153
|
|
|
78
154
|
interface ${recordType} {
|
|
79
155
|
${fieldDefs}
|
|
@@ -95,11 +171,7 @@ export function ${pascalName}Page(): React.ReactElement {
|
|
|
95
171
|
setModalOpen(true);
|
|
96
172
|
};
|
|
97
173
|
|
|
98
|
-
|
|
99
|
-
setEditingRecord(record);
|
|
100
|
-
form.setFieldsValue(record);
|
|
101
|
-
setModalOpen(true);
|
|
102
|
-
};
|
|
174
|
+
${handleEditBody}
|
|
103
175
|
|
|
104
176
|
const handleDelete = async (id: string) => {
|
|
105
177
|
try {
|
|
@@ -111,22 +183,18 @@ export function ${pascalName}Page(): React.ReactElement {
|
|
|
111
183
|
}
|
|
112
184
|
};
|
|
113
185
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
} catch {
|
|
127
|
-
// form validation failed
|
|
128
|
-
}
|
|
129
|
-
};
|
|
186
|
+
${handleSaveBody}
|
|
187
|
+
${hasAIButtons ? `
|
|
188
|
+
const ai = useContext(AIContext);
|
|
189
|
+
const aiButtonMenuItems = (record: ${recordType}) => [
|
|
190
|
+
${aiButtons.map(btn => {
|
|
191
|
+
const hasCtx = btn.promptTemplate || btn.prompt;
|
|
192
|
+
const promptExpr = hasCtx
|
|
193
|
+
? `\`${(btn.promptTemplate || btn.prompt || '').replace(/\{\{(\w+)\}\}/g, (_, v) => `\${record.${v} || ''}`)}\``
|
|
194
|
+
: `Object.entries(record).map(([k,v]) => k + ': ' + v).join('\\n')`;
|
|
195
|
+
return ` { key: '${btn.id}', label: '${btn.label}', onClick: () => ai?.triggerAI({ query: ${promptExpr}, buttonId: '${btn.id}' }) },`;
|
|
196
|
+
}).join('\n')}
|
|
197
|
+
];` : ''}
|
|
130
198
|
|
|
131
199
|
const columns = [
|
|
132
200
|
${columns}
|
|
@@ -135,7 +203,7 @@ ${columns}
|
|
|
135
203
|
return (
|
|
136
204
|
<div style={{ padding: 24 }}>
|
|
137
205
|
<div style={{ marginBottom: 16, display: 'flex', justifyContent: 'space-between' }}>
|
|
138
|
-
<h2>${model.description
|
|
206
|
+
<h2>${buildLabel(model.description, pascalName)}</h2>
|
|
139
207
|
<Button type="primary" icon={<PlusOutlined />} onClick={handleAdd}>
|
|
140
208
|
新增
|
|
141
209
|
</Button>
|
|
@@ -146,6 +214,7 @@ ${columns}
|
|
|
146
214
|
dataSource={list}
|
|
147
215
|
rowKey="id"
|
|
148
216
|
loading={loading}
|
|
217
|
+
pagination={{ pageSize: 10, showSizeChanger: true, showTotal: (total) => \`共 \${total} 条\` }}
|
|
149
218
|
/>
|
|
150
219
|
|
|
151
220
|
<Modal
|
|
@@ -215,12 +284,12 @@ export function registerGeneratePageCommand(program) {
|
|
|
215
284
|
console.error(chalk.dim(`Available models: ${config.data.models.map((m) => m.name).join(', ')}`));
|
|
216
285
|
process.exit(1);
|
|
217
286
|
}
|
|
218
|
-
modelLabel = modelSchema.description
|
|
287
|
+
modelLabel = buildLabel(modelSchema.description, pascalName);
|
|
219
288
|
// Step 1: Auto-generate capabilities (MCP Server + CLI data commands)
|
|
220
289
|
const capResult = await generateCapabilities(projectRoot, config);
|
|
221
290
|
console.log(chalk.green('Capabilities generated'), chalk.dim(`(${capResult.filesWritten.length} files)`));
|
|
222
291
|
// Step 2: Generate CRUD page
|
|
223
|
-
template = crudPageTemplate(modelSchema);
|
|
292
|
+
template = crudPageTemplate(modelSchema, config.aiButtons);
|
|
224
293
|
}
|
|
225
294
|
else {
|
|
226
295
|
template = SKELETON_TEMPLATE(pascalName);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-page.js","sourceRoot":"","sources":["../../../src/cli/commands/generate-page.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"generate-page.js","sourceRoot":"","sources":["../../../src/cli/commands/generate-page.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,15 +23,22 @@ export function registerInitCommand(program) {
|
|
|
23
23
|
});
|
|
24
24
|
}
|
|
25
25
|
async function createProject(options) {
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
26
|
+
const cwd = process.cwd();
|
|
27
|
+
const cwdName = path.basename(cwd);
|
|
28
|
+
// If current directory name matches project name, initialize in place (like npm init)
|
|
29
|
+
const targetDir = cwdName === options.name
|
|
30
|
+
? cwd
|
|
31
|
+
: path.resolve(cwd, options.name);
|
|
32
|
+
// Check if directory already exists (only for non-cwd case)
|
|
33
|
+
if (targetDir !== cwd) {
|
|
34
|
+
try {
|
|
35
|
+
await fs.access(targetDir);
|
|
36
|
+
console.error(chalk.red(`Directory "${options.name}" already exists.`));
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
// Directory does not exist, proceed
|
|
41
|
+
}
|
|
35
42
|
}
|
|
36
43
|
console.log();
|
|
37
44
|
console.log(chalk.bold.cyan(' Welcome to Loom!'));
|
|
@@ -65,7 +72,9 @@ async function createProject(options) {
|
|
|
65
72
|
console.log(chalk.green.bold(' Project created successfully!'));
|
|
66
73
|
console.log();
|
|
67
74
|
console.log(chalk.dim(' Next steps:'));
|
|
68
|
-
|
|
75
|
+
if (targetDir !== cwd) {
|
|
76
|
+
console.log(chalk.cyan(` cd ${options.name}`));
|
|
77
|
+
}
|
|
69
78
|
console.log(chalk.cyan(` loom generate page <Name> --model <model-name>`));
|
|
70
79
|
console.log(chalk.cyan(' loom dev'));
|
|
71
80
|
console.log();
|
|
@@ -158,8 +167,8 @@ async function createPackageJson(targetDir, options) {
|
|
|
158
167
|
generate: 'loom generate capabilities',
|
|
159
168
|
},
|
|
160
169
|
dependencies: {
|
|
161
|
-
'@loom-framework/core': '^0.1.0-alpha.
|
|
162
|
-
'@loom-framework/frontend-antd': '^0.1.0-alpha.
|
|
170
|
+
'@loom-framework/core': '^0.1.0-alpha.44',
|
|
171
|
+
'@loom-framework/frontend-antd': '^0.1.0-alpha.44',
|
|
163
172
|
'fastify': '^5.2.0',
|
|
164
173
|
'@ant-design/x': '^2.5.0',
|
|
165
174
|
'@ant-design/x-sdk': '^2.5.0',
|
|
@@ -170,6 +179,7 @@ async function createPackageJson(targetDir, options) {
|
|
|
170
179
|
'react': '^19.0.0',
|
|
171
180
|
'react-dom': '^19.0.0',
|
|
172
181
|
'antd': '^6.3.5',
|
|
182
|
+
'dayjs': '^1.11.0',
|
|
173
183
|
},
|
|
174
184
|
devDependencies: {
|
|
175
185
|
'typescript': '^5.6.0',
|
|
@@ -295,7 +305,6 @@ export default function App() {
|
|
|
295
305
|
const renderPage = () => {
|
|
296
306
|
switch (selectedKey) {
|
|
297
307
|
case 'home':
|
|
298
|
-
default:
|
|
299
308
|
return (
|
|
300
309
|
<div style={{ padding: 24 }}>
|
|
301
310
|
<h2>${options.name}</h2>
|
|
@@ -303,6 +312,12 @@ export default function App() {
|
|
|
303
312
|
<p>运行 <code>loom generate page <Name> --model <model></code> 生成页面后,在此处引入。</p>
|
|
304
313
|
</div>
|
|
305
314
|
);
|
|
315
|
+
default:
|
|
316
|
+
return (
|
|
317
|
+
<div style={{ padding: 24 }}>
|
|
318
|
+
<h2>${options.name}</h2>
|
|
319
|
+
</div>
|
|
320
|
+
);
|
|
306
321
|
}
|
|
307
322
|
};
|
|
308
323
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAQpC,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,0BAA0B,EAAE,qBAAqB,EAAE,EAAE,CAAC;SAC7D,MAAM,CAAC,yBAAyB,EAAE,kCAAkC,EAAE,YAAY,CAAC;SACnF,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,UAAkC,EAAE,EAAE;QACjE,MAAM,OAAO,GAAgB;YAC3B,IAAI;YACJ,WAAW,EAAE,UAAU,CAAC,WAAW,IAAI,EAAE;YACzC,OAAO,EAAE,UAAU,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY;SACnE,CAAC;QAEF,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACP,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,OAAoB;IAC/C,MAAM,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAQpC,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,0BAA0B,EAAE,qBAAqB,EAAE,EAAE,CAAC;SAC7D,MAAM,CAAC,yBAAyB,EAAE,kCAAkC,EAAE,YAAY,CAAC;SACnF,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,UAAkC,EAAE,EAAE;QACjE,MAAM,OAAO,GAAgB;YAC3B,IAAI;YACJ,WAAW,EAAE,UAAU,CAAC,WAAW,IAAI,EAAE;YACzC,OAAO,EAAE,UAAU,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY;SACnE,CAAC;QAEF,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACP,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,OAAoB;IAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACnC,sFAAsF;IACtF,MAAM,SAAS,GAAG,OAAO,KAAK,OAAO,CAAC,IAAI;QACxC,CAAC,CAAC,GAAG;QACL,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpC,4DAA4D;IAC5D,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,OAAO,CAAC,IAAI,mBAAmB,CAAC,CAAC,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAAC,MAAM,CAAC;YACP,oCAAoC;QACtC,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC,CAAC;IACxE,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,SAAS,KAAK,CAAC,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,6BAA6B;IAC7B,MAAM,wBAAwB,CAAC,SAAS,CAAC,CAAC;IAE1C,4CAA4C;IAC5C,MAAM,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAEpC,wBAAwB;IACxB,MAAM,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAE3C,sBAAsB;IACtB,MAAM,iBAAiB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAE5C,gBAAgB;IAChB,MAAM,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAEvC,kBAAkB;IAClB,MAAM,cAAc,CAAC,SAAS,CAAC,CAAC;IAEhC,qBAAqB;IACrB,MAAM,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAElC,8BAA8B;IAC9B,MAAM,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAE9C,4BAA4B;IAC5B,MAAM,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAEpC,oBAAoB;IACpB,MAAM,eAAe,CAAC,SAAS,CAAC,CAAC;IAEjC,uBAAuB;IACvB,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAErC,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;IACxC,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC,CAAC;IAC9E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,wBAAwB,CAAC,SAAiB;IACvD,MAAM,IAAI,GAAG;QACX,EAAE;QACF,MAAM;QACN,SAAS;QACT,gBAAgB;QAChB,qBAAqB;QACrB,gCAAgC;QAChC,OAAO;QACP,KAAK;QACL,SAAS;QACT,kBAAkB;QAClB,UAAU;QACV,cAAc;QACd,yBAAyB;QACzB,+BAA+B;QAC/B,SAAS;QACT,aAAa;KACd,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,8CAA8C;IAC9C,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,+BAA+B,EAAE,gCAAgC,CAAC,CAAC;IAC7H,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,UAAU,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,qBAAqB,CAAC,CAAC;AACzD,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,SAAiB;IACjD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/D,qEAAqE;IACrE,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,0BAA0B,CAAC,CAAC;IAEzE,gBAAgB;IAChB,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;IAChF,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,8BAA8B,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC3F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,8BAA8B,CAAC,CAAC;IAEhE,kBAAkB;IAClB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;YACrE,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gCAAgC,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACrG,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,oCAAoC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAC,CAAC;AAC/H,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,SAAiB,EAAE,OAAoB;IACrE,MAAM,MAAM,GAAG;;;;aAIJ,OAAO,CAAC,IAAI;oBACL,OAAO,CAAC,WAAW;;;uBAGhB,OAAO,CAAC,OAAO;;;;;;;;;;;;;;;;CAgBrC,CAAC;IAEA,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,gBAAgB,CAAC,CAAC;AACpD,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,SAAiB,EAAE,OAAoB;IACtE,MAAM,GAAG,GAAG;QACV,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,GAAG,EAAE,UAAU;YACf,KAAK,EAAE,YAAY;YACnB,QAAQ,EAAE,4BAA4B;SACvC;QACD,YAAY,EAAE;YACZ,sBAAsB,EAAE,iBAAiB;YACzC,+BAA+B,EAAE,iBAAiB;YAClD,SAAS,EAAE,QAAQ;YACnB,eAAe,EAAE,QAAQ;YACzB,mBAAmB,EAAE,QAAQ;YAC7B,wBAAwB,EAAE,QAAQ;YAClC,mBAAmB,EAAE,QAAQ;YAC7B,eAAe,EAAE,SAAS;YAC1B,iBAAiB,EAAE,QAAQ;YAC3B,OAAO,EAAE,SAAS;YAClB,WAAW,EAAE,SAAS;YACtB,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,SAAS;SACnB;QACD,eAAe,EAAE;YACf,YAAY,EAAE,QAAQ;YACtB,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE,QAAQ;YAChB,cAAc,EAAE,SAAS;YACzB,kBAAkB,EAAE,SAAS;YAC7B,sBAAsB,EAAE,QAAQ;SACjC;KACF,CAAC;IAEF,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAChG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC,CAAC;AAClD,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,SAAiB,EAAE,OAAoB;IACjE,MAAM,MAAM,GAAG,KAAK,OAAO,CAAC,IAAI;;EAEhC,OAAO,CAAC,WAAW,IAAI,qBAAqB;;;;;;;;;;;;;;;;;;EAkB5C,OAAO,CAAC,IAAI;;;;;;;;;;;;;;;;;;;;CAoBb,CAAC;IAEA,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC;AAC/C,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,SAAiB;IAC7C,MAAM,QAAQ,GAAG;QACf,eAAe,EAAE;YACf,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,QAAQ;YAChB,gBAAgB,EAAE,QAAQ;YAC1B,MAAM,EAAE,IAAI;YACZ,eAAe,EAAE,IAAI;YACrB,YAAY,EAAE,IAAI;YAClB,gCAAgC,EAAE,IAAI;YACtC,iBAAiB,EAAE,IAAI;YACvB,WAAW,EAAE,IAAI;YACjB,SAAS,EAAE,IAAI;SAChB;QACD,OAAO,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,CAAC;KAC9C,CAAC;IAEF,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACtG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC,CAAC;AACnD,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,SAAiB;IAC/C,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;CAiBpB,CAAC;IAEA,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAChF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,gBAAgB,CAAC,CAAC;AACpD,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,SAAiB,EAAE,OAAoB;IACxE,MAAM,OAAO,GAAG;;;;;;;;;CASjB,CAAC;IAEA,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;kBAiBC,OAAO,CAAC,IAAI;iBACb,OAAO,CAAC,WAAW,IAAI,qBAAqB;;;;;;;kBAO3C,OAAO,CAAC,IAAI;;;;;;;;eAQf,OAAO,CAAC,IAAI;;;;;;;;;;CAU1B,CAAC;IAEA,MAAM,SAAS,GAAG;;;;;aAKP,OAAO,CAAC,IAAI;;;;;;;CAOxB,CAAC;IAEA,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,uBAAuB,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACpF,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,sBAAsB,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAClF,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAEpF,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;CAiB1B,CAAC;IACA,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,wBAAwB,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;IAC9F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,sBAAsB,CAAC,CAAC;AAC1D,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,SAAiB;IACjD,MAAM,QAAQ,GAAG;;;;;;;;;;CAUlB,CAAC;IAEA,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,sBAAsB,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACpF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,sBAAsB,CAAC,CAAC;AAC1D,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,SAAiB;IAC9C,MAAM,SAAS,GAAG;;;;;;CAMnB,CAAC;IACA,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC,CAAC;AAChD,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,SAAiB;IAClD,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;IAEnD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;IAEvD,IAAI,CAAC;QACH,QAAQ,CAAC,aAAa,EAAE;YACtB,GAAG,EAAE,SAAS;YACd,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,MAAM;SAChB,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,wBAAwB,CAAC,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,6DAA6D,CAAC,CAAC;IAClG,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field-template.d.ts","sourceRoot":"","sources":["../../../src/cli/helpers/field-template.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEjE,2DAA2D;AAC3D,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAYzD;
|
|
1
|
+
{"version":3,"file":"field-template.d.ts","sourceRoot":"","sources":["../../../src/cli/helpers/field-template.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEjE,2DAA2D;AAC3D,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAYzD;AAiCD,gDAAgD;AAChD,wBAAgB,eAAe,CAAC,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CA+CjF"}
|
|
@@ -15,11 +15,38 @@ export function fieldToColumnType(type) {
|
|
|
15
15
|
return "'text'";
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
|
+
/** Guess if a field is a long-text field (should use TextArea instead of Input) */
|
|
19
|
+
function isLongTextField(field) {
|
|
20
|
+
const name = field.name.toLowerCase();
|
|
21
|
+
return (field.type === 'string' &&
|
|
22
|
+
!field.enum &&
|
|
23
|
+
(name.includes('content') ||
|
|
24
|
+
name.includes('description') ||
|
|
25
|
+
name.includes('body') ||
|
|
26
|
+
name.includes('text') ||
|
|
27
|
+
name.includes('note') ||
|
|
28
|
+
name.includes('remark') ||
|
|
29
|
+
name.includes('bio') ||
|
|
30
|
+
name.includes('summary')));
|
|
31
|
+
}
|
|
32
|
+
/** Get appropriate required rule message based on field type */
|
|
33
|
+
function getRequiredRule(field, label) {
|
|
34
|
+
if (field.enum || field.type === 'string[]') {
|
|
35
|
+
return ` rules={[{ required: true, message: '请选择${label}' }]}`;
|
|
36
|
+
}
|
|
37
|
+
if (field.type === 'date') {
|
|
38
|
+
return ` rules={[{ required: true, message: '请选择${label}' }]}`;
|
|
39
|
+
}
|
|
40
|
+
if (field.type === 'number') {
|
|
41
|
+
return ` rules={[{ required: true, message: '请输入${label}' }]}`;
|
|
42
|
+
}
|
|
43
|
+
return ` rules={[{ required: true, message: '请输入${label}' }]}`;
|
|
44
|
+
}
|
|
18
45
|
/** Generate Ant Design form item for a field */
|
|
19
46
|
export function fieldToFormItem(field, modelName) {
|
|
20
47
|
const name = field.name;
|
|
21
48
|
const label = field.description || name;
|
|
22
|
-
const requiredRule = field.required ?
|
|
49
|
+
const requiredRule = field.required ? getRequiredRule(field, label) : '';
|
|
23
50
|
if (field.enum) {
|
|
24
51
|
const options = field.enum.map((v) => ` <Select.Option value="${v}">${v}</Select.Option>`).join('\n');
|
|
25
52
|
return ` <Form.Item name="${name}" label="${label}"${requiredRule}>
|
|
@@ -39,7 +66,7 @@ ${options}
|
|
|
39
66
|
<InputNumber style={{ width: '100%' }} />
|
|
40
67
|
</Form.Item>`;
|
|
41
68
|
case 'string[]':
|
|
42
|
-
return ` <Form.Item name="${name}" label="${label}">
|
|
69
|
+
return ` <Form.Item name="${name}" label="${label}"${requiredRule}>
|
|
43
70
|
<Select mode="tags" placeholder="请输入${label}" />
|
|
44
71
|
</Form.Item>`;
|
|
45
72
|
case 'json':
|
|
@@ -51,6 +78,12 @@ ${options}
|
|
|
51
78
|
<DatePicker style={{ width: '100%' }} />
|
|
52
79
|
</Form.Item>`;
|
|
53
80
|
default:
|
|
81
|
+
// Long text fields use TextArea
|
|
82
|
+
if (isLongTextField(field)) {
|
|
83
|
+
return ` <Form.Item name="${name}" label="${label}"${requiredRule}>
|
|
84
|
+
<Input.TextArea rows={3} placeholder="请输入${label}" />
|
|
85
|
+
</Form.Item>`;
|
|
86
|
+
}
|
|
54
87
|
return ` <Form.Item name="${name}" label="${label}"${requiredRule}>
|
|
55
88
|
<Input placeholder="请输入${label}" />
|
|
56
89
|
</Form.Item>`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field-template.js","sourceRoot":"","sources":["../../../src/cli/helpers/field-template.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,2DAA2D;AAC3D,MAAM,UAAU,iBAAiB,CAAC,IAAe;IAC/C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ,CAAC;QACd,KAAK,UAAU;YACb,OAAO,SAAS,CAAC;QACnB,KAAK,SAAS;YACZ,OAAO,QAAQ,CAAC;QAClB,KAAK,MAAM;YACT,OAAO,QAAQ,CAAC;QAClB;YACE,OAAO,QAAQ,CAAC;IACpB,CAAC;AACH,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,eAAe,CAAC,KAAsB,EAAE,SAAiB;IACvE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC;IACxC,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"field-template.js","sourceRoot":"","sources":["../../../src/cli/helpers/field-template.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,2DAA2D;AAC3D,MAAM,UAAU,iBAAiB,CAAC,IAAe;IAC/C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ,CAAC;QACd,KAAK,UAAU;YACb,OAAO,SAAS,CAAC;QACnB,KAAK,SAAS;YACZ,OAAO,QAAQ,CAAC;QAClB,KAAK,MAAM;YACT,OAAO,QAAQ,CAAC;QAClB;YACE,OAAO,QAAQ,CAAC;IACpB,CAAC;AACH,CAAC;AAED,mFAAmF;AACnF,SAAS,eAAe,CAAC,KAAsB;IAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IACtC,OAAO,CACL,KAAK,CAAC,IAAI,KAAK,QAAQ;QACvB,CAAC,KAAK,CAAC,IAAI;QACX,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;YACvB,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;YAC5B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YACrB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YACrB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YACrB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACvB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YACpB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAC5B,CAAC;AACJ,CAAC;AAED,gEAAgE;AAChE,SAAS,eAAe,CAAC,KAAsB,EAAE,KAAa;IAC5D,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC5C,OAAO,2CAA2C,KAAK,OAAO,CAAC;IACjE,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC1B,OAAO,2CAA2C,KAAK,OAAO,CAAC;IACjE,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,2CAA2C,KAAK,OAAO,CAAC;IACjE,CAAC;IACD,OAAO,2CAA2C,KAAK,OAAO,CAAC;AACjE,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,eAAe,CAAC,KAAsB,EAAE,SAAiB;IACvE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC;IACxC,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEzE,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iCAAiC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7G,OAAO,0BAA0B,IAAI,YAAY,KAAK,IAAI,YAAY;kCACxC,KAAK;EACrC,OAAO;;mBAEU,CAAC;IAClB,CAAC;IAED,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,SAAS;YACZ,OAAO,0BAA0B,IAAI,YAAY,KAAK;;mBAEzC,CAAC;QAChB,KAAK,QAAQ,CAAC;QACd,KAAK,UAAU;YACb,OAAO,0BAA0B,IAAI,YAAY,KAAK,IAAI,YAAY;;mBAEzD,CAAC;QAChB,KAAK,UAAU;YACb,OAAO,0BAA0B,IAAI,YAAY,KAAK,IAAI,YAAY;8CAC9B,KAAK;mBAChC,CAAC;QAChB,KAAK,MAAM;YACT,OAAO,0BAA0B,IAAI,YAAY,KAAK;;mBAEzC,CAAC;QAChB,KAAK,MAAM;YACT,OAAO,0BAA0B,IAAI,YAAY,KAAK,IAAI,YAAY;;mBAEzD,CAAC;QAChB;YACE,gCAAgC;YAChC,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3B,OAAO,0BAA0B,IAAI,YAAY,KAAK,IAAI,YAAY;mDAC3B,KAAK;mBACrC,CAAC;YACd,CAAC;YACD,OAAO,0BAA0B,IAAI,YAAY,KAAK,IAAI,YAAY;iCAC3C,KAAK;mBACnB,CAAC;IAClB,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loom-framework/core",
|
|
3
|
-
"version": "0.1.0-alpha.
|
|
3
|
+
"version": "0.1.0-alpha.44",
|
|
4
4
|
"description": "Loom framework - DataAdapter, Capability Generator, config system, backend server, CLI",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
},
|
|
14
14
|
"bin": {
|
|
15
15
|
"loom": "dist/bin.js",
|
|
16
|
+
"core": "dist/bin.js",
|
|
16
17
|
"loom-server": "dist/server-bin.js"
|
|
17
18
|
},
|
|
18
19
|
"files": [
|
package/templates/skill/SKILL.md
CHANGED
|
@@ -11,10 +11,10 @@ version: 0.1.0
|
|
|
11
11
|
|
|
12
12
|
## Quick Start
|
|
13
13
|
|
|
14
|
-
1. Confirm project scope: name, description, data models,
|
|
14
|
+
1. Confirm project scope: name, description, data models, AI buttons
|
|
15
15
|
2. Create project:
|
|
16
|
-
`npx @loom-framework/core
|
|
17
|
-
3. Define data models in `loom.config.ts` (see Schema below)
|
|
16
|
+
`npx -p @loom-framework/core loom init <name> --description <desc> --adapter <filesystem|sqlite>`
|
|
17
|
+
3. Define data models and AI buttons in `loom.config.ts` (see Schema below)
|
|
18
18
|
4. Generate pages: `loom generate page <Name> --model <model>`
|
|
19
19
|
5. Start dev: `loom dev` → http://localhost:5173 (frontend), http://localhost:3000 (backend)
|
|
20
20
|
|
|
@@ -26,7 +26,7 @@ version: 0.1.0
|
|
|
26
26
|
- `--skip-generate`, `--backend-only`, `--frontend-only`
|
|
27
27
|
- `loom build` - Build for production
|
|
28
28
|
- `loom generate capabilities` - Generate MCP Server + CLI from config
|
|
29
|
-
- `loom generate page <name> --model <model>` - Generate CRUD page (includes
|
|
29
|
+
- `loom generate page <name> --model <model>` - Generate CRUD page (includes AI buttons if configured)
|
|
30
30
|
- `loom generate skill <name>` - Generate skill scaffold
|
|
31
31
|
|
|
32
32
|
## Detailed Workflows
|
|
@@ -37,17 +37,17 @@ version: 0.1.0
|
|
|
37
37
|
2. Run `loom generate page <Name> --model <model-name>`
|
|
38
38
|
3. Model is immediately available via MCP Tools and `loom data` CLI
|
|
39
39
|
|
|
40
|
+
### Adding an AI Button
|
|
41
|
+
|
|
42
|
+
1. Edit `loom.config.ts` → add entry to `aiButtons` array (top-level, not inside `ai`)
|
|
43
|
+
2. Run `loom generate page <Name> --model <model-name>` — AI buttons are automatically integrated into the page
|
|
44
|
+
|
|
40
45
|
### Adding a New Skill
|
|
41
46
|
|
|
42
47
|
1. Create scaffold: `loom generate skill <name>`
|
|
43
48
|
2. Edit `.claude/skills/<name>/SKILL.md` (see `references/skill-development.md` for format)
|
|
44
49
|
3. Add reference prompts in `.claude/skills/<name>/references/`
|
|
45
50
|
|
|
46
|
-
### Adding an AI Button
|
|
47
|
-
|
|
48
|
-
1. Edit `loom.config.ts` → add entry to `aiButtons` array (top-level, not inside `ai`)
|
|
49
|
-
2. In frontend page, use `useAIButton('<button-id>')` or `<AIActionButton buttonId="<id>" />`
|
|
50
|
-
|
|
51
51
|
## loom.config.ts Schema (Core)
|
|
52
52
|
|
|
53
53
|
```typescript
|
|
@@ -86,6 +86,6 @@ For advanced config (`ai.claudeCode`, `server`, per-model `adapters`, `indexes`,
|
|
|
86
86
|
## Troubleshooting
|
|
87
87
|
|
|
88
88
|
- **`loom` commands fail "No loom.config.ts found"**: Run commands from the project directory, not the loom monorepo root
|
|
89
|
-
- **loom init fails**: Use `npx @loom-framework/core loom init <name> --description <desc> --adapter <filesystem|sqlite>`
|
|
89
|
+
- **loom init fails**: Use `npx -p @loom-framework/core loom init <name> --description <desc> --adapter <filesystem|sqlite>`
|
|
90
90
|
|
|
91
91
|
See `references/troubleshooting.md` for more issues.
|
|
@@ -13,16 +13,56 @@
|
|
|
13
13
|
| 类型 | 说明 | 实现方式 |
|
|
14
14
|
|------|------|---------|
|
|
15
15
|
| AI Chat | 自然语言对话 | HTTP SSE 流式,Claude Code 引擎 |
|
|
16
|
-
| AI Buttons | 一键 AI 动作 | 预定义 Prompt,`aiButtons`
|
|
16
|
+
| AI Buttons | 一键 AI 动作 | 预定义 Prompt,`aiButtons` 配置;点击后打开 ChatDrawer 自动提交 |
|
|
17
17
|
| CRUD | 结构化数据管理 | REST API,Schema 驱动自动生成 |
|
|
18
18
|
|
|
19
|
+
## 组件架构
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
AppShell(应用布局,自动包含 AI 入口)
|
|
23
|
+
├── Layout (Sider + Content)
|
|
24
|
+
└── AIBubble(浮动 AI 助手按钮)
|
|
25
|
+
└── ChatDrawer(AI 对话抽屉)
|
|
26
|
+
└── ChatPanel(聊天面板,SSE 流式通信)
|
|
27
|
+
├── LoomChatProvider + useXChat
|
|
28
|
+
├── MessageContent(thinking/content/tool_call 渲染)
|
|
29
|
+
└── Sender(输入框 + 文件上传)
|
|
30
|
+
|
|
31
|
+
AIActionButton(触发 AI 动作)
|
|
32
|
+
→ 通过 AIContext.triggerAI() 打开 ChatDrawer 并自动提交 prompt
|
|
33
|
+
|
|
34
|
+
useData(数据 CRUD hook)
|
|
35
|
+
→ 监听 loom:data-changed 事件,AI 通过工具修改数据后自动刷新
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### AI 按钮工作流
|
|
39
|
+
|
|
40
|
+
1. 用户点击 AI 按钮(表格操作列的 Dropdown 菜单项)
|
|
41
|
+
2. AIActionButton 调用 `AIContext.triggerAI({ query, buttonId, context })`
|
|
42
|
+
3. AIBubble 收到请求 → 打开 ChatDrawer → 设置 pendingRequest
|
|
43
|
+
4. ChatPanel 收到 pendingQuery → 自动提交给后端
|
|
44
|
+
5. 后端 AI 处理,可能通过工具调用进行 CRUD 操作
|
|
45
|
+
6. ChatPanel done 事件 → 触发 `loom:data-changed` 自定义事件
|
|
46
|
+
7. useData hook 监听事件 → 自动 refresh 刷新页面数据
|
|
47
|
+
|
|
48
|
+
### 前端组件导出
|
|
49
|
+
|
|
50
|
+
| 组件/Hook | 说明 |
|
|
51
|
+
|-----------|------|
|
|
52
|
+
| `AppShell` | 应用布局框架(含 AI 浮动入口) |
|
|
53
|
+
| `ChatDrawer` | AI 对话抽屉 |
|
|
54
|
+
| `AIBubble` | AI 浮动按钮(AppShell 已内置,无需单独使用) |
|
|
55
|
+
| `AIActionButton` | AI 动作按钮(通过 AIContext 触发 ChatDrawer) |
|
|
56
|
+
| `AIContext` | AI 上下文(AppShell 提供,子组件可调用 triggerAI) |
|
|
57
|
+
| `useData` | 数据 CRUD hook(自动响应 AI 数据变更) |
|
|
58
|
+
|
|
19
59
|
## 项目结构
|
|
20
60
|
|
|
21
61
|
```
|
|
22
62
|
my-loom-app/
|
|
23
63
|
├── loom.config.ts # 唯一配置源(模型、AI 按钮、服务器配置)
|
|
24
64
|
├── frontend/ # React + TypeScript + Vite
|
|
25
|
-
│ └── src/pages/
|
|
65
|
+
│ └── src/components/pages/ # 业务页面(CRUD + AI 按钮)
|
|
26
66
|
├── backend/src/ # Fastify + AI 通信(LoomServer)
|
|
27
67
|
├── .claude/skills/ # Skills(Prompt as Code)
|
|
28
68
|
├── cli/src/commands/ # CLI 业务命令扩展
|
|
@@ -37,7 +77,7 @@ my-loom-app/
|
|
|
37
77
|
| 包 | 说明 |
|
|
38
78
|
|---|---|
|
|
39
79
|
| `@loom-framework/core` | 运行时 + 开发时:DataAdapter、LoomServer、CLI(loom / loom-server) |
|
|
40
|
-
| `@loom-framework/frontend-antd` | 前端组件库:ChatDrawer、
|
|
80
|
+
| `@loom-framework/frontend-antd` | 前端组件库:AppShell、ChatDrawer、AIActionButton、useData、AIContext |
|
|
41
81
|
|
|
42
82
|
## CLI 命令速查
|
|
43
83
|
|
|
@@ -45,7 +85,7 @@ my-loom-app/
|
|
|
45
85
|
|
|
46
86
|
| 命令 | 说明 |
|
|
47
87
|
|------|------|
|
|
48
|
-
| `loom init <name> -d <desc> -a <adapter>` | 创建新项目 |
|
|
88
|
+
| `npx -p @loom-framework/core loom init <name> -d <desc> -a <adapter>` | 创建新项目 |
|
|
49
89
|
|
|
50
90
|
### 开发
|
|
51
91
|
|
|
@@ -58,7 +98,7 @@ my-loom-app/
|
|
|
58
98
|
|
|
59
99
|
| 命令 | 说明 |
|
|
60
100
|
|------|------|
|
|
61
|
-
| `loom generate page <Name> --model <model>` | 生成 CRUD
|
|
101
|
+
| `loom generate page <Name> --model <model>` | 生成 CRUD 页面(含 AI 按钮,若配置了 aiButtons) |
|
|
62
102
|
| `loom generate skill <name>` | 生成 Skill 脚手架 |
|
|
63
103
|
| `loom generate capabilities` | 重新生成 MCP Server + CLI |
|
|
64
104
|
|
|
@@ -76,11 +76,21 @@ aiButtons: [{
|
|
|
76
76
|
icon: 'FileTextOutlined', // optional: Ant Design icon name
|
|
77
77
|
prompt: '请总结以下内容', // required (or promptTemplate)
|
|
78
78
|
promptTemplate: 'Summarize {{content}}', // alternative to prompt, with {{vars}}
|
|
79
|
+
// {{vars}} are replaced with current row field values
|
|
79
80
|
contextVars: ['content'], // optional: variable names for promptTemplate
|
|
80
81
|
placement: 'page-header', // optional: UI placement hint
|
|
81
82
|
}],
|
|
82
83
|
```
|
|
83
84
|
|
|
85
|
+
### AI Button Behavior
|
|
86
|
+
|
|
87
|
+
When configured, AI buttons are automatically integrated into CRUD page action columns:
|
|
88
|
+
|
|
89
|
+
1. Each table row shows an "AI" dropdown button with all configured buttons as menu items
|
|
90
|
+
2. Clicking a button opens the ChatDrawer and auto-submits the composed prompt
|
|
91
|
+
3. If `promptTemplate` uses `{{fieldName}}`, it's replaced with the current row's field value
|
|
92
|
+
4. If AI performs CRUD via tool calls, the page auto-refreshes (via `loom:data-changed` event)
|
|
93
|
+
|
|
84
94
|
## Data Access in Skills
|
|
85
95
|
|
|
86
96
|
- **Prefer MCP Tools** for data CRUD: `read_<model>`, `write_<model>`, `update_<model>`, `delete_<model>`
|
|
@@ -6,6 +6,13 @@ Common issues when creating and running Loom projects.
|
|
|
6
6
|
|
|
7
7
|
Dependencies not installed. Run `npm install` from the project directory.
|
|
8
8
|
|
|
9
|
+
## `npx @loom-framework/core loom init` Fails
|
|
10
|
+
|
|
11
|
+
The `npx` command cannot find the executable. Use the `-p` flag to specify the package:
|
|
12
|
+
```bash
|
|
13
|
+
npx -p @loom-framework/core loom init <name> --description <desc> --adapter <adapter>
|
|
14
|
+
```
|
|
15
|
+
|
|
9
16
|
## `loom dev` Port Already in Use (EADDRINUSE)
|
|
10
17
|
|
|
11
18
|
Previous process still running. Kill it: `lsof -ti:3000 | xargs kill -9`
|