ReviewAccountTableData.vue 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. <!-- 评价账号使用统计表 -->
  2. <template>
  3. <div class="end_item">
  4. <div class=" page_search">
  5. <div class="search_content">
  6. <div class="content_left">
  7. <div class="grade_title">评价账号使用统计表</div>
  8. </div>
  9. <div class="content_right">
  10. <FormSearchGroup :searchList="searchList"
  11. @searchChange="HandleSearchChange">
  12. </FormSearchGroup>
  13. <el-button class="button_refresh" @click="HandleExportExcel">导出Excel</el-button>
  14. </div>
  15. </div>
  16. </div>
  17. <Table :currentPage="currentPage" :pageSize="pageSize"
  18. :tableColumns="reviewAccountUseTableColumns"
  19. :tableData="tableData"
  20. :totalNum="totalNum"
  21. @paginationChange="HandlePaginationChange">
  22. <template #num="{row,currentIndex}">
  23. {{ currentIndex + pageSize * (currentPage - 1) }}
  24. </template>
  25. <template #evaluationStatus="{row}">
  26. <TableRowStatus :statusMsg="statusMsg" :useStatus="row.evaluationStatus">
  27. </TableRowStatus>
  28. </template>
  29. </Table>
  30. </div>
  31. </template>
  32. <script setup lang="ts">
  33. import Table from '@/baseComponents/Table.vue';
  34. import { ref, onMounted } from 'vue';
  35. import { useRoute } from 'vue-router';
  36. import {reviewAccountUseTableColumns} from './table'
  37. import FormSearchGroup from '@/baseComponents/FormSearchGroup.vue';
  38. import {searchList} from './formSearchGroup'
  39. import TableRowStatus from '@/baseComponents/TableRowStatus.vue';
  40. import { getEvaluationAccountUseStatisticsApi, reviewAccountGradeListApi, reviewAccountDataExportExcelApi } from '@/api/evaluationProgressComponent.js';
  41. const route = useRoute()
  42. const currentPage = ref(1)
  43. const pageSize = ref(20)
  44. const totalNum = ref(0)
  45. const tableData = ref([])
  46. const statusMsg = ref([
  47. {
  48. statusFlag:0,
  49. title:'未使用',
  50. themeClass:'need_summary_icon',
  51. },
  52. {
  53. statusFlag:1,
  54. title:'已使用',
  55. themeClass:'not_included_icon',
  56. },
  57. {
  58. statusFlag:2,
  59. title:'已提交',
  60. themeClass:'normal_icon',
  61. },
  62. ])
  63. const searchParams = ref({
  64. grade:'',
  65. status:''
  66. })
  67. // 处理查询条件的变更
  68. const HandleSearchChange = async (params,key)=>{
  69. console.log('触发的查询参数___',params)
  70. searchParams.value = {
  71. ...searchParams.value,
  72. ...params
  73. }
  74. await GetEvaluationAccountUseStatistics()
  75. }
  76. // 处理表格分页
  77. const HandlePaginationChange = async (params)=>{
  78. const { type, val } = params
  79. if(type == 'currentPage'){
  80. currentPage.value = val
  81. await GetEvaluationAccountUseStatistics()
  82. }
  83. }
  84. // 获取评价账号使用统计表的数据
  85. const GetEvaluationAccountUseStatistics = async ()=>{
  86. let params = {
  87. evaluationId: route.query.id,
  88. evaluationGradeId: searchParams.value.grade == 'all' ? '' : searchParams.value.grade, //年级id
  89. pageNum: currentPage.value,
  90. pageSize: pageSize.value,
  91. evaluationStatus: searchParams.value.status == 'all' ? '' : searchParams.value.status // 评价码状态
  92. }
  93. let res = await getEvaluationAccountUseStatisticsApi(params)
  94. if(res?.code == 200){
  95. tableData.value = res?.data?.records || []
  96. totalNum.value = res?.data?.total
  97. }
  98. }
  99. // 获取年级列表
  100. const GetGradeList = async ()=> {
  101. let res = await reviewAccountGradeListApi(route.query.id)
  102. if(res?.code == 200){
  103. let gradeOption = res.data.map(item=>{
  104. return {
  105. label:item.evaluationGradeName,
  106. value:item.evaluationGradeId
  107. }
  108. })
  109. // 初始化年级下拉
  110. searchList.value = searchList.value.map(item=>{
  111. if(item.key == 'grade'){
  112. item.options = [
  113. {
  114. label:'全部年级',
  115. value:'all'
  116. },
  117. ...gradeOption
  118. ]
  119. item.defaultValue = 'all'
  120. }
  121. return item
  122. })
  123. }
  124. }
  125. // 处理excel导出
  126. const HandleExportExcel = async ()=>{
  127. let params = {
  128. evaluationGenderStatus:null, //性别 必传,值为空
  129. evaluationId: route.query.id,
  130. evaluationGradeId: searchParams.value.grade == 'all' ? '' : searchParams.value.grade, //年级id
  131. evaluationStatus: searchParams.value.status == 'all' ? '' : searchParams.value.status // 评价码状态
  132. }
  133. let res = await reviewAccountDataExportExcelApi(params)
  134. if(res?.code == 200){
  135. const blob = new Blob([res.data], {
  136. type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'
  137. });
  138. // 3. 创建指向该 Blob 的临时 URL
  139. const url = window.URL.createObjectURL(blob);
  140. const link = document.createElement('a');
  141. link.href = url;
  142. link.download = '评价账号使用统计表.xlsx';
  143. document.body.appendChild(link);
  144. link.click();
  145. // 清理内存
  146. document.body.removeChild(link);
  147. window.URL.revokeObjectURL(url);
  148. }
  149. }
  150. onMounted(async()=>{
  151. await GetGradeList()
  152. await GetEvaluationAccountUseStatistics()
  153. })
  154. </script>
  155. <style lang="scss" scoped>
  156. .end_item{
  157. height: 100%;
  158. }
  159. .search_content{
  160. margin-bottom: 10px;
  161. }
  162. </style>