liuyg
2021-09-03 e5c313534d5ad4bfd97cb7930c7e54f0826a7e97
Merge branch 'master' of http://192.168.0.105:10010/r/zhba_enterprises
13 files modified
3 files added
1398 ■■■■ changed files
public/papersTrain.html 222 ●●●●● patch | view | raw | blame | history
src/api/examapi/applyexam.js 3 ●●●● patch | view | raw | blame | history
src/api/system/dept.js 16 ●●●●● patch | view | raw | blame | history
src/api/trainingRegistration/trainingRegistration.js 3 ●●●● patch | view | raw | blame | history
src/api/zc/zc.js 57 ●●●●● patch | view | raw | blame | history
src/lang/zh.js 209 ●●●● patch | view | raw | blame | history
src/page/login/codelogin.vue 280 ●●●● patch | view | raw | blame | history
src/page/login/index.vue 47 ●●●● patch | view | raw | blame | history
src/views/applyexam/index.vue 29 ●●●●● patch | view | raw | blame | history
src/views/applyexam/papers.vue 13 ●●●●● patch | view | raw | blame | history
src/views/securityGuard/securityGuard.vue 52 ●●●●● patch | view | raw | blame | history
src/views/trainApply/index.vue 5 ●●●●● patch | view | raw | blame | history
src/views/traincompany/index.vue 95 ●●●●● patch | view | raw | blame | history
src/views/trainingRegistration/data.js 44 ●●●●● patch | view | raw | blame | history
src/views/trainingRegistration/index.vue 48 ●●●●● patch | view | raw | blame | history
src/views/zc/zc.vue 275 ●●●●● patch | view | raw | blame | history
public/papersTrain.html
New file
@@ -0,0 +1,222 @@
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
        #table {
            color: #000;
            display: flex;
            align-items: center;
            justify-content: center;
            flex-direction: column;
        }
        /* .print-header {
            width: 100%;
            text-align: center;
        } */
        .print {
            position: relative;
            left: 47%;
            margin-top: 30px;
            width: 7%;
            height: 30px;
            border: 0px;
            border-radius: 6px;
            color: #fff;
            background-color: #1D5CE4;
            letter-spacing: 4px;
        }
        .user-info-table {
            margin-top: 30px;
            width: 90%;
            height: 60%;
            border: 1px solid #000;
            background-color: #fff;
        }
        .user-info-tr {
            height: 50px;
        }
        .avatar {
            width: 140px;
            height: 190px;
        }
        .title {
            margin-top: 20px;
        }
        .avatar {
            width: 140px;
            height: 190px;
        }
        .my-picture {
            width: 150px;
            /* height: 200px; */
        }
    </style>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
</head>
<body>
    <div>
        <!--startprint-->
        <div id="table">
            <!-- <span class="title">准考证信息</span>
            <table class="user-info-table" border="1px" align="center" cellspacing="0" cellpadding="10">
                <tr class="user-info-tr">
                    <td width="150px">姓名</td>
                    <td width="150px"></td>
                    <td width="150px">身份证号</td>
                    <td width="150px"></td>
                    <td rowspan="4" align="center" width="150px" v-if="data.avatar == ''">
                        照片
                    </td>
                </tr>
                <tr class="user-info-tr">
                    <td>准考证号</td>
                    <td></td>
                    <td width="150px">性别</td>
                    <td width="150px" v-if="data.sex == 1">男</td>
                </tr>
                <tr class="user-info-tr">
                    <td>考点名称</td>
                    <td colspan="3"></td>
                </tr>
                <tr class="user-info-tr">
                    <td>考点地址</td>
                    <td colspan="3"></td>
                </tr>
                <tr class="user-info-tr" style="height:5px">
                    <td colspan="5"></td>
                </tr>
                <tr class="user-info-tr">
                    <td>考试名称</td>
                    <td>考试类型</td>
                    <td>考试时间</td>
                    <td>考场号</td>
                    <td>座位号</td>
                </tr>
                <tr class="user-info-tr">
                    <td>{{data.examName}}</td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                </tr>
            </table>-->
        </div>
        <!--endprint-->
        <div class="print-header">
            <button onclick="preview(1)" class="print">打印</button>
        </div>
    </div>
    <script>
        var getData = function(name) {
            var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
            var r = window.location.search.substr(1).match(reg);
            if (r != null) return unescape(r[2]);
            return null;
        };
        var id = JSON.parse(getData("data")).id;
        var examType = JSON.parse(getData("data")).examType;
        // console.log(JSON.parse(getData("data")), 111);
        axios.get('http://223.82.109.183:2080/api/apply/getApplyInfo?id=' + id + "&applyExamType=" + examType).then(function(res) {
            // axios.get('http://localhost:81/apply/getApplyInfo?id=' + id + "&applyExamType=" + examType).then(function(res) {
            var data = res.data.data;
            var str = `<span class="title">${data.examName}</span>
                    <span class="title">准考证信息</span>
                    <table class="user-info-table" border="1px" align="center" cellspacing="0" cellpadding="10">
                        <tr class="user-info-tr">
                            <td width="150px">姓名</td>
                            <td width="150px">${data.realName}</td>
                            <td width="150px">身份证号</td>
                            <td width="150px">${data.idCardNo}</td>
                            <td rowspan="4" align="center" width="150px"">
                                <img class="my-picture" src="${data.myPicture}" />
                            </td>
                        </tr>
                        <tr class="user-info-tr">
                            <td>准考证号</td>
                            <td>${data.candidateNo}</td>
                            <td width="150px">性别</td>
                            <td width="150px">${data.sex==1?"男":(data.sex==2?"女":"")}</td>
                        </tr>
                        <tr class="user-info-tr">
                            <td>考点名称</td>
                            <td colspan="3">${data.company}</td>
                        </tr>
                        <tr class="user-info-tr">
                            <td>考点地址</td>
                            <td colspan="3">${data.address}</td>
                        </tr>
                        <tr class="user-info-tr" style="height:5px">
                            <td colspan="5"></td>
                        </tr>
                        <tr class="user-info-tr">
                            <td colspan="2">考试名称</td>
                            <td width="120px">考试类型</td>
                            <td width="180px" colspan="2">考试时间</td>
                        </tr>
                        <tr class="user-info-tr">
                            <td colspan="2">${data.examName}</td>
                            <td width="120px">培训考试</td>
                            <td width="180px" colspan="2">${data.stringTime}</td>
                        </tr>
                    </table>`
            var dom = $('#table');
            dom.empty();
            dom.append(str);
        })
        function preview(oper) {
            if (oper < 10) {
                bdhtml = window.document.body.innerHTML;
                // 打印开始的标志
                sprnstr = "<!--startprint-->";
                // 打印结束的标志
                eprnstr = "<!--endprint-->";
                // 从打印开始的位置截取到末尾
                prnhtml = bdhtml.substr(bdhtml.indexOf(sprnstr));
                // 从开始截取到打印结束的位置
                prnhtml = prnhtml.substring(0, prnhtml.indexOf(eprnstr));
                // 替换html
                window.document.body.innerHTML = prnhtml;
                // 打印
                window.print();
                window.document.body.innerHTML = bdhtml;
            } else {
                window.print();
            }
        }
    </script>
