@fses/workbench-app 0.2.16 → 0.2.18

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 (64) hide show
  1. package/WORKBENCH-CLOSURE.json +18 -12
  2. package/dist/Workspace-JvnSC-w9.js +23186 -0
  3. package/dist/canvas/api/index.js +1 -1
  4. package/dist/{canvasFacade-B2EHgdqA.js → canvasFacade-B8jYm_aO.js} +748 -748
  5. package/dist/cardFactory-DmEBcCf4.js +1460 -0
  6. package/dist/extensions/index.js +1 -1
  7. package/dist/fses-workbench-app.js +5 -5
  8. package/dist/{index-CMM-5ObU.js → index-D-WW3bXH.js} +350 -346
  9. package/dist/internal/personal-workbench/components/workbench/WorkbenchStudio.vue.d.ts +3 -2
  10. package/dist/internal/personal-workbench/fde-skill-cards/runtime/fdeSkillProtocolChartDisplayData.d.ts +0 -5
  11. package/dist/internal/personal-workbench/lib/assistantPersonaProfiles.d.ts +6 -6
  12. package/dist/internal/personal-workbench/lib/cardStyleConfig.d.ts +26 -26
  13. package/dist/internal/personal-workbench/lib/echartsOptionEditorBridge.d.ts +0 -5
  14. package/dist/internal/personal-workbench/lib/historyCardBindingRestore.fixture.d.ts +0 -5
  15. package/dist/internal/personal-workbench/lib/runtimePrimitiveRegistry.d.ts +1 -1
  16. package/dist/internal/personal-workbench/lib/vueRuntimeAdapters.d.ts +18 -6
  17. package/dist/internal/personal-workbench/lib/workbenchCanvasBusinessGapChecklist.d.ts +1 -1
  18. package/dist/internal/personal-workbench/lib/workbenchCardRecommendationFallback.d.ts +1 -1
  19. package/dist/internal/personal-workbench/lib/workbenchCardRecommendationReturnItemUpsert.d.ts +0 -5
  20. package/dist/internal/personal-workbench/lib/workbenchDataBindingBadge.d.ts +0 -5
  21. package/dist/internal/personal-workbench/lib/workbenchImageComposeEntry.d.ts +1 -1
  22. package/dist/internal/personal-workbench/lib/workbenchLayout.d.ts +0 -5
  23. package/dist/runtime/index.js +1 -1
  24. package/dist/style.css +1 -1
  25. package/dist/{useWorkbenchRuntime-DLf_FgC7.js → useWorkbenchRuntime-D_AtkXIX.js} +7938 -7900
  26. package/dist/version.d.ts +1 -1
  27. package/dist/{workbenchCustomComponentRegistry-Bt94Lgko.js → workbenchCustomComponentRegistry-CWUPjCnJ.js} +74 -74
  28. package/node_modules/@byteluck-fe/locale-message/README.md +2 -0
  29. package/node_modules/@byteluck-fe/locale-message/dist/index.d.ts +37 -0
  30. package/node_modules/@byteluck-fe/locale-message/dist/locale-message.js +55 -0
  31. package/node_modules/@byteluck-fe/locale-message/package.json +37 -0
  32. package/node_modules/@fses/ai-chat/dist/components/ContextUsageRing.vue.d.ts +5 -0
  33. package/node_modules/@fses/ai-chat/dist/components/FsesAiChat.vue.d.ts +14 -1
  34. package/node_modules/@fses/ai-chat/dist/composables/types.d.ts +9 -0
  35. package/node_modules/@fses/ai-chat/dist/fses-ai-chat.js +5832 -5670
  36. package/node_modules/@fses/ai-chat/dist/fses-ai-chat.umd.cjs +16 -18
  37. package/node_modules/@fses/ai-chat/dist/index.d.ts +1 -1
  38. package/node_modules/@fses/ai-chat/dist/style.css +1 -1
  39. package/node_modules/@fses/ai-chat/dist/utils/attachment-upload.d.ts +0 -5
  40. package/node_modules/@fses/ai-chat/package.json +6 -5
  41. package/node_modules/@fses/workbench-card/dist/fses-workbench-card-renderers.js +10144 -9914
  42. package/node_modules/@fses/workbench-card/dist/fses-workbench-card.js +1517 -1503
  43. package/node_modules/@fses/workbench-card/dist/fses-workbench-card.umd.cjs +1 -1
  44. package/node_modules/@fses/workbench-card/dist/renderers/chart/chartRendererRegistry.d.ts +97 -97
  45. package/node_modules/@fses/workbench-card/dist/renderers/style.css +1 -1
  46. package/node_modules/@fses/workbench-card/package.json +4 -1
  47. package/node_modules/@fses/workbench-card/src/registry/cardRegistry.ts +99 -98
  48. package/node_modules/@fses/workbench-card/src/registry/compositeCardPatterns.ts +31 -30
  49. package/node_modules/@fses/workbench-card/src/registry/echartsTemplateCategories.ts +24 -23
  50. package/node_modules/@fses/workbench-card/src/registry/echartsTemplateRegistry.generated.js +765 -764
  51. package/node_modules/@fses/workbench-card/src/registry/echartsTemplateRegistry.generated.ts +765 -764
  52. package/node_modules/@fses/workbench-card/src/renderers/WorkbenchBlockRenderer.vue +143 -129
  53. package/node_modules/@fses/workbench-card/src/renderers/chart/ChartRegistry.vue +4 -3
  54. package/node_modules/@fses/workbench-card/src/renderers/chart/EChartsProtocolRenderer.vue +2 -1
  55. package/node_modules/@fses/workbench-card/src/renderers/chart/chartRendererRegistry.ts +99 -98
  56. package/node_modules/@fses/workbench-card/src/renderers/chart/useEchart.ts +30 -29
  57. package/node_modules/@fses/workbench-card/src/renderers/native/nativeBindings.ts +11 -10
  58. package/node_modules/@fses/workbench-card/src/renderers/nested/nestedBlockBindings.ts +102 -101
  59. package/node_modules/@fses/workbench-card/src/renderers/reference-composite/referenceCompositeBindings.ts +364 -363
  60. package/node_modules/@fses/workbench-card/src/renderers/reference-composite/referenceRiskAndStrategyBindings.ts +90 -89
  61. package/node_modules/@fses/workbench-card/src/renderers/useWorkbenchBlockRendererBindings.ts +33 -32
  62. package/package.json +4 -3
  63. package/dist/Workspace-CfKvji6S.js +0 -22896
  64. package/dist/cardFactory-BK3CA-Gn.js +0 -1443
