QuestionnaireTemplateComponent.vue 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. <template>
  2. <div class="page_item end_item">
  3. <div class="page_search">
  4. <div class="search_content">
  5. <div class="content_left">
  6. <!-- <el-checkbox v-model="isUnifiedTemplate" >所有单科统一模版</el-checkbox> -->
  7. </div>
  8. <div class="content_right">
  9. <el-button class="button_background" @click="FinishQuestionnaireTemplateConfig">完成</el-button>
  10. </div>
  11. </div>
  12. </div>
  13. <div class="page_jg_20"></div>
  14. <Table :tableColumns="tableColumns"
  15. :tableData="tableData"
  16. :hidePagination="true">
  17. <template #gender="{row}">
  18. <el-select v-model="row.gender">
  19. <el-option
  20. v-for="opt in gradeOptionList"
  21. :key="opt.value"
  22. :label="opt.label"
  23. :value="opt.value"
  24. />
  25. </el-select>
  26. </template>
  27. <template #assessmentId="{row}">
  28. <div class="questionnaire_cell table_row_option">
  29. <el-select
  30. v-model="row.assessmentId"
  31. filterable
  32. @change="(val)=>HandleQuestionnaireTemplateChange(row,val)">
  33. <el-option
  34. v-for="opt in quesitonnaireOptionList"
  35. :key="opt.value"
  36. :label="opt.label"
  37. :value="opt.value"
  38. />
  39. </el-select>
  40. <span v-if="row.assessmentId" class="el_button_editor" @click="GoToPreviewQuestionnaire(row.assessmentId)">预览</span>
  41. <span v-else class="el_button_editor"></span>
  42. </div>
  43. </template>
  44. </Table>
  45. </div>
  46. </template>
  47. <script setup lang="ts">
  48. import { onMounted, ref } from 'vue';
  49. import { useRoute,useRouter } from 'vue-router';
  50. import { useStore } from 'vuex';
  51. import Table from '@/baseComponents/Table.vue';
  52. import {tableColumns} from './table'
  53. import { getQuestionnaireTemplateListApi,saveQuestionnaireTemplateListApi} from '@/api/questionnaireTemplateComponent'
  54. import {getAllQuestionnaireListApi} from '@/api/surveyManagement'
  55. const route = useRoute()
  56. const router = useRouter()
  57. const store = useStore()
  58. const isUnifiedTemplate = ref(true) //所有单科统一模版
  59. // 1. 下拉选项
  60. // 年级下拉
  61. const gradeOptionList = ref([
  62. {
  63. label:'全部',
  64. value:2
  65. },
  66. {
  67. label:'男',
  68. value:0
  69. },
  70. {
  71. label:'女',
  72. value:1
  73. },
  74. ])
  75. // 问卷下拉
  76. const quesitonnaireOptionList = ref([])
  77. // 获取问卷列表
  78. const GetQuestionnaireList = async ()=>{
  79. let res = await getAllQuestionnaireListApi()
  80. if(res?.code == 200){
  81. quesitonnaireOptionList.value = res?.data?.map(item=>{
  82. return {
  83. label:item.assessmentTitle,
  84. fullScore:item.fullScore, //问卷满分
  85. questionCount:item.questionCount, // 题目数量
  86. value:item.id,
  87. }
  88. })
  89. }
  90. }
  91. // 2. 问卷模板列表 获取 及 相关操作
  92. const tableData = ref([]);
  93. // 获取问卷模板列表
  94. const GetQuestionnaireTemplateList = async ()=>{
  95. let res = await getQuestionnaireTemplateListApi(route.query.id)
  96. if(res?.code == 200){
  97. tableData.value = res.data || []
  98. }
  99. }
  100. // 变更 选中的问卷
  101. const HandleQuestionnaireTemplateChange = (row,val)=>{
  102. let aimQuesitonnaire = quesitonnaireOptionList.value.find(item=>{
  103. return item.value == val
  104. })
  105. // if(isUnifiedTemplate.value){
  106. // 同步统一问卷模板
  107. tableData.value = tableData.value.map((item,index)=>{
  108. // if(index !== 0){
  109. item.assessmentId = val
  110. item.fullScore = aimQuesitonnaire.fullScore,
  111. item.questionCount = aimQuesitonnaire.questionCount
  112. // }
  113. return item
  114. })
  115. // }else{
  116. // tableData.value = tableData.value.map(item=>{
  117. // if(item.name === row.name){
  118. // return {
  119. // ...item,
  120. // fullScore:aimQuesitonnaire.fullScore,
  121. // questionCount:aimQuesitonnaire.questionCount
  122. // }
  123. // }else{
  124. // return item
  125. // }
  126. // })
  127. // }
  128. }
  129. // 预览问卷
  130. const GoToPreviewQuestionnaire = (id)=>{
  131. sessionStorage.setItem('questionnaireAndTemplateList',JSON.stringify({
  132. tableData:tableData.value,
  133. quesitonnaireOptionList:quesitonnaireOptionList.value
  134. }))
  135. router.push(`/main/previewQuestionnaire?id=${id}`)
  136. }
  137. // 完成问卷模板配置
  138. const FinishQuestionnaireTemplateConfig = async ()=>{
  139. let params = tableData.value.map(item=>{
  140. return {
  141. ids: item.ids, //
  142. evaluationId:route.query.id, // 评价任务id
  143. assessmentId: item?.assessmentId, //问卷名称
  144. gender: item.gender, //性别
  145. }
  146. })
  147. let res = await saveQuestionnaireTemplateListApi(params)
  148. if(res?.code == 200){
  149. // 更新全局状态
  150. await store.dispatch('updateEvaluationManageStepData',route.query.id)
  151. store.commit('updateEvaluationManageStepData',{currentActiveStepName:'reviewAccount'}) //更新全局活跃路由
  152. // 这里跳转到评价账号的时候,需要判断 评价码有没有生成,如果已经生成,跳到评价码页;
  153. // 如果没有生成,跳到 生成配置页
  154. let isGenerateReviewCode = store.state.evaluationManageStepData.isGenerateReviewCode //是否已生成评价码
  155. // 跳转到下一步
  156. if(isGenerateReviewCode){
  157. router.push(`generateReviewCode?id=${route.query.id}`)
  158. }else{
  159. router.push(`reviewAccount?id=${route.query.id}`)
  160. }
  161. }
  162. }
  163. onMounted(async ()=>{
  164. let sessionQuestionnaireTemplateList = sessionStorage.getItem('questionnaireAndTemplateList')
  165. // 先判断是否有缓存 —— 从预览页跳转过来
  166. if(sessionQuestionnaireTemplateList){
  167. tableData.value = JSON.parse(sessionQuestionnaireTemplateList).tableData
  168. quesitonnaireOptionList.value = JSON.parse(sessionQuestionnaireTemplateList).quesitonnaireOptionList
  169. sessionStorage.removeItem('questionnaireAndTemplateList') //获取完后清空
  170. }else{
  171. await GetQuestionnaireList()
  172. await GetQuestionnaireTemplateList()
  173. }
  174. })
  175. </script>
  176. <style lang="scss" scoped>
  177. .questionnaire_cell{
  178. gap:16px;
  179. word-break: keep-all;
  180. }
  181. </style>