TopicElementEdit.vue 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <template>
  2. <div class="topic-element-edit">
  3. <element-resize
  4. v-model="elemData"
  5. :class="{ 'element-resize-act': curElement.id === data.id }"
  6. :transform-fit="transformFit"
  7. :element-pk="data.id"
  8. is-compact
  9. @resize-over="resizeOver"
  10. @on-click="activeCurElement"
  11. >
  12. <div
  13. :class="classes"
  14. :style="styles"
  15. :id="data.id"
  16. :data-type="data.type"
  17. >
  18. <component :is="compName" :data="data"></component>
  19. </div>
  20. </element-resize>
  21. </div>
  22. </template>
  23. <script>
  24. import { mapState, mapMutations } from "vuex";
  25. import { objAssign } from "../../../plugins/utils";
  26. import ElementResize from "../../../components/common/ElementResize";
  27. import TopicNumber from "../../../components/common/TopicNumber";
  28. // elements
  29. import EditFillQuestion from "../elements/fill-question/ElemFillQuestion";
  30. import EditFillLine from "../elements/fill-line/ElemFillLine";
  31. import EditText from "../../../elements/text/ElemText";
  32. import EditImage from "../../../elements/image/ElemImage";
  33. import EditLine from "../../../elements/line/ElemLine";
  34. import EditLines from "../../../elements/lines/ElemLines";
  35. import EditGrids from "../../../elements/grids/ElemGrids";
  36. import EditPane from "../../../elements/pane/ElemPane";
  37. import EditBarcode from "../../../elements/barcode/ElemBarcode";
  38. import EditFillNumber from "../../../elements/fill-number/ElemFillNumber";
  39. import EditFillField from "../../../elements/fill-field/ElemFillField";
  40. import EditFillTable from "../../../elements/fill-table/ElemFillTable";
  41. import EditFillPane from "../../../elements/fill-pane/ElemFillPane";
  42. export default {
  43. name: "topic-element-edit",
  44. components: {
  45. ElementResize,
  46. TopicNumber,
  47. EditFillQuestion,
  48. EditFillLine,
  49. EditFillNumber,
  50. EditFillField,
  51. EditFillTable,
  52. EditFillPane,
  53. EditText,
  54. EditImage,
  55. EditLine,
  56. EditLines,
  57. EditGrids,
  58. EditPane,
  59. EditBarcode
  60. },
  61. props: {
  62. data: {
  63. type: Object
  64. },
  65. transformFit: {
  66. type: Function,
  67. default() {
  68. return {};
  69. }
  70. }
  71. },
  72. data() {
  73. return {
  74. styles: {},
  75. elemData: {
  76. x: 0,
  77. y: 0,
  78. w: 0,
  79. h: 0,
  80. zindex: 9,
  81. init: false
  82. }
  83. };
  84. },
  85. computed: {
  86. ...mapState("free", ["curElement"]),
  87. elementName() {
  88. if (this.data.type.includes("LINE_")) return "line";
  89. return this.data.type.toLowerCase().replace("_", "-");
  90. },
  91. compName() {
  92. return `edit-${this.elementName}`;
  93. },
  94. classes() {
  95. return [
  96. "topic-design",
  97. "element-item",
  98. `element-item-${this.elementName}`
  99. ];
  100. }
  101. },
  102. created() {
  103. this.init();
  104. },
  105. methods: {
  106. ...mapMutations("free", ["setCurElement"]),
  107. init() {
  108. this.elemData = objAssign(this.elemData, this.data);
  109. this.styles = {
  110. left: this.data.x + "px",
  111. top: this.data.y + "px",
  112. width: this.data.w + "px",
  113. height: this.data.h + "px",
  114. zIndex: this.data.zindex
  115. };
  116. },
  117. activeCurElement() {
  118. this.setCurElement(this.data);
  119. },
  120. resizeOver() {
  121. this.$emit("resize-over", Object.assign({}, this.data, this.elemData));
  122. }
  123. }
  124. };
  125. </script>