@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 引用复合风险与策略绑定 - 提供高密度风险、快捷工作台、策略 KPI 和运营健康预览 helper。
3
4
  * @author seadon
@@ -63,7 +64,7 @@ export function referenceStrategyKpiRiskDisplayText(
63
64
  label,
64
65
  detail,
65
66
  );
66
- if (!detail && input.needsHumanIntervention) detail = '待补口径';
67
+ if (!detail && input.needsHumanIntervention) detail = getLocaleText('FWC.a4881787581342167');
67
68
  return { detail, value };
68
69
  }
69
70
 
@@ -217,11 +218,11 @@ export function createReferenceRiskAndStrategyBindings(context: ReferenceRiskStr
217
218
  const rawItems = block ? nestedBlockRawItems(block) : [];
218
219
  if (rawItems.length >= 3 && !nestedBlockItemsLookTooWeak(rawItems)) return rawItems.slice(0, 5);
219
220
  return [
220
- { label: '管理费用', value: '+12.8%', progress: 72, tone: 'critical' },
221
- { label: '外包成本', value: '+10.6%', progress: 60, tone: 'critical' },
222
- { label: '营销投放', value: '+8.4%', progress: 48, tone: 'warning' },
223
- { label: '物流仓储', value: '+6.2%', progress: 38, tone: 'warning' },
224
- { label: '差旅会议', value: '-3.1%', progress: 28, tone: 'healthy' },
221
+ { label: getLocaleText('FWC.99f81787581421449'), value: '+12.8%', progress: 72, tone: 'critical' },
222
+ { label: getLocaleText('FWC.ad3c1787581421543'), value: '+10.6%', progress: 60, tone: 'critical' },
223
+ { label: getLocaleText('FWC.3c6d1787581421582'), value: '+8.4%', progress: 48, tone: 'warning' },
224
+ { label: getLocaleText('FWC.f1481787581421617'), value: '+6.2%', progress: 38, tone: 'warning' },
225
+ { label: getLocaleText('FWC.b2281787581421648'), value: '-3.1%', progress: 28, tone: 'healthy' },
225
226
  ];
226
227
  }
227
228
 
@@ -234,7 +235,7 @@ export function createReferenceRiskAndStrategyBindings(context: ReferenceRiskStr
234
235
  const block = referenceNestedBlock(data, /超阈值|冻结|审计/);
235
236
  if (block && !nestedBlockItemsLookTooWeakForVisualKind(nestedBlockRawItems(block), 'simpleList')) return nestedBlockItems(block).slice(0, 2);
236
237
  return [
237
- { label: '3 项超阈值', detail: '管理费用、外包成本连续超预算。', value: '专项审计', tone: 'critical' },
238
+ { label: '3 项超阈值', detail: getLocaleText('FWC.00e31787579292316'), value: getLocaleText('FWC.045c1787581421679'), tone: 'critical' },
238
239
  ];
239
240
  }
240
241
 
@@ -258,9 +259,9 @@ export function createReferenceRiskAndStrategyBindings(context: ReferenceRiskStr
258
259
  }];
259
260
  });
260
261
  const fallbackRows = [
261
- { label: '利润同比下滑:华东事业部', value: '-23.4%', tone: 'critical' },
262
- { label: '费用环比异动:管理费用', value: '+12.8%', tone: 'critical' },
263
- { label: '预算偏离:华南新基地', value: '+9.6%', tone: 'warning' },
262
+ { label: getLocaleText('FWC.0d701787579521573'), value: '-23.4%', tone: 'critical' },
263
+ { label: getLocaleText('FWC.cfe31787579595325'), value: '+12.8%', tone: 'critical' },
264
+ { label: getLocaleText('FWC.38521787579733216'), value: '+9.6%', tone: 'warning' },
264
265
  ];
265
266
  return (rows.length > 0 ? rows : fallbackRows).slice(0, 4);
266
267
  }
