index.vue 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <script setup lang='ts'>
  2. import { Search } from '@element-plus/icons-vue'
  3. import { RouteLocationRaw, useRouter } from 'vue-router'
  4. import { Grade, Subject } from '~/store/info'
  5. import user from '~/store/user'
  6. const list = [
  7. { title: '错题列表', route: '/' },
  8. ]
  9. const router = useRouter()
  10. function routerPush(_route: RouteLocationRaw) {
  11. router.push(_route)
  12. }
  13. const tableData = ref([])
  14. const total = ref(0)
  15. const queryForm = reactive({
  16. dc_grade_id: '',
  17. dc_subject_id: '',
  18. dc_keyword: '',
  19. page: 1
  20. })
  21. watch(queryForm, () => {
  22. doQuery()
  23. }, { deep: true, immediate: true })
  24. function doQuery() {
  25. request({
  26. url: '/dyaw/ctfx/index',
  27. data: {
  28. ...queryForm,
  29. sm_id: user.sm_info.sm_id,
  30. limit: 8,
  31. dc_check: '1'
  32. }
  33. }).then(res => {
  34. if (res.code === "1") {
  35. tableData.value = res.data.page_data
  36. total.value = parseInt(res.data.total_rows)
  37. }
  38. })
  39. }
  40. // TODO: 临时处理
  41. function translateString(str: string) {
  42. return str
  43. }
  44. </script>
  45. <template>
  46. <div class="w-1400px h-640px flex flex-col">
  47. <div class="flex justify-between items-center">
  48. <div class="flex flex-none space-x-12 text-lg h-50px">
  49. <div class="cursor-pointer relative mb-22px tab_selected">错题列表</div>
  50. <div class="cursor-pointer relative mb-22px" @click="routerPush({ name: 'teacher_indey' })">上传错题</div>
  51. </div>
  52. <div class="flex space-x-2">
  53. <el-select clearable size="large" placeholder="年级" v-model="queryForm.dc_grade_id">
  54. <el-option v-for="({ grade_id, grade_name }) in Grade" :key="grade_id" :label="grade_name" :value="grade_id" />
  55. </el-select>
  56. <el-select clearable size="large" placeholder="科目" v-model="queryForm.dc_subject_id">
  57. <el-option v-for="({ subject_id, subject_name }) in Subject" :key="subject_id" :label="subject_name"
  58. :value="subject_id" />
  59. </el-select>
  60. <el-input clearable size="large" placeholder="关键字搜索" class="max-w-240px" :suffix-icon="Search"
  61. v-model="queryForm.dc_keyword"></el-input>
  62. </div>
  63. </div>
  64. <div class="flex-auto flex-col flex mt-4 justify-between">
  65. <div class="grid grid-cols-2 grid-rows-4 gap-4">
  66. <div class="cursor-pointer rounded shadow px-4 py-2 h-120px space-y-3" v-for="d in tableData"
  67. @click="routerPush({ name: 'teacher_index_detail', params: { id: d.dc_id } })">
  68. <div class="flex justify-between">
  69. <div class="text-xl whitespace-nowrap overflow-ellipsis overflow-hidden max-w-420px">{{ d.dc_title }}</div>
  70. <el-tag>{{ d.dc_keyword }}</el-tag>
  71. </div>
  72. <div class="flex space-x-6 text-gray-500">
  73. <div>{{ d.dc_grade_name }}</div>
  74. <div>{{ d.dc_subject_name }}</div>
  75. </div>
  76. <div class="text-sm text-gray-500 whitespace-nowrap overflow-ellipsis overflow-hidden">{{
  77. translateString(d.dc_content) }}</div>
  78. </div>
  79. </div>
  80. <div class="flex justify-end">
  81. <el-pagination background layout="prev, pager, next" :total="total"></el-pagination>
  82. </div>
  83. </div>
  84. </div>
  85. </template>
  86. <style scoped lang="scss">
  87. .tab_selected {
  88. color: #007DFF;
  89. &::after {
  90. content: '-';
  91. color: transparent;
  92. position: absolute;
  93. left: -5px;
  94. right: -5px;
  95. bottom: -4px;
  96. height: 15px;
  97. background: rgba(0, 125, 255, 0.30);
  98. border-radius: 8px;
  99. }
  100. }
  101. </style>