Lesson.vue 10.2 KB
Newer Older
耿迪迪's avatar
耿迪迪 committed
1 2 3 4
<!--
 * @Author: 纪泽龙 jizelong@qq.com
 * @Date: 2022-09-22 10:59:44
 * @LastEditors: 纪泽龙 jizelong@qq.com
5
 * @LastEditTime: 2023-02-01 15:21:15
耿迪迪's avatar
耿迪迪 committed
6 7 8 9 10 11 12 13 14 15 16 17 18 19
 * @FilePath: /danger-manage-web/src/views/lessonsProgram/components/Lession.vue
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
<template>
  <div class="form-wrapper">
    <el-form
      class="form"
      ref="form"
      :model="form"
      label-width="auto"
      :rules="rules"
    >
      <div class="top flex">
        <el-form-item label="课程标题" prop="courseName">
lizhichao's avatar
lizhichao committed
20
          <el-input style="width: 568px" v-model="form.courseName" :disabled="checkLock"></el-input>
耿迪迪's avatar
耿迪迪 committed
21 22
        </el-form-item>

23
        <!--<el-form-item label="培训计划" prop="courseType">-->
24 25 26 27 28 29 30 31 32 33 34 35 36
        <!--<el-select-->
        <!--v-model="form.courseType"-->
        <!--placeholder="请选择培训计划"-->
        <!--clearable-->
        <!--size="small"-->
        <!--&gt;-->
        <!--<el-option-->
        <!--v-for="course in courseOptions"-->
        <!--:key="course.planId"-->
        <!--:label="course.planName"-->
        <!--:value="course.planId"-->
        <!--/>-->
        <!--</el-select>-->
37 38 39
        <!--</el-form-item>-->
      </div>
      <div class="flex">
40
        <el-form-item label="培训计划" prop="courseType">
耿迪迪's avatar
耿迪迪 committed
41 42
          <el-select
            v-model="form.courseType"
43
            placeholder="请选择培训计划"
耿迪迪's avatar
耿迪迪 committed
44 45
            clearable
            size="small"
46
            :disabled="checkLock"
lizhichao's avatar
lizhichao committed
47
            style="width:215px"
耿迪迪's avatar
耿迪迪 committed
48 49 50 51 52 53 54 55 56
          >
            <el-option
              v-for="course in courseOptions"
              :key="course.planId"
              :label="course.planName"
              :value="course.planId"
            />
          </el-select>
        </el-form-item>
57 58 59 60 61 62
        <el-form-item
          label="培训时长"
          prop="duration"
          style="margin-left: 55px"
        >
          <el-input
lizhichao's avatar
lizhichao committed
63
            style="width: 180px"
64 65 66 67 68
            placeholder="分钟"
            type="number"
            v-model="form.duration"
            :disabled="checkLock"
          ></el-input>
lizhichao's avatar
lizhichao committed
69 70 71
          <el-label>
          (分钟)
          </el-label>
72 73 74 75 76 77 78 79 80 81 82
        </el-form-item>
      </div>
      <div class="flex">
        <el-form-item label="开始时间" prop="testStartTime">
          <el-date-picker
            style="margin-right: 50px"
            v-model="form.testStartTime"
            value-format="yyyy-MM-dd HH:mm:ss"
            type="datetime"
            placeholder="选择日期时间"
            default-time="00:00:00"
83
            :disabled="checkLock"
84 85 86 87 88 89 90 91 92
          />
        </el-form-item>
        <el-form-item label="结束时间" prop="testEndTime">
          <el-date-picker
            v-model="form.testEndTime"
            value-format="yyyy-MM-dd HH:mm:ss"
            type="datetime"
            placeholder="选择日期时间"
            default-time="00:00:00"
93
            :disabled="checkLock"
94 95
          />
        </el-form-item>
96 97 98 99
        <el-form-item label="是否人脸认证" prop="isVeriftyFace" style="margin-left: 50px">
          <el-radio v-model="form.isVeriftyFace" label="1"></el-radio>
          <el-radio v-model="form.isVeriftyFace" label="2"></el-radio>
        </el-form-item>
耿迪迪's avatar
耿迪迪 committed
100 101 102
      </div>
      <!-- </div> -->
      <el-form-item label="课程内容" prop="courseConent">
