ElementPropEdit.vue 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <template>
  2. <el-dialog
  3. class="element-prop-edit edit-dialog"
  4. :visible.sync="openElementEditDialog"
  5. :title="title"
  6. top="10vh"
  7. width="640px"
  8. :close-on-click-modal="false"
  9. :close-on-press-escape="false"
  10. :before-close="cancel"
  11. append-to-body
  12. >
  13. <component
  14. :is="curEditComponent"
  15. :instance="curElement"
  16. @modified="modified"
  17. :key="curElement.id"
  18. ref="CompositionDialog"
  19. ></component>
  20. <div slot="footer">
  21. <el-button type="primary" @click="submit">确认</el-button>
  22. <el-button @click="cancel" plain>取消</el-button>
  23. </div>
  24. </el-dialog>
  25. </template>
  26. <script>
  27. import { mapState, mapMutations, mapActions } from "vuex";
  28. import { getElementName } from "../elementModel";
  29. import EditComposition from "../elements/composition/EditComposition";
  30. import EditExplain from "../elements/explain/EditExplain";
  31. import EditFillLine from "../elements/fill-line/EditFillLine";
  32. import EditFillQuestion from "../elements/fill-question/EditFillQuestion";
  33. import EditText from "../elements/text/EditText";
  34. import EditImage from "../elements/image/EditImage";
  35. import EditLine from "../elements/line/EditLine";
  36. import EditLines from "../elements/lines/EditLines";
  37. import EditGrids from "../elements/grids/EditGrids";
  38. export default {
  39. name: "element-prop-edit",
  40. components: {
  41. EditComposition,
  42. EditExplain,
  43. EditFillLine,
  44. EditFillQuestion,
  45. EditText,
  46. EditImage,
  47. EditLine,
  48. EditLines,
  49. EditGrids
  50. },
  51. data() {
  52. return {};
  53. },
  54. computed: {
  55. ...mapState("card", ["curElement", "openElementEditDialog"]),
  56. title() {
  57. return this.curElement.type
  58. ? getElementName(this.curElement.type)
  59. : "属性编辑";
  60. },
  61. curEditComponent() {
  62. if (!this.curElement.type) return;
  63. let type = this.curElement.type.toLowerCase().replace("_", "-");
  64. if (type.indexOf("line-") === 0) type = "line";
  65. return `edit-${type}`;
  66. }
  67. },
  68. methods: {
  69. ...mapMutations("card", ["setOpenElementEditDialog", "setTopicNos"]),
  70. ...mapActions("card", [
  71. "addElement",
  72. "modifyElement",
  73. "modifyElementChild",
  74. "rebuildPages"
  75. ]),
  76. cancel() {
  77. this.setOpenElementEditDialog(false);
  78. },
  79. open() {
  80. this.setOpenElementEditDialog(true);
  81. },
  82. submit() {
  83. this.$refs.CompositionDialog.submit();
  84. },
  85. modified(element) {
  86. // 编辑试题
  87. // 属性存在的条件:parent:大题的小题,container:题目内的子元素
  88. if (this.curElement["_edit"]) {
  89. if (element["container"]) {
  90. this.modifyElementChild(element);
  91. } else {
  92. this.modifyElement(element);
  93. }
  94. } else {
  95. this.addElement(element);
  96. }
  97. this.cancel();
  98. this.$nextTick(() => {
  99. this.rebuildPages();
  100. });
  101. }
  102. }
  103. };
  104. </script>