hbte-saas-ui 0.0.1

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 (137) hide show
  1. package/.browserslistrc +3 -0
  2. package/.editorconfig +7 -0
  3. package/.env.development +1 -0
  4. package/.env.lib +1 -0
  5. package/.eslintrc.js +14 -0
  6. package/.prettierrc +3 -0
  7. package/README.md +53 -0
  8. package/babel.config.js +3 -0
  9. package/docs/.vuepress/config.js +23 -0
  10. package/docs/.vuepress/styles/index.styl +4 -0
  11. package/docs/AdvQuery.md +26 -0
  12. package/docs/CustomQuery.md +21 -0
  13. package/docs/EditArea.md +16 -0
  14. package/docs/FilterDrop.md +29 -0
  15. package/docs/FullTable.md +68 -0
  16. package/docs/Pagination.md +22 -0
  17. package/docs/QueryForm.md +27 -0
  18. package/docs/README.md +17 -0
  19. package/docs/Table.md +58 -0
  20. package/docs/ToolGroup.md +32 -0
  21. package/examples/App.vue +97 -0
  22. package/examples/image/hb-image-viewer/3k.jpg +0 -0
  23. package/examples/image/hb-image-viewer/a.jpg +0 -0
  24. package/examples/image/hb-image-viewer/b.jpg +0 -0
  25. package/examples/main.js +39 -0
  26. package/examples/mock/authority.js +1108 -0
  27. package/examples/mock/dept.js +4001 -0
  28. package/examples/mock/fulltable.js +407 -0
  29. package/examples/mock/organizeData.js +18965 -0
  30. package/examples/router/index.js +111 -0
  31. package/examples/views/ElementCpTest.vue +299 -0
  32. package/examples/views/Fragment.vue +196 -0
  33. package/examples/views/HBAdvQuery.vue +150 -0
  34. package/examples/views/HBAuthority.vue +339 -0
  35. package/examples/views/HBDialog.vue +39 -0
  36. package/examples/views/HBEditarea.vue +350 -0
  37. package/examples/views/HBFilterDrop.vue +72 -0
  38. package/examples/views/HBFloatFooter.vue +42 -0
  39. package/examples/views/HBFullTable.vue +751 -0
  40. package/examples/views/HBImageViewer.vue +57 -0
  41. package/examples/views/HBNavMenu.vue +37 -0
  42. package/examples/views/HBOrganizeDialog.vue +133 -0
  43. package/examples/views/HBPagination.vue +80 -0
  44. package/examples/views/HBSelectVague.vue +57 -0
  45. package/examples/views/HBToolgroup.vue +29 -0
  46. package/examples/views/HBTopBar.vue +16 -0
  47. package/lib/demo.html +10 -0
  48. package/lib/fonts/iconfont.9e99af35.ttf +0 -0
  49. package/lib/hbte-ui.common.js +38291 -0
  50. package/lib/hbte-ui.css +1 -0
  51. package/lib/hbte-ui.umd.js +38301 -0
  52. package/lib/hbte-ui.umd.min.js +21 -0
  53. package/lib/img/nodata.f87d17c1.png +0 -0
  54. package/lib/img/user-logo--default.a53bd193.png +0 -0
  55. package/package.json +40 -0
  56. package/packages/adv-query/index.js +5 -0
  57. package/packages/adv-query/src/main.vue +294 -0
  58. package/packages/area-select/index.js +7 -0
  59. package/packages/area-select/src/main.vue +37 -0
  60. package/packages/authority/index.js +5 -0
  61. package/packages/authority/src/main.vue +606 -0
  62. package/packages/config.js +3 -0
  63. package/packages/custom-query/index.js +5 -0
  64. package/packages/custom-query/src/main.vue +80 -0
  65. package/packages/dialog/index.js +7 -0
  66. package/packages/dialog/src/main.vue +176 -0
  67. package/packages/edit-area/index.js +13 -0
  68. package/packages/edit-area/src/config.js +3 -0
  69. package/packages/edit-area/src/main.vue +304 -0
  70. package/packages/edit-area/src/simulateEvent.js +219 -0
  71. package/packages/filter-drop/index.js +6 -0
  72. package/packages/filter-drop/src/main.vue +107 -0
  73. package/packages/float-footer/index.js +7 -0
  74. package/packages/float-footer/src/main.vue +40 -0
  75. package/packages/fragment/index.js +7 -0
  76. package/packages/fragment/src/main.vue +74 -0
  77. package/packages/fragment/src/old.vue +144 -0
  78. package/packages/full-table/index.js +6 -0
  79. package/packages/full-table/src/config.js +14 -0
  80. package/packages/full-table/src/main.vue +141 -0
  81. package/packages/image-viewer/index.js +8 -0
  82. package/packages/image-viewer/src/main.js +14 -0
  83. package/packages/image-viewer/src/main.vue +138 -0
  84. package/packages/image-viewer/src/svg/cancel.svg +2 -0
  85. package/packages/image-viewer/src/svg/delete.svg +2 -0
  86. package/packages/image-viewer/src/svg/download.svg +2 -0
  87. package/packages/image-viewer/src/svg/rotate.svg +77 -0
  88. package/packages/image-viewer/src/svg/scaledown.svg +71 -0
  89. package/packages/image-viewer/src/svg/scaleup.svg +72 -0
  90. package/packages/index.js +43 -0
  91. package/packages/nav-menu/index.js +7 -0
  92. package/packages/nav-menu/src/main.vue +277 -0
  93. package/packages/organize-dialog/index.js +5 -0
  94. package/packages/organize-dialog/src/main.vue +427 -0
  95. package/packages/pagination/index.js +6 -0
  96. package/packages/pagination/src/main.vue +145 -0
  97. package/packages/query-form/index.js +5 -0
  98. package/packages/query-form/src/main.vue +142 -0
  99. package/packages/select-vague/index.js +5 -0
  100. package/packages/select-vague/src/main.vue +80 -0
  101. package/packages/table/index.js +5 -0
  102. package/packages/table/src/main.vue +265 -0
  103. package/packages/theme-chalk/adv-query.scss +107 -0
  104. package/packages/theme-chalk/authority.scss +103 -0
  105. package/packages/theme-chalk/common/elementCover.scss +722 -0
  106. package/packages/theme-chalk/common/flex.scss +66 -0
  107. package/packages/theme-chalk/common/global.scss +147 -0
  108. package/packages/theme-chalk/common/reset.scss +92 -0
  109. package/packages/theme-chalk/common/var.scss +46 -0
  110. package/packages/theme-chalk/custom-query.scss +10 -0
  111. package/packages/theme-chalk/dialog.scss +9 -0
  112. package/packages/theme-chalk/edit-area.scss +119 -0
  113. package/packages/theme-chalk/filter-drop.scss +81 -0
  114. package/packages/theme-chalk/float-footer.scss +14 -0
  115. package/packages/theme-chalk/fonts/iconfont.ttf +0 -0
  116. package/packages/theme-chalk/fragment.scss +51 -0
  117. package/packages/theme-chalk/full-table.scss +40 -0
  118. package/packages/theme-chalk/icon.scss +96 -0
  119. package/packages/theme-chalk/image-viewer.scss +94 -0
  120. package/packages/theme-chalk/images/company-logo--default.png +0 -0
  121. package/packages/theme-chalk/images/nodata.png +0 -0
  122. package/packages/theme-chalk/images/user-logo--default.png +0 -0
  123. package/packages/theme-chalk/index.scss +21 -0
  124. package/packages/theme-chalk/nav-menu.scss +205 -0
  125. package/packages/theme-chalk/organize-dialog.scss +170 -0
  126. package/packages/theme-chalk/pagination.scss +91 -0
  127. package/packages/theme-chalk/select.scss +8 -0
  128. package/packages/theme-chalk/table.scss +102 -0
  129. package/packages/theme-chalk/tool-group.scss +105 -0
  130. package/packages/theme-chalk/top-bar.scss +195 -0
  131. package/packages/tool-group/index.js +13 -0
  132. package/packages/tool-group/src/config.js +40 -0
  133. package/packages/tool-group/src/main.vue +93 -0
  134. package/packages/top-bar/index.js +7 -0
  135. package/packages/top-bar/src/main.vue +280 -0
  136. package/public/index.html +20 -0
  137. package/vue.config.js +6 -0
