@fses/workbench-app 0.2.15 → 0.2.17

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 (61) hide show
  1. package/WORKBENCH-CLOSURE.json +18 -12
  2. package/dist/Workspace-r8ayksVF.js +23176 -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-C0L5xASu.js → index-DEOR_GPc.js} +350 -346
  9. package/dist/internal/personal-workbench/fde-skill-cards/runtime/fdeSkillProtocolChartDisplayData.d.ts +0 -5
  10. package/dist/internal/personal-workbench/lib/assistantPersonaProfiles.d.ts +6 -6
  11. package/dist/internal/personal-workbench/lib/cardStyleConfig.d.ts +26 -26
  12. package/dist/internal/personal-workbench/lib/echartsOptionEditorBridge.d.ts +0 -5
  13. package/dist/internal/personal-workbench/lib/historyCardBindingRestore.fixture.d.ts +0 -5
  14. package/dist/internal/personal-workbench/lib/runtimePrimitiveRegistry.d.ts +1 -1
  15. package/dist/internal/personal-workbench/lib/vueRuntimeAdapters.d.ts +0 -5
  16. package/dist/internal/personal-workbench/lib/workbenchCanvasBusinessGapChecklist.d.ts +1 -1
  17. package/dist/internal/personal-workbench/lib/workbenchCardRecommendationFallback.d.ts +1 -1
  18. package/dist/internal/personal-workbench/lib/workbenchCardRecommendationReturnItemUpsert.d.ts +0 -5
  19. package/dist/internal/personal-workbench/lib/workbenchDataBindingBadge.d.ts +0 -5
  20. package/dist/internal/personal-workbench/lib/workbenchImageComposeEntry.d.ts +1 -1
  21. package/dist/internal/personal-workbench/lib/workbenchLayout.d.ts +0 -5
  22. package/dist/runtime/index.js +1 -1
  23. package/dist/style.css +1 -1
  24. package/dist/{useWorkbenchRuntime-DLf_FgC7.js → useWorkbenchRuntime-DDD22mdF.js} +7817 -7813
  25. package/dist/version.d.ts +1 -1
  26. package/dist/{workbenchCustomComponentRegistry-Bt94Lgko.js → workbenchCustomComponentRegistry-CWUPjCnJ.js} +74 -74
  27. package/node_modules/@byteluck-fe/locale-message/README.md +2 -0
  28. package/node_modules/@byteluck-fe/locale-message/dist/index.d.ts +37 -0
  29. package/node_modules/@byteluck-fe/locale-message/dist/locale-message.js +55 -0
  30. package/node_modules/@byteluck-fe/locale-message/package.json +37 -0
  31. package/node_modules/@fses/ai-chat/dist/components/ContextUsageRing.vue.d.ts +5 -0
  32. package/node_modules/@fses/ai-chat/dist/components/FsesAiChat.vue.d.ts +5 -0
  33. package/node_modules/@fses/ai-chat/dist/fses-ai-chat.js +6225 -6075
  34. package/node_modules/@fses/ai-chat/dist/fses-ai-chat.umd.cjs +17 -19
  35. package/node_modules/@fses/ai-chat/dist/style.css +1 -1
  36. package/node_modules/@fses/ai-chat/dist/utils/attachment-upload.d.ts +0 -5
  37. package/node_modules/@fses/ai-chat/package.json +4 -3
  38. package/node_modules/@fses/workbench-card/dist/fses-workbench-card-renderers.js +10144 -9914
  39. package/node_modules/@fses/workbench-card/dist/fses-workbench-card.js +1517 -1503
  40. package/node_modules/@fses/workbench-card/dist/fses-workbench-card.umd.cjs +1 -1
  41. package/node_modules/@fses/workbench-card/dist/renderers/chart/chartRendererRegistry.d.ts +97 -97
  42. package/node_modules/@fses/workbench-card/dist/renderers/style.css +1 -1
  43. package/node_modules/@fses/workbench-card/package.json +4 -1
  44. package/node_modules/@fses/workbench-card/src/registry/cardRegistry.ts +99 -98
  45. package/node_modules/@fses/workbench-card/src/registry/compositeCardPatterns.ts +31 -30
  46. package/node_modules/@fses/workbench-card/src/registry/echartsTemplateCategories.ts +24 -23
  47. package/node_modules/@fses/workbench-card/src/registry/echartsTemplateRegistry.generated.js +765 -764
  48. package/node_modules/@fses/workbench-card/src/registry/echartsTemplateRegistry.generated.ts +765 -764
  49. package/node_modules/@fses/workbench-card/src/renderers/WorkbenchBlockRenderer.vue +143 -129
  50. package/node_modules/@fses/workbench-card/src/renderers/chart/ChartRegistry.vue +4 -3
  51. package/node_modules/@fses/workbench-card/src/renderers/chart/EChartsProtocolRenderer.vue +2 -1
  52. package/node_modules/@fses/workbench-card/src/renderers/chart/chartRendererRegistry.ts +99 -98
  53. package/node_modules/@fses/workbench-card/src/renderers/chart/useEchart.ts +30 -29
  54. package/node_modules/@fses/workbench-card/src/renderers/native/nativeBindings.ts +11 -10
  55. package/node_modules/@fses/workbench-card/src/renderers/nested/nestedBlockBindings.ts +102 -101
  56. package/node_modules/@fses/workbench-card/src/renderers/reference-composite/referenceCompositeBindings.ts +364 -363
  57. package/node_modules/@fses/workbench-card/src/renderers/reference-composite/referenceRiskAndStrategyBindings.ts +90 -89
  58. package/node_modules/@fses/workbench-card/src/renderers/useWorkbenchBlockRendererBindings.ts +33 -32
  59. package/package.json +4 -3
  60. package/dist/Workspace-_r17G1XR.js +0 -22895
  61. 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 引用复合预览绑定 - 提供截图复合卡片的分类、布局和高密度数据整理 helper。
3
4
  * @author seadon
@@ -398,31 +399,31 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
398
399
  */
399
400
  function referenceCompositeHeaderChip(kind: ReferenceCompositeKind): string {
400
401
  const chipMap: Partial<Record<Exclude<ReferenceCompositeKind, ''>, string>> = {
401
- ops: '截图还原',
402
- security: '截图还原',
403
- asset: '截图还原',
404
- project: '二级页',
405
- riskSummary: '集团总览',
406
- healthRadar: '点击维度穿透专项风险',
407
- deviation: '目标 VS 实际 · 柱线组合',
408
- financeRisk: '面积趋势 + 红线锚点',
409
- expenseRisk: '仅高亮超支 TOP 项',
410
- deviationInsight: '截图还原',
411
- organizationRisk: '隐性风险压缩呈现',
412
- investmentRisk: '极简甘特缩略',
413
- executiveTodo: '一级',
414
- shortcutDrill: '二级页',
415
- quickWorkbench: '实时入口',
416
- strategyKpi: '经营看板',
417
- operationHealth: '经营健康',
418
- operationEfficiency: '运营效率',
419
- businessMetricMatrix: '指标矩阵',
420
- hrOrganization: '编制结构',
421
- hrRiskCompliance: '用工风险',
422
- hrPeopleCost: '薪酬成本',
423
- hrTalentTodo: '人才待办',
402
+ ops: getLocaleText('FWC.b6771787581349898'),
403
+ security: getLocaleText('FWC.b6771787581349898'),
404
+ asset: getLocaleText('FWC.b6771787581349898'),
405
+ project: getLocaleText('FWC.cba51787581566178'),
406
+ riskSummary: getLocaleText('FWC.0b251787581351861'),
407
+ healthRadar: getLocaleText('FWC.9f921787579719460'),
408
+ deviation: getLocaleText('FWC.f97f1787579282074'),
409
+ financeRisk: getLocaleText('FWC.46331787579588094'),
410
+ expenseRisk: getLocaleText('FWC.430c1787579588244'),
411
+ deviationInsight: getLocaleText('FWC.b6771787581349898'),
412
+ organizationRisk: getLocaleText('FWC.3a811787580016345'),
413
+ investmentRisk: getLocaleText('FWC.88391787580582126'),
414
+ executiveTodo: getLocaleText('FWC.aa341787581622797'),
415
+ shortcutDrill: getLocaleText('FWC.cba51787581566178'),
416
+ quickWorkbench: getLocaleText('FWC.86fe1787581352730'),
417
+ strategyKpi: getLocaleText('FWC.d9071787581343803'),
418
+ operationHealth: getLocaleText('FWC.db5b1787581353155'),
419
+ operationEfficiency: getLocaleText('FWC.3d751787581353576'),
420
+ businessMetricMatrix: getLocaleText('FWC.213d1787581330166'),
421
+ hrOrganization: getLocaleText('FWC.2fd41787581349048'),
422
+ hrRiskCompliance: getLocaleText('FWC.3dbb1787581344853'),
423
+ hrPeopleCost: getLocaleText('FWC.14061787581346346'),
424
+ hrTalentTodo: getLocaleText('FWC.d3131787581347188'),
424
425
  };
425
- if (kind === 'bidCollaboration') return '标案协同';
426
+ if (kind === 'bidCollaboration') return getLocaleText('FWC.32db1787581354011');
426
427
  return kind ? chipMap[kind] ?? '' : '';
427
428
  }
428
429
 
@@ -688,9 +689,9 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
688
689
  const filledRows = customCanvasAlertLeafFilledItems(data, rows);
689
690
  if (filledRows.length > 0) return filledRows;
690
691
  return rows.length > 0 ? rows : [
691
- { severity: 'P1', title: 'MES 接口响应异常,影响生产报工', time: '08:42', tone: 'critical' },
692
- { severity: 'P1', title: '核心数据库慢查询升高,已派单 DBA', time: '09:05', tone: 'critical' },
693
- { severity: 'P2', title: '华东云资源存储水位 84%', time: '09:18', tone: 'warning' },
692
+ { severity: 'P1', title: getLocaleText('FWC.1bf91787579201702'), time: '08:42', tone: 'critical' },
693
+ { severity: 'P1', title: getLocaleText('FWC.90b61787579169015'), time: '09:05', tone: 'critical' },
694
+ { severity: 'P2', title: getLocaleText('FWC.705f1787579406820'), time: '09:18', tone: 'warning' },
694
695
  ];
695
696
  }
696
697
 
@@ -731,9 +732,9 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
731
732
  ].join(' ');
732
733
  if (/\u6210\u672c|\u8d39\u7528|\u8d85\u652f|\u9884\u7b97|cost|expense|budget/i.test(text)) {
733
734
  return [
734
- { severity: 'P1', title: '成本 & 费用超支监控 · 柱状图', time: '08:42', tone: 'critical' },
735
- { severity: 'P1', title: '3项超阈值', time: '09:05', tone: 'critical' },
736
- { severity: 'P2', title: '冻结审计与费用复核待处理', time: '09:18', tone: 'warning' },
735
+ { severity: 'P1', title: getLocaleText('FWC.dfcc1787579201594'), time: '08:42', tone: 'critical' },
736
+ { severity: 'P1', title: getLocaleText('FWC.99231787581072466'), time: '09:05', tone: 'critical' },
737
+ { severity: 'P2', title: getLocaleText('FWC.b5fa1787579519294'), time: '09:18', tone: 'warning' },
737
738
  ];
738
739
  }
739
740
  return [
@@ -788,15 +789,15 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
788
789
  ].filter(Boolean).join(' ');
789
790
  const roleMatch = headerText.match(/\b(CIO|CEO|COO|CFO|CTO)\b/i);
790
791
  if (roleMatch?.[1]) return roleMatch[1].toUpperCase();
791
- if (/董事长|董事会/.test(headerText)) return '董';
792
- if (/销售经理|销售/.test(headerText)) return '销';
793
- if (/生产经理|生产/.test(headerText)) return '产';
794
- if (/采购经理|采购/.test(headerText)) return '采';
795
- if (/物流经理|物流/.test(headerText)) return '物';
796
- if (/仓储经理|仓储/.test(headerText)) return '仓';
797
- if (/财务经理|财务/.test(headerText)) return '财';
792
+ if (/董事长|董事会/.test(headerText)) return getLocaleText('FWC.61361787581663117');
793
+ if (/销售经理|销售/.test(headerText)) return getLocaleText('FWC.6f911787581663769');
794
+ if (/生产经理|生产/.test(headerText)) return getLocaleText('FWC.4d641787581665333');
795
+ if (/采购经理|采购/.test(headerText)) return getLocaleText('FWC.e6e01787581666713');
796
+ if (/物流经理|物流/.test(headerText)) return getLocaleText('FWC.87991787581668073');
797
+ if (/仓储经理|仓储/.test(headerText)) return getLocaleText('FWC.c80a1787581669418');
798
+ if (/财务经理|财务/.test(headerText)) return getLocaleText('FWC.44811787581671048');
798
799
  const chineseTitle = customCanvasHeaderTitle(block, data).trim();
799
- return chineseTitle ? chineseTitle.slice(0, 1) : '台';
800
+ return chineseTitle ? chineseTitle.slice(0, 1) : getLocaleText('FWC.a8441787581672421');
800
801
  }
801
802
 
