auth.js 2.69 KB
import {
    mapState
} from 'vuex';

export default {
    props: {
        // 模型;auth、suggest
        model: {
            type: String,
            default: "auth"
        },
        checkProfile: {
            type: Boolean,
            default: false
        },
    },
    data() {
        return {
            key: 'value',
            showProfileInfo: false,
            showUnAuth: false,
            showSuggest: true
        }
    },
    components: {},
    computed: {
        ...mapState({
            userInfo: state => state.userInfo
        }),
        locale() {
            return this.$i18n.locale || 'tc';
        },
        i18n() {
            return this.$i18n.messages && this.$i18n.locale ? this.$i18n.messages[this.$i18n.locale] : {};
        },
        showPanel() {
            let b1 = this.model == "auth" && (this.showProfileInfo || this.showUnAuth);
            let b2 = this.model == "suggest" && this.showSuggest;
            return b1 || b2;
        }
    },
    methods: {
        initData() {
            if (this.userInfo && this.userInfo.name) {
                this.loginAction();
            } else {
                this.logoutAction();
            }
        },
        loginAction() {
            this.showUnAuth = false;
            if (this.checkProfile) {
                if (this.userInfo.hadFullInfo == 1) {
                    this.$emit("onLogin", this.userInfo);
                } else {
                    this.showProfileInfo = true;
                }
            } else {
                this.$emit("onLogin", this.userInfo);
            }
        },
        logoutAction() {
            this.showUnAuth = true;
            this.showProfileInfo = false;
            this.$emit("onLogout", {});
        },
        gotoLoginPage() {
            let callback = this.$route.path;
            let separator = "?";
            for (let key in this.$route.query) {
                callback += separator + key + "=" + this.$route.query[key];
                separator = "&";
            }
            this.$router.push({ path: "/login?callback=" + callback });
        },
        gotoRegisterPage() {
            this.$router.push({ path: "/register" });
        },
        gotoInformationPage() {
            this.$router.push({ path: "/infomation/improve" });
        },
        noAuth() {
            this.$store.commit("SET_USER_INFO", null);
            this.initData();
            this.$emit("onLogout", {});
        }
    },
    mounted() {
        this.initData();
    },
    created() { },
    watch: {
        userInfo(val) {
            if (val && val.name) {
                this.loginAction();
            } else {
                this.logoutAction();
            }
        }
    },
}