@@ -1,3 +1,4 @@
1
+ import { getLocaleText } from '@byteluck-fe/locale-message'
1
2
  /**
2
3
  * @fileoverview 嵌套卡片预览绑定 - 提供 customCanvas 子卡片的数据归一化、语义分类和样式 helper。
3
4
  * @author seadon
@@ -336,7 +337,7 @@ export function createNestedBlockBindings(context: NestedBlockContext) {
336
337
  if (visualKind === 'statusList' && kind === 'statusItem') {
337
338
  return [{
338
339
  label: textValue(element.label, textValue(element.title)),
339
- status: textValue(element.status, '正常'),
340
+ status: textValue(element.status, getLocaleText('FWC.ead61787581615130')),
340
341
  tone: nestedBlockToneFromStatus(textValue(element.status)),
341
342
  }];
342
343
  }
@@ -419,7 +420,7 @@ export function createNestedBlockBindings(context: NestedBlockContext) {
419
420
  */
420
421
  function nestedBlockFallbackClassifierText(block: CustomCanvasNestedBlock): string {
421
422
  const text = nestedBlockClassifierText(block);
422
- if (/快捷|入口|待办|排行|梯队/.test(text)) return `${text} 人力 人事 人才 绩效 招聘 员工`;
423
+ if (/快捷|入口|待办|排行|梯队/.test(text)) return getLocaleText('FWC.56b71787578561536', {p0: text});
423
424
  return text;
424
425
  }
425
426
 
