kana-bbs/layouts/default.vue
2024-04-16 20:06:06 +08:00

131 lines
3.0 KiB
Vue

<template lang="pug">
.main
header.header
.circumscription
.logo Kana
nav.navbar
NuxtLink.navbar-item(:to="{ path: '/' }") 论坛
NuxtLink.navbar-item(to="/docs") 文档
NuxtLink.navbar-item(to="/chat") 聊天室
//NuxtLink.navbar-item(to="/admin") admin
.online
.navbar-user(v-if="account.online")
NuxtLink.userinfo(to="/account")
img.avatar(:src="account.avatar" onerror="this.src='data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'")
span.name {{ account.name }}
.navbar-sign(v-else)
NuxtLink.button(to="/account/signin") Signin
NuxtLink.button(to="/account/create") Login
.websocket(:class="{ on: websocket }")
Nuxt
</template>
<script>
import "@/assets/sass/main.sass";
import "@/assets/sass/default.sass";
import socket from "@/assets/js/socket.js";
export default {
data: () => ({
websocket: false,
}),
computed: {
account() {
return this.$store.state.account;
},
},
beforeMount() {
// 如果掉线调用变红, 如果上线调用变绿
socket.onclose = () => {
this.websocket = false;
};
socket.onopen = () => {
this.websocket = true;
};
let protocol = location.protocol === "https:" ? "wss:" : "ws:";
socket.init(`${protocol}//${location.host}/api/`);
},
mounted() {
console.log(
"%c こめいじ さとり %c satori.love ",
"color: white; background: #e9546b; padding:5px 0;",
"padding:4px;border:1px solid #e9546b;"
);
this.$store.dispatch("account/profile");
console.log(window.devicePixelRatio);
},
};
</script>
<style lang="sass">
.websocket
background: red
border-radius: 50%
width: 1rem
height: 1rem
margin: .25rem .5rem
.websocket.on
background: #00ee00
.main
>header.header
z-index: 100
position: fixed
top: 0
left: 0
width: 100%
padding: 1rem 0
>div
display: flex
align-items: flex-end
>.logo
font-size: 2rem
font-weight: 900
margin-right: 1.5rem
>nav.navbar
flex: 1
display: flex
align-items: center
//justify-content: center
.navbar-item
margin: 0 .25rem
padding: 0 .75rem
height: 2rem
line-height: 2rem
text-align: center
font-weight: 600
white-space: nowrap
>.online
.navbar-user
.userinfo
font-weight: 600
display: flex
align-items: center
.avatar
width: 24px
height: 24px
border-radius: 50%
margin-right: .5rem
background: rgba(0, 0, 0, .05)
.navbar-sign
a.button
margin-right: .5rem
footer.footer
text-align: center
padding: 4rem
.github
font-size: 2rem
//.admin
// position: relative
//.admin::before
// position: absolute
// top: 0
// right: 0
// content: '演示'
// width: 4rem
// height: 2rem
// background: #ff1414
</style>