You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. /**
  2. * @Author: Caven
  3. * @Date: 2020-02-02 15:59:37
  4. */
  5. import State from '@dc-modules/state/State'
  6. import { DomUtil } from '@dc-modules/utils'
  7. import { Layer } from '@dc-modules/layer'
  8. class ChartLayer extends Layer {
  9. constructor(id, option) {
  10. super(id)
  11. this._option = option
  12. this._delegate = DomUtil.create('div', 'dc-chart')
  13. this._chart = undefined
  14. this._setWrapperStyle()
  15. this._state = State.INITIALIZED
  16. }
  17. get type() {
  18. return Layer.getLayerType('chart')
  19. }
  20. get chart() {
  21. return this._chart
  22. }
  23. set show(show) {
  24. this._show = show
  25. if (this._delegate) {
  26. this._delegate.style.visibility = show ? 'visible' : 'hidden'
  27. }
  28. }
  29. get show() {
  30. return this._show
  31. }
  32. /**
  33. *
  34. * @private
  35. */
  36. _setWrapperStyle() {
  37. this._delegate.style.position = 'absolute'
  38. this._delegate.style.top = '0px'
  39. this._delegate.style.left = '0px'
  40. this._delegate.style.pointerEvents = 'none'
  41. this._delegate.setAttribute('id', this._id)
  42. }
  43. /**
  44. *
  45. * @param viewer
  46. */
  47. _onAdd(viewer) {
  48. if (!viewer || !echarts) {
  49. return
  50. }
  51. this._viewer = viewer
  52. this._delegate.style.width = viewer.canvas.width + 'px'
  53. this._delegate.style.height = viewer.canvas.height + 'px'
  54. viewer.dcContainer.appendChild(this._delegate)
  55. echarts.viewer = viewer
  56. viewer.scene.canvas.setAttribute('tabIndex', 0)
  57. this._chart = echarts.init(this._delegate)
  58. this._option && this._chart.setOption(this._option)
  59. this._state = State.ADDED
  60. }
  61. /**
  62. *
  63. * @private
  64. */
  65. _onRemove() {
  66. if (this._delegate && this._viewer) {
  67. this._viewer.dcContainer.removeChild(this._delegate)
  68. this._chart.dispose()
  69. this._state = State.REMOVED
  70. }
  71. }
  72. /**
  73. *
  74. * @param option
  75. * @returns {ChartLayer}
  76. */
  77. setOption(option) {
  78. this._option = option
  79. this._chart && this._chart.setOption(this._option)
  80. return this
  81. }
  82. }
  83. Layer.registerType('chart')
  84. export default ChartLayer