user.js 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. import { fastLogin, logout, login, getRoule, getCurrentUserInfo, companyInfo, isLandBased, getAccountLoginHistoryCount, updateShowInfo }
  2. from '@/model/indexRx'
  3. import { getNoviceGuideData, findVesselSysVersion, getStaffHomeShowList } from '@/model/indexRx'
  4. import { setToken, getCompanyId, clearStorage } from '../../utils/auth'
  5. import { resetRouter, asyncRoutes } from '../../router'
  6. import notification from '../../notification'
  7. import {
  8. setStore,
  9. } from '@/utils/store'
  10. import { groupBy } from 'lodash'
  11. const state = {
  12. token: '',
  13. name: '',
  14. avatar: '',
  15. companyId: getCompanyId(),
  16. introduction: '',
  17. roles: [],
  18. tabActiveName: '', // 用于存放采购管理模块的tab
  19. baseInfo: {},
  20. scheduleState: true,
  21. guideInfo: {},
  22. isTrainDialog: '',
  23. userInfo: '',
  24. userSetting: ''
  25. }
  26. const getters = {
  27. // ...
  28. getUserSetting: (state, getters) => {
  29. return getters.userSetting
  30. }
  31. }
  32. const mutations = {
  33. // 设置基础信息
  34. SET_BASE_INFO: (state, baseInfo) => {
  35. state.baseInfo = { ...baseInfo } // , fileUrl: '/pb'
  36. },
  37. // 新手指引信息
  38. SET_GUIDE_INFO: (state, guideInfo) => {
  39. state.guideInfo = { ...guideInfo }
  40. },
  41. SET_TOKEN: (state, token) => {
  42. state.token = token
  43. },
  44. SET_INTRODUCTION: (state, introduction) => {
  45. state.introduction = introduction
  46. },
  47. SET_NAME: (state, name) => {
  48. state.name = name
  49. },
  50. SET_AVATAR: (state, avatar) => {
  51. state.avatar = avatar
  52. },
  53. SET_ROLES: (state, roles) => {
  54. state.roles = roles
  55. },
  56. SET_COMPANY: (state, companyId) => {
  57. state.companyId = companyId
  58. },
  59. // SET_TRAIN: (state, isTrainDialog) => {
  60. // state.isTrainDialog = isTrainDialog
  61. // },
  62. SET_TABNAME: (state, tabActiveName) => {
  63. state.tabActiveName = tabActiveName
  64. },
  65. SET_SCHEDULE_STATE: (state, params) => {
  66. state.scheduleState = params
  67. },
  68. SET_USER_INFO: (state, params) => {
  69. state.userInfo = params
  70. },
  71. SET_USERSETTING: (state, params) => {
  72. state.userSetting = params
  73. },
  74. }
  75. const actions = {
  76. async login({ commit, dispatch }, userInfo) {
  77. const { username, password, domainName, companyName } = userInfo
  78. const data = await login({
  79. username: username.trim(),
  80. password: password,
  81. domainName: domainName,
  82. companyName: companyName
  83. }).toPromise()
  84. const { compId,
  85. tenantId,
  86. vesselId,
  87. vesselBankFlag,
  88. clientFag,
  89. userId
  90. } = data
  91. // {TYPE='' MESSAGE} [第一次,失效].indexOf(type){type,msg,到期时间}
  92. // EventBus.$emit('success', '登录成功')
  93. sessionStorage.setItem('ws-pf_compId', compId)
  94. sessionStorage.setItem('ws-pf_userId', userId)
  95. sessionStorage.setItem('ws-pf_tenantId', tenantId)
  96. sessionStorage.setItem('ws-pf_vesselId', vesselId) // 仅适用于一条船
  97. sessionStorage.setItem('ws-pf_vesselBankFlag', vesselBankFlag) // 当前登录人是船端还是岸端的人员
  98. sessionStorage.setItem('ws-pf_clientFag', clientFag)
  99. notification.setSessionId(userId) // 设置通知唯一标识
  100. notification.start() // 开始监听通知
  101. // 查询当前租户服务类型
  102. await isLandBased().toPromise().then(response => {
  103. sessionStorage.setItem('ws-pf_serviceTypeFlag', response)
  104. })
  105. const { organizationMonetaryKey,
  106. compName,
  107. compDomainName,
  108. organizationMonetaryValue
  109. } = await companyInfo({ compId: compId }).toPromise()
  110. sessionStorage.setItem('ws-pf_organMonetaryKey', organizationMonetaryKey)
  111. sessionStorage.setItem('ws-pf_compName', compName)
  112. sessionStorage.setItem('ws-pf_compDomainName', compDomainName)
  113. sessionStorage.setItem('ws-pf_organMonetaryValue', organizationMonetaryValue)
  114. dispatch('getUserInfo', { vesselBankFlag, compName })
  115. dispatch('toSetShow', userId)
  116. setToken('Admin-Token')
  117. return data
  118. },
  119. async fastLogin({ dispatch }, userInfo) {
  120. const { mobilePhone, veriCode } = userInfo
  121. const data = await fastLogin({
  122. mobilePhone: mobilePhone,
  123. veriCode: veriCode
  124. }).toPromise()
  125. const {
  126. compId,
  127. userId,
  128. tenantId,
  129. vesselId,
  130. vesselBankFlag
  131. } = data
  132. sessionStorage.setItem('ws-pf_compId', compId)
  133. sessionStorage.setItem('ws-pf_userId', userId)
  134. sessionStorage.setItem('ws-pf_tenantId', tenantId)
  135. sessionStorage.setItem('ws-pf_vesselId', vesselId) // 仅适用于一条船
  136. sessionStorage.setItem('ws-pf_vesselBankFlag', vesselBankFlag) // 当前登录人是船端还是岸端的人员
  137. notification.setSessionId(userId) // 设置通知唯一标识
  138. notification.start() // 开始监听通知
  139. // 查询当前租户服务类型
  140. isLandBased().toPromise().then(response => {
  141. sessionStorage.setItem('ws-pf_serviceTypeFlag', response)
  142. })
  143. const {
  144. organizationMonetaryKey,
  145. compName,
  146. organizationMonetaryValue
  147. } = await companyInfo({ compId: compId }).toPromise()
  148. sessionStorage.setItem('ws-pf_organMonetaryKey', organizationMonetaryKey)
  149. sessionStorage.setItem('ws-pf_compName', compName)
  150. sessionStorage.setItem(
  151. 'ws-pf_organMonetaryValue',
  152. organizationMonetaryValue
  153. )
  154. dispatch('getUserInfo', { vesselBankFlag, compName })
  155. dispatch('toSetShow', userId)
  156. setToken('Admin-Token')
  157. return data
  158. },
  159. // get user info
  160. getRoule({ commit, state }) {
  161. return new Promise(async (resolve, reject) => {
  162. try {
  163. const data = await getRoule(state.roles)
  164. data.forEach(route => { asyncRoutes.push(route) })
  165. commit('SET_ROUTES', asyncRoutes)
  166. resolve(asyncRoutes)
  167. } catch (error) {
  168. reject(error)
  169. }
  170. })
  171. },
  172. // user logout
  173. logout({ commit, state }) {
  174. return new Promise((resolve, reject) => {
  175. logout(state.token).toPromise()
  176. .then(() => {
  177. commit('SET_TOKEN', '')
  178. commit('SET_COMPANY', '')
  179. // commit('SET_TRAIN', '')
  180. commit('SET_ROLES', [])
  181. commit('SET_GUIDE_INFO', [])
  182. commit('permission/SET_ROUTES', [], { root: true }) // 清空路由,因为有权限管理
  183. clearStorage()
  184. resetRouter()
  185. notification.end() // 取消监听通知
  186. resolve()
  187. })
  188. .catch(error => {
  189. reject(error)
  190. })
  191. })
  192. },
  193. // remove token
  194. resetToken({ commit }) {
  195. return new Promise(resolve => {
  196. commit('SET_TOKEN', '')
  197. commit('SET_ROLES', [])
  198. clearStorage()
  199. resolve()
  200. })
  201. },
  202. async getBaseInfo({ commit }, params) {
  203. // debugger
  204. if (process.env.VUE_APP_PACKAGE_ENV === 'ship') {
  205. findVesselSysVersion().toPromise().then(res => {
  206. let loginAddress = 'http://' + res.localHostAddress + ':81/'
  207. commit('SET_BASE_INFO', {
  208. fileUrl: loginAddress
  209. })
  210. })
  211. } else {
  212. }
  213. },
  214. setScheduleState({ commit }, params) {
  215. commit('SET_SCHEDULE_STATE', params)
  216. },
  217. async getTrainInfo({ commit }, params) {
  218. let guideData = await getNoviceGuideData().toPromise()
  219. commit('SET_GUIDE_INFO', guideData.data)
  220. },
  221. async getNewLogin({ commit }, params) {
  222. // let res = await getAccountLoginHistoryCount().toPromise()
  223. // commit('SET_TRAIN', res * 1 <= 0 ? 'new' : 'old')
  224. },
  225. async getUserInfo({ commit, dispatch }, { vesselBankFlag = 'B', compName = '' }) {
  226. const response = await getCurrentUserInfo().toPromise()
  227. const {
  228. staffName, deptId, deptName, deptNameEn, vessels = [],
  229. majorRole: { roleName = '', roleId = '', dutyId = '' },
  230. roles
  231. } = response
  232. const content = {
  233. ...response,
  234. showRoleName: roleName || roles[0].roleName,
  235. showRoleId: roleId || roles[0].roleId,
  236. showCompName: vesselBankFlag === 'V' ? vessels[0].vesselName : compName,
  237. avatar: 'img/user.png'
  238. }
  239. setStore({
  240. name: 'userInfo', content: content, type: 'session'
  241. })
  242. dispatch('common/setLocalVessels', vessels, { root: true })
  243. commit('SET_USER_INFO', content)
  244. sessionStorage.setItem('ws-pf_dutyId', dutyId || response.roles[0].dutyId)
  245. sessionStorage.setItem('ws-pf_roleName', roleName || roles[0].roleName)
  246. sessionStorage.setItem('ws-pf_staffName', staffName)
  247. sessionStorage.setItem('ws-pf_deptId', deptId)
  248. sessionStorage.setItem('ws-pf_deptName', deptName)
  249. sessionStorage.setItem('ws-pf_deptNameEn', deptNameEn)
  250. sessionStorage.setItem('ws-pf_vessels', JSON.stringify(vessels))
  251. sessionStorage.setItem('ws-pf_roleId', roleId || roles[0].roleId)
  252. },
  253. async toSetShow({ commit, dispatch }, { userId = '' }) {
  254. const data = await getStaffHomeShowList({
  255. staffId: userId
  256. }).toPromise()
  257. const showObject = groupBy(data, 'typeId')
  258. setStore({
  259. name: 'userSetting', content: showObject, type: 'session'
  260. })
  261. commit('SET_USERSETTING', showObject)
  262. },
  263. async changeVesslBank({ commit, dispatch, state }, showVal) {
  264. await updateShowInfo(showVal).toPromise()
  265. dispatch('toSetShow', { userId: sessionStorage.getItem('ws-pf_userId') })
  266. }
  267. }
  268. export default {
  269. namespaced: true,
  270. state,
  271. mutations,
  272. actions,
  273. getters
  274. }