@lovrabet/cli 1.2.1-beta.4 → 1.2.3

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.
Files changed (65) hide show
  1. package/lib/add-page/input-page-router.js +1 -1
  2. package/lib/add-page/main.js +1 -1
  3. package/lib/add-page/select-page-template.js +1 -1
  4. package/lib/api/api-doc-ui.js +1 -1
  5. package/lib/api/api-doc.js +1 -1
  6. package/lib/api/api-pull-ui.js +1 -1
  7. package/lib/api/fetch-model-list.js +1 -1
  8. package/lib/api/generate-api-file.js +1 -1
  9. package/lib/api/main.js +1 -1
  10. package/lib/api/pull-silent.js +1 -1
  11. package/lib/app-menu/app-menu-sync-ui.js +1 -1
  12. package/lib/app-menu/create-menu.js +1 -1
  13. package/lib/app-menu/get-local-pages.js +1 -1
  14. package/lib/app-menu/get-online-menu-list.js +1 -1
  15. package/lib/app-menu/use-get-online-menu-list.js +1 -1
  16. package/lib/app-menu/utils.js +1 -1
  17. package/lib/app-menu/valid-url.js +1 -1
  18. package/lib/app-menu-update-cdn/current-content.js +1 -1
  19. package/lib/app-menu-update-cdn/input-cdn-asset.js +1 -1
  20. package/lib/app-menu-update-cdn/main.js +1 -1
  21. package/lib/app-menu-update-cdn/update-menu-cdn-url.js +1 -1
  22. package/lib/auth/auth-server-ui.js +1 -1
  23. package/lib/auth/auth-server.js +1 -1
  24. package/lib/auth/constant.js +1 -1
  25. package/lib/auth/get-cookie.js +1 -1
  26. package/lib/auth/is-session-valid.js +1 -1
  27. package/lib/auth/logout.js +1 -1
  28. package/lib/cli.js +1 -1
  29. package/lib/cmd/build-watch.js +1 -1
  30. package/lib/cmd/build.js +1 -1
  31. package/lib/cmd/logs.js +1 -1
  32. package/lib/cmd/preview.js +1 -1
  33. package/lib/cmd/start.js +1 -1
  34. package/lib/config/config-help.js +1 -1
  35. package/lib/config/main.js +1 -1
  36. package/lib/constant/domain.js +1 -1
  37. package/lib/constant/env.js +1 -1
  38. package/lib/create-app/enhanced-guided-create.js +1 -1
  39. package/lib/create-app/format-elapsed.js +1 -1
  40. package/lib/create-app/main.js +1 -1
  41. package/lib/create-app/task-finished.js +1 -1
  42. package/lib/create-app/task-loading.js +1 -1
  43. package/lib/create-app/task-running.js +1 -1
  44. package/lib/create-app/task-time.js +1 -1
  45. package/lib/create-app/use-copy-project-template.js +1 -1
  46. package/lib/create-app/use-format-code.js +1 -1
  47. package/lib/create-app/use-install-dependencies.js +1 -1
  48. package/lib/help.js +1 -1
  49. package/lib/init/main.js +1 -1
  50. package/lib/mcp/cursor.js +1 -1
  51. package/lib/mcp/main.js +1 -1
  52. package/lib/utils/check-sdk-version.js +1 -1
  53. package/lib/utils/config.js +1 -1
  54. package/lib/utils/copy-directory.js +1 -1
  55. package/lib/utils/http-client.js +1 -1
  56. package/lib/utils/logger.js +1 -1
  57. package/lib/utils/router-updater.js +1 -1
  58. package/lib/utils/sleep.js +1 -1
  59. package/lib/utils/template-replacer.js +1 -1
  60. package/package.json +3 -3
  61. package/templates/projects/sub-app-react-demo/package.json +2 -2
  62. package/templates/projects/sub-app-react-demo/src/api/api.ts +42 -25
  63. package/templates/projects/sub-app-react-demo/src/api/client.ts +11 -10
  64. package/templates/projects/sub-app-react-demo/src/pages/sdk-demo/index.tsx +72 -19
  65. package/templates/projects/sub-app-react-demo/package-lock.json +0 -4062