@@ -435,175 +436,175 @@ export function createNestedBlockBindings(context: NestedBlockContext) {
435
436
  if (visualKind === 'statusList') {
436
437
  if (domain === 'hr') {
437
438
  return [
438
- { label: '组织编制', status: '关注', tone: 'warning' },
439
- { label: '员工档案', status: '正常', tone: 'healthy' },
440
- { label: '考勤同步', status: '正常', tone: 'healthy' },
441
- { label: '薪酬批次', status: '待复核', tone: 'warning' },
442
- { label: '用工合规', status: '告警', tone: 'critical' },
439
+ { label: getLocaleText('FWC.a9f21787581335496'), status: getLocaleText('FWC.b6121787581620964'), tone: 'warning' },
440
+ { label: getLocaleText('FWC.0ca81787581335398'), status: getLocaleText('FWC.ead61787581615130'), tone: 'healthy' },
441
+ { label: getLocaleText('FWC.cc441787581335302'), status: getLocaleText('FWC.ead61787581615130'), tone: 'healthy' },
442
+ { label: getLocaleText('FWC.dc691787581335349'), status: getLocaleText('FWC.85bf1787581561617'), tone: 'warning' },
443
+ { label: getLocaleText('FWC.23671787581335203'), status: getLocaleText('FWC.46de1787581620311'), tone: 'critical' },
443
444
  ];
444
445
  }
445
446
  return [
446
- { label: 'ERP 核心套件', status: '正常', tone: 'healthy' },
447
- { label: 'OA 协同门户', status: '正常', tone: 'healthy' },
448
- { label: 'MES 生产执行', status: '卡顿', tone: 'warning' },
449
- { label: 'CRM 客户平台', status: '正常', tone: 'healthy' },
450
- { label: '财务共享系统', status: '告警', tone: 'critical' },
447
+ { label: getLocaleText('FWC.031f1787580015782'), status: getLocaleText('FWC.ead61787581615130'), tone: 'healthy' },
448
+ { label: getLocaleText('FWC.93391787580398649'), status: getLocaleText('FWC.ead61787581615130'), tone: 'healthy' },
449
+ { label: getLocaleText('FWC.fd501787580015810'), status: getLocaleText('FWC.ef811787581620540'), tone: 'warning' },
450
+ { label: getLocaleText('FWC.7aad1787580015277'), status: getLocaleText('FWC.ead61787581615130'), tone: 'healthy' },
451
+ { label: getLocaleText('FWC.4f0b1787580575217'), status: getLocaleText('FWC.46de1787581620311'), tone: 'critical' },
451
452
  ];
452
453
  }
453
454
  if (visualKind === 'resourceBars') {
454
455
  if (domain === 'hr') {
455
456
  return [
456
- { label: '研发', value: 97, tone: 'healthy' },
457
- { label: '制造', value: 112, tone: 'critical' },
458
- { label: '营销', value: 88, tone: 'warning' },
459
- { label: '运营', value: 101, tone: 'healthy' },
457
+ { label: getLocaleText('FWC.ab1d1787581620886'), value: 97, tone: 'healthy' },
458
+ { label: getLocaleText('FWC.48fd1787581621122'), value: 112, tone: 'critical' },
459
+ { label: getLocaleText('FWC.d3af1787581621783'), value: 88, tone: 'warning' },
460
+ { label: getLocaleText('FWC.dc961787581621873'), value: 101, tone: 'healthy' },
460
461
  ];
461
462
  }
462
463
  return [
463
464
  { label: 'CPU', value: 68, tone: 'info' },
464
- { label: '内存', value: 74, tone: 'info' },
465
- { label: '存储', value: 84, tone: 'warning' },
466
- { label: '带宽', value: 51, tone: 'healthy' },
465
+ { label: getLocaleText('FWC.733d1787581620806'), value: 74, tone: 'info' },
466
+ { label: getLocaleText('FWC.b8121787581620731'), value: 84, tone: 'warning' },
467
+ { label: getLocaleText('FWC.b2d71787581619496'), value: 51, tone: 'healthy' },
467
468
  ];
468
469
  }
469
470
  if (visualKind === 'incidentList') {
470
471
  if (domain === 'hr') {
471
472
  return [
472
- { severity: '红', title: '合同 30 天内到期', detail: '重点岗位需续签确认', time: '今日', tone: 'critical' },
473
- { severity: '红', title: '社保断缴 / 基数异常', detail: '跨区派遣与外包集中预警', time: '本周', tone: 'critical' },
474
- { severity: '黄', title: '加班超标部门', detail: '制造、客服、交付中心连续超标', time: '6 项', tone: 'warning' },
473
+ { severity: getLocaleText('FWC.1f241787581662861'), title: getLocaleText('FWC.02e51787579719433'), detail: getLocaleText('FWC.36851787579902659'), time: getLocaleText('FWC.12fc1787581611305'), tone: 'critical' },
474
+ { severity: getLocaleText('FWC.1f241787581662861'), title: getLocaleText('FWC.86e51787579587512'), detail: getLocaleText('FWC.c97f1787579587735'), time: getLocaleText('FWC.898d1787581621962'), tone: 'critical' },
475
+ { severity: getLocaleText('FWC.831a1787581663033'), title: getLocaleText('FWC.c5bb1787580571702'), detail: getLocaleText('FWC.e0281787579337250'), time: getLocaleText('FWC.774a1787581561762'), tone: 'warning' },
475
476
  ];
476
477
  }
477
478
  return [
478
- { severity: 'P1', title: '财务系统支付网关失败', detail: '责任:应用中台 · 处理 68%', time: '32m', tone: 'critical' },
479
- { severity: 'P1', title: 'MES 接口平均耗时 3.8s', detail: '责任:制造 IT · 已升级', time: '48m', tone: 'critical' },
480
- { severity: 'P2', title: '数据库备份延迟', detail: '责任:DBA · 预计 10:30 恢复', time: '1h', tone: 'warning' },
479
+ { severity: 'P1', title: getLocaleText('FWC.24a81787579719400'), detail: getLocaleText('FWC.a5681787579245091'), time: '32m', tone: 'critical' },
480
+ { severity: 'P1', title: getLocaleText('FWC.74f01787579282049'), detail: getLocaleText('FWC.247e1787579337280'), time: '48m', tone: 'critical' },
481
+ { severity: 'P2', title: getLocaleText('FWC.63801787580398000'), detail: getLocaleText('FWC.9f991787579141277'), time: '1h', tone: 'warning' },
481
482
  ];
482
483
  }
483
484
  if (visualKind === 'progressList') {
484
485
  if (domain === 'hr') {
485
486
  return [
486
- { label: '储备干部', value: '74%', progress: 74, tone: 'info' },
487
- { label: '继任计划', value: '62%', progress: 62, tone: 'warning' },
488
- { label: '培训完成', value: '88%', progress: 88, tone: 'healthy' },
489
- { label: '持证覆盖', value: '79%', progress: 79, tone: 'info' },
490
- { label: '低绩效改善', value: '216', progress: 42, tone: 'critical' },
487
+ { label: getLocaleText('FWC.50121787581336785'), value: '74%', progress: 74, tone: 'info' },
488
+ { label: getLocaleText('FWC.91081787581335543'), value: '62%', progress: 62, tone: 'warning' },
489
+ { label: getLocaleText('FWC.08801787581333971'), value: '88%', progress: 88, tone: 'healthy' },
490
+ { label: getLocaleText('FWC.bf411787581335983'), value: '79%', progress: 79, tone: 'info' },
491
+ { label: getLocaleText('FWC.680f1787581070917'), value: '216', progress: 42, tone: 'critical' },
491
492
  ];
492
493
  }
493
494
  return [
494
- { label: '数据中台二期', value: '76%', progress: 76, tone: 'healthy' },
495
- { label: '供应链数字化改造', value: '延期', progress: 58, tone: 'warning' },
496
- { label: '统一身份认证', value: '83%', progress: 83, tone: 'healthy' },
497
- { label: '容灾双活改造', value: '卡点', progress: 42, tone: 'critical' },
495
+ { label: getLocaleText('FWC.bcd81787580577284'), value: '76%', progress: 76, tone: 'healthy' },
496
+ { label: getLocaleText('FWC.2d8a1787580015843'), value: getLocaleText('FWC.c5a01787581620612'), progress: 58, tone: 'warning' },
497
+ { label: getLocaleText('FWC.5ddd1787580577831'), value: '83%', progress: 83, tone: 'healthy' },
498
+ { label: getLocaleText('FWC.1b8e1787580578855'), value: getLocaleText('FWC.ca771787581619565'), progress: 42, tone: 'critical' },
498
499
  ];
499
500
  }
500
501
  if (visualKind === 'todoGrid') {
501
502
  if (domain === 'hr') {
502
503
  return [
503
- { label: '组织调整方案审批', value: '18' },
504
- { label: '关键岗位任免确认', value: '7' },
505
- { label: '年度调薪包复核', value: '24' },
506
- { label: '招聘编制补录', value: '5' },
504
+ { label: getLocaleText('FWC.84ad1787580015871'), value: '18' },
505
+ { label: getLocaleText('FWC.8f781787580015753'), value: '7' },
506
+ { label: getLocaleText('FWC.648a1787580398035'), value: '24' },
507
+ { label: getLocaleText('FWC.434d1787580572564'), value: '5' },
507
508
  ];
508
509
  }
509
510
  return [
510
- { label: 'IT 采购审批', value: '18' },
511
- { label: '系统上线审批', value: '7' },
512
- { label: '权限变更审批', value: '24' },
513
- { label: '安全整改待办', value: '5' },
511
+ { label: getLocaleText('FWC.8ce71787580398078'), value: '18' },
512
+ { label: getLocaleText('FWC.36a51787580570470'), value: '7' },
513
+ { label: getLocaleText('FWC.2f901787580569946'), value: '24' },
514
+ { label: getLocaleText('FWC.86ed1787580571149'), value: '5' },
514
515
  ];
515
516
  }
516
517
  if (visualKind === 'quickLinks') {
517
518
  if (domain === 'hr') {
518
- return [{ label: '招聘系统' }, { label: '绩效平台' }, { label: '员工档案' }, { label: '用工审计' }];
519
+ return [{ label: getLocaleText('FWC.80561787581336239') }, { label: getLocaleText('FWC.b33c1787581336189') }, { label: getLocaleText('FWC.0ca81787581335398') }, { label: getLocaleText('FWC.f2f91787581333881') }];
519
520
  }
520
- return [{ label: '运维平台' }, { label: '堡垒机' }, { label: '安全平台' }, { label: '服务工单' }];
521
+ return [{ label: getLocaleText('FWC.fffe1787581334399') }, { label: getLocaleText('FWC.0c6a1787581560958') }, { label: getLocaleText('FWC.dd181787581337222') }, { label: getLocaleText('FWC.e9961787581333836') }];
521
522
  }
522
523
  if (visualKind === 'donut') {
523
524
  if (domain === 'hr') {
524
525
  return [
525
- { label: '固定薪酬', value: '56%', share: 56, tone: 'info' },
526
- { label: '浮动奖金', value: '16%', share: 16, tone: 'violet' },
527
- { label: '社保福利', value: '14%', share: 14, tone: 'warning' },
528
- { label: '外包费用', value: '14%', share: 14, tone: 'neutral' },
526
+ { label: getLocaleText('FWC.aef91787581337281'), value: '56%', share: 56, tone: 'info' },
527
+ { label: getLocaleText('FWC.28e81787581339724'), value: '16%', share: 16, tone: 'violet' },
528
+ { label: getLocaleText('FWC.14db1787581335252'), value: '14%', share: 14, tone: 'warning' },
529
+ { label: getLocaleText('FWC.71a81787581340239'), value: '14%', share: 14, tone: 'neutral' },
529
530
  ];
530
531
  }
531
532
  return [
532
- { label: '云资源费用', value: '42%', share: 42, tone: 'info' },
533
- { label: '软件采购', value: '25%', share: 25, tone: 'violet' },
534
- { label: '外包服务', value: '17%', share: 17, tone: 'warning' },
535
- { label: '维保与机房', value: '16%', share: 16, tone: 'neutral' },
533
+ { label: getLocaleText('FWC.69761787581071018'), value: '42%', share: 42, tone: 'info' },
534
+ { label: getLocaleText('FWC.ff391787581334451'), value: '25%', share: 25, tone: 'violet' },
535
+ { label: getLocaleText('FWC.94191787581340664'), value: '17%', share: 17, tone: 'warning' },
536
+ { label: getLocaleText('FWC.cf401787581070560'), value: '16%', share: 16, tone: 'neutral' },
536
537
  ];
537
538
  }
538
539
  if (visualKind === 'list') {
539
540
  if (domain === 'hr') {
540
541
  return [
541
- { label: '合同到期续签', value: '待确认', tone: 'warning' },
542
- { label: '社保基数异常', value: '需口径', tone: 'critical' },
543
- { label: '人效排行复核', value: '待处理', tone: 'info' },
542
+ { label: getLocaleText('FWC.c14d1787580576234'), value: getLocaleText('FWC.2f7f1787581558392'), tone: 'warning' },
543
+ { label: getLocaleText('FWC.cac11787580576758'), value: getLocaleText('FWC.9ea31787581561820'), tone: 'critical' },
544
+ { label: getLocaleText('FWC.76061787580573099'), value: getLocaleText('FWC.d7161787581560738'), tone: 'info' },
544
545
  ];
545
546
  }
546
547
  if (domain === 'risk') {
547
548
  return [
548
- { label: '盈利结构恶化', value: '需确认', tone: 'critical' },
549
- { label: '资金安全边际', value: '待补口径', tone: 'warning' },
550
- { label: '项目风险', value: '跟进中', tone: 'violet' },
549
+ { label: getLocaleText('FWC.4f451787580574233'), value: getLocaleText('FWC.ed9a1787581561881'), tone: 'critical' },
550
+ { label: getLocaleText('FWC.35a91787580574690'), value: getLocaleText('FWC.566a1787581341258'), tone: 'warning' },
551
+ { label: getLocaleText('FWC.21cd1787581333926'), value: getLocaleText('FWC.10431787581563900'), tone: 'violet' },
551
552
  ];
552
553
  }
553
554
  if (domain === 'marketing') {
554
555
  return [
555
- { label: '渠道异常', value: '需确认', tone: 'warning' },
556
- { label: '线索漏斗', value: '待补口径', tone: 'info' },
557
- { label: '竞品动态', value: '跟进中', tone: 'violet' },
556
+ { label: getLocaleText('FWC.4ddb1787581336037'), value: getLocaleText('FWC.ed9a1787581561881'), tone: 'warning' },
557
+ { label: getLocaleText('FWC.5e411787581336091'), value: getLocaleText('FWC.566a1787581341258'), tone: 'info' },
558
+ { label: getLocaleText('FWC.57511787581336141'), value: getLocaleText('FWC.10431787581563900'), tone: 'violet' },
558
559
  ];
559
560
  }
560
561
  return [
561
- { label: '服务异常复核', value: '待处理', tone: 'warning' },
562
- { label: '巡检风险项', value: '需确认', tone: 'critical' },
563
- { label: '平台通知', value: '跟进中', tone: 'info' },
562
+ { label: getLocaleText('FWC.080d1787580579381'), value: getLocaleText('FWC.d7161787581560738'), tone: 'warning' },
563
+ { label: getLocaleText('FWC.cb511787581070965'), value: getLocaleText('FWC.ed9a1787581561881'), tone: 'critical' },
564
+ { label: getLocaleText('FWC.db161787581342195'), value: getLocaleText('FWC.10431787581563900'), tone: 'info' },
564
565
  ];
565
566
  }
566
567
  if (/资产运营|资产状态/.test(text)) {
567
568
  return [
568
- { label: '闲置云主机待回收', value: '47 台', tone: 'warning' },
569
- { label: 'License 即将到期', value: '12 项', tone: 'critical' },
570
- { label: '资产盘点完成率', value: '96%', tone: 'healthy' },
569
+ { label: getLocaleText('FWC.1f7a1787580015529'), value: getLocaleText('FWC.95391787581342283'), tone: 'warning' },
570
+ { label: getLocaleText('FWC.6ac71787579518994'), value: getLocaleText('FWC.697c1787581342752'), tone: 'critical' },
571
+ { label: getLocaleText('FWC.e9fe1787580398359'), value: '96%', tone: 'healthy' },
571
572
  ];
572
573
  }
573
574
  if (domain === 'hr' && visualKind === 'simpleList') {
574
575
  return [
575
- { label: '研发中心', value: '1.42', tone: 'healthy' },
576
- { label: '营销体系', value: '1.31', tone: 'healthy' },
577
- { label: '运营中心', value: '1.18', tone: 'healthy' },
578
- { label: '制造体系', value: '0.78', tone: 'critical' },
576
+ { label: getLocaleText('FWC.a7651787581336288'), value: '1.42', tone: 'healthy' },
577
+ { label: getLocaleText('FWC.c8271787581343219'), value: '1.31', tone: 'healthy' },
578
+ { label: getLocaleText('FWC.d19b1787581343280'), value: '1.18', tone: 'healthy' },
579
+ { label: getLocaleText('FWC.3bb01787581336727'), value: '0.78', tone: 'critical' },
579
580
  ];
580
581
  }
581
582
  if (/成本优化/.test(text)) {
582
583
  return [
583
- { label: '本月云费用环比', value: '+8.4%', tone: 'warning' },
584
- { label: '可释放资源降本空间', value: '128 万', tone: 'healthy' },
585
- { label: '预算执行偏差', value: '-4.6%', tone: 'healthy' },
584
+ { label: getLocaleText('FWC.0ef81787580398695'), value: '+8.4%', tone: 'warning' },
585
+ { label: getLocaleText('FWC.8b751787579902689'), value: getLocaleText('FWC.f1fd1787581071377'), tone: 'healthy' },
586
+ { label: getLocaleText('FWC.7bba1787580573679'), value: '-4.6%', tone: 'healthy' },
586
587
  ];
587
588
  }
588
589
  if (/研发|效能/.test(text)) {
589
590
  return [
590
- { label: '版本上线频次', value: '34 次/月', tone: 'healthy' },
591
- { label: '需求平均交付周期', value: '11.6 天', tone: 'healthy' },
592
- { label: '线上 BUG 率', value: '1.8%', tone: 'warning' },
591
+ { label: getLocaleText('FWC.c7b71787580579903'), value: getLocaleText('FWC.32af1787580580430'), tone: 'healthy' },
592
+ { label: getLocaleText('FWC.250a1787580015900'), value: getLocaleText('FWC.f2a41787580580547'), tone: 'healthy' },
593
+ { label: getLocaleText('FWC.41731787580015929'), value: '1.8%', tone: 'warning' },
593
594
  ];
594
595
  }
595
596
  if (/合规|审计/.test(text)) {
596
597
  return [
597
- { label: '等保 2.0 整改进度', value: '92%', tone: 'healthy' },
598
- { label: '隐私合规检查', value: '通过', tone: 'healthy' },
599
- { label: '日志留存覆盖率', value: '88%', tone: 'warning' },
600
- { label: '离职未回收账号', value: '7 个', tone: 'critical' },
601
- { label: '超权限管理员账号', value: '4 个', tone: 'critical' },
602
- { label: '关键操作审计', value: '已归档', tone: 'healthy' },
598
+ { label: getLocaleText('FWC.f3e11787579587564'), value: '92%', tone: 'healthy' },
599
+ { label: getLocaleText('FWC.26221787580581614'), value: getLocaleText('FWC.5b7f1787581619644'), tone: 'healthy' },
600
+ { label: getLocaleText('FWC.c3311787580398960'), value: '88%', tone: 'warning' },
601
+ { label: getLocaleText('FWC.2c721787580397717'), value: getLocaleText('FWC.0d451787581564146'), tone: 'critical' },
602
+ { label: getLocaleText('FWC.d9f21787580015309'), value: getLocaleText('FWC.363d1787581564754'), tone: 'critical' },
603
+ { label: getLocaleText('FWC.fcb21787580580977'), value: getLocaleText('FWC.22691787581561018'), tone: 'healthy' },
603
604
  ];
604
605
  }
605
606
  return [
606
- { label: textValue(block.title, '事项'), value: nestedBlockMetricValue(block), tone: 'neutral' },
607
+ { label: textValue(block.title, getLocaleText('FWC.0eb31787581622050')), value: nestedBlockMetricValue(block), tone: 'neutral' },
607
608
  ];
608
609
  }
