import { Vue, Component, Watch } from 'vue-property-decorator'; import { VNode } from 'vue'; import { on } from '@ibizstudio/runtime'; import { ModelClipboardItem } from './model-clipboard-item/model-clipboard-item'; import { ModelClipboardController } from './controller/model-clipboard-controller'; import { ModelData } from './model-data'; import './model-clipboard.less'; /** * 粘贴板 * * @export * @class ModelClipboard * @extends {Vue} */ @Component({ components: { 'model-clipboard-item': ModelClipboardItem } }) export class ModelClipboard extends Vue { /** * 模型操作通用控制器 * * @protected * @type {ModelClipboardController} * @memberof ModelClipboard */ protected controller: ModelClipboardController = ModelClipboardController.getInstance(); /** * @description 视图层级 * @private * @type {*} * @memberof ModelClipboard */ private zIndex: number = 100; /** * 组件新建完毕 * * @memberof ModelClipboard */ created(): void { on(document, 'keydown', (e: KeyboardEvent) => { if (e.keyCode === 27) { e.stopPropagation(); this.controller.showChange(false); } }); } @Watch('controller.isShowModelClipboard', { deep: true, immediate: true }) showChange(newVal: boolean, oldVal: boolean) { if (newVal !== undefined) { if (newVal) { this.handleZIndex('ivu-drawer-mask', 'ivu-drawer-wrap'); } else if (oldVal == true && this.zIndex){ this.$store.commit('downZIndex'); } } } /** * @description 处理z-index * @param {string} mask * @param {string} wrap * @memberof ModelClipboard */ handleZIndex(mask: string, wrap: string) { this.$store.commit('upZIndex'); this.zIndex = this.$store.getters.getZIndex(); const element: Element = this.$el; const maskTag: any = element.getElementsByClassName(mask)[0]; const warpTag: any = element.getElementsByClassName(wrap)[0]; if (maskTag && warpTag) { maskTag.style.zIndex = this.zIndex; warpTag.style.zIndex = this.zIndex; } } /** * 清空所有 * * @memberof ModelClipboard */ removeAll(): void { if (this.controller.items.length > 0) { this.$Modal.confirm({ title: '确认删除所有?', content: '确认删除当前粘贴板的数据?', onOk: () => { this.controller.clearAll(); } }); } } /** * 绘制抽屉内容 * * @returns {VNode} * @memberof ModelClipboard */ renderDrawerContent(): VNode { return
模型粘贴板
this.removeAll()}>清空 this.controller.showChange(false)} />
{this.controller.items.map((item: ModelData, i: number) => { return this.controller.removeByIndex(i)} />; })}
} /** * 绘制内容 * * @returns {*} * @memberof ModelClipboard */ render(): any { return
{this.renderDrawerContent()}
; } }