<template>
  <div>
    <el-dialog
      :visible.sync="modalIsShow"
      title="文件夹管理"
      :modal="true"
      :close-on-click-modal="false"
      :close-on-press-escape="false"
      append-to-body
      fullscreen
      custom-class="folder-question-manage-dialog"
      @opened="dialogOpened"
    >
      <div class="folder-question">
        <div class="folder-list">
          <question-folder
            ref="QuestionFolder"
            is-edit
            @selected="folderFilterSelected"
          ></question-folder>
        </div>
        <div class="question-list">
          <el-form class="part-filter-form" :inline="true" :model="filter">
            <el-form-item label="课程名称">
              <course-select v-model="filter.courseId"> </course-select>
            </el-form-item>
            <el-form-item label="题型">
              <source-detail-select
                v-model="filter"
                :course-id="filter.courseId"
              >
              </source-detail-select>
            </el-form-item>
            <el-form-item label="属性">
              <property-tree-select
                v-model="filter.propertyIdList"
                :course-id="filter.courseId"
              ></property-tree-select>
            </el-form-item>

            <el-form-item>
              <el-button type="primary" @click="toPage(1)">查询</el-button>
            </el-form-item>
          </el-form>

          <div class="part-box-action">
            <div>
              <el-button
                type="primary"
                plain
                icon="el-icon-position"
                @click="toBatchMove"
                >移动</el-button
              >
              <el-button
                type="primary"
                plain
                icon="el-icon-copy-document"
                @click="toBatchCopy"
                >复制</el-button
              >
              <el-button
                type="danger"
                plain
                icon="el-icon-circle-close"
                @click="toBatchDelete"
                >删除</el-button
              >
            </div>
            <div></div>
          </div>

          <el-table
            v-loading="loading"
            element-loading-text="加载中"
            :data="questionList"
            @selection-change="tableSelectChange"
          >
            <el-table-column
              type="selection"
              width="50"
              align="center"
            ></el-table-column>
            <el-table-column label="题干" min-width="200">
              <div slot-scope="scope" @click="toViewQuestion(scope.row)">
                <rich-text
                  class="row-question-body"
                  title="点击查看试题"
                  :text-json="scope.row.quesBody"
                ></rich-text>
              </div>
            </el-table-column>
            <el-table-column label="课程" width="120">
              <template slot-scope="scope">
                <span>{{ scope.row.course.name }}</span>
              </template>
            </el-table-column>
            <el-table-column label="题型" prop="sourceDetailName" width="100">
            </el-table-column>
            <el-table-column label="难度" prop="difficulty" width="80">
            </el-table-column>
            <el-table-column label="使用量" prop="usageAmount" width="80">
            </el-table-column>
            <el-table-column label="创建人" prop="creator" width="120">
            </el-table-column>
            <el-table-column label="创建时间" width="170" prop="creationTime">
            </el-table-column>
            <el-table-column label="操作" width="180" fixed="right">
              <template slot-scope="scope">
                <div class="operate_left">
                  <el-button
                    size="mini"
                    type="primary"
                    plain
                    @click="toEditQuestion(scope.row)"
                    >编辑</el-button
                  >
                  <el-dropdown>
                    <el-button type="primary" size="mini" plain>
                      更多 <i class="el-icon-more el-icon--right"></i>
                    </el-button>
                    <el-dropdown-menu slot="dropdown" class="action-dropdown">
                      <el-dropdown-item>
                        <el-button
                          size="mini"
                          type="primary"
                          plain
                          @click="toMoveQuestion(scope.row)"
                          >移动</el-button
                        >
                      </el-dropdown-item>
                      <el-dropdown-item>
                        <el-button
                          size="mini"
                          type="primary"
                          plain
                          @click="toCopyQuestion(scope.row)"
                          >复制</el-button
                        >
                      </el-dropdown-item>
                      <el-dropdown-item>
                        <el-button
                          size="mini"
                          type="danger"
                          plain
                          @click="toDeleteQuestion(scope.row)"
                          >删除</el-button
                        >
                      </el-dropdown-item>
                    </el-dropdown-menu>
                  </el-dropdown>
                </div>
              </template>
            </el-table-column>
          </el-table>
          <div class="part-page">
            <el-pagination
              :current-page="currentPage"
              :page-size="pageSize"
              :page-sizes="[10, 20, 50, 100, 200, 300]"
              layout="total, sizes, prev, pager, next, jumper"
              :total="total"
              @current-change="toPage"
              @size-change="handleSizeChange"
            >
            </el-pagination>
          </div>
        </div>
      </div>

      <div slot="footer"></div>
    </el-dialog>

    <!-- QuestionEditDialog -->
    <question-edit-dialog
      ref="QuestionEditDialog"
      :question="curQuestion"
      @modified="getList"
    ></question-edit-dialog>
    <!-- QuestionPreviewDialog -->
    <question-preview-dialog
      ref="QuestionPreviewDialog"
      :data="curQuestion"
    ></question-preview-dialog>
    <!-- QuestionFolderDialog -->
    <question-folder-dialog
      ref="QuestionFolderDialog"
      :is-edit="false"
      @selected="folderSelected"
    ></question-folder-dialog>
  </div>
</template>

