GlobalSetting.vue 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319
  1. <template>
  2. <collapse-item v-if="title" name="标题">
  3. <template #header>
  4. <n-switch
  5. v-show="inChart"
  6. v-model:value="title.show"
  7. size="small"
  8. ></n-switch>
  9. </template>
  10. <setting-item-box name="标题">
  11. <setting-item name="颜色">
  12. <n-color-picker
  13. v-model:value="title.textStyle.color"
  14. size="small"
  15. ></n-color-picker>
  16. </setting-item>
  17. <setting-item name="大小">
  18. <n-input-number
  19. v-model:value="title.textStyle.fontSize"
  20. :min="1"
  21. size="small"
  22. ></n-input-number>
  23. </setting-item>
  24. </setting-item-box>
  25. <setting-item-box name="副标题">
  26. <setting-item name="颜色">
  27. <n-color-picker
  28. size="small"
  29. v-model:value="title.subtextStyle.color"
  30. ></n-color-picker>
  31. </setting-item>
  32. <setting-item name="大小">
  33. <n-input-number
  34. v-model:value="title.subtextStyle.fontSize"
  35. :min="1"
  36. size="small"
  37. ></n-input-number>
  38. </setting-item>
  39. </setting-item-box>
  40. </collapse-item>
  41. <collapse-item v-if="xAxis" name="X轴">
  42. <template #header>
  43. <n-switch
  44. v-show="inChart"
  45. v-model:value="xAxis.show"
  46. size="small"
  47. ></n-switch>
  48. </template>
  49. <setting-item-box name="名称">
  50. <setting-item name="颜色">
  51. <n-color-picker
  52. size="small"
  53. v-model:value="xAxis.nameTextStyle.color"
  54. ></n-color-picker>
  55. </setting-item>
  56. </setting-item-box>
  57. <setting-item-box name="标签">
  58. <setting-item v-show="inChart" name="展示">
  59. <n-space>
  60. <n-switch
  61. v-model:value="xAxis.axisLabel.show"
  62. size="small"
  63. ></n-switch>
  64. </n-space>
  65. </setting-item>
  66. <setting-item name="颜色">
  67. <n-color-picker
  68. size="small"
  69. v-model:value="xAxis.axisLabel.color"
  70. ></n-color-picker>
  71. </setting-item>
  72. </setting-item-box>
  73. <setting-item-box name="轴线">
  74. <setting-item name="颜色">
  75. <n-color-picker
  76. v-model:value="xAxis.axisLine.lineStyle.color"
  77. size="small"
  78. ></n-color-picker>
  79. </setting-item>
  80. <setting-item name="粗细">
  81. <n-input-number
  82. v-model:value="xAxis.axisLine.lineStyle.width"
  83. :min="1"
  84. size="small"
  85. ></n-input-number>
  86. </setting-item>
  87. <setting-item name="对齐零">
  88. <n-space>
  89. <n-switch
  90. v-model:value="xAxis.axisLine.onZero"
  91. size="small"
  92. ></n-switch>
  93. </n-space>
  94. </setting-item>
  95. </setting-item-box>
  96. <setting-item-box name="刻度">
  97. <setting-item v-show="inChart" name="展示">
  98. <n-space>
  99. <n-switch v-model:value="xAxis.axisTick.show" size="small"></n-switch>
  100. </n-space>
  101. </setting-item>
  102. <setting-item name="长度">
  103. <n-input-number
  104. v-model:value="xAxis.axisTick.length"
  105. :min="1"
  106. size="small"
  107. ></n-input-number>
  108. </setting-item>
  109. </setting-item-box>
  110. <setting-item-box name="分割线">
  111. <setting-item v-show="inChart" name="展示">
  112. <n-space>
  113. <n-switch
  114. v-model:value="xAxis.splitLine.show"
  115. size="small"
  116. ></n-switch>
  117. </n-space>
  118. </setting-item>
  119. <setting-item name="颜色">
  120. <n-color-picker
  121. v-model:value="xAxis.splitLine.lineStyle.color"
  122. size="small"
  123. ></n-color-picker>
  124. </setting-item>
  125. <setting-item name="粗细">
  126. <n-input-number
  127. v-model:value="xAxis.splitLine.lineStyle.width"
  128. :min="1"
  129. size="small"
  130. ></n-input-number>
  131. </setting-item>
  132. <setting-item name="类型">
  133. <n-select
  134. v-model:value="xAxis.splitLine.lineStyle.type"
  135. size="small"
  136. :options="axisConfig.splitLint.lineStyle.type"
  137. ></n-select>
  138. </setting-item>
  139. <setting-item name="位置">
  140. <n-select
  141. v-model:value="xAxis.position"
  142. size="small"
  143. :options="axisConfig.xposition"
  144. ></n-select>
  145. </setting-item>
  146. </setting-item-box>
  147. </collapse-item>
  148. <collapse-item v-if="yAxis" name="Y轴">
  149. <template #header>
  150. <n-switch
  151. v-show="inChart"
  152. v-model:value="yAxis.show"
  153. size="small"
  154. ></n-switch>
  155. </template>
  156. <setting-item-box name="名称">
  157. <setting-item name="颜色">
  158. <n-color-picker
  159. size="small"
  160. v-model:value="yAxis.nameTextStyle.color"
  161. ></n-color-picker>
  162. </setting-item>
  163. </setting-item-box>
  164. <setting-item-box name="标签">
  165. <setting-item v-show="inChart" name="展示">
  166. <n-space>
  167. <n-switch
  168. v-model:value="yAxis.axisLabel.show"
  169. size="small"
  170. ></n-switch>
  171. </n-space>
  172. </setting-item>
  173. <setting-item name="颜色">
  174. <n-color-picker
  175. size="small"
  176. v-model:value="yAxis.axisLabel.color"
  177. ></n-color-picker>
  178. </setting-item>
  179. </setting-item-box>
  180. <setting-item-box name="轴线">
  181. <setting-item v-show="inChart" name="展示">
  182. <n-space>
  183. <n-switch v-model:value="yAxis.axisLine.show" size="small"></n-switch>
  184. </n-space>
  185. </setting-item>
  186. <setting-item name="颜色">
  187. <n-color-picker
  188. v-model:value="yAxis.axisLine.lineStyle.color"
  189. size="small"
  190. ></n-color-picker>
  191. </setting-item>
  192. <setting-item name="粗细">
  193. <n-input-number
  194. v-model:value="yAxis.axisLine.lineStyle.width"
  195. :min="1"
  196. size="small"
  197. ></n-input-number>
  198. </setting-item>
  199. <setting-item name="对齐零">
  200. <n-space>
  201. <n-switch
  202. v-model:value="yAxis.axisLine.onZero"
  203. size="small"
  204. ></n-switch>
  205. </n-space>
  206. </setting-item>
  207. </setting-item-box>
  208. <setting-item-box name="刻度">
  209. <setting-item v-show="inChart" name="展示">
  210. <n-space>
  211. <n-switch v-model:value="yAxis.axisTick.show" size="small"></n-switch>
  212. </n-space>
  213. </setting-item>
  214. <setting-item name="长度">
  215. <n-input-number
  216. v-model:value="yAxis.axisTick.length"
  217. :min="1"
  218. size="small"
  219. ></n-input-number>
  220. </setting-item>
  221. </setting-item-box>
  222. <setting-item-box name="分割线">
  223. <setting-item v-show="inChart" name="展示">
  224. <n-space>
  225. <n-switch
  226. v-model:value="yAxis.splitLine.show"
  227. size="small"
  228. ></n-switch>
  229. </n-space>
  230. </setting-item>
  231. <setting-item name="颜色">
  232. <n-color-picker
  233. v-model:value="yAxis.splitLine.lineStyle.color"
  234. size="small"
  235. ></n-color-picker>
  236. </setting-item>
  237. <setting-item name="粗细">
  238. <n-input-number
  239. v-model:value="yAxis.splitLine.lineStyle.width"
  240. :min="1"
  241. size="small"
  242. ></n-input-number>
  243. </setting-item>
  244. <setting-item name="类型">
  245. <n-select
  246. v-model:value="yAxis.splitLine.lineStyle.type"
  247. size="small"
  248. :options="axisConfig.splitLint.lineStyle.type"
  249. ></n-select>
  250. </setting-item>
  251. <setting-item name="位置">
  252. <n-select
  253. v-model:value="yAxis.position"
  254. size="small"
  255. :options="axisConfig.yposition"
  256. ></n-select>
  257. </setting-item>
  258. </setting-item-box>
  259. </collapse-item>
  260. <collapse-item v-if="legend" name="图例">
  261. <template #header>
  262. <n-switch
  263. v-show="inChart"
  264. v-model:value="legend.show"
  265. size="small"
  266. ></n-switch>
  267. </template>
  268. <setting-item-box name="图例文字">
  269. <setting-item>
  270. <n-color-picker
  271. size="small"
  272. v-model:value="legend.textStyle.color"
  273. ></n-color-picker>
  274. </setting-item>
  275. </setting-item-box>
  276. </collapse-item>
  277. </template>
  278. <script setup lang="ts">
  279. import { PropType, computed } from 'vue'
  280. import { GlobalThemeJsonType } from '@/settings/chartThemes/index'
  281. import { axisConfig } from '@/packages/chartConfiguration/echarts/index'
  282. import {
  283. CollapseItem,
  284. SettingItemBox,
  285. SettingItem
  286. } from '@/components/Pages/ChartItemSetting'
  287. const props = defineProps({
  288. optionData: {
  289. type: Object as PropType<GlobalThemeJsonType>,
  290. required: true
  291. },
  292. inChart: {
  293. type: Boolean,
  294. required: false,
  295. default: false
  296. }
  297. })
  298. const title = computed(() => {
  299. return props.optionData.title
  300. })
  301. const xAxis = computed(() => {
  302. return props.optionData.xAxis
  303. })
  304. const yAxis = computed(() => {
  305. return props.optionData.yAxis
  306. })
  307. const legend = computed(() => {
  308. return props.optionData.legend
  309. })
  310. </script>