Commit 04b6bc4d42d3d4dfcfc1f8854315683432d664df

Authored by ww
1 parent 68e49550

fix: pictureComponent can not show image

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,
... ...