diff --git a/src/utils/api.js b/src/utils/api.js index 5197871..75ec83c 100644 --- a/src/utils/api.js +++ b/src/utils/api.js @@ -157,6 +157,7 @@ export default { //课程管理 curriculumList: `nakadai/nakadai/curriculum/curriculumList`, //课程列表 createCurriculum: `nakadai/nakadai/curriculum/createCurriculum`, //创建课程 + configureCourseProject: `nakadai/nakadai/curriculum/configureCourseProject`, curriculumDetail: `nakadai/nakadai/curriculum/curriculumDetail`, //课程详情 modifyCourse: `nakadai/nakadai/curriculum/modifyCourse`, //编辑课程 delCourse: `nakadai/nakadai/curriculum/delCourse`, //单个、批量删除课程 diff --git a/src/views/course/Add.vue b/src/views/course/Add.vue index 9165d2b..c15d5eb 100644 --- a/src/views/course/Add.vue +++ b/src/views/course/Add.vue @@ -1,13 +1,13 @@ <template> <div class="wrap"> - <el-card v-if="!id" shadow="hover" class="m-b-20"> + <el-card shadow="hover" class="m-b-20"> <div class="flex-between"> <el-page-header @back="back" :content="'新建课程'"></el-page-header> </div> </el-card> <div class="page"> <div class="overflow"> - <ul :class="['steps', { pointer: !editing && id && publishStatus }]"> + <ul :class="['steps', { pointer: cid }]"> <li :class="{ active: step === 1, done: step > 1 }" @click="toStep(1)"> <span class="circle">1</span> <p class="text">填写课程信息</p> @@ -42,7 +42,7 @@ <el-form-item class="req" label="适用专业" required> <div class="subject"> - <div v-for="(item, i) in form.mallDisciplines" :key="i" class="line"> + <div v-for="(item, i) in form.curriculumDisciplines" :key="i" class="line"> <el-form-item label="学科类别"> <el-select v-model="item.categoryId" @change="getProfessionalClass(item)"> <el-option v-for="(item, index) in subjectList" :key="index" :label="item.disciplineName" @@ -62,10 +62,10 @@ :label="item.professionalName" :value="item.professionalId"></el-option> </el-select> </el-form-item> - <i v-if="i && !isDetail" class="del el-icon-delete" @click="form.mallDisciplines.splice(i, 1)"></i> + <i v-if="i" class="del el-icon-delete" @click="form.curriculumDisciplines.splice(i, 1)"></i> </div> </div> - <div v-if="!isDetail" class="subject-plus" @click="addSubject"> + <div class="subject-plus" @click="addSubject"> <i class="el-icon-circle-plus-outline"></i> </div> </el-form-item> @@ -104,11 +104,11 @@ <el-form-item label="课程简介" prop="briefIntroduction"> <Editor api-key='rnk6zw9v267xqz7pf98twt1vmrvltmd436je7a642pckltda' v-model="form.briefIntroduction" - :init="editorConfig" :disabled="isDetail" /> + :init="editorConfig" /> </el-form-item> <el-form-item label="详情介绍" prop="teachingObjectives"> <Editor api-key='rnk6zw9v267xqz7pf98twt1vmrvltmd436je7a642pckltda' v-model="form.teachingObjectives" - :init="editorConfig" :disabled="isDetail" /> + :init="editorConfig" /> </el-form-item> </el-form> @@ -215,9 +215,9 @@ </div> <div v-if="step !== 4" class="btns"> <el-button v-if="step === 2 || step === 3" type="primary" @click="prev">上一步</el-button> - <el-button v-else type="primary" @click="save(0, 2)">下一步</el-button> - <el-button type="primary" @click="save(1)">保存</el-button> - <el-button @click="cancel">{{ editing ? '取消' : '返回' }}</el-button> + <el-button v-else type="primary" @click="save(1)">下一步</el-button> + <el-button type="primary" @click="save()">保存</el-button> + <el-button @click="back">返回</el-button> </div> </div> @@ -312,14 +312,13 @@ export default { }, data () { return { + cid: this.$route.query.cid, headers: { token: sessionStorage.getItem("token") }, editorConfig, - isDetail: Boolean(this.$route.query.isDetail), step: 1, form: { - cid: this.$route.query.cid, curriculumName: "", curriculumType: '', courseType: "", @@ -333,7 +332,7 @@ export default { systemIdByPractice: [], supplier: [], coverUrl: 'https://izhixinyun.com/images/course-cover.png', - mallDisciplines: [ + curriculumDisciplines: [ { professionalClassList: [], professionalList: [], @@ -347,6 +346,9 @@ export default { curriculumName: [ { required: true, message: "请输入课程名称", trigger: "blur" } ], + curriculumType: [ + { required: true, message: "请选择课程类别", trigger: "change" } + ], categoryId: [ { required: true, message: "请选择学科类别", trigger: "change" } ], @@ -453,11 +455,11 @@ export default { this.getConfig() this.getSystem() this.getSupplier() - this.form.cid && this.getInfoData() + this.cid && this.getInfoData() }, methods: { getInfoData () { - this.$post(`${this.api.curriculumDetail}?cid=${this.form.cid}`).then(({ data }) => { + this.$post(`${this.api.curriculumDetail}?cid=${this.cid}`).then(({ data }) => { if (data.supplier) data.supplier = data.supplier.split(',').map(e => +e) if (data.categoryId) { this.$get(this.api.courseProfessionalClass, { disciplineId: data.categoryId }).then(res => { @@ -529,14 +531,14 @@ export default { professionalCategoryId: 1, professionalId: 1, } - this.form.mallDisciplines.push(e) + this.form.curriculumDisciplines.push(e) this.getProfessionalClassData(e) }, // 获取学科类别 getSubject () { this.$get(this.api.courseDiscipline).then(res => { this.subjectList = res.list - this.form.mallDisciplines.forEach(e => { + this.form.curriculumDisciplines.forEach(e => { e.categoryId === 1 && this.getProfessionalClass(e) }) }).catch(err => { }) @@ -556,7 +558,7 @@ export default { disciplineId: item.categoryId }).then(res => { item.professionalClassList = res.list - this.form.mallDisciplines.forEach(e => { + this.form.curriculumDisciplines.forEach(e => { e.professionalCategoryId === 1 && this.getProfessional(e) }) }).catch(err => { }) @@ -838,41 +840,100 @@ export default { this.practiceData.splice(index, 1, row); }, - save () { - this.$refs.form.validate((valid) => { - if (valid) { - if (this.submiting) return false - const form = JSON.parse(JSON.stringify(this.form)) - form.supplier = form.supplier.join() - - this.submiting = true - this.loadIns = this.$loading({ - lock: true, - text: 'Loading', - spinner: 'el-icon-loading', - background: 'rgba(0, 0, 0, 0.7)' + // 上一步 + prev () { + this.step-- + }, + async save (next) { + const { step } = this + // 第一步 + if (step === 1) { + this.$refs.form.validate(async (valid) => { + if (valid) { + if (this.submiting) return false + const form = JSON.parse(JSON.stringify(this.form)) + form.supplier = form.supplier.join() + + this.submiting = true + this.loadIns = this.$loading({ + lock: true, + text: 'Loading', + spinner: 'el-icon-loading', + background: 'rgba(0, 0, 0, 0.7)' + }) + if (this.cid) { + this.$post(this.api.modifyCourse, form).then((res) => { + this.$message.success("编辑成功"); + }).catch((res) => { + this.submiting = false + this.loadIns.close() + }); + } else { + this.$post(this.api.createCurriculum, form).then(({ cid }) => { + this.loadIns.close() + if (next) { + this.step = 2 + this.cid = cid + this.$router.replace('add?cid=' + cid) + } else { + this.back() + } + }).catch((res) => { + this.submiting = false + this.loadIns.close() + }) + } + } + }) + } else if (step === 2) { + // 添加练习项目 + if (!this.practiceData.length) { + return this.$message.warning("请添加练习项目配置") + } else { + const list = this.practiceData.map(i => { + let obj = { + isShow: i.isShow, + projectId: i.projectId || '', + paperId: i.paperId || '', + sort: Number(i.sort), + systemId: i.systemId + } + return obj + }); + list.sort((a, b) => a.sort - b.sort) + await this.$post(this.api.configureCourseProject, { + cid: this.cid, + systemIdByPractice: list }) - debugger - if (form.cid) { - this.$post(this.api.modifyCourse, form).then((res) => { - this.$message.success("编辑成功"); - }).catch((res) => { - this.submiting = false - this.loadIns.close() - }); + if (next) { + this.step = 3 } else { - this.$post(this.api.createCurriculum, form).then((res) => { - this.loadIns.close() - this.$router.push('/curriculum') - }).catch((res) => { - this.submiting = false - this.loadIns.close() - }); + this.back() } + } + } else if (step === 3) { + // 添加考核项目 + if (!this.assessmentData.length) { + return this.$message.warning("请添加考核项目配置") } else { - return false; + const list = this.assessmentData.map(i => { + let obj = { + isShow: i.isShow, + projectId: i.projectId, + paperId: i.paperId || '', + sort: Number(i.sort), + systemId: i.systemId + }; + return obj; + }); + list.sort((a, b) => a.sort - b.sort) + await this.$post(this.api.configureCourseProject, { + cid: this.cid, + systemIdByAssessment: list + }) + this.step = 4 } - }); + } }, // 返回上一页 back () { diff --git a/src/views/course/Curriculum.vue b/src/views/course/Curriculum.vue index 45c04e5..748003f 100644 --- a/src/views/course/Curriculum.vue +++ b/src/views/course/Curriculum.vue @@ -223,7 +223,7 @@ export default { // 编辑 edit (row) { this.setReferrer() - this.$router.push(`/addcurriculum?cid=${row.cid}`); + this.$router.push(`/curriculum/add?cid=${row.cid}`); }, // 内容设置 config (row) { diff --git a/src/views/course/contentSettings.vue b/src/views/course/contentSettings.vue index 6acedb1..376ffd2 100644 --- a/src/views/course/contentSettings.vue +++ b/src/views/course/contentSettings.vue @@ -6,8 +6,7 @@ </div> </el-card> <!--内容设置--> - <el-card shadow="hover" class="mgb20"> - <div class="page"> + <div class="page mgb20"> <div class="relative"> <div class="p-title">内容设置</div> <div class="btns"> @@ -191,7 +190,6 @@ <Pdf :visible.sync="pdfVisible" :src.sync="pdfSrc" /> </div> </div> - </el-card> <div class="player-download" id="playerDownload"></div> <el-dialog title="资源移动" :visible.sync="moveVisible" :close-on-click-modal="false" width="330px">