cshenfu
2023-06-12 94135fd604db283f890e9f649882add4c76164f7
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
import pagesJson from '@/pages.json'
import config from '@/uni_modules/uni-id-pages/config.js'
 
const uniIdCo = uniCloud.importObject("uni-id-co")
const db = uniCloud.database();
const usersTable = db.collection('uni-id-users')
 
let hostUserInfo = uni.getStorageSync('uni-id-pages-userInfo')||{}
// console.log( hostUserInfo);
const data = {
    userInfo: hostUserInfo,
    hasLogin: Object.keys(hostUserInfo).length != 0
}
 
// console.log('data', data);
// 定义 mutations, 修改属性
export const mutations = {
    // data不为空,表示传递要更新的值(注意不是覆盖是合并),什么也不传时,直接查库获取更新
    async updateUserInfo(data = false) {
        console.log(20,data)
        if (data) {
            usersTable.where('_id==$env.uid').update(data).then(e => {
                // console.log(e);
                if (e.result.updated) {
                    uni.showToast({
                        title: "更新成功",
                        icon: 'none',
                        duration: 3000
                    });
                    this.setUserInfo(data)
                } else {
                    uni.showToast({
                        title: "没有改变",
                        icon: 'none',
                        duration: 3000
                    });
                }
            })
 
        } else {
            try {
                let res = await usersTable.where("'_id' == $cloudEnv_uid")
                        .field('mobile,nickname,username,email,avatar_file')
                        .get()
                // console.log('fromDbData',res.result.data);
                this.setUserInfo(res.result.data[0])
            } catch (e) {
                this.setUserInfo({},{cover:true})
                console.error(e.message, e.errCode);
            }
        }
    },
    async setUserInfo(data, {cover}={cover:false}) {
        console.log('set-userInfo', data);
        let userInfo = cover?data:Object.assign(store.userInfo,data)
        store.userInfo = Object.assign({},userInfo)
        store.hasLogin = Object.keys(store.userInfo).length != 0
        console.log('store.userInfo', store.userInfo);
        uni.setStorage({
            key: "uni-id-pages-userInfo",
            data:store.userInfo
        })
        return data
    },
    async logout() {
        // 1. 已经过期就不需要调用服务端的注销接口    2.即使调用注销接口失败,不能阻塞客户端
        if(uniCloud.getCurrentUserInfo().tokenExpired > Date.now()){
            try{
                await uniIdCo.logout()
            }catch(e){
                console.error(e);
            }
        }
        uni.removeStorageSync('uni_id_token');
        uni.setStorageSync('uni_id_token_expired', 0)
        uni.redirectTo({
            url: `/${pagesJson.uniIdRouter?.loginPage ?? 'uni_modules/uni-id-pages/pages/login/login-withoutpwd'}`,
        });
        uni.$emit('uni-id-pages-logout')
        this.setUserInfo({},{cover:true})
    },
 
    loginBack (e = {}) {
        const {uniIdRedirectUrl = ''} = e
        let delta = 0; //判断需要返回几层
        let pages = getCurrentPages();
        // console.log(pages);
        pages.forEach((page, index) => {
            if (pages[pages.length - index - 1].route.split('/')[3] == 'login') {
                delta++
            }
        })
        // console.log('判断需要返回几层:', delta);
        if (uniIdRedirectUrl) {
            return uni.reLaunch({
                url: uniIdRedirectUrl
            })
        }
        // #ifdef H5
        if (e.loginType == 'weixin') {
            // console.log('window.history', window.history);
            return window.history.go(-3)
        }
        // #endif
 
        if (delta) {
            const page = pagesJson.pages[0]
            return uni.reLaunch({
                url: `/${page.path}`
            })
        }
 
        uni.navigateBack({
            delta
        })
    },
    loginSuccess(e = {}){
        const {
            showToast = true, toastText = '登录成功', autoBack = true, uniIdRedirectUrl = '', passwordConfirmed
        } = e
        // console.log({toastText,autoBack});
        if (showToast) {
            uni.showToast({
                title: toastText,
                icon: 'none',
                duration: 3000
            });
        }
        this.updateUserInfo()
 
        uni.$emit('uni-id-pages-login-success')
 
        if (config.setPasswordAfterLogin && !passwordConfirmed) {
            return uni.redirectTo({
                url: uniIdRedirectUrl ? `/uni_modules/uni-id-pages/pages/userinfo/set-pwd/set-pwd?uniIdRedirectUrl=${uniIdRedirectUrl}&loginType=${e.loginType}`: `/uni_modules/uni-id-pages/pages/userinfo/set-pwd/set-pwd?loginType=${e.loginType}`,
                fail: (err) => {
                    console.log(err)
                }
            })
        }
 
        if (autoBack) {
            this.loginBack(uniIdRedirectUrl)
        }
    }
 
}
 
// #ifdef VUE2
import Vue from 'vue'
// 通过Vue.observable创建一个可响应的对象
export const store = Vue.observable(data)
// #endif
 
// #ifdef VUE3
import {
    reactive
} from 'vue'
// 通过Vue.observable创建一个可响应的对象
export const store = reactive(data)
// #endif