config.vue 4.2 KB
<template>
  <div>
    
    <CollapseItem :name="t('charts.chart.relationship')" :expanded="true">
      <SettingItemBox :name="t('common.styleText')">
        <setting-item :name="t('common.layoutText')">
          <n-select v-model:value="graphConfig.layout" :options="GraphLayout" size="small" />
        </setting-item>
      </SettingItemBox>
      <SettingItemBox :name="t('common.labelText')">
        <setting-item :name="t('common.showText')">
          <n-select v-model:value="graphConfig.label.show" :options="LabelSwitch" size="small" />
        </setting-item>
        <setting-item :name="t('common.positionText')">
          <n-select v-model:value="graphConfig.label.position" :options="LabelPosition" size="small" />
        </setting-item>
      </SettingItemBox>
      
      <SettingItemBox :name="t('charts.chart.lineText')">
        <SettingItem :name="t('charts.chart.arc')">
        <!-- 需要输入两位的小数才会变化 -->
          <n-input-number
          v-model:value="optionData.series[0].lineStyle.curveness"
          :min="0"
          :step="0.01"
          :placeholder="t('charts.chart.bending')"
          size="small"
        ></n-input-number>
        </SettingItem>
      </SettingItemBox>
      <SettingItemBox :name="t('charts.chart.legend')">
        <SettingItem :name="t('common.colorText')">
          <n-color-picker
            size="small"
            :modes="['hex']"
            v-model:value="optionData.legend.textStyle.color"
        ></n-color-picker>
        </SettingItem>
        <SettingItem :name="t('common.textText')">
          <n-input-number
            v-model:value="optionData.legend.textStyle.fontSize"
            :min="0"
            :step="1"
            size="small"
            :placeholder="t('common.fontSizeText')"
          >
          </n-input-number>
        </SettingItem>
      </SettingItemBox>
      <SettingItemBox :name="t('charts.chart.force')" v-if="optionData.series[0].force && graphConfig.layout == 'force'">
        <SettingItem :name="t('charts.chart.factor')" v-if="optionData.series[0].force.repulsion">
          <n-input-number
            v-model:value="optionData.series[0].force.repulsion"
            :min="0"
            :step="1"
            size="small"
            :placeholder="t('charts.chart.factorSize')"
          >
          </n-input-number>
        </SettingItem>
        <SettingItem :name="t('charts.chart.gravitational')" v-if="optionData.series[0].force.gravity">
          <n-input-number
            v-model:value="optionData.series[0].force.gravity"
            :min="0"
            :step="0.1"
            size="small"
            :placeholder="t('charts.chart.gravitational')"
          >
          </n-input-number>
        </SettingItem>
        <SettingItem :name="t('charts.chart.nodeDistance')">
          <n-input-number
            v-model:value="optionData.series[0].force.edgeLength"
            :min="0"
            :step="1"
            size="small"
            :placeholder="t('charts.chart.nodeDistance')"
          >
          </n-input-number>
        </SettingItem>
        <SettingItem :name="t('charts.chart.iterative')">
          <n-select v-model:value="graphConfig.force.layoutAnimation" :options="LayoutAnimation" size="small" />
        </SettingItem>
        <SettingItem :name="t('charts.chart.nodal')">
          <n-input-number
            v-model:value="optionData.series[0].force.friction"
            :min="0"
            :step="0.1"
            size="small"
            :placeholder="t('charts.chart.nodal')"
          >
          </n-input-number>
        </SettingItem>
      </SettingItemBox>
    </CollapseItem>
  </div>
</template>

<script setup lang="ts">
import { PropType, computed } from 'vue'
import { CollapseItem, SettingItemBox, SettingItem } from '@/components/Pages/ChartItemSetting'
import { option, GraphLayout, LabelSwitch, LabelPosition, LayoutAnimation } from './config'
import { GlobalThemeJsonType } from '@/settings/chartThemes/index'

const props = defineProps({
  optionData: {
    type: Object as PropType<typeof option & GlobalThemeJsonType>,
    required: true
  }
})
const t = window['$t']

const graphConfig = computed<(typeof option.series)[0]>(() => {
  return props.optionData.series[0]
})
</script>