cloud-web-corejs 1.0.54-dev.786 → 1.0.54-dev.788

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 (158) hide show
  1. package/package.json +2 -1
  2. package/src/components/VabUpload/index.vue +1 -1
  3. package/src/components/baseInputExport/mixins.js +13 -2
  4. package/src/components/code-editor/async.js +29 -0
  5. package/src/components/code-editor/index.vue +65 -6
  6. package/src/components/excelImport/index.js +69 -7
  7. package/src/components/excelImport/mixins.js +841 -9
  8. package/src/components/fileLibrary/fileHistoryDialog.vue +1 -1
  9. package/src/components/fileLibrary/fileObjAuthEdit.vue +1 -1
  10. package/src/components/fileLibrary/filterDialog.vue +1 -1
  11. package/src/components/formDialog/README.md +324 -241
  12. package/src/components/formDialog/actionButtons.js +90 -0
  13. package/src/components/formDialog/index.js +48 -35
  14. package/src/components/formDialog/index.vue +802 -724
  15. package/src/components/formDrawer/drawer.vue +719 -0
  16. package/src/components/formDrawer/index.js +50 -0
  17. package/src/components/onlineTalk/talkUserDialog.vue +1 -1
  18. package/src/components/table/index.js +4 -0
  19. package/src/components/tempStorage/tempStorageDialog.vue +1 -1
  20. package/src/components/wf/addTaskUserdialog.vue +1 -1
  21. package/src/components/xform/docs/2026-08 /345/210/227/350/241/250/345/257/274/345/207/272/350/204/261/346/225/217/345/210/227/345/211/224/351/231/244/350/220/275/345/234/260/346/226/207/346/241/243.md" +165 -0
  22. package/src/components/xform/form-designer/form-widget/container-widget/data-table-widget.vue +1 -1
  23. package/src/components/xform/form-designer/form-widget/dialog/formDialog.vue +115 -4
  24. package/src/components/xform/form-designer/form-widget/dialog/formDrawer.vue +102 -5
  25. package/src/components/xform/form-designer/form-widget/dialog/formFieldDialog.vue +1 -1
  26. package/src/components/xform/form-designer/form-widget/dialog/vabSearchDialog.vue +1 -1
  27. package/src/components/xform/form-designer/form-widget/field-widget/form-item-wrapper.vue +18 -73
  28. package/src/components/xform/form-designer/form-widget/field-widget/script-input-widget.vue +3 -0
  29. package/src/components/xform/form-designer/setting-panel/action-button-config-dialog.vue +241 -0
  30. package/src/components/xform/form-designer/setting-panel/form-setting.vue +116 -0
  31. package/src/components/xform/form-designer/setting-panel/property-editor/container-detail/detail-editor.vue +6 -0
  32. package/src/components/xform/form-designer/widget-panel/widgetsConfig.js +1 -0
  33. package/src/components/xform/form-render/container-item/data-table-mixin.js +1480 -1460
  34. package/src/components/xform/form-render/container-item/detail-item.vue +11 -2
  35. package/src/components/xform/form-render/container-item/list-h5-item.vue +12 -0
  36. package/src/components/xform/form-render/indexMixin.js +5 -0
  37. package/src/components/xform/utils/textMaskUtil.js +186 -0
  38. package/src/index.js +505 -472
  39. package/src/store/config/index.js +224 -0
  40. package/src/store/modules/tagsView.js +4 -2
  41. package/src/utils/lazyPlugin.js +66 -0
  42. package/src/views/bd/project/branch/bd_branch/edit.vue +145 -0
  43. package/src/views/bd/project/branch/bd_branch/list.vue +72 -0
  44. package/src/views/bd/project/branch/bd_branch/menuKindDialog.vue +106 -0
  45. package/src/views/bd/project/branch/bd_branch/mixins/edit.js +189 -0
  46. package/src/views/bd/project/branch/bd_branch/mixins/list.js +124 -0
  47. package/src/views/bd/project/branch/bd_branch/mixins/menuKindDialog.js +85 -0
  48. package/src/views/bd/project/branch/form_script/list.vue +22 -0
  49. package/src/views/bd/project/branch/form_template/list.vue +21 -0
  50. package/src/views/bd/project/branch/menu_kind/list.vue +21 -0
  51. package/src/views/bd/project/common/form_script/list.vue +16 -0
  52. package/src/views/bd/project/common/form_template/list.vue +15 -0
  53. package/src/views/bd/project/common/menu_kind/list.vue +15 -0
  54. package/src/views/bd/project/core/branchContext.js +100 -0
  55. package/src/views/bd/project/core/branchPage.js +78 -0
  56. package/src/views/bd/project/core/branchPageWrap.vue +216 -0
  57. package/src/views/bd/project/core/branchScope.js +44 -0
  58. package/src/views/bd/project/core/branchSelect.vue +106 -0
  59. package/src/views/bd/project/core/httpBranchPatch.js +58 -0
  60. package/src/views/bd/project/datatable/menu_kind/list.vue +15 -0
  61. package/src/views/bd/project/datatable/table_model/list.vue +15 -0
  62. package/src/views/bd/setting/bd_attach_setting/dialog.vue +1 -1
  63. package/src/views/bd/setting/bd_attach_setting/list.vue +1 -1
  64. package/src/views/bd/setting/bd_company_env/dialog.vue +1 -1
  65. package/src/views/bd/setting/bd_company_env/list.vue +1 -1
  66. package/src/views/bd/setting/formVersion/ftHistoryDialog.vue +1 -1
  67. package/src/views/bd/setting/form_import_log/list.vue +1 -1
  68. package/src/views/bd/setting/form_script/dialog.vue +1 -1
  69. package/src/views/bd/setting/form_script/form_list.vue +1 -1
  70. package/src/views/bd/setting/form_script/list.vue +1 -1
  71. package/src/views/bd/setting/form_script/list1.vue +1 -1
  72. package/src/views/bd/setting/form_template/dialog.vue +1 -1
  73. package/src/views/bd/setting/form_template/formDesignerDialog.vue +1 -0
  74. package/src/views/bd/setting/form_template/ftHistoryDialog.vue +1 -1
  75. package/src/views/bd/setting/form_template/itemList.vue +1 -1
  76. package/src/views/bd/setting/form_template/list.vue +3 -3
  77. package/src/views/bd/setting/form_template/mixins/edit.js +3 -3
  78. package/src/views/bd/setting/form_template/mixins/list.js +3 -3
  79. package/src/views/bd/setting/form_template/mixins/list2.js +3 -3
  80. package/src/views/bd/setting/form_template/mixins/wf_list.js +3 -3
  81. package/src/views/bd/setting/form_template/wf_list.vue +3 -3
  82. package/src/views/bd/setting/logic_param/list.vue +1 -1
  83. package/src/views/bd/setting/menu_kind/dialog.vue +1 -1
  84. package/src/views/bd/setting/menu_kind/list.vue +1 -1
  85. package/src/views/bd/setting/push_data/list.vue +1 -1
  86. package/src/views/bd/setting/push_data_h/list.vue +1 -1
  87. package/src/views/bd/setting/request_async_setting/list.vue +1 -1
  88. package/src/views/bd/setting/request_setting/list.vue +1 -1
  89. package/src/views/bd/setting/table_model/dialog.vue +1 -1
  90. package/src/views/bd/setting/table_model/list.vue +1 -1
  91. package/src/views/bd/setting/table_model/zdDialog.vue +1 -1
  92. package/src/views/support/export_template/list.vue +1 -1
  93. package/src/views/user/access_log/list.vue +1 -1
  94. package/src/views/user/access_log/list2.vue +1 -1
  95. package/src/views/user/api_request/list.vue +1 -1
  96. package/src/views/user/area/dialog.vue +1 -1
  97. package/src/views/user/area/list.vue +1 -1
  98. package/src/views/user/bill_setting/list.vue +1 -1
  99. package/src/views/user/bill_setting/userDialog.vue +1 -1
  100. package/src/views/user/code_rules/list.vue +1 -1
  101. package/src/views/user/common_attribute/list.vue +1 -1
  102. package/src/views/user/common_script/list.vue +1 -1
  103. package/src/views/user/company_info/dialog.vue +1 -1
  104. package/src/views/user/country/dialog.vue +1 -1
  105. package/src/views/user/country/list.vue +1 -1
  106. package/src/views/user/data_type_setting/dialog.vue +1 -1
  107. package/src/views/user/extend_datasource/dialog.vue +1 -1
  108. package/src/views/user/extend_datasource/list.vue +1 -1
  109. package/src/views/user/fieldTranslation/list.vue +1 -1
  110. package/src/views/user/field_values_invisible/list.vue +1 -1
  111. package/src/views/user/file_type/list.vue +1 -1
  112. package/src/views/user/file_view_area/list.vue +1 -1
  113. package/src/views/user/form/form_template/dialog.vue +1 -1
  114. package/src/views/user/form/form_template/itemList.vue +1 -1
  115. package/src/views/user/form/form_template/list.vue +1 -1
  116. package/src/views/user/form/form_template_field/dialog.vue +1 -1
  117. package/src/views/user/form/form_type/dialog.vue +1 -1
  118. package/src/views/user/form/form_type/list.vue +1 -1
  119. package/src/views/user/form/report_requestaccess/dialog.vue +1 -1
  120. package/src/views/user/form/report_requestaccess/list.vue +1 -1
  121. package/src/views/user/form/vform/designer.vue +51 -22
  122. package/src/views/user/groups/dialog.vue +1 -1
  123. package/src/views/user/groups/list.vue +1 -1
  124. package/src/views/user/lang_tag/dialog.vue +1 -1
  125. package/src/views/user/lang_tag/list.vue +1 -1
  126. package/src/views/user/language_setting/list.vue +1 -1
  127. package/src/views/user/menu/list.vue +1 -1
  128. package/src/views/user/mobile_menu/list.vue +1 -1
  129. package/src/views/user/notify_message/list.vue +1 -1
  130. package/src/views/user/notify_template/list.vue +1 -1
  131. package/src/views/user/notify_template/list2.vue +1 -1
  132. package/src/views/user/oplog/list.vue +1 -1
  133. package/src/views/user/position/dialog.vue +1 -1
  134. package/src/views/user/position/list.vue +1 -1
  135. package/src/views/user/project_tag/dialog.vue +1 -1
  136. package/src/views/user/project_tag/list.vue +1 -1
  137. package/src/views/user/push_setting/list.vue +1 -1
  138. package/src/views/user/request_setting/list.vue +1 -1
  139. package/src/views/user/role/dialog.vue +1 -1
  140. package/src/views/user/role/list.vue +1 -1
  141. package/src/views/user/sale_org/dialog.vue +1 -1
  142. package/src/views/user/sale_org/list.vue +1 -1
  143. package/src/views/user/system_notice/list.vue +1 -1
  144. package/src/views/user/system_parameter/list.vue +1 -1
  145. package/src/views/user/user/dialog.vue +1 -1
  146. package/src/views/user/user/form_dialog.vue +1 -1
  147. package/src/views/user/user/form_list.vue +1 -1
  148. package/src/views/user/user/list.vue +2 -2
  149. package/src/views/user/user_log_classify/list.vue +1 -1
  150. package/src/views/user/wf/wfReport/index.vue +2 -2
  151. package/src/views/user/wf/wf_auto_submit_data/list.vue +2 -2
  152. package/src/views/user/wf/wf_manage/list.vue +2 -2
  153. package/src/views/user/wf/wf_manage/list2.vue +2 -2
  154. package/src/views/user/wf/wf_obj_config/dialog.vue +1 -1
  155. package/src/views/user/wf/wf_obj_config/list.vue +1 -1
  156. package/src/views/user/wf/wf_obj_config/list_form.vue +1 -1
  157. package/src/views/user/wf/wf_transfer_setting/list.vue +1 -1
  158. package/src/views/user/workbench_menu/list.vue +1 -1