</body>
</html>
src/api/examapi/applyexam.js
@@ -60,7 +60,7 @@
    })
}
export const addExam = (ids, examTime, startTime, endTime) => {
export const addExam = (ids, examTime, startTime, number, endTime) => {
    return request({
        url: '/api/apply/batchExam',
        method: 'post',
@@ -68,6 +68,7 @@
            ids,
            examTime,
            startTime,
            number,
            endTime
        }
    })
src/api/system/dept.js
@@ -88,4 +88,18 @@
            parentId
        }
    })
}
}
export const ss = () => {
  return request({
    url: '/api/blade-system/dept/selectInfo',
    method: 'get',
  })
}
export const rs = () => {
  return request({
    url: '/api/blade-system/role/selectRole',
    method: 'get',
  })
}
src/api/trainingRegistration/trainingRegistration.js
@@ -57,7 +57,7 @@
}
export const addExam = (ids, examTime, startTime, endTime) => {
export const addExam = (ids, examTime, startTime, number, endTime) => {
    return request({
        url: '/api/trainingRegistration/batchExam',
        method: 'post',
@@ -65,6 +65,7 @@
            ids,
            examTime,
            startTime,
            number,
            endTime
        }
    })
src/api/zc/zc.js
New file
@@ -0,0 +1,57 @@
import request from '@/router/axios';
export const getList = (current, size, params) => {
  return request({
    url: '/api/zc/page',
    method: 'get',
    params: {
      ...params,
      current,
      size,
    }
  })
}
export const getDetail = (id) => {
  return request({
    url: '/api/zc/detail',
    method: 'get',
    params: {
      id
    }
  })
}
export const remove = (ids) => {
  return request({
    url: '/api/zc/remove',
    method: 'post',
    params: {
      ids,
    }
  })
}
export const add = (row) => {
  return request({
    url: '/api/zc/submit',
    method: 'post',
    data: row
  })
}
export const update = (row) => {
  return request({
    url: '/api/zc/update',
    method: 'post',
    data: row
  })
}
export const inster = (row) => {
  return request({
    url: '/api/zc/inster',
    method: 'post',
    data: row
  })
}
src/lang/zh.js
@@ -1,108 +1,113 @@
export default {
    tip: '提示',
    title: '保安服务企业管理',
    logoutTip: '退出系统, 是否继续?',
    submitText: '确定',
    cancelText: '取消',
    search: '请输入搜索内容',
    menuTip: '没有发现菜单',
    wel: {
        info: '早安,Smallwei,Avuex一款超乎你想象的框架!',
        dept: '我是avue团队下的一个部门-哈皮部门-哈皮职位',
        team: '团队内排名',
        project: '项目访问',
        count: '项目数',
        data: {
            subtitle: '实时',
            column1: '分类统计',
            column2: '附件统计',
            column3: '文章统计',
            key1: '分',
            key2: '附',
            key3: '评',
            text1: '当前分类总记录数',
            text2: '当前上传的附件数',
            text3: '评论次数'
        },
        data2: {
            column1: '今日注册',
            column2: '今日登录',
            column3: '今日订阅',
            column4: '今日评论'
        },
        data3: {
            column1: '转化率(日同比 28%)',
            column2: '签到率(日同比 11%)',
            column3: '签到率(日同比 11%)'
        },
        data4: {
            column1: '错误日志',
            column2: '数据展示',
            column3: '权限管理',
            column4: '用户管理'
        },
        table: {
            rw: '工作任务',
            nr: '工作内容',
            sj: '工作时间'
        }
  tip: '提示',
  title: '保安服务企业管理',
  logoutTip: '退出系统, 是否继续?',
  submitText: '确定',
  cancelText: '取消',
  search: '请输入搜索内容',
  menuTip: '没有发现菜单',
  wel: {
    info: '早安,Smallwei,Avuex一款超乎你想象的框架!',
    dept: '我是avue团队下的一个部门-哈皮部门-哈皮职位',
    team: '团队内排名',
    project: '项目访问',
    count: '项目数',
    data: {
      subtitle: '实时',
      column1: '分类统计',
      column2: '附件统计',
      column3: '文章统计',
      key1: '分',
      key2: '附',
      key3: '评',
      text1: '当前分类总记录数',
      text2: '当前上传的附件数',
      text3: '评论次数'
    },
    route: {
        info: '个人信息',
        website: 'bladex官网',
        avuexwebsite: 'avuex官网',
        dashboard: '首页',
        more: '更多',
        tags: '标签',
        store: '本地存储',
        api: '全局函数',
        logs: '日志监控',
        table: '表格',
        form: '表单',
        top: '返回顶部',
        data: '数据展示',
        permission: '权限',
        error: '异常页面',
        test: '测试页面'
    data2: {
      column1: '今日注册',
      column2: '今日登录',
      column3: '今日订阅',
      column4: '今日评论'
    },
    login: {
        title: '登录 ',
        info: '保安服务企业管理',
        tenantId: '请输入保安单位ID',
        username: '请输入账号',
        password: '请输入密码',
        wechat: '微信',
        qq: 'QQ',
        github: 'github',
        gitee: '码云',
        phone: '请输入手机号',
        code: '请输入验证码',
        submit: '登录',
        userLogin: '账号密码登录',
        phoneLogin: '手机号登录',
        thirdLogin: '第三方系统登录',
        msgText: '发送验证码',
        msgSuccess: '秒后重发',
    data3: {
      column1: '转化率(日同比 28%)',
      column2: '签到率(日同比 11%)',
      column3: '签到率(日同比 11%)'
    },
    navbar: {
        logOut: '退出登录',
        userinfo: '个人信息',
        dashboard: '首页',
        lock: '锁屏',
        bug: '没有错误日志',
        bugs: '条错误日志',
        screenfullF: '退出全屏',
        screenfull: '全屏',
        language: '中英文',
        notice: '消息通知',
        theme: '主题',
        color: '换色'
    data4: {
      column1: '错误日志',
      column2: '数据展示',
      column3: '权限管理',
      column4: '用户管理'
    },
    tagsView: {
        search: '搜索',
        menu: '更多',
        clearCache: '清除缓存',
        closeOthers: '关闭其它',
        closeAll: '关闭所有'
    table: {
      rw: '工作任务',
      nr: '工作内容',
      sj: '工作时间'
    }
}
  },
  route: {
    info: '个人信息',
    website: 'bladex官网',
    avuexwebsite: 'avuex官网',
    dashboard: '首页',
    more: '更多',
    tags: '标签',
    store: '本地存储',
    api: '全局函数',
    logs: '日志监控',
    table: '表格',
    form: '表单',
    top: '返回顶部',
    data: '数据展示',
    permission: '权限',
    error: '异常页面',
    test: '测试页面'
  },
  login: {
    title: '登录 ',
    info: '保安服务企业管理',
    tenantId: '请输入保安单位ID',
    username: '请输入账号',
    password: '请输入密码',
    password2: '请再次输入密码',
    name: '请输入姓名',
    wechat: '微信',
    cardid: '请输入身份证号',
    qq: 'QQ',
    zc: '注册',
    gb: '关闭',
    github: 'github',
    gitee: '码云',
    phone: '请输入手机号',
    code: '请输入验证码',
    submit: '登录',
    userLogin: '账号密码登录',
    phoneLogin: '账号注册',
    thirdLogin: '第三方系统登录',
    msgText: '发送验证码',
    msgSuccess: '秒后重发',
  },
  navbar: {
    logOut: '退出登录',
    userinfo: '个人信息',
    dashboard: '首页',
    lock: '锁屏',
    bug: '没有错误日志',
    bugs: '条错误日志',
    screenfullF: '退出全屏',
    screenfull: '全屏',
    language: '中英文',
    notice: '消息通知',
    theme: '主题',
    color: '换色'
  },
  tagsView: {
    search: '搜索',
    menu: '更多',
    clearCache: '清除缓存',
    closeOthers: '关闭其它',
    closeAll: '关闭所有'
  }
}
src/page/login/codelogin.vue
@@ -5,80 +5,146 @@
           ref="loginForm"
           :model="loginForm"
           label-width="0">
    <el-form-item prop="phone">
    <el-form-item prop="username">
      <el-input size="small"
                @keyup.enter.native="handleLogin"
                v-model="loginForm.phone"
                v-model="loginForm.username"
                auto-complete="off"
                :placeholder="$t('login.phone')">
        <i slot="prefix"
           class="icon-shouji"/>
                :placeholder="$t('login.username')">
        <i slot="prefix" class="icon-yonghu"/>
      </el-input>
    </el-form-item>
    <el-form-item prop="code">
    <el-form-item prop="password">
      <el-input size="small"
                @keyup.enter.native="handleLogin"
                v-model="loginForm.code"
                v-model="loginForm.password"
                auto-complete="off"
                :placeholder="$t('login.code')">
        <i slot="prefix"
           class="icon-yanzhengma"
           style="margin-top:6px;"/>
        <template slot="append">
          <span @click="handleSend"
                class="msg-text"
                :class="[{display:msgKey}]">{{msgText}}</span>
        </template>
                show-password
                :placeholder="$t('login.password')">
        <i slot="prefix" class="icon-mima"/>
      </el-input>
    </el-form-item>
    <el-form-item>
    <el-form-item prop="password2">
      <el-input size="small"
                @keyup.enter.native="handleLogin"
                v-model="loginForm.password2"
                auto-complete="off"
                show-password
                :placeholder="$t('login.password2')">
        <i slot="prefix" class="icon-mima"/>
      </el-input>
    </el-form-item>
    <el-form-item prop="sname">
      <el-input size="small"
                @keyup.enter.native="handleLogin"
                v-model="loginForm.sname"
                auto-complete="off"
                :placeholder="$t('login.name')">
        <i slot="prefix" class="icon-yonghu"/>
      </el-input>
    </el-form-item>
    <el-form-item prop="cardid">
      <el-input size="small"
                v-model="loginForm.cardid"
                auto-complete="off"
                :placeholder="$t('login.cardid')">
        <i slot="prefix" class="icon-shouji"/>
      </el-input>
    </el-form-item>
    <avue-input-tree style="width:580px !important" :defaultExpandAll="loginForm.defaultFlag" v-model="loginForm.deptid" placeholder="请选择部门"
                     type="tree"
                     :dic="dic"></avue-input-tree>
    <el-form-item class="z-login-submit-prv">
      <el-button size="small"
                 type="primary"
                 @click.native.prevent="handleLogin"
                 class="login-submit">{{$t('login.submit')}}</el-button>
                 class="z-login-submit">{{ $t('login.zc') }}
      </el-button>
      <el-button size="small"
                 @click.native.prevent="gbs"
                 class="z-login-submit">{{ $t('login.gb') }}
      </el-button>
    </el-form-item>
  </el-form>
</template>
<script>
import { isvalidatemobile } from "@/util/validate";
import { mapGetters } from "vuex";
import {isvalidatemobile} from "@/util/validate";
import {inster} from "@/api/zc/zc";
import {ss, rs} from "@/api/system/dept";
import {mapGetters} from "vuex";
export default {
  name: "codelogin",
  data() {
    const validatePhone = (rule, value, callback) => {
      if (isvalidatemobile(value)[0]) {
        callback(new Error(isvalidatemobile(value)[1]));
    const validatePass = (rule, value, callback) => {
      if (value === '') {
        callback(new Error('请输入密码'));
      } else {
        callback();
      }
    };
    const validateCode = (rule, value, callback) => {
      if (value.length !== 4) {
        callback(new Error("请输入4位数的验证码"));
    const validatePass2 = (rule, value, callback) => {
      if (value === '') {
        callback(new Error('请再次输入密码'));
      } else if (value !== this.loginForm.password) {
        callback(new Error('两次输入密码不一致!'));
      } else {
        callback();
      }
    };
    const validateIdNo = (rule, value, callback) => {
      let id18 = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
      let id15 = /^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}$/;
      if (!id18.test(this.loginForm.cardid) && !id15.test(this.loginForm.cardid)) {
        callback(new Error("请输入正确的身份证号格式"));
      } else {
        callback();
      }
    };
    return {
      msgText: "",
      msgTime: "",
      dic: [],
      dicr: [],
      msgKey: false,
      loginForm: {
        phone: "",
        code: ""
        defaultFlag: false,
        cardid: "",
        username: "",
        sname: "",
        password: "",
        deptid: '',
        roleid: '',
        password2: ""
      },
      value: '',
      options: [],
      loginRules: {
        phone: [{ required: true, trigger: "blur", validator: validatePhone }],
        code: [{ required: true, trigger: "blur", validator: validateCode }]
      }
        cardid: [{required: true, trigger: "blur", validator: validateIdNo}],
        password: [{required: true, validator: validatePass, trigger: 'blur'}],
        password2: [{required: true, validator: validatePass2, trigger: 'blur'}],
        username: [
          {required: true, message: "请输入用户名", trigger: "blur"}
        ],
      },
      passwordType: "password",
      passwordTypes: "password2"
    };
  },
  created() {
    this.msgText = this.config.MSGINIT;
    this.msgTime = this.config.MSGTIME;
    defaultFlag
  },
  mounted() {},
  mounted() {
    var that = this;
    ss().then(res => {
      console.log(that.ergodicData(res.data.data), 898989)
      that.dic = that.ergodicData(res.data.data)
    });
  },
  computed: {
    ...mapGetters(["tagWel"]),
    config() {
@@ -91,6 +157,109 @@
  },
  props: [],
  methods: {
    ergodicData(val) {
      var arr = []
      val.forEach((item, index) => {
        arr.push({label: item.title, value: item.value, id: item.id, parent_id: item.parent_id})
        if (item.hasChildren == true) {
          var arrOne = []
          if (item.children && item.children.length > 0) {
            item.children.forEach((childItem, childIndex) => {
              arrOne.push({
                label: childItem.title,
                value: childItem.value,
                id: childItem.id,
                parent_id: childItem.parent_id
              })
              if (childItem.hasChildren == true) {
                var arrTwo = []
                if (childItem.children && childItem.children.length > 0) {
                  childItem.children.forEach((findItem, findIndex) => {
                    arrTwo.push({
                      label: findItem.title,
                      value: findItem.value,
                      id: findItem.id,
                      parent_id: findItem.parent_id
                    })
                  })
                }
                arrOne[childIndex].children = arrTwo
              }
            })
          }
          arr[index].children = arrOne
        }
      })
      return arr;
    },
    clearValidate(formName) {
      this.$refs[formName].clearValidate();
    },
    async allmedia() {
      ss().then(res => {
        console.log(res, 1323)
        res.data.data.forEach(element => {
          this.options.push({deptname: element.dept_name, deptid: element.deptid});
        })
      });
    },
    refreshCode(row) {
      inster(row).then(res => {
        this.loginForm.cardid = ""
        this.loginForm.username = ""
        this.loginForm.sname = ""
        this.loginForm.password = ""
        this.loginForm.password2 = ""
        this.loginForm.deptid = ""
        this.loginForm.defaultFlag = false
        this.$notify({
          title: '注册成功,待审核',
          type: 'warning'
        });
      })
      var z = document.querySelector('.z');
      z.style.display = 'none';
      this.clearValidate('loginForm')
      this.clearValidate('loginForm')
    },
    gb() {
      this.loginForm.cardid = ""
      this.loginForm.username = ""
      this.loginForm.sname = ""
      this.loginForm.password = ""
      this.loginForm.password2 = ""
      this.loginForm.deptid = ""
      this.loginForm.defaultFlag = false
      var zs = document.querySelector('.z');
      zs.style.display = 'none';
      this.clearValidate('loginForm')
    },
    handleSend() {
      if (this.msgKey) return;
      this.msgText = this.msgTime + this.config.MSGSCUCCESS;
@@ -106,16 +275,30 @@
        }
      }, 1000);
    },
    showPassword() {
      this.passwordType === ""
        ? (this.passwordType = "password")
        : (this.passwordType = "");
    },
    showPasswords() {
      this.passwordType === ""
        ? (this.passwordType = "password2")
        : (this.passwordType = "");
    },
    handleLogin() {
      this.$refs.loginForm.validate(valid => {
        if (valid) {
          this.$store.dispatch("LoginByPhone", this.loginForm).then(() => {
            this.$router.push({ path: this.tagWel.value });
          });
          this.refreshCode(this.loginForm);
          this.message('dahsiofhiusa');
          return Promise.reject(new Error("注册成功,待审核"));
        }
      });
    },
    gbs() {
      this.gb();
    }
  }
};
</script>
@@ -127,7 +310,34 @@
  text-align: center;
  cursor: pointer;
}
.msg-text.display {
  color: #ccc;
}
.z-login-submit-prv {
  margin-top: 25px;
  padding: 0 10%;
  box-sizing: border-box;
}
.z-login-submit-prv > div {
  width: 80%;
  display: flex;
}
.z-login-submit {
  flex: 1;
  height: 45px;
  border: 1px solid #409EFF;
  background: none;
  font-size: 18px;
  letter-spacing: 2px;
  font-weight: 300;
  color: #409EFF;
  cursor: pointer;
  font-family: "neo";
  -webkit-transition: 0.25s;
  transition: 0.25s;
}
</style>
src/page/login/index.vue
@@ -15,19 +15,23 @@
        <div class="login-main">
          <h4 class="login-title">
            {{ $t('login.title') }}
<!--            <top-lang></top-lang>-->
            <!--            <top-lang></top-lang>-->
          </h4>
          <userLogin v-if="activeName==='user'"></userLogin>
          <codeLogin v-else-if="activeName==='code'"></codeLogin>
          <thirdLogin v-else-if="activeName==='third'"></thirdLogin>
          <h4 class="login-title-child">IoT security cloud service platform</h4>
          <userLogin></userLogin>
          <!-- <codeLogin v-else-if="activeName==='code'"></codeLogin>-->
          <!--    <thirdLogin v-else-if="activeName==='third'"></thirdLogin>-->
          <div class="login-menu">
            <a href="#" @click.stop="activeName='user'">{{ $t('login.userLogin') }}</a>
            <!--<a href="#" @click.stop="activeName='code'">{{ $t('login.phoneLogin') }}</a>-->
<!--            <a href="#" @click.stop="activeName='third'">{{ $t('login.thirdLogin') }}</a>-->
            <!--    <a href="#" @click.stop="activeName='user'">{{ $t('login.userLogin') }}</a>-->
            <a href="#" @click.stop="zShow">{{ $t('login.phoneLogin') }}</a>
            <!--   <a href="#" @click.stop="activeName='third'">{{ $t('login.thirdLogin') }}</a>-->
          </div>
        </div>
      </div>
    </div>
    <div class="z" v-show="activeName == 'code'">
      <codeLogin></codeLogin>
    </div>
  </div>
</template>
@@ -109,11 +113,40 @@
            loading.close();
          });
        }
      },
      zShow() {
        document.querySelector('.z').style.display = 'block';
      }
    }
  };
