保安服务企业管理项目备份
zhongrj
2023-06-25 0caae4016eb87ea3a5d5ee472c1ddd22c38fe0c9
src/views/trainExam/performance.vue
@@ -1,53 +1,37 @@
/* * @Author: Morpheus * @Date: 2021-07-05 16:31:54 * @Last Modified by: liu *
@Last Modified time: 2021-11-27 10:20:19 * menu-name 成绩管理 */
<template>
  <basic-container
    :class="[
      'exam-card-body',
      $store.state.control.screenSize == 1366 ? 'smallSize' : 'normalSize',
      $store.state.control.windowWidth >= 1024 ? 'tooRowSearch1' : ''
    ]"
  >
    <avue-crud
      v-model="obj"
      class="company-box tablesss"
      :option="questionBankOption"
      :search.sync="questionBankSearch"
      :table-loading="questionBankLoading"
      :data="questionBankData"
      :permission="permissionList"
      ref="questionBankCrud"
      :page.sync="questionBankPage"
      @sort-change="sortChange"
      @on-load="questionBankOnLoad"
      @selection-change="questionBankSelectionChange"
      @search-change="questionBankSearchChange"
      @search-reset="questionBankSearchReset"
      @current-change="questionBankCurrentChange"
      @size-change="questionBankSizeChange"
      @row-update="questionBankRowUpdate"
      @refresh-change="refreshChange"
    >
  <basic-container :class="[
    'exam-card-body',
    $store.state.control.screenSize == 1366 ? 'smallSize' : 'normalSize',
    $store.state.control.windowWidth >= 1024 ? 'tooRowSearch1' : ''
  ]">
    <avue-crud v-model="obj" class="company-box tablesss" :option="questionBankOption" :search.sync="questionBankSearch"
      :table-loading="questionBankLoading" :data="questionBankData" :permission="permissionList" ref="questionBankCrud"
      :page.sync="questionBankPage" @sort-change="sortChange" @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 }}
      </template>
      <template slot-scope="{ row }" slot="learnGrade">
        {{ row.learnGrade == "" ? "暂未录入" : row.learnGrade }}
      </template>
      <!-- <template slot-scope="{ row }" slot="learnGrade">
         {{ row.learnGrade == -1 ? "暂未录入" : row.learnGrade==0?'合格':'不合格'}}
      </template> -->
      <template slot-scope="{ row }" slot="allGrade">
        {{ row.allGrade == -1 ? "" : row.allGrade }}
      </template>
      <template slot-scope="{ row }" slot="qualified">
        {{
          row.qualified == ""
            ? ""
            : row.qualified == 0
          ? ""
          : row.qualified == 0
            ? "合格"
            : row.qualified == 1
            ? "不合格"
            : row.qualified == 3
            ? "缺考,成绩无效"
            : ""
              ? "不合格"
              : row.qualified == 3
                ? "缺考,成绩无效"
                : ""
        }}
      </template>
@@ -65,90 +49,36 @@
                                       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 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 type="warning" size="small" plain icon="el-icon-download"
          v-if="permission.trainExam_performance_export" @click="handleExport">成绩导出
        </el-button>
        <el-button
          type="primary"
          size="small"
          plain
          v-if="permission.trainExam_performance_paper_apply"
          icon="el-icon-collection-tag"
          @click="handleSecurityPaperApply"
          >证书制证申请
        <el-button type="danger" size="small" plain icon="el-icon-delete" v-if="permission.trainExam_performance_delete"
          @click="handleDelete">删 除
        </el-button>
        <el-button
          type="primary"
          size="small"
          plain
          v-if="permission.trainExam_performance_worker_paper_apply"
          icon="el-icon-collection-tag"
          @click="handleWorkerPaperApply"
          >上岗证制证申请
        <el-button type="primary" size="small" plain v-if="permission.trainExam_performance_paper_apply"
          style="display: none;" icon="el-icon-collection-tag" @click="handleSecurityPaperApply">证书制证申请
        </el-button>
        <el-button type="primary" size="small" plain v-if="permission.trainExam_performance_worker_paper_apply"
          style="display: none;" icon="el-icon-collection-tag" @click="handleWorkerPaperApply">上岗证制证申请
        </el-button>
      </template>
      <template slot-scope="{ type, size, row }" slot="menu">
        <el-button
          style="display: none"
          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
        >
        <el-button
          icon="el-icon-edit"
          v-if="row.isPaper == 6"
          @click="securityPaperApply(row)"
          :size="size"
          :type="type"
          >补证申请</el-button
        >
        <el-button style="display: none" 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>
        <el-button icon="el-icon-edit" v-if="row.isPaper == 6" @click="securityPaperApply(row)" :size="size"
          :type="type">补证申请</el-button>
      </template>
    </avue-crud>
    <el-dialog
      title="实操成绩导入"
      append-to-body
      :visible.sync="excelBox"
      width="555px"
    >
      <avue-form
        :option="excelOption"
        v-model="excelForm"
        :upload-after="uploadAfter"
      >
    <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>
@@ -157,17 +87,9 @@
      </avue-form>
    </el-dialog>
    <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"
    >
    <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"