609
610
 
@@ -663,7 +664,7 @@ export function createNestedBlockBindings(context: NestedBlockContext) {
663
664
  if (direct && direct !== '--') return direct;
664
665
  const cells = Array.isArray(item.cells) ? item.cells : [];
665
666
  const firstCell = nestedBlockDisplayValue(cells[0]);
666
- return firstCell && firstCell !== '--' ? firstCell : `项目 ${index + 1}`;
667
+ return firstCell && firstCell !== '--' ? firstCell : getLocaleText('FWC.aa511787579587538', {p0: index + 1});
667
668
  }
668
669
 
669
670
  /**
@@ -924,9 +925,9 @@ export function createNestedBlockBindings(context: NestedBlockContext) {
924
925
  * @returns User-facing summary label.
925
926
  */
926
927
  function nestedBlockStatusSummaryLabel(tone: NestedBlockTone): string {
927
- if (tone === 'healthy') return '正常';
928
- if (tone === 'critical') return '告警';
929
- return '关注';
928
+ if (tone === 'healthy') return getLocaleText('FWC.ead61787581615130');
929
+ if (tone === 'critical') return getLocaleText('FWC.46de1787581620311');
930
+ return getLocaleText('FWC.b6121787581620964');
930
931
  }
931
932
 
932
933
  /**
@@ -1012,7 +1013,7 @@ export function createNestedBlockBindings(context: NestedBlockContext) {
1012
1013
  if (stage) return stage;
1013
1014
  const value = nestedBlockItemValue(item);
1014
1015
  if (value && !/^\d+(?:\.\d+)?%$/.test(value)) return value;
1015
- return `阶段 ${index + 1}`;
1016
+ return getLocaleText('FWC.74371787579587761', {p0: index + 1});
1016
1017
  }
1017
1018
 
1018
1019
  /**
@@ -1034,7 +1035,7 @@ export function createNestedBlockBindings(context: NestedBlockContext) {
1034
1035
  */
