guojy vor 1 Jahr
Ursprung
Commit
5c02095bac
1 geänderte Dateien mit 0 neuen und 520 gelöschten Zeilen
  1. 0 520
      src/course/courseManage/create_next.vue

+ 0 - 520
src/course/courseManage/create_next.vue

@@ -1,520 +0,0 @@
-<!-- 课程创建/修改 -->
-
-<template>
-    <div class="pjc">
-      <el-page-header @back="$router.go(-1)" :content="title" style="margin-bottom: 30px;"></el-page-header>
-      <!-- <h3>{{ title }}</h3> -->
-      <el-form :model="courseDeail" label-width="110px" :rules="rules">
-        <el-form-item label="课程名称:" prop="name">
-          <el-input :maxlength="30"  show-word-limit v-model.trim="courseDeail.name" style="width: 40%" placeholder="输入课程名称,最多30字符"></el-input>
-        </el-form-item>
-        <el-form-item label="预览图:" prop="thumb">
-          <uploadOss
-            :headers="$xtoken"
-            :action="$action"
-            :limit="1"
-            list_type="picture-card"
-            :accept="$acceptImg"
-            :multiple="true"
-            ref="clearPicture"
-            coursePath="course"
-            :show-file-list="true"
-            :file-list="courseDeail.thumb"
-            :on-success="handleFilesSuccess2"
-            :on-preview="onFilePreView"
-            :before-upload="beforeUpload"
-            :on-remove="onFileRemove2"
-          >
-            <i class="el-icon-plus"></i>
-          </uploadOss>
-          <!-- <div style="display: flex;">
-            <div style="cursor: pointer;margin-right: 10px;" @click="showApm(courseDeail.thumb)">
-              <userImage
-              v-if="courseDeail.thumb"
-              width="100px"
-              height="100px"
-              radius="5px"
-              :img_url="courseDeail.thumb"
-              :user_name="courseDeail.name"
-            ></userImage>
-            </div>
-            <div class="cursor"  @click="showSelectImg(1)">
-              <div><i class="el-icon-plus"></i></div>
-            </div>
-          </div> -->
-        </el-form-item>
-        <el-form-item label="价格:" prop="price">
-          <el-input-number
-            v-model="courseDeail.price"
-            :min="0"
-            :max="10000000"
-            label="课程价格"
-          ></el-input-number>
-        </el-form-item>
-        <el-form-item label="是否上架:">
-          <el-switch
-            v-model="courseDeail.enable"
-            active-color="#13ce66"
-            inactive-color="#999"
-          >
-          </el-switch>
-        </el-form-item>
-        <el-form-item label="课程介绍:" prop="images">
-          <uploadOss
-            :headers="$xtoken"
-            :action="$action"
-            :limit="23"
-            list_type="picture-card"
-            :accept="$acceptImg"
-            :multiple="true"
-            ref="clearPicture"
-            coursePath="course"
-            :show-file-list="true"
-            :file-list="courseDeail.images"
-            :on-success="handleFilesSuccess"
-            :on-preview="onFilePreView"
-            :before-upload="beforeUpload"
-            :on-remove="onFileRemove"
-          >
-            <i class="el-icon-plus"></i>
-          </uploadOss>
-        </el-form-item>
-        
-        <el-form-item label="课程章节" size="normal">
-          <div class="sectionout">
-            <div
-              class="sectionInner"
-              v-for="(item, index) in courseDeail.sections"
-              :key="index"
-            >
-              <div class="sectionName">
-                <el-input v-model.trim="item.name" placeholder="请输入章节名..."></el-input>
-              </div>
-              <div class="sectionUrl">
-                <el-input v-model.trim="item.link" placeholder="请输入章节链接..."></el-input>
-              </div>
-              <div class="del">
-                <el-button
-                  type="text"
-                  size="mini"
-                  plain
-                  @click="sectionDel(index, item)"
-                  style="color: #f89881"
-                  >删除</el-button
-                >
-              </div>
-            </div>
-            <div class="addSection">
-              <el-button plain @click="addSection">+</el-button>
-            </div>
-          </div>
-        </el-form-item>
-  
-        <el-form-item style="display: flex; flex-direction: row-reverse">
-          <el-button @click="$router.go(-1)">取消</el-button>
-          <el-button @click="iffirm">{{ alterCreate }}</el-button>
-        </el-form-item>
-      </el-form>
-      <el-dialog :visible.sync="dialogVisible">
-        <img width="100%" :src="dialogImageUrl" alt="" />
-      </el-dialog>
-      <image-cropper
-        v-loading="company_img_loading"
-        field="file"
-        :width="imgWidth"
-        :height="imgHeight"
-        :url="'https://integralsys.oss-cn-shenzhen.aliyuncs.com'"
-        @close="company_img_show = false"
-        @crop-upload-success="company_img_success"
-        langType="zh"
-        v-if="company_img_show"
-      ></image-cropper>
-    </div>
-  </template>
-  <script>
-  import ImageCropper from "@/components/ImageCropper";
-  import uploadOss from '@/components/upload';
-  import { validateURL } from "@/utils/validate";
-  import {createCourse,updataCourse,getCourseDetail} from '../api'
-  export default {
-    name: "courseEdit",
-    components: { ImageCropper,uploadOss },
-    data() {
-      return {
-        curId: 0,
-        title: "",
-        company_img_show: false,
-        company_img_loading: false,
-        alterCreate: "保存",
-        imgIndex: 1,
-        imgWidth: 300,
-        imgHeight: 300,
-        // 个人信息
-        courseDeail: {
-          name: "",
-          price: 0,
-          thumb: [],
-          enable: true,
-          images: [],
-          sections: [],
-        },
-        dialogVisible: false,
-        dialogImageUrl: "",
-        rules: {
-            name: [
-              { required: true, message: '请输入课程名称', trigger: 'blur' },
-              { min: 1, max: 30, message: '长度在 1 到 30 个字符', trigger: 'blur' }
-            ],
-            price: [
-              { required: true, message: '请输入课程价格', trigger: 'blur' },
-              { type:'number',min: 1, message: '价格至少为1', trigger: 'blur' }
-            ],
-            thumb: [
-              { required: true, message: '请选择预览图', trigger: 'change' },
-              {type:'array',trigger:'change'}
-            ],
-            images: [
-              { required: true, message: '请选择介绍图', trigger: 'change' },
-              {type:'array',trigger:'change'}
-            ],
-          }
-      };
-    },
-    computed: {
-      courseImages() {
-        if (this.courseDeail.images) {
-          return this.courseDeail.images.split(",");
-        } else {
-          return [];
-        }
-      },
-    },
-    methods: {
-      // 介绍图上传格式
-      beforeUpload(file) {
-        const isJPG = /^image\/(jpeg|png|jpg)$/.test(file.type);
-        const isLt2M = file.size / 1024 / 1024 < 5;
-        if (!isJPG) {
-          this.$message.error('上传图片只能是 JPG,PNG,JPEG 格式!');
-        }
-        if (!isLt2M) {
-          this.$message.error('上传图片大小不能超过 5MB!');
-        }
-        return isJPG && isLt2M;
-      },
-      //介绍图预览
-      onFilePreView(file) {
-        this.showApm(file.url)
-      },
-      // 介绍图删除
-      onFileRemove(file, fileList) {
-        this.courseDeail.images = fileList
-      },
-      // 介绍图上传
-      handleFilesSuccess(response, file, fileList) {
-        let fileListData = fileList.filter(e => {
-          return e.url;
-        });
-        this.courseDeail.images = fileListData
-      },
-      // 预览图删除
-      onFileRemove2(file, fileList) {
-        this.courseDeail.thumb = fileList
-      },
-      // 预览图上传
-      handleFilesSuccess2(response, file, fileList) {
-        let fileListData = fileList.filter(e => {
-          return e.url;
-        });
-        this.courseDeail.thumb = fileListData
-      },
-      //章节信息校验
-      validateURL() {
-        let result = false;
-        result = this.courseDeail.sections.every((item) => {
-          return item.link !== '' && item.name !== "";
-          // return validateURL(item.link) && item.name !== "";
-        });
-        return result;
-      },
-      // 获取课程详情
-      getCourseDetail() {
-        getCourseDetail(this.curId).then((res) => {
-            this.courseDeail = this.uploadToData(res);
-        }).catch(err=>{
-          console.error(err)
-        });
-      },
-      //课程详情数据转换展示
-      uploadToData(data) {
-        data.enable = data.enable == 1 ? true : false;
-        data.price = Number(data.price);
-        let arr = []
-        data.images.forEach(item=>{
-          arr.push({name:item,url:item})
-        })
-        data.images = arr
-        let arr2 = []
-        data.thumb.forEach(item=>{
-          arr2.push({name:item,url:item})
-        })
-        data2.thumb = arr2
-        return data;
-      },
-      //预览图上传成功回调
-      company_img_success(resData) {
-        if (this.imgIndex == 1) {
-          this.courseDeail.thumb = resData.url;
-        } else {
-          if (
-            this.courseDeail.images.split(",").length == 1 &&
-            this.courseDeail.images.split(",")[0] == ""
-          ) {
-            this.courseDeail.images = resData.url;
-          } else {
-            this.courseDeail.images = `${this.courseDeail.images},${resData.url}`;
-          }
-        }
-        this.company_img_show = false;
-      },
-      // 查看预览图
-      showApm(url){
-        this.dialogVisible = true;
-        this.dialogImageUrl = url;
-      },
-      //打开上传预览图片组件
-      showSelectImg(type) {
-        this.imgIndex = type;
-        this.company_img_show = true;
-      },
-      //展示数据转换成上传数据
-      toUpdata() {
-        let data = JSON.parse(JSON.stringify(this.courseDeail));
-        data.enable = data.enable ? 1 : 0;
-        data.sections = JSON.stringify(data.sections);
-        let arr = data.images.map(item=>{
-          return item.url
-        })
-        data.images = arr.join(',')
-        let arr2 = data.thumb.map(item=>{
-          return item.url
-        })
-        data.thumb = arr2.join(',')
-        return data;
-      },
-      // 添加课程
-      addSection() {
-        let section = {
-          name: "",
-          link: "",
-        };
-        this.courseDeail.sections.push(section);
-      },
-      // 删除章节
-      sectionDel(index, item) {
-        this.$confirm("确定删除当前章节?", "提示", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning",
-        })
-          .then(() => {
-            this.courseDeail.sections.splice(index, 1);
-          })
-          .catch((err) => {
-            this.$message({
-              type: "info",
-              message: "已取消",
-            });
-          });
-      },
-      //保存
-      iffirm() {
-        if (
-          !this.courseDeail.name == "" &&
-          this.courseDeail.images.length &&
-          this.courseDeail.thumb.length &&
-          this.courseDeail.price &&
-          this.courseDeail.price !== 0 &&
-          this.validateURL()
-        ) {
-          this.$confirm("确定保存当前课程信息?", "提示", {
-            confirmButtonText: "确定",
-            cancelButtonText: "取消",
-            type: "info",
-          })
-            .then(() => {
-              if (this.$route.params.id) {
-                this.saveAlter();
-              } else {
-                this.saveCreate();
-              }
-            })
-            .catch(() => {
-              this.$message({
-                type: "info",
-                message: "已取消",
-              });
-            });
-        } else if (!this.validateURL()) {
-          this.$message({
-            type: "warning",
-            message: "章节列表未填写正确",
-          });
-        } else {
-          this.$message({
-            type: "warning",
-            message: "课程信息未填写完整",
-          });
-        }
-      },
-      //修改保存
-      saveAlter() {
-        let data = this.toUpdata();
-        updataCourse(this.curId,data).then(res=>{
-          this.$message({
-              message: "修改成功!",
-              type: "success",
-              showClose: true,
-              duration: 2000,
-            });
-            this.$router.push("/course/courseManage");
-        }).catch(err=>{
-          console.error(err)
-        })
-      },
-      //保存新建课程
-      saveCreate() {
-        let data = this.toUpdata();
-        createCourse(data).then(res=>{
-          this.$message({
-              message: "新建成功!",
-              type: "success",
-              showClose: true,
-              duration: 2000,
-            });
-            this.$router.push("/course/courseManage");
-        }).catch(err=>{
-          console.error(err)
-        })
-      },
-      //判断新建/修改
-      init() {
-        if (this.$route.params.id == undefined) {
-          this.title = "添加课程";
-          this.courseDeail = {
-            name: "",
-            price: 0,
-            thumb: [],
-            enable: true,
-            images: [],
-            sections: [],
-          };
-        } else {
-          this.curId = this.$route.params.id;
-          this.title = "编辑课程";
-          this.getCourseDetail();
-        }
-      },
-    },
-    created() {
-      this.init();
-    },
-  };
-  </script>
-  
-  <style scoped lang="scss">
-  .pjc {
-    width: 900px;
-    height: auto;
-    margin: 0 auto;
-    margin-top: 10px;
-    background-color: #fff;
-    border-radius: 5px;
-    padding: 30px 60px;
-    h3 {
-      color: #000;
-      text-align: center;
-      margin: 30px 0;
-    }
-    form {
-      legend {
-        font-size: 20px;
-        color: #000;
-        line-height: 30px;
-        font-weight: bold;
-        margin-bottom: 22px;
-      }
-      .el-form-item {
-        .el-select {
-          width: 380px;
-        }
-      }
-    }
-  }
-  .sectionout {
-    .sectionInner {
-      display: flex;
-      // justify-content: space-between;
-      align-items: center;
-      margin-bottom: 10px;
-      .sectionName {
-        width: 150px;
-        margin-right: 20px;
-      }
-      .sectionUrl {
-        width: 250px;
-        margin-right: 20px;
-      }
-      .sectionDel {
-      }
-    }
-  }
-  .img_all {
-    display: flex;
-    flex-wrap: wrap;
-    & > div {
-      margin-right: 10px;
-      margin-bottom: 10px;
-    }
-    .imgout{
-      position: relative;
-      .imgDelete{
-        width: 100%;
-        height: 100%;
-        display: flex;
-        align-items: center;
-        justify-content: center;
-        cursor: pointer;
-        position: absolute;
-        left:0;
-        top:0;
-        background-color: rgba(0,0,0,.3);
-        opacity: 0;
-        transition: opacity 0.3s ease;
-      } 
-      &:hover{
-        .imgDelete{
-          opacity:1;
-        }
-      }
-    }
-  }
-  .cursor {
-    & > div {
-      height: 100px;
-      width: 100px;
-      background-color: #fbfdff;
-      border: 1px dashed #c0ccda;
-      border-radius: 5px;
-      font-size: 30px;
-      display: flex;
-      justify-content: center;
-      align-items: center;
-      i{
-        font-size: 28px;
-        color: #8c939d;
-      }
-    }
-  }
-  </style>
-