<template>
  <section class="content">
    <div v-show="isClear == 1">
      <LinkTitlesCustom :currentPaths="['题库管理 ', '考试试卷管理']" />
    </div>
    <div class="box-body">
      <el-form
        :inline="true"
        :model="formSearch"
        label-position="right"
        label-width="70px"
      >
        <el-row>
          <el-col :span="6">
            <el-form-item label="课程名称">
              <el-select
                class="search_width"
                v-model="formSearch.courseNo"
                filterable
                :remote-method="getCourses"
                remote
                clearable
                placeholder="全部"
                size="small"
                @focus="e => getCourses(e.target.value)"
              >
                <el-option
                  v-for="item in courseInfoSelect"
                  :label="item.courseInfo"
                  :value="item.courseNo"
                  :key="item.courseNo"
                >
                </el-option>
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="试卷名称">
              <el-input
                class="search_width"
                v-model="formSearch.name"
                placeholder="试卷名称"
                size="small"
              ></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="层次">
              <el-select
                class="search_width"
                v-model="formSearch.level"
                clearable
                placeholder="请选择"
                size="small"
              >
                <el-option
                  v-for="item in levelList"
                  :label="item.label"
                  :value="item.value"
                  :key="item.value"
                >
                </el-option>
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <div class="search_down">
              <el-button size="small" type="primary" @click="searchFrom"
                ><i class="el-icon-search"></i> 查询</el-button
              >
              <el-button size="small" @click="resetForm"
                ><i class="el-icon-refresh"></i> 重 置</el-button
              >
              <el-button size="small" type="primary" @click="genPaperDetail"
                ><i class="el-icon-plus"></i> 组卷</el-button
              >
            </div>
          </el-col>
        </el-row>
        <div
          style="width: 100%; border-bottom: 1px solid #ddd; margin: 10px 0;"
        ></div>
        <el-row>
          <el-form-item>
            <span>批量操作：</span>
            <el-button
              size="small"
              type="danger"
              @click="batchDeleteGenPaper"
              :disabled="noBatchSelected"
            >
              <i class="el-icon-delete"></i> 删除成卷
            </el-button>
            <el-button
              size="small"
              type="primary"
              @click="openBatchExportPaperDialog"
              :disabled="noBatchSelected"
              ><i class="el-icon-download"></i> 下载成卷</el-button
            >
            <el-button
              size="small"
              type="primary"
              @click="openPrints"
              :disabled="noBatchSelected"
              ><i class="el-icon-share"></i> 发送成卷</el-button
            >
          </el-form-item>
        </el-row>
      </el-form>
      <div style="width: 100%;margin-bottom: 10px;"></div>
      <el-table
        v-loading="loading"
        element-loading-text="拼命加载中"
        :data="tableData"
        border
        style="width: 100%"
        @selection-change="selectChange"
      >
        <el-table-column type="selection" width="35"></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="180" fixed="right">
          <template slot-scope="scope">
            <div class="operate_left">
              <el-button
                size="mini"
                type="primary"
                @click="editGenPaper(scope.row)"
                plain
                ><i class="el-icon-edit"></i>编辑</el-button
              >
              <el-dropdown class="button_left">
                <el-button type="primary" size="mini" plain>
                  更多 <i class="el-icon-arrow-down el-icon--right"></i>
                </el-button>
                <el-dropdown-menu slot="dropdown">
                  <el-dropdown-item>
                    <el-button
                      size="mini"
                      type="primary"
                      @click="openExportDialog(scope.row)"
                      plain
                      ><i class="el-icon-download"></i> 下载</el-button
                    >
                  </el-dropdown-item>
                  <el-dropdown-item>
                    <el-button
                      size="mini"
                      type="primary"
                      @click="previewPDF2(scope.row)"
                      plain
                      ><i class="el-icon-zoom-in"></i> 预览</el-button
                    >
                  </el-dropdown-item>
                  <el-dropdown-item>
                    <el-button
                      size="mini"
                      type="primary"
                      @click="openPrint(scope.row)"
                      plain
                      ><i class="el-icon-share"></i> 发送</el-button
                    >
                  </el-dropdown-item>
                  <el-dropdown-item>
                    <el-button
                      size="mini"
                      type="danger"
                      @click="deleteGenPaper(scope.row)"
                      ><i class="el-icon-delete"></i> 删除</el-button
                    >
                  </el-dropdown-item>
                </el-dropdown-menu>
              </el-dropdown>
            </div>
          </template>
        </el-table-column>
      </el-table>
      <div class="page pull-right">
        <el-pagination
          @current-change="handleCurrentChange"
          :current-page="currentPage"
          :page-size="pageSize"
          :page-sizes="[10, 20, 50, 100, 200, 300]"
          @size-change="handleSizeChange"
          layout="total, sizes, prev, pager, next, jumper"
          :total="total"
        >
        </el-pagination>
      </div>
    </div>
    <el-dialog title="导出" :visible.sync="exportDialog">
      <el-form :model="exportModel" label-position="right" label-width="80px">
        <el-row v-if="isShow">
          <el-col :md="12">
            <el-form-item label="课程名称">
              {{ exportModel.courseName }}
            </el-form-item>
          </el-col>
        </el-row>
        <el-row v-if="isShow">
          <el-col :md="12">
            <el-form-item label="课程代码">
              {{ exportModel.courseCode }}
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :md="24">
            <el-form-item label="导出内容">
              <el-checkbox-group v-model="exportModel.exportContentList">
                <el-checkbox label="PAPER">试卷</el-checkbox>
                <el-checkbox label="ANSWER">答案</el-checkbox>
                <el-checkbox label="COMPUTERTEST_PACKAGE"
                  >机考数据包</el-checkbox
                >
                <el-checkbox
                  v-if="isShowPrintExamPackage"
                  label="PRINT_EXAM_PACKAGE"
                  >分布式印刷数据包
                </el-checkbox>
                <el-input
                  v-if="isShowPrintExamPackagePassword"
                  v-model="printExamPackagePassword"
                  placeholder="加密密码 (可选)"
                  type="password"
                  style="width: 150px"
                ></el-input>
              </el-checkbox-group>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :md="24" class="text-center">
            <el-button type="primary" @click="exportPaperInfo"
              >开始导出</el-button
            >
          </el-col>
        </el-row>
      </el-form>
    </el-dialog>

    <el-dialog title="传送印刷平台" :visible.sync="dialogModel" width="500px">
      <el-form
        :model="printFrom"
        ref="printFrom"
        :rules="rules"
        label-position="right"
        label-width="120px"
        inline-message
      >
        <el-row>
          <el-form-item label="学校名称">
            <el-input
              class="dialog_input_width"
              v-model="this.Org.name"
              :disabled="true"
            ></el-input>
          </el-form-item>
        </el-row>
        <el-row>
          <el-form-item label="考试名称" prop="examId">
            <el-select
              class="dialog_input_width"
              v-model="printFrom.examId"
              filterable
              clearable
              :remote-method="getExams"
              remote
              placeholder="请选择"
            >
              <el-option
                v-for="item in examList"
                :label="item.name"
                :value="item.id"
                :key="item.id"
              ></el-option>
            </el-select>
          </el-form-item>
        </el-row>
        <el-row class="margin_top_10 margin_left_120">
          <el-button type="primary" @click="sendPrint('printFrom')"
            >保 存</el-button
          >
          <el-button @click="resetForm2('printFrom')"
            ><i class="el-icon-refresh"></i> 重 置</el-button
          >
          <el-button @click="cancel('printFrom')" type="primary"
            ><i class="el-icon-arrow-left"></i> 返 回</el-button
          >
        </el-row>
      </el-form>
    </el-dialog>
  </section>
