weaver-work-cli 0.1.24 → 0.1.25

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 (337) hide show
  1. package/README.md +10 -1
  2. package/dist/core/output.js +53 -1
  3. package/dist/internal/e10/auth/commands.js +17 -2
  4. package/dist/internal/e10/auth/crypto.js +52 -12
  5. package/dist/internal/e10/auth/xiaoe.js +112 -39
  6. package/dist/shortcuts/caizhilian/operations/handlers/fileops.js +67 -1
  7. package/dist/shortcuts/caizhilian/operations/handlers/setting-attach.js +198 -0
  8. package/dist/shortcuts/caizhilian/operations/shared.js +32 -0
  9. package/dist/shortcuts/caizhilian/operations/specs.js +15 -0
  10. package/dist/shortcuts/workflow/index.js +55 -1
  11. package/dist/shortcuts/workflow/operations/form.js +1252 -109
  12. package/dist/shortcuts/workflow/operations/read.js +75 -35
  13. package/dist/shortcuts/workflow/operations/shared.js +25 -0
  14. package/dist/shortcuts/workflow/stdout-compact.js +33 -0
  15. package/docs/caizhilian.md +4 -3
  16. package/docs/e10-auth.md +8 -1
  17. package/node_modules/@napi-rs/keyring/LICENSE +21 -0
  18. package/node_modules/@napi-rs/keyring/README.md +19 -0
  19. package/node_modules/@napi-rs/keyring/index.d.ts +166 -0
  20. package/node_modules/@napi-rs/keyring/index.js +514 -0
  21. package/node_modules/@napi-rs/keyring/keytar.d.ts +53 -0
  22. package/node_modules/@napi-rs/keyring/keytar.js +26 -0
  23. package/node_modules/@napi-rs/keyring/package.json +125 -0
  24. package/node_modules/@napi-rs/keyring-darwin-arm64/README.md +3 -0
  25. package/node_modules/@napi-rs/keyring-darwin-arm64/keyring.darwin-arm64.node +0 -0
  26. package/node_modules/@napi-rs/keyring-darwin-arm64/package.json +32 -0
  27. package/node_modules/commander/LICENSE +22 -0
  28. package/node_modules/commander/Readme.md +1149 -0
  29. package/node_modules/commander/esm.mjs +16 -0
  30. package/node_modules/commander/index.js +24 -0
  31. package/node_modules/commander/lib/argument.js +149 -0
  32. package/node_modules/commander/lib/command.js +2662 -0
  33. package/node_modules/commander/lib/error.js +39 -0
  34. package/node_modules/commander/lib/help.js +709 -0
  35. package/node_modules/commander/lib/option.js +367 -0
  36. package/node_modules/commander/lib/suggestSimilar.js +101 -0
  37. package/node_modules/commander/package-support.json +16 -0
  38. package/node_modules/commander/package.json +82 -0
  39. package/node_modules/commander/typings/esm.d.mts +3 -0
  40. package/node_modules/commander/typings/index.d.ts +1045 -0
  41. package/package.json +5 -1
  42. package/skills/weaver-e10-builder/SKILL.md +281 -0
  43. package/skills/weaver-e10-builder/_catalog.md +94 -0
  44. package/skills/weaver-e10-builder/actionflows/CONTEXT.md +71 -0
  45. package/skills/weaver-e10-builder/actionflows/SKILL.md +176 -0
  46. package/skills/weaver-e10-builder/actionflows/docs/adr/0001-generated-actionflow-cleanup-identity.md +5 -0
  47. package/skills/weaver-e10-builder/actionflows/docs/adr/0002-preserve-existing-actionflow-on-update.md +36 -0
  48. package/skills/weaver-e10-builder/actionflows/references/components/calendar/MeetingCreate.md +19 -0
  49. package/skills/weaver-e10-builder/actionflows/references/components/calendar/ScheduleCreate.md +17 -0
  50. package/skills/weaver-e10-builder/actionflows/references/components/database/DMLExecute.md +38 -0
  51. package/skills/weaver-e10-builder/actionflows/references/components/document/AttachmentCopy.md +17 -0
  52. package/skills/weaver-e10-builder/actionflows/references/components/document/AttachmentMove.md +17 -0
  53. package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentCopy.md +17 -0
  54. package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentDelete.md +17 -0
  55. package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentEdit.md +17 -0
  56. package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentMove.md +17 -0
  57. package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentPermissionChange.md +17 -0
  58. package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentRenewal.md +17 -0
  59. package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentRevert.md +17 -0
  60. package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentSave.md +17 -0
  61. package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentSubscription.md +17 -0
  62. package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentSubscriptionApprove.md +17 -0
  63. package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentSubscriptionSendBack.md +17 -0
  64. package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentSubscriptionWithdraw.md +17 -0
  65. package/skills/weaver-e10-builder/actionflows/references/components/document/FileFolderSave.md +17 -0
  66. package/skills/weaver-e10-builder/actionflows/references/components/document/GetAttachmentInfo.md +17 -0
  67. package/skills/weaver-e10-builder/actionflows/references/components/document/GetDocumentInfo.md +17 -0
  68. package/skills/weaver-e10-builder/actionflows/references/components/document/ModifyDocumentStatus.md +17 -0
  69. package/skills/weaver-e10-builder/actionflows/references/components/document/ReplaceAttachment.md +17 -0
  70. package/skills/weaver-e10-builder/actionflows/references/components/document/UpdatePrintNum.md +17 -0
  71. package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/ActionEbAdd.md +100 -0
  72. package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/ActionEbDelete.md +23 -0
  73. package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/ActionEbRecover.md +17 -0
  74. package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/ActionEbSaveVersion.md +17 -0
  75. package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/ActionEbUpdate.md +67 -0
  76. package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/DateTrigger.md +32 -0
  77. package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/EbGetDataById.md +17 -0
  78. package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/EnquiryForm.md +107 -0
  79. package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/EventButton.md +33 -0
  80. package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/EventFormData.md +19 -0
  81. package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/TimeBatchTrigger.md +19 -0
  82. package/skills/weaver-e10-builder/actionflows/references/components/http/Http.md +77 -0
  83. package/skills/weaver-e10-builder/actionflows/references/components/logic/Condition.md +23 -0
  84. package/skills/weaver-e10-builder/actionflows/references/components/logic/LogicFlowSet.md +17 -0
  85. package/skills/weaver-e10-builder/actionflows/references/components/logic/MultipleExecution.md +38 -0
  86. package/skills/weaver-e10-builder/actionflows/references/components/logic/Output.md +37 -0
  87. package/skills/weaver-e10-builder/actionflows/references/components/message/InnerMQSend.md +50 -0
  88. package/skills/weaver-e10-builder/actionflows/references/components/message/SendMessage.md +30 -0
  89. package/skills/weaver-e10-builder/actionflows/references/components/personnel/AlterPersonStatus.md +30 -0
  90. package/skills/weaver-e10-builder/actionflows/references/components/personnel/HrmEmployeeUpdate.md +34 -0
  91. package/skills/weaver-e10-builder/actionflows/references/components/personnel/PersonnelAlterType.md +38 -0
  92. package/skills/weaver-e10-builder/actionflows/references/components/personnel/PersonnelOnboarding.md +36 -0
  93. package/skills/weaver-e10-builder/actionflows/references/components/serverless/ServerlessAction.md +42 -0
  94. package/skills/weaver-e10-builder/actionflows/references/components/trigger/CustomTrigger.md +82 -0
  95. package/skills/weaver-e10-builder/actionflows/references/components/trigger/InnerMQListener.md +41 -0
  96. package/skills/weaver-e10-builder/actionflows/references/components/trigger/SimpleScheduler.md +19 -0
  97. package/skills/weaver-e10-builder/actionflows/references/components/trigger/WebHookTrigger.md +91 -0
  98. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveAddSign.md +17 -0
  99. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveAgreeRejectApply.md +17 -0
  100. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveCommit.md +17 -0
  101. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveConsulTurnTodo.md +17 -0
  102. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveCreate.md +17 -0
  103. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveDelete.md +19 -0
  104. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveDoCirculate.md +17 -0
  105. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveDoForward.md +17 -0
  106. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveDoTurnTodo.md +17 -0
  107. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveEntrust.md +19 -0
  108. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveIntervention.md +17 -0
  109. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveMandatoryArchiving.md +17 -0
  110. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveManualCC.md +17 -0
  111. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveRefuseRejectApply.md +17 -0
  112. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveRejectApply.md +17 -0
  113. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveSave.md +17 -0
  114. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveSendBack.md +17 -0
  115. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveShareEntry.md +17 -0
  116. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveTrigger.md +99 -0
  117. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveWithdraw.md +17 -0
  118. package/skills/weaver-e10-builder/actionflows/references/components/workflow/WorkFlowDocEmpowerment.md +17 -0
  119. package/skills/weaver-e10-builder/actionflows/references/components/workflow/WorkflowToDoc.md +17 -0
  120. package/skills/weaver-e10-builder/actionflows/references/condition_rules.md +100 -0
  121. package/skills/weaver-e10-builder/actionflows/references/dynamic_capability_matrix.md +39 -0
  122. package/skills/weaver-e10-builder/actionflows/references/dynamic_resources.md +41 -0
  123. package/skills/weaver-e10-builder/actionflows/references/examples/enquiry-form-batch-insert-scene2.json +1043 -0
  124. package/skills/weaver-e10-builder/actionflows/references/function_rules.md +15 -0
  125. package/skills/weaver-e10-builder/actionflows/references/trigger_runtime_notes.md +53 -0
  126. package/skills/weaver-e10-builder/assets/dom-structure/Bar.json +341 -0
  127. package/skills/weaver-e10-builder/assets/dom-structure/BarStack.json +341 -0
  128. package/skills/weaver-e10-builder/assets/dom-structure/Bubble.json +323 -0
  129. package/skills/weaver-e10-builder/assets/dom-structure/Calendar.json +515 -0
  130. package/skills/weaver-e10-builder/assets/dom-structure/Circular.json +337 -0
  131. package/skills/weaver-e10-builder/assets/dom-structure/CollapsePanel.json +289 -0
  132. package/skills/weaver-e10-builder/assets/dom-structure/Comment.json +617 -0
  133. package/skills/weaver-e10-builder/assets/dom-structure/CountDown.json +755 -0
  134. package/skills/weaver-e10-builder/assets/dom-structure/DigitalPanel.json +191 -0
  135. package/skills/weaver-e10-builder/assets/dom-structure/EbButton.json +387 -0
  136. package/skills/weaver-e10-builder/assets/dom-structure/FastCreate.json +242 -0
  137. package/skills/weaver-e10-builder/assets/dom-structure/Gauge.json +282 -0
  138. package/skills/weaver-e10-builder/assets/dom-structure/HBar.json +336 -0
  139. package/skills/weaver-e10-builder/assets/dom-structure/HBarStack.json +337 -0
  140. package/skills/weaver-e10-builder/assets/dom-structure/Line.json +341 -0
  141. package/skills/weaver-e10-builder/assets/dom-structure/NList.json +712 -0
  142. package/skills/weaver-e10-builder/assets/dom-structure/NavBar.json +274 -0
  143. package/skills/weaver-e10-builder/assets/dom-structure/NavPanel.json +390 -0
  144. package/skills/weaver-e10-builder/assets/dom-structure/NewTab.json +606 -0
  145. package/skills/weaver-e10-builder/assets/dom-structure/Nightingale.json +336 -0
  146. package/skills/weaver-e10-builder/assets/dom-structure/PageHeader.json +205 -0
  147. package/skills/weaver-e10-builder/assets/dom-structure/Picture.json +209 -0
  148. package/skills/weaver-e10-builder/assets/dom-structure/Pie.json +338 -0
  149. package/skills/weaver-e10-builder/assets/dom-structure/ProgressChart.json +299 -0
  150. package/skills/weaver-e10-builder/assets/dom-structure/SearchGlobal.json +628 -0
  151. package/skills/weaver-e10-builder/assets/dom-structure/Slide.json +489 -0
  152. package/skills/weaver-e10-builder/assets/dom-structure/Treemap.json +324 -0
  153. package/skills/weaver-e10-builder/assets/factory/chart-dimensions.json +536 -0
  154. package/skills/weaver-e10-builder/assets/factory/example-btn-progress-collapse-configured.json +2515 -0
  155. package/skills/weaver-e10-builder/assets/factory/example-configured-2.json +13805 -0
  156. package/skills/weaver-e10-builder/assets/factory/example-configured.json +6735 -0
  157. package/skills/weaver-e10-builder/assets/factory/factory-bar-stack.json +326 -0
  158. package/skills/weaver-e10-builder/assets/factory/factory-bar.json +222 -0
  159. package/skills/weaver-e10-builder/assets/factory/factory-bubble.json +322 -0
  160. package/skills/weaver-e10-builder/assets/factory/factory-calendar.json +325 -0
  161. package/skills/weaver-e10-builder/assets/factory/factory-circular.json +320 -0
  162. package/skills/weaver-e10-builder/assets/factory/factory-collapse-panel.json +132 -0
  163. package/skills/weaver-e10-builder/assets/factory/factory-comment.json +388 -0
  164. package/skills/weaver-e10-builder/assets/factory/factory-count-down.json +198 -0
  165. package/skills/weaver-e10-builder/assets/factory/factory-digital-panel.json +108 -0
  166. package/skills/weaver-e10-builder/assets/factory/factory-eb-button.json +150 -0
  167. package/skills/weaver-e10-builder/assets/factory/factory-fast-create.json +62 -0
  168. package/skills/weaver-e10-builder/assets/factory/factory-gauge.json +312 -0
  169. package/skills/weaver-e10-builder/assets/factory/factory-h-bar-stack.json +328 -0
  170. package/skills/weaver-e10-builder/assets/factory/factory-h-bar.json +326 -0
  171. package/skills/weaver-e10-builder/assets/factory/factory-line.json +212 -0
  172. package/skills/weaver-e10-builder/assets/factory/factory-nav-bar.json +167 -0
  173. package/skills/weaver-e10-builder/assets/factory/factory-nav-menu.json +144 -0
  174. package/skills/weaver-e10-builder/assets/factory/factory-nav-panel.json +338 -0
  175. package/skills/weaver-e10-builder/assets/factory/factory-new-tab.json +163 -0
  176. package/skills/weaver-e10-builder/assets/factory/factory-nightingale.json +312 -0
  177. package/skills/weaver-e10-builder/assets/factory/factory-nlist.json +112 -0
  178. package/skills/weaver-e10-builder/assets/factory/factory-page-header.json +171 -0
  179. package/skills/weaver-e10-builder/assets/factory/factory-picture.json +169 -0
  180. package/skills/weaver-e10-builder/assets/factory/factory-pie.json +212 -0
  181. package/skills/weaver-e10-builder/assets/factory/factory-progress-chart.json +162 -0
  182. package/skills/weaver-e10-builder/assets/factory/factory-search-global.json +104 -0
  183. package/skills/weaver-e10-builder/assets/factory/factory-slide.json +164 -0
  184. package/skills/weaver-e10-builder/assets/factory/factory-treemap.json +322 -0
  185. package/skills/weaver-e10-builder/assets/icons.db +0 -0
  186. package/skills/weaver-e10-builder/assets/sample/.claude/settings.local.json +8 -0
  187. package/skills/weaver-e10-builder/assets/sample/api/formApi.js +510 -0
  188. package/skills/weaver-e10-builder/assets/sample/config/config.js +0 -0
  189. package/skills/weaver-e10-builder/assets/sample/config/configLoad.js +0 -0
  190. package/skills/weaver-e10-builder/assets/sample/config/configLoad_default.js +0 -0
  191. package/skills/weaver-e10-builder/assets/sample/config/config_default.js +0 -0
  192. package/skills/weaver-e10-builder/assets/sample/entry.js +22 -0
  193. package/skills/weaver-e10-builder/assets/sample/eslint.config.cjs +48 -0
  194. package/skills/weaver-e10-builder/assets/sample/memo.md +0 -0
  195. package/skills/weaver-e10-builder/assets/sample/readme.js +8 -0
  196. package/skills/weaver-e10-builder/references/app/guide-app-publish.md +92 -0
  197. package/skills/weaver-e10-builder/references/auth/guide-auth.md +88 -0
  198. package/skills/weaver-e10-builder/references/coding/guide-edit-backfill.md +189 -0
  199. package/skills/weaver-e10-builder/references/coding/guide-form-crud.md +262 -0
  200. package/skills/weaver-e10-builder/references/coding/guide-page-code.md +244 -0
  201. package/skills/weaver-e10-builder/references/coding/guide-page-export.md +119 -0
  202. package/skills/weaver-e10-builder/references/coding/ref-compile-rules.md +130 -0
  203. package/skills/weaver-e10-builder/references/common/guide-plan-template.md +164 -0
  204. package/skills/weaver-e10-builder/references/common/map.md +153 -0
  205. package/skills/weaver-e10-builder/references/common/ref-cli-commands.md +635 -0
  206. package/skills/weaver-e10-builder/references/components/@weapp-Button.md +104 -0
  207. package/skills/weaver-e10-builder/references/components/base-Badge.md +100 -0
  208. package/skills/weaver-e10-builder/references/components/base-Dialog.md +358 -0
  209. package/skills/weaver-e10-builder/references/components/base-Empty.md +58 -0
  210. package/skills/weaver-e10-builder/references/components/base-Tag.md +112 -0
  211. package/skills/weaver-e10-builder/references/components/display-Alert.md +64 -0
  212. package/skills/weaver-e10-builder/references/components/display-Avatar.md +150 -0
  213. package/skills/weaver-e10-builder/references/components/display-Calendar.md +263 -0
  214. package/skills/weaver-e10-builder/references/components/display-Carousel.md +115 -0
  215. package/skills/weaver-e10-builder/references/components/display-Collapse.md +299 -0
  216. package/skills/weaver-e10-builder/references/components/display-FilePreview.md +49 -0
  217. package/skills/weaver-e10-builder/references/components/display-Icon.md +66 -0
  218. package/skills/weaver-e10-builder/references/components/display-List.md +320 -0
  219. package/skills/weaver-e10-builder/references/components/display-Pagination.md +41 -0
  220. package/skills/weaver-e10-builder/references/components/display-Spin.md +34 -0
  221. package/skills/weaver-e10-builder/references/components/display-Steps.md +89 -0
  222. package/skills/weaver-e10-builder/references/components/display-Table.md +160 -0
  223. package/skills/weaver-e10-builder/references/components/display-Title.md +117 -0
  224. package/skills/weaver-e10-builder/references/components/form-Checkbox.md +161 -0
  225. package/skills/weaver-e10-builder/references/components/form-DepartmentBrowser-api.md +52 -0
  226. package/skills/weaver-e10-builder/references/components/form-EmployeeBrowser-api.md +51 -0
  227. package/skills/weaver-e10-builder/references/components/form-EmployeeBrowser.md +51 -0
  228. package/skills/weaver-e10-builder/references/components/form-Input.md +123 -0
  229. package/skills/weaver-e10-builder/references/components/form-Radio.md +145 -0
  230. package/skills/weaver-e10-builder/references/components/form-Select.md +191 -0
  231. package/skills/weaver-e10-builder/references/components/form-Switch.md +46 -0
  232. package/skills/weaver-e10-builder/references/components/form-Upload.md +53 -0
  233. package/skills/weaver-e10-builder/references/components/generic-Echarts.md +102 -0
  234. package/skills/weaver-e10-builder/references/ebuilder-designer/guide-designer-components.md +130 -0
  235. package/skills/weaver-e10-builder/references/ebuilder-designer/guide-designer-css.md +127 -0
  236. package/skills/weaver-e10-builder/references/ebuilder-designer/guide-designer-factory.md +460 -0
  237. package/skills/weaver-e10-builder/references/ebuilder-designer/guide-designer-version.md +111 -0
  238. package/skills/weaver-e10-builder/references/ebuilder-designer/guide-designer.md +288 -0
  239. package/skills/weaver-e10-builder/references/esb-interface/guide-import.md +34 -0
  240. package/skills/weaver-e10-builder/references/form/guide-create-form.md +248 -0
  241. package/skills/weaver-e10-builder/references/form/guide-ebuilder-filter.md +73 -0
  242. package/skills/weaver-e10-builder/references/form/guide-ebuilder-scope.md +82 -0
  243. package/skills/weaver-e10-builder/references/form/guide-field-linkage.md +123 -0
  244. package/skills/weaver-e10-builder/references/form/guide-form-archive-permission.md +175 -0
  245. package/skills/weaver-e10-builder/references/form/guide-form-association.md +124 -0
  246. package/skills/weaver-e10-builder/references/form/guide-form-button.md +169 -0
  247. package/skills/weaver-e10-builder/references/form/guide-form-data.md +78 -0
  248. package/skills/weaver-e10-builder/references/form/guide-form-formula-functions.md +343 -0
  249. package/skills/weaver-e10-builder/references/form/guide-form-layout-incremental.md +90 -0
  250. package/skills/weaver-e10-builder/references/form/guide-form-layout-planning.md +68 -0
  251. package/skills/weaver-e10-builder/references/form/guide-form-linkage.md +269 -0
  252. package/skills/weaver-e10-builder/references/form/guide-form-message.md +74 -0
  253. package/skills/weaver-e10-builder/references/form/guide-form-physical-table.md +146 -0
  254. package/skills/weaver-e10-builder/references/form/guide-form-serial-mark.md +47 -0
  255. package/skills/weaver-e10-builder/references/form/guide-form-sub-detail.md +82 -0
  256. package/skills/weaver-e10-builder/references/form/guide-form-view-permission.md +38 -0
  257. package/skills/weaver-e10-builder/references/form/guide-form-view.md +371 -0
  258. package/skills/weaver-e10-builder/references/form/guide-formula-linkage.md +281 -0
  259. package/skills/weaver-e10-builder/references/form/guide-list-columns.md +52 -0
  260. package/skills/weaver-e10-builder/references/form/guide-list-custom-text.md +52 -0
  261. package/skills/weaver-e10-builder/references/form/guide-list-stats.md +136 -0
  262. package/skills/weaver-e10-builder/references/form/guide-virtual-form.md +156 -0
  263. package/skills/weaver-e10-builder/references/form/ref-form-fields.md +293 -0
  264. package/skills/weaver-e10-builder/references/form/style-templates.md +97 -0
  265. package/skills/weaver-e10-builder/references/hrm/guide-matrix.md +245 -0
  266. package/skills/weaver-e10-builder/references/hrm/guide-org-employee.md +155 -0
  267. package/skills/weaver-e10-builder/references/menu/system-menus.md +75 -0
  268. package/skills/weaver-e10-builder/references/report/add-dataset-registration-guide.md +139 -0
  269. package/skills/weaver-e10-builder/references/report/ai-report-workflow.md +412 -0
  270. package/skills/weaver-e10-builder/references/report/api-report-build-fast-path.md +275 -0
  271. package/skills/weaver-e10-builder/references/report/app-datasource-lookup-guide.md +230 -0
  272. package/skills/weaver-e10-builder/references/report/cell-config-echo-guide.md +163 -0
  273. package/skills/weaver-e10-builder/references/report/cell-transform-guide.md +147 -0
  274. package/skills/weaver-e10-builder/references/report/condition-format-guide.md +140 -0
  275. package/skills/weaver-e10-builder/references/report/cross-dataset-filter-guide.md +304 -0
  276. package/skills/weaver-e10-builder/references/report/dataset-query-filter-guide.md +235 -0
  277. package/skills/weaver-e10-builder/references/report/dataset-sidebar-ops-guide.md +280 -0
  278. package/skills/weaver-e10-builder/references/report/dataset-table-field-contract-guide.md +339 -0
  279. package/skills/weaver-e10-builder/references/report/datasource-metadata-guide.md +365 -0
  280. package/skills/weaver-e10-builder/references/report/datasource-selection-and-parent-filter-guide.md +148 -0
  281. package/skills/weaver-e10-builder/references/report/date-range-query-reference.md +102 -0
  282. package/skills/weaver-e10-builder/references/report/default-header-style-guide.md +70 -0
  283. package/skills/weaver-e10-builder/references/report/designer-blank-prevention-guide.md +111 -0
  284. package/skills/weaver-e10-builder/references/report/event-hreflink-guide.md +184 -0
  285. package/skills/weaver-e10-builder/references/report/field-bind-exact-match-guide.md +208 -0
  286. package/skills/weaver-e10-builder/references/report/formula-cell-api-guide.md +258 -0
  287. package/skills/weaver-e10-builder/references/report/guide-report-build.md +131 -0
  288. package/skills/weaver-e10-builder/references/report/guide-report-modify.md +100 -0
  289. package/skills/weaver-e10-builder/references/report/guide-report-multisource.md +143 -0
  290. package/skills/weaver-e10-builder/references/report/guide-report-query.md +98 -0
  291. package/skills/weaver-e10-builder/references/report/hidden-row-and-header-merge-guide.md +100 -0
  292. package/skills/weaver-e10-builder/references/report/layout-showlocation-freeze-guide.md +167 -0
  293. package/skills/weaver-e10-builder/references/report/preaggregate-auto-disable-guide.md +107 -0
  294. package/skills/weaver-e10-builder/references/report/query-condition-api-guide.md +890 -0
  295. package/skills/weaver-e10-builder/references/report/ref-report-commands.md +122 -0
  296. package/skills/weaver-e10-builder/references/report/ref-report-pitfalls.md +226 -0
  297. package/skills/weaver-e10-builder/references/report/report-baseinfo-defaults-guide.md +117 -0
  298. package/skills/weaver-e10-builder/references/report/report-building-guide.md +511 -0
  299. package/skills/weaver-e10-builder/references/report/report-config-schema.md +445 -0
  300. package/skills/weaver-e10-builder/references/report/report-create-modes-guide.md +182 -0
  301. package/skills/weaver-e10-builder/references/report/report-data-model.md +447 -0
  302. package/skills/weaver-e10-builder/references/report/report-delivery-contract.md +101 -0
  303. package/skills/weaver-e10-builder/references/report/report-designer-feature-map.md +500 -0
  304. package/skills/weaver-e10-builder/references/report/report-internal-error-guide.md +78 -0
  305. package/skills/weaver-e10-builder/references/report/report-knowledge-base.md +389 -0
  306. package/skills/weaver-e10-builder/references/report/report-lifecycle-api-guide.md +392 -0
  307. package/skills/weaver-e10-builder/references/report/report-list-page-ops-guide.md +191 -0
  308. package/skills/weaver-e10-builder/references/report/report-permission-guide.md +365 -0
  309. package/skills/weaver-e10-builder/references/report/report-requirement-analysis-template.md +202 -0
  310. package/skills/weaver-e10-builder/references/report/report-self-check-guide.md +164 -0
  311. package/skills/weaver-e10-builder/references/report/safe-partial-save-guide.md +151 -0
  312. package/skills/weaver-e10-builder/references/report/snowflake-id-precision-guide.md +84 -0
  313. package/skills/weaver-e10-builder/references/report/spec-build-schema.md +294 -0
  314. package/skills/weaver-e10-builder/references/report/targeted-fix-guide.md +97 -0
  315. package/skills/weaver-e10-builder/references/report/user-request-scope-only-guide.md +82 -0
  316. package/skills/weaver-e10-builder/references/workflow/guide-function-management.md +154 -0
  317. package/skills/weaver-e10-builder/references/workflow/guide-opinion-settings.md +126 -0
  318. package/skills/weaver-e10-builder/references/workflow/guide-workflow-action.md +174 -0
  319. package/skills/weaver-e10-builder/references/workflow/guide-workflow-auth-resp.md +224 -0
  320. package/skills/weaver-e10-builder/references/workflow/guide-workflow-condition.md +447 -0
  321. package/skills/weaver-e10-builder/references/workflow/guide-workflow-node-layout.md +181 -0
  322. package/skills/weaver-e10-builder/references/workflow/guide-workflow-odoc-setting.md +248 -0
  323. package/skills/weaver-e10-builder/references/workflow/guide-workflow-odoc.md +68 -0
  324. package/skills/weaver-e10-builder/references/workflow/guide-workflow.md +527 -0
  325. package/skills/weaver-e10-builder/references/workflow/operator-matrix.md +76 -0
  326. package/skills/weaver-e10-caizhilian/SKILL.md +7 -2
  327. package/skills/weaver-e10-caizhilian/references/files.md +15 -0
  328. package/skills/weaver-e10-caizhilian/references/setting-attach.md +48 -3
  329. package/skills/weaver-e10-caizhilian/references/source-manifest.json +99 -1
  330. package/skills/weaver-e10-shared/SKILL.md +8 -4
  331. package/skills/weaver-e10-shared/references/e10-auth-and-session.md +7 -5
  332. package/skills/weaver-e10-workflow/SKILL.md +23 -44
  333. package/skills/weaver-e10-workflow/references/source-manifest.json +27 -22
  334. package/skills/weaver-e10-workflow/references/workflow-create.md +238 -85
  335. package/skills/weaver-e10-workflow/references/workflow-edit.md +1 -1
  336. package/skills/weaver-e10-workflow/references/workflow-memory.md +1 -4
  337. package/skills/weaver-e10-workflow/references/workflow-query.md +2 -2
