<template>
  <div>
    <el-drawer
      :title="$route.meta.title"
      direction="rtl"
      size="68%"
      :visible.sync="visible"
      append-to-body
      :before-close="handleClose"
      @close="$emit('update:isShow', false)"
    >
      <section class="drawer-container">
        <el-form
          class="drawer-container__form"
          ref="elForm"
          :model="form"
          :rules="rules"
          label-position="top"
          label-width="120px"
          size="small"
        >
          <div class="form-layout">
            <el-form-item label="名称" prop="name">
              <el-input
                v-model="form['name']"
                clearable
                placeholder="请填写名称"
                style="width: 100%"
              ></el-input>
            </el-form-item>

            <el-form-item label="归属批次" prop="batch_id" clearable>
              <el-cascader
                v-model="form['batch_id']"
                style="width: 100%"
                :options="aspirations"
                :props="{
                  value: 'id',
                  label: 'name',
                  lazy: true,
                  emitPath: false,
                  lazyLoad: (node, resolve) => {
                    const { level, value } = node;
                    getBatches(value).then((res) => {
                      resolve(
                        res.map((i) => ({
                          ...i,
                          leaf: true,
                        }))
                      );
                    });
                  },
                }"
              ></el-cascader>
              <!--              <el-select-->
              <!--                v-model="form['batch_id']"-->
              <!--                clearable-->
              <!--                placeholder="请填写归属批次"-->
              <!--                style="width: 100%"-->
              <!--              >-->
              <!--                <el-option-->
              <!--                  v-for="(option, optionIndex) in batch"-->
              <!--                  :key="optionIndex"-->
              <!--                  :label="option['name']"-->
              <!--                  :value="option['id']"-->
              <!--                ></el-option>-->
              <!--              </el-select>-->
            </el-form-item>

            <el-form-item label="绑定学校" prop="school">
              <el-select v-model="form.school" style="width: 100%;" filterable multiple collapse-tags value-key="id" size="small">
                <el-option v-for="item in school" :label="item.name" :value="{ code: item.code, name: item.name, id: item.id }"></el-option>
              </el-select>
            </el-form-item>

            <el-form-item label="排序" prop="sort">
              <el-input-number
                v-model="form['sort']"
                clearable
                placeholder="请填写排序"
                :precision="2"
                controls-position="right"
                style="width: 100%"
              ></el-input-number>
            </el-form-item>

            <el-form-item
              label="是否显示学校服从"
              prop="show_school_obey"
              clearable
            >
              <el-select
                v-model="form['show_school_obey']"
                clearable
                placeholder="请填写是否显示学校服从"
                style="width: 100%"
              >
                <el-option
                  v-for="(option, optionIndex) in [
                    { value: 1, label: '是' },
                    { value: 0, label: '否' },
                  ]"
                  :key="optionIndex"
                  :label="option['label']"
                  :value="option['value']"
                ></el-option>
              </el-select>
            </el-form-item>

            <el-form-item
              label="是否显示专业服从"
              prop="show_specialty_obey"
              clearable
            >
              <el-select
                v-model="form['show_specialty_obey']"
                clearable
                placeholder="请填写是否显示专业服从"
                style="width: 100%"
              >
                <el-option
                  v-for="(option, optionIndex) in [
                    { value: 1, label: '是' },
                    { value: 0, label: '否' },
                  ]"
                  :key="optionIndex"
                  :label="option['label']"
                  :value="option['value']"
                ></el-option>
              </el-select>
            </el-form-item>
          </div>
        </el-form>

        <div class="drawer-container__footer">
          <el-button @click="reset">重 置</el-button>
          <el-button type="primary" @click="submit" :loading="loading">{{
            loading ? "提交中 ..." : "确 定"
          }}</el-button>
        </div>
      </section>
    </el-drawer>
  </div>
</template>

