Parcourir la source

[新增] time picker

WuXinyu il y a 7 ans
Parent
commit
7b19596387
6 fichiers modifiés avec 123 ajouts et 3 suppressions
  1. 1 1
      mock/serializers/user/UserSerializer.js
  2. 1 0
      package.json
  3. 3 1
      src/main.js
  4. 12 0
      src/mixins/time.js
  5. 94 1
      src/views/teacher/Review/index.vue
  6. 12 0
      yarn.lock

+ 1 - 1
mock/serializers/user/UserSerializer.js

@@ -14,7 +14,7 @@ const makeId = require("../../util/makeId");
  * @param role
  * @returns {UserSerializerType}
  */
-module.exports = (role = "STUDENT") => {
+module.exports = (role = "TEACHER") => {
   return {
     id: makeId(),
     role: role,

+ 1 - 0
package.json

@@ -17,6 +17,7 @@
     "register-service-worker": "^1.5.2",
     "vue": "^2.5.17",
     "vue-chartjs": "^3.4.0",
+    "vue-flatpickr-component": "^8.1.1",
     "vue-markdown": "^2.2.4",
     "vue-router": "^3.0.1",
     "vuelidate": "^0.7.4",

+ 3 - 1
src/main.js

@@ -6,11 +6,13 @@ import "./registerServiceWorker";
 import Buefy from "buefy";
 import "./assets/scss/app.scss";
 import Vuelidate from "vuelidate";
-
+import VueFlatPickr from "vue-flatpickr-component";
+import "flatpickr/dist/flatpickr.css";
 Vue.config.productionTip = false;
 
 Vue.use(Vuelidate);
 Vue.use(Buefy);
+Vue.use(VueFlatPickr);
 
 new Vue({
   router,

+ 12 - 0
src/mixins/time.js

@@ -1,6 +1,18 @@
 import dayjs from "dayjs";
+import { Hindi } from "flatpickr/dist/l10n/hi.js";
 
 export default {
+  data() {
+    return {
+      config: {
+        wrap: true, // set wrap to true only when using 'input-group'
+        altFormat: "M	j, Y",
+        altInput: true,
+        dateFormat: "Y-m-d",
+        locale: Hindi // locale for this instance only
+      }
+    };
+  },
   methods: {
     displayUnixTime(time) {
       if (!time) return;

+ 94 - 1
src/views/teacher/Review/index.vue

@@ -7,6 +7,11 @@
       <template slot="content">
         共有 {{ review.length }} 份互评作业
       </template>
+      <template slot="action">
+        <a @click="() => (this.showModal = true)" class="button is-link">
+          新建互评作业
+        </a>
+      </template>
     </page-header>
     <page-body>
       <div class="columns is-multiline is-desktop">
@@ -20,6 +25,60 @@
         </div>
       </div>
     </page-body>
+    <b-modal :active.sync="showModal">
+      <div class="card">
+        <div class="title">创建互评作业</div>
+        <b-notification type="is-danger" :active.sync="isServerError">
+          {{ errorMassage }}
+        </b-notification>
+        <div class="content">
+          //```json { "documentHwId": Number, //文档作业id, "taskNumber":
+          Number, //互评任务数 "startAt" : Number, //互评开始时间 "reviewDdl" :
+          **Number** - 互评结束时间 | `timestamp`, "argueDdl" : **Number** -
+          argue结束时间 | `timestamp`, "endDdl" : **Number** - 最后结束时间 |
+          `timestamp` } ```
+          <b-field label="目标文档作业">
+            <b-select
+              :loading="docHomeworkLoading"
+              v-model="nextReview.documentHwId"
+              placeholder="选择一个文档作业"
+              expanded
+            >
+              <option
+                v-for="option in docHomework"
+                :value="option.id"
+                :key="option.id"
+              >
+                {{ option.name }}
+              </option>
+            </b-select>
+          </b-field>
+          <b-field label="互评任务数">
+            <b-input type="number" v-model="nextReview.taskNumber"></b-input>
+          </b-field>
+          <b-field label="互评开始时间">
+            <b-input type="number" v-model="nextReview.startAt"></b-input>
+          </b-field>
+          <b-field label="互评结束时间">
+            <b-input type="number" v-model="nextReview.reviewDdl"></b-input>
+          </b-field>
+          <b-field label="申请重审结束时间">
+            <b-input type="number" v-model="nextReview.argueDdl"></b-input>
+          </b-field>
+          <b-field label="重审结束时间">
+            <b-input type="number" v-model="nextReview.endDdl"></b-input>
+          </b-field>
+
+          <a
+            class="button is-link"
+            :class="{ 'is-loading': submitLoading }"
+            @click="submit()"
+          >
+            创建互评作业
+          </a>
+        </div>
+      </div>
+    </b-modal>
   </div>
 </template>
 
@@ -30,6 +89,7 @@ import Card from "@/components/Card";
 import PageHeader from "@/components/PageHeader";
 import PageBody from "@/components/PageBody/index";
 import ReviewStateTag from "@/components/ReviewStateTag/index";
+import { getDocAssignmentListByCrs } from "@/api/assignment";
 export default {
   components: {
     ReviewStateTag,
@@ -45,18 +105,51 @@ export default {
   data() {
     return {
       courses: [],
-      review: []
+      review: [],
+      showModal: false,
+      submitLoading: false,
+      docHomework: [],
+      docHomeworkLoading: false,
+      errorMassage: false,
+      isServerError: false,
+      nextReview: {
+        documentHwId: null,
+        taskNumber: 0
+      }
     };
   },
   mounted() {
     getTeacherCourseReviewList(this.courses.id).then(
       value => (this.review = value.data)
     );
+  },
+  watch: {
+    showModal(newValue) {
+      if (newValue) {
+        this.getDocHomework();
+      }
+    }
+  },
+  methods: {
+    async getDocHomework() {
+      this.docHomeworkLoading = true;
+      const { courseId } = this.$route.params;
+      const { data } = await getDocAssignmentListByCrs(courseId);
+      this.docHomework = data;
+      this.docHomeworkLoading = false;
+    }
   }
 };
 </script>
 
 <style lang="scss" scoped>
+@import "../../../assets/scss/app";
+.card {
+  padding: $default-margin-between;
+  border-radius: $default-radius;
+  margin: 0 auto;
+  max-width: 600px;
+}
 .top-nav-section {
   padding: 0 40px;
 }

+ 12 - 0
yarn.lock

@@ -3864,6 +3864,11 @@ flat-cache@^1.2.1:
     rimraf "~2.6.2"
     write "^0.2.1"
 
+flatpickr@^4.5.1:
+  version "4.5.2"
+  resolved "http://registry.npm.taobao.org/flatpickr/download/flatpickr-4.5.2.tgz#47c8ad472a096e5fb7e74b809b0703535383f20d"
+  integrity sha1-R8itRyoJbl+350uAmwcDU1OD8g0=
+
 flush-write-stream@^1.0.0:
   version "1.0.3"
   resolved "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd"
@@ -9293,6 +9298,13 @@ vue-eslint-parser@^4.0.2:
     esquery "^1.0.1"
     lodash "^4.17.11"
 
+vue-flatpickr-component@^8.1.1:
+  version "8.1.1"
+  resolved "http://registry.npm.taobao.org/vue-flatpickr-component/download/vue-flatpickr-component-8.1.1.tgz#f0876e62cc8a6fdbe0e0cc5068f3a314b972a96f"
+  integrity sha1-8IduYsyKb9vg4MxQaPOjFLlyqW8=
+  dependencies:
+    flatpickr "^4.5.1"
+
 vue-hot-reload-api@^2.3.0:
   version "2.3.1"
   resolved "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.1.tgz#b2d3d95402a811602380783ea4f566eb875569a2"