ElemExplainElementEdit.vue 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. <template>
  2. <div class="elem-explain-element elem-explain-element-edit">
  3. <element-resize
  4. v-model="elemData"
  5. :class="{ 'element-resize-act': curElement.id === data.id }"
  6. :active="active"
  7. :transform-fit="transformFit"
  8. :element-pk="data.id"
  9. isCompact
  10. @resize-over="resizeOver"
  11. @on-click="activeCurElement"
  12. >
  13. <div
  14. :class="classes"
  15. :style="styles"
  16. :id="data.id"
  17. :data-type="data.type"
  18. >
  19. <component :is="compName" :data="data"></component>
  20. </div>
  21. </element-resize>
  22. </div>
  23. </template>
  24. <script>
  25. import { mapState, mapMutations } from "vuex";
  26. import { objAssign } from "../../plugins/utils";
  27. import ElementResize from "../../components/common/ElementResize";
  28. import ElemText from "../text/ElemText";
  29. import ElemImage from "../image/ElemImage";
  30. import ElemLine from "../line/ElemLine";
  31. import ElemLines from "../lines/ElemLines";
  32. import ElemGrids from "../grids/ElemGrids";
  33. export default {
  34. name: "elem-explain-element-edit",
  35. components: {
  36. ElemText,
  37. ElemImage,
  38. ElemLine,
  39. ElemLines,
  40. ElemGrids,
  41. ElementResize
  42. },
  43. props: {
  44. data: {
  45. type: Object
  46. },
  47. transformFit: {
  48. type: Function,
  49. default() {
  50. return {};
  51. }
  52. }
  53. },
  54. data() {
  55. return {
  56. elemData: {
  57. x: 0,
  58. y: 0,
  59. w: 0,
  60. h: 0
  61. },
  62. styles: {},
  63. actives: {
  64. TEXT: ["r", "rb", "b", "lb", "l", "lt", "t", "rt"],
  65. IMAGE: ["r", "rb", "b", "lb", "l", "lt", "t", "rt"],
  66. LINES: ["r", "rb", "b", "lb", "l", "lt", "t", "rt"],
  67. GRIDS: ["r", "rb", "b", "lb", "l", "lt", "t", "rt"],
  68. LINE_HORIZONTAL: ["l", "r"],
  69. LINE_VERTICAL: ["t", "b"]
  70. }
  71. };
  72. },
  73. computed: {
  74. ...mapState("card", ["curElement"]),
  75. compName() {
  76. if (this.data.type.includes("LINE_")) return "elem-line";
  77. return `elem-${this.data.type.toLowerCase()}`;
  78. },
  79. elementName() {
  80. return this.data.type.toLowerCase().replace("_", "-");
  81. },
  82. classes() {
  83. return ["explain-element-body", `explain-element-${this.elementName}`];
  84. },
  85. active() {
  86. return this.actives[this.data.type];
  87. }
  88. },
  89. created() {
  90. this.init();
  91. },
  92. methods: {
  93. ...mapMutations("card", ["setCurElement"]),
  94. init() {
  95. this.elemData = objAssign(this.elemData, this.data);
  96. this.styles = {
  97. left: this.data.x + "px",
  98. top: this.data.y + "px",
  99. width: this.data.w + "px",
  100. height: this.data.h + "px"
  101. };
  102. },
  103. resizeOver() {
  104. this.$emit("resize-over", Object.assign({}, this.data, this.elemData));
  105. },
  106. activeCurElement() {
  107. this.setCurElement(this.data);
  108. }
  109. }
  110. };
  111. </script>