<template>
  <div style="height: 100%; padding-bottom: 20px;">
    <el-card>
      <div slot="header" class="lessonHeader">
        {{ $t('global.lessonSystem') }}
      </div>
      <el-button size="mini" type="primary" style="position: absolute;right: 10px;top: 10px;" @click="draftLessonManage">草稿课程管理</el-button>
    </el-card>
    <el-card v-loading="loading">
      <el-table :data="tableData" border style="width: 100%">
        <el-table-column prop="name" :label="this.$t('teach.courseName')" />
        <el-table-column v-if="isGzbShow" prop="classNames" label="所属班级">
          <template slot-scope="scope">
            <el-tag v-for="(item, index) in scope.row.classNames" :key="index" type="success">{{ item }}</el-tag>
          </template>
        </el-table-column>
        <el-table-column prop="remarks" show-overflow-tooltip :label="this.$t('teach.courseDescription')" />
        <el-table-column :label="this.$t('global.operate')">
          <template slot-scope="scope">
            <el-button size="mini" type="primary" @click="goLesson(scope.row)">{{ $t('teach.enterTheCourse') }}</el-button>
            <el-button v-if="(isLessonCreator && userId === scope.row.creatorId) || isAdmin" size="mini" type="primary" @click="handleEdit(scope.row)">编辑</el-button>
            <el-button v-if="(isLessonCreator && userId === scope.row.creatorId) || isAdmin" size="mini" type="warning" @click="handleSoldOut(scope.row)">下架</el-button>
            <el-button v-if="(isLessonCreator && userId === scope.row.creatorId) || isAdmin" size="mini" type="danger" @click="handleDelete(scope.row)">删除课程</el-button>
          </template>
        </el-table-column>
      </el-table>
    </el-card>
    <update-operate ref="updateLesson" :title="$t('publish.updateLesson')" @create="handleUpdate" />
  </div>
</template>

<script>
import { getSubSystemDetail } from '@/api/trainingPlatform';
import { UrlConfig } from '@/scripts/ConstDic';
import { forceDeleteLesson } from '@/api/jmap/lesson';
import { getSessionStorage } from '@/utils/auth';
import { lessonCreater, superAdmin, admin } from '@/router/index_APP_TARGET';
import { putLessonOffLine, updatePublishLesson } from '@/api/jmap/lesson';
import UpdateOperate from '@/views/publish/publishLesson/draft.vue';
import localStore from 'storejs';

export default {
    name: 'TeachHome',
    components:{
        UpdateOperate
    },
    data() {
        return {
            tableData: [],
            loading: false,
            project: '',
            mapId: '',
            prdType: ''
        };
    },
    computed: {
        isGzbShow() {
            return getSessionStorage('project').startsWith('gzb');
        },
        userId() {
            return this.$store.state.user.id;
        },
        isLessonCreator() {
            return this.$store.state.user.roles.includes(lessonCreater);
        },
        isAdmin() {
            return this.$store.state.user.roles.includes(admin) || this.$store.state.user.roles.includes(superAdmin);
        }
    },
    watch: {
        '$route.params.subSystem': function(newVal) {
            this.loadInitPage();
        }
    },
    mounted() {
        this.loadInitPage();
        this.project = getSessionStorage('project');
    },
    methods: {
        loadInitPage() {
            if (this.$route.params.subSystem) {
                getSubSystemDetail(this.$route.params.subSystem).then(resp =>{
                    if (resp.data) {
                        this.mapId = resp.data.mapId;
                        this.prdType = resp.data.prdType;
                        this.tableData = resp.data.lessonList;
                    } else {
                        this.tableData = [];
                    }
                }).catch((error)=>{
                    if (error.code == 30001) {
                        const url = localStore.get('orignalTrainingPlatformRoute' + this.$store.state.user.id + this.project);
                        if (url) {
                            this.$router.push(url);
                        }
                    } else {
                        this.$messageBox(this.$t('error.obtainCourseInformationFailed'));
                    }
                });
            }
        },
        goLesson(row) {
            this.$router.push({ path: `${UrlConfig.trainingPlatform.teachDetail}/${this.$route.params.subSystem}`, query: {lessonId: row.id, mapId: row.mapId, prdType: row.prdType}});
        },
        handleSoldOut(row) {
            this.$confirm(this.$t('publish.wellSoldOutTraining'), this.$t('global.tips'), {
                confirmButtonText: this.$t('global.confirm'),
                cancelButtonText: this.$t('global.cancel'),
                type: 'warning'
            }).then(() => {
                putLessonOffLine(row.id).then(response => {
                    this.$message.success(this.$t('publish.operationSuccess'));
                    this.reloadTable();
                }).catch(() => {
                    this.reloadTable();
                    this.$messageBox(this.$t('error.operationFailure'));
                });
            }).catch(() => { });
        },
        handleEdit(row) {
            this.$refs.updateLesson.doShow(row);
        },
        handleUpdate(data) {
            updatePublishLesson(data).then(response => {
                this.loadInitPage();
                this.$message.success(this.$t('publish.updateSuccess'));
            }).catch(() => {
                this.$messageBox(this.$t('error.updateFailed'));
            });
        },
        draftLessonManage() {
            const query = {mapId: this.mapId, prdType: this.prdType};
            this.$router.push({ path: `/trainingPlatform/draftTeach/${this.$route.params.subSystem}`, query: query });
        },
        handleDelete(row) {
            this.$confirm('此操作将删除课程及所有对应的试卷，且无法恢复，是否继续？', this.$t('global.tips'), {
                confirmButtonText: this.$t('global.confirm'),
                cancelButtonText: this.$t('global.cancel'),
                type: 'warning'
            }).then(() => {
                forceDeleteLesson(row.id).then(response => {
                    this.$message.success(this.$t('publish.deleteSuccess'));
                    this.loadInitPage();
                }).catch((error) => {
                    this.loadInitPage();
                    this.$messageBox(this.$t('error.deleteFailed') + ':' + error.message);
                });
            }).catch(() => { });
        }
    }
};
</script>
<style lang="scss" scoped>
.lessonHeader{
  text-align: center;
  font-weight: bold;
}
</style>
