import { defineComponent, ref, Transition, TransitionGroup, watch } from 'vue'
import ModeSwitch from './ModeSwitch'
import icons, { initIcons } from './icons'
import { OhVueIcon, addIcons } from 'oh-vue-icons'
import { PxHeadset, PxAddBox, PxCheck } from 'oh-vue-icons/icons'
import useRouterStore from '@/useRouterStore'
import useLayoutStore from '../useLayoutStore'
import useUserStore from '@/user/useUserStore'
import AvatarCircle from '@/user/AvatarCircle'
import clsx from 'clsx'
import useSettingsStore from '@/settings/useSettingsStore'
import { useMenuStore } from '../GlobalMenu'
import { v4 as uuid } from 'uuid'
initIcons()
addIcons(PxHeadset, PxAddBox, PxCheck)
const Item = defineComponent({
props: {
name: {
type: String,
default: ''
},
label: {
type: String,
default: ''
},
idx: {
type: Number,
default: 0
},
active: {
type: Boolean,
default: false
},
id: {
type: String,
default: ''
}
},
emits: ['click'],
setup(props, ctx) {
const hover = ref(false)
return () => (
{
useMenuStore().open('page')
useMenuStore().selectPage = {
id: props.id,
label: props.label,
name: props.name,
}
e.stopPropagation()
e.preventDefault()
}}
class={
'relative z-10 w-full h-[56px] flex flex-col justify-center items-center text-[13px] cursor-pointer transition-all font-bold ' +
(props.active ? 'text-white' : hover.value ? 'text-white' : 'text-white/80')
}
onMouseenter={() => {
hover.value = true
}}
onMouseleave={() => {
hover.value = false
}}
onClick={() => {
ctx.emit('click')
}}
>
{props.label}
)
}
})
export default defineComponent(() => {
const menu = useMenuStore()
const selected = ref(icons[0])
const router = useRouterStore()
const layout = useLayoutStore()
const settings = useSettingsStore()
const user = useUserStore()
const show = ref(false)
const label = ref('')
watch(
selected,
(val) => {
label.value = val.label
},
{ immediate: true }
)
watch(
() => menu.selectPage,
(val) => {
if (val) {
selected.value = {
name: val.name,
label: val.label
}
label.value = val.label
} else {
selected.value = icons[0]
label.value = ''
}
}
)
return () => (
{layout.ready && (
{
show.value = true
}}
onMouseleave={() => {
show.value = false
}}
onMouseenter={() => {
show.value = true
}}
>
- {
menu.showEditPage = true
}}
/>
- {
router.go('settings-fallback')
}}
/>
{
if (user.isLogin) {
router.go('settings-user')
} else {
router.go('global-login')
}
}}
>
{/* 添加页面 */}
{menu.showEditPage && (
{
menu.showEditPage = false
}}
>
{icons.map((el) => (
{
selected.value = { ...el }
}}
>
))}
{
if (menu.selectPage) {
menu.selectPage.name = selected.value.name
menu.selectPage.label = label.value
if (!menu.selectPage?.id) return
const idx = layout.state.content[layout.state.current].pages.findIndex(val => val.id === menu.selectPage?.id)
if (idx !== -1) {
layout.state.content[layout.state.current].pages[idx].label = label.value
layout.state.content[layout.state.current].pages[idx].name = selected.value.name
}
menu.selectPage = undefined
} else {
layout.currentMode.pages.push({
list: [],
label: label.value,
name: selected.value.name,
id: uuid()
})
}
menu.showEditPage = false
}}
>
{menu.selectPage ? "修改页面" : "添加页面"}
)}
)}
)
})