questionList.vue 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. <template>
  2. <el-form :model="form" ref="form" label-width="100px" class="question">
  3. <el-row>
  4. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
  5. <el-form-item
  6. label="题目类型"
  7. prop="type"
  8. :rules="[
  9. { required: true, message: '请选择题目类型', trigger: 'change' },
  10. ]"
  11. >
  12. <el-select
  13. v-model="form.type"
  14. placeholder="请选择题目类型"
  15. :disabled="disabled"
  16. >
  17. <el-option label="单选" value="radio"></el-option>
  18. <el-option label="多选" value="checkbox"></el-option>
  19. <el-option label="问答" value="textarea"></el-option>
  20. <el-option label="附件" value="file"></el-option>
  21. <el-option label="图片" value="image"></el-option>
  22. </el-select>
  23. </el-form-item>
  24. </el-col>
  25. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
  26. <el-form-item
  27. label="是否必填"
  28. prop="isRequire"
  29. :rules="[
  30. { required: true, message: '请选择是否必填', trigger: 'change' },
  31. ]"
  32. >
  33. <el-select
  34. v-model="form.isRequire"
  35. placeholder="请选择是否必填"
  36. :disabled="disabled"
  37. >
  38. <el-option label="是" :value="1"></el-option>
  39. <el-option label="否" :value="0"></el-option>
  40. </el-select>
  41. </el-form-item>
  42. </el-col>
  43. </el-row>
  44. <el-form-item
  45. label="题目"
  46. prop="content"
  47. :rules="[{ required: true, message: '请输入题目', trigger: 'blur' }]"
  48. >
  49. <el-input
  50. type="textarea"
  51. placeholder="请输入题目"
  52. :disabled="disabled"
  53. v-model="form.content"
  54. show-word-limit
  55. maxlength="200"
  56. :autosize="{ minRows: 2, maxRows: 4 }"
  57. ></el-input>
  58. </el-form-item>
  59. <template v-if="form.type == 'radio' || form.type == 'checkbox'">
  60. <div
  61. v-for="(
  62. questionnaireQuestionItemList, index
  63. ) in form.questionnaireQuestionItemList"
  64. :key="index"
  65. >
  66. <el-form-item
  67. :label="'选项' + (index + 1)"
  68. style="display: inline-block"
  69. :prop="'questionnaireQuestionItemList.' + index + '.answerValue'"
  70. :rules="[
  71. { required: true, message: '请输入选项内容', trigger: 'change' },
  72. ]"
  73. >
  74. <el-input
  75. type="text"
  76. placeholder="请输入选项内容"
  77. :disabled="disabled"
  78. maxlength="100"
  79. v-model="questionnaireQuestionItemList.answerValue"
  80. ></el-input>
  81. </el-form-item>
  82. <el-form-item
  83. label="是否终止答题"
  84. style="display: inline-block"
  85. label-width="120px"
  86. :prop="'questionnaireQuestionItemList.' + index + '.isOver'"
  87. :rules="[
  88. {
  89. required: true,
  90. message: '请选择是否终止答题',
  91. trigger: 'change',
  92. },
  93. ]"
  94. >
  95. <el-radio-group
  96. v-model="questionnaireQuestionItemList.isOver"
  97. :disabled="disabled"
  98. style="margin-right: 20px"
  99. >
  100. <el-radio :label="1">是</el-radio>
  101. <el-radio :label="0">否</el-radio>
  102. </el-radio-group>
  103. </el-form-item>
  104. <div style="display: inline-block">
  105. <el-tooltip
  106. class="item"
  107. effect="dark"
  108. content="向下移动"
  109. placement="top"
  110. >
  111. <el-button
  112. icon="el-icon-top"
  113. circle
  114. @click="moveDown(form.questionnaireQuestionItemList, index)"
  115. :disabled="index == 0 || disabled"
  116. ></el-button>
  117. </el-tooltip>
  118. <el-tooltip
  119. class="item"
  120. effect="dark"
  121. content="向下移动"
  122. placement="top"
  123. >
  124. <el-button
  125. icon="el-icon-bottom"
  126. circle
  127. @click="moveUp(form.questionnaireQuestionItemList, index)"
  128. :disabled="
  129. form.questionnaireQuestionItemList.length <= 1 ||
  130. form.questionnaireQuestionItemList.length == index + 1 ||
  131. disabled
  132. "
  133. ></el-button>
  134. </el-tooltip>
  135. <el-tooltip class="item" effect="dark" content="删除" placement="top">
  136. <el-button
  137. icon="el-icon-delete"
  138. circle
  139. @click="onDelete(form.questionnaireQuestionItemList, index)"
  140. :disabled="
  141. form.questionnaireQuestionItemList.length <= 1 || disabled
  142. "
  143. ></el-button>
  144. </el-tooltip>
  145. </div>
  146. </div>
  147. <el-form-item>
  148. <el-button
  149. style="width: 200px"
  150. type="default"
  151. icon="el-icon-plus"
  152. :disabled="
  153. form.questionnaireQuestionItemList.length >= 10 || disabled
  154. "
  155. @click="addQuestionItem(form.questionnaireQuestionItemList)"
  156. >新增选项</el-button
  157. >
  158. </el-form-item>
  159. </template>
  160. </el-form>
  161. </template>
  162. <script>
  163. export default {
  164. props: ["form", "type", "disabled"],
  165. data() {
  166. return {};
  167. },
  168. mounted() {},
  169. methods: {
  170. // 添加题目选项
  171. addQuestionItem(questionnaireQuestionItemLists) {
  172. questionnaireQuestionItemLists.push({});
  173. },
  174. // 向上移动
  175. moveUp(arr, index) {
  176. arr.splice(index, 1, ...arr.splice(index + 1, 1, arr[index]));
  177. },
  178. // 向下移动
  179. moveDown(arr, index) {
  180. arr.splice(index - 1, 1, ...arr.splice(index, 1, arr[index - 1]));
  181. },
  182. // 删除选项
  183. onDelete(arr, index) {
  184. if (this.type == "update") {
  185. if (this.form.delQuestionnaireQuestionItemIdList) {
  186. this.form.delQuestionnaireQuestionItemIdList.push(arr[index].id);
  187. } else {
  188. this.form.delQuestionnaireQuestionItemIdList = [arr[index].id];
  189. }
  190. }
  191. arr.splice(index, 1);
  192. },
  193. },
  194. };
  195. </script>
  196. <style lang="scss" scoped>
  197. .question .el-select {
  198. width: 100% !important;
  199. }
  200. </style>