<template>
  <div class="item-wrapper flex" v-loading="loading">
    <div class="item flex" :class="{ active: isActive }">
      <div class="left flex">
        <div class="left-item flex" :class="{ active: isActive }">
          <div class="text">
            <i class="iconfont icon-24gl-checklist" />

            <span style="margin-right: 10px" v-if="!isActive">{{
              infoData.planName
            }}</span>
            <el-input
              v-else
              size="mini"
              v-model="infoData.planName"
              placeholder="请输入内容"
              style="width: 120px"
            ></el-input>
          </div>
        </div>
      </div>
      <div class="middle flex">
        <div>
          <div class="top">参与培训人员</div>
          <div class="bottom">
            <el-checkbox-group class="" v-model="infoData.postIds">
              <el-checkbox
                :disabled="!isActive"
                v-for="personnel in personnelOptions"
                :label="personnel.postId"
                :key="personnel.postId"
                >{{ personnel.postName }}</el-checkbox
              >
            </el-checkbox-group>
          </div>
        </div>
      </div>
      <div class="right flex">
        <template v-if="!isActive">
          <div>
            <el-button type="text" @click="edit">编辑</el-button>
            <el-button type="text" @click="deletePlan">删除</el-button>
          </div>
        </template>
        <template v-else>
          <div>
            <el-button type="text" @click="save">保存</el-button>
            <el-button type="text" @click="cancel">取消</el-button>
          </div>
        </template>
      </div>
    </div>
  </div>
</template>

<script>
import { editPlan, deletePlan } from "@/api/educationPlanExam/trainingProgram";
export default {
  name: "trainingProgram-item",
  props: {
    personnelOptions: {
      type: Array,
    },
    isActiveId: {
      type: [String, Number],
      default: 999,
    },
    infoData: {
      type: Object,
      default: () => {
        return {
          planId: 1,
          planName: "安全岗位生产",
          postIds: [1, 2, 3, 4],
        };
      },
    },
  },
  computed: {
    isActive() {
      return this.isActiveId === this.infoData.planId;
    },
  },
  mounted() {},
  data() {
    return {
      // 记录初始的选项
      oldInfoData: JSON.stringify(this.infoData),
      // isActive: false,
      loading: false,
    };
  },
  methods: {
    edit() {
      // 编辑
      this.$emit("edit", this.oldInfoData);
    },
    save() {
      if (this.infoData.planName == "") {
        this.$message({
          message: "请输入培训计划名称",
          type: "warning",
        });
        return;
      }
      if (this.infoData.postIds.length == 0) {
        this.$message({
          message: "请选择至少一种参与培训人员",
          type: "warning",
        });
        return;
      }
      this.$confirm("请确定更改培训计划", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          this.loading = true;

          return editPlan(this.infoData);
        })
        .then((res) => {
          if (res.code == 200) {
            // 成功也要将oldInfoData 变成最新的
            // this.oldInfoData = "newInfoData";
            const dataJson = JSON.stringify(this.infoData);
            this.$emit("save", dataJson);
            // 成功之后
            this.oldInfoData = dataJson;
            this.$message({
              message: "修改培训计划成功",
              type: "success",
            });
          }
          this.loading = false;
        })
        .catch(() => {
          this.loading = false;
        });
    },
    deletePlan() {
      console.log(this.infoData);
      this.$confirm("请确定删除当前培训计划", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          return deletePlan({ planId: this.infoData.planId });
        })
        .then((res) => {
          if (res.code == 200) {
            this.$emit("deletePlan", this.oldInfoData);
            this.$message({
              message: "删除成功",
              type: "success",
            });
          }
        });
    },
    // 当bool为true时候，监听用的，不去改videoID，这样就不会监听锁死
    // 当bool为false时，是取消用的，会变成999
    cancel() {
      this.$emit("cancel", this.oldInfoData);
    },
  },
};
</script>
<style lang="scss" scoped>
.item-wrapper {
  width: 100%;
  flex-direction: column;
  align-items: center;
  margin-bottom: 20px;
  .item {
    transition: all 0.5s;
    width: 93.2%;
    max-width: 1600px;
    height: 111px;
    border: 1px solid #cecece;
    box-shadow: -4px 0px 0px 0px rgba(0, 0, 0, 0.1);
    background: linear-gradient(
      180deg,
      rgba(255, 255, 255, 1) 0%,
      rgba(255, 255, 255, 1) 100%
    );

    border-radius: 5px;
    &.active {
      box-shadow: -4px 0px 0px 0px #1d84ff, 0px 2px 6px 0px rgba(0, 0, 0, 0.15);
    }
    // background: blue;
    .left {
      width: 225px;
      height: 100%;
      align-items: center;
      justify-content: right;
      .left-item {
        transition: all 0.5s;
        width: 200px;
        height: 60px;
        line-height: 60px;
        font-size: 14px;
        padding-left: 25px;
        border: 1px solid #efefef;
        border-radius: 5px;
        box-sizing: border-box;
        background: linear-gradient(
          180deg,
          rgba(255, 255, 255, 0) 8%,
          rgba(239, 239, 239, 1) 100%
        );
        &.active {
          background: #1d84ff;
          color: #fff;
        }
        span {
          margin-left: 10px;
        }
      }
    }
    .middle {
      flex: 1;
      // flex-direction: column;
      align-items: center;

      // background: white;
      padding-left: 25px;
      // padding-top: 25px;
      padding-right: 25px;
      .top {
        font-size: 14px;
        margin-bottom: 9px;
      }
      .bottom {
        justify-content: space-between;
        font-size: 14px;
      }
    }
    .right {
      padding-right: 20px;
      width: 120px;
      height: 100%;
      justify-items: center;
      align-items: center;
    }
  }
}
</style>