@@ -303,13 +225,7 @@
            <el-button @click="gradeBoxVisible = false">取 消</el-button>
          </el-form-item>
        </el-form> -->
        <avue-form
          ref="form"
          :option="option"
          v-model="form"
          @reset-change="emptytChange"
          @submit="submit"
        >
        <avue-form ref="form" :option="option" v-model="form" @reset-change="emptytChange" @submit="submit">
        </avue-form>
      </div>
    </el-dialog>
@@ -320,12 +236,7 @@
      :modal-append-to-body="false"
    > -->
    <div class="dialogVisiblezhengjian" v-if="dialogVisiblezhengjian">
      <baoanz
        :data="baoanzdata"
        :close="1"
        @close="closezhengjian"
        :closePrint="1"
      ></baoanz>
      <baoanz :data="baoanzdata" :close="1" @close="closezhengjian" :closePrint="1"></baoanz>
    </div>
  </basic-container>
</template>
@@ -337,6 +248,7 @@
  update,
  updateAbsent,
  updateGrade,
  remove,
  getNowDate
} from "@/api/examapi/performance";
import { mapGetters } from "vuex";
@@ -482,6 +394,7 @@
            label: "实操成绩",
            prop: "learnGrade",
            labelWidth: 110,
            type: "select",
            disabled: true,
            rules: [
              {
@@ -489,21 +402,35 @@
                message: "请输入实操成绩",
                trigger: "blur"
              }
            ]
          },
          {
            label: "总成绩",
            prop: "allGrade",
            labelWidth: 110,
            disabled: true,
            rules: [
            ],
            dicData: [
              {
                required: false,
                message: "请输入总成绩",
                trigger: "blur"
                label: "合格",
                value: 0
              },
              {
                label: "不合格",
                value: 1
              },
              {
                label: "暂未录实操成绩",
                value: 2
              }
            ]
            ],
          },
          // {
          //   label: "总成绩",
          //   prop: "allGrade",
          //   labelWidth: 110,
          //   disabled: true,
          //   rules: [
          //     {
          //       required: false,
          //       message: "请输入总成绩",
          //       trigger: "blur"
          //     }
          //   ]
          // },
          {
            label: "笔试答题图片",
            prop: "url",
@@ -571,7 +498,7 @@
        selection: true,
        reserveSelection: true,
        selectable: row => {
          if (row.qualified != "0" || row.isPaper == 6) {
          if (row.isExam == 3) {
            return false;
          } else {
            return true;
@@ -750,17 +677,10 @@
            editDetail: false
          },
          {
            label: "所属公司",
            prop: "companyName",
            sortable: true,
            label: "从业单位",
            prop: "unitName",
            search: true,
            searchSpan: 4,
            // dicUrl: '/api/blade-system/dept/tree',
            // props: {
            //     label: "title",
            //     value: "id",
            // },
            slot: true,
            // 表单新增时是否禁止
            addDisabled: false,
            // 表单新增时是否可见
@@ -776,7 +696,7 @@
            rules: [
              {
                required: true,
                message: "请输入所属公司",
                message: "请输入从业单位",
                trigger: "blur"
              }
            ],
@@ -895,8 +815,9 @@
          {
            label: "实操成绩",
            prop: "learnGrade",
            slot: true,
            sortable: true,
            type: "select",
            // slot: true,
            // sortable: true,
            // 表单新增时是否禁止
            addDisabled: false,
            // 表单新增时是否可见
@@ -910,29 +831,36 @@
            // 表单编辑时是否为查看模式
            editDetail: false,
            width: 95,
            rules: [
              { validator: validatePass, required: true, trigger: "blur" }
            ]
            dicData: [
              {
                label: "合格",
                value: 0
              },
              {
                label: "不合格",
                value: 1
              }
            ],
          },
          {
            label: "总成绩",
            prop: "allGrade",
            slot: true,
            sortable: true,
            // 表单新增时是否禁止
            addDisabled: false,
            // 表单新增时是否可见
            addDisplay: true,
            // 表单新增时是否为查看模式
            addDetail: false,
            // 表单编辑时是否禁止
            editDisabled: true,
            // 表单编辑时是否可见
            editDisplay: true,
            // 表单编辑时是否为查看模式
            editDetail: false,
            width: 80
          },
          // {
          //   label: "总成绩",
          //   prop: "allGrade",
          //   slot: true,
          //   sortable: true,
          //   // 表单新增时是否禁止
          //   addDisabled: false,
          //   // 表单新增时是否可见
          //   addDisplay: true,
          //   // 表单新增时是否为查看模式
          //   addDetail: false,
          //   // 表单编辑时是否禁止
          //   editDisabled: true,
          //   // 表单编辑时是否可见
          //   editDisplay: true,
          //   // 表单编辑时是否为查看模式
          //   editDetail: false,
          //   width: 80
          // },
          {
            label: "是否合格",
            prop: "qualified",
@@ -1080,6 +1008,7 @@
        ...this.$store.state.control.changePageSize
      },
      questionBankQuery: {},
      selectionList: [],
      questionBankSelectionList: [],
      excelForm: {},
      excelOption: {
@@ -1136,12 +1065,19 @@
      choiceList: []
    };
  },
  created() {},
  created() { },
  mounted() {
    this.$store.commit("setWindowSizeHeightAdd");
  },
  computed: {
    ...mapGetters(["userInfo", "permission"]),
    ids() {
      let ids = [];
      this.questionBankSelectionList.forEach(ele => {
        ids.push(ele.id);
      });
      return ids.join(",");
    },
    permissionList() {
      return {
        addBtn: this.vaildData(null, false),
@@ -1162,6 +1098,29 @@
    }
  },
  methods: {
    // 批量删除
    handleDelete() {
      if (this.questionBankSelectionList.length === 0) {
        this.$message.warning("请选择至少一条数据");
        return;
      }
      this.$confirm("确定将选择考试成绩删除?", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      })
        .then(() => {
          return remove(this.ids);
        })
        .then(() => {
          this.questionBankOnLoad(this.questionBankPage);
          this.$message({
            type: "success",
            message: "操作成功!"
          });
          this.$refs.crud.toggleSelection();
        });
    },
    //提交考试成绩修改申请
    submit(row, done, loading) {
      var that = this;
@@ -1197,9 +1156,9 @@
          name: res.data.data.name,
          url: res.data.data.url
        });
        console.log(that.gradeForm.fileList, 365441);
        // console.log(that.gradeForm.fileList, 365441);
      });
      console.log(that.gradeForm.fileList, 11122222);
      // console.log(that.gradeForm.fileList, 11122222);
    },
    //图片展示
    handlePictureCardPreview(file) {
@@ -1210,7 +1169,7 @@
    handleRemove(file) {
      var index = [];
      //遍历图片集合,获取下标
      this.gradeForm.fileList.forEach(function(img, i) {
      this.gradeForm.fileList.forEach(function (img, i) {
        if (img.name == file.name) {
          index.push(i);
          //存储对象中删除
@@ -1224,7 +1183,7 @@
      }
    },
    selectionChange(list) {
      // this.selectionList = list;
      this.selectionList = list;
      this.choiceList = [];
      for (let k in list) {
        this.choiceList.push({
@@ -1278,8 +1237,8 @@
      }
      this.$confirm(
        "共选择上岗证制证申请人数" +
          this.choiceList.length +
          "人,确定申请制证?",
        this.choiceList.length +
        "人,确定申请制证?",
        {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
@@ -1465,7 +1424,6 @@
        );
      });
    },
    // 修改考试成绩
    modifiedGrades(row) {
      var that = this;
@@ -1480,18 +1438,18 @@
        var num = 24 * 3600 * 1000;
        if (this.userInfo.role_name == "培训公司管理员") {
          // if (res.data.data - longtime <= num) {
            this.form = {
              id: null,
              examScoreId: row.id,
              examName: row.examName,
              candidateNo: row.candidateNo,
              account: row.account,
              securityName: row.securityName,
              theoryGrade: row.theoryGrade,
              learnGrade: row.learnGrade,
              allGrade: row.allGrade
            };
            this.gradeBoxVisible = true;
          this.form = {
            id: null,
            examScoreId: row.id,
            examName: row.examName,
            candidateNo: row.candidateNo,
            account: row.account,
            securityName: row.securityName,
            theoryGrade: row.theoryGrade,
            learnGrade: row.learnGrade,
            allGrade: row.allGrade
          };
          this.gradeBoxVisible = true;
          // } else {
          //   //提示
          //   that.$message({
@@ -1515,7 +1473,6 @@
        }
      });
    },
    uploadGrade(formName) {
      var that = this;
@@ -1545,7 +1502,6 @@
        }
      });
    },
    questionBankSelectionClear() {
      this.questionBankSelectionList = [];
      this.sort = "";
@@ -1553,7 +1509,7 @@
      // this.$refs.questionBankCrud.toggleSelection();
    },
    questionBankSelectionChange(list) {
      // this.questionBankSelectionList = list;
      this.questionBankSelectionList = list;
      this.choiceList = [];
      for (let k in list) {
        this.choiceList.push({
@@ -1577,7 +1533,6 @@
    questionBankSizeChange(pageSize) {
      this.questionBankPage.pageSize = pageSize;
    },
    questionBankRowUpdate(row, index, done, loading) {
      update({
        theoryGrade: row.theoryGrade,
@@ -1601,8 +1556,7 @@
    },
    handleTemplate() {
      window.open(
        `/api/examScore/export-template?${
          this.website.tokenHeader
        `/api/examScore/export-template?${this.website.tokenHeader
        }=${getToken()}&`
      );
    },
@@ -1659,8 +1613,7 @@
        //序列号url形式,用&拼接
        data = Qs.stringify(data);
        window.open(
          `/api/examScore/export-examScore?${
            this.website.tokenHeader
          `/api/examScore/export-examScore?${this.website.tokenHeader
          }=${getToken()}&` + data
        );
      });
@@ -1673,6 +1626,7 @@
.morpheus-box {
  position: relative;
}
.dialogVisiblezhengjian {
  position: absolute;
  background-color: #fff;