@@ -15,7 +15,7 @@
15
15
  :class="[customClass]"
16
16
  :ref="widget.id"
17
17
  >
18
- <div class="d-header clearfix">
18
+ <div class="d-header clearfix" v-if="showHeader">
19
19
  <div class="fl">
20
20
  <i class="el-icon-info" />
21
21
  {{ getI18nLabel(widget.options.label) }}
@@ -93,7 +93,7 @@
93
93
  </template>
94
94
  </div>
95
95
  </div>
96
- <baseTabs :showNav="!widget.options.hideNav">
96
+ <baseTabs :showNav="!widget.options.hideNav && !plainMode">
97
97
  <detail-pane-widget
98
98
  v-for="(paneWidget, index) in widget.panes"
99
99
  :key="index"
@@ -158,6 +158,15 @@ export default {
158
158
  };
159
159
  },
160
160
  computed: {
161
+ // 素身详情模式(宿主 VFormRender 传 plainDetailMode):去标题栏、去模块导航,只留模块
162
+ plainMode() {
163
+ let formRef = this.getFormRef && this.getFormRef();
164
+ return !!(formRef && formRef.plainDetailMode);
165
+ },
166
+ // 标题栏:模板配 hideHeader 或宿主素身模式,两者任一命中即不渲染
167
+ showHeader() {
168
+ return !this.plainMode && !this.widget.options.hideHeader;
169
+ },
161
170
  wfStartButtonName() {
162
171
  return (
163
172
  settingConfig.wfStartButtonName ||
@@ -749,6 +749,10 @@ import {
749
749
  isVabsearchMultiWidget,
750
750
  } from "../../../../components/xform/utils/util";
751
751
  import * as formatUtil from "../../../../components/xform/utils/format";
752
+ import {
753
+ buildTextMaskContext,
754
+ markMaskedExportColumns,
755
+ } from "../../../../components/xform/utils/textMaskUtil";
752
756
  import { extendDeeply } from "../../../../utils/index.js";
753
757
  import render from "../../../../views/user/bill_setting/render.vue";
754
758
 
@@ -1656,7 +1660,15 @@ export default {
1656
1660
  current: currentPage + "",
1657
1661
  });
1658
1662
  },
1663
+ /** 导出前按脱敏规则剔除列,实现见 textMaskUtil.markMaskedExportColumns。 */
1664
+ markMaskedColumnsForExport() {
1665
+ markMaskedExportColumns(
1666
+ this.getGridTable(),
1667
+ buildTextMaskContext(this.getFormRef(), this.$store.getters.companyCode)
1668
+ );
1669
+ },
1659
1670
  exportData(option) {
1671
+ this.markMaskedColumnsForExport();
1660
1672
  let tableRef = this.getTableRef();
1661
1673
  let serverName = this.getFormRef().reportTemplate.serverName;
1662
1674
  option.prefix = option.prefix || serverName;
@@ -153,6 +153,11 @@ modules = {
153
153
  type: Object,
154
154
  default: null,
155
155
  },
156
+ plainDetailMode: {
157
+ // 素身详情模式(formDrawer 等宿主用):detail 容器不渲染标题栏、隐藏模块导航
158
+ type: Boolean,
159
+ default: false,
160
+ },
156
161
  },
157
162
  provide() {
158
163
  let e = this;
@@ -0,0 +1,186 @@
1
+ /**
2
+ * 字段脱敏("密文文本")判定。
3
+ *
4
+ * 规则在组件属性面板 textFlag-editor 维护:
5
+ * - options.userTextRuleEnabled 总开关
6
+ * - options.userTextRuleConfig 规则列表,单条为
7
+ * { serveName, companyCodes, roleCodes, type, encryptFormula }
8
+ * - serveName / companyCodes 为空表示不限;companyCodes、roleCodes 为逗号分隔串
9
+ * - type=1:角色不匹配时脱敏;type=2:角色匹配时脱敏
10
+ * - encryptFormula 形如 "3*3" / "3*" / "*3" / "*" / "-"
11
+ * - 规则列表是全遍历而非命中即止,后置规则会覆盖前置规则的结论
12
+ * - 规则里的 loginAccounts / saleOrgCodes 两个维度目前不参与匹配(历史遗留字段)
13
+ *
14
+ * 本文件是该判定的唯一实现:渲染侧(form-item-wrapper 的只读文本)与导出侧
15
+ * (数据表格按列剔除)必须共用,否则会出现界面打码、导出放行的漂移。
16
+ */
17
+
18
+ /** 列 params 上的私有标记:记录 exportDisabled 是脱敏判定打的,撤销时才敢删 */
19
+ const MASK_MARK_KEY = "exportDisabledByTextMask";
20
+
21
+ /**
22
+ * @param {Array} list1 规则侧编码列表。为空表示不限。
23
+ * @param {Array} list2 当前用户编码列表。
24
+ * @returns {Boolean} 是否匹配。
25
+ */
26
+ export function compareToList(list1, list2) {
27
+ if (!list1.length) {
28
+ return true;
29
+ }
30
+ if (!list2.length) {
31
+ return false;
32
+ }
33
+ return list1.some((item) => {
34
+ return list2.some((item2) => item == item2);
35
+ });
36
+ }
37
+
38
+ /**
39
+ * @param {Object} widgetOptions 组件 options。
40
+ * @returns {Boolean} 是否配置了脱敏规则(不代表当前用户命中)。
41
+ */
42
+ export function hasTextMaskRule(widgetOptions) {
43
+ if (!widgetOptions || !widgetOptions.userTextRuleEnabled) return false;
44
+ let ruleList = widgetOptions.userTextRuleConfig || [];
45
+ return ruleList.some((item) => {
46
+ let type = item.type ?? null;
47
+ return type !== null && type !== "";
48
+ });
49
+ }
50
+
51
+ /**
52
+ * @param {Object} formRef 表单实例(form-render)。
53
+ * @param {String} companyCode 当前公司编码(store.getters.companyCode)。
54
+ * @returns {Object} 判定上下文 { bdService, companyCode, roleCodeList }。
55
+ */
56
+ export function buildTextMaskContext(formRef, companyCode) {
57
+ let roleCodeList = (formRef?.userRoleDTOs || []).map((item) => item.roleCode);
58
+ return {
59
+ bdService: formRef?.bdService,
60
+ companyCode,
61
+ roleCodeList,
62
+ };
63
+ }
64
+
65
+ /**
66
+ * @param {Object} ctx 判定上下文。
67
+ * @returns {Boolean} 用户上下文是否已就绪(bdService / 角色均由异步接口填充)。
68
+ */
69
+ export function isTextMaskContextReady(ctx) {
70
+ return !!ctx?.bdService && !!(ctx?.roleCodeList || []).length;
71
+ }
72
+
73
+ /**
74
+ * @param {Object} widgetOptions 组件 options。
75
+ * @param {Object} ctx 用户上下文 { bdService, companyCode, roleCodeList }。
76
+ * @returns {{masked: Boolean, encryptFormula: String}} 是否脱敏及命中的加密规则。
77
+ */
78
+ export function resolveTextMaskFlag(widgetOptions, ctx) {
79
+ let result = { masked: false, encryptFormula: null };
80
+ if (!widgetOptions || !widgetOptions.userTextRuleEnabled) return result;
81
+
82
+ let bdService = ctx?.bdService;
83
+ let companyCode = ctx?.companyCode;
84
+ let roleCodeList = ctx?.roleCodeList || [];
85
+
86
+ let userTextRuleConfig = widgetOptions.userTextRuleConfig || [];
87
+ userTextRuleConfig.forEach((item) => {
88
+ let type = item.type ?? null;
89
+ if (type === null || type === "") return;
90
+
91
+ let companyCodeStr = item.companyCodes;
92
+ let companyCodes = companyCodeStr
93
+ ? companyCodeStr.split(",").filter((code) => !!code)
94
+ : [];
95
+ let roleCodeStr = item.roleCodes;
96
+ let roleCodes = roleCodeStr
97
+ ? roleCodeStr.split(",").filter((code) => !!code)
98
+ : [];
99
+
100
+ let flag1 = !item.serveName || item.serveName == bdService;
101
+ let flag2 = !companyCodes.length || companyCodes.includes(companyCode);
102
+ if (!flag1 || !flag2) return;
103
+
104
+ result.encryptFormula = item.encryptFormula;
105
+ let flag5 = compareToList(roleCodes, roleCodeList);
106
+ if (flag5) {
107
+ //匹配角色
108
+ if (type == 2) result.masked = true; //type=2时加密
109
+ } else {
110
+ //角色不匹配
111
+ if (type == 1) result.masked = true;
112
+ }
113
+ });
114
+
115
+ return result;
116
+ }
117
+
118
+ /**
119
+ * 导出前按脱敏规则给命中列打 params.exportDisabled,由 excelExport 的三处过滤
120
+ * (字段选择树、表头 JSON、取数)统一剔除整列。
121
+ *
122
+ * 之所以要按列剔除:命中脱敏规则的字段在界面上只渲染掩码文本,但导出取值走
123
+ * filterVal / 原始字段快路径,不经过渲染层,会把明文写进文件。
124
+ *
125
+ * bdService / userRoleDTOs 由异步接口填充,上下文缺失时按 fail-closed 处理——配了
126
+ * 规则的列一律剔除,因为角色列表为空会被判成"角色不匹配",type=2 的规则会误判为
127
+ * 不脱敏。本函数幂等且可自愈:上下文就绪后重复调用会撤销自己此前多打的标记
128
+ * (靠私有键区分,不碰 isNonDataExportColumn 打的标记)。
129
+ *
130
+ * @param {Object} $grid vxe-grid 实例。
131
+ * @param {Object} ctx 判定上下文,由 buildTextMaskContext 生成。
132
+ */
133
+ export function markMaskedExportColumns($grid, ctx) {
134
+ if (!$grid || typeof $grid.getTableColumn !== "function") return;
135
+
136
+ let contextReady = isTextMaskContextReady(ctx);
137
+
138
+ /** 打标记。列本就被其它规则(isNonDataExportColumn)剔除时不接管,避免撤销时误删。 */
139
+ let disable = (params) => {
140
+ if (params.exportDisabled && !params[MASK_MARK_KEY]) return;
141
+ params.exportDisabled = true;
142
+ params[MASK_MARK_KEY] = true;
143
+ };
144
+ /** 撤销本函数此前打的标记(上下文未就绪时的 fail-closed 结论)。 */
145
+ let restore = (params) => {
146
+ if (!params[MASK_MARK_KEY]) return;
147
+ delete params[MASK_MARK_KEY];
148
+ delete params.exportDisabled;
149
+ };
150
+
151
+ let maskedFields = new Set();
152
+ let markColumn = (column) => {
153
+ if (column.children && column.children.length) {
154
+ column.children.forEach(markColumn);
155
+ return;
156
+ }
157
+ let widgetOptions = column.params?.widget?.options;
158
+ if (!hasTextMaskRule(widgetOptions)) return;
159
+ if (contextReady && !resolveTextMaskFlag(widgetOptions, ctx).masked) {
160
+ restore(column.params);
161
+ return;
162
+ }
163
+ disable(column.params);
164
+ if (column.field) maskedFields.add(column.field);
165
+ };
166
+ let { collectColumn } = $grid.getTableColumn();
167
+ (collectColumn || []).forEach(markColumn);
168
+
169
+ // 明细导出列是独立配置(只有 field/title,没有组件),按字段名对齐主表脱敏列
170
+ let markItemColumn = (column) => {
171
+ if (column.children && column.children.length) {
172
+ column.children.forEach(markItemColumn);
173
+ return;
174
+ }
175
+ if (!column.field) return;
176
+ column.params = column.params || {};
177
+ if (maskedFields.has(column.field)) {
178
+ disable(column.params);
179
+ } else {
180
+ restore(column.params);
181
+ }
182
+ };
183
+ let originOption = $grid.params?.originOption;
184
+ let exportItemColumns = originOption?.exportItemConfig?.columns || [];
185
+ exportItemColumns.forEach(markItemColumn);
186
+ }