<template>
  <div id="festivalEdit">
    <div class="boxWidth">
      <el-form
        label-position="right"
        label-width="120px"
        :model="listData"
        :rules="rules"
        ref="listData"
      >
        <el-form-item label="适用业务层级">
          <el-select
            v-model="eduType"
            placeholder="请选择教育类型"
            @change="changeEduType"
          >
            <el-option
              v-for="(item, index) in eduTypeOptions"
              :key="index"
              :label="item.educationName"
              :value="item.id"
            >
            </el-option>
          </el-select>
          <el-select
            v-model="courType"
            placeholder="请选择业务层次"
            @change="changecourseType"
          >
            <el-option
              v-for="(item, index) in newCourTypeOptions"
              :key="index"
              :label="item.businessName"
              :value="item.id"
            >
            </el-option>
          </el-select>
          <el-popover
            ref="popovers"
            placement="bottom"
            trigger="click"
            @show="showHandle"
            @hide="hideHandle"
            :disabled="courType ? false : true"
          >
            <el-checkbox-group v-model="sujectArray" class="checkboxSty">
              <el-checkbox
                v-for="(item, index) in newSujectOption"
                :label="item.newId"
                :key="index"
                >{{ item.subjectName }}</el-checkbox
              >
            </el-checkbox-group>
            <div style="display:block;text-align:center;margin-top:10px;">
            <el-button size="mini" type="primary" @click="submitSujectArray"
              >确定</el-button
            ></div>
            <el-button slot="reference" style="margin-left: 12px"
              >请选择科目</el-button
            >
          </el-popover>
        </el-form-item>
        <el-form-item label="已选业务层级">
          <div :class="changeHeight ? 'ach' : 'clh'">
            <div
              v-for="(item, index) in newSujectApis"
              :key="index"
              class="listBoxStys"
            >
              {{
                item.educationName +
                " - " +
                item.projectName +
                " - " +
                item.businessName +
                " - " +
                item.subjectName
              }}
              <i class="el-icon-error closeIcons" @click="closeType(index)"></i>
            </div>
          </div>
          <el-button
            size="mini"
            v-if="newSujectApis.length > 1"
            @click="changeType"
            >{{ changeHeight ? "展开" : "关闭" }}</el-button
          >
          <span v-if="newSujectApis.length === 0">未选项目类型</span>
        </el-form-item>
        <el-form-item label="标题前缀" prop="prefixName">
          <el-input v-model="listData.prefixName"></el-input>
        </el-form-item>
        <el-form-item label="节标题" prop="name">
          <el-input v-model="listData.name"></el-input>
        </el-form-item>
        <el-form-item label="节类型">
          <el-select v-model="listData.sectionType" placeholder="请选择节类型">
            <el-option
              v-for="(item, index) in sectionTypeOptions"
              :key="index"
              :label="item.label"
              :value="item.value"
            >
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="直播流地址" v-if="listData.sectionType === 2">
          <el-input
            style="width: 300px"
            v-model="listData.liveUrl"
            placeholder="请输入直播流地址"
          ></el-input>
          <el-select
            v-model="newActiveLiveUrl"
            placeholder="快捷选中直播流地址"
            @change="changeLiveUrl"
          >
            <el-option
              v-for="(item, index) in newLiveUrl"
              :key="index"
              :label="item.introduce"
              :value="item.id"
            >
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="直播开始时间" v-if="listData.sectionType === 2">
          <el-date-picker
            v-model="listData.liveStartTime"
            type="datetime"
            placeholder="请选择直播开始时间"
            value-format="timestamp"
          >
          </el-date-picker>
        </el-form-item>
        <el-form-item label="直播结束时间" v-if="listData.sectionType === 2">
          <el-date-picker
            v-model="listData.liveEndTime"
            type="datetime"
            placeholder="请选择直播结束时间"
            value-format="timestamp"
          >
          </el-date-picker>
        </el-form-item>
        <el-form-item label="节时长" v-if="listData.sectionType === 2">
          <el-input
            class="numInputs"
            type="age"
            v-model.number="listData.durationTime"
            ><template slot="append">分钟</template></el-input
          >
        </el-form-item>
        <el-form-item
          label="URL地址"
          v-if="listData.sectionType === 1 || listData.sectionType === 3"
        >
          <el-input
            style="width: 300px"
            v-model="listData.recordingUrl"
            placeholder="请输入URL地址"
          ></el-input>
          <el-select
            v-if="listData.sectionType === 1"
            v-model="newActiveRecordingUrl1"
            placeholder="快捷选中录播URL地址"
            @change="changeRecordingUrl1"
          >
            <el-option
              v-for="(item, index) in newSteamUrl1"
              :key="index"
              :label="item.introduce"
              :value="item.id"
            >
            </el-option>
          </el-select>
          <el-select
            v-if="listData.sectionType === 3"
            v-model="newActiveRecordingUrl2"
            placeholder="快捷选中回放URL地址"
            @change="changeRecordingUrl2"
          >
            <el-option
              v-for="(item, index) in newSteamUrl2"
              :key="index"
              :label="item.introduce"
              :value="item.id"
            >
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item
          label="节时长"
          v-if="listData.sectionType === 1 || listData.sectionType === 3"
        >
          <el-input
            class="numInputs"
            type="age"
            v-model.number="listData.durationTime"
            ><template slot="append">分钟</template></el-input
          >
        </el-form-item>
        <el-form-item label="节封面">
          <div class="imgBoxins">
            <img :src="$methodsTools.splitImgHost(listData.coverUrl)" alt="" />
            <div
              class="posimg"
              v-if="
                listData.coverUrl === null ||
                listData.coverUrl === '' ||
                listData.coverUrl === undefined
              "
            >
              <label for="uplose">
                <i class="el-icon-circle-plus-outline iconStsz"></i
              ></label>
              <input
                ref="file"
                type="file"
                style="display: none"
                id="uplose"
                @change="getImgFile"
              />
              <p>
                注：请上传小于300kb，尺寸为750*440的图片，支持gif、jpg、jpeg、png等类型
              </p>
            </div>
          </div>
          <el-button
            v-if="
              listData.coverUrl !== null &&
              listData.coverUrl !== '' &&
              listData.coverUrl !== undefined
            "
            type="danger"
            size="mini"
            class="margin-top: 20px;"
            @click="clearImgs"
            >删除</el-button
          >
        </el-form-item>
        <el-form-item label="是否发布" prop="publishStatus">
          <el-radio-group v-model="listData.publishStatus">
            <el-radio :label="1">是</el-radio>
            <el-radio :label="0">否</el-radio>
          </el-radio-group>
        </el-form-item>
        <el-form-item>
          <el-button @click="backPage">取消</el-button>
          <el-button type="primary" @click="submit('listData')">确定</el-button>
        </el-form-item>
      </el-form>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      sectionTypeOptions: [
        {
          label: "录播",
          value: 1,
        },
        {
          label: "直播",
          value: 2,
        },
        {
          label: "回放",
          value: 3,
        },
      ],
      //   弹窗数据
      changeHeight: true,
      bfImg: "oss/images/avatar/20211013/1634097664410_1397766697",
      listData: {
        recordingUrl: "",
        liveUrl: "",
        coverUrl: "oss/images/avatar/20211013/1634097664410_1397766697",
      },
      newActiveLiveUrl: "",
      newLiveUrl: [], //直播流地址
      newActiveRecordingUrl1: "",
      newSteamUrl1: [], //录播流地址
      newActiveRecordingUrl2: "",
      newSteamUrl2: [], //回放流地址
      eduTypeOptions: [], //教育类型数据
      projectTypeOptions: [], //项目类型数据
      courTypeOptions: [], //业务层次数据
      newCourTypeOptions: [], //当前业务层次数据
      sujectOption: [], //科目数据
      newSujectOption: [], //当前科目数据数据
      eduType: "", //当前选中教育类型
      courType: "", //当前选中业务层次
      sujectApis: [], //当前存在的科目
      newSujectApis: [],
      sujectArray: [], //选中的科目
      //表单验证
      rules: {
        prefixName: [
          { required: true, message: "请输入标题前缀", trigger: "blur" },
        ],
        name: [{ required: true, message: "请输入节标题", trigger: "blur" }],
        // liveDuration: [
        //   { required: true, message: "节时长不能为空" },
        //   { type: "number", message: "节时长必须为数字值" },
        // ],
        publishStatus: [
          { required: true, message: "请选择是否发布", trigger: "change" },
        ],
      },
    };
  },
  watch: {
    sujectApis: {
      immediate: true,
      handler(newName, oldName) {
        this.changeTypes();
      },
    },
  },
  mounted() {
    this.getDict();
    this.search();
  },
  methods: {
    search() {
      this.$api.obtainCourseSection(this.$route.query.id).then((res) => {
        this.bfImg = res.data.coverUrl;
        if(res.data.sectionType === 2){
          res.data.liveStartTime = this.$methodsTools.time10to13(res.data.liveStartTime,2)
          res.data.liveEndTime = this.$methodsTools.time10to13(res.data.liveEndTime,2)
        }
        this.listData = res.data;
        this.$api
          .obtaincourseSectionbusiness(this.$route.query.id)
          .then((result) => {
            var arrays = [];
            result.data.map((item) => {
              arrays.push(item.businessId + "-" + item.subjectId);
            });
            this.sujectApis = arrays;
          });
      });
    },
    clearImgs() {
      this.listData.coverUrl = "";
    },
    changeTypes() {
      var self = this;
      var arrays = [];
      this.sujectApis.map((item, index) => {
        this.courTypeOptions.map((items) => {
          if (items.id === item.split("-").map(Number)[0]) {
            var obj = {
              educationTypeId: items.educationId,
              educationName: items.educationName,
              projectId: items.projectId,
              projectName: items.projectName,
              businessId: items.id,
              businessName: items.businessName,
            };
            self.sujectOption.map((i) => {
              if (
                i.id === item.split("-").map(Number)[1] &&
                i.courseArrays.indexOf(items.projectId) !== -1
              ) {
                obj.subjectName = i.subjectName;
                obj.subjectId = i.id;
              }
            });
            arrays.push(obj);
          }
        });
      });
      this.newSujectApis = arrays;
    },
    changeType() {
      this.changeHeight = !this.changeHeight;
    },
    submitSujectArray() {
      var self = this;
      this.sujectApis = this.sujectApis.filter((item, index) => {
        return item.split("-").map(Number)[0] !== Number(self.courType);
      });
      for (let i = 0; i < this.sujectArray.length; i++) {
        this.sujectApis.push(this.sujectArray[i]);
      }
      this.$refs.popovers.doClose();
    },
    showHandle() {
      var array = [];
      for (let i = 0; i < this.sujectApis.length; i++) {
        if (
          this.sujectApis[i].split("-").map(Number)[0] === Number(this.courType)
        ) {
          array.push(this.sujectApis[i]);
        }
      }
      this.sujectArray = array;
      this.newSujectOption.map((item) => {
        item.newId = this.courType + "-" + item.id;
      });
    },
    hideHandle() {},
    getDict() {
      this.$api.inquireCourseEducationType({ status: 1 }).then((res) => {
        this.eduTypeOptions = res.rows;
      });
      this.$api.inquireCourseProjectType({ status: 1 }).then((res) => {
        this.projectTypeOptions = res.rows;
      });
      this.$api.inquirebusinessList({ status: 1 }).then((res) => {
        this.courTypeOptions = res.rows;
        this.newCourTypeOptions = res.rows;
      });
      this.$api.inquireCourseSubject({ status: 1 }).then((res) => {
        res.rows.map((item, index) => {
          var array = [];
          item.courseProjectTypes.map((items, indexs) => {
            array.push(items.id);
          });
          item.courseArrays = array;
        });
        this.sujectOption = res.rows;
      });
      this.$api.inquireCourseStreaming({ status: 1 }).then((res) => {
        var arrays = [];
        var newarrays1 = [];
        var newarrays2 = [];
        res.rows.map((item) => {
          if (item.streamingType === 1) {
            arrays.push(item);
          }
          if (item.streamingType === 2) {
            newarrays1.push(item);
          }
          if (item.streamingType === 3) {
            newarrays2.push(item);
          }
        });
        this.newLiveUrl = arrays;
        this.newSteamUrl1 = newarrays1;
        this.newSteamUrl2 = newarrays2;
      });
    },
    changeEduType() {
      if (!(this.courType === undefined || this.courType === "")) {
        this.courType = "";
      }
      var arrays = [];
      this.courTypeOptions.map((item) => {
        if (item.educationId === this.eduType) {
          arrays.push(item);
        }
      });
      this.newCourTypeOptions = arrays;
    },
    changecourseType() {
      this.newCourTypeOptions.map((item, index) => {
        if (item.id === this.courType) {
          this.eduType = item.educationId;
          var array = [];
          this.sujectOption.map((items, indexs) => {
            if (items.courseArrays.indexOf(item.projectId) !== -1) {
              array.push(items);
            }
          });
          this.newSujectOption = array;
        }
      });
      var arrays = [];
      this.courTypeOptions.map((item) => {
        if (item.educationId === this.eduType) {
          arrays.push(item);
        }
      });
      this.newCourTypeOptions = arrays;
      this.$refs.popovers.doClose();
    },
    submit(formName) {
      this.$refs[formName].validate((valid) => {
        if (valid) {
          if (
            this.listData.coverUrl === "" ||
            this.listData.coverUrl === null ||
            this.listData.coverUrl === undefined
          ) {
            this.$message.error("请上传节封面");
            return false;
          }
          this.rulesTableSumbit();
        } else {
          return false;
        }
      });
    },
    async rulesTableSumbit() {
      var dataInfos = {
        status: 1,
        sectionId: this.$route.query.id,
        businessList: this.newSujectApis,
        coverUrl: this.listData.coverUrl,
        name: this.listData.name,
        prefixName: this.listData.prefixName,
        publishStatus: this.listData.publishStatus,
      };

      if (this.listData.sectionType === 2) {
        dataInfos.sectionType = 2;
        dataInfos.liveUrl = this.listData.liveUrl;
        dataInfos.liveStartTime = this.$methodsTools.time10to13(this.listData.liveStartTime,1)
        dataInfos.liveEndTime = this.$methodsTools.time10to13(this.listData.liveEndTime,1);
        dataInfos.durationTime = this.listData.durationTime;
      }
      if (this.listData.sectionType === 1) {
        dataInfos.sectionType = 1;
        dataInfos.recordingUrl = this.listData.recordingUrl;
        dataInfos.durationTime = this.listData.durationTime;
      }
      if (this.listData.sectionType === 3) {
        dataInfos.sectionType = 3;
        dataInfos.recordingUrl = this.listData.recordingUrl;
        dataInfos.durationTime = this.listData.durationTime;
      }
      this.$api.editCourseSection(dataInfos).then((res) => {
        this.$message.success("修改成功");
        setTimeout(() => {
          this.$router.go(-1);
        }, 500);
      });
    },
    backPage(){
        this.$router.go(-1)
    },
    closeType(index) {
      this.sujectApis.splice(index, 1);
    },
    changeLiveUrl() {
      this.newLiveUrl.map((item) => {
        if (item.id === this.newActiveLiveUrl) {
          this.listData.liveUrl = item.liveUrl;
        }
      });
      this.newActiveLiveUrl = "";
    },
    changeRecordingUrl1() {
      this.newSteamUrl1.map((item) => {
        if (item.id === this.newActiveRecordingUrl1) {
          this.listData.recordingUrl = item.recordingVideoId;
        }
      });
      this.newActiveRecordingUrl1 = "";
    },
    changeRecordingUrl2() {
      this.newSteamUrl2.map((item) => {
        if (item.id === this.newActiveRecordingUrl2) {
          this.listData.recordingUrl = item.playbackUrl;
        }
      });
      this.newActiveRecordingUrl2 = "";
    },
    getImgFile() {
      var self = this;
      var file = self.$refs.file.files[0];
      if (file === undefined) {
        self.$set(self.listData, "coverUrl", "");
        return;
      }
      if (file.size > 2 * 1024 * 1024) {
        self.$message.error("图片不得大于2MB");
        return;
      }
      var type = self.$refs.file.value.toLowerCase().split(".").splice(-1);
      if (
        type[0] != "jpg" &&
        type[0] != "png" &&
        type[0] != "jpeg" &&
        type[0] != "gif"
      ) {
        self.$message.error("上传格式需为：.jpg/.png/.jpeg/gif");
        self.$refs.file.value = "";
        return;
      }
      this.$upload.upload(file, 0).then((res) => {
        self.listData.coverUrl = res;
      });
    },
  },
};
</script>

<style lang="less" scoped>
.boxWidth {
  width: 700px;
}
.numInputs {
  width: 150px;
}
.checkboxSty {
  max-height: 210px;
  overflow: auto;
  display: flex;
  flex-direction: column;
}
.listBoxStys {
  flex-shrink: 0;
  padding: 0px 10px;
  border-radius: 8px;
  border: 1px solid #eee;
  margin-right: 10px;
  margin-bottom: 6px;
}
.closeIcons {
  color: red;
  cursor: pointer;
  margin-left: 6px;
}
.ach {
  display: flex;
  align-items: center;
  overflow: hidden;
}
.clh {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
}
.imgBoxins {
  width: 375px;
  height: 220px;
  text-align: center;
  img {
    height: 100%;
  }
}
.iconStsz {
  font-size: 40px;
  color: #67c23a;
  cursor: pointer;
}
</style>
