user.js 9.0 KB

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