Administrator
2021-08-07 bc3f630d4cdbaad3cd4620cc01fd6f693f07dfcd
培训报名修改
5 files modified
1 files added
790 ■■■■ changed files
src/api/trainExam/trainExam.js 11 ●●●●● patch | view | raw | blame | history
src/router/views/index.js 4 ●●●● patch | view | raw | blame | history
src/views/trainExamApply/index.vue 486 ●●●●● patch | view | raw | blame | history
src/views/traincompany/index.vue 181 ●●●● patch | view | raw | blame | history
src/views/trainingRegistration/data.js 101 ●●●●● patch | view | raw | blame | history
src/views/trainingRegistration/index.vue 7 ●●●●● patch | view | raw | blame | history
src/api/trainExam/trainExam.js
@@ -12,6 +12,17 @@
    })
}
export const getTree = (params) => {
    return request({
        url: '/api/trainExam/page-tree',
        method: 'get',
        params: {
            ...params
        }
    })
}
export const remove = (ids) => {
    return request({
        url: '/api/trainExam/remove',
src/router/views/index.js
@@ -389,7 +389,7 @@
        redirect: '/trainingRegistration/index',
        children: [{
            path: 'index',
            name: '保安培训报名管理',
            name: '培训人员列表',
            meta: {
                i18n: 'dict'
            },
@@ -765,7 +765,7 @@
        redirect: '/traincompany/index',
        children: [{
            path: 'index',
            name: '培训公司查询',
            name: '保安培训报名',
            meta: {
                i18n: 'dict'
            },
src/views/trainExamApply/index.vue
New file
@@ -0,0 +1,486 @@
/*
 * @Author: zhongrj
 * @Date: 2021-08-07
 * menu-name 培训考试报名
 */
<template>
    <el-row class="morpheus-box-paper">
        <el-col :span="24">
            <el-card>
                <div class="exam-card-body">
                    <avue-crud v-model="form"
                               class="company-box"
                               :option="questionBankOption"
                               :search.sync="questionBankSearch"
                               :table-loading="questionBankLoading"
                               :data="questionBankData"
                               ref="questionBankCrud"
                               :page.sync="questionBankPage"
                               @on-load="questionBankOnLoad"
                               @selection-change="questionBankSelectionChange"
                               @search-change="questionBankSearchChange"
                               @search-reset="questionBankSearchReset"
                               @current-change="questionBankCurrentChange"
                               @size-change="questionBankSizeChange"
                               @row-save="questionBankRowSave"
                               @row-update="questionBankRowUpdate"
                               @row-del="questionBankRowDel">
                        <!-- 自定义按钮 -->
                        <!-- <template slot="menuLeft">
                            <el-button type="danger"
                                       size="mini"
                                       icon="el-icon-delete"
                                       plain
                                       @click="handleDelete">新增
                            </el-button>
                            <el-button type="danger"
                                       size="mini"
                                       icon="el-icon-delete"
                                       plain
                                       @click="handleDelete">删除
                            </el-button>
                            <el-button type="danger"
                                       size="mini"
                                       icon="el-icon-delete"
                                       plain
                                       @click="handleDelete">导出
                            </el-button>
                        </template> -->
                        <template slot="menuLeft">
                            <el-button type="danger"
                                       size="small"
                                       icon="el-icon-delete"
                                       @click="questionBankHandleDelete">删 除
                            </el-button>
                        </template>
                        <template slot-scope="{row}"
                                  slot="examStatus">
                            <el-tag>{{row.examStatus == 0 ? '已发布' : '草稿'}}</el-tag>
                        </template>
                        <template slot-scope="{row}"
                                  slot="menu">
                            <el-button type="text"
                                       size="mini"
                                       icon="el-icon-collection"
                                       class="start-kaoshi"
                                       @click="startExam(row)">报名清册
                            </el-button>
                        </template>
                    </avue-crud>
                </div>
            </el-card>
        </el-col>
    </el-row>
</template>
<script>
import {
    getList,
    add,
    remove,
    update
} from "@/api/examapi/examination";
export default {
    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 {
                callback();
            }
        };
        return {
            form: {},
            questionBankOption: {
                // 操作栏多余按钮去除
                delBtn: true,
                editBtn: true,
                addBtn: true,
                selection: true,
                menu: true,
                // 导出按钮
                excelBtn: false,
                viewBtn: true,
                // title: '题库',
                align: 'center',
                height: 'auto',
                calcHeight: 80,
                tip: false,
                searchShow: true,
                searchMenuSpan: 4,
                index: true,
                indexLabel: '序号',
                //dialogType: 'drawer',
                dialogClickModal: false,
                // 操作栏宽度
                menuWidth: 280,
                labelWidth: 140,
                column: [
                    {
                        label: "考试名称",
                        prop: "examName",
                        search: true,
                        searchSpan: 5,
                        slot: true,
                        // 表单新增时是否禁止
                        addDisabled: false,
                        // 表单新增时是否可见
                        addDisplay: true,
                        // 表单新增时是否为查看模式
                        addDetail: false,
                        // 表单编辑时是否禁止
                        editDisabled: true,
                        // 表单编辑时是否可见
                        editDisplay: true,
                        // 表单编辑时是否为查看模式
                        editDetail: false,
                        rules: [{
                            required: true,
                            message: "请输入试卷名称",
                            trigger: "blur"
                        }]
                    },
                    // {
                    //     label: "试卷分数",
                    //     prop: "totalScore",
                    //     slot: true,
                    //     // 表单新增时是否禁止
                    //     addDisabled: false,
                    //     // 表单新增时是否可见
                    //     addDisplay: true,
                    //     // 表单新增时是否为查看模式
                    //     addDetail: false,
                    //     // 表单编辑时是否禁止
                    //     editDisabled: false,
                    //     // 表单编辑时是否可见
                    //     editDisplay: true,
                    //     // 表单编辑时是否为查看模式
                    //     editDetail: false,
                    //     rules: [{ validator: validatePass, required: true, trigger: 'blur' }],
                    //     width: 100
                    // },
                    {
                        label: "考试时间",
                        prop: "examTime",
                        type: "daterange",
                        // span: 24,
                        format: 'yyyy-MM-dd HH:mm:ss',
                        valueFormat: 'yyyy-MM-dd HH:mm:ss',
                        startPlaceholder: '考试开始时间',
                        endPlaceholder: '考试结束时间',
                        // 表单新增时是否禁止
                        addDisabled: false,
                        // 表单新增时是否可见
                        addDisplay: true,
                        // 表单新增时是否为查看模式
                        addDetail: false,
                        // 表单编辑时是否禁止
                        editDisabled: false,
                        // 表单编辑时是否可见
                        editDisplay: true,
                        // 表单编辑时是否为查看模式
                        editDetail: false,
                        // display: false,
                        hide: true,
                        rules: [{
                            required: true,
                            message: "请选择考试时间",
                            trigger: "blur"
                        }],
                        width: 250
                    },
                    {
                        label: "考试开始时间",
                        prop: "startTime",
                        type: "datetime",
                        // span: 24,
                        format: 'yyyy-MM-dd HH:mm:ss',
                        valueFormat: 'yyyy-MM-dd HH:mm:ss',
                        // 表单新增时是否禁止
                        addDisabled: false,
                        // 表单新增时是否可见
                        addDisplay: false,
                        // 表单新增时是否为查看模式
                        addDetail: false,
                        // 表单编辑时是否禁止
                        editDisabled: false,
                        // 表单编辑时是否可见
                        editDisplay: false,
                        // 表单编辑时是否为查看模式
                        editDetail: false,
                        width: 180
                    },
                    {
                        label: "考试结束时间",
                        prop: "endTime",
                        type: "datetime",
                        // span: 24,
                        format: 'yyyy-MM-dd HH:mm:ss',
                        valueFormat: 'yyyy-MM-dd HH:mm:ss',
                        // 表单新增时是否禁止
                        addDisabled: false,
                        // 表单新增时是否可见
                        addDisplay: false,
                        // 表单新增时是否为查看模式
                        addDetail: false,
                        // 表单编辑时是否禁止
                        editDisabled: false,
                        // 表单编辑时是否可见
                        editDisplay: false,
                        // 表单编辑时是否为查看模式
                        editDetail: false,
                        width: 180
                    },
                    {
                        label: "创建人",
                        prop: "creator",
                        slot: true,
                        // 表单新增时是否禁止
                        addDisabled: true,
                        // 表单新增时是否可见
                        addDisplay: false,
                        // 表单新增时是否为查看模式
                        addDetail: false,
                        // 表单编辑时是否禁止
                        editDisabled: true,
                        // 表单编辑时是否可见
                        editDisplay: false,
                        // 表单编辑时是否为查看模式
                        editDetail: false,
                        hide: true,
                        display: false,
                    },
                    {
                        label: "备注",
                        prop: "remark",
                        span: 24,
                        slot: true,
                        // 表单新增时是否禁止
                        addDisabled: false,
                        // 表单新增时是否可见
                        addDisplay: true,
                        // 表单新增时是否为查看模式
                        addDetail: false,
                        // 表单编辑时是否禁止
                        editDisabled: false,
                        // 表单编辑时是否可见
                        editDisplay: true,
                        // 表单编辑时是否为查看模式
                        editDetail: false
                    },
                    {
                        label: "注意事项",
                        prop: "examAttention",
                        type: "textarea",
                        span: 24,
                        slot: true,
                        // 表单新增时是否禁止
                        addDisabled: false,
                        // 表单新增时是否可见
                        addDisplay: true,
                        // 表单新增时是否为查看模式
                        addDetail: false,
                        // 表单编辑时是否禁止
                        editDisabled: false,
                        // 表单编辑时是否可见
                        editDisplay: true,
                        // 表单编辑时是否为查看模式
                        editDetail: false,
                        width: 240
                    },
                ]
            },
            questionBankSearch: {},
            questionBankLoading: true,
            questionBankData: [
            ],
            questionBankPage: {
                pageSize: 10,
                currentPage: 1,
                total: 16
            },
            questionBankQuery: {},
            questionBankSelectionList: [],
        }
    },
    created () {
    },
    mounted () {
    },
    computed: {
        ids () {
            let ids = [];
            this.questionBankSelectionList.forEach(ele => {
                ids.push(ele.id);
            });
            return ids.join(",");
        },
    },
    watch: {
    },
    methods: {
        questionBankOnLoad (page, params = {}) {
            this.questionBankLoading = false;
            getList(page.currentPage, page.pageSize, Object.assign(params, this.questionBankQuery)).then(res => {
                const data = res.data.data;
                this.questionBankPage.total = data.total;
                this.questionBankData = data.records;
                this.questionBankLoading = false;
                this.questionBankSelectionClear();
            });
        },
        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;
        },
        startExam (row) {
            //正式考试
            if(row.examType==1){
                this.$router.push({
                    path: `/applydetailed`,
                    query: row
                })
            }
            //模拟考试
            if(row.examType==2){
                this.$router.push({
                    path: `/trainApply`,
                    query: row
                })
            }
        },
        // 新增
        questionBankRowSave (row, done, loading) {
            row.startTime = row.examTime[0]
            row.endTime = row.examTime[1]
            row.examTime = JSON.stringify(row.examTime)
            add(row).then(() => {
                this.questionBankOnLoad(this.questionBankPage);
                this.$message({
                    type: "success",
                    message: "操作成功!"
                });
                done();
            }, error => {
                window.console.log(error);
                loading();
            });
        },
        questionBankRowUpdate (row, index, done, loading) {
            if (Array.isArray(row.examTime) != true) {
                row.examTime = row.examTime.split(",")
            }
            row.startTime = row.examTime[0]
            row.endTime = row.examTime[1]
            row.examTime = JSON.stringify(row.examTime)
            update(row).then(() => {
                this.questionBankOnLoad(this.questionBankPage);
                this.$message({
                    type: "success",
                    message: "操作成功!"
                });
                done();
            }, error => {
                window.console.log(error);
                loading();
            });
        },
        questionBankRowDel (row) {
            this.$confirm("确定将选择数据删除?", {
                confirmButtonText: "确定",
                cancelButtonText: "取消",
                type: "warning"
            })
                .then(() => {
                    return remove(row.id);
                })
                .then(() => {
                    this.questionBankOnLoad(this.questionBankPage);
                    this.$message({
                        type: "success",
                        message: "操作成功!"
                    });
                });
        },
        questionBankHandleDelete () {
            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.questionBankCrud.toggleSelection();
                });
        },
    }
}
</script>
<style lang="scss" scoped>
</style>
src/views/traincompany/index.vue
@@ -3,7 +3,7 @@
 * @Date: 2021-07-07 17:30:05
 * @Last Modified by: Morpheus
 * @Last Modified time: 2021-07-10 16:06:14
 * menu-name 保安培训单位查询
 * menu-name 保安培训单位
 */
<template>
  <basic-container>
@@ -28,7 +28,26 @@
      @row-click="handleRowClick"
      @on-load="onLoad"
    >
      <template slot-scope="{ type,row }" slot="menu">
                            <el-button
                            :type="type"
                            size="small"
                            icon="el-icon-edit"
                            @click="handleTrainApply(row)"
                            >报名
                            </el-button>
                        </template>
    </avue-crud>
    <el-dialog
        title="报名"
        append-to-body
        :visible.sync="dialogDisable"
        width="1000px"
        >
      <avue-form ref="formTrainApply" :option="optionTrainApply" v-model="formTrainApply" @submit="submit"></avue-form>
    </el-dialog>
  </basic-container>
</template>
@@ -40,14 +59,19 @@
  update,
  remove,
} from "@/api/securityCompany/train";
import {adddata} from "@/api/trainingRegistration/trainingRegistration";
import { mapGetters } from "vuex";
import { mapState } from 'vuex';
export default {
  data() {
    return {
      form: {},
      formTrainApply: {},
      query: {},
      loading: true,
      dialogDisable:false,
      page: {
        pageSize: 10,
        currentPage: 1,
@@ -60,8 +84,7 @@
        editBtn: false,
        addBtn: false,
        selection: true,
        menu: false,
        menu: true,
        align: "center",
        height: "auto",
        calcHeight: 30,
@@ -70,9 +93,10 @@
        searchShow: true,
        searchMenuSpan: 6,
        index: true,
        viewBtn: true,
        viewBtn: false,
        editBtnText:'报名',
        editTitle: '报名',
        dialogClickModal: false,
        column: [
          {
            label: "公司名称",
@@ -124,33 +148,98 @@
            prop: "address",
            display: false,
            width: 280,
          },
          }
        ],
        group: [
          {
            label: "详细信息",
            prop: "baseInfo",
            icon: "el-icon-user-solid",
      },
      optionTrainApply: {
        align: "center",
        height: "auto",
        calcHeight: 30,
        searchShowBtn: false,
        tip: false,
        searchShow: true,
        searchMenuSpan: 6,
        index: true,
        dialogClickModal: false,
        labelWidth:110,
            column: [
              {
                label: "公司名称",
                prop: "enterprisename",
                display: false,
              label: "培训公司名称",
              prop: "trainingUnitId",
              dicUrl: "/api/blade-system/dept/lazy-tree-type?parentId=1418458374477549569",
              cascaderItem: ["trainExamId"],
              props: {
                  label: "title",
                  value: "id"
              },
            ],
              type: "select",
              disabled:true,
              rules: [{
                  required: true,
                  message: "请输入培训公司名称",
                  trigger: "blur"
              }],
              hide:true,
              searchSpan: 6,
              searchLabelWidth: 110,
              search: true,
              span:24
          },
          // {
          //     label: "考试名称",
          //     prop: "trainExamId",
          //     dicUrl: "/api/trainExam/page-tree?deptId={{key}}",
          //     props: {
          //         label: "trainExamName",
          //         value: "id"
          //     },
          //     type: "select",
          //     rules: [{
          //         required: true,
          //         message: "请输入考试名称",
          //         trigger: "blur"
          //     }],
          //     hide: true,
          // },
          {
            label: "详细信息",
            prop: "detailInfo",
            icon: "el-icon-s-order",
            column: [],
              label: "单位名称",
              prop: "deptId",
              // width: 70,
              // search: true,
              // searchSpan: 4,
              dicUrl: "/api/blade-system/dept/security_lazy-tree?parentId=1413470343230877697",
              cascaderItem: ["userId"],
              props: {
                  label: "title",
                  value: "id"
          },
          {
            label: "职责信息",
            prop: "dutyInfo",
            icon: "el-icon-s-custom",
            column: [],
              // search: true,
              type: "select",
              hide: true,
              rules: [{
                  required: true,
                  message: "请输入单位名称",
                  trigger: "blur"
              }],
              overHidden: true
          }, {
              label: "姓名",
              prop: "userId",
              type: "select",
              hide: true,
              dicUrl: "/api/blade-user/page-security-unit?deptId={{key}}",
              props: {
                  label: "realName",
                  value: "id"
          },
              searchSpan: 5,
              rules: [{
                  required: true,
                  message: "请输入姓名",
                  trigger: "blur"
              }],
          },
        ],
      },
      data: [],
@@ -173,8 +262,52 @@
      });
      return ids.join(",");
    },
    ...mapState({
        userInfo: state => state.user.userInfo
    })
  },
  methods: {
    handleTrainApply(row){
      this.dialogDisable = true;
      this.optionTrainApply.column.trainingUnitId = row.departmentid;
      this.formTrainApply = {
        trainingUnitId: row.departmentid
      }
    },
    //关闭窗口清除数据
    closeDialog(){
      this.$refs.formTrainApply.resetFields();
    },
    submit(row, done, loading) {
      adddata(row).then(
        (res) => {
          // this.onLoad(this.page);
          if(res.data.data==201){
              this.$message({
                type: "warning",
                message:"已报名,不能重复报名",
              });
          }else if(res.data.data==201){
              this.$message({
                type: "warning",
                message:"报名失败",
              });
          }else{
              this.$message({
                type: "success",
                message:"报名成功",
              });
              this.dialogDisable = false;
              this.$refs.formTrainApply.resetFields();
          }
          done();
        },
        (error) => {
          window.console.log(error);
          loading();
        }
      );
    },
    rowSave(row, done, loading) {
      add(row).then(
        () => {
src/views/trainingRegistration/data.js
@@ -19,26 +19,23 @@
var w = 160,
    s = 12;
export var column = [{
        label: "单位名称",
        prop: "deptId",
        // width: 70,
        // search: true,
        // searchSpan: 4,
        dicUrl: "/api/blade-system/dept/security_lazy-tree?parentId=1413470343230877697",
        cascaderItem: ["userId"],
        label: "培训公司名称",
        prop: "trainingUnitId",
        dicUrl: "/api/blade-system/dept/lazy-tree-type?parentId=1418458374477549569",
        cascaderItem: ["trainExamId"],
        props: {
            label: "title",
            value: "id"
        },
        // search: true,
        type: "select",
        // hide: true,
        rules: [{
            required: true,
            message: "请输入单位名称",
            message: "请输入培训公司名称",
            trigger: "blur"
        }],
        overHidden: true
        searchSpan: 6,
        searchLabelWidth: 110,
        search: true,
    }, {
        label: "姓名",
        prop: "userId",
@@ -62,8 +59,7 @@
        editDisplay: false,
        addDisplay: false,
        searchSpan: 5,
    },
    {
    }, {
        label: "身份证号",
        prop: "idCardNo",
        rules: [{
@@ -78,7 +74,7 @@
    {
        label: "电话",
        prop: "phone",
        hide: true,
        // hide: true,
        rules: [{
            required: true,
            message: "请输入电话",
@@ -87,48 +83,27 @@
        editDisplay: false,
        addDisplay: false,
        width: 110,
    },
    {
        label: "培训公司名称",
        prop: "trainingUnitId",
        dicUrl: "/api/blade-system/dept/lazy-tree-type?parentId=1418458374477549569",
        cascaderItem: ["trainExamId"],
    }, {
        label: "单位名称",
        prop: "deptId",
        // width: 70,
        // search: true,
        // searchSpan: 4,
        dicUrl: "/api/blade-system/dept/security_lazy-tree?parentId=1413470343230877697",
        cascaderItem: ["userId"],
        props: {
            label: "title",
            value: "id"
        },
        // search: true,
        type: "select",
        // hide: true,
        rules: [{
            required: true,
            message: "请输入培训公司名称",
            message: "请输入单位名称",
            trigger: "blur"
        }],
        searchSpan: 6,
        searchLabelWidth: 110,
        search: true,
    },
    {
        label: "考试名称",
        prop: "trainExamId",
        dicUrl: "/api/trainExam/page-tree?deptId={{key}}",
        props: {
            label: "trainExamName",
            value: "id"
        },
        type: "select",
        rules: [{
            required: true,
            message: "请输入考试名称",
            trigger: "blur"
        }],
        hide: true,
    },
    {
        label: "考试名称",
        prop: "trainExamName",
        editDisplay: false,
        addDisplay: false,
        searchLabelWidth: 110,
        overHidden: true
    },
    {
        label: "报名时间",
@@ -139,21 +114,6 @@
        rules: [{
            required: true,
            message: "请输入报名时间",
            trigger: "blur"
        }],
        editDisplay: false,
        addDisplay: false,
        width: 160
    },
    {
        label: "培训考试时间",
        prop: "trainExamTime",
        type: "date",
        format: "yyyy-MM-dd HH:mm:ss",
        valueFormat: "yyyy-MM-dd HH:mm:ss",
        rules: [{
            required: true,
            message: "请输入培训考试时间",
            trigger: "blur"
        }],
        editDisplay: false,
@@ -172,12 +132,13 @@
        editDisplay: false,
        addDisplay: false,
        searchSpan: 5,
        width: 70,
    }, {
        label: "确认截止时间",
        prop: "remainingTime",
        editDisplay: false,
        addDisplay: false,
        width: 160
    }
        width: 100,
    },
    //  {
    //     label: "确认截止时间",
    //     prop: "remainingTime",
    //     editDisplay: false,
    //     addDisplay: false,
    //     width: 160
    // }
]
src/views/trainingRegistration/index.vue
@@ -1,5 +1,5 @@
<template>
  <basic-container class="recruitmentManagement">
  <basic-container>
    <avue-crud
      :option="option"
      :table-loading="loading"
@@ -43,10 +43,10 @@
        >
        <el-button
          icon="el-icon-folder-checked"
          style="display:none"
          @click="affirmApply(row)"
          :size="size"
          :type="type"
          :disabled="row.cancel==2"
          >确认报名</el-button>
      </template>
    </avue-crud>
@@ -83,12 +83,13 @@
        height: 693,
        index: true,
        labelWidth: "120",
        menuWidth: 230,
        menuWidth: 100,
        align: "center",
        selection: true,
        column: column,
        delBtn: false,
        editBtn: false,
        addBtn:false
      },
    };
  },