cloud-web-corejs 1.0.280 → 1.1.0-dev.10

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 (193) hide show
  1. package/package.json +6 -2
  2. package/src/components/VabUpload/image-viewer.vue +442 -442
  3. package/src/components/VabUpload/index.vue +45 -3
  4. package/src/components/VabUpload/mixins.js +174 -34
  5. package/src/components/VabUpload/previewGroup.js +128 -0
  6. package/src/components/VabUpload/view.vue +248 -209
  7. package/src/components/baseTabs/mixins.js +181 -181
  8. package/src/components/bizTab/BizBillActions.vue +129 -0
  9. package/src/components/bizTab/BizTabListPage.vue +391 -0
  10. package/src/components/bizTab/README.md +378 -0
  11. package/src/components/bizTab/billTableUtil.js +48 -0
  12. package/src/components/bizTab/billValidators.js +136 -0
  13. package/src/components/bizTab/bizBillDetailMixin.js +705 -0
  14. package/src/components/bizTab/index.js +24 -0
  15. package/src/components/excelExport/exportFieldDialog.vue +23 -12
  16. package/src/components/excelExport/exportItemConfigUtil.js +30 -0
  17. package/src/components/excelExport/mixins.js +3 -3
  18. package/src/components/excelImport/index.vue +156 -156
  19. package/src/components/jsonImport/index.vue +1 -1
  20. package/src/components/langImport/index.vue +1 -1
  21. package/src/components/mobile/statusTag/mixins.js +1 -61
  22. package/src/components/mobile/wf/addTaskUserdialog.vue +23 -3
  23. package/src/components/mobile/wf/content.vue +1705 -1556
  24. package/src/components/mobile/wf/deleteTaskUserDialog.vue +22 -3
  25. package/src/components/mobile/wf/mixins/wfModifyDialogMixin.js +8 -6
  26. package/src/components/mobile/wf/selectUserDialog.vue +122 -0
  27. package/src/components/mobile/wf/setCandidateDialog.vue +25 -4
  28. package/src/components/mobile/wf/urgingDialog.vue +26 -3
  29. package/src/components/mobile/wf/wfModifyDialog.vue +4 -0
  30. package/src/components/obsUpload/index.vue +1 -1
  31. package/src/components/table/config.js +78 -78
  32. package/src/components/table/index.js +1276 -1276
  33. package/src/components/table/plugins/cell-area/index.js +1055 -0
  34. package/src/components/table/plugins/cell-area/index.scss +77 -0
  35. package/src/components/table/plugins/cell-area/util.js +224 -0
  36. package/src/components/table/tableForm.vue +330 -330
  37. package/src/components/table/tableFormMixin.js +318 -318
  38. package/src/components/table/vxeFilter/index.js +163 -163
  39. package/src/components/table/vxeFilter/mixin.js +316 -316
  40. package/src/components/wf/content.vue +1188 -1188
  41. package/src/components/wf/wf.js +40 -20
  42. package/src/components/wf/wfActionDropdown.vue +1 -1
  43. package/src/components/wf/wfActionItems.js +1 -1
  44. package/src/components/xform/docs/2026-08 xform H5 P0 /345/256/236/347/216/260/350/247/204/346/240/274.md" +528 -0
  45. package/src/components/xform/docs/2026-08 xform H5 P1 /345/256/236/347/216/260/350/247/204/346/240/274.md" +412 -0
  46. package/src/components/xform/docs/2026-08 xform H5 P2 /345/256/236/347/216/260/350/247/204/346/240/274.md" +287 -0
  47. package/src/components/xform/docs/2026-08 xform /347/247/273/345/212/250/347/253/257/345/270/203/345/261/200/345/257/271/351/275/220 bill_setting /346/226/271/346/241/210.md" +400 -0
  48. package/src/components/xform/form-designer/designer.js +51 -52
  49. package/src/components/xform/form-designer/form-widget/container-widget/data-table-widget.vue +269 -269
  50. package/src/components/xform/form-designer/form-widget/container-widget/detail-h5-widget.vue +18 -2
  51. package/src/components/xform/form-designer/form-widget/container-widget/detail-temp-widget.vue +132 -0
  52. package/src/components/xform/form-designer/form-widget/container-widget/detail-widget.vue +250 -250
  53. package/src/components/xform/form-designer/form-widget/container-widget/h5-card-pane-widget.vue +23 -2
  54. package/src/components/xform/form-designer/form-widget/container-widget/h5-card-widget.vue +30 -1
  55. package/src/components/xform/form-designer/form-widget/dialog/fileReferenceDialog.vue +319 -320
  56. package/src/components/xform/form-designer/form-widget/dialog/formDialog.vue +365 -365
  57. package/src/components/xform/form-designer/form-widget/dialog/importDialog.vue +185 -185
  58. package/src/components/xform/form-designer/form-widget/dialog/searchFormDialog.vue +554 -555
  59. package/src/components/xform/form-designer/form-widget/dialog/vabSearchDialog.vue +409 -409
  60. package/src/components/xform/form-designer/form-widget/field-widget/a-link-widget.vue +150 -132
  61. package/src/components/xform/form-designer/form-widget/field-widget/date-range-widget.vue +114 -114
  62. package/src/components/xform/form-designer/form-widget/field-widget/date-widget.vue +154 -154
  63. package/src/components/xform/form-designer/form-widget/field-widget/form-item-wrapper.vue +47 -1
  64. package/src/components/xform/form-designer/form-widget/field-widget/mixins/date-limit-mixin.js +178 -178
  65. package/src/components/xform/form-designer/form-widget/field-widget/mixins/time-limit-mixin.js +77 -77
  66. package/src/components/xform/form-designer/form-widget/field-widget/select-export-item-button-widget.vue +6 -0
  67. package/src/components/xform/form-designer/form-widget/field-widget/select-widget.vue +139 -139
  68. package/src/components/xform/form-designer/form-widget/field-widget/singleUpload-widget.vue +1 -1
  69. package/src/components/xform/form-designer/form-widget/field-widget/time-range-widget.vue +106 -106
  70. package/src/components/xform/form-designer/form-widget/field-widget/time-widget.vue +134 -134
  71. package/src/components/xform/form-designer/form-widget/field-widget/vabUpload-widget.vue +3 -2
  72. package/src/components/xform/form-designer/indexMixin.js +35 -1
  73. package/src/components/xform/form-designer/setting-panel/form-setting.vue +39 -39
  74. package/src/components/xform/form-designer/setting-panel/property-editor/container-data-table/data-table-editor.vue +10 -10
  75. package/src/components/xform/form-designer/setting-panel/property-editor/container-data-table/exportItemColumns-dialog.vue +438 -432
  76. package/src/components/xform/form-designer/setting-panel/property-editor/container-data-table/table-column-dialog.vue +2103 -2103
  77. package/src/components/xform/form-designer/setting-panel/property-editor/container-detail/detail-temp-edito.vue +90 -0
  78. package/src/components/xform/form-designer/setting-panel/property-editor/container-grid/gutter-editor.vue +82 -82
  79. package/src/components/xform/form-designer/setting-panel/property-editor/container-list-h5/list-h5-editor.vue +833 -846
  80. package/src/components/xform/form-designer/setting-panel/property-editor/container-table/table-dynamicField-editor.vue +8 -8
  81. package/src/components/xform/form-designer/setting-panel/property-editor/dropdownFlag-editor.vue +137 -137
  82. package/src/components/xform/form-designer/setting-panel/property-editor/field-button/search-dialog-event-editor.vue +237 -237
  83. package/src/components/xform/form-designer/setting-panel/property-editor/field-date/date-defaultValue-editor.vue +43 -43
  84. package/src/components/xform/form-designer/setting-panel/property-editor/field-date-range/date-range-defaultValue-editor.vue +43 -43
  85. package/src/components/xform/form-designer/setting-panel/property-editor/field-import-button/import2-button-editor.vue +96 -96
  86. package/src/components/xform/form-designer/setting-panel/property-editor/field-table-export-button/select-export-item-button-editor.vue +51 -0
  87. package/src/components/xform/form-designer/setting-panel/property-editor/field-time/time-defaultValue-editor.vue +42 -42
  88. package/src/components/xform/form-designer/setting-panel/property-editor/field-time-range/time-range-defaultValue-editor.vue +43 -43
  89. package/src/components/xform/form-designer/setting-panel/property-editor/formScriptEnabled-editor.vue +158 -158
  90. package/src/components/xform/form-designer/setting-panel/property-editor/h5Span-editor.vue +51 -0
  91. package/src/components/xform/form-designer/setting-panel/property-editor/itemStyle-editor.vue +39 -0
  92. package/src/components/xform/form-designer/setting-panel/property-editor/name-editor.vue +188 -188
  93. package/src/components/xform/form-designer/setting-panel/property-editor/styleTempClass-editor.vue +51 -0
  94. package/src/components/xform/form-designer/setting-panel/property-editor/textFlag-editor.vue +347 -347
  95. package/src/components/xform/form-designer/setting-panel/propertyRegister.js +12 -0
  96. package/src/components/xform/form-designer/toolbar-panel/index.vue +884 -874
  97. package/src/components/xform/form-designer/toolbar-panel/indexMixin.js +14 -0
  98. package/src/components/xform/form-designer/widget-panel/index.vue +11 -7
  99. package/src/components/xform/form-designer/widget-panel/indexMixin.js +30 -6
  100. package/src/components/xform/form-designer/widget-panel/widgetsConfig.js +112 -4
  101. package/src/components/xform/form-render/container-item/data-table-mixin.js +151 -93
  102. package/src/components/xform/form-render/container-item/detail-h5-item.vue +204 -34
  103. package/src/components/xform/form-render/container-item/detail-temp-item.vue +110 -0
  104. package/src/components/xform/form-render/container-item/h5-card-pane-item.vue +160 -140
  105. package/src/components/xform/form-render/container-item/list-h5-item.vue +1913 -1699
  106. package/src/components/xform/form-render/index.vue +153 -147
  107. package/src/components/xform/form-render/indexMixin.js +35 -3
  108. package/src/components/xform/lang/en-US.js +14 -0
  109. package/src/components/xform/lang/zh-CN.js +17 -0
  110. package/src/components/xform/mixins/defaultHandle.js +707 -707
  111. package/src/components/xform/styles/h5.scss +2238 -0
  112. package/src/components/xform/utils/textMaskUtil.js +182 -179
  113. package/src/components/xform/utils/treeTableUtil.js +1292 -1265
  114. package/src/components/xform/utils/util.js +56 -11
  115. package/src/directive/append-to-body/index.js +48 -0
  116. package/src/index.js +13 -4
  117. package/src/layout/components/Sidebar/default.vue +1655 -1655
  118. package/src/layout/components/extractedCode/viewDialog.vue +7 -7
  119. package/src/router/index.js +48 -27
  120. package/src/router/modules/customer.js +71 -14
  121. package/src/store/modules/permission.js +17 -18
  122. package/src/utils/assetUrl.js +19 -0
  123. package/src/utils/pdfUtil.js +429 -429
  124. package/src/utils/resolveViewComponent.js +142 -16
  125. package/src/utils/vab.js +1283 -1279
  126. package/src/views/bd/project/branch/bd_branch/edit.vue +145 -0
  127. package/src/views/bd/project/branch/bd_branch/list.vue +72 -0
  128. package/src/views/bd/project/branch/bd_branch/menuKindDialog.vue +106 -0
  129. package/src/views/bd/project/branch/bd_branch/mixins/edit.js +189 -0
  130. package/src/views/bd/project/branch/bd_branch/mixins/list.js +124 -0
  131. package/src/views/bd/project/branch/bd_branch/mixins/menuKindDialog.js +85 -0
  132. package/src/views/bd/project/branch/form_script/list.vue +31 -0
  133. package/src/views/bd/project/branch/form_template/list.vue +30 -0
  134. package/src/views/bd/project/branch/menu_kind/list.vue +31 -0
  135. package/src/views/bd/project/common/form_script/list.vue +16 -0
  136. package/src/views/bd/project/common/form_template/list.vue +15 -0
  137. package/src/views/bd/project/common/menu_kind/list.vue +15 -0
  138. package/src/views/bd/project/core/branchContext.js +100 -0
  139. package/src/views/bd/project/core/branchPage.js +78 -0
  140. package/src/views/bd/project/core/branchPageWrap.vue +225 -0
  141. package/src/views/bd/project/core/branchScope.js +44 -0
  142. package/src/views/bd/project/core/branchSearchPage.js +285 -0
  143. package/src/views/bd/project/core/branchSelect.vue +85 -0
  144. package/src/views/bd/project/core/branchTreeBar.vue +81 -0
  145. package/src/views/bd/project/core/httpBranchPatch.js +58 -0
  146. package/src/views/bd/project/datatable/menu_kind/list.vue +15 -0
  147. package/src/views/bd/project/datatable/table_model/list.vue +15 -0
  148. package/src/views/bd/setting/bd_company_env/dialog.vue +174 -174
  149. package/src/views/bd/setting/form_template/edit.vue +378 -356
  150. package/src/views/bd/setting/form_template/formDesignerDialog.vue +6 -0
  151. package/src/views/bd/setting/form_template/formTemplateType.js +43 -0
  152. package/src/views/bd/setting/form_template/list.vue +304 -303
  153. package/src/views/bd/setting/form_template/mixins/edit.js +344 -280
  154. package/src/views/bd/setting/form_template/mixins/list.js +748 -721
  155. package/src/views/bd/setting/table_model/edit.vue +1066 -1066
  156. package/src/views/bd/setting/table_model/mixins/edit.js +1455 -1455
  157. package/src/views/bd/setting/table_model/mixins/zdDialog.js +148 -148
  158. package/src/views/demo/bizTab/bill/billConfig.js +41 -0
  159. package/src/views/demo/bizTab/bill/detail.vue +436 -0
  160. package/src/views/demo/bizTab/bill/list.vue +288 -0
  161. package/src/views/demo/bizTab/bill/productDialog.vue +176 -0
  162. package/src/views/demo/bizTab/simple/billApi.js +123 -0
  163. package/src/views/demo/bizTab/simple/detail.vue +407 -0
  164. package/src/views/demo/bizTab/simple/list.vue +217 -0
  165. package/src/views/demo/bizTab/standalone/index.vue +121 -0
  166. package/src/views/demo/bizTab/wf/billConfig.js +44 -0
  167. package/src/views/demo/bizTab/wf/detail.vue +661 -0
  168. package/src/views/demo/bizTab/wf/list.vue +242 -0
  169. package/src/views/support/form-dialog-demo/demoPickerDialog.vue +72 -0
  170. package/src/views/support/form-dialog-demo/index.vue +537 -0
  171. package/src/views/user/file_view_ins/list.vue +970 -970
  172. package/src/views/user/form/vform/designer.vue +823 -821
  173. package/src/views/user/home/default.vue +1117 -1117
  174. package/src/views/user/home/default2.vue +1 -1
  175. package/src/views/user/home/index.vue +103 -101
  176. package/src/views/user/home/wjl/content.vue +1569 -0
  177. package/src/views/user/notify_message/dialog.vue +139 -137
  178. package/src/views/user/outLink/cc_form_view.vue +188 -0
  179. package/src/views/user/outLink/form_view.vue +202 -202
  180. package/src/views/user/outLink/index.vue +110 -110
  181. package/src/views/user/outLink/view.vue +3 -3
  182. package/src/views/user/role/edit.vue +632 -632
  183. package/src/views/user/role/list.vue +260 -260
  184. package/src/views/user/wf/iframe/index.vue +51 -51
  185. package/src/views/user/wf/iframe/index2.vue +64 -64
  186. package/src/views/user/wf/wf_manage/list.vue +1112 -1116
  187. package/src/views/user/wf/wf_manage/list2.vue +871 -875
  188. package/src/views/user/wf/wf_manage/wfContentDialog.vue +134 -131
  189. package/src/views/user/wf/wf_obj_config/importItemDialog.vue +1 -1
  190. package/src/components/xform/form-designer/form-widget/field-widget/dropdown-menu-widget.vue +0 -106
  191. package/src/components/xform/form-designer/form-widget/field-widget/tableexportbuttonwidget.vue +0 -99
  192. package/src/components/xform/form-render/container-item/list-h5-item2.vue +0 -1340
  193. package/src/utils/wf.js +0 -766
