<template>
	<!-- 
		* title：layout 侧边栏
  -->
	<div class="p-layout-aside g_flex_column_between" :class="state.collapsed ? 'g_w_80' : 'g_w_199'">
		<!-- 顶部logo -->
		<div class="m-logo g_flex_c g_cursor_point g_flex_none" @click="goHome">
			<div class="logo-box g_mr_2">
				<img src="../assets/image/logo.svg" alt class="img" />
			</div>
			<div class="g_flex_column_center g_fs_16 g_fw_600" v-if="!state.collapsed">投资数据系统</div>
		</div>
		<!-- 中间菜单 -->
		<div class="m-menu g_clear_scroll g_flex_1">
			<a-menu v-model:selectedKeys="state.selectedKeys" v-model:open-keys="state.openKeys" mode="inline" :items="items" @click="onOpenClick" :inline-collapsed="state.collapsed"></a-menu>
		</div>
		<!-- 底部折叠按钮 -->
		<div class="m-toggle g_flex_none g_border_top_e g_flex_column_center g_h_48" :class="!state.collapsed ? 'g_flex_row_start g_ml_0' : 'g_flex_row_center'" v-show="items.length > 0">
			<div class="btn g_cursor_point g_flex_c" @click="toggleCollapsed">
				<MenuUnfoldOutlined v-if="state.collapsed" />
				<MenuFoldOutlined v-else />
			</div>
		</div>
	</div>
</template>

<script setup>
import { createFromIconfontCN } from "@ant-design/icons-vue";
// import { menuApi } from "../api/menu";
import { h, reactive, onMounted, ref, watch } from "vue";
import { TagsOutlined, HomeOutlined, ShoppingOutlined, UserOutlined, ApartmentOutlined, TeamOutlined, ContainerOutlined, AccountBookOutlined, BarChartOutlined, MailOutlined, SettingOutlined, AuditOutlined, SketchOutlined, MenuUnfoldOutlined, MenuFoldOutlined, SolutionOutlined } from "@ant-design/icons-vue";
import { useStore } from "../stores/counter.ts";
import { useRouter, useRoute } from "vue-router";
import { mockMenuList } from "../utils/mock.js";

const storeJS = useStore();
const router = useRouter();
const route = useRoute();

