index.vue 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. <template>
  2. <div>
  3. <page-header
  4. :loading="loadingDlWorkList"
  5. :routes="[{ name: '机器学习作业', path: 'dlwork' }]"
  6. >
  7. <template slot="title">
  8. 机器学习作业列表
  9. </template>
  10. <template slot="content">
  11. 共有 {{ dlworkData.length }} 份作业
  12. </template>
  13. <template slot="action">
  14. <create-assignment
  15. @sendCreatedAssignment="pushNewAssignment($event)"
  16. :course-id="Number(course.id)"
  17. :assign-type="assignType"
  18. ></create-assignment>
  19. </template>
  20. </page-header>
  21. <page-body>
  22. <page-section-loading :show="loadingDlWorkList" />
  23. <div class="data-table">
  24. <b-table
  25. v-if="!loadingDlWorkList"
  26. :data="dlworkData"
  27. detailed
  28. detail-key="id"
  29. >
  30. <template slot-scope="props">
  31. <b-table-column label="作业名称" centered>
  32. <router-link
  33. :to="{
  34. path: `code/${props.row.id}`
  35. }"
  36. >
  37. {{ props.row.name }}
  38. </router-link>
  39. </b-table-column>
  40. <b-table-column label="状态" centered>
  41. {{ props.row.status }}
  42. </b-table-column>
  43. <b-table-column label="开始时间" centered>
  44. {{ displayUnixTime(props.row.startAt) }}
  45. </b-table-column>
  46. <b-table-column label="结束时间" centered>
  47. {{ displayUnixTime(props.row.endAt) }}
  48. </b-table-column>
  49. <b-table-column label="修改" centered>
  50. <update-assignment
  51. :assign-type="assignType"
  52. :update-item="props.row"
  53. @updateDocData="updateData($event)"
  54. ></update-assignment>
  55. </b-table-column>
  56. <b-table-column label="删除" centered>
  57. <delete-assignment
  58. :del-id="props.row.id"
  59. :assign-type="assignType"
  60. @del="deleteAssignment(props.row.id)"
  61. ></delete-assignment>
  62. </b-table-column>
  63. </template>
  64. <template slot="detail" slot-scope="props">
  65. <article class="media">
  66. <div class="media-content">
  67. <div class="content">
  68. <p>
  69. <strong>作业描述:</strong>
  70. <small>{{ props.row.description }}</small> <br />
  71. </p>
  72. </div>
  73. </div>
  74. </article>
  75. </template>
  76. </b-table>
  77. <no-data-svg
  78. style="margin-top: 20px;"
  79. v-if="!loadingDlWorkList && !(dlworkData && dlworkData.length > 0)"
  80. ></no-data-svg>
  81. </div>
  82. </page-body>
  83. </div>
  84. </template>
  85. <script>
  86. import PageHeader from "@/components/PageHeader";
  87. import PageBody from "@/components/PageBody/index";
  88. import { getDLAssignmentListByTeacher } from "@/api/dlwork";
  89. import { mapState } from "vuex";
  90. import timeMixins from "@/mixins/time";
  91. import DeleteAssignment from "@/components/AssignmentCRUD/DeleteAssignment";
  92. import UpdateAssignment from "@/components/AssignmentCRUD/UpdateAssignment";
  93. import CreateAssignment from "@/components/AssignmentCRUD/CreateAssignment";
  94. import PageSectionLoading from "@/components/PageBody/PageSectionLoading/index";
  95. import NoDataSvg from "@/components/NoDataSvg";
  96. export default {
  97. components: {
  98. PageBody,
  99. PageHeader,
  100. DeleteAssignment,
  101. UpdateAssignment,
  102. CreateAssignment,
  103. PageSectionLoading,
  104. NoDataSvg
  105. },
  106. mixins: [timeMixins],
  107. mounted() {
  108. this.loadingDlWorkList = true;
  109. const { courseId } = this.$route.params;
  110. getDLAssignmentListByTeacher(courseId).then(res => {
  111. this.dlworkData = res.data;
  112. this.loadingDlWorkList = false;
  113. });
  114. },
  115. data() {
  116. return {
  117. dlworkData: [],
  118. assignType: 0,
  119. loadingDlWorkList: false
  120. };
  121. },
  122. computed: {
  123. ...mapState({
  124. course: state => state.course.currentCourse
  125. })
  126. },
  127. methods: {
  128. pushNewAssignment(item) {
  129. this.dlworkData.push(item);
  130. },
  131. updateData(modifiedItem) {
  132. let length = this.dlworkData.length;
  133. for (let i = 0; i < length; i++) {
  134. if (modifiedItem.id === this.dlworkData[i].id) {
  135. this.dlworkData.splice(i, 1, modifiedItem);
  136. break;
  137. }
  138. }
  139. },
  140. deleteAssignment(delId) {
  141. let length = this.dlworkData.length;
  142. for (let i = 0; i < length; i++) {
  143. if (this.dlworkData[i].id === delId) {
  144. this.dlworkData.splice(i, 1);
  145. break;
  146. }
  147. }
  148. }
  149. }
  150. };
  151. </script>
  152. <style lang="scss" scoped>
  153. .card {
  154. padding: 30px;
  155. .title {
  156. font-size: 1.25rem;
  157. small {
  158. color: gray;
  159. font-size: 1rem;
  160. }
  161. }
  162. .content {
  163. a {
  164. margin-top: 30px;
  165. width: 100%;
  166. }
  167. }
  168. }
  169. </style>