|
@@ -2,9 +2,9 @@
|
|
|
<div class="slide-menu">
|
|
|
<div
|
|
|
v-for="item in items"
|
|
|
- :class="{active: item.name === router.currentRoute.value.name}"
|
|
|
+ :class="{active: item.name === activeName}"
|
|
|
:key="item.name"
|
|
|
- @click="router.push({ name: item.name })"
|
|
|
+ @click="$emit('changeItem', item)"
|
|
|
>
|
|
|
<ui-icon :type="item.icon" :tip="item.title" class="icon" />
|
|
|
</div>
|
|
@@ -12,14 +12,26 @@
|
|
|
</template>
|
|
|
|
|
|
<script lang="ts" setup>
|
|
|
-import { metas, RoutesName, router } from '@/router'
|
|
|
+import { metas, RoutesName, router, getRouteConfig } from '@/router'
|
|
|
import { views, records, floders } from '@/store';
|
|
|
import { computed } from 'vue';
|
|
|
|
|
|
+import type { RouteRecordRaw } from '@/router'
|
|
|
+
|
|
|
+export type MenuItem = {
|
|
|
+ name: RoutesName,
|
|
|
+ config: RouteRecordRaw,
|
|
|
+} & (typeof metas)[keyof typeof metas]
|
|
|
+
|
|
|
+defineProps<{ activeName: RoutesName }>()
|
|
|
+defineEmits<{ (e: 'changeItem', item: MenuItem): void }>()
|
|
|
+
|
|
|
+
|
|
|
const items = computed(() => {
|
|
|
const items = [
|
|
|
{
|
|
|
name: RoutesName.summaryShow,
|
|
|
+ config: getRouteConfig(RoutesName.summaryShow),
|
|
|
...metas[RoutesName.summaryShow]
|
|
|
}
|
|
|
]
|
|
@@ -27,6 +39,7 @@ const items = computed(() => {
|
|
|
if (views.value.length) {
|
|
|
items.push({
|
|
|
name: RoutesName.viewShow,
|
|
|
+ config: getRouteConfig(RoutesName.viewShow),
|
|
|
...metas[RoutesName.viewShow]
|
|
|
})
|
|
|
}
|
|
@@ -34,6 +47,7 @@ const items = computed(() => {
|
|
|
if (records.value.length) {
|
|
|
items.push({
|
|
|
name: RoutesName.recordShow,
|
|
|
+ config: getRouteConfig(RoutesName.recordShow),
|
|
|
...metas[RoutesName.recordShow]
|
|
|
})
|
|
|
}
|
|
@@ -41,6 +55,7 @@ const items = computed(() => {
|
|
|
if (floders.value.length) {
|
|
|
items.push({
|
|
|
name: RoutesName.folderShow,
|
|
|
+ config: getRouteConfig(RoutesName.folderShow),
|
|
|
...metas[RoutesName.folderShow]
|
|
|
})
|
|
|
}
|