store.uts 1.9 KB
Newer Older
DCloud_JSON's avatar
init  
DCloud_JSON 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
export type State = {
	pendingAgreements : boolean,
	isLogin : boolean,
	userInfo : UTSJSONObject
}
// 实例化为state
export const state = reactive({
	pendingAgreements: false,
	userInfo: {
		"_id": null,
		"avatar_file": null,
		"nickname": null,
		"mobile": null,
	} as UTSJSONObject,
	isLogin: false
} as State)


function initState() {
	try {
		let userInfo = uni.getStorageSync('uni-id-pages-x-userInfo')
		if (userInfo instanceof UTSJSONObject) {
			state.userInfo = userInfo
			// console.log('init userInfo',userInfo);
		}
	} catch (e) {
		console.error('init userInfo error', e);
	}
	state.isLogin = uniCloud.getCurrentUserInfo().tokenExpired > Date.now()
};
initState()


type Mutations = {
	updateUserInfo(param : null | UTSJSONObject) : void
}
export const mutations = {
	updateUserInfo(param : null | UTSJSONObject) {
		// console.log('updateUserInfo', param); // param为 null 时从云端获取数据更新,为UTSJSONObject时直接根据传入的值来更新
		function afterUpdateUserInfo() {
			// console.log('afterUpdateUserInfo', state.userInfo);
			uni.setStorageSync('uni-id-pages-x-userInfo', state.userInfo)
		}
		if (param == null) {
			const db = uniCloud.databaseForJQL()
			const user_id = uniCloud.getCurrentUserInfo().uid
			// console.log('user_id', user_id);
			if (user_id != null) {
				db.collection('uni-id-users')
					.doc(user_id)
					.field('_id,username,nickname,avatar_file,mobile')
					.get()
					.then<void>(res => {
						// console.log("get cloud userinfo", res);
						state.userInfo = res.data[0]
						afterUpdateUserInfo()
					})
					.catch<void>((err : any | null) => {
						const error = err as UniCloudError
						console.error(error.errMsg, '错误')
					})
			}
		} else {
			param.toMap().forEach((value, key) => {
				// console.log("updateUserInfo.", key, value)
				state.userInfo.set(key, value)
			})
			afterUpdateUserInfo()
		}
	}
} as Mutations;