From a4ee6ba0ca28833cbbb8cf0e675561b10fa4c1af Mon Sep 17 00:00:00 2001 From: Ben Lin <maobin001@msn.com> Date: 星期四, 12 九月 2024 01:23:40 +0800 Subject: [PATCH] 规则维护更新 --- src/layouts/default/header/components/user-dropdown/index.vue | 160 ++++++++++++++++++++++++++--------------------------- 1 files changed, 78 insertions(+), 82 deletions(-) diff --git a/src/layouts/default/header/components/user-dropdown/index.vue b/src/layouts/default/header/components/user-dropdown/index.vue index 8c46130..78717c9 100644 --- a/src/layouts/default/header/components/user-dropdown/index.vue +++ b/src/layouts/default/header/components/user-dropdown/index.vue @@ -3,7 +3,7 @@ <span :class="[prefixCls, `${prefixCls}--${theme}`]" class="flex"> <img :class="`${prefixCls}__header`" :src="getUserInfo.avatar" /> <span :class="`${prefixCls}__info hidden md:block`"> - <span :class="`${prefixCls}__name `" class="truncate"> + <span :class="`${prefixCls}__name`" class="truncate"> {{ getUserInfo.realName }} </span> </span> @@ -17,7 +17,13 @@ icon="ion:document-text-outline" v-if="getShowDoc" /> - <MenuDivider v-if="getShowDoc" /> + <Menu.Divider v-if="getShowDoc" /> + <MenuItem + v-if="getShowApi" + key="api" + :text="t('layout.header.dropdownChangeApi')" + icon="ant-design:swap-outlined" + /> <MenuItem v-if="getUseLockPage" key="lock" @@ -33,94 +39,84 @@ </template> </Dropdown> <LockAction @register="register" /> + <ChangeApi @register="registerApi" /> </template> -<script lang="ts"> - // components +<script lang="ts" setup> import { Dropdown, Menu } from 'ant-design-vue'; import type { MenuInfo } from 'ant-design-vue/lib/menu/src/interface'; + import { computed, ref } from 'vue'; + import { DOC_URL } from '@/settings/siteSetting'; + import { useUserStore } from '@/store/modules/user'; + import { useHeaderSetting } from '@/hooks/setting/useHeaderSetting'; + import { useI18n } from '@/hooks/web/useI18n'; + import { useDesign } from '@/hooks/web/useDesign'; + import { useModal } from '@/components/Modal'; + import headerImg from '@/assets/images/header.jpg'; + import { propTypes } from '@/utils/propTypes'; + import { openWindow } from '@/utils'; + import { createAsyncComponent } from '@/utils/factory/createAsyncComponent'; +import { useGlobSetting } from '/@/hooks/setting'; - import { defineComponent, computed } from 'vue'; + type MenuEvent = 'logout' | 'doc' | 'lock' | 'api'; - import { DOC_URL } from '/@/settings/siteSetting'; + const MenuItem = createAsyncComponent(() => import('./DropMenuItem.vue')); + const LockAction = createAsyncComponent(() => import('../lock/LockModal.vue')); + const ChangeApi = createAsyncComponent(() => import('../ChangeApi/index.vue')); - import { useUserStore } from '/@/store/modules/user'; - import { useHeaderSetting } from '/@/hooks/setting/useHeaderSetting'; - import { useI18n } from '/@/hooks/web/useI18n'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { useModal } from '/@/components/Modal'; + defineOptions({ name: 'UserDropdown' }); - import headerImg from '/@/assets/images/header.jpg'; - import { propTypes } from '/@/utils/propTypes'; - import { openWindow } from '/@/utils'; - - import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent'; - - type MenuEvent = 'logout' | 'doc' | 'lock'; - - export default defineComponent({ - name: 'UserDropdown', - components: { - Dropdown, - Menu, - MenuItem: createAsyncComponent(() => import('./DropMenuItem.vue')), - MenuDivider: Menu.Divider, - LockAction: createAsyncComponent(() => import('../lock/LockModal.vue')), - }, - props: { - theme: propTypes.oneOf(['dark', 'light']), - }, - setup() { - const { prefixCls } = useDesign('header-user-dropdown'); - const { t } = useI18n(); - const { getShowDoc, getUseLockPage } = useHeaderSetting(); - const userStore = useUserStore(); - - const getUserInfo = computed(() => { - const { realName = '', avatar, desc } = userStore.getUserInfo || {}; - return { realName, avatar: avatar || headerImg, desc }; - }); - - const [register, { openModal }] = useModal(); - - function handleLock() { - openModal(true); - } - - // login out - function handleLoginOut() { - userStore.confirmLoginOut(); - } - - // open doc - function openDoc() { - openWindow(DOC_URL); - } - - function handleMenuClick(e: MenuInfo) { - switch (e.key as MenuEvent) { - case 'logout': - handleLoginOut(); - break; - case 'doc': - openDoc(); - break; - case 'lock': - handleLock(); - break; - } - } - - return { - prefixCls, - t, - getUserInfo, - handleMenuClick, - getShowDoc, - register, - getUseLockPage, - }; - }, + defineProps({ + theme: propTypes.oneOf(['dark', 'light']), }); + + const { prefixCls } = useDesign('header-user-dropdown'); + const { t } = useI18n(); + const { getShowDoc, getUseLockPage, getShowApi } = useHeaderSetting(); + const userStore = useUserStore(); + const { systemType, downloadUrl } = useGlobSetting(); + + const getUserInfo = computed(() => { + const { realName = '', avatar, desc } = userStore.getUserInfo || {}; + return { realName, avatar: avatar || `${downloadUrl}\\${systemType}-header.jpg`, desc }; + }); + + const [register, { openModal }] = useModal(); + const [registerApi, { openModal: openApiModal }] = useModal(); + + function handleLock() { + openModal(true); + } + + function handleApi() { + openApiModal(true, {}); + } + + // login out + function handleLoginOut() { + userStore.confirmLoginOut(); + } + + // open doc + function openDoc() { + openWindow(DOC_URL); + } + + function handleMenuClick(e: MenuInfo) { + switch (e.key as MenuEvent) { + case 'logout': + handleLoginOut(); + break; + case 'doc': + openDoc(); + break; + case 'lock': + handleLock(); + break; + case 'api': + handleApi(); + break; + } + } </script> <style lang="less"> @prefix-cls: ~'@{namespace}-header-user-dropdown'; -- Gitblit v1.9.3