802
803
  /**
@@ -996,7 +997,7 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
996
997
  block.title,
997
998
  ].join(' ');
998
999
  if (/董事长|董事会|风险预警|经营偏差/.test(headerText) && !pills.some((pill) => /集团总览/.test(pill))) {
999
- return ['集团总览', ...pills].slice(0, 4);
1000
+ return [getLocaleText('FWC.0b251787581351861'), ...pills].slice(0, 4);
1000
1001
  }
1001
1002
  return pills;
1002
1003
  }
@@ -1593,27 +1594,27 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
1593
1594
  function referenceRiskKpiItems(data: CustomCanvasData): Array<{ label: string; value: string; detail: string; tone: 'critical' | 'warning' }> {
1594
1595
  return [
1595
1596
  {
1596
- label: '重大经营风险',
1597
+ label: getLocaleText('FWC.20e81787580583049'),
1597
1598
  value: referenceRiskKpiValue(referenceRiskMetricValue(data, /重大经营风险|major/i, '8')),
1598
- detail: '亏损主体与毛利下滑集中',
1599
+ detail: getLocaleText('FWC.79591787579587935'),
1599
1600
  tone: 'critical',
1600
1601
  },
1601
1602
  {
1602
- label: '预算严重偏差',
1603
+ label: getLocaleText('FWC.f63a1787580583576'),
1603
1604
  value: referenceRiskKpiValue(referenceRiskMetricValue(data, /预算严重偏差|budget/i, '6')),
1604
- detail: '费用超阈值连续两期',
1605
+ detail: getLocaleText('FWC.851f1787579902907'),
1605
1606
  tone: 'warning',
1606
1607
  },
1607
1608
  {
1608
- label: '资金类预警',
1609
+ label: getLocaleText('FWC.88351787581073127'),
1609
1610
  value: referenceRiskKpiValue(referenceRiskMetricValue(data, /资金类预警|capital|fund/i, '14')),
1610
- detail: '逾期应收触碰红线',
1611
+ detail: getLocaleText('FWC.859d1787580016756'),
1611
1612
  tone: 'critical',
1612
1613
  },
1613
1614
  {
1614
- label: '项目隐患',
1615
+ label: getLocaleText('FWC.90ad1787581373201'),
1615
1616
  value: referenceRiskKpiValue(referenceRiskMetricValue(data, /项目隐患|project/i, '5')),
1616
- detail: '延期叠加投资超支',
1617
+ detail: getLocaleText('FWC.93e71787580016971'),
1617
1618
  tone: 'warning',
1618
1619
  },
1619
1620
  ];
@@ -1628,9 +1629,9 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
1628
1629
  const movement = referenceNestedBlock(data, /TODAY MOVEMENT|今日|movement/i);
1629
1630
  if (!movement) {
1630
1631
  return [
1631
- { label: '2 家子公司毛利率环比大幅下滑' },
1632
- { label: '3 项费用超阈值预警,管理费用连续偏高' },
1633
- { label: '重大担保事项进入董事会复核' },
1632
+ { label: getLocaleText('FWC.9c711787579288080') },
1633
+ { label: getLocaleText('FWC.bae41787579154559') },
1634
+ { label: getLocaleText('FWC.a6c61787579407057') },
1634
1635
  ];
1635
1636
  }
1636
1637
  const elementRows = referenceRiskMovementElementItems(movement);
@@ -1640,9 +1641,9 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
1640
1641
  return label && !/^TODAY MOVEMENT$/i.test(label);
1641
1642
  });
1642
1643
  return rows.length > 0 ? rows.slice(0, 3) : [
1643
- { label: '2 家子公司毛利率环比大幅下滑' },
1644
- { label: '3 项费用超阈值预警,管理费用连续偏高' },
1645
- { label: '重大担保事项进入董事会复核' },
1644
+ { label: getLocaleText('FWC.9c711787579288080') },
1645
+ { label: getLocaleText('FWC.bae41787579154559') },
1646
+ { label: getLocaleText('FWC.a6c61787579407057') },
1646
1647
  ];
1647
1648
  }
1648
1649
 
@@ -1673,7 +1674,7 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
1673
1674
  const block = referenceNestedBlock(data, /服务监控|系统监控|在线/);
1674
1675
  return block
1675
1676
  ? referenceOpsItemsFromBlock(block, 'statusList').slice(0, 5)
1676
- : nestedBlockFallbackItems({ id: 'reference-ops-service', title: '全局服务监控', kind: 'list', slot: 'body', dataBindingStatus: 'none' }, 'statusList');
1677
+ : nestedBlockFallbackItems({ id: 'reference-ops-service', title: getLocaleText('FWC.17a01787580564813'), kind: 'list', slot: 'body', dataBindingStatus: 'none' }, 'statusList');
1677
1678
  }
1678
1679
 
1679
1680
  /**
@@ -1685,7 +1686,7 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
1685
1686
  const block = referenceNestedBlock(data, /资源负载|负载监控|CPU|内存|存储|带宽/) ?? referenceNestedBlock(data, /服务监控|系统监控|在线/);
1686
1687
  return block
1687
1688
  ? referenceOpsItemsFromBlock(block, 'resourceBars').slice(0, 4)
1688
- : nestedBlockFallbackItems({ id: 'reference-ops-resource', title: '资源负载监控', kind: 'chart', slot: 'body', dataBindingStatus: 'none' }, 'resourceBars');
1689
+ : nestedBlockFallbackItems({ id: 'reference-ops-resource', title: getLocaleText('FWC.5c621787580582591'), kind: 'chart', slot: 'body', dataBindingStatus: 'none' }, 'resourceBars');
1689
1690
  }
1690
1691
 
1691
1692
  /**
@@ -1697,7 +1698,7 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
1697
1698
  const block = referenceNestedBlock(data, /故障|告警|事件|红警/);
1698
1699
  return block
1699
1700
  ? referenceOpsItemsFromBlock(block, 'incidentList').slice(0, 3)
1700
- : nestedBlockFallbackItems({ id: 'reference-ops-incidents', title: '故障 & 告警中心', kind: 'list', slot: 'body', dataBindingStatus: 'none' }, 'incidentList');
1701
+ : nestedBlockFallbackItems({ id: 'reference-ops-incidents', title: getLocaleText('FWC.fb0f1787579902375'), kind: 'list', slot: 'body', dataBindingStatus: 'none' }, 'incidentList');
1701
1702
  }
1702
1703
 
1703
1704
  /**
@@ -1724,13 +1725,13 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
1724
1725
  const rawItems = block ? nestedBlockRawItems(block) : [];
1725
1726
  if (rawItems.length > 0 && !nestedBlockItemsLookTooWeak(rawItems)) return rawItems.slice(0, 7);
1726
1727
  return [
1727
- { label: '周一', value: '6', progress: 42, tone: 'neutral' },
1728
- { label: '周二', value: '8', progress: 53, tone: 'info' },
1729
- { label: '周三', value: '5', progress: 35, tone: 'healthy' },
1730
- { label: '周四', value: '11', progress: 70, tone: 'warning' },
1731
- { label: '周五', value: '7', progress: 50, tone: 'info' },
1732
- { label: '周六', value: '13', progress: 88, tone: 'critical' },
1733
- { label: '周日', value: '8', progress: 56, tone: 'warning' },
1728
+ { label: getLocaleText('FWC.97f71787581625597'), value: '6', progress: 42, tone: 'neutral' },
1729
+ { label: getLocaleText('FWC.d48c1787581627444'), value: '8', progress: 53, tone: 'info' },
1730
+ { label: getLocaleText('FWC.626f1787581628064'), value: '5', progress: 35, tone: 'healthy' },
1731
+ { label: getLocaleText('FWC.515c1787581628692'), value: '11', progress: 70, tone: 'warning' },
1732
+ { label: getLocaleText('FWC.3c161787581626832'), value: '7', progress: 50, tone: 'info' },
1733
+ { label: getLocaleText('FWC.6f1e1787581632165'), value: '13', progress: 88, tone: 'critical' },
1734
+ { label: getLocaleText('FWC.83301787581632790'), value: '8', progress: 56, tone: 'warning' },
1734
1735
  ];
1735
1736
  }
1736
1737
 
@@ -1788,7 +1789,7 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
1788
1789
  function referenceSecurityScoreBlock(data: CustomCanvasData): CustomCanvasNestedBlock {
1789
1790
  return referenceNestedBlock(data, /安全风险|安全健康|风险总览|漏洞/) ?? {
1790
1791
  id: 'reference-security-score',
1791
- title: '安全风险总览',
1792
+ title: getLocaleText('FWC.208f1787580565354'),
1792
1793
  kind: 'chart',
1793
1794
  slot: 'body',
1794
1795
  dataBindingStatus: 'none',
@@ -1809,9 +1810,9 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
1809
1810
  return nestedBlockItems(block).slice(0, 3);
1810
1811
  }
1811
1812
  return [
1812
- { label: '敏感数据导出异常', value: '2 次', tone: 'critical' },
1813
- { label: '弱口令账号', value: '36 个', tone: 'warning' },
1814
- { label: '外网攻击峰值', value: '14:00', tone: 'warning' },
1813
+ { label: getLocaleText('FWC.c8e71787580018376'), value: getLocaleText('FWC.1cc51787581570609'), tone: 'critical' },
1814
+ { label: getLocaleText('FWC.58451787581072802'), value: getLocaleText('FWC.87de1787581376869'), tone: 'warning' },
1815
+ { label: getLocaleText('FWC.3bf41787580588296'), value: '14:00', tone: 'warning' },
1815
1816
  ];
1816
1817
  }
1817
1818
 
@@ -1832,9 +1833,9 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
1832
1833
  return (filtered.length > 0 ? filtered : items).slice(0, 3);
1833
1834
  }
1834
1835
  return [
1835
- { label: '等保 2.0 整改进度', value: '92%', tone: 'healthy' },
1836
- { label: '隐私合规检查', value: '通过', tone: 'healthy' },
1837
- { label: '日志留存覆盖率', value: '88%', tone: 'warning' },
1836
+ { label: getLocaleText('FWC.e6911787579587588'), value: '92%', tone: 'healthy' },
1837
+ { label: getLocaleText('FWC.8c381787580581667'), value: getLocaleText('FWC.3f771787581619720'), tone: 'healthy' },
1838
+ { label: getLocaleText('FWC.d4121787580398995'), value: '88%', tone: 'warning' },
1838
1839
  ];
1839
1840
  }
1840
1841
 
@@ -1855,9 +1856,9 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
1855
1856
  return (filtered.length > 0 ? filtered : items.slice(3)).slice(0, 3);
1856
1857
  }
1857
1858
  return [
1858
- { label: '离职未回收账号', value: '7 个', tone: 'critical' },
1859
- { label: '超权限管理员账号', value: '4 个', tone: 'critical' },
1860
- { label: '关键操作审计', value: '已归档', tone: 'healthy' },
1859
+ { label: getLocaleText('FWC.71231787580397749'), value: getLocaleText('FWC.c8821787581564210'), tone: 'critical' },
1860
+ { label: getLocaleText('FWC.45da1787580015337'), value: getLocaleText('FWC.2a1a1787581564820'), tone: 'critical' },
1861
+ { label: getLocaleText('FWC.e79e1787580581019'), value: getLocaleText('FWC.d3161787581561078'), tone: 'healthy' },
1861
1862
  ];
1862
1863
  }
1863
1864
 
@@ -1885,10 +1886,10 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
1885
1886
  */
1886
1887
  function referenceAssetLedgerItems(data: CustomCanvasData): Array<Record<string, unknown>> {
1887
1888
  return [
1888
- referenceMetricItem(data, '终端与办公设备', /终端|办公设备/, '18,426'),
1889
- referenceMetricItem(data, '服务器与机房设备', /服务器|机房设备/, '1,284'),
1890
- referenceMetricItem(data, '商业软件 License', /License|商业软件/, '312'),
1891
- referenceMetricItem(data, '云主机与存储资源', /云主机|存储资源/, '2,096'),
1889
+ referenceMetricItem(data, getLocaleText('FWC.8dc41787580399481'), /终端|办公设备/, '18,426'),
1890
+ referenceMetricItem(data, getLocaleText('FWC.a64e1787580015958'), /服务器|机房设备/, '1,284'),
1891
+ referenceMetricItem(data, getLocaleText('FWC.bd0e1787579519421'), /License|商业软件/, '312'),
1892
+ referenceMetricItem(data, getLocaleText('FWC.63c61787580016156'), /云主机|存储资源/, '2,096'),
1892
1893
  ];
1893
1894
  }
1894
1895
 
@@ -1899,9 +1900,9 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
1899
1900
  */
1900
1901
  function referenceAssetExceptionItems(data: CustomCanvasData): Array<Record<string, unknown>> {
1901
1902
  return [
1902
- referenceMetricItem(data, '闲置云主机待回收', /闲置云主机|待回收/, '47 台', 'warning'),
1903
- referenceMetricItem(data, 'License 即将到期', /即将到期/, '12 项', 'critical'),
1904
- referenceMetricItem(data, '资产盘点完成率', /资产盘点/, '96%', 'healthy'),
1903
+ referenceMetricItem(data, getLocaleText('FWC.b4261787580015560'), /闲置云主机|待回收/, getLocaleText('FWC.319e1787581342337'), 'warning'),
1904
+ referenceMetricItem(data, getLocaleText('FWC.e4481787579519020'), /即将到期/, getLocaleText('FWC.56d21787581342810'), 'critical'),
1905
+ referenceMetricItem(data, getLocaleText('FWC.fc5b1787580398394'), /资产盘点/, '96%', 'healthy'),
1905
1906
  ];
1906
1907
  }
1907
1908
 
@@ -1912,9 +1913,9 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
1912
1913
  */
1913
1914
  function referenceCostItems(data: CustomCanvasData): Array<Record<string, unknown>> {
1914
1915
  return [
1915
- referenceMetricItem(data, '本月云费用环比', /云费用环比/, '+8.4%', 'warning'),
1916
- referenceMetricItem(data, '可释放资源降本空间', /降本空间|释放资源/, '128 万', 'healthy'),
1917
- referenceMetricItem(data, '预算执行偏差', /预算执行偏差/, '-4.6%', 'healthy'),
1916
+ referenceMetricItem(data, getLocaleText('FWC.78801787580398729'), /云费用环比/, '+8.4%', 'warning'),
1917
+ referenceMetricItem(data, getLocaleText('FWC.188c1787579902728'), /降本空间|释放资源/, getLocaleText('FWC.8d711787581071424'), 'healthy'),
1918
+ referenceMetricItem(data, getLocaleText('FWC.40f41787580573717'), /预算执行偏差/, '-4.6%', 'healthy'),
1918
1919
  ];
1919
1920
  }
1920
1921
 
@@ -1925,10 +1926,10 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
1925
1926
  */