@@ -68,6 +68,7 @@ import {
68
68
  isTemporaryTreeKey,
69
69
  syncTreeKeyReferences,
70
70
  sanitizeTreeRow,
71
+ stripTreeContainers,
71
72
  } from "../../utils/treeTableUtil";
72
73
  import { tableTreeMixins } from "../../../../mixins/tableTree/index.js";
73
74
 
@@ -2442,76 +2443,7 @@ modules = {
2442
2443
  };
2443
2444
  }
2444
2445
 
2445
- let exportItemConfig = null;
2446
- if (
2447
- this.widget.options.exportItemColumns &&
2448
- this.widget.options.exportItemColumns.length > 0
2449
- ) {
2450
- let formatKeys = [
2451
- "d1",
2452
- "d2",
2453
- "d3",
2454
- "d4",
2455
- "d5",
2456
- "n1",
2457
- "n2",
2458
- "n3",
2459
- "n4",
2460
- "n5",
2461
- "n6",
2462
- "n7",
2463
- ];
2464
- let exportItemColumns = this.widget.options.exportItemColumns.map(
2465
- (item) => {
2466
- let columnSlots = null;
2467
- let columnParams = {};
2468
- if (item.formatS === "render") {
2469
- let r = item.render
2470
- ? new Function("params", "h", item.render)
2471
- : null;
2472
- columnSlots = {
2473
- default: (params, h) => {
2474
- return r ? r.call(this, params, h) : "";
2475
- },
2476
- };
2477
- } else if (formatKeys.includes(item.formatS)) {
2478
- columnSlots = {
2479
- default: (params, h) => {
2480
- let cellValue = params.row[params.column.field];
2481
- return this.getFormatterValue(
2482
- cellValue,
2483
- item.formatS,
2484
- item.utcTransformEnabled
2485
- );
2486
- },
2487
- };
2488
- }
2489
- if (item.exportType) {
2490
- columnParams.exportType = item.exportType;
2491
- }
2492
- return {
2493
- id: item.id,
2494
- title: item.title,
2495
- field: item.field,
2496
- params: columnParams,
2497
- slots: columnSlots,
2498
- };
2499
- }
2500
- );
2501
- exportItemConfig = {
2502
- scriptCode:
2503
- this.widget.options.exportItemScriptCode ||
2504
- this.widget.options.formScriptCode,
2505
- columns: exportItemColumns,
2506
- param: () => {
2507
- if (this.widget.options.exportItemParam) {
2508
- return this.handleCustomParam(
2509
- this.widget.options.exportItemParam
2510
- );
2511
- }
2512
- },
2513
- };
2514
- }
2446
+ let exportItemConfig = this.buildExportItemConfig();
2515
2447
  let rowConfig = {};
