|
|
@@ -42,6 +42,9 @@ export default {
|
|
42
|
42
|
systemList: [],
|
|
43
|
43
|
|
|
44
|
44
|
redirectUrl: null,
|
|
|
45
|
+ availableRoles: [], // 可用的角色列表
|
|
|
46
|
+ currentRoleIndex: 0, // 当前选中的角色索引
|
|
|
47
|
+ showRoleSwitch: false, // 是否显示切换权限按钮
|
|
45
|
48
|
},
|
|
46
|
49
|
mutations: {
|
|
47
|
50
|
SET_REDIRECTURL(state, data) {
|
|
|
@@ -52,11 +55,61 @@ export default {
|
|
52
|
55
|
},
|
|
53
|
56
|
SET_USERINFO: (state, data) => {
|
|
54
|
57
|
state.userInfo = data;
|
|
55
|
|
- // 动态设置 tabBar
|
|
56
|
|
- setTimeout(() => {
|
|
57
|
|
- setupTabBar(data);
|
|
58
|
|
- }, 100);
|
|
|
58
|
+ const roles = data.roles || [];
|
|
|
59
|
+
|
|
|
60
|
+ const validRoles = [];
|
|
|
61
|
+
|
|
|
62
|
+ const hasWarehouser = roles.some(role => role.roleKey === 'WAREHOUSER');
|
|
|
63
|
+ if (hasWarehouser) {
|
|
|
64
|
+ validRoles.push('WAREHOUSER');
|
|
|
65
|
+ }
|
|
|
66
|
+
|
|
|
67
|
+ const hasSalesman = roles.some(role => role.roleKey === 'SALESMAN');
|
|
|
68
|
+ if (hasSalesman) {
|
|
|
69
|
+ validRoles.push('SALESMAN');
|
|
|
70
|
+ }
|
|
|
71
|
+
|
|
|
72
|
+ const hasCrmRole = roles.some(role => role.roleKey && role.roleKey.includes('CRM'));
|
|
|
73
|
+ if (hasCrmRole) {
|
|
|
74
|
+ validRoles.push('CRM');
|
|
|
75
|
+ }
|
|
|
76
|
+
|
|
|
77
|
+ const showSwitch = validRoles.length >= 2;
|
|
|
78
|
+ state.showRoleSwitch = showSwitch;
|
|
|
79
|
+ state.availableRoles = validRoles;
|
|
|
80
|
+ state.currentRoleIndex = 0;
|
|
|
81
|
+
|
|
|
82
|
+ setTimeout(() => {
|
|
|
83
|
+ const allIndices = [0, 1, 2, 3, 4, 5, 6];
|
|
|
84
|
+ allIndices.forEach(index => {
|
|
|
85
|
+ uni.setTabBarItem({ index, visible: false });
|
|
|
86
|
+ });
|
|
|
87
|
+
|
|
|
88
|
+ const currentRole = validRoles[0] || '';
|
|
|
89
|
+
|
|
|
90
|
+ switch (currentRole) {
|
|
|
91
|
+ case 'SALESMAN':
|
|
|
92
|
+ // 展示核价中心、询价中心、我的
|
|
|
93
|
+ uni.setTabBarItem({ index: 3, visible: true }); // 询价中心
|
|
|
94
|
+ uni.setTabBarItem({ index: 4, visible: true }); // 核价中心
|
|
|
95
|
+ break;
|
|
|
96
|
+ case 'WAREHOUSER':
|
|
|
97
|
+ // 展示仓库中心、我的
|
|
|
98
|
+ uni.setTabBarItem({ index: 2, visible: true }); // 仓库
|
|
|
99
|
+ break;
|
|
|
100
|
+ case 'CRM':
|
|
|
101
|
+ // 展示首页、线索公海、销售线索、接单中心、我的
|
|
|
102
|
+ uni.setTabBarItem({ index: 0, visible: true }); // 首页
|
|
|
103
|
+ uni.setTabBarItem({ index: 1, visible: true }); // 线索公海
|
|
|
104
|
+ uni.setTabBarItem({ index: 5, visible: true }); // 销售线索
|
|
|
105
|
+ uni.setTabBarItem({ index: 6, visible: true }); // 接单中心
|
|
|
106
|
+ break;
|
|
|
107
|
+ }
|
|
|
108
|
+
|
|
|
109
|
+ uni.setTabBarItem({ index: 7, visible: true }); // 我的
|
|
|
110
|
+ }, 100);
|
|
59
|
111
|
},
|
|
|
112
|
+
|
|
60
|
113
|
SET_TOKEN: (state, data) => {
|
|
61
|
114
|
state.token = data;
|
|
62
|
115
|
},
|
|
|
@@ -98,6 +151,44 @@ export default {
|
|
98
|
151
|
},
|
|
99
|
152
|
SET_SYSTEM_LIST(state, data) {
|
|
100
|
153
|
state.systemList = data;
|
|
|
154
|
+ },
|
|
|
155
|
+ // 权限相关mutations
|
|
|
156
|
+ SET_AVAILABLE_ROLES(state, roles) {
|
|
|
157
|
+ state.availableRoles = roles;
|
|
|
158
|
+ },
|
|
|
159
|
+ SET_CURRENT_ROLE_INDEX(state, index) {
|
|
|
160
|
+ state.currentRoleIndex = index;
|
|
|
161
|
+ },
|
|
|
162
|
+ SET_SHOW_ROLE_SWITCH(state, show) {
|
|
|
163
|
+ state.showRoleSwitch = show;
|
|
|
164
|
+ },
|
|
|
165
|
+ SWITCH_ROLE({}, role) {
|
|
|
166
|
+ setTimeout(() => {
|
|
|
167
|
+ const allIndices = [0, 1, 2, 3, 4, 5, 6];
|
|
|
168
|
+ allIndices.forEach(index => {
|
|
|
169
|
+ uni.setTabBarItem({ index, visible: false });
|
|
|
170
|
+ });
|
|
|
171
|
+ switch (role.value) {
|
|
|
172
|
+ case 'SALESMAN':
|
|
|
173
|
+ // 展示核价中心、询价中心、我的
|
|
|
174
|
+ uni.setTabBarItem({ index: 3, visible: true }); // 询价中心
|
|
|
175
|
+ uni.setTabBarItem({ index: 4, visible: true }); // 核价中心
|
|
|
176
|
+ break;
|
|
|
177
|
+ case 'WAREHOUSER':
|
|
|
178
|
+ // 展示仓库中心、我的
|
|
|
179
|
+ uni.setTabBarItem({ index: 2, visible: true }); // 仓库
|
|
|
180
|
+ break;
|
|
|
181
|
+ case 'CRM':
|
|
|
182
|
+ // 展示首页、线索公海、销售线索、接单中心、我的
|
|
|
183
|
+ uni.setTabBarItem({ index: 0, visible: true }); // 首页
|
|
|
184
|
+ uni.setTabBarItem({ index: 1, visible: true }); // 线索公海
|
|
|
185
|
+ uni.setTabBarItem({ index: 5, visible: true }); // 销售线索
|
|
|
186
|
+ uni.setTabBarItem({ index: 6, visible: true }); // 接单中心
|
|
|
187
|
+ break;
|
|
|
188
|
+ }
|
|
|
189
|
+
|
|
|
190
|
+ uni.setTabBarItem({ index: 7, visible: true }); // 我的
|
|
|
191
|
+ }, 100);
|
|
101
|
192
|
}
|
|
102
|
193
|
},
|
|
103
|
194
|
actions: {
|
|
|
@@ -168,30 +259,51 @@ export default {
|
|
168
|
259
|
}
|
|
169
|
260
|
}
|
|
170
|
261
|
|
|
171
|
|
-function setupTabBar(userInfo) {
|
|
172
|
|
- const roles = userInfo.roles;
|
|
173
|
|
- // 我的 是所有用户都有的
|
|
174
|
|
- // 如果是销售经理SALESMAN,则也展示询价中心、核价中心、仓库
|
|
175
|
|
- // 如果是其他角色,则也展示首页、线索公海、销售线索、接单中心
|
|
|
262
|
+export function setupTabBar(userInfo, availableRoles, currentRoleIndex) {
|
|
|
263
|
+ // 隐藏所有tabbar项,然后根据当前角色显示对应的项
|
|
176
|
264
|
// 下标index从0开始
|
|
177
|
|
- const hasSalesmanRole = roles.some(role => role.roleKey === 'SALESMAN');
|
|
178
|
|
- if (hasSalesmanRole) {
|
|
179
|
|
- uni.setTabBarItem({ index: 2,visible: true });//仓库
|
|
180
|
|
- uni.setTabBarItem({ index: 3,visible: true });//询价中心
|
|
181
|
|
- uni.setTabBarItem({ index: 4,visible: true });//核价中心
|
|
182
|
|
-
|
|
183
|
|
- uni.setTabBarItem({ index: 0,visible: false });//首页
|
|
184
|
|
- uni.setTabBarItem({ index: 1,visible: false });//线索公海
|
|
185
|
|
- uni.setTabBarItem({ index: 5,visible: false });//销售线索
|
|
186
|
|
- uni.setTabBarItem({ index: 6,visible: false });//接单中心
|
|
187
|
|
- }else{
|
|
188
|
|
- uni.setTabBarItem({ index: 0,visible: true });//首页
|
|
189
|
|
- uni.setTabBarItem({ index: 1,visible: true });//线索公海
|
|
190
|
|
- uni.setTabBarItem({ index: 5,visible: true });//销售线索
|
|
191
|
|
- uni.setTabBarItem({ index: 6,visible: true });//接单中心
|
|
192
|
|
-
|
|
193
|
|
- uni.setTabBarItem({ index: 2,visible: false });//仓库
|
|
194
|
|
- uni.setTabBarItem({ index: 3,visible: false });//询价中心
|
|
195
|
|
- uni.setTabBarItem({ index: 4,visible: false });//核价中心
|
|
|
265
|
+ const allIndices = [0, 1, 2, 3, 4, 5, 6];
|
|
|
266
|
+ allIndices.forEach(index => {
|
|
|
267
|
+ uni.setTabBarItem({ index, visible: false });
|
|
|
268
|
+ });
|
|
|
269
|
+
|
|
|
270
|
+ // 获取当前角色
|
|
|
271
|
+ const currentRole = availableRoles[currentRoleIndex] || '';
|
|
|
272
|
+
|
|
|
273
|
+ // 根据当前角色显示对应的tabbar
|
|
|
274
|
+ switch (currentRole) {
|
|
|
275
|
+ case 'SALESMAN':
|
|
|
276
|
+ // 展示核价中心、询价中心、我的
|
|
|
277
|
+ uni.setTabBarItem({ index: 3, visible: true }); // 询价中心
|
|
|
278
|
+ uni.setTabBarItem({ index: 4, visible: true }); // 核价中心
|
|
|
279
|
+ break;
|
|
|
280
|
+ case 'WAREHOUSER':
|
|
|
281
|
+ // 展示仓库中心、我的
|
|
|
282
|
+ uni.setTabBarItem({ index: 2, visible: true }); // 仓库
|
|
|
283
|
+ break;
|
|
|
284
|
+ case 'CRM':
|
|
|
285
|
+ // 展示首页、线索公海、销售线索、接单中心、我的
|
|
|
286
|
+ uni.setTabBarItem({ index: 0, visible: true }); // 首页
|
|
|
287
|
+ uni.setTabBarItem({ index: 1, visible: true }); // 线索公海
|
|
|
288
|
+ uni.setTabBarItem({ index: 5, visible: true }); // 销售线索
|
|
|
289
|
+ uni.setTabBarItem({ index: 6, visible: true }); // 接单中心
|
|
|
290
|
+ break;
|
|
|
291
|
+ default:
|
|
|
292
|
+ // 默认情况,显示CRM相关的tabbar
|
|
|
293
|
+ uni.setTabBarItem({ index: 0, visible: true }); // 首页
|
|
|
294
|
+ uni.setTabBarItem({ index: 1, visible: true }); // 线索公海
|
|
|
295
|
+ uni.setTabBarItem({ index: 5, visible: true }); // 销售线索
|
|
|
296
|
+ uni.setTabBarItem({ index: 6, visible: true }); // 接单中心
|
|
|
297
|
+ break;
|
|
196
|
298
|
}
|
|
|
299
|
+
|
|
|
300
|
+ // "我的"tab默认都展示(假设我的tab是index为7的位置)
|
|
|
301
|
+ // 注意:这里需要根据实际的tabbar配置来调整index
|
|
|
302
|
+ // 如果"我的"tab的index不是7,请修改下面的代码
|
|
|
303
|
+ uni.setTabBarItem({ index: 7, visible: true }); // 我的
|
|
|
304
|
+}
|
|
|
305
|
+
|
|
|
306
|
+// 导出切换权限的action
|
|
|
307
|
+export function switchRole({ commit, state }, currentRole) {
|
|
|
308
|
+ commit('SWITCH_ROLE', currentRole);
|
|
197
|
309
|
}
|