user.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. import App from '@/main.js'
  2. import cookies from 'weapp-cookie'
  3. import * as API from '@/api/login'
  4. import { CloudFindPwd } from '@/api/cloud.js'
  5. import {
  6. AdminQueryLoginUser,
  7. AdminRoleAuth,
  8. QueryMobileModuleSetting,
  9. QueryCompanyConfig
  10. } from '@/api/admin'
  11. import { GetNavConfig } from '@/api/base.js'
  12. import check_permission from '@/utils/permission.js'
  13. import { isEmpty } from '@/utils/types'
  14. import { navLibList, getNavList } from '@/utils/data.js'
  15. import { DEFAULT_NAV_CONFIG } from '@/config.js'
  16. const state = {
  17. userInfo: {},
  18. token: null,
  19. companyList: [],
  20. loginTypes: null,
  21. authData: null,
  22. serviceNav: [], // 导航栏
  23. navConfig: DEFAULT_NAV_CONFIG, // 导航栏配置
  24. fileterData: {}, // 高级筛选本地缓存
  25. expirationInfo: {
  26. companyLogo: null,
  27. companyName: null,
  28. endTime: null,
  29. endDay: null
  30. },
  31. showExpiration: false
  32. }
  33. const getters = {
  34. userInfo: state => state.userInfo,
  35. companyList: state => state.companyList,
  36. authData: state => state.authData,
  37. serviceNav: state => state.serviceNav,
  38. navConfig: state => state.navConfig,
  39. fileterData: state => state.fileterData,
  40. expirationInfo: state => state.expirationInfo,
  41. showExpiration: state => state.showExpiration
  42. }
  43. const actions = {
  44. /**
  45. * 登录
  46. */
  47. login({
  48. commit,
  49. dispatch
  50. }, data) {
  51. return new Promise((resolve, reject) => {
  52. API.login(data).then(res => {
  53. if (res) {
  54. // 记录用户名
  55. uni.setStorageSync('username', data.username)
  56. console.log('login res: ', res)
  57. if (res.hasOwnProperty('companyList')) {
  58. // 多公司登陆
  59. commit('SET_COMPANY_LIST', res.companyList)
  60. resolve(2)
  61. } else {
  62. // 单个公司登陆
  63. commit('SET_TOKEN', res.adminToken || '')
  64. dispatch('setUserData').then(() => {
  65. resolve(1)
  66. }).catch(() => {
  67. reject('网络错误,请稍后重试')
  68. })
  69. }
  70. } else {
  71. reject('账号或密码错误!')
  72. }
  73. }).catch(error => {
  74. console.log('err', error)
  75. reject('网络错误,请稍后重试')
  76. })
  77. })
  78. },
  79. /**
  80. * 选择企业登录
  81. */
  82. chooseLogin({
  83. commit,
  84. dispatch
  85. }, data) {
  86. return new Promise((resolve, reject) => {
  87. API.chooseLogin(data).then(res => {
  88. if (res) {
  89. console.log('login res: ', res)
  90. // 单个公司登陆
  91. commit('SET_TOKEN', res.adminToken || '')
  92. dispatch('setUserData').then(() => {
  93. resolve(1)
  94. }).catch(() => {
  95. reject('网络错误,请稍后重试')
  96. })
  97. } else {
  98. reject('账号或密码错误!')
  99. }
  100. }).catch(error => {
  101. console.log('err', error)
  102. reject('网络错误,请稍后重试')
  103. })
  104. })
  105. },
  106. /**
  107. * 忘记密码
  108. */
  109. forgetPwd({
  110. commit,
  111. dispatch
  112. }, params) {
  113. return new Promise((resolve, reject) => {
  114. CloudFindPwd(params).then(res => {
  115. console.log('find res : ', res)
  116. if (res.length > 0) {
  117. if (res.length === 1) {
  118. // 单个公司重置密码
  119. resolve(res[0].companyId)
  120. } else {
  121. // 多公司重置密码
  122. commit('SET_COMPANY_LIST', res)
  123. resolve(-1)
  124. }
  125. }
  126. }).catch(err => {
  127. reject(err)
  128. })
  129. })
  130. },
  131. /**
  132. * 登录用户信息
  133. */
  134. setUserData({
  135. dispatch,
  136. commit
  137. }) {
  138. commit('SET_NAV_FOOTER', [])
  139. commit('SET_AUTH_LIST')
  140. return new Promise((resolve, reject) => {
  141. Promise.all([
  142. AdminQueryLoginUser(), // 获取用户信息
  143. AdminRoleAuth(), // 获取用户权限数据
  144. QueryCompanyConfig(), // 企业信息
  145. GetNavConfig() // 获取导航配置信息
  146. ]).then(res => {
  147. let userInfo = res[0]
  148. let authList = res[1]
  149. let companyConfig = res[2]
  150. let navConfig = isEmpty(res[3]) ? {} : res[3][0]
  151. commit('SET_USER_INFO', userInfo) // 用户信息
  152. commit('SET_AUTH_LIST', authList) // 权限信息
  153. commit('SAVE_FILTER_DATA', uni.getStorageSync('filterData'))
  154. commit('SET_NAV_FOOTER', {
  155. ...DEFAULT_NAV_CONFIG,
  156. ...navConfig
  157. })
  158. dispatch('base/startHeartbeat', null, { root: true })
  159. commit('SET_EXPIRATION_INFO', companyConfig)
  160. if (companyConfig.endDay) {
  161. setTimeout(() => {
  162. commit('SET_EXPIRATION', true)
  163. }, 2000)
  164. }
  165. resolve()
  166. }).catch(() => {
  167. reject()
  168. })
  169. })
  170. }
  171. }
  172. const mutations = {
  173. SET_COMPANY_LIST(state, data) {
  174. state.companyList = data
  175. },
  176. SET_AUTH_LIST(state, data) {
  177. if (data) {
  178. state.authData = data
  179. uni.setStorageSync('auth', data)
  180. } else {
  181. state.authData = uni.getStorageSync('auth') || {}
  182. }
  183. },
  184. /**
  185. * 保存用户信息
  186. */
  187. SET_USER_INFO(state, data) {
  188. if (!data) {
  189. try {
  190. state.userInfo = uni.getStorageSync('userInfo') || {}
  191. } catch (e) {
  192. state.userInfo = {}
  193. }
  194. } else {
  195. try {
  196. uni.setStorageSync('userInfo', data)
  197. } catch {
  198. console.log('set error')
  199. }
  200. state.userInfo = data || {}
  201. }
  202. if (state.userInfo.hasOwnProperty('companyId')) {
  203. uni.setStorageSync('companyId', state.userInfo.companyId)
  204. }
  205. },
  206. /**
  207. * 保存登录信息
  208. */
  209. SET_TOKEN(state, data) {
  210. if (!data) {
  211. state.token = uni.getStorageSync('token') || null
  212. } else {
  213. uni.setStorageSync('token', data)
  214. state.token = data
  215. }
  216. },
  217. SET_NAV_FOOTER(state, data) {
  218. if (isEmpty(data)) {
  219. data = DEFAULT_NAV_CONFIG
  220. }
  221. const nav = data.nav || DEFAULT_NAV_CONFIG.nav
  222. if (!nav.includes(12)) {
  223. nav.push(12)
  224. }
  225. if (nav.length > 5) {
  226. nav.splice(4, nav.length - 5)
  227. }
  228. state.serviceNav = getNavList(nav)
  229. state.navConfig = data
  230. uni.setStorageSync('navConfig', data)
  231. },
  232. SAVE_FILTER_DATA(state, data) {
  233. state.fileterData = {
  234. ...state.fileterData,
  235. ...data
  236. }
  237. // console.log('SAVE_FILTER_DATA', state.fileterData)
  238. uni.setStorageSync('filterData', state.fileterData)
  239. },
  240. SET_EXPIRATION_INFO(state, data = false) {
  241. state.expirationInfo = data
  242. },
  243. /**
  244. * 更新到期提醒状态
  245. */
  246. SET_EXPIRATION(state, data = false) {
  247. state.showExpiration = data
  248. },
  249. CLEAR_DATA(state) {
  250. state.userInfo = {}
  251. state.token = null
  252. state.companyList = []
  253. state.loginTypes = null
  254. state.authData = null
  255. state.serviceNav = DEFAULT_NAV_CONFIG
  256. state.fileterData = {}
  257. cookies.clearCookies()
  258. App.$clearStorage()
  259. }
  260. }
  261. export default {
  262. namespaced: true,
  263. state,
  264. getters,
  265. actions,
  266. mutations
  267. }