Kaynağa Gözat

老师端的界面初步进行

Prevalence 7 yıl önce
ebeveyn
işleme
d16fcc98d7

+ 8 - 0
src/api/dlwork.js

@@ -11,6 +11,14 @@ import { DL_WORK_MODULE } from "./_prefix";
 export const getDLAssignmentListByStu = courseId => {
   return request(`${DL_WORK_MODULE}/student/course/${courseId}/dlwork`);
 };
+/**
+ * 老师查看机器学习作业列表
+ * @param courseId
+ * @returns {Promise<*>}
+ */
+export const getDLAssignmentListByTeacher = courseId => {
+  return request(`${DL_WORK_MODULE}/teacher/course/${courseId}/dlwork`);
+};
 /**
  * 获得Project的详细信息
  * @param dlworkId

+ 5 - 0
src/layouts/courseLayouts/TeacherMenu.vue

@@ -25,6 +25,11 @@
           <img alt="" src="../../assets/icon/laptop.png" />代码作业
         </router-link>
       </li>
+      <li>
+        <router-link active-class="is-active" :to="`${prefix}/dlwork`">
+          <img alt="" src="../../assets/icon/laptop.png" />机器学习作业
+        </router-link>
+      </li>
       <li>
         <router-link active-class="is-active" :to="`${prefix}/document`">
           <img alt="" src="../../assets/icon/file.png" />文档作业

+ 4 - 0
src/router/routes.js

@@ -76,6 +76,10 @@ export default [
         path: "result",
         component: () => import("@/views/teacher/Result")
       },
+      {
+        path: "dlwork",
+        component: () => import("@/views/teacher/DlWork/index")
+      },
       {
         path: "code",
         component: () => import("@/views/teacher/Code/index")

+ 176 - 0
src/views/teacher/DlWork/index.vue

@@ -0,0 +1,176 @@
+<template>
+  <div>
+    <page-header
+      :loading="loadingDlWorkList"
+      :routes="[{ name: '机器学习作业', path: 'dlwork' }]"
+    >
+      <template slot="title">
+        机器学习作业列表
+      </template>
+      <template slot="content">
+        共有 {{ dlworkData.length }} 份作业
+      </template>
+      <template slot="action">
+        <create-assignment
+          @sendCreatedAssignment="pushNewAssignment($event)"
+          :course-id="Number(course.id)"
+          :assign-type="assignType"
+        ></create-assignment>
+      </template>
+    </page-header>
+
+    <page-body>
+      <page-section-loading :show="loadingDlWorkList" />
+      <div class="data-table">
+        <b-table
+          v-if="!loadingDlWorkList"
+          :data="dlworkData"
+          detailed
+          detail-key="id"
+        >
+          <template slot-scope="props">
+            <b-table-column label="作业名称" centered>
+              <router-link
+                :to="{
+                  path: `code/${props.row.id}`
+                }"
+              >
+                {{ props.row.name }}
+              </router-link>
+            </b-table-column>
+            <b-table-column label="状态" centered>
+              {{ props.row.status }}
+            </b-table-column>
+
+            <b-table-column label="开始时间" centered>
+              {{ displayUnixTime(props.row.startAt) }}
+            </b-table-column>
+
+            <b-table-column label="结束时间" centered>
+              {{ displayUnixTime(props.row.endAt) }}
+            </b-table-column>
+            <b-table-column label="修改" centered>
+              <update-assignment
+                :assign-type="assignType"
+                :update-item="props.row"
+                @updateDocData="updateData($event)"
+              ></update-assignment>
+            </b-table-column>
+            <b-table-column label="删除" centered>
+              <delete-assignment
+                :del-id="props.row.id"
+                :assign-type="assignType"
+                @del="deleteAssignment(props.row.id)"
+              ></delete-assignment>
+            </b-table-column>
+          </template>
+
+          <template slot="detail" slot-scope="props">
+            <article class="media">
+              <div class="media-content">
+                <div class="content">
+                  <p>
+                    <strong>作业描述:</strong>
+                    <small>{{ props.row.description }}</small> <br />
+                  </p>
+                </div>
+              </div>
+            </article>
+          </template>
+        </b-table>
+        <no-data-svg
+          style="margin-top: 20px;"
+          v-if="!loadingDlWorkList && !(dlworkData && dlworkData.length > 0)"
+        ></no-data-svg>
+      </div>
+    </page-body>
+  </div>
+</template>
+
+<script>
+import PageHeader from "@/components/PageHeader";
+import PageBody from "@/components/PageBody/index";
+import { getDLAssignmentListByTeacher } from "@/api/dlwork";
+import { mapState } from "vuex";
+import timeMixins from "@/mixins/time";
+import DeleteAssignment from "@/components/AssignmentCRUD/DeleteAssignment";
+import UpdateAssignment from "@/components/AssignmentCRUD/UpdateAssignment";
+import CreateAssignment from "@/components/AssignmentCRUD/CreateAssignment";
+import PageSectionLoading from "@/components/PageBody/PageSectionLoading/index";
+import NoDataSvg from "@/components/NoDataSvg";
+
+export default {
+  components: {
+    PageBody,
+    PageHeader,
+    DeleteAssignment,
+    UpdateAssignment,
+    CreateAssignment,
+    PageSectionLoading,
+    NoDataSvg
+  },
+  mixins: [timeMixins],
+  mounted() {
+    this.loadingDlWorkList = true;
+    const { courseId } = this.$route.params;
+    getDLAssignmentListByTeacher(courseId).then(res => {
+      this.dlworkData = res.data;
+      this.loadingDlWorkList = false;
+    });
+  },
+  data() {
+    return {
+      dlworkData: [],
+      assignType: 0,
+      loadingDlWorkList: false
+    };
+  },
+  computed: {
+    ...mapState({
+      course: state => state.course.currentCourse
+    })
+  },
+  methods: {
+    pushNewAssignment(item) {
+      this.dlworkData.push(item);
+    },
+    updateData(modifiedItem) {
+      let length = this.dlworkData.length;
+      for (let i = 0; i < length; i++) {
+        if (modifiedItem.id === this.dlworkData[i].id) {
+          this.dlworkData.splice(i, 1, modifiedItem);
+          break;
+        }
+      }
+    },
+    deleteAssignment(delId) {
+      let length = this.dlworkData.length;
+      for (let i = 0; i < length; i++) {
+        if (this.dlworkData[i].id === delId) {
+          this.dlworkData.splice(i, 1);
+          break;
+        }
+      }
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+.card {
+  padding: 30px;
+  .title {
+    font-size: 1.25rem;
+    small {
+      color: gray;
+      font-size: 1rem;
+    }
+  }
+  .content {
+    a {
+      margin-top: 30px;
+      width: 100%;
+    }
+  }
+}
+</style>