function getItem(label, url, key, icon, children, type) {
	return {
		key,
		url,
		icon,
		children,
		label,
		type,
	};
}
const menuList = ref([]);
const items = reactive([]);
onMounted(() => {
	state.rootSubmenuKeys = [];
	// menuApi().then((data) => {})
	// console.log('原始数据：',data.data.menus);
	console.log("菜单mock：", mockMenuList.menus);
	menuList.value = mockMenuList.menus;
	menuList.value.forEach((item, index) => {
		state.rootSubmenuKeys.push("sub_menu_" + item.id + "_$$_not_set_key");
		if (item.childrenList.length > 0) {
			let childrens = reactive([]);
			for (var i = 0; i != item.childrenList.length; ++i) {
				childrens.push(getItem(item.childrenList[i].title, item.id, item.childrenList[i].component));
			}
			switch (item.menuName) {
				case "JobManagement":
					items.push(getItem(item.title, item.id, item.component, () => h(ShoppingOutlined), childrens));
					break;
				case "NotesManagement":
					items.push(getItem(item.title, item.id, item.component, () => h(SolutionOutlined), childrens));
					break;
				case "upstreamAnddownstream":
					items.push(getItem(item.title, item.id, item.component, () => h(ApartmentOutlined), childrens));
					break;
				case "TownsmanManagement":
					items.push(getItem(item.title, item.id, item.component, () => h(UserOutlined), childrens));
					break;
				case "AgencyManagement":
					items.push(getItem(item.title, item.id, item.component, () => h(ApartmentOutlined), childrens));
					break;
				case "teammanagement":
					items.push(getItem(item.title, item.id, item.component, () => h(TeamOutlined), childrens));
					break;
				case "OrderManagement":
					items.push(getItem(item.title, item.id, item.component, () => h(ContainerOutlined), childrens));
					break;
				case "BillCenter":
					items.push(getItem(item.title, item.id, item.component, () => h(AccountBookOutlined), childrens));
					break;
				case "group":
					items.push(getItem(item.title, item.id, item.component, () => h(BarChartOutlined), childrens));
					break;
				case "container":
					items.push(getItem(item.title, item.id, item.component, () => h(MailOutlined), childrens));
					break;
				case "GlobalConfig":
					items.push(getItem(item.title, item.id, item.component, () => h(SettingOutlined), childrens));
					break;
				case "FirmConfig":
					items.push(getItem(item.title, item.id, item.component, () => h(AuditOutlined), childrens));
					break;
				// case 'TagManagement':
				//   items.push(getItem(item.title, item.id, item.component, () => h(TagsOutlined), childrens))
				//   break
				// case "ServiceMarket":
				// 	items.push(getItem(item.title,item.id, item.component, () => h(AuditOutlined), childrens));
				// 	break;
				default:
					break;
			}
		} else {
			switch (item.menuName) {
				case "HomePage":
					items.push(getItem(item.title, item.id, item.component, () => h(HomeOutlined)));
					break;
				case "ServiceMarket":
					items.push(getItem(item.title, item.id, item.component, () => h(SketchOutlined)));
					break;
				default:
					break;
			}
		}
	});
	getInit(route);
});
watch(route, (val) => {
	getInit(val);
});
const getInit = ($data) => {
	let _index = -1,
		_path = $data.path;
	/* 特殊处理：二级页面。
	 * 二级页面来源：view/components/breadcrumb.vue
	 */
	console.log("侧边栏：", $data);
	switch (_path) {
		case "/merchantManagement/roleManagementDetail":
			_path = "/merchantManagement/roleManagement";
			break;
		case "/merchantManagement/billDetail":
			_path = "/merchantManagement/mineBill";
			break;
		case "/merchantManagement/shareJobDetail":
			if ($data.query.form == "joblist") {
				_path = "/merchantManagement/jobList";
			} else {
				_path = "/merchantManagement/shareJob";
			}
			break;
		case "/merchantManagement/jobDetail":
			_path = "/merchantManagement/jobList";
			break;
		case "/merchantManagement/recordJob":
			_path = "/merchantManagement/jobList";
			break;
		case "/merchantManagement/jobForm":
			_path = "/merchantManagement/jobList";
			break;
		case "/merchantManagement/upstreamDetail":
			_path = "/merchantManagement/upstream";
			break;
		case "/merchantManagement/downstreamDetail":
			_path = "/merchantManagement/downstream";
			break;
		case "/merchantManagement/recruit":
			_path = "/merchantManagement/miniProgramList";
			break;
		default:
			break;
	}
	/* 侧边栏存在页面处理 */
	items.forEach((item, index) => {
		if (item.children) {
			// 多级
			item.children.forEach((itm, inx) => {
				if (itm.key == _path + ".vue") {
					_index = index + "-" + inx;
				}
			});
		} else {
			// 一级
			if (item.key == _path + ".vue") {
				_index = index;
			}
		}
	});
	// 匹配
	if (_index > -1 || _index) {
		if (typeof _index == "number") {
			// 一级
			state.selectedKeys = [_path + ".vue"];
			state.openKeys = [_path + ".vue"];
		}
		if (typeof _index == "string") {
			// 多级
			let _father = 0,
				_son = 0;
			_father = Number(_index.split("-")[0]);
			_son = Number(_index.split("-")[1]);
			if (items[_father].children) {
				state.selectedKeys = [items[_father].children[_son].key];
				state.openKeys = ["sub_menu_" + _father + "_$$_not_set_key"];
			}
		}
	}
};

const state = reactive({
	collapsed: false,
	rootSubmenuKeys: [],
	openKeys: [],
	selectedKeys: [],
});
const onOpenClick = (openKeys) => {
	router.push({ path: openKeys.key.slice(0, -4) });
	state.openKeys = [openKeys.keyPath[0]];
	console.log([openKeys.keyPath[0]]);
};

const goHome = () => {
	router.push("/merchantManagement/homePage");
};

const toggleCollapsed = () => {
	state.collapsed = !state.collapsed;
	storeJS.$state.layoutData.isToggle = state.collapsed;
};
</script>

<style lang="less" scoped>
.anticon:before {
	display: block !important;
}
.p-layout-aside {
	height: 100vh;
	border-right: 1px solid #eee;
	.m-logo {
		border-bottom: 1px solid #eee;
		height: 56px;
		.logo-box {
			.img {
				width: 30px;
				height: auto;
			}
		}
	}
	.m-menu {
		max-height: calc(100vh - 104px);
		overflow-y: auto;
	}
	.m-toggle {
		padding: 2px;
		.btn {
			width: 58px;
			height: calc(100% - 0px);
			padding-left: 16px;
			padding-right: 16px;
			color: #333;
			border-radius: 8px;
			margin-left: 2px;
			i,
			svg {
				font-size: 18px;
			}
			&:hover {
				color: #1677ff;
				background-color: rgba(0, 0, 0, 0.06);
			}
		}
	}
}
/deep/ .ant-menu-light.ant-menu-root.ant-menu-inline {
	border-inline-end: 1px solid transparent;
}
</style>