1926
1927
  function referenceCostFallbackDonutItems(): Array<Record<string, unknown>> {
1927
1928
  return [
1928
- { label: '云资源费用', value: '42%', share: 42, normalizedShare: 42 },
1929
- { label: '软件采购', value: '25%', share: 25, normalizedShare: 25 },
1930
- { label: '外包服务', value: '17%', share: 17, normalizedShare: 17 },
1931
- { label: '维保与机房', value: '16%', share: 16, normalizedShare: 16 },
1929
+ { label: getLocaleText('FWC.7b501787581071065'), value: '42%', share: 42, normalizedShare: 42 },
1930
+ { label: getLocaleText('FWC.bc261787581334498'), value: '25%', share: 25, normalizedShare: 25 },
1931
+ { label: getLocaleText('FWC.5ada1787581340718'), value: '17%', share: 17, normalizedShare: 17 },
1932
+ { label: getLocaleText('FWC.c5c61787581070606'), value: '16%', share: 16, normalizedShare: 16 },
1932
1933
  ];
1933
1934
  }
1934
1935
 
@@ -1995,7 +1996,7 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
1995
1996
  if (block && rawItems.length > 0 && !nestedBlockItemsLookTooWeakForVisualKind(rawItems, 'progressList')) {
1996
1997
  return nestedBlockBarItems(block);
1997
1998
  }
1998
- return nestedBlockFallbackItems({ id: 'reference-project-list', title: '重点 IT 项目看板', kind: 'list', slot: 'body', dataBindingStatus: 'none' }, 'progressList');
1999
+ return nestedBlockFallbackItems({ id: 'reference-project-list', title: getLocaleText('FWC.41131787579719167'), kind: 'list', slot: 'body', dataBindingStatus: 'none' }, 'progressList');
1999
2000
  }
2000
2001
 
2001
2002
  /**
@@ -2005,10 +2006,10 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
2005
2006
  */
2006
2007
  function referenceTodoItems(data: CustomCanvasData): Array<Record<string, unknown>> {
2007
2008
  return [
2008
- referenceMetricItem(data, 'IT 采购审批', /采购审批/, '18'),
2009
- referenceMetricItem(data, '系统上线审批', /上线审批/, '7'),
2010
- referenceMetricItem(data, '权限变更审批', /权限变更/, '24'),
2011
- referenceMetricItem(data, '安全整改待办', /安全整改/, '5'),
2009
+ referenceMetricItem(data, getLocaleText('FWC.676d1787580398112'), /采购审批/, '18'),
2010
+ referenceMetricItem(data, getLocaleText('FWC.4f641787580570515'), /上线审批/, '7'),
2011
+ referenceMetricItem(data, getLocaleText('FWC.63a61787580569978'), /权限变更/, '24'),
2012
+ referenceMetricItem(data, getLocaleText('FWC.90cc1787580571185'), /安全整改/, '5'),
2012
2013
  ];
2013
2014
  }
2014
2015
 
@@ -2022,7 +2023,7 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
2022
2023
  if (block && !nestedBlockItemsLookTooWeakForVisualKind(nestedBlockRawItems(block), 'simpleList')) {
2023
2024
  return nestedBlockItems(block).slice(0, 3);
2024
2025
  }
2025
- return nestedBlockFallbackItems({ id: 'reference-efficiency', title: '研发 & 运维效能', kind: 'list', slot: 'footer', dataBindingStatus: 'none' }, 'simpleList');
2026
+ return nestedBlockFallbackItems({ id: 'reference-efficiency', title: getLocaleText('FWC.bb2c1787579903089'), kind: 'list', slot: 'footer', dataBindingStatus: 'none' }, 'simpleList');
2026
2027
  }
2027
2028
 
2028
2029
  /**
@@ -2048,7 +2049,7 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
2048
2049
  const usableItems = referenceUsableQuickLinkItems(nestedBlockItems(block));
2049
2050
  if (usableItems.length >= 2) return usableItems.slice(0, 4);
2050
2051
  }
2051
- return nestedBlockFallbackItems({ id: 'reference-quick-links', title: '快捷入口', kind: 'list', slot: 'footer', dataBindingStatus: 'none' }, 'quickLinks');
2052
+ return nestedBlockFallbackItems({ id: 'reference-quick-links', title: getLocaleText('FWC.bde71787581354624'), kind: 'list', slot: 'footer', dataBindingStatus: 'none' }, 'quickLinks');
2052
2053
  }
2053
2054
 
2054
2055
  /**
@@ -2065,7 +2066,7 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
2065
2066
  return visualKind === 'metric' || visualKind === 'todoGrid' || visualKind === 'progressList' || previewKind === 'metric' || previewKind === 'summary';
2066
2067
  })
2067
2068
  .map((block, index) => ({
2068
- label: block.title || `指标 ${index + 1}`,
2069
+ label: block.title || getLocaleText('FWC.c4191787579589199', {p0: index + 1}),
2069
2070
  value: nestedBlockMetricValue(block),
2070
2071
  detail: nestedBlockDataSummary(block),
2071
2072
  progress: nestedBlockOptionalNumber(nestedBlockMetricValue(block)) ?? 56,
@@ -2073,10 +2074,10 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
2073
2074
  }))
2074
2075
  .filter((item) => item.label && item.value && item.value !== '--');
2075
2076
  return (rows.length > 0 ? rows : [
2076
- { label: '核心指标', value: '--', detail: '等待可靠问数回填', tone: 'neutral' },
2077
- { label: '目标完成率', value: '--', detail: '需补充业务口径', tone: 'warning' },
2078
- { label: '风险项', value: '--', detail: '保持截图识别值', tone: 'warning' },
2079
- { label: '本期变化', value: '--', detail: '未伪造 setData', tone: 'neutral' },
2077
+ { label: getLocaleText('FWC.063e1787581375870'), value: '--', detail: getLocaleText('FWC.74c11787580018569'), tone: 'neutral' },
2078
+ { label: getLocaleText('FWC.6e9c1787581071815'), value: '--', detail: getLocaleText('FWC.32671787580396053'), tone: 'warning' },
2079
+ { label: getLocaleText('FWC.9d4e1787581567969'), value: '--', detail: getLocaleText('FWC.0d3d1787580400959'), tone: 'warning' },
2080
+ { label: getLocaleText('FWC.30761787581377822'), value: '--', detail: getLocaleText('FWC.de501787579589380'), tone: 'neutral' },
2080
2081
  ]).slice(0, 6);
2081
2082
  }
2082
2083
 
@@ -2097,7 +2098,7 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
2097
2098
  const rawItems = nestedBlockRawItems(block);
2098
2099
  if (rawItems.length > 0 && !nestedBlockItemsLookTooWeak(rawItems)) return rawItems.slice(0, 5);
2099
2100
  return [{
2100
- label: block.title || `趋势 ${blockIndex + 1}`,
2101
+ label: block.title || getLocaleText('FWC.27031787579588875', {p0: blockIndex + 1}),
2101
2102
  value: nestedBlockMetricValue(block),
2102
2103
  detail: nestedBlockDataSummary(block),
2103
2104
  progress: 42 + (blockIndex % 4) * 12,
@@ -2228,375 +2229,375 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
2228
2229
  */
