From e5b31f6979672ab876a82ae344d500bc9e0ad533 Mon Sep 17 00:00:00 2001
From: 马宇豪 <978517621@qq.com>
Date: Wed, 06 Sep 2023 09:28:47 +0800
Subject: [PATCH] 修改目录接口
---
src/views/index.vue | 382 ++++++++--
src/api/system/form.js | 60 +
src/views/system/experts/index.vue | 329 ++++-----
src/views/main/index.vue | 327 +++++++++
src/assets/images/profile.jpg | 0
src/layout/components/Navbar.vue | 22
src/assets/logo/logo.png | 0
src/router/index.js | 15
src/components/Breadcrumb/index.vue | 3
src/utils/validate.js | 11
.env.development | 3
src/views/login.vue | 9
src/layout/components/Sidebar/Logo.vue | 2
src/layout/components/Sidebar/index.vue | 2
src/views/form.vue | 117 ++-
src/views/components/formDialog.vue | 782 ++++++++++++++++++++++
16 files changed, 1,734 insertions(+), 330 deletions(-)
diff --git a/.env.development b/.env.development
index 1100a6e..2f8a728 100644
--- a/.env.development
+++ b/.env.development
@@ -5,7 +5,8 @@
ENV = 'development'
# 规财安评管理系统/开发环境
-VUE_APP_BASE_API = 'http://106.15.95.149:7006'
+VUE_APP_BASE_API = 'http://192.168.0.70:8080'
+#VUE_APP_BASE_API = 'http://106.15.95.149:7006'
# 路由懒加载F
VUE_CLI_BABEL_TRANSPILE_MODULES = true
diff --git a/src/api/system/form.js b/src/api/system/form.js
index 371cdf1..9cd38c7 100644
--- a/src/api/system/form.js
+++ b/src/api/system/form.js
@@ -1,10 +1,19 @@
import request from '@/utils/request'
-// 获取专家类型
-export function expertsTree() {
+// 获取专家列表
+export function getExpertsList(data) {
return request({
- url: '/expert/classify/tree',
- method: 'post',
+ url: '/expert/info/page/list',
+ method: 'get',
+ params: data
+ })
+}
+
+// 获取专家列表
+export function delExpert(id) {
+ return request({
+ url: '/expert/info/del/'+id,
+ method: 'get'
})
}
@@ -25,3 +34,46 @@
data: data
})
}
+
+// 分页获取专家类型
+export function getExpertTypes(data) {
+ return request({
+ url: '/expert/classify/tree',
+ method: 'post',
+ data: data
+ })
+}
+
+// 添加专家类型
+export function addType(data) {
+ return request({
+ url: '/expert/classify/add',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改专家类型
+export function updateType(data) {
+ return request({
+ url: '/expert/classify/mod',
+ method: 'post',
+ data: data
+ })
+}
+
+// 删除专家类型
+export function delExpertType(id) {
+ return request({
+ url: '/expert/classify/del/'+id,
+ method: 'get'
+ })
+}
+
+// 根据id获取专家信息
+export function getInfo(id) {
+ return request({
+ url: '/expert/info/detail/'+id,
+ method: 'get'
+ })
+}
diff --git a/src/assets/images/profile.jpg b/src/assets/images/profile.jpg
index b3a940b..6be60da 100644
--- a/src/assets/images/profile.jpg
+++ b/src/assets/images/profile.jpg
Binary files differ
diff --git a/src/assets/logo/logo.png b/src/assets/logo/logo.png
index e263760..1b0c4db 100644
--- a/src/assets/logo/logo.png
+++ b/src/assets/logo/logo.png
Binary files differ
diff --git a/src/components/Breadcrumb/index.vue b/src/components/Breadcrumb/index.vue
index 1696f54..cfd9d6f 100644
--- a/src/components/Breadcrumb/index.vue
+++ b/src/components/Breadcrumb/index.vue
@@ -35,9 +35,8 @@
const first = matched[0]
if (!this.isDashboard(first)) {
- matched = [{ path: '/index', meta: { title: '首页' }}].concat(matched)
+ matched = [{ path: '/index', meta: { title: '专家申报表格' }}].concat(matched)
}
-
this.levelList = matched.filter(item => item.meta && item.meta.title && item.meta.breadcrumb !== false)
},
isDashboard(route) {
diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue
index 39b3dad..08a8dd8 100644
--- a/src/layout/components/Navbar.vue
+++ b/src/layout/components/Navbar.vue
@@ -7,15 +7,15 @@
<div class="right-menu">
<template v-if="device!=='mobile'">
- <search id="header-search" class="right-menu-item" />
-
- <el-tooltip content="源码地址" effect="dark" placement="bottom">
- <ruo-yi-git id="ruoyi-git" class="right-menu-item hover-effect" />
- </el-tooltip>
+<!-- <search id="header-search" class="right-menu-item" />-->
+<!-- -->
+<!-- <el-tooltip content="源码地址" effect="dark" placement="bottom">-->
+<!-- <ruo-yi-git id="ruoyi-git" class="right-menu-item hover-effect" />-->
+<!-- </el-tooltip>-->
- <el-tooltip content="文档地址" effect="dark" placement="bottom">
- <ruo-yi-doc id="ruoyi-doc" class="right-menu-item hover-effect" />
- </el-tooltip>
+<!-- <el-tooltip content="文档地址" effect="dark" placement="bottom">-->
+<!-- <ruo-yi-doc id="ruoyi-doc" class="right-menu-item hover-effect" />-->
+<!-- </el-tooltip>-->
<screenfull id="screenfull" class="right-menu-item hover-effect" />
@@ -31,9 +31,9 @@
<i class="el-icon-caret-bottom" />
</div>
<el-dropdown-menu slot="dropdown">
- <router-link to="/user/profile">
- <el-dropdown-item>个人中心</el-dropdown-item>
- </router-link>
+<!-- <router-link to="/user/profile">-->
+<!-- <el-dropdown-item>个人中心</el-dropdown-item>-->
+<!-- </router-link>-->
<el-dropdown-item @click.native="setting = true">
<span>布局设置</span>
</el-dropdown-item>
diff --git a/src/layout/components/Sidebar/Logo.vue b/src/layout/components/Sidebar/Logo.vue
index 2774cc8..020d77b 100644
--- a/src/layout/components/Sidebar/Logo.vue
+++ b/src/layout/components/Sidebar/Logo.vue
@@ -5,7 +5,7 @@
<img v-if="logo" :src="logo" class="sidebar-logo" />
<h1 v-else class="sidebar-title" :style="{ color: sideTheme === 'theme-dark' ? variables.logoTitleColor : variables.logoLightTitleColor }">{{ title }} </h1>
</router-link>
- <router-link v-else key="expand" class="sidebar-logo-link" to="/">
+ <router-link v-else key="expand" class="sidebar-logo-link" to="/main/index">
<img v-if="logo" :src="logo" class="sidebar-logo" />
<h1 class="sidebar-title" :style="{ color: sideTheme === 'theme-dark' ? variables.logoTitleColor : variables.logoLightTitleColor }">{{ title }} </h1>
</router-link>
diff --git a/src/layout/components/Sidebar/index.vue b/src/layout/components/Sidebar/index.vue
index 51d0839..19f73d9 100644
--- a/src/layout/components/Sidebar/index.vue
+++ b/src/layout/components/Sidebar/index.vue
@@ -51,7 +51,7 @@
},
isCollapse() {
return !this.sidebar.opened;
- }
+ },
}
};
</script>
diff --git a/src/router/index.js b/src/router/index.js
index 1468166..0aedc33 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -69,14 +69,15 @@
{
path: '',
component: Layout,
- redirect: 'index',
+ redirect: '/main',
+ hidden: true,
children: [
- {
- path: 'index',
- component: () => import('@/views/index'),
- name: 'Index',
- meta: { title: '首页', icon: 'dashboard', affix: true }
- }
+ // {
+ // path: 'main',
+ // component: () => import('@/views/main/index'),
+ // name: 'Index',
+ // meta: { title: '专家信息', icon: 'dashboard', affix: true }
+ // }
]
},
{
diff --git a/src/utils/validate.js b/src/utils/validate.js
index adfa254..e689132 100644
--- a/src/utils/validate.js
+++ b/src/utils/validate.js
@@ -81,3 +81,14 @@
}
return Array.isArray(arg)
}
+
+// 简单校验手机号(十一位数字则通过)
+export function verifySimplePhone(val) {
+ var regex = /^\d{11}$/; // 正则表达式,\d 匹配数字,{11} 表示匹配11次
+ return regex.test(val);
+}
+
+export function verifyIdCard(val) {
+ var regex = /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
+ return regex.test(val)
+}
diff --git a/src/views/components/formDialog.vue b/src/views/components/formDialog.vue
new file mode 100644
index 0000000..89a2a73
--- /dev/null
+++ b/src/views/components/formDialog.vue
@@ -0,0 +1,782 @@
+<template>
+ <el-dialog title="专家信息" :visible.sync="open" width="75%" 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="profession">
+ <el-cascader
+ style="width: 100%"
+ v-model="form.profession"
+ :options="expertsType"
+ :disabled="disabled"
+ :props="{ expandTrigger: 'hover',value: 'id',label: 'label' }"
+ @change="professionChange"></el-cascader>
+ </el-form-item>
+ </el-col>
+ </el-row>
+<!-- <el-row>-->
+<!-- <el-col :span="20">-->
+<!-- <el-form-item label="填报日期" prop="date">-->
+<!-- <el-date-picker-->
+<!-- style="width: 100%"-->
+<!-- v-model="form.date"-->
+<!-- type="date"-->
+<!-- placeholder="选择日期">-->
+<!-- </el-date-picker>-->
+<!-- </el-form-item>-->
+<!-- </el-col>-->
+<!-- </el-row>-->
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="姓名" prop="name">
+ <el-input v-model="form.name" :readonly="disabled"></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="disabled">
+ <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="birthday">
+ <el-date-picker
+ style="width: 100%"
+ :disabled="disabled"
+ v-model="form.birthday"
+ value-format="yyyy-MM-dd"
+ type="date"
+ placeholder="选择日期">
+ </el-date-picker>
+ </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" :readonly="disabled"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="职称" prop="title">
+<!-- <el-select v-model="form.title" placeholder="请选择" style="width: 100%">-->
+<!-- <el-option-->
+<!-- v-for="item in professionalList"-->
+<!-- :key="item.value"-->
+<!-- :label="item.label"-->
+<!-- :value="item.value">-->
+<!-- </el-option>-->
+<!-- </el-select>-->
+ <el-input v-model="form.title" :readonly="disabled"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="证件照" prop="electronicPhoto">
+<!-- <el-upload-->
+<!-- :disabled="disabled"-->
+<!-- action=""-->
+<!-- :auto-upload="false"-->
+<!-- :limit="1"-->
+<!-- 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-link type="primary" style="margin-right: 20px" @click="downloadFile(form.electronicPhoto)" target="_blank">点击查看</el-link>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="身份证号" prop="idCard">
+ <el-input v-model="form.idCard" :readonly="disabled"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="在岗情况" prop="dutyStatus">
+ <el-radio-group v-model="form.dutyStatus" :disabled="disabled">
+ <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="companyName">
+ <el-input v-model="form.companyName" :readonly="disabled"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="单位地址">
+ <el-input v-model="form.companyAddress" :readonly="disabled"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="所在部门">
+ <el-input v-model="form.deptName" :readonly="disabled"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="职务">
+ <el-input v-model="form.job" :readonly="disabled"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="单位电话">
+ <el-input v-model="form.companyTelephone" :readonly="disabled"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="传真号码">
+ <el-input v-model="form.faxNum" :readonly="disabled"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="电子邮箱">
+ <el-input v-model="form.email" :readonly="disabled"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="毕业学校">
+ <el-input v-model="form.graduationSchool" :readonly="disabled"></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" :readonly="disabled"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="所学专业">
+ <el-input v-model="form.speciality" :readonly="disabled"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="现从事的专业及方向">
+ <el-input v-model="form.currentProfession" :readonly="disabled"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="支撑方向_安全生产" prop="supportDirectionSafety">
+ <el-checkbox-group v-model="form.supportDirectionSafety" :disabled="disabled">
+ <el-checkbox v-for="item in directionList" :label="item.value" :key="item.value">{{ item.label }}</el-checkbox>
+ </el-checkbox-group>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="支撑方向_防灾减灾救灾" prop="supportDirectionPrevention">
+ <el-checkbox-group v-model="form.supportDirectionPrevention" :disabled="disabled">
+ <el-checkbox v-for="item in directionList" :label="item.value" :key="item.value">{{ item.label }}</el-checkbox>
+ </el-checkbox-group>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="支撑方向_应急救援" prop="supportDirectionEmergency">
+ <el-checkbox-group v-model="form.supportDirectionEmergency" :disabled="disabled">
+ <el-checkbox v-for="item in directionList" :label="item.value" :key="item.value">{{ item.label }}</el-checkbox>
+ </el-checkbox-group>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row v-if="form.resume.length>0">
+ <el-col :span="20">
+ <el-form-item label="工作简历">
+<!-- <el-upload-->
+<!-- action="#"-->
+<!-- :disabled="disabled"-->
+<!-- :auto-upload="false"-->
+<!-- accept="image/*,.pdf"-->
+<!-- :file-list="resumeList"-->
+<!-- list-type="picture-card"-->
+<!-- :before-upload="beforeAvatarUpload"-->
+<!-- :on-change="resumeChange"-->
+<!-- :on-preview="handlePreview"-->
+<!-- :on-remove="handleRemove">-->
+<!-- <i class="el-icon-plus"></i>-->
+<!-- </el-upload>-->
+ <el-link type="primary" style="margin-right: 20px" v-for="(item,index) in form.resume" :key="index" @click="downloadFile(item)" target="_blank">点击查看</el-link>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row v-if="form.paperSituation.length>0">
+ <el-col :span="20">
+ <el-form-item label="发明、著作、学术论文情况(何时、何地出版或发表)">
+<!-- <el-upload-->
+<!-- action=""-->
+<!-- :disabled="disabled"-->
+<!-- :auto-upload="false"-->
+<!-- accept="image/*,.pdf"-->
+<!-- list-type="picture-card"-->
+<!-- :file-list="inventionList"-->
+<!-- :before-upload="beforeAvatarUpload"-->
+<!-- :on-change="inventChange"-->
+<!-- :on-preview="handlePreview"-->
+<!-- :on-remove="handleRemove">-->
+<!-- <i class="el-icon-plus"></i>-->
+<!-- </el-upload>-->
+ <el-link type="primary" style="margin-right: 20px" v-for="(item,index) in form.paperSituation" :key="index" @click="downloadFile(item)" target="_blank">点击查看</el-link>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row v-if="form.reward.length>0">
+ <el-col :span="20">
+ <el-form-item label="受过何种奖励">
+<!-- <el-upload-->
+<!-- action=""-->
+<!-- :disabled="disabled"-->
+<!-- :auto-upload="false"-->
+<!-- accept="image/*,.pdf"-->
+<!-- list-type="picture-card"-->
+<!-- :file-list="rewardList"-->
+<!-- :before-upload="beforeAvatarUpload"-->
+<!-- :on-change="rewardChange"-->
+<!-- :on-preview="handlePreview"-->
+<!-- :on-remove="handleRemove">-->
+<!-- <i class="el-icon-plus"></i>-->
+<!-- </el-upload>-->
+ <el-link type="primary" style="margin-right: 20px" v-for="(item,index) in form.reward" :key="index" @click="downloadFile(item)" target="_blank">点击查看</el-link>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row v-if="form.achievement.length>0">
+ <el-col :span="20">
+ <el-form-item label="应急管理相关工作主要业绩及研究成果">
+<!-- <el-upload-->
+<!-- action=""-->
+<!-- :disabled="disabled"-->
+<!-- :auto-upload="false"-->
+<!-- accept="image/*,.pdf"-->
+<!-- list-type="picture-card"-->
+<!-- :file-list="achievementList"-->
+<!-- :on-change="achieveChange"-->
+<!-- :before-upload="beforeAvatarUpload"-->
+<!-- :on-preview="handlePreview"-->
+<!-- :on-remove="handleRemove">-->
+<!-- <i class="el-icon-plus"></i>-->
+<!-- </el-upload>-->
+ <el-link type="primary" style="margin-right: 20px" v-for="(item,index) in form.achievement" :key="index" @click="downloadFile(item)" target="_blank">点击查看</el-link>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row v-if="form.personalOpinion.length>0">
+ <el-col :span="20">
+ <el-form-item label="专家本人意见">
+<!-- <el-upload-->
+<!-- action=""-->
+<!-- :disabled="disabled"-->
+<!-- :auto-upload="false"-->
+<!-- accept="image/*,.pdf"-->
+<!-- list-type="picture-card"-->
+<!-- :file-list="proAdviceList"-->
+<!-- :on-change="proChange"-->
+<!-- :before-upload="beforeAvatarUpload"-->
+<!-- :on-preview="handlePreview"-->
+<!-- :on-remove="handleRemove">-->
+<!-- <i class="el-icon-plus"></i>-->
+<!-- </el-upload>-->
+ <el-link type="primary" style="margin-right: 20px" v-for="(item,index) in form.personalOpinion" :key="index" @click="downloadFile(item)" target="_blank">点击查看</el-link>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row v-if="form.recommendUnitOpinion.length>0">
+ <el-col :span="20">
+ <el-form-item label="推荐单位意见">
+<!-- <el-upload-->
+<!-- action=""-->
+<!-- :disabled="disabled"-->
+<!-- :auto-upload="false"-->
+<!-- accept="image/*,.pdf"-->
+<!-- list-type="picture-card"-->
+<!-- :file-list="adviceList"-->
+<!-- :on-change="adviceChange"-->
+<!-- :before-upload="beforeAvatarUpload"-->
+<!-- :on-preview="handlePreview"-->
+<!-- :on-remove="handleRemove">-->
+<!-- <i class="el-icon-plus"></i>-->
+<!-- </el-upload>-->
+ <el-link type="primary" style="margin-right: 20px" v-for="(item,index) in form.recommendUnitOpinion" :key="index" @click="downloadFile(item)" target="_blank">点击查看</el-link>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="补充说明">
+ <el-input v-model="form.remark" type="textarea" :autosize="{ minRows: 2}" :readonly="disabled"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <div v-if="!disabled" style="width: 100%;padding-bottom: 30px;display: flex;justify-content: center">
+ <el-button 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 {getToken} from "@/utils/auth";
+import axios from "axios";
+export default {
+ name: "Index",
+ data() {
+ var validatePass = (rule, value, callback) => {
+ if (this.fileList.length == 0) {
+ callback(new Error('请上传证件照'));
+ } else {
+ callback();
+ }
+ };
+ return {
+ disabled: true,
+ labelPosition: 'right',
+ open: false,
+ form:{
+ name:'',
+ sex:'',
+ profession: [],
+ bigClassify:null,
+ smallClassify: null,
+ birthday: '',
+ phone:'',
+ title: '',
+ electronicPhoto: '',
+ idCard: '',
+ dutyStatus: null,
+ companyName: '',
+ companyAddress: '',
+ deptName: '',
+ job: '',
+ companyTelephone: '',
+ faxNum: '',
+ email: '',
+ graduationSchool: '',
+ degree: '',
+ speciality: '',
+ currentProfession: '',
+ supportDirectionSafety: [],
+ supportDirectionPrevention: [],
+ supportDirectionEmergency: [],
+ resumeKey: '',
+ paperSituationKey: '',
+ rewardKey: '',
+ achievementKey: '',
+ personalOpinionKey: '',
+ recommendUnitOpinionKey: '',
+ remark: '',
+ resume: [],
+ paperSituation: [],
+ reward: [],
+ achievement: [],
+ personalOpinion: [],
+ recommendUnitOpinion: []
+ },
+ expertsType: [],
+ directionList: [
+ {
+ value: 1,
+ label: '现场检查'
+ },
+ {
+ value: 2,
+ label: '调查评估'
+ },
+ {
+ value: 3,
+ label: '咨询服务'
+ },
+ {
+ value: 4,
+ label: '教育培训'
+ },
+ {
+ value: 5,
+ label: '其他'
+ }
+ ],
+ fileList: [],
+ resumeList: [],
+ inventionList: [],
+ rewardList: [],
+ achievementList: [],
+ proAdviceList: [],
+ adviceList: [],
+ 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, message: '请填写联系电话', trigger: 'blur' }],
+ title: [{ required: true, message: '请填写职称', trigger: 'blur' }],
+ electronicPhoto: [{ required: true,validator: validatePass, trigger: 'blur' }],
+ idCard: [{ required: true, message: '请填写身份证号', trigger: 'blur' }],
+ dutyStatus: [{ required: true, message: '请选择在岗情况', trigger: 'blur' }],
+ companyName: [{ required: true, message: '请填写单位全称', trigger: 'blur' }],
+ degree: [{ required: true, message: '请填写最高学历', trigger: 'blur' }],
+ supportDirectionSafety: [{ required: true, message: '请选择支撑方向', trigger: 'blur' }],
+ supportDirectionPrevention: [{ required: true, message: '请选择支撑方向', trigger: 'blur' }],
+ supportDirectionEmergency: [{ required: true, message: '请选择支撑方向', trigger: 'blur' }]
+ },
+ electronicPhoto: [],
+ resumePhoto: [],
+ paperSituationPhoto: [],
+ rewardPhoto: [],
+ achievementPhoto: [],
+ personalOpinionPhoto: [],
+ recommendUnitOpinionPhoto: [],
+ };
+ },
+ created() {
+
+ },
+ methods: {
+ openDialog(val){
+ const width = document.documentElement.clientWidth
+ if(width < 750){this.labelPosition = 'top'}
+ this.getExpertsType()
+ for(let i in val){
+ if(this.isValidKey(i,this.form)){
+ this.form[i] = val[i]
+ }
+ }
+ this.form.profession[0] = val.bigClassify
+ this.form.profession[1] = val.smallClassify
+ this.form.supportDirectionSafety = val.supportDirectionSafety.split(',').map(i=>Number(i))
+ this.form.supportDirectionPrevention = val.supportDirectionPrevention.split(',').map(i=>Number(i))
+ this.form.supportDirectionEmergency = val.supportDirectionEmergency.split(',').map(i=>Number(i))
+ this.electronicPhoto.push(this.form.electronicPhoto)
+ console.log(this.form,'form')
+ 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
+ });
+ }
+ },
+ // downloadFile(type){
+ // if(type == 'ele'){
+ // axios.get(process.env.VUE_APP_BASE_API + this.form.electronicPhoto.fileUrl,{headers:{'Content-Type': 'application/json','Authorization': "Bearer " + getToken()},responseType: 'blob'}).then(res=>{
+ // if (res) {
+ // let blob = new Blob([res.data],{type: res.data.type})
+ // this.electronicPhoto = URL.createObjectURL(blob)
+ // } else {
+ // this.$message.error('获取文件失败')
+ // }
+ // })
+ // }
+ // if(type == 'resume'){
+ // if(this.form.resume.length>0){
+ // for(let i in this.form.resume){
+ // axios.get(process.env.VUE_APP_BASE_API + this.form.resume[i].fileUrl,{headers:{'Content-Type': 'application/json','Authorization': "Bearer " + getToken()},responseType: 'blob'}).then(res=>{
+ // if (res) {
+ // let blob = new Blob([res.data],{type: res.data.type})
+ // this.resumePhoto[i] = URL.createObjectURL(blob)
+ // } else {
+ // this.$message.error('获取文件失败')
+ // }
+ // })
+ // }
+ // }
+ // console.log(this.resumePhoto.map(i=>i.substring(5)),'photo')
+ // }
+ // },
+
+ downloadFile(file){
+ const t = this
+ axios.get(process.env.VUE_APP_BASE_API + file.fileUrl,{headers:{'Content-Type': 'application/json','Authorization': "Bearer " + getToken()},responseType: 'blob'}).then(res=>{
+ if (res) {
+ const link = document.createElement('a')
+ let blob = new Blob([res.data],{type: res.data.type})
+ link.style.display = "none";
+ link.href = URL.createObjectURL(blob); // 创建URL
+ window.open(link.href)
+ // link.setAttribute("download", file.name);
+ // document.body.appendChild(link);
+ // link.click();
+ // document.body.removeChild(link);
+ } else {
+ this.$message.error('获取文件失败')
+ }
+ })
+ },
+
+ professionChange(value) {
+ console.log(value,'val')
+ },
+ avatorChange(file, fileList) {
+ this.fileList = fileList;
+ },
+ resumeChange(file, fileList) {
+ this.resumeList = fileList;
+ },
+ inventChange(file, fileList){
+ this.inventionList = fileList;
+ },
+ rewardChange(file, fileList){
+ this.rewardList= fileList;
+ },
+ achieveChange(file, fileList){
+ this.achievementList= fileList;
+ },
+ proChange(file, fileList){
+ this.proAdviceList= fileList;
+ },
+ adviceChange(file, fileList){
+ this.adviceList= 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.electronicPhoto = resumeLink.join(',')}
+ if (type == '工作简历') { t.form.resumeKey = resumeLink.join(',')}
+ if (type == '发明著作') { t.form.paperSituationKey = resumeLink.join(',')}
+ if (type == '奖励') { t.form.rewardKey = resumeLink.join(',') }
+ if (type == '成果') { t.form.achievementKey = resumeLink.join(',')}
+ if (type == '专家意见') { t.form.personalOpinionKey = resumeLink.join(',') }
+ if (type == '推荐意见') { t.form.recommendUnitOpinionKey = resumeLink.join(',') }
+ return resumeLink;
+ }
+ return [];
+ }
+ // 依次执行上传操作并等待完成
+ uploadPromises.push(uploadAndCollect(t.fileList, '证件照'));
+ uploadPromises.push(uploadAndCollect(t.resumeList, '工作简历'));
+ uploadPromises.push(uploadAndCollect(t.inventionList,'发明著作'));
+ uploadPromises.push(uploadAndCollect(t.rewardList,'奖励'));
+ uploadPromises.push(uploadAndCollect(t.achievementList,'成果'));
+ uploadPromises.push(uploadAndCollect(t.proAdviceList,'专家意见'));
+ uploadPromises.push(uploadAndCollect(t.adviceList,'推荐意见'));
+ // 等待所有上传操作完成
+ 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) =>{
+ 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)
+ console.log(res,'res')
+ if(res.code == 200){
+ this.$message({
+ type:'success',
+ message: res.msg
+ })
+ this.$refs.ruleForm.resetFields()
+ this.fileList = []
+ this.resumeList = []
+ this.inventionList = []
+ this.rewardList = []
+ this.achievementList = []
+ this.proAdviceList = []
+ this.adviceList = []
+ }else{
+ this.$message({
+ type:'warning',
+ message: res.msg
+ })
+ }
+ }else{
+ this.$message({
+ type:'warning',
+ message:'请完善必填信息'
+ })
+ }
+ })
+ },
+ }
+};
+</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/form.vue b/src/views/form.vue
index 0992b33..44ec689 100644
--- a/src/views/form.vue
+++ b/src/views/form.vue
@@ -1,9 +1,11 @@
<template>
<div class="app-container home">
+ <div class="main-title">专家信息录入</div>
+<!-- <el-divider>专家信息录入</el-divider>-->
<div class="main_form">
- <el-form :model="form" :rules="rules" ref="ruleForm" label-width="200px">
+ <el-form :model="form" :rules="rules" ref="ruleForm" label-width="200px" :label-position="labelPosition">
<el-row>
- <el-col :span="16">
+ <el-col :span="20">
<el-form-item label="专业类别" prop="profession">
<el-cascader
style="width: 100%"
@@ -15,7 +17,7 @@
</el-col>
</el-row>
<!-- <el-row>-->
-<!-- <el-col :span="16">-->
+<!-- <el-col :span="20">-->
<!-- <el-form-item label="填报日期" prop="date">-->
<!-- <el-date-picker-->
<!-- style="width: 100%"-->
@@ -27,14 +29,14 @@
<!-- </el-col>-->
<!-- </el-row>-->
<el-row>
- <el-col :span="16">
+ <el-col :span="20">
<el-form-item label="姓名" prop="name">
<el-input v-model="form.name"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
- <el-col :span="16">
+ <el-col :span="20">
<el-form-item label="性别" prop="sex">
<el-radio-group v-model="form.sex">
<el-radio :label="0">男</el-radio>
@@ -44,7 +46,7 @@
</el-col>
</el-row>
<el-row>
- <el-col :span="16">
+ <el-col :span="20">
<el-form-item label="出生日期" prop="birthday">
<el-date-picker
style="width: 100%"
@@ -57,14 +59,14 @@
</el-col>
</el-row>
<el-row>
- <el-col :span="16">
+ <el-col :span="20">
<el-form-item label="联系电话" prop="phone">
<el-input v-model="form.phone"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
- <el-col :span="16">
+ <el-col :span="20">
<el-form-item label="职称" prop="title">
<!-- <el-select v-model="form.title" placeholder="请选择" style="width: 100%">-->
<!-- <el-option-->
@@ -79,7 +81,7 @@
</el-col>
</el-row>
<el-row>
- <el-col :span="16">
+ <el-col :span="20">
<el-form-item label="证件照" prop="electronicPhoto">
<el-upload
action=""
@@ -99,14 +101,14 @@
</el-col>
</el-row>
<el-row>
- <el-col :span="16">
+ <el-col :span="20">
<el-form-item label="身份证号" prop="idCard">
<el-input v-model="form.idCard"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
- <el-col :span="16">
+ <el-col :span="20">
<el-form-item label="在岗情况" prop="dutyStatus">
<el-radio-group v-model="form.dutyStatus">
<el-radio :label="0">在岗</el-radio>
@@ -116,84 +118,84 @@
</el-col>
</el-row>
<el-row>
- <el-col :span="16">
+ <el-col :span="20">
<el-form-item label="单位全称" prop="companyName">
<el-input v-model="form.companyName"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
- <el-col :span="16">
+ <el-col :span="20">
<el-form-item label="单位地址">
<el-input v-model="form.companyAddress"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
- <el-col :span="16">
+ <el-col :span="20">
<el-form-item label="所在部门">
<el-input v-model="form.deptName"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
- <el-col :span="16">
+ <el-col :span="20">
<el-form-item label="职务">
<el-input v-model="form.job"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
- <el-col :span="16">
+ <el-col :span="20">
<el-form-item label="单位电话">
<el-input v-model="form.companyTelephone"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
- <el-col :span="16">
+ <el-col :span="20">
<el-form-item label="传真号码">
<el-input v-model="form.faxNum"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
- <el-col :span="16">
+ <el-col :span="20">
<el-form-item label="电子邮箱">
<el-input v-model="form.email"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
- <el-col :span="16">
+ <el-col :span="20">
<el-form-item label="毕业学校">
<el-input v-model="form.graduationSchool"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
- <el-col :span="16">
+ <el-col :span="20">
<el-form-item label="最高学历" prop="degree">
<el-input v-model="form.degree"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
- <el-col :span="16">
+ <el-col :span="20">
<el-form-item label="所学专业">
<el-input v-model="form.speciality"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
- <el-col :span="16">
+ <el-col :span="20">
<el-form-item label="现从事的专业及方向">
<el-input v-model="form.currentProfession"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
- <el-col :span="16">
+ <el-col :span="20">
<el-form-item label="支撑方向_安全生产" prop="supportDirectionSafety">
<!-- <el-radio-group v-model="form.supportDirectionSafety">-->
<!-- <el-radio v-for="item in directionList" :label="item.value" :key="item.value">{{ item.label }}</el-radio>-->
@@ -205,7 +207,7 @@
</el-col>
</el-row>
<el-row>
- <el-col :span="16">
+ <el-col :span="20">
<el-form-item label="支撑方向_防灾减灾救灾" prop="supportDirectionPrevention">
<!-- <el-radio-group v-model="form.supportDirectionPrevention">-->
<!-- <el-radio v-for="item in directionList" :label="item.value" :key="item.value">{{ item.label }}</el-radio>-->
@@ -217,7 +219,7 @@
</el-col>
</el-row>
<el-row>
- <el-col :span="16">
+ <el-col :span="20">
<el-form-item label="支撑方向_应急救援" prop="supportDirectionEmergency">
<!-- <el-radio-group v-model="form.supportDirectionEmergency">-->
<!-- <el-radio v-for="item in directionList" :label="item.value" :key="item.value">{{ item.label }}</el-radio>-->
@@ -229,7 +231,7 @@
</el-col>
</el-row>
<el-row>
- <el-col :span="16">
+ <el-col :span="20">
<el-form-item label="工作简历">
<el-upload
action="#"
@@ -247,7 +249,7 @@
</el-col>
</el-row>
<el-row>
- <el-col :span="16">
+ <el-col :span="20">
<el-form-item label="发明、著作、学术论文情况(何时、何地出版或发表)">
<el-upload
action=""
@@ -265,7 +267,7 @@
</el-col>
</el-row>
<el-row>
- <el-col :span="16">
+ <el-col :span="20">
<el-form-item label="受过何种奖励">
<el-upload
action=""
@@ -283,7 +285,7 @@
</el-col>
</el-row>
<el-row>
- <el-col :span="16">
+ <el-col :span="20">
<el-form-item label="应急管理相关工作主要业绩及研究成果">
<el-upload
action=""
@@ -301,7 +303,7 @@
</el-col>
</el-row>
<el-row>
- <el-col :span="16">
+ <el-col :span="20">
<el-form-item label="专家本人意见">
<el-upload
action=""
@@ -319,7 +321,7 @@
</el-col>
</el-row>
<el-row>
- <el-col :span="16">
+ <el-col :span="20">
<el-form-item label="推荐单位意见">
<el-upload
action=""
@@ -337,7 +339,7 @@
</el-col>
</el-row>
<el-row>
- <el-col :span="16">
+ <el-col :span="20">
<el-form-item label="补充说明">
<el-input v-model="form.remark" type="textarea" :autosize="{ minRows: 2}"></el-input>
</el-form-item>
@@ -355,19 +357,42 @@
</template>
<script>
-import {expertsTree,addExpertInfo,uploadFile} from '@/api/system/form'
+import {getExpertTypes,addExpertInfo,uploadFile} from '@/api/system/form'
+import { verifySimplePhone, verifyIdCard } from "@/utils/validate";
export default {
name: "Index",
data() {
var validatePass = (rule, value, callback) => {
- console.log(this.form,this.fileList,'校验')
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',
form:{
name:'',
sex:'',
@@ -400,7 +425,8 @@
achievementKey: '',
personalOpinionKey: '',
recommendUnitOpinionKey: '',
- remark: ''
+ remark: '',
+ source: 1
},
expertsType: [],
directionList: [
@@ -439,10 +465,10 @@
sex:[{ required: true, message: '请选择性别', trigger: 'blur' }],
profession: [{ required: true, message: '请选择专业类别', trigger: 'blur' }],
birthday: [{ required: true, message: '请选择出生日期', trigger: 'blur' }],
- phone:[{ 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, message: '请填写身份证号', 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' }],
@@ -454,12 +480,13 @@
},
created() {
const t = this
+ const width = document.documentElement.clientWidth
+ if(width < 750){t.labelPosition = 'top'}
t.getExpertsType()
},
methods: {
async getExpertsType(){
- const res = await expertsTree()
- console.log(res)
+ const res = await getExpertTypes()
if(res.code == 200){
this.expertsType = res.data
}else{
@@ -599,12 +626,22 @@
}
})
},
+ changeSource(num){
+ this.form.source = num
+ }
}
};
</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;
diff --git a/src/views/index.vue b/src/views/index.vue
index e4e75e5..81ff001 100644
--- a/src/views/index.vue
+++ b/src/views/index.vue
@@ -1,87 +1,327 @@
<template>
- <div class="app-container home">
- <el-row :gutter="20">
- 666
+ <div class="app-container">
+ <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+ <el-form-item label="专业类别">
+ <el-cascader
+ v-model="classiFy"
+ :options="expertTypes"
+ :props="{ expandTrigger: 'hover', value: 'id',label: 'label'}"
+ @change="handleChange"></el-cascader>
+ </el-form-item>
+ <el-form-item label="在岗情况" prop="dutyStatus">
+ <el-select v-model="queryParams.dutyStatus" placeholder="岗位状态" clearable>
+ <el-option
+ v-for="dict in dict.type.expert_dudy_status"
+ :key="dict.value"
+ :label="dict.label"
+ :value="dict.value"
+ />
+ </el-select>
+ </el-form-item>
+ <el-form-item label="时间范围" prop="searchTime">
+ <el-date-picker
+ v-model="searchTime"
+ @change="changeTime"
+ type="daterange"
+ range-separator="至"
+ value-format="yyyy-MM-dd"
+ start-placeholder="开始日期"
+ end-placeholder="结束日期">
+ </el-date-picker>
+ </el-form-item>
+ <el-form-item>
+ <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+ <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+ </el-form-item>
+ </el-form>
+
+ <el-row :gutter="10" class="mb8">
+ <el-col :span="1.5">
+ <el-button
+ type="primary"
+ plain
+ icon="el-icon-plus"
+ size="mini"
+ @click="handleAdd"
+ v-hasPermi="['system:experts:add']"
+ >新增</el-button>
+ </el-col>
+<!-- <el-col :span="1.5">-->
+<!-- <el-button-->
+<!-- type="warning"-->
+<!-- plain-->
+<!-- icon="el-icon-download"-->
+<!-- size="mini"-->
+<!-- @click="handleExport"-->
+<!-- v-hasPermi="['system:experts:export']"-->
+<!-- >导出</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 type="index" width="55" align="center" />
+ <el-table-column label="姓名" align="center" prop="name" />
+ <el-table-column label="出生日期" align="center" prop="birthday" />
+ <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">
+ <template #default="scope">
+ {{findNodeById(expertTypes,scope.row.bigClassify)}}/{{findNodeById(expertTypes,scope.row.smallClassify)}}
+ </template>
+ </el-table-column>
+ <el-table-column label="联系电话" align="center" prop="phone"/>
+ <el-table-column label="申请时间" align="center" prop="createTime">
+ <template #default="scope">
+ {{scope.row.createTime.substring(0,10)}}
+ </template>
+ </el-table-column>
+
+ <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+ <template slot-scope="scope">
+ <el-button
+ size="mini"
+ type="text"
+ icon="el-icon-view"
+ @click="handleUpdate(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>
+ </template>
+ </el-table-column>
+ </el-table>
+ <pagination
+ v-show="total>0"
+ :total="total"
+ :page.sync="queryParams.pageIndex"
+ :limit.sync="queryParams.pageSize"
+ @pagination="getList"
+ />
+ <form-dialog ref="formDialog"></form-dialog>
+ <el-dialog title="新增信息" :visible.sync="addForm" width="75%" append-to-body>
+ <form-fill ref="formFill"></form-fill>
+ </el-dialog>
</div>
</template>
<script>
+import {getExpertsList, getExpertTypes, delExpert, getInfo} from "@/api/system/form";
+import formDialog from './components/formDialog'
+import formFill from './form'
export default {
- name: "Index",
+ name: "Experts",
+ dicts: ['expert_dudy_status'],
+ components: {formDialog,formFill},
data() {
return {
- // 版本号
- version: "3.8.6"
+ loading: true,
+ single: true,
+ multiple: true,
+ showSearch: true,
+ addForm: false,
+ total: 0,
+ expertTypes: [],
+ expertList: [],
+ queryParams: {
+ pageIndex: 1,
+ pageSize: 10,
+ bigClassify: null,
+ smallClassify: null,
+ dutyStatus: null,
+ startTime: '',
+ endTime: ''
+ },
+ classiFy: [],
+ searchTime: [],
+ form: {},
+ rules: {
+ classifyName: [
+ { required: true, message: "分类名称不能为空", trigger: "blur" }
+ ]
+ }
};
},
+ created() {
+ this.getList();
+ this.getTypes()
+ },
methods: {
+ async getList() {
+ this.loading = true;
+ const res = await getExpertsList(this.queryParams)
+ if(res.code == 200){
+ this.expertList = res.rows
+ this.total = res.total
+ }else{
+ this.$message({
+ type: 'warning',
+ message: res.msg
+ });
+ }
+ this.loading = false;
+ },
+ async getTypes() {
+ const res = await getExpertTypes()
+ if(res.code == 200){
+ this.expertTypes = res.data
+ }else{
+ this.$message({
+ type: 'warning',
+ message: res.msg
+ });
+ }
+ },
+
+ // 取消按钮
+ cancel() {
+ this.open = false;
+ this.reset();
+ },
+ handleChange(value) {
+ console.log(value);
+ },
+ changeTime(value){
+ console.log(value);
+ },
+ // 根据id查对象
+ findNodeById(data,value) {
+ for (const node of data) {
+ if (node.id === value) {
+ return node.label;
+ }
+ if (node.children) {
+ const foundNode = this.findNodeById(node.children, value);
+ if (foundNode) {
+ return foundNode;
+ }
+ }
+ }
+ return null;
+ },
+ handleQuery() {
+ this.queryParams.pageIndex = 1
+ if(this.classiFy.length>0){
+ this.queryParams.bigClassify = this.classiFy[0]
+ this.queryParams.smallClassify = this.classiFy[1]
+ }
+ if(this.searchTime.length>0){
+ this.queryParams.startTime = this.searchTime[0]
+ this.queryParams.endTime = this.searchTime[1]
+ }
+ this.getList();
+ },
+ resetQuery() {
+ const t = this
+ t.resetForm("queryForm");
+ t.classiFy = []
+ t.searchTime = []
+ t.handleQuery();
+ },
+
+ // 表单重置
+ reset() {
+ this.queryParams = {
+ parentId: 0,
+ classifyId: null,
+ classifyName: ''
+ };
+ this.resetForm("form");
+ },
+
+ handleExport() {
+ this.download('system/experts/export', {
+ ...this.queryParams
+ }, `post_${new Date().getTime()}.xlsx`)
+ },
+
+ /** 新增按钮操作 */
+ handleAdd() {
+ this.addForm = true
+ setTimeout(()=>{
+ this.$refs.formFill.changeSource(2)
+ },1000)
+ },
+ /** 修改按钮操作 */
+ handleUpdate(row) {
+ getInfo(row.expertId).then((res)=>{
+ if(res.code == 200){
+ this.$refs.formDialog.openDialog(res.data)
+ }else{
+ this.$message({
+ type: 'warning',
+ message: res.msg
+ });
+ }
+ })
+
+ },
+ /** 提交按钮 */
+ submitForm: function() {
+ this.$refs["form"].validate(valid => {
+ if (valid) {
+ if (this.title == '修改分类') {
+ updateType(this.form).then(res => {
+ if(res.code == 200){
+ this.$message({
+ type: 'success',
+ message: '修改成功'
+ });
+ this.open = false;
+ this.getList();
+ }else{
+ this.$message({
+ type: 'warning',
+ message: res.msg
+ });
+ }
+ });
+ } else {
+ const {classifyId,...data} = this.form
+ addType(data).then(res => {
+ if(res.code == 200){
+ this.$message({
+ type: 'success',
+ message: '添加成功'
+ });
+ this.open = false;
+ this.getList();
+ }else{
+ this.$message({
+ type: 'warning',
+ message: res.msg
+ });
+ }
+ });
+ }
+ }
+ });
+ },
+ /** 删除按钮操作 */
+ handleDelete(row) {
+ console.log(row,'row')
+ this.$modal.confirm('是否确认删除姓名为"' + row.name + '"的数据项?').then(function() {
+ return delExpert(row.expertId);
+ }).then((res) => {
+ if(res.code == 200){
+ this.getList();
+ this.$message({
+ type: 'success',
+ message: '删除成功'
+ });
+ }else{
+ this.$message({
+ type: 'warning',
+ message: res.msg
+ });
+ }
+ }).catch(() => {});
+ }
}
};
</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;
- }
- }
-}
-</style>
-
diff --git a/src/views/login.vue b/src/views/login.vue
index 609813a..9decda5 100644
--- a/src/views/login.vue
+++ b/src/views/login.vue
@@ -56,7 +56,7 @@
</el-form>
<!-- 底部 -->
<div class="el-login-footer">
- <span>Copyright © 2018-2023 ruoyi.vip All Rights Reserved.</span>
+ <span>技术支持:中国科学院</span>
</div>
</div>
</template>
@@ -72,8 +72,8 @@
return {
codeUrl: "",
loginForm: {
- username: "admin",
- password: "admin123",
+ username: "",
+ password: "",
rememberMe: false,
code: "",
uuid: ""
@@ -98,7 +98,8 @@
watch: {
$route: {
handler: function(route) {
- this.redirect = route.query && route.query.redirect;
+ // this.redirect = route.query && route.query.redirect;
+ this.redirect = '/main/index';
},
immediate: true
}
diff --git a/src/views/main/index.vue b/src/views/main/index.vue
new file mode 100644
index 0000000..1956d99
--- /dev/null
+++ b/src/views/main/index.vue
@@ -0,0 +1,327 @@
+<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="专业类别">
+ <el-cascader
+ v-model="classiFy"
+ :options="expertTypes"
+ :props="{ expandTrigger: 'hover', value: 'id',label: 'label'}"
+ @change="handleChange"></el-cascader>
+ </el-form-item>
+ <el-form-item label="在岗情况" prop="dutyStatus">
+ <el-select v-model="queryParams.dutyStatus" placeholder="岗位状态" clearable>
+ <el-option
+ v-for="dict in dict.type.expert_dudy_status"
+ :key="dict.value"
+ :label="dict.label"
+ :value="dict.value"
+ />
+ </el-select>
+ </el-form-item>
+ <el-form-item label="时间范围" prop="searchTime">
+ <el-date-picker
+ v-model="searchTime"
+ @change="changeTime"
+ type="daterange"
+ range-separator="至"
+ value-format="yyyy-MM-dd"
+ start-placeholder="开始日期"
+ end-placeholder="结束日期">
+ </el-date-picker>
+ </el-form-item>
+ <el-form-item>
+ <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+ <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+ </el-form-item>
+ </el-form>
+
+ <el-row :gutter="10" class="mb8">
+ <el-col :span="1.5">
+ <el-button
+ type="primary"
+ plain
+ icon="el-icon-plus"
+ size="mini"
+ @click="handleAdd"
+ v-hasPermi="['system:experts:add']"
+ >新增</el-button>
+ </el-col>
+<!-- <el-col :span="1.5">-->
+<!-- <el-button-->
+<!-- type="warning"-->
+<!-- plain-->
+<!-- icon="el-icon-download"-->
+<!-- size="mini"-->
+<!-- @click="handleExport"-->
+<!-- v-hasPermi="['system:experts:export']"-->
+<!-- >导出</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 type="index" width="55" align="center" />
+ <el-table-column label="姓名" align="center" prop="name" />
+ <el-table-column label="出生日期" align="center" prop="birthday" />
+ <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">
+ <template #default="scope">
+ {{findNodeById(expertTypes,scope.row.bigClassify)}}/{{findNodeById(expertTypes,scope.row.smallClassify)}}
+ </template>
+ </el-table-column>
+ <el-table-column label="联系电话" align="center" prop="phone"/>
+ <el-table-column label="申请时间" align="center" prop="createTime">
+ <template #default="scope">
+ {{scope.row.createTime.substring(0,10)}}
+ </template>
+ </el-table-column>
+
+ <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="handleUpdate(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>
+ </template>
+ </el-table-column>
+ </el-table>
+ <pagination
+ v-show="total>0"
+ :total="total"
+ :page.sync="queryParams.pageIndex"
+ :limit.sync="queryParams.pageSize"
+ @pagination="getList"
+ />
+ <form-dialog ref="formDialog"></form-dialog>
+ <el-dialog title="新增信息" :visible.sync="addForm" width="75%" append-to-body>
+ <form-fill ref="formFill"></form-fill>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import {getExpertsList, getExpertTypes, delExpert, getInfo} from "@/api/system/form";
+import formDialog from '../components/formDialog'
+import formFill from '../form'
+export default {
+ name: "Experts",
+ dicts: ['expert_dudy_status'],
+ components: {formDialog,formFill},
+ data() {
+ return {
+ loading: true,
+ single: true,
+ multiple: true,
+ showSearch: true,
+ addForm: false,
+ total: 0,
+ expertTypes: [],
+ expertList: [],
+ queryParams: {
+ pageIndex: 1,
+ pageSize: 10,
+ bigClassify: null,
+ smallClassify: null,
+ dutyStatus: null,
+ startTime: '',
+ endTime: ''
+ },
+ classiFy: [],
+ searchTime: [],
+ form: {},
+ rules: {
+ classifyName: [
+ { required: true, message: "分类名称不能为空", trigger: "blur" }
+ ]
+ }
+ };
+ },
+ created() {
+ this.getList();
+ this.getTypes()
+ },
+ methods: {
+ async getList() {
+ this.loading = true;
+ const res = await getExpertsList(this.queryParams)
+ if(res.code == 200){
+ this.expertList = res.rows
+ this.total = res.total
+ }else{
+ this.$message({
+ type: 'warning',
+ message: res.msg
+ });
+ }
+ this.loading = false;
+ },
+
+ async getTypes() {
+ const res = await getExpertTypes()
+ if(res.code == 200){
+ this.expertTypes = res.data
+ }else{
+ this.$message({
+ type: 'warning',
+ message: res.msg
+ });
+ }
+ },
+
+ // 取消按钮
+ cancel() {
+ this.open = false;
+ this.reset();
+ },
+ handleChange(value) {
+ console.log(value);
+ },
+ changeTime(value){
+ console.log(value);
+ },
+ // 根据id查对象
+ findNodeById(data,value) {
+ for (const node of data) {
+ if (node.id === value) {
+ return node.label;
+ }
+ if (node.children) {
+ const foundNode = this.findNodeById(node.children, value);
+ if (foundNode) {
+ return foundNode;
+ }
+ }
+ }
+ return null;
+ },
+ handleQuery() {
+ this.queryParams.pageIndex = 1
+ if(this.classiFy.length>0){
+ this.queryParams.bigClassify = this.classiFy[0]
+ this.queryParams.smallClassify = this.classiFy[1]
+ }
+ if(this.searchTime.length>0){
+ this.queryParams.startTime = this.searchTime[0]
+ this.queryParams.endTime = this.searchTime[1]
+ }
+ this.getList();
+ },
+ resetQuery() {
+ const t = this
+ t.resetForm("queryForm");
+ t.classiFy = []
+ t.searchTime = []
+ t.handleQuery();
+ },
+
+ // 表单重置
+ reset() {
+ this.queryParams = {
+ parentId: 0,
+ classifyId: null,
+ classifyName: ''
+ };
+ this.resetForm("form");
+ },
+
+ handleExport() {
+ this.download('system/experts/export', {
+ ...this.queryParams
+ }, `post_${new Date().getTime()}.xlsx`)
+ },
+
+ /** 新增按钮操作 */
+ handleAdd() {
+ this.addForm = true
+ setTimeout(()=>{
+ this.$refs.formFill.changeSource(2)
+ },1000)
+ },
+ /** 修改按钮操作 */
+ handleUpdate(row) {
+ getInfo(row.expertId).then((res)=>{
+ if(res.code == 200){
+ this.$refs.formDialog.openDialog(res.data)
+ }else{
+ this.$message({
+ type: 'warning',
+ message: res.msg
+ });
+ }
+ })
+
+ },
+ /** 提交按钮 */
+ submitForm: function() {
+ this.$refs["form"].validate(valid => {
+ if (valid) {
+ if (this.title == '修改分类') {
+ updateType(this.form).then(res => {
+ if(res.code == 200){
+ this.$message({
+ type: 'success',
+ message: '修改成功'
+ });
+ this.open = false;
+ this.getList();
+ }else{
+ this.$message({
+ type: 'warning',
+ message: res.msg
+ });
+ }
+ });
+ } else {
+ const {classifyId,...data} = this.form
+ addType(data).then(res => {
+ if(res.code == 200){
+ this.$message({
+ type: 'success',
+ message: '添加成功'
+ });
+ this.open = false;
+ this.getList();
+ }else{
+ this.$message({
+ type: 'warning',
+ message: res.msg
+ });
+ }
+ });
+ }
+ }
+ });
+ },
+ /** 删除按钮操作 */
+ handleDelete(row) {
+ const expertId = row.expertId;
+ this.$modal.confirm('是否确认删除姓名为"' + row.name + '"的数据项?').then(function() {
+ return delExpert(expertId);
+ }).then((res) => {
+ if(res.code == 200){
+ this.getList();
+ this.$message({
+ type: 'success',
+ message: '删除成功'
+ });
+ }else{
+ this.$message({
+ type: 'warning',
+ message: res.msg
+ });
+ }
+ }).catch(() => {});
+ }
+ }
+};
+</script>
diff --git a/src/views/system/experts/index.vue b/src/views/system/experts/index.vue
index 444bf63..b749fd4 100644
--- a/src/views/system/experts/index.vue
+++ b/src/views/system/experts/index.vue
@@ -1,38 +1,5 @@
<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="postCode">
- <el-input
- v-model="queryParams.postCode"
- placeholder="请输入岗位编码"
- clearable
- @keyup.enter.native="handleQuery"
- />
- </el-form-item>
- <el-form-item label="岗位名称" prop="postName">
- <el-input
- v-model="queryParams.postName"
- placeholder="请输入岗位名称"
- clearable
- @keyup.enter.native="handleQuery"
- />
- </el-form-item>
- <el-form-item label="状态" prop="status">
- <el-select v-model="queryParams.status" placeholder="岗位状态" clearable>
- <el-option
- v-for="dict in dict.type.sys_normal_disable"
- :key="dict.value"
- :label="dict.label"
- :value="dict.value"
- />
- </el-select>
- </el-form-item>
- <el-form-item>
- <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
- <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
- </el-form-item>
- </el-form>
-
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
@@ -44,57 +11,43 @@
v-hasPermi="['system:post:add']"
>新增</el-button>
</el-col>
- <el-col :span="1.5">
- <el-button
- type="success"
- plain
- icon="el-icon-edit"
- size="mini"
- :disabled="single"
- @click="handleUpdate"
- v-hasPermi="['system:post:edit']"
- >修改</el-button>
- </el-col>
- <el-col :span="1.5">
- <el-button
- type="danger"
- plain
- icon="el-icon-delete"
- size="mini"
- :disabled="multiple"
- @click="handleDelete"
- v-hasPermi="['system:post:remove']"
- >删除</el-button>
- </el-col>
- <el-col :span="1.5">
- <el-button
- type="warning"
- plain
- icon="el-icon-download"
- size="mini"
- @click="handleExport"
- v-hasPermi="['system:post:export']"
- >导出</el-button>
- </el-col>
- <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+<!-- <el-col :span="1.5">-->
+<!-- <el-button-->
+<!-- type="success"-->
+<!-- plain-->
+<!-- icon="el-icon-edit"-->
+<!-- size="mini"-->
+<!-- :disabled="single"-->
+<!-- @click="handleUpdate"-->
+<!-- v-hasPermi="['system:post:edit']"-->
+<!-- >修改</el-button>-->
+<!-- </el-col>-->
+<!-- <el-col :span="1.5">-->
+<!-- <el-button-->
+<!-- type="danger"-->
+<!-- plain-->
+<!-- icon="el-icon-delete"-->
+<!-- size="mini"-->
+<!-- :disabled="multiple"-->
+<!-- @click="handleDelete"-->
+<!-- v-hasPermi="['system:post:remove']"-->
+<!-- >删除</el-button>-->
+<!-- </el-col>-->
+<!-- <el-col :span="1.5">-->
+<!-- <el-button-->
+<!-- type="warning"-->
+<!-- plain-->
+<!-- icon="el-icon-download"-->
+<!-- size="mini"-->
+<!-- @click="handleExport"-->
+<!-- v-hasPermi="['system:post:export']"-->
+<!-- >导出</el-button>-->
+<!-- </el-col>-->
+<!-- <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>-->
</el-row>
- <el-table v-loading="loading" :data="postList" @selection-change="handleSelectionChange">
- <el-table-column type="selection" width="55" align="center" />
- <el-table-column label="岗位编号" align="center" prop="postId" />
- <el-table-column label="岗位编码" align="center" prop="postCode" />
- <el-table-column label="岗位名称" align="center" prop="postName" />
- <el-table-column label="岗位排序" align="center" prop="postSort" />
- <el-table-column label="状态" align="center" prop="status">
- <template slot-scope="scope">
- <dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/>
- </template>
- </el-table-column>
- <el-table-column label="创建时间" align="center" prop="createTime" width="180">
- <template slot-scope="scope">
- <span>{{ parseTime(scope.row.createTime) }}</span>
- </template>
- </el-table-column>
+ <el-table v-loading="loading" :data="expertList" row-key="id" :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
+ <el-table-column label="分类名称" align="center" prop="label" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
@@ -102,50 +55,30 @@
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
- v-hasPermi="['system:post:edit']"
+ v-hasPermi="['system:experts:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
- v-hasPermi="['system:post:remove']"
+ v-hasPermi="['system:experts:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>
- <pagination
- v-show="total>0"
- :total="total"
- :page.sync="queryParams.pageNum"
- :limit.sync="queryParams.pageSize"
- @pagination="getList"
- />
-
- <!-- 添加或修改岗位对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
- <el-form-item label="岗位名称" prop="postName">
- <el-input v-model="form.postName" placeholder="请输入岗位名称" />
+ <el-form-item label="父级" v-if="title == '添加分类'" prop="parentId">
+ <el-cascader
+ v-model="form.parentId"
+ :options="expertList"
+ :props="{ expandTrigger: 'hover', value: 'id',label: 'label',emitPath: false,checkStrictly: true }"
+ @change="handleChange"></el-cascader>
</el-form-item>
- <el-form-item label="岗位编码" prop="postCode">
- <el-input v-model="form.postCode" placeholder="请输入编码名称" />
- </el-form-item>
- <el-form-item label="岗位顺序" prop="postSort">
- <el-input-number v-model="form.postSort" controls-position="right" :min="0" />
- </el-form-item>
- <el-form-item label="岗位状态" prop="status">
- <el-radio-group v-model="form.status">
- <el-radio
- v-for="dict in dict.type.sys_normal_disable"
- :key="dict.value"
- :label="dict.value"
- >{{dict.label}}</el-radio>
- </el-radio-group>
- </el-form-item>
- <el-form-item label="备注" prop="remark">
- <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
+ <el-form-item label="分类名称" prop="classifyName">
+ <el-input v-model="form.classifyName" placeholder="请输入分类名称" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
@@ -157,17 +90,15 @@
</template>
<script>
-import { listPost, getPost, delPost, addPost, updatePost } from "@/api/system/post";
+import {getExpertTypes, delExpertType, addType, updateType} from "@/api/system/form";
export default {
- name: "Post",
+ name: "Experts",
dicts: ['sys_normal_disable'],
data() {
return {
// 遮罩层
loading: true,
- // 选中数组
- ids: [],
// 非单个禁用
single: true,
// 非多个禁用
@@ -177,31 +108,17 @@
// 总条数
total: 0,
// 岗位表格数据
- postList: [],
+ expertList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
- // 查询参数
- queryParams: {
- pageNum: 1,
- pageSize: 10,
- postCode: undefined,
- postName: undefined,
- status: undefined
- },
// 表单参数
form: {},
// 表单校验
rules: {
- postName: [
- { required: true, message: "岗位名称不能为空", trigger: "blur" }
- ],
- postCode: [
- { required: true, message: "岗位编码不能为空", trigger: "blur" }
- ],
- postSort: [
- { required: true, message: "岗位顺序不能为空", trigger: "blur" }
+ classifyName: [
+ { required: true, message: "分类名称不能为空", trigger: "blur" }
]
}
};
@@ -211,78 +128,89 @@
},
methods: {
/** 查询岗位列表 */
- getList() {
+ async getList() {
this.loading = true;
- listPost(this.queryParams).then(response => {
- this.postList = response.rows;
- this.total = response.total;
- this.loading = false;
- });
+ const res = await getExpertTypes()
+ if(res.code == 200){
+ this.expertList = res.data
+ }else{
+ this.$message({
+ type: 'warning',
+ message: res.msg
+ });
+ }
+ this.loading = false;
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
+ handleChange(value) {
+ console.log(value);
+ },
// 表单重置
reset() {
this.form = {
- postId: undefined,
- postCode: undefined,
- postName: undefined,
- postSort: 0,
- status: "0",
- remark: undefined
+ parentId: 0,
+ classifyId: null,
+ classifyName: ''
};
this.resetForm("form");
},
- /** 搜索按钮操作 */
- handleQuery() {
- this.queryParams.pageNum = 1;
- this.getList();
- },
- /** 重置按钮操作 */
- resetQuery() {
- this.resetForm("queryForm");
- this.handleQuery();
- },
- // 多选框选中数据
- handleSelectionChange(selection) {
- this.ids = selection.map(item => item.postId)
- this.single = selection.length!=1
- this.multiple = !selection.length
- },
+
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
- this.title = "添加岗位";
+ this.title = "添加分类";
},
/** 修改按钮操作 */
handleUpdate(row) {
+ console.log(row,'row')
this.reset();
- const postId = row.postId || this.ids
- getPost(postId).then(response => {
- this.form = response.data;
- this.open = true;
- this.title = "修改岗位";
- });
+ this.form.classifyId = row.id;
+ this.form.classifyName = row.label;
+ this.form.parentId = this.findParentNodeById(this.expertList,row.id)
+ this.open = true;
+ this.title = "修改分类";
},
/** 提交按钮 */
submitForm: function() {
this.$refs["form"].validate(valid => {
if (valid) {
- if (this.form.postId != undefined) {
- updatePost(this.form).then(response => {
- this.$modal.msgSuccess("修改成功");
- this.open = false;
- this.getList();
+ if (this.title == '修改分类') {
+ updateType(this.form).then(res => {
+ if(res.code == 200){
+ this.$message({
+ type: 'success',
+ message: '修改成功'
+ });
+ this.open = false;
+ this.getList();
+ }else{
+ this.$message({
+ type: 'warning',
+ message: res.msg
+ });
+ }
});
} else {
- addPost(this.form).then(response => {
- this.$modal.msgSuccess("新增成功");
- this.open = false;
- this.getList();
+ const {classifyId,...data} = this.form
+ addType(data).then(res => {
+ if(res.code == 200){
+ this.$message({
+ type: 'success',
+ message: '添加成功'
+ });
+ this.open = false;
+ this.getList();
+ }else{
+ this.$message({
+ type: 'warning',
+ message: res.msg
+ });
+ }
});
}
}
@@ -290,19 +218,44 @@
},
/** 删除按钮操作 */
handleDelete(row) {
- const postIds = row.postId || this.ids;
- this.$modal.confirm('是否确认删除岗位编号为"' + postIds + '"的数据项?').then(function() {
- return delPost(postIds);
- }).then(() => {
- this.getList();
- this.$modal.msgSuccess("删除成功");
+ const classifyId = row.id;
+ this.$modal.confirm('是否确认删除分类为"' + row.label + '"的数据项?').then(function() {
+ return delExpertType(classifyId);
+ }).then((res) => {
+ if(res.code == 200){
+ this.getList();
+ this.$message({
+ type: 'success',
+ message: '删除成功'
+ });
+ }else{
+ this.$message({
+ type: 'warning',
+ message: res.msg
+ });
+ }
}).catch(() => {});
},
- /** 导出按钮操作 */
- handleExport() {
- this.download('system/post/export', {
- ...this.queryParams
- }, `post_${new Date().getTime()}.xlsx`)
+
+ // 获取父级ID
+ findParentNodeById(data, value) {
+ for (const node of data) {
+ if (node.id === value) {
+ return null; // 已经是根节点,没有父级节点
+ }
+ if (node.children) {
+ for (const child of node.children) {
+ if (child.id === value) {
+ return node.id; // 返回当前节点的ID作为父级ID
+ }
+ }
+ const foundNode = this.findParentNodeById(node.children, value);
+ if (foundNode !== null) {
+ return foundNode; // 返回找到的父级ID
+ }
+ }
+ }
+ return null;
}
}
};
--
Gitblit v1.9.2