ExplainChildrenElement.vue 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <template>
  2. <div class="explain-children-element">
  3. <element-resize
  4. v-model="elemData"
  5. :class="{ 'element-resize-act': curElement.id === data.id }"
  6. :active="active"
  7. fit-parent
  8. @change="elementChange"
  9. @on-click="activeCurElement"
  10. >
  11. <div
  12. class="explain-element"
  13. :style="styles"
  14. :id="data.id"
  15. :data-type="data.type"
  16. >
  17. <component :is="compName" :data="data"></component>
  18. </div>
  19. </element-resize>
  20. </div>
  21. </template>
  22. <script>
  23. import { mapState, mapMutations } from "vuex";
  24. import ElemText from "../elementPreview/ElemText";
  25. import ElemImage from "../elementPreview/ElemImage";
  26. import ElemLineHorizontal from "../elementPreview/ElemLineHorizontal";
  27. import ElemLineVertical from "../elementPreview/ElemLineVertical";
  28. import ElementResize from "../common/ElementResize.vue";
  29. export default {
  30. name: "explain-children-element",
  31. components: {
  32. ElemText,
  33. ElemImage,
  34. ElemLineHorizontal,
  35. ElemLineVertical,
  36. ElementResize
  37. },
  38. props: {
  39. data: {
  40. type: Object
  41. }
  42. },
  43. data() {
  44. return {
  45. elemData: {
  46. x: 0,
  47. y: 0,
  48. w: 0,
  49. h: 0
  50. },
  51. styles: {},
  52. actives: {
  53. TEXT: ["r", "rb", "b", "lb", "l", "lt", "t", "rt"],
  54. IMAGE: ["r", "rb", "b", "lb", "l", "lt", "t", "rt"],
  55. LINE_HORIZONTAL: ["l", "r"],
  56. LINE_VERTICAL: ["t", "b"]
  57. }
  58. };
  59. },
  60. computed: {
  61. ...mapState("card", ["curElement"]),
  62. compName() {
  63. return `elem-${this.data.type.toLowerCase().replace("_", "-")}`;
  64. },
  65. active() {
  66. return this.actives[this.data.type];
  67. }
  68. },
  69. created() {
  70. this.init();
  71. },
  72. methods: {
  73. ...mapMutations("card", ["setCurElement"]),
  74. init() {
  75. this.elemData = this.$objAssign(this.elemData, this.data);
  76. this.styles = {
  77. left: this.data.x + "px",
  78. top: this.data.y + "px",
  79. width: this.data.w + "px",
  80. height: this.data.h + "px"
  81. };
  82. },
  83. elementChange() {
  84. this.$emit("change", Object.assign({}, this.data, this.elemData));
  85. },
  86. activeCurElement() {
  87. this.setCurElement(this.data);
  88. }
  89. }
  90. };
  91. </script>