2229
2230
  function referenceBidProfile(data: CustomCanvasData): ReferenceBidProfile {
2230
2231
  const commonInfo = [
2231
- { label: '产品', value: '14寸笔记本电脑' },
2232
- { label: '数量', value: '6000台' },
2233
- { label: '要求送达时间', value: '2026-07-15' },
2234
- { label: '交付地点', value: '上海' },
2232
+ { label: getLocaleText('FWC.744e1787581633398'), value: getLocaleText('FWC.aae91787580018772') },
2233
+ { label: getLocaleText('FWC.5b081787581637432'), value: getLocaleText('FWC.e2761787581077415') },
2234
+ { label: getLocaleText('FWC.c4991787580590390'), value: '2026-07-15' },
2235
+ { label: getLocaleText('FWC.54d21787581369487'), value: getLocaleText('FWC.b1f11787581641357') },
2235
2236
  ];
2236
2237
  const commonRiskRows = [
2237
- { label: '目标标案口径', value: '待补', detail: '需补充指标、表、字段或系统口径', owner: '业务负责人', tone: 'warning' },
2238
- { label: '真实问数绑定', value: '待执行', detail: '截图预览不写入 ready/setData', owner: '数据负责人', tone: 'warning' },
2239
- { label: '跨部门结论', value: '需确认', detail: '生产、采购、物流、仓储、财务需补充口径', owner: '协同负责人', tone: 'info' },
2238
+ { label: getLocaleText('FWC.19771787580584623'), value: getLocaleText('FWC.e5251787581622217'), detail: getLocaleText('FWC.d8d61787579289131'), owner: getLocaleText('FWC.36621787581079677'), tone: 'warning' },
2239
+ { label: getLocaleText('FWC.56651787580591848'), value: getLocaleText('FWC.8c5a1787581571188'), detail: getLocaleText('FWC.21761787579132366'), owner: getLocaleText('FWC.79ec1787581080016'), tone: 'warning' },
2240
+ { label: getLocaleText('FWC.80891787581080353'), value: getLocaleText('FWC.91881787581562073'), detail: getLocaleText('FWC.c89d1787579153336'), owner: getLocaleText('FWC.df5a1787581080702'), tone: 'info' },
2240
2241
  ];
2241
2242
  const commonBoundary = [
2242
- { label: '绑定状态', value: '待补口径', tone: 'warning' },
2243
- { label: '数据来源', value: '截图预览', tone: 'neutral' },
2244
- { label: '真实问数', value: '未执行', tone: 'warning' },
2245
- { label: 'setData', value: '未写入', tone: 'neutral' },
2243
+ { label: getLocaleText('FWC.0eef1787581382089'), value: getLocaleText('FWC.2c061787581341369'), tone: 'warning' },
2244
+ { label: getLocaleText('FWC.cd841787581383097'), value: getLocaleText('FWC.2b051787581383599'), tone: 'neutral' },
2245
+ { label: getLocaleText('FWC.f1871787581384357'), value: getLocaleText('FWC.4d811787581571767'), tone: 'warning' },
2246
+ { label: 'setData', value: getLocaleText('FWC.272c1787581572935'), tone: 'neutral' },
2246
2247
  ];
2247
2248
 
2248
2249
  const profiles: Record<ReferenceBidRoleKey, ReferenceBidProfile> = {
2249
2250
  sales: {
2250
2251
  roleKey: 'sales',
2251
- icon: '销',
2252
+ icon: getLocaleText('FWC.6f911787581663769'),
2252
2253
  accent: '#145C3D',
2253
- title: '01 销售经理工作台',
2254
- subtitle: '重点客户投标案的供需问题研讨',
2255
- route: '标案状态',
2256
- scope: '销售团队',
2257
- quickActions: ['目标标案', '供需结论', '报价调整', '客户确认', '投标决策'],
2254
+ title: getLocaleText('FWC.33af1787579722729'),
2255
+ subtitle: getLocaleText('FWC.34341787579337304'),
2256
+ route: getLocaleText('FWC.7f491787581364722'),
2257
+ scope: getLocaleText('FWC.e9231787581367044'),
2258
+ quickActions: [getLocaleText('FWC.0b4a1787581355495'), getLocaleText('FWC.68111787581385376'), getLocaleText('FWC.e2461787581385892'), getLocaleText('FWC.07c61787581375373'), getLocaleText('FWC.bdc11787581355061')],
2258
2259
  kpis: [
2259
- { label: '待讨论标案', value: '1', detail: '当前销售经理推动研讨对象', tone: 'info' },
2260
- { label: '中标概率', value: '60%', detail: '销售侧当前评估', tone: 'neutral' },
2261
- { label: '目标数量', value: '6000', detail: '14寸笔记本电脑', tone: 'neutral' },
2262
- { label: '综合结论', value: '有条件投标', detail: '需客户沟通后确定方案', tone: 'warning' },
2260
+ { label: getLocaleText('FWC.1d6e1787581081045'), value: '1', detail: getLocaleText('FWC.24d01787579519567'), tone: 'info' },
2261
+ { label: getLocaleText('FWC.b0641787581386429'), value: '60%', detail: getLocaleText('FWC.37191787580401200'), tone: 'neutral' },
2262
+ { label: getLocaleText('FWC.57991787581373922'), value: '6000', detail: getLocaleText('FWC.aae91787580018772'), tone: 'neutral' },
2263
+ { label: getLocaleText('FWC.1b121787581389427'), value: getLocaleText('FWC.c9c01787581073462'), detail: getLocaleText('FWC.44d01787579726399'), tone: 'warning' },
2263
2264
  ],
2264
2265
  infoItems: [
2265
- { label: '客户', value: '重点客户A' },
2266
- { label: '产品', value: '14寸笔记本电脑' },
2267
- { label: '数量', value: '6000台' },
2268
- { label: '投标时间', value: '2026-06-15', tone: 'warning' },
2269
- { label: '要求送达时间', value: '2026-07-15', tone: 'warning' },
2270
- { label: '交付地点', value: '上海' },
2266
+ { label: getLocaleText('FWC.a5271787581648275'), value: getLocaleText('FWC.cfc31787581076078') },
2267
+ { label: getLocaleText('FWC.744e1787581633398'), value: getLocaleText('FWC.aae91787580018772') },
2268
+ { label: getLocaleText('FWC.5b081787581637432'), value: getLocaleText('FWC.e2761787581077415') },
2269
+ { label: getLocaleText('FWC.882b1787581390040'), value: '2026-06-15', tone: 'warning' },
2270
+ { label: getLocaleText('FWC.c4991787580590390'), value: '2026-07-15', tone: 'warning' },
2271
+ { label: getLocaleText('FWC.54d21787581369487'), value: getLocaleText('FWC.b1f11787581641357') },
2271
2272
  ],
2272
2273
  sections: [
2273
2274
  {
2274
2275
  id: 'sales-supply',
2275
- title: '跨角色供需结论',
2276
- subtitle: '生产 / 采购 / 物流 / 仓储 / 财务',
2276
+ title: getLocaleText('FWC.b1a21787580401442'),
2277
+ subtitle: getLocaleText('FWC.07691787579105677'),
2277
2278
  rows: [
2278
- { label: '生产', value: '有条件承诺', detail: '当前产能 2500 台/天,需物料齐套时间确认', tone: 'warning' },
2279
- { label: '采购', value: '有条件齐套', detail: 'CPU 存在缺口,D 面建议提前备货', tone: 'warning' },
2280
- { label: '物流', value: '有条件交付', detail: '铁路不可行,公路压线,建议 2 批发运', tone: 'warning' },
2281
- { label: '仓储', value: '有条件承接', detail: '库位足够,第二批加急出库存在压力', tone: 'warning' },
2282
- { label: '财务', value: '有条件批准', detail: 'D 面提前备货 ¥132万,加急物流增量 ¥2.4万', tone: 'warning' },
2279
+ { label: getLocaleText('FWC.677d1787581648913'), value: getLocaleText('FWC.88a81787581084263'), detail: getLocaleText('FWC.32e91787579033658'), tone: 'warning' },
2280
+ { label: getLocaleText('FWC.7c5f1787581626214'), value: getLocaleText('FWC.5fe11787581077078'), detail: getLocaleText('FWC.d3461787579174309'), tone: 'warning' },
2281
+ { label: getLocaleText('FWC.8d381787581649560'), value: getLocaleText('FWC.af0a1787581085688'), detail: getLocaleText('FWC.d6ce1787579151944'), tone: 'warning' },
2282
+ { label: getLocaleText('FWC.48ad1787581623424'), value: getLocaleText('FWC.31391787581087124'), detail: getLocaleText('FWC.e9be1787579246663'), tone: 'warning' },
2283
+ { label: getLocaleText('FWC.48201787581624919'), value: getLocaleText('FWC.59121787581088075'), detail: getLocaleText('FWC.19c41787578561574'), tone: 'warning' },
2283
2284
  ],
2284
2285
  },
2285
2286
  {
2286
2287
  id: 'sales-actions',
2287
- title: '销售动作拆解',
2288
- subtitle: '客户确认 / 报价边界 / 承诺校验',
2288
+ title: getLocaleText('FWC.41ec1787580592730'),
2289
+ subtitle: getLocaleText('FWC.ea861787579169323'),
2289
2290
  rows: [
2290
- { label: 'CPU 是否可加急', value: '采购经理', detail: '要求采购在投标前取得供应商确认', tone: 'warning' },
2291
- { label: 'D 面是否可开标前备货', value: '采购经理 / 财务经理', detail: '推动财务审批和采购锁定供应商产能', tone: 'warning' },
2292
- { label: '第二批车辆资源', value: '物流经理', detail: '确认 2026-07-10 至 2026-07-15 到仓时效', tone: 'info' },
2293
- { label: '客户是否接受分批交付', value: '销售经理', detail: '与客户确认分批交付安排', tone: 'info' },
2291
+ { label: getLocaleText('FWC.f3801787579903631'), value: getLocaleText('FWC.e8ff1787581360308'), detail: getLocaleText('FWC.87ac1787579285638'), tone: 'warning' },
2292
+ { label: getLocaleText('FWC.30961787579589865'), value: getLocaleText('FWC.609e1787579588561'), detail: getLocaleText('FWC.00901787579247737'), tone: 'warning' },
2293
+ { label: getLocaleText('FWC.d0041787580403222'), value: getLocaleText('FWC.f4781787581362591'), detail: getLocaleText('FWC.bd541787578130998'), tone: 'info' },
2294
+ { label: getLocaleText('FWC.e4e41787579726958'), value: getLocaleText('FWC.70f81787581365181'), detail: getLocaleText('FWC.3ee31787579589704'), tone: 'info' },
2294
2295
  ],
2295
2296
  },
2296
2297
  ],
2297
2298
  riskRows: [
2298
- { label: 'CPU 加急周期', value: '需确认', detail: '采购需在投标前拿到供应商承诺', owner: '采购经理', tone: 'warning' },
2299
- { label: 'D 面提前备货', value: '需审批', detail: '财务审批与采购锁产能要同步', owner: '采购 / 财务', tone: 'warning' },
2300
- { label: '第二批加急整车', value: '压线', detail: '车辆资源和到仓时效需锁定', owner: '物流经理', tone: 'critical' },
2301
- { label: '客户分批交付', value: '待沟通', detail: '影响投标承诺和违约边界', owner: '销售经理', tone: 'warning' },
2299
+ { label: getLocaleText('FWC.fc5e1787580020280'), value: getLocaleText('FWC.91881787581562073'), detail: getLocaleText('FWC.f4381787579337543'), owner: getLocaleText('FWC.e8ff1787581360308'), tone: 'warning' },
2300
+ { label: getLocaleText('FWC.e6c11787580402455'), value: getLocaleText('FWC.c8981787581569105'), detail: getLocaleText('FWC.0ba31787579407312'), owner: getLocaleText('FWC.a0901787580401705'), tone: 'warning' },
2301
+ { label: getLocaleText('FWC.48851787580403465'), value: getLocaleText('FWC.68261787581650203'), detail: getLocaleText('FWC.8e521787579519996'), owner: getLocaleText('FWC.f4781787581362591'), tone: 'critical' },
2302
+ { label: getLocaleText('FWC.b09c1787580593026'), value: getLocaleText('FWC.55901787581574274'), detail: getLocaleText('FWC.40a11787579592712'), owner: getLocaleText('FWC.70f81787581365181'), tone: 'warning' },
2302
2303
  ],
2303
2304
  conclusions: [
2304
- { label: '销售侧决策建议', value: '有条件投标', detail: '可继续投标,但需先确认 CPU 加急交期、D 面提前备货审批、客户分批交付安排。', tone: 'warning' },
2305
- { label: '报价覆盖项', value: '需覆盖风险', detail: '报价应覆盖第二批加急物流成本,并预留因备货和交付压线带来的风险缓冲。', tone: 'info' },
2305
+ { label: getLocaleText('FWC.e8901787580402201'), value: getLocaleText('FWC.c9c01787581073462'), detail: getLocaleText('FWC.77081787577999386'), tone: 'warning' },
2306
+ { label: getLocaleText('FWC.d0d01787581076407'), value: getLocaleText('FWC.096a1787581094762'), detail: getLocaleText('FWC.25251787578054403'), tone: 'info' },
2306
2307
  ],
2307
2308
  },
2308
2309
  production: {
2309
2310
  roleKey: 'production',
2310
- icon: '产',
2311
+ icon: getLocaleText('FWC.4d641787581665333'),
2311
2312
  accent: '#153F4A',
2312
- title: '生产经理工作台',
2313
- subtitle: '目标标案相关的生产参数',
2314
- route: '生产执行',
2315
- scope: '生产中心',
2316
- quickActions: ['目标标案', '产能信息', '当前工单列表'],
2313
+ title: getLocaleText('FWC.02d41787580399982'),
2314
+ subtitle: getLocaleText('FWC.53131787579588400'),
2315
+ route: getLocaleText('FWC.19181787581391323'),
2316
+ scope: getLocaleText('FWC.77e11787581394895'),
2317
+ quickActions: [getLocaleText('FWC.0b4a1787581355495'), getLocaleText('FWC.cba21787581381080'), getLocaleText('FWC.51481787580588862')],
2317
2318
  kpis: [
2318
- { label: '待讨论标案', value: '1', detail: '当前会议聚焦单一目标标案', tone: 'info' },
2319
- { label: '当前产能', value: '2500', detail: '近 90 天日均产量,单位:台/天', tone: 'healthy' },
2320
- { label: '当前工单', value: '6', detail: '当前生产队列中的工单数量', tone: 'neutral' },
2319
+ { label: getLocaleText('FWC.1d6e1787581081045'), value: '1', detail: getLocaleText('FWC.23b31787579519708'), tone: 'info' },
2320
+ { label: getLocaleText('FWC.3d021787581391824'), value: '2500', detail: getLocaleText('FWC.855a1787579202042'), tone: 'healthy' },
2321
+ { label: getLocaleText('FWC.88ee1787581381577'), value: '6', detail: getLocaleText('FWC.d3931787579520142'), tone: 'neutral' },
2321
2322
  ],
2322
2323
  infoItems: [
2323
- { label: '产品', value: '14寸笔记本电脑' },
2324
- { label: '数量', value: '6000台' },
2325
- { label: '交付时间', value: '2026-07-15' },
2326
- { label: '要求生产完成时间', value: '2026-07-12' },
2327
- { label: '交付地点', value: '上海' },
2328
- { label: '物料齐套时间', value: '采购确认中', tone: 'warning' },
2324
+ { label: getLocaleText('FWC.744e1787581633398'), value: getLocaleText('FWC.aae91787580018772') },
2325
+ { label: getLocaleText('FWC.5b081787581637432'), value: getLocaleText('FWC.e2761787581077415') },
2326
+ { label: getLocaleText('FWC.1a451787581395418'), value: '2026-07-15' },
2327
+ { label: getLocaleText('FWC.a4781787580017555'), value: '2026-07-12' },
2328
+ { label: getLocaleText('FWC.54d21787581369487'), value: getLocaleText('FWC.b1f11787581641357') },
2329
+ { label: getLocaleText('FWC.69d41787580589921'), value: getLocaleText('FWC.7bba1787581084976'), tone: 'warning' },
2329
2330
  ],
2330
2331
  sections: [
2331
2332
  {
2332
2333
  id: 'production-capacity',
2333
- title: '产能基础信息',
2334
- subtitle: '解释当前产能 2500 台/天的依据',
2334
+ title: getLocaleText('FWC.630c1787580593613'),
2335
+ subtitle: getLocaleText('FWC.d3ff1787579172911'),
2335
2336
  rows: [
2336
- { label: '组装产品', value: '14寸笔记本', detail: '主生产型号', tone: 'neutral' },
2337
- { label: '组装线平均产能', value: '100台/小时', detail: '按当前班次测算', tone: 'healthy' },
2338
- { label: '日平均班次', value: '2', detail: '可承接常规排产', tone: 'neutral' },
2339
- { label: '产线数量', value: '2', detail: '支持目标产量', tone: 'healthy' },
2340
- { label: '近90天日均产量', value: '2500台/天', detail: '作为产能依据', tone: 'healthy' },
2337
+ { label: getLocaleText('FWC.e2411787581395936'), value: getLocaleText('FWC.8f6f1787580593916'), detail: getLocaleText('FWC.5c9f1787581097408'), tone: 'neutral' },
2338
+ { label: getLocaleText('FWC.e60e1787580412239'), value: getLocaleText('FWC.a0691787580404842'), detail: getLocaleText('FWC.14181787580413179'), tone: 'healthy' },
2339
+ { label: getLocaleText('FWC.0e791787581097797'), value: '2', detail: getLocaleText('FWC.1aef1787580413438'), tone: 'neutral' },
2340
+ { label: getLocaleText('FWC.d3601787581396707'), value: '2', detail: getLocaleText('FWC.25971787580594221'), tone: 'healthy' },
2341
+ { label: getLocaleText('FWC.acc61787580020491'), value: getLocaleText('FWC.d0931787580411661'), detail: getLocaleText('FWC.10791787580594663'), tone: 'healthy' },
2341
2342
  ],
2342
2343
  },
2343
2344
  {
2344
2345
  id: 'production-orders',
2345
- title: '当前工单信息',
2346
- subtitle: '按优先级与计划完成时间排序',
2346
+ title: getLocaleText('FWC.8a1c1787580593317'),
2347
+ subtitle: getLocaleText('FWC.2b8e1787579407441'),
2347
2348
  rows: [
2348
- { label: 'A001', value: '1000台', detail: '14寸笔记本 · 优先级 1 · 2026-06-01', tone: 'healthy' },
2349
- { label: 'B002', value: '3000台', detail: '14寸笔记本 · 优先级 2 · 2026-06-03', tone: 'healthy' },
2350
- { label: 'B003', value: '1000台', detail: '13寸笔记本 · 优先级 2 · 2026-06-06', tone: 'healthy' },
2351
- { label: 'C004', value: '7000台', detail: '15寸笔记本 · 优先级 3 · 2026-06-08', tone: 'healthy' },
2349
+ { label: 'A001', value: getLocaleText('FWC.f18f1787581095148'), detail: getLocaleText('FWC.7aaf1787578345241'), tone: 'healthy' },
2350
+ { label: 'B002', value: getLocaleText('FWC.7da41787581096237'), detail: getLocaleText('FWC.8ec81787578345324'), tone: 'healthy' },
2351
+ { label: 'B003', value: getLocaleText('FWC.f18f1787581095148'), detail: getLocaleText('FWC.c9021787578345489'), tone: 'healthy' },
2352
+ { label: 'C004', value: getLocaleText('FWC.66951787581098185'), detail: getLocaleText('FWC.6ac81787578345590'), tone: 'healthy' },
2352
2353
  ],
2353
2354
  },
2354
2355
  ],
2355
2356
  riskRows: [
2356
- { label: '物料齐套', value: '需采购确认', detail: '物料齐套时间仍需采购确认', owner: '采购经理', tone: 'warning' },
2357
- { label: '排产窗口', value: '可承接', detail: '6000 台约需 2.4 个生产日', owner: '生产经理', tone: 'healthy' },
2358
- { label: '工单插单', value: '需确认', detail: '高优先级工单可能挤占产能', owner: '生产计划', tone: 'warning' },
2357
+ { label: getLocaleText('FWC.91981787581397219'), value: getLocaleText('FWC.f37a1787581093848'), detail: getLocaleText('FWC.40af1787579520281'), owner: getLocaleText('FWC.e8ff1787581360308'), tone: 'warning' },
2358
+ { label: getLocaleText('FWC.7ebe1787581397741'), value: getLocaleText('FWC.24771787581574847'), detail: getLocaleText('FWC.9e081787579202160'), owner: getLocaleText('FWC.29081787581367533'), tone: 'healthy' },
2359
+ { label: getLocaleText('FWC.68831787581398262'), value: getLocaleText('FWC.91881787581562073'), detail: getLocaleText('FWC.e17a1787579520430'), owner: getLocaleText('FWC.54261787581398836'), tone: 'warning' },
2359
2360
  ],
2360
2361
  conclusions: [
2361
- { label: '生产侧初步判断', value: '有条件承诺', detail: '产能与当前工单窗口基本可承接,物料齐套时间仍需采购确认。', tone: 'warning' },
2362
- { label: '目标标案生产量 / 当前日均产能', value: '2.4 个生产日', detail: '6000 台按 2500 台/天测算,需确保齐套后连续排产。', tone: 'healthy' },
2362
+ { label: getLocaleText('FWC.6ec51787580413922'), value: getLocaleText('FWC.88a81787581084263'), detail: getLocaleText('FWC.9dff1787578289433'), tone: 'warning' },
2363
+ { label: getLocaleText('FWC.77011787579248857'), value: getLocaleText('FWC.51171787580021076'), detail: getLocaleText('FWC.42521787578162661'), tone: 'healthy' },
2363
2364
  ],
2364
2365
  },
2365
2366
  procurement: {
2366
2367
  roleKey: 'procurement',
2367
- icon: '采',
2368
+ icon: getLocaleText('FWC.e6e01787581666713'),
2368
2369
  accent: '#684513',
2369
- title: '采购经理工作台',
2370
- subtitle: '目标标案相关的物料齐套与采购到货判断',
2371
- route: '采购执行',
2372
- scope: '采购中心',
2373
- quickActions: ['目标标案', '物料缺口', '采购订单', '供应商交期'],
2370
+ title: getLocaleText('FWC.11911787580400223'),
2371
+ subtitle: getLocaleText('FWC.7c581787579175882'),
2372
+ route: getLocaleText('FWC.b5811787581399359'),
2373
+ scope: getLocaleText('FWC.671b1787581399884'),
2374
+ quickActions: [getLocaleText('FWC.0b4a1787581355495'), getLocaleText('FWC.57561787581400418'), getLocaleText('FWC.efa81787581358257'), getLocaleText('FWC.01d31787581099000')],
2374
2375
  kpis: [
2375
- { label: '待讨论标案', value: '1', detail: '当前采购侧确认对象', tone: 'info' },
2376
- { label: '关键物料', value: '8', detail: '目标产品重点物料', tone: 'neutral' },
2377
- { label: '缺口物料', value: '2', detail: 'CPU 与 D 面需重点处理', tone: 'critical' },
2378
- { label: '供应商确认中', value: '3', detail: '交期、加急周期、产能待确认', tone: 'warning' },
2376
+ { label: getLocaleText('FWC.1d6e1787581081045'), value: '1', detail: getLocaleText('FWC.1e621787579903817'), tone: 'info' },
2377
+ { label: getLocaleText('FWC.8cab1787581400942'), value: '8', detail: getLocaleText('FWC.602d1787580018179'), tone: 'neutral' },
2378
+ { label: getLocaleText('FWC.75651787581401468'), value: '2', detail: getLocaleText('FWC.73ec1787579337418'), tone: 'critical' },
2379
+ { label: getLocaleText('FWC.6c851787580597207'), value: '3', detail: getLocaleText('FWC.e1671787579407575'), tone: 'warning' },
2379
2380
  ],
2380
2381
  infoItems: [
2381
- { label: '产品', value: '14寸笔记本电脑' },
2382
- { label: '数量', value: '6000台' },
2383
- { label: '要求生产完成时间', value: '2026-07-12' },
2384
- { label: '交付地点', value: '上海' },
2385
- { label: '物料齐套要求时间', value: '2026-07-05', tone: 'warning' },
2386
- { label: '当前齐套结论', value: '采购确认中', tone: 'warning' },
2382
+ { label: getLocaleText('FWC.744e1787581633398'), value: getLocaleText('FWC.aae91787580018772') },
2383
+ { label: getLocaleText('FWC.5b081787581637432'), value: getLocaleText('FWC.e2761787581077415') },
2384
+ { label: getLocaleText('FWC.a4781787580017555'), value: '2026-07-12' },
2385
+ { label: getLocaleText('FWC.54d21787581369487'), value: getLocaleText('FWC.b1f11787581641357') },
2386
+ { label: getLocaleText('FWC.bbd81787580021288'), value: '2026-07-05', tone: 'warning' },
2387
+ { label: getLocaleText('FWC.14f31787580597819'), value: getLocaleText('FWC.7bba1787581084976'), tone: 'warning' },
2387
2388
  ],
2388
2389
  sections: [
2389
2390
  {
2390
2391
  id: 'procurement-materials',
2391
- title: '关键物料齐套信息',
2392
- subtitle: 'CPU 和 D 面为当前关键风险',
2392
+ title: getLocaleText('FWC.6f3e1787580021528'),
2393
+ subtitle: getLocaleText('FWC.ca251787579249525'),
2393
2394
  rows: [
2394
- { label: 'CPU i5-14G', value: '缺口 2700', detail: '供应商确认中 · 交期风险高', tone: 'critical' },
2395
- { label: 'D面外壳 NB14-D', value: '缺口 2200', detail: '建议提前备货', tone: 'warning' },
2396
- { label: '屏幕模组 NB14-LCD', value: '可齐套', detail: '库存覆盖', tone: 'healthy' },
2397
- { label: '内存 16G DDR5', value: '可齐套', detail: '库存覆盖', tone: 'healthy' },
2398
- { label: '固态硬盘 512G', value: '可齐套', detail: '2026-07-02 到货', tone: 'healthy' },
2395
+ { label: 'CPU i5-14G', value: getLocaleText('FWC.565d1787580414958'), detail: getLocaleText('FWC.6afe1787579337787'), tone: 'critical' },
2396
+ { label: getLocaleText('FWC.f4cb1787579593227'), value: getLocaleText('FWC.bb671787580415368'), detail: getLocaleText('FWC.3d8b1787580598779'), tone: 'warning' },
2397
+ { label: getLocaleText('FWC.7eaa1787579407707'), value: getLocaleText('FWC.5bb01787581576617'), detail: getLocaleText('FWC.5f741787581379076'), tone: 'healthy' },
2398
+ { label: getLocaleText('FWC.d58e1787579588717'), value: getLocaleText('FWC.5bb01787581576617'), detail: getLocaleText('FWC.5f741787581379076'), tone: 'healthy' },
2399
+ { label: getLocaleText('FWC.51e91787579904204'), value: getLocaleText('FWC.5bb01787581576617'), detail: getLocaleText('FWC.42241787579407834'), tone: 'healthy' },
2399
2400
  ],
2400
2401
  },
2401
2402
  {
2402
2403
  id: 'procurement-orders',
2403
- title: '供应商交期与采购订单',
2404
- subtitle: '解释缺口、加急和提前备货的外部依赖',
2404
+ title: getLocaleText('FWC.3a891787579725350'),
2405
+ subtitle: getLocaleText('FWC.6a531787579202266'),
2405
2406
  rows: [
2406
- { label: '英芯供应链', value: 'CPU i5-14G', detail: '拟下单 2700 · 理论周期45天', tone: 'critical' },
2407
- { label: '英芯供应链', value: '加急确认中', detail: 'CPU 2700 · 待确认', tone: 'critical' },
2408
- { label: '精密结构件', value: 'D面外壳 NB14-D', detail: '备货申请中 2200', tone: 'warning' },
2409
- { label: '精密结构件', value: 'PO-260604', detail: 'D面 1200 · 2026-07-03', tone: 'warning' },
2407
+ { label: getLocaleText('FWC.127e1787581075408'), value: 'CPU i5-14G', detail: getLocaleText('FWC.15f51787579176931'), tone: 'critical' },
2408
+ { label: getLocaleText('FWC.127e1787581075408'), value: getLocaleText('FWC.69511787581099387'), detail: getLocaleText('FWC.19d31787579337903'), tone: 'critical' },
2409
+ { label: getLocaleText('FWC.47511787581074745'), value: getLocaleText('FWC.f4cb1787579593227'), detail: getLocaleText('FWC.93941787579727971'), tone: 'warning' },
2410
+ { label: getLocaleText('FWC.47511787581074745'), value: 'PO-260604', detail: getLocaleText('FWC.64101787579141874'), tone: 'warning' },
2410
2411
  ],
2411
2412
  },
2412
2413
  ],
2413
2414
  riskRows: [
2414
- { label: 'CPU 缺口', value: '硬交期风险', detail: '理论供货周期 45 天,需供应商确认能否加急', owner: '采购经理', tone: 'critical' },
2415
- { label: 'D 面提前备货', value: '需财务协商', detail: '开标前备货需资金审批与销售确认', owner: '采购 / 财务', tone: 'warning' },
2416
- { label: '齐套时间', value: '2026-07-05', detail: '未确认会影响 2026-07-12 生产完成', owner: '采购经理', tone: 'warning' },
2415
+ { label: getLocaleText('FWC.40bd1787580599089'), value: getLocaleText('FWC.b67a1787581099780'), detail: getLocaleText('FWC.41381787579105775'), owner: getLocaleText('FWC.e8ff1787581360308'), tone: 'critical' },
2416
+ { label: getLocaleText('FWC.e6c11787580402455'), value: getLocaleText('FWC.cf951787581083495'), detail: getLocaleText('FWC.10421787579287034'), owner: getLocaleText('FWC.a0901787580401705'), tone: 'warning' },
2417
+ { label: getLocaleText('FWC.52e81787581402281'), value: '2026-07-05', detail: getLocaleText('FWC.be7e1787579105891'), owner: getLocaleText('FWC.e8ff1787581360308'), tone: 'warning' },
2417
2418
  ],
2418
2419
  conclusions: [
2419
- { label: '采购侧结论:CPU 缺口', value: '硬交期风险', detail: 'CPU 存在缺口,理论供货周期 45 天。如待 2026-06-15 明确中标后再采购,必然来不及满足物料齐套要求。', tone: 'critical' },
2420
- { label: '采购侧结论:D 面提前备货', value: '需财务协商', detail: 'D 面供应商产能存在缺口,建议开标前备货并联动财务。', tone: 'warning' },
2420
+ { label: getLocaleText('FWC.510a1787579520577'), value: getLocaleText('FWC.b67a1787581099780'), detail: getLocaleText('FWC.042a1787577896277'), tone: 'critical' },
2421
+ { label: getLocaleText('FWC.e3c11787579407972'), value: getLocaleText('FWC.cf951787581083495'), detail: getLocaleText('FWC.a3ba1787578561660'), tone: 'warning' },
2421
2422
  ],
2422
2423
  },
2423
2424
  logistics: {
2424
2425
  roleKey: 'logistics',
2425
- icon: '物',
2426
+ icon: getLocaleText('FWC.87991787581668073'),
2426
2427
  accent: '#145466',
2427
- title: '04 物流经理工作台',
2428
- subtitle: '目标标案相关的发运计划与交付可达性判断',
2429
- route: '物流执行',
2430
- scope: '物流中心',
2431
- quickActions: ['目标标案', '始发地', '目的地', '运输方式', '承运商时效'],
2428
+ title: getLocaleText('FWC.e3de1787579723886'),
2429
+ subtitle: getLocaleText('FWC.acfd1787579155614'),
2430
+ route: getLocaleText('FWC.47441787581392324'),
2431
+ scope: getLocaleText('FWC.c4b61787581402796'),
2432
+ quickActions: [getLocaleText('FWC.0b4a1787581355495'), getLocaleText('FWC.a95c1787581578380'), getLocaleText('FWC.42b51787581579625'), getLocaleText('FWC.3e461787581380582'), getLocaleText('FWC.b73b1787581076739')],
2432
2433
  kpis: [
2433
- { label: '待讨论标案', value: '1', detail: '当前物流侧确认对象', tone: 'info' },
2434
- { label: '始发地', value: '成都', detail: '目标货物预计发运地', tone: 'info' },
2435
- { label: '目的地', value: '上海', detail: '客户要求交付地点', tone: 'info' },
2436
- { label: '默认运输方式', value: '铁路', detail: '常规默认方案', tone: 'warning' },
2437
- { label: '默认运输时效', value: '7天', detail: '2026-07-12 入库后不可满足', tone: 'warning' },
2434
+ { label: getLocaleText('FWC.1d6e1787581081045'), value: '1', detail: getLocaleText('FWC.dbff1787579904398'), tone: 'info' },
2435
+ { label: getLocaleText('FWC.a95c1787581578380'), value: getLocaleText('FWC.9f7f1787581651493'), detail: getLocaleText('FWC.11641787579904593'), tone: 'info' },
2436
+ { label: getLocaleText('FWC.42b51787581579625'), value: getLocaleText('FWC.b1f11787581641357'), detail: getLocaleText('FWC.5bb41787580020858'), tone: 'info' },
2437
+ { label: getLocaleText('FWC.17171787580599404'), value: getLocaleText('FWC.35741787581652132'), detail: getLocaleText('FWC.fdb81787580599966'), tone: 'warning' },
2438
+ { label: getLocaleText('FWC.ec081787580600530'), value: getLocaleText('FWC.ad1d1787581650853'), detail: getLocaleText('FWC.fd0e1787579177646'), tone: 'warning' },
2438
2439
  ],
2439
2440
  infoItems: commonInfo,
2440
2441
  sections: [
2441
2442
  {
2442
2443
  id: 'logistics-capacity',
2443
- title: '物流运力',
2444
- subtitle: '铁路与公路运力对比',
2444
+ title: getLocaleText('FWC.05ca1787581403332'),
2445
+ subtitle: getLocaleText('FWC.bc321787579904005'),
2445
2446
  rows: [
2446
- { label: '铁路运力', value: '常规默认', detail: '货量无限 · 提前7天预定 · 紧急增派不接受', tone: 'warning' },
2447
- { label: '公路运力', value: '备选主方案', detail: '货量无限 · 提前1天预定 · 提前4小时确认', tone: 'info' },
2447
+ { label: getLocaleText('FWC.4ca81787581403853'), value: getLocaleText('FWC.35701787581404384'), detail: getLocaleText('FWC.848a1787579033923'), tone: 'warning' },
2448
+ { label: getLocaleText('FWC.b9cb1787581404923'), value: getLocaleText('FWC.135a1787581100643'), detail: getLocaleText('FWC.49051787579033842'), tone: 'info' },
2448
2449
  ],
2449
2450
  },
2450
2451
  {
2451
2452
  id: 'logistics-routes',
2452
- title: '运输路线与承运商',
2453
- subtitle: '周期 / 价格 / 运输时效',
2453
+ title: getLocaleText('FWC.b64a1787580016542'),
2454
+ subtitle: getLocaleText('FWC.a50b1787579338073'),
2454
2455
  rows: [
2455
- { label: '成都 -> 上海', value: '铁路承运商A', detail: '铁路 · 7天 · ¥38,000 · 延迟交付', tone: 'critical' },
2456
- { label: '成都 -> 上海', value: '公路承运商B', detail: '常规公路 · 3天 · ¥62,000 · 压线交付', tone: 'warning' },
2457
- { label: '成都 -> 上海', value: '公路承运商C', detail: '加急整车 · 2天 · ¥86,000 · 可及时交付', tone: 'healthy' },
2456
+ { label: '成都 -> 上海', value: getLocaleText('FWC.cfab1787580601502'), detail: getLocaleText('FWC.51771787578905283'), tone: 'critical' },
2457
+ { label: '成都 -> 上海', value: getLocaleText('FWC.2a4d1787580601925'), detail: getLocaleText('FWC.9dc71787578561971'), tone: 'warning' },
2458
+ { label: '成都 -> 上海', value: getLocaleText('FWC.f5d71787580602449'), detail: getLocaleText('FWC.f1f41787578345674'), tone: 'healthy' },
2458
2459
  ],
2459
2460
  },
2460
2461
  ],
2461
2462
  riskRows: [
2462
- { label: '铁路不可行', value: '延迟交付', detail: '2026-07-12 入库后采用铁路会导致延迟', owner: '物流经理', tone: 'critical' },
2463
- { label: '公路压线', value: '需客户确认', detail: '常规公路到达上海正好压线交付', owner: '销售经理', tone: 'warning' },
2464
- { label: '第二批加急', value: '有成本增量', detail: '需确认车辆资源和到仓时效', owner: '物流经理', tone: 'warning' },
2463
+ { label: getLocaleText('FWC.f4901787581086415'), value: getLocaleText('FWC.99f51787581405455'), detail: getLocaleText('FWC.75091787579034009'), owner: getLocaleText('FWC.f4781787581362591'), tone: 'critical' },
2464
+ { label: getLocaleText('FWC.92a31787581392833'), value: getLocaleText('FWC.c8d41787581101053'), detail: getLocaleText('FWC.96c21787579338206'), owner: getLocaleText('FWC.70f81787581365181'), tone: 'warning' },
2465
+ { label: getLocaleText('FWC.00a81787581101738'), value: getLocaleText('FWC.b3d21787581102144'), detail: getLocaleText('FWC.11851787579521266'), owner: getLocaleText('FWC.f4781787581362591'), tone: 'warning' },
2465
2466
  ],
2466
2467
  conclusions: [
2467
- { label: '物流侧结论:常规方案风险', value: '铁路不可行', detail: '常规铁路运输会导致延迟交付;公路方案仍需确认装车、到仓预约等不确定风险。', tone: 'critical' },
2468
- { label: '建议方案:分 2 批发运', value: '有条件交付', detail: '首批 7月11日发货,第二批 7月12日使用加急整车,需销售确认分批交付与加急成本。', tone: 'warning' },
2468
+ { label: getLocaleText('FWC.ff531787579521418'), value: getLocaleText('FWC.f4901787581086415'), detail: getLocaleText('FWC.74851787578027374'), tone: 'critical' },
2469
+ { label: getLocaleText('FWC.a3831787579519849'), value: getLocaleText('FWC.af0a1787581085688'), detail: getLocaleText('FWC.e40d1787577981033'), tone: 'warning' },
2469
2470
  ],
2470
2471
  },
2471
2472
  warehouse: {
2472
2473
  roleKey: 'warehouse',
2473
- icon: '仓',
2474
+ icon: getLocaleText('FWC.c80a1787581669418'),
2474
2475
  accent: '#115C54',
2475
- title: '05 仓储经理工作台',
2476
- subtitle: '目标标案相关的库存容量与爆仓风险判断',
2477
- route: '仓储执行',
2478
- scope: '仓储中心',
2479
- quickActions: ['目标标案', '库存信息', '库位容量', '出库计划', '分批备货'],
2476
+ title: getLocaleText('FWC.757a1787579723254'),
2477
+ subtitle: getLocaleText('FWC.5b3e1787579179028'),
2478
+ route: getLocaleText('FWC.46861787581390539'),
2479
+ scope: getLocaleText('FWC.fab91787581393341'),
2480
+ quickActions: [getLocaleText('FWC.0b4a1787581355495'), getLocaleText('FWC.931a1787581406540'), getLocaleText('FWC.97d81787581380086'), getLocaleText('FWC.306b1787581358714'), getLocaleText('FWC.c87a1787581406006')],
2480
2481
  kpis: [
2481
- { label: '待讨论标案', value: '1', detail: '当前仓储侧确认对象', tone: 'info' },
2482
- { label: '目标数量', value: '6000', detail: '本标案待入库与出库数量', tone: 'neutral' },
2483
- { label: '当前成品库存', value: '0', detail: '2026-07-12 前预计基线库存为 0', tone: 'warning' },
2484
- { label: '可用库位', value: '7800', detail: '可容纳目标标案 6000 台', tone: 'healthy' },
2482
+ { label: getLocaleText('FWC.1d6e1787581081045'), value: '1', detail: getLocaleText('FWC.ccc11787579904779'), tone: 'info' },
2483
+ { label: getLocaleText('FWC.57991787581373922'), value: '6000', detail: getLocaleText('FWC.4b871787579589542'), tone: 'neutral' },
2484
+ { label: getLocaleText('FWC.a6e11787580602975'), value: '0', detail: getLocaleText('FWC.99fe1787579133545'), tone: 'warning' },
2485
+ { label: getLocaleText('FWC.b07d1787581407322'), value: '7800', detail: getLocaleText('FWC.a36b1787579337661'), tone: 'healthy' },
2485
2486
  ],
2486
2487
  infoItems: [
2487
- { label: '产品', value: '14寸笔记本电脑' },
2488
- { label: '数量', value: '6000台' },
2489
- { label: '要求生产完成时间', value: '2026-07-12' },
2490
- { label: '要求送达时间', value: '2026-07-15' },
2491
- { label: '交付地点', value: '上海' },
2492
- { label: '出库节奏', value: '建议分2批', tone: 'warning' },
2488
+ { label: getLocaleText('FWC.744e1787581633398'), value: getLocaleText('FWC.aae91787580018772') },
2489
+ { label: getLocaleText('FWC.5b081787581637432'), value: getLocaleText('FWC.e2761787581077415') },
2490
+ { label: getLocaleText('FWC.a4781787580017555'), value: '2026-07-12' },
2491
+ { label: getLocaleText('FWC.c4991787580590390'), value: '2026-07-15' },
2492
+ { label: getLocaleText('FWC.54d21787581369487'), value: getLocaleText('FWC.b1f11787581641357') },
2493
+ { label: getLocaleText('FWC.cc271787581407870'), value: getLocaleText('FWC.199e1787581102541'), tone: 'warning' },
2493
2494
  ],
2494
2495
  sections: [
2495
2496
  {
2496
2497
  id: 'warehouse-capacity',
2497
- title: '仓储基础能力',
2498
- subtitle: '库存容量与出入库能力',
2498
+ title: getLocaleText('FWC.9b9d1787580603499'),
2499
+ subtitle: getLocaleText('FWC.14f21787579728545'),
2499
2500
  rows: [
2500
- { label: '成品仓可用库位', value: '7800台', detail: '库位足够', tone: 'healthy' },
2501
- { label: '日均入库能力', value: '6000台/天', detail: '满足目标入库', tone: 'healthy' },
2502
- { label: '日均出库能力', value: '3500台/天', detail: '需分批出库', tone: 'neutral' },
2503
- { label: '分拣包装能力', value: '3500台/天', detail: '第二批存在压力', tone: 'warning' },
2504
- { label: '当前库位占用率', value: '72%', detail: '可承接', tone: 'healthy' },
2501
+ { label: getLocaleText('FWC.f9c51787580417374'), value: getLocaleText('FWC.a04e1787581098595'), detail: getLocaleText('FWC.a4121787581393855'), tone: 'healthy' },
2502
+ { label: '日均入库能力', value: getLocaleText('FWC.54f31787580414350'), detail: '满足目标入库', tone: 'healthy' },
2503
+ { label: '日均出库能力', value: getLocaleText('FWC.e2e41787580415821'), detail: getLocaleText('FWC.07d21787581102946'), tone: 'neutral' },
2504
+ { label: '分拣包装能力', value: getLocaleText('FWC.e2e41787580415821'), detail: getLocaleText('FWC.40c21787580416496'), tone: 'warning' },
2505
+ { label: getLocaleText('FWC.e8b61787580417898'), value: '72%', detail: getLocaleText('FWC.24771787581574847'), tone: 'healthy' },
2505
2506
  ],
2506
2507
  },
2507
2508
  {
2508
2509
  id: 'warehouse-stock',
2509
- title: '库存与库位状态',
2510
- subtitle: '当前库存 / 待入库 / 爆仓风险',
2510
+ title: getLocaleText('FWC.b2eb1787580418422'),
2511
+ subtitle: getLocaleText('FWC.b7b61787579202385'),
2511
2512
  rows: [
2512
- { label: '14寸笔记本成品', value: '0 / 6000 / 7800', detail: '依赖生产入库', tone: 'warning' },
2513
- { label: '14寸笔记本包装箱', value: '6200 / 0 / 1200', detail: '可承接', tone: 'healthy' },
2514
- { label: '防震托盘', value: '4800 / 1500 / 900', detail: '需补充', tone: 'warning' },
2515
- { label: '出库暂存区', value: '0 / 6000 / 3000', detail: '需分批暂存', tone: 'warning' },
2513
+ { label: getLocaleText('FWC.2e741787580021752'), value: '0 / 6000 / 7800', detail: '依赖生产入库', tone: 'warning' },
2514
+ { label: getLocaleText('FWC.17e41787579904963'), value: '6200 / 0 / 1200', detail: getLocaleText('FWC.24771787581574847'), tone: 'healthy' },
2515
+ { label: getLocaleText('FWC.24a51787581408408'), value: '4800 / 1500 / 900', detail: getLocaleText('FWC.6bbe1787581581144'), tone: 'warning' },
2516
+ { label: getLocaleText('FWC.9eec1787581103361'), value: '0 / 6000 / 3000', detail: getLocaleText('FWC.6a1e1787581104188'), tone: 'warning' },
2516
2517
  ],
2517
2518
  },
2518
2519
  {
2519
2520
  id: 'warehouse-shipping',
2520
- title: '出库与发运衔接',
2521
- subtitle: '对应物流经理的 2 批发运方案',
2521
+ title: getLocaleText('FWC.896d1787580419471'),
2522
+ subtitle: getLocaleText('FWC.cd781787579290180'),
2522
2523
  rows: [
2523
- { label: '第一批', value: '3000台', detail: '7月11日 12:00 入库,18:00 出库 · 提前备货', tone: 'warning' },
2524
- { label: '第二批', value: '3000台', detail: '7月12日 12:00 入库,18:00 出库 · 加急出库', tone: 'warning' },
2524
+ { label: getLocaleText('FWC.43801787581581735'), value: getLocaleText('FWC.7da41787581096237'), detail: getLocaleText('FWC.df9b1787578162735'), tone: 'warning' },
2525
+ { label: getLocaleText('FWC.2a571787581582321'), value: getLocaleText('FWC.7da41787581096237'), detail: getLocaleText('FWC.a8a41787578162815'), tone: 'warning' },
2525
2526
  ],
2526
2527
  },
2527
2528
  ],
2528
2529
  riskRows: [
2529
- { label: '成品库存为 0', value: '依赖生产', detail: '生产完成后需立即发货出库', owner: '生产经理', tone: 'warning' },
2530
- { label: '分拣包装能力', value: '有压力', detail: '第二批加急出库需提前排班', owner: '仓储经理', tone: 'warning' },
2531
- { label: '出库暂存区', value: '需分批', detail: '单批 6000 台会压缩暂存区', owner: '仓储计划', tone: 'warning' },
2530
+ { label: getLocaleText('FWC.359c1787580419752'), value: getLocaleText('FWC.2d901787581408960'), detail: getLocaleText('FWC.04ae1787579520722'), owner: getLocaleText('FWC.29081787581367533'), tone: 'warning' },
2531
+ { label: '分拣包装能力', value: getLocaleText('FWC.c2221787581582877'), detail: getLocaleText('FWC.ba7e1787579520863'), owner: getLocaleText('FWC.f8401787581368510'), tone: 'warning' },
2532
+ { label: getLocaleText('FWC.9eec1787581103361'), value: getLocaleText('FWC.09b61787581583451'), detail: getLocaleText('FWC.deb71787579291228'), owner: getLocaleText('FWC.05351787581409502'), tone: 'warning' },
2532
2533
  ],
2533
2534
  conclusions: [
2534
- { label: '仓储侧容量判断', value: '库位足够', detail: '当前成品库存为 0,现有工单完成生产后会立即发货出库;可用库位 7800 台,能容纳目标标案。', tone: 'healthy' },
2535
- { label: '仓储侧执行判断', value: '有条件承接', detail: '若物流分 2 批发运,仓储侧可支持;但包装复核能力加强时段有压力,需要提前排班。', tone: 'warning' },
2535
+ { label: getLocaleText('FWC.94f21787580420227'), value: getLocaleText('FWC.a4121787581393855'), detail: getLocaleText('FWC.54ed1787577952165'), tone: 'healthy' },
2536
+ { label: getLocaleText('FWC.f3fa1787580421052'), value: getLocaleText('FWC.31391787581087124'), detail: getLocaleText('FWC.26de1787578001974'), tone: 'warning' },
2536
2537
  ],
2537
2538
  },
2538
2539
  finance: {
2539
2540
  roleKey: 'finance',
2540
- icon: '财',
2541
+ icon: getLocaleText('FWC.44811787581671048'),
2541
2542
  accent: '#263545',
2542
- title: '06 财务经理工作台',
2543
- subtitle: '目标标案相关的资金占用、成本增量与财务风险判断',
2544
- route: '财务测算',
2545
- scope: '财务中心',
2546
- quickActions: ['目标标案', '备货资金', '加急成本', '毛利测算', '风险审批'],
2543
+ title: getLocaleText('FWC.4d081787579724824'),
2544
+ subtitle: getLocaleText('FWC.20611787579033736'),
2545
+ route: getLocaleText('FWC.4a101787581410053'),
2546
+ scope: getLocaleText('FWC.44a31787581410604'),
2547
+ quickActions: [getLocaleText('FWC.0b4a1787581355495'), getLocaleText('FWC.16221787581359410'), getLocaleText('FWC.6cf01787581411146'), getLocaleText('FWC.47ce1787581378320'), getLocaleText('FWC.9c2c1787581377344')],
2547
2548
  kpis: [
2548
- { label: '待讨论标案', value: '1', detail: '当前财务侧确认对象', tone: 'info' },
2549
- { label: '标案金额', value: '待定', detail: '销售报价仍需补充', tone: 'neutral' },
2550
- { label: '提前备货金额', value: '¥132万', detail: 'D 面外壳提前备货', tone: 'warning' },
2551
- { label: '加急物流增量', value: '¥2.4万', detail: '第二批加急整车增量', tone: 'warning' },
2549
+ { label: getLocaleText('FWC.1d6e1787581081045'), value: '1', detail: getLocaleText('FWC.e27c1787579905541'), tone: 'info' },
2550
+ { label: getLocaleText('FWC.d6981787581411697'), value: getLocaleText('FWC.f4801787581655247'), detail: getLocaleText('FWC.a92a1787580021965'), tone: 'neutral' },
2551
+ { label: getLocaleText('FWC.c1741787580600876'), value: getLocaleText('FWC.80371787581088449'), detail: getLocaleText('FWC.2b0a1787579905352'), tone: 'warning' },
2552
+ { label: getLocaleText('FWC.a4ea1787580592147'), value: getLocaleText('FWC.74931787581089606'), detail: getLocaleText('FWC.04401787579905722'), tone: 'warning' },
2552
2553
  ],
2553
2554
  infoItems: [
2554
- { label: '产品', value: '14寸笔记本电脑' },
2555
- { label: '数量', value: '6000台' },
2556
- { label: '要求送达时间', value: '2026-07-15' },
2557
- { label: '销售评估的中标概率', value: '60%', tone: 'warning' },
2558
- { label: '交付地点', value: '上海' },
2559
- { label: '采购提前备货', value: 'D面外壳 2200件', tone: 'warning' },
2560
- { label: '物流方案', value: '第二批加急整车', tone: 'warning' },
2555
+ { label: getLocaleText('FWC.744e1787581633398'), value: getLocaleText('FWC.aae91787580018772') },
2556
+ { label: getLocaleText('FWC.5b081787581637432'), value: getLocaleText('FWC.e2761787581077415') },
2557
+ { label: getLocaleText('FWC.c4991787580590390'), value: '2026-07-15' },
2558
+ { label: getLocaleText('FWC.47841787579905906'), value: '60%', tone: 'warning' },
2559
+ { label: getLocaleText('FWC.54d21787581369487'), value: getLocaleText('FWC.b1f11787581641357') },
2560
+ { label: '采购提前备货', value: getLocaleText('FWC.c5001787579729547'), tone: 'warning' },
2561
+ { label: getLocaleText('FWC.45e01787581413083'), value: getLocaleText('FWC.48851787580403465'), tone: 'warning' },
2561
2562
  ],
2562
2563
  sections: [
2563
2564
  {
2564
2565
  id: 'finance-overview',
2565
2566
  title: '财务测算概览',
2566
- subtitle: '资金占用 / 成本增量 / 毛利影响',
2567
+ subtitle: getLocaleText('FWC.da5f1787579180077'),
2567
2568
  rows: [
2568
- { label: '备货资金', value: '¥132万', detail: 'D 面提前备货', tone: 'warning' },
2569
- { label: '加急物流增量', value: '¥2.4万', detail: '第二批加急整车', tone: 'warning' },
2570
- { label: '库存占用天数', value: '15-30天', detail: '资金占用需要控制', tone: 'neutral' },
2571
- { label: '预计毛利影响', value: '-0.4pp', detail: '需报价补偿', tone: 'warning' },
2572
- { label: '资金风险等级', value: '中', detail: '可讨论区间', tone: 'warning' },
2569
+ { label: getLocaleText('FWC.16221787581359410'), value: getLocaleText('FWC.80371787581088449'), detail: getLocaleText('FWC.e6c11787580402455'), tone: 'warning' },
2570
+ { label: getLocaleText('FWC.a4ea1787580592147'), value: getLocaleText('FWC.74931787581089606'), detail: getLocaleText('FWC.48851787580403465'), tone: 'warning' },
2571
+ { label: '库存占用天数', value: '15-30天', detail: getLocaleText('FWC.ada21787580022188'), tone: 'neutral' },
2572
+ { label: '预计毛利影响', value: '-0.4pp', detail: getLocaleText('FWC.ac051787581105016'), tone: 'warning' },
2573
+ { label: getLocaleText('FWC.ab221787580585674'), value: getLocaleText('FWC.cd6d1787581673119'), detail: getLocaleText('FWC.251a1787581105417'), tone: 'warning' },
2573
2574
  ],
2574
2575
  },
2575
2576
  {
2576
2577
  id: 'finance-stock',
2577
- title: '采购提前备货评估',
2578
- subtitle: '未中标可消耗性是财务判断关键',
2578
+ title: getLocaleText('FWC.49e11787580022415'),
2579
+ subtitle: getLocaleText('FWC.79881787579338327'),
2579
2580
  rows: [
2580
- { label: 'D面外壳 NB14-D', value: '2200件', detail: '单价 ¥600 · 备货金额 ¥132万 · 可消耗性高', tone: 'warning' },
2581
+ { label: getLocaleText('FWC.f4cb1787579593227'), value: getLocaleText('FWC.f4301787581104601'), detail: getLocaleText('FWC.315b1787578289513'), tone: 'warning' },
2581
2582
  ],
2582
2583
  },
2583
2584
  {
2584
2585
  id: 'finance-logistics',
2585
- title: '加急物流成本评估',
2586
- subtitle: '是否纳入报价或客户确认',
2586
+ title: getLocaleText('FWC.45411787580022640'),
2587
+ subtitle: getLocaleText('FWC.015a1787579594510'),
2587
2588
  rows: [
2588
- { label: '第二批加急整车', value: '¥2.4万', detail: '常规 ¥6.2万 / 加急 ¥8.6万 · 建议纳入报价', tone: 'warning' },
2589
+ { label: getLocaleText('FWC.48851787580403465'), value: getLocaleText('FWC.74931787581089606'), detail: getLocaleText('FWC.9e041787578289595'), tone: 'warning' },
2589
2590
  ],
2590
2591
  },
2591
2592
  ],
2592
2593
  riskRows: [
2593
- { label: '提前备货金额', value: '¥132万', detail: 'D 面外壳属于常用物料,需控制金额并完成审批', owner: '财务经理', tone: 'warning' },
2594
- { label: '加急物流成本', value: '¥2.4万', detail: '建议销售确认是否可转嫁或覆盖在最终报价中', owner: '销售 / 财务', tone: 'warning' },
2595
- { label: '标案金额', value: '待定', detail: '毛利测算需销售报价补充', owner: '销售经理', tone: 'warning' },
2594
+ { label: getLocaleText('FWC.c1741787580600876'), value: getLocaleText('FWC.80371787581088449'), detail: getLocaleText('FWC.bac21787579105993'), owner: getLocaleText('FWC.96201787581368994'), tone: 'warning' },
2595
+ { label: '加急物流成本', value: getLocaleText('FWC.74931787581089606'), detail: getLocaleText('FWC.b8bb1787579143453'), owner: getLocaleText('FWC.39dd1787580421567'), tone: 'warning' },
2596
+ { label: getLocaleText('FWC.d6981787581411697'), value: getLocaleText('FWC.f4801787581655247'), detail: getLocaleText('FWC.52c01787579593799'), owner: getLocaleText('FWC.70f81787581365181'), tone: 'warning' },
2596
2597
  ],
2597
2598
  conclusions: [
2598
- { label: '财务侧结论:提前备货', value: '需控制金额', detail: 'D 面外壳属于常用物料,即使未中标也易消耗,可接受提前备货,但需控制金额并完成审批。', tone: 'warning' },
2599
- { label: '财务侧结论:加急物流', value: '需销售确认', detail: '第二批加急整车产生额外物流成本,建议销售确认是否可转嫁或在最终报价中覆盖。', tone: 'warning' },
2599
+ { label: getLocaleText('FWC.2f1e1787579730757'), value: getLocaleText('FWC.b4681787581105837'), detail: getLocaleText('FWC.948d1787577983773'), tone: 'warning' },
2600
+ { label: getLocaleText('FWC.17d31787579731644'), value: getLocaleText('FWC.707d1787581106506'), detail: getLocaleText('FWC.06dd1787578015605'), tone: 'warning' },
2600
2601
  ],
2601
2602
  },
2602
2603
  };
@@ -2694,10 +2695,10 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
2694
2695
  */
2695
2696
  function referenceBidDataBoundaryItems(_data: CustomCanvasData): Array<Record<string, unknown>> {
2696
2697
  return [
2697
- { label: '绑定状态', value: '待补口径', tone: 'warning' },
2698
- { label: '真实问数', value: '未执行', tone: 'warning' },
2699
- { label: 'setData', value: '未写入', tone: 'neutral' },
2700
- { label: '预览来源', value: '截图语义', tone: 'info' },
2698
+ { label: getLocaleText('FWC.0eef1787581382089'), value: getLocaleText('FWC.2c061787581341369'), tone: 'warning' },
2699
+ { label: getLocaleText('FWC.f1871787581384357'), value: getLocaleText('FWC.4d811787581571767'), tone: 'warning' },
2700
+ { label: 'setData', value: getLocaleText('FWC.272c1787581572935'), tone: 'neutral' },
2701
+ { label: getLocaleText('FWC.20b41787581413621'), value: getLocaleText('FWC.767e1787581414174'), tone: 'info' },
2701
2702
  ];
2702
2703
  }
2703
2704
 
@@ -2707,7 +2708,7 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
2707
2708
  * @param fallback - Value shown when the item only contains internal sentinel text.
2708
2709
  * @returns User-facing metric value.
2709
2710
  */
2710
- function referenceBidSanitizedMetricValue(item: Record<string, unknown>, fallback = '待问数'): string {
2711
+ function referenceBidSanitizedMetricValue(item: Record<string, unknown>, fallback = getLocaleText('FWC.6b2b1787581565498')): string {
2711
2712
  const candidate = nestedBlockItemValue(item) || nestedBlockDisplayValue(item.value ?? item.amount ?? item.status, '');
2712
2713
  if (!candidate || candidate === '--') return fallback;
2713
2714
  if (/incidentList|structured_image|structured_.*fallback|business_input_required|image_timeout|fallback_business/i.test(candidate)) {
@@ -2740,8 +2741,8 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
2740
2741
  if (usableItems.length > 0) return usableItems.slice(0, 2);
2741
2742
  }
2742
2743
  return [
2743
- { label: '今晚 23:30 订单中台灰度割接', value: '需审批', tone: 'warning' },
2744
- { label: '周五机房巡检与备份巡检', value: '已排期', tone: 'neutral' },
2744
+ { label: getLocaleText('FWC.40161787579201936'), value: getLocaleText('FWC.c8981787581569105'), tone: 'warning' },
2745
+ { label: getLocaleText('FWC.27f81787579589045'), value: getLocaleText('FWC.641b1787581568531'), tone: 'neutral' },
2745
2746
  ];
2746
2747
  }
2747
2748
 
@@ -2755,11 +2756,11 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
2755
2756
  const rawItems = block ? nestedBlockRawItems(block) : [];
2756
2757
  if (rawItems.length >= 5 && !nestedBlockItemsLookTooWeak(rawItems)) return rawItems.slice(0, 5);
2757
2758
  return [
2758
- { label: '经营盈利', value: '62', tone: 'warning' },
2759
- { label: '财务资金', value: '58', tone: 'critical' },
2760
- { label: '供应链', value: '69', tone: 'warning' },
2761
- { label: '组织人力', value: '71', tone: 'warning' },
2762
- { label: '合规安全', value: '76', tone: 'healthy' },
2759
+ { label: getLocaleText('FWC.b7071787581415311'), value: '62', tone: 'warning' },
2760
+ { label: getLocaleText('FWC.17df1787581372704'), value: '58', tone: 'critical' },
2761
+ { label: getLocaleText('FWC.a4271787581584655'), value: '69', tone: 'warning' },
2762
+ { label: getLocaleText('FWC.23471787581348029'), value: '71', tone: 'warning' },
2763
+ { label: getLocaleText('FWC.c8e11787581374883'), value: '76', tone: 'healthy' },
2763
2764
  ];
2764
2765
  }
2765
2766
 
@@ -2778,8 +2779,8 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
2778
2779
  });
