cloud-web-corejs 1.0.54-dev.787 → 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 (42) hide show
  1. package/package.json +1 -1
  2. package/src/components/baseInputExport/mixins.js +13 -2
  3. package/src/components/code-editor/async.js +29 -0
  4. package/src/components/code-editor/index.vue +65 -6
  5. package/src/components/table/index.js +4 -0
  6. 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
  7. package/src/components/xform/form-designer/form-widget/field-widget/form-item-wrapper.vue +18 -73
  8. package/src/components/xform/form-designer/form-widget/field-widget/script-input-widget.vue +3 -0
  9. package/src/components/xform/form-render/container-item/data-table-mixin.js +20 -0
  10. package/src/components/xform/form-render/container-item/list-h5-item.vue +12 -0
  11. package/src/components/xform/utils/textMaskUtil.js +186 -0
  12. package/src/index.js +2 -3
  13. package/src/store/config/index.js +224 -0
  14. package/src/store/modules/tagsView.js +4 -2
  15. package/src/views/bd/project/branch/bd_branch/edit.vue +145 -0
  16. package/src/views/bd/project/branch/bd_branch/list.vue +72 -0
  17. package/src/views/bd/project/branch/bd_branch/menuKindDialog.vue +106 -0
  18. package/src/views/bd/project/branch/bd_branch/mixins/edit.js +189 -0
  19. package/src/views/bd/project/branch/bd_branch/mixins/list.js +124 -0
  20. package/src/views/bd/project/branch/bd_branch/mixins/menuKindDialog.js +85 -0
  21. package/src/views/bd/project/branch/form_script/list.vue +22 -0
  22. package/src/views/bd/project/branch/form_template/list.vue +21 -0
  23. package/src/views/bd/project/branch/menu_kind/list.vue +21 -0
  24. package/src/views/bd/project/common/form_script/list.vue +16 -0
  25. package/src/views/bd/project/common/form_template/list.vue +15 -0
  26. package/src/views/bd/project/common/menu_kind/list.vue +15 -0
  27. package/src/views/bd/project/core/branchContext.js +100 -0
  28. package/src/views/bd/project/core/branchPage.js +78 -0
  29. package/src/views/bd/project/core/branchPageWrap.vue +216 -0
  30. package/src/views/bd/project/core/branchScope.js +44 -0
  31. package/src/views/bd/project/core/branchSelect.vue +106 -0
  32. package/src/views/bd/project/core/httpBranchPatch.js +58 -0
  33. package/src/views/bd/project/datatable/menu_kind/list.vue +15 -0
  34. package/src/views/bd/project/datatable/table_model/list.vue +15 -0
  35. package/src/views/bd/setting/form_template/formDesignerDialog.vue +1 -0
  36. package/src/views/bd/setting/form_template/list.vue +2 -2
  37. package/src/views/bd/setting/form_template/mixins/edit.js +3 -3
  38. package/src/views/bd/setting/form_template/mixins/list.js +3 -3
  39. package/src/views/bd/setting/form_template/mixins/list2.js +3 -3
  40. package/src/views/bd/setting/form_template/mixins/wf_list.js +3 -3
  41. package/src/views/bd/setting/form_template/wf_list.vue +2 -2
  42. package/src/views/user/form/vform/designer.vue +51 -22
@@ -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
+ }
package/src/index.js CHANGED
@@ -44,6 +44,7 @@ VXETable.setup({
44
44
  }) */
45
45
 
46
46
  import Vab from "@base/utils/vab";
47
+ import createCodeEditorAsyncComponent from "@base/components/code-editor/async";
47
48
 
48
49
  Vue.use(Vab);
49
50
 
@@ -208,9 +209,7 @@ Vue.component("status-tag", () =>
208
209
  import("@base/components/statusTag/index.vue")
209
210
  );
210
211
 
211
- Vue.component("CodeEditor", () =>
212
- import("@base/components/code-editor/index.vue")
213
- );
212
+ Vue.component("CodeEditor", createCodeEditorAsyncComponent);
214
213
 
