From 4ef6c36c631c3aa3916e0861fd211dec9b03231b Mon Sep 17 00:00:00 2001 From: 马宇豪 <978517621@qq.com> Date: 星期一, 08 一月 2024 09:54:05 +0800 Subject: [PATCH] 修改跳转 --- src/views/coalMine/cTeacherManage/cReviewer/index.vue | 55 ++- src/layout/components/Navbar.vue | 6 src/views/notCoalMine/nTeacherManage/nReviewer/index.vue | 58 +++- src/views/system/user/profile/index.vue | 8 src/views/notCoalMine/nPeopleManage/components/peopleDialog.vue | 31 +- src/views/notCoalMine/nTeacherManage/nTeacher/index.vue | 78 +++-- src/utils/validate.js | 7 src/views/notCoalMine/nCertificateList/components/certificateDialog.vue | 35 ++ src/views/register.vue | 15 + src/views/system/user/index.vue | 6 src/api/coalMine/teacher.js | 5 src/views/login.vue | 6 src/views/notCoalMine/nPeopleManage/components/certDialog.vue | 281 +++++++++++++++++++++ src/views/system/user/profile/resetPwd.vue | 15 + src/views/notCoalMine/nPeopleManage/index.vue | 34 + src/views/coalMine/cPeopleManage/index.vue | 5 src/views/coalMine/cTeacherManage/cTeacher/index.vue | 77 +++-- 17 files changed, 576 insertions(+), 146 deletions(-) diff --git a/src/api/coalMine/teacher.js b/src/api/coalMine/teacher.js index 3751212..ba2687e 100644 --- a/src/api/coalMine/teacher.js +++ b/src/api/coalMine/teacher.js @@ -1,11 +1,10 @@ import request from '@/utils/request' // 数据分页 -export function getTeacherPage(query) { +export function getTeacherPage(queryParams) { return request({ - url: '/teacherManage/page', + url: `/teacherManage/pageByCondition?pageNum=${queryParams.pageNum}&pageSize=${queryParams.pageSize}&operateTypeId=${queryParams.operateTypeId}&isCm=${queryParams.isCm}`, method: 'get', - params: query }) } diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue index 08a8dd8..b47929b 100644 --- a/src/layout/components/Navbar.vue +++ b/src/layout/components/Navbar.vue @@ -31,9 +31,9 @@ <i class="el-icon-caret-bottom" /> </div> <el-dropdown-menu slot="dropdown"> -<!-- <router-link to="/user/profile">--> -<!-- <el-dropdown-item>个人中心</el-dropdown-item>--> -<!-- </router-link>--> + <router-link to="/user/profile"> + <el-dropdown-item>个人中心</el-dropdown-item> + </router-link> <el-dropdown-item @click.native="setting = true"> <span>布局设置</span> </el-dropdown-item> diff --git a/src/utils/validate.js b/src/utils/validate.js index e689132..c7bd099 100644 --- a/src/utils/validate.js +++ b/src/utils/validate.js @@ -24,6 +24,13 @@ return reg.test(url) } +export function verifyPwd(val) { + // false: 强密码不正确 + if (!/^(?![a-zA-Z]+$)(?!\d+$)(?![!@#$%^&\.*]+$)(?![a-zA-Z\d]+$)(?![a-zA-Z!@#$%^&\.*]+$)(?![\d!@#$%^&\.*]+$)[a-zA-Z\d!@#$%^&\.*\-_]{6,16}$/.test(val)) return false; + // true: 强密码正确 + else return true; +} + /** * @param {string} str * @returns {Boolean} diff --git a/src/views/coalMine/cPeopleManage/index.vue b/src/views/coalMine/cPeopleManage/index.vue index 1b91ecc..757b18b 100644 --- a/src/views/coalMine/cPeopleManage/index.vue +++ b/src/views/coalMine/cPeopleManage/index.vue @@ -62,7 +62,8 @@ </el-table-column> <el-table-column label="证件照片" align="center" prop="photoPath"> <template #default="scope"> - <el-button type="text" @click="viewFile(scope.row.photoAttachment)">预览</el-button> + <el-button type="text" v-if="scope.row.photoAttachment && scope.row.photoAttachment.fileUrl !==''" @click="viewFile(scope.row.photoAttachment)">预览</el-button> + <span type="text" v-else>暂无</span> </template> </el-table-column> <!-- <el-table-column label="个人履历" align="center">--> @@ -230,7 +231,7 @@ }, viewFile(file){ const t = this - axios.get(process.env.VUE_APP_BASE_API + file.fileUrl,{headers:{'Content-Type': 'application/json','Authorization': "Bearer " + getToken()},responseType: 'blob'}).then(res=>{ + axios.get(process.env.VUE_APP_BASE_API + file.fileUrl,{headers:{'Content-Type': 'application/json','Authorization': "Bearer " + getToken()},responseType: 'blob',timeout: 3000}).then(res=>{ if (res && res.data) { const link = document.createElement('a') let blob = new Blob([res.data],{type: res.data.type}) diff --git a/src/views/coalMine/cTeacherManage/cReviewer/index.vue b/src/views/coalMine/cTeacherManage/cReviewer/index.vue index 42c1660..e9e85bc 100644 --- a/src/views/coalMine/cTeacherManage/cReviewer/index.vue +++ b/src/views/coalMine/cTeacherManage/cReviewer/index.vue @@ -1,21 +1,12 @@ <template> <div class="app-container"> <!-- <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">--> -<!-- <el-form-item label="用户姓名" prop="userName">--> -<!-- <el-input--> -<!-- v-model="queryParams.userName"--> -<!-- placeholder="请输入用户姓名"--> -<!-- clearable--> -<!-- @keyup.enter.native="handleQuery"--> -<!-- />--> -<!-- </el-form-item>--> -<!-- <el-form-item label="身份证号" prop="idCard">--> -<!-- <el-input--> -<!-- v-model="queryParams.idCard"--> -<!-- placeholder="请输入身份证号"--> -<!-- clearable--> -<!-- @keyup.enter.native="handleQuery"--> -<!-- />--> +<!-- <el-form-item label="工种类型" prop="userName">--> +<!-- <el-cascader--> +<!-- v-model="queryParams.operate"--> +<!-- :options="typeList"--> +<!-- style="width: 100%"--> +<!-- :props="{ expandTrigger: 'hover', value: 'id',label: 'name'}"></el-cascader>--> <!-- </el-form-item>--> <!-- <el-form-item>--> <!-- <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>--> @@ -25,6 +16,14 @@ <el-row :gutter="10" class="mb8"> <el-col :span="1.5"> + <el-button + type="primary" + plain + icon="el-icon-upload" + size="mini" + @click="openUpload" + v-hasPermi="['system:experts:add']" + >导入</el-button> <el-button type="primary" plain @@ -44,7 +43,12 @@ {{ scope.row.sex == 0?'男':'女' }} </template> </el-table-column> - <el-table-column label="身份证号" align="center" prop="code" /> + <el-table-column label="身份证号" align="center" prop="code"> + <template #default="scope"> + {{scope.row.code | peridcardtm}} + </template> + </el-table-column> + <el-table-column label="手机号" align="center" prop="mobilePhone" /> <el-table-column label="最高学历" align="center" prop="eduLevel"> <template #default="scope"> {{getDegreeName(scope.row.eduLevel)}} @@ -107,6 +111,7 @@ import axios from "axios"; import {getToken} from "@/utils/auth"; import {delPeople} from "@/api/coalMine/people"; +import {getOperatePage} from "@/api/coalMine/operateType"; export default { name: "cTeacherManage", @@ -130,6 +135,7 @@ created() { const t = this t.getPage() + t.getList() }, methods: { async getPage(){ @@ -146,7 +152,19 @@ } this.loading = false }, - + async getList() { + this.loading = true; + const res = await getOperatePage({name: ''}) + if(res.code == 200){ + this.typeList = this.handleTree(res.data, "id"); + }else{ + this.$message({ + type: 'warning', + message: res.msg + }); + } + this.loading = false; + }, openDialog(data,type){ this.$refs.reviewerDialog.openDialog(data,type) }, @@ -158,7 +176,8 @@ }, handleQuery(){ - + this.queryParams.pageNum = 1 + this.getPage() }, resetQuery(){ this.queryParams = { diff --git a/src/views/coalMine/cTeacherManage/cTeacher/index.vue b/src/views/coalMine/cTeacherManage/cTeacher/index.vue index da78459..f1a3e59 100644 --- a/src/views/coalMine/cTeacherManage/cTeacher/index.vue +++ b/src/views/coalMine/cTeacherManage/cTeacher/index.vue @@ -1,30 +1,29 @@ <template> <div class="app-container"> -<!-- <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">--> -<!-- <el-form-item label="用户姓名" prop="userName">--> -<!-- <el-input--> -<!-- v-model="queryParams.userName"--> -<!-- placeholder="请输入用户姓名"--> -<!-- clearable--> -<!-- @keyup.enter.native="handleQuery"--> -<!-- />--> -<!-- </el-form-item>--> -<!-- <el-form-item label="身份证号" prop="idCard">--> -<!-- <el-input--> -<!-- v-model="queryParams.idCard"--> -<!-- placeholder="请输入身份证号"--> -<!-- clearable--> -<!-- @keyup.enter.native="handleQuery"--> -<!-- />--> -<!-- </el-form-item>--> -<!-- <el-form-item>--> -<!-- <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>--> -<!-- <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>--> -<!-- </el-form-item>--> -<!-- </el-form>--> + <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> + <el-form-item label="工种类型" prop="userName"> + <el-cascader + v-model="queryParams.operateTypeId " + :options="typeList" + style="width: 100%" + :props="{ expandTrigger: 'hover', value: 'id',label: 'name',emitPath: false,checkStrictly: true}"></el-cascader> + </el-form-item> + <el-form-item> + <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> + <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> + </el-form-item> + </el-form> <el-row :gutter="10" class="mb8"> <el-col :span="1.5"> + <el-button + type="primary" + plain + icon="el-icon-upload" + size="mini" + @click="openUpload" + v-hasPermi="['system:experts:add']" + >导入</el-button> <el-button type="primary" plain @@ -44,7 +43,12 @@ {{ scope.row.sex == 0?'男':'女' }} </template> </el-table-column> - <el-table-column label="身份证号" align="center" prop="code" /> + <el-table-column label="身份证号" align="center" prop="code"> + <template #default="scope"> + {{scope.row.code | peridcardtm}} + </template> + </el-table-column> + <el-table-column label="手机号" align="center" prop="mobilePhone" /> <el-table-column label="最高学历" align="center" prop="eduLevel"> <template #default="scope"> {{getDegreeName(scope.row.eduLevel)}} @@ -86,7 +90,7 @@ <pagination v-show="total>0" :total="total" - :page.sync="queryParams.pageIndex" + :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getPage" /> @@ -107,6 +111,7 @@ import axios from "axios"; import {getToken} from "@/utils/auth"; import {delPeople} from "@/api/coalMine/people"; +import {getOperatePage} from "@/api/coalMine/operateType"; export default { name: "cTeacherManage", @@ -119,10 +124,12 @@ typeVisible: false, workType: [], dataList: [], + typeList: [], total: 0, queryParams: { pageNum: 1, pageSize: 10, + operateTypeId: 0, isCm: '1' } }; @@ -130,6 +137,7 @@ created() { const t = this t.getPage() + t.getList() }, methods: { async getPage(){ @@ -146,9 +154,24 @@ } this.loading = false }, - + async getList() { + this.loading = true; + const res = await getOperatePage({name: ''}) + if(res.code == 200){ + this.typeList = this.handleTree(res.data, "id"); + }else{ + this.$message({ + type: 'warning', + message: res.msg + }); + } + this.loading = false; + }, openDialog(data,type){ this.$refs.teacherDialog.openDialog(data,type) + }, + openUpload(){ + this.$message.error('请联系开发人员规范导入') }, openWorkType(row){ this.workType = row.operateTypes @@ -158,12 +181,14 @@ }, handleQuery(){ - + this.queryParams.pageNum = 1 + this.getPage() }, resetQuery(){ this.queryParams = { pageNum: 1, pageSize: 10, + operateTypeId: 0, isCm: 1 } this.getPage() diff --git a/src/views/login.vue b/src/views/login.vue index f418855..4ced06e 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -55,9 +55,9 @@ </el-form-item> </el-form> <!-- 底部 --> - <div class="el-login-footer"> - <span>技术支持:中国科学院</span> - </div> +<!-- <div class="el-login-footer">--> +<!-- <span>技术支持:中国科学院</span>--> +<!-- </div>--> </div> </template> diff --git a/src/views/notCoalMine/nCertificateList/components/certificateDialog.vue b/src/views/notCoalMine/nCertificateList/components/certificateDialog.vue index abb4e1c..c0316e1 100644 --- a/src/views/notCoalMine/nCertificateList/components/certificateDialog.vue +++ b/src/views/notCoalMine/nCertificateList/components/certificateDialog.vue @@ -92,11 +92,14 @@ <el-row> <el-col :span="20"> - <el-form-item label="图片查看" prop="imgPath"> - <el-image - style="width: 100px; height: 100px" - :src="imgPath" - fit="fill"></el-image> +<!-- <el-form-item label="图片查看" prop="imgPath">--> +<!-- <el-image--> +<!-- style="width: 100px; height: 100px"--> +<!-- src="http://inspurtestcx.saws.org.cn/zwfile/zwdownload?filePath=QRCODE/2020/12/01/QRCODE362421197712217718_A12000036320030846.jpg"--> +<!-- fit="fill"></el-image>--> +<!-- </el-form-item>--> + <el-form-item label="图片查看"> + <el-link type="primary" style="margin-right: 20px" @click="downloadFile(form.imgPath)" target="_blank">点击查看</el-link> </el-form-item> </el-col> </el-row> @@ -115,6 +118,7 @@ <script> // import {getExpertTypes,addExpertInfo,uploadFile} from '@/api/system/form' // import { verifySimplePhone, verifyIdCard } from "@/utils/validate"; +import axios from "axios"; export default { name: "nCertificateDialog", dicts: ['sys_nation_code'], @@ -314,7 +318,26 @@ }, changeSource(num){ this.form.source = num - } + }, + + downloadFile(file){ + const t = this + axios.get(file,{headers:{'Content-Type': 'application/json','Authorization': "Bearer " + getToken()},responseType: 'blob'}).then(res=>{ + if (res) { + const link = document.createElement('a') + let blob = new Blob([res.data],{type: res.data.type}) + link.style.display = "none"; + link.href = URL.createObjectURL(blob); // 创建URL + window.open(link.href) + // link.setAttribute("download", file.name); + // document.body.appendChild(link); + // link.click(); + // document.body.removeChild(link); + } else { + this.$message.error('获取文件失败') + } + }) + }, } }; </script> diff --git a/src/views/notCoalMine/nPeopleManage/components/certDialog.vue b/src/views/notCoalMine/nPeopleManage/components/certDialog.vue new file mode 100644 index 0000000..d4bd266 --- /dev/null +++ b/src/views/notCoalMine/nPeopleManage/components/certDialog.vue @@ -0,0 +1,281 @@ +<template> + <el-dialog title="资格证书" :visible.sync="open" width="50%" append-to-body> + <div class="app-container home"> + <el-row :gutter="10" class="mb8"> +<!-- <el-col :span="1.5">--> +<!-- <el-button--> +<!-- type="primary"--> +<!-- plain--> +<!-- icon="el-icon-plus"--> +<!-- size="mini"--> +<!-- @click="openEdit({},'add')"--> +<!-- v-hasPermi="['system:experts:add']"--> +<!-- >新增</el-button>--> +<!-- </el-col>--> +<!-- <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>--> + </el-row> + <el-table v-loading="loading" :data="dataList"> + <el-table-column type="index" label="序号" width="55" align="center" /> + <el-table-column label="证书编号" align="center" prop="certNum"/> + <el-table-column label="资格类型" align="center" prop="personTypeName" /> + <el-table-column label="作业类别" align="center" prop="jobTypeName" /> + <el-table-column label="操作项目" align="center" prop="operItemName" /> + <el-table-column label="有效期至" align="center" prop="validEndDate"/> + <el-table-column label="有效期至" align="center" prop="validEndDate"/> +<!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width">--> +<!-- <template #default="scope">--> +<!-- <el-button--> +<!-- size="mini"--> +<!-- type="text"--> +<!-- icon="el-icon-edit"--> +<!-- @click="openEdit(scope.row,'edit')"--> +<!-- >编辑</el-button>--> +<!-- <el-button--> +<!-- size="mini"--> +<!-- type="text"--> +<!-- style="color: #f56c6c"--> +<!-- icon="el-icon-delete"--> +<!-- @click="handleDelete(scope.row,scope.index)"--> +<!-- v-hasPermi="['system:experts:remove']"--> +<!-- >删除</el-button>--> +<!-- </template>--> +<!-- </el-table-column>--> + </el-table> + <el-dialog :title="title" :visible.sync="dialogVisible" width="50%" append-to-body> + <el-form :model="form" :rules="rules" ref="ruleForm" label-width="200px"> + <el-row> + <el-col :span="20"> + <el-form-item label="证书名称" prop="name"> + <el-input v-model="form.name"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="20"> + <el-form-item label="资格类型" prop="operateTypeId"> + <el-cascader + v-model="form.operateTypeId" + :options="typeList" + style="width: 100%" + :props="{ expandTrigger: 'hover', value: 'id',label: 'name',emitPath: false}" + @change="handleChange"></el-cascader> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="20"> + <el-form-item label="过期时间" prop="expiredTime"> + <el-date-picker + v-model="form.expiredTime" + value-format="yyyy-MM-dd" + style="width: 100%"> + </el-date-picker> + </el-form-item> + </el-col> + </el-row> + </el-form> + <div style="width: 100%;padding-bottom: 30px;display: flex;justify-content: center"> + <el-button type="primary" @click="submit()">提交</el-button> + </div> + </el-dialog> + </div> + </el-dialog> +</template> + +<script> + +// import { verifySimplePhone, verifyIdCard } from "@/utils/validate"; +import {addCert, editCert, delCert} from "@/api/coalMine/people"; +import {getOperatePage} from "@/api/coalMine/operateType"; + +export default { + name: "certDialog", + dicts: [], + components: { }, + data() { + return { + open: false, + id: null, + dialogVisible: false, + title: '新增证书', + loading: false, + dataList: [], + typeList: [], + form: { + name: '', + id: null, + staffId: null, + expiredTime: '', + operateTypeId: null + }, + rules: { + name: [{ required: true, message: "请填写证书名称", trigger: "blur" }], + expiredTime: [{ required: true, message: "请选择过期时间", trigger: "blur" }], + operateTypeId: [{ required: true, message: "请选择资格类型", trigger: "blur" }] + } + }; + }, + created() { + + }, + methods: { + openDialog(data){ + this.dataList = data.certList + this.id = data.id + this.getList() + this.open = true + }, + + async getList() { + this.loading = true; + const res = await getOperatePage({name: ''}) + if(res.code == 200){ + this.typeList = this.handleTree(res.data, "id"); + }else{ + this.$message({ + type: 'warning', + message: res.msg + }); + } + this.loading = false; + }, + + openEdit(data,type){ + this.dialogVisible = true + if(type == 'add'){ + this.title='新增证书' + this.form = { + name: '', + id: null, + staffId: this.id, + expiredTime: '', + operateTypeId: null + } + }else { + this.title='编辑证书' + for(let i in data){ + if(this.isKey(i,this.form)){ + this.form[i] = data[i] + } + } + } + }, + isKey(key,obj){ + return key in obj + }, + handleDelete(row,index){ + this.$confirm('此操作将永久删除该条数据, 是否继续?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).then(async () => { + const res = await delCert(row.id) + if(res.code == 200){ + this.$message({ + type: 'success', + message: '删除成功!' + }); + this.dialogVisible = false + this.open = false + this.$emit('closeDialog') + }else{ + this.$message({ + type: 'warning', + message: res.msg + }); + } + }).catch(() => { + + }); + }, + async submit(){ + this.$refs["ruleForm"].validate(async(valid) =>{ + if(valid) { + const obj = JSON.parse(JSON.stringify(this.form)) + // console.log(obj.qualification[1],'obj',this.findNameById(this.typeList,obj.qualification[1])) + // if(obj.qualification.length == 2){ + // obj.qualificationType = this.findNameById(this.typeList,obj.qualification[0]) + // obj.jobCategory = this.findNameById(this.typeList,obj.qualification[1]) + // obj.operateTypeId = this.obj.qualification[1] + // } + // if(obj.qualification.length == 3){ + // obj.qualificationType = this.findNameById(this.typeList,obj.qualification[0]) + // obj.jobCategory = this.findNameById(this.typeList,obj.qualification[1]) + // obj.operationItems = this.findNameById(this.typeList,obj.qualification[2]) + // obj.operateTypeId = obj.qualification[2] + // } + if(this.title == '新增证书'){ + const {id,...data} = obj + const res = await addCert(data) + if(res.code == 200){ + this.$message({ + type:'success', + message: res.msg + }) + this.dialogVisible = false + this.open = false + this.$emit('closeDialog') + }else{ + this.$message({ + type:'warning', + message: res.msg + }) + } + }else{ + const res= await editCert(obj) + if(res.code == 200){ + this.$message({ + type:'success', + message: res.msg + }) + this.dialogVisible = false + this.open = false + this.$emit('closeDialog') + }else{ + this.$message({ + type:'warning', + message: res.msg + }) + } + } + }else{ + this.$message({ + type:'warning', + message:'请完善必填信息' + }) + } + }) + }, + + findNameById(data,id){ + for(const node of data){ + if(node.id == id){ + return node.name + } + if(node.children){ + const foundName = this.findNameById(node.children,id) + if(foundName){ + return foundName + } + } + } + return null + }, + + handleChange(){ + + }, + handleQuery(){ + + }, + resetQuery(){ + + }, + } +}; +</script> + +<style scoped lang="scss"> +.home {} +</style> + diff --git a/src/views/notCoalMine/nPeopleManage/components/peopleDialog.vue b/src/views/notCoalMine/nPeopleManage/components/peopleDialog.vue index 8eb5692..03bb939 100644 --- a/src/views/notCoalMine/nPeopleManage/components/peopleDialog.vue +++ b/src/views/notCoalMine/nPeopleManage/components/peopleDialog.vue @@ -79,10 +79,10 @@ <el-col :span="24"> <el-form-item label="违章记录"> <el-table :data="form.violationList" border> - <el-table-column label="时间" align="center"> - <template #default="scope"> - {{scope.row.startTime + '--' + scope.row.endTime}} - </template> + <el-table-column label="时间" align="center" prop="violationTime"> +<!-- <template #default="scope">--> +<!-- {{scope.row.startTime + '--' + scope.row.endTime}}--> +<!-- </template>--> </el-table-column> <el-table-column label="单位" align="center" prop="unit"/> </el-table> @@ -109,7 +109,7 @@ <el-table :data="form.trainList" border> <el-table-column label="培训时间" align="center"> <template #default="scope"> - {{scope.row.startTime + '--' + scope.row.endTime}} + {{scope.row.startTime | formatDate }}--{{scope.row.endTime | formatDate}} </template> </el-table-column> <el-table-column label="培训单位" align="center" prop="trainInstitutionName"/> @@ -123,14 +123,11 @@ <el-col :span="24"> <el-form-item label="考试经历"> <el-table :data="form.examineeList" border> - <el-table-column label="考试时间" align="center"> - <template #default="scope"> - {{scope.row.startTime + '--' + scope.row.endTime}} - </template> + <el-table-column label="考试时间" align="center" prop="examTime"> </el-table-column> - <el-table-column label="考试中心" align="center" prop="trainInstitutionName"/> + <el-table-column label="考试中心" align="center" prop="examCenter"/> <el-table-column label="科目" align="center" prop="subject"/> - <el-table-column label="考试结果" align="center" prop="trainInstitutionName"/> + <el-table-column label="考试结果" align="center" prop="result"/> </el-table> </el-form-item> </el-col> @@ -232,12 +229,12 @@ this.title = '查看人员' this.disable = true } - // this.form = val - for(let i in val){ - if(this.isValidKey(i,this.form)){ - this.form[i] = val[i] - } - } + this.form = val + // for(let i in val){ + // if(this.isValidKey(i,this.form)){ + // this.form[i] = val[i] + // } + // } this.form.sex = Number(this.form.sex) } this.open = true diff --git a/src/views/notCoalMine/nPeopleManage/index.vue b/src/views/notCoalMine/nPeopleManage/index.vue index fa63a38..0dd1e86 100644 --- a/src/views/notCoalMine/nPeopleManage/index.vue +++ b/src/views/notCoalMine/nPeopleManage/index.vue @@ -63,7 +63,7 @@ <el-table-column label="最高学历" align="center" prop="highestEducation"/> <el-table-column label="作业证书" align="center" prop="certCount"> <template #default="scope"> - <el-button v-if="scope.row.certCount>0" type="text">{{ scope.row.certCount }}</el-button> + <el-button v-if="scope.row.certCount>0" type="text" @click="openCert(scope.row)">{{ scope.row.certCount }}</el-button> <span v-else>{{scope.row.certCount}}</span> </template> </el-table-column> @@ -71,7 +71,8 @@ <el-table-column label="违章次数" align="center" prop="violationCount"/> <el-table-column label="证件照片" align="center" prop="photoPath"> <template #default="scope"> - <el-button type="text" @click="viewFile(scope.row.photoPath)">预览</el-button> + <el-button type="text" v-if="scope.row.photoPath && scope.row.photoPath !==''" @click="viewFile(scope.row.photoPath)">预览</el-button> + <span type="text" v-else>暂无</span> </template> </el-table-column> <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> @@ -99,6 +100,7 @@ @pagination="getPage" /> <peopleDialog ref="peopleDialog"></peopleDialog> + <certDialog ref="certDialog" @closeDialog="resetQuery"></certDialog> </div> </template> @@ -107,11 +109,11 @@ import peopleDialog from "./components/peopleDialog"; import axios from "axios"; import {getToken} from "@/utils/auth"; - +import certDialog from "@/views/notCoalMine/nPeopleManage/components/certDialog" export default { name: "nPeopleManage", dicts: ['sys_nation_code'], - components: { peopleDialog }, + components: { peopleDialog, certDialog }, data() { return { loading: false, @@ -178,7 +180,11 @@ }, viewFile(file){ const t = this - axios.get(process.env.VUE_APP_BASE_API + file,{headers:{'Content-Type': 'application/json','Authorization': "Bearer " + getToken()},responseType: 'blob'}).then(res=>{ + if(file.substring(0, 1) !== '/'){ + t.$message.error('无效的图片地址') + return + } + axios.get(process.env.VUE_APP_BASE_API + file,{headers:{'Content-Type': 'application/json','Authorization': "Bearer " + getToken()},responseType: 'blob',timeout: 3000}).then(res=>{ if (res) { const link = document.createElement('a') let blob = new Blob([res.data],{type: res.data.type}) @@ -189,14 +195,18 @@ t.$message.error('获取文件失败') } }).catch(function(err){ - if(err == 'Error: Network Error'){ - t.$message.error('获取文件失败') - } - if(err == 'Error: Request failed with status code 404'){ - t.$message.error('获取文件失败') - } + // if(err == 'Error: Network Error'){ + // t.$message.error('获取文件失败') + // }else if(err == 'Error: Request failed with status code 404'){ + // t.$message.error('获取文件失败') + // }else{ + t.$message.error(err) + // } }) - } + }, + openCert(data){ + this.$refs.certDialog.openDialog(data) + }, } }; </script> diff --git a/src/views/notCoalMine/nTeacherManage/nReviewer/index.vue b/src/views/notCoalMine/nTeacherManage/nReviewer/index.vue index 94cfa70..e067e9d 100644 --- a/src/views/notCoalMine/nTeacherManage/nReviewer/index.vue +++ b/src/views/notCoalMine/nTeacherManage/nReviewer/index.vue @@ -1,21 +1,12 @@ <template> <div class="app-container"> <!-- <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">--> -<!-- <el-form-item label="用户姓名" prop="userName">--> -<!-- <el-input--> -<!-- v-model="queryParams.userName"--> -<!-- placeholder="请输入用户姓名"--> -<!-- clearable--> -<!-- @keyup.enter.native="handleQuery"--> -<!-- />--> -<!-- </el-form-item>--> -<!-- <el-form-item label="身份证号" prop="idCard">--> -<!-- <el-input--> -<!-- v-model="queryParams.idCard"--> -<!-- placeholder="请输入身份证号"--> -<!-- clearable--> -<!-- @keyup.enter.native="handleQuery"--> -<!-- />--> +<!-- <el-form-item label="工种类型" prop="userName">--> +<!-- <el-cascader--> +<!-- v-model="queryParams.operate"--> +<!-- :options="typeList"--> +<!-- style="width: 100%"--> +<!-- :props="{ expandTrigger: 'hover', value: 'id',label: 'name'}"></el-cascader>--> <!-- </el-form-item>--> <!-- <el-form-item>--> <!-- <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>--> @@ -25,6 +16,14 @@ <el-row :gutter="10" class="mb8"> <el-col :span="1.5"> + <el-button + type="primary" + plain + icon="el-icon-upload" + size="mini" + @click="openUpload" + v-hasPermi="['system:experts:add']" + >导入</el-button> <el-button type="primary" plain @@ -44,7 +43,12 @@ {{ scope.row.sex == 0?'男':'女' }} </template> </el-table-column> - <el-table-column label="身份证号" align="center" prop="code" /> + <el-table-column label="身份证号" align="center" prop="code"> + <template #default="scope"> + {{scope.row.code | peridcardtm}} + </template> + </el-table-column> + <el-table-column label="手机号" align="center" prop="mobilePhone" /> <el-table-column label="最高学历" align="center" prop="eduLevel"> <template #default="scope"> {{getDegreeName(scope.row.eduLevel)}} @@ -107,6 +111,7 @@ import axios from "axios"; import {getToken} from "@/utils/auth"; import {delPeople} from "@/api/coalMine/people"; +import {getOperatePage} from "@/api/coalMine/operateType"; export default { name: "nReviewerManage", @@ -130,6 +135,7 @@ created() { const t = this t.getPage() + t.getList() }, methods: { async getPage(){ @@ -146,7 +152,22 @@ } this.loading = false }, - + async getList() { + this.loading = true; + const res = await getOperatePage({name: ''}) + if(res.code == 200){ + this.typeList = this.handleTree(res.data, "id"); + }else{ + this.$message({ + type: 'warning', + message: res.msg + }); + } + this.loading = false; + }, + openUpload(){ + this.$message.error('请联系开发人员规范导入') + }, openDialog(data,type){ this.$refs.teacherDialog.openDialog(data,type) }, @@ -158,7 +179,8 @@ }, handleQuery(){ - + this.queryParams.pageNum = 1 + this.getPage() }, resetQuery(){ this.queryParams = { diff --git a/src/views/notCoalMine/nTeacherManage/nTeacher/index.vue b/src/views/notCoalMine/nTeacherManage/nTeacher/index.vue index f0684ae..b987e3c 100644 --- a/src/views/notCoalMine/nTeacherManage/nTeacher/index.vue +++ b/src/views/notCoalMine/nTeacherManage/nTeacher/index.vue @@ -1,30 +1,28 @@ <template> <div class="app-container"> -<!-- <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">--> -<!-- <el-form-item label="用户姓名" prop="userName">--> -<!-- <el-input--> -<!-- v-model="queryParams.userName"--> -<!-- placeholder="请输入用户姓名"--> -<!-- clearable--> -<!-- @keyup.enter.native="handleQuery"--> -<!-- />--> -<!-- </el-form-item>--> -<!-- <el-form-item label="身份证号" prop="idCard">--> -<!-- <el-input--> -<!-- v-model="queryParams.idCard"--> -<!-- placeholder="请输入身份证号"--> -<!-- clearable--> -<!-- @keyup.enter.native="handleQuery"--> -<!-- />--> -<!-- </el-form-item>--> -<!-- <el-form-item>--> -<!-- <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>--> -<!-- <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>--> -<!-- </el-form-item>--> -<!-- </el-form>--> - + <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> + <el-form-item label="工种类型" prop="userName"> + <el-cascader + v-model="queryParams.operateTypeId" + :options="typeList" + style="width: 100%" + :props="{ expandTrigger: 'hover', value: 'id',label: 'name',emitPath: false}"></el-cascader> + </el-form-item> + <el-form-item> + <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> + <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> + </el-form-item> + </el-form> <el-row :gutter="10" class="mb8"> <el-col :span="1.5"> + <el-button + type="primary" + plain + icon="el-icon-upload" + size="mini" + @click="openUpload" + v-hasPermi="['system:experts:add']" + >导入</el-button> <el-button type="primary" plain @@ -44,7 +42,12 @@ {{ scope.row.sex == 0?'男':'女' }} </template> </el-table-column> - <el-table-column label="身份证号" align="center" prop="code" /> + <el-table-column label="身份证号" align="center" prop="code"> + <template #default="scope"> + {{scope.row.code | peridcardtm}} + </template> + </el-table-column> + <el-table-column label="手机号" align="center" prop="mobilePhone" /> <el-table-column label="最高学历" align="center" prop="eduLevel"> <template #default="scope"> {{getDegreeName(scope.row.eduLevel)}} @@ -86,7 +89,7 @@ <pagination v-show="total>0" :total="total" - :page.sync="queryParams.pageIndex" + :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getPage" /> @@ -107,6 +110,7 @@ import axios from "axios"; import {getToken} from "@/utils/auth"; import {delPeople} from "@/api/coalMine/people"; +import {getOperatePage} from "@/api/coalMine/operateType"; export default { name: "nTeacherManage", @@ -119,10 +123,12 @@ typeVisible: false, workType: [], dataList: [], + typeList: [], total: 0, queryParams: { pageNum: 1, pageSize: 10, + operateTypeId: 0, isCm: '0' } }; @@ -130,6 +136,7 @@ created() { const t = this t.getPage() + t.getList() }, methods: { async getPage(){ @@ -146,9 +153,24 @@ } this.loading = false }, - + async getList() { + this.loading = true; + const res = await getOperatePage({name: ''}) + if(res.code == 200){ + this.typeList = this.handleTree(res.data, "id"); + }else{ + this.$message({ + type: 'warning', + message: res.msg + }); + } + this.loading = false; + }, openDialog(data,type){ this.$refs.teacherDialog.openDialog(data,type) + }, + openUpload(){ + this.$message.error('请联系开发人员规范导入') }, openWorkType(row){ this.workType = row.operateTypes @@ -158,12 +180,14 @@ }, handleQuery(){ - + this.queryParams.pageNum = 1 + this.getPage() }, resetQuery(){ this.queryParams = { pageNum: 1, pageSize: 10, + operateTypeId: 0, isCm: '0' } this.getPage() diff --git a/src/views/register.vue b/src/views/register.vue index 4330d5f..eed62ec 100644 --- a/src/views/register.vue +++ b/src/views/register.vue @@ -68,10 +68,22 @@ <script> import { getCodeImg, register } from "@/api/login"; +import {verifyPwd} from "@/utils/validate"; export default { name: "Register", data() { + let validatePwd = (rule, value, callback)=>{ + if(value === ''){ + callback(new Error('请输入密码')) + }else{ + if(!verifyPwd(value)){ + callback(new Error('密码须包含字母、数字、特殊字符,长度在6-16之间')) + }else{ + callback() + } + } + } const equalToPassword = (rule, value, callback) => { if (this.registerForm.password !== value) { callback(new Error("两次输入的密码不一致")); @@ -94,8 +106,7 @@ { min: 2, max: 20, message: '用户账号长度必须介于 2 和 20 之间', trigger: 'blur' } ], password: [ - { required: true, trigger: "blur", message: "请输入您的密码" }, - { min: 5, max: 20, message: '用户密码长度必须介于 5 和 20 之间', trigger: 'blur' } + { required: true, validator: validatePwd, trigger: 'blur' } ], confirmPassword: [ { required: true, trigger: "blur", message: "请再次输入您的密码" }, diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue index 8b23792..d5b2f48 100644 --- a/src/views/system/user/index.vue +++ b/src/views/system/user/index.vue @@ -434,7 +434,7 @@ ], password: [ { required: true, message: "用户密码不能为空", trigger: "blur" }, - { min: 5, max: 20, message: '用户密码长度必须介于 5 和 20 之间', trigger: 'blur' } + { pattern: /^(?![a-zA-Z]+$)(?!\d+$)(?![!@#$%^&\.*]+$)(?![a-zA-Z\d]+$)(?![a-zA-Z!@#$%^&\.*]+$)(?![\d!@#$%^&\.*]+$)[a-zA-Z\d!@#$%^&\.*\-_]{6,16}$/, message: "用户密码必须包含同时包含字母、数字和特殊字符,长度介于 6 和 16 之间", trigger: 'blur' } ], email: [ { @@ -591,8 +591,8 @@ confirmButtonText: "确定", cancelButtonText: "取消", closeOnClickModal: false, - inputPattern: /^.{5,20}$/, - inputErrorMessage: "用户密码长度必须介于 5 和 20 之间" + inputPattern: /^(?![a-zA-Z]+$)(?!\d+$)(?![!@#$%^&\.*]+$)(?![a-zA-Z\d]+$)(?![a-zA-Z!@#$%^&\.*]+$)(?![\d!@#$%^&\.*]+$)[a-zA-Z\d!@#$%^&\.*\-_]{6,16}$/, + inputErrorMessage: "用户密码必须包含同时包含字母、数字和特殊字符,长度介于 6 和 16 之间" }).then(({ value }) => { resetUserPwd(row.userId, value).then(response => { this.$modal.msgSuccess("修改成功,新密码是:" + value); diff --git a/src/views/system/user/profile/index.vue b/src/views/system/user/profile/index.vue index ad530f9..4b6c0e1 100644 --- a/src/views/system/user/profile/index.vue +++ b/src/views/system/user/profile/index.vue @@ -23,10 +23,10 @@ <svg-icon icon-class="email" />用户邮箱 <div class="pull-right">{{ user.email }}</div> </li> - <li class="list-group-item"> - <svg-icon icon-class="tree" />所属部门 - <div class="pull-right" v-if="user.dept">{{ user.dept.deptName }} / {{ postGroup }}</div> - </li> +<!-- <li class="list-group-item">--> +<!-- <svg-icon icon-class="tree" />所属部门--> +<!-- <div class="pull-right" v-if="user.dept">{{ user.dept.deptName }} / {{ postGroup }}</div>--> +<!-- </li>--> <li class="list-group-item"> <svg-icon icon-class="peoples" />所属角色 <div class="pull-right">{{ roleGroup }}</div> diff --git a/src/views/system/user/profile/resetPwd.vue b/src/views/system/user/profile/resetPwd.vue index 64e8f8c..f5008df 100644 --- a/src/views/system/user/profile/resetPwd.vue +++ b/src/views/system/user/profile/resetPwd.vue @@ -18,9 +18,21 @@ <script> import { updateUserPwd } from "@/api/system/user"; +import {verifyPwd} from "@/utils/validate"; export default { data() { + let validatePwd = (rule, value, callback)=>{ + if(value === ''){ + callback(new Error('请输入密码')) + }else{ + if(!verifyPwd(value)){ + callback(new Error('密码须包含字母、数字、特殊字符,长度在6-16之间')) + }else{ + callback() + } + } + } const equalToPassword = (rule, value, callback) => { if (this.user.newPassword !== value) { callback(new Error("两次输入的密码不一致")); @@ -40,8 +52,7 @@ { required: true, message: "旧密码不能为空", trigger: "blur" } ], newPassword: [ - { required: true, message: "新密码不能为空", trigger: "blur" }, - { min: 6, max: 20, message: "长度在 6 到 20 个字符", trigger: "blur" } + { required: true, validator: validatePwd, trigger: 'blur' } ], confirmPassword: [ { required: true, message: "确认密码不能为空", trigger: "blur" }, -- Gitblit v1.9.2