@@ -0,0 +1,606 @@
1
+ <template>
2
+ <div class="hb-authority">
3
+ <div class="hb-authority-role-list">
4
+ <div class="title">角色</div>
5
+ <ul class="list">
6
+ <li
7
+ @click="tabRole(item.id)"
8
+ class="item"
9
+ v-for="item in roleList"
10
+ :key="item.id"
11
+ :class="{ active: item.id === roleId }"
12
+ >
13
+ <p>{{ item.roleName }}</p>
14
+ <div class="edit" v-show="item.id === roleId">
15
+ <el-dropdown trigger="click">
16
+ <span class="el-dropdown-link">
17
+ <i class="hbui-gengduo2"></i>
18
+ </span>
19
+ <el-dropdown-menu slot="dropdown">
20
+ <el-dropdown-item>
21
+ <div
22
+ @click="editRole(item)"
23
+ class="hbui-bianji1 hb-authority-dropdown"
24
+ ></div>
25
+ </el-dropdown-item>
26
+ <el-dropdown-item>
27
+ <div
28
+ @click="removeRole(item)"
29
+ class="hbui-shanchu hb-authority-dropdown"
30
+ ></div>
31
+ </el-dropdown-item>
32
+ </el-dropdown-menu>
33
+ </el-dropdown>
34
+ </div>
35
+ </li>
36
+ </ul>
37
+ <div class="add-role">
38
+ <el-button type="primary" @click="visible = true">新增角色</el-button>
39
+ </div>
40
+ </div>
41
+ <div class="hb-authority-config">
42
+ <el-tabs v-model="activePane">
43
+ <el-tab-pane class="role-pane" label="角色成员" name="role">
44
+ <el-tag
45
+ type="info"
46
+ @close="removeRoleMember(item, 1)"
47
+ v-for="item in roleMembers"
48
+ :key="`user-${item.id}`"
49
+ closable
50
+ >
51
+ {{ item.name }}
52
+ </el-tag>
53
+ <el-tag
54
+ type="info"
55
+ @close="removeRoleMember(item, 2)"
56
+ v-for="item in deptMembers"
57
+ :key="`dept-${item.id}`"
58
+ closable
59
+ >
60
+ <i class="el-icon-edit"></i> {{ item.name }}
61
+ </el-tag>
62
+ <el-button
63
+ type="primary"
64
+ plain
65
+ @click="openOrganizeDialog"
66
+ size="mini"
67
+ class="el-icon-plus"
68
+ >添加成员</el-button
69
+ >
70
+ </el-tab-pane>
71
+
72
+ <el-tab-pane label="业务权限" name="authority">
73
+ <slot name="range">
74
+ <el-form
75
+ :model="formInline"
76
+ class="demo-form-inline"
77
+ label-position="top"
78
+ v-if="formInline.menuObj"
79
+ >
80
+ <el-form-item label="数据作用对象" prop="menuObj">
81
+ <el-select
82
+ v-model="formInline.menuObj"
83
+ placeholder="数据作用对象"
84
+ @change="changeMenuObj"
85
+ :clearable="false"
86
+ style="width: 280px"
87
+ >
88
+ <el-option
89
+ v-for="(item, index) in menuObjList"
90
+ :key="index"
91
+ :label="item.name"
92
+ :value="item.id"
93
+ ></el-option>
94
+ </el-select>
95
+ </el-form-item>
96
+ <el-form-item
97
+ label="数据类型"
98
+ prop="menuOrg"
99
+ v-if="formInline.menuObj != '2'"
100
+ >
101
+ <el-select
102
+ v-model="formInline.menuOrg"
103
+ placeholder="数据类型"
104
+ :clearable="false"
105
+ style="width: 280px"
106
+ >
107
+ <el-option
108
+ @click.native="replaceAllScope(item)"
109
+ v-for="(item, index) in sacleList"
110
+ :key="index"
111
+ :label="item.name"
112
+ :value="item.id"
113
+ ></el-option>
114
+ </el-select>
115
+ </el-form-item>
116
+ </el-form>
117
+ </slot>
118
+ <!-- 权限树 -->
119
+ <el-tree
120
+ class="custom-tree"
121
+ ref="authTree"
122
+ :data="renderTreeData"
123
+ :props="defaultProps"
124
+ default-expand-all
125
+ auto-expand-parent
126
+ node-key="id"
127
+ >
128
+ <div slot-scope="{ node, data }">
129
+ <el-checkbox
130
+ @change="checkMenu(node, data)"
131
+ v-model="data.menuChecked"
132
+ >
133
+ {{ data.menuName }}{{ data.permissions.length ? ":" : "" }}
134
+ </el-checkbox>
135
+ <el-checkbox
136
+ v-if="data.permissions.length"
137
+ v-model="data.checked"
138
+ :indeterminate="data.isIndeterminate"
139
+ @change="checkTreeNode(node, data)"
140
+ >全选</el-checkbox
141
+ >
142
+ <el-checkbox
143
+ class="permission-box"
144
+ @change="checkPermissionNode(node)"
145
+ v-for="item in data.permissions"
146
+ v-model="item.checked"
147
+ :key="item.perm"
148
+ >
149
+ {{ item.permName }}
150
+ </el-checkbox>
151
+ <el-select
152
+ v-if="data.permissions.length && formInline.menuObj"
153
+ v-model="data.dataScope"
154
+ :disabled="formInline.menuObj == '1'"
155
+ :clearable="false"
156
+ placeholder="数据类型"
157
+ size="small"
158
+ >
159
+ <el-option
160
+ @click.native="selectDataScope(node, item)"
161
+ v-for="(item, index) in sacleList"
162
+ :key="index"
163
+ :label="item.name"
164
+ :value="item.id"
165
+ ></el-option>
166
+ </el-select>
167
+ </div>
168
+ </el-tree>
169
+ </el-tab-pane>
170
+ </el-tabs>
171
+ <hb-float-footer
172
+ v-if="activePane === 'authority'"
173
+ :label="label"
174
+ @confirm="save"
175
+ @exist="reset"
176
+ ></hb-float-footer>
177
+ </div>
178
+ <!-- 添加角色成员(人员和部门选择组件) -->
179
+ <hb-organize-dialog
180
+ ref="organize"
181
+ :deptOnly="deptOnly"
182
+ @confirm="confirm"
183
+ />
184
+ <!-- 新增角色 -->
185
+ <el-dialog
186
+ :title="roleTitle"
187
+ :visible.sync="visible"
188
+ :close-on-click-modal="false"
189
+ :close-on-press-escape="false"
190
+ :destroy-on-close="true"
191
+ width="440px"
192
+ @closed="clearRoleFormData"
193
+ >
194
+ <el-form ref="form" :rules="rules" :model="newRole">
195
+ <el-form-item label="角色名称" prop="roleName">
196
+ <el-input
197
+ v-model="newRole.roleName"
198
+ placeholder="请输入角色名称"
199
+ ></el-input>
200
+ </el-form-item>
201
+ <el-form-item label="描述" prop="roleDesc">
202
+ <el-input
203
+ type="textarea"
204
+ v-model="newRole.roleDesc"
205
+ placeholder="请输入描述"
206
+ ></el-input>
207
+ </el-form-item>
208
+ </el-form>
209
+ <div slot="footer" class="dialog-footer">
210
+ <el-button @click="submitRoleCancel" plain>取 消</el-button>
211
+ <el-button type="primary" @click="submitRole">确 定</el-button>
212
+ </div>
213
+ </el-dialog>
214
+ </div>
215
+ </template>
216
+ <script>
217
+ import lodash from "lodash";
218
+ export default {
219
+ name: "HbAuthority",
220
+ componentName: "HbAuthority",
221
+ data() {
222
+ return {
223
+ label: {
224
+ confirm: "保存",
225
+ exist: "重置",
226
+ },
227
+ roleTitle: "新增角色",
228
+ roleId: "",
229
+ visible: false,
230
+ renderTreeData: [],
231
+ activePane: "role",
232
+ authorityData: [],
233
+ defaultProps: {
234
+ children: "subMenus",
235
+ label: "menuName",
236
+ },
237
+ newRole: {
238
+ roleName: "",
239
+ roleDesc: "",
240
+ id: undefined,
241
+ },
242
+ //数据作用对象
243
+ menuObjList: [
244
+ { name: "菜单", id: "2" },
245
+ { name: "系统", id: "1" },
246
+ ],
247
+ //权限范围
248
+ sacleList: [
249
+ { name: "无权限", id: "1" },
250
+ { name: "本人的", id: "2" },
251
+ { name: "本部门内", id: "3" },
252
+ { name: "下级部门", id: "4" },
253
+ { name: "本部门及下级部门", id: "5" },
254
+ { name: "全部人员", id: "6" },
255
+ { name: "自选部门", id: "7" },
256
+ ],
257
+ //业务权限插槽表单数据
258
+ formInline: {
259
+ menuObj: "2",
260
+ menuOrg: "",
261
+ },
262
+ deptOnly: false,
263
+ nodeId: "",
264
+ selectDeptNode: [], //数据类型选择自选部门时储存的id
265
+ };
266
+ },
267
+ methods: {
268
+ submitRoleCancel() {
269
+ this.visible = false;
270
+ },
271
+ submitRole() {
272
+ this.$refs.form.validate((valid) => {
273
+ if (valid) {
274
+ this.$emit("submitRole", this.newRole);
275
+ this.visible = false;
276
+ }
277
+ });
278
+ },
279
+ editRole(role) {
280
+ this.roleTitle = "修改角色";
281
+ this.visible = true;
282
+ this.newRole = {
283
+ roleName: role.roleName,
284
+ roleDesc: role.roleDesc,
285
+ id: role.id,
286
+ };
287
+ },
288
+ removeRoleMember(member, type) {
289
+ this.$emit("removeRoleMember", member, type);
290
+ },
291
+ removeRole(role) {
292
+ this.$confirm(`是否删除角色${role.roleName}`, "提示", {
293
+ confirmButtonText: "确定",
294
+ cancelButtonText: "取消",
295
+ type: "warning",
296
+ })
297
+ .then(() => {
298
+ this.$emit("deleteRole", role.id);
299
+ })
300
+ .catch(() => {});
301
+ },
302
+ tabRole(id) {
303
+ this.roleId = id;
304
+ this.$emit("tabRole", id);
305
+ },
306
+ clearRoleFormData() {
307
+ this.roleTitle = "新增角色";
308
+ this.newRole = {
309
+ roleName: "",
310
+ roleDesc: "",
311
+ id: undefined,
312
+ };
313
+ },
314
+ openOrganizeDialog() {
315
+ this.deptOnly = false;
316
+ this.$emit("openOrganizeDialog", this.$refs.organize);
317
+ },
318
+ //提交人员和部门选择的数据
319
+ confirm(data) {
320
+ this.$refs.organize.close();
321
+ let deptId = [
322
+ ...data.localChecked.map((v) => v.id),
323
+ ...data.originChecked.map((v) => v.id),
324
+ ];
325
+ if (this.deptOnly) {
326
+ if (this.nodeId) {
327
+ this.renderTreeData.forEach((v) => {
328
+ if (this.nodeId == v.id) {
329
+ v.deptId = deptId;
330
+ } else {
331
+ v.subMenus.forEach((k) => {
332
+ if (this.nodeId == k.id) {
333
+ k.deptId = deptId;
334
+ }
335
+ });
336
+ }
337
+ });
338
+ this.nodeId = "";
339
+ } else {
340
+ this.renderTreeData.forEach((v) => {
341
+ v.deptId = deptId;
342
+ v.subMenus.forEach((k) => {
343
+ k.deptId = deptId;
344
+ });
345
+ });
346
+ this.selectDeptNode = deptId;
347
+ }
348
+ this.selectDeptNode = [];
349
+ } else {
350
+ this.$emit("chooseOrganizeMembers", data);
351
+ }
352
+ },
353
+ //点击菜单勾选菜单事件
354
+ checkMenu(node, data) {
355
+ if (data.level === 1) {
356
+ //只处理取消勾选一级菜单事件,清空一级菜单下所有的勾选
357
+ !data.menuChecked &&
358
+ data.subMenus.forEach((v) => {
359
+ v.checked = data.menuChecked;
360
+ v.isIndeterminate = data.menuChecked;
361
+ v.menuChecked = data.menuChecked;
362
+ v.permissions.forEach((permission) => {
363
+ permission.checked = data.menuChecked;
364
+ });
365
+ this.checkIndeterminate(v);
366
+ });
367
+ } else {
368
+ data.menuChecked && (node.parent.data.menuChecked = data.menuChecked);
369
+ if (!data.menuChecked) {
370
+ data.checked = data.menuChecked;
371
+ data.isIndeterminate = data.menuChecked;
372
+ data.permissions.forEach((v) => {
373
+ v.checked = data.menuChecked;
374
+ });
375
+ }
376
+ }
377
+ },
378
+ //点击全选按钮事件
379
+ checkTreeNode(node, data) {
380
+ //只处理checked数据,将处理后的数据交给专业函数处理半选
381
+ if (data.level === 2) {
382
+ data.permissions.forEach((permission) => {
383
+ permission.checked = data.checked;
384
+ });
385
+ //二级菜单为否时,点击全选或者权限按钮勾选二级菜单
386
+ !data.menuChecked &&
387
+ (data.menuChecked = data.checked || data.isIndeterminate);
388
+ let parentData = node.parent.data;
389
+ //一级菜单为否时,点击全选或者权限按钮勾选一级菜单
390
+ parentData.subMenus.find(
391
+ (i) => i.checked == true || i.isIndeterminate == true
392
+ ) != undefined && (parentData.menuChecked = true);
393
+ this.checkIndeterminate(data);
394
+ } else {
395
+ let childrenKey = data.subMenus.length ? "subMenus" : "permissions";
396
+ data[childrenKey].forEach((item) => {
397
+ item.checked = data.checked;
398
+ if (childrenKey === "subMenus") {
399
+ item.permissions.forEach((i) => (i.checked = data.checked));
400
+ }
401
+ });
402
+ this.checkIndeterminate(data);
403
+ }
404
+ },
405
+ checkPermissionNode(node) {
406
+ let permissions = node.data.permissions;
407
+ if (node.data.level === 1) {
408
+ //点击的一级按钮
409
+ // 判断一级菜单是否半选
410
+ node.data.isIndeterminate =
411
+ permissions.some((i) => i.checked) &&
412
+ permissions.some((i) => !i.checked);
413
+ // 判断一级菜单是否勾选(一级按钮全勾选,一级菜单才勾选)
414
+ node.data.checked = permissions.every((i) => i.checked);
415
+ this.checkIndeterminate(node.data);
416
+ } else {
417
+ //点击的二级按钮
418
+ // 判断二级菜单是否半选
419
+ node.data.isIndeterminate =
420
+ permissions.some((i) => i.checked) &&
421
+ permissions.some((i) => !i.checked);
422
+ // 判断二级菜单是否勾选(一级按钮全勾选,一级菜单才勾选)
423
+ node.data.checked = permissions.every((i) => i.checked);
424
+ //只要勾选了权限,把二级菜单勾选
425
+ (node.data.checked || node.data.isIndeterminate) &&
426
+ (node.data.menuChecked = true);
427
+ //判断一级是否半选
428
+ let parentData = node.parent.data;
429
+ parentData.isIndeterminate =
430
+ parentData.subMenus.some((i) => i.isIndeterminate) ||
431
+ (parentData.subMenus.some((i) => i.checked) &&
432
+ parentData.subMenus.some((i) => !i.checked));
433
+ //判断一级是否勾选
434
+ parentData.checked = parentData.subMenus.every((i) => i.checked);
435
+ //只要勾选了权限,将一级菜单勾选
436
+ parentData.subMenus.find(
437
+ (i) => i.checked == true || i.isIndeterminate == true
438
+ ) != undefined && (parentData.menuChecked = true);
439
+ this.checkIndeterminate(parentData);
440
+ }
441
+ },
442
+ //处理半选,node是一级菜单的数据
443
+ checkIndeterminate(node) {
444
+ if (node.permissions.length) {
445
+ node.isIndeterminate =
446
+ node.permissions.some((i) => i.checked) &&
447
+ node.permissions.some((i) => !i.checked);
448
+ } else if (node.subMenus.length) {
449
+ //处理二级菜单的半选状态
450
+ node.subMenus.forEach((subMenu) => {
451
+ subMenu.isIndeterminate =
452
+ subMenu.permissions.some((i) => i.checked) &&
453
+ subMenu.permissions.some((i) => !i.checked);
454
+ });
455
+ //处理一级菜单的半选状态
456
+ node.isIndeterminate =
457
+ node.subMenus.some((i) => i.isIndeterminate) ||
458
+ (node.subMenus.some((i) => i.checked) &&
459
+ node.subMenus.some((i) => !i.checked));
460
+ }
461
+ },
462
+ //-----------插槽选择范围方法-------------
463
+ changeMenuObj(data) {
464
+ this.formInline.menuOrg = "";
465
+ this.selectDeptNode = [];
466
+ this.reset();
467
+ if (data == "1") {
468
+ this.formInline.menuOrg = "6";
469
+ this.replaceAllScope({ id: "6" });
470
+ }
471
+ },
472
+ //数据类型选择事件
473
+ replaceAllScope(data) {
474
+ if (data.id == "7") {
475
+ this.openDept();
476
+ } else {
477
+ this.selectDeptNode = [];
478
+ }
479
+ this.renderTreeData.forEach((v) => {
480
+ if (v.permissions.length) {
481
+ v.dataScope = data.id;
482
+ }
483
+ v.subMenus.forEach((k) => {
484
+ if (k.menuType === "1") {
485
+ k.dataScope = data.id;
486
+ }
487
+ });
488
+ });
489
+ },
490
+ openDept(arr) {
491
+ this.deptOnly = true;
492
+ this.$refs.organize.open();
493
+ this.$refs.organize.init(this.deptData[0], arr);
494
+ },
495
+ //处理菜单选择范围方法
496
+ selectDataScope(node, click) {
497
+ node.data.dataScope = click.id;
498
+ if (click.id == "7") {
499
+ this.nodeId = node.data.id;
500
+ node.data.depts?.forEach((v) => (v.isDept = "1"));
501
+ this.selectDeptNode = node.data.depts;
502
+ this.openDept(node.data.depts || []);
503
+ } else {
504
+ node.data.deptId = undefined;
505
+ }
506
+ },
507
+ //-----------插槽选择范围方法-------------
508
+ reset() {
509
+ this.renderTreeData = lodash.cloneDeep(this.treeData);
510
+ },
511
+ save() {
512
+ let res = {
513
+ menus: [],
514
+ permissions: [],
515
+ roleId: this.roleId,
516
+ effectObject: this.formInline.menuObj
517
+ ? this.formInline.menuObj
518
+ : undefined,
519
+ };
520
+ this.renderTreeData.forEach((menu) => {
521
+ if (menu.menuChecked) {
522
+ res.menus.push({
523
+ menuId: menu.id,
524
+ dataScope: this.formInline.menuObj ? menu.dataScope : undefined,
525
+ deptId: this.formInline.menuObj ? menu.deptId : undefined,
526
+ });
527
+ }
528
+ menu.permissions.forEach((permission) => {
529
+ permission.checked && res.permissions.push(permission.perm);
530
+ });
531
+ menu.subMenus.forEach((subMenu) => {
532
+ if (subMenu.menuChecked) {
533
+ res.menus.push({
534
+ menuId: subMenu.id,
535
+ dataScope: this.formInline.menuObj
536
+ ? subMenu.dataScope
537
+ : undefined,
538
+ deptId: this.formInline.menuObj ? subMenu.deptId : undefined,
539
+ });
540
+ }
541
+ subMenu.permissions.forEach((permission) => {
542
+ permission.checked && res.permissions.push(permission.perm);
543
+ });
544
+ });
545
+ });
546
+ this.$emit("savePemissions", res);
547
+ },
548
+ },
549
+ props: {
550
+ roleList: {
551
+ type: Array,
552
+ default: () => [],
553
+ },
554
+ roleMembers: {
555
+ type: Array,
556
+ default: () => [],
557
+ },
558
+ deptMembers: {
559
+ type: Array,
560
+ default: () => [],
561
+ },
562
+ treeData: {
563
+ type: Array,
564
+ default: () => [],
565
+ },
566
+ rules: {
567
+ type: Object,
568
+ default: () => {},
569
+ },
570
+ //获取业务权限数据范围
571
+ formInlineRender: {
572
+ type: Object,
573
+ default: () => ({}),
574
+ },
575
+ deptData: {
576
+ type: Array,
577
+ default: () => [],
578
+ },
579
+ },
580
+ watch: {
581
+ treeData: {
582
+ immediate: true,
583
+ handler: function (to) {
584
+ this.renderTreeData = lodash.cloneDeep(to);
585
+ },
586
+ },
587
+ roleList: {
588
+ immediate: true,
589
+ handler: function (to) {
590
+ this.roleId = this.roleId || to[0]?.id || "";
591
+ },
592
+ },
593
+ formInlineRender: {
594
+ deep: true,
595
+ immediate: true,
596
+ handler: function (to) {
597
+ this.formInline.menuObj = to?.menuObj;
598
+ this.formInline.menuOrg = to?.menuOrg;
599
+ if (to.menuOrg == "7") {
600
+ this.selectDeptNode = to.selectNode;
601
+ }
602
+ },
603
+ },
604
+ },
605
+ };
606
+ </script>
@@ -0,0 +1,3 @@
1
+ export default {
2
+ HBFulltable: {}
3
+ }
@@ -0,0 +1,5 @@
1
+ import HbCustomQuery from "./src/main.vue";
2
+ HbCustomQuery.install = function (Vue) {
3
+ Vue.component(HbCustomQuery.name, HbCustomQuery);
4
+ };
5
+ export default HbCustomQuery;
@@ -0,0 +1,80 @@
1
+ <template>
2
+ <hb-dialog
3
+ title="新建筛选"
4
+ width="60%"
5
+ ref="customQuery"
6
+ class="hb-customquery"
7
+ @submit="sumbit"
8
+ >
9
+ <el-form
10
+ ref="queryForm"
11
+ :model="qryFormData"
12
+ size="small"
13
+ label-position="top"
14
+ slot="normal"
15
+ >
16
+ <el-row :gutter="40">
17
+ <el-col v-for="(i, index) in qryFormProps" :span="12" :key="index">
18
+ <el-form-item :label="i.label" :prop="i.prop ? i.prop : ''">
19
+ <hb-query-form
20
+ :formProp="i"
21
+ :qryFormData="qryFormData"
22
+ ></hb-query-form>
23
+ </el-form-item>
24
+ </el-col>
25
+
26
+ <p class="hb-customquery-text">谁可以查看此列表视图?</p>
27
+
28
+ <el-col :span="12">
29
+ <el-radio v-model="radio" label="1"
30
+ >只有我可以查看此列表视图</el-radio
31
+ >
32
+ </el-col>
33
+ <el-col :span="12">
34
+ <el-radio v-model="radio" label="2"
35
+ >所有用户均可以查看此列表视图</el-radio
36
+ >
37
+ </el-col>
38
+ </el-row>
39
+ </el-form>
40
+ <!-- <span slot="footer" class="dialog-footer">
41
+ <el-button @click="dialogVisible = false" size="small">取消</el-button>
42
+ <el-button type="primary" @click="sumbit" size="small">保存</el-button>
43
+ </span> -->
44
+ </hb-dialog>
45
+ </template>
46
+ <script>
47
+ export default {
48
+ name: "HbCustomQuery",
49
+ componentName: "HbCustomQuery",
50
+ props: {
51
+ qryFormProps: {
52
+ type: Array,
53
+ default: () => [],
54
+ },
55
+ qryFormData: {
56
+ type: Object,
57
+ default: () => {},
58
+ },
59
+ },
60
+ data() {
61
+ return {
62
+ radio: "1",
63
+ type: "",
64
+ };
65
+ },
66
+ methods: {
67
+ open(type, data) {
68
+ this.type = type;
69
+ if (type == "edit") {
70
+ Object.assign(this.qryFormData, data);
71
+ }
72
+ this.$refs.customQuery.open();
73
+ },
74
+ sumbit() {
75
+ this.$emit("customQuerySave", this.type, this.qryFormData);
76
+ this.$refs.customQuery.close();
77
+ },
78
+ },
79
+ };
80
+ </script>
@@ -0,0 +1,7 @@
1
+ import HbDialog from "./src/main.vue";
2
+
3
+ HbDialog.install = function (Vue) {
4
+ Vue.component(HbDialog.name, HbDialog);
5
+ };
6
+
7
+ export default HbDialog;