吴雨瞳添加了注释

master
wyt 6 months ago
parent 4b7924fbc1
commit 0c2f50e467

@ -1,43 +1,68 @@
<template>
<!-- 头部头部控制区域容器
- 绝对定位在右上角使用flex布局
- 绑定keydown事件按k键打开搜索模型
-->
<div class="header-controls absolute top-10 right-0 flex flex-row" @keydown.k="handleOpenModel" tabindex="0">
<!-- 搜索按钮
- 点击触发打开搜索模型
- 使用自定义阴影样式和图标
-->
<span class="ob-drop-shadow" data-dia="search" @click="handleOpenModel">
<svg-icon icon-class="search" />
</span>
<!-- 多语言切换下拉菜单
- 当启用多语言功能时显示
- 点击触发语言切换事件
-->
<Dropdown v-if="multiLanguage === 1" @command="handleClick">
<span class="ob-drop-shadow" data-dia="language">
<svg-icon icon-class="globe" />
<!-- 显示当前语言 -->
<span v-if="$i18n.locale == 'cn'"></span>
<span v-if="$i18n.locale == 'en'">EN</span>
</span>
<!-- 语言选择下拉菜单 -->
<DropdownMenu>
<DropdownItem name="en">English</DropdownItem>
<DropdownItem name="cn">中文</DropdownItem>
</DropdownMenu>
</Dropdown>
<!-- 未登录状态显示登录按钮 -->
<template v-if="userInfo === ''">
<span class="mr-3" @click="openLoginDialog">{{ t('settings.login') }}</span>
</template>
<!-- 已登录状态显示用户头像和下拉菜单 -->
<template v-if="userInfo !== ''">
<Dropdown hover>
<span class="mr-2">
<div class="flex-shrink-0">
<!-- 用户头像容器 -->
<div class="rounded-full ring-gray-100 overflow-hidden shaodw-lg w-9">
<img class="avatar-img" :src="userInfo.avatar" alt="" />
</div>
</div>
</span>
<!-- 用户操作下拉菜单 -->
<DropdownMenu>
<!-- 非移动端显示个人中心选项 -->
<template v-if="!isMobile">
<DropdownItem @click="openUserCenter">{{ t('settings.personal-center') }}</DropdownItem>
</template>
<!-- 登出选项 -->
<DropdownItem @click="logout">{{ t('settings.logout') }}</DropdownItem>
</DropdownMenu>
</Dropdown>
</template>
<!-- 主题切换按钮 -->
<span no-hover-effect class="ob-drop-shadow" data-dia="light-switch">
<ThemeToggle />
</span>
</div>
<!-- 登录对话框
- 控制显示隐藏(v-model)
- 宽度30%移动端全屏显示
-->
<el-dialog v-model="loginDialogVisible" width="30%" :fullscreen="isMobile">
<el-form @keyup.enter.native="login">
<el-form-item model="userInfo" class="mt-5">
@ -58,6 +83,7 @@
</div>
</el-form>
</el-dialog>
<!-- 注册对话框 -->
<el-dialog v-model="registerDialogVisible" width="30%" :fullscreen="isMobile">
<el-form>
<el-form-item model="userInfo" class="mt-5">
@ -129,9 +155,10 @@ import { useSearchStore } from '@/stores/search'
import config from '@/config/config'
import { useI18n } from 'vue-i18n'
import emitter from '@/utils/mitt'
// Controls
export default defineComponent({
name: 'Controls',
//
components: {
Dropdown,
DropdownMenu,
@ -140,38 +167,48 @@ export default defineComponent({
SearchModel
},
setup() {
//
const { t } = useI18n()
//
const proxy: any = getCurrentInstance()?.appContext.config.globalProperties
//
const appStore = useAppStore()
const commonStore = useCommonStore()
const userStore = useUserStore()
const searchStore = useSearchStore()
//
const route = useRoute()
const router = useRouter()
const loginInfo = reactive({
//
username: '' as any,
password: '' as any,
code: '' as any
})
//
const reactiveDate = reactive({
loginDialogVisible: false,
registerDialogVisible: false,
forgetPasswordDialogVisible: false,
articlePasswordDialogVisible: false,
articlePassword: '',
articleId: ''
loginDialogVisible: false,//
registerDialogVisible: false,//
forgetPasswordDialogVisible: false,//
articlePasswordDialogVisible: false,//
articlePassword: '',//
articleId: '' // ID
})
//
emitter.on('changeArticlePasswordDialogVisible', (articleId: any) => {
reactiveDate.articlePasswordDialogVisible = true
reactiveDate.articlePassword = ''
reactiveDate.articleId = articleId
//
nextTick(() => {
document.getElementById('article-password-input')?.focus()
})
})
//
const handleClick = (name: string): void => {
appStore.changeLocale(name)
}
//
const login = () => {
if (loginInfo.username.trim().length == 0 || loginInfo.password.trim().length == 0) {
proxy.$notify({
@ -321,6 +358,7 @@ export default defineComponent({
}
})
}
// 使
return {
handleOpenModel,
loginInfo,
@ -340,6 +378,7 @@ export default defineComponent({
updatePassword,
openForgetPasswordDialog,
accessArticle,
//
multiLanguage: computed(() => {
let websiteConfig: any = appStore.websiteConfig
return websiteConfig.multiLanguage
@ -351,39 +390,48 @@ export default defineComponent({
</script>
<style lang="scss">
.my-el-button {
//
width: 300px !important;
}
.el-button {
width: 300px;
}
//
.el-dialog__headerbtn {
outline: none !important;
}
//
.el-input-group__append {
background-color: var(--background-primary-alt) !important;
}
//
.el-form-item__label {
text-align: left;
width: 70px;
color: var(--text-normal) !important;
}
.el-input__inner {
//
color: var(--text-normal) !important;
background-color: var(--background-primary-alt) !important;
}
//
.el-input__wrapper {
background: var(--background-primary-alt) !important;
}
</style>
<style lang="scss" scoped>
//
.text {
color: var(--text-normal);
cursor: pointer;
}
//
#submit-button {
outline: none;
background: #0fb6d6;
}
//
.header-controls {
span {
display: flex;
@ -393,14 +441,17 @@ export default defineComponent({
cursor: pointer;
transition: opacity 250ms ease;
padding-right: 0.5rem;
//
&[no-hover-effect] {
&:hover {
opacity: 1;
}
}
//
&:hover {
opacity: 0.5;
}
//
.svg-icon {
stroke: #fff;
height: 2rem;

Loading…
Cancel
Save