openyida 2026.10.21 → 2026.10.22

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 (53) hide show
  1. package/README.md +4 -2
  2. package/lib/app/canvas-compile.js +8 -0
  3. package/lib/app/page-linter.js +10 -0
  4. package/lib/app/responsive-layout-guard.js +82 -0
  5. package/lib/core/command-manifest.js +15 -7
  6. package/lib/core/locales/en.js +50 -2
  7. package/lib/core/locales/zh.js +50 -2
  8. package/lib/core/query-data.js +40 -2
  9. package/lib/core/sample.js +3 -0
  10. package/lib/feedback/feedback.js +2 -1
  11. package/lib/feedback/github-setup.js +97 -0
  12. package/lib/feedback/github.js +17 -8
  13. package/lib/feedback/report.js +35 -15
  14. package/lib/integration/integration-triggers.js +8 -3
  15. package/lib/process/configure-process.js +8 -2
  16. package/lib/process/process-tasks.js +175 -0
  17. package/lib/process/services/process-actor-config.js +3 -0
  18. package/lib/process/services/process-compiler.js +15 -0
  19. package/lib/process/services/process-dynamic-actors.js +165 -0
  20. package/lib/samples/openyida-scaffold/canvas-nav/mixed.jsx +1 -1
  21. package/lib/samples/openyida-scaffold/canvas-nav/shared.jsx +1 -1
  22. package/lib/samples/openyida-scaffold/canvas-nav/side.jsx +1 -1
  23. package/lib/samples/openyida-scaffold/canvas-nav/sidebar.jsx +36 -24
  24. package/lib/samples/openyida-scaffold/canvas-nav/top.jsx +1 -1
  25. package/lib/samples/openyida-scaffold/canvas-responsive-layout.jsx +104 -0
  26. package/package.json +1 -1
  27. package/scripts/postinstall.js +1 -0
  28. package/yida-skills/SKILL.md +3 -2
  29. package/yida-skills/skills/yida-canvas-custom-page/SKILL.md +5 -1
  30. package/yida-skills/skills/yida-custom-page/SKILL.md +6 -2
  31. package/yida-skills/skills/yida-data-management/SKILL.md +24 -3
  32. package/yida-skills/skills/yida-data-management/references/process-task-transfer.md +53 -0
  33. package/yida-skills/skills/yida-density/SKILL.md +6 -1
  34. package/yida-skills/skills/yida-design/SKILL.md +1 -1
  35. package/yida-skills/skills/yida-design/references/responsive-layout.md +69 -22
  36. package/yida-skills/skills/yida-design/references/task-driven-visual-design.md +2 -0
  37. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/SKILL.md +1 -0
  38. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/references/build-plan-compact-schema.md +1 -1
  39. package/yida-skills/skills/yida-design/workflow/output-design.md +2 -2
  40. package/yida-skills/skills/yida-design/workflow/step-1-read-brief.md +2 -0
  41. package/yida-skills/skills/yida-design/workflow/step-4-wireframe-interaction.md +10 -10
  42. package/yida-skills/skills/yida-feedback/SKILL.md +22 -5
  43. package/yida-skills/skills/yida-feedback/references/github-contribution.md +14 -8
  44. package/yida-skills/skills/yida-feedback/references/github-setup.md +74 -0
  45. package/yida-skills/skills/yida-feedback/references/report-input.md +10 -2
  46. package/yida-skills/skills/yida-feedback/references/user-interaction.md +19 -2
  47. package/yida-skills/skills/yida-flow-node-config/SKILL.md +1 -1
  48. package/yida-skills/skills/yida-flow-node-config/references/actors.md +4 -0
  49. package/yida-skills/skills/yida-flow-node-config/references/dynamic-actors.md +84 -0
  50. package/yida-skills/skills/yida-integration/SKILL.md +1 -0
  51. package/yida-skills/skills/yida-integration/references/triggers.md +14 -1
  52. package/yida-skills/skills/yida-prd/SKILL.md +1 -0
  53. package/yida-skills/skills-index.json +13 -4
