app-preset-caption.vue 2.8 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
<template>
  <div :class="curClassName" :style="curStyle">
    <template v-if="Object.is(renderMode, 'TEXT')">
      <span class="view__caption__info">
        <slot></slot>
      </span>
    </template>
    <template v-else-if="Object.is(renderMode, 'HEADING1')">
      <h1 class="view__caption__info">
        <slot></slot>
      </h1>
    </template>
    <template v-else-if="Object.is(renderMode, 'HEADING2')">
      <h2 class="view__caption__info">
        <slot></slot>
      </h2>
    </template>
    <template v-else-if="Object.is(renderMode, 'HEADING3')">
      <h3 class="view__caption__info">
        <slot></slot>
      </h3>
    </template>
    <template v-else-if="Object.is(renderMode, 'HEADING4')">
      <h4 class="view__caption__info">
        <slot></slot>
      </h4>
    </template>
    <template v-else-if="Object.is(renderMode, 'HEADING5')">
      <h5 class="view__caption__info">
        <slot></slot>
      </h5>
    </template>
    <template v-else-if="Object.is(renderMode, 'HEADING6')">
      <h6 class="view__caption__info">
        <slot></slot>
      </h6>
    </template>
    <template v-else-if="Object.is(renderMode, 'PARAGRAPH')">
      <p class="view__caption__info">
        <slot></slot>
      </p>
    </template>
  </div>
</template>

<script lang="ts">
import { Vue, Component, Prop } from "vue-property-decorator";

@Component({})
export default class AppPresetCaption extends Vue {
  /**
   * 名称
   *
   * @type {string}
   * @memberof AppPresetCaption
   */
  @Prop() public name!: string;

  /**
   * 布局模型详情
   *
   * @type {*}
   * @memberof AppPresetCaption
   */
  @Prop() public layoutModelDetails: any;

  /**
   * 下标
   *
   * @type {number}
   * @memberof AppPresetCaption
   */
73
  @Prop() public index?: number;
74 75 76 77 78 79 80 81

  /**
   * 项名称
   *
   * @type {*}
   * @memberof AppPresetCaption
   */
  get itemName() {
82
    return (this.index || this.index === 0) ? `${this.name}_${this.index}` : this.name;
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
  }

  /**
   * 绘制模式
   *
   * @type {*}
   * @memberof AppPresetCaption
   */
  get renderMode() {
    const layoutModel = this.layoutModelDetails[this.itemName];
    if (layoutModel) {
      return layoutModel.renderMode == 'HEADING1' ? 'TEXT' : layoutModel.renderMode;
    }
  }

  /**
   * 类名
   *
   * @memberof AppPresetCaption
   */
  get curClassName() {
    const layoutModel = this.layoutModelDetails[this.itemName];
    if (layoutModel) {
      return `app-preset-caption ${this.itemName} ${layoutModel.sysCss}`;
    }
  }

  /**
   * 当前容器样式
   *
   * @memberof AppPresetCaption
   */
  get curStyle() {
    const layoutModel = this.layoutModelDetails[this.itemName];
    if (layoutModel) {
      return layoutModel.getElementStyle();
    }
  }
}
</script>

<style lang='less'>
@import "./app-preset-caption.less";
</style>