cshenfu
2023-06-14 de93aa62c83d6afb9f70cd5a22838375db0a8cbc
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
73
<template>
    <view @click="onClick" :style="{width,height}" style="justify-content: center;">
        <image v-if="cSrc" :style="{width,height}" :src="cSrc" :mode="mode"></image>
    </view>
</template>
 
<script>
    /**
    * cloud-image 
    * @description 兼容普通资源和unicloud图片资源渲染的组件
    * @property {String} mode    图片裁剪、缩放的模式。默认为widthFix,支持所有image组件的mode值
    * @property {String} src    资源完了链接或uniCloud云存储资源的fileid
    * @property {String} width    图片的宽,默认为:100rpx
    * @property {String} height    图片的高,默认为:100rpx
    * @event {Function} click 点击 cloud-image 触发事件
    */
    export default {
        name: "cloud-image",
        emits:['click'],
        props: {
            mode: {
                type:String,
                default () {
                    return 'widthFix'
                }
            },
            src: {
                // type:String,
                default () {
                    return ""
                }
            },
            width: {
                type:String,
                default () {
                    return '100rpx'
                }
            },
            height: {
                type:String,
                default () {
                    return '100rpx'
                }
            }
        },
        watch: {
            src:{
                handler(src) {
                    if (src&&src.substring(0, 8) == "cloud://") {
                        uniCloud.getTempFileURL({
                            fileList: [src]
                        }).then(res=>{
                            this.cSrc = res.fileList[0].tempFileURL
                        })
                    }else{
                        this.cSrc = src
                    }
                },
                immediate: true
            }
        },
        methods:{
            onClick(){
                this.$emit('click')
            }
        },
        data() {
            return {
                cSrc:false
            };
        }
    }
</script>