ny
23 小时以前 282fbc6488f4e8ceb5fda759f963ee88fbf7b999
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
91
92
93
<script lang="ts" setup>
import { computed, onMounted, reactive, toRefs } from 'vue';
 
import { cloneDeep } from 'lodash-es';
import { Vue3Marquee } from 'vue3-marquee';
 
import { getDataInterfaceRes } from '#/api/systemData/dataInterface';
import { getParamList } from '#/utils/jnpf';
 
import CardHeader from '../CardHeader/index.vue';
import webLink from '../Link/index.vue';
 
interface State {
  urlAddress: string;
}
 
const props = defineProps(['activeData']);
const state = reactive<State>({
  urlAddress: '',
});
const { urlAddress } = toRefs(state);
const getValue = computed(() => props.activeData.option.defaultValue);
 
function initData() {
  if (props.activeData.dataType === 'dynamic') {
    props.activeData.option.defaultValue = '';
    const propsApi = props.activeData.propsApi;
    if (!propsApi) return;
    const query = { paramList: getParamList(props.activeData.templateJson) };
    getDataInterfaceRes(propsApi, query).then((res) => {
      props.activeData.option.defaultValue = res.data;
      resolvedURL();
    });
  } else {
    resolvedURL();
  }
}
function resolvedURL() {
  const urlAddress = cloneDeep(props.activeData.option.urlAddress);
  // eslint-disable-next-line no-template-curly-in-string
  state.urlAddress = urlAddress.replace('${field}', props.activeData.option.defaultValue);
}
 
onMounted(() => {
  initData();
});
</script>
<template>
  <a-card class="portal-card-box">
    <template #title v-if="activeData.title">
      <CardHeader :title="activeData.title" :card="activeData.card" />
    </template>
    <div class="portal-card-body" :style="{ background: activeData.option.textBgColor }">
      <web-link
        :link-type="activeData.option.linkType"
        :url-address="urlAddress"
        :link-target="activeData.option.linkTarget"
        :type="activeData.option.type"
        :property-json="activeData.option.propertyJson"
        :key="activeData.renderKey">
        <div
          class="text"
          v-if="activeData.option.styleType == 1"
          :style="{
            color: activeData.option.textFontColor,
            'font-size': `${activeData.option.textFontSize}px`,
            'text-align': activeData.option.textLeft,
            'font-weight': activeData.option.textFontWeight ? 'bolder' : 'normal',
            'font-style': activeData.option.textFontStyle ? 'italic' : '',
            'text-decoration': activeData.option.textUnderLine,
            cursor: activeData.option.linkType ? 'pointer' : '',
          }">
          <Vue3Marquee
            :style="{ 'text-decoration': activeData.option.textUnderLine }"
            :key="activeData.renderKey"
            :vertical="activeData.option.textAutoplayMode !== 'left'"
            :duration="activeData.option.textAutoplaySpeed / (activeData.option.textAutoplayMode == 'left' ? 10 : 50)"
            v-if="activeData.option.textAutoplay && getValue">
            {{ getValue }}
          </Vue3Marquee>
          <span v-else>{{ getValue }}</span>
        </div>
        <div class="text" v-else v-html="getValue"></div>
      </web-link>
    </div>
  </a-card>
</template>
<style lang="scss" scoped>
.text {
  margin: 15px;
  line-height: 1.5;
}
</style>