weaver-e10-builder 1.6.11 → 1.6.12

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 (144) hide show
  1. package/dist/commands/form-browser-definition.d.ts.map +1 -1
  2. package/dist/commands/form-browser-definition.js +108 -7
  3. package/dist/commands/form-browser-definition.js.map +1 -1
  4. package/dist/commands/form-browser-scope-rules.d.ts +27 -0
  5. package/dist/commands/form-browser-scope-rules.d.ts.map +1 -0
  6. package/dist/commands/form-browser-scope-rules.js +141 -0
  7. package/dist/commands/form-browser-scope-rules.js.map +1 -0
  8. package/dist/commands/form-browser-scope-tree.d.ts +14 -0
  9. package/dist/commands/form-browser-scope-tree.d.ts.map +1 -0
  10. package/dist/commands/form-browser-scope-tree.js +115 -0
  11. package/dist/commands/form-browser-scope-tree.js.map +1 -0
  12. package/dist/commands/matrix-maintainer.d.ts +3 -0
  13. package/dist/commands/matrix-maintainer.d.ts.map +1 -0
  14. package/dist/commands/matrix-maintainer.js +117 -0
  15. package/dist/commands/matrix-maintainer.js.map +1 -0
  16. package/dist/commands/matrix.d.ts.map +1 -1
  17. package/dist/commands/matrix.js +2 -0
  18. package/dist/commands/matrix.js.map +1 -1
  19. package/dist/commands/report-validate.d.ts.map +1 -1
  20. package/dist/commands/report-validate.js +36 -0
  21. package/dist/commands/report-validate.js.map +1 -1
  22. package/dist/commands/role.d.ts.map +1 -1
  23. package/dist/commands/role.js +354 -0
  24. package/dist/commands/role.js.map +1 -1
  25. package/dist/commands/special.d.ts.map +1 -1
  26. package/dist/commands/special.js +67 -31
  27. package/dist/commands/special.js.map +1 -1
  28. package/dist/commands/wf-form.d.ts.map +1 -1
  29. package/dist/commands/wf-form.js +1 -121
  30. package/dist/commands/wf-form.js.map +1 -1
  31. package/dist/commands/workflow-layout-components.d.ts +3 -0
  32. package/dist/commands/workflow-layout-components.d.ts.map +1 -0
  33. package/dist/commands/workflow-layout-components.js +36 -0
  34. package/dist/commands/workflow-layout-components.js.map +1 -0
  35. package/dist/commands/workflow-node-batch.d.ts +3 -0
  36. package/dist/commands/workflow-node-batch.d.ts.map +1 -0
  37. package/dist/commands/workflow-node-batch.js +136 -0
  38. package/dist/commands/workflow-node-batch.js.map +1 -0
  39. package/dist/commands/workflow-node-opinion.d.ts +3 -0
  40. package/dist/commands/workflow-node-opinion.d.ts.map +1 -0
  41. package/dist/commands/workflow-node-opinion.js +51 -0
  42. package/dist/commands/workflow-node-opinion.js.map +1 -0
  43. package/dist/commands/workflow-node-reject.js +1 -1
  44. package/dist/commands/workflow-node-reject.js.map +1 -1
  45. package/dist/commands/workflow-node.d.ts.map +1 -1
  46. package/dist/commands/workflow-node.js +4 -3
  47. package/dist/commands/workflow-node.js.map +1 -1
  48. package/dist/index.js +6 -2
  49. package/dist/index.js.map +1 -1
  50. package/dist/services/actionflow/components/send_message.d.ts.map +1 -1
  51. package/dist/services/actionflow/components/send_message.js +8 -3
  52. package/dist/services/actionflow/components/send_message.js.map +1 -1
  53. package/dist/services/actionflow/context_preflight.js +1 -1
  54. package/dist/services/actionflow/context_preflight.js.map +1 -1
  55. package/dist/services/actionflow/formula_service.d.ts +1 -0
  56. package/dist/services/actionflow/formula_service.d.ts.map +1 -1
  57. package/dist/services/actionflow/formula_service.js +107 -31
  58. package/dist/services/actionflow/formula_service.js.map +1 -1
  59. package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
  60. package/dist/services/actionflow/preflight_service.js +4 -1
  61. package/dist/services/actionflow/preflight_service.js.map +1 -1
  62. package/dist/services/form-layout-describe.d.ts.map +1 -1
  63. package/dist/services/form-layout-describe.js +3 -2
  64. package/dist/services/form-layout-describe.js.map +1 -1
  65. package/dist/services/form-layout-document.d.ts.map +1 -1
  66. package/dist/services/form-layout-document.js +2 -1
  67. package/dist/services/form-layout-document.js.map +1 -1
  68. package/dist/services/matrix-maintainer.d.ts +27 -0
  69. package/dist/services/matrix-maintainer.d.ts.map +1 -0
  70. package/dist/services/matrix-maintainer.js +142 -0
  71. package/dist/services/matrix-maintainer.js.map +1 -0
  72. package/dist/services/report/drill.d.ts +74 -0
  73. package/dist/services/report/drill.d.ts.map +1 -0
  74. package/dist/services/report/drill.js +259 -0
  75. package/dist/services/report/drill.js.map +1 -0
  76. package/dist/services/role-function-permission.d.ts +12 -0
  77. package/dist/services/role-function-permission.d.ts.map +1 -0
  78. package/dist/services/role-function-permission.js +46 -0
  79. package/dist/services/role-function-permission.js.map +1 -0
  80. package/dist/services/special-layout.d.ts +113 -0
  81. package/dist/services/special-layout.d.ts.map +1 -0
  82. package/dist/services/special-layout.js +178 -0
  83. package/dist/services/special-layout.js.map +1 -0
  84. package/dist/services/workflow-base-settings.d.ts +1 -10
  85. package/dist/services/workflow-base-settings.d.ts.map +1 -1
  86. package/dist/services/workflow-field-permission-route.d.ts +15 -41
  87. package/dist/services/workflow-field-permission-route.d.ts.map +1 -1
  88. package/dist/services/workflow-field-permission-route.js +23 -8
  89. package/dist/services/workflow-field-permission-route.js.map +1 -1
  90. package/dist/services/workflow-layout-components.d.ts +52 -0
  91. package/dist/services/workflow-layout-components.d.ts.map +1 -0
  92. package/dist/services/workflow-layout-components.js +66 -0
  93. package/dist/services/workflow-layout-components.js.map +1 -0
  94. package/dist/services/workflow-layout-draft.d.ts +49 -0
  95. package/dist/services/workflow-layout-draft.d.ts.map +1 -0
  96. package/dist/services/workflow-layout-draft.js +98 -0
  97. package/dist/services/workflow-layout-draft.js.map +1 -0
  98. package/dist/services/workflow-node-batch-spec.d.ts +122 -0
  99. package/dist/services/workflow-node-batch-spec.d.ts.map +1 -0
  100. package/dist/services/workflow-node-batch-spec.js +496 -0
  101. package/dist/services/workflow-node-batch-spec.js.map +1 -0
  102. package/dist/services/workflow-node-batch.d.ts +73 -0
  103. package/dist/services/workflow-node-batch.d.ts.map +1 -0
  104. package/dist/services/workflow-node-batch.js +328 -0
  105. package/dist/services/workflow-node-batch.js.map +1 -0
  106. package/dist/services/workflow-node-opinion-description.d.ts +12 -0
  107. package/dist/services/workflow-node-opinion-description.d.ts.map +1 -0
  108. package/dist/services/workflow-node-opinion-description.js +52 -0
  109. package/dist/services/workflow-node-opinion-description.js.map +1 -0
  110. package/dist/services/workflow-node-opinion-layout.d.ts +22 -0
  111. package/dist/services/workflow-node-opinion-layout.d.ts.map +1 -0
  112. package/dist/services/workflow-node-opinion-layout.js +113 -0
  113. package/dist/services/workflow-node-opinion-layout.js.map +1 -0
  114. package/dist/services/workflow-node-opinion-range.d.ts +21 -0
  115. package/dist/services/workflow-node-opinion-range.d.ts.map +1 -0
  116. package/dist/services/workflow-node-opinion-range.js +74 -0
  117. package/dist/services/workflow-node-opinion-range.js.map +1 -0
  118. package/dist/services/workflow-node-opinion.d.ts +43 -0
  119. package/dist/services/workflow-node-opinion.d.ts.map +1 -0
  120. package/dist/services/workflow-node-opinion.js +198 -0
  121. package/dist/services/workflow-node-opinion.js.map +1 -0
  122. package/dist/services/workflow-opinion-settings.d.ts +14 -0
  123. package/dist/services/workflow-opinion-settings.d.ts.map +1 -1
  124. package/dist/services/workflow-opinion-settings.js +18 -2
  125. package/dist/services/workflow-opinion-settings.js.map +1 -1
  126. package/package.json +1 -1
  127. package/skill-docs/SKILL.md +164 -162
  128. package/skill-docs/_catalog.md +3 -2
  129. package/skill-docs/actionflows/references/components/message/SendMessage.md +32 -30
  130. package/skill-docs/references/common/guide-plan-template.md +4 -1
  131. package/skill-docs/references/common/map.md +28 -4
  132. package/skill-docs/references/common/ref-cli-commands.md +14 -4
  133. package/skill-docs/references/form/guide-browser-definition.md +2 -219
  134. package/skill-docs/references/form/guide-browser-scope.md +285 -0
  135. package/skill-docs/references/form/guide-create-form.md +1 -1
  136. package/skill-docs/references/hrm/guide-matrix.md +276 -245
  137. package/skill-docs/references/hrm/guide-role.md +77 -0
  138. package/skill-docs/references/report/drilldown-report-guide.md +17 -1
  139. package/skill-docs/references/report/event-hreflink-guide.md +2 -0
  140. package/skill-docs/references/report/query-condition-api-guide.md +29 -0
  141. package/skill-docs/references/workflow/guide-layout-components.md +26 -0
  142. package/skill-docs/references/workflow/guide-node-opinion.md +58 -0
  143. package/skill-docs/references/workflow/guide-workflow.md +43 -0
  144. package/skill-docs/references/form/guide-ebuilder-scope.md +0 -82
