shuishen
2021-11-04 e0001b944ebd202e0640d164d7f1fb439193f7d4
src/views/trainExam/performance.vue
@@ -1,45 +1,48 @@
/*
 * @Author: Morpheus
 * @Date: 2021-07-05 16:31:54
 * @Last Modified by: liu
 * @Last Modified time: 2021-10-26 15:44:52
 * @Last Modified by: Morpheus
 * @Last Modified time: 2021-11-04 16:18:32
 * menu-name 成绩管理
 */
<template>
  <el-row class="morpheus-box">
    <el-col :span="24" class="recruitmentManagement">
      <el-card>
        <div class="exam-card-body">
          <avue-crud
            v-model="obj"
            class="company-box"
            :option="questionBankOption"
            :search.sync="questionBankSearch"
            :table-loading="questionBankLoading"
            :data="questionBankData"
            :permission="permissionList"
            ref="questionBankCrud"
            :page.sync="questionBankPage"
            @on-load="questionBankOnLoad"
            @selection-change="questionBankSelectionChange"
            @search-change="questionBankSearchChange"
            @search-reset="questionBankSearchReset"
            @current-change="questionBankCurrentChange"
            @size-change="questionBankSizeChange"
            @row-update="questionBankRowUpdate"
            @refresh-change="refreshChange"
          >
            <template slot-scope="{ row }" slot="theoryGrade">
              {{ row.theoryGrade == -1 ? "" : row.theoryGrade }}
            </template>
            <template slot-scope="{ row }" slot="learnGrade">
              {{ row.learnGrade == -1 ? "暂未录入" : row.learnGrade }}
            </template>
            <template slot-scope="{ row }" slot="allGrade">
              {{ row.allGrade == -1 ? "" : row.allGrade }}
            </template>
            <template slot-scope="{ row }" slot="qualified">
              {{
    <el-row class="morpheus-box">
        <el-col :span="24"
                class="recruitmentManagement">
            <el-card>
                <div class="exam-card-body">
                    <avue-crud v-model="obj"
                               class="company-box"
                               :option="questionBankOption"
                               :search.sync="questionBankSearch"
                               :table-loading="questionBankLoading"
                               :data="questionBankData"
                               :permission="permissionList"
                               ref="questionBankCrud"
                               :page.sync="questionBankPage"
                               @on-load="questionBankOnLoad"
                               @selection-change="questionBankSelectionChange"
                               @search-change="questionBankSearchChange"
                               @search-reset="questionBankSearchReset"
                               @current-change="questionBankCurrentChange"
                               @size-change="questionBankSizeChange"
                               @row-update="questionBankRowUpdate"
                               @refresh-change="refreshChange">
                        <template slot-scope="{ row }"
                                  slot="theoryGrade">
                            {{ row.theoryGrade == -1 ? "" : row.theoryGrade }}
                        </template>
                        <template slot-scope="{ row }"
                                  slot="learnGrade">
                            {{ row.learnGrade == -1 ? "暂未录入" : row.learnGrade }}
                        </template>
                        <template slot-scope="{ row }"
                                  slot="allGrade">
                            {{ row.allGrade == -1 ? "" : row.allGrade }}
                        </template>
                        <template slot-scope="{ row }"
                                  slot="qualified">
                            {{
                row.qualified == -1
                  ? ""
                  : row.qualified == 0
@@ -50,794 +53,968 @@
                  ? "缺考,成绩无效"
                  : ""
              }}
            </template>
                        </template>
            <!-- 自定义按钮 -->
            <template slot="menuLeft">
              <!-- <el-button type="danger"
                        <!-- 自定义按钮 -->
                        <template slot="menuLeft">
                            <!-- <el-button type="danger"
                                       size="mini"
                                       icon="el-icon-delete"
                                       plain
                                       @click="handleDelete">新增
                            </el-button> -->
              <!-- <el-button type="danger"
                            <!-- <el-button type="danger"
                                       size="mini"
                                       icon="el-icon-delete"
                                       plain
                                       @click="handleDelete">删除
                            </el-button> -->
              <el-button
                type="success"
                size="small"
                plain
                icon="el-icon-upload2"
                v-if="permission.trainExam_performance_import"
                @click="handleImport"
                >实操成绩导入
              </el-button>
              <el-button
                type="warning"
                size="small"
                plain
                icon="el-icon-download"
                v-if="permission.trainExam_performance_export"
                @click="handleExport"
                >成绩导出
              </el-button>
            </template>
                            <el-button type="success"
                                       size="small"
                                       plain
                                       icon="el-icon-upload2"
                                       v-if="permission.trainExam_performance_import"
                                       @click="handleImport">实操成绩导入
                            </el-button>
                            <el-button type="warning"
                                       size="small"
                                       plain
                                       icon="el-icon-download"
                                       v-if="permission.trainExam_performance_export"
                                       @click="handleExport">成绩导出
                            </el-button>
                        </template>
            <template slot-scope="{ type, size, row }" slot="menu">
              <el-button
                icon="el-icon-s-flag"
                @click="absent(row)"
                :size="size"
                :type="type"
                >缺考标记</el-button
              >
              <el-button
                icon="el-icon-s-promotion"
                @click="openzhengjian(row)"
                :disabled="row.qualified != 0"
                :size="size"
                :type="type"
                >查看证件</el-button
              >
            </template>
          </avue-crud>
                        <template slot-scope="{ type, size, row }"
                                  slot="menu">
                            <el-button icon="el-icon-s-flag"
                                       @click="absent(row)"
                                       :size="size"
                                       :type="type">缺考标记</el-button>
                            <el-button icon="el-icon-s-promotion"
                                       @click="openzhengjian(row)"
                                       :disabled="row.qualified != 0"
                                       :size="size"
                                       :type="type">查看证件</el-button>
                            <el-button icon="el-icon-edit"
                                       @click="modifiedGrades(row)"
                                       :size="size"
                                       :type="type">申请修改成绩</el-button>
                        </template>
          <el-dialog
            title="实操成绩导入"
            append-to-body
            :visible.sync="excelBox"
            width="555px"
          >
            <avue-form
              :option="excelOption"
              v-model="excelForm"
              :upload-after="uploadAfter"
            >
              <template slot="excelTemplate">
                <el-button type="primary" @click="handleTemplate">
                  点击下载<i class="el-icon-download el-icon--right"></i>
                </el-button>
              </template>
            </avue-form>
          </el-dialog>
        </div>
      </el-card>
    </el-col>
    <!-- <el-dialog
                    </avue-crud>
                    <el-dialog title="实操成绩导入"
                               append-to-body
                               :visible.sync="excelBox"
                               width="555px">
                        <avue-form :option="excelOption"
                                   v-model="excelForm"
                                   :upload-after="uploadAfter">
                            <template slot="excelTemplate">
                                <el-button type="primary"
                                           @click="handleTemplate">
                                    点击下载<i class="el-icon-download el-icon--right"></i>
                                </el-button>
                            </template>
                        </avue-form>
                    </el-dialog>
                </div>
            </el-card>
        </el-col>
        <el-dialog title="申请修改成绩"
                   :visible.sync="gradeBoxVisible"
                   width="width"
                   :modal='true'
                   :modal-append-to-body='true'
                   :append-to-body='true'
                   :close-on-click-modal='false'
                   :close-on-press-escape='false'
                   :before-close="dialogBeforeClose">
            <div>
                <el-form ref="gradeForm"
                         :model="gradeForm"
                         :rules="rules"
                         label-width="80px"
                         label-position="left">
                    <el-row :gutter="24">
                        <el-col :span="12">
                            <el-form-item label="考试名称"
                                          label-width="108px">
                                <el-input v-model="gradeForm.examName"
                                          disabled></el-input>
                            </el-form-item>
                        </el-col>
                        <el-col :span="12">
                            <el-form-item label="姓名"
                                          label-width="108px">
                                <el-input v-model="gradeForm.securityName"
                                          disabled></el-input>
                            </el-form-item>
                        </el-col>
                    </el-row>
                    <el-row :gutter="24">
                        <el-col :span="12">
                            <el-form-item label="身份证号"
                                          label-width="108px">
                                <el-input v-model="gradeForm.account"
                                          disabled></el-input>
                            </el-form-item>
                        </el-col>
                        <el-col :span="12">
                            <el-form-item label="准考证号"
                                          label-width="108px">
                                <el-input v-model="gradeForm.candidateNo"
                                          disabled></el-input>
                            </el-form-item>
                        </el-col>
                    </el-row>
                    <el-row :gutter="24">
                        <el-col :span="12">
                            <el-form-item label="原理论成绩"
                                          label-width="108px">
                                <el-input v-model="gradeForm.theoryGrade"
                                          disabled></el-input>
                            </el-form-item>
                        </el-col>
                        <el-col :span="12">
                            <el-form-item label="修改考试成绩"
                                          label-width="108px"
                                          prop='editGrades'>
                                <el-input v-model.number="gradeForm.editGrades"
                                          autocomplete="off"></el-input>
                            </el-form-item>
                        </el-col>
                    </el-row>
                    <el-row :gutter="24">
                        <el-col :span="12">
                            <el-form-item label="实操成绩"
                                          label-width="108px">
                                <el-input v-model="gradeForm.learnGrade"
                                          disabled></el-input>
                            </el-form-item>
                        </el-col>
                        <el-col :span="12">
                            <el-form-item label="总成绩"
                                          label-width="108px">
                                <el-input v-model="gradeForm.allGrade"
                                          disabled></el-input>
                            </el-form-item>
                        </el-col>
                    </el-row>
                    <el-form-item label="修改理由"
                                  label-width="108px">
                        <el-input type='textarea'
                                  :rows="3"
                                  placeholder="请输入修改理由"
                                  resize='none'
                                  v-model="gradeForm.editReason"></el-input>
                    </el-form-item>
                    <el-form-item style="text-align: center;"
                                  label-width="0">
                        <el-button type="primary"
                                   @click="uploadGrade('gradeForm')">确 定</el-button>
                        <el-button @click="gradeBoxVisible = false">取 消</el-button>
                    </el-form-item>
                </el-form>
            </div>
        </el-dialog>
        <!-- <el-dialog
      title="打印证件"
      :visible.sync="dialogVisiblezhengjian"
      :modal-append-to-body="false"
    > -->
    <div class="dialogVisiblezhengjian" v-if="dialogVisiblezhengjian">
      <baoanz
        :data="baoanzdata"
        :close="1"
        @close="closezhengjian"
        :closePrint="1"
      ></baoanz>
    </div>
    <!-- </el-dialog> -->
  </el-row>
        <div class="dialogVisiblezhengjian"
             v-if="dialogVisiblezhengjian">
            <baoanz :data="baoanzdata"
                    :close="1"
                    @close="closezhengjian"
                    :closePrint="1"></baoanz>
        </div>
        <!-- </el-dialog> -->
    </el-row>
</template>
<script>
import baoanz from "../securityGuard/baoanz.vue";
import { getList, update, updateAbsent } from "@/api/examapi/performance";
import { getList, update, updateAbsent, updateGrade } from "@/api/examapi/performance";
import { mapGetters } from "vuex";
import { getRoleDetail } from "@/api/system/role";
import Qs from "qs";
export default {
  components: {
    baoanz,
  },
  data() {
    var validatePass = (rule, value, callback) => {
      console.log(value);
      if (value == undefined || value == "") {
        callback(new Error("请输入实操成绩"));
        return;
      } else if (value !== "" && isNaN(value) == true) {
        callback(new Error("请输入数字"));
      } else if (value <= 0) {
        callback(new Error("分数设置请大于0"));
      } else if (value > 100) {
        callback(new Error("分数设置请小于100"));
      } else {
        callback();
      }
    };
    return {
      dialogVisiblezhengjian: false,
      baoanzdata: {},
      obj: {
        name: "张三",
      },
      excelBox: false,
      questionBankOption: {
        // 操作栏多余按钮去除
        delBtn: false,
        editBtn: true,
        addBtn: false,
        selection: false,
        // 导出按钮
        // excelBtn: true,
        // excelBtnText: "成绩导出",
        viewBtn: true,
        // title: '成绩',
        align: "center",
        height: "auto",
        calcHeight: 80,
        tip: false,
        searchShow: true,
        searchMenuSpan: 4,
        index: true,
        indexLabel: "序号",
        //dialogType: 'drawer',
        dialogClickModal: false,
        // 操作栏宽度
        menu: true,
        menuWidth: 295,
        labelWidth: 120,
        column: [
          {
            label: "考试时间",
            prop: "examDate",
            type: "date",
            hide: true,
            format: "yyyy-MM-dd",
            valueFormat: "yyyy-MM-dd",
            width: 140,
            slot: true,
            search: true,
            searchSpan: 4,
            // 表单新增时是否禁止
            addDisabled: false,
            // 表单新增时是否可见
            addDisplay: false,
            // 表单新增时是否为查看模式
            addDetail: false,
            // 表单编辑时是否禁止
            editDisabled: false,
            // 表单编辑时是否可见
            editDisplay: false,
            // 表单编辑时是否为查看模式
            editDetail: false,
            viewDisplay: false,
          },
          {
            label: "考试名称",
            prop: "examName",
            search: true,
            searchSpan: 5,
            slot: true,
            viewDisplay: true,
            // 表单新增时是否禁止
            addDisabled: false,
            // 表单新增时是否可见
            addDisplay: true,
            // 表单新增时是否为查看模式
            addDetail: false,
            // 表单编辑时是否禁止
            editDisabled: true,
            viewDisabled: true,
            // 表单编辑时是否可见
            editDisplay: true,
            // 表单编辑时是否为查看模式
            editDetail: false,
            rules: [
              {
                required: true,
                message: "请输入试卷名称",
                trigger: "blur",
              },
            ],
            width: 210,
            // overHidden:true,
          },
          {
            label: "姓名",
            prop: "securityName",
            search: true,
            searchSpan: 3,
            slot: true,
            viewDisplay: true,
            // 表单新增时是否禁止
            addDisabled: false,
            // 表单新增时是否可见
            addDisplay: true,
            // 表单新增时是否为查看模式
            addDetail: false,
            // 表单编辑时是否禁止
            editDisabled: true,
            viewDisabled: true,
            // 表单编辑时是否可见
            editDisplay: true,
            // 表单编辑时是否为查看模式
            editDetail: false,
            rules: [
              {
                required: true,
                message: "请输入试卷名称",
                trigger: "blur",
              },
            ],
            width: 80,
            // overHidden:true,
          },
          {
            label: "身份证号",
            prop: "account",
            search: true,
            searchSpan: 4,
            slot: true,
            // 表单新增时是否禁止
            addDisabled: false,
            // 表单新增时是否可见
            addDisplay: true,
            // 表单新增时是否为查看模式
            addDetail: false,
            // 表单编辑时是否禁止
            editDisabled: true,
            // 表单编辑时是否可见
            editDisplay: true,
            // 表单编辑时是否为查看模式
            editDetail: false,
            rules: [
              {
                required: true,
                message: "请输入保安姓名",
                trigger: "blur",
              },
            ],
            width: 140,
          },
          {
            label: "准考证号",
            prop: "candidateNo",
            search: true,
            searchSpan: 4,
            slot: true,
            // 表单新增时是否禁止
            addDisabled: false,
            // 表单新增时是否可见
            addDisplay: true,
            // 表单新增时是否为查看模式
            addDetail: false,
            // 表单编辑时是否禁止
            editDisabled: true,
            // 表单编辑时是否可见
            editDisplay: true,
            // 表单编辑时是否为查看模式
            editDetail: false,
            rules: [
              {
                required: true,
                message: "请输入保安姓名",
                trigger: "blur",
              },
            ],
            width: 140,
          },
          {
            label: "所属公司",
            prop: "companyName",
            search: true,
            searchSpan: 4,
            // dicUrl: '/api/blade-system/dept/tree',
            // props: {
            //     label: "title",
            //     value: "id",
            // },
            slot: true,
            // 表单新增时是否禁止
            addDisabled: false,
            // 表单新增时是否可见
            addDisplay: true,
            // 表单新增时是否为查看模式
            addDetail: false,
            // 表单编辑时是否禁止
            editDisabled: true,
            // 表单编辑时是否可见
            editDisplay: true,
            // 表单编辑时是否为查看模式
            editDetail: false,
            rules: [
              {
                required: true,
                message: "请输入所属公司",
                trigger: "blur",
              },
            ],
            width: 230,
          },
          {
            label: "考试开始时间",
            prop: "examTime",
            type: "datetime",
            // span: 24,
            format: "yyyy-MM-dd HH:mm:ss",
            valueFormat: "yyyy-MM-dd HH:mm:ss",
            width: 140,
            slot: true,
            // 表单新增时是否禁止
            addDisabled: false,
            // 表单新增时是否可见
            addDisplay: true,
            // 表单新增时是否为查看模式
            addDetail: false,
            // 表单编辑时是否禁止
            editDisabled: true,
            // 表单编辑时是否可见
            editDisplay: true,
            // 表单编辑时是否为查看模式
            editDetail: false,
          },
          {
            label: "考试结束时间",
            prop: "examEndTime",
            type: "datetime",
            // span: 24,
            format: "yyyy-MM-dd HH:mm:ss",
            valueFormat: "yyyy-MM-dd HH:mm:ss",
            width: 140,
            slot: true,
            // 表单新增时是否禁止
            addDisabled: false,
            // 表单新增时是否可见
            addDisplay: true,
            // 表单新增时是否为查看模式
            addDetail: false,
            // 表单编辑时是否禁止
            editDisabled: true,
            // 表单编辑时是否可见
            editDisplay: true,
            // 表单编辑时是否为查看模式
            editDetail: false,
          },
          {
            label: "状态",
            prop: "isExam",
            type: "select",
            slot: true,
            search: true,
            searchSpan: 3,
            width: 60,
            dicData: [
              {
                label: "发布成绩",
                value: 2,
              },
              {
                label: "考试中",
                value: 3,
              },
            ],
            // 表单新增时是否禁止
            addDisabled: false,
            // 表单新增时是否可见
            addDisplay: true,
            // 表单新增时是否为查看模式
            addDetail: false,
            // 表单编辑时是否禁止
            editDisabled: true,
            // 表单编辑时是否可见
            editDisplay: true,
            // 表单编辑时是否为查看模式
            editDetail: false,
            rules: [
              {
                required: true,
                message: "请输入考试名称",
                trigger: "blur",
              },
            ],
          },
          {
            label: "理论成绩",
            prop: "theoryGrade",
            slot: true,
            // 表单新增时是否禁止
            addDisabled: false,
            // 表单新增时是否可见
            addDisplay: true,
            // 表单新增时是否为查看模式
            addDetail: false,
            // 表单编辑时是否禁止
            editDisabled: true,
            // 表单编辑时是否可见
            editDisplay: true,
            // 表单编辑时是否为查看模式
            editDetail: false,
            width: 68,
          },
          {
            label: "实操成绩",
            prop: "learnGrade",
            slot: true,
            // 表单新增时是否禁止
            addDisabled: false,
            // 表单新增时是否可见
            addDisplay: true,
            // 表单新增时是否为查看模式
            addDetail: false,
            // 表单编辑时是否禁止
            editDisabled: false,
            // 表单编辑时是否可见
            editDisplay: true,
            // 表单编辑时是否为查看模式
            editDetail: false,
            width: 68,
            rules: [
              { validator: validatePass, required: true, trigger: "blur" },
            ],
          },
          {
            label: "总成绩",
            prop: "allGrade",
            slot: true,
            // 表单新增时是否禁止
            addDisabled: false,
            // 表单新增时是否可见
            addDisplay: true,
            // 表单新增时是否为查看模式
            addDetail: false,
            // 表单编辑时是否禁止
            editDisabled: true,
            // 表单编辑时是否可见
            editDisplay: true,
            // 表单编辑时是否为查看模式
            editDetail: false,
            width: 58,
            rules: [
              {
                required: true,
                message: "请输入考试名称",
                trigger: "blur",
              },
            ],
          },
          {
            label: "是否合格",
            prop: "qualified",
            type: "select",
            slot: true,
            search: true,
            searchSpan: 3,
            width: 68,
            dicData: [
              {
                label: "合格",
                value: 0,
              },
              {
                label: "不合格",
                value: 1,
              },
              {
                label: "暂未录实操成绩",
                value: 2,
              },
              {
                label: "缺考,成绩无效",
                value: 3,
              },
            ],
            // 表单新增时是否禁止
            addDisabled: false,
            // 表单新增时是否可见
            addDisplay: true,
            // 表单新增时是否为查看模式
            addDetail: false,
            // 表单编辑时是否禁止
            editDisabled: true,
            // 表单编辑时是否可见
            editDisplay: true,
            // 表单编辑时是否为查看模式
            editDetail: false,
            rules: [
              {
                required: true,
                message: "请输入考试名称",
                trigger: "blur",
              },
            ],
          },
        ],
      },
      questionBankSearch: {},
      questionBankLoading: true,
      questionBankData: [],
      questionBankPage: {
        pageSize: 10,
        currentPage: 1,
        total: 16,
      },
      questionBankQuery: {},
      questionBankSelectionList: [],
      excelForm: {},
      excelOption: {
        submitBtn: false,
        emptyBtn: false,
        column: [
          {
            label: "模板上传",
            prop: "excelFile",
            type: "upload",
            drag: true,
            loadText: "模板上传中,请稍等",
            span: 24,
            propsHttp: {
              res: "data",
            },
            tip: "请上传 .xls,.xlsx 标准格式文件",
            action: "/api/examScore/import-examScore",
          },
          // {
          //     label: "数据覆盖",
          //     prop: "isCovered",
          //     type: "switch",
          //     align: "center",
          //     width: 80,
          //     dicData: [
          //     {
          //         label: "否",
          //         value: 0,
          //     },
          //     {
          //         label: "是",
          //         value: 1,
          //     },
          //     ],
          //     value: 0,
          //     slot: true,
          //     rules: [
          //     {
          //         required: true,
          //         message: "请选择是否覆盖",
          //         trigger: "blur",
          //     },
          //     ],
          // },
          {
            label: "模板下载",
            prop: "excelTemplate",
            formslot: true,
            span: 24,
          },
        ],
      },
    };
  },
  created() {},
  mounted() {},
  computed: {
    ...mapGetters(["userInfo", "permission"]),
    permissionList() {
      return {
        addBtn: this.vaildData(null, false),
        viewBtn: this.vaildData(
          this.permission.trainExam_performance_view,
          false
        ),
        delBtn: this.vaildData(null, false),
        editBtn: this.vaildData(
          this.permission.trainExam_performance_edit,
          false
        ),
        excelBtn: this.vaildData(
          this.permission.trainExam_performance_export,
          false
        ),
      };
    components: {
        baoanz,
    },
  },
  methods: {
    openzhengjian(row) {
      this.baoanzdata = {
        realName: row.securityName,
        $sex: row.sex == 1 ? "男" : "女",
        securitynumber: row.securityNumber,
        paperTime: row.paperTime,
        avatar: row.avatar,
      };
      this.dialogVisiblezhengjian = true;
    },
    closezhengjian() {
      this.dialogVisiblezhengjian = false;
    },
    questionBankOnLoad(page, params = {}) {
      //判断角色,如果是保安公司管理员或保安,只能查看当前公司的考试成绩
      var that = this;
      //获取当前登录人员的角色信息
      var roleIds = this.userInfo.role_id.split(",");
      roleIds.forEach((roleId) => {
        getRoleDetail(roleId).then((res) => {
          var roleAlias = res.data.data.roleAlias;
          if (roleAlias == "保安公司管理员" || roleAlias == "保安") {
            //如果是保安公司管理员
            params["deptId"] = that.userInfo.dept_id;
          }
          if (roleAlias == "培训公司管理员") {
            //如果是培训公司管理员
            params["trainUnitId"] = that.userInfo.dept_id;
          }
          that.questionBankLoading = false;
          params["examType"] = 2;
          getList(
            page.currentPage,
            page.pageSize,
            Object.assign(params, this.questionBankQuery)
          ).then((res) => {
            const data = res.data.data;
            that.questionBankPage.total = data.total;
            that.questionBankData = data.records;
            that.questionBankLoading = false;
            that.questionBankSelectionClear();
          });
        });
      });
    },
    //缺考标记
    absent(row, done, loading) {
      this.$confirm("确定缺考标记?", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      }).then(() => {
        row.qualified = 3;
        updateAbsent(row).then(
          () => {
            this.onLoad(this.page);
            this.$message({
              type: "success",
              message: "操作成功!",
            });
            done();
          },
          (error) => {
            window.console.log(error);
            loading();
          }
        );
      });
    },
    questionBankSelectionClear() {
      this.questionBankSelectionList = [];
      this.$refs.questionBankCrud.toggleSelection();
    },
    questionBankSelectionChange(list) {
      this.questionBankSelectionList = list;
    },
    questionBankSearchChange(params, done) {
      this.questionBankQuery = params;
      this.questionBankPage.currentPage = 1;
      this.questionBankOnLoad(this.questionBankPage, params);
      done();
    },
    questionBankSearchReset() {
      this.questionBankQuery = {};
      this.questionBankOnLoad(this.questionBankPage);
    },
    questionBankCurrentChange(currentPage) {
      this.questionBankPage.currentPage = currentPage;
    },
    questionBankSizeChange(pageSize) {
      this.questionBankPage.pageSize = pageSize;
    },
    questionBankRowUpdate(row, index, done, loading) {
      update({
        theoryGrade: row.theoryGrade,
        learnGrade: row.learnGrade,
        examId: row.examId,
        id: row.id,
      }).then(
        () => {
          this.questionBankOnLoad(this.questionBankPage);
          this.$message({
            type: "success",
            message: "操作成功!",
          });
          done();
        },
        (error) => {
          window.console.log(error);
          loading();
        }
      );
    },
    handleTemplate() {
      window.open(`/api/examScore/export-template`);
    },
    handleImport() {
      this.excelBox = true;
    },
    uploadAfter(res, done, loading, column) {
      window.console.log(column);
      this.excelBox = false;
      // this.$message({
      //   type: "success",
      //   message: "操作成功!",
      // });
      this.refreshChange();
      done();
    },
    refreshChange() {
      this.questionBankOnLoad(this.questionBankPage, this.questionBankQuery);
    },
    //成绩导出
    handleExport() {
      this.$confirm("是否导出成绩数据?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      }).then(() => {
        //获取查询条件
        // console.log(this.questionBankSearch, 456);
        var data = {
          account: this.questionBankSearch.account,
          companyName: this.questionBankSearch.companyName,
          examDate: this.questionBankSearch.examDate,
          isExam: this.questionBankSearch.isExam,
          qualified: this.questionBankSearch.qualified,
          securityName: this.questionBankSearch.securityName,
          examName: this.questionBankSearch.examName,
    data () {
        var validatePass = (rule, value, callback) => {
            if (value == undefined || value == "") {
                callback(new Error("请输入实操成绩"));
                return;
            } else if (value !== "" && isNaN(value) == true) {
                callback(new Error("请输入数字"));
            } else if (value <= 0) {
                callback(new Error("分数设置请大于0"));
            } else if (value > 100) {
                callback(new Error("分数设置请小于100"));
            } else {
                callback();
            }
        };
        //导出
        if (
          this.userInfo.role_name == "保安公司管理员" ||
          this.userInfo.role_name == "保安"
        ) {
          //如果是保安公司管理员
          data["deptId"] = this.userInfo.dept_id;
        }
        if (this.userInfo.role_name == "培训公司管理员") {
          //如果是培训公司管理员
          data["trainUnitId"] = this.userInfo.dept_id;
        }
        data["examType"] = 2;
        //序列号url形式,用&拼接
        data = Qs.stringify(data);
        window.open(`/api/examScore/export-examScore?` + data);
      });
        return {
            rules: {
                editGrades: [
                    { validator: validatePass, required: true, trigger: "blur" },
                ]
            },
            gradeForm: {
                id: null,
                examName: '',
                securityName: '',
                account: '',
                candidateNo: '',
                theoryGrade: '',
                learnGrade: '',
                allGrade: '',
                editGrades: '',
                editReason: ''
            },
            gradeBoxVisible: false,
            dialogVisiblezhengjian: false,
            baoanzdata: {},
            obj: {
                name: "张三",
            },
            excelBox: false,
            questionBankOption: {
                // 操作栏多余按钮去除
                delBtn: false,
                editBtn: true,
                addBtn: false,
                selection: false,
                // 导出按钮
                // excelBtn: true,
                // excelBtnText: "成绩导出",
                viewBtn: true,
                // title: '成绩',
                align: "center",
                height: "auto",
                calcHeight: 80,
                tip: false,
                searchShow: true,
                searchMenuSpan: 4,
                index: true,
                indexLabel: "序号",
                //dialogType: 'drawer',
                dialogClickModal: false,
                // 操作栏宽度
                menu: true,
                menuWidth: 295,
                labelWidth: 120,
                column: [
                    {
                        label: "考试时间",
                        prop: "examDate",
                        type: "date",
                        hide: true,
                        format: "yyyy-MM-dd",
                        valueFormat: "yyyy-MM-dd",
                        width: 140,
                        slot: true,
                        search: true,
                        searchSpan: 4,
                        // 表单新增时是否禁止
                        addDisabled: false,
                        // 表单新增时是否可见
                        addDisplay: false,
                        // 表单新增时是否为查看模式
                        addDetail: false,
                        // 表单编辑时是否禁止
                        editDisabled: false,
                        // 表单编辑时是否可见
                        editDisplay: false,
                        // 表单编辑时是否为查看模式
                        editDetail: false,
                        viewDisplay: false,
                    },
                    {
                        label: "考试名称",
                        prop: "examName",
                        search: true,
                        searchSpan: 5,
                        slot: true,
                        viewDisplay: true,
                        // 表单新增时是否禁止
                        addDisabled: false,
                        // 表单新增时是否可见
                        addDisplay: true,
                        // 表单新增时是否为查看模式
                        addDetail: false,
                        // 表单编辑时是否禁止
                        editDisabled: true,
                        viewDisabled: true,
                        // 表单编辑时是否可见
                        editDisplay: true,
                        // 表单编辑时是否为查看模式
                        editDetail: false,
                        rules: [
                            {
                                required: true,
                                message: "请输入试卷名称",
                                trigger: "blur",
                            },
                        ],
                        width: 210,
                        // overHidden:true,
                    },
                    {
                        label: "姓名",
                        prop: "securityName",
                        search: true,
                        searchSpan: 3,
                        slot: true,
                        viewDisplay: true,
                        // 表单新增时是否禁止
                        addDisabled: false,
                        // 表单新增时是否可见
                        addDisplay: true,
                        // 表单新增时是否为查看模式
                        addDetail: false,
                        // 表单编辑时是否禁止
                        editDisabled: true,
                        viewDisabled: true,
                        // 表单编辑时是否可见
                        editDisplay: true,
                        // 表单编辑时是否为查看模式
                        editDetail: false,
                        rules: [
                            {
                                required: true,
                                message: "请输入试卷名称",
                                trigger: "blur",
                            },
                        ],
                        width: 80,
                        // overHidden:true,
                    },
                    {
                        label: "身份证号",
                        prop: "account",
                        search: true,
                        searchSpan: 4,
                        slot: true,
                        // 表单新增时是否禁止
                        addDisabled: false,
                        // 表单新增时是否可见
                        addDisplay: true,
                        // 表单新增时是否为查看模式
                        addDetail: false,
                        // 表单编辑时是否禁止
                        editDisabled: true,
                        // 表单编辑时是否可见
                        editDisplay: true,
                        // 表单编辑时是否为查看模式
                        editDetail: false,
                        rules: [
                            {
                                required: true,
                                message: "请输入保安姓名",
                                trigger: "blur",
                            },
                        ],
                        width: 140,
                    },
                    {
                        label: "准考证号",
                        prop: "candidateNo",
                        search: true,
                        searchSpan: 4,
                        slot: true,
                        // 表单新增时是否禁止
                        addDisabled: false,
                        // 表单新增时是否可见
                        addDisplay: true,
                        // 表单新增时是否为查看模式
                        addDetail: false,
                        // 表单编辑时是否禁止
                        editDisabled: true,
                        // 表单编辑时是否可见
                        editDisplay: true,
                        // 表单编辑时是否为查看模式
                        editDetail: false,
                        rules: [
                            {
                                required: true,
                                message: "请输入保安姓名",
                                trigger: "blur",
                            },
                        ],
                        width: 140,
                    },
                    {
                        label: "所属公司",
                        prop: "companyName",
                        search: true,
                        searchSpan: 4,
                        // dicUrl: '/api/blade-system/dept/tree',
                        // props: {
                        //     label: "title",
                        //     value: "id",
                        // },
                        slot: true,
                        // 表单新增时是否禁止
                        addDisabled: false,
                        // 表单新增时是否可见
                        addDisplay: true,
                        // 表单新增时是否为查看模式
                        addDetail: false,
                        // 表单编辑时是否禁止
                        editDisabled: true,
                        // 表单编辑时是否可见
                        editDisplay: true,
                        // 表单编辑时是否为查看模式
                        editDetail: false,
                        rules: [
                            {
                                required: true,
                                message: "请输入所属公司",
                                trigger: "blur",
                            },
                        ],
                        width: 230,
                    },
                    {
                        label: "考试开始时间",
                        prop: "examTime",
                        type: "datetime",
                        // span: 24,
                        format: "yyyy-MM-dd HH:mm:ss",
                        valueFormat: "yyyy-MM-dd HH:mm:ss",
                        width: 140,
                        slot: true,
                        // 表单新增时是否禁止
                        addDisabled: false,
                        // 表单新增时是否可见
                        addDisplay: true,
                        // 表单新增时是否为查看模式
                        addDetail: false,
                        // 表单编辑时是否禁止
                        editDisabled: true,
                        // 表单编辑时是否可见
                        editDisplay: true,
                        // 表单编辑时是否为查看模式
                        editDetail: false,
                    },
                    {
                        label: "考试结束时间",
                        prop: "examEndTime",
                        type: "datetime",
                        // span: 24,
                        format: "yyyy-MM-dd HH:mm:ss",
                        valueFormat: "yyyy-MM-dd HH:mm:ss",
                        width: 140,
                        slot: true,
                        // 表单新增时是否禁止
                        addDisabled: false,
                        // 表单新增时是否可见
                        addDisplay: true,
                        // 表单新增时是否为查看模式
                        addDetail: false,
                        // 表单编辑时是否禁止
                        editDisabled: true,
                        // 表单编辑时是否可见
                        editDisplay: true,
                        // 表单编辑时是否为查看模式
                        editDetail: false,
                    },
                    {
                        label: "状态",
                        prop: "isExam",
                        type: "select",
                        slot: true,
                        search: true,
                        searchSpan: 3,
                        width: 60,
                        dicData: [
                            {
                                label: "发布成绩",
                                value: 2,
                            },
                            {
                                label: "考试中",
                                value: 3,
                            },
                        ],
                        // 表单新增时是否禁止
                        addDisabled: false,
                        // 表单新增时是否可见
                        addDisplay: true,
                        // 表单新增时是否为查看模式
                        addDetail: false,
                        // 表单编辑时是否禁止
                        editDisabled: true,
                        // 表单编辑时是否可见
                        editDisplay: true,
                        // 表单编辑时是否为查看模式
                        editDetail: false,
                        rules: [
                            {
                                required: true,
                                message: "请输入考试名称",
                                trigger: "blur",
                            },
                        ],
                    },
                    {
                        label: "理论成绩",
                        prop: "theoryGrade",
                        slot: true,
                        // 表单新增时是否禁止
                        addDisabled: false,
                        // 表单新增时是否可见
                        addDisplay: true,
                        // 表单新增时是否为查看模式
                        addDetail: false,
                        // 表单编辑时是否禁止
                        editDisabled: true,
                        // 表单编辑时是否可见
                        editDisplay: true,
                        // 表单编辑时是否为查看模式
                        editDetail: false,
                        width: 68,
                    },
                    {
                        label: "实操成绩",
                        prop: "learnGrade",
                        slot: true,
                        // 表单新增时是否禁止
                        addDisabled: false,
                        // 表单新增时是否可见
                        addDisplay: true,
                        // 表单新增时是否为查看模式
                        addDetail: false,
                        // 表单编辑时是否禁止
                        editDisabled: false,
                        // 表单编辑时是否可见
                        editDisplay: true,
                        // 表单编辑时是否为查看模式
                        editDetail: false,
                        width: 68,
                        rules: [
                            { validator: validatePass, required: true, trigger: "blur" },
                        ],
                    },
                    {
                        label: "总成绩",
                        prop: "allGrade",
                        slot: true,
                        // 表单新增时是否禁止
                        addDisabled: false,
                        // 表单新增时是否可见
                        addDisplay: true,
                        // 表单新增时是否为查看模式
                        addDetail: false,
                        // 表单编辑时是否禁止
                        editDisabled: true,
                        // 表单编辑时是否可见
                        editDisplay: true,
                        // 表单编辑时是否为查看模式
                        editDetail: false,
                        width: 58,
                        rules: [
                            {
                                required: true,
                                message: "请输入考试名称",
                                trigger: "blur",
                            },
                        ],
                    },
                    {
                        label: "是否合格",
                        prop: "qualified",
                        type: "select",
                        slot: true,
                        search: true,
                        searchSpan: 3,
                        width: 68,
                        dicData: [
                            {
                                label: "合格",
                                value: 0,
                            },
                            {
                                label: "不合格",
                                value: 1,
                            },
                            {
                                label: "暂未录实操成绩",
                                value: 2,
                            },
                            {
                                label: "缺考,成绩无效",
                                value: 3,
                            },
                        ],
                        // 表单新增时是否禁止
                        addDisabled: false,
                        // 表单新增时是否可见
                        addDisplay: true,
                        // 表单新增时是否为查看模式
                        addDetail: false,
                        // 表单编辑时是否禁止
                        editDisabled: true,
                        // 表单编辑时是否可见
                        editDisplay: true,
                        // 表单编辑时是否为查看模式
                        editDetail: false,
                        rules: [
                            {
                                required: true,
                                message: "请输入考试名称",
                                trigger: "blur",
                            },
                        ],
                    },
                ],
            },
            questionBankSearch: {},
            questionBankLoading: true,
            questionBankData: [],
            questionBankPage: {
                pageSize: 10,
                currentPage: 1,
                total: 16,
            },
            questionBankQuery: {},
            questionBankSelectionList: [],
            excelForm: {},
            excelOption: {
                submitBtn: false,
                emptyBtn: false,
                column: [
                    {
                        label: "模板上传",
                        prop: "excelFile",
                        type: "upload",
                        drag: true,
                        loadText: "模板上传中,请稍等",
                        span: 24,
                        propsHttp: {
                            res: "data",
                        },
                        tip: "请上传 .xls,.xlsx 标准格式文件",
                        action: "/api/examScore/import-examScore",
                    },
                    // {
                    //     label: "数据覆盖",
                    //     prop: "isCovered",
                    //     type: "switch",
                    //     align: "center",
                    //     width: 80,
                    //     dicData: [
                    //     {
                    //         label: "否",
                    //         value: 0,
                    //     },
                    //     {
                    //         label: "是",
                    //         value: 1,
                    //     },
                    //     ],
                    //     value: 0,
                    //     slot: true,
                    //     rules: [
                    //     {
                    //         required: true,
                    //         message: "请选择是否覆盖",
                    //         trigger: "blur",
                    //     },
                    //     ],
                    // },
                    {
                        label: "模板下载",
                        prop: "excelTemplate",
                        formslot: true,
                        span: 24,
                    },
                ],
            },
        };
    },
  },
    created () { },
    mounted () { },
    computed: {
        ...mapGetters(["userInfo", "permission"]),
        permissionList () {
            return {
                addBtn: this.vaildData(null, false),
                viewBtn: this.vaildData(
                    this.permission.trainExam_performance_view,
                    false
                ),
                delBtn: this.vaildData(null, false),
                editBtn: this.vaildData(
                    this.permission.trainExam_performance_edit,
                    false
                ),
                excelBtn: this.vaildData(
                    this.permission.trainExam_performance_export,
                    false
                ),
            };
        },
    },
    methods: {
        openzhengjian (row) {
            this.baoanzdata = {
                realName: row.securityName,
                $sex: row.sex == 1 ? "男" : "女",
                securitynumber: row.securityNumber,
                paperTime: row.paperTime,
                avatar: row.avatar,
            };
            this.dialogVisiblezhengjian = true;
        },
        closezhengjian () {
            this.dialogVisiblezhengjian = false;
        },
        questionBankOnLoad (page, params = {}) {
            //判断角色,如果是保安公司管理员或保安,只能查看当前公司的考试成绩
            var that = this;
            //获取当前登录人员的角色信息
            var roleIds = this.userInfo.role_id.split(",");
            roleIds.forEach((roleId) => {
                getRoleDetail(roleId).then((res) => {
                    var roleAlias = res.data.data.roleAlias;
                    if (roleAlias == "保安公司管理员" || roleAlias == "保安") {
                        //如果是保安公司管理员
                        params["deptId"] = that.userInfo.dept_id;
                    }
                    if (roleAlias == "培训公司管理员") {
                        //如果是培训公司管理员
                        params["trainUnitId"] = that.userInfo.dept_id;
                    }
                    that.questionBankLoading = false;
                    params["examType"] = 2;
                    getList(
                        page.currentPage,
                        page.pageSize,
                        Object.assign(params, this.questionBankQuery)
                    ).then((res) => {
                        const data = res.data.data;
                        that.questionBankPage.total = data.total;
                        that.questionBankData = data.records;
                        that.questionBankLoading = false;
                        that.questionBankSelectionClear();
                    });
                });
            });
        },
        //缺考标记
        absent (row, done, loading) {
            this.$confirm("确定缺考标记?", {
                confirmButtonText: "确定",
                cancelButtonText: "取消",
                type: "warning",
            }).then(() => {
                row.qualified = 3;
                updateAbsent(row).then(
                    () => {
                        this.questionBankOnLoad(this.questionBankPage);
                        this.$message({
                            type: "success",
                            message: "操作成功!",
                        });
                        done();
                    },
                    (error) => {
                        window.console.log(error);
                        loading();
                    }
                );
            });
        },
        // 修改考试成绩
        modifiedGrades (row) {
            var { id, examName, securityName, account, candidateNo, theoryGrade, learnGrade, allGrade } = row
            this.gradeForm.examName = examName
            this.gradeForm.securityName = securityName
            this.gradeForm.account = account
            this.gradeForm.candidateNo = candidateNo
            this.gradeForm.theoryGrade = theoryGrade
            this.gradeForm.learnGrade = learnGrade
            this.gradeForm.allGrade = allGrade
            this.gradeForm.editGrades = ''
            this.gradeForm.editReason = ''
            this.gradeForm.id = id
            this.gradeBoxVisible = true
        },
        uploadGrade (formName) {
            var that = this
            this.$refs[formName].validate((valid) => {
                if (valid) {
                    var obj = {}
                    obj.oldScore = this.gradeForm.theoryGrade
                    obj.newScore = this.gradeForm.editGrades
                    obj.applyCause = this.gradeForm.editReason
                    obj.examScoreId = this.gradeForm.id
                    obj.createUser = this.userInfo.Id
                    updateGrade(obj).then(
                        () => {
                            that.questionBankOnLoad(that.questionBankPage)
                            that.$message({
                                type: "success",
                                message: "操作成功!",
                            })
                            that.gradeBoxVisible = false
                        },
                        (error) => {
                            window.console.log(error)
                        }
                    );
                }
            })
        },
        questionBankSelectionClear () {
            this.questionBankSelectionList = [];
            this.$refs.questionBankCrud.toggleSelection();
        },
        questionBankSelectionChange (list) {
            this.questionBankSelectionList = list;
        },
        questionBankSearchChange (params, done) {
            this.questionBankQuery = params;
            this.questionBankPage.currentPage = 1;
            this.questionBankOnLoad(this.questionBankPage, params);
            done();
        },
        questionBankSearchReset () {
            this.questionBankQuery = {};
            this.questionBankOnLoad(this.questionBankPage);
        },
        questionBankCurrentChange (currentPage) {
            this.questionBankPage.currentPage = currentPage;
        },
        questionBankSizeChange (pageSize) {
            this.questionBankPage.pageSize = pageSize;
        },
        questionBankRowUpdate (row, index, done, loading) {
            update({
                theoryGrade: row.theoryGrade,
                learnGrade: row.learnGrade,
                examId: row.examId,
                id: row.id,
            }).then(
                () => {
                    this.questionBankOnLoad(this.questionBankPage);
                    this.$message({
                        type: "success",
                        message: "操作成功!",
                    });
                    done();
                },
                (error) => {
                    window.console.log(error);
                    loading();
                }
            );
        },
        handleTemplate () {
            window.open(`/api/examScore/export-template`);
        },
        handleImport () {
            this.excelBox = true;
        },
        uploadAfter (res, done, loading, column) {
            window.console.log(column);
            this.excelBox = false;
            // this.$message({
            //   type: "success",
            //   message: "操作成功!",
            // });
            this.refreshChange();
            done();
        },
        refreshChange () {
            this.questionBankOnLoad(this.questionBankPage, this.questionBankQuery);
        },
        //成绩导出
        handleExport () {
            this.$confirm("是否导出成绩数据?", "提示", {
                confirmButtonText: "确定",
                cancelButtonText: "取消",
                type: "warning",
            }).then(() => {
                //获取查询条件
                // console.log(this.questionBankSearch, 456);
                var data = {
                    account: this.questionBankSearch.account,
                    companyName: this.questionBankSearch.companyName,
                    examDate: this.questionBankSearch.examDate,
                    isExam: this.questionBankSearch.isExam,
                    qualified: this.questionBankSearch.qualified,
                    securityName: this.questionBankSearch.securityName,
                    examName: this.questionBankSearch.examName,
                };
                //导出
                if (
                    this.userInfo.role_name == "保安公司管理员" ||
                    this.userInfo.role_name == "保安"
                ) {
                    //如果是保安公司管理员
                    data["deptId"] = this.userInfo.dept_id;
                }
                if (this.userInfo.role_name == "培训公司管理员") {
                    //如果是培训公司管理员
                    data["trainUnitId"] = this.userInfo.dept_id;
                }
                data["examType"] = 2;
                //序列号url形式,用&拼接
                data = Qs.stringify(data);
                window.open(`/api/examScore/export-examScore?` + data);
            });
        },
    },
};
</script>
<style lang="scss" scoped>
.morpheus-box {
  position: relative;
    position: relative;
}
.dialogVisiblezhengjian {
  position: absolute;
  background-color: #fff;
  width: 100%;
  height: 100%;
  z-index: 10000 !important;
    position: absolute;
    background-color: #fff;
    width: 100%;
    height: 100%;
    z-index: 10000 !important;
}
</style>