<template>
  <el-dialog
    class="page-dialog"
    :visible.sync="modalIsShow"
    title="分配班级"
    top="10vh"
    width="800px"
    :close-on-click-modal="false"
    :close-on-press-escape="false"
    append-to-body
    @opened="visibleChange"
  >
    <div class="part-box part-box-pad">
      <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
        <el-form-item>
          <el-input
            v-model.trim="filterLabel"
            placeholder="请输入班级名称"
            clearable
            @change="labelChange"
          ></el-input>
        </el-form-item>
        <!-- <el-form-item>
          <el-button type="primary" @click="toPage(1)">查询</el-button>
        </el-form-item> -->
      </el-form>
      <el-table
        ref="TableList"
        :data="dataList"
        @selection-change="handleSelectionChange"
      >
        <el-table-column width="55" align="center">
          <template slot="header">
            <el-checkbox
              v-model="checkAll"
              @change="checkAllChagne"
            ></el-checkbox>
          </template>
          <template slot-scope="scope">
            <el-checkbox v-model="scope.row.checked"></el-checkbox>
          </template>
        </el-table-column>
        <el-table-column prop="clazzName" label="教学班"></el-table-column>
        <el-table-column prop="teachers" label="当前分配人"></el-table-column>
      </el-table>
    </div>
    <div slot="footer">
      <el-button type="primary" :loading="loading" @click="submit"
        >确认</el-button
      >
      <el-button @click="cancel">取消</el-button>
    </div>
  </el-dialog>
</template>

<script>
import { teacherSimpleCourseQuery, teacherSimpleAssignCourse } from "../../api";

export default {
  name: "select-dimension-dialog",
  props: {
    teacher: {
      type: Object,
      default() {
        return {};
      },
    },
  },
  data() {
    return {
      modalIsShow: false,
      orignDataList: [],
      dataList: [],
      filterLabel: "",
      loading: false,
    };
  },
  methods: {
    async getList() {
      const data = await teacherSimpleCourseQuery({
        examId: this.teacher.examId,
        courseCode: this.teacher.courseCode,
      });
      this.orignDataList = (data || []).map((item) => {
        if (item.teacherList && item.teacherList.length) {
          item.teachers = item.teacherList.map((t) => t.name).join(",");
          item.checked = item.teacherList.some((t) => t.id === this.teacher.id);
        } else {
          item.teachers = "公共班级";
          item.checked = false;
        }
        return item;
      });
    },
    handleSelectionChange(val) {
      this.multipleSelection = val.map((item) => item.clazzId);
    },
    checkAllChagne(checked) {
      this.dataList.forEach((item) => {
        item.checked = checked;
      });
    },
    labelChange() {
      const escapeRegexpString = (value = "") =>
        String(value).replace(/[|\\{}()[\]^$+*?.]/g, "\\$&");
      const reg = new RegExp(escapeRegexpString(this.filterLabel), "i");

      this.dataList = this.orignDataList.filter((item) =>
        reg.test(item.clazzName)
      );
    },
    visibleChange() {
      this.getList();
    },
    cancel() {
      this.modalIsShow = false;
    },
    open() {
      this.modalIsShow = true;
    },
    async submit() {
      const clazzIdList = this.orignDataList
        .filter((item) => item.checked)
        .map((item) => item.clazzId);

      if (!clazzIdList.length) {
        this.$message.error("请选择班级");
        return;
      }

      if (this.loading) return;
      this.loading = true;
      const res = await teacherSimpleAssignCourse({
        examId: this.teacher.examId,
        courseCode: this.teacher.courseCode,
        teacherId: this.teacher.id,
        clazzIdList,
      });
      this.loading = false;
      if (!res) return;
      this.$message.success("保存成功!");
      this.cancel();
    },
  },
};
</script>