1035
1036
  function nestedBlockSecurityScoreRingLabel(block: CustomCanvasNestedBlock): string {
1036
1037
  const score = nestedBlockSecurityScore(block);
1037
- return /^\d+(?:\.\d+)?$/u.test(score) ? `${score}%` : '待补';
1038
+ return /^\d+(?:\.\d+)?$/u.test(score) ? `${score}%` : getLocaleText('FWC.4b391787581622133');
1038
1039
  }
1039
1040
 
1040
1041
  /**
@@ -1062,9 +1063,9 @@ export function createNestedBlockBindings(context: NestedBlockContext) {
1062
1063
  const metrics = nestedBlockItemRecords(data.metrics);
1063
1064
  if (metrics.length > 0) return metrics.slice(0, 3);
1064
1065
  return [
1065
- { label: '高危漏洞', value: '3' },
1066
- { label: '防火墙拦截', value: '21k' },
1067
- { label: '账号风险', value: '9' },
1066
+ { label: getLocaleText('FWC.a93d1787581335151'), value: '3' },
1067
+ { label: getLocaleText('FWC.901e1787581071737'), value: '21k' },
1068
+ { label: getLocaleText('FWC.d67f1787581335100'), value: '9' },
1068
1069
  ];
1069
1070
  }
1070
1071
 
@@ -1150,7 +1151,7 @@ export function createNestedBlockBindings(context: NestedBlockContext) {
1150
1151
  if (rows.length > 0 && !nestedBlockItemsLookTooWeak(rows)) return rows;
1151
1152
  return nestedBlockItems(block).slice(0, 3).map((item, index) => ({
1152
1153
  事项: nestedBlockItemLabel(item, index),
1153
- 状态: nestedBlockItemValue(item) || nestedBlockItemDetail(item) || '待确认',
1154
+ 状态: nestedBlockItemValue(item) || nestedBlockItemDetail(item) || getLocaleText('FWC.2f7f1787581558392'),
1154
1155
  }));
1155
1156
  }
1156
1157
 
@@ -1213,11 +1214,11 @@ export function createNestedBlockBindings(context: NestedBlockContext) {
1213
1214
  function nestedBlockStatusLabel(block: CustomCanvasNestedBlock) {
1214
1215
  const status = textValue(block.dataBindingStatus, block.state?.status);
1215
1216
  return {
1216
- none: '无绑定',
1217
- pending: '待问数',
1218
- running: '问数中',
1219
- ready: '已问数',
1220
- error: '问数失败',
1217
+ none: getLocaleText('FWC.47b41787581565368'),
1218
+ pending: getLocaleText('FWC.e15d1787581565435'),
1219
+ running: getLocaleText('FWC.59741787581566045'),
1220
+ ready: getLocaleText('FWC.03db1787581566110'),
1221
+ error: getLocaleText('FWC.21761787581328271'),
1221
1222
  }[status] || status;
1222
1223
  }
1223
1224
 
@@ -1251,11 +1252,11 @@ export function createNestedBlockBindings(context: NestedBlockContext) {
1251
1252
  if (intervention) {
1252
1253
  return businessGapDiagnosticSummary({
1253
1254
  message: intervention.message,
1254
- fallback: '需要补充业务口径后再问数',
1255
+ fallback: getLocaleText('FWC.8aa01787579519156'),
1255
1256
  diagnostics: block.dataBinding?.diagnostics,
1256
1257
  });
1257
1258
  }
1258
- return textValue(block.dataBindingError, '问数失败');
1259
+ return textValue(block.dataBindingError, getLocaleText('FWC.21761787581328271'));
1259
1260
  }
1260
1261
 
1261
1262
  /**