<template>
	<div class="menu-wrapper">
		<template v-for="item in menu">
			<el-menu-item v-if="validatenull(item[childrenKey]) && vaildRoles(item) && item.path.indexOf('opsVisualization') == -1" :index="item[pathKey]"
				@click="open(item)" :key="item[labelKey]" :class="{'is-active':vaildActive(item)}">
				<!-- <i :class="item[iconKey]"></i> -->
				<span slot="title" :alt="item[pathKey]">{{generateTitle(item)}}</span>
			</el-menu-item>
			<!-- 单独部署监控服务时注释此代码  el-menu-item -->
			<el-menu-item v-if="validatenull(item[childrenKey]) && vaildRoles(item) && item.path.indexOf('opsVisualization') != -1" :index="item[pathKey]"
				@click="open(item)" :key="item[labelKey]" >
				<!-- <i :class="item[iconKey]"></i> -->
				<span slot="title" :alt="item[pathKey]">{{generateTitle(item)}}</span>
			</el-menu-item>
			<el-submenu v-else-if="!validatenull(item[childrenKey])&&vaildRoles(item)" :index="item[pathKey]"
				:key="item[labelKey]">
				<template slot="title">
					<!-- <i :class="item[iconKey]"></i> -->
					<span slot="title" :class="{'el-menu--display':collapse && first}">{{generateTitle(item)}}</span>
				</template>
				<template v-for="(child,cindex) in item[childrenKey]">
					<el-menu-item :index="child[pathKey],cindex" @click="open(child)"
						:class="{'is-active':vaildActive(child)}" v-if="validatenull(child[childrenKey])"
						:key="child[labelKey]">
						<i :class="child[iconKey]"></i>
						<span slot="title">{{generateTitle(child)}}</span>
					</el-menu-item>
					<sidebar-item v-else :menu="[child]" :key="cindex" :props="props" :screen="screen"
						:collapse="collapse"></sidebar-item>
				</template>
			</el-submenu>
		</template>
	</div>
</template>
<script>
	import {
		mapGetters
	} from "vuex";
	import {
		isURL,
		validatenull
	} from "@/util/validate";
	import config from "./config.js";

	export default {
		name: "sidebarItem",
		data() {
			return {
				config: config
			};
		},
		props: {
			menu: {
				type: Array
			},
			screen: {
				type: Number
			},
			first: {
				type: Boolean,
				default: false
			},
			props: {
				type: Object,
				default: () => {
					return {};
				}
			},
			collapse: {
				type: Boolean
			}
		},
		created() {},
		mounted() {},
		computed: {
			...mapGetters(["roles"]),
			labelKey() {
				return this.props.label || this.config.propsDefault.label;
			},
			pathKey() {
				return this.props.path || this.config.propsDefault.path;
			},
			iconKey() {
				return this.props.icon || this.config.propsDefault.icon;
			},
			childrenKey() {
				return this.props.children || this.config.propsDefault.children;
			},
			isOpenKey() {
				return this.props.isOpen || this.config.propsDefault.isOpen;
			},
			nowTagValue() {
				return this.$router.$avueRouter.getValue(this.$route);
			}
		},
		methods: {
			generateTitle(item) {
				return this.$router.$avueRouter.generateTitle(
					item[this.labelKey],
					(item.meta || {}).i18n
				);
			},
			vaildActive(item) {
				if (this.validIsOpen(item)) {
					return false;
				}
				const groupFlag = (item["group"] || []).some(ele =>
					this.$route.path.includes(ele)
				);
				if(item.path == '/opsVisualization/index') return false  //单独部署监控服务时注释此代码
				return this.nowTagValue === item[this.pathKey] || groupFlag;
			},
			vaildRoles(item) {
				item.meta = item.meta || {};
				return item.meta.roles ? item.meta.roles.includes(this.roles) : true;
			},
			validatenull(val) {
				return validatenull(val);
			},
			validIsOpen(item) {
				if (item[this.isOpenKey] === 2 && isURL(item[this.pathKey])) {
					return true;
				}
			},
			open(item) {
				if(this.menu.length == 1 && this.menu[0].name == '监控管理') return // 单独部署监控服务时注释此代码
				if (this.screen <= 1) this.$store.commit("SET_COLLAPSE");
				if (this.validIsOpen(item)) {
					window.open(item[this.pathKey]);
				} else {
					this.$router.$avueRouter.group = item.group;
					this.$router.$avueRouter.meta = item.meta;
					this.$router.push({
						path: this.$router.$avueRouter.getPath({
							name: item[this.labelKey],
							src: item[this.pathKey]
						}, item.meta),
						query: item.query
					});
				}
			}
		}
	};
</script>
<style lang="scss" scoped>
	.menu-wrapper {
		display: flex;
	}

	.el-submenu {
		width: auto;
	}

	/deep/.el-submenu__title {
		line-height: 55px;
		font-size: 20px;
		letter-spacing: 3px;
	}

	/deep/.el-submenu__icon-arrow {
		display: none;
	}
	.avue-sidebar .el-menu-item {
		// line-height: 55px;
		font-size: 20px;
		letter-spacing: 3px;
		text-align: center;
	}

	.avue-sidebar .el-menu-item.is-active {
		background-color: #19335D;
	}

	.avue-sidebar .el-menu-item.is-active:before {
		content: '';
		left: 0;
		bottom: 0;
		top: auto;
		width: 100%;
		height: 3px;
		background: #ffffff;
		position: absolute;
	}
</style>
