Explorar el Código

feat: 添加新建课件等的相关逻辑

ChenYangfan hace 6 años
padre
commit
914d7930ff

+ 3 - 1
package.json

@@ -11,6 +11,7 @@
   "dependencies": {
     "core-js": "^3.4.3",
     "highlight.js": "^9.17.1",
+    "moment": "^2.24.0",
     "register-service-worker": "^1.6.2",
     "uuid": "^3.3.3",
     "vue": "^2.6.10",
@@ -36,7 +37,8 @@
     "node-sass": "^4.12.0",
     "sass-loader": "^8.0.0",
     "vue-cli-plugin-axios": "^0.0.4",
-    "vue-template-compiler": "^2.6.10"
+    "vue-template-compiler": "^2.6.10",
+    "webpack": "latest"
   },
   "config": {
     "commitizen": {

+ 19 - 5
src/components/SlideCard.vue

@@ -1,15 +1,29 @@
 <template>
   <div class="slide-card" title="点击查看课件" @click="handleClick(123)">
-    <div class="slide-card-title">课件名称 <span class="tag">课件状态</span></div>
-    <div class="slide-card-time">更新时间:2020 年 2 月 2 日</div>
-    <div class="slide-card-course">所属课程:软件工程与计算 I</div>
-    <div class="slide-card-teacher">教师:史蒂夫</div>
+    <div class="slide-card-title">{{ slide.name }}
+      <span class="tag">{{slideStateTranslation[slide.state]}}</span>
+    </div>
+    <div class="slide-card-time">最近更新:{{ updateTime }}</div>
+    <div class="slide-card-course">所属课程:{{ slide.courseName }}</div>
+    <div class="slide-card-teacher">教师:{{ slide.teacherName }}</div>
   </div>
 </template>
 
 <script>
+import slideStateTranslation from '@/server/enums/slide-state-translation'
+
 export default {
-  props: ['index', 'clickHandler'],
+  props: ['index', 'clickHandler', 'slide'],
+  data () {
+    return {
+      slideStateTranslation
+    }
+  },
+  computed: {
+    updateTime () {
+      return this.$moment(this.slide.updateAt).fromNow()
+    }
+  },
   methods: {
     handleClick (slideId) {
       this.clickHandler(slideId)

+ 3 - 0
src/main.js

@@ -6,9 +6,12 @@ import router from './router'
 import uuid from 'uuid'
 import store from './store'
 import { SET_MESSAGE } from '@/store/types/message-types'
+import moment from 'moment'
 
 Vue.config.productionTip = false
 Vue.prototype.$uuid = uuid
+moment.locale('zh-cn')
+Vue.prototype.$moment = moment
 
 Vue.prototype.$setMessage = function ({ message, type = 'info' }) {
   this.$store.commit(SET_MESSAGE, {

+ 7 - 0
src/server/enums/slide-state-translation.js

@@ -0,0 +1,7 @@
+export default {
+  'DRAFT': '草稿',
+  'BEFORE_CLASS': '未上课',
+  'IN_CLASS': '课堂中',
+  'AFTER_CLASS': '已上课',
+  'FINISH': '测验结束'
+}

+ 1 - 2
src/views/api-test/ApiTest.vue

@@ -21,8 +21,7 @@ export default {
   },
   mounted() {
     loginByEmail({ email: 'liuqin@nju.edu.cn', password: '123456' }).then(res => {
-      console.log(res)
-      getUserInfo().then(res => console.log(res))
+      getUserInfo().then(res => {})
     })
   },
   methods: {

+ 6 - 7
src/views/teacher/components/TeacherSlideDetail.vue

@@ -5,10 +5,10 @@
     <c-button class="full-width mb-16" @click="handleReadSlide">浏览课件</c-button>
     <c-button class="full-width secondary mb-24" @click="handleQuizSetting">查看习题答题情况</c-button>
     <div class="sub-title">课件设置</div>
-    <div class="re-upload-wrapper">
-      <file-uploader placeholder="选取文件重新上传"/>
-      <c-button class="secondary">确认修改</c-button>
-    </div>
+<!--    <div class="re-upload-wrapper">-->
+<!--      <file-uploader placeholder="选取文件重新上传"/>-->
+<!--      <c-button class="secondary">确认修改</c-button>-->
+<!--    </div>-->
     <c-button class="secondary full-width mb-16" @click="handleQuizSetting">设置课件习题</c-button>
     <c-button class="error full-width mb-16">删除课件</c-button>
   </tab-side-component>
@@ -18,13 +18,12 @@
 import TabSideComponent from '@/components/TabSideComponent'
 import CButton from '@/components/CButton'
 import BackTitle from '@/components/BackTitle'
-import FileUploader from '@/components/FileUploader'
 
 export default {
-  components: { FileUploader, BackTitle, CButton, TabSideComponent },
+  components: { BackTitle, CButton, TabSideComponent },
   data () {
     return {
-      courseId: this.$route.params.courseId
+      slideId: this.$route.params.slideId
     }
   },
   methods: {

+ 5 - 1
src/views/teacher/tabs/CreateSlide.vue

@@ -72,7 +72,11 @@ export default {
         this.$setInfoMessage(this.message)
         return
       }
-      createSlide({ courseId: this.selectedCourseId, name: this.slideName, file: this.file })
+      createSlide({ courseId: this.selectedCourseId, name: this.slideName, file: this.file }).then(res => {
+        this.$setSuccessMessage('创建课件成功!')
+      }).catch(err => {
+        this.$setErrorMessage(err.response.data.msg)
+      })
     },
     handleFileChanged (file) {
       this.file = file || null

+ 1 - 1
src/views/teacher/tabs/TeacherExplore.vue

@@ -4,7 +4,7 @@
       <h1 class="title">我的主页</h1>
       <search-bar></search-bar>
       <section>
-        <h1 class="sub-title">最近浏览</h1>
+        <h1 class="sub-title">最近编辑</h1>
         <div class="no-content-warning" v-if="!slides || slides.length === 0">
           <div class="no-content-warning-tip">无最近浏览记录~</div>
         </div>

+ 6 - 1
vue.config.js

@@ -1,7 +1,12 @@
+const webpack = require('webpack')
+
 module.exports = {
   configureWebpack: {
     externals: {
       'pdfjs': 'pdfjsLib'
-    }
+    },
+    plugins: [
+      new webpack.ContextReplacementPlugin(/moment[/\\]locale$/, /zh-cn/)
+    ]
   }
 }

+ 5 - 0
yarn.lock

@@ -7259,6 +7259,11 @@ mkdirp@0.5.1, mkdirp@0.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp
   dependencies:
     minimist "0.0.8"
 
+moment@^2.24.0:
+  version "2.24.0"
+  resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b"
+  integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==
+
 move-concurrently@^1.0.1:
   version "1.0.1"
   resolved "https://registry.npm.taobao.org/move-concurrently/download/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"