user.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424
  1. import {
  2. login,
  3. logout,
  4. getMessage,
  5. getContentByMsgId,
  6. hasRead,
  7. removeReaded,
  8. restoreTrash,
  9. getUnreadCount
  10. } from '@/api/system/user/login'
  11. import {setToken, getToken, setTagNavListInLocalstorage} from '@/libs/base/util'
  12. import maxLogo from '@/assets/images/dongke_logo.png'
  13. import mainService from '@/api/main'
  14. import store from '@/store'
  15. import config from '@/config'
  16. import Router from 'vue-router'
  17. import router, {resetRouter} from '@/router'
  18. import {getRouteTree2, filterAsyncRouter} from '@/libs/base/router-util'
  19. import {convertToChildrenMain, handleMenu} from '@/libs/tools/user-tools'
  20. let Base64 = require('js-base64').Base64
  21. export default {
  22. state: {
  23. imagePath: '',
  24. imagePathType: '',
  25. userName: '',
  26. id: '',
  27. avatorImgPath: '',
  28. token: getToken(),
  29. access: [],
  30. hasGetInfo: false,
  31. unreadCount: 0,
  32. messageUnreadList: [],
  33. messageReadedList: [],
  34. messageTrashList: [],
  35. messageContentStore: {},
  36. userCode: '',
  37. loginType: 1,
  38. cpId: 0,
  39. // dealerCode:'',
  40. userPwd: '',
  41. soCode: '',
  42. soId: 0,
  43. sysId: 0,
  44. // 是否是初始化密码
  45. flgInitPwd: null,
  46. // 密码过期日期
  47. pwdDate: null,
  48. //业务部门id
  49. orgId: null,
  50. //业务部门名称
  51. orgName: null,
  52. //渠道名称
  53. salesChannelName: null,
  54. //渠道Id
  55. salesChannel: null,
  56. //所在城市
  57. cityName: null,
  58. //用户表格设置
  59. userTableSetting: null,
  60. roleName: null,
  61. // 系统参数
  62. setting: {},
  63. },
  64. mutations: {
  65. setUserPwd(state, userPwd) {
  66. state.userPwd = userPwd
  67. },
  68. setSoCode(state, soCode) {
  69. state.soCode = soCode
  70. },
  71. setSoId(state, soId) {
  72. state.soId = soId
  73. },
  74. setAvator(state, avatorPath) {
  75. state.avatorImgPath = avatorPath
  76. },
  77. setId(state, id) {
  78. state.id = id
  79. },
  80. setUserName(state, name) {
  81. state.userName = name
  82. },
  83. setToken(state, token) {
  84. state.token = token
  85. setToken(token)
  86. },
  87. setMessageCount(state, count) {
  88. state.unreadCount = count
  89. },
  90. setMessageUnreadList(state, list) {
  91. state.messageUnreadList = list
  92. },
  93. setMessageReadedList(state, list) {
  94. state.messageReadedList = list
  95. },
  96. setMessageTrashList(state, list) {
  97. state.messageTrashList = list
  98. },
  99. setUserCode(state, userCode) {
  100. state.userCode = userCode
  101. },
  102. setLoginType(state, loginType) {
  103. state.loginType = loginType
  104. },
  105. setAppCode(state, appCode) {
  106. state.appCode = appCode
  107. },
  108. setFtyId(state, ftyId) {
  109. state.ftyId = ftyId
  110. },
  111. setFtyCode(state, ftyCode) {
  112. state.ftyCode = ftyCode
  113. },
  114. setFtyName(state, ftyName) {
  115. state.ftyName = ftyName
  116. },
  117. setAccess(state, access) {
  118. state.access = access || []
  119. },
  120. setRoleName(state, roleName) {
  121. state.roleName = roleName
  122. },
  123. updateMessageContentStore(state, {msg_id, content}) {
  124. state.messageContentStore[msg_id] = content
  125. },
  126. moveMsg(state, {from, to, msg_id}) {
  127. const index = state[from].findIndex(_ => _.msg_id === msg_id)
  128. const msgItem = state[from].splice(index, 1)[0]
  129. msgItem.loading = false
  130. state[to].unshift(msgItem)
  131. },
  132. setFlgInitPwd(state, flgInitPwd) {
  133. state.flgInitPwd = flgInitPwd
  134. },
  135. setOrgId(state, orgId) {
  136. state.orgId = orgId
  137. },
  138. setOrgName(state, orgName) {
  139. state.orgName = orgName
  140. },
  141. setCityName(state, cityName) {
  142. state.cityName = cityName
  143. },
  144. setStaffId(state, staffId) {
  145. state.staffId = staffId
  146. },
  147. setRoleIds(state, roleIds) {
  148. state.roleIds = roleIds
  149. },
  150. setStaffName(state, staffName) {
  151. state.staffName = staffName
  152. },
  153. setSetting(state, setting) {
  154. state.setting = setting
  155. },
  156. setUserTableSetting(state, setting) {
  157. state.userTableSetting = setting
  158. },
  159. setPwdDate(state,pwdDate){
  160. state.pwdDate = pwdDate
  161. },
  162. },
  163. getters: {
  164. messageUnreadCount: state => state.messageUnreadList.length,
  165. messageReadedCount: state => state.messageReadedList.length,
  166. messageTrashCount: state => state.messageTrashList.length
  167. },
  168. actions: {
  169. getRouters({commit}) {
  170. return new Promise((resolve, reject) => {
  171. try {
  172. getRouterReq().then(res => {
  173. let routers = backendMenusToRouters(res.data)
  174. commit('setRouters', routers)
  175. commit('setHasGetRouter', true)
  176. resolve(routers)
  177. }).catch(err => {
  178. reject(err)
  179. })
  180. } catch (error) {
  181. reject(error)
  182. }
  183. })
  184. },
  185. // 登录
  186. handleLogin({commit}, {ftyCode, userCode, userPwd, appCode}) {
  187. userCode = userCode.trim()
  188. return new Promise((resolve, reject) => {
  189. login({
  190. ftyCode,
  191. userCode,
  192. userPwd,
  193. appCode
  194. }).then(res => {
  195. const data = res.data
  196. if (data) {
  197. } else (commit('setToken', ''))
  198. resolve(res)
  199. }).catch(err => {
  200. reject(err)
  201. })
  202. })
  203. },
  204. /**
  205. * @desc : 登录后处理
  206. * @author : 洪旭东
  207. * @date : 2022-06-09 16:14
  208. */
  209. afterLogin({commit}, data) {
  210. // 保存系统参数
  211. commit('setSetting', data.setting)
  212. store.dispatch('saveSetting')
  213. sessionStorage.setItem('online', 'true')
  214. sessionStorage.setItem('login', 'login')
  215. sessionStorage.setItem('token', data.accessToken)
  216. commit('setId', data.user.userId)
  217. commit('setUserCode', data.user.userCode)
  218. commit('setUserName', data.user.userName)
  219. commit('setToken', data.accessToken)
  220. commit('setLoginType', data.user.sysId)
  221. // todo 前台保存权限
  222. // commit('setAccess', data.user.funCodeList)
  223. let menu = data.menu;
  224. menu = []
  225. let menuCopy = menu.copy();
  226. // menuCopy = menuCopy.filter(it => it.flgRight && it.objectCode !== 'home')
  227. menuCopy = menuCopy.filter(it => it.objectCode !== 'home')
  228. sessionStorage.setItem('menu', JSON.stringify(menuCopy))
  229. // 功能权限
  230. if (data.function) {
  231. sessionStorage.setItem('function', JSON.stringify(data.function))
  232. }
  233. // 处理数据
  234. menu = handleMenu(menu);
  235. let arr = convertToChildrenMain(menu,'parentId','id','objectPaths');
  236. console.log('menu', menu, arr)
  237. commit('setMenuList', arr.copy())
  238. sessionStorage.setItem('route', JSON.stringify(arr))
  239. router.addRoutes(filterAsyncRouter(arr,menu))
  240. commit('setAvator', maxLogo)
  241. commit('setFlgInitPwd', data.user.flgInitPwd)
  242. commit('setOrgId', data.user.orgId)
  243. commit('setOrgName', data.user.orgName)
  244. commit('setFtyId', data.user.ftyId)
  245. commit('setFtyCode', data.user.ftyCode)
  246. commit('setFtyName', data.user.ftyName)
  247. commit('setStaffId', data.user.staffId)
  248. commit('setStaffName', data.user.staffName)
  249. commit('setRoleIds', data.user.roleIds)
  250. commit('setUserTableSetting', data.userTableSetting)
  251. //菜单类型 默认抽屉
  252. commit('setMenuType', data.menuType || 'drawer')
  253. commit('setPwdDate', data.user.pwdDate)
  254. },
  255. /**
  256. * @desc : 给用户表格缓存赋值
  257. * @author : 周兴
  258. * @date : 2023/5/11 10:39
  259. */
  260. setUserTableSettingAfter({commit}, data) {
  261. commit('setUserTableSetting', data)
  262. },
  263. /**
  264. * @desc : 设置菜单
  265. * @author : 周兴
  266. * @date : 2023/5/11 10:48
  267. */
  268. setMenuListAfter({commit}, data){
  269. commit('setMenuList', data)
  270. },
  271. /**
  272. * @desc : 读取系统参数
  273. * @author : 洪旭东
  274. * @date : 2022-09-20 13:02
  275. */
  276. saveSetting({state}) {
  277. let data = state.setting
  278. // 保存系统参数
  279. // if (data.HGSCRM_OSS1) {
  280. // if (!data.HGSCRM_OSS1.endsWith('/')) {
  281. // data.HGSCRM_OSS1 += '/'
  282. // }
  283. // config.imgUrl = data.HGSCRM_OSS1
  284. // } else {
  285. // config.imgUrl =process.env.VUE_APP_IMG_URL
  286. // }
  287. config.imgUrl = process.env.VUE_APP_IMG_URL
  288. // if (data.HGHAP_OSS2) {
  289. // if (!data.HGHAP_OSS2.endsWith('/')) {
  290. // data.HGHAP_OSS2 += '/'
  291. // }
  292. // config.hgImgUrl = data.HGHAP_OSS2
  293. // } else {
  294. // config.hgImgUrl = process.env.VUE_APP_HG_IMG_URL
  295. // }
  296. config.hgImgUrl = process.env.VUE_APP_HG_IMG_URL
  297. },
  298. // 退出登录
  299. handleLogOut({state, commit}) {
  300. return new Promise((resolve, reject) => {
  301. logout(state.token).then(() => {
  302. commit('setToken', '')
  303. commit('setAccess', [])
  304. resolve()
  305. }).catch(err => {
  306. reject(err)
  307. })
  308. // 如果你的退出登录无需请求接口,则可以直接使用下面三行代码而无需使用logout调用接口
  309. commit('setToken', '')
  310. commit('setAccess', [])
  311. commit('setTagNavList', [])
  312. commit('setMenuList', [])
  313. // mainService.closeByHand()
  314. //退出后清空tagList
  315. setTagNavListInLocalstorage([])
  316. sessionStorage.removeItem('route')
  317. sessionStorage.removeItem('token')
  318. resetRouter()
  319. resolve()
  320. })
  321. },
  322. // 根据当前点击的消息的id获取内容
  323. getContentByMsgId({state, commit}, {msg_id}) {
  324. return new Promise((resolve, reject) => {
  325. let contentItem = state.messageContentStore[msg_id]
  326. if (contentItem) {
  327. resolve(contentItem)
  328. } else {
  329. getContentByMsgId(msg_id).then(res => {
  330. const content = res.data
  331. commit('updateMessageContentStore', {msg_id, content})
  332. resolve(content)
  333. })
  334. }
  335. })
  336. },
  337. // 把一个未读消息标记为已读
  338. hasRead({state, commit}, {msg_id}) {
  339. return new Promise((resolve, reject) => {
  340. hasRead(msg_id).then(() => {
  341. commit('moveMsg', {
  342. from: 'messageUnreadList',
  343. to: 'messageReadedList',
  344. msg_id
  345. })
  346. commit('setMessageCount', state.unreadCount - 1)
  347. resolve()
  348. }).catch(error => {
  349. reject(error)
  350. })
  351. })
  352. },
  353. // 删除一个已读消息到回收站
  354. removeReaded({commit}, {msg_id}) {
  355. return new Promise((resolve, reject) => {
  356. removeReaded(msg_id).then(() => {
  357. commit('moveMsg', {
  358. from: 'messageReadedList',
  359. to: 'messageTrashList',
  360. msg_id
  361. })
  362. resolve()
  363. }).catch(error => {
  364. reject(error)
  365. })
  366. })
  367. },
  368. // 还原一个已删除消息到已读消息
  369. restoreTrash({commit}, {msg_id}) {
  370. return new Promise((resolve, reject) => {
  371. restoreTrash(msg_id).then(() => {
  372. commit('moveMsg', {
  373. from: 'messageTrashList',
  374. to: 'messageReadedList',
  375. msg_id
  376. })
  377. resolve()
  378. }).catch(error => {
  379. reject(error)
  380. })
  381. })
  382. },
  383. pushAccess({state, commit}, access) {
  384. return new Promise((resolve, reject) => {
  385. state.access.push({code: access})
  386. commit('setAccess', state.access)
  387. resolve()
  388. })
  389. },
  390. removeAccess({state, commit}, access) {
  391. return new Promise((resolve, reject) => {
  392. state.access.filter(it => it.code !== access)
  393. commit('setAccess', state.access)
  394. resolve()
  395. })
  396. },
  397. /**
  398. * @desc : 刷新token
  399. * @author : 洪旭东
  400. * @date : 2022-05-10 14:15
  401. */
  402. refreshToken({state, commit}, token) {
  403. commit('setToken', token)
  404. },
  405. /**
  406. * @desc : 强制修改密码后 修改flgInitPwd
  407. * @author : 沈博
  408. * @date : 2022/7/5 13:01
  409. */
  410. refreshFlgInitPwd({state, commit}, flag) {
  411. commit('setFlgInitPwd', flag)
  412. },
  413. }
  414. }