echartFull.vue 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <template>
  2. <v-dialog v-model="dialogVisible" width="95%">
  3. <v-card max-height="80vh">
  4. <v-card-title>
  5. <v-btn icon absolute right @click="close" class="mt-5">
  6. <v-icon size="30">mdi-close</v-icon>
  7. </v-btn>
  8. </v-card-title>
  9. <div id="dialogBox" style="background-color: #fff;">
  10. <div v-if="sized" :id="domId"></div>
  11. </div>
  12. </v-card>
  13. </v-dialog>
  14. </template>
  15. <script>
  16. import { generateUUID } from '@/utils'
  17. export default {
  18. name: 'echartFull',
  19. data () {
  20. return {
  21. dialogVisible: false,
  22. title: '',
  23. sized: false,
  24. val: {},
  25. chart: {},
  26. domId: generateUUID()
  27. }
  28. },
  29. props: {
  30. data: {},
  31. yCategory: {}
  32. },
  33. watch: {
  34. sized: {
  35. handler (val, oldVal) {
  36. if (Object.keys(this.chart).length > 0 && !oldVal) {
  37. this.chart.dispose()
  38. }
  39. if (val) {
  40. this.$nextTick(() => {
  41. this.domId = generateUUID()
  42. this.getDom(this.val)
  43. })
  44. }
  45. }
  46. }
  47. },
  48. methods: {
  49. close () {
  50. this.dialogVisible = false
  51. this.sized = false
  52. this.chart.dispose()
  53. this.domId = generateUUID()
  54. },
  55. show (title, val) {
  56. this.$emit('fullscreen')
  57. this.dialogVisible = true
  58. this.title = title
  59. this.sized = true
  60. this.val = val
  61. },
  62. getDom (val) {
  63. const _this = this
  64. this.$nextTick(() => {
  65. const self = document.getElementById(_this.domId)
  66. this.chart = _this.$echarts.init(self)
  67. this.chart.setOption(val)
  68. // 图表大小自适应
  69. // window.addEventListener('resize', () => {
  70. // this.chart.resize()
  71. // })
  72. })
  73. val.toolbox[0].feature.myTool.show = false
  74. }
  75. }
  76. }
  77. </script>
  78. <style>
  79. #dialogBox>div {
  80. width: 95%;
  81. height: 72vh;
  82. }
  83. </style>