<script>
import { index as batchIndex } from "@/api/batch/batch";
import { index as aspirationIndex } from "@/api/aspiration/aspiration";
import { save, show } from "@/api/batch-sub/batch-sub";
import axios from "axios";
import { getToken } from "@/utils/auth";
import { uploadSize } from "@/settings";
import { formatFileSize } from "@/utils";

export default {
  name: "BatchSubDrawer",
  props: {
    isShow: {
      type: Boolean,
      default: false,
      required: true,
    },
    school: {
      type: Array,
      default: () => []
    }
  },
  data() {
    return {
      uploadSize,
      action: process.env.VUE_APP_UPLOAD_API,
      loading: false,
      visible: false,
      form: {
        name: "",
        batch_id: "",
        school: [],
        sort: "",
        show_school_obey: "",
        show_specialty_obey: "",
      },
      rules: {
        name: [
          {
            required: true,
            message: "名称" + "必填",
          },
        ],

        batch_id: [
          {
            required: true,
            message: "归属批次" + "必填",
          },
        ],
      },

      aspirations: [],
      batches: [],
    };
  },
  watch: {
    isShow(newVal) {
      this.visible = newVal;
    },
    visible(newVal) {
      this.$emit("update:isShow", newVal);
    },
  },
  methods: {
    async getAspiration() {
      try {
        const res = await aspirationIndex({
          page: 1,
          page_size: 999,
        });
        this.aspirations = res.data;
      } catch (err) {
        console.error(err);
      }
    },
    async getBatches(aspirationId) {
      try {
        const res = await batchIndex({
          page: 1,
          page_size: 999,
          "filter[0][key]": "aspiration_id",
          "filter[0][op]": "eq",
          "filter[0][value]": aspirationId,
        });
        return res.data;
      } catch (err) {
        console.error(err);
        return [];
      }
    },

    uploadBefore(file) {
      if (file.size > uploadSize) {
        this.$message({
          type: "warning",
          message: `上传图片大小超过${formatFileSize(uploadSize)}！`,
        });
        return false;
      }
      window.$_uploading = true;
    },
    uploadSuccess(response, file, fileList, fieldName) {
      window.$_uploading = false;
      fileList.forEach((file) => {
        if (file.response?.data && !file.response?.code) {
          file.response = file.response.data;
        }
      });
      this.form[fieldName] = fileList;
    },
    uploadRemove(file, fileList, fieldName) {
      this.form[fieldName] = fileList;
    },
    uploadError(err, file, fileList, fieldName) {
      window.$_uploading = false;
      this.form[fieldName] = fileList;
      this.$message({
        type: "warning",
        message: err,
      });
    },
    formatFileSize,
    getToken,
    handleClose(done) {
      this.$confirm("确定关闭窗口？")
        .then((_) => {
          done();
        })
        .catch((_) => {});
    },

    reset() {
      this.form = {
        name: "",
        batch_id: "",
        school: [],
        sort: "",
        show_school_obey: "",
        show_specialty_obey: "",
      };
      this.$refs["elForm"].resetFields();
    },
    submit() {
      if (window.$_uploading) {
        this.$message.warning("文件正在上传中");
        return;
      }

      this.$refs["elForm"].validate(async (valid) => {
        if (valid) {
          this.loading = true;
          try {
            await save(this.form);
            this.$message.success("新增成功");
            this.$emit("refresh");
            this.$emit("update:isShow", false);
            this.loading = false;
            this.reset();
          } catch (err) {
            this.loading = false;
          }
        }
      });
    },
  },
  created() {
    this.getAspiration();
  },
};
</script>

<style scoped lang="scss">
.span2 {
  grid-column: span 2;
}
::v-deep .el-form-item > * {
  max-width: 100%;
}
.form-layout {
  display: grid;
  grid-gap: 2%;
  grid-template-columns: repeat(2, 1fr);
}
.drawer-container {
  height: 100%;
  padding: 20px;
  display: flex;
  flex-direction: column;

  &__form {
    flex: 1;
    overflow-y: scroll;
  }
  &__footer {
    margin-top: 20px;
    display: flex;
  }
}
</style>
