drawer.vue 5.4KB

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