You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
OneAuth/oaweb/src/layouts/AppLayout.vue

93 lines
2.0 KiB
Vue

2 years ago
<!--
* AppLayout.vue
* Copyright (C) 2023 veypi <i@veypi.com>
* 2023-10-04 10:46
* Distributed under terms of the MIT license.
-->
<template>
2 years ago
<div class="p-4">
<div class="flex items-center">
<q-avatar class="mx-2" round size="4rem">
<img :src="app.icon">
</q-avatar>
<h1 class="text-4xl">{{ app.name }}</h1>
</div>
2 years ago
<router-view :app="app" :data="{ a: 1 }" />
2 years ago
</div>
</template>
<script lang="ts" setup>
import msg from '@veypi/msg';
import api from 'src/boot/api';
2 years ago
import { MenuLink, modelsApp } from 'src/models';
2 years ago
import { useMenuStore } from 'src/stores/menu';
import { computed, watch, ref, onMounted, provide, onBeforeUnmount } from 'vue';
import { useRoute } from 'vue-router';
2 years ago
import { RouteLocationNamedRaw } from 'vue-router';
2 years ago
let route = useRoute();
let menu = useMenuStore()
let id = computed(() => route.params.id)
let app = ref({} as modelsApp)
provide('app', app)
const sync_app = () => {
api.app.get(id.value as string).then((e: modelsApp) => {
app.value = e
2 years ago
Links.value[1].title = e.name
for (let i in Links.value) {
let l: RouteLocationNamedRaw = Links.value[i].to as any
if (l.params) {
l.params.id = e.id
}
}
2 years ago
}).catch(e => {
msg.Warn('sync app data failed: ' + e)
})
}
2 years ago
const Links = ref([
{
title: '应用中心',
caption: '',
icon: 'apps',
to: { name: 'home' }
},
{
title: '',
caption: '',
icon: 'home',
to: { name: 'app.home', params: { id: id.value } }
},
{
title: '用户管理',
caption: 'oa.veypi.com',
icon: 'people',
to: { name: 'app.user', params: { id: id.value } }
},
{
title: '应用设置',
caption: '',
icon: 'settings',
to: { name: 'app.settings', params: { id: id.value } }
},
] as MenuLink[])
watch(id, (e) => {
if (e) {
sync_app()
}
2 years ago
})
onMounted(() => {
sync_app()
2 years ago
menu.set(Links.value)
2 years ago
})
onBeforeUnmount(() => {
menu.load_default()
})
</script>
<style scoped></style>