user.js 8.79 KB
import config from '@/common/config.js'
import storage from '@/utils/storage'
import constant from '@/utils/constant'
import {
	encrypt
} from '@/utils/encrypt.js'
import {
	login,
	logout,
	getUserInfo,
	register,
	codeLogin
} from '@/api/login'
import {
	getwHydzList
} from '@/api/member.js'
import {
	getToken,
	setToken,
	removeToken
} from '@/utils/auth'

const baseUrl = config.baseUrl

const user = {
	state: {
		token: getToken(),
		name: storage.get(constant.name),
		hyId: storage.get(constant.hyId),
		account: storage.get(constant.account),
		fullname: storage.get(constant.fullname),
		avatar: storage.get(constant.avatar),
		roles: storage.get(constant.roles),
		permissions: storage.get(constant.permissions),
		deptPermissions: storage.get(constant.deptPermissions),
		adsName: storage.get(constant.adsName),
		adsId: storage.get(constant.adsId),
		adsJd: storage.get(constant.adsJd),
		adsWd: storage.get(constant.adsWd),
		userInfo: null,
	},

	mutations: {
		SET_TOKEN: (state, token) => {
			state.token = token
		},
		SET_NAME: (state, name) => {
			state.name = name
			storage.set(constant.name, name)
		},
		SET_AVATAR: (state, avatar) => {
			state.avatar = avatar
			storage.set(constant.avatar, avatar)
		},
		SET_ROLES: (state, roles) => {
			state.roles = roles
			storage.set(constant.roles, roles)
		},
		SET_PERMISSIONS: (state, permissions) => {
			state.permissions = permissions
			storage.set(constant.permissions, permissions)
		},
		CLEAN_ADS: (state, ads) => {
			console.log("清除ads",ads);
			state.adsName = ads;
			state.adsId = ads;
			state.adsJd = ads;
			state.adsWd = ads;
		},
		SET_USER: (state, user) => {
			state.userInfo = user || {}
		},
		SET_ADSNAME: (state, adsName) => {
			state.adsName = adsName
			storage.set(constant.adsName, adsName)
		},
		SET_ADSID: (state, adsId) => {
			state.adsId = adsId
			storage.set(constant.adsId, adsId)
		},
		SET_ADSJD: (state, adsJd) => {
			state.adsJd = adsJd
			storage.set(constant.adsJd, adsJd)
		},
		SET_ADSWD: (state, adsWd) => {
			state.adsWd = adsWd
			storage.set(constant.adsWd, adsWd)
		},
		SET_HYID: (state, hyId) => {
			console.log('打印state', hyId);
			state.hyId = hyId
			storage.set(constant.hyId, hyId);
		},
		SET_ACCOUNT: (state, account) => {
			console.log('打印state', account);
			state.account = account
			storage.set(constant.account, account);
		},
		SET_FULLNAME: (state, fullname) => {
			console.log('打印state', fullname);
			state.fullname = fullname
			storage.set(constant.fullname, fullname);
		},
		SET_DEPT_PERMISSIONS: (state, deptPermissions) => {
			state.deptPermissions = deptPermissions || {}
			storage.set(constant.deptPermissions, deptPermissions)
		}
	},

	actions: {
		// 注册
		Register({
			commit
		}, userInfo) {
			console.log('注册信息', userInfo);
			return new Promise((resolve, reject) => {
				register(userInfo).then(res => {
					setToken(res.value.token)
					commit('SET_TOKEN', res.value.token)
					resolve()
				}).catch(error => {
					reject(error)
				})
			})
		},
		// 登录
		Login({
			commit
		}, userInfo) {
			console.log('登录信息', userInfo);
			const username = userInfo.mobile.trim()
			const password = userInfo.password
			return new Promise((resolve, reject) => {
				login(username, password).then(async res => {
					setToken(res.token)
					commit('SET_TOKEN', res.token)
					let encryptUser = await encrypt(username);
					let encryptPwd = await encrypt(password);
					let autoInformation = {
						username:encryptUser,
						password:encryptPwd
					}
					uni.setStorageSync('autoInformation',autoInformation)
					resolve()
				}).catch(error => {
					reject(error)
				})
			})
		},
		codeLogin({
			commit
		}, userInfo) {
			return new Promise((resolve, reject) => {
				codeLogin(userInfo).then(res => {
					setToken(res.token)
					commit('SET_TOKEN', res.token)
					resolve()
				}).catch(error => {
					reject(error)
				})
			})
		},
		wxAuthLogin({
			commit
		}, userInfo) {
			return new Promise((resolve, reject) => {
				console.log("微信userInfo",userInfo);
				if(userInfo.token){
					setToken(userInfo.token);
					commit('SET_TOKEN', userInfo.token)
					resolve()
				}else{
					reject('No Token')
				}
			})
		},
		SetAdsName({
			commit
		}, data) {
			commit('SET_ADSNAME', data)
		},
		GetDefaultAds({
			commit
		}, ads) {
			return new Promise(async (resolve, reject) => {
				// console.log("传递的地址", ads);
				if (ads) { //传递选择的地址
					console.log('打印ads====', ads)
					commit('SET_ADSID', ads.adsId);
					commit('SET_ADSJD', ads.adsJd);
					commit('SET_ADSWD', ads.adsWd);
					commit('SET_ADSNAME', ads.adsName);
					resolve('Default')
					return
				}
				
				// if (user.state.adsId) { //存在选择地址
				// 	resolve('Default')
				// 	return
				// }
				
				let query = {
					current: 1,
					size: 99
				}
				await getwHydzList(query).then(res => {
					console.log("地址列表查询", res);
					if (res.code === 200) {
						let total = res.value.total;
						let adsList = res.value.records;
						if (total === 0) {
							storage.clean();
							commit('SET_ADSID', '');
							commit('SET_ADSJD', '');
							commit('SET_ADSWD', '');
							commit('SET_ADSNAME', '');
							// console.log("无默认地址");
							reject('noDefault')
						} else {
							let defaultAdsFound = false;
							adsList.forEach(ads => {
								if (ads.fSfmrdz === 'y') { // 默认地址
									console.log("方式3,默认地址");
									commit('SET_ADSID', ads.id);
									commit('SET_ADSJD', ads.fJd);
									commit('SET_ADSWD', ads.fWd);
									commit('SET_ADSNAME', ads.fLxrs);
									defaultAdsFound = true;
									resolve('Default')
								}
							});
							// 如果没有默认地址则选择第一个为默认地址
							if (!defaultAdsFound) {
								console.log("方式2,选择第一个地址");
								let ads = adsList[0];
								commit('SET_ADSID', ads.id);
								commit('SET_ADSJD', ads.fJd);
								commit('SET_ADSWD', ads.fWd);
								commit('SET_ADSNAME', ads.fLxrs);
								resolve('Default')
							}
						}
					}
				});
				// 	let adsList = res.value.records;
				// 	let defaultAdsFound = false;
				// 	adsList.forEach(ads => {
				// 		if (ads.fSfmrdz === 'y') { // 默认地址
				// 			console.log("存在默认地址", ads.fSss);
				// 			commit('SET_ADSID', ads.id);
				// 			commit('SET_ADSJD', ads.fJd);
				// 			commit('SET_ADSWD', ads.fWd);
				// 			commit('SET_ADSNAME', ads.fSss);
				// 			defaultAdsFound = true;
				// 			resolve('Default')
				// 		}
				// 	});
				// 	if (!defaultAdsFound) {
				// 		// 如果没有找到默认地址,则执行以下代码
				// 		storage.clean();
				// 		commit('SET_ADSID', '');
				// 		commit('SET_ADSJD', '');
				// 		commit('SET_ADSWD', '');
				// 		commit('SET_ADSNAME', '');
				// 		// console.log("无默认地址");
				// 		resolve('noDefault')
				// 	}
				// } else {
				// 	reject('error')
				// }
			})
		},
		// 获取用户信息
		GetInfo({
			commit,
			state
		}) {
			return new Promise((resolve, reject) => {
				getUserInfo({yhlx:'hy'}).then(res => {
					console.log('打印全局变量的res====', res);
					const user = res.user
					const avatar = (user == null || user.avatar == "" || user.avatar == null) ?
						require("@/static/images/mine/avator.jpg") : baseUrl + user.avatar
					const username = (user == null || user.userName == "" || user.userName ==
						null) ? "" : user.userName
					if (res.roles && res.roles.length > 0) {
						commit('SET_ROLES', res.roles)
						commit('SET_PERMISSIONS', res.permissions)
					} else {
						commit('SET_ROLES', ['ROLE_DEFAULT'])
					}
					let deptPermissions = {}
					if (res.deptRoles) {
						res.deptRoles.forEach(item => {
							const key = item.dept.deptId
							let pers = deptPermissions[key]?.permissions || []
							let roles = deptPermissions[key]?.roles || []
							pers.push(...item.permissions)
							item.role && roles.push(item.role)
							deptPermissions[key] = {
								dept: item.dept,
								permissions: pers,
								roles: roles
							}
						})
					}
					commit('SET_DEPT_PERMISSIONS', deptPermissions)
					commit('SET_NAME', username)
					commit('SET_HYID', res.value.id);
					commit('SET_FULLNAME', res.value.fullname);
					commit('SET_ACCOUNT', res.value.account);
					commit('SET_AVATAR', avatar)
					commit('SET_USER', res.user)
					resolve(res)
				}).catch(error => {
					reject(error)
				})
			})
		},

		// 退出系统
		LogOut({
			commit,
			state
		}) {
			return new Promise((resolve, reject) => {
				logout(state.token).then(() => {
					commit('CLEAN_ADS', "")
					commit('SET_TOKEN', '')
					commit('SET_ROLES', [])
					commit('SET_PERMISSIONS', [])
					removeToken();
					uni.removeStorageSync('autoInformation');
					storage.clean()
					resolve()
				}).catch(error => {
					reject(error)
				})
			})
		}
	}
}

export default user