@@ -19,22 +19,34 @@ export default function SdkDemo() {
19
19
  const [loading, setLoading] = useState(false);
20
20
  const [data, setData] = useState<any[]>([]);
21
21
  const [columns, setColumns] = useState<any[]>([]);
22
- const [modelList, setModelList] = useState<string[]>([]);
22
+ const [modelList, setModelList] = useState<
23
+ Array<{
24
+ value: string;
25
+ label: string;
26
+ alias?: string;
27
+ name?: string;
28
+ datasetCode: string;
29
+ }>
30
+ >([]);
23
31
  const [selectedModel, setSelectedModel] = useState<string>("");
24
32
  const [selectOptions, setSelectOptions] = useState<any[]>([]);
25
33
  const [codeField, setCodeField] = useState<string>("id");
26
34
  const [labelField, setLabelField] = useState<string>("");
27
35
 
36
+ // 获取选中模型的信息(用于代码示例展示 alias)
37
+ const selectedModelInfo = modelList.find((m) => m.value === selectedModel);
38
+
28
39
  /**
29
40
  * 加载可用的数据模型列表
30
41
  */
31
42
  useEffect(() => {
32
43
  try {
33
- const models = lovrabetClient.getModelList();
44
+ // 使用 getModelListDetails 获取人类友好的模型列表
45
+ const models = lovrabetClient.getModelListDetails();
34
46
  setModelList(models);
35
47
  // 默认选择第一个模型
36
48
  if (models.length > 0) {
37
- setSelectedModel(models[0]);
49
+ setSelectedModel(models[0].value);
38
50
  }
39
51
  } catch (error) {
40
52
  console.error("获取模型列表失败:", error);
@@ -93,6 +105,16 @@ export default function SdkDemo() {
93
105
  column.title || column.dataIndex || column.key || String(column),
94
106
  dataIndex: column.dataIndex || column.key || String(column),
95
107
  key: column.dataIndex || column.key || String(column),
108
+ // 处理对象/数组类型的值,避免 React Error #31
109
+ render: (value: any) => {
110
+ if (value === null || value === undefined) {
111
+ return "-";
112
+ }
113
+ if (typeof value === "object") {
114
+ return JSON.stringify(value);
115
+ }
116
+ return String(value);
117
+ },
96
118
  }));
97
119
  setColumns(tableColumns);
98
120
  } else if (tableData.length > 0) {
@@ -103,6 +125,16 @@ export default function SdkDemo() {
103
125
  title: key,
104
126
  dataIndex: key,
105
127
  key: key,
128
+ // 处理对象/数组类型的值,避免 React Error #31
129
+ render: (value: any) => {
130
+ if (value === null || value === undefined) {
131
+ return "-";
132
+ }
133
+ if (typeof value === "object") {
134
+ return JSON.stringify(value);
135
+ }
136
+ return String(value);
137
+ },
106
138
  }));
107
139
  setColumns(tableColumns);
108
140
  }
@@ -182,13 +214,12 @@ export default function SdkDemo() {
182
214
  <Space>
183
215
  <Select
184
216
  placeholder="选择要查询的数据模型"
185
- style={{ width: 250 }}
217
+ style={{ width: 350 }}
186
218
  value={selectedModel}
187
219
  onChange={setSelectedModel}
188
- options={modelList.map((model) => ({
189
- label: model,
190
- value: model,
191
- }))}
220
+ showSearch
221
+ optionFilterProp="label"
222
+ options={modelList}
192
223
  />
193
224
  <Button
194
225
  type="primary"
@@ -215,28 +246,39 @@ export default function SdkDemo() {
215
246
  overflow: "auto",
216
247
  }}
217
248
  >
218
- {`// 基础查询(仅分页)
249
+ {`// ========== 方式一:标准 dataset_code 模式(推荐 AI/LLM 使用)==========
219
250
  const response = await lovrabetClient
220
- .models.${selectedModel || "Requirements"}.filter({
251
+ .models['${selectedModel || "dataset_xxx"}'].filter({
221
252
  currentPage: 1,
222
253
  pageSize: 10
223
254
  });
224
-
225
- // 完整查询示例(所有参数均为可选,根据实际字段使用)
255
+ ${
256
+ selectedModelInfo?.alias
257
+ ? `
258
+ // ========== 方式二:人类友好的 alias 模式 ==========
259
+ const response = await lovrabetClient
260
+ .models.${selectedModelInfo.alias}.filter({
261
+ currentPage: 1,
262
+ pageSize: 10
263
+ });
264
+ `
265
+ : ""
266
+ }
267
+ // ========== 完整查询示例(所有参数均为可选)==========
226
268
  const response = await lovrabetClient
227
- .models.${selectedModel || "Requirements"}.filter({
269
+ .models['${selectedModel || "dataset_xxx"}'].filter({
228
270
  // where: 条件查询(可选)
229
271
  // where: {
230
272
  // age: { $gte: 18 },
231
273
  // status: { $eq: 'active' }
232
274
  // },
233
-
275
+
234
276
  // select: 字段选择(可选)
235
277
  // select: ['id', 'name', 'age'],
236
-
278
+
237
279
  // orderBy: 排序(可选)
238
280
  // orderBy: [{ createTime: 'desc' }],
239
-
281
+
240
282
  // 分页参数(必需)
241
283
  currentPage: 1,
242
284
  pageSize: 10
@@ -345,13 +387,24 @@ const response = await lovrabetClient
345
387
  border: "1px solid #d9d9d9",
346
388
  }}
347
389
  >
348
- {`// 调用示例
390
+ {`// ========== 方式一:标准 dataset_code 模式(推荐 AI/LLM 使用)==========
349
391
  const options = await lovrabetClient
350
- .models.${selectedModel || "Requirements"}.getSelectOptions({
392
+ .models['${selectedModel || "dataset_xxx"}'].getSelectOptions({
351
393
  code: "${codeField || "id"}",
352
394
  label: "${labelField || "name"}"
353
395
  });
354
-
396
+ ${
397
+ selectedModelInfo?.alias
398
+ ? `
399
+ // ========== 方式二:人类友好的 alias 模式 ==========
400
+ const options = await lovrabetClient
401
+ .models.${selectedModelInfo.alias}.getSelectOptions({
402
+ code: "${codeField || "id"}",
403
+ label: "${labelField || "name"}"
404
+ });
405
+ `
406
+ : ""
407
+ }
355
408
  // 返回格式:[{ label: "显示文本", value: "选项值" }]`}
356
409
  </pre>
357
410
  </Space>