sa-image.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. const SaImage = {
  2. template: `
  3. <div class="sa-image" :style="itemStyle">
  4. <el-image v-for="item in urlList" :src="Fast.api.cdnurl(item)" :fit="fit"
  5. :preview-src-list="ispreview?[Fast.api.cdnurl(item)]:[]" :preview-teleported="true">
  6. <template #error>
  7. <el-icon>
  8. <Picture />
  9. </el-icon>
  10. </template>
  11. </el-image>
  12. </div>`,
  13. props: {
  14. url: {
  15. type: String,
  16. default: ''
  17. },
  18. size: {
  19. type: [String, Number],
  20. default: ''
  21. },
  22. fit: {
  23. type: String,
  24. default: 'contain'
  25. },
  26. radius: {
  27. type: [String, Number],
  28. default: 4
  29. },
  30. ispreview: {
  31. type: Boolean,
  32. default: true
  33. },
  34. },
  35. setup(props) {
  36. const { ref, watch, computed } = Vue
  37. const urlList = ref(props.url ? props.url.split(',') : [''])
  38. watch(() => props.url, () => {
  39. urlList.value = props.url ? props.url.split(',') : ['']
  40. })
  41. const itemStyle = computed(() => {
  42. let style = {}
  43. if (props.size) {
  44. style = {
  45. width: `${props.size}px`,
  46. height: `${props.size}px`,
  47. 'border-radius': `${props.radius}px`
  48. }
  49. }
  50. return style
  51. })
  52. return {
  53. Fast,
  54. urlList,
  55. itemStyle,
  56. }
  57. }
  58. }