dropdown.js 3.63 KB
/**
 * 组件描述:PC顶栏导航下拉菜单
 */
import api from '@/api/api'
import {
	httpPost
} from '@/api/fetch-api.js'

export default {
	name: "DropDownList",
	data() {
		return {
			activeIndex: 0,
			sTitle: this.dataObj && this.dataObj.name || '',
			reloadBlackList: []
		};
	},
	props: {
		/**
		 * 导航类型
		 * nav:普通菜单导航
		 * login:登陆菜单
		 * lang:三语切换菜单
		 */
		type: {
			type: String,
			default () {
				return "nav";
			}
		},
		/**
		 * 传入菜单完整数据
		 */
		dataObj: {
			type: Object,
			default () {
				return {};
			}
		},
		/**
		 * 传入菜单列表
		 */
		dataList: {
			type: Array,
			default () {
				return [];
			}
		},
		labelProperty: {
			type: String,
			default () {
				return "name";
			}
		}
	},
	directives: {
		dpl: {
			bind(el) {
				el.style.display = "none";
			}
		}
	},
	methods: {
		onNavHandler() {
			console.log("this.dataObj:", this.dataObj);
			let path = this.dataObj && this.dataObj.path || "";
			if (path) {
				this.$router.push({
					path: path
				})
			}
		},
		onOverHandler(event) {
			let ul = event.currentTarget.childNodes[1].childNodes[1];
			ul.style.display = "block";
		},
		onOutHandler(event) {
			// console.log(event);
			let ul = event.currentTarget.childNodes[1].childNodes[1];
			ul.style.display = "none";
		},
		onClickHandler(event, index) {
			// 隐藏其他
			if (this.$refs.ul) {
				this.$refs.ul.style.display = "none";
			}

			// 选择item
			this.activeIndex = index;
			let curData = this.dataList[index];
			if (this.type == "lang") {
				// 如果是语言设置,则设置语言
				let lang = curData.value;
				if (lang != localStorage.getItem('lang')) {
					localStorage.setItem("lang", lang);
					if (this.reloadBlackList.indexOf(this.$route.path) >= 0) {
						window.location.reload();
					} else {
						this.$i18n.locale = lang;
						this.sTitle = curData.name;
						this.$root.eventBus.$emit("langChange");
					}
				}
			} else {
				let item = curData;
				let path = item && item.path || "";
				this.$root.eventBus.$emit(item.path);
				if (path) {
					// console.log("path:", path);
					// modify
					if (path == "/custom/service?q=m5") {
						path = "/clarms"
					}
					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() {
			this.$root.eventBus.$emit("login");
			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() {
			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);
			}
		},
		showLogoutTip() {
			// 登出后的提示
			// alert("登出成功");
		},
		updateTitle(name) {
			this.sTitle = name || this.sTitle;
		}
	},
	computed: {
		dplLable() {
			return this.dataList[this.activeIndex][this.labelProperty];
		}
	},
	created() {},
};