Commit 04b6bc4d42d3d4dfcfc1f8854315683432d664df
1 parent
68e49550
fix: pictureComponent can not show image
Showing
3 changed files
with
49 additions
and
10 deletions
| 1 | 1 | <script lang="ts" setup> |
| 2 | - import { computed } from 'vue'; | |
| 3 | - import { Tooltip, Image } from 'ant-design-vue'; | |
| 2 | + import { computed, ref, watch } from 'vue'; | |
| 3 | + import { Tooltip, Image as AntImage } from 'ant-design-vue'; | |
| 4 | 4 | import { |
| 5 | 5 | DEFAULT_DATE_FORMAT, |
| 6 | 6 | DEFAULT_RADIO_RECORD, |
| ... | ... | @@ -19,6 +19,8 @@ |
| 19 | 19 | const fallback = |
| 20 | 20 | 'data:image/png;base64,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'; |
| 21 | 21 | |
| 22 | + const getImagBase64 = ref(fallback); | |
| 23 | + | |
| 22 | 24 | const getRadio = computed(() => { |
| 23 | 25 | const { radio } = props.radio || DEFAULT_RADIO_RECORD; |
| 24 | 26 | return radio; |
| ... | ... | @@ -26,29 +28,56 @@ |
| 26 | 28 | |
| 27 | 29 | const getWidth = computed(() => { |
| 28 | 30 | const marign = 5; |
| 29 | - const offsetHight = 62 + 62; | |
| 30 | - const { width = 140, height = 140 } = props.radio || {}; | |
| 31 | - console.log({ scalcWidth: width > height ? height - marign : width - marign, width, height }); | |
| 31 | + const offsetHight = 62 + (props.radio ? 62 : 0); | |
| 32 | + const { width = 240, height = 200 } = props.radio || {}; | |
| 32 | 33 | return width > height - offsetHight ? height - offsetHight - marign : width - marign; |
| 33 | 34 | }); |
| 35 | + | |
| 36 | + watch( | |
| 37 | + () => props.value?.value, | |
| 38 | + () => { | |
| 39 | + if (props.value?.value) { | |
| 40 | + getBase64Image(props.value.value); | |
| 41 | + } | |
| 42 | + } | |
| 43 | + ); | |
| 44 | + | |
| 45 | + const getBase64Image = (url: string) => { | |
| 46 | + let canvas: Nullable<HTMLCanvasElement> = document.createElement('canvas'); | |
| 47 | + const ctx = canvas.getContext('2d'); | |
| 48 | + let image: Nullable<HTMLImageElement> = new Image(); | |
| 49 | + | |
| 50 | + image.onload = function () { | |
| 51 | + canvas!.height = image!.height; | |
| 52 | + canvas!.width = image!.width; | |
| 53 | + ctx?.drawImage(image!, 0, 0); | |
| 54 | + const dataUrl = canvas!.toDataURL('image/png'); | |
| 55 | + getImagBase64.value = dataUrl; | |
| 56 | + image = null; | |
| 57 | + canvas = null; | |
| 58 | + }; | |
| 59 | + image.setAttribute('crossOrigin', 'Anonymous'); | |
| 60 | + image.src = url; | |
| 61 | + }; | |
| 34 | 62 | </script> |
| 35 | 63 | |
| 36 | 64 | <template> |
| 37 | 65 | <section |
| 38 | 66 | class="w-full h-full flex flex-col justify-center items-center justify-between widget-picture" |
| 39 | 67 | > |
| 40 | - <Image :width="getWidth" :src="props?.value?.value || ''" :fallback="fallback" /> | |
| 68 | + <AntImage :width="getWidth" :src="getImagBase64" :fallback="fallback" /> | |
| 69 | + <!-- <Image :style="{ width: `${getWidth}px` }" :src="getImagBase64" /> --> | |
| 41 | 70 | <div |
| 42 | 71 | class="w-full text-center truncate p-5" |
| 43 | 72 | :style="{ fontSize: fontSize({ radio: getRadio, basic: 12, max: 16 }), color: '#999' }" |
| 44 | 73 | > |
| 45 | 74 | <Tooltip |
| 46 | 75 | placement="top" |
| 47 | - :title="props?.value?.updateTime || dateUtil().format(DEFAULT_DATE_FORMAT)" | |
| 76 | + :title="dateUtil(props?.value?.updateTime || new Date()).format(DEFAULT_DATE_FORMAT)" | |
| 48 | 77 | > |
| 49 | 78 | <span>更新时间:</span> |
| 50 | 79 | <span class="truncate"> |
| 51 | - {{ props?.value?.updateTime || dateUtil().format(DEFAULT_DATE_FORMAT) }} | |
| 80 | + {{ dateUtil(props?.value?.updateTime || new Date()).format(DEFAULT_DATE_FORMAT) }} | |
| 52 | 81 | </span> |
| 53 | 82 | </Tooltip> |
| 54 | 83 | </div> | ... | ... |
| ... | ... | @@ -14,5 +14,11 @@ export const transformPictureConfig = ( |
| 14 | 14 | record: DataComponentRecord, |
| 15 | 15 | dataSourceRecord: DataSource |
| 16 | 16 | ) => { |
| 17 | - return {}; | |
| 17 | + const componentInfo = dataSourceRecord.componentInfo; | |
| 18 | + return { | |
| 19 | + value: { | |
| 20 | + value: componentInfo.value, | |
| 21 | + updateTime: componentInfo.updateTime, | |
| 22 | + } as PictureComponentValue, | |
| 23 | + }; | |
| 18 | 24 | }; | ... | ... |
| ... | ... | @@ -228,7 +228,7 @@ |
| 228 | 228 | const loading = ref(false); |
| 229 | 229 | const getDataBoardComponent = async () => { |
| 230 | 230 | try { |
| 231 | - // dataBoardList.value = []; | |
| 231 | + dataBoardList.value = []; | |
| 232 | 232 | loading.value = true; |
| 233 | 233 | const data = await getDataBoradDetail(); |
| 234 | 234 | |
| ... | ... | @@ -327,6 +327,10 @@ |
| 327 | 327 | |
| 328 | 328 | layoutInfo.push({ |
| 329 | 329 | id: _id, |
| 330 | + // x: (unref(layoutInfo).length * 2) % (GirdLayoutColNum || 24), | |
| 331 | + // y: unref(layoutInfo).length + (GirdLayoutColNum || 24), | |
| 332 | + // w: record?.w || DEFAULT_WIDGET_WIDTH, | |
| 333 | + // h: record?.h || DEFAULT_WIDGET_HEIGHT, | |
| 330 | 334 | h: record?.h, |
| 331 | 335 | w: record?.w, |
| 332 | 336 | x: record?.x, | ... | ... |