<!-- * @Description: 工具栏 --> <template> <div class="operating-area"> <!-- 头部操作按钮区域 start --> <!-- 操作左侧区域 start --> <div class="left-btn-box"> <Tooltip v-for="item in toolbarsConfigs" :title="item.title" :key="item.icon"> <a @click="$emit(item.event)" class="toolbar-text"> <Icon :icon="item.icon" /> </a> </Tooltip> <Divider type="vertical" /> <Tooltip title="撤销"> <a :class="{ disabled: !canUndo }" :disabled="!canUndo" @click="undo"> <Icon icon="ant-design:undo-outlined" /> </a> </Tooltip> <Tooltip title="重做"> <a :class="{ disabled: !canRedo }" :disabled="!canRedo" @click="redo"> <Icon icon="ant-design:redo-outlined" /> </a> </Tooltip> </div> </div> <!-- 操作区域 start --> </template> <script lang="ts"> import { defineComponent, inject, reactive, toRefs } from 'vue'; import { UseRefHistoryReturn } from '@vueuse/core'; import { IFormConfig } from '../../../typings/v-form-component'; import { Tooltip, Divider } from 'ant-design-vue'; import Icon from '@/components/Icon/Icon.vue'; interface IToolbarsConfig { type: string; title: string; icon: string; event: string; } export default defineComponent({ name: 'OperatingArea', components: { Tooltip, Icon, Divider, }, setup() { const state = reactive<{ toolbarsConfigs: IToolbarsConfig[]; }>({ toolbarsConfigs: [ { title: '预览-支持布局', type: 'preview', event: 'handlePreview', icon: 'ant-design:chrome-filled', }, { title: '预览-不支持布局', type: 'preview', event: 'handlePreview2', icon: 'ant-design:chrome-filled', }, { title: '导入JSON', type: 'importJson', event: 'handleOpenImportJsonModal', icon: 'ant-design:import-outlined', }, { title: '生成JSON', type: 'exportJson', event: 'handleOpenJsonModal', icon: 'ant-design:export-outlined', }, { title: '生成代码', type: 'exportCode', event: 'handleOpenCodeModal', icon: 'ant-design:code-filled', }, { title: '清空', type: 'reset', event: 'handleClearFormItems', icon: 'ant-design:clear-outlined', }, ], }); const historyRef = inject('historyReturn') as UseRefHistoryReturn<IFormConfig, IFormConfig>; const { undo, redo, canUndo, canRedo } = historyRef; return { ...toRefs(state), undo, redo, canUndo, canRedo }; }, }); </script> <style lang="less" scoped> //noinspection CssUnknownTarget @import url('../styles/variable.less'); .operating-area { display: flex; align-content: center; justify-content: space-between; height: @operating-area-height; padding: 0 12px; padding-left: 30px; border-bottom: 2px solid @border-color; font-size: 16px; line-height: @operating-area-height; text-align: left; a { margin: 0 5px; color: #666; &.disabled, &.disabled:hover { color: #ccc; } &:hover { color: @primary-color; } > span { padding-left: 2px; font-size: 14px; } } } </style>