</script>
<style lang="scss">
.z {
  position: fixed;
  margin: auto;
  padding: 10px;
  top: 0;
  left: 0;
  right: 0;
  bottom: 80px;
  width: 600px;
  height: 500px;
  background-color: #fff;
  box-sizing: border-box;
  box-shadow: 6px 6px 5px #909090;
}
.company-jx {
  position: fixed;
  margin: auto;
  top: auto;
  left: 0px;
  right: 0px;
  bottom: 120px;
  text-align: center;
  color: #fff;
  font-size: 15px;
}
  @import "@/styles/login.scss";
</style>
src/views/applyexam/index.vue
@@ -299,6 +299,31 @@
        dialogClickModal: false,
        column: [
          {
            label: "考试人数",
            prop: "number",
            type: 'number',
            span: 6,
            precision:0,
            step:50,
            mock:{
              type:'number',
              max:1000,
              min:0,
              precision:0
            },
            rules: [
              {
                required: true,
                message: "请输入考试人数",
                trigger: "blur",
              },
            ],
            minRows: 0,
            maxRows: 1000,
            value:50,
            row:true,
          },
          {
            label: "考试时间",
            prop: "startTime",
            type: "datetime",
@@ -334,7 +359,7 @@
        delBtn: false,
        editBtn: false,
        addBtn: false,
        selection: true,
        selection: false,
        menu: true,
        // 导出按钮
        // excelBtn: true,
@@ -872,7 +897,7 @@
      // var endTime = row.examTime[1];
      // var examTime = JSON.stringify(row.examTime);
      // console.log(this.ids,111);
      addExam(this.ids, null, startTime, null).then(
      addExam(this.ids, null, startTime,row.number, null).then(
        () => {
          this.questionBankOnLoad(this.questionBankPage);
          this.$message({
src/views/applyexam/papers.vue
@@ -8,13 +8,18 @@
export default {
  data() {
    return {
      url: "/papers.html",
      url: "/papers.html"
    };
  },
  created(){
      var d = this.$route.query;
      this.url += "?data=" + JSON.stringify(d);
    //   console.log(d);
      var data = this.$route.query;
      if(data.examType==1){
          this.url += "?data=" + JSON.stringify(data);
      }
      if(data.examType==2){
          this.url = "/papersTrain.html?data=" + JSON.stringify(data);
      }
  },
  mounted() {
    var flag = false,
src/views/securityGuard/securityGuard.vue
@@ -49,6 +49,15 @@
              >批量导入
            </el-button>
            <el-button
              type="success"
              size="small"
              plain
              icon="el-icon-upload2"
              v-if="permission.securityGuard_import"
              @click="handleImport2"
              >个人照片批量上传
            </el-button>
            <el-button
              type="danger"
              style="display: none"
              size="small"
@@ -250,6 +259,19 @@
            </template>
          </avue-form>
        </el-dialog>
        <el-dialog
          title="个人照片批量上传"
          append-to-body
          :visible.sync="excelBox2"
          width="555px"
        >
          <avue-form
            :option="excelOption2"
            v-model="excelForm2"
            :upload-after="uploadAfter2"
          >
          </avue-form>
        </el-dialog>
      </basic-container>
    </el-col>
  </el-row>
@@ -300,6 +322,7 @@
    return {
      securityid: "",
      excelBox1: false,
      excelBox2: false,
      isSecurity: true,
      excelForm1: {},
      excelOption1: {
@@ -325,6 +348,26 @@
            formslot: true,
            span: 24,
          },
        ],
      },
      excelForm2: {},
      excelOption2: {
        submitBtn: false,
        emptyBtn: false,
        column: [
          {
            label: "文件上传",
            prop: "file",
            type: "upload",
            drag: true,
            loadText: "文件上传中,请稍等",
            span: 24,
            propsHttp: {
              res: "data",
            },
            tip: "请上传 zip 压缩文件",
            action: "/api/blade-resource/oss/endpoint/put-file-zip",
          }
        ],
      },
@@ -867,6 +910,15 @@
    handleTemplate1() {
      window.open(`/api/blade-user/export-template-security`);
    },
    handleImport2() {
      this.excelBox2 = true;
    },
    uploadAfter2(res, done, loading, column) {
      window.console.log(column);
      this.excelBox2 = false;
      // this.refreshChange();
      done();
    },
    //行点击事件
    rowClick(row) {
src/views/trainApply/index.vue
@@ -494,11 +494,6 @@
        this.questionBankOption.column[0].dicUrl = "/api/blade-system/dept/lazy-tree-user?parentId=" + this.userInfo.dept_id
      }
    },
    mounted() {
        var flag = false,
src/views/traincompany/index.vue
@@ -116,7 +116,7 @@
            display: false,
          },
          {
            label: "法定代表人",
            label: "校长",
            prop: "representative",
            display: false,
            search: true,
@@ -125,37 +125,18 @@
            width: 120,
          },
          {
            label: "注册时间",
            prop: "establishtime",
            type: "date",
            format: "yyyy-MM-dd",
            valueFormat: "yyyy-MM-dd",
            mock: {
              type: "datetime",
              format: "yyyy-MM-dd",
            },
            display: false,
            width: 180,
            label: "负责人",
            prop: "contacts",
            display: false
          },
          {
            label: "注册资金",
            prop: "registeredcapital",
            label: "联系方式",
            prop: "contactscell",
            display: false,
            width: 130,
          },
          {
            label: "实缴资金",
            prop: "capital",
            display: false,
            width: 130,
          },
          {
            label: "公司类型",
            prop: "enterprises",
            display: false,
          },
          {
            label: "注册地址",
            label: "联系地址",
            prop: "address",
            display: false,
            width: 280,
@@ -271,7 +252,7 @@
  },
  created() {
      this.optionTrainApply.column[1].dicUrl =
        "/api/blade-user/security-apply-tree?deptId=" +
        "/api/blade-user/security-apply-tree?examType=2&deptId=" +
        this.userInfo.dept_id;
  },
  methods: {
@@ -318,34 +299,40 @@
    },
    //未持证保安人员报名
    handleTrainApply(row,done,loading){
      row['userId'] = this.userInfo.user_id;
      row['trainingUnitId'] = row.departmentid;
      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.$confirm("是否确定报名?", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      }).then(() => {
        row['userId'] = this.userInfo.user_id;
        row['trainingUnitId'] = row.departmentid;
        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:"报名成功",
                });
            }
            done();
          },
          (error) => {
            window.console.log(error);
            loading();
          }
          done();
        },
        (error) => {
          window.console.log(error);
          loading();
        }
      );
        );
      })
    },
    //关闭窗口清除数据
    closeDialog(){
src/views/trainingRegistration/data.js
@@ -135,20 +135,36 @@
        label: "考试证件",
        prop: "applyCard"
    },
    // {
    //     label: "报名状态",
    //     prop: "cancel",
    //     // search: true,
    //     dicData: DIC1,
    //     props: {
    //         label: "label",
    //         value: "value"
    //     },
    //     editDisplay: false,
    //     addDisplay: false,
    //     searchSpan: 4,
    //     width: 100,
    // },
    {
        label: "审核状态",
        prop: "auditStatus",
        // search: true,
        dicData: [{
                label: '审核通过',
                value: 1,
            },
            {
                label: '审核不通过',
                value: 2,
            },
            {
                label: '审核中',
                value: 3,
            },
            {
                label: '待审核',
                value: 4,
            }
        ],
        props: {
            label: "label",
            value: "value"
        },
        editDisplay: false,
        addDisplay: false,
        searchSpan: 4,
        width: 100,
    },
    //  {
    //     label: "确认截止时间",
    //     prop: "remainingTime",
