config.vue 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <template>
  2. <collapse-item name="信息" :expanded="true">
  3. <setting-item-box name="文字" :alone="true">
  4. <setting-item>
  5. <n-input v-model:value="optionData.dataset" size="small"></n-input>
  6. </setting-item>
  7. </setting-item-box>
  8. <setting-item-box name="链接" :alone="true">
  9. <setting-item>
  10. <n-input-group>
  11. <n-select
  12. v-model:value="optionData.linkHead"
  13. size="small"
  14. :style="{ width: '80%' }"
  15. :options="linkHeadOptions"
  16. />
  17. <n-input v-model:value="optionData.link" size="small"></n-input>
  18. <n-button :disabled="!optionData.link" secondary size="small" @click="handleLinkClick">跳转</n-button>
  19. </n-input-group>
  20. </setting-item>
  21. </setting-item-box>
  22. </collapse-item>
  23. <collapse-item name="样式" :expanded="true">
  24. <setting-item-box name="文字">
  25. <setting-item name="颜色">
  26. <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.fontColor"></n-color-picker>
  27. </setting-item>
  28. <setting-item name="字体大小">
  29. <n-input-number v-model:value="optionData.fontSize" size="small" placeholder="字体大小"></n-input-number>
  30. </setting-item>
  31. <setting-item name="X轴内边距">
  32. <n-input-number v-model:value="optionData.paddingX" size="small" placeholder="输入内边距"></n-input-number>
  33. </setting-item>
  34. <setting-item name="Y轴内边距">
  35. <n-input-number v-model:value="optionData.paddingY" size="small" placeholder="输入内边距"></n-input-number>
  36. </setting-item>
  37. <setting-item name="水平对齐">
  38. <n-select v-model:value="optionData.textAlign" size="small" :options="textAlignOptions" />
  39. </setting-item>
  40. <setting-item name="文本方向">
  41. <n-select v-model:value="optionData.writingMode" size="small" :options="verticalOptions" />
  42. </setting-item>
  43. <setting-item name="字间距">
  44. <n-input-number v-model:value="optionData.letterSpacing" size="small" placeholder="输入字间距"></n-input-number>
  45. </setting-item>
  46. </setting-item-box>
  47. <setting-item-box name="边框">
  48. <setting-item name="宽度">
  49. <n-input-number
  50. v-model:value="optionData.borderWidth"
  51. size="small"
  52. :min="0"
  53. placeholder="宽度"
  54. ></n-input-number>
  55. </setting-item>
  56. <setting-item name="颜色">
  57. <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.borderColor"></n-color-picker>
  58. </setting-item>
  59. <setting-item name="圆角">
  60. <n-input-number
  61. v-model:value="optionData.borderRadius"
  62. size="small"
  63. :min="0"
  64. placeholder="圆角"
  65. ></n-input-number>
  66. </setting-item>
  67. </setting-item-box>
  68. <setting-item-box name="背景" :alone="true">
  69. <setting-item name="背景颜色">
  70. <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.backgroundColor"></n-color-picker>
  71. </setting-item>
  72. </setting-item-box>
  73. </collapse-item>
  74. </template>
  75. <script setup lang="ts">
  76. import { PropType } from 'vue'
  77. import { option, WritingModeEnum, WritingModeObject } from './config'
  78. import { CollapseItem, SettingItemBox, SettingItem } from '@/components/Pages/ChartItemSetting'
  79. const props = defineProps({
  80. optionData: {
  81. type: Object as PropType<typeof option>,
  82. required: true
  83. }
  84. })
  85. const textAlignOptions = [
  86. { label: '左对齐', value: 'start' },
  87. { label: '居中', value: 'center' },
  88. { label: '右对齐', value: 'end' }
  89. ]
  90. const verticalOptions = [
  91. {
  92. label: WritingModeEnum.HORIZONTAL,
  93. value: WritingModeObject[WritingModeEnum.HORIZONTAL]
  94. },
  95. {
  96. label: WritingModeEnum.VERTICAL,
  97. value: WritingModeObject[WritingModeEnum.VERTICAL]
  98. }
  99. ]
  100. const handleLinkClick = () => {
  101. window.open(props.optionData.linkHead + props.optionData.link)
  102. }
  103. const linkHeadOptions = [
  104. { label: 'http://', value: 'http://' },
  105. { label: 'https://', value: 'https://' }
  106. ]
  107. </script>