@@ -0,0 +1,890 @@
1
+ # 查询条件 API 写入规范
2
+
3
+ > **适用场景**:通过 `saveQueryItem` / `saveQueryConfig` API 或脚本添加、修复报表查询条件。
4
+ > **参考报表**:`1304979556231593985`(EBU 经营数据统计)
5
+ > **代码实现**:`本地工作目录` → `ensure_query_conditions()`;执行 `python 本地工作目录`
6
+ > **核心规则**:数据集合选取后,**选择类型未特别指定 SQL 时,一律默认为「条件字段」**。
7
+
8
+ ## ⚡ TL;DR — 显示方式(2026-09-11 定案,务必先读 §2.1)
9
+
10
+ | 事实 | 结论 |
11
+ |---|---|
12
+ | 条件级 `queryType` 正确落库值 | **JSON 数组字符串** `'["advance"]'`(高级搜索)/ `'["filter"]'`(筛选) |
13
+ | 前端回显判据 | 只看首字符是否 `[`;`'["advance"]'` → 勾选 ✅,`"advancedSearch"` → 不勾 ❌ |
14
+ | **`updateQueryType` 是最大陷阱** | 它把入参 `queryType` **批量写进所有条件**;传长码 = 一键摧毁全表回显(§2.1.3) |
15
+ | 保存后必须自检 | `e10-cli report query check-echo --report-id <id> --app-id <appId>` |
16
+ | 一键修复 | `e10-cli report query fix-echo --report-id <id> --app-id <appId>` |
17
+
18
+ ---
19
+
20
+ ## 一、选择类型(设计器 UI ↔ API)
21
+
22
+ | 设计器「选择类型」 | 顶层 `filterType` | `conditions[]` 内 | 说明 |
23
+ |-------------------|-------------------|-------------------|------|
24
+ | **条件字段**(默认) | `"default"` | **仅** `dataSetId` + `fieldId` + `relation` | 绑定数据集字段,禁止 SQL |
25
+ | **SQL**(显式指定) | `"sql"` | `"filterType": "sql"` + `sql` | 私有化环境才可用 |
26
+
27
+ **Agent 硬约束**:除非需求明确写「SQL 条件」,否则不得使用 `filterType: "sql"`。
28
+
29
+ **常见错误**
30
+
31
+ | 错误写法 | 后果 |
32
+ |----------|------|
33
+ | `conditions[].filterType: "field"` | 设计器「选择类型」无法回显为「条件字段」 |
34
+ | 顶层 `dataSetId` / `name` 有值 | 与设计器 save 形态不一致,回显异常 |
35
+ | `sqlOptions: {selected: ...}` | 条件字段应为 `{}` |
36
+ | `defaultValue: "3"`(非 JSON 数组) | `getQueryItem` 解析失败,整表 500 |
37
+ | **`queryItems` 传数组 `[]`/`[{…}]`** | 服务端 `parseObject` 单对象失败 / NPE → **saveQueryItem 500** |
38
+ | **`queryItems` 为 `{}` 且无 `conditions`** | `getConditions().size()` NPE → **500** |
39
+ | **JSON body 而非 multipart** | 参数绑不上 / 权限校验异常 → 常 500 |
40
+ | 缺 `ebBusinessId` | `wrapEbRightCheck` 编辑权限失败 |
41
+
42
+ ---
43
+
44
+ ## 二、条件字段标准形态(saveQueryItem)
45
+
46
+ 设计器 save 后回读的基准结构:
47
+
48
+ | 字段 | 条件字段正确值 |
49
+ |------|----------------|
50
+ | 顶层 `dataSetId` | **`null`** |
51
+ | 顶层 `name` | **`null`** |
52
+ | `nameIndex` | **`"0"`** |
53
+ | `filterType` | **`"default"`** |
54
+ | `sqlOptions` | **`{}`** |
55
+ | `conditions[]` | 仅 `dataSetId` + `fieldId` + `relation` |
56
+ | `fieldOptions` | 必传(含 `selected`、`dataSetField`、`relation`);`getQueryItem` 不持久化,更新时须重带 |
57
+ | `asNameIndex` | **唯一且 > 0**;更新时**必须回传**,否则置 0。`showOrder`(弹窗「排序」)人工配置通常留 **`0`**(= 未设,平台回落按 `asNameIndex` 排)——API 建条件时若自行填 1,2,3… 会在弹窗上留下可见差异(2026-09-14 参照报表 5 条全为 0)。事件超链接传查询值用 `{searchfield` + 三位补零 + `}`(如 `asNameIndex=1` → `{searchfield001}`,区间另加 `_start`/`_end`),见 `event-hreflink-guide.md` |
58
+ | **默认值三件套** | **必填**:`defaultValueType`(`default`=常规 / `custom`=自定义)+ `defaultValue`(当前生效值)+ `type1DefaultValue`(常规那份)/ `type2DefaultValue`(自定义那份);值均为 **JSON 字符串**。**漏写 → 设计器弹窗「默认值类型」= 请选择、默认值区炸开、后续整段行被顶出可视区**(见 §2.1.10) |
59
+ | `fieldId` / `dataSetField` | fieldKey:`{dataSetId}.{sourceId}.{fieldName}` |
60
+ | **`queryType`(显示方式)** | **必填 JSON 数组字符串**,见 §2.1;`'["advance"]'`(高级搜索,默认)或 `'["filter"]'`(筛选),可双选 `'["advance","filter"]'`。**服务端也接受长码字符串 `"advancedSearch"`,但那样设计器 UI 不会勾选** |
61
+ | `showWhere`(遗留) | 设计器一律写 `""`;**勿**用它表达显示方式 |
62
+ | `browserType` / `browserTypeStr` | `displayType=browser` 时必填;富对象优先,落库判据是 `browserTypeStr`(见 §2.1.2) |
63
+
64
+ ```python
65
+ def build_conditions(ds_id, field_id, relation):
66
+ return [{"dataSetId": ds_id, "fieldId": field_id, "relation": relation}]
67
+
68
+ def build_field_options(ds_id, field_id, relation, item_id=None):
69
+ row = {"dataSetField": field_id, "relation": relation, "queryItemValue": "输入值"}
70
+ if item_id:
71
+ row["id"] = str(item_id)
72
+ return {"selected": ds_id, ds_id: [row]}
73
+ ```
74
+
75
+ API:`POST /api/bs/edc/report/saveQueryItem`
76
+
77
+ | 项 | 正确 | 错误 → 常 500 |
78
+ |----|------|----------------|
79
+ | Content-Type | **`multipart/form-data`** | `application/json` 整包 body |
80
+ | 表单字段 | `reportId` + **`queryItems`** | 缺参、或写成 `queryItem` / `items` |
81
+ | `queryItems` 值 | **单个** QueryField **对象**的 JSON 字符串 | **`[]` / `[{...}]` 数组**(源码 `parseObject` 单对象) |
82
+ | Header | `eteamsid` + `Cookie` + **`ebBusinessId`/`ebbusinessid`=appId** | 缺业务 app,权限包装失败 |
83
+ | Referer | `/sp/edc/report/designer/{reportId}` | 可无,但建议带 |
84
+
85
+ ```http
86
+ POST /api/bs/edc/report/saveQueryItem
87
+ Content-Type: multipart/form-data; boundary=----x
88
+
89
+ ------x
90
+ Content-Disposition: form-data; name="reportId"
91
+
92
+ {reportId}
93
+ ------x
94
+ Content-Disposition: form-data; name="queryItems"
95
+
96
+ {"dataSetId":null,"name":null,...,"conditions":[{...}],"fieldOptions":{...}}
97
+ ------x--
98
+ ```
99
+
100
+ **硬约束(源码 `EdcReportDevDesignServiceImpl.saveQueryItem`)**
101
+
102
+ 1. `JSONObject.parseObject(queryItems, QueryFieldDto.class)` → **禁止**传数组。
103
+ 2. 非私有化环境会对 `queryField.getConditions()` 做 `jsonArray.size()`;**`conditions` 为 null**(如 `queryItems="{}"`)→ **NPE → 接口 500**。
104
+ 3. 一次请求只保存**一条**条件;多条 → **循环多次** `saveQueryItem`(每条一个对象)。
105
+ 4. 更新已有条件:对象内带 `id`(字符串雪花);新建不带 `id`,服务端生成并自动递增 `asNameIndex`。
106
+ 5. `saveQueryConfig` **不能代替** `saveQueryItem`;可先可后,但有高级搜索条件时建议条件级 `queryType: '["advance"]'`(见 §2.1)。
107
+
108
+ ```javascript
109
+ // ✅
110
+ await saveQueryItem({ reportId, queryItems: JSON.stringify(oneItemObject) });
111
+ // ❌
112
+ await saveQueryItem({ reportId, queryItems: JSON.stringify([oneItemObject]) });
113
+ await saveQueryItem({ reportId, queryItems: '[]' });
114
+ await saveQueryItem({ reportId, queryItems: '{}' }); // conditions 缺失 → 500
115
+ ```
116
+
117
+ ---
118
+
119
+ ### 2.1 显示方式(强制 · 不可不选)
120
+
121
+ > **✅ 终局定案(2026-09-11 · 以「设计器手工配置的真实条件」为基准反推)**
122
+ >
123
+ > 条件级「显示方式」的正确落库值是 **JSON 数组字符串**:
124
+ >
125
+ > | 显示方式 | 正确落库值 |
126
+ > |---|---|
127
+ > | 高级搜索 | `'["advance"]'` |
128
+ > | 筛选 | `'["filter"]'` |
129
+ > | 两者都选 | `'["advance","filter"]'` |
130
+ >
131
+ > **服务端对取值不敏感**:`'["advance"]'` / `'["filter"]'` / `'["advance","filter"]'` / `"advancedSearch"` / `"filter"` **全部返回 200 并原样落库**。
132
+ > **但只有 JSON 数组形态能在设计器 UI 正确回显勾选**;长码字符串 `"advancedSearch"` 会导致 **UI 两个都不勾**(旧版文档「写短码 500」的说法是错的,见下方推翻记录)。
133
+
134
+ #### 2.1.1 前端回显规则(源码级 · `_src/route_DatasetList.js`)
135
+
136
+ 前端**只看首字符是否为 `[`**,据此决定是否 JSON 解析:
137
+
138
+ ```js
139
+ // ① 读取(initCondition)—— 唯一判定逻辑
140
+ t.queryType = (t.queryType?.indexOf("[") > -1)
141
+ ? JSON.parse(t.queryType || "[]") // 含 "[" → 解析成数组
142
+ : t.queryType || []; // 不含 → 原样保留(普通字符串)
143
+ ```
144
+
145
+ ```js
146
+ // ② 复选项定义(initConditionFormStore)—— 选项 id 是「短码」
147
+ queryType:{ itemType:"CHECKBOX", required:!0,
148
+ data:[{ id: ze.g.advance, content:"高级搜索" },
149
+ { id: ze.g.filter, content:"筛选" }],
150
+ otherParams:{ minSelected:1 } }
151
+ ```
152
+
153
+ ```js
154
+ // ③ 短码枚举(lib.js)
155
+ function(e){ e.filter="filter"; e.advance="advance" }(i||(i={}))
156
+ ```
157
+
158
+ ```js
159
+ // ④ 新建条件默认值(仅 fieldKey 为空时)
160
+ this.fieldKey || (i.queryType = ["advance"]) // ← 注意:默认就是「数组」
161
+ ```
162
+
163
+ ```js
164
+ // ⑤ 保存 —— 表单值原样写回,不做类型转换
165
+ var l = e.conditionFormStore.getFormDatas();
166
+ r.queryType = l.queryType;
167
+ s.append("queryItems", JSON.stringify(r));
168
+ ```
169
+
170
+ **推论(四条必须记牢)**
171
+
172
+ 1. `CheckboxGroup` 用**严格相等**匹配:表单 value 的每个元素 vs `data[].id`。
173
+ 2. 落库 `'["advance"]'` → 解析为 `["advance"]` → 元素 `"advance"` === 选项 id `"advance"` → **勾选 ✅**
174
+ 3. 落库 `"advancedSearch"` → 不含 `[` → 保留为字符串 `"advancedSearch"` → 与选项 id 严格不等 → **不勾选 ❌**
175
+ 4. **设计器自己写出的就是数组**(见 ④ 默认值、⑥ 实际请求);长码 `"advancedSearch"` 只可能由**脚本手写**产生 → 它是**错误值**。
176
+
177
+ #### 2.1.2 证据链(2026-09-11,报表 `1313798296523022337`,应用「进销存管理-共享表」)
178
+
179
+ **A. API 写入实验(`saveQueryItem`,同一条件往返改 4 种值)**
180
+
181
+ | 写入值 | 返回 | 回读落库 | UI「显示方式」 |
182
+ |---|---|---|---|
183
+ | `'["advance"]'` | **200** | `'["advance"]'` | **高级搜索 ☑ ✅** |
184
+ | `'["filter"]'` | **200** | `'["filter"]'` | 筛选 ☑ ✅ |
185
+ | `'["advance","filter"]'` | **200** | `'["advance","filter"]'` | 双选 ☑ ✅ |
186
+ | `"advancedSearch"`(长码) | **200** | `"advancedSearch"` | **两个都不勾 ❌** |
187
+
188
+ > ⚠️ 四者**全部 200**,不存在「写短码 → 500」。旧结论 500 的真实成因是**手写 multipart payload 的结构/字段不被服务端封装接受**,与 `queryType` 取值无关。
189
+
190
+ **B. 三条条件 UI 回显对照(CDP 真实鼠标点击 tag → 读弹窗 checkbox)**
191
+
192
+ | 条件 | 落库 `queryType` | UI「显示方式」 |
193
+ |---|---|---|
194
+ | 销售部门(**人工手工配置**) | `'["advance"]'` | **高级搜索 ☑** |
195
+ | 销售人员(脚本写长码) | `"advancedSearch"` | **两个都 ☐** |
196
+ | 销售日期(脚本写长码) | `"advancedSearch"` | **两个都 ☐** |
197
+
198
+ → 脚本手工写的长码条件**全军覆没**,人工配置的数组条件**正确回显**。把两条长码条件改为 `'["advance"]'` 后,三条**全部回显 ☑ 高级搜索**,闭环验证通过。
199
+
200
+ **C. 设计器真实 `saveQueryItem` 实际请求(人工点击「确定」)**
201
+
202
+ ```
203
+ Content-Disposition: form-data; name="queryItems"
204
+
205
+ {"id":"…","sheetId":"…","nameIndex":"0","text":"销售部门","displayType":"browser",
206
+ "showWhere":"","advancedSearchType":"openCondition","queryType":["advance"], … }
207
+ ^^^^^^^^^^^^^^^^^^
208
+ 数组(短码),非字符串长码
209
+ ```
210
+
211
+ > 设计器上行 payload 里就是 `"queryType":["advance"]`(**数组 + 短码**)—— 这是平台的权威写法。
212
+
213
+ #### 2.1.3 🔴 真正根因:`updateQueryType` 会**批量覆盖所有条件**(最关键)
214
+
215
+ > **`POST /api/bs/edc/report/updateQueryType` 不是「只改报表级设置」** —— 它会把入参 `queryType` **全量写进该报表的每一条查询条件**,覆盖刚保存好的数组值。
216
+ > 这是「条件显示方式永远不勾选」的**真正单点根因**,也是历史定位一直抓不到的那个洞。
217
+
218
+ ** 矩阵**(同一报表连续调用,观察条件级 `queryType`)
219
+
220
+ | 调用 `updateQueryType(queryType=…)` | 三条条件级 `queryType` 变为 | 设计器回显 |
221
+ |---|---|---|
222
+ | `"advancedSearch"`(长码) | `advancedSearch` ×3 | **全不勾 ❌** |
223
+ | `"advance"`(裸短码) | `advance` ×3 | 不勾 ❌ |
224
+ | `"filter"` | `filter` ×3 | 不勾 ❌ |
225
+ | **`'["advance"]'`(数组短码)** | `'["advance"]'` ×3 | **全勾 ✅** |
226
+
227
+ **为什么历史定位一直失败**
228
+
229
+ ```text
230
+ 旧 CLI 的 save 流程: saveQueryItem(写 '["advance"]' ✅) → updateQueryType("advancedSearch" ❌)
231
+ ↓ 刚写好的数组 ↓ 立刻被批量打回长码
232
+ 设计器打开 → 不勾选
233
+ 人工在页面直接配条件: 只走 saveQueryItem,不经过 updateQueryType → '["advance"]' 完好 → 正常勾选
234
+ ```
235
+
236
+ 于是「人工配的能勾、API 写的不能勾」,长期被误判为「平台前端缺陷,客户端不可修」。**实际是 CLI 自己把值写坏了。**
237
+
238
+ **硬约束**
239
+
240
+ 1. **`updateQueryType` 的 `queryType` 必须传数组短码**:`'["advance"]'` / `'["filter"]'`,**与条件级同形态**。传长码 = 一键摧毁全表回显。
241
+ 2. **保存条件的推荐调用顺序**:`saveQueryItem`(数组) → `updateQueryType`(**同一个数组值**)。
242
+ 3. **不要**在保存后用长码 `updateQueryType`「对齐报表级显示形式」—— 它顺带把条件级也改坏。若只需报表级 `advancedSearchType`(如 `openCondition`),仍须把 `queryType` 传成数组形态。
243
+ 4. 落库后**必须回读自检**:`e10-cli report query check-echo --report-id <id> --app-id <appId>`。
244
+
245
+ #### 2.1.4 落库门禁
246
+
247
+ | 检查 | 接口 | 通过标准 |
248
+ |------|------|----------|
249
+ | **条件级显示方式(落库)** | `POST /api/bs/edc/report/getQueryItemNew`(multipart `reportId` + `query:'{}'`) | 每条 `queryType` 是 **含 `[` 的 JSON 数组字符串**,元素 ∈ `advance` / `filter` |
250
+ | 报表级 + 条件级批量对齐 | `POST /api/bs/edc/report/updateQueryType` | `code=200`,且入参 `queryType` **为数组短码**(§2.1.3) |
251
+
252
+ **硬约束**
253
+
254
+ 1. **写 `queryType` = JSON 数组字符串**:`'["advance"]'` / `'["filter"]'` / `'["advance","filter"]'`。**不要写长码 `"advancedSearch"`**(可落库但 UI 不回显)。
255
+ 2. **写 `showWhere: ""`**(遗留字段,设计器一致行为)。
256
+ 3. **回读判据**:`getQueryItemNew` 的 `queryType` **必须以 `[` 开头**。若是 `"advancedSearch"` → **回显必不勾**,需改写为 `'["advance"]'`。
257
+ 4. **强制走 CLI**:Agent 禁止手写 multipart 调 `saveQueryItem`;统一 `e10-cli report query save|type|list|check-echo|fix-echo` / `validate query`。
258
+ 5. 用户反馈「显示方式没勾选」时:**先 `check-echo` 回读 `queryType`**。若为长码 → **可修复的落库错误**,`fix-echo` 即恢复(**不要再解释为平台缺陷**);同时定位是否被 `updateQueryType` 长码覆盖过。
259
+
260
+ #### 2.1.5 报表级 vs 条件级(勿混淆)
261
+
262
+ | 层面 | 字段 | 正确值 | 存储形态 |
263
+ |---|---|---|---|
264
+ | **条件级**「显示方式」(编辑查询条件弹窗内) | `queryType` | `'["advance"]'` / `'["filter"]'` | **JSON 数组字符串**(§2.1) |
265
+ | **报表级**「高级搜索显示形式」(查询设置弹窗) | `queryType`(入参) | **也须 `'["advance"]'` / `'["filter"]'`** | 会被批量写入所有条件(§2.1.3) |
266
+
267
+ > 「查询设置」弹窗只有 `高级搜索显示形式 + 默认样式/展开条件` 等报表级开关;条件级的「显示方式 ☑高级搜索 ☑筛选」在**「编辑查询条件」**弹窗里,两者入口不同,但**落库字段同名、同形态、且共享覆盖关系**。
268
+
269
+ #### 2.1.6 ⚠️ 旧结论推翻记录(避免回退)
270
+
271
+ | 旧结论(2026-09-10/11 早期) | 现结论(2026-09-11 定案) |
272
+ |---|---|
273
+ | 落库必须写长码 `"advancedSearch"` | ❌ 错。落库必须写数组 `'["advance"]'` |
274
+ | 写短码 `"advance"` → 服务端 500 | ❌ 错。写数组短码 **200 正常落库** |
275
+ | 「UI 不勾选 = 平台缺陷,客户端不可修」 | ❌ 错。**改数组即可修复**,是脚本落库值写错 |
276
+ | `advancedSearch` 前端 0 次出现 → 服务端产物 | ⚠️ 部分成立(前台确实无此串),但它**不是**服务端要求的取值,而是脚本臆造的 |
277
+ | 前端 `edit` 直取长码灌表单 → 死循环 | ❌ 错。`edit` 灌的就是落库值;落库是数组时**正常勾选** |
278
+ | 条件级与报表级是两个独立字段,互不影响 | ❌ 错。`updateQueryType` 用 `queryType` **批量覆盖所有条件**(§2.1.3 真正根因) |
279
+ | `updateQueryType` 只改报表级「高级搜索显示形式」 | ❌ 错。它会把入参写进每条条件 → 长码一键摧毁全表回显 |
280
+
281
+ **旧结论怎么来的 / 为什么错**:早期用 JS 合成事件点击条件 tag,实际点到了**左侧字段面板**的「显示方式」(那是字段属性,非条件显示方式),读取勾选态得到假信号;且未把「人工配置的条件」作为基准对照。**修复方式**:改用 **CDP `Input.dispatchMouseEvent` 真实鼠标事件**点条件 tag,读「编辑查询条件」弹窗,并以人工条件为参照。
282
+
283
+ **真正根因的发现路径**:给 `save` 加「落库后回读自检」时,发现**刚写入的数组被回读成长码** → 隔离实验证明只有 `saveQueryItem` 时数组完好,一旦再调 `updateQueryType` 即被批量覆盖 → 穷举入参证明 `updateQueryType` 是「全表条件 `queryType` 批量写」。**AI 自检回读是抓到它的关键手段**,务必保留。
284
+
285
+ #### 2.1.7 修复已有错误条件的操作
286
+
287
+ **首选(CLI 一键):**
288
+
289
+ ```bash
290
+ e10-cli report query check-echo --report-id <id> --app-id <appId> # 诊断
291
+ e10-cli report query fix-echo --report-id <id> --app-id <appId> # 修正为数组短码
292
+ ```
293
+ **修复显示方式(CLI 原生,无需手写脚本):**
294
+
295
+ ```bash
296
+ e10-cli report query fix-echo <reportId> --app-id <appId> # 长码/空值 → 数组短码,恢复设计器勾选
297
+ e10-cli report query verify <reportId> --app-id <appId> --fix # 体检 Q1~Q10 + 幂等修复
298
+ ```
299
+
300
+ **设计器真实保存形态(基准,从 `saveQueryItem` 实际请求)**
301
+
302
+ ```json
303
+ {
304
+ "id": "…", "sheetId": "<reportId>", "nameIndex": "0",
305
+ "text": "销售部门",
306
+ "displayType": "browser",
307
+ "browserType": [{ "id": "3332180495306215437", "name": "部门", "type": "department",
308
+ "module": "hrm", "groupId": "3332180495271315421", "tenantKey": "thfnde9fvr",
309
+ "dataId": "2005096031068185488", "labelId": "52148",
310
+ "licenseModule": "hrm", "systemDefault": 1, "ebuliderDataBrowser": false, "disable": 0 }],
311
+ "browserTypeStr": "[{\"id\":\"HrmDepartmentComInfo\"}]",
312
+ "showWhere": "",
313
+ "queryType": ["advance"],
314
+ "dateType": "ymd",
315
+ "filterParam": { "optionTile": {}, "isTile": false, "multiple": true, "dataOptions": [],
316
+ "enableOption": false, "required": false, "dateSelectDefaultValue": "",
317
+ "numberSelectDefaultValue": "", "eBuilderForm": "", "titleField": "" },
318
+ "defaultValue": "[[],\"\"]", "handleDefaultValue": "[[],\"\"]",
319
+ "filterType": "default", "fieldOptions": {},
320
+ "conditions": [{ "dataSetId": "…", "fieldId": "…", "relation": "Equals" }],
321
+ "asNameIndex": 1, "showOrder": 1
322
+ }
323
+ ```
324
+
325
+ ---
326
+
327
+ ### 2.1.9 🔴 `advancedSearchType` —— **禁止静默注入**(会改掉报表页查询区的「样式」)
328
+
329
+ > **事故(2026-09-14)**:在报表 `1314970921403138199` 加 5 条查询条件后,用户质问
330
+ > 「怎么又把查询条件的样式改了,这个之前强调过不能动页面上原有展示格式」。
331
+ > 定位结论:**用户的 payload 里根本没有 `advancedSearchType`**,是 CLI `save_query_item.js`
332
+ > 在保存时**无条件注入** `advancedSearchType: 'openCondition'`(=「展开条件」)。
333
+
334
+ **字段语义(源码级)**
335
+
336
+ | 项 | 结论 |
337
+ |---|---|
338
+ | 实体字段 | `QueryFieldCommon.advancedSearchType`(`@ApiModelProperty("高级搜索类型")`) |
339
+ | 唯一功能读点 | `SheetServiceImpl`:取**第一条**高级搜索条件的 `advancedSearchType`,`=='openCondition'` → `isOpenCondition=true` |
340
+ | 页面效果 | `isOpenCondition=true` → 报表页查询区**展开铺开**(「展开条件」);否则 → **默认样式**(右上角搜索图标,点击才展开) |
341
+ | 设计器入口 | 报表级「查询设置」弹窗的 **高级搜索显示形式:默认样式 / 展开条件** |
342
+ | 人工条件(基准) | **该键不存在**(`undefined`),平台不主动写 |
343
+
344
+ **硬规则**
345
+
346
+ 1. **入参没有该键 → 就别写该键**(保持线上原值)。CLI 只在显式 `--advanced-search-type openCondition` 时才写。
347
+ 2. `updateQueryType`(批量对齐 `queryType`)**不得夹带** `advancedSearchType`。
348
+ 3. 该字段属于**展示样式**,与「显示方式」(`queryType`:高级搜索/筛选)**是两回事**,不得绑定在一起写。
349
+ 4. 用户没说「展开条件」时,任何情况下都不要写它。
350
+
351
+ **判别与修复**
352
+
353
+ ```bash
354
+ # 判别:条件里 advancedSearchType 非空 = 被注入过
355
+ e10-cli report query list --report-id <id> --app-id <appId>
356
+
357
+ # 修复(默认 dry-run;--apply 落库;只清该字段,保留 id/顺序/queryType)
358
+ e10-cli report fix query-style --report-id <id> --app-id <appId> [--id <itemId>...] [--apply]
359
+
360
+ # 附带修复「不带 id 保存 → 变成新增」造成的重复条件行(删除必须显式列 id)
361
+ e10-cli report fix query-style --report-id <id> --app-id <appId> --delete-id <itemId> --apply
362
+ ```
363
+
364
+ > ⚠️ **另一个必须记住的坑**:`saveQueryItem` **必须带 `id` 才是原地更新**;
365
+ > 不带 `id` 会**INSERT 一条新条件**(`asNameIndex` 自增),报表上出现重复条件。
366
+ > 更新存量条件时,payload 一律从线上回读对象派生并**保留 `id`**。
367
+
368
+ ---
369
+
370
+ ### 2.1.10 🔴 「默认值三件套」漏写 → 设计器弹窗整段坏掉(2026-09-14 事故)
371
+
372
+ **用户看到的现象**("查询条件的样式被改了"):
373
+
374
+ | 现象 | 说明 |
375
+ |------|------|
376
+ | 「默认值类型」= **请选择** | 本该是「常规」或「自定义」 |
377
+ | 「默认值」区**同时铺开所有控件变体** | 请输入 / 开始日期-结束日期 / 选择日期时间 / 请选择 / 选择日期 / 选择月份 / 选择年份 … 一屏全来 |
378
+ | 「日期类型 / 显示位置 / 条件必填 / 查询条件」**看不见** | 被上面那一大片顶出可视区(弹窗高度固定),并非真被删除 |
379
+
380
+ **根因**:弹窗的默认值区由 `defaultValueType` 驱动渲染。不写它 → 前端取不到模式 → 每个变体都渲染一遍。
381
+
382
+ **数据模型( 参照报表 `1314938962594906121`,人工配置的权威形态)**
383
+
384
+ | 键 | 含义 | 参照「年月」取值 | 参照「部门」取值 | 参照「人员/加班/聘用」取值 |
385
+ |----|------|------------------|------------------|----------------------------|
386
+ | `defaultValueType` | 模式:`default`=常规 / `custom`=自定义(前端 label:`55337`=常规、`53999`=自定义) | `custom` | `default` | `default` |
387
+ | `defaultValue` | **当前生效**的值 | `["{yearmonth:-0}",""]` | `[[],""]` | `["",""]` |
388
+ | `type1DefaultValue` | 「常规」模式下保存的值 | `""` | `[[],""]` | `["",""]` |
389
+ | `type2DefaultValue` | 「自定义」模式下保存的值 | `["{yearmonth:-0}",""]` | `""` | `""` |
390
+ | `handleDefaultValue` | 平台解析后的实际值(**服务端自己算并回写**) | `["2026-09",""]` | `[[],""]` | `["",""]` |
391
+
392
+ > ⚠️ **全部是 JSON 字符串**(`"[[],\""]"` 这种),不是对象/数组本身。
393
+ > ⚠️ 日期占位符(`{yearmonth:-0}` 等)**不用自己解析**:落库时平台会把 `handleDefaultValue` 回写成 `["2026-09",""]`。
394
+ > 设计器「新建条件」模板本身带 `defaultValueType:"default"` + `defaultValue:["",""]`,所以**人工配的条件永远不会缺** —— 只有用 API 建条件时才会漏。
395
+
396
+ **修复**
397
+
398
+ ```bash
399
+ # 只补缺失项(默认模式、空默认值 —— 弹窗恢复正常渲染,不改取数范围)
400
+ e10-cli report fix query-default --report-id <id> --app-id <appId> --apply
401
+
402
+ # 点名某条用「自定义」默认值(如 年月默认当月,与参照报表一致)
403
+ e10-cli report fix query-default --report-id <id> --app-id <appId> \
404
+ --set '年月=custom:["{yearmonth:-0}",""]' --set '部门=default:[[],""]' --apply
405
+
406
+ # 顺带把「排序」对齐为设计器模板值 0
407
+ e10-cli report fix query-default --report-id <id> --app-id <appId> --all --show-order 0 --apply
408
+ ```
409
+
410
+ 落库后脚本会自动回读校验(`stillMissingDefaultValueType` 必须为空)。
411
+
412
+ ---
413
+
414
+ ### 2.1.11 ★ 查询条件合规体检(Q1~Q10 判据总表 · `e10-cli report verify query`)
415
+
416
+ > 把本章所有坑的**判据**固化成一条只读命令。搭完条件、改完条件、用户投诉后,第一件事就是跑它。
417
+ > **命令**:`e10-cli report verify query <reportId> <appId> [--json] [--fix]`(等价别名 `e10-cli report query verify ...`)
418
+ > 有 FAIL → exit 1;`--fix` 只做幂等安全项(清样式字段 / 补三件套 / 短码化),**绝不新增或删除条件**。
419
+
420
+ | # | 判据 | 级别 | 不通过时页面上的表现 | 出处 |
421
+ |---|------|------|----------------------|------|
422
+ | Q1 | `queryType` 是 **JSON 数组短码**(以 `[` 开头且可 parse 成数组) | FAIL | 设计器「显示方式」复选框是空的 | §2.1.1 / QUERY-1 |
423
+ | Q2 | `advancedSearchType` **必须为空** | FAIL | 报表页查询区从「默认样式」变成「展开条件」铺开 | §2.1.9 / QUERY-5 |
424
+ | Q3 | `defaultValueType` 有值(`default`\|`custom`) | FAIL | 弹窗「默认值类型」=请选择,默认值区把**所有**控件变体炸开 | §2.1.10 / QUERY-7 |
425
+ | Q4 | `defaultValue` 有值(JSON 字符串) | WARN | 默认值区仍可能铺开 | QUERY-7 |
426
+ | Q5 | `type1DefaultValue`(常规)/ `type2DefaultValue`(自定义)随模式在位 | WARN | 切换模式时值丢失 | QUERY-7 |
427
+ | Q6 | `id` 存在且 `asNameIndex` **唯一且 >0** | FAIL | 重复条件 / 保存变新增 | QUERY-6 |
428
+ | Q7 | `displayType=browser` 时 `browserType` 富对象非空 + `browserTypeStr` 非空 | FAIL | 关联类型为空、条件点不开 | §2.1.2 / QUERY-3 |
429
+ | Q8 | `filterParam.required` / `showType` 在位 | WARN | 「显示位置 / 条件必填」等弹窗后段字段为空 | — |
430
+ | Q9 | `showOrder` 是否为设计器模板值 `0` | INFO | 弹窗「排序」与人工配置有可见差异 | QUERY-7 |
431
+ | Q10 | 报表级 `queryType` **是否混杂**(同时存在多种写法) | WARN | 曾被 `updateQueryType` 批量覆盖过 | §2.1.3 / QUERY-2 |
432
+
433
+ > **不要拿 `getQueryConfig` 当判据** —— 本环境它恒返回 `data:null`(QUERY-4)。判据一律走 `getQueryItemNew` 回读。
434
+
435
+ ---
436
+
437
+ ### 2.1.2 关联类型 `browserType`:必须写「富对象」,不是 `[{id}]` 简写(强制)
438
+
439
+ > **事故**:同报表查询条件「销售部门」绑定字段 `originFieldType=Department`,但设计器关联类型显示为空/默认**人员**。**定案根因:`browserType` 写成了简写 `[{"id":"HrmDepartmentComInfo"}]`,缺少 `name`/`type` 等字段 → 前端无法解析显示名 → 退回默认「人员」标签页。**
440
+
441
+ **设计器真实形态(基准)**:`browserType` 是 **全字段富对象数组**,关键字段 `name`(显示名)、`type`(`department`/`employee`)、`module`、`groupId`、`tenantKey`、`dataId`、`labelId`、`id`。**`browserTypeStr` 才是落库判据**(服务端存 `[{"id":"HrmDepartmentComInfo"}]` 形式的字符串)。
442
+
443
+ | 字段 `originFieldType` | `displayType` | `browserTypeStr`(落库) | 设计器关联类型 |
444
+ |------------------------|---------------|--------------------------|----------------|
445
+ | `Employee` | `browser` | `[{"id":"HrmEmployeeComInfo"}]` | **人员** |
446
+ | `Department` | `browser` | `[{"id":"HrmDepartmentComInfo"}]` | **部门** |
447
+ | `DepartmentAllPath` | `browser` | `[{"id":"HrmDepartmentAllPathComInfo"}]` | 部门全路径 |
448
+
449
+ **推荐获取富对象的正确姿势(最稳)**:**不要手拼** `browserType` 富对象;用 `saveQueryItem` 时:
450
+ 1. `displayType: "browser"` + `browserTypeStr` 写 `[{"id":"HrmDepartmentComInfo"}]`;
451
+ 2. 或在设计器里手动选一次「部门」让前端生成富对象后实际请求复用(本环境已验证:手动选后可正确回显「部门」)。
452
+
453
+ **硬约束**
454
+
455
+ 1. `displayType: browser` **禁止** `browserTypeStr: "[]"`;必须按字段 `originFieldType` 写入对应 ComInfo id。
456
+ 2. 仅写 `[{"id":...}]` 简写**服务端可接受**(`browserTypeStr` 落库正确),但**前端回显可能为空**;若要求 UI 正确显示,需富对象。
457
+ 3. `save_query_item.js` 内置 `applyQueryDisplayType()` 自动补 `browserType`(未显式指定 `displayType` 时);不匹配时输出 **WARN**。
458
+ 4. 回读核对:`browserTypeStr` 不得为 `"[]"`(丢了 → 退回「人员」)。
459
+ 5. 跳过自动推导用 `--skip-display-type`(仅在确实要手填时)。
460
+
461
+ ---
462
+
463
+ ```javascript
464
+ // 显示方式:条件级落库值 = JSON 数组字符串(前端唯一能回显勾选的形态)
465
+ function resolveQueryType(userHint) {
466
+ const s = String(userHint || '').toLowerCase();
467
+ if (/筛选|filter/.test(s) && !/高级搜索|advanced/.test(s)) return '["filter"]';
468
+ return '["advance"]'; // 默认「高级搜索」· 不可不选
469
+ }
470
+ // 注意:showWhere 一律写 ''(遗留字段)
471
+ // 条件级选项 id 是短码 advance/filter;落库必须是含 "[" 的 JSON 数组字符串,
472
+ // 否则前端首字符判定落空 → 退化为普通字符串 → 严格相等失败 → UI 不勾选(见 §2.1)
473
+ // 报表级 updateQueryType 的 queryType 也须用数组形态(它会批量覆盖所有条件,见 §2.1.3)
474
+ ```
475
+
476
+ ### 2.1.8 「显示方式没勾选」诊断卡(对接用户质询时用)
477
+
478
+ | 用户说法 | 你的回答要点 |
479
+ |---|---|
480
+ | 「页面上显示方式没勾选」 | 先 `getQueryItemNew` 回读 `queryType`:**是否以 `[` 开头**? |
481
+ | 「回读是 `'["advance"]'` 却仍不勾」 | 极罕见;先强刷设计器页面(CDN/缓存),再核对条件 `id` 是否为最新 |
482
+ | 「回读是 `"advancedSearch"` 长码」 | **这是落库值写错了**,属可修复问题 → 改写为 `'["advance"]'`,重开弹窗即勾选 |
483
+ | 「能修吗?」 | **能修**:把 `queryType` 改为 JSON 数组字符串(§2.1.7 脚本 / `e10-cli report query fix-echo`) |
484
+ | 交付口径 | 「已修正落库值,条件显示方式回显正常」——**不要再解释为平台缺陷** |
485
+
486
+ **判据一行流**
487
+
488
+ ```text
489
+ queryType 以 "[" 开头 → 数组 → UI 勾选正常 ✅
490
+ queryType 是其它字符串 → 退化 → UI 不勾选 ❌(改写为 '["advance"]')
491
+ ```
492
+
493
+ > 来源:前端 bundle 经 CDP `Debugger.getScriptSource` 导出至 `本地工作目录`
494
+ > (`route_DatasetList.js` 179879B / `route_ReportDesigner.js` 702877B / `lib.js` 661658B);
495
+ > UI 回显用 `_q_real2.py`(CDP `Input.dispatchMouseEvent` 真实鼠标点击条件 tag + 读「编辑查询条件」弹窗 checkbox)。
496
+
497
+ ### 2.1.2.1 关联浏览分类元数据接口(⚠️ 富对象唯一正确来源)
498
+
499
+ > **勿手拼富对象!** 富对象的 13 个字段值全部来自服务端接口,手拼易错(`labelId`/`dataId` 无法猜)。
500
+ > 本接口 2026-09-11 定位、**2026-09-14 修正为 GET `browserBeanSearch`**,为「部门 / 人员 / 岗位 …」全部关联类型的权威数据源。
501
+
502
+ ```http
503
+ GET /api/bcw/relevanceBrowser/browserBeanSearch?searchValue=<中文分类名>
504
+ Header: ebbusinessid: <appId>
505
+ → data.data[] 每条 = 13 键富对象
506
+ ```
507
+
508
+ > 🔴 **2026-09-14 修正**:旧文档写的 `POST /api/bcw/relevanceBrowser/getBrowserBean` 在**本环境恒返回 `{"code":500,"msg":"接口错误"}`**(前端其实把 `browserBeanSearch` 的响应**本地拦截**了 —— 见 `lib.js` 里 `relationList()` 分支,所以它在页面上看起来"能用")。
509
+ > 可用的是 **GET `browserBeanSearch`**;`searchValue` 必须用**中文分类名**(拼音检索服务端不支持:`bm` / `ry` 返回 0 条),空串只返回档案/工作流等非 HRM 分类。
510
+ > CLI 已内置此回退:`themes/e10-cli report query save` 的 `fetchBrowserBeanSearch()`;`displayType=browser` 且 `browserType` 仅为 `[{id}]` 简写时**自动升级为富对象**。
511
+
512
+ ** 取值(租户 `tmxislnm9p` / 应用 1178336857624084480)**
513
+
514
+ ```http
515
+ GET …/browserBeanSearch?searchValue=部门 → 命中 3 条,取 name=部门
516
+ GET …/browserBeanSearch?searchValue=人员 → 命中 3 条,取 name=人员
517
+ ```
518
+
519
+ **「部门」完整富对象( 取值)**
520
+
521
+ ```json
522
+ {"id":"2005096031068185488","tenantKey":"all_teams","deleteType":0,
523
+ "dataId":"2005096031068185488","licenseModule":"hrm","labelId":"52148",
524
+ "title":"人事: 部门","disable":0,"systemDefault":1,"ebuliderDataBrowser":false,
525
+ "name":"部门","module":"hrm","type":"department","groupId":"8574699142778669114"}
526
+ ```
527
+
528
+ **「人员」完整富对象( 取值)**
529
+
530
+ ```json
531
+ {"id":"2005096031068185492","tenantKey":"all_teams","deleteType":0,
532
+ "dataId":"2005096031068185492","licenseModule":"hrm","labelId":"29511",
533
+ "title":"人事: 人员","disable":0,"systemDefault":1,"ebuliderDataBrowser":false,
534
+ "name":"人员","module":"hrm","type":"resource","groupId":"8574699142778669114"}
535
+ ```
536
+
537
+ > ⚠️ 两条的 `id` 都是**业务 id**(= `dataId`,部门 …488 / 人员 …492),**不等于** ComInfo 短 id。
538
+ > 因此校验「关联类型对不对」**不能按 id 比**,要按 `name`(人员/部门)或 `type`(resource/department)判 —— 否则会误报"不匹配"(已修 `save_query_item.js`)。
539
+ > 同一环境里还有近名分类:`部门字段`(…498) / `人员字段`(…502),按 `name` **精确**取,勿用 `indexOf`。
540
+
541
+ **落库判据对照**
542
+
543
+ | 关联类型 | `browserTypeStr`(落库判据) | 富对象 `name` / `type` |
544
+ |---|---|---|
545
+ | 部门 | `[{"id":"HrmDepartmentComInfo"}]` | 部门 / `department` |
546
+ | 人员 | `[{"id":"HrmEmployeeComInfo"}]` | 人员 / `resource` |
547
+ | 部门全路径 | `[{"id":"HrmDepartmentAllPathComInfo"}]` | 部门字段 / `departmentDesc` |
548
+
549
+ **修复存量条件(最小侵入,已 HTTP 200)**
550
+
551
+ ```python
552
+ # 1) 读取
553
+ q = POST /api/bs/edc/report/getQueryItemNew (multipart: reportId + query:'{}')
554
+ items = q["data"]["list"] # ⚠️ 在 data.list,不是 data.queryItems
555
+ # 2) 取富对象
556
+ bean = GET /api/bcw/relevanceBrowser/browserBeanSearch?searchValue=人员 → name=="人员" 那条
557
+ # 3) 替换 + 同步 browserTypeStr + 保存
558
+ item["browserType"] = [bean]
559
+ item["browserTypeStr"] = json.dumps([{"id":"HrmEmployeeComInfo"}], ensure_ascii=False)
560
+ POST /api/bs/edc/report/saveQueryItem (multipart: reportId + queryItems 单对象JSON)
561
+ ```
562
+
563
+ **UI 验证要点**:打开「编辑查询条件」弹窗,查 `.ui-browser-type-search-input` 的 `value`:
564
+ - `""` + 控件容器带 `is-empty` 类 → 关联类型**丢失**
565
+ - `"人员"` / `"部门"` → **正确回显** ✅
566
+
567
+ > 修复前「销售人员」`value=""`(`is-empty`);修复后 `value="人员"` ✅
568
+
569
+ ---
570
+
571
+ ## 二点五、saveQueryItem 始终 500 定位(强制)
572
+
573
+ > **事故**:议题类报表搭建时,改字段/单条/空数组/`queryConfig`/`sheetId` 均 500 → 根因是**调用形态**,不是业务字段内容。
574
+
575
+ | 检查顺序 | 项 | 通过标准 |
576
+ |----------|----|----------|
577
+ | 1 | Content-Type | `multipart/form-data`,字段名 `reportId`、`queryItems` |
578
+ | 2 | `queryItems` 形态 | **单个对象** JSON;禁止数组、禁止空 `{}` |
579
+ | 3 | `conditions` | **非 null 数组**,至少 1 个 `{dataSetId, fieldId, relation}` |
580
+ | 4 | Header | `ebBusinessId` = 报表所属 **appId**;`eteamsid` + Cookie |
581
+ | 5 | 多条条件 | **多次** POST,每次一条;不要一次塞数组 |
582
+ | 6 | 对照基准 | 先 `getQueryItem` 拉已有报表一条,改 `text`/`fieldId` 再 save |
583
+
584
+ **不要**:为排 500 去开浏览器扫页(浪费);先按上表自检。仍 500 时看响应 `msg` 是否权限/报表不存在,再问用户。
585
+
586
+ **优先 CLI**(强制):
587
+
588
+ ```bash
589
+ # 保存条件(自动默认条件级 queryType='["advance"]',并 updateQueryType)
590
+ e10-cli report query save --report-id <id> --app-id <appId> --item queryItem.json
591
+ e10-cli report query save ... --show-where "筛选" # 仅用户点名筛选时
592
+ e10-cli report query type --report-id <id> --app-id <appId> # 只对齐报表级显示方式勾选
593
+ e10-cli report query list --report-id <id> --app-id <appId>
594
+ e10-cli report validate query --map-show-where "高级搜索"
595
+ e10-cli report validate query --validate-show-where --file item.json
596
+ # queryItem.json = 单条对象(禁止数组);须含非空 conditions;条件级 queryType='["advance"]'
597
+ ```
598
+
599
+ **不卡死(强制)**:`saveQueryItem` / `e10-cli report query save` 按形态自检并重试 **至多 1 次** 仍失败 → **立即提示用户**(可在设计器手动配查询条件)→ **继续**权限/其它布局/交付主表 → 任务收尾再自动补试 1 次。**禁止**在查询条件步骤死循环。见 `failure-cleanup-and-nonblocking-guide.md` §二。
600
+
601
+ **与布局 500 区分**:`saveReportDevInfo` 的 border `style` 须为**数字**(如 `1`)与查询无关;查询 500 优先查本节。
602
+
603
+ ---
604
+
605
+ | 需求 | displayType | relation | 备注 |
606
+ |------|-------------|----------|------|
607
+ | 文本(包含) | `text` | `Contain` | 勿写 `select` |
608
+ | 文本(等于) | `text` | `Equals` | |
609
+ | **日期区间**(日/时间) | `date` / `date.ymd` | `between` | 见 §3.1 自动匹配 |
610
+ | **年月/年** | `date.ym` / `date` | `between` | 见 §3.1 |
611
+ | 下拉 | `select` | `Equals` | **必须**自动拉选项写入 `selectOptions`(§3.2) |
612
+ | 数字范围 | `number` | 默认 | |
613
+ | 人员浏览按钮 | `browser` | `Equals` | 人员类字段 |
614
+
615
+ **日期 displayType 与字段 format**
616
+
617
+ | 数据集字段 format | 查询条件 displayType |
618
+ |-------------------|----------------------|
619
+ | `yyyy-MM-dd`(及带时分秒) | `date.ymd` |
620
+ | `yyyy-MM` | `date.ym` |
621
+ | `yyyy` / 仅「年」 | `date` |
622
+ | 其他日期 | `date` |
623
+
624
+ 首条查询条件可设 `advancedSearchType: "openCondition"`(如集团军默认展开)。
625
+
626
+ ---
627
+
628
+ ### 3.1 查询条件类型自动匹配(强制)
629
+
630
+ > Agent 配置 / 修复查询条件时,**禁止**一律写成 `text`。必须按 **条件显示名 + 数据集字段类型/format** 自行判断。
631
+
632
+ **判定顺序**(命中即停):
633
+
634
+ | 优先级 | 信号(名称或字段元数据) | displayType | relation | 设计器形态 |
635
+ |--------|--------------------------|-------------|----------|------------|
636
+ | 1 | 名称含「年月」;或 format=`yyyy-MM` | `date.ym` | `between` | 年月区间 |
637
+ | 2 | 名称含「年份」「年度」或纯「年」;format=`yyyy` | `date` | `between` | 日期(年) |
638
+ | 3 | 名称含「日期」「时间」「时段」「期间」;或 `fieldType`/`originFieldType` ∈ Date/DateTime/Time/datetime | `date.ymd`(format 非 yyyy-MM 时)或 `date` | **`between`** | **日期区间** |
639
+ | 4 | 人员 / Employee / 浏览按钮字段 | `browser` | `Equals` | 人员 |
640
+ | 5 | **Select / 下拉框 / Check**(`compType`/`type`/`originFieldType` 为 Select)或需求明确下拉 | `select` | `Equals` | 下拉(**§3.2 必拉选项**) |
641
+ | 6 | 其他 | `text` | `Contain`(模糊)或 `Equals` | 文本 |
642
+
643
+ **硬约束**
644
+
645
+ 1. 日期/时间类 **必须** `relation: "between"`,**禁止** `Equals` + `displayType: text`(事故:签订日期被配成文本等于)。
646
+ 2. 判定依据优先:`fieldsAndOriginFields` 的 `fieldType` / `originFieldType` / `config.format`;名称作辅助(如条件叫「签订日期」字段叫「合同签订日期」)。
647
+ 3. 写成日期区间时同步带齐 §四:`filterParam.enableOption=true`、21 项 `dataOptions`、`selectOptions=[]`。
648
+ 4. **`displayType: select` 时禁止 `selectOptions: []`** — 必须按 §3.2 按匹配字段自动获取选项(事故:供应商等级下拉无选项)。
649
+ 5. 回读 `getQueryItem`:核对 `displayType` + `conditions[0].relation` +(下拉时)`selectOptions.length > 0` 且 `selectKey`/`selectValue` 方向正确。
650
+ 6. **定点场景**:用户只点一条条件 → 只改该条,禁止重配全部查询(`targeted-fix-guide.md`)。
651
+
652
+ ---
653
+
654
+ ### 3.2 下拉查询条件:按匹配字段自动获取选项(强制)
655
+
656
+ > **事故**:报表「供应商-1」`1312703681350901760`,「供应商等级」已是 `displayType: select`,但 `selectOptions: []` → 预览/高级搜索无选项映射。
657
+
658
+ 当判定为下拉(§3.1 优先级 5)或用户要求下拉时:
659
+
660
+ 1. 从 `conditions[0].fieldId` 解析三段 fieldKey:`{dataSetId}.{sourceId}.{fieldName}`
661
+ - `fieldName` 在报表内多为 `field_{雪花ID}`(绑定 fieldsKey)
662
+ - **取选项时** `fieldName` 参数必须用 **裸雪花 ID**(去掉 `field_` 前缀)
663
+ 2. 调用:
664
+
665
+ ```
666
+ GET /api/ebuilder/form/ds/options
667
+ ?sourceType=FORM
668
+ &objId={sourceId}
669
+ &fieldName={裸雪花ID} ← 禁止传 field_xxx(会返回空数组)
670
+ ```
671
+
672
+ `FORM` 无数据时可再试 `sourceType=LOGIC`。也可用 `ds/fields` 里该字段 `config.options`(`name` + `valueKey`/`value`)作为兜底。
673
+
674
+ 3. 映射写入 `selectOptions` / `selectOptionsStr`(**键值方向勿反**):
675
+
676
+ | 字段 | 含义 | 示例 |
677
+ |------|------|------|
678
+ | `selectKey` | **选项值 / ID**(过滤用) | `"864407987151323141"` |
679
+ | `selectValue` | **显示名称** | `"准入供应商"` |
680
+ | `id` | 同 `selectKey` | `"864407987151323141"` |
681
+
682
+ ```javascript
683
+ // ds/options → saveQueryItem(事故:曾把名称写进 selectKey、ID 写进 selectValue)
684
+ selectOptions = data
685
+ .filter(o => String(o.archive ?? '0') !== '1')
686
+ .map(o => ({
687
+ selectKey: String(o.id), // 数值 / 选项 ID
688
+ selectValue: o.name, // 名称
689
+ id: String(o.id),
690
+ }));
691
+ ```
692
+
693
+ 4. `relation` 用 `Equals`;`showWhere` 仍遵守 §2.1。
694
+ 5. **禁止**:只设 `displayType: select` 却留下空 `selectOptions`;**禁止**用带 `field_` 前缀调 `/ds/options` 后误判「字段无选项」。
695
+
696
+ ```javascript
697
+ async function fetchSelectOptionsForQuery(sourceId, fieldNameFromKey) {
698
+ const bare = String(fieldNameFromKey).replace(/^field_/, '');
699
+ const r = await get('/api/ebuilder/form/ds/options', {
700
+ sourceType: 'FORM', objId: sourceId, fieldName: bare,
701
+ });
702
+ if (!r.data?.length) throw new Error(`select options empty for ${bare}`);
703
+ return r.data.filter(o => String(o.archive ?? '0') !== '1')
704
+ .map(o => ({ selectKey: String(o.id), selectValue: o.name, id: String(o.id) }));
705
+ }
706
+ ```
707
+
708
+ ```javascript
709
+ function inferQueryDisplay(text, fieldMeta) {
710
+ const name = `${text||''} ${fieldMeta?.text||''}`;
711
+ const ft = String(fieldMeta?.fieldType||'').toLowerCase();
712
+ const oft = String(fieldMeta?.originFieldType||'').toLowerCase();
713
+ const fmt = String(fieldMeta?.config?.format || fieldMeta?.format || '');
714
+ if (/年月/.test(name) || fmt === 'yyyy-MM')
715
+ return { displayType: 'date.ym', relation: 'between' };
716
+ if (/年份|^年$|年度/.test(name) || fmt === 'yyyy')
717
+ return { displayType: 'date', relation: 'between' };
718
+ if (/日期|时间|时段|期间/.test(name) ||
719
+ ['date','datetime','time','timestamp'].includes(ft) ||
720
+ ['date','datetime','time'].includes(oft))
721
+ return { displayType: fmt.startsWith('yyyy-MM-dd') || !fmt ? 'date.ymd' : 'date',
722
+ relation: 'between' };
723
+ return { displayType: 'text', relation: 'Contain' };
724
+ }
725
+ ```
726
+
727
+ ---
728
+
729
+ ## 四、日期区间:快捷选项(21 项)
730
+
731
+ > 明细 catalog 见 `date-range-query-reference.md` · 快照 `outputs/join_date_filterparam.json`
732
+
733
+ 设计器手动 save 后的**正确形态**(勿用旧版 15 项数字码 + 9 项 selectOptions):
734
+
735
+ | 字段 | 正确值 |
736
+ |------|--------|
737
+ | `selectOptions` | **`[]`** |
738
+ | `filterParam.enableOption` | **`true`** |
739
+ | `filterParam.isTile` | **`true`** |
740
+ | `filterParam.dataOptions` | **21 行**,`id` = `selectValue`(camelCase,如 `day3`、`thisMonth`) |
741
+ | `filterParam.optionTile` | **`{}`** |
742
+ | `filterParam.dateSelectDefaultValue` | **`""`(空)** |
743
+
744
+ **错误做法**:写入 `filterParam.dateSelectDefaultValue: "thisMonth"` 或填满 `optionTile` — 设计器齿轮菜单往往**只剩「自定义」**。
745
+
746
+ ```python
747
+ # 见 apply_ebu_from_xlsx.py → _default_date_filter_param()
748
+ ```
749
+
750
+ ---
751
+
752
+ ## 五、日期区间:系统参数默认值(设计器「自定义」)
753
+
754
+ 默认值**不是** `dateSelectDefaultValue`,而是顶层:
755
+
756
+ | 字段 | 说明 |
757
+ |------|------|
758
+ | `defaultValueType` | **`"custom"`** |
759
+ | `defaultValue` | JSON **字符串**,形如 `'["{thismonth}",""]'` |
760
+
761
+ 运行时由 `SystemVariableUtil` + `DynamicParamsBuilder` 解析;`getQueryItem` 回读的 `handleDefaultValue` 为解析后结果。
762
+
763
+ ### 5.1 已验证系统参数
764
+
765
+ | 场景 | defaultValue | handleDefaultValue 示例 |
766
+ |------|--------------|-------------------------|
767
+ | **本月** | `["{thismonth}",""]` | `["2026-08-01,2026-08-31",""]` |
768
+ | **今天** | `["{date}","{date}"]` | `["2026-08-19","2026-08-19"]` |
769
+ | **本周** | `["{thisweek}",""]` | `["2026-08-17,2026-08-23",""]` |
770
+ | **今年** | `["{thisyear}",""]` | `["2026-01-01,2026-12-31",""]` |
771
+ | **当前用户姓名** | `["{lastname}",""]` | `["张三",""]`(高级搜索文本等于) |
772
+ | **当前用户 ID** | 数据集筛选 **`eq`** + `{userid}` | 人员字段「创建者 = 当前登录人员」 |
773
+
774
+ **注意**
775
+
776
+ - `{today}` **无效**(不会被解析,占位符会被清空);「今天」用 **`{date}`**。
777
+ - `{currmonth}` 无效;「本月」用 **`{thismonth}`**。
778
+ - 区间型参数(本月/本周)写在**数组首项**;今天需起止同一天则写 **`["{date}","{date}"]`**。
779
+ - `defaultValue` 必须是 **JSON 数组字符串**,禁止裸写 `"3"` 等(会导致 `getQueryItem` 500)。
780
+
781
+ ### 5.2 设计器操作对应
782
+
783
+ 1. 默认值类型 → **自定义**
784
+ 2. 默认值 → 填 `{thismonth}`、`{date}` 等(设计器存为 JSON 数组)
785
+ 3. 日期区间 + **启用选项** ON → 21 项快捷按钮(§四)
786
+
787
+ ---
788
+
789
+ ## 六、EBU 报表示例(三条高级搜索 + 数据集行级筛选)
790
+
791
+ 报表 `1304979556231593985` · 数据集 EBU团队 `1304979556231593994`
792
+
793
+ | 显示名称 | fieldKey 末段 | displayType | relation | 默认值 | queryType |
794
+ |----------|---------------|-------------|----------|--------|-----------|
795
+ | 集团军 | `field_1299763447342276612` | `text` | `Contain` | 无 | `["advance"]` |
796
+ | 入职时间 | `field_1299763447342276619` | `date.ymd` | `between` | `["{thismonth}",""]` | `["advance"]` |
797
+ | EBU成立时间 | `field_1299763447342276620` | `date.ym` | `between` | `["{date}","{date}"]` | `["advance"]` |
798
+
799
+ > 三条均为「高级搜索」显示方式 → 条件级 `queryType` 一律 `'["advance"]'`(见 §2.1)。
800
+ > 「高级搜索显示形式」(报表级、`saveQueryConfig` → `{"advancedSearchType":"openCondition"}`)是**报表级**开关,与条件级显示方式共享 `queryType` 覆盖关系(§2.1.3)。
801
+
802
+ ---
803
+
804
+ ## 七、数据集筛选(设计器左侧 · 行级权限)
805
+
806
+ > **完整规范已独立成文**:`dataset-query-filter-guide.md`(func 对照、字段对比、日期 format、AND/OR、EBU 参考样本、验证清单)。
807
+ > 本节仅保留与高级搜索的边界说明。
808
+
809
+ **与高级搜索不同**:设计器左侧数据集右键「筛选条件」走 **`queryInfoSave` / `queryInfoGet`**(`conditionData` + `otherData`),**不是** `saveQueryItem`。
810
+
811
+ | API | 参数 |
812
+ |-----|------|
813
+ | 保存 | `POST /api/bs/edc/dataset/queryInfoSave` → `datasetId`, `filterData`, `otherData` |
814
+ | 读取 | `GET /api/bs/edc/dataset/queryInfoGet` → `datasetId` |
815
+
816
+ **快速对照**
817
+
818
+ | 需求入口 | 读哪份文档 |
819
+ |----------|-----------|
820
+ | 页面 → 查询设置(高级搜索) | 本文 §二–§六 |
821
+ | 左侧数据集 → 筛选条件 | **`dataset-query-filter-guide.md`** |
822
+ | 单元格自定义筛选 / datasetFilter | `cross-dataset-filter-guide.md` |
823
+
824
+ 代码:`本地工作目录` → `ensure_team_dataset_filter()` / `ensure_contract_dataset_filter()`;执行 `python 本地工作目录`。
825
+
826
+ ---
827
+
828
+ ## 八、验证清单
829
+
830
+ 写入后 `getQueryItem` 回读:
831
+
832
+ **形态**
833
+
834
+ - [ ] **调用**:multipart + `queryItems`=**单对象**(非数组);`conditions` 非 null
835
+ - [ ] 顶层 `filterType: "default"`;`conditions[]` 无 `filterType`
836
+ - [ ] 顶层 `dataSetId` / `name` 为 `null`;`nameIndex: "0"`;`sqlOptions: {}`
837
+ - [ ] **`queryType` 为 JSON 数组字符串**:`'["advance"]'`(高级搜索)或 `'["filter"]'`(筛选),可双选 `'["advance","filter"]'`(§2.1);**必须以 `[` 开头**
838
+ - [ ] **回显自检**:落库为长码 `"advancedSearch"` → 设计器「显示方式」**必不勾选**(落库错误,改数组即修复);不要解释为平台缺陷
839
+ - [ ] `asNameIndex` 唯一且 > 0;与 `showOrder` 一致
840
+ - [ ] `fieldOptions` 与 `conditions` 字段一致
841
+
842
+ **浏览按钮(人员 / 部门)**
843
+
844
+ - [ ] `displayType: "browser"` 且 **`browserTypeStr` 非空**(§2.1.2)
845
+ - [ ] 字段 `originFieldType=Employee` → `HrmEmployeeComInfo`
846
+ - [ ] 字段 `originFieldType=Department` → `HrmDepartmentComInfo`
847
+ - [ ] `browserTypeStr` 不得为 `"[]"`(关联类型丢失 → 退回「人员」)
848
+ - [ ] 若要求 UI 正确回显显示名,`browserType` 用富对象(含 `name`/`type`),非 `[{"id"}]` 简写
849
+
850
+ **文本**
851
+
852
+ - [ ] `displayType: "text"`(非 `select`)
853
+
854
+ **下拉**
855
+
856
+ - [ ] `displayType: "select"` 且 `selectOptions.length > 0`
857
+ - [ ] 选项来自匹配字段的 `/ds/options`(`fieldName` 为裸 ID,见 §3.2)
858
+ - [ ] 每项:`selectKey`=选项 ID(数值)、`selectValue`=显示名称(勿写反)
859
+
860
+ **日期选项**
861
+
862
+ - [ ] `enableOption=true`、`isTile=true`、`dataOptions` 21 项、`selectOptions=[]`、`optionTile={}`
863
+
864
+ **日期默认值**
865
+
866
+ - [ ] `defaultValueType: "custom"`(有默认值时)
867
+ - [ ] `handleDefaultValue` 非空且符合预期(如本月区间、今天同一天)
868
+ - [ ] **未**依赖 `filterParam.dateSelectDefaultValue`
869
+
870
+ **工具**
871
+
872
+ - [ ] `本地工作目录` 导出快照对比
873
+ - [ ] 设计器刷新:齿轮菜单 21 项、默认值回显、删一条不影响其他条件
874
+
875
+ ---
876
+
877
+ ## 八、相关文档
878
+
879
+ | 文件 | 用途 |
880
+ |------|------|
881
+ | **`dataset-query-filter-guide.md`** | **左侧数据集筛选**(queryInfoSave 完整规范) |
882
+ | **`cell-transform-guide.md`** | **`browserType` 关联类型预设**(人员/部门 ComInfo id) |
883
+ | **`event-hreflink-guide.md`** | 事件链接传 `{searchfield00x}` / 单元格坐标 |
884
+ | `date-range-query-reference.md` | 21 项 dataOptions catalog |
885
+ | `cross-dataset-filter-guide.md` | datasetFilter / customFilterField |
886
+ | `report-building-guide.md` §6 | 设计器操作步骤 |
887
+ | `report-config-schema.md` §五 | Schema 摘要 |
888
+ | `SKILL.md` §6.3–§6.4 | Agent 步骤入口 |
889
+ | `outputs/join_date_filterparam.json` | filterParam 参考样本 |
890
+ | `本地工作目录` | 生成/修复实现 |