<template> <div :class="curClassName" :style="curStyle"> <i-button :type="buttonType" :disabled="disabled" :title="tooltip" :loading="loading" :ghost="buttonGhost" @click="handleClick"> <div :class="['button-content', iconAlign.toLowerCase()]"> <span v-if="cssClass || imagePath" class="icon"> <i v-if="cssClass" :class="cssClass" /> <img v-else :src="imagePath" /> </span> <span v-if="showCaption" class="caption">{{ caption }}</span> </div> </i-button> </div> </template> <script lang="ts"> import { Vue, Component, Prop } from 'vue-property-decorator'; @Component({}) export default class AppPresetButton extends Vue { /** * 按钮name * * @type {any} * @memberof AppPresetButton */ @Prop() public name!: string; /** * 显示提示 * * @memberof AppPresetButton */ @Prop() public tooltip?: string; /** * 标题 * * @memberof AppPresetButton */ @Prop() public caption?: string; /** * 加载状态 * * @memberof AppPresetButton */ @Prop({ default: false }) public loading?: boolean; /** * 布局模型详情 * * @type {*} * @memberof AppPresetButton */ @Prop() public layoutModelDetails: any; /** * 下标 * * @type {number} * @memberof AppPresetButton */ @Prop({ default: 0 }) public index?: number; /** * 项名称 * * @type {*} * @memberof AppPresetButton */ get itemName() { return this.index ? `${this.name}_${this.index}` : this.name; } /** * 显示标题 * * @memberof AppPresetButton */ get showCaption() { const layoutModel = this.layoutModelDetails[this.itemName]; if (layoutModel) { return layoutModel.isShowCaption; } } /** * 类名 * * @memberof AppPresetButton */ get curClassName() { const layoutModel = this.layoutModelDetails[this.itemName]; if (layoutModel) { return `app-preset-button ${this.itemName} ${layoutModel.sysCss}`; } } /** * 图片路径 * * @memberof AppPresetButton */ get imagePath() { const layoutModel = this.layoutModelDetails[this.itemName]; if (layoutModel) { let imagePath = ''; if (layoutModel.sysImage) { imagePath = layoutModel.sysImage.imagePath; } else if (layoutModel.uiAction) { imagePath = layoutModel.uiAction.imagePath; } return imagePath; } } /** * 图标 * * @memberof AppPresetButton */ get cssClass() { const layoutModel = this.layoutModelDetails[this.itemName]; if (layoutModel) { let cssClass = ''; if (layoutModel.sysImage) { cssClass = layoutModel.sysImage.iconcls; } else if (layoutModel.uiAction) { cssClass = layoutModel.uiAction.iconcls; } return cssClass; } } /** * 当前容器样式 * * @memberof AppPresetButton */ get curStyle() { const layoutModel = this.layoutModelDetails[this.itemName]; if (layoutModel) { return layoutModel.getElementStyle(); } } /** * 禁用 * * @memberof AppPresetButton */ get disabled() { const layoutModel = this.layoutModelDetails[this.itemName]; if (layoutModel) { return layoutModel.disabled; } } /** * 按钮类型 * * @memberof AppPresetButton */ get buttonType() { const layoutModel = this.layoutModelDetails[this.itemName]; if (layoutModel) { if (Object.is(layoutModel.renderMode, 'LINK')) { return 'text'; } else { if ( Object.is(layoutModel.buttonStyle, 'DEFAULT') || Object.is(layoutModel.buttonStyle, 'STYLE2') || Object.is(layoutModel.buttonStyle, 'STYLE3') || Object.is(layoutModel.buttonStyle, 'STYLE4') ) { return 'default'; } else if (Object.is(layoutModel.buttonStyle, 'DANGER')) { return 'error'; } else if (Object.is(layoutModel.buttonStyle, 'INVERSE')) { return 'primary'; } else { return layoutModel.buttonStyle.toLowerCase(); } } } } /** * 图标方向 * * @memberof AppPresetButton */ get iconAlign() { const layoutModel = this.layoutModelDetails[this.itemName]; if(layoutModel){ return layoutModel.iconAlign || 'LEFT'; } } /** * 按钮幽灵属性,使按钮背景透明 * * @memberof AppPresetButton */ get buttonGhost() { const layoutModel = this.layoutModelDetails[this.itemName]; if(layoutModel){ return Object.is(layoutModel.buttonStyle, 'INVERSE'); } } /** * 点击按钮 * * @param {*} event * @memberof AppPresetButton */ public handleClick(event: any) { this.$emit('itemClick', this.itemName); } } </script> <style lang='less'> @import './app-preset-button.less'; </style>