@@ -0,0 +1,84 @@
1
+ # 表单成员与发起人自选
2
+
3
+ ## 先区分两个场景
4
+
5
+ - 发起流程时选择后续审批人/办理人:用 `kind:selfSelect`。
6
+ - 当前办理人指定下一级经办人:用 `kind:formField`,由当前节点填写成员组件,下一节点读取这个成员字段。它不会凭空增加“选择下一处理人”按钮。
7
+
8
+ 先用 `openyida get-schema APP_XXX FORM_XXX --field-map-json` 取得真实字段 ID。保存仍走 `configure-process`;已有流程先读取、保留完整配置,再按用户授权使用 `--replace`。这些人员来源只用于流程人工节点,不直接套进自动化的消息接收人。
9
+
10
+ ## 表单内成员字段
11
+
12
+ ```json
13
+ {
14
+ "nodes": [
15
+ {"type":"approval","name":"成员字段审批","approver":{"kind":"formField","fieldId":"<真实成员字段ID>","approvalMode":"all"}},
16
+ {"type":"operator","name":"指定成员办理","executor":{"kind":"formField","fieldId":"<真实成员字段ID>"}},
17
+ {"type":"carbon","name":"通知表单成员","receiver":{"kind":"formField","fieldId":"<真实成员字段ID>"}}
18
+ ]
19
+ }
20
+ ```
21
+
22
+ `fieldId` 是一个顶层 `EmployeeField`,不是姓名、部门字段或子表成员字段。多个成员组件用 `fieldIds:["<真实ID1>","<真实ID2>"]`,不能同时写 `fieldId`。`approvalMode` 为 `all/or/oneByOne`,默认 `all`;旧版 `multiApproval` 也可将此来源放在 `approver`,节点上的 `mode` 控制多人会审方式。
23
+
24
+ CLI 同时生成运行层 `ext_target_approval_variable` 与设计器的 `formMember`;保存前读取真实表单字段,检查存在性、组件类型和子表归属。不要猜测 `ext_target_approval_field` 等枚举,未知原始人员类型会在远端写入前报错。
25
+
26
+ ### 逐级指定下一级经办人
27
+
28
+ 例如“发起人指定一级经办人,一级经办人指定二级经办人”:准备两个真实成员组件,定义如下。
29
+
30
+ ```json
31
+ {
32
+ "startFormConfig":{"behaviorList":[
33
+ {"fieldId":"<一级经办人成员字段ID>","fieldBehavior":"NORMAL"},
34
+ {"fieldId":"<二级经办人成员字段ID>","fieldBehavior":"HIDDEN"}
35
+ ]},
36
+ "nodes":[
37
+ {"type":"operator","name":"一级办理",
38
+ "executor":{"kind":"formField","fieldId":"<一级经办人成员字段ID>"},
39
+ "formConfig":{"behaviorList":[
40
+ {"fieldId":"<一级经办人成员字段ID>","fieldBehavior":"READONLY"},
41
+ {"fieldId":"<二级经办人成员字段ID>","fieldBehavior":"NORMAL"}
42
+ ]}},
43
+ {"type":"operator","name":"二级办理",
44
+ "executor":{"kind":"formField","fieldId":"<二级经办人成员字段ID>"},
45
+ "formConfig":{"behaviorList":[
46
+ {"fieldId":"<二级经办人成员字段ID>","fieldBehavior":"READONLY"}
47
+ ]}}
48
+ ]
49
+ }
50
+ ```
51
+
52
+ 在表单设计中按业务需要将成员组件设为隐藏并开启“始终提交”,流程节点权限再将当前需要填写的字段设为可编辑。**“始终提交”是表单组件属性,不是上面 `formConfig` 的属性**;先读取真实组件配置,不能只配节点权限就声称隐藏成员能正确提交。给需要选人的节点增加必填校验,防止未填下一经办人导致无人处理。
53
+
54
+ 验收依次检查:发起时选甲 → 只有甲收到一级任务;甲填写乙并提交 → 只有乙收到二级任务;成员字段为空、多人和退回重提各按业务规则测试。配置回读成功与真实任务投递成功分别报告。
55
+
56
+ ## 发起人自选
57
+
58
+ 审批放 `approver`,办理放 `executor`。默认全组织范围,也可限制为指定成员或指定角色:
59
+
60
+ ```json
61
+ {
62
+ "nodes":[
63
+ {"type":"approval","name":"组织内自选","approver":{"kind":"selfSelect","range":{"type":"ALL"}}},
64
+ {"type":"operator","name":"候选成员自选","executor":{"kind":"selfSelect","range":{"type":"USER","users":[{"id":"<真实userId>","name":"候选人"}]}}},
65
+ {"type":"approval","name":"角色内自选","approver":{"kind":"selfSelect","approvalMode":"or","range":{"type":"ROLE","roles":[{"id":"<真实角色ID>","roleType":"YIDA"}]}}}
66
+ ]
67
+ }
68
+ ```
69
+
70
+ `USER/ROLE` 必须提供非空真实 ID 列表;钉钉角色用 `roleType:DINGTALK`。`ALL` 不填写 `users/roles`。这里的“自选”指**发起人**,不能用来承诺每个当前办理人都能在提交时重新指定下一级;逐级选择使用上方成员字段方案。
71
+
72
+ ## 权益和兼容性边界
73
+
74
+ | 场景 | 已核实的边界 |
75
+ | --- | --- |
76
+ | 审批/办理的表单成员、自选 | 原生设计器列为常规人员来源,不能仅据此保证每个租户和旧应用均可用;以目标环境选项和服务端结果为准 |
77
+ | 发起人自选在旧应用中不可见 | 旧应用及锁定资源的应用可能受前端资源兼容性影响,先核对应用版本与设计器选项,不直接要求购买套餐 |
78
+ | 抄送的发起人自选 | 官方文档列为支持;本次接入依据的设计器实现另有非免费版和功能开关判断,目标环境尚未核验。当前简化 DSL 明确拒绝,不能绕过开关或静默改成发起人本人 |
79
+ | 旧版 `multiApproval` 的自选 | 原生设计器排除此来源,CLI 拒绝;普通审批节点的多人处理方式不等于旧版多人审批节点 |
80
+ | `kind:conditional` 条件选人 | 是独立能力,官方标注“专属—OA 增强包”;不能据此推断普通表单成员选人也需要该权益。本次两种新来源不嵌套进条件人员规则 |
81
+
82
+ 套餐与开关是不同维度。平台提示“不支持”时,保留错误码与目标环境信息,分别确认权限、套餐、开关和应用资源版本,不编造可开通的权益或修改平台开关。
83
+
84
+ 参考:[官方逐级指定人员方案](https://docs.aliwork.com/docs/yida_qalist/_1/_4/uqq8fy5gedskzs4f)、[审批节点与自选范围](https://docs.aliwork.com/docs/yida_support/_2/trbqg6/rq8i94)、[抄送节点](https://docs.aliwork.com/docs/yida_support/_2/trbqg6/cntvp8)。
@@ -22,6 +22,7 @@ description: 配置宜搭自动化的执行时机和处理步骤,修改已有
22
22
 
23
23
  ## 严格要求 (MUST DO)
24
24
 
25
+ - 定时任务按实际结束条件选择 `count`(触发次数)或 `time`(指定时间),spec 分别填写 `schedule.maxCount` 或 `schedule.expireDate`。需要“一直执行”或长期持续运行时,建议选择指定时间,将截止日期设得较远,并在配置摘要中展示实际日期;详见 [触发设置](references/triggers.md#结束条件)。
25
26
  - **创建/发布前必须确认**:执行集成自动化创建或发布操作前,必须向用户展示逻辑流配置摘要(触发条件、节点列表、通知对象),获得用户明确同意后再执行。
26
27
  - 创建前先确认触发表单的 `formUuid` 和相关字段 ID。
27
28
  - 创建成功后记录逻辑流 ID 到 `<projectRoot>/.cache/<项目名>-schema.json`。
@@ -57,10 +57,23 @@
57
57
  }
58
58
  ```
59
59
 
60
- 时间按平台 Asia/Shanghai(UTC+8)输入,秒必须为 00。`repeat` 支持 ONCE、DAILY、WORKDAY、WEEKLY、BI_WEEKLY、MONTHLY、LAST_DAY_PER_MONTH。非 ONCE 可选 `maxCount` 或毫秒时间戳 `expireDate`,二者互斥。创建绑定类型为 3,运行触发类型为 TimerEvent,设计器保留定时配置。当前不提供日期字段定时、法定工作日和 CUSTOM 的简写。
60
+ 时间按平台 Asia/Shanghai(UTC+8)输入,秒必须为 00。`repeat` 支持 ONCE、DAILY、WORKDAY、WEEKLY、BI_WEEKLY、MONTHLY、LAST_DAY_PER_MONTH。非 ONCE 须选择 `maxCount` 或毫秒时间戳 `expireDate`,二者互斥。创建绑定类型为 3,运行触发类型为 TimerEvent,设计器保留定时配置。当前不提供日期字段定时、法定工作日和 CUSTOM 的简写。
61
61
 
62
62
  定时不能混用 events、changedFields、表单触发过滤或审批节点动作;定时没有当前提交记录,应显式取数后再引用。必须等到真实触发后读取日志和目标数据,才可报告定时运行通过。
63
63
 
64
+ ### 结束条件
65
+
66
+ 指定时间开始的重复任务,按实际结束条件选择以下两种方式:
67
+
68
+ | 界面选项 | spec 字段 | 设计器字段 | 运行态字段 |
69
+ | --- | --- | --- | --- |
70
+ | 触发次数 | `schedule.maxCount`,1–100 的整数 | `overTimeType = "count"`、`overCount` | `inputs.end.maxCount` |
71
+ | 指定时间 | `schedule.expireDate`,晚于开始时间的毫秒时间戳 | `overTimeType = "time"`、`overTime` | `inputs.end.expireDate` |
72
+
73
+ 需要“一直执行”或长期持续运行时,建议选择指定时间,将截止日期设得较远,在配置摘要中展示实际截止时间。例如业务选择北京时间 2036-10-20 09:30 截止时,将该日期转换成毫秒时间戳后填写 `schedule.expireDate`。具体截止日期按用户确认的业务安排填写。
74
+
75
+ 结束条件缺失时,CLI 会在认证和远端操作前提示补充 `maxCount` 或 `expireDate`。一次性任务仍使用下方 ONCE 配置,运行态只执行一次,设计器结束方式保留为 `count`、次数为 1。
76
+
64
77
  ### 只执行一次
65
78
 
66
79
  ```json
@@ -32,6 +32,7 @@ PRD 编写、修改与确认均保留 brief 的 `visualSelection`、已选 theme
32
32
  - 用户存在 `explicitScope` 时,以该范围规划页面、表单、流程、报表和本轮交付。
33
33
  - 真实 `appType`、`formUuid`、`fieldId`、`processCode` 以资源证据为准;实现阶段产生的 ID 写入 `.cache/<项目名>-schema.json`。
34
34
  - 每个 display 页面提供 `pageSpecHandoff`,包含场景、区块、数据来源、主操作,以及指向对应 `design.md` 的 `designFile` / `designRefs`。视觉细则由 `yida-design` 维护。
35
+ - 在已有页面任务、区块说明和验收中写清使用环境、操作频率、行动前必需的信息,以及返回页面时需要保留的状态。证据不足时标明假设,仅对会改变业务范围的缺口澄清。PRD 按比较、逐条处理或录入等任务确定信息需求;宽窄布局由设计阶段决定,复用已有字段记录。
35
36
  - 导航结构、菜单顺序和默认入口由业务任务确定;导航外观与应用框架、表单、记录详情和自定义页面交给 `yida-design` 统一设计。PRD 保留整体风格摘要与设计引用,完整 token 和消费规则只在 `design.md` 维护。
36
37
 
37
38
  任务涉及对象识别、证据或外观比较时,核对真实图片/附件字段与对象的关联,将其纳入已有数据来源与字段映射;没有字段时记录缺口,不凭美化新增字段。图文呈现与无图降级交给[任务驱动的视觉设计](../yida-design/references/task-driven-visual-design.md),不把网络示意图当作真实对象资料。
@@ -1066,14 +1066,16 @@
1066
1066
  "name": "yida-data-management",
1067
1067
  "path": "skills/yida-data-management/SKILL.md",
1068
1068
  "display_name": "宜搭数据管理",
1069
- "description": "查询、新增、更新宜搭表单、子表、流程和任务数据,按当前审批人查询流程实例或统计条数,精确删除普通表单单条记录。查询包含日期为空、区间端点、业务计数、子表条件和服务端分页。",
1069
+ "description": "查询、新增、更新宜搭表单、子表、流程和任务数据,按当前审批人查询流程实例或统计条数,精确删除普通表单单条记录,查询流程当前任务并执行管理员转交。查询包含日期为空、区间端点、业务计数、子表条件和服务端分页。",
1070
1070
  "category": "yida-skills/form",
1071
1071
  "tags": [
1072
1072
  "数据查询",
1073
1073
  "数据新增",
1074
1074
  "表单实例",
1075
1075
  "流程实例",
1076
- "数据删除"
1076
+ "数据删除",
1077
+ "流程任务查询",
1078
+ "管理员转交"
1077
1079
  ],
1078
1080
  "aliases": [
1079
1081
  "数据管理",
@@ -1092,6 +1094,10 @@
1092
1094
  "日期区间筛选",
1093
1095
  "表单空值查询",
1094
1096
  "子表条件查询",
1097
+ "查询流程当前任务",
1098
+ "管理员转交",
1099
+ "流程审批转交",
1100
+ "把流程转交给",
1095
1101
  "按当前审批人查询流程",
1096
1102
  "指定审批人的待审批数据条数",
1097
1103
  "查询关联流程详情和审批历史",
@@ -1109,7 +1115,7 @@
1109
1115
  "get-schema",
1110
1116
  "sample"
1111
1117
  ],
1112
- "done_when": "目标数据查询或写入完成,并用 query/get 抽查真实记录;删除仅在 deleted=true 且 readbackVerified=true 时完成。"
1118
+ "done_when": "目标数据查询或写入完成,并用 query/get 抽查真实记录;删除仅在 deleted=true 且 readbackVerified=true 时完成;转交以 transferred=true 且 readbackVerified=true 为准,ALREADY_ASSIGNED 为已分配且未再次写入。"
1113
1119
  },
1114
1120
  {
1115
1121
  "name": "yida-data-source-connectors",
@@ -1857,7 +1863,10 @@
1857
1863
  "造数",
1858
1864
  "日期为空",
1859
1865
  "日期区间筛选",
1860
- "表单空值查询"
1866
+ "表单空值查询",
1867
+ "流程任务查询",
1868
+ "管理员转交",
1869
+ "流程审批转交"
1861
1870
  ]
1862
1871
  },
1863
1872
  {