import './index.scss' import { NLayoutHeader, NSpace, NTooltip, NDropdown } from 'naive-ui' import RayIcon from '@/components/RayIcon/index' import { useSetting } from '@/store' import { useLanguageOptions } from '@/language/index' import SettingDrawer from './Components/SettingDrawer/index' import { useAvatarOptions } from './hook' import { removeCache } from '@/utils/cache' import type { IconEventMapOptions, IconEventMap } from './type' const SiderBar = defineComponent({ name: 'SiderBar', setup() { const settingStore = useSetting() const { t } = useI18n() const { updateLocale, changeReloadLog } = settingStore const modelDrawerPlacement = ref(settingStore.drawerPlacement) const showSettings = ref(false) const leftIconOptions = [ { name: 'reload', size: 18, tooltip: 'LayoutHeaderTooltipOptions.Reload', }, ] const rightIconOptions = [ { name: 'language', size: 18, tooltip: '', dropdown: { methodName: 'handleSelect', // 默认为 `handleSelect` switch: true, options: useLanguageOptions(), handleSelect: (key: string | number) => updateLocale(String(key)), }, }, { name: 'github', size: 18, tooltip: 'LayoutHeaderTooltipOptions.Github', }, { name: 'setting', size: 18, tooltip: 'LayoutHeaderTooltipOptions.Setting', }, { name: 'ray', size: 22, tooltip: '', dropdown: { methodName: 'handleSelect', // 默认为 `handleSelect` switch: true, options: useAvatarOptions(), handleSelect: (key: string | number) => { if (key === 'logout') { window.$dialog.warning({ title: '提示', content: '您确定要退出登录吗', positiveText: '确定', negativeText: '不确定', onPositiveClick: () => { window.$message.info('账号退出中...') removeCache('all-sessionStorage') setTimeout(() => window.location.reload(), 2 * 1000) }, }) } else { window.$message.info('这个人很懒, 没做这个功能~') } }, }, }, ] const iconEventMap: IconEventMapOptions = { reload: () => { changeReloadLog(false) setTimeout(() => changeReloadLog(true)) }, setting: () => { showSettings.value = true }, github: () => { window.open('https://github.com/XiaoDaiGua-Ray/ray-template') }, } const handleIconClick = (key: IconEventMap) => { iconEventMap[key]?.() } return { leftIconOptions, rightIconOptions, t, handleIconClick, modelDrawerPlacement, showSettings, } }, render() { return ( {this.leftIconOptions.map((curr) => ( {{ trigger: () => ( ), default: () => this.t(curr.tooltip), }} ))} {this.rightIconOptions.map((curr) => curr.dropdown?.switch ? ( ) : ( {{ trigger: () => ( ), default: () => this.t(curr.tooltip), }} ), )} ) }, }) export default SiderBar