widget.vue 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. <!--
  2. * @Author: lide1202@hotmail.com
  3. * @Date: 2021-3-13 11:04:24
  4. * @Last Modified by: lide1202@hotmail.com
  5. * @Last Modified time: 2021-3-13 11:04:24
  6. !-->
  7. <template>
  8. <avue-draggable
  9. :step="step"
  10. :width="widgetsWidth"
  11. :height="widgetsHeight"
  12. :left="widgetsLeft"
  13. :top="widgetsTop"
  14. ref="draggable"
  15. :index="index"
  16. :z-index="-1"
  17. @focus="handleFocus"
  18. @blur="handleBlur"
  19. >
  20. <component :is="type" :value="value" />
  21. </avue-draggable>
  22. </template>
  23. <script>
  24. import widgetHref from "./widgetHref.vue";
  25. import widgetText from "./widgetText.vue";
  26. import WidgetMarquee from "./widgetMarquee.vue";
  27. import widgetTime from "./widgetTime.vue";
  28. import widgetImage from "./widgetImage.vue";
  29. import widgetSlider from "./widgetSlider.vue";
  30. import widgetVideo from "./widgetVideo.vue";
  31. import WidgetIframe from "./widgetIframe.vue";
  32. import widgetBarchart from "./bar/widgetBarchart.vue";
  33. import widgetGradientColorBarchart from "./bar/widgetGradientColorBarchart.vue";
  34. import widgetLinechart from "./line/widgetLinechart.vue";
  35. import widgetBarlinechart from "./bar/widgetBarlinechart";
  36. import WidgetPiechart from "./pie/widgetPiechart.vue";
  37. import WidgetFunnel from "./widgetFunnel.vue";
  38. import WidgetGauge from "./percent/widgetGauge.vue";
  39. import WidgetPieNightingaleRoseArea from "./pie/widgetPieNightingaleRose";
  40. import widgetTable from "./widgetTable.vue";
  41. import widgetLineMap from "./map/widgetLineMap.vue";
  42. import widgetPiePercentageChart from "./percent/widgetPiePercentageChart";
  43. import widgetAirBubbleMap from "./map/widgetAirBubbleMap";
  44. import widgetBarStackChart from "./bar/widgetBarStackChart";
  45. import widgetLineStackChart from "./line/widgetLineStackChart";
  46. import widgetBarCompareChart from "./bar/widgetBarCompareChart";
  47. import widgetLineCompareChart from "./line/widgetLineCompareChart";
  48. import widgetDecoratePieChart from "./decorate/widgetDecoratePieChart";
  49. import widgetMoreBarLineChart from "./bar/widgetMoreBarLineChart";
  50. import widgetWordCloud from "./wordcloud/widgetWordCloud";
  51. import widgetHeatmap from "./heatmap/widgetHeatmap";
  52. export default {
  53. name: "Widget",
  54. components: {
  55. widgetHref,
  56. widgetText,
  57. WidgetMarquee,
  58. widgetTime,
  59. widgetImage,
  60. widgetSlider,
  61. widgetVideo,
  62. WidgetIframe,
  63. widgetBarchart,
  64. widgetGradientColorBarchart,
  65. widgetLinechart,
  66. widgetBarlinechart,
  67. WidgetPiechart,
  68. WidgetFunnel,
  69. WidgetGauge,
  70. WidgetPieNightingaleRoseArea,
  71. widgetTable,
  72. widgetLineMap,
  73. widgetPiePercentageChart,
  74. widgetAirBubbleMap,
  75. widgetBarStackChart,
  76. widgetLineStackChart,
  77. widgetBarCompareChart,
  78. widgetLineCompareChart,
  79. widgetDecoratePieChart,
  80. widgetMoreBarLineChart,
  81. widgetWordCloud,
  82. widgetHeatmap
  83. },
  84. model: {
  85. prop: "value",
  86. event: "input"
  87. },
  88. props: {
  89. /*
  90. widget-text widget-marquee widget-href widget-time widget-image widget-slider widget-video widget-table widget-iframe widget-universal
  91. widget-linechart widget-barlinechart widget-piechart widget-hollow-piechart widget-funnel widget-gauge widget-china-map
  92. */
  93. index: Number, // 当前组件,在工作区变量widgetInWorkbench中的索引
  94. type: String,
  95. bigscreen: Object,
  96. value: {
  97. type: [Object],
  98. default: () => {}
  99. },
  100. step: Number
  101. },
  102. data() {
  103. return {
  104. data: {
  105. setup: {},
  106. data: {},
  107. position: {}
  108. }
  109. };
  110. },
  111. computed: {
  112. widgetsWidth() {
  113. return this.value.position.width;
  114. },
  115. widgetsHeight() {
  116. return this.value.position.height;
  117. },
  118. widgetsLeft() {
  119. return this.value.position.left;
  120. },
  121. widgetsTop() {
  122. return this.value.position.top;
  123. },
  124. widgetsZIndex() {
  125. return this.value.position.zIndex || 1;
  126. }
  127. },
  128. mounted() {},
  129. methods: {
  130. handleFocus({ index, left, top, width, height }) {},
  131. handleBlur({ index, left, top, width, height }) {
  132. this.$emit("onActivated", { index, left, top, width, height });
  133. this.$refs.draggable.setActive(true);
  134. }
  135. }
  136. };
  137. </script>
  138. <style scoped lang="scss">
  139. .vue-draggalbe {
  140. position: absolute;
  141. }
  142. .widget-active {
  143. cursor: move;
  144. border: 1px dashed #09f;
  145. background-color: rgba(115, 170, 229, 0.5);
  146. }
  147. .avue-draggable {
  148. padding: 0 !important;
  149. }
  150. </style>