<template>
  <section class="content">
    <div v-show="isClear == 1">
      <LinkTitlesCustom :current-paths="['卷库管理 ', '试卷仓库管理']" />
    </div>
    <div class="part-box">
      <h2 class="part-box-title">试卷仓库</h2>

      <el-form class="part-filter-form" :inline="true" :model="formSearch">
        <el-form-item label="课程名称">
          <el-select
            v-model="formSearch.courseNo"
            class="search_width"
            filterable
            :remote-method="getCourses"
            remote
            clearable
            placeholder="全部"
            @focus="(e) => getCourses(e.target.value)"
          >
            <el-option
              v-for="item in courseInfoSelect"
              :key="item.courseNo"
              :label="item.courseInfo"
              :value="item.courseNo"
            >
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="试卷名称">
          <el-input
            v-model="formSearch.name"
            class="search_width"
            placeholder="试卷名称"
          ></el-input>
        </el-form-item>
        <el-form-item label="层次">
          <el-select
            v-model="formSearch.level"
            class="search_width"
            clearable
            placeholder="请选择"
          >
            <el-option
              v-for="item in levelList"
              :key="item.value"
              :label="item.label"
              :value="item.value"
            >
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="录入人">
          <el-input
            v-model="formSearch.creator"
            class="search_width"
            placeholder="录入人"
          ></el-input>
        </el-form-item>
        <el-form-item label="修改人">
          <el-input
            v-model="formSearch.lastModifyName"
            class="search_width"
            placeholder="修改人"
          ></el-input>
        </el-form-item>
        <el-form-item>
          <el-button type="primary" @click="searchFrom"
            ><i class="el-icon-search"></i> 查询</el-button
          >
          <el-button @click="resetForm"
            ><i class="el-icon-refresh"></i> 重 置</el-button
          >
        </el-form-item>
      </el-form>
      <div class="part-box-action">
        <el-button
          :disabled="noBatchSelected"
          type="primary"
          plain
          @click="releasePapers"
          ><i class="el-icon-share"></i>释放</el-button
        >
      </div>
    </div>
    <div class="part-box">
      <el-table
        v-loading="loading"
        element-loading-text="拼命加载中"
        :data="tableData"
        @selection-change="selectChange"
      >
        <el-table-column
          type="selection"
          width="50"
          align="center"
        ></el-table-column>
        <el-table-column label="课程名称" width="180">
          <template slot-scope="scope">
            <span>{{ scope.row.course.name }}</span>
          </template>
        </el-table-column>
        <el-table-column label="课程代码" width="80">
          <template slot-scope="scope">
            <span>{{ scope.row.course.code }}</span>
          </template>
        </el-table-column>
        <el-table-column label="试卷名称" width="180">
          <template slot-scope="scope">
            <span>{{ scope.row.name }}</span>
          </template>
        </el-table-column>
        <el-table-column
          label="试卷总分"
          width="103"
          sortable
          prop="totalScore"
        >
        </el-table-column>
        <el-table-column
          label="试卷难度"
          width="103"
          sortable
          prop="difficultyDegree"
        >
        </el-table-column>
        <el-table-column
          label="大题数量"
          width="103"
          sortable
          prop="paperDetailCount"
        >
        </el-table-column>
        <el-table-column label="录入员" width="150">
          <template slot-scope="scope">
            <span>{{ scope.row.creator }}</span>
          </template>
        </el-table-column>
        <el-table-column
          label="创建时间"
          width="153"
          sortable
          prop="createTime"
        >
        </el-table-column>
        <el-table-column label="修改人" width="150">
          <template slot-scope="scope">
            <span>{{ scope.row.lastModifyName }}</span>
          </template>
        </el-table-column>
        <el-table-column
          label="修改时间"
          width="153"
          sortable
          prop="updateDate"
        >
        </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="viewPaper(scope.row)"
                ><i class="el-icon-view"></i>查看</el-button
              >
              <el-button
                size="mini"
                type="primary"
                plain
                @click="releasePaper(scope.row)"
                ><i class="el-icon-share"></i>释放</el-button
              >
            </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="handleCurrentChange"
          @size-change="handleSizeChange"
        >
        </el-pagination>
      </div>
    </div>
  </section>
</template>

