Commit 04b6bc4d42d3d4dfcfc1f8854315683432d664df
1 parent
68e49550
fix: pictureComponent can not show image
Showing
3 changed files
with
49 additions
and
10 deletions
1 | <script lang="ts" setup> | 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 | import { | 4 | import { |
5 | DEFAULT_DATE_FORMAT, | 5 | DEFAULT_DATE_FORMAT, |
6 | DEFAULT_RADIO_RECORD, | 6 | DEFAULT_RADIO_RECORD, |
@@ -19,6 +19,8 @@ | @@ -19,6 +19,8 @@ | ||
19 | const fallback = | 19 | const fallback = |
20 | 'data:image/png;base64,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'; | 20 | 'data:image/png;base64,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'; |
21 | 21 | ||
22 | + const getImagBase64 = ref(fallback); | ||
23 | + | ||
22 | const getRadio = computed(() => { | 24 | const getRadio = computed(() => { |
23 | const { radio } = props.radio || DEFAULT_RADIO_RECORD; | 25 | const { radio } = props.radio || DEFAULT_RADIO_RECORD; |
24 | return radio; | 26 | return radio; |
@@ -26,29 +28,56 @@ | @@ -26,29 +28,56 @@ | ||
26 | 28 | ||
27 | const getWidth = computed(() => { | 29 | const getWidth = computed(() => { |
28 | const marign = 5; | 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 | return width > height - offsetHight ? height - offsetHight - marign : width - marign; | 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 | </script> | 62 | </script> |
35 | 63 | ||
36 | <template> | 64 | <template> |
37 | <section | 65 | <section |
38 | class="w-full h-full flex flex-col justify-center items-center justify-between widget-picture" | 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 | <div | 70 | <div |
42 | class="w-full text-center truncate p-5" | 71 | class="w-full text-center truncate p-5" |
43 | :style="{ fontSize: fontSize({ radio: getRadio, basic: 12, max: 16 }), color: '#999' }" | 72 | :style="{ fontSize: fontSize({ radio: getRadio, basic: 12, max: 16 }), color: '#999' }" |
44 | > | 73 | > |
45 | <Tooltip | 74 | <Tooltip |
46 | placement="top" | 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 | <span>更新时间:</span> | 78 | <span>更新时间:</span> |
50 | <span class="truncate"> | 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 | </span> | 81 | </span> |
53 | </Tooltip> | 82 | </Tooltip> |
54 | </div> | 83 | </div> |
@@ -14,5 +14,11 @@ export const transformPictureConfig = ( | @@ -14,5 +14,11 @@ export const transformPictureConfig = ( | ||
14 | record: DataComponentRecord, | 14 | record: DataComponentRecord, |
15 | dataSourceRecord: DataSource | 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,7 +228,7 @@ | ||
228 | const loading = ref(false); | 228 | const loading = ref(false); |
229 | const getDataBoardComponent = async () => { | 229 | const getDataBoardComponent = async () => { |
230 | try { | 230 | try { |
231 | - // dataBoardList.value = []; | 231 | + dataBoardList.value = []; |
232 | loading.value = true; | 232 | loading.value = true; |
233 | const data = await getDataBoradDetail(); | 233 | const data = await getDataBoradDetail(); |
234 | 234 | ||
@@ -327,6 +327,10 @@ | @@ -327,6 +327,10 @@ | ||
327 | 327 | ||
328 | layoutInfo.push({ | 328 | layoutInfo.push({ |
329 | id: _id, | 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 | h: record?.h, | 334 | h: record?.h, |
331 | w: record?.w, | 335 | w: record?.w, |
332 | x: record?.x, | 336 | x: record?.x, |