src/views/trainingRegistration/index.vue
@@ -145,27 +145,36 @@
        index: true,
        stripe: true,
        viewBtn: true,
        selection: true,
        selection: false,
        excelBtn: false,
        menuWidth: 380,
        dialogClickModal: false,
        column: [
          // {
          //   label: "考试人数",
          //   prop: "number",
          //   type: 'number',
          //   span: 6,
          //   precision:2,
          //   mock:{
          //     type:'number',
          //     max:500,
          //     min:50,
          //     precision:50
          //   },
          //   minRows: 0,
          //   maxRows: 3,
          //   row:true,
          // },
          {
            label: "考试人数",
            prop: "number",
            type: 'number',
            span: 6,
            precision:0,
            step:50,
            mock:{
              type:'number',
              max:1000,
              min:0,
              precision:0
            },
            rules: [
              {
                required: true,
                message: "请输入考试人数",
                trigger: "blur",
              },
            ],
            minRows: 0,
            maxRows: 1000,
            value:50,
            row:true,
          },
          {
            label: "考试时间",
            prop: "startTime",
@@ -239,7 +248,7 @@
        labelWidth: "120",
        menuWidth: 200,
        align: "center",
        selection: true,
        selection: false,
        column: column,
        delBtn: false,
        editBtn: false,
@@ -436,6 +445,7 @@
      this.onLoad(this.page, this.query);
    },
    onLoad(page, params = {}) {
      // params['cancel'] = 111;
      this.loading = true;
      getdata(
        page.currentPage,
@@ -478,7 +488,7 @@
      // var endTime = row.examTime[1];
      // var examTime = JSON.stringify(row.examTime);
      // console.log(this.ids,111);
      addExam(this.ids, null, startTime, null).then(
      addExam(this.ids, null, startTime,row.number, null).then(
        () => {
          this.onLoad(this.page);
          this.$message({
src/views/zc/zc.vue
New file
@@ -0,0 +1,275 @@
<template>
  <basic-container>
    <avue-crud :option="option"
               :table-loading="loading"
               :data="data"
               :page.sync="page"
               :permission="permissionList"
               :before-open="beforeOpen"
               v-model="form"
               ref="crud"
               @row-update="rowUpdate"
               @row-save="rowSave"
               @row-del="rowDel"
               @search-change="searchChange"
               @search-reset="searchReset"
               @selection-change="selectionChange"
               @current-change="currentChange"
               @size-change="sizeChange"
               @refresh-change="refreshChange"
               @on-load="onLoad">
      <template slot="menuLeft">
        <el-button type="danger"
                   size="small"
                   icon="el-icon-delete"
                   plain
                   v-if="permission.zc_delete"
                   @click="handleDelete">删 除
        </el-button>
      </template>
    <template slot-scope="{row}" slot="type">
        <el-tag>{{row.type==='0'?'未审核':row.type==='1'?'审核通过':'审核未通过'}}</el-tag>
      </template>
      <template slot-scope="{row}"
                slot="roleName">
        <el-tag>{{row.roleName}}</el-tag>
      </template>
      <template slot-scope="scope" slot="menu">
        <el-button icon="el-icon-check" size="small"  @click.stop="handleEdit(scope.row,scope.index)">审核</el-button>
      </template>
    </avue-crud>
  </basic-container>
</template>
<script>
  import {getList, getDetail, add, update, remove} from "@/api/zc/zc";
  import {getRoleTree} from "@/api/system/role";
  import {mapGetters} from "vuex";
  export default {
    data() {
      return {
        form: {},
        query: {},
        loading: true,
        page: {
          pageSize: 10,
          currentPage: 1,
          total: 0
        },
        selectionList: [],
        option: {
          height:'auto',
          calcHeight: 54,
          tip: false,
          searchShow: true,
          searchMenuSpan: 4,
          border: true,
          index: true,
          viewBtn: true,
          selection: true,
          headerAlign: 'center',
          align: 'center',
          dialogClickModal: false,
          column: [
            {
              label: "账号",
              searchSpan:4,
              display: false,
              disabled:true,
              prop: "username",
            },
            {
              label: "密码",
              hide: true,
              editDisplay: false,
              viewDisplay: false,
              prop: "password",
            },
            {
              label: "姓名",
              display: false,
              searchSpan:4,
              disabled:true,
              prop: "sname",
            },
            {
              label: "身份证号",
              disabled:true,
              display: false,
              prop: "cardid",
            },
            {
              label: "部门",
              editDisplay: false,
              prop: "deptid",
            },
            {
              label: "审核状态",
              prop: "type",
              search: true,
              slot: true,
              searchSpan:4,
              type: "select",
              dicData: [
                {
                  label: "未审核",
                  value: "0"
                },
                {
                  label: "审核通过",
                  value: "1"
                },
                {
                  label: "审核不通过",
                  value: "2"
                }
              ],
            }
          ]
        },
        data: []
      };
    },
    computed: {
      ...mapGetters(["permission"]),
      permissionList() {
        return {
         addBtn: this.vaildData(this.permission.zc_add, false),
          viewBtn: this.vaildData(this.permission.zc_view, true),
          delBtn: this.vaildData(this.permission.zc_delete, false),
          editBtn: this.vaildData(this.permission.zc_edit, false)
        };
      },
      ids() {
        let ids = [];
        this.selectionList.forEach(ele => {
          ids.push(ele.id);
        });
        return ids.join(",");
      }
    },
    methods: {
      handleEdit (row, index) {
        this.$refs.crud.rowEdit(row, index);
      },
      rowSave(row, done, loading) {
        add(row).then(() => {
          this.onLoad(this.page);
          this.$message({
            type: "success",
            message: "操作成功!"
          });
          done();
        }, error => {
          loading();
          window.console.log(error);
        });
      },
      rowUpdate(row, index, done, loading) {
        update(row).then(() => {
          this.onLoad(this.page);
          this.$message({
            type: "success",
            message: "操作成功!"
          });
          done();
        }, error => {
          loading();
          console.log(error);
        });
      },
      rowDel(row) {
        this.$confirm("确定将选择数据删除?", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning"
        })
          .then(() => {
            return remove(row.id);
          })
          .then(() => {
            this.onLoad(this.page);
            this.$message({
              type: "success",
              message: "操作成功!"
            });
          });
      },
      handleDelete() {
        if (this.selectionList.length === 0) {
          this.$message.warning("请选择至少一条数据");
          return;
        }
        this.$confirm("确定将选择数据删除?", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning"
        })
          .then(() => {
            return remove(this.ids);
          })
          .then(() => {
            this.onLoad(this.page);
            this.$message({
              type: "success",
              message: "操作成功!"
            });
            this.$refs.crud.toggleSelection();
          });
      },
      beforeOpen(done, type) {
        if (["edit", "view"].includes(type)) {
          getDetail(this.form.id).then(res => {
            this.form = res.data.data;
          });
        }
        done();
      },
      searchReset() {
        this.query = {};
        this.onLoad(this.page);
      },
      searchChange(params, done) {
        this.query = params;
        this.page.currentPage = 1;
        this.onLoad(this.page, params);
        done();
      },
      selectionChange(list) {
        this.selectionList = list;
      },
      selectionClear() {
        this.selectionList = [];
        this.$refs.crud.toggleSelection();
      },
      currentChange(currentPage){
        this.page.currentPage = currentPage;
      },
      sizeChange(pageSize){
        this.page.pageSize = pageSize;
      },
      refreshChange() {
        this.onLoad(this.page, this.query);
      },
      onLoad(page, params = {}) {
        this.loading = true;
        getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
          const data = res.data.data;
          this.page.total = data.total;
          this.data = data.records;
          this.loading = false;
          this.selectionClear();
        });
      }
    }
  };
</script>
<style>
</style>