103
        <Editor v-model="form.courseConent" :min-height="192" :readOnly="checkLock"/>
耿迪迪's avatar
耿迪迪 committed
104 105 106 107 108 109 110 111
        <el-input
          v-show="false"
          disabled
          v-model="form.courseConent"
        ></el-input>
      </el-form-item>

      <div class="flex">
112
        <el-form-item label="视频上传" v-if="!readOnly"  prop="video">
耿迪迪's avatar
耿迪迪 committed
113 114 115 116 117 118 119
          <FileUpload
            listType="picture"
            @resFun="getFileInfoVideo"
            @remove="listRemoveVideo"
            :fileArr="fileListVideo"
            :fileSize="500"
            :fileType="['mp4']"
120
            :disabled="checkLock"
耿迪迪's avatar
耿迪迪 committed
121 122 123 124 125 126 127 128 129
          />
          <el-input v-show="false" disabled v-model="form.video"></el-input>
        </el-form-item>
        <el-form-item label="附件上传" v-if="!readOnly" prop="enclosure">
          <FileUpload
            listType="picture"
            @resFun="getFileInfoFile"
            @remove="listRemoveFile"
            :fileArr="fileListFile"
130
            :fileType="fileType"
131
            :disabled="checkLock"
耿迪迪's avatar
耿迪迪 committed
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156
          />
          <el-input v-show="false" disabled v-model="form.enclosure"></el-input>
        </el-form-item>
      </div>
    </el-form>
  </div>
</template>

<script>
import Editor from "./Editor";
import FileUpload from "@/components/FileUpload";
import uploadfile from "@/assets/uploadfile.png";
import { mapGetters } from "vuex";
import {
  addLessons,
  getLessonById,
  changeLesson,
} from "@/api/educationPlanExam/lessonsProgram";

