From 21e03c21386fb124774df48c8bb1fe3b185dbb48 Mon Sep 17 00:00:00 2001
From: 马宇豪 <978517621@qq.com>
Date: Sat, 07 Oct 2023 14:56:23 +0800
Subject: [PATCH] 新增接口页面
---
src/views/coalMine/cPeopleManage/components/trainDialog.vue | 6
src/views/notCoalMine/nViolationRegistration/components/violationDialog.vue | 312 +++
src/views/notCoalMine/nJobRegistration/components/jobRegistDialog.vue | 219 ++
src/views/coalMine/cViolationRegistration/index.vue | 151 +
src/views/notCoalMine/nViolationRegistration/index.vue | 151 +
src/views/notCoalMine/nCertificateList/components/certificateDialog.vue | 415 ++++
src/views/notCoalMine/nTeacherManage/nTeacher/components/teacherDialog.vue | 472 +++-
src/views/coalMine/cPeopleManage/components/peopleDialog.vue | 142 +
src/views/coalMine/cTeacherManage/cTeacher/components/teacherDialog.vue | 638 ++++++
src/views/notCoalMine/nTeacherManage/nReviewer/components/reviewerDialog.vue | 638 ++++++
src/views/coalMine/cJobRegistration/index.vue | 2
src/views/coalMine/cPeopleManage/index.vue | 28
src/views/coalMine/cViolationRegistration/components/violationDialog.vue | 312 +++
src/views/coalMine/cPeopleManage/components/certDialog.vue | 1
src/views/coalMine/cPeopleManage/components/experienceDialog.vue | 2
src/views/notCoalMine/nJobRegistration/index.vue | 162 +
src/views/coalMine/cTeacherManage/cReviewer/index.vue | 252 +
src/api/notCoalMine/certifiate.js | 10
src/api/coalMine/violation.js | 53
src/views/notCoalMine/nTeacherManage/nReviewer/index.vue | 254 +
src/utils/filter.js | 25
src/views/notCoalMine/nPeopleManage/components/peopleDialog.vue | 31
src/views/notCoalMine/nTeacherManage/nTeacher/index.vue | 253 +
src/views/coalMine/cTeacherManage/cReviewer/components/reviewerDialog.vue | 638 ++++++
src/views/notCoalMine/nCertificateList/index.vue | 133
src/api/coalMine/jobRegist.js | 53
src/utils/request.js | 2
.env.development | 5
/dev/null | 119 -
src/api/coalMine/teacher.js | 114 +
src/main.js | 3
src/views/notCoalMine/nPeopleManage/index.vue | 9
src/views/coalMine/cTeacherManage/cTeacher/index.vue | 250 +
33 files changed, 5,030 insertions(+), 825 deletions(-)
diff --git a/.env.development b/.env.development
index 95581f3..07da133 100644
--- a/.env.development
+++ b/.env.development
@@ -6,9 +6,10 @@
# 若依管理系统/开发环境
#黄镇
-VUE_APP_BASE_API = 'http://192.168.0.41:8085'
+#VUE_APP_BASE_API = 'http://192.168.0.47:8085'
+
#张凤
-#VUE_APP_BASE_API = 'http://192.168.0.70:8085'
+VUE_APP_BASE_API = 'http://192.168.0.70:8085'
# 路由懒加载
VUE_CLI_BABEL_TRANSPILE_MODULES = true
diff --git a/src/api/coalMine/jobRegist.js b/src/api/coalMine/jobRegist.js
new file mode 100644
index 0000000..783c4bb
--- /dev/null
+++ b/src/api/coalMine/jobRegist.js
@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 数据分页
+export function getJobRegistPage(query) {
+ return request({
+ url: '/work/registration/list/page',
+ method: 'get',
+ params: query
+ })
+}
+
+// 获取数据
+export function getJobRegist(id) {
+ return request({
+ url: '/work/registration/get/' + id,
+ method: 'get'
+ })
+}
+
+// 新增数据
+export function addJobRegist(data) {
+ return request({
+ url: '/work/registration/add',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改数据
+export function editJobRegist(data) {
+ return request({
+ url: '/work/registration/mod',
+ method: 'post',
+ data: data
+ })
+}
+
+// 删除数据
+export function delJobRegist(ids) {
+ return request({
+ url: '/work/registration/del/batch/' + ids,
+ method: 'delete'
+ })
+}
+
+// 上传
+export function uploadFile(data) {
+ return request({
+ url: '/attachment/upload/detail',
+ method: 'post',
+ data: data
+ })
+}
diff --git a/src/api/coalMine/teacher.js b/src/api/coalMine/teacher.js
new file mode 100644
index 0000000..3751212
--- /dev/null
+++ b/src/api/coalMine/teacher.js
@@ -0,0 +1,114 @@
+import request from '@/utils/request'
+
+// 数据分页
+export function getTeacherPage(query) {
+ return request({
+ url: '/teacherManage/page',
+ method: 'get',
+ params: query
+ })
+}
+
+// 获取数据
+export function getTeacher(id) {
+ return request({
+ url: '/teacherManage/' + id,
+ method: 'get'
+ })
+}
+
+// 新增数据
+export function addTeacher(data) {
+ return request({
+ url: '/teacherManage/add',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改数据
+export function editTeacher(data) {
+ return request({
+ url: '/teacherManage/update',
+ method: 'post',
+ data: data
+ })
+}
+
+// 删除数据
+export function delTeacher(id) {
+ return request({
+ url: '/teacherManage/del/' + id,
+ method: 'get'
+ })
+}
+
+// 停用数据
+export function abortTeacher(data) {
+ return request({
+ url: '/teacherManage/updateStatus',
+ method: 'post',
+ data: data
+ })
+}
+
+// 删除数据
+export function delTeacherOperate(id) {
+ return request({
+ url: '/teacherManage/operateType/del/' + id,
+ method: 'get'
+ })
+}
+
+// 数据分页
+export function getExaminerPage(query) {
+ return request({
+ url: '/examinerManage/page',
+ method: 'get',
+ params: query
+ })
+}
+
+// 新增数据
+export function addExaminer(data) {
+ return request({
+ url: '/examinerManage/add',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改数据
+export function editExaminer(data) {
+ return request({
+ url: '/examinerManage/update',
+ method: 'post',
+ data: data
+ })
+}
+
+// 删除数据
+export function delExaminer(id) {
+ return request({
+ url: '/examinerManage/del/' + id,
+ method: 'get'
+ })
+}
+
+// 停用数据
+export function abortExaminer(data) {
+ return request({
+ url: '/examinerManage/updateStatus',
+ method: 'post',
+ data: data
+ })
+}
+
+// 上传
+export function uploadFile(data) {
+ return request({
+ url: '/attachment/upload/detail',
+ method: 'post',
+ data: data
+ })
+}
diff --git a/src/api/coalMine/violation.js b/src/api/coalMine/violation.js
new file mode 100644
index 0000000..5c20ce3
--- /dev/null
+++ b/src/api/coalMine/violation.js
@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 数据分页
+export function getViolationPage(query) {
+ return request({
+ url: '/violation/registration/page/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 获取数据
+export function getViolation(id) {
+ return request({
+ url: '/violation/registration/get/' + id,
+ method: 'get'
+ })
+}
+
+// 新增数据
+export function addViolation(data) {
+ return request({
+ url: '/violation/registration/add',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改数据
+export function editViolation(data) {
+ return request({
+ url: '/violation/registration/mod',
+ method: 'post',
+ data: data
+ })
+}
+
+// 删除数据
+export function delViolation(ids) {
+ return request({
+ url: '/violation/registration/del/batch/' + ids,
+ method: 'delete'
+ })
+}
+
+// 上传
+export function uploadFile(data) {
+ return request({
+ url: '/attachment/upload/detail',
+ method: 'post',
+ data: data
+ })
+}
diff --git a/src/api/notCoalMine/certifiate.js b/src/api/notCoalMine/certifiate.js
new file mode 100644
index 0000000..1e1e545
--- /dev/null
+++ b/src/api/notCoalMine/certifiate.js
@@ -0,0 +1,10 @@
+import request from '@/utils/request'
+
+// 数据分页
+export function getCertificatePage(query) {
+ return request({
+ url: '/nc/cert/page/list',
+ method: 'get',
+ params: query
+ })
+}
diff --git a/src/main.js b/src/main.js
index 13c6cf2..686802e 100644
--- a/src/main.js
+++ b/src/main.js
@@ -37,7 +37,8 @@
import VueMeta from 'vue-meta'
// 字典数据组件
import DictData from '@/components/DictData'
-
+import '@/utils/filter'
+import '@/utils/validate'
// 全局方法挂载
Vue.prototype.getDicts = getDicts
Vue.prototype.getConfigKey = getConfigKey
diff --git a/src/utils/filter.js b/src/utils/filter.js
new file mode 100644
index 0000000..1231488
--- /dev/null
+++ b/src/utils/filter.js
@@ -0,0 +1,25 @@
+import Vue from 'vue'
+
+// 人民币过滤器
+Vue.filter('moneyFormat', (value) => {
+ return '¥' + Number(value).toFixed(2);
+});
+// 三位数姓名脱敏,中间一位隐藏
+Vue.filter('threeName', (value) => {
+ return value.replace(/(?<=[\u4e00-\u9fa5]).*(?=[\u4e00-\u9fa5])/, "*");
+});
+//身份证脱敏展示
+Vue.filter('peridcardtm', (value) => {
+ return value.replace(/^(.{3})(?:\d+)(.{4})$/, "$1**********$2");
+});
+//手机号码脱敏展示
+Vue.filter('phoneteltm', (value) => {
+ return value.replace(/^(.{3})(?:\d+)(.{4})$/, "$1****$2");
+});
+// 两位数姓名脱敏,最后一位隐藏
+Vue.filter('twoName', (value) => {
+ return value.replace(/.*(?=[\u4e00-\u9fa5])/, "*");
+});
+Vue.filter('threeName', (value) => {
+ return value
+});
diff --git a/src/utils/request.js b/src/utils/request.js
index 8797e3f..93a2c77 100644
--- a/src/utils/request.js
+++ b/src/utils/request.js
@@ -50,7 +50,7 @@
const s_data = sessionObj.data; // 请求数据
const s_time = sessionObj.time; // 请求时间
const interval = 1000; // 间隔时间(ms),小于此时间视为重复提交
- if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) {
+ if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url && s_url!=='/attachment/upload/detail') {
const message = '数据正在处理,请勿重复提交';
console.warn(`[${s_url}]: ` + message)
return Promise.reject(new Error(message))
diff --git a/src/views/coalMine/cJobRegistration/index.vue b/src/views/coalMine/cJobRegistration/index.vue
index dfcb7b4..5203744 100644
--- a/src/views/coalMine/cJobRegistration/index.vue
+++ b/src/views/coalMine/cJobRegistration/index.vue
@@ -88,7 +88,7 @@
<script>
-import addDialog from "@/views/notCoalMine/nJobRegistration/components/addDialog.vue";
+// import addDialog from "@/views/notCoalMine/nJobRegistration/components/addDialog.vue";
export default {
name: "nViolationRegistration",
dicts: [],
diff --git a/src/views/coalMine/cPeopleManage/components/certDialog.vue b/src/views/coalMine/cPeopleManage/components/certDialog.vue
index 7a4e4fd..f8e386f 100644
--- a/src/views/coalMine/cPeopleManage/components/certDialog.vue
+++ b/src/views/coalMine/cPeopleManage/components/certDialog.vue
@@ -20,7 +20,6 @@
<el-table-column label="资格类型" align="center" prop="qualificationType" />
<el-table-column label="作业类别" align="center" prop="jobCategory" />
<el-table-column label="操作项目" align="center" prop="operationItems" />
- <el-table-column label="人员" align="center" prop="staffId" />
<el-table-column label="有效期至" align="center" prop="expiredTime"/>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
diff --git a/src/views/coalMine/cPeopleManage/components/experienceDialog.vue b/src/views/coalMine/cPeopleManage/components/experienceDialog.vue
index 5de9f1c..c3e975e 100644
--- a/src/views/coalMine/cPeopleManage/components/experienceDialog.vue
+++ b/src/views/coalMine/cPeopleManage/components/experienceDialog.vue
@@ -16,7 +16,7 @@
</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="startTime">
+ <el-table-column label="时间" align="center">
<template #default="scope">
{{scope.row.startTime.substring(0,7) + '~' + scope.row.endTime.substring(0,7)}}
</template>
diff --git a/src/views/coalMine/cPeopleManage/components/peopleDialog.vue b/src/views/coalMine/cPeopleManage/components/peopleDialog.vue
index 734df01..ecea7d3 100644
--- a/src/views/coalMine/cPeopleManage/components/peopleDialog.vue
+++ b/src/views/coalMine/cPeopleManage/components/peopleDialog.vue
@@ -1,7 +1,7 @@
<template>
<el-dialog :title="title" :visible.sync="open" width="50%" append-to-body>
<div class="main_form">
- <el-form :model="form" :rules="rules" ref="ruleForm" label-width="200px" :label-position="labelPosition">
+ <el-form :model="form" :rules="rules" ref="ruleForm" label-width="120px" :label-position="labelPosition">
<el-row>
<el-col :span="20">
<el-form-item label="姓名" prop="name">
@@ -50,7 +50,14 @@
<el-row>
<el-col :span="20">
<el-form-item label="最高学历" prop="eduLevel">
- <el-input v-model="form.eduLevel" :readonly="disable"></el-input>
+ <el-select v-model="form.eduLevel" placeholder="请选择" :disabled="disable" style="width: 100%">
+ <el-option
+ v-for="dict in dict.type.sys_highest_education_code"
+ :key="dict.value"
+ :label="dict.label"
+ :value="dict.value"
+ />
+ </el-select>
</el-form-item>
</el-col>
</el-row>
@@ -75,8 +82,82 @@
</el-form-item>
</el-col>
</el-row>
+ <template v-if="title == '查看人员'">
+ <el-row v-if="form.violationRegistrationVOS && form.violationRegistrationVOS.length>0">
+ <el-col :span="24">
+ <el-form-item label="违章记录">
+ <el-table :data="form.violationRegistrationVOS" border>
+ <el-table-column label="发生时间" align="center" prop="violationTime"/>
+ <el-table-column label="违章(时)所属单位" align="center" prop="dept"/>
+ <el-table-column label="作业类别/操作项目" align="center" prop="dept"/>
+ </el-table>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row v-if="form.cmStaffResumes && form.cmStaffResumes.length>0">
+ <el-col :span="24">
+ <el-form-item label="个人履历">
+ <el-table :data="form.cmStaffResumes" border>
+ <el-table-column label="时间" align="center">
+ <template #default="scope">
+ {{scope.row.startTime.substring(0,7) + '~' + scope.row.endTime.substring(0,7)}}
+ </template>
+ </el-table-column>
+ <el-table-column label="单位" align="center" prop="unit" />
+ </el-table>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row v-if="form.cmStaffQas && form.cmStaffQas.length>0">
+ <el-col :span="24">
+ <el-form-item label="资格证书">
+ <el-table :data="form.cmStaffQas" border>
+ <el-table-column label="证书名称" align="center" prop="name"/>
+ <el-table-column label="资格类型" align="center" prop="qualificationType" />
+ <el-table-column label="作业类别" align="center" prop="jobCategory" />
+ <el-table-column label="操作项目" align="center" prop="operationItems" />
+ <el-table-column label="人员" align="center" prop="staffId" />
+ <el-table-column label="有效期至" align="center" prop="expiredTime"/>
+ </el-table>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row v-if="form.cmStaffTrains && form.cmStaffTrains.length>0">
+ <el-col :span="24">
+ <el-form-item label="培训经历">
+ <el-table :data="form.cmStaffTrains" border>
+ <el-table-column label="培训时间" align="center" prop="startTime">
+ <template #default="scope">
+ {{scope.row.startTime.substring(0,7) + '~' + scope.row.endTime.substring(0,7)}}
+ </template>
+ </el-table-column>
+ <el-table-column label="培训单位" align="center" prop="unit" />
+ <el-table-column label="所属批次" align="center" prop="batch" />
+ <el-table-column label="科目" align="center" prop="subject" />
+ </el-table>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row v-if="form.cmStaffExams && form.cmStaffExams.length>0">
+ <el-col :span="24">
+ <el-form-item label="考试经历">
+ <el-table :data="form.cmStaffExams" border>
+ <el-table-column label="考试时间" align="center" prop="examTime"/>
+ <el-table-column label="考试中心" align="center" prop="examCenter"/>
+ <el-table-column label="科目" align="center" prop="subject"/>
+ <el-table-column label="考试结果" align="center" prop="result">
+ <template #default="scope">
+ {{scope.row.result == 0 ? '通过' : '未通过'}}
+ </template>
+ </el-table-column>
+ </el-table>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </template>
</el-form>
<div style="width: 100%;padding-bottom: 30px;display: flex;justify-content: center">
+ <el-button @click="open = false">取消</el-button>
<el-button v-if="title == '查看人员'" type="primary" @click="open = false">确认</el-button>
<el-button v-else type="primary" @click="submit()">提交</el-button>
</div>
@@ -92,7 +173,7 @@
import { verifySimplePhone, verifyIdCard } from "@/utils/validate";
export default {
name: "peopleDialog",
- dicts: ['sys_nation_code'],
+ dicts: ['sys_nation_code','sys_highest_education_code'],
data() {
var validatePass = (rule, value, callback) => {
if (this.fileList.length == 0) {
@@ -154,15 +235,11 @@
},
created() {
const t = this
- const width = document.documentElement.clientWidth
- if(width < 750){t.labelPosition = 'top'}
},
methods: {
openDialog(val,type){
const t = this
t.fileList = []
- const width = document.documentElement.clientWidth
- if(width < 750){this.labelPosition = 'top'}
t.open = true
if(type == 'add'){
t.title = '新增人员'
@@ -181,26 +258,46 @@
if(type == 'edit'){
t.title = '编辑人员'
t.disable = false
+ if(val){
+ for(let i in val){
+ if(t.isValidKey(i,this.form)){
+ t.form[i] = val[i]
+ }
+ }
+ t.form.sex = Number(t.form.sex)
+ // 仅限单张图片处理
+ t.form.photoAttachment = val.photoAttachment.id
+ let file = {
+ name: val.photoAttachment.fileName,
+ url: process.env.VUE_APP_BASE_API + val.photoAttachment.fileUrl
+ }
+ t.fileList.push(file)
+ }
}else{
t.title = '查看人员'
t.disable = true
- }
- if(val){
- for(let i in val){
- if(t.isValidKey(i,this.form)){
- t.form[i] = val[i]
+ if(val){
+ for(let i in val){
+ if(t.isValidKey(i,this.form)){
+ t.form[i] = val[i]
+ }
}
+ t.form.sex = Number(t.form.sex)
+ t.form.violationRegistrationVOS = val.violationRegistrationVOS
+ t.form.cmStaffResumes = val.cmStaffResumes
+ t.form.cmStaffQas = val.cmStaffQas
+ t.form.cmStaffTrains = val.cmStaffTrains
+ t.form.cmStaffExams = val.cmStaffExams
+ // 仅限单张图片处理
+ t.form.photoAttachment = val.photoAttachment.id
+ let file = {
+ name: val.photoAttachment.fileName,
+ url: process.env.VUE_APP_BASE_API + val.photoAttachment.fileUrl
+ }
+ t.fileList.push(file)
}
- t.form.sex = Number(t.form.sex)
- // 仅限单张图片处理
- t.form.photoAttachment = val.photoAttachment.id
- let file = {
- name: val.photoAttachment.fileName,
- url: process.env.VUE_APP_BASE_API + val.photoAttachment.fileUrl
- }
- t.fileList.push(file)
+ console.log(t.form,'form')
}
- console.log(t.fileList,'fileList1')
}
},
isValidKey(key,obj){
@@ -308,9 +405,6 @@
})
}
})
- },
- changeSource(num){
- this.form.source = num
}
}
};
diff --git a/src/views/coalMine/cPeopleManage/components/trainDialog.vue b/src/views/coalMine/cPeopleManage/components/trainDialog.vue
index f94aee3..1323920 100644
--- a/src/views/coalMine/cPeopleManage/components/trainDialog.vue
+++ b/src/views/coalMine/cPeopleManage/components/trainDialog.vue
@@ -21,9 +21,9 @@
{{scope.row.startTime.substring(0,7) + '~' + scope.row.endTime.substring(0,7)}}
</template>
</el-table-column>
- <el-table-column label="培训单位" align="center" prop="unit" />
- <el-table-column label="所属批次" align="center" prop="batch" />
- <el-table-column label="科目" align="center" prop="subject" />
+ <el-table-column label="培训单位" align="center" prop="unit"/>
+ <el-table-column label="所属批次" align="center" prop="batch"/>
+ <el-table-column label="科目" align="center" prop="subject"/>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-button
diff --git a/src/views/coalMine/cPeopleManage/index.vue b/src/views/coalMine/cPeopleManage/index.vue
index 9071ba1..39cf608 100644
--- a/src/views/coalMine/cPeopleManage/index.vue
+++ b/src/views/coalMine/cPeopleManage/index.vue
@@ -51,7 +51,11 @@
{{getNationName(scope.row.nationCode)}}
</template>
</el-table-column>
- <el-table-column label="最高学历" align="center" prop="eduLevel"/>
+ <el-table-column label="最高学历" align="center" prop="eduLevel">
+ <template #default="scope">
+ {{getDegreeName(scope.row.eduLevel)}}
+ </template>
+ </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>
@@ -114,7 +118,7 @@
import { getToken } from "@/utils/auth";
export default {
name: "cPeopleManage",
- dicts: ['sys_nation_code'],
+ dicts: ['sys_nation_code','sys_highest_education_code'],
components: { peopleDialog, experienceDialog, certDialog, trainDialog, examDialog },
data() {
return {
@@ -155,7 +159,15 @@
if(obj){
return obj.label
}else{
- return '无'
+ return '未知'
+ }
+ },
+ getDegreeName(code){
+ let obj = JSON.parse(JSON.stringify(this.dict.type.sys_highest_education_code)).find(i=>i.value == code)
+ if(obj){
+ return obj.label
+ }else{
+ return '未知'
}
},
openPeople(data,type){
@@ -203,11 +215,13 @@
this.getPage()
},
resetQuery(){
- this.$refs['queryForm'].resetFields()
+ this.queryParams = {
+ code: '',
+ name: '',
+ pageNum: 1,
+ pageSize: 10
+ }
this.getPage()
- },
- handleAdd(){
-
},
viewFile(file){
axios.get(process.env.VUE_APP_BASE_API + file.fileUrl,{headers:{'Content-Type': 'application/json','Authorization': "Bearer " + getToken()},responseType: 'blob'}).then(res=>{
diff --git a/src/views/coalMine/cTeacherManage/cReviewer/components/reviewerDialog.vue b/src/views/coalMine/cTeacherManage/cReviewer/components/reviewerDialog.vue
new file mode 100644
index 0000000..14da9d4
--- /dev/null
+++ b/src/views/coalMine/cTeacherManage/cReviewer/components/reviewerDialog.vue
@@ -0,0 +1,638 @@
+<template>
+ <el-dialog :title="title" :visible.sync="open" width="50%" append-to-body>
+ <div class="main_form">
+ <el-form :model="form" :rules="rules" ref="ruleForm" label-width="200px" :label-position="labelPosition">
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="姓名" prop="name">
+ <el-input v-model="form.name" :readonly="disable"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="性别" prop="sex">
+ <el-radio-group v-model="form.sex" :disabled="disable">
+ <el-radio :label="0">男</el-radio>
+ <el-radio :label="1">女</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="身份证号" prop="code">
+ <el-input v-model="form.code" :readonly="disable"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="联系电话" prop="mobilePhone">
+ <el-input v-model="form.mobilePhone" :readonly="disable"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="职称" prop="jobTitle">
+ <el-input v-model="form.jobTitle" :readonly="disable"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="最高学历" prop="eduLevel">
+ <el-select v-model="form.eduLevel" placeholder="请选择" style="width: 100%" :disabled="disable">
+ <el-option
+ v-for="dict in dict.type.sys_highest_education_code"
+ :key="dict.value"
+ :label="dict.label"
+ :value="dict.value"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="资质到期" prop="expiredTime">
+ <el-date-picker
+ style="width: 100%"
+ v-model="form.expiredTime"
+ value-format="yyyy-MM-dd"
+ type="date"
+ :disabled="disable"
+ placeholder="选择日期">
+ </el-date-picker>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="在职情况" prop="status">
+ <el-radio-group v-model="form.status" :disabled="disable">
+ <el-radio label="0">正常</el-radio>
+ <el-radio label="1">停用</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="描述">
+ <el-input v-model="form.description" type="textarea" :autosize="{ minRows: 2}" :readonly="disable"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="证件照" prop="photoAttachment">
+ <el-upload
+ :disabled="disable"
+ action="#"
+ multiple
+ :limit="1"
+ :on-exceed="overLimit"
+ :auto-upload="false"
+ accept="image/*,.pdf"
+ :file-list="resumeList"
+ list-type="picture-card"
+ :before-upload="beforeAvatarUpload"
+ :on-change="resumeChange"
+ :on-preview="handlePreview"
+ :on-remove="(file,fileList)=>handleRemove(file,fileList,'证件照')">
+ <i class="el-icon-plus"></i>
+ </el-upload>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="资质" prop="qaAttachment">
+ <el-upload
+ :disabled="disable"
+ action=""
+ multiple
+ :limit="1"
+ :on-exceed="overLimit"
+ :auto-upload="false"
+ accept="image/*,.pdf"
+ list-type="picture-card"
+ :file-list="inventionList"
+ :before-upload="beforeAvatarUpload"
+ :on-change="inventChange"
+ :on-preview="handlePreview"
+ :on-remove="(file,fileList)=>handleRemove(file,fileList,'资质')">
+ <i class="el-icon-plus"></i>
+ </el-upload>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="工种详情" prop="operateTypes">
+ <el-table :data="form.operateTypes" border>
+ <el-table-column label="序号" type="index" align="center"/>
+ <el-table-column label="资格类型" align="center" prop="qualificationType" />
+ <el-table-column label="作业类别" align="center" prop="jobCategory" />
+ <el-table-column label="操作项目" align="center" prop="operationItems"/>
+ <el-table-column label="操作" align="center" class-name="small-padding fixed-width" v-if="disable == false">
+ <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" icon="el-icon-delete" @click="deleteItem(scope.index)" v-hasPermi="['system:experts:remove']">删除</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <el-button v-if="disable == false" @click="openEdit({},'add')" style="margin-top: 15px">新增</el-button>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <div style="width: 100%;padding-bottom: 30px;display: flex;justify-content: center" v-if="disable == false">
+ <el-button type="primary" @click="submit()">提交</el-button>
+ </div>
+ <el-dialog :visible.sync="dialogVisible" append-to-body>
+ <img width="100%" :src="dialogImageUrl" alt="">
+ </el-dialog>
+ <el-dialog :title="dialogTitle" :visible.sync="addVisible" width="50%" append-to-body>
+ <el-form :model="addForm" :rules="addRules" ref="addRuleForm" label-width="200px">
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="资格类型" prop="operate">
+ <el-cascader
+ v-model="addForm.operate"
+ :options="typeList"
+ style="width: 100%"
+ :props="{ expandTrigger: 'hover', value: 'id',label: 'name'}"></el-cascader>
+ </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="submitAdd()">提交</el-button>
+ </div>
+ </el-dialog>
+ </div>
+ </el-dialog>
+</template>
+
+<script>
+import { verifySimplePhone, verifyIdCard } from "@/utils/validate";
+import {getOperatePage} from "@/api/coalMine/operateType";
+import {addExaminer, editExaminer, uploadFile} from "@/api/coalMine/teacher";
+export default {
+ name: "teacherDialog",
+ dicts: ['sys_highest_education_code'],
+ data() {
+ // let validateTypes = (rule, value, callback) => {
+ // if (this.form.operateTypes.length == 0) {
+ // callback(new Error('请添加工种详情'));
+ // } else {
+ // callback();
+ // }
+ // }
+ let validateResume = (rule, value, callback) => {
+ if (this.resumeList.length == 0) {
+ callback(new Error('请上传证件照'));
+ } else {
+ callback();
+ }
+ }
+ let validateCert = (rule, value, callback) => {
+ if (this.inventionList.length == 0) {
+ callback(new Error('请上传资质证书'));
+ } else {
+ callback();
+ }
+ }
+ let validatePhone = (rule, value, callback)=>{
+ if(value === ''){
+ callback(new Error('请输入手机号'))
+ }else{
+ if(!verifySimplePhone(value)){
+ callback(new Error('手机号格式有误'))
+ }else{
+ callback()
+ }
+ }
+ }
+ let verifyId = (rule, value, callback)=>{
+ if(value === ''){
+ callback(new Error('请输入身份证号'))
+ }else{
+ if(!verifyIdCard(value)){
+ callback(new Error('身份证号格式有误'))
+ }else{
+ callback()
+ }
+ }
+ }
+ return {
+ title: '新增考评员',
+ open: false,
+ disable: false,
+ labelPosition: 'right',
+ form:{
+ id: null,
+ isCm: '1',
+ name:'',
+ sex:'',
+ code: '',
+ mobilePhone: '',
+ jobTitle: '',
+ eduLevel: '',
+ expiredTime: '',
+ status: '',
+ operateTypes: [],
+ photoAttachment: null,
+ qaAttachment: null,
+ description: '',
+ },
+ resumeList: [],
+ inventionList: [],
+ dialogImageUrl: '',
+ dialogVisible: false,
+ dialogTitle: '新增',
+ addVisible: false,
+ addForm: {
+ operate: [],
+ qualificationType: '',
+ jobCategory: '',
+ operationItems: '',
+ operateTypeId: null
+ },
+ typeList: [],
+ rules:{
+ name:[{ required: true, message: '请填写姓名', trigger: 'blur'}],
+ sex:[{ required: true, message: '请选择性别', trigger: 'blur'}],
+ code:[{ required: true, validator: verifyId, trigger: 'blur' }],
+ mobilePhone:[{ required: true, validator: validatePhone, trigger: 'blur' }],
+ // code:[{ required: true, message: '请填写身份证号', trigger: 'blur'}],
+ // mobilePhone:[{ required: true, message: '请填写联系方式', trigger: 'blur'}],
+ jobTitle: [{ required: true, message: '请填写职称', trigger: 'blur'}],
+ eduLevel: [{ required: true, message: '请选择最高学历', trigger: 'blur'}],
+ expiredTime: [{ required: true, message: '请选择到期时间', trigger: 'blur'}],
+ status: [{ required: true, message: '请选择在岗情况', trigger: 'blur'}],
+ // operateTypes: [{ required: true,validator: validateTypes, trigger: 'blur' }],
+ photoAttachment: [{ required: true,validator: validateResume, trigger: 'blur'}],
+ qaAttachment: [{ required: true,validator: validateCert, trigger: 'blur'}]
+ },
+ addRules:{
+ operate:[{ required: true, message: '请选择', trigger: 'blur' }]
+ }
+ };
+ },
+ created() {
+ const t = this
+ },
+ methods: {
+ openDialog(val,type){
+ this.resumeList = []
+ this.inventionList = []
+ if(type == 'add'){
+ this.title = '新增考评员'
+ this.disable = false
+ this.form = {
+ id: null,
+ isCm: '1',
+ name:'',
+ sex:'',
+ code: '',
+ mobilePhone: '',
+ jobTitle: '',
+ eduLevel: '',
+ expiredTime: '',
+ status: '',
+ operateTypes: [],
+ photoAttachment: null,
+ qaAttachment: null,
+ description: '',
+ }
+ }else{
+ if(type == 'edit'){
+ this.title = '编辑考评员'
+ this.disable = false
+ }else{
+ this.title = '查看考评员'
+ this.disable = true
+ }
+ if(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.form.photoAttachment = val.photoAttachment.id
+ this.form.qaAttachment = val.qaAttachment.id
+ this.resumeList.push({
+ name: val.photoAttachment.fileName,
+ url: process.env.VUE_APP_BASE_API + val.photoAttachment.fileUrl
+ })
+ this.inventionList.push({
+ name: val.qaAttachment.fileName,
+ url: process.env.VUE_APP_BASE_API + val.qaAttachment.fileUrl
+ })
+ if(!this.form.operateTypes){
+ this.form.operateTypes = []
+ }
+ console.log(this.form,'form')
+ }
+ this.open = true
+ },
+
+ isValidKey(key,obj){
+ return key in obj
+ },
+
+ openEdit(data,type){
+ this.getList()
+ if(type == 'add'){
+ this.dialogTitle = '新增'
+ this.addVisible = true
+ this.addForm = {
+ operate: [],
+ qualificationType: '',
+ jobCategory: '',
+ operationItems: '',
+ operateTypeId: null
+ }
+ }else{
+
+ }
+ },
+ async submitUpload() {
+ const { resumeList, inventionList, form } = this;
+ const uploadAndCollect = async (fileList, type) => {
+ if (fileList.length > 0 && fileList.find((file)=>file.raw)) {
+ for (const file of fileList) {
+ const formData = new FormData();
+ formData.append("file", file.raw);
+ formData.append("module", 'accountPath');
+ try {
+ const res = await uploadFile(formData);
+ if (res.code === 200) {
+ if (type === '证件照') {
+ form.photoAttachment = res.data.id;
+ }
+ if (type === '资质') {
+ form.qaAttachment = res.data.id;
+ }
+ } else {
+ this.$message.error('图片上传出错!');
+ }
+ } catch (error) {
+ this.$message.error('图片上传出错!');
+ }
+ }
+ }else{
+ return
+ }
+ };
+ const uploadPromises = [
+ uploadAndCollect(resumeList, '证件照'),
+ uploadAndCollect(inventionList, '资质')
+ ];
+ try {
+ await Promise.all(uploadPromises);
+ console.log(form, 'form1');
+ } catch (error) {
+ console.error('上传出错:', error);
+ }
+ },
+
+ async submit(){
+ this.$refs["ruleForm"].validate(async(valid) =>{
+ if(valid) {
+ await this.submitUpload()
+ if(this.title == '新增考评员'){
+ const {id,...data} = this.form
+ const res= await addExaminer(data)
+ if(res.code == 200){
+ this.$message({
+ type:'success',
+ message: res.msg
+ })
+ this.resumeList = []
+ this.inventionList = []
+ this.open = false
+ this.$emit('closeDialog')
+ }else{
+ this.$message({
+ type:'warning',
+ message: res.msg
+ })
+ }
+ }else{
+ const res= await editExaminer(this.form)
+ if(res.code == 200){
+ this.$message({
+ type:'success',
+ message: res.msg
+ })
+ this.fileList = []
+ this.open = false
+ this.$emit('closeDialog')
+ }else{
+ this.$message({
+ type:'warning',
+ message: res.msg
+ })
+ }
+ }
+ }else{
+ this.$message({
+ type:'warning',
+ message:'请完善必填信息'
+ })
+ }
+ })
+ },
+ deleteItem(index){
+ this.form.operateTypes.splice(index,1);
+ },
+ 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;
+ },
+
+ resumeChange(file, fileList) {
+ this.resumeList = fileList;
+ },
+ inventChange(file, fileList){
+ this.inventionList = fileList;
+ },
+ overLimit(){
+ this.$message({
+ type: 'warning',
+ message: '超出文件上传数量'
+ });
+ },
+ handlePreview(file) {
+ this.dialogImageUrl = file.url;
+ this.dialogVisible = true;
+ },
+ beforeAvatarUpload(file) {
+ const isLt5M = file.size / 1024 / 1024 < 5;
+ if (!isLt5M) {
+ this.$message.error('上传头像图片大小不能超过 5MB!');
+ }
+ return isLt5M;
+ },
+
+ handleRemove(file,fileList,type) {
+ if(type == '证件照'){
+ this.resumeList = fileList
+ }else{
+ this.inventionList = fileList
+ }
+ },
+ async submitAdd(){
+ this.$refs["addRuleForm"].validate(async(valid) =>{
+ if(valid) {
+ if(this.addForm.operate.length == 2){
+ this.addForm.qualificationType = this.findNameById(this.typeList,this.addForm.operate[0])
+ this.addForm.jobCategory = this.findNameById(this.typeList,this.addForm.operate[1])
+ this.addForm.operateTypeId = this.addForm.operate[1]
+ }
+ if(this.addForm.operate.length == 3){
+ this.addForm.qualificationType = this.findNameById(this.typeList,this.addForm.operate[0])
+ this.addForm.jobCategory = this.findNameById(this.typeList,this.addForm.operate[1])
+ this.addForm.operationItems = this.findNameById(this.typeList,this.addForm.operate[2])
+ this.addForm.operateTypeId = this.addForm.operate[2]
+ }
+ const {operate,...obj} = this.addForm
+ this.form.operateTypes.push(obj)
+ this.addVisible = false
+ }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
+ }
+ }
+};
+</script>
+
+<style scoped lang="scss">
+.home {
+ .main-title{
+ font-size: 24px;
+ font-weight: bolder;
+ text-align: center;
+ margin-bottom: 20px;
+ color: #333;
+ }
+ blockquote {
+ padding: 10px 20px;
+ margin: 0 0 20px;
+ font-size: 17.5px;
+ border-left: 5px solid #eee;
+ }
+ hr {
+ margin-top: 20px;
+ margin-bottom: 20px;
+ border: 0;
+ border-top: 1px solid #eee;
+ }
+ .col-item {
+ margin-bottom: 20px;
+ }
+
+ ul {
+ padding: 0;
+ margin: 0;
+ }
+
+ font-family: "open sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 13px;
+ color: #676a6c;
+ overflow-x: hidden;
+
+ ul {
+ list-style-type: none;
+ }
+
+ h4 {
+ margin-top: 0px;
+ }
+
+ h2 {
+ margin-top: 10px;
+ font-size: 26px;
+ font-weight: 100;
+ }
+
+ p {
+ margin-top: 10px;
+
+ b {
+ font-weight: 700;
+ }
+ }
+
+ .update-log {
+ ol {
+ display: block;
+ list-style-type: decimal;
+ margin-block-start: 1em;
+ margin-block-end: 1em;
+ margin-inline-start: 0;
+ margin-inline-end: 0;
+ padding-inline-start: 40px;
+ }
+ }
+}
+.avatar-uploader .el-upload {
+ border: 1px dashed #d9d9d9;
+ border-radius: 6px;
+ cursor: pointer;
+ position: relative;
+ overflow: hidden;
+}
+.avatar-uploader .el-upload:hover {
+ border-color: #409EFF;
+}
+.avatar-uploader-icon {
+ font-size: 28px;
+ color: #8c939d;
+ width: 178px;
+ height: 178px;
+ line-height: 178px;
+ text-align: center;
+}
+.avatar {
+ width: 178px;
+ height: 178px;
+ display: block;
+}
+</style>
+
diff --git a/src/views/coalMine/cTeacherManage/cReviewer/index.vue b/src/views/coalMine/cTeacherManage/cReviewer/index.vue
index ec5a418..4c57d21 100644
--- a/src/views/coalMine/cTeacherManage/cReviewer/index.vue
+++ b/src/views/coalMine/cTeacherManage/cReviewer/index.vue
@@ -1,27 +1,27 @@
<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-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-row :gutter="10" class="mb8">
<el-col :span="1.5">
@@ -30,90 +30,129 @@
plain
icon="el-icon-plus"
size="mini"
- @click="handleAdd"
+ @click="openDialog({},'add')"
v-hasPermi="['system:experts:add']"
>新增</el-button>
</el-col>
- <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+ <right-toolbar :showSearch.sync="showSearch" @queryTable="getPage"></right-toolbar>
</el-row>
- <el-table v-loading="loading" :data="expertList">
+ <el-table v-loading="loading" :data="dataList">
<el-table-column type="index" label="序号" width="55" align="center" />
<el-table-column label="姓名" align="center" prop="name" />
- <el-table-column label="性别" align="center" prop="name" />
- <el-table-column label="身份证号" align="center" prop="name" />
- <el-table-column label="最高学历" align="center" prop="degree" />
- <el-table-column label="职称" align="center" prop="job" />
- <el-table-column label="资质" align="center" prop="speciality" />
- <el-table-column label="资质有效期" align="center"/>
- <el-table-column label="描述" align="center"/>
- <el-table-column label="证件照" align="center"/>
- <el-table-column label="状态" align="center"/>
- <el-table-column label="工种详情" align="center"/>
- <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+ <el-table-column label="性别" align="center" prop="sex">
<template #default="scope">
- <el-button
- size="mini"
- type="text"
- icon="el-icon-edit"
- @click="handleUpdate(scope.row)"
- >编辑</el-button>
- <el-button
- size="mini"
- type="text"
- icon="el-icon-view"
- @click="handleView(scope.row)"
- >停用</el-button>
- <el-button
- size="mini"
- type="text"
- icon="el-icon-delete"
- @click="handleDelete(scope.row)"
- v-hasPermi="['system:experts:remove']"
- >删除</el-button>
+ {{ scope.row.sex == 0?'男':'女' }}
+ </template>
+ </el-table-column>
+ <el-table-column label="身份证号" align="center" prop="code" />
+ <el-table-column label="最高学历" align="center" prop="eduLevel">
+ <template #default="scope">
+ {{getDegreeName(scope.row.eduLevel)}}
+ </template>
+ </el-table-column>
+ <el-table-column label="职称" align="center" prop="jobTitle" />
+ <el-table-column label="资质" align="center" prop="photoPath">
+ <template #default="scope">
+ <el-button type="text" @click="viewFile(scope.row.qaAttachment)">预览</el-button>
+ </template>
+ </el-table-column>
+ <el-table-column label="资质有效期" align="center" prop="expiredTime"/>
+ <el-table-column label="描述" align="center" prop="description" />
+ <el-table-column label="证件照片" align="center" prop="photoPath">
+ <template #default="scope">
+ <el-button type="text" @click="viewFile(scope.row.photoAttachment)">预览</el-button>
+ </template>
+ </el-table-column>
+ <el-table-column label="状态" align="center" prop="status">
+ <template #default="scope">
+ <el-tag :type="scope.row.status === '0'? 'success' : 'danger' ">{{ scope.row.status == '0'?'正常':'停用' }}</el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column label="工种详情" align="center">
+ <template #default="scope">
+ <el-button size="mini" type="text" @click="openWorkType(scope.row)" v-if="scope.row.operateTypes && scope.row.operateTypes.length>0">查看</el-button>
+ <span v-else>无</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="300">
+ <template #default="scope">
+ <el-button size="mini" type="text" icon="el-icon-edit" @click="openDialog(scope.row,'edit')">编辑</el-button>
+ <el-button size="mini" type="text" icon="el-icon-view" @click="openDialog(scope.row,'view')">查看</el-button>
+ <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['system:experts:remove']">删除</el-button>
+ <el-switch size="mini" v-model="scope.row.status" style="margin-left: 12px" active-value="0" inactive-value="1" @change="handleAbort($event,scope.row)"></el-switch>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
- :page.sync="queryParams.pageIndex"
+ :page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
- @pagination="getList"
+ @pagination="getPage"
/>
+ <reviewerDialog ref="reviewerDialog" @closeDialog="resetQuery"></reviewerDialog>
+ <el-dialog title="工种详情" :visible.sync="typeVisible" width="50%" append-to-body>
+ <el-table :data="workType" border>
+ <el-table-column label="资格类型" align="center" prop="qualificationType"/>
+ <el-table-column label="作业类别" align="center" prop="jobCategory"/>
+ <el-table-column label="操作项目" align="center" prop="operationItems"/>
+ </el-table>
+ </el-dialog>
</div>
</template>
<script>
+import reviewerDialog from "@/views/coalMine/cTeacherManage/cReviewer/components/reviewerDialog";
+import {delExaminer, abortExaminer, getExaminerPage} from "@/api/coalMine/teacher";
+import axios from "axios";
+import {getToken} from "@/utils/auth";
+import {delPeople} from "@/api/coalMine/people";
+
export default {
name: "cTeacherManage",
- dicts: [],
- components: {},
+ dicts: ['sys_highest_education_code'],
+ components: { reviewerDialog },
data() {
return {
loading: false,
- single: true,
- multiple: true,
showSearch: true,
- addForm: false,
+ typeVisible: false,
+ workType: [],
+ dataList: [],
total: 0,
- expertTypes: [],
- expertList: [],
- queryParams: {},
- classiFy: [],
- form: {},
- rules: {
- classifyName: [
- { required: true, message: "分类名称不能为空", trigger: "blur" }
- ]
+ queryParams: {
+ pageNum: 1,
+ pageSize: 10,
+ isCm: '1'
}
};
},
created() {
-
+ const t = this
+ t.getPage()
},
methods: {
- getList(){
+ async getPage(){
+ this.loading = true
+ const res = await getExaminerPage(this.queryParams)
+ if(res.code == 200){
+ this.dataList = res.rows
+ this.total = res.total
+ }else{
+ this.$message({
+ message: res.msg,
+ type: 'warning'
+ })
+ }
+ this.loading = false
+ },
+ openDialog(data,type){
+ this.$refs.reviewerDialog.openDialog(data,type)
+ },
+ openWorkType(row){
+ this.workType = row.operateTypes
+ this.typeVisible = true
},
handleChange(){
@@ -122,11 +161,72 @@
},
resetQuery(){
-
+ this.queryParams = {
+ pageNum: 1,
+ pageSize: 10,
+ isCm: 1
+ }
+ this.getPage()
},
- handleAdd(){
+ viewFile(file){
+ axios.get(process.env.VUE_APP_BASE_API + file.fileUrl,{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)
+ } else {
+ this.$message.error('获取文件失败')
+ }
+ })
+ },
+ getDegreeName(code){
+ let obj = JSON.parse(JSON.stringify(this.dict.type.sys_highest_education_code)).find(i=>i.value == code)
+ if(obj){
+ return obj.label
+ }else{
+ return '未知'
+ }
+ },
+ async handleAbort(value,row){
+ const res = await abortExaminer({id: row.id,status: value})
+ if(res.code == 200){
+ this.$message({
+ type: 'success',
+ message: '状态变更成功!'
+ });
+ this.getPage()
+ }else {
+ this.$message({
+ type: 'warning',
+ message: res.msg
+ });
+ }
+ },
+ handleDelete(row){
+ this.$confirm('此操作将永久删除该条数据, 是否继续?', '提示', {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning'
+ }).then(async () => {
+ const res = await delExaminer(row.id)
+ if(res.code == 200){
+ this.$message({
+ type: 'success',
+ message: '删除成功!'
+ });
+ await this.getPage()
+ }else{
+ this.$message({
+ type: 'warning',
+ message: res.msg
+ });
+ }
+ }).catch(() => {
- }
+ });
+ },
}
};
</script>
diff --git a/src/views/coalMine/cTeacherManage/cTeacher/components/teacherDialog.vue b/src/views/coalMine/cTeacherManage/cTeacher/components/teacherDialog.vue
new file mode 100644
index 0000000..2748b0a
--- /dev/null
+++ b/src/views/coalMine/cTeacherManage/cTeacher/components/teacherDialog.vue
@@ -0,0 +1,638 @@
+<template>
+ <el-dialog :title="title" :visible.sync="open" width="50%" append-to-body>
+ <div class="main_form">
+ <el-form :model="form" :rules="rules" ref="ruleForm" label-width="200px" :label-position="labelPosition">
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="姓名" prop="name">
+ <el-input v-model="form.name" :readonly="disable"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="性别" prop="sex">
+ <el-radio-group v-model="form.sex" :disabled="disable">
+ <el-radio :label="0">男</el-radio>
+ <el-radio :label="1">女</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="身份证号" prop="code">
+ <el-input v-model="form.code" :readonly="disable"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="联系电话" prop="mobilePhone">
+ <el-input v-model="form.mobilePhone" :readonly="disable"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="职称" prop="jobTitle">
+ <el-input v-model="form.jobTitle" :readonly="disable"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="最高学历" prop="eduLevel">
+ <el-select v-model="form.eduLevel" placeholder="请选择" style="width: 100%" :disabled="disable">
+ <el-option
+ v-for="dict in dict.type.sys_highest_education_code"
+ :key="dict.value"
+ :label="dict.label"
+ :value="dict.value"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="资质到期" prop="expiredTime">
+ <el-date-picker
+ style="width: 100%"
+ v-model="form.expiredTime"
+ value-format="yyyy-MM-dd"
+ type="date"
+ :disabled="disable"
+ placeholder="选择日期">
+ </el-date-picker>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="在职情况" prop="status">
+ <el-radio-group v-model="form.status" :disabled="disable">
+ <el-radio label="0">正常</el-radio>
+ <el-radio label="1">停用</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="描述">
+ <el-input v-model="form.description" type="textarea" :autosize="{ minRows: 2}" :readonly="disable"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="证件照" prop="photoAttachment">
+ <el-upload
+ :disabled="disable"
+ action="#"
+ multiple
+ :limit="1"
+ :on-exceed="overLimit"
+ :auto-upload="false"
+ accept="image/*,.pdf"
+ :file-list="resumeList"
+ list-type="picture-card"
+ :before-upload="beforeAvatarUpload"
+ :on-change="resumeChange"
+ :on-preview="handlePreview"
+ :on-remove="(file,fileList)=>handleRemove(file,fileList,'证件照')">
+ <i class="el-icon-plus"></i>
+ </el-upload>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="资质" prop="qaAttachment">
+ <el-upload
+ :disabled="disable"
+ action=""
+ multiple
+ :limit="1"
+ :on-exceed="overLimit"
+ :auto-upload="false"
+ accept="image/*,.pdf"
+ list-type="picture-card"
+ :file-list="inventionList"
+ :before-upload="beforeAvatarUpload"
+ :on-change="inventChange"
+ :on-preview="handlePreview"
+ :on-remove="(file,fileList)=>handleRemove(file,fileList,'资质')">
+ <i class="el-icon-plus"></i>
+ </el-upload>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="工种详情" prop="operateTypes">
+ <el-table :data="form.operateTypes" border>
+ <el-table-column label="序号" type="index" align="center"/>
+ <el-table-column label="资格类型" align="center" prop="qualificationType" />
+ <el-table-column label="作业类别" align="center" prop="jobCategory" />
+ <el-table-column label="操作项目" align="center" prop="operationItems"/>
+ <el-table-column label="操作" align="center" class-name="small-padding fixed-width" v-if="disable == false">
+ <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" icon="el-icon-delete" @click="deleteItem(scope.index)" v-hasPermi="['system:experts:remove']">删除</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <el-button v-if="disable == false" @click="openEdit({},'add')" style="margin-top: 15px">新增</el-button>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <div style="width: 100%;padding-bottom: 30px;display: flex;justify-content: center" v-if="disable == false">
+ <el-button type="primary" @click="submit()">提交</el-button>
+ </div>
+ <el-dialog :visible.sync="dialogVisible" append-to-body>
+ <img width="100%" :src="dialogImageUrl" alt="">
+ </el-dialog>
+ <el-dialog :title="dialogTitle" :visible.sync="addVisible" width="50%" append-to-body>
+ <el-form :model="addForm" :rules="addRules" ref="addRuleForm" label-width="200px">
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="资格类型" prop="operate">
+ <el-cascader
+ v-model="addForm.operate"
+ :options="typeList"
+ style="width: 100%"
+ :props="{ expandTrigger: 'hover', value: 'id',label: 'name'}"></el-cascader>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <div style="width: 100%;padding-bottom: 30px;display: flex;justify-content: center" v-if="disable == false">
+ <el-button type="primary" @click="submitAdd()">提交</el-button>
+ </div>
+ </el-dialog>
+ </div>
+ </el-dialog>
+</template>
+
+<script>
+import { verifySimplePhone, verifyIdCard } from "@/utils/validate";
+import {getOperatePage} from "@/api/coalMine/operateType";
+import {addTeacher, editTeacher, uploadFile} from "@/api/coalMine/teacher";
+export default {
+ name: "teacherDialog",
+ dicts: ['sys_highest_education_code'],
+ data() {
+ // let validateTypes = (rule, value, callback) => {
+ // if (this.form.operateTypes.length == 0) {
+ // callback(new Error('请添加工种详情'));
+ // } else {
+ // callback();
+ // }
+ // }
+ let validateResume = (rule, value, callback) => {
+ if (this.resumeList.length == 0) {
+ callback(new Error('请上传证件照'));
+ } else {
+ callback();
+ }
+ }
+ let validateCert = (rule, value, callback) => {
+ if (this.inventionList.length == 0) {
+ callback(new Error('请上传资质证书'));
+ } else {
+ callback();
+ }
+ }
+ let validatePhone = (rule, value, callback)=>{
+ if(value === ''){
+ callback(new Error('请输入手机号'))
+ }else{
+ if(!verifySimplePhone(value)){
+ callback(new Error('手机号格式有误'))
+ }else{
+ callback()
+ }
+ }
+ }
+ let verifyId = (rule, value, callback)=>{
+ if(value === ''){
+ callback(new Error('请输入身份证号'))
+ }else{
+ if(!verifyIdCard(value)){
+ callback(new Error('身份证号格式有误'))
+ }else{
+ callback()
+ }
+ }
+ }
+ return {
+ title: '新增教师',
+ open: false,
+ disable: false,
+ labelPosition: 'right',
+ form:{
+ id: null,
+ isCm: '1',
+ name:'',
+ sex:'',
+ code: '',
+ mobilePhone: '',
+ jobTitle: '',
+ eduLevel: '',
+ expiredTime: '',
+ status: '',
+ operateTypes: [],
+ photoAttachment: null,
+ qaAttachment: null,
+ description: '',
+ },
+ resumeList: [],
+ inventionList: [],
+ dialogImageUrl: '',
+ dialogVisible: false,
+ dialogTitle: '新增',
+ addVisible: false,
+ addForm: {
+ operate: [],
+ qualificationType: '',
+ jobCategory: '',
+ operationItems: '',
+ operateTypeId: null
+ },
+ typeList: [],
+ rules:{
+ name:[{ required: true, message: '请填写姓名', trigger: 'blur'}],
+ sex:[{ required: true, message: '请选择性别', trigger: 'blur'}],
+ code:[{ required: true, validator: verifyId, trigger: 'blur' }],
+ mobilePhone:[{ required: true, validator: validatePhone, trigger: 'blur' }],
+ // code:[{ required: true, message: '请填写身份证号', trigger: 'blur'}],
+ // mobilePhone:[{ required: true, message: '请填写联系方式', trigger: 'blur'}],
+ jobTitle: [{ required: true, message: '请填写职称', trigger: 'blur'}],
+ eduLevel: [{ required: true, message: '请选择最高学历', trigger: 'blur'}],
+ expiredTime: [{ required: true, message: '请选择到期时间', trigger: 'blur'}],
+ status: [{ required: true, message: '请选择在岗情况', trigger: 'blur'}],
+ // operateTypes: [{ required: true,validator: validateTypes, trigger: 'blur' }],
+ photoAttachment: [{ required: true,validator: validateResume, trigger: 'blur'}],
+ qaAttachment: [{ required: true,validator: validateCert, trigger: 'blur'}]
+ },
+ addRules:{
+ operate:[{ required: true, message: '请选择', trigger: 'blur' }]
+ }
+ };
+ },
+ created() {
+ const t = this
+ },
+ methods: {
+ openDialog(val,type){
+ this.resumeList = []
+ this.inventionList = []
+ if(type == 'add'){
+ this.title = '新增教师'
+ this.disable = false
+ this.form = {
+ id: null,
+ isCm: '1',
+ name:'',
+ sex:'',
+ code: '',
+ mobilePhone: '',
+ jobTitle: '',
+ eduLevel: '',
+ expiredTime: '',
+ status: '',
+ operateTypes: [],
+ photoAttachment: null,
+ qaAttachment: null,
+ description: '',
+ }
+ }else{
+ if(type == 'edit'){
+ this.title = '编辑教师'
+ this.disable = false
+ }else{
+ this.title = '查看教师'
+ this.disable = true
+ }
+ if(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.form.photoAttachment = val.photoAttachment.id
+ this.form.qaAttachment = val.qaAttachment.id
+ this.resumeList.push({
+ name: val.photoAttachment.fileName,
+ url: process.env.VUE_APP_BASE_API + val.photoAttachment.fileUrl
+ })
+ this.inventionList.push({
+ name: val.qaAttachment.fileName,
+ url: process.env.VUE_APP_BASE_API + val.qaAttachment.fileUrl
+ })
+ if(!this.form.operateTypes){
+ this.form.operateTypes = []
+ }
+ console.log(this.form,'form')
+ }
+ this.open = true
+ },
+
+ isValidKey(key,obj){
+ return key in obj
+ },
+
+ openEdit(data,type){
+ this.getList()
+ if(type == 'add'){
+ this.dialogTitle = '新增'
+ this.addVisible = true
+ this.addForm = {
+ operate: [],
+ qualificationType: '',
+ jobCategory: '',
+ operationItems: '',
+ operateTypeId: null
+ }
+ }else{
+
+ }
+ },
+ async submitUpload() {
+ const { resumeList, inventionList, form } = this;
+ const uploadAndCollect = async (fileList, type) => {
+ if (fileList.length > 0 && fileList.find((file)=>file.raw)) {
+ for (const file of fileList) {
+ const formData = new FormData();
+ formData.append("file", file.raw);
+ formData.append("module", 'accountPath');
+ try {
+ const res = await uploadFile(formData);
+ if (res.code === 200) {
+ if (type === '证件照') {
+ form.photoAttachment = res.data.id;
+ }
+ if (type === '资质') {
+ form.qaAttachment = res.data.id;
+ }
+ } else {
+ this.$message.error('图片上传出错!');
+ }
+ } catch (error) {
+ this.$message.error('图片上传出错!');
+ }
+ }
+ }else{
+ return
+ }
+ };
+ const uploadPromises = [
+ uploadAndCollect(resumeList, '证件照'),
+ uploadAndCollect(inventionList, '资质')
+ ];
+ try {
+ await Promise.all(uploadPromises);
+ console.log(form, 'form1');
+ } catch (error) {
+ console.error('上传出错:', error);
+ }
+ },
+
+ async submit(){
+ this.$refs["ruleForm"].validate(async(valid) =>{
+ if(valid) {
+ await this.submitUpload()
+ if(this.title == '新增教师'){
+ const {id,...data} = this.form
+ const res= await addTeacher(data)
+ if(res.code == 200){
+ this.$message({
+ type:'success',
+ message: res.msg
+ })
+ this.resumeList = []
+ this.inventionList = []
+ this.open = false
+ this.$emit('closeDialog')
+ }else{
+ this.$message({
+ type:'warning',
+ message: res.msg
+ })
+ }
+ }else{
+ const res= await editTeacher(this.form)
+ if(res.code == 200){
+ this.$message({
+ type:'success',
+ message: res.msg
+ })
+ this.fileList = []
+ this.open = false
+ this.$emit('closeDialog')
+ }else{
+ this.$message({
+ type:'warning',
+ message: res.msg
+ })
+ }
+ }
+ }else{
+ this.$message({
+ type:'warning',
+ message:'请完善必填信息'
+ })
+ }
+ })
+ },
+ deleteItem(index){
+ this.form.operateTypes.splice(index,1);
+ },
+ 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;
+ },
+
+ resumeChange(file, fileList) {
+ this.resumeList = fileList;
+ },
+ inventChange(file, fileList){
+ this.inventionList = fileList;
+ },
+ overLimit(){
+ this.$message({
+ type: 'warning',
+ message: '超出文件上传数量'
+ });
+ },
+ handlePreview(file) {
+ this.dialogImageUrl = file.url;
+ this.dialogVisible = true;
+ },
+ beforeAvatarUpload(file) {
+ const isLt5M = file.size / 1024 / 1024 < 5;
+ if (!isLt5M) {
+ this.$message.error('上传头像图片大小不能超过 5MB!');
+ }
+ return isLt5M;
+ },
+
+ handleRemove(file,fileList,type) {
+ if(type == '证件照'){
+ this.resumeList = fileList
+ }else{
+ this.inventionList = fileList
+ }
+ },
+ async submitAdd(){
+ this.$refs["addRuleForm"].validate(async(valid) =>{
+ if(valid) {
+ if(this.addForm.operate.length == 2){
+ this.addForm.qualificationType = this.findNameById(this.typeList,this.addForm.operate[0])
+ this.addForm.jobCategory = this.findNameById(this.typeList,this.addForm.operate[1])
+ this.addForm.operateTypeId = this.addForm.operate[1]
+ }
+ if(this.addForm.operate.length == 3){
+ this.addForm.qualificationType = this.findNameById(this.typeList,this.addForm.operate[0])
+ this.addForm.jobCategory = this.findNameById(this.typeList,this.addForm.operate[1])
+ this.addForm.operationItems = this.findNameById(this.typeList,this.addForm.operate[2])
+ this.addForm.operateTypeId = this.addForm.operate[2]
+ }
+ const {operate,...obj} = this.addForm
+ this.form.operateTypes.push(obj)
+ this.addVisible = false
+ }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
+ }
+ }
+};
+</script>
+
+<style scoped lang="scss">
+.home {
+ .main-title{
+ font-size: 24px;
+ font-weight: bolder;
+ text-align: center;
+ margin-bottom: 20px;
+ color: #333;
+ }
+ blockquote {
+ padding: 10px 20px;
+ margin: 0 0 20px;
+ font-size: 17.5px;
+ border-left: 5px solid #eee;
+ }
+ hr {
+ margin-top: 20px;
+ margin-bottom: 20px;
+ border: 0;
+ border-top: 1px solid #eee;
+ }
+ .col-item {
+ margin-bottom: 20px;
+ }
+
+ ul {
+ padding: 0;
+ margin: 0;
+ }
+
+ font-family: "open sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 13px;
+ color: #676a6c;
+ overflow-x: hidden;
+
+ ul {
+ list-style-type: none;
+ }
+
+ h4 {
+ margin-top: 0px;
+ }
+
+ h2 {
+ margin-top: 10px;
+ font-size: 26px;
+ font-weight: 100;
+ }
+
+ p {
+ margin-top: 10px;
+
+ b {
+ font-weight: 700;
+ }
+ }
+
+ .update-log {
+ ol {
+ display: block;
+ list-style-type: decimal;
+ margin-block-start: 1em;
+ margin-block-end: 1em;
+ margin-inline-start: 0;
+ margin-inline-end: 0;
+ padding-inline-start: 40px;
+ }
+ }
+}
+.avatar-uploader .el-upload {
+ border: 1px dashed #d9d9d9;
+ border-radius: 6px;
+ cursor: pointer;
+ position: relative;
+ overflow: hidden;
+}
+.avatar-uploader .el-upload:hover {
+ border-color: #409EFF;
+}
+.avatar-uploader-icon {
+ font-size: 28px;
+ color: #8c939d;
+ width: 178px;
+ height: 178px;
+ line-height: 178px;
+ text-align: center;
+}
+.avatar {
+ width: 178px;
+ height: 178px;
+ display: block;
+}
+</style>
+
diff --git a/src/views/coalMine/cTeacherManage/cTeacher/index.vue b/src/views/coalMine/cTeacherManage/cTeacher/index.vue
index ec5a418..8690e03 100644
--- a/src/views/coalMine/cTeacherManage/cTeacher/index.vue
+++ b/src/views/coalMine/cTeacherManage/cTeacher/index.vue
@@ -1,27 +1,27 @@
<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-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-row :gutter="10" class="mb8">
<el-col :span="1.5">
@@ -30,46 +30,56 @@
plain
icon="el-icon-plus"
size="mini"
- @click="handleAdd"
+ @click="openDialog({},'add')"
v-hasPermi="['system:experts:add']"
>新增</el-button>
</el-col>
- <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+ <right-toolbar :showSearch.sync="showSearch" @queryTable="getPage"></right-toolbar>
</el-row>
- <el-table v-loading="loading" :data="expertList">
+ <el-table v-loading="loading" :data="dataList">
<el-table-column type="index" label="序号" width="55" align="center" />
<el-table-column label="姓名" align="center" prop="name" />
- <el-table-column label="性别" align="center" prop="name" />
- <el-table-column label="身份证号" align="center" prop="name" />
- <el-table-column label="最高学历" align="center" prop="degree" />
- <el-table-column label="职称" align="center" prop="job" />
- <el-table-column label="资质" align="center" prop="speciality" />
- <el-table-column label="资质有效期" align="center"/>
- <el-table-column label="描述" align="center"/>
- <el-table-column label="证件照" align="center"/>
- <el-table-column label="状态" align="center"/>
- <el-table-column label="工种详情" align="center"/>
- <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+ <el-table-column label="性别" align="center" prop="sex">
<template #default="scope">
- <el-button
- size="mini"
- type="text"
- icon="el-icon-edit"
- @click="handleUpdate(scope.row)"
- >编辑</el-button>
- <el-button
- size="mini"
- type="text"
- icon="el-icon-view"
- @click="handleView(scope.row)"
- >停用</el-button>
- <el-button
- size="mini"
- type="text"
- icon="el-icon-delete"
- @click="handleDelete(scope.row)"
- v-hasPermi="['system:experts:remove']"
- >删除</el-button>
+ {{ scope.row.sex == 0?'男':'女' }}
+ </template>
+ </el-table-column>
+ <el-table-column label="身份证号" align="center" prop="code" />
+ <el-table-column label="最高学历" align="center" prop="eduLevel">
+ <template #default="scope">
+ {{getDegreeName(scope.row.eduLevel)}}
+ </template>
+ </el-table-column>
+ <el-table-column label="职称" align="center" prop="jobTitle" />
+ <el-table-column label="资质" align="center" prop="photoPath">
+ <template #default="scope">
+ <el-button type="text" @click="viewFile(scope.row.qaAttachment)">预览</el-button>
+ </template>
+ </el-table-column>
+ <el-table-column label="资质有效期" align="center" prop="expiredTime"/>
+ <el-table-column label="描述" align="center" prop="description" />
+ <el-table-column label="证件照片" align="center" prop="photoPath">
+ <template #default="scope">
+ <el-button type="text" @click="viewFile(scope.row.photoAttachment)">预览</el-button>
+ </template>
+ </el-table-column>
+ <el-table-column label="状态" align="center" prop="status">
+ <template #default="scope">
+ <el-tag :type="scope.row.status === '0'? 'success' : 'danger' ">{{ scope.row.status == '0'?'正常':'停用' }}</el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column label="工种详情" align="center">
+ <template #default="scope">
+ <el-button size="mini" type="text" @click="openWorkType(scope.row)" v-if="scope.row.operateTypes && scope.row.operateTypes.length>0">查看</el-button>
+ <span v-else>无</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="300">
+ <template #default="scope">
+ <el-button size="mini" type="text" icon="el-icon-edit" @click="openDialog(scope.row,'edit')">编辑</el-button>
+ <el-button size="mini" type="text" icon="el-icon-view" @click="openDialog(scope.row,'view')">查看</el-button>
+ <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['system:experts:remove']">删除</el-button>
+ <el-switch size="mini" v-model="scope.row.status" style="margin-left: 12px" active-value="0" inactive-value="1" @change="handleAbort($event,scope.row)"></el-switch>
</template>
</el-table-column>
</el-table>
@@ -78,42 +88,71 @@
:total="total"
:page.sync="queryParams.pageIndex"
:limit.sync="queryParams.pageSize"
- @pagination="getList"
+ @pagination="getPage"
/>
+ <teacherDialog ref="teacherDialog" @closeDialog="resetQuery"></teacherDialog>
+ <el-dialog title="工种详情" :visible.sync="typeVisible" width="50%" append-to-body>
+ <el-table :data="workType" border>
+ <el-table-column label="资格类型" align="center" prop="qualificationType"/>
+ <el-table-column label="作业类别" align="center" prop="jobCategory"/>
+ <el-table-column label="操作项目" align="center" prop="operationItems"/>
+ </el-table>
+ </el-dialog>
</div>
</template>
<script>
+import teacherDialog from "@/views/coalMine/cTeacherManage/cTeacher/components/teacherDialog";
+import {delTeacher, getTeacherPage, abortTeacher} from "@/api/coalMine/teacher";
+import axios from "axios";
+import {getToken} from "@/utils/auth";
+import {delPeople} from "@/api/coalMine/people";
+
export default {
name: "cTeacherManage",
- dicts: [],
- components: {},
+ dicts: ['sys_highest_education_code'],
+ components: { teacherDialog },
data() {
return {
loading: false,
- single: true,
- multiple: true,
showSearch: true,
- addForm: false,
+ typeVisible: false,
+ workType: [],
+ dataList: [],
total: 0,
- expertTypes: [],
- expertList: [],
- queryParams: {},
- classiFy: [],
- form: {},
- rules: {
- classifyName: [
- { required: true, message: "分类名称不能为空", trigger: "blur" }
- ]
+ queryParams: {
+ pageNum: 1,
+ pageSize: 10,
+ isCm: '1'
}
};
},
created() {
-
+ const t = this
+ t.getPage()
},
methods: {
- getList(){
+ async getPage(){
+ this.loading = true
+ const res = await getTeacherPage(this.queryParams)
+ if(res.code == 200){
+ this.dataList = res.rows
+ this.total = res.total
+ }else{
+ this.$message({
+ message: res.msg,
+ type: 'warning'
+ })
+ }
+ this.loading = false
+ },
+ openDialog(data,type){
+ this.$refs.teacherDialog.openDialog(data,type)
+ },
+ openWorkType(row){
+ this.workType = row.operateTypes
+ this.typeVisible = true
},
handleChange(){
@@ -122,11 +161,72 @@
},
resetQuery(){
-
+ this.queryParams = {
+ pageNum: 1,
+ pageSize: 10,
+ isCm: 1
+ }
+ this.getPage()
},
- handleAdd(){
+ viewFile(file){
+ axios.get(process.env.VUE_APP_BASE_API + file.fileUrl,{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)
+ } else {
+ this.$message.error('获取文件失败')
+ }
+ })
+ },
+ getDegreeName(code){
+ let obj = JSON.parse(JSON.stringify(this.dict.type.sys_highest_education_code)).find(i=>i.value == code)
+ if(obj){
+ return obj.label
+ }else{
+ return '未知'
+ }
+ },
+ async handleAbort(value,row){
+ const res = await abortTeacher({id: row.id,status: value})
+ if(res.code == 200){
+ this.$message({
+ type: 'success',
+ message: '状态变更成功!'
+ });
+ this.getPage()
+ }else {
+ this.$message({
+ type: 'warning',
+ message: res.msg
+ });
+ }
+ },
+ handleDelete(row){
+ this.$confirm('此操作将永久删除该条数据, 是否继续?', '提示', {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning'
+ }).then(async () => {
+ const res = await delTeacher(row.id)
+ if(res.code == 200){
+ this.$message({
+ type: 'success',
+ message: '删除成功!'
+ });
+ await this.getPage()
+ }else{
+ this.$message({
+ type: 'warning',
+ message: res.msg
+ });
+ }
+ }).catch(() => {
- }
+ });
+ },
}
};
</script>
diff --git a/src/views/coalMine/cViolationRegistration/components/addDialog.vue b/src/views/coalMine/cViolationRegistration/components/addDialog.vue
deleted file mode 100644
index 4dbc23b..0000000
--- a/src/views/coalMine/cViolationRegistration/components/addDialog.vue
+++ /dev/null
@@ -1,119 +0,0 @@
-<template>
- <el-dialog
- :title="dialogStatus==='add'?'新增填报':''"
- :visible.sync="dialogVisible"
- :modal-append-to-body="false"
- :close-on-click-modal="false"
- width="50%"
- :before-close="handleClose"
- >
- <el-form ref="dataForm" :model="dataForm" :rules="rules" label-position="right" label-width="150px" style="padding-right: 50px" element-loading-text="保存中...">
- <el-form-item label="身份证号:" prop="idCard">
- <el-input v-model.trim="dataForm.idCard"/>
- </el-form-item>
- <el-form-item label="IC卡编号:" prop="iCCard">
- <el-input v-model.trim="dataForm.iCCard"/>
- </el-form-item>
- <el-form-item label="电子证号:" prop="remark">
- <el-input v-model.trim="dataForm.remark"/>
- </el-form-item>
- <el-form-item label="违章日期:" prop="remark">
- <el-date-picker
- v-model="dataForm.data"
- type="date"
- format="yyyy-MM-dd"
- value-format="yyyy-MM-dd"
- placeholder="选择日期">
- </el-date-picker>
- </el-form-item>
- <el-form-item label="姓名:" prop="remark">
- <el-input v-model.trim="dataForm.remark"/>
- </el-form-item>
- <el-form-item label="所属单位:" prop="remark">
- <el-input v-model.trim="dataForm.remark"/>
- </el-form-item>
- <el-form-item label="操作类型:" prop="remark">
- <el-cascader
- v-model="value"
- :options="options"
- @change="handleChange">
- </el-cascader>
- </el-form-item>
- <el-form-item label="图片上传:" prop="remark">
- <el-upload
- action="https://jsonplaceholder.typicode.com/posts/"
- list-type="picture-card"
- :on-preview="handlePictureCardPreview"
- :on-remove="handleRemove">
- <i class="el-icon-plus"></i>
- </el-upload>
- <el-dialog :visible.sync="dialogVisibleImg" :modal-append-to-body="false">
- <img width="100%" :src="dialogImageUrl" alt="">
- </el-dialog>
- </el-form-item>
- <el-form-item label="违章描述:" prop="remark">
- <el-input type="textarea" v-model.trim="dataForm.remark"/>
- </el-form-item>
- </el-form>
- <span slot="footer" class="dialog-footer">
- <el-button @click="handleClose">取 消</el-button>
- <el-button type="primary" @click="onSubmit">确 定</el-button>
- </span>
- </el-dialog>
-</template>
-
-<script >
-export default {
- name: 'addUser',
- components: {
- },
- data() {
- return {
- dialogVisible: false,
- dialogStatus: '',
- dialogImageUrl: '',
- dialogVisibleImg: false,
- rules: {
- name: [{ required: true, message: '身份证号', trigger: 'blur' }],
- },
- dataForm: {}
- }
- },
- created() {
-
- },
- methods: {
- handleRemove(file, fileList) {
- console.log(file, fileList);
- },
- handlePictureCardPreview(file) {
- this.dialogImageUrl = file.url;
- this.dialogVisibleImg = true;
- },
- openDialog (type, data) {
- this.resetDataForm();
- this.dialogVisible = true;
- this.dialogStatus = type;
- this.$nextTick(() => {
- this.$refs['dataForm'].clearValidate()
- })
- },
- handleClose() {
- this.dialogVisible = false;
- this.$emit("getList");
- },
- onSubmit() {
- this.$emit("getList");
- this.dialogVisible = false;
- },
- resetDataForm() {
- this.dataForm = {
- }
- },
- }
-}
-
-</script>
-<style scoped>
-
-</style>
diff --git a/src/views/coalMine/cViolationRegistration/components/violationDialog.vue b/src/views/coalMine/cViolationRegistration/components/violationDialog.vue
new file mode 100644
index 0000000..803c02e
--- /dev/null
+++ b/src/views/coalMine/cViolationRegistration/components/violationDialog.vue
@@ -0,0 +1,312 @@
+<template>
+ <el-dialog
+ :title="title"
+ :visible.sync="open"
+ append-to-body
+ width="50%"
+ :before-close="handleClose"
+ >
+ <el-form ref="ruleForm" :model="form" :rules="rules" label-position="right" label-width="150px" style="padding-right: 50px" element-loading-text="保存中...">
+ <el-form-item label="姓名:" prop="name">
+ <el-input v-model.trim="form.name" :readonly="disable"/>
+ </el-form-item>
+ <el-form-item label="身份证号:" prop="idCard">
+ <el-input v-model.trim="form.idCard" :readonly="disable"/>
+ </el-form-item>
+ <el-form-item label="IC卡编号:" prop="icNum">
+ <el-input v-model.trim="form.icNum" :readonly="disable"/>
+ </el-form-item>
+ <el-form-item label="电子证号:" prop="electNum">
+ <el-input v-model.trim="form.electNum" :readonly="disable"/>
+ </el-form-item>
+ <el-form-item label="所属单位:" prop="dept">
+ <el-input v-model.trim="form.dept" :readonly="disable"/>
+ </el-form-item>
+ <el-form-item label="违章日期:" prop="violationTime">
+ <el-date-picker
+ v-model="form.violationTime"
+ type="date"
+ format="yyyy-MM-dd"
+ value-format="yyyy-MM-dd 00:00:00"
+ placeholder="选择日期"
+ :disabled="disable">
+ </el-date-picker>
+ </el-form-item>
+ <el-form-item label="操作类型" prop="operateTypeId">
+ <el-cascader
+ v-model="form.operateTypeId"
+ :options="typeList"
+ :disabled="disable"
+ :show-all-levels="false"
+ :props="{ expandTrigger: 'hover', value: 'id',label: 'name',emitPath:false}"></el-cascader>
+ </el-form-item>
+ <el-form-item label="图片上传" prop="violationPath">
+ <el-upload
+ action=""
+ :disabled="disable"
+ :auto-upload="false"
+ :limit="10"
+ multiple
+ accept="image/*,.pdf"
+ :file-list="fileList"
+ list-type="picture-card"
+ :before-upload="beforeAvatarUpload"
+ :on-change="avatorChange"
+ :on-preview="handlePreview"
+ :on-exceed="overLimit"
+ :on-remove="handleRemove">
+ <i class="el-icon-plus"></i>
+ </el-upload>
+ </el-form-item>
+ <el-form-item label="违章描述:" prop="remark">
+ <el-input type="textarea" v-model.trim="form.remark" :readonly="disable"/>
+ </el-form-item>
+ </el-form>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="handleClose">取消</el-button>
+ <el-button v-if="disable == false" type="primary" @click="submit">提交</el-button>
+ <el-button v-else type="primary" @click="handleClose">确定</el-button>
+ </span>
+ <el-dialog :visible.sync="dialogVisible" append-to-body>
+ <img width="100%" :src="dialogImageUrl" alt="">
+ </el-dialog>
+ </el-dialog>
+</template>
+
+<script >
+import {addViolation, editViolation, uploadFile} from "@/api/coalMine/violation";
+import {verifyIdCard} from "@/utils/validate";
+
+export default {
+ name: 'violationDialog',
+ components: {
+ },
+ props: ['typeList'],
+ data() {
+ let validatePass = (rule, value, callback) => {
+ if (this.fileList.length == 0) {
+ callback(new Error('请上传图片'));
+ } else {
+ callback();
+ }
+ }
+ let verifyId = (rule, value, callback)=>{
+ if(value === ''){
+ callback(new Error('请输入身份证号'))
+ }else{
+ if(!verifyIdCard(value)){
+ callback(new Error('身份证号格式有误'))
+ }else{
+ callback()
+ }
+ }
+ }
+ return {
+ disable: false,
+ title: '新增填报',
+ open: false,
+ form:{
+ id: null,
+ isCm: 1,
+ name: '',
+ idCard: '',
+ icNum: '',
+ electNum: '',
+ dept: '',
+ violationTime: '',
+ operateTypeId: null,
+ violationPath: '',
+ remark: ''
+ },
+ fileList: [],
+ dialogImageUrl: '',
+ dialogVisible: false,
+ rules:{
+ name:[{ required: true, message: '请填写姓名', trigger: 'blur' }],
+ // idCard: [{ required: true, validator: verifyId, trigger: 'blur' }],
+ idCard: [{ required: true, message: '请填写身份证号', trigger: 'blur' }],
+ dept: [{ required: true, message: '请填写所在单位', trigger: 'blur' }],
+ violationTime: [{ required: true, message: '请选择违章日期', trigger: 'blur' }],
+ violationPath: [{ required: true,validator: validatePass, trigger: 'blur' }],
+ operateTypeId: [{ required: true, message: '请选择操作类型', trigger: 'blur' }]
+ },
+ }
+ },
+ created() {
+
+ },
+ methods: {
+ openDialog (val,type) {
+ const t = this
+ t.fileList = []
+ t.open = true
+ if(type == 'add'){
+ t.title = '新增填报'
+ t.disable = false
+ t.form = {
+ id: null,
+ isCm: 1,
+ name: '',
+ idCard: '',
+ icNum: '',
+ electNum: '',
+ dept: '',
+ violationTime: '',
+ operateTypeId: null,
+ violationPath: '',
+ remark: ''
+ }
+ }else{
+ t.title = '查看'
+ t.disable = true
+ if(val){
+ for(let i in val){
+ if(t.isValidKey(i,this.form)){
+ t.form[i] = val[i]
+ }
+ }
+ const picList = val.violationPath.split(',')
+ t.fileList = picList.map((item,index)=>{
+ return {
+ name: index,
+ url: process.env.VUE_APP_BASE_API + item
+ }
+ })
+ }
+ }
+ },
+ isValidKey(key,obj){
+ return key in obj
+ },
+
+ avatorChange(file, fileList) {
+ this.fileList = fileList;
+ console.log(fileList,'list2')
+ },
+
+ overLimit(){
+ this.$message({
+ type: 'warning',
+ message: '超出文件上传数量'
+ });
+ },
+ handlePreview(file) {
+ this.dialogImageUrl = file.url;
+ this.dialogVisible = true;
+ },
+ beforeAvatarUpload(file) {
+ const isLt5M = file.size / 1024 / 1024 < 5;
+ if (!isLt5M) {
+ this.$message.error('上传头像图片大小不能超过 5MB!');
+ }
+ return isLt5M;
+ },
+ async submitUpload() {
+ const t = this;
+ // 创建一个数组来存储所有上传操作的 Promise
+ const uploadPromises = [];
+ // 定义一个函数来上传文件并将结果存入 resumeLink 数组
+ async function uploadAndCollect(fileList) {
+ if (fileList.length > 0) {
+ const resumeLink = [];
+ for (const file of fileList) {
+ const formData = new FormData();
+ formData.append("file", file.raw);
+ formData.append("module", 'accountPath');
+
+ const res = await uploadFile(formData);
+ if (res.code === 200) {
+ resumeLink.push(res.data.fileKey);
+ } else {
+ this.$message.error('图片上传出错!');
+ }
+ }
+ // 将收集到的文件链接设置到 this.form 中
+ t.form.violationPath = resumeLink.join(',')
+ return resumeLink;
+ }
+ return [];
+ }
+ // 依次执行上传操作并等待完成
+ uploadPromises.push(uploadAndCollect(t.fileList));
+ // 等待所有上传操作完成
+ await Promise.all(uploadPromises);
+ // 打印已更新的 this.form
+ console.log(t.form, 'form1');
+ },
+ handleRemove(file, fileList) {
+ console.log(file, fileList);
+ this.fileList = fileList
+ },
+ handleClose() {
+ this.open = false;
+ this.resetForm();
+ },
+ async submit(){
+ this.$refs["ruleForm"].validate(async(valid) =>{
+ if(valid) {
+ await this.submitUpload()
+ if(this.title == '新增填报'){
+ const {id,...data} = this.form
+ const res= await addViolation(data)
+ if(res.code == 200){
+ this.$message({
+ type:'success',
+ message: res.msg
+ })
+ this.fileList = []
+ this.open = false
+ this.$emit('getList')
+ }else{
+ this.$message({
+ type:'warning',
+ message: res.msg
+ })
+ }
+ }else{
+ const res= await editViolation(this.form)
+ if(res.code == 200){
+ this.$message({
+ type:'success',
+ message: res.msg
+ })
+ this.fileList = []
+ this.open = false
+ this.$emit('getList')
+ }else{
+ this.$message({
+ type:'warning',
+ message: res.msg
+ })
+ }
+ }
+ }else{
+ this.$message({
+ type:'warning',
+ message:'请完善必填信息'
+ })
+ }
+ })
+ },
+ resetForm() {
+ this.form = {
+ id: null,
+ isCm: 1,
+ name: '',
+ idCard: '',
+ icNum: '',
+ electNum: '',
+ dept: '',
+ violationTime: '',
+ operateTypeId: null,
+ violationPath: '',
+ remark: ''
+ }
+ },
+ }
+}
+
+</script>
+<style scoped>
+
+</style>
diff --git a/src/views/coalMine/cViolationRegistration/index.vue b/src/views/coalMine/cViolationRegistration/index.vue
index 5fcd874..0b35b9a 100644
--- a/src/views/coalMine/cViolationRegistration/index.vue
+++ b/src/views/coalMine/cViolationRegistration/index.vue
@@ -3,7 +3,7 @@
<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"
+ v-model="queryParams.name"
placeholder="请输入用户姓名"
clearable
@keyup.enter.native="handleQuery"
@@ -17,19 +17,20 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item>
- <el-form-item label="单位名称" prop="idCard">
+ <el-form-item label="单位名称" prop="dept">
<el-input
- v-model="queryParams.unit"
+ v-model="queryParams.dept"
placeholder="请输入单位名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
- <el-form-item label="作业类型">
+ <el-form-item label="操作类型">
<el-cascader
- v-model="classiFy"
- :options="expertTypes"
- :props="{ expandTrigger: 'hover', value: 'id',label: 'label'}"
+ v-model="queryParams.operateTypeId"
+ :options="typeList"
+ :show-all-levels="false"
+ :props="{ expandTrigger: 'hover', value: 'id',label: 'name',emitPath:false}"
@change="handleChange"></el-cascader>
</el-form-item>
<el-form-item>
@@ -44,27 +45,35 @@
type="primary"
plain
size="mini"
- @click="handleAdd"
+ @click="openViolation({},'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="expertList">
- <el-table-column label="发生时间" align="center" prop="name" />
+ <el-table v-loading="loading" :data="dataList">
+ <el-table-column label="发生时间" align="center" prop="violationTime" />
<el-table-column label="姓名" align="center" prop="name" />
- <el-table-column label="身份证号" align="center" prop="name" />
- <el-table-column label="IC/电子证编号" align="center" prop="phone"/>
- <el-table-column label="所属单位" align="center" prop="phone"/>
- <el-table-column label="作业种类" align="center" prop="phone"/>
+ <el-table-column label="身份证号" align="center" prop="idCard" />
+ <el-table-column label="IC卡编号" align="center" prop="icNum"/>
+ <el-table-column label="电子证编号" align="center" prop="electNum"/>
+ <el-table-column label="所属单位" align="center" prop="dept"/>
+ <el-table-column label="作业种类" align="center" prop="jobCategory"/>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-button
size="mini"
type="text"
icon="el-icon-view"
- @click="handleView(scope.row)"
+ @click="openViolation(scope.row,'view')"
>查看违规详情</el-button>
+<!-- <el-button-->
+<!-- size="mini"-->
+<!-- type="text"-->
+<!-- icon="el-icon-edit"-->
+<!-- @click="openViolation(scope.row,'edit')"-->
+<!-- v-hasPermi="['system:experts:remove']"-->
+<!-- >编辑</el-button>-->
<el-button
size="mini"
type="text"
@@ -78,62 +87,122 @@
<pagination
v-show="total>0"
:total="total"
- :page.sync="queryParams.pageIndex"
+ :page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
- <add-dialog ref="addDialogRef" @getList = "getList"></add-dialog>
+ <violation-dialog ref="violationDialog" @getList="getList" :typeList="typeList"></violation-dialog>
</div>
</template>
<script>
-import addDialog from "@/views/notCoalMine/nViolationRegistration/components/addDialog.vue";
+import violationDialog from "@/views/coalMine/cViolationRegistration/components/violationDialog.vue";
+import {delViolation, getViolationPage} from "@/api/coalMine/violation";
+import {getOperatePage} from "@/api/coalMine/operateType";
+import {delPeople} from "@/api/coalMine/people";
export default {
- name: "nViolationRegistration",
+ name: "cViolationRegistration",
dicts: [],
components: {
- addDialog
+ violationDialog
},
data() {
return {
- addDialogRef: '',
+ violationDialog: '',
loading: false,
- single: true,
- multiple: true,
showSearch: true,
- addForm: false,
+ dataList: [],
total: 0,
- expertTypes: [],
- expertList: [],
- queryParams: {},
- classiFy: [],
- form: {},
- rules: {
- classifyName: [
- { required: true, message: "分类名称不能为空", trigger: "blur" }
- ]
- }
+ typeList: [],
+ queryParams: {
+ name: '',
+ idCard:'',
+ dept: '',
+ operateTypeId: null,
+ isCm: 1,
+ pageNum: 1,
+ pageSize: 10
+ },
};
},
created() {
-
+ this.getList()
+ this.getTypeList()
},
methods: {
- getList(){
-
+ async getList(){
+ const t = this
+ t.loading = true
+ const res = await getViolationPage(t.queryParams)
+ if(res.code == 200){
+ t.dataList = res.rows
+ t.total = res.total
+ }else{
+ t.$message({
+ message: res.msg,
+ type: 'warning'
+ })
+ }
+ t.loading = false
+ },
+ async getTypeList() {
+ 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;
},
handleChange(){
},
- handleQuery(){
+ handleDelete(row){
+ this.$confirm('此操作将永久删除该条数据, 是否继续?', '提示', {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning'
+ }).then(async () => {
+ const res = await delViolation(row.violationId)
+ if(res.code == 200){
+ this.$message({
+ type: 'success',
+ message: '删除成功!'
+ });
+ await this.getList()
+ }else{
+ this.$message({
+ type: 'warning',
+ message: res.msg
+ });
+ }
+ }).catch(() => {
+ });
+ },
+ handleQuery(){
+ this.queryParams.pageNum = 1
+ this.getList()
},
resetQuery(){
-
+ this.queryParams = {
+ name: '',
+ idCard:'',
+ dept: '',
+ operateTypeId: null,
+ isCm: 1,
+ pageNum: 1,
+ pageSize: 10
+ }
+ this.getList()
},
- handleAdd(){
- this.$refs.addDialogRef.openDialog();
+ openViolation(data,type){
+ this.$refs.violationDialog.openDialog(data,type);
}
}
};
diff --git a/src/views/notCoalMine/nCertificateList/components/certificateDialog.vue b/src/views/notCoalMine/nCertificateList/components/certificateDialog.vue
new file mode 100644
index 0000000..5b4f2ca
--- /dev/null
+++ b/src/views/notCoalMine/nCertificateList/components/certificateDialog.vue
@@ -0,0 +1,415 @@
+<template>
+ <el-dialog :title="title" :visible.sync="open" width="50%" append-to-body>
+ <div class="main_form">
+ <el-form :model="form" :rules="rules" ref="ruleForm" label-width="200px" :label-position="labelPosition">
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="姓名" prop="name">
+ <el-input v-model="form.name" :readonly="disable"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="性别" prop="sex">
+ <el-radio-group v-model="form.sex" :disabled="disable">
+ <el-radio label="男">男</el-radio>
+ <el-radio label="女">女</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="身份证号" prop="idcardNum">
+ <el-input v-model="form.idcardNum" :readonly="disable"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="证书编号" prop="certNum">
+ <el-input v-model="form.certNum" :readonly="disable"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="资格类型" prop="personTypeName">
+ <el-input v-model="form.personTypeName" :readonly="disable"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="作业类别" prop="jobTypeName">
+ <el-input v-model="form.jobTypeName" :readonly="disable"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="操作项目" prop="operItemName">
+ <el-input v-model="form.operItemName" :readonly="disable"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="初领日期" prop="firstCertDate">
+ <el-input v-model="form.firstCertDate" :readonly="disable"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="发证日期" prop="createTime">
+ <el-input v-model="form.createTime" :readonly="disable"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="有效期从" prop="validBeginDate">
+ <el-input v-model="form.validBeginDate" :readonly="disable"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="有效期至" prop="validEndDate">
+ <el-input v-model="form.validEndDate" :readonly="disable"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="复审期" prop="shouldReviewDate">
+ <el-input v-model="form.shouldReviewDate" :readonly="disable"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <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>
+ </el-col>
+ </el-row>
+ </el-form>
+ <div style="width: 100%;padding-bottom: 30px;display: flex;justify-content: center">
+ <el-button v-if="title == '查看证书'" type="primary" @click="open = false">确认</el-button>
+ <el-button v-else type="primary" @click="submit()">提交</el-button>
+ </div>
+ <el-dialog :visible.sync="dialogVisible">
+ <img width="100%" :src="dialogImageUrl" alt="">
+ </el-dialog>
+ </div>
+ </el-dialog>
+</template>
+
+<script>
+// import {getExpertTypes,addExpertInfo,uploadFile} from '@/api/system/form'
+// import { verifySimplePhone, verifyIdCard } from "@/utils/validate";
+export default {
+ name: "nCertificateDialog",
+ dicts: ['sys_nation_code'],
+ data() {
+ var validatePass = (rule, value, callback) => {
+ if (this.fileList.length == 0) {
+ callback(new Error('请上传证件照'));
+ } else {
+ callback();
+ }
+ }
+ let validatePhone = (rule, value, callback)=>{
+ if(value === ''){
+ callback(new Error('请输入手机号'))
+ }else{
+ if(!verifySimplePhone(value)){
+ callback(new Error('手机号格式有误'))
+ }else{
+ callback()
+ }
+ }
+ }
+ let verifyId = (rule, value, callback)=>{
+ if(value === ''){
+ callback(new Error('请输入身份证号'))
+ }else{
+ if(!verifyIdCard(value)){
+ callback(new Error('身份证号格式有误'))
+ }else{
+ callback()
+ }
+ }
+ }
+ return {
+ labelPosition: 'right',
+ title: '新增证书',
+ disable: false,
+ open: false,
+ form:{
+ name: '',
+ sex: '',
+ idcardNum: '',
+ certNum: '',
+ personTypeName: '',
+ jobTypeName: '',
+ operItemName: '',
+ firstCertDate: '',
+ createTime: '',
+ validBeginDate: '',
+ validEndDate: '',
+ shouldReviewDate: '',
+ imgPath: ''
+ },
+ fileList: [],
+ dialogImageUrl: '',
+ dialogVisible: false,
+ rules:{
+ name:[{ required: true, message: '请填写姓名', trigger: 'blur' }],
+ sex:[{ required: true, message: '请选择性别', trigger: 'blur' }],
+ idCard: [{ required: true, validator: verifyId, trigger: 'blur' }],
+ race: [{ required: true, message: '请选择民族', trigger: 'blur' }],
+ phone:[{ required: true, validator: validatePhone, trigger: 'blur' }],
+ degree: [{ required: true, message: '请填写最高学历', trigger: 'blur' }],
+ photoPath: [{ required: true,validator: validatePass, trigger: 'blur' }]
+ },
+ };
+ },
+ created() {
+ const t = this
+ },
+ methods: {
+ openDialog(val,type){
+ if(type == 'add'){
+ this.title = '新增证书'
+ this.disable = false
+ }else{
+ if(type == 'edit'){
+ this.title = '编辑证书'
+ this.disable = false
+ }else{
+ 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.open = true
+ },
+ isValidKey(key,obj){
+ return key in obj
+ },
+
+ async getExpertsType(){
+ const res = await getExpertTypes()
+ if(res.code == 200){
+ this.expertsType = res.data
+ }else{
+ this.$message({
+ type: 'warning',
+ message: res.msg
+ });
+ }
+ },
+ avatorChange(file, fileList) {
+ this.fileList = fileList;
+ },
+ overLimit(){
+ this.$message({
+ type: 'warning',
+ message: '超出文件上传数量'
+ });
+ },
+ handlePreview(file) {
+ this.dialogImageUrl = file.url;
+ this.dialogVisible = true;
+ },
+ beforeAvatarUpload(file) {
+ const isLt5M = file.size / 1024 / 1024 < 5;
+ if (!isLt5M) {
+ this.$message.error('上传头像图片大小不能超过 5MB!');
+ }
+ return isLt5M;
+ },
+ async submitUpload() {
+ const t = this;
+ // 创建一个数组来存储所有上传操作的 Promise
+ const uploadPromises = [];
+ // 定义一个函数来上传文件并将结果存入 resumeLink 数组
+ async function uploadAndCollect(fileList, type) {
+ if (fileList.length > 0) {
+ const resumeLink = [];
+ for (const file of fileList) {
+ const formData = new FormData();
+ formData.append("file", file.raw);
+ formData.append("module", 'expertPath');
+
+ const res = await uploadFile(formData);
+ if (res.code === 200) {
+ resumeLink.push(res.data[0].fileKey);
+ } else {
+ this.$message.error('图片上传出错!');
+ }
+ }
+ // 将收集到的文件链接设置到 this.form 中
+ if (type == '证件照') { t.form.photoPath = resumeLink.join(',')}
+ return resumeLink;
+ }
+ return [];
+ }
+ // 依次执行上传操作并等待完成
+ uploadPromises.push(uploadAndCollect(t.fileList, '证件照'));
+ // 等待所有上传操作完成
+ await Promise.all(uploadPromises);
+ // 打印已更新的 this.form
+ console.log(t.form, 'form1');
+ },
+ handleRemove(file, fileList) {
+ console.log(file, fileList);
+ },
+ async submit(){
+ if(this.form.supportDirectionSafety.length == 0 && this.form.supportDirectionPrevention.length == 0 && this.form.supportDirectionEmergency.length == 0){
+ this.$message({
+ type:'warning',
+ message: '请至少选择一种支撑方向'
+ })
+ return
+ }
+ this.$refs["ruleForm"].validate(async(valid) =>{
+ if(valid) {
+ await this.submitUpload()
+ let data = this.form
+ data.supportDirectionSafety = data.supportDirectionSafety.join(',')
+ data.supportDirectionPrevention = data.supportDirectionPrevention.join(',')
+ data.supportDirectionEmergency = data.supportDirectionEmergency.join(',')
+ data.bigClassify = data.profession[0]
+ data.smallClassify = data.profession[1]
+ delete data.profession
+ const res= await addExpertInfo(data)
+ if(res.code == 200){
+ this.$message({
+ type:'success',
+ message: res.msg
+ })
+ this.$emit('closeDialog')
+ this.$refs.ruleForm.resetFields()
+ this.fileList = []
+ }else{
+ this.$message({
+ type:'warning',
+ message: res.msg
+ })
+ }
+ }else{
+ this.$message({
+ type:'warning',
+ message:'请完善必填信息'
+ })
+ }
+ })
+ },
+ changeSource(num){
+ this.form.source = num
+ }
+ }
+};
+</script>
+
+<style scoped lang="scss">
+.home {
+ blockquote {
+ padding: 10px 20px;
+ margin: 0 0 20px;
+ font-size: 17.5px;
+ border-left: 5px solid #eee;
+ }
+ hr {
+ margin-top: 20px;
+ margin-bottom: 20px;
+ border: 0;
+ border-top: 1px solid #eee;
+ }
+ .col-item {
+ margin-bottom: 20px;
+ }
+
+ ul {
+ padding: 0;
+ margin: 0;
+ }
+
+ font-family: "open sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 13px;
+ color: #676a6c;
+ overflow-x: hidden;
+
+ ul {
+ list-style-type: none;
+ }
+
+ h4 {
+ margin-top: 0px;
+ }
+
+ h2 {
+ margin-top: 10px;
+ font-size: 26px;
+ font-weight: 100;
+ }
+
+ p {
+ margin-top: 10px;
+
+ b {
+ font-weight: 700;
+ }
+ }
+
+ .update-log {
+ ol {
+ display: block;
+ list-style-type: decimal;
+ margin-block-start: 1em;
+ margin-block-end: 1em;
+ margin-inline-start: 0;
+ margin-inline-end: 0;
+ padding-inline-start: 40px;
+ }
+ }
+}
+.avatar-uploader .el-upload {
+ border: 1px dashed #d9d9d9;
+ border-radius: 6px;
+ cursor: pointer;
+ position: relative;
+ overflow: hidden;
+}
+.avatar-uploader .el-upload:hover {
+ border-color: #409EFF;
+}
+.avatar-uploader-icon {
+ font-size: 28px;
+ color: #8c939d;
+ width: 178px;
+ height: 178px;
+ line-height: 178px;
+ text-align: center;
+}
+.avatar {
+ width: 178px;
+ height: 178px;
+ display: block;
+}
+</style>
+
diff --git a/src/views/notCoalMine/nCertificateList/index.vue b/src/views/notCoalMine/nCertificateList/index.vue
index 1d598db..471239b 100644
--- a/src/views/notCoalMine/nCertificateList/index.vue
+++ b/src/views/notCoalMine/nCertificateList/index.vue
@@ -1,17 +1,17 @@
<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-form-item label="用户姓名" prop="name">
<el-input
- v-model="queryParams.userName"
+ v-model="queryParams.name"
placeholder="请输入用户姓名"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
- <el-form-item label="身份证号" prop="idCard">
+ <el-form-item label="身份证号" prop="idcardNum">
<el-input
- v-model="queryParams.idCard"
+ v-model="queryParams.idcardNum"
placeholder="请输入身份证号"
clearable
@keyup.enter.native="handleQuery"
@@ -30,94 +30,125 @@
plain
icon="el-icon-refresh"
size="mini"
- @click="handleAdd"
+ @click="resetQuery"
v-hasPermi="['system:experts:add']"
>同步数据</el-button>
</el-col>
- <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+ <right-toolbar :showSearch.sync="showSearch" @queryTable="getPage"></right-toolbar>
</el-row>
- <el-table v-loading="loading" :data="expertList">
+ <el-table v-loading="loading" :data="dataList">
<el-table-column type="index" label="序号" width="55" align="center" />
<el-table-column label="姓名" align="center" prop="name" />
- <el-table-column label="性别" align="center" prop="name" />
- <el-table-column label="身份证号" align="center" prop="name" />
- <el-table-column label="电话" align="center" prop="phone"/>
- <el-table-column label="民族" align="center" prop="phone"/>
- <el-table-column label="最高学历" align="center" prop="degree" />
- <el-table-column label="资格类型" align="center" prop="job" />
- <el-table-column label="作业类别" align="center" prop="job" />
- <el-table-column label="操作项目" align="center" prop="speciality" />
- <el-table-column label="初领日期" align="center"/>
- <el-table-column label="发证日期" align="center"/>
- <el-table-column label="有效期从" align="center"/>
- <el-table-column label="有效期到" align="center"/>
- <el-table-column label="一次复审期" align="center"/>
- <el-table-column label="二次复审期" align="center"/>
- <el-table-column label="历史记录" align="center"/>
+ <el-table-column label="性别" align="center" prop="sex"/>
+ <el-table-column label="身份证号" align="center" prop="idcardNum">
+ <template #default="scope">
+ {{scope.row.idcardNum | peridcardtm}}
+ </template>
+ </el-table-column>
+<!-- <el-table-column label="电话" align="center" prop="phone"/>-->
+<!-- <el-table-column label="民族" align="center" prop="phone"/>-->
+<!-- <el-table-column label="最高学历" align="center" prop="degree" />-->
+ <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="firstCertDate"/>
+ <el-table-column label="发证日期" align="center" prop="createTime">
+ <template #default="scope">
+ {{scope.row.createTime.substring(0,7)}}
+ </template>
+ </el-table-column>
+ <el-table-column label="有效期从" align="center" prop="validBeginDate"/>
+ <el-table-column label="有效期到" align="center" prop="validEndDate"/>
+ <el-table-column label="复审期" align="center" prop="shouldReviewDate"/>
+<!-- <el-table-column label="二次复审期" align="center" prop="operItemName"/>-->
+<!-- <el-table-column label="历史记录" align="center" prop="operItemName"/>-->
<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="handleUpdate(scope.row)"-->
-<!-- >编辑</el-button>-->
+ <el-button
+ size="mini"
+ type="text"
+ icon="el-icon-edit"
+ @click="openCert(scope.row,'view')"
+ >查看</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
- :page.sync="queryParams.pageIndex"
+ :page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
- @pagination="getList"
+ @pagination="getPage"
/>
+ <certificate-dialog ref="certificate" @getList="getPage"></certificate-dialog>
</div>
</template>
<script>
+import { getCertificatePage } from "@/api/notCoalMine/certifiate";
+import certificateDialog from "@/views/notCoalMine/nCertificateList/components/certificateDialog";
export default {
- name: "nPeopleManage",
+ name: "nCertificateManage",
dicts: [],
- components: {},
+ components: {certificateDialog},
data() {
return {
loading: false,
- single: true,
- multiple: true,
showSearch: true,
- addForm: false,
total: 0,
- expertTypes: [],
- expertList: [],
- queryParams: {},
- classiFy: [],
- form: {},
- rules: {
- classifyName: [
- { required: true, message: "分类名称不能为空", trigger: "blur" }
- ]
+ dataList: [],
+ queryParams: {
+ idcardNum: '',
+ name: '',
+ idcardTypeCode: '',
+ pageNum: 1,
+ pageSize: 10
}
};
},
created() {
-
+ this.getPage()
},
methods: {
- getList(){
-
+ async getPage(){
+ const t = this
+ t.loading = true
+ if(t.queryParams.idcardNum !== ''){
+ t.queryParams.idcardTypeCode = '01'
+ }else{
+ t.queryParams.idcardTypeCode = ''
+ }
+ const res = await getCertificatePage(t.queryParams)
+ if(res.code == 200){
+ t.dataList = res.rows
+ t.total = res.total
+ }else{
+ t.$message({
+ message: res.msg,
+ type: 'warning'
+ })
+ }
+ t.loading = false
},
handleChange(){
},
handleQuery(){
-
+ this.queryParams.pageNum = 1
+ this.getPage()
},
resetQuery(){
-
+ this.queryParams={
+ idcardNum: '',
+ name: '',
+ idcardTypeCode: '01',
+ pageNum: 1,
+ pageSize: 10
+ }
+ this.getPage()
},
- handleAdd(){
-
+ openCert(data,type){
+ this.$refs.certificate.openDialog(data,type)
}
}
};
diff --git a/src/views/notCoalMine/nJobRegistration/components/addDialog.vue b/src/views/notCoalMine/nJobRegistration/components/addDialog.vue
deleted file mode 100644
index 9856c67..0000000
--- a/src/views/notCoalMine/nJobRegistration/components/addDialog.vue
+++ /dev/null
@@ -1,86 +0,0 @@
-<template>
- <el-dialog
- :title="dialogStatus==='add'?'新增填报':''"
- :visible.sync="dialogVisible"
- :modal-append-to-body="false"
- :close-on-click-modal="false"
- width="50%"
- :before-close="handleClose"
- >
- <el-form ref="dataForm" :model="dataForm" :rules="rules" label-position="right" label-width="150px" style="padding-right: 50px" element-loading-text="保存中...">
- <el-form-item label="身份证号:" prop="idCard">
- <el-input v-model.trim="dataForm.idCard"/>
- </el-form-item>
- <el-form-item label="IC卡编号:" prop="iCCard">
- <el-input v-model.trim="dataForm.iCCard"/>
- </el-form-item>
- <el-form-item label="电子证号:" prop="remark">
- <el-input v-model.trim="dataForm.remark"/>
- </el-form-item>
- <el-form-item label="姓名:" prop="remark">
- <el-input v-model.trim="dataForm.remark"/>
- </el-form-item>
- <el-form-item label="所属单位:" prop="remark">
- <el-input v-model.trim="dataForm.remark"/>
- </el-form-item>
- <el-form-item label="操作类型:" prop="remark">
- <el-cascader
- v-model="value"
- :options="options"
- @change="handleChange">
- </el-cascader>
- </el-form-item>
- </el-form>
- <span slot="footer" class="dialog-footer">
- <el-button @click="handleClose">取 消</el-button>
- <el-button type="primary" @click="onSubmit">确 定</el-button>
- </span>
- </el-dialog>
-</template>
-
-<script >
-export default {
- name: 'addUser',
- components: {
- },
- data() {
- return {
- dialogVisible: false,
- dialogStatus: '',
- rules: {
- name: [{ required: true, message: '身份证号', trigger: 'blur' }],
- },
- dataForm: {}
- }
- },
- created() {
-
- },
- methods: {
- openDialog (type, data) {
- this.resetDataForm();
- this.dialogVisible = true;
- this.dialogStatus = type;
- this.$nextTick(() => {
- this.$refs['dataForm'].clearValidate()
- })
- },
- handleClose() {
- this.dialogVisible = false;
- this.$emit("getList");
- },
- onSubmit() {
- this.$emit("getList");
- this.dialogVisible = false;
- },
- resetDataForm() {
- this.dataForm = {
- }
- },
- }
-}
-
-</script>
-<style scoped>
-
-</style>
diff --git a/src/views/notCoalMine/nJobRegistration/components/jobRegistDialog.vue b/src/views/notCoalMine/nJobRegistration/components/jobRegistDialog.vue
new file mode 100644
index 0000000..3e45d21
--- /dev/null
+++ b/src/views/notCoalMine/nJobRegistration/components/jobRegistDialog.vue
@@ -0,0 +1,219 @@
+<template>
+ <el-dialog
+ :title="title"
+ :visible.sync="open"
+ append-to-body
+ width="50%"
+ :before-close="handleClose"
+ >
+ <el-form ref="ruleForm" :model="form" :rules="rules" label-position="right" label-width="150px" style="padding-right: 50px" element-loading-text="保存中...">
+ <el-form-item label="姓名:" prop="name">
+ <el-input v-model.trim="form.name" :readonly="disable"/>
+ </el-form-item>
+ <el-form-item label="身份证号:" prop="idCard">
+ <el-input v-model.trim="form.idCard" :readonly="disable"/>
+ </el-form-item>
+ <el-form-item label="IC卡编号:" prop="icNum">
+ <el-input v-model.trim="form.icNum" :readonly="disable"/>
+ </el-form-item>
+ <el-form-item label="电子证号:" prop="electNum">
+ <el-input v-model.trim="form.electNum" :readonly="disable"/>
+ </el-form-item>
+ <el-form-item label="所属单位:" prop="dept">
+ <el-input v-model.trim="form.dept" :readonly="disable"/>
+ </el-form-item>
+ <el-form-item label="操作类型:" prop="operateTypeId">
+ <el-cascader
+ v-model="form.operateTypeId"
+ :options="typeList"
+ :disabled="disable"
+ :show-all-levels="false"
+ :props="{ expandTrigger: 'hover', value: 'id',label: 'name',emitPath:false}"></el-cascader>
+ </el-form-item>
+ <el-form-item label="作业时间:" prop="workTime">
+ <el-date-picker
+ v-model="form.workTime"
+ type="date"
+ format="yyyy-MM-dd"
+ value-format="yyyy-MM-dd 00:00:00"
+ placeholder="选择日期"
+ :disabled="disable">
+ </el-date-picker>
+ </el-form-item>
+ </el-form>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="handleClose">取消</el-button>
+ <el-button v-if="disable == false" type="primary" @click="submit">提交</el-button>
+ <el-button v-else type="primary" @click="handleClose">确定</el-button>
+ </span>
+ <el-dialog :visible.sync="dialogVisible" append-to-body>
+ <img width="100%" :src="dialogImageUrl" alt="">
+ </el-dialog>
+ </el-dialog>
+</template>
+
+<script >
+import {verifyIdCard} from "@/utils/validate";
+import {addJobRegist, editJobRegist} from "@/api/coalMine/jobRegist";
+
+export default {
+ name: 'violationDialog',
+ components: {
+ },
+ props: ['typeList'],
+ data() {
+ let verifyId = (rule, value, callback)=>{
+ if(value === ''){
+ callback(new Error('请输入身份证号'))
+ }else{
+ if(!verifyIdCard(value)){
+ callback(new Error('身份证号格式有误'))
+ }else{
+ callback()
+ }
+ }
+ }
+ return {
+ disable: false,
+ title: '新增登记',
+ open: false,
+ form:{
+ workId: null,
+ isCm: 0,
+ name: '',
+ idCard: '',
+ icNum: '',
+ electNum: '',
+ dept: '',
+ operateTypeId: null,
+ workTime: '',
+ remark: ''
+ },
+ fileList: [],
+ dialogImageUrl: '',
+ dialogVisible: false,
+ rules:{
+ name:[{ required: true, message: '请填写姓名', trigger: 'blur' }],
+ // idCard: [{ required: true, validator: verifyId, trigger: 'blur' }],
+ idCard: [{ required: true, message: '请填写身份证号', trigger: 'blur' }],
+ dept: [{ required: true, message: '请填写所在单位', trigger: 'blur' }],
+ operateTypeId: [{ required: true, message: '请选择操作类型', trigger: 'blur' }],
+ workTime: [{ required: true, message: '请选择作业时间', trigger: 'blur' }]
+ },
+ }
+ },
+ created() {
+
+ },
+ methods: {
+ openDialog (val,type) {
+ const t = this
+ t.fileList = []
+ t.open = true
+ if(type == 'add'){
+ t.title = '新增登记'
+ t.disable = false
+ t.form = {
+ workId: null,
+ isCm: 0,
+ name: '',
+ idCard: '',
+ icNum: '',
+ electNum: '',
+ dept: '',
+ operateTypeId: null,
+ workTime: '',
+ remark: ''
+ }
+ }else{
+ if(type == 'edit'){
+ t.title = '编辑'
+ t.disable = false
+ }else{
+ t.title = '查看'
+ t.disable = true
+ }
+ if(val){
+ for(let i in val){
+ if(t.isValidKey(i,this.form)){
+ t.form[i] = val[i]
+ }
+ }
+ }
+ t.form.workTime = t.form.workTime + ' 00:00:00'
+ }
+ },
+ isValidKey(key,obj){
+ return key in obj
+ },
+
+ handleClose() {
+ this.open = false;
+ this.resetForm();
+ },
+ async submit(){
+ this.$refs["ruleForm"].validate(async(valid) =>{
+ if(valid) {
+ if(this.title == '新增登记'){
+ const {workId,...data} = this.form
+ const res= await addJobRegist(data)
+ if(res.code == 200){
+ this.$message({
+ type:'success',
+ message: res.msg
+ })
+ this.fileList = []
+ this.open = false
+ this.$emit('getList')
+ }else{
+ this.$message({
+ type:'warning',
+ message: res.msg
+ })
+ }
+ }else{
+ const res= await editJobRegist(this.form)
+ if(res.code == 200){
+ this.$message({
+ type:'success',
+ message: res.msg
+ })
+ this.fileList = []
+ this.open = false
+ this.$emit('getList')
+ }else{
+ this.$message({
+ type:'warning',
+ message: res.msg
+ })
+ }
+ }
+ }else{
+ this.$message({
+ type:'warning',
+ message:'请完善必填信息'
+ })
+ }
+ })
+ },
+ resetForm() {
+ this.form = {
+ workId: null,
+ isCm: 0,
+ name: '',
+ idCard: '',
+ icNum: '',
+ electNum: '',
+ dept: '',
+ operateTypeId: null,
+ workTime: '',
+ remark: ''
+ }
+ },
+ }
+}
+
+</script>
+<style scoped>
+
+</style>
diff --git a/src/views/notCoalMine/nJobRegistration/index.vue b/src/views/notCoalMine/nJobRegistration/index.vue
index dfcb7b4..69bffec 100644
--- a/src/views/notCoalMine/nJobRegistration/index.vue
+++ b/src/views/notCoalMine/nJobRegistration/index.vue
@@ -3,7 +3,7 @@
<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"
+ v-model="queryParams.name"
placeholder="请输入用户姓名"
clearable
@keyup.enter.native="handleQuery"
@@ -17,19 +17,20 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item>
- <el-form-item label="单位名称" prop="idCard">
+ <el-form-item label="单位名称" prop="dept">
<el-input
- v-model="queryParams.unit"
+ v-model="queryParams.dept"
placeholder="请输入单位名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
- <el-form-item label="作业类型">
+ <el-form-item label="操作类型">
<el-cascader
- v-model="classiFy"
- :options="expertTypes"
- :props="{ expandTrigger: 'hover', value: 'id',label: 'label'}"
+ v-model="queryParams.operateTypeId"
+ :options="typeList"
+ :show-all-levels="false"
+ :props="{ expandTrigger: 'hover', value: 'id',label: 'name',emitPath:false}"
@change="handleChange"></el-cascader>
</el-form-item>
<el-form-item>
@@ -44,27 +45,35 @@
type="primary"
plain
size="mini"
- @click="handleAdd"
+ @click="openJobRegist({},'add')"
v-hasPermi="['system:experts:add']"
- >新增填报</el-button>
+ >新增作业</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
- <el-table v-loading="loading" :data="expertList">
- <el-table-column label="作业日期" align="center" prop="name" />
+ <el-table v-loading="loading" :data="dataList">
+ <el-table-column label="发生时间" align="center" prop="workTime" />
<el-table-column label="姓名" align="center" prop="name" />
- <el-table-column label="身份证号" align="center" prop="name" />
- <el-table-column label="IC/电子证编号" align="center" prop="phone"/>
- <el-table-column label="所属单位" align="center" prop="phone"/>
- <el-table-column label="作业种类" align="center" prop="phone"/>
+ <el-table-column label="身份证号" align="center" prop="idCard" />
+ <el-table-column label="IC卡编号" align="center" prop="icNum"/>
+ <el-table-column label="电子证编号" align="center" prop="electNum"/>
+ <el-table-column label="所属单位" align="center" prop="dept"/>
+ <el-table-column label="作业种类" align="center" prop="jobCategory"/>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
-<!-- <el-button-->
-<!-- size="mini"-->
-<!-- type="text"-->
-<!-- icon="el-icon-view"-->
-<!-- @click="handleView(scope.row)"-->
-<!-- >查看违规详情</el-button>-->
+ <el-button
+ size="mini"
+ type="text"
+ icon="el-icon-view"
+ @click="openJobRegist(scope.row,'view')"
+ >查看详情</el-button>
+ <el-button
+ size="mini"
+ type="text"
+ icon="el-icon-edit"
+ @click="openJobRegist(scope.row,'edit')"
+ v-hasPermi="['system:experts:remove']"
+ >编辑</el-button>
<el-button
size="mini"
type="text"
@@ -78,62 +87,121 @@
<pagination
v-show="total>0"
:total="total"
- :page.sync="queryParams.pageIndex"
+ :page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
- <add-dialog ref="addDialogRef" @getList = "getList"></add-dialog>
+ <jobRegist-dialog ref="jobRegistDialog" @getList="getList" :typeList="typeList"></jobRegist-dialog>
</div>
</template>
<script>
-import addDialog from "@/views/notCoalMine/nJobRegistration/components/addDialog.vue";
+import jobRegistDialog from "@/views/notCoalMine/nJobRegistration/components/jobRegistDialog";
+import {getOperatePage} from "@/api/coalMine/operateType";
+import {delJobRegist, getJobRegistPage} from "@/api/coalMine/jobRegist";
export default {
- name: "nViolationRegistration",
+ name: "cJobRegist",
dicts: [],
components: {
- addDialog
+ jobRegistDialog
},
data() {
return {
- addDialogRef: '',
+ violationDialog: '',
loading: false,
- single: true,
- multiple: true,
showSearch: true,
- addForm: false,
+ dataList: [],
total: 0,
- expertTypes: [],
- expertList: [],
- queryParams: {},
- classiFy: [],
- form: {},
- rules: {
- classifyName: [
- { required: true, message: "分类名称不能为空", trigger: "blur" }
- ]
- }
+ typeList: [],
+ queryParams: {
+ name: '',
+ idCard:'',
+ dept: '',
+ operateTypeId: null,
+ isCm: 0,
+ pageNum: 1,
+ pageSize: 10
+ },
};
},
created() {
-
+ this.getList()
+ this.getTypeList()
},
methods: {
- getList(){
-
+ async getList(){
+ const t = this
+ t.loading = true
+ const res = await getJobRegistPage(t.queryParams)
+ if(res.code == 200){
+ t.dataList = res.rows
+ t.total = res.total
+ }else{
+ t.$message({
+ message: res.msg,
+ type: 'warning'
+ })
+ }
+ t.loading = false
+ },
+ async getTypeList() {
+ 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;
},
handleChange(){
},
- handleQuery(){
+ handleDelete(row){
+ this.$confirm('此操作将永久删除该条数据, 是否继续?', '提示', {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning'
+ }).then(async () => {
+ const res = await delJobRegist(row.workId)
+ if(res.code == 200){
+ this.$message({
+ type: 'success',
+ message: '删除成功!'
+ });
+ await this.getList()
+ }else{
+ this.$message({
+ type: 'warning',
+ message: res.msg
+ });
+ }
+ }).catch(() => {
+ });
+ },
+ handleQuery(){
+ this.queryParams.pageNum = 1
+ this.getList()
},
resetQuery(){
-
+ this.queryParams = {
+ name: '',
+ idCard:'',
+ dept: '',
+ operateTypeId: null,
+ isCm: 0,
+ pageNum: 1,
+ pageSize: 10
+ }
+ this.getList()
},
- handleAdd(){
- this.$refs.addDialogRef.openDialog();
+ openJobRegist(data,type){
+ this.$refs.jobRegistDialog.openDialog(data,type);
}
}
};
diff --git a/src/views/notCoalMine/nPeopleManage/components/peopleDialog.vue b/src/views/notCoalMine/nPeopleManage/components/peopleDialog.vue
index b780a00..8eb5692 100644
--- a/src/views/notCoalMine/nPeopleManage/components/peopleDialog.vue
+++ b/src/views/notCoalMine/nPeopleManage/components/peopleDialog.vue
@@ -76,9 +76,9 @@
</el-row>
<template v-if="title == '查看人员'">
<el-row v-if="form.violationList && form.violationList.length>0">
- <el-col :span="20">
+ <el-col :span="24">
<el-form-item label="违章记录">
- <el-table :data="form.violationList">
+ <el-table :data="form.violationList" border>
<el-table-column label="时间" align="center">
<template #default="scope">
{{scope.row.startTime + '--' + scope.row.endTime}}
@@ -90,9 +90,9 @@
</el-col>
</el-row>
<el-row v-if="form.resumeList && form.resumeList.length>0">
- <el-col :span="20">
+ <el-col :span="24">
<el-form-item label="个人履历">
- <el-table :data="form.resumeList">
+ <el-table :data="form.resumeList" border>
<el-table-column label="时间" align="center">
<template #default="scope">
{{scope.row.startTime + '--' + scope.row.endTime}}
@@ -104,9 +104,9 @@
</el-col>
</el-row>
<el-row v-if="form.trainList && form.trainList.length>0">
- <el-col :span="20">
+ <el-col :span="24">
<el-form-item label="培训经历">
- <el-table :data="form.trainList">
+ <el-table :data="form.trainList" border>
<el-table-column label="培训时间" align="center">
<template #default="scope">
{{scope.row.startTime + '--' + scope.row.endTime}}
@@ -120,9 +120,9 @@
</el-col>
</el-row>
<el-row v-if="form.examineeList && form.examineeList.length>0">
- <el-col :span="20">
+ <el-col :span="24">
<el-form-item label="考试经历">
- <el-table :data="form.examineeList">
+ <el-table :data="form.examineeList" border>
<el-table-column label="考试时间" align="center">
<template #default="scope">
{{scope.row.startTime + '--' + scope.row.endTime}}
@@ -232,14 +232,13 @@
this.title = '查看人员'
this.disable = true
}
- this.form = val
- // if(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 0ff7c4b..afb5110 100644
--- a/src/views/notCoalMine/nPeopleManage/index.vue
+++ b/src/views/notCoalMine/nPeopleManage/index.vue
@@ -147,7 +147,7 @@
if(obj){
return obj.label
}else{
- return '无'
+ return '未知'
}
},
openPeople(data,type){
@@ -161,7 +161,12 @@
this.getPage()
},
resetQuery(){
- this.$refs['queryForm'].resetFields()
+ this.queryParams={
+ idCardNum: '',
+ name: '',
+ pageNum: 1,
+ pageSize: 10
+ }
this.getPage()
},
handleAdd(){
diff --git a/src/views/notCoalMine/nTeacherManage/nReviewer/components/reviewerDialog.vue b/src/views/notCoalMine/nTeacherManage/nReviewer/components/reviewerDialog.vue
new file mode 100644
index 0000000..0343464
--- /dev/null
+++ b/src/views/notCoalMine/nTeacherManage/nReviewer/components/reviewerDialog.vue
@@ -0,0 +1,638 @@
+<template>
+ <el-dialog :title="title" :visible.sync="open" width="50%" append-to-body>
+ <div class="main_form">
+ <el-form :model="form" :rules="rules" ref="ruleForm" label-width="200px" :label-position="labelPosition">
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="姓名" prop="name">
+ <el-input v-model="form.name" :readonly="disable"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="性别" prop="sex">
+ <el-radio-group v-model="form.sex" :disabled="disable">
+ <el-radio :label="0">男</el-radio>
+ <el-radio :label="1">女</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="身份证号" prop="code">
+ <el-input v-model="form.code" :readonly="disable"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="联系电话" prop="mobilePhone">
+ <el-input v-model="form.mobilePhone" :readonly="disable"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="职称" prop="jobTitle">
+ <el-input v-model="form.jobTitle" :readonly="disable"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="最高学历" prop="eduLevel">
+ <el-select v-model="form.eduLevel" placeholder="请选择" style="width: 100%" :disabled="disable">
+ <el-option
+ v-for="dict in dict.type.sys_highest_education_code"
+ :key="dict.value"
+ :label="dict.label"
+ :value="dict.value"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="资质到期" prop="expiredTime">
+ <el-date-picker
+ style="width: 100%"
+ v-model="form.expiredTime"
+ value-format="yyyy-MM-dd"
+ type="date"
+ :disabled="disable"
+ placeholder="选择日期">
+ </el-date-picker>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="在职情况" prop="status">
+ <el-radio-group v-model="form.status" :disabled="disable">
+ <el-radio label="0">正常</el-radio>
+ <el-radio label="1">停用</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="描述">
+ <el-input v-model="form.description" type="textarea" :autosize="{ minRows: 2}" :readonly="disable"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="证件照" prop="photoAttachment">
+ <el-upload
+ :disabled="disable"
+ action="#"
+ multiple
+ :limit="1"
+ :on-exceed="overLimit"
+ :auto-upload="false"
+ accept="image/*,.pdf"
+ :file-list="resumeList"
+ list-type="picture-card"
+ :before-upload="beforeAvatarUpload"
+ :on-change="resumeChange"
+ :on-preview="handlePreview"
+ :on-remove="(file,fileList)=>handleRemove(file,fileList,'证件照')">
+ <i class="el-icon-plus"></i>
+ </el-upload>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="资质" prop="qaAttachment">
+ <el-upload
+ :disabled="disable"
+ action=""
+ multiple
+ :limit="1"
+ :on-exceed="overLimit"
+ :auto-upload="false"
+ accept="image/*,.pdf"
+ list-type="picture-card"
+ :file-list="inventionList"
+ :before-upload="beforeAvatarUpload"
+ :on-change="inventChange"
+ :on-preview="handlePreview"
+ :on-remove="(file,fileList)=>handleRemove(file,fileList,'资质')">
+ <i class="el-icon-plus"></i>
+ </el-upload>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="工种详情" prop="operateTypes">
+ <el-table :data="form.operateTypes" border>
+ <el-table-column label="序号" type="index" align="center"/>
+ <el-table-column label="资格类型" align="center" prop="qualificationType" />
+ <el-table-column label="作业类别" align="center" prop="jobCategory" />
+ <el-table-column label="操作项目" align="center" prop="operationItems"/>
+ <el-table-column label="操作" align="center" class-name="small-padding fixed-width" v-if="disable == false">
+ <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" icon="el-icon-delete" @click="deleteItem(scope.index)" v-hasPermi="['system:experts:remove']">删除</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <el-button v-if="disable == false" @click="openEdit({},'add')" style="margin-top: 15px">新增</el-button>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <div style="width: 100%;padding-bottom: 30px;display: flex;justify-content: center" v-if="disable == false">
+ <el-button type="primary" @click="submit()">提交</el-button>
+ </div>
+ <el-dialog :visible.sync="dialogVisible" append-to-body>
+ <img width="100%" :src="dialogImageUrl" alt="">
+ </el-dialog>
+ <el-dialog :title="dialogTitle" :visible.sync="addVisible" width="50%" append-to-body>
+ <el-form :model="addForm" :rules="addRules" ref="addRuleForm" label-width="200px">
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="资格类型" prop="operate">
+ <el-cascader
+ v-model="addForm.operate"
+ :options="typeList"
+ style="width: 100%"
+ :props="{ expandTrigger: 'hover', value: 'id',label: 'name'}"></el-cascader>
+ </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="submitAdd()">提交</el-button>
+ </div>
+ </el-dialog>
+ </div>
+ </el-dialog>
+</template>
+
+<script>
+import { verifySimplePhone, verifyIdCard } from "@/utils/validate";
+import {getOperatePage} from "@/api/coalMine/operateType";
+import {addExaminer, editExaminer, uploadFile} from "@/api/coalMine/teacher";
+export default {
+ name: "teacherDialog",
+ dicts: ['sys_highest_education_code'],
+ data() {
+ // let validateTypes = (rule, value, callback) => {
+ // if (this.form.operateTypes.length == 0) {
+ // callback(new Error('请添加工种详情'));
+ // } else {
+ // callback();
+ // }
+ // }
+ let validateResume = (rule, value, callback) => {
+ if (this.resumeList.length == 0) {
+ callback(new Error('请上传证件照'));
+ } else {
+ callback();
+ }
+ }
+ let validateCert = (rule, value, callback) => {
+ if (this.inventionList.length == 0) {
+ callback(new Error('请上传资质证书'));
+ } else {
+ callback();
+ }
+ }
+ let validatePhone = (rule, value, callback)=>{
+ if(value === ''){
+ callback(new Error('请输入手机号'))
+ }else{
+ if(!verifySimplePhone(value)){
+ callback(new Error('手机号格式有误'))
+ }else{
+ callback()
+ }
+ }
+ }
+ let verifyId = (rule, value, callback)=>{
+ if(value === ''){
+ callback(new Error('请输入身份证号'))
+ }else{
+ if(!verifyIdCard(value)){
+ callback(new Error('身份证号格式有误'))
+ }else{
+ callback()
+ }
+ }
+ }
+ return {
+ title: '新增考评员',
+ open: false,
+ disable: false,
+ labelPosition: 'right',
+ form:{
+ id: null,
+ isCm: '0',
+ name:'',
+ sex:'',
+ code: '',
+ mobilePhone: '',
+ jobTitle: '',
+ eduLevel: '',
+ expiredTime: '',
+ status: '',
+ operateTypes: [],
+ photoAttachment: null,
+ qaAttachment: null,
+ description: '',
+ },
+ resumeList: [],
+ inventionList: [],
+ dialogImageUrl: '',
+ dialogVisible: false,
+ dialogTitle: '新增',
+ addVisible: false,
+ addForm: {
+ operate: [],
+ qualificationType: '',
+ jobCategory: '',
+ operationItems: '',
+ operateTypeId: null
+ },
+ typeList: [],
+ rules:{
+ name:[{ required: true, message: '请填写姓名', trigger: 'blur'}],
+ sex:[{ required: true, message: '请选择性别', trigger: 'blur'}],
+ code:[{ required: true, validator: verifyId, trigger: 'blur' }],
+ mobilePhone:[{ required: true, validator: validatePhone, trigger: 'blur' }],
+ // code:[{ required: true, message: '请填写身份证号', trigger: 'blur'}],
+ // mobilePhone:[{ required: true, message: '请填写联系方式', trigger: 'blur'}],
+ jobTitle: [{ required: true, message: '请填写职称', trigger: 'blur'}],
+ eduLevel: [{ required: true, message: '请选择最高学历', trigger: 'blur'}],
+ expiredTime: [{ required: true, message: '请选择到期时间', trigger: 'blur'}],
+ status: [{ required: true, message: '请选择在岗情况', trigger: 'blur'}],
+ // operateTypes: [{ required: true,validator: validateTypes, trigger: 'blur' }],
+ photoAttachment: [{ required: true,validator: validateResume, trigger: 'blur'}],
+ qaAttachment: [{ required: true,validator: validateCert, trigger: 'blur'}]
+ },
+ addRules:{
+ operate:[{ required: true, message: '请选择', trigger: 'blur' }]
+ }
+ };
+ },
+ created() {
+ const t = this
+ },
+ methods: {
+ openDialog(val,type){
+ this.resumeList = []
+ this.inventionList = []
+ if(type == 'add'){
+ this.title = '新增考评员'
+ this.disable = false
+ this.form = {
+ id: null,
+ isCm: '0',
+ name:'',
+ sex:'',
+ code: '',
+ mobilePhone: '',
+ jobTitle: '',
+ eduLevel: '',
+ expiredTime: '',
+ status: '',
+ operateTypes: [],
+ photoAttachment: null,
+ qaAttachment: null,
+ description: '',
+ }
+ }else{
+ if(type == 'edit'){
+ this.title = '编辑考评员'
+ this.disable = false
+ }else{
+ this.title = '查看考评员'
+ this.disable = true
+ }
+ if(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.form.photoAttachment = val.photoAttachment.id
+ this.form.qaAttachment = val.qaAttachment.id
+ this.resumeList.push({
+ name: val.photoAttachment.fileName,
+ url: process.env.VUE_APP_BASE_API + val.photoAttachment.fileUrl
+ })
+ this.inventionList.push({
+ name: val.qaAttachment.fileName,
+ url: process.env.VUE_APP_BASE_API + val.qaAttachment.fileUrl
+ })
+ if(!this.form.operateTypes){
+ this.form.operateTypes = []
+ }
+ console.log(this.form,'form')
+ }
+ this.open = true
+ },
+
+ isValidKey(key,obj){
+ return key in obj
+ },
+
+ openEdit(data,type){
+ this.getList()
+ if(type == 'add'){
+ this.dialogTitle = '新增'
+ this.addVisible = true
+ this.addForm = {
+ operate: [],
+ qualificationType: '',
+ jobCategory: '',
+ operationItems: '',
+ operateTypeId: null
+ }
+ }else{
+
+ }
+ },
+ async submitUpload() {
+ const { resumeList, inventionList, form } = this;
+ const uploadAndCollect = async (fileList, type) => {
+ if (fileList.length > 0 && fileList.find((file)=>file.raw)) {
+ for (const file of fileList) {
+ const formData = new FormData();
+ formData.append("file", file.raw);
+ formData.append("module", 'accountPath');
+ try {
+ const res = await uploadFile(formData);
+ if (res.code === 200) {
+ if (type === '证件照') {
+ form.photoAttachment = res.data.id;
+ }
+ if (type === '资质') {
+ form.qaAttachment = res.data.id;
+ }
+ } else {
+ this.$message.error('图片上传出错!');
+ }
+ } catch (error) {
+ this.$message.error('图片上传出错!');
+ }
+ }
+ }else{
+ return
+ }
+ };
+ const uploadPromises = [
+ uploadAndCollect(resumeList, '证件照'),
+ uploadAndCollect(inventionList, '资质')
+ ];
+ try {
+ await Promise.all(uploadPromises);
+ console.log(form, 'form1');
+ } catch (error) {
+ console.error('上传出错:', error);
+ }
+ },
+
+ async submit(){
+ this.$refs["ruleForm"].validate(async(valid) =>{
+ if(valid) {
+ await this.submitUpload()
+ if(this.title == '新增考评员'){
+ const {id,...data} = this.form
+ const res= await addExaminer(data)
+ if(res.code == 200){
+ this.$message({
+ type:'success',
+ message: res.msg
+ })
+ this.resumeList = []
+ this.inventionList = []
+ this.open = false
+ this.$emit('closeDialog')
+ }else{
+ this.$message({
+ type:'warning',
+ message: res.msg
+ })
+ }
+ }else{
+ const res= await editExaminer(this.form)
+ if(res.code == 200){
+ this.$message({
+ type:'success',
+ message: res.msg
+ })
+ this.fileList = []
+ this.open = false
+ this.$emit('closeDialog')
+ }else{
+ this.$message({
+ type:'warning',
+ message: res.msg
+ })
+ }
+ }
+ }else{
+ this.$message({
+ type:'warning',
+ message:'请完善必填信息'
+ })
+ }
+ })
+ },
+ deleteItem(index){
+ this.form.operateTypes.splice(index,1);
+ },
+ 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;
+ },
+
+ resumeChange(file, fileList) {
+ this.resumeList = fileList;
+ },
+ inventChange(file, fileList){
+ this.inventionList = fileList;
+ },
+ overLimit(){
+ this.$message({
+ type: 'warning',
+ message: '超出文件上传数量'
+ });
+ },
+ handlePreview(file) {
+ this.dialogImageUrl = file.url;
+ this.dialogVisible = true;
+ },
+ beforeAvatarUpload(file) {
+ const isLt5M = file.size / 1024 / 1024 < 5;
+ if (!isLt5M) {
+ this.$message.error('上传头像图片大小不能超过 5MB!');
+ }
+ return isLt5M;
+ },
+
+ handleRemove(file,fileList,type) {
+ if(type == '证件照'){
+ this.resumeList = fileList
+ }else{
+ this.inventionList = fileList
+ }
+ },
+ async submitAdd(){
+ this.$refs["addRuleForm"].validate(async(valid) =>{
+ if(valid) {
+ if(this.addForm.operate.length == 2){
+ this.addForm.qualificationType = this.findNameById(this.typeList,this.addForm.operate[0])
+ this.addForm.jobCategory = this.findNameById(this.typeList,this.addForm.operate[1])
+ this.addForm.operateTypeId = this.addForm.operate[1]
+ }
+ if(this.addForm.operate.length == 3){
+ this.addForm.qualificationType = this.findNameById(this.typeList,this.addForm.operate[0])
+ this.addForm.jobCategory = this.findNameById(this.typeList,this.addForm.operate[1])
+ this.addForm.operationItems = this.findNameById(this.typeList,this.addForm.operate[2])
+ this.addForm.operateTypeId = this.addForm.operate[2]
+ }
+ const {operate,...obj} = this.addForm
+ this.form.operateTypes.push(obj)
+ this.addVisible = false
+ }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
+ }
+ }
+};
+</script>
+
+<style scoped lang="scss">
+.home {
+ .main-title{
+ font-size: 24px;
+ font-weight: bolder;
+ text-align: center;
+ margin-bottom: 20px;
+ color: #333;
+ }
+ blockquote {
+ padding: 10px 20px;
+ margin: 0 0 20px;
+ font-size: 17.5px;
+ border-left: 5px solid #eee;
+ }
+ hr {
+ margin-top: 20px;
+ margin-bottom: 20px;
+ border: 0;
+ border-top: 1px solid #eee;
+ }
+ .col-item {
+ margin-bottom: 20px;
+ }
+
+ ul {
+ padding: 0;
+ margin: 0;
+ }
+
+ font-family: "open sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 13px;
+ color: #676a6c;
+ overflow-x: hidden;
+
+ ul {
+ list-style-type: none;
+ }
+
+ h4 {
+ margin-top: 0px;
+ }
+
+ h2 {
+ margin-top: 10px;
+ font-size: 26px;
+ font-weight: 100;
+ }
+
+ p {
+ margin-top: 10px;
+
+ b {
+ font-weight: 700;
+ }
+ }
+
+ .update-log {
+ ol {
+ display: block;
+ list-style-type: decimal;
+ margin-block-start: 1em;
+ margin-block-end: 1em;
+ margin-inline-start: 0;
+ margin-inline-end: 0;
+ padding-inline-start: 40px;
+ }
+ }
+}
+.avatar-uploader .el-upload {
+ border: 1px dashed #d9d9d9;
+ border-radius: 6px;
+ cursor: pointer;
+ position: relative;
+ overflow: hidden;
+}
+.avatar-uploader .el-upload:hover {
+ border-color: #409EFF;
+}
+.avatar-uploader-icon {
+ font-size: 28px;
+ color: #8c939d;
+ width: 178px;
+ height: 178px;
+ line-height: 178px;
+ text-align: center;
+}
+.avatar {
+ width: 178px;
+ height: 178px;
+ display: block;
+}
+</style>
+
diff --git a/src/views/notCoalMine/nTeacherManage/nReviewer/index.vue b/src/views/notCoalMine/nTeacherManage/nReviewer/index.vue
index ec5a418..6be315e 100644
--- a/src/views/notCoalMine/nTeacherManage/nReviewer/index.vue
+++ b/src/views/notCoalMine/nTeacherManage/nReviewer/index.vue
@@ -1,27 +1,27 @@
<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-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-row :gutter="10" class="mb8">
<el-col :span="1.5">
@@ -30,90 +30,129 @@
plain
icon="el-icon-plus"
size="mini"
- @click="handleAdd"
+ @click="openDialog({},'add')"
v-hasPermi="['system:experts:add']"
>新增</el-button>
</el-col>
- <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+ <right-toolbar :showSearch.sync="showSearch" @queryTable="getPage"></right-toolbar>
</el-row>
- <el-table v-loading="loading" :data="expertList">
+ <el-table v-loading="loading" :data="dataList">
<el-table-column type="index" label="序号" width="55" align="center" />
<el-table-column label="姓名" align="center" prop="name" />
- <el-table-column label="性别" align="center" prop="name" />
- <el-table-column label="身份证号" align="center" prop="name" />
- <el-table-column label="最高学历" align="center" prop="degree" />
- <el-table-column label="职称" align="center" prop="job" />
- <el-table-column label="资质" align="center" prop="speciality" />
- <el-table-column label="资质有效期" align="center"/>
- <el-table-column label="描述" align="center"/>
- <el-table-column label="证件照" align="center"/>
- <el-table-column label="状态" align="center"/>
- <el-table-column label="工种详情" align="center"/>
- <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+ <el-table-column label="性别" align="center" prop="sex">
<template #default="scope">
- <el-button
- size="mini"
- type="text"
- icon="el-icon-edit"
- @click="handleUpdate(scope.row)"
- >编辑</el-button>
- <el-button
- size="mini"
- type="text"
- icon="el-icon-view"
- @click="handleView(scope.row)"
- >停用</el-button>
- <el-button
- size="mini"
- type="text"
- icon="el-icon-delete"
- @click="handleDelete(scope.row)"
- v-hasPermi="['system:experts:remove']"
- >删除</el-button>
+ {{ scope.row.sex == 0?'男':'女' }}
+ </template>
+ </el-table-column>
+ <el-table-column label="身份证号" align="center" prop="code" />
+ <el-table-column label="最高学历" align="center" prop="eduLevel">
+ <template #default="scope">
+ {{getDegreeName(scope.row.eduLevel)}}
+ </template>
+ </el-table-column>
+ <el-table-column label="职称" align="center" prop="jobTitle" />
+ <el-table-column label="资质" align="center" prop="photoPath">
+ <template #default="scope">
+ <el-button type="text" @click="viewFile(scope.row.qaAttachment)">预览</el-button>
+ </template>
+ </el-table-column>
+ <el-table-column label="资质有效期" align="center" prop="expiredTime"/>
+ <el-table-column label="描述" align="center" prop="description" />
+ <el-table-column label="证件照片" align="center" prop="photoPath">
+ <template #default="scope">
+ <el-button type="text" @click="viewFile(scope.row.photoAttachment)">预览</el-button>
+ </template>
+ </el-table-column>
+ <el-table-column label="状态" align="center" prop="status">
+ <template #default="scope">
+ <el-tag :type="scope.row.status === '0'? 'success' : 'danger' ">{{ scope.row.status == '0'?'正常':'停用' }}</el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column label="工种详情" align="center">
+ <template #default="scope">
+ <el-button size="mini" type="text" @click="openWorkType(scope.row)" v-if="scope.row.operateTypes && scope.row.operateTypes.length>0">查看</el-button>
+ <span v-else>无</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="300">
+ <template #default="scope">
+ <el-button size="mini" type="text" icon="el-icon-edit" @click="openDialog(scope.row,'edit')">编辑</el-button>
+ <el-button size="mini" type="text" icon="el-icon-view" @click="openDialog(scope.row,'view')">查看</el-button>
+ <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['system:experts:remove']">删除</el-button>
+ <el-switch size="mini" v-model="scope.row.status" style="margin-left: 12px" active-value="0" inactive-value="1" @change="handleAbort($event,scope.row)"></el-switch>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
- :page.sync="queryParams.pageIndex"
+ :page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
- @pagination="getList"
+ @pagination="getPage"
/>
+ <reviewerDialog ref="teacherDialog" @closeDialog="resetQuery"></reviewerDialog>
+ <el-dialog title="工种详情" :visible.sync="typeVisible" width="50%" append-to-body>
+ <el-table :data="workType" border>
+ <el-table-column label="资格类型" align="center" prop="qualificationType"/>
+ <el-table-column label="作业类别" align="center" prop="jobCategory"/>
+ <el-table-column label="操作项目" align="center" prop="operationItems"/>
+ </el-table>
+ </el-dialog>
</div>
</template>
<script>
+import reviewerDialog from "@/views/notCoalMine/nTeacherManage/nReviewer/components/reviewerDialog";
+import {delExaminer, getExaminerPage, abortExaminer} from "@/api/coalMine/teacher";
+import axios from "axios";
+import {getToken} from "@/utils/auth";
+import {delPeople} from "@/api/coalMine/people";
+
export default {
- name: "cTeacherManage",
- dicts: [],
- components: {},
+ name: "nReviewerManage",
+ dicts: ['sys_highest_education_code'],
+ components: { reviewerDialog },
data() {
return {
loading: false,
- single: true,
- multiple: true,
showSearch: true,
- addForm: false,
+ typeVisible: false,
+ workType: [],
+ dataList: [],
total: 0,
- expertTypes: [],
- expertList: [],
- queryParams: {},
- classiFy: [],
- form: {},
- rules: {
- classifyName: [
- { required: true, message: "分类名称不能为空", trigger: "blur" }
- ]
+ queryParams: {
+ pageNum: 1,
+ pageSize: 10,
+ isCm: '0'
}
};
},
created() {
-
+ const t = this
+ t.getPage()
},
methods: {
- getList(){
+ async getPage(){
+ this.loading = true
+ const res = await getExaminerPage(this.queryParams)
+ if(res.code == 200){
+ this.dataList = res.rows
+ this.total = res.total
+ }else{
+ this.$message({
+ message: res.msg,
+ type: 'warning'
+ })
+ }
+ this.loading = false
+ },
+ openDialog(data,type){
+ this.$refs.teacherDialog.openDialog(data,type)
+ },
+ openWorkType(row){
+ this.workType = row.operateTypes
+ this.typeVisible = true
},
handleChange(){
@@ -122,11 +161,72 @@
},
resetQuery(){
-
+ this.queryParams = {
+ pageNum: 1,
+ pageSize: 10,
+ isCm: '0'
+ }
+ this.getPage()
},
- handleAdd(){
+ viewFile(file){
+ axios.get(process.env.VUE_APP_BASE_API + file.fileUrl,{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)
+ } else {
+ this.$message.error('获取文件失败')
+ }
+ })
+ },
+ getDegreeName(code){
+ let obj = JSON.parse(JSON.stringify(this.dict.type.sys_highest_education_code)).find(i=>i.value == code)
+ if(obj){
+ return obj.label
+ }else{
+ return '未知'
+ }
+ },
+ async handleAbort(value,row){
+ const res = await abortExaminer({id: row.id,status: value})
+ if(res.code == 200){
+ this.$message({
+ type: 'success',
+ message: '状态变更成功!'
+ });
+ this.getPage()
+ }else {
+ this.$message({
+ type: 'warning',
+ message: res.msg
+ });
+ }
+ },
+ handleDelete(row){
+ this.$confirm('此操作将永久删除该条数据, 是否继续?', '提示', {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning'
+ }).then(async () => {
+ const res = await delExaminer(row.id)
+ if(res.code == 200){
+ this.$message({
+ type: 'success',
+ message: '删除成功!'
+ });
+ await this.getPage()
+ }else{
+ this.$message({
+ type: 'warning',
+ message: res.msg
+ });
+ }
+ }).catch(() => {
- }
+ });
+ },
}
};
</script>
diff --git a/src/views/notCoalMine/nTeacherManage/nTeacher/components/teacherDialog.vue b/src/views/notCoalMine/nTeacherManage/nTeacher/components/teacherDialog.vue
index a17417d..f18dc0d 100644
--- a/src/views/notCoalMine/nTeacherManage/nTeacher/components/teacherDialog.vue
+++ b/src/views/notCoalMine/nTeacherManage/nTeacher/components/teacherDialog.vue
@@ -5,14 +5,14 @@
<el-row>
<el-col :span="20">
<el-form-item label="姓名" prop="name">
- <el-input v-model="form.name"></el-input>
+ <el-input v-model="form.name" :readonly="disable"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="20">
<el-form-item label="性别" prop="sex">
- <el-radio-group v-model="form.sex">
+ <el-radio-group v-model="form.sex" :disabled="disable">
<el-radio :label="0">男</el-radio>
<el-radio :label="1">女</el-radio>
</el-radio-group>
@@ -21,40 +21,48 @@
</el-row>
<el-row>
<el-col :span="20">
- <el-form-item label="身份证号" prop="idCard">
- <el-input v-model="form.idCard"></el-input>
+ <el-form-item label="身份证号" prop="code">
+ <el-input v-model="form.code" :readonly="disable"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="20">
- <el-form-item label="联系电话" prop="phone">
- <el-input v-model="form.phone"></el-input>
+ <el-form-item label="联系电话" prop="mobilePhone">
+ <el-input v-model="form.mobilePhone" :readonly="disable"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="20">
- <el-form-item label="职称" prop="title">
- <el-input v-model="form.title"></el-input>
+ <el-form-item label="职称" prop="jobTitle">
+ <el-input v-model="form.jobTitle" :readonly="disable"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="20">
- <el-form-item label="最高学历" prop="degree">
- <el-input v-model="form.degree"></el-input>
+ <el-form-item label="最高学历" prop="eduLevel">
+ <el-select v-model="form.eduLevel" placeholder="请选择" style="width: 100%" :disabled="disable">
+ <el-option
+ v-for="dict in dict.type.sys_highest_education_code"
+ :key="dict.value"
+ :label="dict.label"
+ :value="dict.value"
+ />
+ </el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="20">
- <el-form-item label="资质到期" prop="birthday">
+ <el-form-item label="资质到期" prop="expiredTime">
<el-date-picker
style="width: 100%"
- v-model="form.birthday"
+ v-model="form.expiredTime"
value-format="yyyy-MM-dd"
type="date"
+ :disabled="disable"
placeholder="选择日期">
</el-date-picker>
</el-form-item>
@@ -62,10 +70,10 @@
</el-row>
<el-row>
<el-col :span="20">
- <el-form-item label="在职情况" prop="dutyStatus">
- <el-radio-group v-model="form.dutyStatus">
- <el-radio :label="0">在岗</el-radio>
- <el-radio :label="1">退休</el-radio>
+ <el-form-item label="在职情况" prop="status">
+ <el-radio-group v-model="form.status" :disabled="disable">
+ <el-radio label="0">正常</el-radio>
+ <el-radio label="1">停用</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
@@ -73,17 +81,18 @@
<el-row>
<el-col :span="20">
<el-form-item label="描述">
- <el-input v-model="form.remark" type="textarea" :autosize="{ minRows: 2}"></el-input>
+ <el-input v-model="form.description" type="textarea" :autosize="{ minRows: 2}" :readonly="disable"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="20">
- <el-form-item label="证件照">
+ <el-form-item label="证件照" prop="photoAttachment">
<el-upload
+ :disabled="disable"
action="#"
multiple
- :limit="20"
+ :limit="1"
:on-exceed="overLimit"
:auto-upload="false"
accept="image/*,.pdf"
@@ -92,7 +101,7 @@
:before-upload="beforeAvatarUpload"
:on-change="resumeChange"
:on-preview="handlePreview"
- :on-remove="handleRemove">
+ :on-remove="(file,fileList)=>handleRemove(file,fileList,'证件照')">
<i class="el-icon-plus"></i>
</el-upload>
</el-form-item>
@@ -100,11 +109,12 @@
</el-row>
<el-row>
<el-col :span="20">
- <el-form-item label="资质">
+ <el-form-item label="资质" prop="qaAttachment">
<el-upload
+ :disabled="disable"
action=""
multiple
- :limit="20"
+ :limit="1"
:on-exceed="overLimit"
:auto-upload="false"
accept="image/*,.pdf"
@@ -113,32 +123,85 @@
:before-upload="beforeAvatarUpload"
:on-change="inventChange"
:on-preview="handlePreview"
- :on-remove="handleRemove">
+ :on-remove="(file,fileList)=>handleRemove(file,fileList,'资质')">
<i class="el-icon-plus"></i>
</el-upload>
</el-form-item>
</el-col>
</el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="工种详情" prop="operateTypes">
+ <el-table :data="form.operateTypes" border>
+ <el-table-column label="序号" type="index" align="center"/>
+ <el-table-column label="资格类型" align="center" prop="qualificationType" />
+ <el-table-column label="作业类别" align="center" prop="jobCategory" />
+ <el-table-column label="操作项目" align="center" prop="operationItems"/>
+ <el-table-column label="操作" align="center" class-name="small-padding fixed-width" v-if="disable == false">
+ <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" icon="el-icon-delete" @click="deleteItem(scope.index)" v-hasPermi="['system:experts:remove']">删除</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <el-button v-if="disable == false" @click="openEdit({},'add')" style="margin-top: 15px">新增</el-button>
+ </el-form-item>
+ </el-col>
+ </el-row>
</el-form>
- <div style="width: 100%;padding-bottom: 30px;display: flex;justify-content: center">
+ <div style="width: 100%;padding-bottom: 30px;display: flex;justify-content: center" v-if="disable == false">
<el-button type="primary" @click="submit()">提交</el-button>
</div>
- <el-dialog :visible.sync="dialogVisible">
+ <el-dialog :visible.sync="dialogVisible" append-to-body>
<img width="100%" :src="dialogImageUrl" alt="">
+ </el-dialog>
+ <el-dialog :title="dialogTitle" :visible.sync="addVisible" width="50%" append-to-body>
+ <el-form :model="addForm" :rules="addRules" ref="addRuleForm" label-width="200px">
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="资格类型" prop="operate">
+ <el-cascader
+ v-model="addForm.operate"
+ :options="typeList"
+ style="width: 100%"
+ :props="{ expandTrigger: 'hover', value: 'id',label: 'name'}"></el-cascader>
+ </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="submitAdd()">提交</el-button>
+ </div>
</el-dialog>
</div>
</el-dialog>
</template>
<script>
-// import {getExpertTypes,addExpertInfo,uploadFile} from '@/api/system/form'
import { verifySimplePhone, verifyIdCard } from "@/utils/validate";
+import {getOperatePage} from "@/api/coalMine/operateType";
+import {addTeacher, editTeacher, uploadFile} from "@/api/coalMine/teacher";
export default {
name: "teacherDialog",
+ dicts: ['sys_highest_education_code'],
data() {
- var validatePass = (rule, value, callback) => {
- if (this.fileList.length == 0) {
+ // let validateTypes = (rule, value, callback) => {
+ // if (this.form.operateTypes.length == 0) {
+ // callback(new Error('请添加工种详情'));
+ // } else {
+ // callback();
+ // }
+ // }
+ let validateResume = (rule, value, callback) => {
+ if (this.resumeList.length == 0) {
callback(new Error('请上传证件照'));
+ } else {
+ callback();
+ }
+ }
+ let validateCert = (rule, value, callback) => {
+ if (this.inventionList.length == 0) {
+ callback(new Error('请上传资质证书'));
} else {
callback();
}
@@ -168,94 +231,91 @@
return {
title: '新增教师',
open: false,
+ disable: false,
labelPosition: 'right',
form:{
+ id: null,
+ isCm: '0',
name:'',
sex:'',
- profession: [],
- bigClassify:null,
- smallClassify: null,
- birthday: '',
- phone:'',
- title: '',
- idCard: '',
- dutyStatus: null,
- companyName: '',
- companyAddress: '',
- deptName: '',
- job: '',
- companyTelephone: '',
- faxNum: '',
- email: '',
- graduationSchool: '',
- degree: '',
- speciality: '',
- currentProfession: '',
- supportDirectionSafety: [],
- supportDirectionPrevention: [],
- supportDirectionEmergency: [],
- resumeKey: '',
- paperSituationKey: '',
- remark: '',
+ code: '',
+ mobilePhone: '',
+ jobTitle: '',
+ eduLevel: '',
+ expiredTime: '',
+ status: '',
+ operateTypes: [],
+ photoAttachment: null,
+ qaAttachment: null,
+ description: '',
},
- expertsType: [],
- directionList: [
- {
- value: 1,
- label: '现场检查'
- },
- {
- value: 2,
- label: '调查评估'
- },
- {
- value: 3,
- label: '咨询服务'
- },
- {
- value: 4,
- label: '教育培训'
- },
- {
- value: 5,
- label: '其他'
- }
- ],
resumeList: [],
inventionList: [],
dialogImageUrl: '',
dialogVisible: false,
- rules:{
- name:[{ required: true, message: '请填写姓名', trigger: 'blur' }],
- sex:[{ required: true, message: '请选择性别', trigger: 'blur' }],
- profession: [{ required: true, message: '请选择专业类别', trigger: 'blur' }],
- birthday: [{ required: true, message: '请选择出生日期', trigger: 'blur' }],
- phone:[{ required: true, validator: validatePhone, trigger: 'blur' }],
- title: [{ required: true, message: '请填写职称', trigger: 'blur' }],
- electronicPhoto: [{ required: true,validator: validatePass, trigger: 'blur' }],
- idCard: [{ required: true, validator: verifyId, trigger: 'blur' }],
- dutyStatus: [{ required: true, message: '请选择在岗情况', trigger: 'blur' }],
- companyName: [{ required: true, message: '请填写单位全称', trigger: 'blur' }],
- degree: [{ required: true, message: '请填写最高学历', trigger: 'blur' }]
+ dialogTitle: '新增',
+ addVisible: false,
+ addForm: {
+ operate: [],
+ qualificationType: '',
+ jobCategory: '',
+ operationItems: '',
+ operateTypeId: null
},
+ typeList: [],
+ rules:{
+ name:[{ required: true, message: '请填写姓名', trigger: 'blur'}],
+ sex:[{ required: true, message: '请选择性别', trigger: 'blur'}],
+ code:[{ required: true, validator: verifyId, trigger: 'blur' }],
+ mobilePhone:[{ required: true, validator: validatePhone, trigger: 'blur' }],
+ // code:[{ required: true, message: '请填写身份证号', trigger: 'blur'}],
+ // mobilePhone:[{ required: true, message: '请填写联系方式', trigger: 'blur'}],
+ jobTitle: [{ required: true, message: '请填写职称', trigger: 'blur'}],
+ eduLevel: [{ required: true, message: '请选择最高学历', trigger: 'blur'}],
+ expiredTime: [{ required: true, message: '请选择到期时间', trigger: 'blur'}],
+ status: [{ required: true, message: '请选择在岗情况', trigger: 'blur'}],
+ // operateTypes: [{ required: true,validator: validateTypes, trigger: 'blur' }],
+ photoAttachment: [{ required: true,validator: validateResume, trigger: 'blur'}],
+ qaAttachment: [{ required: true,validator: validateCert, trigger: 'blur'}]
+ },
+ addRules:{
+ operate:[{ required: true, message: '请选择', trigger: 'blur' }]
+ }
};
},
created() {
const t = this
- const width = document.documentElement.clientWidth
- if(width < 750){t.labelPosition = 'top'}
},
methods: {
openDialog(val,type){
- const width = document.documentElement.clientWidth
- if(width < 750){this.labelPosition = 'top'}
+ this.resumeList = []
+ this.inventionList = []
if(type == 'add'){
this.title = '新增教师'
+ this.disable = false
+ this.form = {
+ id: null,
+ isCm: '0',
+ name:'',
+ sex:'',
+ code: '',
+ mobilePhone: '',
+ jobTitle: '',
+ eduLevel: '',
+ expiredTime: '',
+ status: '',
+ operateTypes: [],
+ photoAttachment: null,
+ qaAttachment: null,
+ description: '',
+ }
}else{
if(type == 'edit'){
this.title = '编辑教师'
+ this.disable = false
}else{
this.title = '查看教师'
+ this.disable = true
}
if(val){
for(let i in val){
@@ -264,29 +324,150 @@
}
}
}
+ this.form.sex = Number(this.form.sex)
+ // 仅限单张图片处理
+ this.form.photoAttachment = val.photoAttachment.id
+ this.form.qaAttachment = val.qaAttachment.id
+ this.resumeList.push({
+ name: val.photoAttachment.fileName,
+ url: process.env.VUE_APP_BASE_API + val.photoAttachment.fileUrl
+ })
+ this.inventionList.push({
+ name: val.qaAttachment.fileName,
+ url: process.env.VUE_APP_BASE_API + val.qaAttachment.fileUrl
+ })
+ if(!this.form.operateTypes){
+ this.form.operateTypes = []
+ }
+ console.log(this.form,'form')
}
this.open = true
},
+
isValidKey(key,obj){
return key in obj
},
+ openEdit(data,type){
+ this.getList()
+ if(type == 'add'){
+ this.dialogTitle = '新增'
+ this.addVisible = true
+ this.addForm = {
+ operate: [],
+ qualificationType: '',
+ jobCategory: '',
+ operationItems: '',
+ operateTypeId: null
+ }
+ }else{
- async getExpertsType(){
- const res = await getExpertTypes()
+ }
+ },
+ async submitUpload() {
+ const { resumeList, inventionList, form } = this;
+ const uploadAndCollect = async (fileList, type) => {
+ if (fileList.length > 0 && fileList.find((file)=>file.raw)) {
+ for (const file of fileList) {
+ const formData = new FormData();
+ formData.append("file", file.raw);
+ formData.append("module", 'accountPath');
+ try {
+ const res = await uploadFile(formData);
+ if (res.code === 200) {
+ if (type === '证件照') {
+ form.photoAttachment = res.data.id;
+ }
+ if (type === '资质') {
+ form.qaAttachment = res.data.id;
+ }
+ } else {
+ this.$message.error('图片上传出错!');
+ }
+ } catch (error) {
+ this.$message.error('图片上传出错!');
+ }
+ }
+ }else{
+ return
+ }
+ };
+ const uploadPromises = [
+ uploadAndCollect(resumeList, '证件照'),
+ uploadAndCollect(inventionList, '资质')
+ ];
+ try {
+ await Promise.all(uploadPromises);
+ console.log(form, 'form1');
+ } catch (error) {
+ console.error('上传出错:', error);
+ }
+ },
+
+ async submit(){
+ this.$refs["ruleForm"].validate(async(valid) =>{
+ if(valid) {
+ await this.submitUpload()
+ if(this.title == '新增教师'){
+ const {id,...data} = this.form
+ const res= await addTeacher(data)
+ if(res.code == 200){
+ this.$message({
+ type:'success',
+ message: res.msg
+ })
+ this.resumeList = []
+ this.inventionList = []
+ this.open = false
+ this.$emit('closeDialog')
+ }else{
+ this.$message({
+ type:'warning',
+ message: res.msg
+ })
+ }
+ }else{
+ const res= await editTeacher(this.form)
+ if(res.code == 200){
+ this.$message({
+ type:'success',
+ message: res.msg
+ })
+ this.fileList = []
+ this.open = false
+ this.$emit('closeDialog')
+ }else{
+ this.$message({
+ type:'warning',
+ message: res.msg
+ })
+ }
+ }
+ }else{
+ this.$message({
+ type:'warning',
+ message:'请完善必填信息'
+ })
+ }
+ })
+ },
+ deleteItem(index){
+ this.form.operateTypes.splice(index,1);
+ },
+ async getList() {
+ this.loading = true;
+ const res = await getOperatePage({name: ''})
if(res.code == 200){
- this.expertsType = res.data
+ this.typeList = this.handleTree(res.data, "id");
}else{
this.$message({
type: 'warning',
message: res.msg
});
}
+ this.loading = false;
},
- avatorChange(file, fileList) {
- this.fileList = fileList;
- },
resumeChange(file, fileList) {
this.resumeList = fileList;
},
@@ -310,71 +491,31 @@
}
return isLt5M;
},
- async submitUpload() {
- const t = this;
- // 创建一个数组来存储所有上传操作的 Promise
- const uploadPromises = [];
- // 定义一个函数来上传文件并将结果存入 resumeLink 数组
- async function uploadAndCollect(fileList, type) {
- if (fileList.length > 0) {
- const resumeLink = [];
- for (const file of fileList) {
- const formData = new FormData();
- formData.append("file", file.raw);
- formData.append("module", 'expertPath');
- const res = await uploadFile(formData);
- if (res.code === 200) {
- resumeLink.push(res.data[0].fileKey);
- } else {
- this.$message.error('图片上传出错!');
- }
- }
- // 将收集到的文件链接设置到 this.form 中
- if (type == '工作简历') { t.form.resumeKey = resumeLink.join(',')}
- if (type == '发明著作') { t.form.paperSituationKey = resumeLink.join(',')}
- return resumeLink;
- }
- return [];
+ handleRemove(file,fileList,type) {
+ if(type == '证件照'){
+ this.resumeList = fileList
+ }else{
+ this.inventionList = fileList
}
- // 依次执行上传操作并等待完成
- uploadPromises.push(uploadAndCollect(t.resumeList, '工作简历'));
- uploadPromises.push(uploadAndCollect(t.inventionList,'发明著作'));
- // 等待所有上传操作完成
- await Promise.all(uploadPromises);
- // 打印已更新的 this.form
- console.log(t.form, 'form1');
},
- handleRemove(file, fileList) {
- console.log(file, fileList);
- },
- async submit(){
- this.$refs["ruleForm"].validate(async(valid) =>{
+ async submitAdd(){
+ this.$refs["addRuleForm"].validate(async(valid) =>{
if(valid) {
- await this.submitUpload()
- let data = this.form
- data.supportDirectionSafety = data.supportDirectionSafety.join(',')
- data.supportDirectionPrevention = data.supportDirectionPrevention.join(',')
- data.supportDirectionEmergency = data.supportDirectionEmergency.join(',')
- data.bigClassify = data.profession[0]
- data.smallClassify = data.profession[1]
- delete data.profession
- const res= await addExpertInfo(data)
- if(res.code == 200){
- this.$message({
- type:'success',
- message: res.msg
- })
- this.$emit('closeDialog')
- this.$refs.ruleForm.resetFields()
- this.resumeList = []
- this.inventionList = []
- }else{
- this.$message({
- type:'warning',
- message: res.msg
- })
+ if(this.addForm.operate.length == 2){
+ this.addForm.qualificationType = this.findNameById(this.typeList,this.addForm.operate[0])
+ this.addForm.jobCategory = this.findNameById(this.typeList,this.addForm.operate[1])
+ this.addForm.operateTypeId = this.addForm.operate[1]
}
+ if(this.addForm.operate.length == 3){
+ this.addForm.qualificationType = this.findNameById(this.typeList,this.addForm.operate[0])
+ this.addForm.jobCategory = this.findNameById(this.typeList,this.addForm.operate[1])
+ this.addForm.operationItems = this.findNameById(this.typeList,this.addForm.operate[2])
+ this.addForm.operateTypeId = this.addForm.operate[2]
+ }
+ const {operate,...obj} = this.addForm
+ this.form.operateTypes.push(obj)
+ this.addVisible = false
}else{
this.$message({
type:'warning',
@@ -383,8 +524,19 @@
}
})
},
- changeSource(num){
- this.form.source = num
+ 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
}
}
};
diff --git a/src/views/notCoalMine/nTeacherManage/nTeacher/index.vue b/src/views/notCoalMine/nTeacherManage/nTeacher/index.vue
index c528663..c09e688 100644
--- a/src/views/notCoalMine/nTeacherManage/nTeacher/index.vue
+++ b/src/views/notCoalMine/nTeacherManage/nTeacher/index.vue
@@ -1,27 +1,27 @@
<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-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-row :gutter="10" class="mb8">
<el-col :span="1.5">
@@ -30,46 +30,56 @@
plain
icon="el-icon-plus"
size="mini"
- @click="openTeacher({},'add')"
+ @click="openDialog({},'add')"
v-hasPermi="['system:experts:add']"
>新增</el-button>
</el-col>
- <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+ <right-toolbar :showSearch.sync="showSearch" @queryTable="getPage"></right-toolbar>
</el-row>
- <el-table v-loading="loading" :data="expertList">
+ <el-table v-loading="loading" :data="dataList">
<el-table-column type="index" label="序号" width="55" align="center" />
<el-table-column label="姓名" align="center" prop="name" />
- <el-table-column label="性别" align="center" prop="name" />
- <el-table-column label="身份证号" align="center" prop="name" />
- <el-table-column label="最高学历" align="center" prop="degree" />
- <el-table-column label="职称" align="center" prop="job" />
- <el-table-column label="资质" align="center" prop="speciality" />
- <el-table-column label="资质有效期" align="center"/>
- <el-table-column label="描述" align="center"/>
- <el-table-column label="证件照" align="center"/>
- <el-table-column label="状态" align="center"/>
- <el-table-column label="工种详情" align="center"/>
- <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+ <el-table-column label="性别" align="center" prop="sex">
<template #default="scope">
- <el-button
- size="mini"
- type="text"
- icon="el-icon-edit"
- @click="openTeacher({},'add')"
- >编辑</el-button>
- <el-button
- size="mini"
- type="text"
- icon="el-icon-delete"
- @click="handleDelete(scope.row)"
- v-hasPermi="['system:experts:remove']"
- >删除</el-button>
- <el-button
- size="mini"
- type="text"
- icon="el-icon-edit"
- @click="openWorkType(scope.row)"
- >工种详情</el-button>
+ {{ scope.row.sex == 0?'男':'女' }}
+ </template>
+ </el-table-column>
+ <el-table-column label="身份证号" align="center" prop="code" />
+ <el-table-column label="最高学历" align="center" prop="eduLevel">
+ <template #default="scope">
+ {{getDegreeName(scope.row.eduLevel)}}
+ </template>
+ </el-table-column>
+ <el-table-column label="职称" align="center" prop="jobTitle" />
+ <el-table-column label="资质" align="center" prop="photoPath">
+ <template #default="scope">
+ <el-button type="text" @click="viewFile(scope.row.qaAttachment)">预览</el-button>
+ </template>
+ </el-table-column>
+ <el-table-column label="资质有效期" align="center" prop="expiredTime"/>
+ <el-table-column label="描述" align="center" prop="description" />
+ <el-table-column label="证件照片" align="center" prop="photoPath">
+ <template #default="scope">
+ <el-button type="text" @click="viewFile(scope.row.photoAttachment)">预览</el-button>
+ </template>
+ </el-table-column>
+ <el-table-column label="状态" align="center" prop="status">
+ <template #default="scope">
+ <el-tag :type="scope.row.status === '0'? 'success' : 'danger' ">{{ scope.row.status == '0'?'正常':'停用' }}</el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column label="工种详情" align="center">
+ <template #default="scope">
+ <el-button size="mini" type="text" @click="openWorkType(scope.row)" v-if="scope.row.operateTypes && scope.row.operateTypes.length>0">查看</el-button>
+ <span v-else>无</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="300">
+ <template #default="scope">
+ <el-button size="mini" type="text" icon="el-icon-edit" @click="openDialog(scope.row,'edit')">编辑</el-button>
+ <el-button size="mini" type="text" icon="el-icon-view" @click="openDialog(scope.row,'view')">查看</el-button>
+ <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['system:experts:remove']">删除</el-button>
+ <el-switch size="mini" v-model="scope.row.status" style="margin-left: 12px" active-value="0" inactive-value="1" @change="handleAbort($event,scope.row)"></el-switch>
</template>
</el-table-column>
</el-table>
@@ -78,47 +88,71 @@
:total="total"
:page.sync="queryParams.pageIndex"
:limit.sync="queryParams.pageSize"
- @pagination="getList"
+ @pagination="getPage"
/>
- <teacherDialog ref="teacherDialog"></teacherDialog>
+ <teacherDialog ref="teacherDialog" @closeDialog="resetQuery"></teacherDialog>
+ <el-dialog title="工种详情" :visible.sync="typeVisible" width="50%" append-to-body>
+ <el-table :data="workType" border>
+ <el-table-column label="资格类型" align="center" prop="qualificationType"/>
+ <el-table-column label="作业类别" align="center" prop="jobCategory"/>
+ <el-table-column label="操作项目" align="center" prop="operationItems"/>
+ </el-table>
+ </el-dialog>
</div>
</template>
<script>
import teacherDialog from "@/views/notCoalMine/nTeacherManage/nTeacher/components/teacherDialog";
+import {delTeacher, getTeacherPage, abortTeacher} from "@/api/coalMine/teacher";
+import axios from "axios";
+import {getToken} from "@/utils/auth";
+import {delPeople} from "@/api/coalMine/people";
+
export default {
- name: "cTeacherManage",
- dicts: [],
- components: {teacherDialog},
+ name: "nTeacherManage",
+ dicts: ['sys_highest_education_code'],
+ components: { teacherDialog },
data() {
return {
loading: false,
- single: true,
- multiple: true,
showSearch: true,
- addForm: false,
+ typeVisible: false,
+ workType: [],
+ dataList: [],
total: 0,
- expertTypes: [],
- expertList: [],
- queryParams: {},
- classiFy: [],
- form: {},
- rules: {
- classifyName: [
- { required: true, message: "分类名称不能为空", trigger: "blur" }
- ]
+ queryParams: {
+ pageNum: 1,
+ pageSize: 10,
+ isCm: '0'
}
};
},
created() {
-
+ const t = this
+ t.getPage()
},
methods: {
- openTeacher(data,type){
+ async getPage(){
+ this.loading = true
+ const res = await getTeacherPage(this.queryParams)
+ if(res.code == 200){
+ this.dataList = res.rows
+ this.total = res.total
+ }else{
+ this.$message({
+ message: res.msg,
+ type: 'warning'
+ })
+ }
+ this.loading = false
+ },
+
+ openDialog(data,type){
this.$refs.teacherDialog.openDialog(data,type)
},
- getList(){
-
+ openWorkType(row){
+ this.workType = row.operateTypes
+ this.typeVisible = true
},
handleChange(){
@@ -127,11 +161,72 @@
},
resetQuery(){
-
+ this.queryParams = {
+ pageNum: 1,
+ pageSize: 10,
+ isCm: '0'
+ }
+ this.getPage()
},
- handleAdd(){
+ viewFile(file){
+ axios.get(process.env.VUE_APP_BASE_API + file.fileUrl,{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)
+ } else {
+ this.$message.error('获取文件失败')
+ }
+ })
+ },
+ getDegreeName(code){
+ let obj = JSON.parse(JSON.stringify(this.dict.type.sys_highest_education_code)).find(i=>i.value == code)
+ if(obj){
+ return obj.label
+ }else{
+ return '未知'
+ }
+ },
+ async handleAbort(value,row){
+ const res = await abortTeacher({id: row.id,status: value})
+ if(res.code == 200){
+ this.$message({
+ type: 'success',
+ message: '状态变更成功!'
+ });
+ this.getPage()
+ }else {
+ this.$message({
+ type: 'warning',
+ message: res.msg
+ });
+ }
+ },
+ handleDelete(row){
+ this.$confirm('此操作将永久删除该条数据, 是否继续?', '提示', {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning'
+ }).then(async () => {
+ const res = await delTeacher(row.id)
+ if(res.code == 200){
+ this.$message({
+ type: 'success',
+ message: '删除成功!'
+ });
+ await this.getPage()
+ }else{
+ this.$message({
+ type: 'warning',
+ message: res.msg
+ });
+ }
+ }).catch(() => {
- }
+ });
+ },
}
};
</script>
diff --git a/src/views/notCoalMine/nViolationRegistration/components/addDialog.vue b/src/views/notCoalMine/nViolationRegistration/components/addDialog.vue
deleted file mode 100644
index 4dbc23b..0000000
--- a/src/views/notCoalMine/nViolationRegistration/components/addDialog.vue
+++ /dev/null
@@ -1,119 +0,0 @@
-<template>
- <el-dialog
- :title="dialogStatus==='add'?'新增填报':''"
- :visible.sync="dialogVisible"
- :modal-append-to-body="false"
- :close-on-click-modal="false"
- width="50%"
- :before-close="handleClose"
- >
- <el-form ref="dataForm" :model="dataForm" :rules="rules" label-position="right" label-width="150px" style="padding-right: 50px" element-loading-text="保存中...">
- <el-form-item label="身份证号:" prop="idCard">
- <el-input v-model.trim="dataForm.idCard"/>
- </el-form-item>
- <el-form-item label="IC卡编号:" prop="iCCard">
- <el-input v-model.trim="dataForm.iCCard"/>
- </el-form-item>
- <el-form-item label="电子证号:" prop="remark">
- <el-input v-model.trim="dataForm.remark"/>
- </el-form-item>
- <el-form-item label="违章日期:" prop="remark">
- <el-date-picker
- v-model="dataForm.data"
- type="date"
- format="yyyy-MM-dd"
- value-format="yyyy-MM-dd"
- placeholder="选择日期">
- </el-date-picker>
- </el-form-item>
- <el-form-item label="姓名:" prop="remark">
- <el-input v-model.trim="dataForm.remark"/>
- </el-form-item>
- <el-form-item label="所属单位:" prop="remark">
- <el-input v-model.trim="dataForm.remark"/>
- </el-form-item>
- <el-form-item label="操作类型:" prop="remark">
- <el-cascader
- v-model="value"
- :options="options"
- @change="handleChange">
- </el-cascader>
- </el-form-item>
- <el-form-item label="图片上传:" prop="remark">
- <el-upload
- action="https://jsonplaceholder.typicode.com/posts/"
- list-type="picture-card"
- :on-preview="handlePictureCardPreview"
- :on-remove="handleRemove">
- <i class="el-icon-plus"></i>
- </el-upload>
- <el-dialog :visible.sync="dialogVisibleImg" :modal-append-to-body="false">
- <img width="100%" :src="dialogImageUrl" alt="">
- </el-dialog>
- </el-form-item>
- <el-form-item label="违章描述:" prop="remark">
- <el-input type="textarea" v-model.trim="dataForm.remark"/>
- </el-form-item>
- </el-form>
- <span slot="footer" class="dialog-footer">
- <el-button @click="handleClose">取 消</el-button>
- <el-button type="primary" @click="onSubmit">确 定</el-button>
- </span>
- </el-dialog>
-</template>
-
-<script >
-export default {
- name: 'addUser',
- components: {
- },
- data() {
- return {
- dialogVisible: false,
- dialogStatus: '',
- dialogImageUrl: '',
- dialogVisibleImg: false,
- rules: {
- name: [{ required: true, message: '身份证号', trigger: 'blur' }],
- },
- dataForm: {}
- }
- },
- created() {
-
- },
- methods: {
- handleRemove(file, fileList) {
- console.log(file, fileList);
- },
- handlePictureCardPreview(file) {
- this.dialogImageUrl = file.url;
- this.dialogVisibleImg = true;
- },
- openDialog (type, data) {
- this.resetDataForm();
- this.dialogVisible = true;
- this.dialogStatus = type;
- this.$nextTick(() => {
- this.$refs['dataForm'].clearValidate()
- })
- },
- handleClose() {
- this.dialogVisible = false;
- this.$emit("getList");
- },
- onSubmit() {
- this.$emit("getList");
- this.dialogVisible = false;
- },
- resetDataForm() {
- this.dataForm = {
- }
- },
- }
-}
-
-</script>
-<style scoped>
-
-</style>
diff --git a/src/views/notCoalMine/nViolationRegistration/components/violationDialog.vue b/src/views/notCoalMine/nViolationRegistration/components/violationDialog.vue
new file mode 100644
index 0000000..686f76b
--- /dev/null
+++ b/src/views/notCoalMine/nViolationRegistration/components/violationDialog.vue
@@ -0,0 +1,312 @@
+<template>
+ <el-dialog
+ :title="title"
+ :visible.sync="open"
+ append-to-body
+ width="50%"
+ :before-close="handleClose"
+ >
+ <el-form ref="ruleForm" :model="form" :rules="rules" label-position="right" label-width="150px" style="padding-right: 50px" element-loading-text="保存中...">
+ <el-form-item label="姓名:" prop="name">
+ <el-input v-model.trim="form.name" :readonly="disable"/>
+ </el-form-item>
+ <el-form-item label="身份证号:" prop="idCard">
+ <el-input v-model.trim="form.idCard" :readonly="disable"/>
+ </el-form-item>
+ <el-form-item label="IC卡编号:" prop="icNum">
+ <el-input v-model.trim="form.icNum" :readonly="disable"/>
+ </el-form-item>
+ <el-form-item label="电子证号:" prop="electNum">
+ <el-input v-model.trim="form.electNum" :readonly="disable"/>
+ </el-form-item>
+ <el-form-item label="所属单位:" prop="dept">
+ <el-input v-model.trim="form.dept" :readonly="disable"/>
+ </el-form-item>
+ <el-form-item label="违章日期:" prop="violationTime">
+ <el-date-picker
+ v-model="form.violationTime"
+ type="date"
+ format="yyyy-MM-dd"
+ value-format="yyyy-MM-dd 00:00:00"
+ placeholder="选择日期"
+ :disabled="disable">
+ </el-date-picker>
+ </el-form-item>
+ <el-form-item label="操作类型:" prop="operateTypeId">
+ <el-cascader
+ v-model="form.operateTypeId"
+ :options="typeList"
+ :disabled="disable"
+ :show-all-levels="false"
+ :props="{ expandTrigger: 'hover', value: 'id',label: 'name',emitPath:false}"></el-cascader>
+ </el-form-item>
+ <el-form-item label="图片上传:" prop="violationPath">
+ <el-upload
+ action=""
+ :disabled="disable"
+ :auto-upload="false"
+ :limit="10"
+ multiple
+ accept="image/*,.pdf"
+ :file-list="fileList"
+ list-type="picture-card"
+ :before-upload="beforeAvatarUpload"
+ :on-change="avatorChange"
+ :on-preview="handlePreview"
+ :on-exceed="overLimit"
+ :on-remove="handleRemove">
+ <i class="el-icon-plus"></i>
+ </el-upload>
+ </el-form-item>
+ <el-form-item label="违章描述:" prop="remark">
+ <el-input type="textarea" v-model.trim="form.remark" :readonly="disable"/>
+ </el-form-item>
+ </el-form>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="handleClose">取消</el-button>
+ <el-button v-if="disable == false" type="primary" @click="submit">提交</el-button>
+ <el-button v-else type="primary" @click="handleClose">确定</el-button>
+ </span>
+ <el-dialog :visible.sync="dialogVisible" append-to-body>
+ <img width="100%" :src="dialogImageUrl" alt="">
+ </el-dialog>
+ </el-dialog>
+</template>
+
+<script >
+import {addViolation, editViolation, uploadFile} from "@/api/coalMine/violation";
+import {verifyIdCard} from "@/utils/validate";
+
+export default {
+ name: 'violationDialog',
+ components: {
+ },
+ props: ['typeList'],
+ data() {
+ let validatePass = (rule, value, callback) => {
+ if (this.fileList.length == 0) {
+ callback(new Error('请上传图片'));
+ } else {
+ callback();
+ }
+ }
+ let verifyId = (rule, value, callback)=>{
+ if(value === ''){
+ callback(new Error('请输入身份证号'))
+ }else{
+ if(!verifyIdCard(value)){
+ callback(new Error('身份证号格式有误'))
+ }else{
+ callback()
+ }
+ }
+ }
+ return {
+ disable: false,
+ title: '新增填报',
+ open: false,
+ form:{
+ id: null,
+ isCm: 0,
+ name: '',
+ idCard: '',
+ icNum: '',
+ electNum: '',
+ dept: '',
+ violationTime: '',
+ operateTypeId: null,
+ violationPath: '',
+ remark: ''
+ },
+ fileList: [],
+ dialogImageUrl: '',
+ dialogVisible: false,
+ rules:{
+ name:[{ required: true, message: '请填写姓名', trigger: 'blur' }],
+ // idCard: [{ required: true, validator: verifyId, trigger: 'blur' }],
+ idCard: [{ required: true, message: '请填写身份证号', trigger: 'blur' }],
+ dept: [{ required: true, message: '请填写所在单位', trigger: 'blur' }],
+ violationTime: [{ required: true, message: '请选择违章日期', trigger: 'blur' }],
+ violationPath: [{ required: true,validator: validatePass, trigger: 'blur' }],
+ operateTypeId: [{ required: true, message: '请选择操作类型', trigger: 'blur' }]
+ },
+ }
+ },
+ created() {
+
+ },
+ methods: {
+ openDialog (val,type) {
+ const t = this
+ t.fileList = []
+ t.open = true
+ if(type == 'add'){
+ t.title = '新增填报'
+ t.disable = false
+ t.form = {
+ id: null,
+ isCm: 0,
+ name: '',
+ idCard: '',
+ icNum: '',
+ electNum: '',
+ dept: '',
+ violationTime: '',
+ operateTypeId: null,
+ violationPath: '',
+ remark: ''
+ }
+ }else{
+ t.title = '查看'
+ t.disable = true
+ if(val){
+ for(let i in val){
+ if(t.isValidKey(i,this.form)){
+ t.form[i] = val[i]
+ }
+ }
+ const picList = val.violationPath.split(',')
+ t.fileList = picList.map((item,index)=>{
+ return {
+ name: index,
+ url: process.env.VUE_APP_BASE_API + item
+ }
+ })
+ }
+ }
+ },
+ isValidKey(key,obj){
+ return key in obj
+ },
+
+ avatorChange(file, fileList) {
+ this.fileList = fileList;
+ console.log(fileList,'list2')
+ },
+
+ overLimit(){
+ this.$message({
+ type: 'warning',
+ message: '超出文件上传数量'
+ });
+ },
+ handlePreview(file) {
+ this.dialogImageUrl = file.url;
+ this.dialogVisible = true;
+ },
+ beforeAvatarUpload(file) {
+ const isLt5M = file.size / 1024 / 1024 < 5;
+ if (!isLt5M) {
+ this.$message.error('上传头像图片大小不能超过 5MB!');
+ }
+ return isLt5M;
+ },
+ async submitUpload() {
+ const t = this;
+ // 创建一个数组来存储所有上传操作的 Promise
+ const uploadPromises = [];
+ // 定义一个函数来上传文件并将结果存入 resumeLink 数组
+ async function uploadAndCollect(fileList) {
+ if (fileList.length > 0) {
+ const resumeLink = [];
+ for (const file of fileList) {
+ const formData = new FormData();
+ formData.append("file", file.raw);
+ formData.append("module", 'accountPath');
+
+ const res = await uploadFile(formData);
+ if (res.code === 200) {
+ resumeLink.push(res.data.fileKey);
+ } else {
+ this.$message.error('图片上传出错!');
+ }
+ }
+ // 将收集到的文件链接设置到 this.form 中
+ t.form.violationPath = resumeLink.join(',')
+ return resumeLink;
+ }
+ return [];
+ }
+ // 依次执行上传操作并等待完成
+ uploadPromises.push(uploadAndCollect(t.fileList));
+ // 等待所有上传操作完成
+ await Promise.all(uploadPromises);
+ // 打印已更新的 this.form
+ console.log(t.form, 'form1');
+ },
+ handleRemove(file, fileList) {
+ console.log(file, fileList);
+ this.fileList = fileList
+ },
+ handleClose() {
+ this.open = false;
+ this.resetForm();
+ },
+ async submit(){
+ this.$refs["ruleForm"].validate(async(valid) =>{
+ if(valid) {
+ await this.submitUpload()
+ if(this.title == '新增填报'){
+ const {id,...data} = this.form
+ const res= await addViolation(data)
+ if(res.code == 200){
+ this.$message({
+ type:'success',
+ message: res.msg
+ })
+ this.fileList = []
+ this.open = false
+ this.$emit('getList')
+ }else{
+ this.$message({
+ type:'warning',
+ message: res.msg
+ })
+ }
+ }else{
+ const res= await editViolation(this.form)
+ if(res.code == 200){
+ this.$message({
+ type:'success',
+ message: res.msg
+ })
+ this.fileList = []
+ this.open = false
+ this.$emit('getList')
+ }else{
+ this.$message({
+ type:'warning',
+ message: res.msg
+ })
+ }
+ }
+ }else{
+ this.$message({
+ type:'warning',
+ message:'请完善必填信息'
+ })
+ }
+ })
+ },
+ resetForm() {
+ this.form = {
+ id: null,
+ isCm: 0,
+ name: '',
+ idCard: '',
+ icNum: '',
+ electNum: '',
+ dept: '',
+ violationTime: '',
+ operateTypeId: null,
+ violationPath: '',
+ remark: ''
+ }
+ },
+ }
+}
+
+</script>
+<style scoped>
+
+</style>
diff --git a/src/views/notCoalMine/nViolationRegistration/index.vue b/src/views/notCoalMine/nViolationRegistration/index.vue
index 5fcd874..1a16bb0 100644
--- a/src/views/notCoalMine/nViolationRegistration/index.vue
+++ b/src/views/notCoalMine/nViolationRegistration/index.vue
@@ -3,7 +3,7 @@
<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"
+ v-model="queryParams.name"
placeholder="请输入用户姓名"
clearable
@keyup.enter.native="handleQuery"
@@ -17,19 +17,20 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item>
- <el-form-item label="单位名称" prop="idCard">
+ <el-form-item label="单位名称" prop="dept">
<el-input
- v-model="queryParams.unit"
+ v-model="queryParams.dept"
placeholder="请输入单位名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
- <el-form-item label="作业类型">
+ <el-form-item label="操作类型">
<el-cascader
- v-model="classiFy"
- :options="expertTypes"
- :props="{ expandTrigger: 'hover', value: 'id',label: 'label'}"
+ v-model="queryParams.operateTypeId"
+ :options="typeList"
+ :show-all-levels="false"
+ :props="{ expandTrigger: 'hover', value: 'id',label: 'name',emitPath:false}"
@change="handleChange"></el-cascader>
</el-form-item>
<el-form-item>
@@ -44,27 +45,35 @@
type="primary"
plain
size="mini"
- @click="handleAdd"
+ @click="openViolation({},'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="expertList">
- <el-table-column label="发生时间" align="center" prop="name" />
+ <el-table v-loading="loading" :data="dataList">
+ <el-table-column label="发生时间" align="center" prop="violationTime" />
<el-table-column label="姓名" align="center" prop="name" />
- <el-table-column label="身份证号" align="center" prop="name" />
- <el-table-column label="IC/电子证编号" align="center" prop="phone"/>
- <el-table-column label="所属单位" align="center" prop="phone"/>
- <el-table-column label="作业种类" align="center" prop="phone"/>
+ <el-table-column label="身份证号" align="center" prop="idCard" />
+ <el-table-column label="IC卡编号" align="center" prop="icNum"/>
+ <el-table-column label="电子证编号" align="center" prop="electNum"/>
+ <el-table-column label="所属单位" align="center" prop="dept"/>
+ <el-table-column label="作业种类" align="center" prop="jobCategory"/>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-button
size="mini"
type="text"
icon="el-icon-view"
- @click="handleView(scope.row)"
+ @click="openViolation(scope.row,'view')"
>查看违规详情</el-button>
+<!-- <el-button-->
+<!-- size="mini"-->
+<!-- type="text"-->
+<!-- icon="el-icon-edit"-->
+<!-- @click="openViolation(scope.row,'edit')"-->
+<!-- v-hasPermi="['system:experts:remove']"-->
+<!-- >编辑</el-button>-->
<el-button
size="mini"
type="text"
@@ -78,62 +87,122 @@
<pagination
v-show="total>0"
:total="total"
- :page.sync="queryParams.pageIndex"
+ :page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
- <add-dialog ref="addDialogRef" @getList = "getList"></add-dialog>
+ <violation-dialog ref="violationDialog" @getList="getList" :typeList="typeList"></violation-dialog>
</div>
</template>
<script>
-import addDialog from "@/views/notCoalMine/nViolationRegistration/components/addDialog.vue";
+import violationDialog from "@/views/notCoalMine/nViolationRegistration/components/violationDialog.vue";
+import {delViolation, getViolationPage} from "@/api/coalMine/violation";
+import {getOperatePage} from "@/api/coalMine/operateType";
+import {delPeople} from "@/api/coalMine/people";
export default {
- name: "nViolationRegistration",
+ name: "cViolationRegistration",
dicts: [],
components: {
- addDialog
+ violationDialog
},
data() {
return {
- addDialogRef: '',
+ violationDialog: '',
loading: false,
- single: true,
- multiple: true,
showSearch: true,
- addForm: false,
+ dataList: [],
total: 0,
- expertTypes: [],
- expertList: [],
- queryParams: {},
- classiFy: [],
- form: {},
- rules: {
- classifyName: [
- { required: true, message: "分类名称不能为空", trigger: "blur" }
- ]
- }
+ typeList: [],
+ queryParams: {
+ name: '',
+ idCard:'',
+ dept: '',
+ operateTypeId: null,
+ isCm: 0,
+ pageNum: 1,
+ pageSize: 10
+ },
};
},
created() {
-
+ this.getList()
+ this.getTypeList()
},
methods: {
- getList(){
-
+ async getList(){
+ const t = this
+ t.loading = true
+ const res = await getViolationPage(t.queryParams)
+ if(res.code == 200){
+ t.dataList = res.rows
+ t.total = res.total
+ }else{
+ t.$message({
+ message: res.msg,
+ type: 'warning'
+ })
+ }
+ t.loading = false
+ },
+ async getTypeList() {
+ 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;
},
handleChange(){
},
- handleQuery(){
+ handleDelete(row){
+ this.$confirm('此操作将永久删除该条数据, 是否继续?', '提示', {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning'
+ }).then(async () => {
+ const res = await delViolation(row.violationId)
+ if(res.code == 200){
+ this.$message({
+ type: 'success',
+ message: '删除成功!'
+ });
+ await this.getList()
+ }else{
+ this.$message({
+ type: 'warning',
+ message: res.msg
+ });
+ }
+ }).catch(() => {
+ });
+ },
+ handleQuery(){
+ this.queryParams.pageNum = 1
+ this.getList()
},
resetQuery(){
-
+ this.queryParams = {
+ name: '',
+ idCard:'',
+ dept: '',
+ operateTypeId: null,
+ isCm: 0,
+ pageNum: 1,
+ pageSize: 10
+ }
+ this.getList()
},
- handleAdd(){
- this.$refs.addDialogRef.openDialog();
+ openViolation(data,type){
+ this.$refs.violationDialog.openDialog(data,type);
}
}
};
--
Gitblit v1.9.2