user.js 11 KB

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