2779
2780
  if (matches.length > 0) return matches.slice(0, 2);
2780
2781
  return [
2781
- { label: '风险:盈利结构恶化', detail: '低毛利业务占比提升,亏损单元拖累利润底线。', value: '收缩亏损主体', tone: 'critical' },
2782
- { label: '风险:资金安全边际下降', detail: '逾期应收叠加现金消耗,需锁定重点客户回款。', value: '专项回款督办', tone: 'warning' },
2782
+ { label: getLocaleText('FWC.a3181787579903271'), detail: getLocaleText('FWC.fe8d1787579127509'), value: getLocaleText('FWC.29b51787580586954'), tone: 'critical' },
2783
+ { label: getLocaleText('FWC.3f761787579587790'), detail: getLocaleText('FWC.4ac21787579131370'), value: getLocaleText('FWC.04331787580589409'), tone: 'warning' },
2783
2784
  ];
2784
2785
  }
2785
2786
 
@@ -2812,12 +2813,12 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
2812
2813
  const rawItems = block ? nestedBlockRawItems(block) : [];
2813
2814
  if (rawItems.length >= 4 && !nestedBlockItemsLookTooWeak(rawItems)) return rawItems.slice(0, 6);
2814
2815
  return [
2815
- { label: '总部', value: '96%', progress: 96, tone: 'healthy' },
2816
- { label: '华北', value: '93%', progress: 93, tone: 'healthy' },
2817
- { label: '华东', value: '64%', progress: 64, tone: 'critical' },
2818
- { label: '西南', value: '82%', progress: 82, tone: 'warning' },
2819
- { label: '制造', value: '58%', progress: 58, tone: 'critical' },
2820
- { label: '投资', value: '61%', progress: 61, tone: 'critical' },
2816
+ { label: getLocaleText('FWC.a8fe1787581656545'), value: '96%', progress: 96, tone: 'healthy' },
2817
+ { label: getLocaleText('FWC.b0091787581617083'), value: '93%', progress: 93, tone: 'healthy' },
2818
+ { label: getLocaleText('FWC.698d1787581617928'), value: '64%', progress: 64, tone: 'critical' },
2819
+ { label: getLocaleText('FWC.19761787581657197'), value: '82%', progress: 82, tone: 'warning' },
2820
+ { label: getLocaleText('FWC.71921787581621205'), value: '58%', progress: 58, tone: 'critical' },
2821
+ { label: getLocaleText('FWC.facc1787581657889'), value: '61%', progress: 61, tone: 'critical' },
2821
2822
  ];