2516
2448
  if (this.widget.options.tableRowHeight) {
2517
2449
  rowConfig.height = this.widget.options.tableRowHeight;
@@ -3228,7 +3160,9 @@ modules = {
3228
3160
  if (isItemExport(exportType)) {
3229
3161
  let $grid = this.getGridTable();
3230
3162
  let originOption = $grid.params.originOption;
3231
- let exportItemConfig = originOption.exportItemConfig || {};
3163
+ // 导出按钮上单独维护了明细列时,配置随导出参数下发,优先于表格属性那套
3164
+ let btnConfig = customParam?.exportParam?.exportItemConfig;
3165
+ let exportItemConfig = btnConfig || originOption.exportItemConfig || {};
3232
3166
  if (exportItemConfig.scriptCode) {
3233
3167
  scriptCode = exportItemConfig.scriptCode;
3234
3168
  }
@@ -3339,30 +3273,134 @@ modules = {
3339
3273
  let tableRef = this.widget.id;
3340
3274
  return tableRef;
3341
3275
  },
3342
- /** 导出前按脱敏规则剔除列,实现见 textMaskUtil.markMaskedExportColumns。 */
3343
- markMaskedColumnsForExport() {
3276
+ /**
3277
+ * 导出前按脱敏规则剔除列,实现见 textMaskUtil.markMaskedExportColumns。
3278
+ * @param {Array} [exportItemColumns] 本次明细导出实际使用的列;不传则取表格属性上配的那套。
3279
+ */
3280
+ markMaskedColumnsForExport(exportItemColumns) {
3344
3281
  markMaskedExportColumns(
3345
3282
  this.getGridTable(),
3346
3283
  buildTextMaskContext(
3347
3284
  this.getFormRef(),
3348
3285
  this.$store.getters.companyCode
3349
- )
3286
+ ),
3287
+ exportItemColumns
3350
3288
  );
3351
3289
  },
3290
+ /**
3291
+ * 明细导出列配置 → vxe 列:formatS/render 转成渲染插槽,exportType 落到 params。
3292
+ * @param {Array} rawColumns 设计器维护的明细导出列。
3293
+ * @returns {Array} vxe 列定义。
3294
+ */
3295
+ buildExportItemColumns(rawColumns) {
3296
+ let formatKeys = [
3297
+ "d1",
3298
+ "d2",
3299
+ "d3",
3300
+ "d4",
3301
+ "d5",
3302
+ "n1",
3303
+ "n2",
3304
+ "n3",
3305
+ "n4",
3306
+ "n5",
3307
+ "n6",
3308
+ "n7",
3309
+ ];
3310
+ return rawColumns.map((item) => {
3311
+ let columnSlots = null;
3312
+ let columnParams = {};
3313
+ if (item.formatS === "render") {
3314
+ let r = item.render ? new Function("params", "h", item.render) : null;
3315
+ columnSlots = {
3316
+ default: (params, h) => {
3317
+ return r ? r.call(this, params, h) : "";
3318
+ },
3319
+ };
3320
+ } else if (formatKeys.includes(item.formatS)) {
3321
+ columnSlots = {
3322
+ default: (params, h) => {
3323
+ let cellValue = params.row[params.column.field];
3324
+ return this.getFormatterValue(
3325
+ cellValue,
3326
+ item.formatS,
3327
+ item.utcTransformEnabled
3328
+ );
3329
+ },
3330
+ };
3331
+ }
3332
+ if (item.exportType) {
3333
+ columnParams.exportType = item.exportType;
3334
+ }
3335
+ return {
3336
+ id: item.id,
3337
+ title: item.title,
3338
+ field: item.field,
3339
+ params: columnParams,
3340
+ slots: columnSlots,
3341
+ };
3342
+ });
3343
+ },
3344
+ /**
3345
+ * 组装一份明细导出配置。导出列、脚本编码、自定义导出参数三项都可以由导出按钮单独维护,
3346
+ * 各自独立生效:按钮留空的那一项回落到表格属性,三项都留空就是表格属性上原来那套。
3347
+ * @param {Object} [overrides] 按钮级配置。
3348
+ * @param {Array} [overrides.columns] 明细导出列。
3349
+ * @param {String} [overrides.scriptCode] 明细导出脚本编码。
3350
+ * @param {String} [overrides.paramScript] 明细导出查询参数脚本。
3351
+ * @returns {Object|null} 两处都没维护列时返回 null。
3352
+ */
3353
+ buildExportItemConfig(overrides) {
3354
+ let options = this.widget.options;
3355
+ let o = overrides || {};
3356
+ let hasColumns = o.columns && o.columns.length;
3357
+ let columns = hasColumns ? o.columns : options.exportItemColumns;
3358
+ if (!columns || !columns.length) return null;
3359
+ let scriptCode = o.scriptCode || options.exportItemScriptCode;
3360
+ let paramScript = o.paramScript || options.exportItemParam;
3361
+ return {
3362
+ scriptCode: scriptCode || options.formScriptCode,
3363
+ columns: this.buildExportItemColumns(columns),
3364
+ // 取数参数脚本与表格上其它脚本一样走 handleCustomEvent(它负责注入 dataId /
3365
+ // formCode 并统一弹前端脚本异常)。原先写的 handleCustomParam 全库没有定义,
3366
+ // 配了「明细导出查询参数」的表格一点导出就抛 TypeError。
3367
+ param: () => {
3368
+ if (paramScript) {
3369
+ return this.handleCustomEvent(paramScript);
3370
+ }
3371
+ },
3372
+ };
3373
+ },
3352
3374
  /**
3353
3375
  * 使用统一 Excel 导出器导出当前表格。
3354
3376
  * @param {Object} option 导出参数;prefix 为空时自动使用当前服务前缀。
3377
+ * option.exportItemColumns / exportItemScriptCode / exportItemParam 为按钮上维护的
3378
+ * 明细导出列、脚本编码与取数参数脚本,三项各自独立:传了哪项就以哪项为准(同一张表格
3379
+ * 可以挂多个明细导出按钮、各导各自的列、各走各自的脚本),组装成 exportItemConfig 随
3380
+ * 导出参数下发,下游(字段选择弹框 / 分页取数 / 脱敏剔除)一律优先读它,读不到才回落
3381
+ * 表格属性那套。
3355
3382
  */
3356
3383
  exportData(option) {
3357
- this.markMaskedColumnsForExport();
3384
+ let exportOption = { ...option };
3385
+ let itemColumns = exportOption.exportItemColumns;
3386
+ let itemScriptCode = exportOption.exportItemScriptCode;
3387
+ let itemParam = exportOption.exportItemParam;
3388
+ delete exportOption.exportItemColumns;
3389
+ delete exportOption.exportItemScriptCode;
3390
+ delete exportOption.exportItemParam;
3391
+ let hasOverride = itemColumns?.length || itemScriptCode || itemParam;
3392
+ if (isItemExport(exportOption.type) && hasOverride) {
3393
+ exportOption.exportItemConfig = this.buildExportItemConfig({
3394
+ columns: itemColumns,
3395
+ scriptCode: itemScriptCode,
3396
+ paramScript: itemParam,
3397
+ });
3398
+ }
3399
+ this.markMaskedColumnsForExport(exportOption.exportItemConfig?.columns);
3358
3400
  let tableRef = this.getTableRef();
3359
3401
  let serviceName = this.getFormRef().reportTemplate.serviceName;
3360
- option.prefix = option.prefix || "/" + serviceName;
3361
- let exportTableTarget = this.$refs.exportTable;
3362
- let getExportTableRef = () => {
3363
- return exportTableTarget;
3364
- };
3365
- this.$excelExport({ targetRef: tableRef, ...option });
3402
+ exportOption.prefix = exportOption.prefix || "/" + serviceName;
3403
+ this.$excelExport({ targetRef: tableRef, ...exportOption });
3366
3404
  },
3367
3405
  async deleteRow(row, rowIndex) {
3368
3406
  let isTreeTable = this.widget.options.isTreeTable;
@@ -3533,7 +3571,7 @@ modules = {
3533
3571
  let newData = this.createNewTableData();
3534
3572
  tableRows.push(newData);
3535
3573
  }
3536
- this.setValue(tableRows);
3574
+ this.setValue(this.stripTreeContainerRows(tableRows));
3537
3575
  this.$nextTick(() => {
3538
3576
  this.handleWbs();
3539
3577
  });
@@ -4520,7 +4558,7 @@ modules = {
4520
4558
  await reconcileGrid.clearActived();
4521
4559
  }
4522
4560
  if (rebuildTreeAfterSave && !responseAlreadyApplied) {
4523
- this.setValue(treeTableRows);
4561
+ this.setValue(this.stripTreeContainerRows(treeTableRows));
4524
4562
  treeSnapshotApplied = true;
4525
4563
  await new Promise((resolve) => this.$nextTick(resolve));
4526
4564
  }
@@ -4692,7 +4730,7 @@ modules = {
4692
4730
  } else {
4693
4731
  tableRows.splice(0, 0, newRow);
4694
4732
  }
4695
- this.setValue(tableRows);
4733
+ this.setValue(this.stripTreeContainerRows(tableRows));
4696
4734
  this.$nextTick(() => {
4697
4735
  this.handleWbs();
4698
4736
  if (isEditTable) {
@@ -4714,7 +4752,7 @@ modules = {
4714
4752
  } else {
4715
4753
  tableRows.splice(0, 0, newRow);
4716
4754
  }
4717
- this.setValue(tableRows);
4755
+ this.setValue(this.stripTreeContainerRows(tableRows));
4718
4756
  this.$nextTick(() => {
4719
4757
  this.handleWbs();
4720
4758
  // setValue 已浅克隆所有行,obj.row 是失效引用,须按 _X_ROW_KEY 找回新行
@@ -4802,7 +4840,7 @@ modules = {
4802
4840
  });
4803
4841
  this.validateNewTreeRows(newRows, treeContext);
4804
4842
  tableRows.push(...newRows);
4805
- this.setValue(tableRows);
4843
+ this.setValue(this.stripTreeContainerRows(tableRows));
4806
4844
  this.$nextTick(() => {
4807
4845
  this.handleWbs();
4808
4846
  if (parent) {
@@ -4811,6 +4849,26 @@ modules = {
4811
4849
  }
4812
4850
  });
4813
4851
  },
4852
+ /**
4853
+ * 去掉 VXE 建树时写回行对象的容器字段(children / mapChildren)。
4854
+ *
4855
+ * 删除、排序这类「改扁平数组再整表重载」的操作必须先剥容器:容器是上一次
4856
+ * 渲染的产物,已被移出数组的节点仍挂在存活父行下,setValue 里的
4857
+ * canonicalizeTreeInput 会顺着容器把它们收回来,删除与排序因此静默失效。
4858
+ *
4859
+ * 只对 isTreeTable(强制 transform,父子关系由 parentField 表达)生效;
4860
+ * 靠 children 表达层级的表原样返回,剥掉会丢层级。
4861
+ * @param {Array} rows 取自表单模型的扁平活动行。
4862
+ * @returns {Array} 可安全交给 setValue 的行数组。
4863
+ */
4864
+ stripTreeContainerRows(rows) {
4865
+ if (!this.widget.options.isTreeTable) {
4866
+ return rows || [];
4867
+ }
4868
+ return stripTreeContainers(rows || [], {
4869
+ fields: this.getTreeFields(),
4870
+ });
4871
+ },
4814
4872
  /**
4815
4873
  * 收集节点全部后代的 _X_ROW_KEY(不含节点自身)。
4816
4874
  * 兼容嵌套结构(children 字段)与扁平结构(parentField 关联)两种数据形态。
@@ -4890,7 +4948,7 @@ modules = {
4890
4948
  });
4891
4949
  }
4892
4950
  let newRows = tableRows.filter((item) => !delKeys.has(item._X_ROW_KEY));
4893
- this.setValue(newRows);
4951
+ this.setValue(this.stripTreeContainerRows(newRows));
4894
4952
  this.$nextTick(() => {
4895
4953
  this.handleWbs();
4896
4954
  });
@@ -5148,7 +5206,7 @@ modules = {
5148
5206
  } else {
5149
5207
  tableRows.splice(0, 0, newRow);
5150
5208
  }
5151
- this.setValue(tableRows);
5209
+ this.setValue(this.stripTreeContainerRows(tableRows));
5152
5210
  this.$nextTick(() => {
5153
5211
  this.handleWbs();
5154
5212
  });
@@ -5165,7 +5223,7 @@ modules = {
5165
5223
  } else {
5166
5224
  tableRows.splice(0, 0, newRow);
5167
5225
  }
5168
- this.setValue(tableRows);
5226
+ this.setValue(this.stripTreeContainerRows(tableRows));
5169
5227
  this.$nextTick(() => {
5170
5228
  this.handleWbs();
5171
5229
  // setValue 已浅克隆所有行,obj.row 是失效引用,须按 _X_ROW_KEY 找回新行
@@ -5362,7 +5420,7 @@ modules = {
5362
5420
  );
5363
5421
  tableRows.splice(currentIndex, 1);
5364
5422
  tableRows.splice(prevIndex, 0, row);
5365
- this.setValue(tableRows);
5423
+ this.setValue(this.stripTreeContainerRows(tableRows));
5366
5424
  this.$nextTick(() => {
5367
5425
  this.handleWbs();
5368
5426
  });
@@ -5411,7 +5469,7 @@ modules = {
5411
5469
  );
5412
5470
  tableRows.splice(currentIndex, 1);
5413
5471
  tableRows.splice(nextIndex, 0, row);
5414
- this.setValue(tableRows);
5472
+ this.setValue(this.stripTreeContainerRows(tableRows));
5415
5473
  this.$nextTick(() => {
5416
5474
  this.handleWbs();
5417
5475
  });
@@ -5488,7 +5546,7 @@ modules = {
5488
5546
  rows.forEach((row, index1) => {
5489
5547
  items.splice(index + index1, 0, row);
5490
5548
  });
5491
- this.setValue(items);
5549
+ this.setValue(this.stripTreeContainerRows(items));
5492
5550
  this.$nextTick(() => {
5493
5551
  this.handleWbs();
5494
5552
  });
@@ -5783,7 +5841,7 @@ modules = {
5783
5841
  if (this.designState) return;
5784
5842
  this.$on("setFormData", (o) => {
5785
5843
  let rows = this.formModel[this.fieldKeyName] || [];
5786
- this.setValue(rows);
5844
+ this.setValue(this.stripTreeContainerRows(rows));
5787
5845
  });
5788
5846
  },
5789
5847
  /** @param {Object} widget 组件 schema。@param {Array<String>} ignoreFields 忽略字段。@returns {Boolean} 是否处理禁用状态。 */
@@ -10,9 +10,16 @@
10
10
 
11
11
  <template>
12
12
  <container-item-wrapper :widget="widget">
13
- <div class="h5-detail-wrap grid-container" :class="[customClass]" :ref="widget.id">
13
+ <!-- h5-no-bottom-btns:底栏一个按钮都没有时打上,让内容区吃掉底栏那一格高度。
14
+ 光靠底栏自己 v-if 不够 —— .h5-detail-body 的高度是
15
+ calc(100% - 底栏 - 标题栏) 硬减出来的(styles/h5.scss 块 G),
16
+ 不同步改的话底部会空出一条 56px 的白带。见块 G2。 -->
17
+ <div class="h5-detail-wrap grid-container"
18
+ :class="[customClass, { 'h5-no-bottom-btns': !hasBottomButtons() }]" :ref="widget.id">
14
19
  <div class="h5-header">{{ widget.options.label }}</div>
15
- <div>
20
+ <!-- 唯一滚动区:标题栏与底部动作栏 flex:none 固定,内容在这里滚。
21
+ 样式见 components/xform/styles/h5.scss 块 G(.h5-detail-body 必须有 min-height:0) -->
22
+ <div class="h5-detail-body">
16
23
  <transition-group name="fade" tag="div" class="form-widget-list">
17
24
  <template v-if="!!widget.panes && (widget.panes.length > 0)">
18
25
  <template v-for="(subWidget, swIdx) in widget.panes">
@@ -39,12 +46,26 @@
39
46
  </template>
40
47
  </template>
41
48
  </transition-group>
49
+ <!-- 移动版流程面板:自给自足(mounted 里自己取数),只需给 wfOption。
50
+ 全部用方法求值而非 computed —— 流程状态挂在表单实例上且非响应式,
51
+ computed 会缓存住早于流程就绪时的空值(见 wfStart 的注释)。
52
+ 样式见 styles/h5.scss 块 L。 -->
53
+ <mobileWfContent v-if="showWfPanel()" ref="wfContent" :wfOption="getWfOption()"
54
+ :defaultShowWfContent="getDefaultShowWfContent()"
55
+ :hideActions="true"/>
42
56
  </div>
43
- <div class="h5-fixed-bottom-btns ">
57
+ <!-- 一个按钮都没有时整条不渲染:底栏是 flex:none 的定高块,
58
+ 留着就是一条 56px 的空白胶囊条,还带阴影。 -->
59
+ <div class="h5-fixed-bottom-btns " v-if="hasBottomButtons()">
44
60
  <transition-group name="fade" tag="div" class="form-widget-list">
45
- <template v-if="!!widget.widgetList && (widget.widgetList.length > 0)">
46
- <template v-for="(subWidget, swIdx) in widget.widgetList">
47
- <template v-if="'container' === subWidget.category">
61
+ <template v-if="visibleButtons().length > 0">
62
+ <template v-for="(subWidget, swIdx) in visibleButtons()">
63
+ <!-- 审批动作按钮,不是 widget,单独渲染。只出文字不带图标 -->
64
+ <div class="field-wrapper" v-if="subWidget.__builtin" :key="'b-' + subWidget.__builtin">
65
+ <el-button class="button-sty" :type="subWidget.type"
66
+ @click="subWidget.onClick">{{ subWidget.label }}</el-button>
67
+ </div>
68
+ <template v-else-if="'container' === subWidget.category">
48
69
  <component :is="subWidget.type + '-item'" :widget="subWidget" :key="swIdx"
49
70
  :parent-list="widget.widgetList"
50
71
  :index-of-parent-list="swIdx" :parent-widget="widget">
@@ -67,6 +88,25 @@
67
88
  </template>
68
89
  </template>
69
90
  </transition-group>
91
+ <!-- 超出的按钮收进纯图标下拉。它按内容宽(不参与等分),排在最右。
92
+ popper-class 而非嵌套作用域:el-dropdown-menu 默认 append-to-body,
93
+ 菜单 DOM 会被挪到 body 下、脱离 .xform-h5,故样式写成顶层
94
+ .xform-h5-dropdown 选择器(见 styles/h5.scss)。 -->
95
+ <el-dropdown v-if="overflowButtons().length > 0" class="h5-more-dropdown"
96
+ trigger="click" popper-class="xform-h5-dropdown">
97
+ <!-- 裸图标触发器,不套 el-button:底栏在页面底部、菜单往上弹,故用向上箭头 -->
98
+ <i class="el-icon-arrow-up h5-more-icon"></i>
99
+ <el-dropdown-menu slot="dropdown">
100
+ <el-dropdown-item v-for="(subWidget, swIdx) in overflowButtons()" :key="swIdx">
101
+ <el-button v-if="subWidget.__builtin" class="button-sty" :type="subWidget.type"
102
+ @click="subWidget.onClick">{{ subWidget.label }}</el-button>
103
+ <component v-else :is="subWidget.type + '-widget'" :field="subWidget" :designer="null"
104
+ :parent-list="widget.widgetList"
105
+ :index-of-parent-list="swIdx + visibleButtons().length"
106
+ :parent-widget="widget"/>
107
+ </el-dropdown-item>
108
+ </el-dropdown-menu>
109
+ </el-dropdown>
70
110
  </div>
71
111
  </div>
72
112
 
@@ -83,7 +123,18 @@ import containerItemMixin from "./containerItemMixin"
83
123
  import FieldComponents from '../../../../components/xform/form-designer/form-widget/field-widget/index'
84
124
 
85
125
 
86
- import {initWf} from '../../../../components/wf/wfUtil'
126
+ import {getVisibleWfActionItems} from '../../../../components/wf/wfActionItems'
127
+
128
+ /* H5 底栏只放这四个审批动作,其余(催办/加签/减签/沟通/修改候选人/撤回…)不进底栏。
129
+ ★ 这里的书写序就是底栏的显示序:通过 → 驳回 → 中断 → 转办。 */
130
+ const H5_WF_ACTION_KEYS = ['agree', 'reject', 'manual', 'transfer'];
131
+
132
+ /* 底栏平铺的按钮个数上限,超出的收进最右侧的「更多」图标下拉 ——
133
+ 即一行最多「3 个操作按钮 + 1 个更多图标」。
134
+ 写死而不做成表单选项:这个数由底栏宽度决定,配大了会挤成一团,
135
+ 而且此前做成 options.maxVisibleButtons 后,已保存的表单会锁住旧值,
136
+ 改了原型默认值也不生效,反成绊脚石。 */
137
+ const H5_BOTTOM_MAX_BUTTONS = 3;
87
138
 
88
139
  export default {
89
140
  name: "detail-h5-item",
@@ -92,6 +143,11 @@ export default {
92
143
  components: {
93
144
  ContainerItemWrapper,
94
145
  ...FieldComponents,
146
+ /* 懒加载:PC 版式的表单不该把移动 wf 那坨打进主包。
147
+ 注:content.vue 的根节点是 <h5-card-pane>,Vue 2 的组件解析只查自身
148
+ components 与全局注册、不查父组件的局部注册,所以那个依赖必须由
149
+ content.vue 自己声明(已在该文件补上),在这里注册是没用的。 */
150
+ mobileWfContent: () => import('../../../../components/mobile/wf/content.vue'),
95
151
  },
96
152
  props: {
97
153
  widget: Object,
@@ -103,19 +159,154 @@ export default {
103
159
  },
104
160
  mounted() {
105
161
  this.handleOnMounted();
106
- this.$nextTick(() => {
107
- this.createWf();
108
- })
109
162
  },
110
163
  beforeDestroy() {
111
164
  this.unregisterFromRefList()
112
165
  },
113
166
  data() {
114
- return {
115
- wfInfo: {}
116
- }
167
+ return {}
117
168
  },
118
169
  methods: {
170
+ /**
171
+ * 流程状态实时求值 —— 与 PC 的 detail-item.wfStart() 同口径。
172
+ *
173
+ * 取数不归本组件管:form-render 的 loadDefaultEntityData 在
174
+ * formConfig.wfEnabled 为真时就已经初始化好流程,把结果挂在表单实例上
175
+ * (wfStartOption / wfStartCtx / wfParam / hasWf),入参也在那边算好
176
+ * (objId = dataId、wfCode = reportTemplate.objTypeCode,见 indexMixin:1394)。
177
+ *
178
+ * 必须用方法而不是 computed:wfStartOption / wfStartCtx / wfParam **都不在
179
+ * form-render 的 data 里**(只有 hasWf 在),不是响应式的,computed 会把
180
+ * 早于流程就绪时求得的空值缓存住。监听 hasWf 也不行 —— 单据没启动流程时
181
+ * 它是 false 赋 false,watcher 根本不触发。
182
+ *
183
+ * 注意:容器 options 上那个 wfEnabled 是旧路径的开关,与表单设置里的
184
+ * formConfig.wfEnabled 不是一回事,这里一律以表单实例的状态为准。
185
+ */
186
+ wfStart() {
187
+ let f = this.getFormRef && this.getFormRef();
188
+ if (!f || !f.wfStartOption) return null
189
+ let param = f.wfParam || {};
190
+ return {
191
+ ctx: f.wfStartCtx || f.$parent,
192
+ option: f.wfStartOption,
193
+ param: param,
194
+ hasWf: !!(f.hasWf || param.hasWf),
195
+ wfInfo: param.wfInfo || {},
196
+ taskParam: param.taskParam || {},
197
+ };
198
+ },
199
+ /**
200
+ * 映射成移动版 content.vue 要的 wfOption。
201
+ * 结果缓存在非响应式实例属性上:模板里调用的方法每次渲染都会执行,
202
+ * 每次返回新对象会让子组件 props 无谓变化;而在渲染期写 data 会触发重渲染循环。
203
+ */
204
+ getWfOption() {
205
+ if (this._wfOptionCache) return this._wfOptionCache
206
+ let ws = this.wfStart();
207
+ if (!ws) return null
208
+ let opt = ws.option;
209
+ let serviceId = opt.serviceId || "user";
210
+ this._wfOptionCache = {
211
+ objId: opt.objId,
212
+ wfCode: opt.wfCode,
213
+ serviceId: serviceId,
214
+ wf_prefix: "/" + serviceId,
215
+ startParam: opt.startParam,
216
+ startConfirmText: opt.startConfirmText,
217
+ parentVue: ws.ctx,
218
+ };
219
+ return this._wfOptionCache
220
+ },
221
+ /* 流程面板:已启动流程且非预览态才渲染 */
222
+ showWfPanel() {
223
+ let ws = this.wfStart();
224
+ return !this.previewState && !!ws && ws.hasWf;
225
+ },
226
+ /* 宿主通过 $attrs 传「进来就展开流程区」,与 PC 版 wfUtil 同口径 */
227
+ getDefaultShowWfContent() {
228
+ let ws = this.wfStart();
229
+ let target = ws && ws.ctx;
230
+ return !!(target && target.$attrs && target.$attrs.defaultShowWfContent);
231
+ },
232
+ /* 注:H5 底栏不放「流程启动」和「修改单据」两个内建按钮
233
+ (PC 的 wfUtil 与移动版 mixin 里都有,这里按需求去掉),
234
+ 底栏只有审批动作 + 业务按钮。 */
235
+ /**
236
+ * 审批动作按钮(通过/驳回/中断/转办)。
237
+ *
238
+ * 复用 PC 的动作注册表 wfActionItems —— 它的 run 是 (wfVm) => wfVm.openAgreeDialog()
239
+ * 这种形式,而这些方法名在移动版 content.vue 里完全一致,所以同一份注册表两边通用。
240
+ *
241
+ * show 用表单实例上的 wfInfo 求值(读 f.hasWf 会建立响应式依赖,流程就绪时能重渲染);
242
+ * run 则要真实的面板实例,点击时才从 $refs 取 —— 那时面板一定已经渲染好了。
243
+ * 面板内那一排同名按钮由 :hideActions="true" 藏掉,不会出现两份。
244
+ */
245
+ wfActionButtons() {
246
+ let ws = this.wfStart();
247
+ if (!ws || !ws.hasWf || this.previewState) return []
248
+ // 只用 wfInfo 算显隐,不依赖面板实例(它可能还没渲染)
249
+ let items = getVisibleWfActionItems({ wfInfo: ws.wfInfo });
250
+ let byKey = {};
251
+ items.forEach((item) => {
252
+ byKey[item.key] = item;
253
+ });
254
+ // 按 H5_WF_ACTION_KEYS 取,顺序由它决定 —— 不能用 items.filter,
255
+ // 那样保留的是注册表的定义序(通过/中断/驳回/转办),与要求的顺序不一致
256
+ return H5_WF_ACTION_KEYS.map((key) => byKey[key])
257
+ .filter((item) => !!item)
258
+ .map((item) => ({
259
+ __builtin: "wfAction-" + item.key,
260
+ label: item.i18nPath
261
+ ? this.$t2(item.defaultLabel, item.i18nPath)
262
+ : item.defaultLabel,
263
+ // 注册表里的 iconClass/elIcon 不取:H5 底栏按钮只出文字
264
+ type: item.buttonType || "primary",
265
+ onClick: () => {
266
+ let wfVm = this.$refs.wfContent;
267
+ if (!wfVm) return
268
+ item.run(wfVm);
269
+ },
270
+ }));
271
+ },
272
+ /**
273
+ * 底栏按钮:审批动作在前(审批中的单据以审批为主),然后是流程启动/修改单据,
274
+ * 最后是业务按钮。hidden 的业务按钮先剔除,否则「更多」里会留空条目
275
+ * (static-content-wrapper 内部只是 v-show 隐藏,el-dropdown-item 仍占一行)。
276
+ */
277
+ bottomButtons() {
278
+ let widgetButtons = (this.widget.widgetList || []).filter(
279
+ (w) => !w.options || !w.options.hidden
280
+ );
281
+ return this.wfActionButtons().concat(widgetButtons);
282
+ },
283
+ /**
284
+ * 底栏要不要出。与 visibleButtons/overflowButtons 同源(都走 bottomButtons),
285
+ * 不会出现「有按钮却不渲染」的错位。
286
+ *
287
+ * 用方法而非 computed,同本文件其余流程相关方法:wfActionButtons 依赖的流程状态
288
+ * 挂在表单实例上、多数不是响应式的。重渲染的触发点是 f.hasWf(它在 form-render
289
+ * 的 data 里)与 widget.widgetList —— 流程就绪、按钮显隐变化时都会重算,
290
+ * 底栏跟着出现或消失。
291
+ */
292
+ hasBottomButtons() {
293
+ return this.bottomButtons().length > 0;
294
+ },
295
+ /**
296
+ * 平铺的按钮。宽度由 CSS 的 flex:1 等分决定 ——
297
+ * 1 个铺满、2 个各一半、3 个各三分之一,不需要在这里算。
298
+ */
299
+ visibleButtons() {
300
+ let list = this.bottomButtons();
301
+ if (list.length <= H5_BOTTOM_MAX_BUTTONS) return list;
302
+ return list.slice(0, H5_BOTTOM_MAX_BUTTONS);
303
+ },
304
+ /** 超出上限的按钮,收进底栏最右侧那个纯图标下拉 */
305
+ overflowButtons() {
306
+ let list = this.bottomButtons();
307
+ if (list.length <= H5_BOTTOM_MAX_BUTTONS) return [];
308
+ return list.slice(H5_BOTTOM_MAX_BUTTONS);
309
+ },
119
310
  reload() {
120
311
  this.getFormRef().$parent.$baseReload()
121
312
  },
@@ -123,27 +314,6 @@ export default {
123
314
  if (!!this.previewState) return
124
315
  this.getFormRef().saveForm();
125
316
  },
126
- createWf() {
127
- if (!!this.previewState || !this.widget.options.wfEnabled) return
128
- let formTarget = this.getFormRef();
129
- let formData = formTarget.formData;
130
- if (formData && formData.object_foreign_id) {
131
- let reportTemplate = formTarget.reportTemplate;
132
- let formCode = reportTemplate.formCode;
133
- let option = {
134
- objId: formData.object_foreign_id, //单据ID
135
- wfCode: formCode, //流程编码
136
- showStartBtn: true, //是否放出启动按钮,流程已启动时此参数失效
137
- serviceId: 'user',
138
- startConfirmText: () => formTarget.getWfStartConfirmText(),
139
- callback: ({wfInfo}) => {
140
- this.wfInfo = wfInfo;
141
- }
142
- }
143
- initWf.call(formTarget.$parent, option);
144
- }
145
-
146
- }
147
317
  },
148
318
  }
149
319
  </script>