user.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345
  1. import permision from "@/js_sdk/wa-permission/permission.js";
  2. import {
  3. getMacAddress
  4. } from "../../utils/util";
  5. import {
  6. systemList
  7. } from "@/utils/commonDicts.js";
  8. export default {
  9. namespaced: true,
  10. state: {
  11. userInfo: {},
  12. token: "",
  13. belongSystem: null, // 子系统实体类
  14. isDS: false, // 是否处于脱敏状态
  15. path: "", // 请求的前缀
  16. system: {}, // 当前选择的系统
  17. abcModel: false,
  18. spdbModel: false,
  19. ccbModel: false,
  20. dfklModel: false,
  21. publicModel: false,
  22. cibModel: false,
  23. icbcHModel: false,
  24. tjxtModel: false,
  25. homeOff: false, // 居家
  26. isOut: false, // 外访
  27. uuid: null, // 设备id
  28. permissions: [], // 权限列表
  29. netConfig: {
  30. // http://59.42.9.166:9520/proxy
  31. // http://10.0.7.100:9500
  32. // ip: "https://crm.nanjingshiyu.com/prod-api", // ip
  33. ip: "https://crmtest.nanjingshiyu.com/prod-api", // 测试环境ip
  34. // ip : "/api", // 测试环境ip
  35. // ip : "http://47.113.184.101", // 测试环境ip
  36. // ip: "http://172.16.7.200", // ip
  37. // port: "9500", // 端口
  38. isCallOff: "2", // 开关
  39. folder: "", // 文件夹
  40. webRtcIp: "", // 呼叫中心的ip
  41. webRtcPort: "", // 呼叫中心的端口s
  42. },
  43. systemList: [],
  44. redirectUrl: null,
  45. availableRoles: [], // 可用的角色列表
  46. currentRoleIndex: 0, // 当前选中的角色索引
  47. showRoleSwitch: false, // 是否显示切换权限按钮
  48. },
  49. mutations: {
  50. SET_REDIRECTURL(state, data) {
  51. state.redirectUrl = data;
  52. },
  53. SET_USER_ONLINE_STATUS: (state, data) => {
  54. state.userInfo.onlineStatus = data;
  55. },
  56. SET_USERINFO: (state, data) => {
  57. state.userInfo = data;
  58. const roles = data.roles || [];
  59. const validRoles = [];
  60. const hasAdminRole = roles.some(role => role.roleKey === 'admin');
  61. const hasCrmRole = roles.some(role => role.roleKey && role.roleKey.includes('CRM'));
  62. const hasWarehouser = roles.some(role => role.roleKey === 'WAREHOUSER');
  63. const hasSalesman = roles.some(role => role.roleKey === 'SALESMAN');
  64. if (hasAdminRole) {//管理员
  65. if (hasCrmRole) validRoles.push('CRM');
  66. if (hasWarehouser) validRoles.push('WAREHOUSER');
  67. if (hasSalesman) validRoles.push('SALESMAN');
  68. validRoles.push('admin');
  69. state.showRoleSwitch = true;
  70. } else if(hasWarehouser && hasSalesman && hasCrmRole) {//仓库和销售和crm
  71. validRoles.push('CRM');
  72. validRoles.push('WAREHOUSER');
  73. validRoles.push('SALESMAN');
  74. state.showRoleSwitch = true;
  75. } else if (hasCrmRole && hasWarehouser) {//crm和仓库
  76. validRoles.push('CRM');
  77. validRoles.push('WAREHOUSER');
  78. state.showRoleSwitch = true;
  79. } else if ((hasCrmRole && hasSalesman)) {//crm和销售
  80. validRoles.push('CRM');
  81. validRoles.push('WAREHOUSER');
  82. validRoles.push('SALESMAN');
  83. state.showRoleSwitch = true;
  84. }else if(hasWarehouser && hasSalesman) {//只有仓库和销售
  85. validRoles.push('WAREHOUSER');
  86. validRoles.push('SALESMAN');
  87. state.showRoleSwitch = true;
  88. }
  89. else if (hasCrmRole) {//只有crm
  90. validRoles.push('CRM');
  91. state.showRoleSwitch = false;
  92. } else if(hasWarehouser){//只有仓库
  93. validRoles.push('WAREHOUSER');
  94. state.showRoleSwitch = false;
  95. }else if (hasSalesman) {//只有销售
  96. if (hasWarehouser) validRoles.push('WAREHOUSER');
  97. if (hasSalesman) validRoles.push('SALESMAN');
  98. state.showRoleSwitch = true;
  99. }
  100. state.availableRoles = validRoles;
  101. state.currentRoleIndex = 0;
  102. setTimeout(() => {
  103. const allIndices = [0, 1, 2, 3, 4, 5, 6];
  104. allIndices.forEach(index => {
  105. uni.setTabBarItem({ index, visible: false });
  106. });
  107. const currentRole = validRoles[0] || '';
  108. switch (currentRole) {
  109. case 'SALESMAN':
  110. // 展示核价中心、询价中心、我的
  111. uni.setTabBarItem({ index: 3, visible: true }); // 询价中心
  112. uni.setTabBarItem({ index: 4, visible: true }); // 核价中心
  113. break;
  114. case 'WAREHOUSER':
  115. // 展示仓库中心、我的
  116. uni.setTabBarItem({ index: 2, visible: true }); // 仓库
  117. break;
  118. case 'CRM':
  119. // 展示首页、线索公海、销售线索、接单中心、我的
  120. uni.setTabBarItem({ index: 0, visible: true }); // 首页
  121. uni.setTabBarItem({ index: 1, visible: true }); // 线索公海
  122. uni.setTabBarItem({ index: 5, visible: true }); // 销售线索
  123. uni.setTabBarItem({ index: 6, visible: true }); // 接单中心
  124. break;
  125. }
  126. uni.setTabBarItem({ index: 7, visible: true }); // 我的
  127. }, 100);
  128. },
  129. SET_TOKEN: (state, data) => {
  130. state.token = data;
  131. },
  132. SET_NETCONFIG: (state, data) => {
  133. state.netConfig = data;
  134. },
  135. SET_BELONGSYSTEM: (state, data) => {
  136. const system = state.userInfo.subsystemList.find(item => (item.systemCode == data.code));
  137. if (system) {
  138. state.belongSystem = system;
  139. data.callback && data.callback(true);
  140. } else {
  141. data.callback && data.callback(false);
  142. }
  143. },
  144. SET_ISDS: (state, value) => {
  145. state.isDS = value
  146. },
  147. SET_HOMEOFF: (state, value) => {
  148. state.homeOff = value
  149. },
  150. SET_ISOUT: (state, value) => {
  151. state.isOut = value
  152. },
  153. SET_SYSTEM(state, data) {
  154. state.path = data.path;
  155. state.system = data;
  156. state.abcModel = data.text == "农行催收";
  157. state.spdbModel = data.text == "浦发催收";
  158. state.ccbModel = data.text == "建行催收";
  159. state.publicModel = data.text == "专业催收";
  160. state.dfklModel = data.text == "商账催收";
  161. state.cibModel = data.text == "兴业催收";
  162. state.icbcHModel = data.text == "工行催收";
  163. state.tjxtModel = data.text == "调催系统";
  164. },
  165. SET_UUID(state, data) {
  166. state.uuid = data;
  167. },
  168. SET_SYSTEM_LIST(state, data) {
  169. state.systemList = data;
  170. },
  171. // 权限相关mutations
  172. SET_AVAILABLE_ROLES(state, roles) {
  173. state.availableRoles = roles;
  174. },
  175. SET_CURRENT_ROLE_INDEX(state, index) {
  176. state.currentRoleIndex = index;
  177. },
  178. SET_SHOW_ROLE_SWITCH(state, show) {
  179. state.showRoleSwitch = show;
  180. },
  181. SET_PERMISSIONS: (state, permissions) => {
  182. state.permissions = permissions || [];
  183. },
  184. SWITCH_ROLE({}, role) {
  185. setTimeout(() => {
  186. const allIndices = [0, 1, 2, 3, 4, 5, 6];
  187. allIndices.forEach(index => {
  188. uni.setTabBarItem({ index, visible: false });
  189. });
  190. switch (role.value) {
  191. case 'SALESMAN':
  192. // 展示核价中心、询价中心、我的
  193. uni.setTabBarItem({ index: 3, visible: true }); // 询价中心
  194. uni.setTabBarItem({ index: 4, visible: true }); // 核价中心
  195. break;
  196. case 'WAREHOUSER':
  197. // 展示仓库中心、我的
  198. uni.setTabBarItem({ index: 2, visible: true }); // 仓库
  199. break;
  200. case 'CRM':
  201. // 展示首页、线索公海、销售线索、接单中心、我的
  202. uni.setTabBarItem({ index: 0, visible: true }); // 首页
  203. uni.setTabBarItem({ index: 1, visible: true }); // 线索公海
  204. uni.setTabBarItem({ index: 5, visible: true }); // 销售线索
  205. uni.setTabBarItem({ index: 6, visible: true }); // 接单中心
  206. break;
  207. }
  208. uni.setTabBarItem({ index: 7, visible: true }); // 我的
  209. }, 100);
  210. }
  211. },
  212. actions: {
  213. setSystemlist({
  214. commit,
  215. state
  216. }, systemCodeList) {
  217. state.systemList = systemList.filter(v => systemCodeList.includes(v.value));
  218. },
  219. getUserInfo(store) {
  220. const {
  221. commit,
  222. state,
  223. dispatch
  224. } = store;
  225. return new Promise((resolve, reject) => {
  226. uni.$u.api.getInfo().then(res => {
  227. commit("SET_USERINFO", res.user);
  228. // 保存权限列表
  229. if (res.permissions && res.permissions.length > 0) {
  230. commit("SET_PERMISSIONS", res.permissions);
  231. } else {
  232. commit("SET_PERMISSIONS", []);
  233. }
  234. commit("SET_BELONGSYSTEM", {
  235. code: state.system.value,
  236. callback: (flag) => {
  237. resolve(res.user);
  238. }
  239. });
  240. });
  241. })
  242. },
  243. login({
  244. commit,
  245. dispatch,
  246. state
  247. }, form) {
  248. return new Promise((resolve, reject) => {
  249. uni.$u.api.login(form).then((loginRes) => {
  250. const token = loginRes.data.access_token;
  251. commit("SET_TOKEN", token);
  252. dispatch("getUserInfo").then((userInfo) => {
  253. const { userId } = userInfo;
  254. resolve(userId);
  255. }).catch(() => {
  256. commit("SET_TOKEN", "");
  257. commit("SET_USERINFO", {});
  258. reject();
  259. })
  260. })
  261. })
  262. },
  263. logout({
  264. commit,
  265. dispatch
  266. }) {
  267. return uni.$u.api.logout().then(() => {
  268. // 停止电话监听
  269. dispatch("call/stopPhoneListener", null, { root: true }).catch(error => {
  270. console.error('退出登录时停止电话监听失败:', error);
  271. });
  272. commit("SET_TOKEN", "");
  273. commit("SET_USERINFO", {});
  274. commit("SET_PERMISSIONS", []); // 清空权限列表
  275. dispatch("app/logoutCloseData", null, {
  276. root: true
  277. });
  278. Promise.resolve();
  279. }).catch(() => {
  280. Promise.reject();
  281. })
  282. },
  283. }
  284. }
  285. export function setupTabBar(userInfo, availableRoles, currentRoleIndex) {
  286. // 隐藏所有tabbar项,然后根据当前角色显示对应的项
  287. // 下标index从0开始
  288. const allIndices = [0, 1, 2, 3, 4, 5, 6];
  289. allIndices.forEach(index => {
  290. uni.setTabBarItem({ index, visible: false });
  291. });
  292. // 获取当前角色
  293. const currentRole = availableRoles[currentRoleIndex] || '';
  294. // 根据当前角色显示对应的tabbar
  295. switch (currentRole) {
  296. case 'SALESMAN':
  297. // 展示核价中心、询价中心、我的
  298. uni.setTabBarItem({ index: 3, visible: true }); // 询价中心
  299. uni.setTabBarItem({ index: 4, visible: true }); // 核价中心
  300. break;
  301. case 'WAREHOUSER':
  302. // 展示仓库中心、我的
  303. uni.setTabBarItem({ index: 2, visible: true }); // 仓库
  304. break;
  305. case 'CRM':
  306. // 展示首页、线索公海、销售线索、接单中心、我的
  307. uni.setTabBarItem({ index: 0, visible: true }); // 首页
  308. uni.setTabBarItem({ index: 1, visible: true }); // 线索公海
  309. uni.setTabBarItem({ index: 5, visible: true }); // 销售线索
  310. uni.setTabBarItem({ index: 6, visible: true }); // 接单中心
  311. break;
  312. default:
  313. // 默认情况,显示CRM相关的tabbar
  314. uni.setTabBarItem({ index: 0, visible: true }); // 首页
  315. uni.setTabBarItem({ index: 1, visible: true }); // 线索公海
  316. uni.setTabBarItem({ index: 5, visible: true }); // 销售线索
  317. uni.setTabBarItem({ index: 6, visible: true }); // 接单中心
  318. break;
  319. }
  320. // "我的"tab默认都展示(假设我的tab是index为7的位置)
  321. // 注意:这里需要根据实际的tabbar配置来调整index
  322. // 如果"我的"tab的index不是7,请修改下面的代码
  323. uni.setTabBarItem({ index: 7, visible: true }); // 我的
  324. }
  325. // 导出切换权限的action
  326. export function switchRole({ commit, state }, currentRole) {
  327. commit('SWITCH_ROLE', currentRole);
  328. }