JinZHouXiYiJi_DaPin2/examples/pages/DesignerView/toolbars/index.ts

99 lines
2.3 KiB
TypeScript
Raw Permalink Normal View History

2023-12-05 13:23:01 +08:00
import { exportCanvas, importCanvas, recoveryDraft, setShowEm, undo } from 'open-data-v/designer'
import { h } from 'vue'
import type { RouteLocationNormalizedLoaded, Router } from 'vue-router'
import LogoView from '@/components/LogoView'
import type { ToolBarItemType } from '@/components/ToolBar'
import { useProjectSettingStoreWithOut } from '@/store/modules/projectSetting'
import showIconCard from './iconList'
import showSaveCard from './save'
import ThemeIcon from './themeSwitch/ThemeIcon.vue'
const projectStore = useProjectSettingStoreWithOut()
const toggleTheme = () => {
projectStore.setNavTheme(!projectStore.darkTheme ? 'light' : 'dark')
projectStore.setDarkTheme(!projectStore.darkTheme)
}
export default function useToolBars(
router: Router,
route: RouteLocationNormalizedLoaded
): Array<ToolBarItemType> {
return [
{
label: '首页',
action: async (_e: MouseEvent) => {
await router.push({
name: 'Pages'
})
},
icon: () =>
h(LogoView, {
width: '40px'
}),
divider: true
},
{
label: '保存',
action: () => showSaveCard(route.params.index as string),
icon: 'save'
},
{
label: '预览',
action: (_e: MouseEvent) => {
const { href } = router.resolve('/preview')
window.open(href, '_blank')
},
icon: 'preview'
},
{
label: '撤销',
action: undo,
icon: 'back'
},
{
label: '恢复',
action: recoveryDraft,
icon: 'next'
},
{
label: '导出',
action: () => exportCanvas((route.params.index as string) || ''),
icon: 'download'
},
{
label: '导入',
action: importCanvas,
icon: 'upload'
},
{
label: '全屏',
action: () => {
const el: HTMLElement | null = document.querySelector('#editor')
if (document.fullscreenEnabled && el) {
el.requestFullscreen()
}
},
icon: 'fullScreen'
},
{
label: '坐标',
action: setShowEm,
icon: 'axis'
},
{
label: '图标',
action: showIconCard,
icon: 'cube',
location: 'right'
},
{
label: '主题',
action: toggleTheme,
icon: () => h(ThemeIcon),
location: 'right'
}
]
}