@@ -272,10 +273,10 @@ export function createReferenceRiskAndStrategyBindings(context: ReferenceRiskStr
272
273
  */
273
274
  function referenceOrganizationRiskMetrics(data: CustomCanvasData): Array<Record<string, unknown>> {
274
275
  return [
275
- referenceMetricItem(data, '组织稳定分', /组织稳定|稳定分/, '71', 'warning'),
276
- referenceMetricItem(data, '核心流失率', /核心流失|流失率/, '+0.7pp', 'critical'),
277
- referenceMetricItem(data, '人效下滑', /人效下滑|人效风险/, '-8.6%', 'critical'),
278
- referenceMetricItem(data, '超编部门', /超编/, '+16%', 'warning'),
276
+ referenceMetricItem(data, getLocaleText('FWC.e9771787581108094'), /组织稳定|稳定分/, '71', 'warning'),
277
+ referenceMetricItem(data, getLocaleText('FWC.78f01787581108928'), /核心流失|流失率/, '+0.7pp', 'critical'),
278
+ referenceMetricItem(data, getLocaleText('FWC.26db1787581421744'), /人效下滑|人效风险/, '-8.6%', 'critical'),
279
+ referenceMetricItem(data, getLocaleText('FWC.04221787581421712'), /超编/, '+16%', 'warning'),
279
280
  ];
280
281
  }
281
282
 
@@ -302,10 +303,10 @@ export function createReferenceRiskAndStrategyBindings(context: ReferenceRiskStr
302
303
  const rawItems = block ? nestedBlockRawItems(block) : [];
303
304
  if (rawItems.length >= 3 && !nestedBlockItemsLookTooWeak(rawItems)) return rawItems.slice(0, 4);
304
305
  return [
305
- { label: '华南新基地', value: '超支', progress: 78, tone: 'critical' },
306
- { label: '技改一期', value: '延期', progress: 62, tone: 'warning' },
307
- { label: '合资项目', value: '回报低', progress: 54, tone: 'critical' },
308
- { label: '数据中台', value: '产出偏', progress: 70, tone: 'warning' },
306
+ { label: getLocaleText('FWC.40fe1787581107871'), value: getLocaleText('FWC.f0e61787581660864'), progress: 78, tone: 'critical' },
307
+ { label: getLocaleText('FWC.89981787581421776'), value: getLocaleText('FWC.f63c1787581620685'), progress: 62, tone: 'warning' },
308
+ { label: getLocaleText('FWC.98f71787581421809'), value: getLocaleText('FWC.5ddb1787581587963'), progress: 54, tone: 'critical' },
309
+ { label: getLocaleText('FWC.3d0c1787581421842'), value: getLocaleText('FWC.f18b1787581588044'), progress: 70, tone: 'warning' },
309
310
  ];
310
311
  }
311
312
 
@@ -318,7 +319,7 @@ export function createReferenceRiskAndStrategyBindings(context: ReferenceRiskStr
318
319
  const block = referenceNestedBlock(data, /战略项目|落地滞后|延期|超支/);
319
320
  if (block && !nestedBlockItemsLookTooWeakForVisualKind(nestedBlockRawItems(block), 'simpleList')) return nestedBlockItems(block).slice(0, 2);
320
321
  return [
321
- { label: '战略项目落地滞后', detail: '延期与超支叠加,投资回报周期拉长。', value: '重排里程碑', tone: 'warning' },
322
+ { label: getLocaleText('FWC.6ada1787580023310'), detail: getLocaleText('FWC.650b1787579202619'), value: getLocaleText('FWC.45061787581069459'), tone: 'warning' },
322
323
  ];
323
324
  }
324
325
 
@@ -342,9 +343,9 @@ export function createReferenceRiskAndStrategyBindings(context: ReferenceRiskStr
342
343
  ? referenceExecutiveTodoPadRows(reliableRows, minRows)
343
344
  : reliableRows.slice(0, 3);
344
345
  const fallbackRows = [
345
- { label: '待办事项', value: '待确认', detail: '业务口径待补充', tone: 'warning' },
346
- { label: '待复核事项', value: '待复核', detail: '责任人与截止时间待确认', tone: 'warning' },
347
- { label: '待审批事项', value: '待审批', detail: '审批链路待确认', tone: 'warning' },
346
+ { label: getLocaleText('FWC.d4d51787581425240'), value: getLocaleText('FWC.46181787581558515'), detail: getLocaleText('FWC.1c931787580422092'), tone: 'warning' },
347
+ { label: getLocaleText('FWC.b8a51787581109444'), value: getLocaleText('FWC.4be31787581561679'), detail: getLocaleText('FWC.ad861787579595850'), tone: 'warning' },
348
+ { label: getLocaleText('FWC.50ac1787581109968'), value: getLocaleText('FWC.c9811787581588138'), detail: getLocaleText('FWC.43341787580422698'), tone: 'warning' },
348
349
  ];
349
350
  if (minRows <= 0) return fallbackRows.slice(0, 3);
350
351
  return referenceExecutiveTodoPadRows(fallbackRows, minRows);
@@ -366,11 +367,11 @@ export function createReferenceRiskAndStrategyBindings(context: ReferenceRiskStr
366
367
  ...row,
367
368
  label,
368
369
  title: label,
369
- detail: detail || '业务口径待补充',
370
- impact: impact || '待确认',
371
- deadline: deadline || '待确认',
372
- progress: progress || '待推进',
373
- status: textValue(row.status, textValue(row.badge, '待处理')),
370
+ detail: detail || getLocaleText('FWC.1c931787580422092'),
371
+ impact: impact || getLocaleText('FWC.46181787581558515'),
372
+ deadline: deadline || getLocaleText('FWC.46181787581558515'),
373
+ progress: progress || getLocaleText('FWC.62421787581588228'),
374
+ status: textValue(row.status, textValue(row.badge, getLocaleText('FWC.74471787581560851'))),
374
375
  };
375
376
  }
376
377
 
@@ -382,9 +383,9 @@ export function createReferenceRiskAndStrategyBindings(context: ReferenceRiskStr
382
383
  */
383
384
  function referenceExecutiveTodoPadRows(rows: Array<Record<string, unknown>>, minRows: number): Array<Record<string, unknown>> {
384
385
  const placeholders = [
385
- { label: '待办事项', value: '待确认', detail: '业务口径待补充', tone: 'warning' },
386
- { label: '待复核事项', value: '待复核', detail: '责任人与截止时间待确认', tone: 'warning' },
387
- { label: '待审批事项', value: '待审批', detail: '审批链路待确认', tone: 'warning' },
386
+ { label: getLocaleText('FWC.d4d51787581425240'), value: getLocaleText('FWC.46181787581558515'), detail: getLocaleText('FWC.1c931787580422092'), tone: 'warning' },
387
+ { label: getLocaleText('FWC.b8a51787581109444'), value: getLocaleText('FWC.4be31787581561679'), detail: getLocaleText('FWC.ad861787579595850'), tone: 'warning' },
388
+ { label: getLocaleText('FWC.50ac1787581109968'), value: getLocaleText('FWC.c9811787581588138'), detail: getLocaleText('FWC.43341787580422698'), tone: 'warning' },
388
389
  ];
389
390
  return [...rows, ...placeholders]
390
391
  .slice(0, Math.max(minRows, 3))
@@ -415,9 +416,9 @@ export function createReferenceRiskAndStrategyBindings(context: ReferenceRiskStr
415
416
  function referenceExecutiveTodoBadge(item: Record<string, unknown>, index: number): string {
416
417
  const explicitStatus = textValue(item.status, textValue(item.badge));
417
418
  if (explicitStatus && !/待签批|待复核/.test(explicitStatus)) return explicitStatus;
418
- if (index === 0 || /逾期|超期|应收|缺口/.test(nestedBlockItemTitle(item, index))) return '逾期';
419
- if (index === 1) return '整改中';
420
- return '未整改';
419
+ if (index === 0 || /逾期|超期|应收|缺口/.test(nestedBlockItemTitle(item, index))) return getLocaleText('FWC.f12a1787581611879');
420
+ if (index === 1) return getLocaleText('FWC.30db1787581590747');
421
+ return getLocaleText('FWC.45d01787581588091');
421
422
  }
422
423
 
423
424
  /**
@@ -443,7 +444,7 @@ export function createReferenceRiskAndStrategyBindings(context: ReferenceRiskStr
443
444
  function referenceExecutiveTodoImpact(item: Record<string, unknown>, index: number): string {
444
445
  return nestedBlockDisplayValue(
445
446
  item.impact ?? item.amount ?? item.primaryValue ?? item.value,
446
- index === 0 ? '待确认' : '待补充',
447
+ index === 0 ? getLocaleText('FWC.46181787581558515') : getLocaleText('FWC.895b1787581591272'),
447
448
  );
448
449
  }
449
450
 
@@ -456,7 +457,7 @@ export function createReferenceRiskAndStrategyBindings(context: ReferenceRiskStr
456
457
  function referenceExecutiveTodoDeadline(item: Record<string, unknown>, index: number): string {
457
458
  return nestedBlockDisplayValue(
458
459
  item.deadline ?? item.dueDate ?? item.date ?? item.time,
459
- index === 0 ? '待确认' : '待补充',
460
+ index === 0 ? getLocaleText('FWC.46181787581558515') : getLocaleText('FWC.895b1787581591272'),
460
461
  );
461
462
  }
462
463
 
@@ -469,7 +470,7 @@ export function createReferenceRiskAndStrategyBindings(context: ReferenceRiskStr
469
470
  function referenceExecutiveTodoProgress(item: Record<string, unknown>, index: number): string {
470
471
  return nestedBlockDisplayValue(
471
472
  item.progress ?? item.ratio ?? item.stage,
472
- index === 0 ? '待推进' : '待补充',
473
+ index === 0 ? getLocaleText('FWC.62421787581588228') : getLocaleText('FWC.895b1787581591272'),
473
474
  );
474
475
  }
475
476
 
@@ -493,12 +494,12 @@ export function createReferenceRiskAndStrategyBindings(context: ReferenceRiskStr
493
494
  });
494
495
  if (usableRows.length >= 4) return usableRows.slice(0, 6);
495
496
  return [
496
- { label: '亏损主体', value: '8', tone: 'critical' },
497
- { label: '资金风险', value: '14', tone: 'critical' },
498
- { label: '违规事项', value: '6', tone: 'critical' },
499
- { label: '延期项目', value: '5', tone: 'critical' },
500
- { label: '费用超支', value: '3', tone: 'warning' },
501
- { label: '组织隐患', value: '4', tone: 'warning' },
497
+ { label: getLocaleText('FWC.de801787581426642'), value: '8', tone: 'critical' },
498
+ { label: getLocaleText('FWC.1b591787581427167'), value: '14', tone: 'critical' },
499
+ { label: getLocaleText('FWC.05701787581427692'), value: '6', tone: 'critical' },
500
+ { label: getLocaleText('FWC.0d821787581428217'), value: '5', tone: 'critical' },
501
+ { label: getLocaleText('FWC.29601787581421875'), value: '3', tone: 'warning' },
502
+ { label: getLocaleText('FWC.7a231787581428739'), value: '4', tone: 'warning' },
502
503
  ];
503
504
  }
504
505
 
@@ -517,7 +518,7 @@ export function createReferenceRiskAndStrategyBindings(context: ReferenceRiskStr
517
518
  return [
518
519
  {
519
520
  id: 'todo',
520
- title: '待办审批',
521
+ title: getLocaleText('FWC.65e61787581429265'),
521
522
  visualKind: 'todoGrid',
522
523
  fallbackItems: [
523
524
  { label: '预算追加审批', value: '5', tone: 'critical' },
@@ -527,33 +528,33 @@ export function createReferenceRiskAndStrategyBindings(context: ReferenceRiskStr
527
528
  },
528
529
  {
529
530
  id: 'report',
530
- title: '常用报表',
531
+ title: getLocaleText('FWC.c1191787581429787'),
531
532
  visualKind: 'quickLinks',
532
533
  fallbackItems: [
533
- { label: '财务月报', value: '打开', tone: 'neutral' },
534
- { label: '经营分析会材料', value: '打开', tone: 'neutral' },
535
- { label: '行业报告', value: '打开', tone: 'neutral' },
534
+ { label: getLocaleText('FWC.5ec51787581430313'), value: getLocaleText('FWC.842d1787581660917'), tone: 'neutral' },
535
+ { label: getLocaleText('FWC.b43d1787580424713'), value: getLocaleText('FWC.842d1787581660917'), tone: 'neutral' },
536
+ { label: getLocaleText('FWC.93241787581430837'), value: getLocaleText('FWC.842d1787581660917'), tone: 'neutral' },
536
537
  ],
537
538
  },
538
539
  {
539
540
  id: 'entry',
540
- title: '系统入口',
541
+ title: getLocaleText('FWC.999b1787581431033'),
541
542
  visualKind: 'quickLinks',
542
543
  fallbackItems: [
543
- { label: '财务' },
544
- { label: '供应链' },
544
+ { label: getLocaleText('FWC.1f0c1787581625544') },
545
+ { label: getLocaleText('FWC.30f41787581585508') },
545
546
  { label: 'HR' },
546
547
  { label: 'BI' },
547
548
  ],
548
549
  },
549
550
  {
550
551
  id: 'message',
551
- title: '消息中心',
552
+ title: getLocaleText('FWC.27c21787581431468'),
552
553
  visualKind: 'incidentList',
553
554
  fallbackItems: [
554
- { label: '现金流预警推送', value: '09:20', tone: 'critical' },
555
- { label: '经营会提醒', value: '14:00', tone: 'warning' },
556
- { label: '区域订单异动', value: '刚刚', tone: 'info' },
555
+ { label: getLocaleText('FWC.67d01787580423666'), value: '09:20', tone: 'critical' },
556
+ { label: getLocaleText('FWC.c1501787581110492'), value: '14:00', tone: 'warning' },
557
+ { label: '区域订单异动', value: getLocaleText('FWC.d6081787581661092'), tone: 'info' },
557
558
  ],
558
559
  },
559
560
  ];
@@ -614,7 +615,7 @@ export function createReferenceRiskAndStrategyBindings(context: ReferenceRiskStr
614
615
  .map((item) => nestedBlockOptionalNumber(nestedBlockItemValue(item)))
615
616
  .filter((value): value is number => value !== undefined)
616
617
  .reduce((sum, value) => sum + Math.max(0, value), 0);
617
- return urgent > 0 ? `${urgent} 急` : '待处理';
618
+ return urgent > 0 ? getLocaleText('FWC.f60f1787579733390', {p0: urgent}) : getLocaleText('FWC.74471787581560851');
618
619
  }
619
620
 
620
621
  /**
@@ -624,13 +625,13 @@ export function createReferenceRiskAndStrategyBindings(context: ReferenceRiskStr
624
625
  */
625
626
  function referenceStrategyKpiMetrics(data: CustomCanvasData): Array<Record<string, unknown>> {
626
627
  return [
627
- referenceStrategyKpiMetricItem(data, '营业收入', /营业收入|营收|收入|revenue/i, '¥ 8,642 万', '目标完成率 72%', 'info'),
628
- referenceStrategyKpiMetricItem(data, '净利率', /净利率|利润|profit/i, '12.8%', '实际 / 目标', 'healthy'),
629
- referenceStrategyKpiMetricItem(data, '现金流', /现金流|cash/i, '¥ 1.28 亿', '经营净流 -820 万', 'critical'),
630
- referenceStrategyKpiMetricItem(data, '核心用户 / 订单', /核心用户|订单|客户|user|order/i, '42,860 单', '转化 6.8%', 'healthy'),
631
- referenceStrategyKpiMetricItem(data, '本月营收完成', /本月营收|完成率|目标完成|target/i, '72%', '同比 +18.4%', 'info'),
632
- referenceStrategyKpiMetricItem(data, '重点项目', /重点项目|项目|project/i, '8 / 11', '2 个延期风险', 'warning'),
633
- referenceStrategyKpiMetricItem(data, '市场份额', /市场份额|份额|share/i, '21.6%', '较竞品 A +2.4pp', 'healthy'),
628
+ referenceStrategyKpiMetricItem(data, getLocaleText('FWC.c3921787581431931'), /营业收入|营收|收入|revenue/i, getLocaleText('FWC.e5951787579906290'), getLocaleText('FWC.02f41787579906696'), 'info'),
629
+ referenceStrategyKpiMetricItem(data, getLocaleText('FWC.156f1787581591796'), /净利率|利润|profit/i, '12.8%', getLocaleText('FWC.62951787580425238'), 'healthy'),
630
+ referenceStrategyKpiMetricItem(data, getLocaleText('FWC.999f1787581567881'), /现金流|cash/i, getLocaleText('FWC.fbfd1787580023333'), getLocaleText('FWC.61291787579596374'), 'critical'),
631
+ referenceStrategyKpiMetricItem(data, getLocaleText('FWC.af461787579907220'), /核心用户|订单|客户|user|order/i, getLocaleText('FWC.3ae71787580023355'), getLocaleText('FWC.40561787580425763'), 'healthy'),
632
+ referenceStrategyKpiMetricItem(data, '本月营收完成', /本月营收|完成率|目标完成|target/i, '72%', getLocaleText('FWC.c1041787579907745'), 'info'),
633
+ referenceStrategyKpiMetricItem(data, getLocaleText('FWC.a8c81787581432934'), /重点项目|项目|project/i, '8 / 11', getLocaleText('FWC.80241787580424187'), 'warning'),
634
+ referenceStrategyKpiMetricItem(data, getLocaleText('FWC.b2c61787581433456'), /市场份额|份额|share/i, '21.6%', getLocaleText('FWC.26e71787579521637'), 'healthy'),
634
635
  ];
635
636
  }
636
637
 
@@ -643,17 +644,17 @@ export function createReferenceRiskAndStrategyBindings(context: ReferenceRiskStr
643
644
  const semanticGroups: ReferenceOperationEfficiencyGroup[] = [
644
645
  {
645
646
  id: 'delivery',
646
- title: '交付 / 履约',
647
+ title: getLocaleText('FWC.a3601787580426416'),
647
648
  items: referenceOperationEfficiencyGroupItems(data, /交付|履约|订单准时|生产良率/),
648
649
  },
649
650
  {
650
651
  id: 'resource',
651
- title: '资源利用',
652
+ title: getLocaleText('FWC.3c571787581433684'),
652
653
  items: referenceOperationEfficiencyGroupItems(data, /资源利用|人均产值|服务响应|设备利用|库存周转/),
653
654
  },
654
655
  {
655
656
  id: 'milestone',
656
- title: '重点项目里程碑',
657
+ title: getLocaleText('FWC.ecc21787580425985'),
657
658
  items: referenceOperationEfficiencyGroupItems(data, /重点项目里程碑|里程碑|数字化工厂|成本专项|渠道升级|新品上市/),
658
659
  },
659
660
  ];
@@ -671,7 +672,7 @@ export function createReferenceRiskAndStrategyBindings(context: ReferenceRiskStr
671
672
  const sourceItems = nestedBlocks
672
673
  .filter((block) => nestedBlockClassifierText(block) || nestedBlockDataSummary(block) || nestedBlockMetricValue(block))
673
674
  .map((block, index) => ({
674
- label: block.title || `识别子卡 ${index + 1}`,
675
+ label: block.title || getLocaleText('FWC.29d11787579408118', {p0: index + 1}),
675
676
  value: nestedBlockMetricValue(block),
676
677
  detail: nestedBlockDataSummary(block),
677
678
  tone: nestedBlockNeedsHumanIntervention(block) ? 'warning' : nestedBlockToneFromStatus(nestedBlockClassifierText(block)),
@@ -681,14 +682,14 @@ export function createReferenceRiskAndStrategyBindings(context: ReferenceRiskStr
681
682
  if (sourceItems.length === 0) {
682
683
  return [{
683
684
  id: 'recognized',
684
- title: '识别子卡',
685
- items: [{ label: '等待业务口径', value: '待补充', detail: '识别到的区域将作为子卡补充问数。', tone: 'warning' }],
685
+ title: getLocaleText('FWC.0c771787581434506'),
686
+ items: [{ label: '等待业务口径', value: getLocaleText('FWC.895b1787581591272'), detail: getLocaleText('FWC.eee01787579250859'), tone: 'warning' }],
686
687
  }];
687
688
  }
688
689
  const groupCount = Math.min(3, Math.max(1, sourceItems.length));
689
690
  return Array.from({ length: groupCount }, (_, groupIndex) => ({
690
691
  id: `recognized-${groupIndex + 1}`,
691
- title: groupCount === 1 ? '识别子卡' : `识别子卡 ${groupIndex + 1}`,
692
+ title: groupCount === 1 ? getLocaleText('FWC.0c771787581434506') : getLocaleText('FWC.2c351787579408135', {p0: groupIndex + 1}),
692
693
  items: sourceItems.filter((_, itemIndex) => itemIndex % groupCount === groupIndex),
693
694
  })).filter((group) => group.items.length > 0);
694
695
  }
@@ -715,9 +716,9 @@ export function createReferenceRiskAndStrategyBindings(context: ReferenceRiskStr
715
716
  const rawItems = block ? nestedBlockRawItems(block) : [];
716
717
  if (rawItems.length > 0 && !nestedBlockItemsLookTooWeakForVisualKind(rawItems, 'progressList')) return rawItems.slice(0, 4);
717
718
  return [
718
- { label: '营收目标', value: '72%', progress: 72, tone: 'info' },
719
- { label: '利润目标', value: '64%', progress: 64, tone: 'warning' },
720
- { label: '现金流目标', value: '58%', progress: 58, tone: 'critical' },
719
+ { label: getLocaleText('FWC.fd081787581435030'), value: '72%', progress: 72, tone: 'info' },
720
+ { label: getLocaleText('FWC.60141787581432415'), value: '64%', progress: 64, tone: 'warning' },
721
+ { label: getLocaleText('FWC.b01d1787581111015'), value: '58%', progress: 58, tone: 'critical' },
721
722
  ];
722
723
  }
723
724
 
@@ -731,12 +732,12 @@ export function createReferenceRiskAndStrategyBindings(context: ReferenceRiskStr
731
732
  const rawItems = block ? nestedBlockRawItems(block) : [];
732
733
  if (rawItems.length >= 4 && !nestedBlockItemsLookTooWeak(rawItems)) return rawItems.slice(0, 6);
733
734
  return [
734
- { label: '1月', value: '62', progress: 52, tone: 'info' },
735
- { label: '2月', value: '68', progress: 60, tone: 'info' },
736
- { label: '3月', value: '74', progress: 68, tone: 'healthy' },
737
- { label: '4月', value: '71', progress: 64, tone: 'warning' },
738
- { label: '5月', value: '79', progress: 76, tone: 'healthy' },
739
- { label: '6月', value: '83', progress: 84, tone: 'healthy' },
735
+ { label: getLocaleText('FWC.382a1787581653436'), value: '62', progress: 52, tone: 'info' },
736
+ { label: getLocaleText('FWC.df7d1787581654466'), value: '68', progress: 60, tone: 'info' },
737
+ { label: getLocaleText('FWC.0c4d1787581655195'), value: '74', progress: 68, tone: 'healthy' },
738
+ { label: getLocaleText('FWC.c34a1787581660100'), value: '71', progress: 64, tone: 'warning' },
739
+ { label: getLocaleText('FWC.6b5f1787581660813'), value: '79', progress: 76, tone: 'healthy' },
740
+ { label: getLocaleText('FWC.6bef1787581661151'), value: '83', progress: 84, tone: 'healthy' },
740
741
  ];
741
742
  }
742
743
 
@@ -748,17 +749,17 @@ export function createReferenceRiskAndStrategyBindings(context: ReferenceRiskStr
748
749
  function referenceOperationHealthStructureBlock(data: CustomCanvasData): CustomCanvasNestedBlock {
749
750
  return referenceNestedBlock(data, /结构占比|收入结构|业务结构|渠道结构|区域结构/) ?? {
750
751
  id: 'reference-operation-health-structure',
751
- title: '结构占比',
752
+ title: getLocaleText('FWC.97181787581328948'),
752
753
  kind: 'chart',
753
754
  slot: 'body',
754
755
  dataBindingStatus: 'none',
755
756
  data: {
756
757
  visualKind: 'donut',
757
758
  items: [
758
- { label: '核心业务', value: '46%', share: 46, tone: 'info' },
759
- { label: '增量业务', value: '28%', share: 28, tone: 'healthy' },
760
- { label: '创新业务', value: '16%', share: 16, tone: 'warning' },
761
- { label: '其他', value: '10%', share: 10, tone: 'neutral' },
759
+ { label: getLocaleText('FWC.7fad1787581435555'), value: '46%', share: 46, tone: 'info' },
760
+ { label: getLocaleText('FWC.589b1787581436079'), value: '28%', share: 28, tone: 'healthy' },
761
+ { label: getLocaleText('FWC.718e1787581436270'), value: '16%', share: 16, tone: 'warning' },
762
+ { label: getLocaleText('FWC.0da91787581661202'), value: '10%', share: 10, tone: 'neutral' },
762
763
  ],
763
764
  },
764
765
  };
@@ -784,7 +785,7 @@ export function createReferenceRiskAndStrategyBindings(context: ReferenceRiskStr
784
785
  return nestedBlocks
785
786
  .filter((block) => pattern.test(nestedBlockClassifierText(block)))
786
787
  .map((block, index) => ({
787
- label: block.title || `指标 ${index + 1}`,
788
+ label: block.title || getLocaleText('FWC.1c631787579589361', {p0: index + 1}),
788
789
  value: nestedBlockMetricValue(block),
789
790
  detail: nestedBlockDataSummary(block),
790
791
  tone: nestedBlockNeedsHumanIntervention(block) ? 'warning' : 'healthy',
@@ -915,10 +916,10 @@ export function createReferenceRiskAndStrategyBindings(context: ReferenceRiskStr
915
916
  return [{ label: block.title, ...displayText, tone: nestedBlockToneFromStatus(text), nestedBlock: block }];
916
917
  });
917
918
  const fallbackRows = [
918
- { label: '现金流', detail: '经营性现金流净额为负', tone: 'critical' },
919
- { label: '逾期账款', detail: '大客户回款延期 11 天', tone: 'warning' },
920
- { label: '库存', detail: '华东仓周转天数高于阈值', tone: 'warning' },
921
- { label: '投诉率', detail: '核心区域投诉率连续上升', tone: 'warning' },
919
+ { label: getLocaleText('FWC.999f1787581567881'), detail: getLocaleText('FWC.11fb1787579734265'), tone: 'critical' },
920
+ { label: getLocaleText('FWC.7cfa1787581426117'), detail: getLocaleText('FWC.a5761787579521593'), tone: 'warning' },
921
+ { label: getLocaleText('FWC.c49b1787581661254'), detail: getLocaleText('FWC.0dd71787579597507'), tone: 'warning' },
922
+ { label: getLocaleText('FWC.72f31787581591957'), detail: getLocaleText('FWC.8ecb1787579596897'), tone: 'warning' },
922
923
  ];
923
924
  return (rows.length > 0 ? rows : fallbackRows).slice(0, 4);
924
925
  }
@@ -948,7 +949,7 @@ export function createReferenceRiskAndStrategyBindings(context: ReferenceRiskStr
948
949
  * @returns Count label based on recognized risk rows.
949
950
  */
950
951
  function referenceStrategyKpiRiskSummaryLabel(data: CustomCanvasData): string {
951
- return `${referenceStrategyKpiRiskItems(data).length} 项预警`;
952
+ return getLocaleText('FWC.a9661787579521611', {p0: referenceStrategyKpiRiskItems(data).length});
952
953
  }
953
954
 
954
955
  /**