@dckj-npm/dc-material 0.1.376 → 0.1.377

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 (42) hide show
  1. package/build/docs/colorful-button.html +3 -3
  2. package/build/docs/colorful-input.html +3 -3
  3. package/build/docs/index.html +3 -3
  4. package/build/docs/teletext-list.html +3 -3
  5. package/build/docs/umi.6f6bf535.js +1 -0
  6. package/build/docs/{umi.6743fcd4.css → umi.9770df27.css} +1 -1
  7. package/build/docs/~demos/colorful-button-demo.html +3 -3
  8. package/build/docs/~demos/colorful-input-demo.html +3 -3
  9. package/build/docs/~demos/teletext-list-demo-1.html +3 -3
  10. package/build/docs/~demos/teletext-list-demo.html +3 -3
  11. package/build/lowcode/assets-daily.json +13 -13
  12. package/build/lowcode/assets-dev.json +2 -2
  13. package/build/lowcode/assets-prod.json +13 -13
  14. package/build/lowcode/meta.design.js +1 -1
  15. package/build/lowcode/meta.js +1 -1
  16. package/build/lowcode/render/default/view.css +1 -1
  17. package/build/lowcode/render/default/view.js +1 -1
  18. package/build/lowcode/view.css +1 -1
  19. package/build/lowcode/view.js +1 -1
  20. package/dist/BizComps.css +1 -1
  21. package/dist/BizComps.js +2 -2
  22. package/dist/BizComps.js.map +1 -1
  23. package/es/components/teletext-list/teletext-list-item.d.ts +14 -77
  24. package/es/components/teletext-list/teletext-list-item.js +153 -165
  25. package/es/components/teletext-list/teletext-list-item.scss +53 -4
  26. package/es/components/teletext-list/teletext-list.d.ts +60 -4
  27. package/es/components/teletext-list/teletext-list.js +55 -37
  28. package/lib/components/teletext-list/teletext-list-item.d.ts +14 -77
  29. package/lib/components/teletext-list/teletext-list-item.js +153 -164
  30. package/lib/components/teletext-list/teletext-list-item.scss +53 -4
  31. package/lib/components/teletext-list/teletext-list.d.ts +60 -4
  32. package/lib/components/teletext-list/teletext-list.js +55 -37
  33. package/lowcode/teletext-list/meta.ts +457 -703
  34. package/lowcode/teletext-list/meta.ts.bak +821 -0
  35. package/lowcode_es/meta.js +1 -1
  36. package/lowcode_es/teletext-list/meta.js +689 -598
  37. package/lowcode_es/teletext-list/meta.ts.bak +821 -0
  38. package/lowcode_lib/meta.js +1 -1
  39. package/lowcode_lib/teletext-list/meta.js +689 -598
  40. package/lowcode_lib/teletext-list/meta.ts.bak +821 -0
  41. package/package.json +3 -3
  42. package/build/docs/umi.d20b1d99.js +0 -1
