ElementPropEdit.vue 3.0 KB

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