2822
2823
  }
2823
2824
 
@@ -2830,7 +2831,7 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
2830
2831
  const block = referenceNestedBlock(data, /利润底线|底线失守|亏损源/);
2831
2832
  if (block && !nestedBlockItemsLookTooWeakForVisualKind(nestedBlockRawItems(block), 'simpleList')) return nestedBlockItems(block).slice(0, 2);
2832
2833
  return [
2833
- { label: '利润底线失守', detail: '华东、制造、投资连续两期未达底线。', value: '专项复盘', tone: 'critical' },
2834
+ { label: getLocaleText('FWC.f7391787580587354'), detail: getLocaleText('FWC.b87c1787579202496'), value: getLocaleText('FWC.e2de1787581331636'), tone: 'critical' },
2834
2835
  ];
2835
2836
  }
2836
2837
 
@@ -2841,8 +2842,8 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
2841
2842
  */
2842
2843
  function referenceFinanceRiskMetricItems(data: CustomCanvasData): Array<Record<string, unknown>> {
2843
2844
  return [
2844
- referenceMetricItem(data, '逾期应收风险敞口', /逾期应收|风险敞口/, '1.82 亿', 'critical'),
2845
- referenceMetricItem(data, '经营现金流净额', /经营现金流|现金流净额/, '-3,680 万', 'critical'),
2845
+ referenceMetricItem(data, getLocaleText('FWC.c7cd1787580017359'), /逾期应收|风险敞口/, '1.82 亿', 'critical'),
2846
+ referenceMetricItem(data, getLocaleText('FWC.941b1787580399238'), /经营现金流|现金流净额/, getLocaleText('FWC.8de71787580022860'), 'critical'),
2846
2847
  ];
2847
2848
  }
