Config.vue 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. <template>
  2. <div class="chart-config">
  3. <div class="config-tab">
  4. <Tabs v-model:activeKey="activeTab" size="small" centered>
  5. <TabPane key="1">
  6. <template #tab>
  7. <DatabaseOutlined />
  8. <span>数据设置</span>
  9. </template>
  10. </TabPane>
  11. <TabPane key="2">
  12. <template #tab>
  13. <SkinOutlined />
  14. <span>样式设置</span>
  15. </template>
  16. </TabPane>
  17. </Tabs>
  18. </div>
  19. <DataConfig v-if="activeTab === '1'" :dataSource="dataSource" @change="handleDataSourceChange"/>
  20. <CusForm v-if="activeTab === '2'" :columns="formItems" @change="handleFormChange"/>
  21. </div>
  22. </template>
  23. <script setup lang="ts">
  24. import { ref, defineProps, defineEmits } from 'vue';
  25. import { Tabs, TabPane } from 'ant-design-vue';
  26. import { DatabaseOutlined, SkinOutlined } from '@ant-design/icons-vue';
  27. import DataConfig from '../../../DataConfig.vue';
  28. import { CusForm, IFormItem } from '../../../../cusForm';
  29. import { basicBarProps } from './props';
  30. import { chartFormItemsMap } from '../../../config/chartFormItemsMap';
  31. const props = defineProps(basicBarProps);
  32. const activeTab = ref('1');
  33. const emit = defineEmits(['change']);
  34. const formItems = [
  35. chartFormItemsMap.title,
  36. chartFormItemsMap.legend,
  37. // chartFormItemsMap.label,
  38. {
  39. ...chartFormItemsMap.series,
  40. children: [
  41. ...(chartFormItemsMap.serie.children as IFormItem[]),
  42. {
  43. label: "样式",
  44. prop: "",
  45. type: "divider",
  46. },
  47. {
  48. label: "固定柱宽",
  49. prop: "serieBarFixedWidth",
  50. type: "radioGroup",
  51. fieldProps: {
  52. options: [
  53. { label: "是", value: true },
  54. { label: "否", value: false },
  55. ],
  56. },
  57. defaultValue: false,
  58. },
  59. {
  60. label: "系列间隔",
  61. prop: "serieGap",
  62. type: "slider",
  63. defaultValue: 20,
  64. },
  65. {
  66. label: "分类间隔",
  67. prop: "categoryGap",
  68. type: "slider",
  69. defaultValue: 20,
  70. },
  71. {
  72. label: "边框",
  73. prop: "",
  74. type: "divider",
  75. },
  76. {
  77. label: "线宽",
  78. prop: "serieBorderWidth",
  79. type: "inputNumber",
  80. fieldProps: {
  81. addonAfter: "px",
  82. },
  83. defaultValue: 0,
  84. },
  85. {
  86. label: "颜色",
  87. prop: "serieBorderColor",
  88. type: "colorSelect",
  89. defaultValue: "#ccc",
  90. },
  91. {
  92. label: "圆角",
  93. prop: "serieBorderRadius",
  94. type: "inputNumber",
  95. fieldProps: {
  96. addonAfter: "px",
  97. },
  98. defaultValue: 0,
  99. },
  100. ]
  101. },
  102. chartFormItemsMap.xAxis,
  103. chartFormItemsMap.yAxis,
  104. chartFormItemsMap.tooltip,
  105. chartFormItemsMap.background
  106. ]
  107. const handleDataSourceChange = (data: any) => {
  108. emit('change', {
  109. ...props,
  110. dataSource: data,
  111. });
  112. }
  113. const handleFormChange = (data: any) => {
  114. console.log('form change:', data);
  115. emit('change', {
  116. ...props,
  117. ...data
  118. });
  119. }
  120. </script>
  121. <style lang="less" scoped>
  122. .config-tab {
  123. text-align: center;
  124. margin-bottom: 12px;
  125. }
  126. </style>