<script>
import { QUESTION_API } from "@/constants/constants";
import { LEVEL_TYPE } from "../constants/constants";
import { mapState } from "vuex";
import LinkTitlesCustom from "@/components/LinkTitlesCustom.vue";
export default {
  components: { LinkTitlesCustom },
  data() {
    return {
      publicityDis: false,
      difficultyDegreeDis: false,
      quesLoading: false,
      quesPropertyDialog: false,
      difficultyDegree: 0.1,
      publicity: true,
      isClear: 0,
      courseLoading: false,
      formSearch: {
        courseNo: "",
        courseName: "",
        creator: "",
        lastModifyName: "",
        level: "",
        name: "",
      },
      tableData: [],
      currentPage: 1,
      pageSize: 10,
      total: 0,
      loading: false,
      courseList: [],
      levelList: LEVEL_TYPE,
      dialogVisible: false,
      selectedPaperIds: [],
      fileList: [],
      uploadAction: "",
      formUpload: {
        paperName: "",
      },
      uploadData: {},
      fileLoading: false,
      exportDialog: false,
      exportModel: {
        id: "",
        courseCode: "",
        courseName: "",
        exportContentList: [],
        seqMode: "MODE1",
      },
      isShow: true,
      dialogModel: false,
      rowIds: [],
      isShowPrintExamPackage: false,
      isShowPrintExamPackagePassword: false,
      printExamPackagePassword: "",
      printFrom: {
        examId: "",
      },
      rules: {
        examId: [{ required: true, message: "请输入名称", trigger: "change" }],
      },
    };
  },
  computed: {
    paperIds() {
      var paperIds = "";
      for (let paperId of this.selectedPaperIds) {
        if (!paperIds) {
          paperIds += paperId;
        } else {
          paperIds += "," + paperId;
        }
      }
      return paperIds;
    },
    courseInfoSelect() {
      var courseList = [];
      for (let course of this.courseList) {
        var courseInfo = course.name + "(" + course.code + ")";
        var courseNo = course.code;
        var courseName = course.name;
        courseList.push({
          courseNo: courseNo,
          courseInfo: courseInfo,
          courseName: courseName,
        });
      }
      return courseList;
    },
    noBatchSelected() {
      return this.selectedPaperIds.length === 0;
    },
    ...mapState({ user: (state) => state.user }),
  },
  watch: {
    $route: "initVue",
  },
  created() {
    this.initVue();
  },
  methods: {
    resetForm() {
      this.formSearch = {
        courseNo: "",
        courseName: "",
        level: "",
        name: "",
      };
    },
    //查询
    searchFrom() {
      this.currentPage = 1;
      this.searchGenPaper();
    },
    searchGenPaper() {
      var pageNo = this.currentPage;
      this.currentPage = 1;
      this.loading = true;
      var url =
        QUESTION_API +
        "/paper_storage/findPage/" +
        pageNo +
        "/" +
        this.pageSize;
      this.$http.get(url, { params: this.formSearch }).then((response) => {
        this.tableData = response.data.content;
        this.total = response.data.totalElements;
        this.currentPage = Number(pageNo);
      });
      this.loading = false;
    },
    handleCurrentChange(val) {
      this.currentPage = val;
      this.searchGenPaper();
    },
    handleSizeChange(val) {
      this.pageSize = val;
      this.currentPage = 1;
      this.searchGenPaper();
    },
    getCourseObj(courseNo) {
      for (let course of this.courseList) {
        if (course.code == courseNo) {
          return course;
        }
      }
      return "";
    },
    viewPaper(row) {
      var course = this.getCourseObj(this.formSearch.courseNo);
      if (course) {
        this.formSearch.courseName = course.name;
      }
      sessionStorage.setItem("gen_paper", JSON.stringify(this.formSearch));
      sessionStorage.setItem("gen_paper_currentPage", this.currentPage);
      sessionStorage.setItem("question_back", "false");
      this.$router.push({
        path: "/view_paper/" + row.id,
      });
    },
    selectChange(row) {
      this.selectedPaperIds = [];
      row.forEach((element) => {
        this.selectedPaperIds.push(element.id);
      });
    },
    releasePapers() {
      var paperIds = this.paperIds;
      if (this.selectedPaperIds.length != 0) {
        this.$confirm("确认释放试卷吗?", "提示", {
          type: "warning",
        }).then(() => {
          this.loading = true;
          this.$http
            .put(QUESTION_API + "/paper_storage/release/" + paperIds)
            .then(
              () => {
                this.$notify({
                  message: "操作成功",
                  type: "success",
                });
                this.searchGenPaper();
                this.selectedPaperIds = [];
              },
              (response) => {
                this.$notify({
                  message: response.response.data.desc,
                  type: "error",
                });
                this.loading = false;
              }
            );
        });
      } else {
        this.$notify({
          message: "请勾选释放的试卷",
          type: "warning",
        });
      }
    },
    releasePaper(row) {
      this.$confirm("确认释放试卷吗?", "提示", {
        type: "warning",
      }).then(() => {
        this.loading = true;
        this.$http.put(QUESTION_API + "/paper_storage/release/" + row.id).then(
          () => {
            this.$notify({
              message: "操作成功",
              type: "success",
            });
            this.selectedPaperIds = [];
            this.searchGenPaper();
          },
          (response) => {
            this.$notify({
              message: response.response.data.desc,
              type: "error",
            });
            this.loading = false;
          }
        );
      });
    },
    //查询所有课程
    getCourses(query) {
      if (query) {
        query = query.trim();
      }
      this.courseLoading = true;
      this.$http
        .get(QUESTION_API + "/course/query?name=" + query + "&enable=true")
        .then((response) => {
          this.courseList = response.data;
          this.courseLoading = false;
        });
    },
    removeItem() {
      sessionStorage.removeItem("gen_paper");
      sessionStorage.removeItem("gen_paper_currentPage");
    },
    cancel(formData) {
      this.resetForm2(formData);
      this.dialogModel = false;
    },
    resetForm2(formData) {
      this.printFrom.examId = "";
      this.$refs[formData].clearValidate();
    },
    initVue() {
      this.isClear = this.$route.params.isClear;
      if (this.isClear == 0 || !this.isClear) {
        this.removeItem();
        this.formSearch = {
          courseNo: "",
          courseName: "",
          level: "",
          name: "",
        };
        this.currentPage = 1;
      } else {
        this.formSearch = JSON.parse(sessionStorage.getItem("gen_paper"));
        this.currentPage =
          sessionStorage.getItem("gen_paper_currentPage") == null
            ? 1
            : parseInt(sessionStorage.getItem("gen_paper_currentPage"));
      }
      this.getCourses(this.formSearch.courseName);
      this.searchGenPaper();
    },
  },
};
</script>