</template>

<script>
import { CORE_API, QUESTION_API, EXAM_WORK_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 {
      isClear: 0,
      courseLoading: false,
      formSearch: {
        courseNo: "",
        courseName: "",
        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: []
      },
      isShow: true,
      examList: [],
      Org: {},
      dialogModel: false,
      rowIds: [],
      isShowPrintExamPackage: false,
      isShowPrintExamPackagePassword: false,
      printExamPackagePassword: "",
      printFrom: {
        examId: ""
      },
      rules: {
        examId: [{ required: true, message: "请输入名称", trigger: "change" }]
      }
    };
  },
  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 + "/genPaper/" + 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;
    },
    genPaperDetail() {
      var courseNo = this.formSearch.courseNo;
      if (!courseNo) {
        this.$notify({
          title: "警告",
          message: "请选择课程",
          type: "warning"
        });
      } else {
        var course = this.getCourseObj(courseNo);
        this.formSearch.courseName = course.name;
        var level = course.level;
        sessionStorage.setItem("gen_paper", JSON.stringify(this.formSearch));
        sessionStorage.setItem("gen_paper_currentPage", this.currentPage);
        this.$router.push({
          path: "/questions/gen_paper_detail/" + courseNo + "/" + level
        });
      }
    },
    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 "";
    },
    exportGenPaper(row) {
      window.open(
        QUESTION_API + "/paper/export/" + row.id + "/" + this.user.rootOrgName
      );
    },
    editGenPaper(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: "/edit_paper/" + row.id + "/gen_paper"
      });
    },
    deleteGenPaper(row) {
      this.$confirm("确认删除试卷吗?", "提示", {
        type: "warning"
      }).then(() => {
        this.loading = true;
        this.$http.delete(QUESTION_API + "/paper/" + row.id).then(
          () => {
            this.$notify({
              message: "删除成功",
              type: "success"
            });
            this.searchGenPaper();
          },
          response => {
            this.$notify({
              message: response.response.data.msg,
              type: "error"
            });
            this.loading = false;
          }
        );
      });
    },
    selectChange(row) {
      this.selectedPaperIds = [];
      row.forEach(element => {
        this.selectedPaperIds.push(element.id);
      });
    },
    batchDeleteGenPaper() {
      var paperIds = this.paperIds;
      console.log("试卷id：", paperIds);
      if (this.selectedPaperIds.length != 0) {
        this.$confirm("确认删除试卷吗?", "提示", {
          type: "warning"
        }).then(() => {
          this.loading = true;
          this.$http.delete(QUESTION_API + "/paper/" + paperIds).then(
            () => {
              this.$notify({
                message: "删除成功",
                type: "success"
              });
              this.searchGenPaper();
              this.selectedPaperIds = [];
            },
            response => {
              this.$notify({
                message: response.data.msg,
                type: "error"
              });
              this.loading = false;
            }
          );
        });
      } else {
        this.$notify({
          message: "请勾选删除的数据",
          type: "warning"
        });
      }
    },
    //查询所有课程
    getCourses(query) {
      query = query.trim();
      this.courseLoading = true;
      this.$http
        .get(CORE_API + "/course/query?name=" + query + "&enable=true")
        .then(response => {
          this.courseList = response.data;
          this.courseLoading = false;
        });
    },
    //打开导出弹框
    openExportDialog(row) {
      this.isShow = true;
      this.isShow = true;
      this.exportDialog = true;
      this.exportModel.id = row.id;
      this.exportModel.courseCode = row.course.code;
      this.exportModel.courseName = row.course.name;
      this.exportModel.exportContentList = [];
      /* 分布式印刷数据包设置 */
      this.isShowPrintExamPackage = true;
      this.isShowPrintExamPackagePassword = false;
      this.printExamPackagePassword = "";
    },
    //打开批量弹出框
    openBatchExportPaperDialog() {
      if (this.selectedPaperIds.length != 0) {
        this.exportDialog = true;
        this.isShow = false;
        this.isShow = false;
        this.exportModel.exportContentList = [];
      } else {
        this.$notify({
          message: "请勾选导出的数据",
          type: "warning"
        });
      }
      /* 分布式印刷数据包设置 */
      this.isShowPrintExamPackage = false;
      this.isShowPrintExamPackagePassword = false;
      this.printExamPackagePassword = "";
    },
    //导出试卷，答案，机考数据包
    exportPaperInfo() {
      if (this.exportModel.exportContentList.length == 0) {
        this.$notify({
          message: "请选择导出内容",
          type: "error"
        });
        return false;
      }
      if (this.printExamPackagePassword.length > 0) {
        var reg = /^[0-9A-Za-z]{6,12}$/;
        if (!reg.test(this.printExamPackagePassword)) {
          this.$notify({
            message: "加密密码请输入6至12位的数字或字母！",
            type: "error"
          });
          return false;
        }
      }
      var key = this.user.key;
      var token = this.user.token;
      if (this.isShow) {
        console.log("单个导出");
        window.location.href =
          QUESTION_API +
          "/paper/export/" +
          this.exportModel.id +
          "/" +
          this.exportModel.exportContentList +
          "/" +
          this.user.rootOrgName +
          "/" +
          this.user.displayName +
          "/onLine" +
          "?psw=" +
          this.printExamPackagePassword +
          "&$key=" +
          key +
          "&$token=" +
          token;
        this.exportDialog = false;
      } else {
        console.log("批量导出");
        var paperIds = this.paperIds;
        console.log(paperIds);
        window.location.href =
          QUESTION_API +
          "/paper/batch_export/" +
          paperIds +
          "/" +
          this.exportModel.exportContentList +
          "/" +
          this.user.rootOrgName +
          "/" +
          this.user.displayName +
          "/onLine" +
          "?$key=" +
          key +
          "&$token=" +
          token;
        this.exportDialog = false;
        console.log(paperIds);
      }
    },
    removeItem() {
      sessionStorage.removeItem("gen_paper");
      sessionStorage.removeItem("gen_paper_currentPage");
    },
    previewPDF2(row) {
      window.open(QUESTION_API + "/paper/pdf/" + row.id);
    },
    openPrint(row) {
      this.dialogModel = true;
      this.rowIds.push(row.id);
    },
    openPrints() {
      this.dialogModel = true;
      this.rowIds = this.selectedPaperIds;
    },
    cancel(formData) {
      this.resetForm2(formData);
      this.dialogModel = false;
    },
    resetForm2(formData) {
      this.printFrom.examId = "";
      this.$refs[formData].clearValidate();
    },
    //传至印刷模块
    sendPrint(formData) {
      this.$refs[formData].validate(valid => {
        if (valid) {
          var orgId = "";
          for (let exam of this.examList) {
            if (exam.id == this.printFrom.examId) {
              orgId = exam.rootOrgId;
            }
          }
          if (orgId != "" || orgId == "0") {
            for (let printPid of this.rowIds) {
              this.$http.get(
                QUESTION_API +
                  "/sendPrint/" +
                  printPid +
                  "/" +
                  this.printFrom.examId +
                  "/" +
                  orgId
              );
            }
            this.$notify({
              message: "已推送",
              type: "success"
            });
            this.resetForm2(formData);
            this.dialogModel = false;
            this.rowIds = [];
          }
        } else {
          return false;
        }
      });
    },
    //查询考试
    getExams(query) {
      query = query.trim();
      this.$http
        .get(
          EXAM_WORK_API + "/exam/queryByNameLike?name=" + query + "&enable=true"
        )
        .then(response => {
          this.examList = response.data;
        });
    },
    searchExamList() {
      //查询所有考试
      this.$http
        .get(EXAM_WORK_API + "/exam/queryByNameLike?name=&enable=true")
        .then(response => {
          var list = response.data;
          for (var i = 0; i < list.length; i++) {
            if (list[i].examType == "TRADITION") {
              this.examList.push(list[i]);
            }
          }
        });
    },
    //根据orgId查询学校名称
    searchOrgName() {
      this.$http
        .get(CORE_API + "/org/rootOrg/" + this.user.rootOrgId)
        .then(response => {
          this.Org = response.data;
        });
    },
    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();
    }
  },
  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();
    this.searchExamList();
    this.searchOrgName();
  }
};
</script>
<style scoped src="../styles/Common.css"></style>