2848
2849
 
@@ -2855,7 +2856,7 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
2855
2856
  const block = referenceNestedBlock(data, /坏账|预警|隐患/);
2856
2857
  if (block && !nestedBlockItemsLookTooWeakForVisualKind(nestedBlockRawItems(block), 'simpleList')) return nestedBlockItems(block).slice(0, 2);
2857
2858
  return [
2858
- { label: '预警:坏账隐患上升', detail: '建议收紧授信,重点客户专项回款督办。', value: '红线', tone: 'critical' },
2859
+ { label: getLocaleText('FWC.23281787579903450'), detail: getLocaleText('FWC.13e21787579169226'), value: getLocaleText('FWC.fa531787581624316'), tone: 'critical' },
2859
2860
  ];
2860
2861
  }
2861
2862
 
@@ -2881,8 +2882,8 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
2881
2882
  const value = nestedBlockItemValue(item) || nestedBlockItemLabel(item, index);
2882
2883
  const label = nestedBlockItemLabel(item, index);
2883
2884
  if (!value || /[亿万%红线预警]/.test(value)) return value;
2884
- if (label.includes('逾期应收') || label.includes('风险敞口')) return `${value} 亿`;
2885
- if (label.includes('现金流') || label.includes('净额')) return `${value} 万`;
2885
+ if (label.includes(getLocaleText('FWC.727c1787581416474')) || label.includes(getLocaleText('FWC.8bfe1787581415889'))) return getLocaleText('FWC.e43c1787579732167', {p0: value});
2886
+ if (label.includes(getLocaleText('FWC.8d661787581567301')) || label.includes(getLocaleText('FWC.d2dc1787581658782'))) return getLocaleText('FWC.85d41787579730069', {p0: value});
2886
2887
  return value;
