123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. <template>
  2. <div>
  3. <el-drawer
  4. ref="drawer"
  5. :title="answerId ?'编辑答案' : '添加答案'"
  6. :before-close="handleClose"
  7. :visible.sync="dialog"
  8. direction="ltr"
  9. custom-class="demo-drawer"
  10. >
  11. <div class="demo-drawer__content">
  12. <el-form :model="form" style="margin:20px">
  13. <el-form-item label="选项:" :label-width="formLabelWidth">
  14. <el-input v-model="form.content" size="mini" placeholder="请输入答案(必填)">
  15. <el-select slot="prepend" v-model="form.option" filterable allow-create default-first-option size="mini" style="width:100px" placeholder="请选择">
  16. <el-option
  17. v-for="item in options"
  18. :key="item.value"
  19. :label="item.label"
  20. :value="item.value"
  21. />
  22. </el-select>
  23. </el-input>
  24. </el-form-item>
  25. <el-form-item label="匹配特征:" :label-width="formLabelWidth">
  26. <el-select
  27. v-model="form.characterList"
  28. size="mini"
  29. multiple
  30. filterable
  31. default-first-option
  32. placeholder="请选择特征"
  33. style="width:100%"
  34. >
  35. <el-option
  36. v-for="item in wordList"
  37. :key="item.characterId"
  38. :label="item.name"
  39. :value="item.characterId"
  40. />
  41. </el-select>
  42. </el-form-item>
  43. <el-form-item style="text-align:center">
  44. <el-button size="mini" @click="handleClose">取 消</el-button>
  45. <el-button type="primary" size="mini" @click="onSubmit">确 定</el-button>
  46. </el-form-item>
  47. </el-form>
  48. </div>
  49. </el-drawer>
  50. </div>
  51. </template>
  52. <script>
  53. import { getAnswerDetail, saveAnswer, UpdateAnswer } from '@/api/answer'
  54. export default {
  55. props: {
  56. dialog: Boolean,
  57. questionId: String,
  58. answerId: String,
  59. gameId: String
  60. },
  61. data() {
  62. return {
  63. form: {
  64. option: undefined,
  65. content: undefined,
  66. characterList: []
  67. },
  68. formLabelWidth: '120px',
  69. options: [
  70. {
  71. value: 'A',
  72. label: 'A'
  73. },
  74. {
  75. value: 'B',
  76. label: 'B'
  77. },
  78. {
  79. value: 'C',
  80. label: 'C'
  81. },
  82. {
  83. value: 'D',
  84. label: 'D'
  85. },
  86. {
  87. value: '对',
  88. label: '对'
  89. },
  90. {
  91. value: '错',
  92. label: '错'
  93. }
  94. ]
  95. }
  96. },
  97. computed: {
  98. wordList() {
  99. return this.$store.state.game.wordList
  100. }
  101. },
  102. watch: {
  103. answerId() {
  104. if (this.answerId) {
  105. getAnswerDetail(this.answerId).then((res) => {
  106. this.form = res.data
  107. if (res.data.characterList) {
  108. const list = []
  109. res.data.characterList.map(item => {
  110. list.push(item.characterId)
  111. })
  112. this.form.characterList = list
  113. }
  114. })
  115. }
  116. }
  117. },
  118. methods: {
  119. onSubmit() {
  120. if (this.form.option && this.form.content) {
  121. const list = this.wordList.filter(item => this.form.characterList.includes(item.characterId))
  122. const data = { ...this.form }
  123. if (list) {
  124. list.map(item => {
  125. item.gameId = this.gameId
  126. })
  127. data.characterList = list
  128. }
  129. data.questionId = this.questionId
  130. if (this.answerId) {
  131. UpdateAnswer(data, this.answerId).then((res) => {
  132. this.$message('修改成功')
  133. this.$emit('handleEditDrawer', true)
  134. this.form = {
  135. option: undefined,
  136. content: undefined,
  137. characterList: []
  138. }
  139. })
  140. } else {
  141. saveAnswer(data).then((res) => {
  142. this.$message('添加成功')
  143. this.$emit('handleEditDrawer', true)
  144. this.form = {
  145. option: undefined,
  146. content: undefined,
  147. characterList: []
  148. }
  149. })
  150. }
  151. } else {
  152. this.$message('请添加选项和内容')
  153. }
  154. },
  155. handleClose() {
  156. this.$emit('handleCloseDrawer', true)
  157. this.form = {
  158. option: undefined,
  159. content: undefined,
  160. characterList: []
  161. }
  162. }
  163. }
  164. }
  165. </script>
  166. <style>
  167. </style>