app-field-image-dynamic.vue 2.9 KB
Newer Older
glod-money-money's avatar
glod-money-money committed
1
<template>
tony001's avatar
tony001 committed
2 3
    <div :class="curClassName" :style="curStyle">
        <img :src="imgUrl" />
glod-money-money's avatar
glod-money-money committed
4 5 6
    </div>
</template>
<script lang = 'ts'>
tony001's avatar
tony001 committed
7
import { Vue, Component, Prop, Watch } from 'vue-property-decorator';
glod-money-money's avatar
glod-money-money committed
8 9 10
import { Environment } from "@/environments/environment";
@Component({})
export default class AppFieldImageDynamic extends Vue {
glod-money-money's avatar
glod-money-money committed
11 12 13 14 15 16
    /**
     * 名称
     *
     * @type {*}
     * @memberof AppRawItemImage
     */
tony001's avatar
tony001 committed
17
    @Prop() public name!: string;
glod-money-money's avatar
glod-money-money committed
18 19 20 21 22 23 24 25

    /**
     * 模型
     *
     * @type {*}
     * @memberof AppRawItemImage
     */
    @Prop() public layoutModelDetails!: any;
glod-money-money's avatar
glod-money-money committed
26 27 28 29 30

    /**
     * 输入值
     *
     * @type {string}
glod-money-money's avatar
glod-money-money committed
31
     * @memberof AppFieldImageDynamic
glod-money-money's avatar
glod-money-money committed
32 33 34 35
     */
    @Prop() public value: any;

    /**
tony001's avatar
tony001 committed
36 37 38 39 40
     * 下标
     *
     * @type {number}
     * @memberof AppFieldImageDynamic
     */
tony001's avatar
tony001 committed
41
    @Prop() public index?: number;
tony001's avatar
tony001 committed
42 43 44 45 46 47

    /**
     * 值变更
     *
     * @memberof AppFieldImageDynamic
     */
glod-money-money's avatar
glod-money-money committed
48
    @Watch('value',{immediate: true})
tony001's avatar
tony001 committed
49 50 51 52 53 54
    onValueChange(newVal: any, oldVal: any) {
        this.handleDynaImg();
    }

    /**
     * 项名称
glod-money-money's avatar
glod-money-money committed
55
     *
glod-money-money's avatar
glod-money-money committed
56 57
     * @type {*}
     * @memberof AppFieldImageDynamic
glod-money-money's avatar
glod-money-money committed
58
     */
tony001's avatar
tony001 committed
59
    get itemName() {
tony001's avatar
tony001 committed
60
        return (this.index || this.index === 0) ? `${this.name}_${this.index}` : this.name;
tony001's avatar
tony001 committed
61
    }
glod-money-money's avatar
glod-money-money committed
62 63 64 65

    /**
     * 动态图片路径
     *
glod-money-money's avatar
glod-money-money committed
66
     * @memberof AppFieldImageDynamic
glod-money-money's avatar
glod-money-money committed
67 68 69 70 71 72
     */
    protected dynaImgUrl: string = '';

    /**
    * 下载文件路径
    *
glod-money-money's avatar
glod-money-money committed
73
    * @memberof AppFieldImageDynamic
glod-money-money's avatar
glod-money-money committed
74 75 76
    */
    public downloadUrl = Environment.ExportFile;

glod-money-money's avatar
glod-money-money committed
77
    /**
tony001's avatar
tony001 committed
78
     * 图片路径
glod-money-money's avatar
glod-money-money committed
79 80 81
     *
     * @memberof AppFieldImageDynamic
     */
tony001's avatar
tony001 committed
82 83 84
    get imgUrl(): string {
        return this.dynaImgUrl;
    }
glod-money-money's avatar
glod-money-money committed
85

glod-money-money's avatar
glod-money-money committed
86
    /**
tony001's avatar
tony001 committed
87
     * 类名
glod-money-money's avatar
glod-money-money committed
88
     *
glod-money-money's avatar
glod-money-money committed
89
     * @memberof AppFieldImageDynamic
glod-money-money's avatar
glod-money-money committed
90
     */
tony001's avatar
tony001 committed
91 92 93 94 95
    get curClassName() {
        const layoutModel = this.layoutModelDetails[this.itemName];
        if (layoutModel) {
            return `app-field-image-dynamic ${this.itemName} ${layoutModel.sysCss}`;
        }
glod-money-money's avatar
glod-money-money committed
96 97
    }

tony001's avatar
tony001 committed
98 99 100 101 102 103 104 105 106
    /**
     * 当前容器样式
     * 
     * @memberof AppFieldImageDynamic
     */
    get curStyle() {
        const layoutModel = this.layoutModelDetails[this.itemName];
        if (layoutModel) {
            return layoutModel.getElementStyle();
glod-money-money's avatar
glod-money-money committed
107
        }
glod-money-money's avatar
glod-money-money committed
108 109 110 111 112
    }

    /**
    * 处理动态图片
    *
glod-money-money's avatar
glod-money-money committed
113
    * @memberof AppFieldImageDynamic
glod-money-money's avatar
glod-money-money committed
114 115 116 117 118 119 120
    */
    protected handleDynaImg() {
        if (this.value && typeof this.value == "string") {
            // 默认识别文件对象形式,识别失败则为全路径模式
            try {
                const _files = JSON.parse(this.value);
                const file = _files instanceof Array ? _files[0] : null;
tony001's avatar
tony001 committed
121 122
                const url = file && file.id ? `${this.downloadUrl}/${file.id}` : "";
                this.dynaImgUrl = url;
glod-money-money's avatar
glod-money-money committed
123 124 125 126 127 128 129
            } catch (error) {
                this.dynaImgUrl = this.value;
            }
        }
    }
}
</script>
130 131
<style lang="scss">
@import './app-field-image-dynamic.scss';
glod-money-money's avatar
glod-money-money committed
132
</style>