config.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. <template>
  2. <!-- Echarts 全局设置 -->
  3. <global-setting :optionData="optionData"></global-setting>
  4. <CollapseItem name="饼图配置" :expanded="true">
  5. <SettingItemBox name="类型">
  6. <SettingItem>
  7. <n-select v-model:value="optionData.type" size="small" :options="fontWeightOptions" />
  8. </SettingItem>
  9. </SettingItemBox>
  10. <SettingItemBox name="动画" :alone="true">
  11. <SettingItem>
  12. <n-space>
  13. <n-switch v-model:value="optionData.isCarousel" size="small"></n-switch>
  14. <n-text>开启<n-text :depth="3">(将自动隐藏图例)</n-text></n-text>
  15. </n-space>
  16. </SettingItem>
  17. <SettingItem>
  18. <n-text :depth="3">无鼠标点击图例场景时,可强行打开图例</n-text>
  19. </SettingItem>
  20. </SettingItemBox>
  21. <SettingItemBox name="标签">
  22. <SettingItem>
  23. <n-space>
  24. <n-switch v-model:value="optionData.series[0].label.show" size="small"></n-switch>
  25. <n-text>展示标签</n-text>
  26. </n-space>
  27. </SettingItem>
  28. <setting-item>
  29. <n-space>
  30. <n-switch v-model:value="optionData.series[0].labelLine.show" size="small"></n-switch>
  31. <n-text>引导线</n-text>
  32. </n-space>
  33. </setting-item>
  34. <SettingItem name="位置">
  35. <n-select v-model:value="optionData.series[0].label.position" size="small" :options="labelConfig.position" />
  36. </SettingItem>
  37. <setting-item name="展示类型">
  38. <n-select v-model:value="optionData.series[0].label.formatter" size="small" :options="labelFormatterOptions" />
  39. </setting-item>
  40. <setting-item name="标签颜色">
  41. <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.series[0].label.color"></n-color-picker>
  42. </setting-item>
  43. </SettingItemBox>
  44. <setting-item-box name="圆角">
  45. <setting-item>
  46. <n-space>
  47. <n-input-number
  48. v-model:value="optionData.series[0].itemStyle.borderRadius"
  49. size="small"
  50. :min="0"
  51. ></n-input-number>
  52. <n-text>圆角大小</n-text>
  53. </n-space>
  54. </setting-item>
  55. <setting-item>
  56. <n-space>
  57. <n-input-number
  58. v-model:value="optionData.series[0].itemStyle.borderWidth"
  59. size="small"
  60. :min="0"
  61. ></n-input-number>
  62. <n-text>线条宽度</n-text>
  63. </n-space>
  64. </setting-item>
  65. </setting-item-box>
  66. </CollapseItem>
  67. </template>
  68. <script setup lang="ts">
  69. import { PropType, watch } from 'vue'
  70. import { GlobalThemeJsonType } from '@/settings/chartThemes/index'
  71. import { GlobalSetting, CollapseItem, SettingItemBox, SettingItem } from '@/components/Pages/ChartItemSetting'
  72. import { PieTypeObject, PieTypeEnum } from './config'
  73. import { labelConfig } from '@/packages/chartConfiguration/echarts'
  74. const props = defineProps({
  75. optionData: {
  76. type: Object as PropType<GlobalThemeJsonType>,
  77. required: true
  78. }
  79. })
  80. const fontWeightOptions = [
  81. {
  82. label: PieTypeEnum.NORMAL,
  83. value: PieTypeObject[PieTypeEnum.NORMAL]
  84. },
  85. {
  86. label: PieTypeEnum.RING,
  87. value: PieTypeObject[PieTypeEnum.RING]
  88. },
  89. {
  90. label: PieTypeEnum.ROSE,
  91. value: PieTypeObject[PieTypeEnum.ROSE]
  92. }
  93. ]
  94. const labelFormatterOptions = [
  95. { label: '数据名', value: '{b}' },
  96. { label: '百分比', value: '{d}' },
  97. { label: '列名:百分比', value: '{b}:{d}%' },
  98. { label: '列名:数据值(data1)', value: '{b}:{@data1}' },
  99. { label: '数据值(data1)', value: '{@data1}' }
  100. ]
  101. </script>