|
@@ -1,21 +1,224 @@
|
|
|
<template>
|
|
|
<div class="course-info">
|
|
|
- <div class="step"></div>
|
|
|
+ <step-bar :step-number="0" />
|
|
|
+ <div class="course-info-container">
|
|
|
+ <el-form
|
|
|
+ ref="form"
|
|
|
+ :model="form"
|
|
|
+ :rules="formRules"
|
|
|
+ label-position="left"
|
|
|
+ label-width="120px"
|
|
|
+ hide-required-asterisk
|
|
|
+ >
|
|
|
+ <el-form-item label="课程封面" class="cover">
|
|
|
+ <el-upload
|
|
|
+ action="no"
|
|
|
+ class="avatar-uploader"
|
|
|
+ :http-request="upload"
|
|
|
+ :before-upload="beforeUpload"
|
|
|
+ :show-file-list="false"
|
|
|
+ accept="image/*"
|
|
|
+ >
|
|
|
+ <img v-if="form.imageUrl" :src="form.imageUrl" class="avatar" />
|
|
|
+ <i v-else class="el-icon-plus avatar-uploader-icon"></i>
|
|
|
+ </el-upload>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="课程名称" prop="name">
|
|
|
+ <el-input v-model="form.name" type="text" class="name-input" placeholder="请输入" />
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="课程介绍">
|
|
|
+ <el-input
|
|
|
+ v-model="form.intro"
|
|
|
+ type="textarea"
|
|
|
+ placeholder="请输入"
|
|
|
+ resize="none"
|
|
|
+ class="intro-input"
|
|
|
+ rows="4"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="授课教师">
|
|
|
+ <el-button class="teacher" icon="el-icon-plus" circle />
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="课程周期">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="form.date"
|
|
|
+ type="daterange"
|
|
|
+ range-separator="~"
|
|
|
+ value-format="yyyy-MM-dd"
|
|
|
+ unlink-panels
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="学生数量">
|
|
|
+ <el-input v-model.number.lazy="form.student_count_start" class="student-count" />
|
|
|
+ <el-checkbox v-model="form.is_auto_close">报满后自动封班</el-checkbox>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="加入方式">
|
|
|
+ <el-radio v-model="form.student_enter_control_type" :label="0">公开</el-radio>
|
|
|
+ <el-radio v-model="form.student_enter_control_type" :label="1">需要申请</el-radio>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="价格">
|
|
|
+ <el-input v-model="form.price" class="price" @input="price">
|
|
|
+ <svg-icon slot="prepend" icon-class="dollar" />
|
|
|
+ </el-input>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="课后评价">
|
|
|
+ <el-radio v-model="form.is_enable_KHPJ" :label="true">开启</el-radio>
|
|
|
+ <el-radio v-model="form.is_enable_KHPJ" :label="false">关闭</el-radio>
|
|
|
+ <span class="tip">每节课后学生可对课程及老师进行打分及评价</span>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="学生自评">
|
|
|
+ <el-radio v-model="form.is_enable_XYZP" :label="true">开启</el-radio>
|
|
|
+ <el-radio v-model="form.is_enable_XYZP" :label="false">关闭</el-radio>
|
|
|
+ <span class="tip">每节课后学生需对自己的课上表现进行打分及评价</span>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item>
|
|
|
+ <el-button type="primary" class="next-step" @click.prevent="nextStep">
|
|
|
+ 下一步<i class="el-icon-right" />
|
|
|
+ </el-button>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
-export default {};
|
|
|
+import StepBar from '@/components/StepBar';
|
|
|
+import { fileUpload } from '@/api/app';
|
|
|
+import { CreateCourse } from '@/api/course';
|
|
|
+import { twoDecimal } from '@/utils/validate';
|
|
|
+
|
|
|
+export default {
|
|
|
+ name: 'CourseInfo',
|
|
|
+ components: { StepBar },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ form: {
|
|
|
+ imageUrl: '',
|
|
|
+ picture_id: '',
|
|
|
+ name: '',
|
|
|
+ intro: '',
|
|
|
+ teacher_id_list: [],
|
|
|
+ date: [],
|
|
|
+ begin_date: '',
|
|
|
+ end_date: '',
|
|
|
+ student_count_start: '',
|
|
|
+ is_auto_close: false,
|
|
|
+ student_enter_control_type: 0,
|
|
|
+ price: '',
|
|
|
+ is_enable_KHPJ: false,
|
|
|
+ is_enable_XYZP: false
|
|
|
+ },
|
|
|
+ formRules: {
|
|
|
+ name: { required: true, message: '课程名称不能为空', trigger: 'blur' }
|
|
|
+ }
|
|
|
+ };
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ nextStep() {
|
|
|
+ this.$refs.form.validate(valid => {
|
|
|
+ if (valid) {
|
|
|
+ this.form.begin_date = this.form.date[0];
|
|
|
+ this.form.end_date = this.form.date[1];
|
|
|
+
|
|
|
+ CreateCourse(this.form).then(response => {
|
|
|
+ this.$message.success('创建课程成功!');
|
|
|
+ this.$router.push({ path: `/create_course_step_table/select_book/${response.id}` });
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ beforeUpload(file) {
|
|
|
+ let isImage = /^image/.test(file.type);
|
|
|
+ if (!isImage) {
|
|
|
+ this.$message.error('上传的文件不是图片,请重新上传!');
|
|
|
+ }
|
|
|
+ return isImage;
|
|
|
+ },
|
|
|
+ upload(file) {
|
|
|
+ fileUpload('Open', file).then(response => {
|
|
|
+ const { file_info_list } = response;
|
|
|
+ if (file_info_list.length > 0) {
|
|
|
+ const { file_url, file_id } = file_info_list[0];
|
|
|
+ this.form.imageUrl = file_url;
|
|
|
+ this.form.picture_id = file_id;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ price(val) {
|
|
|
+ this.form.price = twoDecimal(val);
|
|
|
+ }
|
|
|
+ }
|
|
|
+};
|
|
|
</script>
|
|
|
|
|
|
-<style lang="scss" scoped>
|
|
|
+<style lang="scss">
|
|
|
+@import '~@/styles/mixin.scss';
|
|
|
+
|
|
|
.course-info {
|
|
|
- .step {
|
|
|
- position: fixed;
|
|
|
- top: $header-h + 1px;
|
|
|
- width: 100%;
|
|
|
- height: 156px;
|
|
|
+ @include container;
|
|
|
+
|
|
|
+ margin-top: $step-h;
|
|
|
+ margin-bottom: 20px;
|
|
|
+
|
|
|
+ &-container {
|
|
|
+ width: $basicWidth;
|
|
|
+ min-width: $basicWidth;
|
|
|
+ min-height: calc(100vh - #{$header-h} - #{$step-h} - 80px);
|
|
|
+ padding: 48px 64px;
|
|
|
background-color: #fff;
|
|
|
+ border-radius: 8px;
|
|
|
+
|
|
|
+ .el-form {
|
|
|
+ .cover .el-form-item__label {
|
|
|
+ line-height: 107px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .name-input {
|
|
|
+ width: 600px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .intro-input {
|
|
|
+ width: 600px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .teacher {
|
|
|
+ border-width: 0;
|
|
|
+ background-color: $basicColor;
|
|
|
+
|
|
|
+ .el-icon-plus {
|
|
|
+ color: #fff;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .student-count {
|
|
|
+ width: 120px;
|
|
|
+ margin-right: 28px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .price {
|
|
|
+ width: 120px;
|
|
|
+
|
|
|
+ .el-input-group__prepend {
|
|
|
+ padding: 0 12.5px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .next-step .el-icon-right {
|
|
|
+ margin-left: 12px;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
</style>
|