<script>
import {
  classifyQuestionPageListApi,
  deleteQuestionApi,
  moveQuestionApi,
  copyQuestionApi,
} from "../api";
import QuestionFolder from "./QuestionFolder.vue";
import QuestionEditDialog from "./QuestionEditDialog.vue";
import QuestionPreviewDialog from "./QuestionPreviewDialog.vue";
import QuestionFolderDialog from "./QuestionFolderDialog.vue";
import PropertyTreeSelect from "../components/PropertyTreeSelect.vue";

export default {
  name: "FolderQuestionManageDialog",
  components: {
    QuestionFolder,
    QuestionEditDialog,
    QuestionPreviewDialog,
    QuestionFolderDialog,
    PropertyTreeSelect,
  },
  data() {
    return {
      modalIsShow: false,
      filter: {
        classifyId: null,
        courseId: "",
        questionType: "",
        sourceDetailId: "",
        propertyIdList: [],
      },
      curFolderAction: "",
      questionList: [],
      currentPage: 1,
      pageSize: 10,
      total: 0,
      loading: false,
      curQuestion: {},
      curActionQids: [],
      curFolder: {},
      curMoveType: "",
      selectedQuestionIds: [],
    };
  },
  methods: {
    cancel() {
      this.modalIsShow = false;
    },
    open() {
      this.modalIsShow = true;
    },
    dialogOpened() {
      this.filter = {
        classifyId: null,
        courseId: "",
        questionType: "",
        sourceDetailId: "",
        propertyIdList: [],
      };
      this.$refs.QuestionFolder.selectDefaultNode();
    },
    toPage(page) {
      this.currentPage = page;
      this.getList();
    },
    async getList() {
      this.selectedQuestionIds = [];
      this.loading = true;
      let data = {
        ...this.filter,
        curPage: this.currentPage,
        pageSize: this.pageSize,
      };
      data.propertyIdList = data.propertyIdList.join();
      const res = await classifyQuestionPageListApi(data).catch(() => {});
      this.loading = false;
      if (!res) return;
      this.questionList = res.data.content;
      this.total = res.data.totalElements;
    },
    handleSizeChange(val) {
      this.pageSize = val;
      this.toPage(1);
    },
    tableSelectChange(selections) {
      this.selectedQuestionIds = selections.map((item) => item.id);
    },
    folderFilterSelected(folder) {
      console.log("folder:", folder);
      if (!folder) return;

      this.curFolder = folder;
      this.filter = {
        classifyId: folder.id,
        courseId: "",
        questionType: "",
        sourceDetailId: "",
        propertyIdList: [],
      };
      this.toPage(1);
    },
    toViewQuestion(row) {
      this.curQuestion = row;
      this.$refs.QuestionPreviewDialog.open();
    },
    toEditQuestion(row) {
      this.curQuestion = row;
      this.$refs.QuestionEditDialog.open();
    },
    toMoveQuestion(row) {
      this.curActionQids = [row.id];
      this.curFolderAction = "move";
      this.$refs.QuestionFolderDialog.open();
    },
    toCopyQuestion(row) {
      this.curActionQids = [row.id];
      this.curFolderAction = "copy";
      this.$refs.QuestionFolderDialog.open();
    },
    async folderSelected(folder) {
      if (folder.id === this.curFolder.id && this.curFolderAction === "move") {
        this.$message.error("内容就在当前当前文件中");
        return;
      }
      let res = null;
      if (this.curFolderAction === "move") {
        res = await moveQuestionApi(this.curActionQids.join(), folder.id).catch(
          () => {}
        );
      } else {
        res = await copyQuestionApi(this.curActionQids.join(), folder.id).catch(
          () => {}
        );
      }

      if (!res) return;
      this.$message.success("操作成功！");
      this.getList();
    },
    async toDeleteQuestion(row) {
      const confirm = await this.$confirm("确认删除试题吗?", "提示", {
        type: "warning",
      }).catch(() => {});
      if (confirm !== "confirm") return;

      this.deleteQuestion([row.id]);
    },
    async deleteQuestion(ids) {
      this.loading = true;
      const res = await deleteQuestionApi(ids.join()).catch(() => {});
      this.loading = false;
      if (!res) return;

      this.$notify({
        message: "删除成功",
        type: "success",
      });
      this.getList();
    },
    toBatchMove() {
      if (!this.selectedQuestionIds.length) {
        this.$message.error("请选择试题！");
        return;
      }
      this.curActionQids = [...this.selectedQuestionIds];
      this.curFolderAction = "move";
      this.$refs.QuestionFolderDialog.open();
    },
    toBatchCopy() {
      if (!this.selectedQuestionIds.length) {
        this.$message.error("请选择试题！");
        return;
      }
      this.curActionQids = [...this.selectedQuestionIds];
      this.curFolderAction = "copy";
      this.$refs.QuestionFolderDialog.open();
    },
    async toBatchDelete() {
      if (!this.selectedQuestionIds.length) {
        this.$message.error("请选择试题！");
        return;
      }

      const confirm = await this.$confirm("确认删除选中试题吗?", "提示", {
        type: "warning",
      }).catch(() => {});
      if (confirm !== "confirm") return;

      this.deleteQuestion(this.selectedQuestionIds);
    },
    toAddFolder() {
      this.curFolder = { parentId: this.filter.classifyId };
      this.$refs.ModifyFolder.open();
    },
  },
};
</script>