2887
2888
  }
2888
2889
 
@@ -2893,9 +2894,9 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
2893
2894
  */
2894
2895
  function referenceHrOrganizationMetrics(data: CustomCanvasData): Array<Record<string, unknown>> {
2895
2896
  return [
2896
- referenceMetricItem(data, '平均司龄', /平均司龄|司龄/, '4.6 年', 'info'),
2897
- referenceMetricItem(data, '编制使用率', /编制使用|编制达成|达成率/, '92%', 'healthy'),
2898
- referenceMetricItem(data, '本月关键异动', /关键异动|异动趋势|流动/, '18 人', 'warning'),
2897
+ referenceMetricItem(data, getLocaleText('FWC.31381787581344327'), /平均司龄|司龄/, getLocaleText('FWC.86ca1787581106917'), 'info'),
2898
+ referenceMetricItem(data, getLocaleText('FWC.bd261787581074426'), /编制使用|编制达成|达成率/, '92%', 'healthy'),
2899
+ referenceMetricItem(data, getLocaleText('FWC.f5e21787580585149'), /关键异动|异动趋势|流动/, getLocaleText('FWC.849b1787581417061'), 'warning'),
2899
2900
  ];
2900
2901
  }
2901
2902
 
@@ -2911,10 +2912,10 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
2911
2912
  if (rawItems.length > 0 && !nestedBlockItemsLookTooWeakForVisualKind(rawItems, 'simpleList')) return nestedBlockItems(block).slice(0, 4);
2912
2913
  }
2913
2914
  return [
2914
- { label: '研发中心', value: '96%', detail: '核心岗位补齐', tone: 'healthy' },
2915
- { label: '交付中心', value: '88%', detail: '区域交付缺口', tone: 'warning' },
2916
- { label: '营销中心', value: '91%', detail: '关键岗位稳定', tone: 'healthy' },
2917
- { label: '职能平台', value: '84%', detail: '共享岗位待补', tone: 'warning' },
2915
+ { label: getLocaleText('FWC.a51b1787581336337'), value: '96%', detail: '核心岗位补齐', tone: 'healthy' },
2916
+ { label: getLocaleText('FWC.662e1787581417952'), value: '88%', detail: getLocaleText('FWC.466a1787580587786'), tone: 'warning' },
2917
+ { label: getLocaleText('FWC.c1aa1787581347604'), value: '91%', detail: '关键岗位稳定', tone: 'healthy' },
2918
+ { label: getLocaleText('FWC.b1141787581376376'), value: '84%', detail: '共享岗位待补', tone: 'warning' },
2918
2919
  ];
2919
2920
  }
2920
2921
 
@@ -2930,10 +2931,10 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
2930
2931
  : [];
2931
2932
  if (strongRows.length >= 3) return strongRows;
2932
2933
  return [
2933
- referenceMetricItem(data, '长期迟到', /长期迟到|迟到/, '12 人', 'warning'),
2934
- referenceMetricItem(data, '旷工异常', /旷工|缺勤/, '4 人', 'critical'),
2935
- referenceMetricItem(data, '请假超标', /请假|超标/, '21 人', 'warning'),
2936
- { label: '劳动纠纷待处理', value: '3 件', detail: '需 HRBP 跟进', tone: 'critical' },
2934
+ referenceMetricItem(data, getLocaleText('FWC.245e1787581348445'), /长期迟到|迟到/, getLocaleText('FWC.73e91787581418540'), 'warning'),
2935
+ referenceMetricItem(data, getLocaleText('FWC.ddef1787581345495'), /旷工|缺勤/, getLocaleText('FWC.ff591787581585558'), 'critical'),
2936
+ referenceMetricItem(data, getLocaleText('FWC.ba661787581345914'), /请假|超标/, getLocaleText('FWC.d52f1787581419125'), 'warning'),
2937
+ { label: getLocaleText('FWC.6f4c1787580399714'), value: getLocaleText('FWC.53ae1787581584049'), detail: getLocaleText('FWC.18151787579906096'), tone: 'critical' },
2937
2938
  ];
2938
2939
  }
2939
2940
 
@@ -2944,10 +2945,10 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
2944
2945
  */
2945
2946
  function referenceHrPeopleCostItems(data: CustomCanvasData): Array<Record<string, unknown>> {
2946
2947
  return [
2947
- referenceMetricItem(data, '人力总成本', /人力总成本|薪酬成本/, '1.28 亿', 'warning'),
2948
- referenceMetricItem(data, '薪酬结构占比', /薪酬结构|结构/, '68%', 'info'),
2949
- referenceMetricItem(data, '成本趋势', /成本趋势|趋势/, '+6.8%', 'warning'),
2950
- referenceMetricItem(data, '人效排行', /人效排行|人均产值|人效/, 'Top 5', 'healthy'),
2948
+ referenceMetricItem(data, getLocaleText('FWC.ce0f1787581072146'), /人力总成本|薪酬成本/, '1.28 亿', 'warning'),
2949
+ referenceMetricItem(data, getLocaleText('FWC.8f911787580584100'), /薪酬结构|结构/, '68%', 'info'),
2950
+ referenceMetricItem(data, getLocaleText('FWC.64ae1787581349468'), /成本趋势|趋势/, '+6.8%', 'warning'),
2951
+ referenceMetricItem(data, getLocaleText('FWC.5bc11787581346765'), /人效排行|人均产值|人效/, 'Top 5', 'healthy'),
2951
2952
  ];
2952
2953
  }
2953
2954
 
@@ -2961,11 +2962,11 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
2961
2962
  const rows = block ? nestedBlockBarItems(block) : [];
2962
2963
  if (rows.length > 0) return rows.slice(0, 5);
2963
2964
  return [
2964
- { label: '1月', value: '82%', progress: 52, tone: 'neutral' },
2965
- { label: '2月', value: '86%', progress: 58, tone: 'info' },
2966
- { label: '3月', value: '91%', progress: 66, tone: 'warning' },
2967
- { label: '4月', value: '95%', progress: 74, tone: 'warning' },
2968
- { label: '5月', value: '98%', progress: 82, tone: 'critical' },
2965
+ { label: getLocaleText('FWC.a13d1787581652790'), value: '82%', progress: 52, tone: 'neutral' },
2966
+ { label: getLocaleText('FWC.87d21787581653486'), value: '86%', progress: 58, tone: 'info' },
2967
+ { label: getLocaleText('FWC.b09d1787581654537'), value: '91%', progress: 66, tone: 'warning' },
2968
+ { label: getLocaleText('FWC.52d51787581659444'), value: '95%', progress: 74, tone: 'warning' },
2969
+ { label: getLocaleText('FWC.bc961787581660154'), value: '98%', progress: 82, tone: 'critical' },
2969
2970
  ];
2970
2971
  }
2971
2972
 
@@ -2976,9 +2977,9 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
2976
2977
  */
2977
2978
  function referenceHrTalentMetrics(data: CustomCanvasData): Array<Record<string, unknown>> {
2978
2979
  return [
2979
- referenceMetricItem(data, '储备干部', /储备干部|储备/, '42 人', 'healthy'),
2980
- referenceMetricItem(data, '继任计划', /继任计划|继任/, '76%', 'info'),
2981
- referenceMetricItem(data, '培训完成', /培训完成|培训/, '88%', 'healthy'),
2980
+ referenceMetricItem(data, getLocaleText('FWC.ab4e1787581336836'), /储备干部|储备/, getLocaleText('FWC.5dd51787581419702'), 'healthy'),
2981
+ referenceMetricItem(data, getLocaleText('FWC.d6e81787581335591'), /继任计划|继任/, '76%', 'info'),
2982
+ referenceMetricItem(data, getLocaleText('FWC.4abf1787581334014'), /培训完成|培训/, '88%', 'healthy'),
2982
2983
  ];
2983
2984
  }
2984
2985
 
@@ -2997,10 +2998,10 @@ export function createReferenceCompositeBindings(context: ReferenceCompositeCont
2997
2998
  return nestedBlockItems(rankingBlock).slice(0, 4);
2998
2999
  }
2999
3000
  return [
3000
- { label: '关键岗位入职确认', value: '5 项', detail: '本周完成', tone: 'warning' },
3001
- { label: '干部继任评审', value: '3 项', detail: '待业务负责人确认', tone: 'warning' },
3002
- { label: '转正与调薪审批', value: '11 项', detail: '集中处理', tone: 'neutral' },
3003
- { label: '低人效团队复盘', value: '2 个', detail: '需专项辅导', tone: 'critical' },
3001
+ { label: getLocaleText('FWC.d2b81787580017161'), value: getLocaleText('FWC.17101787581586160'), detail: getLocaleText('FWC.08241787581414733'), tone: 'warning' },
3002
+ { label: getLocaleText('FWC.41f61787580586196'), value: getLocaleText('FWC.11fa1787581586758'), detail: getLocaleText('FWC.579f1787580023082'), tone: 'warning' },
3003
+ { label: getLocaleText('FWC.1a561787580400725'), value: getLocaleText('FWC.ea2a1787581420286'), detail: getLocaleText('FWC.d7ba1787581420875'), tone: 'neutral' },
3004
+ { label: getLocaleText('FWC.3d371787580400463'), value: getLocaleText('FWC.4c761787581587352'), detail: getLocaleText('FWC.442a1787581107339'), tone: 'critical' },
3004
3005
  ];
3005
3006
  }
3006
3007