| 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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
 | | <template> |  |   <el-image |  |     :src="`${realSrc}`" |  |     fit="cover" |  |     :style="`width:${realWidth};height:${realHeight};`" |  |     :preview-src-list="realSrcList" |  |   > |  |     <div slot="error" class="image-slot"> |  |       <i class="el-icon-picture-outline"></i> |  |     </div> |  |   </el-image> |  | </template> |  |   |  | <script> |  | import { isExternal } from "@/utils/validate"; |  |   |  | export default { |  |   name: "ImagePreview", |  |   props: { |  |     src: { |  |       type: String, |  |       default: "" |  |     }, |  |     width: { |  |       type: [Number, String], |  |       default: "" |  |     }, |  |     height: { |  |       type: [Number, String], |  |       default: "" |  |     } |  |   }, |  |   computed: { |  |     realSrc() { |  |       if (!this.src) { |  |         return; |  |       } |  |       let real_src = this.src.split(",")[0]; |  |       if (isExternal(real_src)) { |  |         return real_src; |  |       } |  |       return process.env.VUE_APP_BASE_API + real_src; |  |     }, |  |     realSrcList() { |  |       if (!this.src) { |  |         return; |  |       } |  |       let real_src_list = this.src.split(","); |  |       let srcList = []; |  |       real_src_list.forEach(item => { |  |         if (isExternal(item)) { |  |           return srcList.push(item); |  |         } |  |         return srcList.push(process.env.VUE_APP_BASE_API + item); |  |       }); |  |       return srcList; |  |     }, |  |     realWidth() { |  |       return typeof this.width == "string" ? this.width : `${this.width}px`; |  |     }, |  |     realHeight() { |  |       return typeof this.height == "string" ? this.height : `${this.height}px`; |  |     } |  |   }, |  | }; |  | </script> |  |   |  | <style lang="scss" scoped> |  | .el-image { |  |   border-radius: 5px; |  |   background-color: #ebeef5; |  |   box-shadow: 0 0 5px 1px #ccc; |  |   ::v-deep .el-image__inner { |  |     transition: all 0.3s; |  |     cursor: pointer; |  |     &:hover { |  |       transform: scale(1.2); |  |     } |  |   } |  |   ::v-deep .image-slot { |  |     display: flex; |  |     justify-content: center; |  |     align-items: center; |  |     width: 100%; |  |     height: 100%; |  |     color: #909399; |  |     font-size: 30px; |  |   } |  | } |  | </style> | 
 |