mooho-base-admin-plus 2.3.1 → 2.3.3

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.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "mooho-base-admin-plus",
3
3
  "description": "MOOHO basic framework for admin by Vue3",
4
- "version": "2.3.1",
4
+ "version": "2.3.3",
5
5
  "author": "jinyifan <jinyifan@mooho.com.cn>",
6
6
  "license": "MIT",
7
7
  "private": false,
package/public/setting.js CHANGED
@@ -47,6 +47,8 @@ window.setting = {
47
47
  menuSiderReload: false,
48
48
  // 再次点击当前顶部菜单时,是否重载当前页面
49
49
  menuHeaderReload: false,
50
+ // 菜单筛选
51
+ menuFilter: true,
50
52
  // 侧边菜单折起时,是否在子菜单前显示父级菜单名称
51
53
  showCollapseMenuTitle: false,
52
54
  // 是否显示重载按钮
@@ -28,7 +28,6 @@
28
28
  ref="table"
29
29
  :view-code="viewCode"
30
30
  :static="this.static"
31
- :filter="tableFilter"
32
31
  :setting-enable="settingEnable"
33
32
  :auto-load="false"
34
33
  :select-enable="selectEnable"
@@ -143,8 +142,7 @@
143
142
  return {
144
143
  opened: false,
145
144
  tableView: {},
146
- param: {},
147
- tableFilter: {}
145
+ param: {}
148
146
  };
149
147
  },
150
148
  created() {},
@@ -348,7 +346,7 @@
348
346
  },
349
347
  // 筛选条件数据
350
348
  filterData() {
351
- return this.$refs.tableFilter.data;
349
+ return this.$refs.table.filterData;
352
350
  },
353
351
  // 屏幕宽度
354
352
  screenWidth() {
@@ -374,14 +372,18 @@
374
372
  * @public
375
373
  */
376
374
  open(param) {
377
- for (let key in this.param) {
378
- delete this.tableFilter[key];
375
+ if (this.param) {
376
+ for (let key in this.param) {
377
+ delete this.filterData[key];
378
+ }
379
379
  }
380
380
 
381
381
  this.param = param;
382
382
 
383
- for (let key in this.param) {
384
- this.tableFilter[key] = this.param[key];
383
+ if (this.param) {
384
+ for (let key in this.param) {
385
+ this.filterData[key] = this.param[key];
386
+ }
385
387
  }
386
388
 
387
389
  setTimeout(() => {
@@ -309,8 +309,6 @@
309
309
  } else if (item.dataType === 'Boolean' && item.defaultValue.toUpperCase == 'FALSE') {
310
310
  this.setFilterData(data, item, false);
311
311
  } else {
312
- console.log('this.setFilterData', data, item, item.defaultValue);
313
-
314
312
  this.setFilterData(data, item, item.defaultValue);
315
313
  }
316
314
  }
@@ -513,7 +511,6 @@
513
511
  // },
514
512
  // 选项变化事件
515
513
  onSelectDataChange(sender, selected) {
516
- console.log('onSelectDataChange', sender, selected);
517
514
  let code;
518
515
  if (sender.code.endsWith('ID')) {
519
516
  code = sender.code.substr(0, sender.code.length - 2);
@@ -909,7 +909,7 @@
909
909
  },
910
910
  // 筛选条件数据
911
911
  filterData() {
912
- return this.$refs.tableFilter.data;
912
+ return this.$refs.tableFilter ? this.$refs.tableFilter.data : null;
913
913
  }
914
914
  },
915
915
  watch: {
@@ -2092,11 +2092,9 @@
2092
2092
  },
2093
2093
  // 合并后最终的筛选项
2094
2094
  getAllFilter() {
2095
- console.log('getAllFilter');
2096
-
2097
2095
  let filter = {
2098
2096
  ...this.viewFilter,
2099
- ...this.filterData
2097
+ ...(this.filterData ?? {})
2100
2098
  };
2101
2099
 
2102
2100
  for (let key in filter) {
@@ -9,6 +9,7 @@
9
9
  </i-link>
10
10
  </transition>
11
11
  </div>
12
+ <div v-if="!menuCollapse && layout.menuFilter"><Input v-model="menuFilter" prefix="ios-search" placeholder="搜索菜单..." style="margin: 2%; width: 96%" /></div>
12
13
  <Menu
13
14
  ref="menu"
14
15
  class="i-layout-menu-side i-scrollbar-hide"
@@ -19,7 +20,7 @@
19
20
  :open-names="openNames"
20
21
  width="auto"
21
22
  >
22
- <template v-for="(item, index) in filterSider" :key="index">
23
+ <template v-for="(item, index) in siderMenuData" :key="index">
23
24
  <template v-if="!menuCollapse">
24
25
  <i-menu-side-item v-if="item.children == null || !item.children.length" :menu="item" :key="index" />
25
26
  <i-menu-side-submenu v-else :menu="item" />
@@ -65,18 +66,31 @@
65
66
  name: 'iMenuSide',
66
67
  mixins: [mixinPage],
67
68
  components: { iMenuSideItem, iMenuSideSubmenu, iMenuSideCollapse },
69
+ data() {
70
+ return {
71
+ menuFilter: null
72
+ };
73
+ },
68
74
  props: {
69
75
  hideLogo: {
70
76
  type: Boolean,
71
77
  default: false
72
78
  }
73
79
  },
80
+
74
81
  computed: {
75
82
  ...mapState('admin/layout', ['siderTheme', 'menuAccordion', 'menuCollapse']),
76
83
  ...mapState('admin/menu', ['activePath', 'openNames']),
77
84
  ...mapGetters('admin/menu', ['filterSider']),
78
85
  rootPath() {
79
86
  return Setting.rootPath;
87
+ },
88
+ siderMenuData() {
89
+ if (this.menuFilter) {
90
+ return this.getSiderMenuData(this.copy(this.filterSider));
91
+ } else {
92
+ return this.filterSider;
93
+ }
80
94
  }
81
95
  },
82
96
  watch: {
@@ -113,6 +127,29 @@
113
127
  });
114
128
  }
115
129
  });
130
+ },
131
+ isMatch(menu, deep) {
132
+ let name = this.layout.showI18n ? this.$t('Permission_' + menu.code) : menu.title;
133
+ if (name.indexOf(this.menuFilter) >= 0) {
134
+ return true;
135
+ } else {
136
+ if (menu.children && deep) {
137
+ return menu.children.some(item => this.isMatch(item));
138
+ } else {
139
+ return false;
140
+ }
141
+ }
142
+ },
143
+ getSiderMenuData(data) {
144
+ let result = data.filter(item => this.isMatch(item, true));
145
+
146
+ for (let menu of result) {
147
+ if (menu.children && !this.isMatch(menu, false)) {
148
+ menu.children = this.getSiderMenuData(menu.children);
149
+ }
150
+ }
151
+
152
+ return result;
116
153
  }
117
154
  }
118
155
  };
package/src/setting.js CHANGED
@@ -89,6 +89,8 @@ const Setting = {
89
89
  menuSiderReload: false,
90
90
  // 再次点击当前顶部菜单时,是否重载当前页面
91
91
  menuHeaderReload: false,
92
+ // 菜单筛选
93
+ menuFilter: true,
92
94
  // 侧边菜单折起时,是否在子菜单前显示父级菜单名称
93
95
  showCollapseMenuTitle: false,
94
96
  // 是否显示重载按钮