|
@@ -24,43 +24,47 @@
|
|
|
</div>
|
|
|
<div class="create-bottom">
|
|
|
<el-form :model="organizeForm" :rules="rulesOrganize" ref="organizeForm" label-width="100px" class="registerForm" v-if="stepIndex===0">
|
|
|
- <el-form-item label="课程封面" prop="avatar">
|
|
|
- <el-upload
|
|
|
- class="avatar-uploader"
|
|
|
- action="https://jsonplaceholder.typicode.com/posts/"
|
|
|
- :show-file-list="false"
|
|
|
- :on-success="handleAvatarSuccess"
|
|
|
- :before-upload="beforeAvatarUpload">
|
|
|
- <el-image v-if="organizeForm.avatar" :src="organizeForm.avatar" fit="contain"></el-image>
|
|
|
- <i v-else class="el-icon-plus avatar-uploader-icon">Upload</i>
|
|
|
- </el-upload>
|
|
|
+ <el-form-item label="课程封面" prop="cover_image_url">
|
|
|
+ <upload :datafileList="organizeForm.cover_image_list" :changeFillId="handleAvatarSuccess" :fileName="'cover'" :showList="true" uploadType="image" :filleNumber="1" v-if="!organizeForm.cover_image_url" />
|
|
|
+ <div class="cover-box" v-else @mouseover="Imagemouseover('coverFlag',true)" @mouseout="Imagemouseover('coverFlag',false)">
|
|
|
+ <el-image :src="organizeForm.cover_image_url" fit="contain" style="max-width:200px;max-height:200px;"></el-image>
|
|
|
+ <p v-show="coverFlag" @click="handleDeleteFile('cover',0)"><i class="el-icon-delete"></i></p>
|
|
|
+ </div>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="课程名称" prop="title">
|
|
|
- <el-input v-model="organizeForm.title" placeholder="请输入课程名称"></el-input>
|
|
|
+ <el-input v-model="organizeForm.title" placeholder="请输入课程名称" @blur="handleTrim('organizeForm','title')"></el-input>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="机构" prop="orgName">
|
|
|
- <el-input v-model="organizeForm.orgName" placeholder="请输入机构"></el-input>
|
|
|
+ <el-select v-model="organizeForm.orgName" filterable allow-create default-first-option placeholder="请选择">
|
|
|
+ <el-option
|
|
|
+ v-for="item in orgList"
|
|
|
+ :key="item.id"
|
|
|
+ :label="item.name"
|
|
|
+ :value="item.name">
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="教师" prop="teacher">
|
|
|
- <el-select v-model="organizeForm.teacher" multiple placeholder="请选择">
|
|
|
+ <el-select v-model="organizeForm.teacher" multiple filterable allow-create default-first-option placeholder="请选择">
|
|
|
<el-option
|
|
|
- v-for="item in $orgType"
|
|
|
- :key="item.value"
|
|
|
- :label="item.label"
|
|
|
- :value="item.value"
|
|
|
- :disabled="item.disabled">
|
|
|
+ v-for="(item,i) in teacherList"
|
|
|
+ :key="item+i"
|
|
|
+ :label="item"
|
|
|
+ :value="item">
|
|
|
</el-option>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="开始时间" prop="startData">
|
|
|
<el-date-picker
|
|
|
v-model="organizeForm.startData"
|
|
|
- type="date"
|
|
|
- placeholder="选择日期">
|
|
|
+ type="datetime"
|
|
|
+ placeholder="选择日期"
|
|
|
+ value-format="yyyy-MM-dd HH:mm:ss"
|
|
|
+ format="yyyy-MM-dd HH:mm">
|
|
|
</el-date-picker>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="直播链接" prop="liveLink" class="live-link">
|
|
|
- <el-input v-model="organizeForm.liveLink" placeholder="请输入直播链接">
|
|
|
+ <el-input v-model="organizeForm.liveLink" placeholder="请输入直播链接" @blur="handleTrim('organizeForm','liveLink')">
|
|
|
<template slot="prepend">Http://</template>
|
|
|
</el-input>
|
|
|
</el-form-item>
|
|
@@ -97,10 +101,12 @@
|
|
|
import Header from "../../../components/Header.vue";
|
|
|
import NavMenu from "../../../components/NavMenu.vue"
|
|
|
import Breadcrumb from '../../../components/Breadcrumb.vue';
|
|
|
+import { getLogin } from "@/api/ajax";
|
|
|
+import Upload from "../../../components/Upload.vue"
|
|
|
|
|
|
export default {
|
|
|
//import引入的组件需要注入到对象中才能使用
|
|
|
- components: { Header, NavMenu, Breadcrumb },
|
|
|
+ components: { Header, NavMenu, Breadcrumb, Upload },
|
|
|
props: {},
|
|
|
data() {
|
|
|
//这里存放数据
|
|
@@ -155,7 +161,9 @@ export default {
|
|
|
newPwdFlag: false, // 查看新密码
|
|
|
comfirmPwdFlag: false, // 查看确认密码
|
|
|
organizeForm:{
|
|
|
- avatar: '',
|
|
|
+ cover_image_url: '',
|
|
|
+ cover_image_list: [],
|
|
|
+ cover_image_id: null,
|
|
|
title: '',
|
|
|
orgName: '',
|
|
|
teacher: [],
|
|
@@ -186,7 +194,10 @@ export default {
|
|
|
currentPrice:[
|
|
|
{ required: true, validator: validatePrice, trigger: 'blur' },
|
|
|
],
|
|
|
- }
|
|
|
+ },
|
|
|
+ teacherList:['李老师','赵老师'],
|
|
|
+ orgList:[],
|
|
|
+ coverFlag: false,
|
|
|
}
|
|
|
},
|
|
|
//计算属性 类似于data概念
|
|
@@ -204,7 +215,15 @@ export default {
|
|
|
if(type=='-'){
|
|
|
if(this.stepIndex>0) this.stepIndex--
|
|
|
}else{
|
|
|
- if(this.stepIndex<1) this.stepIndex++
|
|
|
+ if(this.stepIndex<1) {
|
|
|
+ this.$refs['organizeForm'].validate((valid) => {
|
|
|
+ if (valid) {
|
|
|
+ this.handleAddCourse()
|
|
|
+ } else {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
},
|
|
|
// 级联选择器
|
|
@@ -232,15 +251,122 @@ export default {
|
|
|
handleChange(value) {
|
|
|
// console.log(value)
|
|
|
},
|
|
|
- handleAvatarSuccess(res, file) {
|
|
|
- this.organizeForm.avatar = URL.createObjectURL(file.raw);
|
|
|
+ handleAvatarSuccess(fileList,name) {
|
|
|
+ if(name==='cover'){
|
|
|
+ this.organizeForm.cover_image_list = fileList
|
|
|
+ this.organizeForm.cover_image_id = fileList[0]&&fileList[0].response&&fileList[0].response.file_info_list&&fileList[0].response.file_info_list[0]?fileList[0].response.file_info_list[0].file_id:''
|
|
|
+ this.organizeForm.cover_image_url = fileList[0]&&fileList[0].response&&fileList[0].response.file_info_list&&fileList[0].response.file_info_list[0]?fileList[0].response.file_info_list[0].file_url:''
|
|
|
+ }else if(name==='courseVideo'){
|
|
|
+ this.createCourseForm.videoResource = fileList
|
|
|
+ this.createCourseForm.file_id = fileList[0]&&fileList[0].response&&fileList[0].response.file_info_list&&fileList[0].response.file_info_list[0]?fileList[0].response.file_info_list[0].file_id:''
|
|
|
+ this.createCourseForm.file_url = fileList[0]&&fileList[0].response&&fileList[0].response.file_info_list&&fileList[0].response.file_info_list[0]?fileList[0].response.file_info_list[0].file_url:''
|
|
|
+ }else if(name==='courseAudio'){
|
|
|
+ this.createCourseForm.audioResource = fileList
|
|
|
+ this.createCourseForm.file_id = fileList[0]&&fileList[0].response&&fileList[0].response.file_info_list&&fileList[0].response.file_info_list[0]?fileList[0].response.file_info_list[0].file_id:''
|
|
|
+ this.createCourseForm.file_url = fileList[0]&&fileList[0].response&&fileList[0].response.file_info_list&&fileList[0].response.file_info_list[0]?fileList[0].response.file_info_list[0].file_url:''
|
|
|
+ }else if(name==='courseResource'){
|
|
|
+ fileList.forEach(item=>{
|
|
|
+ if(item.response&&item.response.file_info_list&&item.response.file_info_list[0]){
|
|
|
+ let index = item.response.file_info_list[0].file_name.lastIndexOf('.');
|
|
|
+ item.name = item.response.file_info_list[0].file_name
|
|
|
+ let type = item.response.file_info_list[0].file_name.substring(index + 1).toLowerCase()
|
|
|
+ item.type = this.handleJudgeType(type)
|
|
|
+ item.file_id = item.response.file_info_list[0].file_id
|
|
|
+ }
|
|
|
+ })
|
|
|
+ this.createCourseForm.resource = fileList
|
|
|
+ }
|
|
|
+ },
|
|
|
+ Imagemouseover(item,flag) {
|
|
|
+ this[item] = flag
|
|
|
+ },
|
|
|
+ handleDeleteFile(item,i) {
|
|
|
+ this.$confirm("确定删除吗?", "提示", {
|
|
|
+ confirmButtonText: "确定",
|
|
|
+ cancelButtonText: "取消",
|
|
|
+ type: "warning",
|
|
|
+ }).then(() => {
|
|
|
+ if(item==='cover'){
|
|
|
+ this.organizeForm.cover_image_list.splice(i, 1);
|
|
|
+ this.organizeForm.cover_image_url = ''
|
|
|
+ this.organizeForm.cover_image_id = null
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ handleAddCourse(){
|
|
|
+ let MethodName = "/CourseServer/Manager/ZBCourseManager/AddZBCourse";
|
|
|
+ let form = this.organizeForm
|
|
|
+ let data = {
|
|
|
+ cover_image_id: form.cover_image_id,
|
|
|
+ name: form.title,
|
|
|
+ org_id: form.orgName,
|
|
|
+ teacher_name_list:form.teacher,
|
|
|
+ begin_time: form.startData,
|
|
|
+ price: form.price,
|
|
|
+ price_discount: form.currentPrice,
|
|
|
+ url: form.liveLink
|
|
|
+ }
|
|
|
+ if(this.id){
|
|
|
+ MethodName = "/CourseServer/Manager/ZBCourseManager/UpdateZBCourse"
|
|
|
+ data.id = this.id
|
|
|
+ }
|
|
|
+ getLogin(MethodName, data)
|
|
|
+ .then((res) => {
|
|
|
+ if(res.status===1){
|
|
|
+ this.recordedId = res.id
|
|
|
+ this.stepIndex++
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .catch(() => {
|
|
|
+ this.loading = false
|
|
|
+ });
|
|
|
+ },
|
|
|
+ // 去掉前后空格
|
|
|
+ handleTrim(form,fild){
|
|
|
+ this[form][fild] = this[form][fild].trim()
|
|
|
+ },
|
|
|
+ // 查询机构列表
|
|
|
+ getOrgList(){
|
|
|
+ let MethodName = "/OrgServer/Client/OrgManager/GetOrgIndexList";
|
|
|
+ let data = {
|
|
|
+ status: 1
|
|
|
+ }
|
|
|
+ getLogin(MethodName, data)
|
|
|
+ .then((res) => {
|
|
|
+ if(res.status===1){
|
|
|
+ this.orgList = res.org_index_list
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .catch(() => {
|
|
|
+ });
|
|
|
},
|
|
|
- beforeAvatarUpload(file) {
|
|
|
- const isLt2M = file.size / 1024 / 1024 < 2;
|
|
|
- if (!isLt2M) {
|
|
|
- this.$message.error('上传头像图片大小不能超过 2MB!');
|
|
|
+ // 获取课程信息
|
|
|
+ getCourseInfo(){
|
|
|
+ let MethodName = "/CourseServer/Manager/ZBCourseManager/GetZBCourseInfo";
|
|
|
+ let data = {
|
|
|
+ id: this.id
|
|
|
}
|
|
|
- return isLt2M;
|
|
|
+ getLogin(MethodName, data)
|
|
|
+ .then((res) => {
|
|
|
+ if(res.status===1){
|
|
|
+ let form = this.organizeForm
|
|
|
+ form.cover_image_id = res.zb_course.cover_image_id
|
|
|
+ form.cover_image_url = res.zb_course.cover_image_url
|
|
|
+ form.cover_image_list.push[{
|
|
|
+ id: res.zb_course.cover_image_id
|
|
|
+ }]
|
|
|
+ form.title = res.zb_course.name
|
|
|
+ form.orgName = res.zb_course.org_id
|
|
|
+ form.teacher = res.zb_course.teacher_name_list
|
|
|
+ form.price = res.zb_course.price
|
|
|
+ form.currentPrice = res.zb_course.price_discount
|
|
|
+ form.liveLink = res.zb_course.url
|
|
|
+ form.startData = res.zb_course.begin_time
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .catch(() => {
|
|
|
+ this.loading = false
|
|
|
+ });
|
|
|
},
|
|
|
},
|
|
|
//生命周期 - 创建完成(可以访问当前this实例)
|
|
@@ -252,8 +378,10 @@ export default {
|
|
|
}
|
|
|
if(this.id){
|
|
|
obj.text = '编辑课程'
|
|
|
+ this.getCourseInfo()
|
|
|
}
|
|
|
this.breadcrumbList.push(obj)
|
|
|
+ this.getOrgList()
|
|
|
},
|
|
|
//生命周期 - 挂载完成(可以访问DOM元素)
|
|
|
mounted() {
|
|
@@ -299,6 +427,25 @@ export default {
|
|
|
line-height: 20px;
|
|
|
}
|
|
|
}
|
|
|
+.cover-box{
|
|
|
+ position: relative;
|
|
|
+ width: 200px;
|
|
|
+ height: 200px;
|
|
|
+ p{
|
|
|
+ position: absolute;
|
|
|
+ bottom: 0;
|
|
|
+ left: 0;
|
|
|
+ width: 100%;
|
|
|
+ height: 200px;
|
|
|
+ line-height: 200px;
|
|
|
+ font-size: 20px;
|
|
|
+ text-align: center;
|
|
|
+ cursor: pointer;
|
|
|
+ background: rgba(0, 0, 0, 0.3);
|
|
|
+ color: #F2F3F5;
|
|
|
+ margin: 0;
|
|
|
+ }
|
|
|
+}
|
|
|
</style>
|
|
|
|
|
|
<style lang="scss">
|
|
@@ -341,4 +488,9 @@ export default {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+.el-date-picker__editor-wrap{
|
|
|
+ .el-input, .el-textarea{
|
|
|
+ width: auto;
|
|
|
+ }
|
|
|
+}
|
|
|
</style>
|