@@ -0,0 +1,821 @@
1
+ import {
2
+ IPublicTypeComponentMetadata,
3
+ IPublicTypeSnippet,
4
+ } from '@alilc/lowcode-types'
5
+
6
+ const parsePxNumber = (value: any): number | undefined => {
7
+ if (typeof value === 'number' && Number.isFinite(value)) {
8
+ return value
9
+ }
10
+ if (typeof value === 'string') {
11
+ const numberLike = Number(value.trim())
12
+ if (Number.isFinite(numberLike)) {
13
+ return numberLike
14
+ }
15
+ const matched = value.match(/^\s*(\d+(?:\.\d+)?)\s*px\s*$/i)
16
+ if (!matched) return undefined
17
+ const parsed = Number(matched[1])
18
+ return Number.isFinite(parsed) ? parsed : undefined
19
+ }
20
+ return undefined
21
+ }
22
+
23
+ const TeletextListMeta: IPublicTypeComponentMetadata = {
24
+ group: '低代码组件',
25
+ componentName: 'TeletextList',
26
+ title: '图文列表',
27
+ docUrl: '',
28
+ screenshot: '',
29
+ devMode: 'proCode',
30
+ category: '信息展示',
31
+ npm: {
32
+ package: '@dckj-npm/dc-material',
33
+ version: '0.1.8',
34
+ exportName: 'TeletextList',
35
+ main: 'src/index.tsx',
36
+ destructuring: true,
37
+ subName: '',
38
+ },
39
+ configure: {
40
+ props: [
41
+ // ══════════════════════════════════════════════════════════
42
+ // 1. 内容与数据
43
+ // ══════════════════════════════════════════════════════════
44
+ {
45
+ title: '内容与数据',
46
+ type: 'group',
47
+ display: 'block',
48
+ items: [
49
+ {
50
+ title: {
51
+ label: {
52
+ type: 'i18n',
53
+ 'en-US': 'type',
54
+ 'zh-CN': '类型',
55
+ },
56
+ },
57
+ name: 'type',
58
+ description: '类型',
59
+ setter: {
60
+ componentName: 'RadioGroupSetter',
61
+ props: {
62
+ dataSource: [
63
+ {
64
+ label: '图文',
65
+ value: 'textAndImg',
66
+ },
67
+ {
68
+ label: '仅有图片',
69
+ value: 'imgOnly',
70
+ },
71
+ {
72
+ label: '仅有文字',
73
+ value: 'textOnly',
74
+ },
75
+ ],
76
+ options: [
77
+ {
78
+ label: '图文',
79
+ value: 'textAndImg',
80
+ },
81
+ {
82
+ label: '仅有图片',
83
+ value: 'imgOnly',
84
+ },
85
+ {
86
+ label: '仅有文字',
87
+ value: 'textOnly',
88
+ },
89
+ ],
90
+ },
91
+ initialValue: 'textAndImg',
92
+ },
93
+ },
94
+ {
95
+ title: {
96
+ label: {
97
+ type: 'i18n',
98
+ 'en-US': 'imagePlacement',
99
+ 'zh-CN': '图片位置',
100
+ },
101
+ },
102
+ name: 'imagePlacement',
103
+ description: '图片位置',
104
+ setter: {
105
+ componentName: 'RadioGroupSetter',
106
+ props: {
107
+ dataSource: [
108
+ {
109
+ label: '左',
110
+ value: 'left',
111
+ },
112
+ {
113
+ label: '右',
114
+ value: 'right',
115
+ },
116
+ {
117
+ label: '上',
118
+ value: 'top',
119
+ },
120
+ {
121
+ label: '下',
122
+ value: 'bottom',
123
+ },
124
+ {
125
+ label: '无',
126
+ value: 'none',
127
+ },
128
+ ],
129
+ options: [
130
+ {
131
+ label: '左',
132
+ value: 'left',
133
+ },
134
+ {
135
+ label: '右',
136
+ value: 'right',
137
+ },
138
+ {
139
+ label: '上',
140
+ value: 'top',
141
+ },
142
+ {
143
+ label: '下',
144
+ value: 'bottom',
145
+ },
146
+ {
147
+ label: '无',
148
+ value: 'none',
149
+ },
150
+ ],
151
+ },
152
+ initialValue: 'left',
153
+ },
154
+ extraProps: {
155
+ // 引擎已自动 setPropValue('imagePlacement', value),无需再做任何额外写入
156
+ // 之前的快照-还原逻辑反而触发多余的 MobX 响应链,导致 dataList 被覆盖
157
+ },
158
+ },
159
+ {
160
+ title: '图片宽度',
161
+ name: 'imgWidth',
162
+ description: '图片宽度',
163
+ setter: {
164
+ componentName: 'NumberSetter',
165
+ isRequired: false,
166
+ initialValue: 100,
167
+ },
168
+ extraProps: {
169
+ /**
170
+ * ignoreDefaultValue: 防止布局面板修改 Image 子节点 style 后,
171
+ * 引擎 remount SettingFieldView 时 initDefaultValue 把 imgWidth 重置为 100。
172
+ * 与 dataList 同理:只要 prop 有值就永远不应被 initialValue 覆盖。
173
+ */
174
+ ignoreDefaultValue: () => true,
175
+ getValue: (target: any, value: any) => {
176
+ // 优先使用引擎传入的当前 prop 值
177
+ const parsed = parsePxNumber(value)
178
+ if (parsed !== undefined) return parsed
179
+ // 二级兜底:从 schema 快照读取(防止引擎传入 undefined 时丢失已保存的值)
180
+ const fromSchema = parsePxNumber(target?.node?.schema?.props?.imgWidth)
181
+ if (fromSchema !== undefined) return fromSchema
182
+ return 100
183
+ },
184
+ },
185
+ },
186
+ {
187
+ title: '图片高度',
188
+ name: 'imgHeight',
189
+ description: '图片高度',
190
+ setter: {
191
+ componentName: 'NumberSetter',
192
+ isRequired: false,
193
+ initialValue: 100,
194
+ },
195
+ extraProps: {
196
+ ignoreDefaultValue: () => true,
197
+ getValue: (target: any, value: any) => {
198
+ const parsed = parsePxNumber(value)
199
+ if (parsed !== undefined) return parsed
200
+ const fromSchema = parsePxNumber(target?.node?.schema?.props?.imgHeight)
201
+ if (fromSchema !== undefined) return fromSchema
202
+ return 100
203
+ },
204
+ },
205
+ },
206
+ {
207
+ title: '图片圆角',
208
+ name: 'imgBorderRadius',
209
+ description: '图片圆角(px)',
210
+ setter: {
211
+ componentName: 'NumberSetter',
212
+ isRequired: false,
213
+ initialValue: 0,
214
+ defaultValue: 0,
215
+ props: { min: 0 },
216
+ },
217
+ },
218
+ {
219
+ title: '标题颜色',
220
+ name: 'titleColor',
221
+ description: '标题文字颜色',
222
+ setter: {
223
+ componentName: 'ColorSetter',
224
+ isRequired: false,
225
+ initialValue: '',
226
+ },
227
+ },
228
+ {
229
+ title: '标题字体大小',
230
+ name: 'titleFontSize',
231
+ description: '标题字体大小(px)',
232
+ setter: {
233
+ componentName: 'NumberSetter',
234
+ isRequired: false,
235
+ initialValue: 14,
236
+ defaultValue: 14,
237
+ props: { min: 10, max: 60 },
238
+ },
239
+ },
240
+ {
241
+ title: '说明颜色',
242
+ name: 'descriptionColor',
243
+ description: '说明文字颜色',
244
+ setter: {
245
+ componentName: 'ColorSetter',
246
+ isRequired: false,
247
+ initialValue: '',
248
+ },
249
+ },
250
+ {
251
+ title: '说明字体大小',
252
+ name: 'descriptionFontSize',
253
+ description: '说明字体大小(px)',
254
+ setter: {
255
+ componentName: 'NumberSetter',
256
+ isRequired: false,
257
+ initialValue: 12,
258
+ defaultValue: 12,
259
+ props: { min: 10, max: 60 },
260
+ },
261
+ },
262
+ {
263
+ title: '数据源绑定',
264
+ name: 'dataListBind',
265
+ setter: {
266
+ componentName: 'SetterFormVariable',
267
+ props: {
268
+ attributes: [
269
+ {
270
+ label: '图文数据',
271
+ value: 'dataList',
272
+ children: [
273
+ { label: '图片链接', value: 'image' },
274
+ { label: '类型', value: 'itemType' },
275
+ { label: '标题', value: 'title' },
276
+ { label: '说明', value: 'description' },
277
+ ],
278
+ },
279
+ ],
280
+ },
281
+ },
282
+ extraProps: {
283
+ // 引擎已自动 node.setPropValue('dataListBind', value),无需重复写入
284
+ },
285
+ },
286
+ {
287
+ title: '标题',
288
+ name: 'title',
289
+ description: '标题',
290
+ setter: {
291
+ componentName: 'StringSetter',
292
+ isRequired: false,
293
+ initialValue: '',
294
+ },
295
+ },
296
+ {
297
+ title: {
298
+ label: {
299
+ type: 'i18n',
300
+ 'en-US': 'moreText',
301
+ 'zh-CN': '更多文字',
302
+ },
303
+ tip: 'moreText | 更多文字',
304
+ },
305
+ name: 'moreText',
306
+ description: '更多文字',
307
+ setter: {
308
+ componentName: 'StringSetter',
309
+ isRequired: false,
310
+ initialValue: '',
311
+ },
312
+ },
313
+ {
314
+ title: '文字行数',
315
+ name: 'textLines',
316
+ description: '文字行数',
317
+ setter: {
318
+ componentName: 'NumberSetter',
319
+ isRequired: false,
320
+ initialValue: 2,
321
+ defaultValue: 2,
322
+ props: {
323
+ min: 2,
324
+ max: 4,
325
+ },
326
+ },
327
+ extraProps: {
328
+ setValue(target, value) {
329
+ // 直接写入 textLines prop;组件已改为纯 prop 驱动,无需操作子节点
330
+ target.getProps().setPropValue('textLines', value)
331
+
332
+ // 同步更新数据源绑定配置中的字段列表
333
+ const dataListBindProp = (target?.parent as any)?.items?.find(
334
+ (item: any) => item.name === 'dataListBind',
335
+ )
336
+ if (dataListBindProp?.setter) {
337
+ const baseChildren = [
338
+ { label: '图片链接', value: 'image' },
339
+ { label: '类型', value: 'itemType' },
340
+ { label: '标题', value: 'title' },
341
+ { label: '说明', value: 'description' },
342
+ ]
343
+ const textChildren = value > 2
344
+ ? Array.from({ length: value - 2 }).map((_, i) => ({
345
+ label: `文本${i + 3}`,
346
+ value: `text${i + 3}`,
347
+ }))
348
+ : []
349
+ dataListBindProp.setter.props.attributes[0].children = [
350
+ ...baseChildren,
351
+ ...textChildren,
352
+ ]
353
+ }
354
+ },
355
+ },
356
+ },
357
+ {
358
+ title: '子项列数',
359
+ name: 'itemColumns',
360
+ description: '子项列数',
361
+ setter: {
362
+ componentName: 'NumberSetter',
363
+ isRequired: false,
364
+ initialValue: (target) => {
365
+ const isTwoColumns =
366
+ target.getProps().getPropValue('imagePlacement') === 'top' ||
367
+ target.getProps().getPropValue('imagePlacement') === 'bottom'
368
+ return isTwoColumns ? 2 : 1
369
+ },
370
+ defaultValue: (target) => {
371
+ const isTwoColumns =
372
+ target.getProps().getPropValue('imagePlacement') === 'top' ||
373
+ target.getProps().getPropValue('imagePlacement') === 'bottom'
374
+ return isTwoColumns ? 2 : 1
375
+ },
376
+ props: {
377
+ min: 1,
378
+ max: 2,
379
+ },
380
+ },
381
+ },
382
+ {
383
+ title: '子项间距',
384
+ name: 'itemGap',
385
+ description: '子项间距',
386
+ setter: {
387
+ componentName: 'NumberSetter',
388
+ isRequired: false,
389
+ initialValue: 10,
390
+ defaultValue: 10,
391
+ },
392
+ },
393
+ {
394
+ title: '子项内边距',
395
+ name: 'itemPadding',
396
+ description: '子项内边距',
397
+ setter: {
398
+ componentName: 'NumberSetter',
399
+ isRequired: false,
400
+ initialValue: 0,
401
+ defaultValue: 0,
402
+ },
403
+ },
404
+ {
405
+ title: '子项背景颜色',
406
+ name: 'itemBgColor',
407
+ description: '子项背景颜色',
408
+ setter: {
409
+ componentName: 'ColorSetter',
410
+ isRequired: false,
411
+ initialValue: '#fff',
412
+ defaultValue: '#fff',
413
+ },
414
+ },
415
+ {
416
+ title: '子项分布',
417
+ name: 'itemRowAlign',
418
+ description: '子项分布',
419
+ setter: {
420
+ componentName: 'SelectSetter',
421
+ props: {
422
+ options: [
423
+ {
424
+ label: '列分布',
425
+ value: 'column',
426
+ },
427
+ {
428
+ label: '一行显示',
429
+ value: 'row',
430
+ },
431
+ ],
432
+ },
433
+ initialValue: 'column',
434
+ },
435
+ },
436
+ {
437
+ title: '图文对齐方式',
438
+ name: 'textAlign',
439
+ description: '图文对齐方式',
440
+ setter: {
441
+ componentName: 'SelectSetter',
442
+ props: {
443
+ options: [
444
+ {
445
+ label: '左对齐',
446
+ value: 'flex-start',
447
+ },
448
+ {
449
+ label: '右对齐',
450
+ value: 'flex-end',
451
+ },
452
+ {
453
+ label: '居中对齐',
454
+ value: 'center',
455
+ },
456
+ ],
457
+ },
458
+ initialValue: 'flex-start',
459
+ },
460
+ },
461
+ {
462
+ title: '图文间距',
463
+ name: 'textImgGap',
464
+ description: '图文间距',
465
+ setter: {
466
+ componentName: 'NumberSetter',
467
+ isRequired: false,
468
+ initialValue: 0,
469
+ defaultValue: 0,
470
+ },
471
+ },
472
+ {
473
+ title: '图标配置',
474
+ name: 'iconList',
475
+ extraProps: {
476
+ display: 'accordion',
477
+ defaultCollapsed: false,
478
+ },
479
+ setter: {
480
+ componentName: 'ArraySetter',
481
+ props: {
482
+ itemSetter: {
483
+ componentName: 'ObjectSetter',
484
+ props: {
485
+ config: {
486
+ items: [
487
+ {
488
+ name: 'icon',
489
+ title: '图标',
490
+ setter: 'IconSetter',
491
+ isRequired: true,
492
+ props: {
493
+ hasClear: false,
494
+ },
495
+ },
496
+ {
497
+ name: 'size',
498
+ title: '图标尺寸',
499
+ setter: {
500
+ componentName: 'SelectSetter',
501
+ props: {
502
+ options: [
503
+ {
504
+ label: 'xxs',
505
+ value: 'xxs',
506
+ },
507
+ {
508
+ label: 'xs',
509
+ value: 'xs',
510
+ },
511
+ {
512
+ label: 'small',
513
+ value: 'small',
514
+ },
515
+ {
516
+ label: 'medium',
517
+ value: 'medium',
518
+ },
519
+ {
520
+ label: 'large',
521
+ value: 'large',
522
+ },
523
+ {
524
+ label: 'xl',
525
+ value: 'xl',
526
+ },
527
+ {
528
+ label: 'xxl',
529
+ value: 'xxl',
530
+ },
531
+ {
532
+ label: 'xxxl',
533
+ value: 'xxxl',
534
+ },
535
+ {
536
+ label: 'inherit',
537
+ value: 'inherit',
538
+ },
539
+ ],
540
+ },
541
+ },
542
+ defaultValue: 'medium',
543
+ },
544
+ {
545
+ name: 'position',
546
+ title: '图标位置',
547
+ defaultValue: 'rightTop',
548
+ isRequired: true,
549
+ setter: {
550
+ componentName: 'SelectSetter',
551
+ props: {
552
+ options: [
553
+ {
554
+ label: '左上角',
555
+ value: 'leftTop',
556
+ },
557
+ {
558
+ label: '左下角',
559
+ value: 'leftBottom',
560
+ },
561
+ {
562
+ label: '右上角',
563
+ value: 'rightTop',
564
+ },
565
+ {
566
+ label: '右下角',
567
+ value: 'rightBottom',
568
+ },
569
+ {
570
+ label: '自定义',
571
+ value: 'customize',
572
+ },
573
+ ],
574
+ },
575
+ },
576
+ extraProps: {
577
+ setValue: (target, value) => {
578
+ target.getProps().setPropValue('position', value)
579
+ },
580
+ },
581
+ },
582
+ {
583
+ name: 'rightOffset',
584
+ title: '右偏移',
585
+ setter: 'NumberSetter',
586
+ defaultValue: 0,
587
+ condition: (target) => {
588
+ return target.getProps().getPropValue('position') === 'customize'
589
+ },
590
+ },
591
+ {
592
+ name: 'topOffset',
593
+ title: '上偏移',
594
+ setter: 'NumberSetter',
595
+ defaultValue: 0,
596
+ condition: (target) => {
597
+ return target.getProps().getPropValue('position') === 'customize'
598
+ },
599
+ },
600
+ ],
601
+ },
602
+ },
603
+ initialValue: {
604
+ size: 'medium',
605
+ position: 'rightTop',
606
+ rightOffset: 0,
607
+ topOffset: 0,
608
+ },
609
+ },
610
+ },
611
+ },
612
+ },
613
+ {
614
+ title: '是否为购物车列表',
615
+ name: 'isShoppingCart',
616
+ description: '是否为购物车列表',
617
+ setter: {
618
+ componentName: 'BoolSetter',
619
+ isRequired: true,
620
+ initialValue: false,
621
+ },
622
+ },
623
+ {
624
+ title: '是否为愿望单列表',
625
+ name: 'isWishList',
626
+ description: '是否为愿望单列表',
627
+ setter: {
628
+ componentName: 'BoolSetter',
629
+ isRequired: true,
630
+ initialValue: false,
631
+ },
632
+ },
633
+ {
634
+ title: '是否为用户菜单列表',
635
+ name: 'isUserMenu',
636
+ description: '是否为用户菜单列表',
637
+ setter: {
638
+ componentName: 'BoolSetter',
639
+ isRequired: true,
640
+ initialValue: false,
641
+ },
642
+ },
643
+ {
644
+ title: {
645
+ label: {
646
+ type: 'i18n',
647
+ 'en-US': 'dataList',
648
+ 'zh-CN': '数据',
649
+ },
650
+ tip: 'dataList | 数据',
651
+ },
652
+ name: 'dataList',
653
+ description: '数据',
654
+ setter: {
655
+ componentName: 'ArraySetter',
656
+ props: {
657
+ itemSetter: {
658
+ componentName: 'ObjectSetter',
659
+ props: {
660
+ config: {
661
+ items: [
662
+ {
663
+ title: {
664
+ label: {
665
+ type: 'i18n',
666
+ 'en-US': 'title',
667
+ 'zh-CN': '标题',
668
+ },
669
+ },
670
+ name: 'title',
671
+ description: '标题',
672
+ setter: {
673
+ componentName: 'StringSetter',
674
+ isRequired: false,
675
+ initialValue: '',
676
+ },
677
+ },
678
+ {
679
+ title: {
680
+ label: {
681
+ type: 'i18n',
682
+ 'en-US': 'image',
683
+ 'zh-CN': '图片地址',
684
+ },
685
+ },
686
+ name: 'image',
687
+ description: '图片地址',
688
+ setter: {
689
+ componentName: 'CustomImageSetter',
690
+ isRequired: false,
691
+ initialValue: '',
692
+ },
693
+ },
694
+ {
695
+ title: {
696
+ label: {
697
+ type: 'i18n',
698
+ 'en-US': 'description',
699
+ 'zh-CN': '描述',
700
+ },
701
+ },
702
+ name: 'description',
703
+ description: '描述',
704
+ setter: {
705
+ componentName: 'StringSetter',
706
+ isRequired: false,
707
+ initialValue: '',
708
+ },
709
+ },
710
+ ],
711
+ extraSetter: {
712
+ componentName: 'MixedSetter',
713
+ isRequired: false,
714
+ props: {},
715
+ },
716
+ },
717
+ },
718
+ },
719
+ },
720
+ initialValue: (target) => {
721
+ // ignoreDefaultValue: () => true 保证此函数在 SettingFieldView remount 时
722
+ // 永远不会被 initDefaultValue 调用,仅作为安全兜底保留。
723
+ // 正常的首次创建数据由 snippet.props.dataList 提供。
724
+ const existing = target?.node?.schema?.props?.dataList
725
+ ?? target?.getProps?.()?.getPropValue?.('dataList')
726
+ if (existing !== undefined) return existing
727
+ return DEFAULT_DATA_LIST
728
+ },
729
+ },
730
+ extraProps: {
731
+ /**
732
+ * ignoreDefaultValue: 彻底阻止引擎在 SettingFieldView remount 时
733
+ * 调用 initDefaultValue → 把 initialValue(默认数据数组)通过 field.setValue
734
+ * 写入 dataList prop,覆盖已绑定的 JSExpression。
735
+ *
736
+ * 这是根本性解决方案:在引擎层面阻断 initDefaultValue 的执行,
737
+ * 而不是试图在 initialValue/getValue/setValue 中做缓存和还原来补救。
738
+ */
739
+ ignoreDefaultValue: () => true,
740
+ getValue: (target: any, currentValue: any) => {
741
+ // currentValue 已有值时直接返回
742
+ if (currentValue !== undefined) return currentValue
743
+ // 从 schema 快照兜底读取(最可靠的源头数据,始终反映持久化状态)
744
+ const fromSchema = target?.node?.schema?.props?.dataList
745
+ if (fromSchema !== undefined) return fromSchema
746
+ return undefined
747
+ },
748
+ },
749
+ },
750
+ ],
751
+ supports: {
752
+ style: true,
753
+ events: [
754
+ {
755
+ name: 'onClick',
756
+ template: "onClick(key,${extParams}){\n// 点击项目的事件\nconsole.log('onClick', key);}",
757
+ },
758
+ {
759
+ name: 'handleMoreClick',
760
+ template: "handleMoreClick(){\n// 查看更多\nconsole.log('handleMoreClick');}",
761
+ },
762
+ ],
763
+ },
764
+ component: {
765
+ disableBehaviors: ['copy'],
766
+ },
767
+ },
768
+ }
769
+
770
+ const DEFAULT_DATA_LIST = [
771
+ {
772
+ image: 'https://img.alicdn.com/tps/TB16TQvOXXXXXbiaFXXXXXXXXXX-120-120.svg',
773
+ title: '标题名称',
774
+ description:
775
+ '说明文字说明文字说明文字说明文字说明文字说明文字说明文字说明文字说明文字说明文字说明文字',
776
+ },
777
+ {
778
+ image: 'https://img.alicdn.com/tps/TB16TQvOXXXXXbiaFXXXXXXXXXX-120-120.svg',
779
+ title: '标题名称',
780
+ description:
781
+ '说明文字说明文字说明文字说明文字说明文字说明文字说明文字说明文字说明文字说明文字说明文字',
782
+ },
783
+ ]
784
+
785
+ const getSnippets = (textLines = 2): IPublicTypeSnippet[] => [
786
+ {
787
+ title: '图文列表',
788
+ screenshot: '',
789
+ schema: {
790
+ componentName: 'TeletextList',
791
+ props: {
792
+ // 将默认数据放到 snippet props 中,而非依赖 setter.initialValue。
793
+ // 因为 dataList 使用了 ignoreDefaultValue:()=>true 来阻止引擎在
794
+ // SettingFieldView remount 时覆盖已绑定的 JSExpression,
795
+ // 所以 initDefaultValue 永远不会运行,首次拖入的初始数据必须由 snippet 提供。
796
+ dataList: DEFAULT_DATA_LIST,
797
+ },
798
+ // 重构后图文列表仅保留头部标题槽位子节点。
799
+ // 图片、文本行均由 TeletextListItem 纯 prop 驱动原生渲染,不再依赖 cloneElement/convertChildren。
800
+ children: [
801
+ {
802
+ componentName: 'NextText',
803
+ props: {
804
+ type: 'h5',
805
+ children: '列表标题',
806
+ key: 'box-title',
807
+ style: {
808
+ fontSize: '16px',
809
+ fontWeight: 'bold',
810
+ },
811
+ },
812
+ },
813
+ ],
814
+ },
815
+ },
816
+ ]
817
+
818
+ export default {
819
+ ...TeletextListMeta,
820
+ snippets: getSnippets(2),
821
+ }