export default {
  name: "",
  props: {
    courseId: {
      type: Number,
    },
157 158 159
    checkLock:{
      type:Boolean,
    }
耿迪迪's avatar
耿迪迪 committed
160 161 162 163 164 165 166 167 168 169 170 171 172
  },
  components: {
    Editor,
    FileUpload,
  },
  data() {
    return {
      form: {
        courseName: "",
        courseType: "",
        courseConent: "",
        video: "",
        enclosure: "",
173
        isVeriftyFace: "2"
耿迪迪's avatar
耿迪迪 committed
174
      },
175
      fileType: ["doc", "docx", "xls", "xlsx", "ppt", "txt", "pdf"],
耿迪迪's avatar
耿迪迪 committed
176 177 178 179 180
      fileListVideo: [],
      fileListFile: [],
      readOnly: false,
      rules: {
        courseName: [
181
          { required: true, trigger: "blur", message: "课程标题不能为空" },
耿迪迪's avatar
耿迪迪 committed
182 183 184 185 186 187 188
        ],
        courseType: [
          { required: true, trigger: "change", message: "课程类型不能为空" },
        ],
        courseConent: [
          { required: true, trigger: "blur", message: "课程内容不能为空" },
        ],
189
        // video: [{ required: true, trigger: "blue", message: "视频不能为空" }],
耿迪迪's avatar
耿迪迪 committed
190 191 192
        enclosure: [
          { required: true, trigger: "blur", message: "附件不能为空" },
        ],
193 194 195 196 197 198 199 200 201
        duration: [
          { required: true, trigger: "blur", message: "培训时长不能为空" },
        ],
        testStartTime: [
          { required: true, trigger: "blur", message: "开始时间不能为空" },
        ],
        testEndTime: [
          { required: true, trigger: "blur", message: "结束时间不能为空" },
        ],
耿迪迪's avatar
耿迪迪 committed
202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230
      },
    };
  },
  computed: {
    // 获取课程类型
    ...mapGetters(["courseOptions"]),
  },
  created() {
    if (this.courseId) {
      this.getLessonById();
    }
  },
  mounted() {},
  methods: {
    // 添加课程
    addLessons(data) {
      console.log("this.courseId", this.courseId);
      if (!this.courseId) {
        console.log("添加");
        return addLessons(data);
      } else {
        console.log("修改");
        return changeLesson({ courseId: this.courseId, ...data });
      }
    },
    // 复现
    getLessonById() {
      getLessonById(this.courseId).then((res) => {
        if (res.code == 200) {
231
          res.data.duration=res.data.duration/60;
耿迪迪's avatar
耿迪迪 committed
232
          const data = res.data;
233 234 235 236 237 238 239 240 241
          const {
            courseName,
            courseType,
            courseConent,
            video,
            enclosure,
            duration,
            testStartTime,
            testEndTime,
242
            isVeriftyFace,
243
          } = data;
耿迪迪's avatar
耿迪迪 committed
244 245 246 247 248 249
          this.form = {
            courseName,
            courseType,
            courseConent,
            video,
            enclosure,
zhangjianqian's avatar
zhangjianqian committed
250 251
            duration,
            testStartTime,
252
            testEndTime,
253
            isVeriftyFace,
耿迪迪's avatar
耿迪迪 committed
254
          };
255 256
          console.log('video',video)
          this.fileListVideo = video? [
耿迪迪's avatar
耿迪迪 committed
257 258 259 260
            {
              name: courseName + "视频",
              url: uploadfile,
            },
261
          ]:[];
耿迪迪's avatar
耿迪迪 committed
262 263 264 265 266 267
          this.fileListFile = [
            {
              name: courseName + "附件",
              url: uploadfile,
            },
          ];
268
          console.log("--", this.fileListFile);
耿迪迪's avatar
耿迪迪 committed
269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319
        }
      });
    },
    getFileInfoVideo(res) {
      this.form.video = res.url;
      // this.form.videoName = res.fileName;
      this.fileListVideo = [
        {
          name: res.fileName,
          url: uploadfile,
        },
      ];
    },
    listRemoveVideo(e) {
      this.fileListVideo = [];
      this.form.video = "";
      // this.form.videoName = null;
    },
    getFileInfoFile(res) {
      this.form.enclosure = res.url;
      // this.form.enclosureName = res.fileName;
      this.fileListFile = [
        {
          name: res.fileName,
          url: uploadfile,
        },
      ];
    },
    listRemoveFile(e) {
      this.fileListFild = [];
      this.form.enclosure = "";
      // this.form.fileName = null;
    },
    save(num = 2) {
      // 因为富文本编辑器会残留<p><br></p>,所以要清
      if (this.form.courseConent === "<p><br></p>") {
        this.form.courseConent = "";
      }
      this.$refs.form.validate((valid) => {
        if (valid) {
          // console.log(this.form);
          this.addLessons({ ...this.form }).then((res) => {
            // 如果添加会传回来,就用传回来的,如果是修改本身就有,就用本身的
            const courseId = res.data || this.courseId;
            if (res.code == 200) {
              // 这样调比较纯函数一点
              if (num == 2) {
                this.$message({
                  message: "保存课程成功",
                  type: "success",
                });
320 321
                // 隐藏dia
                this.$parent.$parent.dialogCancel()
耿迪迪's avatar
耿迪迪 committed
322 323 324 325 326
              } else if (num == 3) {
                this.$message({
                  message: "保存课程成功,请开始录入题目",
                  type: "success",
                });
327 328 329
                // 跳转动态路由,并且把ID改变添加用
                this.$parent.$parent.componentsNumChange(num);
                this.$parent.$parent.changeCourseId(courseId);
耿迪迪's avatar
耿迪迪 committed
330
              }
331

耿迪迪's avatar
耿迪迪 committed
332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350
              this.$parent.$parent.$parent.getList();

              return true;
            }
          });
        }
      });
    },
    // 保存并进入题目
    saveAndNext() {
      this.save(3);
    },
  },
};
</script>
<style lang="scss" scoped>
.form-wrapper {
  padding-top: 22px;
  width: 100%;
351
  height: 680px;
耿迪迪's avatar
耿迪迪 committed
352 353 354 355 356 357 358 359 360 361 362
  overflow: hidden;
  // padding-bottom: 10px;
  margin-bottom: 20px;

  border-bottom: 1px solid #bbbbbb;
  .top {
    width: 100%;
    justify-content: space-between;
  }
}
</style>