import App from '@/main.js' import cookies from 'weapp-cookie' import * as API from '@/api/login' import { CloudFindPwd } from '@/api/cloud.js' import { AdminQueryLoginUser, AdminRoleAuth, QueryMobileModuleSetting, QueryCompanyConfig } from '@/api/admin' import { GetNavConfig } from '@/api/base.js' import check_permission from '@/utils/permission.js' import { isEmpty } from '@/utils/types' import { navLibList, getNavList } from '@/utils/data.js' import { DEFAULT_NAV_CONFIG } from '@/config.js' const state = { userInfo: {}, token: null, companyList: [], loginTypes: null, authData: null, serviceNav: [], // 导航栏 navConfig: DEFAULT_NAV_CONFIG, // 导航栏配置 fileterData: {}, // 高级筛选本地缓存 expirationInfo: { companyLogo: null, companyName: null, endTime: null, endDay: null }, showExpiration: false } const getters = { userInfo: state => state.userInfo, companyList: state => state.companyList, authData: state => state.authData, serviceNav: state => state.serviceNav, navConfig: state => state.navConfig, fileterData: state => state.fileterData, expirationInfo: state => state.expirationInfo, showExpiration: state => state.showExpiration } const actions = { /** * 登录 */ login({ commit, dispatch }, data) { return new Promise((resolve, reject) => { API.login(data).then(res => { if (res) { // 记录用户名 uni.setStorageSync('username', data.username) console.log('login res: ', res) if (res.hasOwnProperty('companyList')) { // 多公司登陆 commit('SET_COMPANY_LIST', res.companyList) resolve(2) } else { // 单个公司登陆 commit('SET_TOKEN', res.adminToken || '') dispatch('setUserData').then(() => { resolve(1) }).catch(() => { reject('网络错误,请稍后重试') }) } } else { reject('账号或密码错误!') } }).catch(error => { console.log('err', error) reject('网络错误,请稍后重试') }) }) }, /** * 选择企业登录 */ chooseLogin({ commit, dispatch }, data) { return new Promise((resolve, reject) => { API.chooseLogin(data).then(res => { if (res) { console.log('login res: ', res) // 单个公司登陆 commit('SET_TOKEN', res.adminToken || '') dispatch('setUserData').then(() => { resolve(1) }).catch(() => { reject('网络错误,请稍后重试') }) } else { reject('账号或密码错误!') } }).catch(error => { console.log('err', error) reject('网络错误,请稍后重试') }) }) }, /** * 忘记密码 */ forgetPwd({ commit, dispatch }, params) { return new Promise((resolve, reject) => { CloudFindPwd(params).then(res => { console.log('find res : ', res) if (res.length > 0) { if (res.length === 1) { // 单个公司重置密码 resolve(res[0].companyId) } else { // 多公司重置密码 commit('SET_COMPANY_LIST', res) resolve(-1) } } }).catch(err => { reject(err) }) }) }, /** * 登录用户信息 */ setUserData({ dispatch, commit }) { commit('SET_NAV_FOOTER', []) commit('SET_AUTH_LIST') return new Promise((resolve, reject) => { Promise.all([ AdminQueryLoginUser(), // 获取用户信息 AdminRoleAuth(), // 获取用户权限数据 QueryCompanyConfig(), // 企业信息 GetNavConfig() // 获取导航配置信息 ]).then(res => { let userInfo = res[0] let authList = res[1] let companyConfig = res[2] let navConfig = isEmpty(res[3]) ? {} : res[3][0] commit('SET_USER_INFO', userInfo) // 用户信息 commit('SET_AUTH_LIST', authList) // 权限信息 commit('SAVE_FILTER_DATA', uni.getStorageSync('filterData')) commit('SET_NAV_FOOTER', { ...DEFAULT_NAV_CONFIG, ...navConfig }) dispatch('base/startHeartbeat', null, { root: true }) commit('SET_EXPIRATION_INFO', companyConfig) if (companyConfig.endDay) { setTimeout(() => { commit('SET_EXPIRATION', true) }, 2000) } resolve() }).catch(() => { reject() }) }) } } const mutations = { SET_COMPANY_LIST(state, data) { state.companyList = data }, SET_AUTH_LIST(state, data) { if (data) { state.authData = data uni.setStorageSync('auth', data) } else { state.authData = uni.getStorageSync('auth') || {} } }, /** * 保存用户信息 */ SET_USER_INFO(state, data) { if (!data) { try { state.userInfo = uni.getStorageSync('userInfo') || {} } catch (e) { state.userInfo = {} } } else { try { uni.setStorageSync('userInfo', data) } catch { console.log('set error') } state.userInfo = data || {} } if (state.userInfo.hasOwnProperty('companyId')) { uni.setStorageSync('companyId', state.userInfo.companyId) } }, /** * 保存登录信息 */ SET_TOKEN(state, data) { if (!data) { state.token = uni.getStorageSync('token') || null } else { uni.setStorageSync('token', data) state.token = data } }, SET_NAV_FOOTER(state, data) { if (isEmpty(data)) { data = DEFAULT_NAV_CONFIG } const nav = data.nav || DEFAULT_NAV_CONFIG.nav if (!nav.includes(12)) { nav.push(12) } if (nav.length > 5) { nav.splice(4, nav.length - 5) } state.serviceNav = getNavList(nav) state.navConfig = data uni.setStorageSync('navConfig', data) }, SAVE_FILTER_DATA(state, data) { state.fileterData = { ...state.fileterData, ...data } // console.log('SAVE_FILTER_DATA', state.fileterData) uni.setStorageSync('filterData', state.fileterData) }, SET_EXPIRATION_INFO(state, data = false) { state.expirationInfo = data }, /** * 更新到期提醒状态 */ SET_EXPIRATION(state, data = false) { state.showExpiration = data }, CLEAR_DATA(state) { state.userInfo = {} state.token = null state.companyList = [] state.loginTypes = null state.authData = null state.serviceNav = DEFAULT_NAV_CONFIG state.fileterData = {} cookies.clearCookies() App.$clearStorage() } } export default { namespaced: true, state, getters, actions, mutations }