index.vue 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <template>
  2. <div>
  3. <page-header
  4. :loading="projectListLoading"
  5. :routes="[{ name: '代码作业', path: 'code' }, { name: '项目列表' }]"
  6. >
  7. <template slot="title">
  8. 项目列表
  9. </template>
  10. <template slot="content">
  11. 共有 {{ projectList.length }} 个项目
  12. </template>
  13. </page-header>
  14. <page-body>
  15. <div class="columns is-multiline is-desktop">
  16. <div v-if="projectListLoading" class="column is-4-desktop">
  17. <card loading />
  18. </div>
  19. <div
  20. v-else
  21. :key="item.projectId"
  22. v-for="item in projectList"
  23. class="column is-4"
  24. >
  25. <router-link :to="`${$route.path}/${item.id}`">
  26. <card hoverable>{{ item.name }}</card>
  27. </router-link>
  28. </div>
  29. </div>
  30. </page-body>
  31. </div>
  32. </template>
  33. <script>
  34. import { mapState } from "vuex";
  35. import { getProjectList } from "@/api/codehw";
  36. import Card from "@/components/Card";
  37. import PageHeader from "@/components/PageHeader";
  38. import PageBody from "@/components/PageBody/index";
  39. export default {
  40. components: {
  41. PageBody,
  42. PageHeader,
  43. Card
  44. },
  45. computed: {
  46. ...mapState({
  47. course: state => state.course.currentCourse
  48. })
  49. },
  50. data() {
  51. return {
  52. projectList: [],
  53. projectListLoading: false
  54. };
  55. },
  56. async mounted() {
  57. this.projectListLoading = true;
  58. const list = await getProjectList(this.$route.params.homeworkId);
  59. this.projectList = list.data;
  60. this.projectListLoading = false;
  61. }
  62. };
  63. </script>
  64. <style lang="scss" scoped>
  65. .top-nav-section {
  66. padding: 0 40px;
  67. }
  68. </style>