@@ -852,22 +852,104 @@ function sendMessageFormulaSwitchType(formula) {
852
852
  const configObject = formula?.configObject && typeof formula.configObject === 'object' ? formula.configObject : {};
853
853
  return String(config?.switchType || configObject.switchType || '').trim().toLowerCase();
854
854
  }
855
- function sendMessageDynamicObjectFormula(receiver, objectType, meta, appId, sourceId) {
855
+ function sendMessageTargetType(objectType, receiver) {
856
+ const seclevel = receiver.seclevel;
857
+ const attributes = receiver.departmentAttribute ?? receiver.department_attribute;
858
+ const subordinate = Boolean(seclevel) && Array.isArray(attributes) && attributes.includes('subordinate');
859
+ const positionLevel = String(receiver.positionLevel ?? receiver.position_level ?? '');
860
+ const codes = {
861
+ resource: 1, department: subordinate ? 3 : 2, subcompany: subordinate ? 6 : 5,
862
+ role: 10, group: seclevel ? 14 : 1411,
863
+ position: positionLevel === '2' ? 13 : positionLevel === '3' ? 12 : 1311,
864
+ external: 110, employeeScope: 998, employeeShare: 999, employeeOrganization: 997,
865
+ all: 11, allExternal: 1101,
866
+ };
867
+ return codes[objectType];
868
+ }
869
+ function markSendMessageAssign(formula) {
870
+ let config = formula.config;
871
+ if (typeof config === 'string') {
872
+ try {
873
+ config = JSON.parse(config);
874
+ }
875
+ catch {
876
+ throw new Error('SendMessage 接收人公式 config 不是有效 JSON');
877
+ }
878
+ }
879
+ const result = { ...formula, config: { ...(config && typeof config === 'object' ? config : {}), switchType: 'assign' } };
880
+ if (formula.configObject && typeof formula.configObject === 'object')
881
+ result.configObject = { ...formula.configObject, switchType: 'assign' };
882
+ return result;
883
+ }
884
+ function validateSendMessageContextFormula(formula) {
885
+ if (String(formula.type || '') !== '3')
886
+ return;
887
+ let config = formula.config;
888
+ if (typeof config === 'string') {
889
+ try {
890
+ config = JSON.parse(config);
891
+ }
892
+ catch {
893
+ config = {};
894
+ }
895
+ }
896
+ if (!config || typeof config !== 'object')
897
+ config = {};
898
+ const missing = [
899
+ !String(formula.source ?? '').trim() && 'source',
900
+ !String(formula.frontId ?? '').trim() && 'frontId',
901
+ !String(config.comId ?? '').trim() && 'config.comId',
902
+ !String(config.comType ?? '').trim() && 'config.comType',
903
+ !String(config.paramKey ?? '').trim() && 'config.paramKey',
904
+ !String(config.fieldInfo?.tablePrimaryKey ?? '').trim() && 'config.fieldInfo.tablePrimaryKey',
905
+ ].filter(Boolean);
906
+ if (missing.length)
907
+ throw new Error(`SendMessage 动态接收人上下文公式缺少 ${missing.join('、')};请先查询 getComponentContext 并选择真实字段`);
908
+ }
909
+ export function validateSendMessageShareList(shareList) {
910
+ if (!Array.isArray(shareList))
911
+ throw new Error('SendMessage.shareList 必须是数组');
912
+ for (const [index, item] of shareList.entries()) {
913
+ if (!item || typeof item !== 'object')
914
+ throw new Error(`SendMessage.shareList[${index}] 必须是对象`);
915
+ const objectType = String(item.objType || '');
916
+ const formula = item[sendMessageObjectValueField(objectType)];
917
+ if (!formula || typeof formula !== 'object')
918
+ continue;
919
+ const switchType = sendMessageFormulaSwitchType(formula);
920
+ if (String(formula.type || '') === '3' && switchType !== 'fixvalue') {
921
+ if (String(item.targetId ?? '') !== 'esbAssign') {
922
+ throw new Error(`SendMessage.shareList[${index}] 动态接收人的 targetId 必须为 esbAssign`);
923
+ }
924
+ validateSendMessageContextFormula(formula);
925
+ }
926
+ }
927
+ }
928
+ function sendMessageDynamicObjectFormula(receiver, meta, appId, eventId) {
856
929
  const kind = String(receiver.kind || receiver.assignmentKind || '').toLowerCase();
857
930
  const rawType = String(receiver.type || '').toLowerCase();
858
931
  const dynamicKind = kind || (rawType === 'context' || rawType === 'reference' || rawType === 'user_reference' ? rawType : '');
859
932
  if (!dynamicKind || dynamicKind === 'fixed')
860
933
  return null;
861
- const key = String(receiver.paramKey || receiver.key
862
- || (dynamicKind === 'context' || dynamicKind === 'reference' || dynamicKind === 'user_reference' ? receiver.id : '')
863
- || '').trim();
864
- if (!key)
865
- return null;
934
+ const validKinds = ['context', 'reference', 'user_reference', 'system_variable', 'variable', 'constant', 'function', 'formula', 'query_result', 'transform'];
935
+ if (!validKinds.includes(dynamicKind))
936
+ throw new Error(`SendMessage 接收人动态赋值类型 '${dynamicKind}' 不支持`);
937
+ const key = String(receiver.paramKey || receiver.key || receiver.id || '').trim();
938
+ if (!key && !['function', 'query_result'].includes(dynamicKind))
939
+ throw new Error(`SendMessage 接收人 ${dynamicKind} 缺少字段路径或资源 ID`);
940
+ if (['context', 'reference', 'user_reference'].includes(dynamicKind) && !String(receiver.paramKey || receiver.key || '').trim()) {
941
+ throw new Error('SendMessage 动态接收人缺少 getComponentContext 返回的 paramKey');
942
+ }
943
+ const requestedSource = String(receiver.comId || receiver.source || '').trim();
944
+ if (['context', 'reference', 'user_reference'].includes(dynamicKind)
945
+ && (!requestedSource || ['event', 'event_1', 'trigger'].includes(requestedSource)) && !eventId) {
946
+ throw new Error('SendMessage 动态接收人缺少真实的上游组件来源');
947
+ }
866
948
  const label = String(receiver.label || receiver.name || key);
867
949
  const formula = dynamicKind === 'system_variable'
868
950
  ? formulaSystemVar(key)
869
- : buildAssignBean({ kind: dynamicKind === 'reference' || dynamicKind === 'user_reference' ? 'context' : dynamicKind, paramKey: key, label, ...receiver }, key, 'string', meta, appId, sourceId);
870
- return { formula };
951
+ : buildAssignBean({ ...receiver, kind: dynamicKind === 'reference' || dynamicKind === 'user_reference' ? 'context' : dynamicKind, ...(receiver.paramKey || receiver.key ? { paramKey: receiver.paramKey || receiver.key } : {}), label }, key, 'string', meta, appId, eventId);
952
+ return { formula: markSendMessageAssign(formula) };
871
953
  }
872
954
  export function buildShareList(receiver, meta, appId = '', eventId = '') {
873
955
  if (!receiver || typeof receiver !== 'object')
@@ -892,24 +974,10 @@ export function buildShareList(receiver, meta, appId = '', eventId = '') {
892
974
  const receiverFormulaSwitchType = receiverFormula && typeof receiverFormula === 'object'
893
975
  ? sendMessageFormulaSwitchType(receiverFormula)
894
976
  : receiver.config ? sendMessageFormulaSwitchType(receiver) : '';
895
- const dynamic = receiverFormulaSwitchType === 'fixvalue'
896
- ? null : sendMessageDynamicObjectFormula(receiver, objectType, meta, appId, sourceId);
897
- if (dynamic) {
898
- const switchType = sendMessageFormulaSwitchType(dynamic.formula);
899
- const targetId = switchType === 'fixvalue'
900
- ? String(dynamic.formula.value ?? receiver.value ?? receiver.id ?? '')
901
- : 'esbAssign';
902
- const entry = {
903
- sourceId, permissionId: 'esb', permissionType: 1, objType: objectType,
904
- // McSendMsgComponent.formatShareBean 仅在这个哨兵值下才会把 obj_id
905
- // / obj_id_<objType> 反序列化为 FormulaBean 并交给 eval.getObject 求值。
906
- targetId, sourceType: 1, targetType: 1, id: genSfId(),
907
- [valueField]: dynamic.formula,
908
- };
909
- if (objectType === 'resource')
910
- entry.user_type = String(receiver.userType || '1');
911
- return [entry];
912
- }
977
+ const semanticFormula = receiverFormula && typeof receiverFormula === 'object' && (receiverFormula.kind || receiverFormula.assignmentKind)
978
+ ? receiverFormula : null;
979
+ const dynamic = receiverFormulaSwitchType === 'fixvalue' ? null
980
+ : sendMessageDynamicObjectFormula(semanticFormula || receiver, meta, appId, eventId);
913
981
  // 前端 transMultData 会把 type=8 多选公式拆成多条 shareList;CLI 也支持
914
982
  // 直接传 formula/formulaData,避免把前端 multipleSelect 容器原样塞进单条记录。
915
983
  const container = receiver.formula || receiver.formulaData || receiver.objectFormula;
@@ -923,8 +991,10 @@ export function buildShareList(receiver, meta, appId = '', eventId = '') {
923
991
  const pname = String(receiver.name ?? receiver.label ?? '').trim();
924
992
  persons = pid ? [{ id: pid, name: pname }] : [];
925
993
  }
994
+ if (dynamic)
995
+ persons = [{ formula: dynamic.formula }];
926
996
  if (!persons.length && containerChildren.length)
927
- persons = containerChildren.map((formula) => ({ formula }));
997
+ persons = containerChildren.map((formula) => ({ formula: sendMessageFormulaSwitchType(container) === 'assign' ? markSendMessageAssign(formula) : formula }));
928
998
  if (!persons.length && singleFormula)
929
999
  persons = [{ formula: singleFormula }];
930
1000
  if (!persons.length)
@@ -948,9 +1018,15 @@ export function buildShareList(receiver, meta, appId = '', eventId = '') {
948
1018
  : p && typeof p === 'object' && p.config
949
1019
  ? p : null;
950
1020
  const suppliedSwitchType = candidateFormula ? sendMessageFormulaSwitchType(candidateFormula) : '';
1021
+ const semanticPerson = suppliedFormula && typeof suppliedFormula === 'object' && (suppliedFormula.kind || suppliedFormula.assignmentKind) ? suppliedFormula : p;
951
1022
  const dynamicPerson = suppliedSwitchType === 'fixvalue'
952
- ? null : sendMessageDynamicObjectFormula(p, objectType, meta, appId, sourceId);
953
- const formula = dynamicPerson?.formula || sendMessageObjectFormula(objectType, p, appId);
1023
+ ? null : sendMessageDynamicObjectFormula(semanticPerson, meta, appId, eventId);
1024
+ let formula = dynamicPerson?.formula || sendMessageObjectFormula(objectType, p, appId);
1025
+ if (!sendMessageFormulaSwitchType(formula) && ['3', '4', '5', '6', '7', '9', '10'].includes(String(formula.type || ''))) {
1026
+ formula = markSendMessageAssign(formula);
1027
+ }
1028
+ if (sendMessageFormulaSwitchType(formula) === 'assign')
1029
+ validateSendMessageContextFormula(formula);
954
1030
  const pid = String(formula.value ?? p.value ?? p.id ?? '').trim();
955
1031
  const pname = String(p.name ?? p.label ?? pid).trim();
956
1032
  const formulaSwitchType = sendMessageFormulaSwitchType(formula);
@@ -963,7 +1039,7 @@ export function buildShareList(receiver, meta, appId = '', eventId = '') {
963
1039
  ? 'esbAssign' : (pid || String(formula.value || ''));
964
1040
  const entry = {
965
1041
  sourceId, permissionId: 'esb', permissionType: 1,
966
- objType: objectType, targetId, sourceType: 1, targetType: 1, id: genSfId(),
1042
+ objType: objectType, targetId, sourceType: 1, targetType: sendMessageTargetType(objectType, receiver), id: genSfId(),
967
1043
  };
968
1044
  if (objectType === 'resource')
969
1045
  entry.user_type = userType;
@@ -1020,7 +1096,7 @@ export function buildPersonFormula(personRef, meta, appId = '', forSendMessage =
1020
1096
  return formulaSystemVar('{userid}');
1021
1097
  if (ptype === 'context' || ptype === 'user_reference') {
1022
1098
  const ckey = String(personRef.key || personRef.paramKey || pid || '');
1023
- return buildAssignBean({ kind: 'context', paramKey: ckey, label: String(personRef.label || personRef.name || ckey) }, ckey, 'string', meta, appId, String(eventId || meta._upstream_w_id || ''));
1099
+ return buildAssignBean({ ...personRef, kind: 'context', paramKey: ckey, label: String(personRef.label || personRef.name || ckey) }, ckey, 'string', meta, appId, String(eventId || meta._upstream_w_id || ''));
1024
1100
  }
1025
1101
  return formulaFixed(pid || personRef.name || '');
1026
1102
  }