m-dropdown.js 3.54 KB
import {
	mapState
} from 'vuex'

import api from '@/api/api'
import {
	httpPost
} from '@/api/fetch-api.js'

export default {
	name: "DropDownList",
	data() {
		return {
			navList: [],
			activeNames: [],
			activeName: [],
			activeIndex: -1,
			borderBoo: false
		};
	},
	props: {
		visible: {
			type: Boolean,
			default() {
				return false;
			}
		},
		type: {
			type: String,
			default() {
				return "nav";
			}
		},
		langList: {
			type: Array,
			default() {
				return [];
			}
		},
		// 显示/隐藏移动端导航
		showDropdownM: {
			type: Function,
			default: null
		},
	},
	computed: {
		...mapState({
			isSmallScreen: state => state.isSmallScreen,
			userInfo: state => state.userInfo
		}),
		locale() {
			return this.$i18n.locale || 'tc';
		},
		i18n() {
			return this.$i18n.messages && this.$i18n.locale ? this.$i18n.messages[this.$i18n.locale] : {};
		},
	},
	methods: {
		// 跳转菜单
		onClickHandler(item) {
			let path = item && item.path || "";
			this.showDropdownM('');
			if (path) {
				this.$router.push({
					path: path
				})
			} else {
				let value = item && item.value || null;
				if (value) {
					switch (value) {
						case "login":
							this.onLoginHandler();
							break;
						case "logout":
							this.logoutHandler();
							break;
						case "gotoVHIS":
							// gotoVHIS(this.$i18n.locale);
							this.$router.push({
								path: "/vhis"
							});
							break;
					}
				}
			}
		},
		onLoginHandler() {
			if (this.$route.name == "login") {
				return;
			} else if (this.$route.name == "register" || this.$route.name == "passwordFind") {
				this.$router.push({ path: "/login" });
			} else {
				let callback = this.$route.fullPath;
				this.$router.push({ path: "/login?callback=" + callback });
			}
		},
		logoutHandler() {
			console.log("logoutHandler");
			this.clearCache();
			httpPost({
				url: api.logout
			}).then(() => {
				this.$store.commit("SET_USER_INFO", null);
				this.showLogoutTip();
			});
		},
		clearCache() {
			for (let index = 0; index < sessionStorage.length; index++) {
				let key = sessionStorage.key(index);
				console.log(key);
				sessionStorage.removeItem(key);
			}
		},
		// 点击item
		onChangeHandler(evt) {
			this.activeIndex = evt;
		},
		/**
		 * 设置语言
		 */
		setLangHandler(curData) {
			this.showDropdownM('');
			// 如果是语言设置,则设置语言
			let lang = curData.value;
			this.$i18n.locale = lang;
			localStorage.setItem("lang", lang);
			this.sTitle = curData.name;
			window.location.reload();
		},
		initData() {
			let navList = [];
			if (this.type == "nav") {
				navList = this.i18n.nav.navList;
				navList.forEach(element => {
					this.activeNames.push(
						[]
					)
				});
			} else if (this.type == "login") {
				// 构建登陆页面
				let i18n = this.$i18n.messages[this.$i18n.locale] || {};
				let menuData = JSON.parse(JSON.stringify(i18n.nav.loginData));
				let list = [];
				if (this.userInfo && this.userInfo.name) {
					menuData.name = this.userInfo.name;
					menuData.list.forEach(element => {
						if (element.type == "auth") {
							list.push(element);
						}
					});
				} else {
					menuData.list.forEach(element => {
						if (element.type == "noAuth") {
							list.push(element);
						}
					});
				}
				// menuData.list = list;
				navList = list;
				// console.log("navList:", navList);
			}
			this.navList = navList;

		}
	},
	created() {
		this.initData();
	},
	watch: {
		visible(newVal, oldVal) {
			this.$nextTick(() => {
				this.$refs.panel.scrollTop = 0;
			});
		},
		userInfo(val) {
			this.initData();
		}
	},
};