215
214
  Vue.component("scriptDescriptionButton", () =>
216
215
  import("@base/components/scriptDescription/button")
@@ -1,4 +1,225 @@
1
1
  //bdadmin 7,dev_admin 6, 普通dev账号 8
2
+
3
+ // 通用工程/分支工程/数据表管理:分组父节点不配 url,仅作侧边栏分组,叶子的 menuCode 与壳组件 name 一致
4
+ const bdProjectMenus = [
5
+ {
6
+ id: 900001,
7
+ orders: 101,
8
+ parent: null,
9
+ menuName: "通用工程",
10
+ menuEnName: null,
11
+ menuCode: "bd_project_common",
12
+ menuImg: "icon-fenzu",
13
+ url: null,
14
+ route: null,
15
+ enabled: true,
16
+ treePathName: ",",
17
+ hasChild: true,
18
+ grade: 1,
19
+ type: 0,
20
+ children: [
21
+ {
22
+ id: 900002,
23
+ orders: 1,
24
+ parent: 900001,
25
+ menuName: "分类-通用",
26
+ menuEnName: null,
27
+ menuCode: "common_menu_kind:list",
28
+ menuImg: "icon-fenlei",
29
+ url: "@base/views/bd/project/common/menu_kind/list",
30
+ route: "/bd/project/common/menu_kind/list",
31
+ enabled: true,
32
+ treePathName: ",",
33
+ hasChild: false,
34
+ grade: 2,
35
+ type: 0,
36
+ children: [],
37
+ },
38
+ {
39
+ id: 900003,
40
+ orders: 2,
41
+ parent: 900001,
42
+ menuName: "表单模板-通用",
43
+ menuEnName: null,
44
+ menuCode: "common_form_template:list",
45
+ menuImg: "icon-biaodanguanli",
46
+ url: "@base/views/bd/project/common/form_template/list",
47
+ route: "/bd/project/common/form_template/list",
48
+ enabled: true,
49
+ treePathName: ",",
50
+ hasChild: false,
51
+ grade: 2,
52
+ type: 0,
53
+ children: [],
54
+ },
55
+ {
56
+ id: 900004,
57
+ orders: 3,
58
+ parent: 900001,
59
+ menuName: "逻辑脚本-通用",
60
+ menuEnName: null,
61
+ menuCode: "common_form_script:list",
62
+ menuImg: "icon-liuchengshu",
63
+ url: "@base/views/bd/project/common/form_script/list",
64
+ route: "/bd/project/common/form_script/list",
65
+ enabled: true,
66
+ treePathName: ",",
67
+ hasChild: false,
68
+ grade: 2,
69
+ type: 0,
70
+ children: [],
71
+ },
72
+ ],
73
+ },
74
+ {
75
+ id: 900005,
76
+ orders: 102,
77
+ parent: null,
78
+ menuName: "分支工程",
79
+ menuEnName: null,
80
+ menuCode: "bd_project_branch",
81
+ menuImg: "icon-danjuliuchengshezhi",
82
+ url: null,
83
+ route: null,
84
+ enabled: true,
85
+ treePathName: ",",
86
+ hasChild: true,
87
+ grade: 1,
88
+ type: 0,
89
+ children: [
90
+ {
91
+ id: 900006,
92
+ orders: 1,
93
+ parent: 900005,
94
+ menuName: "分类-分支",
95
+ menuEnName: null,
96
+ menuCode: "branch_menu_kind:list",
97
+ menuImg: "icon-fenlei",
98
+ url: "@base/views/bd/project/branch/menu_kind/list",
99
+ route: "/bd/project/branch/menu_kind/list",
100
+ enabled: true,
101
+ treePathName: ",",
102
+ hasChild: false,
103
+ grade: 2,
104
+ type: 0,
105
+ repeatOpen: true,
106
+ children: [],
107
+ },
108
+ {
109
+ id: 900007,
110
+ orders: 2,
111
+ parent: 900005,
112
+ menuName: "表单模板-分支",
113
+ menuEnName: null,
114
+ menuCode: "branch_form_template:list",
115
+ menuImg: "icon-biaodanguanli",
116
+ url: "@base/views/bd/project/branch/form_template/list",
117
+ route: "/bd/project/branch/form_template/list",
118
+ enabled: true,
119
+ treePathName: ",",
120
+ hasChild: false,
121
+ grade: 2,
122
+ type: 0,
123
+ repeatOpen: true,
124
+ children: [],
125
+ },
126
+ {
127
+ id: 900008,
128
+ orders: 3,
129
+ parent: 900005,
130
+ menuName: "逻辑脚本-分支",
131
+ menuEnName: null,
132
+ menuCode: "branch_form_script:list",
133
+ menuImg: "icon-liuchengshu",
134
+ url: "@base/views/bd/project/branch/form_script/list",
135
+ route: "/bd/project/branch/form_script/list",
136
+ enabled: true,
137
+ treePathName: ",",
138
+ hasChild: false,
139
+ grade: 2,
140
+ type: 0,
141
+ repeatOpen: true,
142
+ children: [],
143
+ },
144
+ {
145
+ id: 900009,
146
+ orders: 4,
147
+ parent: 900005,
148
+ menuName: "分支定义",
149
+ menuEnName: null,
150
+ menuCode: "bd_branch:list",
151
+ menuImg: "icon-bianma1",
152
+ url: "@base/views/bd/project/branch/bd_branch/list",
153
+ route: "/bd/project/branch/bd_branch/list",
154
+ enabled: true,
155
+ treePathName: ",",
156
+ hasChild: false,
157
+ grade: 2,
158
+ type: 0,
159
+ children: [],
160
+ },
161
+ ],
162
+ },
163
+ {
164
+ id: 900010,
165
+ orders: 103,
166
+ parent: null,
167
+ menuName: "数据表管理",
168
+ menuEnName: null,
169
+ menuCode: "bd_project_datatable",
170
+ menuImg: "icon-shujuguanli",
171
+ url: null,
172
+ route: null,
173
+ enabled: true,
174
+ treePathName: ",",
175
+ hasChild: true,
176
+ grade: 1,
177
+ type: 0,
178
+ children: [
179
+ {
180
+ id: 900011,
181
+ orders: 1,
182
+ parent: 900010,
183
+ menuName: "数据表分类",
184
+ menuEnName: null,
185
+ menuCode: "dt_menu_kind:list",
186
+ menuImg: "icon-fenlei",
187
+ url: "@base/views/bd/project/datatable/menu_kind/list",
188
+ route: "/bd/project/datatable/menu_kind/list",
189
+ enabled: true,
190
+ treePathName: ",",
191
+ hasChild: false,
192
+ grade: 2,
193
+ type: 0,
194
+ children: [],
195
+ },
196
+ {
197
+ id: 900012,
198
+ orders: 2,
199
+ parent: 900010,
200
+ menuName: "数据表定义",
201
+ menuEnName: null,
202
+ menuCode: "dt_table_model:list",
203
+ menuImg: "icon-biaoge",
204
+ url: "@base/views/bd/project/datatable/table_model/list",
205
+ route: "/bd/project/datatable/table_model/list",
206
+ enabled: true,
207
+ treePathName: ",",
208
+ hasChild: false,
209
+ grade: 2,
210
+ type: 0,
211
+ children: [],
212
+ },
213
+ ],
214
+ },
215
+ ];
216
+
217
+ // 普通dev账号(8)开放同样的分组,但不给「分支定义」的维护入口
218
+ const bdProjectMenusForDev = bdProjectMenus.map((group) => ({
219
+ ...group,
220
+ children: group.children.filter((item) => item.menuCode !== "bd_branch:list"),
221
+ }));
222
+
2
223
  let modules = {};
3
224
  modules = {
4
225
  userFlagMenuMap: {
@@ -297,6 +518,7 @@ modules = {
297
518
  grade: 2,
298
519
  type: 0,
299
520
  },
521
+ ...bdProjectMenus,
300
522
  ],
301
523
  7: [
302
524
  {
@@ -433,6 +655,7 @@ modules = {
433
655
  grade: 2,
434
656
  type: 0,
435
657
  },
658
+ ...bdProjectMenus,
436
659
  ],
437
660
  8: [
438
661
  {
@@ -661,6 +884,7 @@ modules = {
661
884
  grade: 2,
662
885
  type: 0,
663
886
  },
887
+ ...bdProjectMenusForDev,
664
888
  ],
665
889
  },
666
890
  };
@@ -198,9 +198,11 @@ actions = {
198
198
  commit("UPDATE_VISITED_VIEW", view);
199
199
  },
200
200
  updateVisitedView2({ commit }, { view, title }) {
201
- let newView0 = { ...(view || window.$vueRoot.$route) };
201
+ let src = view || window.$vueRoot.$route;
202
+ // 浅拷贝后再拷贝 meta,避免直接改写路由上共享的 meta.title
203
+ let newView0 = { ...src };
202
204
  delete newView0.matched;
203
- newView0.meta.title = title;
205
+ newView0.meta = { ...(src.meta || {}), title };
204
206
  let newView = _.cloneDeep(newView0);
205
207
 
206
208
  commit("UPDATE_VISITED_VIEW", newView);
@@ -0,0 +1,145 @@
1
+ <template>
2
+ <div class="detail-wrap">
3
+ <el-form ref="editForm" :model="bdBranch">
4
+ <div class="d-header clearfix">
5
+ <div class="fl">
6
+ <i class="el-icon-info" />
7
+ {{ dataId ? $t1("查看分支定义") : $t1("新增分支定义") }}
8
+ </div>
9
+ <div class="fr">
10
+ <el-button
11
+ type="primary"
12
+ plain
13
+ class="button-sty"
14
+ @click="$baseReload()"
15
+ icon="el-icon-refresh-right"
16
+ >
17
+ {{ $t1("重置") }}
18
+ </el-button>
19
+ <el-button
20
+ type="primary"
21
+ class="button-sty"
22
+ icon="el-icon-check"
23
+ @click="saveData"
24
+ >{{ $t1("保存") }}
25
+ </el-button>
26
+ </div>
27
+ </div>
28
+ <div class="d-cont">
29
+ <div class="d-item">
30
+ <div class="title first">
31
+ <b>{{ $t1("基本信息") }}</b>
32
+ </div>
33
+ <table class="table-detail">
34
+ <tbody>
35
+ <tr>
36
+ <th>
37
+ <em class="f-red">*</em>
38
+ {{ $t1("分支编码") }}
39
+ </th>
40
+ <td>
41
+ <el-form-item prop="branchCode" :rules="branchCodeRules">
42
+ <el-input
43
+ type="text"
44
+ autocomplete="off"
45
+ v-model="bdBranch.branchCode"
46
+ :disabled="isEdit"
47
+ clearable
48
+ />
49
+ </el-form-item>
50
+ </td>
51
+ <th>
52
+ <em class="f-red">*</em>
53
+ {{ $t1("分支名称") }}
54
+ </th>
55
+ <td>
56
+ <el-form-item prop="branchName" :rules="branchNameRules">
57
+ <el-input
58
+ type="text"
59
+ autocomplete="off"
60
+ v-model="bdBranch.branchName"
61
+ clearable
62
+ />
63
+ </el-form-item>
64
+ </td>
65
+ <th>{{ $t1("是否启用") }}</th>
66
+ <td>
67
+ <el-switch v-model="bdBranch.enabled"></el-switch>
68
+ </td>
69
+ </tr>
70
+ <tr>
71
+ <th>{{ $t1("备注") }}</th>
72
+ <td colspan="5">
73
+ <el-input
74
+ type="textarea"
75
+ :rows="2"
76
+ :placeholder="$t1('请输入内容')"
77
+ size="small"
78
+ v-model="bdBranch.remark"
79
+ clearable
80
+ ></el-input>
81
+ </td>
82
+ </tr>
83
+ <tr>
84
+ <th>{{ $t1("创建人") }}</th>
85
+ <td>{{ bdBranch.createBy }}</td>
86
+ <th>{{ $t1("创建时间") }}</th>
87
+ <td>{{ bdBranch.createDate }}</td>
88
+ <th>{{ $t1("更新人") }}</th>
89
+ <td>{{ bdBranch.modifyBy }}</td>
90
+ </tr>
91
+ </tbody>
92
+ </table>
93
+ </div>
94
+ <div class="d-item">
95
+ <div class="title">
96
+ <b>{{ $t1("分支菜单类型") }}</b>
97
+ </div>
98
+ <div class="grid-height" style="height: 320px">
99
+ <vxe-grid
100
+ ref="table-menuKind"
101
+ :data="menuKindRows"
102
+ v-bind="menuKindOption"
103
+ @resizable-change="$vxeTableUtil.onColumnWitchChange"
104
+ @custom="$vxeTableUtil.customHandle"
105
+ >
106
+ <template #form>
107
+ <div class="clearfix screen-btns">
108
+ <div class="fl">
109
+ <vxe-button
110
+ status="primary"
111
+ class="button-sty"
112
+ icon="el-icon-plus"
113
+ @click="openMenuKindDialog"
114
+ >
115
+ {{ $t1("选择分类") }}
116
+ </vxe-button>
117
+ <span class="tips">{{
118
+ $t1("注:只能选择「分类-通用」的一级分类")
119
+ }}</span>
120
+ </div>
121
+ </div>
122
+ </template>
123
+ </vxe-grid>
124
+ </div>
125
+ </div>
126
+ </div>
127
+ </el-form>
128
+ <menuKindDialog
129
+ v-if="showMenuKindDialog"
130
+ :visiable.sync="showMenuKindDialog"
131
+ :rows="checkedMenuKindRows"
132
+ multi="true"
133
+ @confirm="confirmMenuKindDialog"
134
+ ></menuKindDialog>
135
+ </div>
136
+ </template>
137
+
138
+ <script>
139
+ import mixin from "./mixins/edit";
140
+
141
+ export default {
142
+ name: "bdBranchEdit",
143
+ mixins: [mixin],
144
+ };
145
+ </script>
@@ -0,0 +1,72 @@
1
+ <template>
2
+ <div id="containt">
3
+ <el-tabs v-model="activeName" class="tab-box">
4
+ <el-tab-pane :label="$t1('常规')" name="first">
5
+ <editView
6
+ v-if="showEdit"
7
+ visible-key="showEdit"
8
+ :_dataId.sync="dataId"
9
+ :parent-target="_self"
10
+ @reload="$reloadHandle"
11
+ ></editView>
12
+ </el-tab-pane>
13
+ <el-tab-pane :label="$t1('列表')" name="second">
14
+ <div class="grid-height">
15
+ <vxe-grid
16
+ ref="table-m1"
17
+ v-bind="vxeOption"
18
+ @resizable-change="$vxeTableUtil.onColumnWitchChange"
19
+ @custom="$vxeTableUtil.customHandle"
20
+ >
21
+ <template #form>
22
+ <tableForm
23
+ :formData.sync="formData"
24
+ @searchEvent="searchEvent"
25
+ @resetEvent="resetEvent"
26
+ >
27
+ <template #buttonLeft>
28
+ <vxe-button
29
+ status="primary"
30
+ class="button-sty"
31
+ icon="el-icon-plus"
32
+ @click="openEditDialog"
33
+ >
34
+ {{ $t1("新增") }}
35
+ </vxe-button>
36
+ </template>
37
+ <template #buttonRight>
38
+ <vxe-button
39
+ icon="el-icon-brush"
40
+ class="button-sty"
41
+ @click="resetEvent"
42
+ type="text"
43
+ status="primary"
44
+ plain
45
+ >{{ $t1("刷新") }}
46
+ </vxe-button>
47
+ <vxe-button
48
+ status="warning"
49
+ icon="el-icon-search"
50
+ class="button-sty"
51
+ @click="searchEvent"
52
+ >
53
+ {{ $t1("搜索") }}
54
+ </vxe-button>
55
+ </template>
56
+ </tableForm>
57
+ </template>
58
+ </vxe-grid>
59
+ </div>
60
+ </el-tab-pane>
61
+ </el-tabs>
62
+ </div>
63
+ </template>
64
+
65
+ <script>
66
+ import mixin from "./mixins/list";
67
+
68
+ export default {
69
+ name: "bd_branch:list",
70
+ mixins: [mixin],
71
+ };
72
+ </script>