mcrm-mobile 2.0.0 → 2.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.
@@ -9,6 +9,8 @@ var _create = _interopRequireDefault(require("../utils/create"));
9
9
 
10
10
  var _mcrmJsapi = _interopRequireDefault(require("mcrm-jsapi"));
11
11
 
12
+ var _vuedraggable = _interopRequireDefault(require("vuedraggable"));
13
+
12
14
  var _session = _interopRequireDefault(require("../session"));
13
15
 
14
16
  var _menuIcon = _interopRequireDefault(require("../menu-icon"));
@@ -29,9 +31,78 @@ var _default = (0, _create.default)({
29
31
 
30
32
  return _c('div', {
31
33
  class: _vm.b()
32
- }, [_c('div', {
34
+ }, [!_vm.draggable ? _c('div', {
33
35
  class: _vm.b('multiple')
34
- }, [_vm._l(_vm.menus, function (menu) {
36
+ }, [_vm._l(_vm.sortedMenus, function (menu) {
37
+ return _c('Menu', {
38
+ key: menu[_vm.menuKey],
39
+ class: [_vm.b('multiple-cell')],
40
+ style: _vm.style,
41
+ attrs: {
42
+ "gray": _vm.gray || menu.gray,
43
+ "syb-info": _vm.sybInfo,
44
+ "menu": menu,
45
+ "disabled": _vm.disabled,
46
+ "disabled-text": _vm.disabledText,
47
+ "custom-event": _vm.isCustomEvent(menu.menuPageCode),
48
+ "is-route": _vm.routeList.includes(menu.menuPageCode),
49
+ "hide-header": _vm.hideHeaderList.includes(menu.menuPageCode)
50
+ },
51
+ on: {
52
+ "click": _vm.onClick,
53
+ "close": _vm.onClose,
54
+ "success": _vm.onSuccess,
55
+ "fail": _vm.onFail
56
+ }
57
+ }, [_vm._t("menu", function () {
58
+ return [_c('div', {
59
+ class: _vm.b('multiple-cell--div')
60
+ }, [_c('MenuIcon', {
61
+ class: _vm.b('multiple-cell-icon'),
62
+ attrs: {
63
+ "dot": menu.dot,
64
+ "badge": _vm.badgeText(_vm.showHot, menu),
65
+ "name": menu.iconUrl,
66
+ "text": menu.menuName,
67
+ "system": menu.system
68
+ }
69
+ }, [_vm._t("extra-icon", null, {
70
+ "slot": "extra-icon",
71
+ "menu": menu
72
+ })], 2), _c('span', {
73
+ class: _vm.b('multiple-cell-content')
74
+ }, [_vm._t("assist", null, {
75
+ "menu": menu
76
+ })], 2)], 1)];
77
+ }, {
78
+ "menu": menu
79
+ })], 2);
80
+ }), _vm._t("more", function () {
81
+ return [_vm.showMore ? _c('div', {
82
+ class: [_vm.b('multiple-cell'), _vm.b('multiple-cell--more')],
83
+ style: _vm.style,
84
+ on: {
85
+ "click": _vm.onMore
86
+ }
87
+ }, [_c('MenuIcon', {
88
+ class: _vm.b('multiple-cell-icon'),
89
+ attrs: {
90
+ "name": "mcrm-icon-more.svg",
91
+ "text": "更多业务"
92
+ }
93
+ })], 1) : _vm._e()];
94
+ })], 2) : _c('mm-draggable', {
95
+ class: _vm.b('multiple'),
96
+ attrs: {
97
+ "value": _vm.sortedMenus,
98
+ "tag": "div",
99
+ "animation": 150,
100
+ "move": _vm.onMove
101
+ },
102
+ on: {
103
+ "input": _vm.onSortChange
104
+ }
105
+ }, [_vm._l(_vm.sortedMenus, function (menu) {
35
106
  return _c('Menu', {
36
107
  key: menu[_vm.menuKey],
37
108
  class: [_vm.b('multiple-cell')],
@@ -77,7 +148,7 @@ var _default = (0, _create.default)({
77
148
  })], 2);
78
149
  }), _vm._t("more", function () {
79
150
  return [_vm.showMore ? _c('div', {
80
- class: _vm.b('multiple-cell'),
151
+ class: [_vm.b('multiple-cell'), _vm.b('multiple-cell--more')],
81
152
  style: _vm.style,
82
153
  on: {
83
154
  "click": _vm.onMore
@@ -89,14 +160,29 @@ var _default = (0, _create.default)({
89
160
  "text": "更多业务"
90
161
  }
91
162
  })], 1) : _vm._e()];
92
- })], 2)]);
163
+ })], 2)], 1);
93
164
  },
94
165
  components: {
95
166
  MenuIcon: _menuIcon.default,
96
- Menu: _menu.default
167
+ Menu: _menu.default,
168
+ mmDraggable: _vuedraggable.default
97
169
  },
98
170
  name: "menus",
99
171
  mixins: [_menus.default],
172
+ data: function data() {
173
+ return {
174
+ // 本地维护顺序副本,避免直接修改 props.menus
175
+ sortedMenus: Array.isArray(this.menus) ? this.menus.slice() : []
176
+ };
177
+ },
178
+ watch: {
179
+ // 外部 menus 引用变化时同步本地副本
180
+ menus: {
181
+ handler: function handler(val) {
182
+ this.sortedMenus = Array.isArray(val) ? val.slice() : [];
183
+ }
184
+ }
185
+ },
100
186
  methods: {
101
187
  isCustomEvent: function isCustomEvent(pageCode) {
102
188
  var customEvent = this.customEvent,
@@ -123,6 +209,25 @@ var _default = (0, _create.default)({
123
209
  onFail: function onFail(data) {
124
210
  this.$emit("fail", data);
125
211
  },
212
+ onSortChange: function onSortChange(newMenus) {
213
+ // 更新本地副本
214
+ this.sortedMenus = newMenus; // 拖拽完成后抛出最新顺序
215
+
216
+ this.$emit("change", newMenus);
217
+ },
218
+ // 阻止将菜单拖到「更多业务」cell 附近,保持更多业务位置固定
219
+ // 同时阻止「更多业务」被拖拽
220
+ onMove: function onMove(evt) {
221
+ var dragged = evt && evt.dragged;
222
+ var related = evt && evt.related;
223
+ var moreClass = this.b("multiple-cell--more");
224
+
225
+ if (dragged && dragged.classList && dragged.classList.contains(moreClass) || related && related.classList && related.classList.contains(moreClass)) {
226
+ return false;
227
+ }
228
+
229
+ return true;
230
+ },
126
231
  // 菜单头标处理
127
232
  badgeText: function badgeText(show, menu) {
128
233
  if (show) {
@@ -66,6 +66,11 @@ var _default2 = {
66
66
  default: function _default() {
67
67
  return [];
68
68
  }
69
+ },
70
+ // 是否启用拖拽排序
71
+ draggable: {
72
+ type: Boolean,
73
+ default: false
69
74
  }
70
75
  }
71
76
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcrm-mobile",
3
- "version": "2.0.0",
3
+ "version": "2.0.1",
4
4
  "description": "生意宝专用组件库",
5
5
  "author": "Wuner",
6
6
  "private": false,