|
|
@@ -0,0 +1,115 @@
|
|
|
+<template>
|
|
|
+ <div class="slide-card" title="点击查看课件" @click="handleClick(123)">
|
|
|
+ <div class="slide-card-title">
|
|
|
+ <c-icon theme="blue" :right="4" bold :size="16">slideshow</c-icon>
|
|
|
+ {{ slide.name }}
|
|
|
+ <c-tag :theme="tagTheme" v-if="!hideState">{{slideStateTranslation[slide.state]}}</c-tag>
|
|
|
+ </div>
|
|
|
+ <div v-if="!hideUpdateTime" class="slide-card-time">最近更新:{{ updateTime }}</div>
|
|
|
+ <div v-if="!hideCourse" class="slide-card-course">所属课程:{{ slide.courseName }}</div>
|
|
|
+ <div v-if="!hideTeacher" class="slide-card-teacher">教师:{{ slide.teacherName }}</div>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+import slideStateTranslation from '@/server/enums/slide-state-translation'
|
|
|
+import CIcon from '@/components/Basic/CIcon'
|
|
|
+import CTag from '@/components/Basic/CTag'
|
|
|
+import momentFromNow from '@/utils/moment-from-now'
|
|
|
+
|
|
|
+export default {
|
|
|
+ components: { CIcon, CTag },
|
|
|
+ props: {
|
|
|
+ clickHandler: {
|
|
|
+ type: Function,
|
|
|
+ default: () => {}
|
|
|
+ },
|
|
|
+ slide: {
|
|
|
+ type: Object
|
|
|
+ },
|
|
|
+ hideState: {
|
|
|
+ type: Boolean,
|
|
|
+ default: false
|
|
|
+ },
|
|
|
+ hideTeacher: {
|
|
|
+ type: Boolean,
|
|
|
+ default: false
|
|
|
+ },
|
|
|
+ hideCourse: {
|
|
|
+ type: Boolean,
|
|
|
+ default: false
|
|
|
+ },
|
|
|
+ hideUpdateTime: {
|
|
|
+ type: Boolean,
|
|
|
+ default: false
|
|
|
+ }
|
|
|
+ },
|
|
|
+ data () {
|
|
|
+ return {
|
|
|
+ slideStateTranslation
|
|
|
+ }
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ updateTime () {
|
|
|
+ return momentFromNow(this.slide.updateAt)
|
|
|
+ },
|
|
|
+ tagTheme () {
|
|
|
+ if (this.slide.state === 'IN_CLASS') {
|
|
|
+ return 'green'
|
|
|
+ } else if (this.slide.state === 'DRAFT') {
|
|
|
+ return 'red'
|
|
|
+ } else if (this.slide.state === 'BEFORE_CLASS' || this.slide.state === 'FINISH') {
|
|
|
+ return 'orange'
|
|
|
+ } else {
|
|
|
+ return 'blue'
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ handleClick () {
|
|
|
+ this.clickHandler(this.slide)
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="scss" scoped>
|
|
|
+@import '~@/style/theme.scss';
|
|
|
+
|
|
|
+.slide-card {
|
|
|
+ padding: 6px 8px 6px 16px;
|
|
|
+ border-radius: 12px;
|
|
|
+ // border-left: 4px solid $input-background-color;
|
|
|
+ background-color: $card-background;
|
|
|
+ transition: .2s;
|
|
|
+ cursor: pointer;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background-color: darken($card-background, 5);
|
|
|
+ // border-left: 4px solid $theme-blue;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.slide-card-title {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ font-size: 16px;
|
|
|
+ margin-bottom: 4px;
|
|
|
+ line-height: 1.9;
|
|
|
+}
|
|
|
+
|
|
|
+.slide-card-time, .slide-card-course {
|
|
|
+ font-size: 14px;
|
|
|
+ color: #6a7a8a;
|
|
|
+ margin-bottom: 4px;
|
|
|
+}
|
|
|
+
|
|
|
+.slide-card-teacher {
|
|
|
+ font-size: 14px;
|
|
|
+ color: #6a7a8a;
|
|
|
+}
|
|
|
+
|
|
|
+.c-icon {
|
|
|
+ transform: scale(1.2);
|
|
|
+}
|
|
|
+</style>
|