健康同学微信公众号h5项目
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

154 lines
5.7KB

  1. <template>
  2. <div class="questionnaire">
  3. <van-nav-bar title="调查问卷" left-text="返回" right-text="提交" left-arrow @click-left="onClickLeft"
  4. @click-right="onClickRight" />
  5. <van-form>
  6. <div v-for="(item, index) in formData" :key="index">
  7. <!-- 单选 -->
  8. <van-field v-if="item.type == 0" :name="'radio_' + item.questionId" :label="item.subject">
  9. <template #input>
  10. <van-radio-group v-model="item.answer" direction="horizontal">
  11. <van-radio v-for="(list, key) in item.answerItems" :key="key" :name="list.serialNo">
  12. {{ list.answerItem }}
  13. </van-radio>
  14. </van-radio-group>
  15. </template>
  16. </van-field>
  17. <!-- 复选框 -->
  18. <van-field v-if="item.type == 1" :name="'multipleChoice_' + item.questionId" :label="item.subject">
  19. <template #input>
  20. <van-checkbox-group v-model="item.answer" direction="horizontal">
  21. <van-checkbox v-for="(list, key) in item.answerItems" :key="key" :name="list.serialNo"
  22. shape="square">
  23. {{ list.answerItem }}
  24. </van-checkbox>
  25. </van-checkbox-group>
  26. </template>
  27. </van-field>
  28. <!-- 文本输入 -->
  29. <van-field v-if="item.type == 2" v-model="item.answer" rows="3" autosize
  30. :name="'textBox_' + item.questionId" :label="item.subject" type="textarea" placeholder="" />
  31. <!-- 单行文本 -->
  32. <!-- <van-field
  33. v-if="item.type == 2"
  34. v-model="item.value"
  35. :name="'textBox_' + item.questionId"
  36. :label="item.subject"
  37. placeholder="请输入文本"
  38. /> -->
  39. <!-- 切换 -->
  40. <!-- <van-field
  41. v-if="item.type == 'switch'"
  42. :name="'switch_' + item.questionId"
  43. :label="item.subject"
  44. >
  45. <template #input>
  46. <van-switch v-model="item.value" size="20" />
  47. </template>
  48. </van-field> -->
  49. <!-- 分割线 -->
  50. <van-divider />
  51. </div>
  52. </van-form>
  53. </div>
  54. </template>
  55. <script>
  56. import { Form, RadioGroup, Radio, Divider } from 'vant';
  57. import APIQuestionnaire from '@/api/questionnaire';
  58. export default {
  59. components: {
  60. [Form.name]: Form,
  61. [RadioGroup.name]: RadioGroup,
  62. [Radio.name]: Radio,
  63. [Divider.name]: Divider
  64. },
  65. data() {
  66. return {
  67. formData: []
  68. };
  69. },
  70. created() {
  71. // 初始化问卷
  72. this.init();
  73. },
  74. mounted() { },
  75. methods: {
  76. onClickLeft(value) {
  77. console.log(value)
  78. this.$router.back()
  79. },
  80. onClickRight() {
  81. // 提交问卷
  82. if (this.validate()) {
  83. let questionnaireData = [];
  84. this.formData.forEach(element => {
  85. let answer = "";
  86. if (element.type == 1) {
  87. answer = element.answer.join("|");
  88. } else {
  89. answer = element.answer
  90. }
  91. questionnaireData.push({
  92. "questionId": element.questionId,
  93. "answer": answer
  94. })
  95. });
  96. let params = {
  97. "id": 5,
  98. "personId": 15,
  99. "questionnaireData": questionnaireData
  100. }
  101. APIQuestionnaire.submitTask(params).then(res => {
  102. this.$notify({ type: 'success', message: res.data.message });
  103. });
  104. }
  105. },
  106. init() {
  107. // 获取问卷
  108. let params = {
  109. id: 5,
  110. personId: 15,
  111. rankId: 2
  112. }
  113. APIQuestionnaire.getTaskDetail(params)
  114. .then(res => {
  115. this.formData = res.data.data.subjectItems;
  116. this.formData.forEach(element => {
  117. if (element.type == 1) {
  118. if (element.answer !== "") {
  119. element.answer = element.answer.split('|');
  120. } else {
  121. element.answer = [];
  122. }
  123. }
  124. });
  125. })
  126. .catch(e => {
  127. console.log(e);
  128. })
  129. },
  130. validate() {
  131. let is = true;
  132. this.formData.forEach(element => {
  133. if (element.type == 0 && element.answer == "") {
  134. this.$notify({ type: 'warning', message: "单选项请选择一个选项" });
  135. is = false;
  136. } else if (element.type == 1 && element.answer.length == 0) {
  137. this.$notify({ type: 'warning', message: "多选项至少选择一项" });
  138. is = false;
  139. } else if (element.type == 2 && element.answer == "") {
  140. this.$notify({ type: 'warning', message: "文本内容不能为空" });
  141. is = false;
  142. }
  143. })
  144. return is;
  145. }
  146. }
  147. };
  148. </script>
  149. <style scoped lang="scss">
  150. @import './scss/index.scss';
  151. </style>